summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/common/address.c362
-rw-r--r--src/common/address.h56
-rw-r--r--src/common/aes.c2
-rw-r--r--src/common/backtrace.c1
-rw-r--r--src/common/compat.c421
-rw-r--r--src/common/compat.h79
-rw-r--r--src/common/compat_libevent.c88
-rw-r--r--src/common/compat_libevent.h7
-rw-r--r--src/common/compat_pthreads.c292
-rw-r--r--src/common/compat_threads.c306
-rw-r--r--src/common/compat_threads.h115
-rw-r--r--src/common/compat_winthreads.c196
-rw-r--r--src/common/container.c25
-rw-r--r--src/common/container.h18
-rw-r--r--src/common/crypto.c617
-rw-r--r--src/common/crypto.h14
-rw-r--r--src/common/crypto_format.c2
-rw-r--r--src/common/include.am50
-rw-r--r--src/common/log.c38
-rw-r--r--src/common/mempool.c628
-rw-r--r--src/common/mempool.h65
-rw-r--r--src/common/sandbox.c9
-rw-r--r--src/common/tortls.c64
-rw-r--r--src/common/util.c143
-rw-r--r--src/common/util.h19
-rw-r--r--src/common/util_codedigest.c13
-rw-r--r--src/common/workqueue.c495
-rw-r--r--src/common/workqueue.h48
-rw-r--r--src/config/geoip21844
-rw-r--r--src/config/geoip63255
-rw-r--r--src/ext/csiphash.c16
-rw-r--r--src/ext/eventdns.c2
-rw-r--r--src/ext/ht.h29
-rw-r--r--src/ext/tinytest.c2
-rw-r--r--src/or/addressmap.c50
-rw-r--r--src/or/addressmap.h7
-rw-r--r--src/or/buffers.c262
-rw-r--r--src/or/buffers.h7
-rw-r--r--src/or/channel.c11
-rw-r--r--src/or/channeltls.c3
-rw-r--r--src/or/circuitbuild.c128
-rw-r--r--src/or/circuitbuild.h8
-rw-r--r--src/or/circuitlist.c36
-rw-r--r--src/or/circuitstats.c2
-rw-r--r--src/or/circuituse.c24
-rw-r--r--src/or/command.c3
-rw-r--r--src/or/config.c762
-rw-r--r--src/or/config.h8
-rw-r--r--src/or/config_codedigest.c13
-rw-r--r--src/or/connection.c342
-rw-r--r--src/or/connection.h8
-rw-r--r--src/or/connection_edge.c542
-rw-r--r--src/or/connection_edge.h24
-rw-r--r--src/or/connection_or.c1
-rw-r--r--src/or/control.c934
-rw-r--r--src/or/control.h63
-rw-r--r--src/or/cpuworker.c766
-rw-r--r--src/or/cpuworker.h10
-rw-r--r--src/or/directory.c156
-rw-r--r--src/or/directory.h12
-rw-r--r--src/or/dirserv.c430
-rw-r--r--src/or/dirserv.h9
-rw-r--r--src/or/dirvote.c244
-rw-r--r--src/or/dirvote.h13
-rw-r--r--src/or/dns.c2
-rw-r--r--src/or/dnsserv.c20
-rw-r--r--src/or/entrynodes.c153
-rw-r--r--src/or/entrynodes.h16
-rw-r--r--src/or/geoip.c33
-rw-r--r--src/or/geoip.h1
-rw-r--r--src/or/include.am66
-rw-r--r--src/or/main.c359
-rw-r--r--src/or/main.h1
-rw-r--r--src/or/networkstatus.c31
-rw-r--r--src/or/nodelist.c195
-rw-r--r--src/or/onion.c43
-rw-r--r--src/or/onion.h7
-rw-r--r--src/or/onion_fast.c10
-rw-r--r--src/or/onion_fast.h3
-rw-r--r--src/or/onion_ntor.c19
-rw-r--r--src/or/onion_ntor.h3
-rw-r--r--src/or/onion_tap.c10
-rw-r--r--src/or/onion_tap.h3
-rw-r--r--src/or/or.h272
-rw-r--r--src/or/reasons.c2
-rw-r--r--src/or/relay.c83
-rw-r--r--src/or/relay.h5
-rw-r--r--src/or/rendclient.c446
-rw-r--r--src/or/rendclient.h7
-rw-r--r--src/or/rendcommon.c221
-rw-r--r--src/or/rendcommon.h12
-rw-r--r--src/or/rendmid.c14
-rw-r--r--src/or/rendservice.c625
-rw-r--r--src/or/rendservice.h23
-rw-r--r--src/or/rephist.c44
-rw-r--r--src/or/rephist.h4
-rw-r--r--src/or/router.c69
-rw-r--r--src/or/router.h1
-rw-r--r--src/or/routerlist.c485
-rw-r--r--src/or/routerlist.h10
-rw-r--r--src/or/routerparse.c112
-rw-r--r--src/or/routerparse.h8
-rw-r--r--src/or/scheduler.c2
-rw-r--r--src/or/scheduler.h2
-rw-r--r--src/or/status.c41
-rw-r--r--src/or/transports.c5
-rw-r--r--src/test/bench.c6
-rwxr-xr-xsrc/test/bt_test.py4
-rw-r--r--src/test/include.am122
-rwxr-xr-xsrc/test/ntor_ref.py2
-rw-r--r--src/test/test-memwipe.c207
-rwxr-xr-xsrc/test/test-network.sh2
-rw-r--r--src/test/test.c376
-rw-r--r--src/test/test.h4
-rw-r--r--src/test/test_address.c657
-rw-r--r--src/test/test_bt.sh.in9
-rw-r--r--src/test/test_bt_cl.c2
-rw-r--r--src/test/test_buffers.c18
-rw-r--r--src/test/test_cell_queue.c16
-rw-r--r--src/test/test_channel.c30
-rw-r--r--src/test/test_checkdir.c5
-rw-r--r--src/test/test_circuitmux.c7
-rwxr-xr-xsrc/test/test_cmdline_args.py292
-rw-r--r--src/test/test_config.c1785
-rw-r--r--src/test/test_controller.c163
-rw-r--r--src/test/test_controller_events.c99
-rw-r--r--src/test/test_crypto.c517
-rw-r--r--src/test/test_crypto_slow.c409
-rw-r--r--src/test/test_dir.c175
-rw-r--r--src/test/test_entryconn.c769
-rw-r--r--src/test/test_entrynodes.c86
-rw-r--r--src/test/test_guardfraction.c418
-rw-r--r--src/test/test_helpers.c86
-rw-r--r--src/test/test_helpers.h17
-rw-r--r--src/test/test_hs.c164
-rw-r--r--src/test/test_nodelist.c2
-rw-r--r--src/test/test_ntor.sh.in9
-rw-r--r--src/test/test_ntor_cl.c2
-rw-r--r--src/test/test_oom.c16
-rw-r--r--src/test/test_relay.c8
-rw-r--r--src/test/test_relaycell.c12
-rw-r--r--src/test/test_routerlist.c103
-rw-r--r--src/test/test_slow.c29
-rw-r--r--src/test/test_status.c93
-rw-r--r--src/test/test_threads.c316
-rw-r--r--src/test/test_util.c673
-rw-r--r--src/test/test_util_slow.c391
-rw-r--r--src/test/test_workqueue.c411
-rw-r--r--src/test/test_zero_length_keys.sh.in10
-rw-r--r--src/test/testing_common.c301
-rwxr-xr-xsrc/test/zero_length_keys.sh83
-rw-r--r--src/tools/include.am28
-rw-r--r--src/tools/tor-checkkey.c2
-rw-r--r--src/tools/tor-gencert.c14
-rw-r--r--src/tools/tor-resolve.c31
-rw-r--r--src/trunnel/include.am2
-rw-r--r--src/win32/orconfig.h2
157 files changed, 28813 insertions, 17839 deletions
diff --git a/src/common/address.c b/src/common/address.c
index 1c3777fa82..6bd107889a 100644
--- a/src/common/address.c
+++ b/src/common/address.c
@@ -8,24 +8,26 @@
* \brief Functions to use and manipulate the tor_addr_t structure.
**/
-#include "orconfig.h"
-#include "compat.h"
-#include "util.h"
-#include "address.h"
-#include "torlog.h"
-#include "container.h"
-#include "sandbox.h"
+#define ADDRESS_PRIVATE
#ifdef _WIN32
-#include <process.h>
-#include <windows.h>
-#include <winsock2.h>
/* For access to structs needed by GetAdaptersAddresses */
#undef _WIN32_WINNT
#define _WIN32_WINNT 0x0501
+#include <process.h>
+#include <winsock2.h>
+#include <windows.h>
#include <iphlpapi.h>
#endif
+#include "orconfig.h"
+#include "compat.h"
+#include "util.h"
+#include "address.h"
+#include "torlog.h"
+#include "container.h"
+#include "sandbox.h"
+
#ifdef HAVE_SYS_TIME_H
#include <sys/time.h>
#endif
@@ -131,7 +133,7 @@ tor_addr_make_af_unix(tor_addr_t *a)
}
/** Set the tor_addr_t in <b>a</b> to contain the socket address contained in
- * <b>sa</b>. */
+ * <b>sa</b>. Return 0 on success and -1 on failure. */
int
tor_addr_from_sockaddr(tor_addr_t *a, const struct sockaddr *sa,
uint16_t *port_out)
@@ -1225,26 +1227,17 @@ typedef ULONG (WINAPI *GetAdaptersAddresses_fn_t)(
ULONG, ULONG, PVOID, PIP_ADAPTER_ADDRESSES, PULONG);
#endif
-/** Try to ask our network interfaces what addresses they are bound to.
- * Return a new smartlist of tor_addr_t on success, and NULL on failure.
- * (An empty smartlist indicates that we successfully learned that we have no
- * addresses.) Log failure messages at <b>severity</b>. */
-static smartlist_t *
-get_interface_addresses_raw(int severity)
+#ifdef HAVE_IFADDRS_TO_SMARTLIST
+/*
+ * Convert a linked list consisting of <b>ifaddrs</b> structures
+ * into smartlist of <b>tor_addr_t</b> structures.
+ */
+STATIC smartlist_t *
+ifaddrs_to_smartlist(const struct ifaddrs *ifa)
{
-#if defined(HAVE_GETIFADDRS)
- /* Most free Unixy systems provide getifaddrs, which gives us a linked list
- * of struct ifaddrs. */
- struct ifaddrs *ifa = NULL;
+ smartlist_t *result = smartlist_new();
const struct ifaddrs *i;
- smartlist_t *result;
- if (getifaddrs(&ifa) < 0) {
- log_fn(severity, LD_NET, "Unable to call getifaddrs(): %s",
- strerror(errno));
- return NULL;
- }
- result = smartlist_new();
for (i = ifa; i; i = i->ifa_next) {
tor_addr_t tmp;
if ((i->ifa_flags & (IFF_UP | IFF_RUNNING)) != (IFF_UP | IFF_RUNNING))
@@ -1259,9 +1252,72 @@ get_interface_addresses_raw(int severity)
smartlist_add(result, tor_memdup(&tmp, sizeof(tmp)));
}
+ return result;
+}
+
+/** Use getiffaddrs() function to get list of current machine
+ * network interface addresses. Represent the result by smartlist of
+ * <b>tor_addr_t</b> structures.
+ */
+STATIC smartlist_t *
+get_interface_addresses_ifaddrs(int severity)
+{
+
+ /* Most free Unixy systems provide getifaddrs, which gives us a linked list
+ * of struct ifaddrs. */
+ struct ifaddrs *ifa = NULL;
+ smartlist_t *result;
+ if (getifaddrs(&ifa) < 0) {
+ log_fn(severity, LD_NET, "Unable to call getifaddrs(): %s",
+ strerror(errno));
+ return NULL;
+ }
+
+ result = ifaddrs_to_smartlist(ifa);
+
freeifaddrs(ifa);
+
+ return result;
+}
+#endif
+
+#ifdef HAVE_IP_ADAPTER_TO_SMARTLIST
+
+/** Convert a Windows-specific <b>addresses</b> linked list into smartlist
+ * of <b>tor_addr_t</b> structures.
+ */
+
+STATIC smartlist_t *
+ip_adapter_addresses_to_smartlist(const IP_ADAPTER_ADDRESSES *addresses)
+{
+ smartlist_t *result = smartlist_new();
+ const IP_ADAPTER_ADDRESSES *address;
+
+ for (address = addresses; address; address = address->Next) {
+ const IP_ADAPTER_UNICAST_ADDRESS *a;
+ for (a = address->FirstUnicastAddress; a; a = a->Next) {
+ /* Yes, it's a linked list inside a linked list */
+ const struct sockaddr *sa = a->Address.lpSockaddr;
+ tor_addr_t tmp;
+ if (sa->sa_family != AF_INET && sa->sa_family != AF_INET6)
+ continue;
+ if (tor_addr_from_sockaddr(&tmp, sa, NULL) < 0)
+ continue;
+ smartlist_add(result, tor_memdup(&tmp, sizeof(tmp)));
+ }
+ }
+
return result;
-#elif defined(_WIN32)
+}
+
+/** Windows only: use GetAdaptersInfo() function to retrieve network interface
+ * addresses of current machine and return them to caller as smartlist of
+ * <b>tor_addr_t</b> structures.
+ */
+STATIC smartlist_t *
+get_interface_addresses_win32(int severity)
+{
+
/* Windows XP began to provide GetAdaptersAddresses. Windows 2000 had a
"GetAdaptersInfo", but that's deprecated; let's just try
GetAdaptersAddresses and fall back to connect+getsockname.
@@ -1270,7 +1326,7 @@ get_interface_addresses_raw(int severity)
smartlist_t *result = NULL;
GetAdaptersAddresses_fn_t fn;
ULONG size, res;
- IP_ADAPTER_ADDRESSES *addresses = NULL, *address;
+ IP_ADAPTER_ADDRESSES *addresses = NULL;
(void) severity;
@@ -1305,67 +1361,130 @@ get_interface_addresses_raw(int severity)
goto done;
}
- result = smartlist_new();
- for (address = addresses; address; address = address->Next) {
- IP_ADAPTER_UNICAST_ADDRESS *a;
- for (a = address->FirstUnicastAddress; a; a = a->Next) {
- /* Yes, it's a linked list inside a linked list */
- struct sockaddr *sa = a->Address.lpSockaddr;
- tor_addr_t tmp;
- if (sa->sa_family != AF_INET && sa->sa_family != AF_INET6)
- continue;
- if (tor_addr_from_sockaddr(&tmp, sa, NULL) < 0)
- continue;
- smartlist_add(result, tor_memdup(&tmp, sizeof(tmp)));
- }
- }
+ result = ip_adapter_addresses_to_smartlist(addresses);
done:
if (lib)
FreeLibrary(lib);
tor_free(addresses);
return result;
-#elif defined(SIOCGIFCONF) && defined(HAVE_IOCTL)
+}
+
+#endif
+
+#ifdef HAVE_IFCONF_TO_SMARTLIST
+
+/* Guess how much space we need. There shouldn't be any struct ifreqs
+ * larger than this, even on OS X where the struct's size is dynamic. */
+#define IFREQ_SIZE 4096
+
+/* This is defined on Mac OS X */
+#ifndef _SIZEOF_ADDR_IFREQ
+#define _SIZEOF_ADDR_IFREQ sizeof
+#endif
+
+/** Convert <b>*buf</b>, an ifreq structure array of size <b>buflen</b>,
+ * into smartlist of <b>tor_addr_t</b> structures.
+ */
+STATIC smartlist_t *
+ifreq_to_smartlist(char *buf, size_t buflen)
+{
+ smartlist_t *result = smartlist_new();
+ char *end = buf + buflen;
+
+ /* These acrobatics are due to alignment issues which trigger
+ * undefined behaviour traps on OSX. */
+ struct ifreq *r = tor_malloc(IFREQ_SIZE);
+
+ while (buf < end) {
+ /* Copy up to IFREQ_SIZE bytes into the struct ifreq, but don't overrun
+ * buf. */
+ memcpy(r, buf, end - buf < IFREQ_SIZE ? end - buf : IFREQ_SIZE);
+
+ const struct sockaddr *sa = &r->ifr_addr;
+ tor_addr_t tmp;
+ int valid_sa_family = (sa->sa_family == AF_INET ||
+ sa->sa_family == AF_INET6);
+
+ int conversion_success = (tor_addr_from_sockaddr(&tmp, sa, NULL) == 0);
+
+ if (valid_sa_family && conversion_success)
+ smartlist_add(result, tor_memdup(&tmp, sizeof(tmp)));
+
+ buf += _SIZEOF_ADDR_IFREQ(*r);
+ }
+
+ tor_free(r);
+ return result;
+}
+
+/** Use ioctl(.,SIOCGIFCONF,.) to get a list of current machine
+ * network interface addresses. Represent the result by smartlist of
+ * <b>tor_addr_t</b> structures.
+ */
+STATIC smartlist_t *
+get_interface_addresses_ioctl(int severity)
+{
/* Some older unixy systems make us use ioctl(SIOCGIFCONF) */
struct ifconf ifc;
- int fd, i, sz, n;
+ int fd;
smartlist_t *result = NULL;
+
/* This interface, AFAICT, only supports AF_INET addresses */
fd = socket(AF_INET, SOCK_DGRAM, 0);
if (fd < 0) {
tor_log(severity, LD_NET, "socket failed: %s", strerror(errno));
goto done;
}
- /* Guess how much space we need. */
- ifc.ifc_len = sz = 15*1024;
- ifc.ifc_ifcu.ifcu_req = tor_malloc(sz);
- if (ioctl(fd, SIOCGIFCONF, &ifc) < 0) {
- tor_log(severity, LD_NET, "ioctl failed: %s", strerror(errno));
- close(fd);
- goto done;
- }
- close(fd);
- result = smartlist_new();
- if (ifc.ifc_len < sz)
- sz = ifc.ifc_len;
- n = sz / sizeof(struct ifreq);
- for (i = 0; i < n ; ++i) {
- struct ifreq *r = &ifc.ifc_ifcu.ifcu_req[i];
- struct sockaddr *sa = &r->ifr_addr;
- tor_addr_t tmp;
- if (sa->sa_family != AF_INET && sa->sa_family != AF_INET6)
- continue; /* should be impossible */
- if (tor_addr_from_sockaddr(&tmp, sa, NULL) < 0)
- continue;
- smartlist_add(result, tor_memdup(&tmp, sizeof(tmp)));
- }
+
+ int mult = 1;
+ ifc.ifc_buf = NULL;
+ do {
+ mult *= 2;
+ ifc.ifc_len = mult * IFREQ_SIZE;
+ ifc.ifc_buf = tor_realloc(ifc.ifc_buf, ifc.ifc_len);
+
+ tor_assert(ifc.ifc_buf);
+
+ if (ioctl(fd, SIOCGIFCONF, &ifc) < 0) {
+ tor_log(severity, LD_NET, "ioctl failed: %s", strerror(errno));
+ goto done;
+ }
+ /* Ensure we have least IFREQ_SIZE bytes unused at the end. Otherwise, we
+ * don't know if we got everything during ioctl. */
+ } while (mult * IFREQ_SIZE - ifc.ifc_len <= IFREQ_SIZE);
+ result = ifreq_to_smartlist(ifc.ifc_buf, ifc.ifc_len);
+
done:
- tor_free(ifc.ifc_ifcu.ifcu_req);
+ if (fd >= 0)
+ close(fd);
+ tor_free(ifc.ifc_buf);
return result;
-#else
+}
+#endif
+
+/** Try to ask our network interfaces what addresses they are bound to.
+ * Return a new smartlist of tor_addr_t on success, and NULL on failure.
+ * (An empty smartlist indicates that we successfully learned that we have no
+ * addresses.) Log failure messages at <b>severity</b>. */
+STATIC smartlist_t *
+get_interface_addresses_raw(int severity)
+{
+ smartlist_t *result = NULL;
+#if defined(HAVE_IFADDRS_TO_SMARTLIST)
+ if ((result = get_interface_addresses_ifaddrs(severity)))
+ return result;
+#endif
+#if defined(HAVE_IP_ADAPTER_TO_SMARTLIST)
+ if ((result = get_interface_addresses_win32(severity)))
+ return result;
+#endif
+#if defined(HAVE_IFCONF_TO_SMARTLIST)
+ if ((result = get_interface_addresses_ioctl(severity)))
+ return result;
+#endif
(void) severity;
return NULL;
-#endif
}
/** Return true iff <b>a</b> is a multicast address. */
@@ -1385,47 +1504,22 @@ tor_addr_is_multicast(const tor_addr_t *a)
return 0;
}
-/** Set *<b>addr</b> to the IP address (if any) of whatever interface
- * connects to the Internet. This address should only be used in checking
- * whether our address has changed. Return 0 on success, -1 on failure.
+/** Attempt to retrieve IP address of current host by utilizing some
+ * UDP socket trickery. Only look for address of given <b>family</b>.
+ * Set result to *<b>addr</b>. Return 0 on success, -1 on failure.
*/
-MOCK_IMPL(int,
-get_interface_address6,(int severity, sa_family_t family, tor_addr_t *addr))
+STATIC int
+get_interface_address6_via_udp_socket_hack(int severity,
+ sa_family_t family,
+ tor_addr_t *addr)
{
- /* XXX really, this function should yield a smartlist of addresses. */
- smartlist_t *addrs;
- int sock=-1, r=-1;
struct sockaddr_storage my_addr, target_addr;
+ int sock=-1, r=-1;
socklen_t addr_len;
- tor_assert(addr);
-
- /* Try to do this the smart way if possible. */
- if ((addrs = get_interface_addresses_raw(severity))) {
- int rv = -1;
- SMARTLIST_FOREACH_BEGIN(addrs, tor_addr_t *, a) {
- if (family != AF_UNSPEC && family != tor_addr_family(a))
- continue;
- if (tor_addr_is_loopback(a) ||
- tor_addr_is_multicast(a))
- continue;
-
- tor_addr_copy(addr, a);
- rv = 0;
-
- /* If we found a non-internal address, declare success. Otherwise,
- * keep looking. */
- if (!tor_addr_is_internal(a, 0))
- break;
- } SMARTLIST_FOREACH_END(a);
- SMARTLIST_FOREACH(addrs, tor_addr_t *, a, tor_free(a));
- smartlist_free(addrs);
- return rv;
- }
-
- /* Okay, the smart way is out. */
memset(addr, 0, sizeof(tor_addr_t));
memset(&target_addr, 0, sizeof(target_addr));
+
/* Don't worry: no packets are sent. We just need to use a real address
* on the actual Internet. */
if (family == AF_INET6) {
@@ -1447,6 +1541,7 @@ get_interface_address6,(int severity, sa_family_t family, tor_addr_t *addr))
} else {
return -1;
}
+
if (sock < 0) {
int e = tor_socket_errno(-1);
log_fn(severity, LD_NET, "unable to create socket: %s",
@@ -1454,27 +1549,74 @@ get_interface_address6,(int severity, sa_family_t family, tor_addr_t *addr))
goto err;
}
- if (connect(sock,(struct sockaddr *)&target_addr, addr_len) < 0) {
+ if (tor_connect_socket(sock,(struct sockaddr *)&target_addr,
+ addr_len) < 0) {
int e = tor_socket_errno(sock);
log_fn(severity, LD_NET, "connect() failed: %s", tor_socket_strerror(e));
goto err;
}
- if (getsockname(sock,(struct sockaddr*)&my_addr, &addr_len)) {
+ if (tor_getsockname(sock,(struct sockaddr*)&my_addr, &addr_len)) {
int e = tor_socket_errno(sock);
log_fn(severity, LD_NET, "getsockname() to determine interface failed: %s",
tor_socket_strerror(e));
goto err;
}
- tor_addr_from_sockaddr(addr, (struct sockaddr*)&my_addr, NULL);
- r=0;
+ if (tor_addr_from_sockaddr(addr, (struct sockaddr*)&my_addr, NULL) == 0) {
+ if (tor_addr_is_loopback(addr) || tor_addr_is_multicast(addr)) {
+ log_fn(severity, LD_NET, "Address that we determined via UDP socket"
+ " magic is unsuitable for public comms.");
+ } else {
+ r=0;
+ }
+ }
+
err:
if (sock >= 0)
tor_close_socket(sock);
return r;
}
+/** Set *<b>addr</b> to the IP address (if any) of whatever interface
+ * connects to the Internet. This address should only be used in checking
+ * whether our address has changed. Return 0 on success, -1 on failure.
+ */
+MOCK_IMPL(int,
+get_interface_address6,(int severity, sa_family_t family, tor_addr_t *addr))
+{
+ /* XXX really, this function should yield a smartlist of addresses. */
+ smartlist_t *addrs;
+ tor_assert(addr);
+
+ /* Try to do this the smart way if possible. */
+ if ((addrs = get_interface_addresses_raw(severity))) {
+ int rv = -1;
+ SMARTLIST_FOREACH_BEGIN(addrs, tor_addr_t *, a) {
+ if (family != AF_UNSPEC && family != tor_addr_family(a))
+ continue;
+ if (tor_addr_is_loopback(a) ||
+ tor_addr_is_multicast(a))
+ continue;
+
+ tor_addr_copy(addr, a);
+ rv = 0;
+
+ /* If we found a non-internal address, declare success. Otherwise,
+ * keep looking. */
+ if (!tor_addr_is_internal(a, 0))
+ break;
+ } SMARTLIST_FOREACH_END(a);
+
+ SMARTLIST_FOREACH(addrs, tor_addr_t *, a, tor_free(a));
+ smartlist_free(addrs);
+ return rv;
+ }
+
+ /* Okay, the smart way is out. */
+ return get_interface_address6_via_udp_socket_hack(severity,family,addr);
+}
+
/* ======
* IPv4 helpers
* XXXX024 IPv6 deprecate some of these.
diff --git a/src/common/address.h b/src/common/address.h
index d70bb9c508..cd80615f93 100644
--- a/src/common/address.h
+++ b/src/common/address.h
@@ -11,10 +11,41 @@
#ifndef TOR_ADDRESS_H
#define TOR_ADDRESS_H
+//#include <sys/sockio.h>
#include "orconfig.h"
#include "torint.h"
#include "compat.h"
+#ifdef ADDRESS_PRIVATE
+
+#if defined(HAVE_SYS_IOCTL_H)
+#include <sys/ioctl.h>
+#endif
+
+#ifdef HAVE_GETIFADDRS
+#define HAVE_IFADDRS_TO_SMARTLIST
+#endif
+
+#ifdef _WIN32
+#define HAVE_IP_ADAPTER_TO_SMARTLIST
+#endif
+
+#if defined(SIOCGIFCONF) && defined(HAVE_IOCTL)
+#define HAVE_IFCONF_TO_SMARTLIST
+#endif
+
+#if defined(HAVE_NET_IF_H)
+#include <net/if.h> // for struct ifconf
+#endif
+
+#if defined(HAVE_IFADDRS_TO_SMARTLIST)
+#include <ifaddrs.h>
+#endif
+
+// TODO win32 specific includes
+#include "container.h"
+#endif // ADDRESS_PRIVATE
+
/** The number of bits from an address to consider while doing a masked
* comparison. */
typedef uint8_t maskbits_t;
@@ -241,5 +272,30 @@ MOCK_DECL(int,get_interface_address,(int severity, uint32_t *addr));
tor_addr_port_t *tor_addr_port_new(const tor_addr_t *addr, uint16_t port);
+#ifdef ADDRESS_PRIVATE
+STATIC smartlist_t *get_interface_addresses_raw(int severity);
+STATIC int get_interface_address6_via_udp_socket_hack(int severity,
+ sa_family_t family,
+ tor_addr_t *addr);
+
+#ifdef HAVE_IFADDRS_TO_SMARTLIST
+STATIC smartlist_t *ifaddrs_to_smartlist(const struct ifaddrs *ifa);
+STATIC smartlist_t *get_interface_addresses_ifaddrs(int severity);
+#endif
+
+#ifdef HAVE_IP_ADAPTER_TO_SMARTLIST
+STATIC smartlist_t *ip_adapter_addresses_to_smartlist(
+ const IP_ADAPTER_ADDRESSES *addresses);
+STATIC smartlist_t *get_interface_addresses_win32(int severity);
+#endif
+
+#ifdef HAVE_IFCONF_TO_SMARTLIST
+STATIC smartlist_t *ifreq_to_smartlist(char *ifr,
+ size_t buflen);
+STATIC smartlist_t *get_interface_addresses_ioctl(int severity);
+#endif
+
+#endif // ADDRESS_PRIVATE
+
#endif
diff --git a/src/common/aes.c b/src/common/aes.c
index 7651f1d93a..95026ddf6e 100644
--- a/src/common/aes.c
+++ b/src/common/aes.c
@@ -331,7 +331,7 @@ static void
aes_set_key(aes_cnt_cipher_t *cipher, const char *key, int key_bits)
{
if (should_use_EVP) {
- const EVP_CIPHER *c;
+ const EVP_CIPHER *c = 0;
switch (key_bits) {
case 128: c = EVP_aes_128_ecb(); break;
case 192: c = EVP_aes_192_ecb(); break;
diff --git a/src/common/backtrace.c b/src/common/backtrace.c
index 1033c7e5de..a2d5378b20 100644
--- a/src/common/backtrace.c
+++ b/src/common/backtrace.c
@@ -80,6 +80,7 @@ clean_backtrace(void **stack, int depth, const ucontext_t *ctx)
#else
(void) depth;
(void) ctx;
+ (void) stack;
#endif
}
diff --git a/src/common/compat.c b/src/common/compat.c
index 6d36321193..8da7ef3f69 100644
--- a/src/common/compat.c
+++ b/src/common/compat.c
@@ -27,7 +27,6 @@
#include "compat.h"
#ifdef _WIN32
-#include <process.h>
#include <windows.h>
#include <sys/locking.h>
#endif
@@ -1157,12 +1156,20 @@ mark_socket_open(tor_socket_t s)
/** @} */
/** As socket(), but counts the number of open sockets. */
-tor_socket_t
-tor_open_socket(int domain, int type, int protocol)
+MOCK_IMPL(tor_socket_t,
+tor_open_socket,(int domain, int type, int protocol))
{
return tor_open_socket_with_extensions(domain, type, protocol, 1, 0);
}
+/** Mockable wrapper for connect(). */
+MOCK_IMPL(tor_socket_t,
+tor_connect_socket,(tor_socket_t socket,const struct sockaddr *address,
+ socklen_t address_len))
+{
+ return connect(socket,address,address_len);
+}
+
/** As socket(), but creates a nonblocking socket and
* counts the number of open sockets. */
tor_socket_t
@@ -1309,6 +1316,14 @@ get_n_open_sockets(void)
return n;
}
+/** Mockable wrapper for getsockname(). */
+MOCK_IMPL(int,
+tor_getsockname,(tor_socket_t socket, struct sockaddr *address,
+ socklen_t *address_len))
+{
+ return getsockname(socket, address, address_len);
+}
+
/** Turn <b>socket</b> into a nonblocking socket. Return 0 on success, -1
* on failure.
*/
@@ -1794,8 +1809,8 @@ tor_getpwnam(const char *username)
if ((pw = getpwnam(username))) {
tor_passwd_free(passwd_cached);
passwd_cached = tor_passwd_dup(pw);
- log_notice(LD_GENERAL, "Caching new entry %s for %s",
- passwd_cached->pw_name, username);
+ log_info(LD_GENERAL, "Caching new entry %s for %s",
+ passwd_cached->pw_name, username);
return pw;
}
@@ -2544,109 +2559,6 @@ get_uname(void)
* Process control
*/
-#if defined(USE_PTHREADS)
-/** Wraps a void (*)(void*) function and its argument so we can
- * invoke them in a way pthreads would expect.
- */
-typedef struct tor_pthread_data_t {
- void (*func)(void *);
- void *data;
-} tor_pthread_data_t;
-/** Given a tor_pthread_data_t <b>_data</b>, call _data-&gt;func(d-&gt;data)
- * and free _data. Used to make sure we can call functions the way pthread
- * expects. */
-static void *
-tor_pthread_helper_fn(void *_data)
-{
- tor_pthread_data_t *data = _data;
- void (*func)(void*);
- void *arg;
- /* mask signals to worker threads to avoid SIGPIPE, etc */
- sigset_t sigs;
- /* We're in a subthread; don't handle any signals here. */
- sigfillset(&sigs);
- pthread_sigmask(SIG_SETMASK, &sigs, NULL);
-
- func = data->func;
- arg = data->data;
- tor_free(_data);
- func(arg);
- return NULL;
-}
-/**
- * A pthread attribute to make threads start detached.
- */
-static pthread_attr_t attr_detached;
-/** True iff we've called tor_threads_init() */
-static int threads_initialized = 0;
-#endif
-
-/** Minimalist interface to run a void function in the background. On
- * Unix calls fork, on win32 calls beginthread. Returns -1 on failure.
- * func should not return, but rather should call spawn_exit.
- *
- * NOTE: if <b>data</b> is used, it should not be allocated on the stack,
- * since in a multithreaded environment, there is no way to be sure that
- * the caller's stack will still be around when the called function is
- * running.
- */
-int
-spawn_func(void (*func)(void *), void *data)
-{
-#if defined(USE_WIN32_THREADS)
- int rv;
- rv = (int)_beginthread(func, 0, data);
- if (rv == (int)-1)
- return -1;
- return 0;
-#elif defined(USE_PTHREADS)
- pthread_t thread;
- tor_pthread_data_t *d;
- if (PREDICT_UNLIKELY(!threads_initialized))
- tor_threads_init();
- d = tor_malloc(sizeof(tor_pthread_data_t));
- d->data = data;
- d->func = func;
- if (pthread_create(&thread,&attr_detached,tor_pthread_helper_fn,d))
- return -1;
- return 0;
-#else
- pid_t pid;
- pid = fork();
- if (pid<0)
- return -1;
- if (pid==0) {
- /* Child */
- func(data);
- tor_assert(0); /* Should never reach here. */
- return 0; /* suppress "control-reaches-end-of-non-void" warning. */
- } else {
- /* Parent */
- return 0;
- }
-#endif
-}
-
-/** End the current thread/process.
- */
-void
-spawn_exit(void)
-{
-#if defined(USE_WIN32_THREADS)
- _endthread();
- //we should never get here. my compiler thinks that _endthread returns, this
- //is an attempt to fool it.
- tor_assert(0);
- _exit(0);
-#elif defined(USE_PTHREADS)
- pthread_exit(NULL);
-#else
- /* http://www.erlenstar.demon.co.uk/unix/faq_2.html says we should
- * call _exit, not exit, from child processes. */
- _exit(0);
-#endif
-}
-
/** Implementation logic for compute_num_cpus(). */
static int
compute_num_cpus_impl(void)
@@ -2935,280 +2847,6 @@ tor_gmtime_r(const time_t *timep, struct tm *result)
}
#endif
-#if defined(USE_WIN32_THREADS)
-void
-tor_mutex_init(tor_mutex_t *m)
-{
- InitializeCriticalSection(&m->mutex);
-}
-void
-tor_mutex_uninit(tor_mutex_t *m)
-{
- DeleteCriticalSection(&m->mutex);
-}
-void
-tor_mutex_acquire(tor_mutex_t *m)
-{
- tor_assert(m);
- EnterCriticalSection(&m->mutex);
-}
-void
-tor_mutex_release(tor_mutex_t *m)
-{
- LeaveCriticalSection(&m->mutex);
-}
-unsigned long
-tor_get_thread_id(void)
-{
- return (unsigned long)GetCurrentThreadId();
-}
-#elif defined(USE_PTHREADS)
-/** A mutex attribute that we're going to use to tell pthreads that we want
- * "reentrant" mutexes (i.e., once we can re-lock if we're already holding
- * them.) */
-static pthread_mutexattr_t attr_reentrant;
-/** Initialize <b>mutex</b> so it can be locked. Every mutex must be set
- * up with tor_mutex_init() or tor_mutex_new(); not both. */
-void
-tor_mutex_init(tor_mutex_t *mutex)
-{
- int err;
- if (PREDICT_UNLIKELY(!threads_initialized))
- tor_threads_init();
- err = pthread_mutex_init(&mutex->mutex, &attr_reentrant);
- if (PREDICT_UNLIKELY(err)) {
- log_err(LD_GENERAL, "Error %d creating a mutex.", err);
- tor_fragile_assert();
- }
-}
-/** Wait until <b>m</b> is free, then acquire it. */
-void
-tor_mutex_acquire(tor_mutex_t *m)
-{
- int err;
- tor_assert(m);
- err = pthread_mutex_lock(&m->mutex);
- if (PREDICT_UNLIKELY(err)) {
- log_err(LD_GENERAL, "Error %d locking a mutex.", err);
- tor_fragile_assert();
- }
-}
-/** Release the lock <b>m</b> so another thread can have it. */
-void
-tor_mutex_release(tor_mutex_t *m)
-{
- int err;
- tor_assert(m);
- err = pthread_mutex_unlock(&m->mutex);
- if (PREDICT_UNLIKELY(err)) {
- log_err(LD_GENERAL, "Error %d unlocking a mutex.", err);
- tor_fragile_assert();
- }
-}
-/** Clean up the mutex <b>m</b> so that it no longer uses any system
- * resources. Does not free <b>m</b>. This function must only be called on
- * mutexes from tor_mutex_init(). */
-void
-tor_mutex_uninit(tor_mutex_t *m)
-{
- int err;
- tor_assert(m);
- err = pthread_mutex_destroy(&m->mutex);
- if (PREDICT_UNLIKELY(err)) {
- log_err(LD_GENERAL, "Error %d destroying a mutex.", err);
- tor_fragile_assert();
- }
-}
-/** Return an integer representing this thread. */
-unsigned long
-tor_get_thread_id(void)
-{
- union {
- pthread_t thr;
- unsigned long id;
- } r;
- r.thr = pthread_self();
- return r.id;
-}
-#endif
-
-/** Return a newly allocated, ready-for-use mutex. */
-tor_mutex_t *
-tor_mutex_new(void)
-{
- tor_mutex_t *m = tor_malloc_zero(sizeof(tor_mutex_t));
- tor_mutex_init(m);
- return m;
-}
-/** Release all storage and system resources held by <b>m</b>. */
-void
-tor_mutex_free(tor_mutex_t *m)
-{
- if (!m)
- return;
- tor_mutex_uninit(m);
- tor_free(m);
-}
-
-/* Conditions. */
-#ifdef USE_PTHREADS
-#if 0
-/** Cross-platform condition implementation. */
-struct tor_cond_t {
- pthread_cond_t cond;
-};
-/** Return a newly allocated condition, with nobody waiting on it. */
-tor_cond_t *
-tor_cond_new(void)
-{
- tor_cond_t *cond = tor_malloc_zero(sizeof(tor_cond_t));
- if (pthread_cond_init(&cond->cond, NULL)) {
- tor_free(cond);
- return NULL;
- }
- return cond;
-}
-/** Release all resources held by <b>cond</b>. */
-void
-tor_cond_free(tor_cond_t *cond)
-{
- if (!cond)
- return;
- if (pthread_cond_destroy(&cond->cond)) {
- log_warn(LD_GENERAL,"Error freeing condition: %s", strerror(errno));
- return;
- }
- tor_free(cond);
-}
-/** Wait until one of the tor_cond_signal functions is called on <b>cond</b>.
- * All waiters on the condition must wait holding the same <b>mutex</b>.
- * Returns 0 on success, negative on failure. */
-int
-tor_cond_wait(tor_cond_t *cond, tor_mutex_t *mutex)
-{
- return pthread_cond_wait(&cond->cond, &mutex->mutex) ? -1 : 0;
-}
-/** Wake up one of the waiters on <b>cond</b>. */
-void
-tor_cond_signal_one(tor_cond_t *cond)
-{
- pthread_cond_signal(&cond->cond);
-}
-/** Wake up all of the waiters on <b>cond</b>. */
-void
-tor_cond_signal_all(tor_cond_t *cond)
-{
- pthread_cond_broadcast(&cond->cond);
-}
-#endif
-/** Set up common structures for use by threading. */
-void
-tor_threads_init(void)
-{
- if (!threads_initialized) {
- pthread_mutexattr_init(&attr_reentrant);
- pthread_mutexattr_settype(&attr_reentrant, PTHREAD_MUTEX_RECURSIVE);
- tor_assert(0==pthread_attr_init(&attr_detached));
- tor_assert(0==pthread_attr_setdetachstate(&attr_detached, 1));
- threads_initialized = 1;
- set_main_thread();
- }
-}
-#elif defined(USE_WIN32_THREADS)
-#if 0
-static DWORD cond_event_tls_index;
-struct tor_cond_t {
- CRITICAL_SECTION mutex;
- smartlist_t *events;
-};
-tor_cond_t *
-tor_cond_new(void)
-{
- tor_cond_t *cond = tor_malloc_zero(sizeof(tor_cond_t));
- InitializeCriticalSection(&cond->mutex);
- cond->events = smartlist_new();
- return cond;
-}
-void
-tor_cond_free(tor_cond_t *cond)
-{
- if (!cond)
- return;
- DeleteCriticalSection(&cond->mutex);
- /* XXXX notify? */
- smartlist_free(cond->events);
- tor_free(cond);
-}
-int
-tor_cond_wait(tor_cond_t *cond, tor_mutex_t *mutex)
-{
- HANDLE event;
- int r;
- tor_assert(cond);
- tor_assert(mutex);
- event = TlsGetValue(cond_event_tls_index);
- if (!event) {
- event = CreateEvent(0, FALSE, FALSE, NULL);
- TlsSetValue(cond_event_tls_index, event);
- }
- EnterCriticalSection(&cond->mutex);
-
- tor_assert(WaitForSingleObject(event, 0) == WAIT_TIMEOUT);
- tor_assert(!smartlist_contains(cond->events, event));
- smartlist_add(cond->events, event);
-
- LeaveCriticalSection(&cond->mutex);
-
- tor_mutex_release(mutex);
- r = WaitForSingleObject(event, INFINITE);
- tor_mutex_acquire(mutex);
-
- switch (r) {
- case WAIT_OBJECT_0: /* we got the mutex normally. */
- break;
- case WAIT_ABANDONED: /* holding thread exited. */
- case WAIT_TIMEOUT: /* Should never happen. */
- tor_assert(0);
- break;
- case WAIT_FAILED:
- log_warn(LD_GENERAL, "Failed to acquire mutex: %d",(int) GetLastError());
- }
- return 0;
-}
-void
-tor_cond_signal_one(tor_cond_t *cond)
-{
- HANDLE event;
- tor_assert(cond);
-
- EnterCriticalSection(&cond->mutex);
-
- if ((event = smartlist_pop_last(cond->events)))
- SetEvent(event);
-
- LeaveCriticalSection(&cond->mutex);
-}
-void
-tor_cond_signal_all(tor_cond_t *cond)
-{
- tor_assert(cond);
-
- EnterCriticalSection(&cond->mutex);
- SMARTLIST_FOREACH(cond->events, HANDLE, event, SetEvent(event));
- smartlist_clear(cond->events);
- LeaveCriticalSection(&cond->mutex);
-}
-#endif
-void
-tor_threads_init(void)
-{
-#if 0
- cond_event_tls_index = TlsAlloc();
-#endif
- set_main_thread();
-}
-#endif
-
#if defined(HAVE_MLOCKALL) && HAVE_DECL_MLOCKALL && defined(RLIMIT_MEMLOCK)
/** Attempt to raise the current and max rlimit to infinity for our process.
* This only needs to be done once and can probably only be done when we have
@@ -3292,23 +2930,6 @@ tor_mlockall(void)
#endif
}
-/** Identity of the "main" thread */
-static unsigned long main_thread_id = -1;
-
-/** Start considering the current thread to be the 'main thread'. This has
- * no effect on anything besides in_main_thread(). */
-void
-set_main_thread(void)
-{
- main_thread_id = tor_get_thread_id();
-}
-/** Return true iff called from the main thread. */
-int
-in_main_thread(void)
-{
- return main_thread_id == tor_get_thread_id();
-}
-
/**
* On Windows, WSAEWOULDBLOCK is not always correct: when you see it,
* you need to ask the socket for its actual errno. Also, you need to
@@ -3556,7 +3177,7 @@ get_total_system_memory_impl(void)
size_t len = sizeof(memsize);
int mib[2] = {CTL_HW, HW_USERMEM};
if (sysctl(mib,2,&memsize,&len,NULL,0))
- return -1;
+ return 0;
return memsize;
diff --git a/src/common/compat.h b/src/common/compat.h
index 04e8cb267c..5189b7e056 100644
--- a/src/common/compat.h
+++ b/src/common/compat.h
@@ -36,9 +36,6 @@
#ifdef HAVE_STRING_H
#include <string.h>
#endif
-#if defined(HAVE_PTHREAD_H) && !defined(_WIN32)
-#include <pthread.h>
-#endif
#include <stdarg.h>
#ifdef HAVE_SYS_RESOURCE_H
#include <sys/resource.h>
@@ -218,6 +215,18 @@ extern INLINE double U64_TO_DBL(uint64_t x) {
#define strncasecmp _strnicmp
#define strcasecmp _stricmp
#endif
+
+#if defined __APPLE__
+/* On OSX 10.9 and later, the overlap-checking code for strlcat would
+ * appear to have a severe bug that can sometimes cause aborts in Tor.
+ * Instead, use the non-checking variants. This is sad.
+ *
+ * See https://trac.torproject.org/projects/tor/ticket/15205
+ */
+#undef strlcat
+#undef strlcpy
+#endif
+
#ifndef HAVE_STRLCAT
size_t strlcat(char *dst, const char *src, size_t siz) ATTR_NONNULL((1,2));
#endif
@@ -454,7 +463,8 @@ int tor_close_socket(tor_socket_t s);
tor_socket_t tor_open_socket_with_extensions(
int domain, int type, int protocol,
int cloexec, int nonblock);
-tor_socket_t tor_open_socket(int domain, int type, int protocol);
+MOCK_DECL(tor_socket_t,
+tor_open_socket,(int domain, int type, int protocol));
tor_socket_t tor_open_socket_nonblocking(int domain, int type, int protocol);
tor_socket_t tor_accept_socket(tor_socket_t sockfd, struct sockaddr *addr,
socklen_t *len);
@@ -465,8 +475,15 @@ tor_socket_t tor_accept_socket_with_extensions(tor_socket_t sockfd,
struct sockaddr *addr,
socklen_t *len,
int cloexec, int nonblock);
+MOCK_DECL(tor_socket_t,
+tor_connect_socket,(tor_socket_t socket,const struct sockaddr *address,
+ socklen_t address_len));
int get_n_open_sockets(void);
+MOCK_DECL(int,
+tor_getsockname,(tor_socket_t socket, struct sockaddr *address,
+ socklen_t *address_len));
+
#define tor_socket_send(s, buf, len, flags) send(s, buf, len, flags)
#define tor_socket_recv(s, buf, len, flags) recv(s, buf, len, flags)
@@ -642,61 +659,10 @@ char **get_environment(void);
int get_total_system_memory(size_t *mem_out);
-int spawn_func(void (*func)(void *), void *data);
-void spawn_exit(void) ATTR_NORETURN;
-
-#if defined(_WIN32)
-#define USE_WIN32_THREADS
-#elif defined(HAVE_PTHREAD_H) && defined(HAVE_PTHREAD_CREATE)
-#define USE_PTHREADS
-#else
-#error "No threading system was found"
-#endif
-
int compute_num_cpus(void);
-/* Because we use threads instead of processes on most platforms (Windows,
- * Linux, etc), we need locking for them. On platforms with poor thread
- * support or broken gethostbyname_r, these functions are no-ops. */
-
-/** A generic lock structure for multithreaded builds. */
-typedef struct tor_mutex_t {
-#if defined(USE_WIN32_THREADS)
- /** Windows-only: on windows, we implement locks with CRITICAL_SECTIONS. */
- CRITICAL_SECTION mutex;
-#elif defined(USE_PTHREADS)
- /** Pthreads-only: with pthreads, we implement locks with
- * pthread_mutex_t. */
- pthread_mutex_t mutex;
-#else
- /** No-threads only: Dummy variable so that tor_mutex_t takes up space. */
- int _unused;
-#endif
-} tor_mutex_t;
-
int tor_mlockall(void);
-tor_mutex_t *tor_mutex_new(void);
-void tor_mutex_init(tor_mutex_t *m);
-void tor_mutex_acquire(tor_mutex_t *m);
-void tor_mutex_release(tor_mutex_t *m);
-void tor_mutex_free(tor_mutex_t *m);
-void tor_mutex_uninit(tor_mutex_t *m);
-unsigned long tor_get_thread_id(void);
-void tor_threads_init(void);
-
-void set_main_thread(void);
-int in_main_thread(void);
-
-#if 0
-typedef struct tor_cond_t tor_cond_t;
-tor_cond_t *tor_cond_new(void);
-void tor_cond_free(tor_cond_t *cond);
-int tor_cond_wait(tor_cond_t *cond, tor_mutex_t *mutex);
-void tor_cond_signal_one(tor_cond_t *cond);
-void tor_cond_signal_all(tor_cond_t *cond);
-#endif
-
/** Macros for MIN/MAX. Never use these when the arguments could have
* side-effects.
* {With GCC extensions we could probably define a safer MIN/MAX. But
@@ -742,5 +708,8 @@ STATIC int tor_ersatz_socketpair(int family, int type, int protocol,
#endif
#endif
+/* This needs some of the declarations above so we include it here. */
+#include "compat_threads.h"
+
#endif
diff --git a/src/common/compat_libevent.c b/src/common/compat_libevent.c
index 15308dd4cb..a366b6c9c6 100644
--- a/src/common/compat_libevent.c
+++ b/src/common/compat_libevent.c
@@ -56,11 +56,6 @@ typedef uint32_t le_version_t;
* it is. */
#define LE_OTHER V(0,0,99)
-#if 0
-static le_version_t tor_get_libevent_version(const char **v_out);
-#endif
-
-#if defined(HAVE_EVENT_SET_LOG_CALLBACK) || defined(RUNNING_DOXYGEN)
/** A string which, if it appears in a libevent log, should be ignored. */
static const char *suppress_msg = NULL;
/** Callback function passed to event_set_log() so we can intercept
@@ -107,17 +102,6 @@ suppress_libevent_log_msg(const char *msg)
{
suppress_msg = msg;
}
-#else
-void
-configure_libevent_logging(void)
-{
-}
-void
-suppress_libevent_log_msg(const char *msg)
-{
- (void)msg;
-}
-#endif
#ifndef HAVE_EVENT2_EVENT_H
/** Work-alike replacement for event_new() on pre-Libevent-2.0 systems. */
@@ -275,19 +259,11 @@ tor_libevent_initialize(tor_libevent_cfg *torcfg)
exit(1);
}
-#if defined(HAVE_EVENT_GET_VERSION) && defined(HAVE_EVENT_GET_METHOD)
/* Making this a NOTICE for now so we can link bugs to a libevent versions
* or methods better. */
log_info(LD_GENERAL,
"Initialized libevent version %s using method %s. Good.",
event_get_version(), tor_libevent_get_method());
-#else
- log_notice(LD_GENERAL,
- "Initialized old libevent (version 1.0b or earlier).");
- log_warn(LD_GENERAL,
- "You have a *VERY* old version of libevent. It is likely to be buggy; "
- "please build Tor with a more recent version.");
-#endif
#ifdef USE_BUFFEREVENTS
tor_libevent_set_tick_timeout(torcfg->msec_per_tick);
@@ -301,27 +277,14 @@ tor_libevent_get_base, (void))
return the_event_base;
}
-#ifndef HAVE_EVENT_BASE_LOOPEXIT
-/** Replacement for event_base_loopexit on some very old versions of Libevent
- * that we are not yet brave enough to deprecate. */
-int
-tor_event_base_loopexit(struct event_base *base, struct timeval *tv)
-{
- tor_assert(base == the_event_base);
- return event_loopexit(tv);
-}
-#endif
-
/** Return the name of the Libevent backend we're using. */
const char *
tor_libevent_get_method(void)
{
#ifdef HAVE_EVENT2_EVENT_H
return event_base_get_method(the_event_base);
-#elif defined(HAVE_EVENT_GET_METHOD)
- return event_get_method();
#else
- return "<unknown>";
+ return event_get_method();
#endif
}
@@ -376,54 +339,12 @@ le_versions_compatibility(le_version_t v)
return 5;
}
-#if 0
-/** Return the version number of the currently running version of Libevent.
- * See le_version_t for info on the format.
- */
-static le_version_t
-tor_get_libevent_version(const char **v_out)
-{
- const char *v;
- le_version_t r;
-#if defined(HAVE_EVENT_GET_VERSION_NUMBER)
- v = event_get_version();
- r = event_get_version_number();
-#elif defined (HAVE_EVENT_GET_VERSION)
- v = event_get_version();
- r = tor_decode_libevent_version(v);
-#else
- v = "pre-1.0c";
- r = LE_OLD;
-#endif
- if (v_out)
- *v_out = v;
- return r;
-}
-#endif
-
/** Return a string representation of the version of the currently running
* version of Libevent. */
const char *
tor_libevent_get_version_str(void)
{
-#ifdef HAVE_EVENT_GET_VERSION
return event_get_version();
-#else
- return "pre-1.0c";
-#endif
-}
-
-/**
- * Compare the current Libevent method and version to a list of versions
- * which are known not to work. Warn the user as appropriate.
- */
-void
-tor_check_libevent_version(const char *m, int server,
- const char **badness_out)
-{
- (void) m;
- (void) server;
- *badness_out = NULL;
}
#if defined(LIBEVENT_VERSION)
@@ -452,7 +373,7 @@ tor_check_libevent_header_compatibility(void)
/* In libevent versions before 2.0, it's hard to keep binary compatibility
* between upgrades, and unpleasant to detect when the version we compiled
* against is unlike the version we have linked against. Here's how. */
-#if defined(HEADER_VERSION) && defined(HAVE_EVENT_GET_VERSION)
+#if defined(HEADER_VERSION)
/* We have a header-file version and a function-call version. Easy. */
if (strcmp(HEADER_VERSION, event_get_version())) {
le_version_t v1, v2;
@@ -474,7 +395,7 @@ tor_check_libevent_header_compatibility(void)
else
log_info(LD_GENERAL, "I think these versions are binary-compatible.");
}
-#elif defined(HAVE_EVENT_GET_VERSION)
+#else
/* event_get_version but no _EVENT_VERSION. We might be in 1.4.0-beta or
earlier, where that's normal. To see whether we were compiled with an
earlier version, let's see whether the struct event defines MIN_HEAP_IDX.
@@ -504,9 +425,6 @@ tor_check_libevent_header_compatibility(void)
}
#endif
-#elif defined(HEADER_VERSION)
-#warn "_EVENT_VERSION is defined but not get_event_version(): Libevent is odd."
-#else
/* Your libevent is ancient. */
#endif
}
diff --git a/src/common/compat_libevent.h b/src/common/compat_libevent.h
index 6bbfae0056..39181efb7b 100644
--- a/src/common/compat_libevent.h
+++ b/src/common/compat_libevent.h
@@ -52,12 +52,7 @@ periodic_timer_t *periodic_timer_new(struct event_base *base,
void *data);
void periodic_timer_free(periodic_timer_t *);
-#ifdef HAVE_EVENT_BASE_LOOPEXIT
#define tor_event_base_loopexit event_base_loopexit
-#else
-struct timeval;
-int tor_event_base_loopexit(struct event_base *base, struct timeval *tv);
-#endif
/** Defines a configuration for using libevent with Tor: passed as an argument
* to tor_libevent_initialize() to describe how we want to set up. */
@@ -74,8 +69,6 @@ typedef struct tor_libevent_cfg {
void tor_libevent_initialize(tor_libevent_cfg *cfg);
MOCK_DECL(struct event_base *, tor_libevent_get_base, (void));
const char *tor_libevent_get_method(void);
-void tor_check_libevent_version(const char *m, int server,
- const char **badness_out);
void tor_check_libevent_header_compatibility(void);
const char *tor_libevent_get_version_str(void);
const char *tor_libevent_get_header_version_str(void);
diff --git a/src/common/compat_pthreads.c b/src/common/compat_pthreads.c
new file mode 100644
index 0000000000..fdc504690b
--- /dev/null
+++ b/src/common/compat_pthreads.c
@@ -0,0 +1,292 @@
+/* Copyright (c) 2003-2004, Roger Dingledine
+ * Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
+ * Copyright (c) 2007-2015, The Tor Project, Inc. */
+/* See LICENSE for licensing information */
+
+#define _GNU_SOURCE
+
+#include "orconfig.h"
+#include <pthread.h>
+#include <signal.h>
+#include <time.h>
+
+#include "compat.h"
+#include "torlog.h"
+#include "util.h"
+
+/** Wraps a void (*)(void*) function and its argument so we can
+ * invoke them in a way pthreads would expect.
+ */
+typedef struct tor_pthread_data_t {
+ void (*func)(void *);
+ void *data;
+} tor_pthread_data_t;
+/** Given a tor_pthread_data_t <b>_data</b>, call _data-&gt;func(d-&gt;data)
+ * and free _data. Used to make sure we can call functions the way pthread
+ * expects. */
+static void *
+tor_pthread_helper_fn(void *_data)
+{
+ tor_pthread_data_t *data = _data;
+ void (*func)(void*);
+ void *arg;
+ /* mask signals to worker threads to avoid SIGPIPE, etc */
+ sigset_t sigs;
+ /* We're in a subthread; don't handle any signals here. */
+ sigfillset(&sigs);
+ pthread_sigmask(SIG_SETMASK, &sigs, NULL);
+
+ func = data->func;
+ arg = data->data;
+ tor_free(_data);
+ func(arg);
+ return NULL;
+}
+/**
+ * A pthread attribute to make threads start detached.
+ */
+static pthread_attr_t attr_detached;
+/** True iff we've called tor_threads_init() */
+static int threads_initialized = 0;
+
+/** Minimalist interface to run a void function in the background. On
+ * Unix calls fork, on win32 calls beginthread. Returns -1 on failure.
+ * func should not return, but rather should call spawn_exit.
+ *
+ * NOTE: if <b>data</b> is used, it should not be allocated on the stack,
+ * since in a multithreaded environment, there is no way to be sure that
+ * the caller's stack will still be around when the called function is
+ * running.
+ */
+int
+spawn_func(void (*func)(void *), void *data)
+{
+ pthread_t thread;
+ tor_pthread_data_t *d;
+ if (PREDICT_UNLIKELY(!threads_initialized))
+ tor_threads_init();
+ d = tor_malloc(sizeof(tor_pthread_data_t));
+ d->data = data;
+ d->func = func;
+ if (pthread_create(&thread,&attr_detached,tor_pthread_helper_fn,d))
+ return -1;
+ return 0;
+}
+
+/** End the current thread/process.
+ */
+void
+spawn_exit(void)
+{
+ pthread_exit(NULL);
+}
+
+/** A mutex attribute that we're going to use to tell pthreads that we want
+ * "recursive" mutexes (i.e., once we can re-lock if we're already holding
+ * them.) */
+static pthread_mutexattr_t attr_recursive;
+
+/** Initialize <b>mutex</b> so it can be locked. Every mutex must be set
+ * up with tor_mutex_init() or tor_mutex_new(); not both. */
+void
+tor_mutex_init(tor_mutex_t *mutex)
+{
+ if (PREDICT_UNLIKELY(!threads_initialized))
+ tor_threads_init();
+ const int err = pthread_mutex_init(&mutex->mutex, &attr_recursive);
+ if (PREDICT_UNLIKELY(err)) {
+ log_err(LD_GENERAL, "Error %d creating a mutex.", err);
+ tor_fragile_assert();
+ }
+}
+
+/** As tor_mutex_init, but initialize a mutex suitable that may be
+ * non-recursive, if the OS supports that. */
+void
+tor_mutex_init_nonrecursive(tor_mutex_t *mutex)
+{
+ int err;
+ if (PREDICT_UNLIKELY(!threads_initialized))
+ tor_threads_init();
+ err = pthread_mutex_init(&mutex->mutex, NULL);
+ if (PREDICT_UNLIKELY(err)) {
+ log_err(LD_GENERAL, "Error %d creating a mutex.", err);
+ tor_fragile_assert();
+ }
+}
+
+/** Wait until <b>m</b> is free, then acquire it. */
+void
+tor_mutex_acquire(tor_mutex_t *m)
+{
+ int err;
+ tor_assert(m);
+ err = pthread_mutex_lock(&m->mutex);
+ if (PREDICT_UNLIKELY(err)) {
+ log_err(LD_GENERAL, "Error %d locking a mutex.", err);
+ tor_fragile_assert();
+ }
+}
+/** Release the lock <b>m</b> so another thread can have it. */
+void
+tor_mutex_release(tor_mutex_t *m)
+{
+ int err;
+ tor_assert(m);
+ err = pthread_mutex_unlock(&m->mutex);
+ if (PREDICT_UNLIKELY(err)) {
+ log_err(LD_GENERAL, "Error %d unlocking a mutex.", err);
+ tor_fragile_assert();
+ }
+}
+/** Clean up the mutex <b>m</b> so that it no longer uses any system
+ * resources. Does not free <b>m</b>. This function must only be called on
+ * mutexes from tor_mutex_init(). */
+void
+tor_mutex_uninit(tor_mutex_t *m)
+{
+ int err;
+ tor_assert(m);
+ err = pthread_mutex_destroy(&m->mutex);
+ if (PREDICT_UNLIKELY(err)) {
+ log_err(LD_GENERAL, "Error %d destroying a mutex.", err);
+ tor_fragile_assert();
+ }
+}
+/** Return an integer representing this thread. */
+unsigned long
+tor_get_thread_id(void)
+{
+ union {
+ pthread_t thr;
+ unsigned long id;
+ } r;
+ r.thr = pthread_self();
+ return r.id;
+}
+
+/* Conditions. */
+
+/** Initialize an already-allocated condition variable. */
+int
+tor_cond_init(tor_cond_t *cond)
+{
+ pthread_condattr_t condattr;
+
+ memset(cond, 0, sizeof(tor_cond_t));
+ /* Default condition attribute. Might be used if clock monotonic is
+ * available else this won't affect anything. */
+ if (pthread_condattr_init(&condattr)) {
+ return -1;
+ }
+
+#if defined(HAVE_CLOCK_GETTIME) && defined(CLOCK_MONOTONIC)
+ /* Use monotonic time so when we timedwait() on it, any clock adjustment
+ * won't affect the timeout value. */
+ if (pthread_condattr_setclock(&condattr, CLOCK_MONOTONIC)) {
+ return -1;
+ }
+#endif
+ if (pthread_cond_init(&cond->cond, &condattr)) {
+ return -1;
+ }
+ return 0;
+}
+
+/** Release all resources held by <b>cond</b>, but do not free <b>cond</b>
+ * itself. */
+void
+tor_cond_uninit(tor_cond_t *cond)
+{
+ if (pthread_cond_destroy(&cond->cond)) {
+ log_warn(LD_GENERAL,"Error freeing condition: %s", strerror(errno));
+ return;
+ }
+}
+/** Wait until one of the tor_cond_signal functions is called on <b>cond</b>.
+ * (If <b>tv</b> is set, and that amount of time passes with no signal to
+ * <b>cond</b>, return anyway. All waiters on the condition must wait holding
+ * the same <b>mutex</b>. All signallers should hold that mutex. The mutex
+ * needs to have been allocated with tor_mutex_init_for_cond().
+ *
+ * Returns 0 on success, -1 on failure, 1 on timeout. */
+int
+tor_cond_wait(tor_cond_t *cond, tor_mutex_t *mutex, const struct timeval *tv)
+{
+ int r;
+ if (tv == NULL) {
+ while (1) {
+ r = pthread_cond_wait(&cond->cond, &mutex->mutex);
+ if (r == EINTR) {
+ /* EINTR should be impossible according to POSIX, but POSIX, like the
+ * Pirate's Code, is apparently treated "more like what you'd call
+ * guidelines than actual rules." */
+ continue;
+ }
+ return r ? -1 : 0;
+ }
+ } else {
+ struct timeval tvnow, tvsum;
+ struct timespec ts;
+ while (1) {
+#if defined(HAVE_CLOCK_GETTIME) && defined(CLOCK_MONOTONIC)
+ if (clock_gettime(CLOCK_MONOTONIC, &ts) < 0) {
+ return -1;
+ }
+ tvnow.tv_sec = ts.tv_sec;
+ tvnow.tv_usec = ts.tv_nsec / 1000;
+ timeradd(tv, &tvnow, &tvsum);
+#else
+ if (gettimeofday(&tvnow, NULL) < 0)
+ return -1;
+ timeradd(tv, &tvnow, &tvsum);
+#endif /* HAVE_CLOCK_GETTIME, CLOCK_MONOTONIC */
+
+ ts.tv_sec = tvsum.tv_sec;
+ ts.tv_nsec = tvsum.tv_usec * 1000;
+
+ r = pthread_cond_timedwait(&cond->cond, &mutex->mutex, &ts);
+ if (r == 0)
+ return 0;
+ else if (r == ETIMEDOUT)
+ return 1;
+ else if (r == EINTR)
+ continue;
+ else
+ return -1;
+ }
+ }
+}
+/** Wake up one of the waiters on <b>cond</b>. */
+void
+tor_cond_signal_one(tor_cond_t *cond)
+{
+ pthread_cond_signal(&cond->cond);
+}
+/** Wake up all of the waiters on <b>cond</b>. */
+void
+tor_cond_signal_all(tor_cond_t *cond)
+{
+ pthread_cond_broadcast(&cond->cond);
+}
+
+/** Set up common structures for use by threading. */
+void
+tor_threads_init(void)
+{
+ if (!threads_initialized) {
+ pthread_mutexattr_init(&attr_recursive);
+ pthread_mutexattr_settype(&attr_recursive, PTHREAD_MUTEX_RECURSIVE);
+ const int ret1 = pthread_attr_init(&attr_detached);
+ tor_assert(ret1 == 0);
+#ifndef PTHREAD_CREATE_DETACHED
+#define PTHREAD_CREATE_DETACHED 1
+#endif
+ const int ret2 =
+ pthread_attr_setdetachstate(&attr_detached, PTHREAD_CREATE_DETACHED);
+ tor_assert(ret2 == 0);
+ threads_initialized = 1;
+ set_main_thread();
+ }
+}
+
diff --git a/src/common/compat_threads.c b/src/common/compat_threads.c
new file mode 100644
index 0000000000..15648d2851
--- /dev/null
+++ b/src/common/compat_threads.c
@@ -0,0 +1,306 @@
+/* Copyright (c) 2003-2004, Roger Dingledine
+ * Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
+ * Copyright (c) 2007-2015, The Tor Project, Inc. */
+/* See LICENSE for licensing information */
+
+#define _GNU_SOURCE
+
+#include "orconfig.h"
+#include <stdlib.h>
+#include "compat.h"
+#include "compat_threads.h"
+
+#include "util.h"
+#include "torlog.h"
+
+#ifdef HAVE_SYS_EVENTFD_H
+#include <sys/eventfd.h>
+#endif
+#ifdef HAVE_FCNTL_H
+#include <fcntl.h>
+#endif
+#ifdef HAVE_UNISTD_H
+#include <unistd.h>
+#endif
+
+/** Return a newly allocated, ready-for-use mutex. */
+tor_mutex_t *
+tor_mutex_new(void)
+{
+ tor_mutex_t *m = tor_malloc_zero(sizeof(tor_mutex_t));
+ tor_mutex_init(m);
+ return m;
+}
+/** Return a newly allocated, ready-for-use mutex. This one might be
+ * non-recursive, if that's faster. */
+tor_mutex_t *
+tor_mutex_new_nonrecursive(void)
+{
+ tor_mutex_t *m = tor_malloc_zero(sizeof(tor_mutex_t));
+ tor_mutex_init_nonrecursive(m);
+ return m;
+}
+/** Release all storage and system resources held by <b>m</b>. */
+void
+tor_mutex_free(tor_mutex_t *m)
+{
+ if (!m)
+ return;
+ tor_mutex_uninit(m);
+ tor_free(m);
+}
+
+/** Allocate and return a new condition variable. */
+tor_cond_t *
+tor_cond_new(void)
+{
+ tor_cond_t *cond = tor_malloc(sizeof(tor_cond_t));
+ if (tor_cond_init(cond)<0)
+ tor_free(cond);
+ return cond;
+}
+
+/** Free all storage held in <b>c</b>. */
+void
+tor_cond_free(tor_cond_t *c)
+{
+ if (!c)
+ return;
+ tor_cond_uninit(c);
+ tor_free(c);
+}
+
+/** Identity of the "main" thread */
+static unsigned long main_thread_id = -1;
+
+/** Start considering the current thread to be the 'main thread'. This has
+ * no effect on anything besides in_main_thread(). */
+void
+set_main_thread(void)
+{
+ main_thread_id = tor_get_thread_id();
+}
+/** Return true iff called from the main thread. */
+int
+in_main_thread(void)
+{
+ return main_thread_id == tor_get_thread_id();
+}
+
+#if defined(HAVE_EVENTFD) || defined(HAVE_PIPE)
+/* non-interruptable versions */
+static int
+write_ni(int fd, const void *buf, size_t n)
+{
+ int r;
+ again:
+ r = (int) write(fd, buf, n);
+ if (r < 0 && errno == EINTR)
+ goto again;
+ return r;
+}
+static int
+read_ni(int fd, void *buf, size_t n)
+{
+ int r;
+ again:
+ r = (int) read(fd, buf, n);
+ if (r < 0 && errno == EINTR)
+ goto again;
+ return r;
+}
+#endif
+
+/* non-interruptable versions */
+static int
+send_ni(int fd, const void *buf, size_t n, int flags)
+{
+ int r;
+ again:
+ r = (int) send(fd, buf, n, flags);
+ if (r < 0 && errno == EINTR)
+ goto again;
+ return r;
+}
+
+static int
+recv_ni(int fd, void *buf, size_t n, int flags)
+{
+ int r;
+ again:
+ r = (int) recv(fd, buf, n, flags);
+ if (r < 0 && errno == EINTR)
+ goto again;
+ return r;
+}
+
+#ifdef HAVE_EVENTFD
+static int
+eventfd_alert(int fd)
+{
+ uint64_t u = 1;
+ int r = write_ni(fd, (void*)&u, sizeof(u));
+ if (r < 0 && errno != EAGAIN)
+ return -1;
+ return 0;
+}
+
+static int
+eventfd_drain(int fd)
+{
+ uint64_t u = 0;
+ int r = read_ni(fd, (void*)&u, sizeof(u));
+ if (r < 0 && errno != EAGAIN)
+ return -1;
+ return 0;
+}
+#endif
+
+#ifdef HAVE_PIPE
+static int
+pipe_alert(int fd)
+{
+ ssize_t r = write_ni(fd, "x", 1);
+ if (r < 0 && errno != EAGAIN)
+ return -1;
+ return 0;
+}
+
+static int
+pipe_drain(int fd)
+{
+ char buf[32];
+ ssize_t r;
+ do {
+ r = read_ni(fd, buf, sizeof(buf));
+ } while (r > 0);
+ if (r < 0 && errno != EAGAIN)
+ return -1;
+ /* A value of r = 0 means EOF on the fd so successfully drained. */
+ return 0;
+}
+#endif
+
+static int
+sock_alert(tor_socket_t fd)
+{
+ ssize_t r = send_ni(fd, "x", 1, 0);
+ if (r < 0 && !ERRNO_IS_EAGAIN(tor_socket_errno(fd)))
+ return -1;
+ return 0;
+}
+
+static int
+sock_drain(tor_socket_t fd)
+{
+ char buf[32];
+ ssize_t r;
+ do {
+ r = recv_ni(fd, buf, sizeof(buf), 0);
+ } while (r > 0);
+ if (r < 0 && !ERRNO_IS_EAGAIN(tor_socket_errno(fd)))
+ return -1;
+ /* A value of r = 0 means EOF on the fd so successfully drained. */
+ return 0;
+}
+
+/** Allocate a new set of alert sockets, and set the appropriate function
+ * pointers, in <b>socks_out</b>. */
+int
+alert_sockets_create(alert_sockets_t *socks_out, uint32_t flags)
+{
+ tor_socket_t socks[2] = { TOR_INVALID_SOCKET, TOR_INVALID_SOCKET };
+
+#ifdef HAVE_EVENTFD
+ /* First, we try the Linux eventfd() syscall. This gives a 64-bit counter
+ * associated with a single file descriptor. */
+#if defined(EFD_CLOEXEC) && defined(EFD_NONBLOCK)
+ if (!(flags & ASOCKS_NOEVENTFD2))
+ socks[0] = eventfd(0, EFD_CLOEXEC|EFD_NONBLOCK);
+#endif
+ if (socks[0] < 0 && !(flags & ASOCKS_NOEVENTFD)) {
+ socks[0] = eventfd(0,0);
+ if (socks[0] >= 0) {
+ if (fcntl(socks[0], F_SETFD, FD_CLOEXEC) < 0 ||
+ set_socket_nonblocking(socks[0]) < 0) {
+ close(socks[0]);
+ return -1;
+ }
+ }
+ }
+ if (socks[0] >= 0) {
+ socks_out->read_fd = socks_out->write_fd = socks[0];
+ socks_out->alert_fn = eventfd_alert;
+ socks_out->drain_fn = eventfd_drain;
+ return 0;
+ }
+#endif
+
+#ifdef HAVE_PIPE2
+ /* Now we're going to try pipes. First type the pipe2() syscall, if we
+ * have it, so we can save some calls... */
+ if (!(flags & ASOCKS_NOPIPE2) &&
+ pipe2(socks, O_NONBLOCK|O_CLOEXEC) == 0) {
+ socks_out->read_fd = socks[0];
+ socks_out->write_fd = socks[1];
+ socks_out->alert_fn = pipe_alert;
+ socks_out->drain_fn = pipe_drain;
+ return 0;
+ }
+#endif
+
+#ifdef HAVE_PIPE
+ /* Now try the regular pipe() syscall. Pipes have a bit lower overhead than
+ * socketpairs, fwict. */
+ if (!(flags & ASOCKS_NOPIPE) &&
+ pipe(socks) == 0) {
+ if (fcntl(socks[0], F_SETFD, FD_CLOEXEC) < 0 ||
+ fcntl(socks[1], F_SETFD, FD_CLOEXEC) < 0 ||
+ set_socket_nonblocking(socks[0]) < 0 ||
+ set_socket_nonblocking(socks[1]) < 0) {
+ close(socks[0]);
+ close(socks[1]);
+ return -1;
+ }
+ socks_out->read_fd = socks[0];
+ socks_out->write_fd = socks[1];
+ socks_out->alert_fn = pipe_alert;
+ socks_out->drain_fn = pipe_drain;
+ return 0;
+ }
+#endif
+
+ /* If nothing else worked, fall back on socketpair(). */
+ if (!(flags & ASOCKS_NOSOCKETPAIR) &&
+ tor_socketpair(AF_UNIX, SOCK_STREAM, 0, socks) == 0) {
+ if (set_socket_nonblocking(socks[0]) < 0 ||
+ set_socket_nonblocking(socks[1])) {
+ tor_close_socket(socks[0]);
+ tor_close_socket(socks[1]);
+ return -1;
+ }
+ socks_out->read_fd = socks[0];
+ socks_out->write_fd = socks[1];
+ socks_out->alert_fn = sock_alert;
+ socks_out->drain_fn = sock_drain;
+ return 0;
+ }
+ return -1;
+}
+
+/** Close the sockets in <b>socks</b>. */
+void
+alert_sockets_close(alert_sockets_t *socks)
+{
+ if (socks->alert_fn == sock_alert) {
+ /* they are sockets. */
+ tor_close_socket(socks->read_fd);
+ tor_close_socket(socks->write_fd);
+ } else {
+ close(socks->read_fd);
+ if (socks->write_fd != socks->read_fd)
+ close(socks->write_fd);
+ }
+ socks->read_fd = socks->write_fd = -1;
+}
+
diff --git a/src/common/compat_threads.h b/src/common/compat_threads.h
new file mode 100644
index 0000000000..acf3083f37
--- /dev/null
+++ b/src/common/compat_threads.h
@@ -0,0 +1,115 @@
+/* Copyright (c) 2003-2004, Roger Dingledine
+ * Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
+ * Copyright (c) 2007-2015, The Tor Project, Inc. */
+/* See LICENSE for licensing information */
+
+#ifndef TOR_COMPAT_THREADS_H
+#define TOR_COMPAT_THREADS_H
+
+#include "orconfig.h"
+#include "torint.h"
+#include "testsupport.h"
+
+#if defined(HAVE_PTHREAD_H) && !defined(_WIN32)
+#include <pthread.h>
+#endif
+
+#if defined(_WIN32)
+#define USE_WIN32_THREADS
+#elif defined(HAVE_PTHREAD_H) && defined(HAVE_PTHREAD_CREATE)
+#define USE_PTHREADS
+#else
+#error "No threading system was found"
+#endif
+
+int spawn_func(void (*func)(void *), void *data);
+void spawn_exit(void) ATTR_NORETURN;
+
+/* Because we use threads instead of processes on most platforms (Windows,
+ * Linux, etc), we need locking for them. On platforms with poor thread
+ * support or broken gethostbyname_r, these functions are no-ops. */
+
+/** A generic lock structure for multithreaded builds. */
+typedef struct tor_mutex_t {
+#if defined(USE_WIN32_THREADS)
+ /** Windows-only: on windows, we implement locks with CRITICAL_SECTIONS. */
+ CRITICAL_SECTION mutex;
+#elif defined(USE_PTHREADS)
+ /** Pthreads-only: with pthreads, we implement locks with
+ * pthread_mutex_t. */
+ pthread_mutex_t mutex;
+#else
+ /** No-threads only: Dummy variable so that tor_mutex_t takes up space. */
+ int _unused;
+#endif
+} tor_mutex_t;
+
+tor_mutex_t *tor_mutex_new(void);
+tor_mutex_t *tor_mutex_new_nonrecursive(void);
+void tor_mutex_init(tor_mutex_t *m);
+void tor_mutex_init_nonrecursive(tor_mutex_t *m);
+void tor_mutex_acquire(tor_mutex_t *m);
+void tor_mutex_release(tor_mutex_t *m);
+void tor_mutex_free(tor_mutex_t *m);
+void tor_mutex_uninit(tor_mutex_t *m);
+unsigned long tor_get_thread_id(void);
+void tor_threads_init(void);
+
+/** Conditions need nonrecursive mutexes with pthreads. */
+#define tor_mutex_init_for_cond(m) tor_mutex_init_nonrecursive(m)
+
+void set_main_thread(void);
+int in_main_thread(void);
+
+typedef struct tor_cond_t {
+#ifdef USE_PTHREADS
+ pthread_cond_t cond;
+#elif defined(USE_WIN32_THREADS)
+ HANDLE event;
+
+ CRITICAL_SECTION lock;
+ int n_waiting;
+ int n_to_wake;
+ int generation;
+#else
+#error no known condition implementation.
+#endif
+} tor_cond_t;
+
+tor_cond_t *tor_cond_new(void);
+void tor_cond_free(tor_cond_t *cond);
+int tor_cond_init(tor_cond_t *cond);
+void tor_cond_uninit(tor_cond_t *cond);
+int tor_cond_wait(tor_cond_t *cond, tor_mutex_t *mutex,
+ const struct timeval *tv);
+void tor_cond_signal_one(tor_cond_t *cond);
+void tor_cond_signal_all(tor_cond_t *cond);
+
+/** Helper type used to manage waking up the main thread while it's in
+ * the libevent main loop. Used by the work queue code. */
+typedef struct alert_sockets_s {
+ /* XXXX This structure needs a better name. */
+ /** Socket that the main thread should listen for EV_READ events on.
+ * Note that this socket may be a regular fd on a non-Windows platform.
+ */
+ tor_socket_t read_fd;
+ /** Socket to use when alerting the main thread. */
+ tor_socket_t write_fd;
+ /** Function to alert the main thread */
+ int (*alert_fn)(tor_socket_t write_fd);
+ /** Function to make the main thread no longer alerted. */
+ int (*drain_fn)(tor_socket_t read_fd);
+} alert_sockets_t;
+
+/* Flags to disable one or more alert_sockets backends. */
+#define ASOCKS_NOEVENTFD2 (1u<<0)
+#define ASOCKS_NOEVENTFD (1u<<1)
+#define ASOCKS_NOPIPE2 (1u<<2)
+#define ASOCKS_NOPIPE (1u<<3)
+#define ASOCKS_NOSOCKETPAIR (1u<<4)
+
+int alert_sockets_create(alert_sockets_t *socks_out, uint32_t flags);
+void alert_sockets_close(alert_sockets_t *socks);
+
+#endif
+
diff --git a/src/common/compat_winthreads.c b/src/common/compat_winthreads.c
new file mode 100644
index 0000000000..71b994c4e4
--- /dev/null
+++ b/src/common/compat_winthreads.c
@@ -0,0 +1,196 @@
+/* Copyright (c) 2003-2004, Roger Dingledine
+ * Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
+ * Copyright (c) 2007-2015, The Tor Project, Inc. */
+/* See LICENSE for licensing information */
+
+#include "compat.h"
+#include <windows.h>
+#include <process.h>
+#include "util.h"
+#include "container.h"
+#include "torlog.h"
+#include <process.h>
+
+/* This value is more or less total cargo-cult */
+#define SPIN_COUNT 2000
+
+/** Minimalist interface to run a void function in the background. On
+ * Unix calls fork, on win32 calls beginthread. Returns -1 on failure.
+ * func should not return, but rather should call spawn_exit.
+ *
+ * NOTE: if <b>data</b> is used, it should not be allocated on the stack,
+ * since in a multithreaded environment, there is no way to be sure that
+ * the caller's stack will still be around when the called function is
+ * running.
+ */
+int
+spawn_func(void (*func)(void *), void *data)
+{
+ int rv;
+ rv = (int)_beginthread(func, 0, data);
+ if (rv == (int)-1)
+ return -1;
+ return 0;
+}
+
+/** End the current thread/process.
+ */
+void
+spawn_exit(void)
+{
+ _endthread();
+ //we should never get here. my compiler thinks that _endthread returns, this
+ //is an attempt to fool it.
+ tor_assert(0);
+ _exit(0);
+}
+
+void
+tor_mutex_init(tor_mutex_t *m)
+{
+ InitializeCriticalSection(&m->mutex);
+}
+void
+tor_mutex_init_nonrecursive(tor_mutex_t *m)
+{
+ InitializeCriticalSection(&m->mutex);
+}
+
+void
+tor_mutex_uninit(tor_mutex_t *m)
+{
+ DeleteCriticalSection(&m->mutex);
+}
+void
+tor_mutex_acquire(tor_mutex_t *m)
+{
+ tor_assert(m);
+ EnterCriticalSection(&m->mutex);
+}
+void
+tor_mutex_release(tor_mutex_t *m)
+{
+ LeaveCriticalSection(&m->mutex);
+}
+unsigned long
+tor_get_thread_id(void)
+{
+ return (unsigned long)GetCurrentThreadId();
+}
+
+int
+tor_cond_init(tor_cond_t *cond)
+{
+ memset(cond, 0, sizeof(tor_cond_t));
+ if (InitializeCriticalSectionAndSpinCount(&cond->lock, SPIN_COUNT)==0) {
+ return -1;
+ }
+ if ((cond->event = CreateEvent(NULL,TRUE,FALSE,NULL)) == NULL) {
+ DeleteCriticalSection(&cond->lock);
+ return -1;
+ }
+ cond->n_waiting = cond->n_to_wake = cond->generation = 0;
+ return 0;
+}
+void
+tor_cond_uninit(tor_cond_t *cond)
+{
+ DeleteCriticalSection(&cond->lock);
+ CloseHandle(cond->event);
+}
+
+static void
+tor_cond_signal_impl(tor_cond_t *cond, int broadcast)
+{
+ EnterCriticalSection(&cond->lock);
+ if (broadcast)
+ cond->n_to_wake = cond->n_waiting;
+ else
+ ++cond->n_to_wake;
+ cond->generation++;
+ SetEvent(cond->event);
+ LeaveCriticalSection(&cond->lock);
+}
+void
+tor_cond_signal_one(tor_cond_t *cond)
+{
+ tor_cond_signal_impl(cond, 0);
+}
+void
+tor_cond_signal_all(tor_cond_t *cond)
+{
+ tor_cond_signal_impl(cond, 1);
+}
+
+int
+tor_cond_wait(tor_cond_t *cond, tor_mutex_t *lock_, const struct timeval *tv)
+{
+ CRITICAL_SECTION *lock = &lock_->mutex;
+ int generation_at_start;
+ int waiting = 1;
+ int result = -1;
+ DWORD ms = INFINITE, ms_orig = INFINITE, startTime, endTime;
+ if (tv)
+ ms_orig = ms = tv->tv_sec*1000 + (tv->tv_usec+999)/1000;
+
+ EnterCriticalSection(&cond->lock);
+ ++cond->n_waiting;
+ generation_at_start = cond->generation;
+ LeaveCriticalSection(&cond->lock);
+
+ LeaveCriticalSection(lock);
+
+ startTime = GetTickCount();
+ do {
+ DWORD res;
+ res = WaitForSingleObject(cond->event, ms);
+ EnterCriticalSection(&cond->lock);
+ if (cond->n_to_wake &&
+ cond->generation != generation_at_start) {
+ --cond->n_to_wake;
+ --cond->n_waiting;
+ result = 0;
+ waiting = 0;
+ goto out;
+ } else if (res != WAIT_OBJECT_0) {
+ result = (res==WAIT_TIMEOUT) ? 1 : -1;
+ --cond->n_waiting;
+ waiting = 0;
+ goto out;
+ } else if (ms != INFINITE) {
+ endTime = GetTickCount();
+ if (startTime + ms_orig <= endTime) {
+ result = 1; /* Timeout */
+ --cond->n_waiting;
+ waiting = 0;
+ goto out;
+ } else {
+ ms = startTime + ms_orig - endTime;
+ }
+ }
+ /* If we make it here, we are still waiting. */
+ if (cond->n_to_wake == 0) {
+ /* There is nobody else who should wake up; reset
+ * the event. */
+ ResetEvent(cond->event);
+ }
+ out:
+ LeaveCriticalSection(&cond->lock);
+ } while (waiting);
+
+ EnterCriticalSection(lock);
+
+ EnterCriticalSection(&cond->lock);
+ if (!cond->n_waiting)
+ ResetEvent(cond->event);
+ LeaveCriticalSection(&cond->lock);
+
+ return result;
+}
+
+void
+tor_threads_init(void)
+{
+ set_main_thread();
+}
+
diff --git a/src/common/container.c b/src/common/container.c
index 37e28004ae..864fd8a552 100644
--- a/src/common/container.c
+++ b/src/common/container.c
@@ -518,11 +518,13 @@ smartlist_sort(smartlist_t *sl, int (*compare)(const void **a, const void **b))
/** Given a smartlist <b>sl</b> sorted with the function <b>compare</b>,
* return the most frequent member in the list. Break ties in favor of
- * later elements. If the list is empty, return NULL.
+ * later elements. If the list is empty, return NULL. If count_out is
+ * non-null, set it to the most frequent member.
*/
void *
-smartlist_get_most_frequent(const smartlist_t *sl,
- int (*compare)(const void **a, const void **b))
+smartlist_get_most_frequent_(const smartlist_t *sl,
+ int (*compare)(const void **a, const void **b),
+ int *count_out)
{
const void *most_frequent = NULL;
int most_frequent_count = 0;
@@ -530,8 +532,11 @@ smartlist_get_most_frequent(const smartlist_t *sl,
const void *cur = NULL;
int i, count=0;
- if (!sl->num_used)
+ if (!sl->num_used) {
+ if (count_out)
+ *count_out = 0;
return NULL;
+ }
for (i = 0; i < sl->num_used; ++i) {
const void *item = sl->list[i];
if (cur && 0 == compare(&cur, &item)) {
@@ -549,6 +554,8 @@ smartlist_get_most_frequent(const smartlist_t *sl,
most_frequent = cur;
most_frequent_count = count;
}
+ if (count_out)
+ *count_out = most_frequent_count;
return (void*)most_frequent;
}
@@ -728,6 +735,16 @@ smartlist_get_most_frequent_string(smartlist_t *sl)
return smartlist_get_most_frequent(sl, compare_string_ptrs_);
}
+/** Return the most frequent string in the sorted list <b>sl</b>.
+ * If <b>count_out</b> is provided, set <b>count_out</b> to the
+ * number of times that string appears.
+ */
+char *
+smartlist_get_most_frequent_string_(smartlist_t *sl, int *count_out)
+{
+ return smartlist_get_most_frequent_(sl, compare_string_ptrs_, count_out);
+}
+
/** Remove duplicate strings from a sorted list, and free them with tor_free().
*/
void
diff --git a/src/common/container.h b/src/common/container.h
index 377cdf5dba..457b5e4ea0 100644
--- a/src/common/container.h
+++ b/src/common/container.h
@@ -94,8 +94,11 @@ void smartlist_del_keeporder(smartlist_t *sl, int idx);
void smartlist_insert(smartlist_t *sl, int idx, void *val);
void smartlist_sort(smartlist_t *sl,
int (*compare)(const void **a, const void **b));
-void *smartlist_get_most_frequent(const smartlist_t *sl,
- int (*compare)(const void **a, const void **b));
+void *smartlist_get_most_frequent_(const smartlist_t *sl,
+ int (*compare)(const void **a, const void **b),
+ int *count_out);
+#define smartlist_get_most_frequent(sl, compare) \
+ smartlist_get_most_frequent_((sl), (compare), NULL)
void smartlist_uniq(smartlist_t *sl,
int (*compare)(const void **a, const void **b),
void (*free_fn)(void *elt));
@@ -106,6 +109,7 @@ void smartlist_sort_digests256(smartlist_t *sl);
void smartlist_sort_pointers(smartlist_t *sl);
char *smartlist_get_most_frequent_string(smartlist_t *sl);
+char *smartlist_get_most_frequent_string_(smartlist_t *sl, int *count_out);
char *smartlist_get_most_frequent_digest256(smartlist_t *sl);
void smartlist_uniq_strings(smartlist_t *sl);
@@ -243,6 +247,16 @@ char *smartlist_join_strings2(smartlist_t *sl, const char *join,
STMT_END
/** Helper: While in a SMARTLIST_FOREACH loop over the list <b>sl</b> indexed
+ * with the variable <b>var</b>, remove the current element in a way that
+ * won't confuse the loop. */
+#define SMARTLIST_DEL_CURRENT_KEEPORDER(sl, var) \
+ STMT_BEGIN \
+ smartlist_del_keeporder(sl, var ## _sl_idx); \
+ --var ## _sl_idx; \
+ --var ## _sl_len; \
+ STMT_END
+
+/** Helper: While in a SMARTLIST_FOREACH loop over the list <b>sl</b> indexed
* with the variable <b>var</b>, replace the current element with <b>val</b>.
* Does not deallocate the current value of <b>var</b>.
*/
diff --git a/src/common/crypto.c b/src/common/crypto.c
index 370c04a315..8038631f18 100644
--- a/src/common/crypto.c
+++ b/src/common/crypto.c
@@ -51,9 +51,9 @@
#define CRYPTO_PRIVATE
#include "crypto.h"
-#include "../common/torlog.h"
+#include "torlog.h"
#include "aes.h"
-#include "../common/util.h"
+#include "util.h"
#include "container.h"
#include "compat.h"
#include "sandbox.h"
@@ -1397,6 +1397,78 @@ crypto_pk_get_hashed_fingerprint(crypto_pk_t *pk, char *fp_out)
return 0;
}
+/** Given a crypto_pk_t <b>pk</b>, allocate a new buffer containing the
+ * Base64 encoding of the DER representation of the private key as a NUL
+ * terminated string, and return it via <b>priv_out</b>. Return 0 on
+ * sucess, -1 on failure.
+ *
+ * It is the caller's responsibility to sanitize and free the resulting buffer.
+ */
+int
+crypto_pk_base64_encode(const crypto_pk_t *pk, char **priv_out)
+{
+ unsigned char *der = NULL;
+ int der_len;
+ int ret = -1;
+
+ *priv_out = NULL;
+
+ der_len = i2d_RSAPrivateKey(pk->key, &der);
+ if (der_len < 0 || der == NULL)
+ return ret;
+
+ size_t priv_len = base64_encode_size(der_len, 0) + 1;
+ char *priv = tor_malloc_zero(priv_len);
+ if (base64_encode(priv, priv_len, (char *)der, der_len, 0) >= 0) {
+ *priv_out = priv;
+ ret = 0;
+ } else {
+ tor_free(priv);
+ }
+
+ memwipe(der, 0, der_len);
+ OPENSSL_free(der);
+ return ret;
+}
+
+/** Given a string containing the Base64 encoded DER representation of the
+ * private key <b>str</b>, decode and return the result on success, or NULL
+ * on failure.
+ */
+crypto_pk_t *
+crypto_pk_base64_decode(const char *str, size_t len)
+{
+ crypto_pk_t *pk = NULL;
+
+ char *der = tor_malloc_zero(len + 1);
+ int der_len = base64_decode(der, len, str, len);
+ if (der_len <= 0) {
+ log_warn(LD_CRYPTO, "Stored RSA private key seems corrupted (base64).");
+ goto out;
+ }
+
+ const unsigned char *dp = (unsigned char*)der; /* Shut the compiler up. */
+ RSA *rsa = d2i_RSAPrivateKey(NULL, &dp, der_len);
+ if (!rsa) {
+ crypto_log_errors(LOG_WARN, "decoding private key");
+ goto out;
+ }
+
+ pk = crypto_new_pk_from_rsa_(rsa);
+
+ /* Make sure it's valid. */
+ if (crypto_pk_check_key(pk) <= 0) {
+ crypto_pk_free(pk);
+ pk = NULL;
+ goto out;
+ }
+
+ out:
+ memwipe(der, 0, len + 1);
+ tor_free(der);
+ return pk;
+}
+
/* symmetric crypto */
/** Return a pointer to the key set for the cipher in <b>env</b>.
@@ -1768,231 +1840,12 @@ static BIGNUM *dh_param_p_tls = NULL;
/** Shared G parameter for our DH key exchanges. */
static BIGNUM *dh_param_g = NULL;
-/** Generate and return a reasonable and safe DH parameter p. */
-static BIGNUM *
-crypto_generate_dynamic_dh_modulus(void)
-{
- BIGNUM *dynamic_dh_modulus;
- DH *dh_parameters;
- int r, dh_codes;
- char *s;
-
- dynamic_dh_modulus = BN_new();
- tor_assert(dynamic_dh_modulus);
-
- dh_parameters = DH_generate_parameters(DH_BYTES*8, DH_GENERATOR, NULL, NULL);
- tor_assert(dh_parameters);
-
- r = DH_check(dh_parameters, &dh_codes);
- tor_assert(r && !dh_codes);
-
- BN_copy(dynamic_dh_modulus, dh_parameters->p);
- tor_assert(dynamic_dh_modulus);
-
- DH_free(dh_parameters);
-
- { /* log the dynamic DH modulus: */
- s = BN_bn2hex(dynamic_dh_modulus);
- tor_assert(s);
- log_info(LD_OR, "Dynamic DH modulus generated: [%s]", s);
- OPENSSL_free(s);
- }
-
- return dynamic_dh_modulus;
-}
-
-/** Store our dynamic DH modulus (and its group parameters) to
- <b>fname</b> for future use. */
-static int
-crypto_store_dynamic_dh_modulus(const char *fname)
-{
- int len, new_len;
- DH *dh = NULL;
- unsigned char *dh_string_repr = NULL;
- char *base64_encoded_dh = NULL;
- char *file_string = NULL;
- int retval = -1;
- static const char file_header[] = "# This file contains stored Diffie-"
- "Hellman parameters for future use.\n# You *do not* need to edit this "
- "file.\n\n";
-
- tor_assert(fname);
-
- if (!dh_param_p_tls) {
- log_info(LD_CRYPTO, "Tried to store a DH modulus that does not exist.");
- goto done;
- }
-
- if (!(dh = DH_new()))
- goto done;
- if (!(dh->p = BN_dup(dh_param_p_tls)))
- goto done;
- if (!(dh->g = BN_new()))
- goto done;
- if (!BN_set_word(dh->g, DH_GENERATOR))
- goto done;
-
- len = i2d_DHparams(dh, &dh_string_repr);
- if ((len < 0) || (dh_string_repr == NULL)) {
- log_warn(LD_CRYPTO, "Error occured while DER encoding DH modulus (2).");
- goto done;
- }
-
- base64_encoded_dh = tor_calloc(len, 2); /* should be enough */
- new_len = base64_encode(base64_encoded_dh, len * 2,
- (char *)dh_string_repr, len);
- if (new_len < 0) {
- log_warn(LD_CRYPTO, "Error occured while base64-encoding DH modulus.");
- goto done;
- }
-
- /* concatenate file header and the dh parameters blob */
- new_len = tor_asprintf(&file_string, "%s%s", file_header, base64_encoded_dh);
-
- /* write to file */
- if (write_bytes_to_new_file(fname, file_string, new_len, 0) < 0) {
- log_info(LD_CRYPTO, "'%s' was already occupied.", fname);
- goto done;
- }
-
- retval = 0;
-
- done:
- if (dh)
- DH_free(dh);
- if (dh_string_repr)
- OPENSSL_free(dh_string_repr);
- tor_free(base64_encoded_dh);
- tor_free(file_string);
-
- return retval;
-}
-
-/** Return the dynamic DH modulus stored in <b>fname</b>. If there is no
- dynamic DH modulus stored in <b>fname</b>, return NULL. */
-static BIGNUM *
-crypto_get_stored_dynamic_dh_modulus(const char *fname)
-{
- int retval;
- char *contents = NULL;
- const char *contents_tmp = NULL;
- int dh_codes;
- DH *stored_dh = NULL;
- BIGNUM *dynamic_dh_modulus = NULL;
- int length = 0;
- unsigned char *base64_decoded_dh = NULL;
- const unsigned char *cp = NULL;
-
- tor_assert(fname);
-
- contents = read_file_to_str(fname, RFTS_IGNORE_MISSING, NULL);
- if (!contents) {
- log_info(LD_CRYPTO, "Could not open file '%s'", fname);
- goto done; /*usually means that ENOENT. don't try to move file to broken.*/
- }
-
- /* skip the file header */
- contents_tmp = eat_whitespace(contents);
- if (!*contents_tmp) {
- log_warn(LD_CRYPTO, "Stored dynamic DH modulus file "
- "seems corrupted (eat_whitespace).");
- goto err;
- }
-
- /* 'fname' contains the DH parameters stored in base64-ed DER
- * format. We are only interested in the DH modulus.
- * NOTE: We allocate more storage here than we need. Since we're already
- * doing that, we can also add 1 byte extra to appease Coverity's
- * scanner. */
-
- cp = base64_decoded_dh = tor_malloc_zero(strlen(contents_tmp) + 1);
- length = base64_decode((char *)base64_decoded_dh, strlen(contents_tmp),
- contents_tmp, strlen(contents_tmp));
- if (length < 0) {
- log_warn(LD_CRYPTO, "Stored dynamic DH modulus seems corrupted (base64).");
- goto err;
- }
-
- stored_dh = d2i_DHparams(NULL, &cp, length);
- if ((!stored_dh) || (cp - base64_decoded_dh != length)) {
- log_warn(LD_CRYPTO, "Stored dynamic DH modulus seems corrupted (d2i).");
- goto err;
- }
-
- { /* check the cryptographic qualities of the stored dynamic DH modulus: */
- retval = DH_check(stored_dh, &dh_codes);
- if (!retval || dh_codes) {
- log_warn(LD_CRYPTO, "Stored dynamic DH modulus is not a safe prime.");
- goto err;
- }
-
- retval = DH_size(stored_dh);
- if (retval < DH_BYTES) {
- log_warn(LD_CRYPTO, "Stored dynamic DH modulus is smaller "
- "than '%d' bits.", DH_BYTES*8);
- goto err;
- }
-
- if (!BN_is_word(stored_dh->g, 2)) {
- log_warn(LD_CRYPTO, "Stored dynamic DH parameters do not use '2' "
- "as the group generator.");
- goto err;
- }
- }
-
- { /* log the dynamic DH modulus: */
- char *s = BN_bn2hex(stored_dh->p);
- tor_assert(s);
- log_info(LD_OR, "Found stored dynamic DH modulus: [%s]", s);
- OPENSSL_free(s);
- }
-
- goto done;
-
- err:
-
- {
- /* move broken prime to $filename.broken */
- char *fname_new=NULL;
- tor_asprintf(&fname_new, "%s.broken", fname);
-
- log_warn(LD_CRYPTO, "Moving broken dynamic DH prime to '%s'.", fname_new);
-
- if (replace_file(fname, fname_new))
- log_notice(LD_CRYPTO, "Error while moving '%s' to '%s'.",
- fname, fname_new);
-
- tor_free(fname_new);
- }
-
- if (stored_dh) {
- DH_free(stored_dh);
- stored_dh = NULL;
- }
-
- done:
- tor_free(contents);
- tor_free(base64_decoded_dh);
-
- if (stored_dh) {
- dynamic_dh_modulus = BN_dup(stored_dh->p);
- DH_free(stored_dh);
- }
-
- return dynamic_dh_modulus;
-}
-
-/** Set the global TLS Diffie-Hellman modulus.
- * If <b>dynamic_dh_modulus_fname</b> is set, try to read a dynamic DH modulus
- * off it and use it as the DH modulus. If that's not possible,
- * generate a new dynamic DH modulus.
- * If <b>dynamic_dh_modulus_fname</b> is NULL, use the Apache mod_ssl DH
+/** Set the global TLS Diffie-Hellman modulus. Use the Apache mod_ssl DH
* modulus. */
void
-crypto_set_tls_dh_prime(const char *dynamic_dh_modulus_fname)
+crypto_set_tls_dh_prime(void)
{
BIGNUM *tls_prime = NULL;
- int store_dh_prime_afterwards = 0;
int r;
/* If the space is occupied, free the previous TLS DH prime */
@@ -2001,44 +1854,24 @@ crypto_set_tls_dh_prime(const char *dynamic_dh_modulus_fname)
dh_param_p_tls = NULL;
}
- if (dynamic_dh_modulus_fname) { /* use dynamic DH modulus: */
- log_info(LD_OR, "Using stored dynamic DH modulus.");
- tls_prime = crypto_get_stored_dynamic_dh_modulus(dynamic_dh_modulus_fname);
-
- if (!tls_prime) {
- log_notice(LD_OR, "Generating fresh dynamic DH modulus. "
- "This might take a while...");
- tls_prime = crypto_generate_dynamic_dh_modulus();
-
- store_dh_prime_afterwards++;
- }
- } else { /* use the static DH prime modulus used by Apache in mod_ssl: */
- tls_prime = BN_new();
- tor_assert(tls_prime);
+ tls_prime = BN_new();
+ tor_assert(tls_prime);
- /* This is the 1024-bit safe prime that Apache uses for its DH stuff; see
- * modules/ssl/ssl_engine_dh.c; Apache also uses a generator of 2 with this
- * prime.
- */
- r =BN_hex2bn(&tls_prime,
- "D67DE440CBBBDC1936D693D34AFD0AD50C84D239A45F520BB88174CB98"
- "BCE951849F912E639C72FB13B4B4D7177E16D55AC179BA420B2A29FE324A"
- "467A635E81FF5901377BEDDCFD33168A461AAD3B72DAE8860078045B07A7"
- "DBCA7874087D1510EA9FCC9DDD330507DD62DB88AEAA747DE0F4D6E2BD68"
- "B0E7393E0F24218EB3");
- tor_assert(r);
- }
+ /* This is the 1024-bit safe prime that Apache uses for its DH stuff; see
+ * modules/ssl/ssl_engine_dh.c; Apache also uses a generator of 2 with this
+ * prime.
+ */
+ r = BN_hex2bn(&tls_prime,
+ "D67DE440CBBBDC1936D693D34AFD0AD50C84D239A45F520BB88174CB98"
+ "BCE951849F912E639C72FB13B4B4D7177E16D55AC179BA420B2A29FE324A"
+ "467A635E81FF5901377BEDDCFD33168A461AAD3B72DAE8860078045B07A7"
+ "DBCA7874087D1510EA9FCC9DDD330507DD62DB88AEAA747DE0F4D6E2BD68"
+ "B0E7393E0F24218EB3");
+ tor_assert(r);
tor_assert(tls_prime);
dh_param_p_tls = tls_prime;
-
- if (store_dh_prime_afterwards)
- /* save the new dynamic DH modulus to disk. */
- if (crypto_store_dynamic_dh_modulus(dynamic_dh_modulus_fname)) {
- log_notice(LD_CRYPTO, "Failed while storing dynamic DH modulus. "
- "Make sure your data directory is sane.");
- }
}
/** Initialize dh_param_p and dh_param_g if they are not already
@@ -2075,10 +1908,8 @@ init_dh_param(void)
dh_param_p = circuit_dh_prime;
dh_param_g = generator;
- /* Ensure that we have TLS DH parameters set up, too, even if we're
- going to change them soon. */
if (!dh_param_p_tls) {
- crypto_set_tls_dh_prime(NULL);
+ crypto_set_tls_dh_prime();
}
}
@@ -2558,8 +2389,40 @@ crypto_rand_int(unsigned int max)
}
}
+/** Return a pseudorandom integer, chosen uniformly from the values <i>i</i>
+ * such that <b>min</b> &lt;= <i>i</i> &lt <b>max</b>.
+ *
+ * <b>min</b> MUST be in range [0, <b>max</b>).
+ * <b>max</b> MUST be in range (min, INT_MAX].
+ */
+int
+crypto_rand_int_range(unsigned int min, unsigned int max)
+{
+ tor_assert(min < max);
+ tor_assert(max <= INT_MAX);
+
+ /* The overflow is avoided here because crypto_rand_int() returns a value
+ * between 0 and (max - min) inclusive. */
+ return min + crypto_rand_int(max - min);
+}
+
+/** As crypto_rand_int_range, but supports uint64_t. */
+uint64_t
+crypto_rand_uint64_range(uint64_t min, uint64_t max)
+{
+ tor_assert(min < max);
+ return min + crypto_rand_uint64(max - min);
+}
+
+/** As crypto_rand_int_range, but supports time_t. */
+time_t
+crypto_rand_time_range(time_t min, time_t max)
+{
+ return (time_t) crypto_rand_uint64_range(min, max);
+}
+
/** Return a pseudorandom 64-bit integer, chosen uniformly from the values
- * between 0 and <b>max</b>-1. */
+ * between 0 and <b>max</b>-1 inclusive. */
uint64_t
crypto_rand_uint64(uint64_t max)
{
@@ -2620,7 +2483,7 @@ crypto_random_hostname(int min_rand_len, int max_rand_len, const char *prefix,
if (min_rand_len > max_rand_len)
min_rand_len = max_rand_len;
- randlen = min_rand_len + crypto_rand_int(max_rand_len - min_rand_len + 1);
+ randlen = crypto_rand_int_range(min_rand_len, max_rand_len+1);
prefixlen = strlen(prefix);
resultlen = prefixlen + strlen(suffix) + randlen + 16;
@@ -2667,36 +2530,163 @@ smartlist_shuffle(smartlist_t *sl)
}
}
+#define BASE64_OPENSSL_LINELEN 64
+
+/** Return the Base64 encoded size of <b>srclen</b> bytes of data in
+ * bytes.
+ *
+ * If <b>flags</b>&amp;BASE64_ENCODE_MULTILINE is true, return the size
+ * of the encoded output as multiline output (64 character, `\n' terminated
+ * lines).
+ */
+size_t
+base64_encode_size(size_t srclen, int flags)
+{
+ size_t enclen;
+ tor_assert(srclen < INT_MAX);
+
+ if (srclen == 0)
+ return 0;
+
+ enclen = ((srclen - 1) / 3) * 4 + 4;
+ if (flags & BASE64_ENCODE_MULTILINE) {
+ size_t remainder = enclen % BASE64_OPENSSL_LINELEN;
+ enclen += enclen / BASE64_OPENSSL_LINELEN;
+ if (remainder)
+ enclen++;
+ }
+ tor_assert(enclen < INT_MAX && enclen > srclen);
+ return enclen;
+}
+
+/** Internal table mapping 6 bit values to the Base64 alphabet. */
+static const char base64_encode_table[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', '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', '0', '1', '2', '3',
+ '4', '5', '6', '7', '8', '9', '+', '/'
+};
+
/** Base64 encode <b>srclen</b> bytes of data from <b>src</b>. Write
* the result into <b>dest</b>, if it will fit within <b>destlen</b>
- * bytes. Return the number of bytes written on success; -1 if
+ * bytes. Return the number of bytes written on success; -1 if
* destlen is too short, or other failure.
+ *
+ * If <b>flags</b>&amp;BASE64_ENCODE_MULTILINE is true, return encoded
+ * output in multiline format (64 character, `\n' terminated lines).
*/
int
-base64_encode(char *dest, size_t destlen, const char *src, size_t srclen)
-{
- /* FFFF we might want to rewrite this along the lines of base64_decode, if
- * it ever shows up in the profile. */
- EVP_ENCODE_CTX ctx;
- int len, ret;
- tor_assert(srclen < INT_MAX);
+base64_encode(char *dest, size_t destlen, const char *src, size_t srclen,
+ int flags)
+{
+ const unsigned char *usrc = (unsigned char *)src;
+ const unsigned char *eous = usrc + srclen;
+ char *d = dest;
+ uint32_t n = 0;
+ size_t linelen = 0;
+ size_t enclen;
+ int n_idx = 0;
+
+ if (!src || !dest)
+ return -1;
- /* 48 bytes of input -> 64 bytes of output plus newline.
- Plus one more byte, in case I'm wrong.
- */
- if (destlen < ((srclen/48)+1)*66)
+ /* Ensure that there is sufficient space, including the NUL. */
+ enclen = base64_encode_size(srclen, flags);
+ if (destlen < enclen + 1)
return -1;
if (destlen > SIZE_T_CEILING)
return -1;
+ if (enclen > INT_MAX)
+ return -1;
- EVP_EncodeInit(&ctx);
- EVP_EncodeUpdate(&ctx, (unsigned char*)dest, &len,
- (unsigned char*)src, (int)srclen);
- EVP_EncodeFinal(&ctx, (unsigned char*)(dest+len), &ret);
- ret += len;
- return ret;
+ memset(dest, 0, enclen);
+
+ /* XXX/Yawning: If this ends up being too slow, this can be sped up
+ * by separating the multiline format case and the normal case, and
+ * processing 48 bytes of input at a time when newlines are desired.
+ */
+#define ENCODE_CHAR(ch) \
+ STMT_BEGIN \
+ *d++ = ch; \
+ if (flags & BASE64_ENCODE_MULTILINE) { \
+ if (++linelen % BASE64_OPENSSL_LINELEN == 0) { \
+ linelen = 0; \
+ *d++ = '\n'; \
+ } \
+ } \
+ STMT_END
+
+#define ENCODE_N(idx) \
+ ENCODE_CHAR(base64_encode_table[(n >> ((3 - idx) * 6)) & 0x3f])
+
+#define ENCODE_PAD() ENCODE_CHAR('=')
+
+ /* Iterate over all the bytes in src. Each one will add 8 bits to the
+ * value we're encoding. Accumulate bits in <b>n</b>, and whenever we
+ * have 24 bits, batch them into 4 bytes and flush those bytes to dest.
+ */
+ for ( ; usrc < eous; ++usrc) {
+ n = (n << 8) | *usrc;
+ if ((++n_idx) == 3) {
+ ENCODE_N(0);
+ ENCODE_N(1);
+ ENCODE_N(2);
+ ENCODE_N(3);
+ n_idx = 0;
+ n = 0;
+ }
+ }
+ switch (n_idx) {
+ case 0:
+ /* 0 leftover bits, no pading to add. */
+ break;
+ case 1:
+ /* 8 leftover bits, pad to 12 bits, write the 2 6-bit values followed
+ * by 2 padding characters.
+ */
+ n <<= 4;
+ ENCODE_N(2);
+ ENCODE_N(3);
+ ENCODE_PAD();
+ ENCODE_PAD();
+ break;
+ case 2:
+ /* 16 leftover bits, pad to 18 bits, write the 3 6-bit values followed
+ * by 1 padding character.
+ */
+ n <<= 2;
+ ENCODE_N(1);
+ ENCODE_N(2);
+ ENCODE_N(3);
+ ENCODE_PAD();
+ break;
+ default:
+ /* Something went catastrophically wrong. */
+ tor_fragile_assert();
+ return -1;
+ }
+
+#undef ENCODE_N
+#undef ENCODE_PAD
+#undef ENCODE_CHAR
+
+ /* Multiline output always includes at least one newline. */
+ if (flags & BASE64_ENCODE_MULTILINE && linelen != 0)
+ *d++ = '\n';
+
+ tor_assert(d - dest == (ptrdiff_t)enclen);
+
+ *d++ = '\0'; /* NUL terminate the output. */
+
+ return (int) enclen;
}
+#undef BASE64_OPENSSL_LINELEN
+
/** @{ */
/** Special values used for the base64_decode_table */
#define X 255
@@ -2741,26 +2731,6 @@ static const uint8_t base64_decode_table[256] = {
int
base64_decode(char *dest, size_t destlen, const char *src, size_t srclen)
{
-#ifdef USE_OPENSSL_BASE64
- EVP_ENCODE_CTX ctx;
- int len, ret;
- /* 64 bytes of input -> *up to* 48 bytes of output.
- Plus one more byte, in case I'm wrong.
- */
- if (destlen < ((srclen/64)+1)*49)
- return -1;
- if (destlen > SIZE_T_CEILING)
- return -1;
-
- memset(dest, 0, destlen);
-
- EVP_DecodeInit(&ctx);
- EVP_DecodeUpdate(&ctx, (unsigned char*)dest, &len,
- (unsigned char*)src, srclen);
- EVP_DecodeFinal(&ctx, (unsigned char*)dest, &ret);
- ret += len;
- return ret;
-#else
const char *eos = src+srclen;
uint32_t n=0;
int n_idx=0;
@@ -2831,20 +2801,19 @@ base64_decode(char *dest, size_t destlen, const char *src, size_t srclen)
tor_assert((dest-dest_orig) <= INT_MAX);
return (int)(dest-dest_orig);
-#endif
}
#undef X
#undef SP
#undef PAD
/** Base64 encode DIGEST_LINE bytes from <b>digest</b>, remove the trailing =
- * and newline characters, and store the nul-terminated result in the first
+ * characters, and store the nul-terminated result in the first
* BASE64_DIGEST_LEN+1 bytes of <b>d64</b>. */
int
digest_to_base64(char *d64, const char *digest)
{
char buf[256];
- base64_encode(buf, sizeof(buf), digest, DIGEST_LEN);
+ base64_encode(buf, sizeof(buf), digest, DIGEST_LEN, 0);
buf[BASE64_DIGEST_LEN] = '\0';
memcpy(d64, buf, BASE64_DIGEST_LEN+1);
return 0;
@@ -2856,33 +2825,20 @@ digest_to_base64(char *d64, const char *digest)
int
digest_from_base64(char *digest, const char *d64)
{
-#ifdef USE_OPENSSL_BASE64
- char buf_in[BASE64_DIGEST_LEN+3];
- char buf[256];
- if (strlen(d64) != BASE64_DIGEST_LEN)
- return -1;
- memcpy(buf_in, d64, BASE64_DIGEST_LEN);
- memcpy(buf_in+BASE64_DIGEST_LEN, "=\n\0", 3);
- if (base64_decode(buf, sizeof(buf), buf_in, strlen(buf_in)) != DIGEST_LEN)
- return -1;
- memcpy(digest, buf, DIGEST_LEN);
- return 0;
-#else
if (base64_decode(digest, DIGEST_LEN, d64, strlen(d64)) == DIGEST_LEN)
return 0;
else
return -1;
-#endif
}
/** Base64 encode DIGEST256_LINE bytes from <b>digest</b>, remove the
- * trailing = and newline characters, and store the nul-terminated result in
- * the first BASE64_DIGEST256_LEN+1 bytes of <b>d64</b>. */
+ * trailing = characters, and store the nul-terminated result in the first
+ * BASE64_DIGEST256_LEN+1 bytes of <b>d64</b>. */
int
digest256_to_base64(char *d64, const char *digest)
{
char buf[256];
- base64_encode(buf, sizeof(buf), digest, DIGEST256_LEN);
+ base64_encode(buf, sizeof(buf), digest, DIGEST256_LEN, 0);
buf[BASE64_DIGEST256_LEN] = '\0';
memcpy(d64, buf, BASE64_DIGEST256_LEN+1);
return 0;
@@ -2894,23 +2850,10 @@ digest256_to_base64(char *d64, const char *digest)
int
digest256_from_base64(char *digest, const char *d64)
{
-#ifdef USE_OPENSSL_BASE64
- char buf_in[BASE64_DIGEST256_LEN+3];
- char buf[256];
- if (strlen(d64) != BASE64_DIGEST256_LEN)
- return -1;
- memcpy(buf_in, d64, BASE64_DIGEST256_LEN);
- memcpy(buf_in+BASE64_DIGEST256_LEN, "=\n\0", 3);
- if (base64_decode(buf, sizeof(buf), buf_in, strlen(buf_in)) != DIGEST256_LEN)
- return -1;
- memcpy(digest, buf, DIGEST256_LEN);
- return 0;
-#else
if (base64_decode(digest, DIGEST256_LEN, d64, strlen(d64)) == DIGEST256_LEN)
return 0;
else
return -1;
-#endif
}
/** Implements base32 encoding as in RFC 4648. Limitation: Requires
@@ -3115,6 +3058,14 @@ openssl_dynlock_destroy_cb_(struct CRYPTO_dynlock_value *v,
tor_free(v);
}
+#if OPENSSL_VERSION_NUMBER >= OPENSSL_V_SERIES(1,0,0)
+static void
+tor_set_openssl_thread_id(CRYPTO_THREADID *threadid)
+{
+ CRYPTO_THREADID_set_numeric(threadid, tor_get_thread_id());
+}
+#endif
+
/** @{ */
/** Helper: Construct mutexes, and set callbacks to help OpenSSL handle being
* multithreaded. */
@@ -3128,7 +3079,11 @@ setup_openssl_threading(void)
for (i=0; i < n; ++i)
openssl_mutexes_[i] = tor_mutex_new();
CRYPTO_set_locking_callback(openssl_locking_cb_);
+#if OPENSSL_VERSION_NUMBER < OPENSSL_V_SERIES(1,0,0)
CRYPTO_set_id_callback(tor_get_thread_id);
+#else
+ CRYPTO_THREADID_set_callback(tor_set_openssl_thread_id);
+#endif
CRYPTO_set_dynlock_create_callback(openssl_dynlock_create_cb_);
CRYPTO_set_dynlock_lock_callback(openssl_dynlock_lock_cb_);
CRYPTO_set_dynlock_destroy_callback(openssl_dynlock_destroy_cb_);
diff --git a/src/common/crypto.h b/src/common/crypto.h
index d305bc17a0..8b620d910c 100644
--- a/src/common/crypto.h
+++ b/src/common/crypto.h
@@ -122,8 +122,7 @@ int crypto_global_cleanup(void);
crypto_pk_t *crypto_pk_new(void);
void crypto_pk_free(crypto_pk_t *env);
-void crypto_set_tls_dh_prime(const char *dynamic_dh_modulus_fname);
-
+void crypto_set_tls_dh_prime(void);
crypto_cipher_t *crypto_cipher_new(const char *key);
crypto_cipher_t *crypto_cipher_new_with_iv(const char *key, const char *iv);
void crypto_cipher_free(crypto_cipher_t *env);
@@ -185,6 +184,9 @@ int crypto_pk_get_all_digests(crypto_pk_t *pk, digests_t *digests_out);
int crypto_pk_get_fingerprint(crypto_pk_t *pk, char *fp_out,int add_space);
int crypto_pk_get_hashed_fingerprint(crypto_pk_t *pk, char *fp_out);
+int crypto_pk_base64_encode(const crypto_pk_t *pk, char **priv_out);
+crypto_pk_t *crypto_pk_base64_decode(const char *str, size_t len);
+
/* symmetric crypto */
const char *crypto_cipher_get_key(crypto_cipher_t *env);
@@ -255,6 +257,9 @@ int crypto_seed_rng(int startup);
MOCK_DECL(int,crypto_rand,(char *to, size_t n));
int crypto_strongest_rand(uint8_t *out, size_t out_len);
int crypto_rand_int(unsigned int max);
+int crypto_rand_int_range(unsigned int min, unsigned int max);
+uint64_t crypto_rand_uint64_range(uint64_t min, uint64_t max);
+time_t crypto_rand_time_range(time_t min, time_t max);
uint64_t crypto_rand_uint64(uint64_t max);
double crypto_rand_double(void);
struct tor_weak_rng_t;
@@ -268,7 +273,10 @@ struct smartlist_t;
void *smartlist_choose(const struct smartlist_t *sl);
void smartlist_shuffle(struct smartlist_t *sl);
-int base64_encode(char *dest, size_t destlen, const char *src, size_t srclen);
+#define BASE64_ENCODE_MULTILINE 1
+size_t base64_encode_size(size_t srclen, int flags);
+int base64_encode(char *dest, size_t destlen, const char *src, size_t srclen,
+ int flags);
int base64_decode(char *dest, size_t destlen, const char *src, size_t srclen);
/** Characters that can appear (case-insensitively) in a base32 encoding. */
#define BASE32_CHARS "abcdefghijklmnopqrstuvwxyz234567"
diff --git a/src/common/crypto_format.c b/src/common/crypto_format.c
index 00e0e9ea85..35a7854404 100644
--- a/src/common/crypto_format.c
+++ b/src/common/crypto_format.c
@@ -19,7 +19,7 @@ curve25519_public_to_base64(char *output,
{
char buf[128];
base64_encode(buf, sizeof(buf),
- (const char*)pkey->public_key, CURVE25519_PUBKEY_LEN);
+ (const char*)pkey->public_key, CURVE25519_PUBKEY_LEN, 0);
buf[CURVE25519_BASE64_PADDED_LEN] = '\0';
memcpy(output, buf, CURVE25519_BASE64_PADDED_LEN+1);
return 0;
diff --git a/src/common/include.am b/src/common/include.am
index 6441596199..b782310663 100644
--- a/src/common/include.am
+++ b/src/common/include.am
@@ -11,9 +11,7 @@ noinst_LIBRARIES += \
src/common/libor-event-testing.a
endif
-EXTRA_DIST+= \
- src/common/common_sha1.i \
- src/common/Makefile.nmake
+EXTRA_DIST += src/common/Makefile.nmake
#CFLAGS = -Wall -Wpointer-arith -O2
AM_CPPFLAGS += -I$(srcdir)/src/common -Isrc/common -I$(srcdir)/src/ext/trunnel -I$(srcdir)/src/trunnel
@@ -24,14 +22,6 @@ else
libor_extra_source=
endif
-if USE_MEMPOOLS
-libor_mempool_source=src/common/mempool.c
-libor_mempool_header=src/common/mempool.h
-else
-libor_mempool_source=
-libor_mempool_header=
-endif
-
src_common_libcurve25519_donna_a_CFLAGS=
if BUILD_CURVE25519_DONNA
@@ -54,22 +44,32 @@ endif
LIBDONNA += $(LIBED25519_REF10)
+if THREADS_PTHREADS
+threads_impl_source=src/common/compat_pthreads.c
+endif
+if THREADS_WIN32
+threads_impl_source=src/common/compat_winthreads.c
+endif
+
LIBOR_A_SOURCES = \
src/common/address.c \
src/common/backtrace.c \
src/common/compat.c \
+ src/common/compat_threads.c \
src/common/container.c \
src/common/di_ops.c \
src/common/log.c \
src/common/memarea.c \
src/common/util.c \
- src/common/util_codedigest.c \
src/common/util_process.c \
src/common/sandbox.c \
+ src/common/workqueue.c \
src/ext/csiphash.c \
src/ext/trunnel/trunnel.c \
$(libor_extra_source) \
- $(libor_mempool_source)
+ $(threads_impl_source)
+
+src/common/log.o: micro-revision.i
LIBOR_CRYPTO_A_SOURCES = \
src/common/aes.c \
@@ -95,14 +95,13 @@ src_common_libor_testing_a_SOURCES = $(LIBOR_A_SOURCES)
src_common_libor_crypto_testing_a_SOURCES = $(LIBOR_CRYPTO_A_SOURCES)
src_common_libor_event_testing_a_SOURCES = $(LIBOR_EVENT_A_SOURCES)
-src_common_libor_testing_a_CPPFLAGS = -DTOR_UNIT_TESTS $(AM_CPPFLAGS)
-src_common_libor_crypto_testing_a_CPPFLAGS = -DTOR_UNIT_TESTS $(AM_CPPFLAGS)
-src_common_libor_event_testing_a_CPPFLAGS = -DTOR_UNIT_TESTS $(AM_CPPFLAGS)
+src_common_libor_testing_a_CPPFLAGS = $(AM_CPPFLAGS) $(TEST_CPPFLAGS)
+src_common_libor_crypto_testing_a_CPPFLAGS = $(AM_CPPFLAGS) $(TEST_CPPFLAGS)
+src_common_libor_event_testing_a_CPPFLAGS = $(AM_CPPFLAGS) $(TEST_CPPFLAGS)
src_common_libor_testing_a_CFLAGS = $(AM_CFLAGS) $(TEST_CFLAGS)
src_common_libor_crypto_testing_a_CFLAGS = $(AM_CFLAGS) $(TEST_CFLAGS)
src_common_libor_event_testing_a_CFLAGS = $(AM_CFLAGS) $(TEST_CFLAGS)
-
COMMONHEADERS = \
src/common/address.h \
src/common/backtrace.h \
@@ -110,6 +109,7 @@ COMMONHEADERS = \
src/common/ciphers.inc \
src/common/compat.h \
src/common/compat_libevent.h \
+ src/common/compat_threads.h \
src/common/container.h \
src/common/crypto.h \
src/common/crypto_curve25519.h \
@@ -128,21 +128,7 @@ COMMONHEADERS = \
src/common/tortls.h \
src/common/util.h \
src/common/util_process.h \
- $(libor_mempool_header)
+ src/common/workqueue.h
noinst_HEADERS+= $(COMMONHEADERS)
-DISTCLEANFILES+= src/common/common_sha1.i
-
-src/common/common_sha1.i: $(libor_SOURCES) $(libor_crypto_a_SOURCES) $(COMMONHEADERS)
- $(AM_V_GEN)if test "@SHA1SUM@" != none; then \
- (cd "$(srcdir)" && "@SHA1SUM@" $(src_common_libor_SOURCES) $(src_common_libor_crypto_a_SOURCES) $(COMMONHEADERS)) | "@SED@" -n 's/^\(.*\)$$/"\1\\n"/p' > $@; \
- elif test "@OPENSSL@" != none; then \
- (cd "$(srcdir)" && "@OPENSSL@" sha1 $(src_common_libor_SOURCES) $(src_Common_libor_crypto_a_SOURCES) $(COMMONHEADERS)) | "@SED@" -n 's/SHA1(\(.*\))= \(.*\)/"\2 \1\\n"/p' > $@; \
- else \
- rm $@; \
- touch $@; \
- fi
-
-src/common/util_codedigest.o: src/common/common_sha1.i
-
diff --git a/src/common/log.c b/src/common/log.c
index 2e7c711413..4ad0bc3697 100644
--- a/src/common/log.c
+++ b/src/common/log.c
@@ -140,6 +140,9 @@ static size_t pending_startup_messages_len;
* configured. */
static int queue_startup_messages = 1;
+/** True iff __PRETTY_FUNCTION__ includes parenthesized arguments. */
+static int pretty_fn_has_parens = 0;
+
/** Don't store more than this many bytes of messages while waiting for the
* logs to get configured. */
#define MAX_STARTUP_MSG_LEN (1<<16)
@@ -263,6 +266,13 @@ log_tor_version(logfile_t *lf, int reset)
return 0;
}
+const char bug_suffix[] = " (on Tor " VERSION
+#ifndef _MSC_VER
+ " "
+#include "micro-revision.i"
+#endif
+ ")";
+
/** Helper: Format a log message into a fixed-sized buffer. (This is
* factored out of <b>logv</b> so that we never format a message more
* than once.) Return a pointer to the first character of the message
@@ -306,7 +316,9 @@ format_msg(char *buf, size_t buf_len,
}
if (funcname && should_log_function_name(domain, severity)) {
- r = tor_snprintf(buf+n, buf_len-n, "%s(): ", funcname);
+ r = tor_snprintf(buf+n, buf_len-n,
+ pretty_fn_has_parens ? "%s: " : "%s(): ",
+ funcname);
if (r<0)
n = strlen(buf);
else
@@ -341,6 +353,13 @@ format_msg(char *buf, size_t buf_len,
}
}
}
+
+ if (domain == LD_BUG &&
+ buf_len - n > strlen(bug_suffix)+1) {
+ memcpy(buf+n, bug_suffix, strlen(bug_suffix));
+ n += strlen(bug_suffix);
+ }
+
buf[n]='\n';
buf[n+1]='\0';
*msg_len_out = n+1;
@@ -925,6 +944,11 @@ init_logging(int disable_startup_queue)
tor_mutex_init(&log_mutex);
log_mutex_initialized = 1;
}
+#ifdef __GNUC__
+ if (strchr(__PRETTY_FUNCTION__, '(')) {
+ pretty_fn_has_parens = 1;
+ }
+#endif
if (pending_cb_messages == NULL)
pending_cb_messages = smartlist_new();
if (disable_startup_queue)
@@ -1062,6 +1086,12 @@ flush_log_messages_from_startup(void)
if (! logfile_wants_message(lf, msg->severity, msg->domain))
continue;
+ /* We configure a temporary startup log that goes to stdout, so we
+ * shouldn't replay to stdout/stderr*/
+ if (lf->fd == STDOUT_FILENO || lf->fd == STDERR_FILENO) {
+ continue;
+ }
+
logfile_deliver(lf, msg->fullmsg, strlen(msg->fullmsg), msg->msg,
msg->domain, msg->severity, &callbacks_deferred);
}
@@ -1215,7 +1245,8 @@ log_level_to_string(int level)
static const char *domain_list[] = {
"GENERAL", "CRYPTO", "NET", "CONFIG", "FS", "PROTOCOL", "MM",
"HTTP", "APP", "CONTROL", "CIRC", "REND", "BUG", "DIR", "DIRSERV",
- "OR", "EDGE", "ACCT", "HIST", "HANDSHAKE", "HEARTBEAT", "CHANNEL", NULL
+ "OR", "EDGE", "ACCT", "HIST", "HANDSHAKE", "HEARTBEAT", "CHANNEL",
+ "SCHED", NULL
};
/** Return a bitmask for the log domain for which <b>domain</b> is the name,
@@ -1245,7 +1276,8 @@ domain_to_string(log_domain_mask_t domain, char *buf, size_t buflen)
const char *d;
int bit = tor_log2(domain);
size_t n;
- if (bit >= N_LOGGING_DOMAINS) {
+ if ((unsigned)bit >= ARRAY_LENGTH(domain_list)-1 ||
+ bit >= N_LOGGING_DOMAINS) {
tor_snprintf(buf, buflen, "<BUG:Unknown domain %lx>", (long)domain);
return buf+strlen(buf);
}
diff --git a/src/common/mempool.c b/src/common/mempool.c
deleted file mode 100644
index 55a34070d7..0000000000
--- a/src/common/mempool.c
+++ /dev/null
@@ -1,628 +0,0 @@
-/* Copyright (c) 2007-2015, The Tor Project, Inc. */
-/* See LICENSE for licensing information */
-#if 1
-/* Tor dependencies */
-#include "orconfig.h"
-#endif
-
-#include <stdlib.h>
-#include <string.h>
-#include "torint.h"
-#include "crypto.h"
-#define MEMPOOL_PRIVATE
-#include "mempool.h"
-
-/* OVERVIEW:
- *
- * This is an implementation of memory pools for Tor cells. It may be
- * useful for you too.
- *
- * Generally, a memory pool is an allocation strategy optimized for large
- * numbers of identically-sized objects. Rather than the elaborate arena
- * and coalescing strategies you need to get good performance for a
- * general-purpose malloc(), pools use a series of large memory "chunks",
- * each of which is carved into a bunch of smaller "items" or
- * "allocations".
- *
- * To get decent performance, you need to:
- * - Minimize the number of times you hit the underlying allocator.
- * - Try to keep accesses as local in memory as possible.
- * - Try to keep the common case fast.
- *
- * Our implementation uses three lists of chunks per pool. Each chunk can
- * be either "full" (no more room for items); "empty" (no items); or
- * "used" (not full, not empty). There are independent doubly-linked
- * lists for each state.
- *
- * CREDIT:
- *
- * I wrote this after looking at 3 or 4 other pooling allocators, but
- * without copying. The strategy this most resembles (which is funny,
- * since that's the one I looked at longest ago) is the pool allocator
- * underlying Python's obmalloc code. Major differences from obmalloc's
- * pools are:
- * - We don't even try to be threadsafe.
- * - We only handle objects of one size.
- * - Our list of empty chunks is doubly-linked, not singly-linked.
- * (This could change pretty easily; it's only doubly-linked for
- * consistency.)
- * - We keep a list of full chunks (so we can have a "nuke everything"
- * function). Obmalloc's pools leave full chunks to float unanchored.
- *
- * LIMITATIONS:
- * - Not even slightly threadsafe.
- * - Likes to have lots of items per chunks.
- * - One pointer overhead per allocated thing. (The alternative is
- * something like glib's use of an RB-tree to keep track of what
- * chunk any given piece of memory is in.)
- * - Only aligns allocated things to void* level: redefine ALIGNMENT_TYPE
- * if you need doubles.
- * - Could probably be optimized a bit; the representation contains
- * a bit more info than it really needs to have.
- */
-
-#if 1
-/* Tor dependencies */
-#include "util.h"
-#include "compat.h"
-#include "torlog.h"
-#define ALLOC(x) tor_malloc(x)
-#define FREE(x) tor_free(x)
-#define ASSERT(x) tor_assert(x)
-#undef ALLOC_CAN_RETURN_NULL
-#define TOR
-/* End Tor dependencies */
-#else
-/* If you're not building this as part of Tor, you'll want to define the
- * following macros. For now, these should do as defaults.
- */
-#include <assert.h>
-#define PREDICT_UNLIKELY(x) (x)
-#define PREDICT_LIKELY(x) (x)
-#define ALLOC(x) malloc(x)
-#define FREE(x) free(x)
-#define STRUCT_OFFSET(tp, member) \
- ((off_t) (((char*)&((tp*)0)->member)-(char*)0))
-#define ASSERT(x) assert(x)
-#define ALLOC_CAN_RETURN_NULL
-#endif
-
-/* Tuning parameters */
-/** Largest type that we need to ensure returned memory items are aligned to.
- * Change this to "double" if we need to be safe for structs with doubles. */
-#define ALIGNMENT_TYPE void *
-/** Increment that we need to align allocated. */
-#define ALIGNMENT sizeof(ALIGNMENT_TYPE)
-/** Largest memory chunk that we should allocate. */
-#define MAX_CHUNK (8*(1L<<20))
-/** Smallest memory chunk size that we should allocate. */
-#define MIN_CHUNK 4096
-
-typedef struct mp_allocated_t mp_allocated_t;
-typedef struct mp_chunk_t mp_chunk_t;
-
-/** Holds a single allocated item, allocated as part of a chunk. */
-struct mp_allocated_t {
- /** The chunk that this item is allocated in. This adds overhead to each
- * allocated item, thus making this implementation inappropriate for
- * very small items. */
- mp_chunk_t *in_chunk;
- union {
- /** If this item is free, the next item on the free list. */
- mp_allocated_t *next_free;
- /** If this item is not free, the actual memory contents of this item.
- * (Not actual size.) */
- char mem[1];
- /** An extra element to the union to insure correct alignment. */
- ALIGNMENT_TYPE dummy_;
- } u;
-};
-
-/** 'Magic' value used to detect memory corruption. */
-#define MP_CHUNK_MAGIC 0x09870123
-
-/** A chunk of memory. Chunks come from malloc; we use them */
-struct mp_chunk_t {
- unsigned long magic; /**< Must be MP_CHUNK_MAGIC if this chunk is valid. */
- mp_chunk_t *next; /**< The next free, used, or full chunk in sequence. */
- mp_chunk_t *prev; /**< The previous free, used, or full chunk in sequence. */
- mp_pool_t *pool; /**< The pool that this chunk is part of. */
- /** First free item in the freelist for this chunk. Note that this may be
- * NULL even if this chunk is not at capacity: if so, the free memory at
- * next_mem has not yet been carved into items.
- */
- mp_allocated_t *first_free;
- int n_allocated; /**< Number of currently allocated items in this chunk. */
- int capacity; /**< Number of items that can be fit into this chunk. */
- size_t mem_size; /**< Number of usable bytes in mem. */
- char *next_mem; /**< Pointer into part of <b>mem</b> not yet carved up. */
- char mem[FLEXIBLE_ARRAY_MEMBER]; /**< Storage for this chunk. */
-};
-
-/** Number of extra bytes needed beyond mem_size to allocate a chunk. */
-#define CHUNK_OVERHEAD STRUCT_OFFSET(mp_chunk_t, mem[0])
-
-/** Given a pointer to a mp_allocated_t, return a pointer to the memory
- * item it holds. */
-#define A2M(a) (&(a)->u.mem)
-/** Given a pointer to a memory_item_t, return a pointer to its enclosing
- * mp_allocated_t. */
-#define M2A(p) ( ((char*)p) - STRUCT_OFFSET(mp_allocated_t, u.mem) )
-
-#ifdef ALLOC_CAN_RETURN_NULL
-/** If our ALLOC() macro can return NULL, check whether <b>x</b> is NULL,
- * and if so, return NULL. */
-#define CHECK_ALLOC(x) \
- if (PREDICT_UNLIKELY(!x)) { return NULL; }
-#else
-/** If our ALLOC() macro can't return NULL, do nothing. */
-#define CHECK_ALLOC(x)
-#endif
-
-/** Helper: Allocate and return a new memory chunk for <b>pool</b>. Does not
- * link the chunk into any list. */
-static mp_chunk_t *
-mp_chunk_new(mp_pool_t *pool)
-{
- size_t sz = pool->new_chunk_capacity * pool->item_alloc_size;
- mp_chunk_t *chunk = ALLOC(CHUNK_OVERHEAD + sz);
-
-#ifdef MEMPOOL_STATS
- ++pool->total_chunks_allocated;
-#endif
- CHECK_ALLOC(chunk);
- memset(chunk, 0, sizeof(mp_chunk_t)); /* Doesn't clear the whole thing. */
- chunk->magic = MP_CHUNK_MAGIC;
- chunk->capacity = pool->new_chunk_capacity;
- chunk->mem_size = sz;
- chunk->next_mem = chunk->mem;
- chunk->pool = pool;
- return chunk;
-}
-
-/** Take a <b>chunk</b> that has just been allocated or removed from
- * <b>pool</b>'s empty chunk list, and add it to the head of the used chunk
- * list. */
-static INLINE void
-add_newly_used_chunk_to_used_list(mp_pool_t *pool, mp_chunk_t *chunk)
-{
- chunk->next = pool->used_chunks;
- if (chunk->next)
- chunk->next->prev = chunk;
- pool->used_chunks = chunk;
- ASSERT(!chunk->prev);
-}
-
-/** Return a newly allocated item from <b>pool</b>. */
-void *
-mp_pool_get(mp_pool_t *pool)
-{
- mp_chunk_t *chunk;
- mp_allocated_t *allocated;
-
- if (PREDICT_LIKELY(pool->used_chunks != NULL)) {
- /* Common case: there is some chunk that is neither full nor empty. Use
- * that one. (We can't use the full ones, obviously, and we should fill
- * up the used ones before we start on any empty ones. */
- chunk = pool->used_chunks;
-
- } else if (pool->empty_chunks) {
- /* We have no used chunks, but we have an empty chunk that we haven't
- * freed yet: use that. (We pull from the front of the list, which should
- * get us the most recently emptied chunk.) */
- chunk = pool->empty_chunks;
-
- /* Remove the chunk from the empty list. */
- pool->empty_chunks = chunk->next;
- if (chunk->next)
- chunk->next->prev = NULL;
-
- /* Put the chunk on the 'used' list*/
- add_newly_used_chunk_to_used_list(pool, chunk);
-
- ASSERT(!chunk->prev);
- --pool->n_empty_chunks;
- if (pool->n_empty_chunks < pool->min_empty_chunks)
- pool->min_empty_chunks = pool->n_empty_chunks;
- } else {
- /* We have no used or empty chunks: allocate a new chunk. */
- chunk = mp_chunk_new(pool);
- CHECK_ALLOC(chunk);
-
- /* Add the new chunk to the used list. */
- add_newly_used_chunk_to_used_list(pool, chunk);
- }
-
- ASSERT(chunk->n_allocated < chunk->capacity);
-
- if (chunk->first_free) {
- /* If there's anything on the chunk's freelist, unlink it and use it. */
- allocated = chunk->first_free;
- chunk->first_free = allocated->u.next_free;
- allocated->u.next_free = NULL; /* For debugging; not really needed. */
- ASSERT(allocated->in_chunk == chunk);
- } else {
- /* Otherwise, the chunk had better have some free space left on it. */
- ASSERT(chunk->next_mem + pool->item_alloc_size <=
- chunk->mem + chunk->mem_size);
-
- /* Good, it did. Let's carve off a bit of that free space, and use
- * that. */
- allocated = (void*)chunk->next_mem;
- chunk->next_mem += pool->item_alloc_size;
- allocated->in_chunk = chunk;
- allocated->u.next_free = NULL; /* For debugging; not really needed. */
- }
-
- ++chunk->n_allocated;
-#ifdef MEMPOOL_STATS
- ++pool->total_items_allocated;
-#endif
-
- if (PREDICT_UNLIKELY(chunk->n_allocated == chunk->capacity)) {
- /* This chunk just became full. */
- ASSERT(chunk == pool->used_chunks);
- ASSERT(chunk->prev == NULL);
-
- /* Take it off the used list. */
- pool->used_chunks = chunk->next;
- if (chunk->next)
- chunk->next->prev = NULL;
-
- /* Put it on the full list. */
- chunk->next = pool->full_chunks;
- if (chunk->next)
- chunk->next->prev = chunk;
- pool->full_chunks = chunk;
- }
- /* And return the memory portion of the mp_allocated_t. */
- return A2M(allocated);
-}
-
-/** Return an allocated memory item to its memory pool. */
-void
-mp_pool_release(void *item)
-{
- mp_allocated_t *allocated = (void*) M2A(item);
- mp_chunk_t *chunk = allocated->in_chunk;
-
- ASSERT(chunk);
- ASSERT(chunk->magic == MP_CHUNK_MAGIC);
- ASSERT(chunk->n_allocated > 0);
-
- allocated->u.next_free = chunk->first_free;
- chunk->first_free = allocated;
-
- if (PREDICT_UNLIKELY(chunk->n_allocated == chunk->capacity)) {
- /* This chunk was full and is about to be used. */
- mp_pool_t *pool = chunk->pool;
- /* unlink from the full list */
- if (chunk->prev)
- chunk->prev->next = chunk->next;
- if (chunk->next)
- chunk->next->prev = chunk->prev;
- if (chunk == pool->full_chunks)
- pool->full_chunks = chunk->next;
-
- /* link to the used list. */
- chunk->next = pool->used_chunks;
- chunk->prev = NULL;
- if (chunk->next)
- chunk->next->prev = chunk;
- pool->used_chunks = chunk;
- } else if (PREDICT_UNLIKELY(chunk->n_allocated == 1)) {
- /* This was used and is about to be empty. */
- mp_pool_t *pool = chunk->pool;
-
- /* Unlink from the used list */
- if (chunk->prev)
- chunk->prev->next = chunk->next;
- if (chunk->next)
- chunk->next->prev = chunk->prev;
- if (chunk == pool->used_chunks)
- pool->used_chunks = chunk->next;
-
- /* Link to the empty list */
- chunk->next = pool->empty_chunks;
- chunk->prev = NULL;
- if (chunk->next)
- chunk->next->prev = chunk;
- pool->empty_chunks = chunk;
-
- /* Reset the guts of this chunk to defragment it, in case it gets
- * used again. */
- chunk->first_free = NULL;
- chunk->next_mem = chunk->mem;
-
- ++pool->n_empty_chunks;
- }
- --chunk->n_allocated;
-}
-
-/** Allocate a new memory pool to hold items of size <b>item_size</b>. We'll
- * try to fit about <b>chunk_capacity</b> bytes in each chunk. */
-mp_pool_t *
-mp_pool_new(size_t item_size, size_t chunk_capacity)
-{
- mp_pool_t *pool;
- size_t alloc_size, new_chunk_cap;
-
- tor_assert(item_size < SIZE_T_CEILING);
- tor_assert(chunk_capacity < SIZE_T_CEILING);
- tor_assert(SIZE_T_CEILING / item_size > chunk_capacity);
-
- pool = ALLOC(sizeof(mp_pool_t));
- CHECK_ALLOC(pool);
- memset(pool, 0, sizeof(mp_pool_t));
-
- /* First, we figure out how much space to allow per item. We'll want to
- * use make sure we have enough for the overhead plus the item size. */
- alloc_size = (size_t)(STRUCT_OFFSET(mp_allocated_t, u.mem) + item_size);
- /* If the item_size is less than sizeof(next_free), we need to make
- * the allocation bigger. */
- if (alloc_size < sizeof(mp_allocated_t))
- alloc_size = sizeof(mp_allocated_t);
-
- /* If we're not an even multiple of ALIGNMENT, round up. */
- if (alloc_size % ALIGNMENT) {
- alloc_size = alloc_size + ALIGNMENT - (alloc_size % ALIGNMENT);
- }
- if (alloc_size < ALIGNMENT)
- alloc_size = ALIGNMENT;
- ASSERT((alloc_size % ALIGNMENT) == 0);
-
- /* Now we figure out how many items fit in each chunk. We need to fit at
- * least 2 items per chunk. No chunk can be more than MAX_CHUNK bytes long,
- * or less than MIN_CHUNK. */
- if (chunk_capacity > MAX_CHUNK)
- chunk_capacity = MAX_CHUNK;
- /* Try to be around a power of 2 in size, since that's what allocators like
- * handing out. 512K-1 byte is a lot better than 512K+1 byte. */
- chunk_capacity = (size_t) round_to_power_of_2(chunk_capacity);
- while (chunk_capacity < alloc_size * 2 + CHUNK_OVERHEAD)
- chunk_capacity *= 2;
- if (chunk_capacity < MIN_CHUNK)
- chunk_capacity = MIN_CHUNK;
-
- new_chunk_cap = (chunk_capacity-CHUNK_OVERHEAD) / alloc_size;
- tor_assert(new_chunk_cap < INT_MAX);
- pool->new_chunk_capacity = (int)new_chunk_cap;
-
- pool->item_alloc_size = alloc_size;
-
- log_debug(LD_MM, "Capacity is %lu, item size is %lu, alloc size is %lu",
- (unsigned long)pool->new_chunk_capacity,
- (unsigned long)pool->item_alloc_size,
- (unsigned long)(pool->new_chunk_capacity*pool->item_alloc_size));
-
- return pool;
-}
-
-/** Helper function for qsort: used to sort pointers to mp_chunk_t into
- * descending order of fullness. */
-static int
-mp_pool_sort_used_chunks_helper(const void *_a, const void *_b)
-{
- mp_chunk_t *a = *(mp_chunk_t**)_a;
- mp_chunk_t *b = *(mp_chunk_t**)_b;
- return b->n_allocated - a->n_allocated;
-}
-
-/** Sort the used chunks in <b>pool</b> into descending order of fullness,
- * so that we preferentially fill up mostly full chunks before we make
- * nearly empty chunks less nearly empty. */
-static void
-mp_pool_sort_used_chunks(mp_pool_t *pool)
-{
- int i, n=0, inverted=0;
- mp_chunk_t **chunks, *chunk;
- for (chunk = pool->used_chunks; chunk; chunk = chunk->next) {
- ++n;
- if (chunk->next && chunk->next->n_allocated > chunk->n_allocated)
- ++inverted;
- }
- if (!inverted)
- return;
- //printf("Sort %d/%d\n",inverted,n);
- chunks = ALLOC(sizeof(mp_chunk_t *)*n);
-#ifdef ALLOC_CAN_RETURN_NULL
- if (PREDICT_UNLIKELY(!chunks)) return;
-#endif
- for (i=0,chunk = pool->used_chunks; chunk; chunk = chunk->next)
- chunks[i++] = chunk;
- qsort(chunks, n, sizeof(mp_chunk_t *), mp_pool_sort_used_chunks_helper);
- pool->used_chunks = chunks[0];
- chunks[0]->prev = NULL;
- for (i=1;i<n;++i) {
- chunks[i-1]->next = chunks[i];
- chunks[i]->prev = chunks[i-1];
- }
- chunks[n-1]->next = NULL;
- FREE(chunks);
- mp_pool_assert_ok(pool);
-}
-
-/** If there are more than <b>n</b> empty chunks in <b>pool</b>, free the
- * excess ones that have been empty for the longest. If
- * <b>keep_recently_used</b> is true, do not free chunks unless they have been
- * empty since the last call to this function.
- **/
-void
-mp_pool_clean(mp_pool_t *pool, int n_to_keep, int keep_recently_used)
-{
- mp_chunk_t *chunk, **first_to_free;
-
- mp_pool_sort_used_chunks(pool);
- ASSERT(n_to_keep >= 0);
-
- if (keep_recently_used) {
- int n_recently_used = pool->n_empty_chunks - pool->min_empty_chunks;
- if (n_to_keep < n_recently_used)
- n_to_keep = n_recently_used;
- }
-
- ASSERT(n_to_keep >= 0);
-
- first_to_free = &pool->empty_chunks;
- while (*first_to_free && n_to_keep > 0) {
- first_to_free = &(*first_to_free)->next;
- --n_to_keep;
- }
- if (!*first_to_free) {
- pool->min_empty_chunks = pool->n_empty_chunks;
- return;
- }
-
- chunk = *first_to_free;
- while (chunk) {
- mp_chunk_t *next = chunk->next;
- chunk->magic = 0xdeadbeef;
- FREE(chunk);
-#ifdef MEMPOOL_STATS
- ++pool->total_chunks_freed;
-#endif
- --pool->n_empty_chunks;
- chunk = next;
- }
-
- pool->min_empty_chunks = pool->n_empty_chunks;
- *first_to_free = NULL;
-}
-
-/** Helper: Given a list of chunks, free all the chunks in the list. */
-static void
-destroy_chunks(mp_chunk_t *chunk)
-{
- mp_chunk_t *next;
- while (chunk) {
- chunk->magic = 0xd3adb33f;
- next = chunk->next;
- FREE(chunk);
- chunk = next;
- }
-}
-
-/** Free all space held in <b>pool</b> This makes all pointers returned from
- * mp_pool_get(<b>pool</b>) invalid. */
-void
-mp_pool_destroy(mp_pool_t *pool)
-{
- destroy_chunks(pool->empty_chunks);
- destroy_chunks(pool->used_chunks);
- destroy_chunks(pool->full_chunks);
- memwipe(pool, 0xe0, sizeof(mp_pool_t));
- FREE(pool);
-}
-
-/** Helper: make sure that a given chunk list is not corrupt. */
-static int
-assert_chunks_ok(mp_pool_t *pool, mp_chunk_t *chunk, int empty, int full)
-{
- mp_allocated_t *allocated;
- int n = 0;
- if (chunk)
- ASSERT(chunk->prev == NULL);
-
- while (chunk) {
- n++;
- ASSERT(chunk->magic == MP_CHUNK_MAGIC);
- ASSERT(chunk->pool == pool);
- for (allocated = chunk->first_free; allocated;
- allocated = allocated->u.next_free) {
- ASSERT(allocated->in_chunk == chunk);
- }
- if (empty)
- ASSERT(chunk->n_allocated == 0);
- else if (full)
- ASSERT(chunk->n_allocated == chunk->capacity);
- else
- ASSERT(chunk->n_allocated > 0 && chunk->n_allocated < chunk->capacity);
-
- ASSERT(chunk->capacity == pool->new_chunk_capacity);
-
- ASSERT(chunk->mem_size ==
- pool->new_chunk_capacity * pool->item_alloc_size);
-
- ASSERT(chunk->next_mem >= chunk->mem &&
- chunk->next_mem <= chunk->mem + chunk->mem_size);
-
- if (chunk->next)
- ASSERT(chunk->next->prev == chunk);
-
- chunk = chunk->next;
- }
- return n;
-}
-
-/** Fail with an assertion if <b>pool</b> is not internally consistent. */
-void
-mp_pool_assert_ok(mp_pool_t *pool)
-{
- int n_empty;
-
- n_empty = assert_chunks_ok(pool, pool->empty_chunks, 1, 0);
- assert_chunks_ok(pool, pool->full_chunks, 0, 1);
- assert_chunks_ok(pool, pool->used_chunks, 0, 0);
-
- ASSERT(pool->n_empty_chunks == n_empty);
-}
-
-#ifdef TOR
-/** Dump information about <b>pool</b>'s memory usage to the Tor log at level
- * <b>severity</b>. */
-/*FFFF uses Tor logging functions. */
-void
-mp_pool_log_status(mp_pool_t *pool, int severity)
-{
- uint64_t bytes_used = 0;
- uint64_t bytes_allocated = 0;
- uint64_t bu = 0, ba = 0;
- mp_chunk_t *chunk;
- int n_full = 0, n_used = 0;
-
- ASSERT(pool);
-
- for (chunk = pool->empty_chunks; chunk; chunk = chunk->next) {
- bytes_allocated += chunk->mem_size;
- }
- log_fn(severity, LD_MM, U64_FORMAT" bytes in %d empty chunks",
- U64_PRINTF_ARG(bytes_allocated), pool->n_empty_chunks);
- for (chunk = pool->used_chunks; chunk; chunk = chunk->next) {
- ++n_used;
- bu += chunk->n_allocated * pool->item_alloc_size;
- ba += chunk->mem_size;
- log_fn(severity, LD_MM, " used chunk: %d items allocated",
- chunk->n_allocated);
- }
- log_fn(severity, LD_MM, U64_FORMAT"/"U64_FORMAT
- " bytes in %d partially full chunks",
- U64_PRINTF_ARG(bu), U64_PRINTF_ARG(ba), n_used);
- bytes_used += bu;
- bytes_allocated += ba;
- bu = ba = 0;
- for (chunk = pool->full_chunks; chunk; chunk = chunk->next) {
- ++n_full;
- bu += chunk->n_allocated * pool->item_alloc_size;
- ba += chunk->mem_size;
- }
- log_fn(severity, LD_MM, U64_FORMAT"/"U64_FORMAT
- " bytes in %d full chunks",
- U64_PRINTF_ARG(bu), U64_PRINTF_ARG(ba), n_full);
- bytes_used += bu;
- bytes_allocated += ba;
-
- log_fn(severity, LD_MM, "Total: "U64_FORMAT"/"U64_FORMAT" bytes allocated "
- "for cell pools are full.",
- U64_PRINTF_ARG(bytes_used), U64_PRINTF_ARG(bytes_allocated));
-
-#ifdef MEMPOOL_STATS
- log_fn(severity, LD_MM, U64_FORMAT" cell allocations ever; "
- U64_FORMAT" chunk allocations ever; "
- U64_FORMAT" chunk frees ever.",
- U64_PRINTF_ARG(pool->total_items_allocated),
- U64_PRINTF_ARG(pool->total_chunks_allocated),
- U64_PRINTF_ARG(pool->total_chunks_freed));
-#endif
-}
-#endif
-
diff --git a/src/common/mempool.h b/src/common/mempool.h
deleted file mode 100644
index 5cbeb8f482..0000000000
--- a/src/common/mempool.h
+++ /dev/null
@@ -1,65 +0,0 @@
-/* Copyright (c) 2007-2015, The Tor Project, Inc. */
-/* See LICENSE for licensing information */
-
-/**
- * \file mempool.h
- * \brief Headers for mempool.c
- **/
-
-#ifndef TOR_MEMPOOL_H
-#define TOR_MEMPOOL_H
-
-/** A memory pool is a context in which a large number of fixed-sized
-* objects can be allocated efficiently. See mempool.c for implementation
-* details. */
-typedef struct mp_pool_t mp_pool_t;
-
-void *mp_pool_get(mp_pool_t *pool);
-void mp_pool_release(void *item);
-mp_pool_t *mp_pool_new(size_t item_size, size_t chunk_capacity);
-void mp_pool_clean(mp_pool_t *pool, int n_to_keep, int keep_recently_used);
-void mp_pool_destroy(mp_pool_t *pool);
-void mp_pool_assert_ok(mp_pool_t *pool);
-void mp_pool_log_status(mp_pool_t *pool, int severity);
-
-#define MP_POOL_ITEM_OVERHEAD (sizeof(void*))
-
-#define MEMPOOL_STATS
-
-#ifdef MEMPOOL_PRIVATE
-/* These declarations are only used by mempool.c and test.c */
-
-struct mp_pool_t {
- /** Doubly-linked list of chunks in which no items have been allocated.
- * The front of the list is the most recently emptied chunk. */
- struct mp_chunk_t *empty_chunks;
- /** Doubly-linked list of chunks in which some items have been allocated,
- * but which are not yet full. The front of the list is the chunk that has
- * most recently been modified. */
- struct mp_chunk_t *used_chunks;
- /** Doubly-linked list of chunks in which no more items can be allocated.
- * The front of the list is the chunk that has most recently become full. */
- struct mp_chunk_t *full_chunks;
- /** Length of <b>empty_chunks</b>. */
- int n_empty_chunks;
- /** Lowest value of <b>empty_chunks</b> since last call to
- * mp_pool_clean(-1). */
- int min_empty_chunks;
- /** Size of each chunk (in items). */
- int new_chunk_capacity;
- /** Size to allocate for each item, including overhead and alignment
- * padding. */
- size_t item_alloc_size;
-#ifdef MEMPOOL_STATS
- /** Total number of items allocated ever. */
- uint64_t total_items_allocated;
- /** Total number of chunks allocated ever. */
- uint64_t total_chunks_allocated;
- /** Total number of chunks freed ever. */
- uint64_t total_chunks_freed;
-#endif
-};
-#endif
-
-#endif
-
diff --git a/src/common/sandbox.c b/src/common/sandbox.c
index 450b04a6f7..49316c6193 100644
--- a/src/common/sandbox.c
+++ b/src/common/sandbox.c
@@ -176,6 +176,7 @@ static int filter_nopar_gen[] = {
#endif
SCMP_SYS(stat),
SCMP_SYS(uname),
+ SCMP_SYS(wait4),
SCMP_SYS(write),
SCMP_SYS(writev),
SCMP_SYS(exit_group),
@@ -543,6 +544,11 @@ sb_socket(scmp_filter_ctx ctx, sandbox_cfg_t *filter)
}
rc = seccomp_rule_add_3(ctx, SCMP_ACT_ALLOW, SCMP_SYS(socket),
+ SCMP_CMP(0, SCMP_CMP_EQ, PF_UNIX),
+ SCMP_CMP_MASKED(1, SOCK_CLOEXEC|SOCK_NONBLOCK, SOCK_STREAM),
+ SCMP_CMP(2, SCMP_CMP_EQ, 0));
+
+ rc = seccomp_rule_add_3(ctx, SCMP_ACT_ALLOW, SCMP_SYS(socket),
SCMP_CMP(0, SCMP_CMP_EQ, PF_NETLINK),
SCMP_CMP(1, SCMP_CMP_EQ, SOCK_RAW),
SCMP_CMP(2, SCMP_CMP_EQ, 0));
@@ -1676,6 +1682,9 @@ register_cfg(sandbox_cfg_t* cfg)
static int
initialise_libseccomp_sandbox(sandbox_cfg_t* cfg)
{
+ /* Prevent glibc from trying to open /dev/tty on fatal error */
+ setenv("LIBC_FATAL_STDERR_", "1", 1);
+
if (install_sigsys_debugging())
return -1;
diff --git a/src/common/tortls.c b/src/common/tortls.c
index 43fa7f884d..63b40258c2 100644
--- a/src/common/tortls.c
+++ b/src/common/tortls.c
@@ -50,6 +50,8 @@
#include <openssl/asn1.h>
#include <openssl/bio.h>
#include <openssl/opensslv.h>
+#include <openssl/bn.h>
+#include <openssl/rsa.h>
#if __GNUC__ && GCC_VERSION >= 402
#if GCC_VERSION >= 406
@@ -474,6 +476,8 @@ tor_tls_get_error(tor_tls_t *tls, int r, int extra,
static void
tor_tls_init(void)
{
+ check_no_tls_errors();
+
if (!tls_library_is_initialized) {
long version;
SSL_library_init();
@@ -572,6 +576,8 @@ tor_tls_init(void)
void
tor_tls_free_all(void)
{
+ check_no_tls_errors();
+
if (server_tls_context) {
tor_tls_context_t *ctx = server_tls_context;
server_tls_context = NULL;
@@ -653,7 +659,8 @@ tor_tls_create_certificate(crypto_pk_t *rsa,
* than having it start right now. Don't choose quite uniformly, since
* then we might pick a time where we're about to expire. Lastly, be
* sure to start on a day boundary. */
- start_time = time(NULL) - crypto_rand_int(cert_lifetime) + 2*24*3600;
+ time_t now = time(NULL);
+ start_time = crypto_rand_time_range(now - cert_lifetime, now) + 2*24*3600;
start_time -= start_time % (24*3600);
tor_assert(rsa);
@@ -783,7 +790,7 @@ const char UNRESTRICTED_SERVER_CIPHER_LIST[] =
/** List of ciphers that clients should advertise, omitting items that
* our OpenSSL doesn't know about. */
static const char CLIENT_CIPHER_LIST[] =
-#include "./ciphers.inc"
+#include "ciphers.inc"
/* Tell it not to use SSLv2 ciphers, so that it can select an SSLv3 version
* of any cipher we say. */
"!SSLv2"
@@ -798,7 +805,7 @@ typedef struct cipher_info_t { unsigned id; const char *name; } cipher_info_t;
static const cipher_info_t CLIENT_CIPHER_INFO_LIST[] = {
#define CIPHER(id, name) { id, name },
#define XCIPHER(id, name) { id, #name },
-#include "./ciphers.inc"
+#include "ciphers.inc"
#undef CIPHER
#undef XCIPHER
};
@@ -883,29 +890,33 @@ tor_cert_decode(const uint8_t *certificate, size_t certificate_len)
const unsigned char *cp = (const unsigned char *)certificate;
tor_cert_t *newcert;
tor_assert(certificate);
+ check_no_tls_errors();
if (certificate_len > INT_MAX)
- return NULL;
+ goto err;
x509 = d2i_X509(NULL, &cp, (int)certificate_len);
if (!x509)
- return NULL; /* Couldn't decode */
+ goto err; /* Couldn't decode */
if (cp - certificate != (int)certificate_len) {
X509_free(x509);
- return NULL; /* Didn't use all the bytes */
+ goto err; /* Didn't use all the bytes */
}
newcert = tor_cert_new(x509);
if (!newcert) {
- return NULL;
+ goto err;
}
if (newcert->encoded_len != certificate_len ||
fast_memneq(newcert->encoded, certificate, certificate_len)) {
/* Cert wasn't in DER */
tor_cert_free(newcert);
- return NULL;
+ goto err;
}
return newcert;
+ err:
+ tls_log_errors(NULL, LOG_INFO, LD_CRYPTO, "decoding a certificate");
+ return NULL;
}
/** Set *<b>encoded_out</b> and *<b>size_out</b> to <b>cert</b>'s encoded DER
@@ -1047,21 +1058,24 @@ tor_tls_cert_is_valid(int severity,
const tor_cert_t *signing_cert,
int check_rsa_1024)
{
+ check_no_tls_errors();
+
EVP_PKEY *cert_key;
EVP_PKEY *signing_key = X509_get_pubkey(signing_cert->cert);
int r, key_ok = 0;
+
if (!signing_key)
- return 0;
+ goto bad;
r = X509_verify(cert->cert, signing_key);
EVP_PKEY_free(signing_key);
if (r <= 0)
- return 0;
+ goto bad;
/* okay, the signature checked out right. Now let's check the check the
* lifetime. */
if (check_cert_lifetime_internal(severity, cert->cert,
48*60*60, 30*24*60*60) < 0)
- return 0;
+ goto bad;
cert_key = X509_get_pubkey(cert->cert);
if (check_rsa_1024 && cert_key) {
@@ -1081,11 +1095,14 @@ tor_tls_cert_is_valid(int severity,
}
EVP_PKEY_free(cert_key);
if (!key_ok)
- return 0;
+ goto bad;
/* XXXX compare DNs or anything? */
return 1;
+ bad:
+ tls_log_errors(NULL, LOG_INFO, LD_CRYPTO, "checking a certificate");
+ return 0;
}
/** Increase the reference count of <b>ctx</b>. */
@@ -1112,6 +1129,7 @@ tor_tls_context_init(unsigned flags,
int rv1 = 0;
int rv2 = 0;
const int is_public_server = flags & TOR_TLS_CTX_IS_PUBLIC_SERVER;
+ check_no_tls_errors();
if (is_public_server) {
tor_tls_context_t *new_ctx;
@@ -1156,6 +1174,7 @@ tor_tls_context_init(unsigned flags,
1);
}
+ tls_log_errors(NULL, LOG_WARN, LD_CRYPTO, "constructing a TLS context");
return MIN(rv1, rv2);
}
@@ -1879,11 +1898,12 @@ tor_tls_new(int sock, int isServer)
client_tls_context;
result->magic = TOR_TLS_MAGIC;
+ check_no_tls_errors();
tor_assert(context); /* make sure somebody made it first */
if (!(result->ssl = SSL_new(context->ctx))) {
tls_log_errors(NULL, LOG_WARN, LD_NET, "creating SSL object");
tor_free(result);
- return NULL;
+ goto err;
}
#ifdef SSL_set_tlsext_host_name
@@ -1903,7 +1923,7 @@ tor_tls_new(int sock, int isServer)
#endif
SSL_free(result->ssl);
tor_free(result);
- return NULL;
+ goto err;
}
if (!isServer)
rectify_client_ciphers(&result->ssl->cipher_list);
@@ -1916,7 +1936,7 @@ tor_tls_new(int sock, int isServer)
#endif
SSL_free(result->ssl);
tor_free(result);
- return NULL;
+ goto err;
}
{
int set_worked =
@@ -1950,6 +1970,10 @@ tor_tls_new(int sock, int isServer)
if (isServer)
tor_tls_setup_session_secret_cb(result);
+ goto done;
+ err:
+ result = NULL;
+ done:
/* Not expected to get called. */
tls_log_errors(NULL, LOG_WARN, LD_NET, "creating tor_tls_t object");
return result;
@@ -2197,6 +2221,7 @@ int
tor_tls_finish_handshake(tor_tls_t *tls)
{
int r = TOR_TLS_DONE;
+ check_no_tls_errors();
if (tls->isServer) {
SSL_set_info_callback(tls->ssl, NULL);
SSL_set_verify(tls->ssl, SSL_VERIFY_PEER, always_accept_verify_cb);
@@ -2242,6 +2267,7 @@ tor_tls_finish_handshake(tor_tls_t *tls)
r = TOR_TLS_ERROR_MISC;
}
}
+ tls_log_errors(NULL, LOG_WARN, LD_NET, "finishing the handshake");
return r;
}
@@ -2272,6 +2298,8 @@ tor_tls_renegotiate(tor_tls_t *tls)
/* We could do server-initiated renegotiation too, but that would be tricky.
* Instead of "SSL_renegotiate, then SSL_do_handshake until done" */
tor_assert(!tls->isServer);
+
+ check_no_tls_errors();
if (tls->state != TOR_TLS_ST_RENEGOTIATE) {
int r = SSL_renegotiate(tls->ssl);
if (r <= 0) {
@@ -2300,6 +2328,7 @@ tor_tls_shutdown(tor_tls_t *tls)
char buf[128];
tor_assert(tls);
tor_assert(tls->ssl);
+ check_no_tls_errors();
while (1) {
if (tls->state == TOR_TLS_ST_SENTCLOSE) {
@@ -2487,6 +2516,7 @@ tor_tls_verify(int severity, tor_tls_t *tls, crypto_pk_t **identity_key)
RSA *rsa;
int r = -1;
+ check_no_tls_errors();
*identity_key = NULL;
try_to_extract_certs_from_tls(severity, tls, &cert, &id_cert);
@@ -2727,6 +2757,8 @@ dn_indicates_v3_cert(X509_NAME *name)
int
tor_tls_received_v3_certificate(tor_tls_t *tls)
{
+ check_no_tls_errors();
+
X509 *cert = SSL_get_peer_certificate(tls->ssl);
EVP_PKEY *key = NULL;
X509_NAME *issuer_name, *subject_name;
@@ -2759,6 +2791,8 @@ tor_tls_received_v3_certificate(tor_tls_t *tls)
}
done:
+ tls_log_errors(tls, LOG_WARN, LD_NET, "checking for a v3 cert");
+
if (key)
EVP_PKEY_free(key);
if (cert)
diff --git a/src/common/util.c b/src/common/util.c
index 037acad87b..942d0c290e 100644
--- a/src/common/util.c
+++ b/src/common/util.c
@@ -95,6 +95,9 @@
#ifdef HAVE_SYS_WAIT_H
#include <sys/wait.h>
#endif
+#if defined(HAVE_SYS_PRCTL_H) && defined(__linux__)
+#include <sys/prctl.h>
+#endif
#ifdef __clang_analyzer__
#undef MALLOC_ZERO_WORKS
@@ -527,15 +530,25 @@ round_int64_to_next_multiple_of(int64_t number, int64_t divisor)
/** Transform a random value <b>p</b> from the uniform distribution in
* [0.0, 1.0[ into a Laplace distributed value with location parameter
- * <b>mu</b> and scale parameter <b>b</b> in [-Inf, Inf[. */
-double
+ * <b>mu</b> and scale parameter <b>b</b>. Truncate the final result
+ * to be an integer in [INT64_MIN, INT64_MAX]. */
+int64_t
sample_laplace_distribution(double mu, double b, double p)
{
+ double result;
+
tor_assert(p >= 0.0 && p < 1.0);
/* This is the "inverse cumulative distribution function" from:
* http://en.wikipedia.org/wiki/Laplace_distribution */
- return mu - b * (p > 0.5 ? 1.0 : -1.0)
- * tor_mathlog(1.0 - 2.0 * fabs(p - 0.5));
+ result = mu - b * (p > 0.5 ? 1.0 : -1.0)
+ * tor_mathlog(1.0 - 2.0 * fabs(p - 0.5));
+
+ if (result >= INT64_MAX)
+ return INT64_MAX;
+ else if (result <= INT64_MIN)
+ return INT64_MIN;
+ else
+ return (int64_t) result;
}
/** Add random noise between INT64_MIN and INT64_MAX coming from a
@@ -546,10 +559,10 @@ int64_t
add_laplace_noise(int64_t signal, double random, double delta_f,
double epsilon)
{
- /* cast to int64_t intended */
int64_t noise = sample_laplace_distribution(
0.0, /* just add noise, no further signal */
delta_f / epsilon, random);
+
if (noise > 0 && INT64_MAX - noise < signal)
return INT64_MAX;
else if (noise < 0 && INT64_MIN - noise > signal)
@@ -761,16 +774,6 @@ fast_memcmpstart(const void *mem, size_t memlen,
return fast_memcmp(mem, prefix, plen);
}
-/** Given a nul-terminated string s, set every character before the nul
- * to zero. */
-void
-tor_strclear(char *s)
-{
- while (*s) {
- *s++ = '\0';
- }
-}
-
/** Return a pointer to the first char of s that is not whitespace and
* not a comment, or to the terminating NUL if no such character exists.
*/
@@ -1371,6 +1374,20 @@ esc_for_log(const char *s)
return result;
}
+/** Similar to esc_for_log. Allocate and return a new string representing
+ * the first n characters in <b>chars</b>, surround by quotes and using
+ * standard C escapes. If a NUL character is encountered in <b>chars</b>,
+ * the resulting string will be terminated there.
+ */
+char *
+esc_for_log_len(const char *chars, size_t n)
+{
+ char *string = tor_strndup(chars, n);
+ char *string_escaped = esc_for_log(string);
+ tor_free(string);
+ return string_escaped;
+}
+
/** Allocate and return a new string representing the contents of <b>s</b>,
* surrounded by quotes and using standard C escapes.
*
@@ -3925,9 +3942,11 @@ process_handle_new(void)
process_handle_t *out = tor_malloc_zero(sizeof(process_handle_t));
#ifdef _WIN32
+ out->stdin_pipe = INVALID_HANDLE_VALUE;
out->stdout_pipe = INVALID_HANDLE_VALUE;
out->stderr_pipe = INVALID_HANDLE_VALUE;
#else
+ out->stdin_pipe = -1;
out->stdout_pipe = -1;
out->stderr_pipe = -1;
#endif
@@ -3967,7 +3986,7 @@ process_handle_waitpid_cb(int status, void *arg)
#define CHILD_STATE_FORK 3
#define CHILD_STATE_DUPOUT 4
#define CHILD_STATE_DUPERR 5
-#define CHILD_STATE_REDIRECT 6
+#define CHILD_STATE_DUPIN 6
#define CHILD_STATE_CLOSEFD 7
#define CHILD_STATE_EXEC 8
#define CHILD_STATE_FAILEXEC 9
@@ -4001,6 +4020,8 @@ tor_spawn_background(const char *const filename, const char **argv,
HANDLE stdout_pipe_write = NULL;
HANDLE stderr_pipe_read = NULL;
HANDLE stderr_pipe_write = NULL;
+ HANDLE stdin_pipe_read = NULL;
+ HANDLE stdin_pipe_write = NULL;
process_handle_t *process_handle;
int status;
@@ -4046,6 +4067,20 @@ tor_spawn_background(const char *const filename, const char **argv,
return status;
}
+ /* Set up pipe for stdin */
+ if (!CreatePipe(&stdin_pipe_read, &stdin_pipe_write, &saAttr, 0)) {
+ log_warn(LD_GENERAL,
+ "Failed to create pipe for stdin communication with child process: %s",
+ format_win32_error(GetLastError()));
+ return status;
+ }
+ if (!SetHandleInformation(stdin_pipe_write, HANDLE_FLAG_INHERIT, 0)) {
+ log_warn(LD_GENERAL,
+ "Failed to configure pipe for stdin communication with child "
+ "process: %s", format_win32_error(GetLastError()));
+ return status;
+ }
+
/* Create the child process */
/* Windows expects argv to be a whitespace delimited string, so join argv up
@@ -4060,7 +4095,7 @@ tor_spawn_background(const char *const filename, const char **argv,
siStartInfo.cb = sizeof(STARTUPINFO);
siStartInfo.hStdError = stderr_pipe_write;
siStartInfo.hStdOutput = stdout_pipe_write;
- siStartInfo.hStdInput = NULL;
+ siStartInfo.hStdInput = stdin_pipe_read;
siStartInfo.dwFlags |= STARTF_USESTDHANDLES;
/* Create the child process */
@@ -4090,6 +4125,7 @@ tor_spawn_background(const char *const filename, const char **argv,
/* TODO: Close hProcess and hThread in process_handle->pid? */
process_handle->stdout_pipe = stdout_pipe_read;
process_handle->stderr_pipe = stderr_pipe_read;
+ process_handle->stdin_pipe = stdin_pipe_write;
status = process_handle->status = PROCESS_STATUS_RUNNING;
}
@@ -4100,6 +4136,7 @@ tor_spawn_background(const char *const filename, const char **argv,
pid_t pid;
int stdout_pipe[2];
int stderr_pipe[2];
+ int stdin_pipe[2];
int fd, retval;
ssize_t nbytes;
process_handle_t *process_handle;
@@ -4124,7 +4161,7 @@ tor_spawn_background(const char *const filename, const char **argv,
child_state = CHILD_STATE_PIPE;
- /* Set up pipe for redirecting stdout and stderr of child */
+ /* Set up pipe for redirecting stdout, stderr, and stdin of child */
retval = pipe(stdout_pipe);
if (-1 == retval) {
log_warn(LD_GENERAL,
@@ -4145,6 +4182,20 @@ tor_spawn_background(const char *const filename, const char **argv,
return status;
}
+ retval = pipe(stdin_pipe);
+ if (-1 == retval) {
+ log_warn(LD_GENERAL,
+ "Failed to set up pipe for stdin communication with child process: %s",
+ strerror(errno));
+
+ close(stdout_pipe[0]);
+ close(stdout_pipe[1]);
+ close(stderr_pipe[0]);
+ close(stderr_pipe[1]);
+
+ return status;
+ }
+
child_state = CHILD_STATE_MAXFD;
#ifdef _SC_OPEN_MAX
@@ -4166,6 +4217,15 @@ tor_spawn_background(const char *const filename, const char **argv,
if (0 == pid) {
/* In child */
+#if defined(HAVE_SYS_PRCTL_H) && defined(__linux__)
+ /* Attempt to have the kernel issue a SIGTERM if the parent
+ * goes away. Certain attributes of the binary being execve()ed
+ * will clear this during the execve() call, but it's better
+ * than nothing.
+ */
+ prctl(PR_SET_PDEATHSIG, SIGTERM);
+#endif
+
child_state = CHILD_STATE_DUPOUT;
/* Link child stdout to the write end of the pipe */
@@ -4180,13 +4240,11 @@ tor_spawn_background(const char *const filename, const char **argv,
if (-1 == retval)
goto error;
- child_state = CHILD_STATE_REDIRECT;
+ child_state = CHILD_STATE_DUPIN;
- /* Link stdin to /dev/null */
- fd = open("/dev/null", O_RDONLY); /* NOT cloexec, obviously. */
- if (fd != -1)
- dup2(fd, STDIN_FILENO);
- else
+ /* Link child stdin to the read end of the pipe */
+ retval = dup2(stdin_pipe[0], STDIN_FILENO);
+ if (-1 == retval)
goto error;
child_state = CHILD_STATE_CLOSEFD;
@@ -4195,7 +4253,8 @@ tor_spawn_background(const char *const filename, const char **argv,
close(stderr_pipe[1]);
close(stdout_pipe[0]);
close(stdout_pipe[1]);
- close(fd);
+ close(stdin_pipe[0]);
+ close(stdin_pipe[1]);
/* Close all other fds, including the read end of the pipe */
/* XXX: We should now be doing enough FD_CLOEXEC setting to make
@@ -4211,8 +4270,10 @@ tor_spawn_background(const char *const filename, const char **argv,
does not modify the arguments */
if (env)
execve(filename, (char *const *) argv, env->unixoid_environment_block);
- else
- execvp(filename, (char *const *) argv);
+ else {
+ static char *new_env[] = { NULL };
+ execve(filename, (char *const *) argv, new_env);
+ }
/* If we got here, the exec or open(/dev/null) failed */
@@ -4245,6 +4306,8 @@ tor_spawn_background(const char *const filename, const char **argv,
if (-1 == pid) {
log_warn(LD_GENERAL, "Failed to fork child process: %s", strerror(errno));
+ close(stdin_pipe[0]);
+ close(stdin_pipe[1]);
close(stdout_pipe[0]);
close(stdout_pipe[1]);
close(stderr_pipe[0]);
@@ -4281,16 +4344,28 @@ tor_spawn_background(const char *const filename, const char **argv,
strerror(errno));
}
+ /* Return write end of the stdin pipe to caller, and close the read end */
+ process_handle->stdin_pipe = stdin_pipe[1];
+ retval = close(stdin_pipe[0]);
+
+ if (-1 == retval) {
+ log_warn(LD_GENERAL,
+ "Failed to close read end of stdin pipe in parent process: %s",
+ strerror(errno));
+ }
+
status = process_handle->status = PROCESS_STATUS_RUNNING;
- /* Set stdout/stderr pipes to be non-blocking */
+ /* Set stdin/stdout/stderr pipes to be non-blocking */
if (fcntl(process_handle->stdout_pipe, F_SETFL, O_NONBLOCK) < 0 ||
- fcntl(process_handle->stderr_pipe, F_SETFL, O_NONBLOCK) < 0) {
- log_warn(LD_GENERAL, "Failed to set stderror/stdout pipes nonblocking "
- "in parent process: %s", strerror(errno));
+ fcntl(process_handle->stderr_pipe, F_SETFL, O_NONBLOCK) < 0 ||
+ fcntl(process_handle->stdin_pipe, F_SETFL, O_NONBLOCK) < 0) {
+ log_warn(LD_GENERAL, "Failed to set stderror/stdout/stdin pipes "
+ "nonblocking in parent process: %s", strerror(errno));
}
/* Open the buffered IO streams */
process_handle->stdout_handle = fdopen(process_handle->stdout_pipe, "r");
process_handle->stderr_handle = fdopen(process_handle->stderr_pipe, "r");
+ process_handle->stdin_handle = fdopen(process_handle->stdin_pipe, "r");
*process_handle_out = process_handle;
return process_handle->status;
@@ -4333,6 +4408,9 @@ tor_process_handle_destroy,(process_handle_t *process_handle,
if (process_handle->stderr_pipe)
CloseHandle(process_handle->stderr_pipe);
+
+ if (process_handle->stdin_pipe)
+ CloseHandle(process_handle->stdin_pipe);
#else
if (process_handle->stdout_handle)
fclose(process_handle->stdout_handle);
@@ -4340,6 +4418,9 @@ tor_process_handle_destroy,(process_handle_t *process_handle,
if (process_handle->stderr_handle)
fclose(process_handle->stderr_handle);
+ if (process_handle->stdin_handle)
+ fclose(process_handle->stdin_handle);
+
clear_waitpid_callback(process_handle->waitpid_cb);
#endif
diff --git a/src/common/util.h b/src/common/util.h
index bac4097917..ac4ebfc6f3 100644
--- a/src/common/util.h
+++ b/src/common/util.h
@@ -45,6 +45,13 @@
#error "Sorry; we don't support building with NDEBUG."
#endif
+/* Don't use assertions during coverage. It leads to tons of unreached
+ * branches which in reality are only assertions we didn't hit. */
+#ifdef TOR_COVERAGE
+#define tor_assert(a) STMT_BEGIN \
+ (void)(a); \
+ STMT_END
+#else
/** Like assert(3), but send assertion failures to the log as well as to
* stderr. */
#define tor_assert(expr) STMT_BEGIN \
@@ -52,6 +59,7 @@
tor_assertion_failed_(SHORT_FILE__, __LINE__, __func__, #expr); \
abort(); \
} STMT_END
+#endif
void tor_assertion_failed_(const char *fname, unsigned int line,
const char *func, const char *expr);
@@ -173,7 +181,7 @@ unsigned round_to_next_multiple_of(unsigned number, unsigned divisor);
uint32_t round_uint32_to_next_multiple_of(uint32_t number, uint32_t divisor);
uint64_t round_uint64_to_next_multiple_of(uint64_t number, uint64_t divisor);
int64_t round_int64_to_next_multiple_of(int64_t number, int64_t divisor);
-double sample_laplace_distribution(double mu, double b, double p);
+int64_t sample_laplace_distribution(double mu, double b, double p);
int64_t add_laplace_noise(int64_t signal, double random, double delta_f,
double epsilon);
int n_bits_set_u8(uint8_t v);
@@ -209,7 +217,6 @@ int strcasecmpstart(const char *s1, const char *s2) ATTR_NONNULL((1,2));
int strcmpend(const char *s1, const char *s2) ATTR_NONNULL((1,2));
int strcasecmpend(const char *s1, const char *s2) ATTR_NONNULL((1,2));
int fast_memcmpstart(const void *mem, size_t memlen, const char *prefix);
-void tor_strclear(char *s);
void tor_strstrip(char *s, const char *strip) ATTR_NONNULL((1,2));
long tor_parse_long(const char *s, int base, long min,
@@ -239,6 +246,7 @@ int tor_mem_is_zero(const char *mem, size_t len);
int tor_digest_is_zero(const char *digest);
int tor_digest256_is_zero(const char *digest);
char *esc_for_log(const char *string) ATTR_MALLOC;
+char *esc_for_log_len(const char *chars, size_t n) ATTR_MALLOC;
const char *escaped(const char *string);
char *tor_escape_str_for_pt_args(const char *string,
@@ -466,12 +474,15 @@ struct process_handle_t {
/** One of the PROCESS_STATUS_* values */
int status;
#ifdef _WIN32
+ HANDLE stdin_pipe;
HANDLE stdout_pipe;
HANDLE stderr_pipe;
PROCESS_INFORMATION pid;
#else
+ int stdin_pipe;
int stdout_pipe;
int stderr_pipe;
+ FILE *stdin_handle;
FILE *stdout_handle;
FILE *stderr_handle;
pid_t pid;
@@ -562,9 +573,7 @@ STATIC int format_helper_exit_status(unsigned char child_state,
#endif
-const char *libor_get_digests(void);
-
-#define ARRAY_LENGTH(x) (sizeof(x)) / sizeof(x[0])
+#define ARRAY_LENGTH(x) ((sizeof(x)) / sizeof(x[0]))
#endif
diff --git a/src/common/util_codedigest.c b/src/common/util_codedigest.c
deleted file mode 100644
index 7384f7dc1a..0000000000
--- a/src/common/util_codedigest.c
+++ /dev/null
@@ -1,13 +0,0 @@
-
-#include "util.h"
-
-/** Return a string describing the digest of the source files in src/common/
- */
-const char *
-libor_get_digests(void)
-{
- return ""
-#include "common_sha1.i"
- ;
-}
-
diff --git a/src/common/workqueue.c b/src/common/workqueue.c
new file mode 100644
index 0000000000..c1bd6d4e8b
--- /dev/null
+++ b/src/common/workqueue.c
@@ -0,0 +1,495 @@
+/* copyright (c) 2013-2015, The Tor Project, Inc. */
+/* See LICENSE for licensing information */
+
+#include "orconfig.h"
+#include "compat.h"
+#include "compat_threads.h"
+#include "util.h"
+#include "workqueue.h"
+#include "tor_queue.h"
+#include "torlog.h"
+
+struct threadpool_s {
+ /** An array of pointers to workerthread_t: one for each running worker
+ * thread. */
+ struct workerthread_s **threads;
+
+ /** Condition variable that we wait on when we have no work, and which
+ * gets signaled when our queue becomes nonempty. */
+ tor_cond_t condition;
+ /** Queue of pending work that we have to do. */
+ TOR_TAILQ_HEAD(, workqueue_entry_s) work;
+
+ /** The current 'update generation' of the threadpool. Any thread that is
+ * at an earlier generation needs to run the update function. */
+ unsigned generation;
+
+ /** Function that should be run for updates on each thread. */
+ int (*update_fn)(void *, void *);
+ /** Function to free update arguments if they can't be run. */
+ void (*free_update_arg_fn)(void *);
+ /** Array of n_threads update arguments. */
+ void **update_args;
+
+ /** Number of elements in threads. */
+ int n_threads;
+ /** Mutex to protect all the above fields. */
+ tor_mutex_t lock;
+
+ /** A reply queue to use when constructing new threads. */
+ replyqueue_t *reply_queue;
+
+ /** Functions used to allocate and free thread state. */
+ void *(*new_thread_state_fn)(void*);
+ void (*free_thread_state_fn)(void*);
+ void *new_thread_state_arg;
+};
+
+struct workqueue_entry_s {
+ /** The next workqueue_entry_t that's pending on the same thread or
+ * reply queue. */
+ TOR_TAILQ_ENTRY(workqueue_entry_s) next_work;
+ /** The threadpool to which this workqueue_entry_t was assigned. This field
+ * is set when the workqueue_entry_t is created, and won't be cleared until
+ * after it's handled in the main thread. */
+ struct threadpool_s *on_pool;
+ /** True iff this entry is waiting for a worker to start processing it. */
+ uint8_t pending;
+ /** Function to run in the worker thread. */
+ int (*fn)(void *state, void *arg);
+ /** Function to run while processing the reply queue. */
+ void (*reply_fn)(void *arg);
+ /** Argument for the above functions. */
+ void *arg;
+};
+
+struct replyqueue_s {
+ /** Mutex to protect the answers field */
+ tor_mutex_t lock;
+ /** Doubly-linked list of answers that the reply queue needs to handle. */
+ TOR_TAILQ_HEAD(, workqueue_entry_s) answers;
+
+ /** Mechanism to wake up the main thread when it is receiving answers. */
+ alert_sockets_t alert;
+};
+
+/** A worker thread represents a single thread in a thread pool. To avoid
+ * contention, each gets its own queue. This breaks the guarantee that that
+ * queued work will get executed strictly in order. */
+typedef struct workerthread_s {
+ /** Which thread it this? In range 0..in_pool->n_threads-1 */
+ int index;
+ /** The pool this thread is a part of. */
+ struct threadpool_s *in_pool;
+ /** User-supplied state field that we pass to the worker functions of each
+ * work item. */
+ void *state;
+ /** Reply queue to which we pass our results. */
+ replyqueue_t *reply_queue;
+ /** The current update generation of this thread */
+ unsigned generation;
+} workerthread_t;
+
+static void queue_reply(replyqueue_t *queue, workqueue_entry_t *work);
+
+/** Allocate and return a new workqueue_entry_t, set up to run the function
+ * <b>fn</b> in the worker thread, and <b>reply_fn</b> in the main
+ * thread. See threadpool_queue_work() for full documentation. */
+static workqueue_entry_t *
+workqueue_entry_new(int (*fn)(void*, void*),
+ void (*reply_fn)(void*),
+ void *arg)
+{
+ workqueue_entry_t *ent = tor_malloc_zero(sizeof(workqueue_entry_t));
+ ent->fn = fn;
+ ent->reply_fn = reply_fn;
+ ent->arg = arg;
+ return ent;
+}
+
+/**
+ * Release all storage held in <b>ent</b>. Call only when <b>ent</b> is not on
+ * any queue.
+ */
+static void
+workqueue_entry_free(workqueue_entry_t *ent)
+{
+ if (!ent)
+ return;
+ memset(ent, 0xf0, sizeof(*ent));
+ tor_free(ent);
+}
+
+/**
+ * Cancel a workqueue_entry_t that has been returned from
+ * threadpool_queue_work.
+ *
+ * You must not call this function on any work whose reply function has been
+ * executed in the main thread; that will cause undefined behavior (probably,
+ * a crash).
+ *
+ * If the work is cancelled, this function return the argument passed to the
+ * work function. It is the caller's responsibility to free this storage.
+ *
+ * This function will have no effect if the worker thread has already executed
+ * or begun to execute the work item. In that case, it will return NULL.
+ */
+void *
+workqueue_entry_cancel(workqueue_entry_t *ent)
+{
+ int cancelled = 0;
+ void *result = NULL;
+ tor_mutex_acquire(&ent->on_pool->lock);
+ if (ent->pending) {
+ TOR_TAILQ_REMOVE(&ent->on_pool->work, ent, next_work);
+ cancelled = 1;
+ result = ent->arg;
+ }
+ tor_mutex_release(&ent->on_pool->lock);
+
+ if (cancelled) {
+ workqueue_entry_free(ent);
+ }
+ return result;
+}
+
+/**DOCDOC
+
+ must hold lock */
+static int
+worker_thread_has_work(workerthread_t *thread)
+{
+ return !TOR_TAILQ_EMPTY(&thread->in_pool->work) ||
+ thread->generation != thread->in_pool->generation;
+}
+
+/**
+ * Main function for the worker thread.
+ */
+static void
+worker_thread_main(void *thread_)
+{
+ workerthread_t *thread = thread_;
+ threadpool_t *pool = thread->in_pool;
+ workqueue_entry_t *work;
+ int result;
+
+ tor_mutex_acquire(&pool->lock);
+ while (1) {
+ /* lock must be held at this point. */
+ while (worker_thread_has_work(thread)) {
+ /* lock must be held at this point. */
+ if (thread->in_pool->generation != thread->generation) {
+ void *arg = thread->in_pool->update_args[thread->index];
+ thread->in_pool->update_args[thread->index] = NULL;
+ int (*update_fn)(void*,void*) = thread->in_pool->update_fn;
+ thread->generation = thread->in_pool->generation;
+ tor_mutex_release(&pool->lock);
+
+ int r = update_fn(thread->state, arg);
+
+ if (r < 0) {
+ return;
+ }
+
+ tor_mutex_acquire(&pool->lock);
+ continue;
+ }
+ work = TOR_TAILQ_FIRST(&pool->work);
+ TOR_TAILQ_REMOVE(&pool->work, work, next_work);
+ work->pending = 0;
+ tor_mutex_release(&pool->lock);
+
+ /* We run the work function without holding the thread lock. This
+ * is the main thread's first opportunity to give us more work. */
+ result = work->fn(thread->state, work->arg);
+
+ /* Queue the reply for the main thread. */
+ queue_reply(thread->reply_queue, work);
+
+ /* We may need to exit the thread. */
+ if (result >= WQ_RPL_ERROR) {
+ return;
+ }
+ tor_mutex_acquire(&pool->lock);
+ }
+ /* At this point the lock is held, and there is no work in this thread's
+ * queue. */
+
+ /* TODO: support an idle-function */
+
+ /* Okay. Now, wait till somebody has work for us. */
+ if (tor_cond_wait(&pool->condition, &pool->lock, NULL) < 0) {
+ log_warn(LD_GENERAL, "Fail tor_cond_wait.");
+ }
+ }
+}
+
+/** Put a reply on the reply queue. The reply must not currently be on
+ * any thread's work queue. */
+static void
+queue_reply(replyqueue_t *queue, workqueue_entry_t *work)
+{
+ int was_empty;
+ tor_mutex_acquire(&queue->lock);
+ was_empty = TOR_TAILQ_EMPTY(&queue->answers);
+ TOR_TAILQ_INSERT_TAIL(&queue->answers, work, next_work);
+ tor_mutex_release(&queue->lock);
+
+ if (was_empty) {
+ if (queue->alert.alert_fn(queue->alert.write_fd) < 0) {
+ /* XXXX complain! */
+ }
+ }
+}
+
+/** Allocate and start a new worker thread to use state object <b>state</b>,
+ * and send responses to <b>replyqueue</b>. */
+static workerthread_t *
+workerthread_new(void *state, threadpool_t *pool, replyqueue_t *replyqueue)
+{
+ workerthread_t *thr = tor_malloc_zero(sizeof(workerthread_t));
+ thr->state = state;
+ thr->reply_queue = replyqueue;
+ thr->in_pool = pool;
+
+ if (spawn_func(worker_thread_main, thr) < 0) {
+ log_err(LD_GENERAL, "Can't launch worker thread.");
+ return NULL;
+ }
+
+ return thr;
+}
+
+/**
+ * Queue an item of work for a thread in a thread pool. The function
+ * <b>fn</b> will be run in a worker thread, and will receive as arguments the
+ * thread's state object, and the provided object <b>arg</b>. It must return
+ * one of WQ_RPL_REPLY, WQ_RPL_ERROR, or WQ_RPL_SHUTDOWN.
+ *
+ * Regardless of its return value, the function <b>reply_fn</b> will later be
+ * run in the main thread when it invokes replyqueue_process(), and will
+ * receive as its argument the same <b>arg</b> object. It's the reply
+ * function's responsibility to free the work object.
+ *
+ * On success, return a workqueue_entry_t object that can be passed to
+ * workqueue_entry_cancel(). On failure, return NULL.
+ *
+ * Note that because each thread has its own work queue, work items may not
+ * be executed strictly in order.
+ */
+workqueue_entry_t *
+threadpool_queue_work(threadpool_t *pool,
+ int (*fn)(void *, void *),
+ void (*reply_fn)(void *),
+ void *arg)
+{
+ workqueue_entry_t *ent = workqueue_entry_new(fn, reply_fn, arg);
+ ent->on_pool = pool;
+ ent->pending = 1;
+
+ tor_mutex_acquire(&pool->lock);
+
+ TOR_TAILQ_INSERT_TAIL(&pool->work, ent, next_work);
+
+ tor_mutex_release(&pool->lock);
+
+ tor_cond_signal_one(&pool->condition);
+
+ return ent;
+}
+
+/**
+ * Queue a copy of a work item for every thread in a pool. This can be used,
+ * for example, to tell the threads to update some parameter in their states.
+ *
+ * Arguments are as for <b>threadpool_queue_work</b>, except that the
+ * <b>arg</b> value is passed to <b>dup_fn</b> once per each thread to
+ * make a copy of it.
+ *
+ * UPDATE FUNCTIONS MUST BE IDEMPOTENT. We do not guarantee that every update
+ * will be run. If a new update is scheduled before the old update finishes
+ * running, then the new will replace the old in any threads that haven't run
+ * it yet.
+ *
+ * Return 0 on success, -1 on failure.
+ */
+int
+threadpool_queue_update(threadpool_t *pool,
+ void *(*dup_fn)(void *),
+ int (*fn)(void *, void *),
+ void (*free_fn)(void *),
+ void *arg)
+{
+ int i, n_threads;
+ void (*old_args_free_fn)(void *arg);
+ void **old_args;
+ void **new_args;
+
+ tor_mutex_acquire(&pool->lock);
+ n_threads = pool->n_threads;
+ old_args = pool->update_args;
+ old_args_free_fn = pool->free_update_arg_fn;
+
+ new_args = tor_calloc(n_threads, sizeof(void*));
+ for (i = 0; i < n_threads; ++i) {
+ if (dup_fn)
+ new_args[i] = dup_fn(arg);
+ else
+ new_args[i] = arg;
+ }
+
+ pool->update_args = new_args;
+ pool->free_update_arg_fn = free_fn;
+ pool->update_fn = fn;
+ ++pool->generation;
+
+ tor_mutex_release(&pool->lock);
+
+ tor_cond_signal_all(&pool->condition);
+
+ if (old_args) {
+ for (i = 0; i < n_threads; ++i) {
+ if (old_args[i] && old_args_free_fn)
+ old_args_free_fn(old_args[i]);
+ }
+ tor_free(old_args);
+ }
+
+ return 0;
+}
+
+/** Launch threads until we have <b>n</b>. */
+static int
+threadpool_start_threads(threadpool_t *pool, int n)
+{
+ if (n < 0)
+ return -1;
+
+ tor_mutex_acquire(&pool->lock);
+
+ if (pool->n_threads < n)
+ pool->threads = tor_reallocarray(pool->threads,
+ sizeof(workerthread_t*), n);
+
+ while (pool->n_threads < n) {
+ void *state = pool->new_thread_state_fn(pool->new_thread_state_arg);
+ workerthread_t *thr = workerthread_new(state, pool, pool->reply_queue);
+
+ if (!thr) {
+ tor_mutex_release(&pool->lock);
+ return -1;
+ }
+ thr->index = pool->n_threads;
+ pool->threads[pool->n_threads++] = thr;
+ }
+ tor_mutex_release(&pool->lock);
+
+ return 0;
+}
+
+/**
+ * Construct a new thread pool with <b>n</b> worker threads, configured to
+ * send their output to <b>replyqueue</b>. The threads' states will be
+ * constructed with the <b>new_thread_state_fn</b> call, receiving <b>arg</b>
+ * as its argument. When the threads close, they will call
+ * <b>free_thread_state_fn</b> on their states.
+ */
+threadpool_t *
+threadpool_new(int n_threads,
+ replyqueue_t *replyqueue,
+ void *(*new_thread_state_fn)(void*),
+ void (*free_thread_state_fn)(void*),
+ void *arg)
+{
+ threadpool_t *pool;
+ pool = tor_malloc_zero(sizeof(threadpool_t));
+ tor_mutex_init_nonrecursive(&pool->lock);
+ tor_cond_init(&pool->condition);
+ TOR_TAILQ_INIT(&pool->work);
+
+ pool->new_thread_state_fn = new_thread_state_fn;
+ pool->new_thread_state_arg = arg;
+ pool->free_thread_state_fn = free_thread_state_fn;
+ pool->reply_queue = replyqueue;
+
+ if (threadpool_start_threads(pool, n_threads) < 0) {
+ tor_cond_uninit(&pool->condition);
+ tor_mutex_uninit(&pool->lock);
+ tor_free(pool);
+ return NULL;
+ }
+
+ return pool;
+}
+
+/** Return the reply queue associated with a given thread pool. */
+replyqueue_t *
+threadpool_get_replyqueue(threadpool_t *tp)
+{
+ return tp->reply_queue;
+}
+
+/** Allocate a new reply queue. Reply queues are used to pass results from
+ * worker threads to the main thread. Since the main thread is running an
+ * IO-centric event loop, it needs to get woken up with means other than a
+ * condition variable. */
+replyqueue_t *
+replyqueue_new(uint32_t alertsocks_flags)
+{
+ replyqueue_t *rq;
+
+ rq = tor_malloc_zero(sizeof(replyqueue_t));
+ if (alert_sockets_create(&rq->alert, alertsocks_flags) < 0) {
+ tor_free(rq);
+ return NULL;
+ }
+
+ tor_mutex_init(&rq->lock);
+ TOR_TAILQ_INIT(&rq->answers);
+
+ return rq;
+}
+
+/**
+ * Return the "read socket" for a given reply queue. The main thread should
+ * listen for read events on this socket, and call replyqueue_process() every
+ * time it triggers.
+ */
+tor_socket_t
+replyqueue_get_socket(replyqueue_t *rq)
+{
+ return rq->alert.read_fd;
+}
+
+/**
+ * Process all pending replies on a reply queue. The main thread should call
+ * this function every time the socket returned by replyqueue_get_socket() is
+ * readable.
+ */
+void
+replyqueue_process(replyqueue_t *queue)
+{
+ if (queue->alert.drain_fn(queue->alert.read_fd) < 0) {
+ static ratelim_t warn_limit = RATELIM_INIT(7200);
+ log_fn_ratelim(&warn_limit, LOG_WARN, LD_GENERAL,
+ "Failure from drain_fd");
+ }
+
+ tor_mutex_acquire(&queue->lock);
+ while (!TOR_TAILQ_EMPTY(&queue->answers)) {
+ /* lock must be held at this point.*/
+ workqueue_entry_t *work = TOR_TAILQ_FIRST(&queue->answers);
+ TOR_TAILQ_REMOVE(&queue->answers, work, next_work);
+ tor_mutex_release(&queue->lock);
+ work->on_pool = NULL;
+
+ work->reply_fn(work->arg);
+ workqueue_entry_free(work);
+
+ tor_mutex_acquire(&queue->lock);
+ }
+
+ tor_mutex_release(&queue->lock);
+}
+
diff --git a/src/common/workqueue.h b/src/common/workqueue.h
new file mode 100644
index 0000000000..92e82b8a48
--- /dev/null
+++ b/src/common/workqueue.h
@@ -0,0 +1,48 @@
+/* Copyright (c) 2013, The Tor Project, Inc. */
+/* See LICENSE for licensing information */
+
+#ifndef TOR_WORKQUEUE_H
+#define TOR_WORKQUEUE_H
+
+#include "compat.h"
+
+/** A replyqueue is used to tell the main thread about the outcome of
+ * work that we queued for the the workers. */
+typedef struct replyqueue_s replyqueue_t;
+/** A thread-pool manages starting threads and passing work to them. */
+typedef struct threadpool_s threadpool_t;
+/** A workqueue entry represents a request that has been passed to a thread
+ * pool. */
+typedef struct workqueue_entry_s workqueue_entry_t;
+
+/** Possible return value from a work function: indicates success. */
+#define WQ_RPL_REPLY 0
+/** Possible return value from a work function: indicates fatal error */
+#define WQ_RPL_ERROR 1
+/** Possible return value from a work function: indicates thread is shutting
+ * down. */
+#define WQ_RPL_SHUTDOWN 2
+
+workqueue_entry_t *threadpool_queue_work(threadpool_t *pool,
+ int (*fn)(void *, void *),
+ void (*reply_fn)(void *),
+ void *arg);
+int threadpool_queue_update(threadpool_t *pool,
+ void *(*dup_fn)(void *),
+ int (*fn)(void *, void *),
+ void (*free_fn)(void *),
+ void *arg);
+void *workqueue_entry_cancel(workqueue_entry_t *pending_work);
+threadpool_t *threadpool_new(int n_threads,
+ replyqueue_t *replyqueue,
+ void *(*new_thread_state_fn)(void*),
+ void (*free_thread_state_fn)(void*),
+ void *arg);
+replyqueue_t *threadpool_get_replyqueue(threadpool_t *tp);
+
+replyqueue_t *replyqueue_new(uint32_t alertsocks_flags);
+tor_socket_t replyqueue_get_socket(replyqueue_t *rq);
+void replyqueue_process(replyqueue_t *queue);
+
+#endif
+
diff --git a/src/config/geoip b/src/config/geoip
index 6fc1a4a753..759ad12665 100644
--- a/src/config/geoip
+++ b/src/config/geoip
@@ -1,4 +1,4 @@
-# Last updated based on November 15 2014 Maxmind GeoLite2 Country
+# Last updated based on April 8 2015 Maxmind GeoLite2 Country
# wget https://geolite.maxmind.com/download/geoip/database/GeoLite2-Country.mmdb.gz
# gunzip GeoLite2-Country.mmdb.gz
# python mmdb-convert.py GeoLite2-Country.mmdb
@@ -39,9 +39,11 @@
18219008,18350079,IN
18350080,18874367,CN
18874368,18907135,MY
-18907136,18939903,HK
+18907136,18923519,SG
+18923520,18939903,HK
18939904,19005439,JP
-19005440,19136511,TW
+19005440,19005440,CN
+19005441,19136511,TW
19136512,19202047,HK
19202048,19267583,PH
19267584,19398655,IN
@@ -207,7 +209,9 @@
83965952,83967999,CZ
83968000,83972863,DE
83972864,83973119,GB
-83973120,83976191,DE
+83973120,83974143,DE
+83974144,83974399,GB
+83974400,83976191,DE
83976192,83978239,CH
83978240,83980287,IQ
83980288,83982335,CH
@@ -223,14 +227,24 @@
84049920,84082687,RO
84082688,84148223,RU
84148224,84410367,DE
-84410368,84434943,RU
+84410368,84418559,RU
+84418560,84419583,BZ
+84419584,84421631,RU
+84421632,84421759,MX
+84421760,84421887,PA
+84421888,84422015,BR
+84422016,84422143,CL
+84422144,84422271,AR
+84422272,84422399,CO
+84422400,84422527,PL
+84422528,84422655,IT
+84422656,84434943,RU
84434944,84443135,IT
84443136,84451327,LB
84451328,84457471,RU
84457472,84459519,ES
84459520,84471807,RU
84471808,84473855,IQ
-84473856,84475903,HU
84475904,84545535,DE
84545536,84549631,GB
84549632,84551679,GE
@@ -275,6 +289,7 @@
85387264,85389311,SE
85389312,85391359,DE
85391360,85393407,NL
+85395456,85395711,TR
85395968,85396223,BE
85396480,85397503,ES
85398528,85398783,SA
@@ -297,8 +312,7 @@
85733376,85737471,GB
85737472,85753855,DE
85753856,85770239,IL
-85770240,85778431,MD
-85778432,85786623,DE
+85770240,85786623,DE
85786624,85852159,IL
85852160,86015999,AE
86016000,86018047,BG
@@ -335,22 +349,15 @@
86245376,86376447,OM
86376448,86409215,AE
86409216,86441983,HU
-86441984,86442255,FR
-86442256,86442271,GB
-86442272,86442359,FR
-86442360,86442367,BE
-86442368,86442399,ES
-86442400,86442415,FR
-86442416,86442431,GB
-86442432,86442495,FR
+86441984,86442495,FR
86442496,86442499,ES
86442500,86442507,FR
86442508,86442511,ES
-86442512,86442583,FR
-86442584,86442591,ES
+86442512,86442551,FR
+86442552,86442559,PL
+86442560,86442591,FR
86442592,86442599,IT
-86442600,86442603,ES
-86442604,86442687,FR
+86442600,86442687,FR
86442688,86442691,ES
86442692,86442699,FR
86442700,86442700,ES
@@ -364,528 +371,175 @@
86442752,86443007,GB
86443008,86443047,FR
86443048,86443051,ES
-86443052,86443055,GB
-86443056,86443103,FR
-86443104,86443135,GB
-86443136,86443183,FR
-86443184,86443199,PL
-86443200,86443295,FR
-86443296,86443311,ES
-86443312,86443363,FR
-86443364,86443367,IT
-86443368,86443423,FR
-86443424,86443427,IT
-86443428,86443431,IE
-86443432,86443451,FR
+86443052,86443451,FR
86443452,86443455,ES
-86443456,86443487,NL
-86443488,86443503,ES
-86443504,86443507,IT
-86443508,86443535,FR
+86443456,86443535,FR
86443536,86443539,ES
-86443540,86443567,FR
-86443568,86443575,IE
-86443576,86443823,FR
-86443824,86443839,PT
-86443840,86443887,FR
-86443888,86443903,DE
-86443904,86443995,FR
-86443996,86443999,PT
-86444000,86444079,FR
-86444080,86444095,GB
-86444096,86444119,FR
+86443540,86444119,FR
86444120,86444123,ES
-86444124,86444127,FR
-86444128,86444143,BE
-86444144,86444287,FR
+86444124,86444287,FR
86444288,86444291,NL
-86444292,86444303,FR
-86444304,86444307,DE
-86444308,86444311,PL
-86444312,86444315,FR
+86444292,86444315,FR
86444316,86444323,ES
-86444324,86444351,FR
-86444352,86444367,NL
-86444368,86444387,FR
+86444324,86444387,FR
86444388,86444391,NL
-86444392,86444395,FR
-86444396,86444399,GB
-86444400,86444447,FR
-86444448,86444479,ES
-86444480,86444519,FR
+86444392,86444519,FR
86444520,86444523,ES
-86444524,86444527,FR
-86444528,86444543,ES
-86444544,86444555,FR
-86444556,86444559,PL
-86444560,86444563,FR
+86444524,86444563,FR
86444564,86444567,NL
86444568,86444575,FR
86444576,86444579,ES
-86444580,86444587,FR
-86444588,86444599,IT
-86444600,86444607,FR
-86444608,86444623,IT
-86444624,86444639,FR
-86444640,86444655,GB
-86444656,86444687,FR
+86444580,86444687,FR
86444688,86444691,ES
-86444692,86444703,FR
-86444704,86444719,ES
-86444720,86444799,FR
-86444800,86444815,PL
-86444816,86444835,FR
+86444692,86444835,FR
86444836,86444839,NL
86444840,86444843,ES
-86444844,86444875,FR
-86444876,86444879,CH
+86444844,86444879,FR
86444880,86444883,NL
86444884,86444895,FR
86444896,86444903,NL
-86444904,86444959,FR
-86444960,86444967,GB
-86444968,86445059,FR
+86444904,86445059,FR
86445060,86445063,NL
-86445064,86445071,FR
-86445072,86445087,PL
-86445088,86445111,FR
+86445064,86445111,FR
86445112,86445115,NL
-86445116,86445119,FR
-86445120,86445151,ES
-86445152,86445215,FR
-86445216,86445231,CH
-86445232,86445235,IT
-86445236,86445251,FR
+86445116,86445251,FR
86445252,86445255,NL
-86445256,86445291,FR
-86445292,86445295,DE
-86445296,86445343,FR
-86445344,86445351,FI
-86445352,86445423,FR
-86445424,86445431,GB
-86445432,86445519,FR
-86445520,86445527,ES
-86445528,86445559,FR
+86445256,86445559,FR
86445560,86445563,NL
-86445564,86445711,FR
-86445712,86445727,PL
-86445728,86445743,FR
-86445744,86445759,DE
-86445760,86445891,FR
-86445892,86445895,ES
-86445896,86445939,FR
-86445940,86445943,NL
-86445944,86445983,FR
-86445984,86445999,IT
-86446000,86446027,FR
-86446028,86446031,IT
-86446032,86446039,FR
-86446040,86446043,IE
-86446044,86446063,FR
-86446064,86446079,IT
-86446080,86446143,FR
-86446144,86446175,NL
-86446176,86446335,FR
-86446336,86446367,IE
-86446368,86446399,GB
-86446400,86446407,FR
+86445564,86446407,FR
86446408,86446408,DE
86446409,86446411,FR
86446412,86446412,DE
86446413,86446427,FR
86446428,86446431,DE
-86446432,86446463,FR
-86446464,86446495,ES
-86446496,86446527,CH
-86446528,86446551,FR
-86446552,86446555,NL
-86446556,86446611,FR
-86446612,86446615,ES
-86446616,86446619,FR
+86446432,86446619,FR
86446620,86446620,DE
86446621,86446655,FR
-86446656,86446671,GB
-86446672,86446675,FR
-86446676,86446679,BE
+86446656,86446663,ES
+86446664,86446679,FR
86446680,86446683,ES
-86446684,86446711,FR
-86446712,86446719,DE
+86446684,86446719,FR
86446720,86446727,NL
-86446728,86446735,FR
-86446736,86446743,ES
-86446744,86446779,FR
-86446780,86446783,PL
-86446784,86446887,FR
-86446888,86446895,IT
-86446896,86446983,FR
+86446728,86446931,FR
+86446932,86446935,CZ
+86446936,86446983,FR
86446984,86446991,IT
-86446992,86447011,FR
-86447012,86447015,ES
-86447016,86447023,FR
-86447024,86447027,IE
-86447028,86447031,FR
-86447032,86447039,ES
-86447040,86447047,PT
-86447048,86447071,FR
+86446992,86447071,FR
86447072,86447087,DE
86447088,86447095,FR
86447096,86447103,ES
-86447104,86447147,FR
-86447148,86447151,ES
-86447152,86447231,FR
-86447232,86447239,PL
-86447240,86447255,FR
+86447104,86447255,FR
86447256,86447263,PL
-86447264,86447267,FR
-86447268,86447271,IE
-86447272,86447279,FR
+86447264,86447279,FR
86447280,86447280,DE
86447281,86447287,FR
86447288,86447288,DE
-86447289,86447339,FR
-86447340,86447343,IT
-86447344,86447355,FR
-86447356,86447359,CH
-86447360,86447847,FR
-86447848,86447855,ES
-86447856,86448287,FR
-86448288,86448319,GB
-86448320,86448351,ES
-86448352,86448487,FR
-86448488,86448495,GB
-86448496,86448511,FR
-86448512,86448527,IT
-86448528,86448671,FR
-86448672,86448687,DE
-86448688,86448803,FR
+86447289,86448559,FR
+86448560,86448575,GB
+86448576,86448803,FR
86448804,86448807,FI
86448808,86448851,FR
86448852,86448855,IT
86448856,86448859,PT
-86448860,86449167,FR
-86449168,86449183,ES
-86449184,86449291,FR
-86449292,86449295,PL
-86449296,86449311,FR
+86448860,86449311,FR
86449312,86449343,ES
86449344,86449363,FR
86449364,86449367,DE
-86449368,86449375,FR
-86449376,86449379,PL
-86449380,86449383,FR
-86449384,86449387,DE
-86449388,86449471,FR
-86449472,86449475,GB
-86449476,86449499,FR
+86449368,86449499,FR
86449500,86449503,ES
-86449504,86449563,FR
-86449564,86449567,PL
-86449568,86449599,FR
-86449600,86449631,ES
-86449632,86449867,FR
-86449868,86449871,DE
-86449872,86449883,FR
+86449504,86449883,FR
86449884,86449884,DE
-86449885,86450019,FR
-86450020,86450023,IT
-86450024,86450047,FR
-86450048,86450079,IT
-86450080,86450111,FR
-86450112,86450115,IT
-86450116,86450119,FR
-86450120,86450127,IT
-86450128,86450143,FR
-86450144,86450159,ES
-86450160,86450167,FR
-86450168,86450171,DE
-86450172,86450235,FR
+86449885,86450235,FR
86450236,86450239,GB
-86450240,86450339,FR
-86450340,86450343,NL
-86450344,86450351,DE
-86450352,86450371,FR
-86450372,86450375,BE
-86450376,86450439,FR
-86450440,86450447,ES
-86450448,86450527,FR
-86450528,86450559,PT
-86450560,86450591,BE
-86450592,86450607,FR
-86450608,86450615,CZ
-86450616,86450671,FR
-86450672,86450687,GB
-86450688,86450847,FR
-86450848,86450863,PT
-86450864,86450867,FR
-86450868,86450871,ES
-86450872,86450943,FR
-86450944,86450975,IT
-86450976,86451167,FR
+86450240,86451167,FR
86451168,86451175,NL
-86451176,86451183,PL
-86451184,86451199,ES
-86451200,86451259,FR
-86451260,86451263,IT
-86451264,86451359,FR
-86451360,86451363,ES
-86451364,86451375,FR
-86451376,86451391,LT
-86451392,86451407,IT
-86451408,86451411,IE
-86451412,86451463,FR
-86451464,86451467,CH
-86451468,86451663,FR
-86451664,86451667,DE
-86451668,86451675,FR
-86451676,86451687,PL
-86451688,86451695,DE
-86451696,86451887,FR
-86451888,86451895,ES
-86451896,86451903,FR
-86451904,86451967,NL
-86451968,86452055,FR
-86452056,86452059,NL
-86452060,86452067,FR
+86451176,86452067,FR
86452068,86452071,ES
-86452072,86452215,FR
-86452216,86452223,IT
-86452224,86452263,FR
-86452264,86452267,ES
-86452268,86452279,FR
-86452280,86452283,ES
-86452284,86452287,DE
-86452288,86452291,IT
-86452292,86452299,FR
+86452072,86452299,FR
86452300,86452303,IT
-86452304,86452399,FR
-86452400,86452415,GB
-86452416,86452671,FR
+86452304,86452367,FR
+86452368,86452383,GB
+86452384,86452671,FR
86452672,86452735,GB
-86452736,86452943,FR
-86452944,86452959,GB
-86452960,86453031,FR
-86453032,86453039,ES
-86453040,86453135,FR
-86453136,86453151,PT
-86453152,86453199,FR
+86452736,86453199,FR
86453200,86453203,ES
-86453204,86453215,FR
-86453216,86453231,BE
-86453232,86453247,FR
-86453248,86453251,IT
-86453252,86453311,FR
+86453204,86453311,FR
86453312,86453315,ES
-86453316,86453379,FR
-86453380,86453383,ES
-86453384,86453391,FR
-86453392,86453399,GB
-86453400,86453503,FR
-86453504,86453631,GB
-86453632,86453791,FR
-86453792,86453807,FI
-86453808,86453823,FR
-86453824,86453836,IT
+86453316,86453836,FR
86453837,86453838,PT
-86453839,86453839,IT
-86453840,86453847,FR
-86453848,86453851,ES
-86453852,86454015,FR
-86454016,86454047,PL
-86454048,86454119,FR
-86454120,86454123,DE
-86454124,86454187,FR
+86453839,86454187,FR
86454188,86454191,IT
-86454192,86454271,FR
-86454272,86454279,GB
+86454192,86454279,FR
86454280,86454287,ES
86454288,86454295,IT
86454296,86454299,FR
86454300,86454303,DE
86454304,86454335,FR
86454336,86454343,DE
-86454344,86454351,FR
-86454352,86454367,CH
-86454368,86454559,FR
-86454560,86454591,CZ
-86454592,86454607,PT
-86454608,86454611,NL
-86454612,86454615,PL
+86454344,86454615,FR
86454616,86454619,ES
-86454620,86454655,FR
-86454656,86454671,IT
-86454672,86454703,FR
-86454704,86454707,PL
-86454708,86454715,FR
-86454716,86454719,CZ
-86454720,86454823,FR
+86454620,86454823,FR
86454824,86454831,ES
-86454832,86454863,FR
-86454864,86454867,DE
-86454868,86454927,FR
-86454928,86454943,GB
-86454944,86454959,ES
-86454960,86455103,FR
-86455104,86455135,DE
-86455136,86455167,FR
-86455168,86455199,GB
-86455200,86455231,ES
-86455232,86455263,GB
-86455264,86455439,FR
-86455440,86455455,CH
-86455456,86455519,FR
-86455520,86455551,BE
-86455552,86455591,FR
+86454832,86455591,FR
86455592,86455595,NL
86455596,86455623,FR
86455624,86455624,DE
-86455625,86455839,FR
-86455840,86455871,DE
-86455872,86455967,FR
-86455968,86455999,PL
-86456000,86456015,FI
-86456016,86456087,FR
-86456088,86456091,CZ
-86456092,86456127,FR
-86456128,86456143,GB
-86456144,86456159,FR
-86456160,86456191,NL
-86456192,86456195,FR
-86456196,86456215,DE
-86456216,86456279,FR
-86456280,86456283,DE
-86456284,86456335,FR
-86456336,86456351,IE
+86455625,86456195,FR
+86456196,86456211,DE
+86456212,86456351,FR
86456352,86456367,CH
86456368,86456371,FR
86456372,86456375,ES
-86456376,86456575,FR
-86456576,86456831,DE
-86456832,86457055,FR
-86457056,86457059,NL
+86456376,86457059,FR
86457060,86457060,DE
86457061,86457087,FR
86457088,86457091,DE
86457092,86457111,FR
86457112,86457112,DE
-86457113,86457175,FR
-86457176,86457179,GB
-86457180,86457187,FR
+86457113,86457187,FR
86457188,86457191,ES
-86457192,86457231,FR
-86457232,86457235,PT
-86457236,86457239,PL
-86457240,86457243,DE
-86457244,86457311,FR
-86457312,86457327,CH
-86457328,86457391,FR
-86457392,86457395,BE
-86457396,86457403,FR
+86457192,86457403,FR
86457404,86457407,ES
86457408,86457455,FR
86457456,86457456,DE
-86457457,86457615,FR
-86457616,86457623,IE
-86457624,86457631,FR
-86457632,86457647,ES
-86457648,86457711,FR
-86457712,86457727,ES
-86457728,86457799,FR
+86457457,86457799,FR
86457800,86457803,ES
-86457804,86457807,FR
-86457808,86457811,ES
-86457812,86458159,FR
-86458160,86458175,DE
-86458176,86466603,FR
-86466604,86466607,ES
-86466608,86466623,FR
-86466624,86466639,ES
-86466640,86466839,FR
+86457804,86466839,FR
86466840,86466847,NL
-86466848,86466879,FR
-86466880,86466943,GB
+86466848,86466943,FR
86466944,86466959,DE
-86466960,86467039,FR
-86467040,86467055,IT
-86467056,86467059,GB
-86467060,86467219,FR
-86467220,86467223,DE
-86467224,86467291,FR
-86467292,86467295,LT
-86467296,86467320,FR
+86466960,86467320,FR
86467321,86467321,FI
-86467322,86467455,FR
-86467456,86467487,GB
-86467488,86467551,FR
-86467552,86467583,PT
-86467584,86467903,FR
-86467904,86467935,GB
-86467936,86467999,FR
+86467322,86467999,FR
86468000,86468003,PL
-86468004,86468043,FR
-86468044,86468047,DE
-86468048,86468055,FR
+86468004,86468055,FR
86468056,86468056,DE
86468057,86468447,FR
86468448,86468479,CZ
86468480,86468587,FR
86468588,86468591,ES
-86468592,86468759,FR
-86468760,86468763,IT
-86468764,86469183,FR
+86468592,86469183,FR
86469184,86469247,GB
-86469248,86469375,FR
-86469376,86469631,BE
-86469632,86469691,FR
+86469248,86469691,FR
86469692,86469695,DE
86469696,86469779,FR
86469780,86469783,IT
-86469784,86469863,FR
-86469864,86469867,GB
-86469868,86469919,FR
-86469920,86469935,PT
-86469936,86470207,FR
-86470208,86470239,FI
-86470240,86470271,GB
-86470272,86470279,FR
-86470280,86470287,PL
-86470288,86470351,FR
-86470352,86470359,IT
-86470360,86470731,FR
+86469784,86470007,FR
+86470008,86470008,ES
+86470009,86470731,FR
86470732,86470735,BE
-86470736,86470959,FR
-86470960,86470967,IT
-86470968,86471095,FR
-86471096,86471099,ES
-86471100,86471179,FR
+86470736,86471083,FR
+86471084,86471087,DE
+86471088,86471179,FR
86471180,86471180,DE
-86471181,86471807,FR
-86471808,86471839,CH
-86471840,86471871,GB
-86471872,86471935,ES
-86471936,86471995,FR
-86471996,86471999,DE
-86472000,86472095,FR
-86472096,86472127,GB
-86472128,86472291,FR
-86472292,86472295,GB
-86472296,86472415,FR
-86472416,86472431,ES
-86472432,86472479,FR
-86472480,86472495,PL
-86472496,86473087,FR
+86471181,86473087,FR
86473088,86473151,PT
-86473152,86473215,FR
-86473216,86473247,DE
-86473248,86473359,FR
+86473152,86473359,FR
86473360,86473363,IT
86473364,86473423,FR
86473424,86473427,NL
-86473428,86473983,FR
-86473984,86474047,IT
-86474048,86474143,FR
-86474144,86474151,GB
-86474152,86474303,FR
-86474304,86474311,DE
+86473428,86474307,FR
+86474308,86474311,DE
86474312,86474475,FR
86474476,86474479,DE
86474480,86474527,FR
@@ -906,7 +560,7 @@
86503424,86505471,DE
86505472,86507519,GB
86507520,86573055,ES
-86573056,86638591,RO
+86573056,86638591,SA
86638592,86671359,RU
86671360,86672895,JE
86672896,86673151,GB
@@ -935,7 +589,8 @@
86794240,86795263,DE
86795264,86796287,NL
86796288,86797311,US
-86797312,86798335,DE
+86797312,86797343,PY
+86797344,86798335,DE
86798336,86802431,CH
86802432,86804479,GE
86804480,86806527,DK
@@ -1000,7 +655,9 @@
87601152,87621631,DE
87621632,87623679,LB
87623680,87625727,KG
-87625728,87627775,NL
+87625728,87626880,NL
+87626881,87626881,GB
+87626882,87627775,NL
87627776,87629823,ES
87629824,87631871,IR
87631872,87633919,DE
@@ -1081,7 +738,7 @@
88940544,88948735,GB
88948736,88965119,IT
88965120,88997887,AM
-88997888,89063423,DE
+88997888,89063423,IR
89063424,89079807,GB
89079808,89096191,NL
89096192,89128959,RU
@@ -1111,7 +768,7 @@
90476544,90478591,FR
90478592,90480639,VG
90480640,90482687,YE
-90482688,90484735,SA
+90482688,90484735,GB
90484736,90488831,NO
90488832,90497023,BY
90497024,90499071,NL
@@ -1142,7 +799,7 @@
90609664,90611711,RU
90611712,90613759,DE
90613760,90615807,GB
-90615808,90617855,SI
+90615808,90617855,BA
90617856,90619903,GB
90619904,90636287,IL
90636288,90701823,DK
@@ -1163,7 +820,8 @@
90734592,90736639,SY
90736640,90738687,NL
90738688,90740735,DE
-90740736,90742783,NL
+90740736,90742527,NL
+90742528,90742783,RO
90742784,90750975,BG
90750976,90753023,FR
90753024,90755071,RU
@@ -1181,7 +839,8 @@
90963968,91226111,SA
91226112,92274687,IR
92274688,92536831,RU
-92536832,92602367,NL
+92536832,92585983,NL
+92585984,92602367,SA
92602368,92604415,BA
92604416,92606463,PL
92606464,92608511,GB
@@ -1192,7 +851,82 @@
92635136,92643327,BA
92643328,92645375,GE
92645376,92651519,GB
-92651520,92659711,SE
+92651520,92654591,SE
+92654592,92654623,US
+92654624,92654847,SE
+92654848,92654879,US
+92654880,92655039,SE
+92655040,92655071,NL
+92655072,92655103,SE
+92655104,92655135,US
+92655136,92655295,SE
+92655296,92655327,NL
+92655328,92655359,SE
+92655360,92655391,US
+92655392,92655615,SE
+92655616,92655647,US
+92655648,92655727,SE
+92655728,92655743,NL
+92655744,92655871,SE
+92655872,92655903,US
+92655904,92655999,SE
+92656000,92656015,NL
+92656016,92656127,SE
+92656128,92656159,US
+92656160,92656223,SE
+92656224,92656239,NL
+92656240,92656383,SE
+92656384,92656415,US
+92656416,92656591,SE
+92656592,92656607,NL
+92656608,92656639,SE
+92656640,92656671,US
+92656672,92656783,SE
+92656784,92656799,NL
+92656800,92656895,SE
+92656896,92656927,US
+92656928,92657103,SE
+92657104,92657119,NL
+92657120,92657151,SE
+92657152,92657183,US
+92657184,92657279,SE
+92657280,92657295,NL
+92657296,92657407,SE
+92657408,92657439,US
+92657440,92657631,SE
+92657632,92657663,NL
+92657664,92657695,US
+92657696,92657775,SE
+92657776,92657823,NL
+92657824,92657919,SE
+92657920,92657951,US
+92657952,92658111,SE
+92658112,92658127,NL
+92658128,92658175,SE
+92658176,92658207,US
+92658208,92658303,SE
+92658304,92658319,NL
+92658320,92658431,SE
+92658432,92658463,US
+92658464,92658575,SE
+92658576,92658591,NL
+92658592,92658687,SE
+92658688,92658719,US
+92658720,92658847,SE
+92658848,92658879,NL
+92658880,92658943,SE
+92658944,92658975,US
+92658976,92659055,SE
+92659056,92659103,NL
+92659104,92659199,SE
+92659200,92659231,US
+92659232,92659295,SE
+92659296,92659311,NL
+92659312,92659455,SE
+92659456,92659471,US
+92659472,92659631,SE
+92659632,92659647,NL
+92659648,92659711,SE
92659712,92663807,AZ
92663808,92665855,GB
92665856,92667903,PL
@@ -1215,50 +949,17 @@
92721152,92723199,PL
92723200,92725247,RU
92725248,92733439,SY
-92733440,92733503,FR
-92733504,92733535,PL
-92733536,92733743,FR
-92733744,92733751,IT
-92733752,92733775,FR
-92733776,92733783,DE
-92733784,92733791,FR
-92733792,92733807,PT
-92733808,92733927,FR
-92733928,92733931,BE
-92733932,92734255,FR
-92734256,92734271,DE
-92734272,92734307,FR
-92734308,92734311,ES
-92734312,92734515,FR
+92733440,92734515,FR
92734516,92734519,IT
-92734520,92734639,FR
-92734640,92734655,ES
-92734656,92734671,FR
-92734672,92734687,IT
-92734688,92734735,FR
+92734520,92734735,FR
92734736,92734739,DE
-92734740,92734879,FR
-92734880,92734895,IT
-92734896,92734943,FR
-92734944,92734975,BE
-92734976,92735263,FR
-92735264,92735295,CZ
-92735296,92735343,FR
-92735344,92735347,GB
-92735348,92735439,FR
-92735440,92735455,ES
-92735456,92735471,FR
-92735472,92735479,IT
-92735480,92735535,FR
-92735536,92735543,PL
-92735544,92735583,FR
-92735584,92735615,FI
+92734740,92735103,FR
+92735104,92735119,GB
+92735120,92735615,FR
92735616,92735616,DE
92735617,92735619,FR
92735620,92735623,ES
-92735624,92735679,FR
-92735680,92735711,NL
-92735712,92735823,FR
+92735624,92735823,FR
92735824,92735827,ES
92735828,92735875,FR
92735876,92735876,DE
@@ -1268,630 +969,126 @@
92736480,92736480,DE
92736481,92736571,FR
92736572,92736575,NL
-92736576,92736863,FR
-92736864,92736895,PL
-92736896,92737247,FR
-92737248,92737279,NL
-92737280,92737343,FR
-92737344,92737375,ES
-92737376,92737407,FR
-92737408,92737439,CH
-92737440,92737471,FR
-92737472,92737503,ES
-92737504,92737631,FR
-92737632,92737647,NL
-92737648,92738479,FR
-92738480,92738487,IT
-92738488,92738511,FR
-92738512,92738515,ES
-92738516,92738559,FR
-92738560,92738591,DE
-92738592,92738611,FR
-92738612,92738615,FI
-92738616,92738663,FR
+92736576,92737751,FR
+92737752,92737759,NL
+92737760,92738071,FR
+92738072,92738075,DE
+92738076,92738271,FR
+92738272,92738303,NL
+92738304,92738663,FR
92738664,92738679,ES
-92738680,92739355,FR
-92739356,92739359,ES
-92739360,92739503,FR
-92739504,92739507,IT
-92739508,92739839,FR
-92739840,92739903,PT
-92739904,92739967,FR
-92739968,92740031,PL
-92740032,92740095,FR
-92740096,92740127,PL
-92740128,92740287,FR
-92740288,92740351,IE
-92740352,92740447,FR
+92738680,92739199,FR
+92739200,92739215,DE
+92739216,92740447,FR
92740448,92740455,IT
-92740456,92740639,FR
-92740640,92740671,CZ
-92740672,92740767,FR
-92740768,92740815,PL
-92740816,92740831,FR
-92740832,92740847,ES
-92740848,92741203,FR
+92740456,92741203,FR
92741204,92741207,IT
-92741208,92741343,FR
-92741344,92741351,IT
-92741352,92741387,FR
+92741208,92741387,FR
92741388,92741395,IT
-92741396,92741431,FR
-92741432,92741439,IE
-92741440,92741471,FR
-92741472,92741503,CZ
-92741504,92741791,FR
-92741792,92741823,IT
-92741824,92742207,FR
-92742208,92742247,GB
-92742248,92742347,FR
+92741396,92742347,FR
92742348,92742351,IT
-92742352,92742367,FR
-92742368,92742399,GB
-92742400,92742415,BE
+92742352,92742415,FR
92742416,92742419,IT
-92742420,92742431,FR
-92742432,92742463,PT
-92742464,92742487,FR
+92742420,92742487,FR
92742488,92742491,IT
-92742492,92742527,FR
-92742528,92742543,IT
-92742544,92742687,FR
-92742688,92742691,IE
+92742492,92742639,FR
+92742640,92742643,ES
+92742644,92742691,FR
92742692,92742695,IT
-92742696,92742703,ES
-92742704,92742815,FR
+92742696,92742815,FR
92742816,92742819,ES
-92742820,92743215,FR
-92743216,92743231,BE
-92743232,92743243,FR
+92742820,92743047,FR
+92743048,92743055,NL
+92743056,92743243,FR
92743244,92743247,IT
-92743248,92743263,FR
-92743264,92743279,GB
-92743280,92743295,ES
+92743248,92743295,FR
92743296,92743307,IT
92743308,92743311,FR
92743312,92743315,IT
92743316,92743355,FR
92743356,92743359,IT
-92743360,92743503,FR
-92743504,92743519,IT
-92743520,92743535,FR
-92743536,92743551,ES
-92743552,92743611,FR
+92743360,92743611,FR
92743612,92743615,IT
-92743616,92743631,FR
-92743632,92743639,IT
-92743640,92743643,ES
-92743644,92743663,FR
-92743664,92743671,IT
-92743672,92743955,FR
+92743616,92743955,FR
92743956,92743959,IT
-92743960,92744111,FR
-92744112,92744119,PL
-92744120,92744123,FR
-92744124,92744127,GB
-92744128,92744159,IT
-92744160,92744175,FR
-92744176,92744191,DE
-92744192,92744223,FR
-92744224,92744227,DE
-92744228,92744243,FR
+92743960,92744243,FR
92744244,92744247,NL
92744248,92744263,FR
92744264,92744267,NL
92744268,92744283,FR
92744284,92744291,NL
-92744292,92744295,ES
-92744296,92744351,FR
-92744352,92744367,BE
-92744368,92744479,FR
-92744480,92744511,GB
-92744512,92744543,FR
-92744544,92744547,BE
-92744548,92744551,FR
-92744552,92744555,ES
+92744292,92744555,FR
92744556,92744559,IT
-92744560,92744719,FR
-92744720,92744735,BE
-92744736,92744743,GB
-92744744,92744767,FR
-92744768,92744799,NL
-92744800,92744895,FR
-92744896,92744927,IT
-92744928,92744935,CZ
-92744936,92744943,CH
-92744944,92744959,FR
-92744960,92744975,PL
-92744976,92745071,FR
-92745072,92745087,ES
-92745088,92745375,FR
-92745376,92745391,IT
-92745392,92745399,FR
-92745400,92745407,ES
-92745408,92745439,IE
-92745440,92745471,NL
-92745472,92745503,FR
-92745504,92745535,DE
-92745536,92745663,FR
-92745664,92745695,IT
-92745696,92745807,FR
-92745808,92745823,NL
-92745824,92745871,FR
-92745872,92745887,IT
-92745888,92746303,FR
-92746304,92746335,GB
-92746336,92746383,FR
-92746384,92746399,CZ
-92746400,92746415,FR
+92744560,92744575,NL
+92744576,92745207,FR
+92745208,92745215,ES
+92745216,92746415,FR
92746416,92746431,ES
-92746432,92746559,FR
-92746560,92746623,GB
-92746624,92746639,BE
-92746640,92747199,FR
-92747200,92747231,GB
-92747232,92747255,FR
-92747256,92747263,PL
-92747264,92747267,NL
-92747268,92747327,FR
-92747328,92747335,BE
-92747336,92747343,FR
-92747344,92747347,ES
-92747348,92747539,FR
-92747540,92747543,CH
-92747544,92747547,FR
-92747548,92747551,ES
-92747552,92747567,FR
-92747568,92747583,BE
-92747584,92747687,FR
-92747688,92747691,NL
-92747692,92747699,FR
-92747700,92747703,FI
-92747704,92747711,FR
+92746432,92747711,FR
92747712,92747775,GB
-92747776,92748303,FR
-92748304,92748319,CH
-92748320,92748511,FR
-92748512,92748543,IE
-92748544,92748773,FR
+92747776,92748773,FR
92748774,92748774,PT
-92748775,92748847,FR
-92748848,92748851,BE
-92748852,92748863,FR
-92748864,92748879,ES
-92748880,92749067,FR
+92748775,92749067,FR
92749068,92749071,GB
-92749072,92749183,FR
-92749184,92749215,IT
-92749216,92749439,FR
-92749440,92749471,DE
-92749472,92749531,FR
-92749532,92749535,ES
-92749536,92749747,FR
+92749072,92749747,FR
92749748,92749751,ES
-92749752,92750255,FR
-92750256,92750271,PL
-92750272,92750603,FR
-92750604,92750607,LT
-92750608,92750655,FR
-92750656,92750719,GB
-92750720,92750751,FR
-92750752,92750783,ES
-92750784,92750815,GB
-92750816,92750839,FR
-92750840,92750843,PL
-92750844,92750879,FR
-92750880,92750887,CZ
-92750888,92750975,FR
-92750976,92751039,PT
-92751040,92751071,FR
-92751072,92751103,GB
-92751104,92751679,FR
-92751680,92751711,IT
+92749752,92751711,FR
92751712,92751712,DE
-92751713,92752127,FR
-92752128,92752143,IT
-92752144,92752359,FR
-92752360,92752363,NL
-92752364,92752431,FR
-92752432,92752447,GB
-92752448,92752543,FR
-92752544,92752575,DE
-92752576,92752591,NL
-92752592,92752607,FR
-92752608,92752611,IT
-92752612,92752687,FR
-92752688,92752703,ES
-92752704,92752735,FR
-92752736,92752751,ES
-92752752,92752767,IT
-92752768,92752831,FR
-92752832,92752847,IT
-92752848,92752863,FR
-92752864,92752895,IT
-92752896,92753079,FR
+92751713,92753079,FR
92753080,92753087,ES
-92753088,92753095,IT
-92753096,92753183,FR
-92753184,92753215,GB
-92753216,92753279,FR
-92753280,92753311,CH
-92753312,92753343,BE
-92753344,92753547,FR
+92753088,92753547,FR
92753548,92753551,IT
-92753552,92753567,FR
-92753568,92753599,BE
-92753600,92753823,FR
-92753824,92753855,DE
-92753856,92754095,FR
-92754096,92754111,GB
-92754112,92754447,FR
-92754448,92754463,GB
-92754464,92754479,FR
-92754480,92754503,ES
-92754504,92754527,FR
-92754528,92754543,PT
-92754544,92754579,FR
+92753552,92754579,FR
92754580,92754583,ES
-92754584,92754623,FR
-92754624,92754639,PL
-92754640,92754655,FR
-92754656,92754671,IT
-92754672,92755199,FR
-92755200,92755231,NL
-92755232,92755279,FR
-92755280,92755287,DE
-92755288,92755335,FR
-92755336,92755343,ES
-92755344,92755375,FR
-92755376,92755423,GB
-92755424,92755455,FR
-92755456,92755487,CH
-92755488,92755583,FR
-92755584,92755615,CZ
-92755616,92755871,FR
-92755872,92755887,GB
-92755888,92755903,ES
-92755904,92756095,FR
-92756096,92756127,DE
-92756128,92756175,FR
-92756176,92756191,PL
-92756192,92756479,FR
-92756480,92756495,GB
-92756496,92757199,FR
-92757200,92757215,GB
-92757216,92757311,FR
+92754584,92757311,FR
92757312,92757375,ES
-92757376,92758127,FR
-92758128,92758143,GB
-92758144,92758223,FR
-92758224,92758239,CH
-92758240,92758271,FR
-92758272,92758287,ES
-92758288,92758399,FR
-92758400,92758415,PL
-92758416,92758655,FR
-92758656,92758687,DE
-92758688,92758799,FR
-92758800,92758803,DE
-92758804,92758807,ES
-92758808,92758811,FR
-92758812,92758815,DE
-92758816,92758863,FR
-92758864,92758879,PL
-92758880,92759031,FR
-92759032,92759039,GB
-92759040,92759119,FR
-92759120,92759135,NL
-92759136,92759167,FR
-92759168,92759183,GB
-92759184,92760495,FR
-92760496,92760511,ES
-92760512,92760559,FR
-92760560,92760575,ES
-92760576,92760715,FR
-92760716,92760719,ES
-92760720,92761215,FR
+92757376,92761215,FR
92761216,92761343,DE
-92761344,92761759,FR
-92761760,92761763,IT
-92761764,92761939,FR
-92761940,92761943,GB
-92761944,92762127,FR
+92761344,92762127,FR
92762128,92762135,ES
-92762136,92762319,FR
-92762320,92762335,DE
-92762336,92762383,FR
+92762136,92762383,FR
92762384,92762391,ES
-92762392,92762655,FR
-92762656,92762687,IT
-92762688,92762839,FR
-92762840,92762847,ES
-92762848,92762879,FR
-92762880,92762911,CH
-92762912,92763311,FR
-92763312,92763327,DE
-92763328,92763331,FR
-92763332,92763339,ES
-92763340,92763391,FR
-92763392,92763519,IE
-92763520,92763647,FR
-92763648,92763679,FI
-92763680,92763711,ES
-92763712,92763775,NL
-92763776,92763839,FR
-92763840,92763903,NL
-92763904,92764287,FR
-92764288,92764303,IE
-92764304,92764431,FR
-92764432,92764447,PL
-92764448,92764463,FR
-92764464,92764479,GB
-92764480,92764511,FR
-92764512,92764543,DE
-92764544,92764595,FR
-92764596,92764599,ES
-92764600,92764799,FR
-92764800,92764807,DE
-92764808,92764863,FR
-92764864,92764911,GB
-92764912,92765295,FR
-92765296,92765311,IT
-92765312,92765351,FR
-92765352,92765359,BE
-92765360,92765391,FR
-92765392,92765395,IT
-92765396,92766015,FR
-92766016,92766047,NL
-92766048,92766079,FR
-92766080,92766143,PT
-92766144,92782687,FR
+92762392,92764223,FR
+92764224,92764287,ES
+92764288,92782687,FR
92782688,92782719,ES
-92782720,92782731,FR
-92782732,92782735,ES
-92782736,92782811,FR
-92782812,92782815,CH
-92782816,92782847,FR
-92782848,92782879,NL
-92782880,92782943,FR
-92782944,92782975,IT
-92782976,92783291,FR
+92782720,92783291,FR
92783292,92783295,DE
92783296,92783543,FR
92783544,92783547,ES
-92783548,92783715,FR
-92783716,92783719,NL
-92783720,92783723,IT
-92783724,92783727,FR
-92783728,92783731,ES
-92783732,92783735,IT
-92783736,92783911,FR
-92783912,92783919,PT
-92783920,92783999,FR
-92784000,92784031,IT
-92784032,92784159,FR
-92784160,92784191,CH
-92784192,92784223,FR
-92784224,92784239,PL
-92784240,92784255,FR
+92783548,92784159,FR
+92784160,92784191,IT
+92784192,92784239,FR
+92784240,92784243,DE
+92784244,92784255,FR
92784256,92784263,NL
-92784264,92784291,FR
-92784292,92784295,PL
-92784296,92784299,FR
-92784300,92784303,DE
-92784304,92784467,FR
-92784468,92784471,NL
-92784472,92784479,FR
-92784480,92784511,ES
-92784512,92784639,GB
-92784640,92784671,FR
-92784672,92784703,GB
-92784704,92784807,FR
-92784808,92784815,LT
-92784816,92785363,FR
+92784264,92785363,FR
92785364,92785367,PT
-92785368,92785407,FR
-92785408,92785439,CH
-92785440,92785599,FR
-92785600,92785607,GB
-92785608,92785615,FR
-92785616,92785631,IT
-92785632,92785663,FR
-92785664,92785679,BE
-92785680,92785687,ES
-92785688,92785695,DE
-92785696,92785791,FR
-92785792,92785823,IT
-92785824,92785871,FR
-92785872,92785887,IT
-92785888,92786183,FR
-92786184,92786187,ES
-92786188,92786191,PT
-92786192,92786199,FR
-92786200,92786207,BE
-92786208,92786239,FR
-92786240,92786255,FI
-92786256,92786311,FR
-92786312,92786319,CZ
-92786320,92786631,FR
-92786632,92786639,BE
-92786640,92786743,FR
-92786744,92786751,DE
-92786752,92786827,FR
+92785368,92785735,FR
+92785736,92785739,DE
+92785740,92786827,FR
92786828,92786831,IT
-92786832,92786855,FR
-92786856,92786859,PL
-92786860,92786879,FR
-92786880,92786911,DE
-92786912,92786927,GB
-92786928,92786943,ES
-92786944,92786975,FR
-92786976,92786979,GB
-92786980,92786991,FR
-92786992,92786999,IT
-92787000,92787111,FR
-92787112,92787119,IT
-92787120,92787391,FR
-92787392,92787407,BE
-92787408,92787423,FR
-92787424,92787503,ES
-92787504,92787639,FR
-92787640,92787647,DE
-92787648,92787967,FR
-92787968,92788031,ES
-92788032,92788095,FR
-92788096,92788127,PL
-92788128,92788171,FR
-92788172,92788175,ES
-92788176,92788255,FR
-92788256,92788259,PT
-92788260,92788263,FR
-92788264,92788271,GB
-92788272,92788383,FR
-92788384,92788415,CZ
-92788416,92788479,FR
-92788480,92788511,IE
-92788512,92788607,FR
-92788608,92788639,NL
-92788640,92788687,FR
-92788688,92788703,ES
-92788704,92788735,BE
-92788736,92788967,FR
-92788968,92788975,DE
-92788976,92789055,FR
-92789056,92789071,ES
-92789072,92789079,FR
-92789080,92789083,IT
-92789084,92789223,FR
-92789224,92789231,NL
-92789232,92789335,FR
-92789336,92789339,CH
-92789340,92789343,CZ
-92789344,92789383,FR
-92789384,92789387,NL
-92789388,92789391,FR
-92789392,92789395,IT
-92789396,92789399,DE
-92789400,92789423,FR
-92789424,92789427,ES
-92789428,92789475,FR
-92789476,92789479,IT
-92789480,92789499,FR
+92786832,92789499,FR
92789500,92789503,IT
-92789504,92789743,FR
-92789744,92789759,PL
-92789760,92789919,FR
-92789920,92789951,PL
-92789952,92790239,FR
-92790240,92790271,IE
-92790272,92790283,FR
-92790284,92790287,PL
-92790288,92790367,FR
-92790368,92790371,PT
-92790372,92790463,FR
-92790464,92790495,GB
-92790496,92790511,FR
-92790512,92790527,GB
-92790528,92790575,FR
-92790576,92790591,PT
-92790592,92790703,FR
-92790704,92790719,IT
-92790720,92790799,FR
-92790800,92790803,BE
-92790804,92790815,FR
-92790816,92790847,LT
-92790848,92790863,FI
-92790864,92790959,FR
-92790960,92790975,DE
-92790976,92791039,FR
-92791040,92791167,ES
-92791168,92791183,BE
-92791184,92791215,FR
-92791216,92791223,IT
-92791224,92791231,ES
-92791232,92791263,FR
-92791264,92791279,FI
-92791280,92791283,FR
-92791284,92791295,DE
-92791296,92791327,ES
-92791328,92791359,FR
-92791360,92791391,ES
-92791392,92791423,FR
-92791424,92791455,GB
-92791456,92791487,BE
-92791488,92792319,FR
-92792320,92792383,ES
-92792384,92792415,FR
+92789504,92790271,FR
+92790272,92790275,DE
+92790276,92790671,FR
+92790672,92790679,ES
+92790680,92792107,FR
+92792108,92792111,IT
+92792112,92792119,FR
+92792120,92792127,NL
+92792128,92792415,FR
92792416,92792431,ES
-92792432,92792511,FR
-92792512,92792575,PT
-92792576,92792703,FR
-92792704,92792767,PL
-92792768,92792799,FR
-92792800,92792831,PT
-92792832,92792959,GB
-92792960,92793023,FR
-92793024,92793055,GB
+92792432,92793055,FR
92793056,92793087,ES
-92793088,92793215,FR
-92793216,92793247,IT
-92793248,92793263,FR
-92793264,92793279,ES
-92793280,92793887,FR
-92793888,92793919,IT
-92793920,92794143,FR
-92794144,92794159,DE
-92794160,92794175,FR
-92794176,92794207,NL
-92794208,92794367,FR
-92794368,92794399,GB
-92794400,92794503,FR
-92794504,92794511,ES
-92794512,92794879,FR
-92794880,92794895,ES
-92794896,92794943,FR
-92794944,92794975,BE
-92794976,92795103,FR
-92795104,92795111,ES
-92795112,92795123,FR
+92793088,92795123,FR
92795124,92795127,IT
-92795128,92795171,FR
-92795172,92795175,BE
-92795176,92795179,PL
-92795180,92795619,FR
-92795620,92795623,PL
-92795624,92796463,FR
-92796464,92796479,CZ
-92796480,92796511,FR
-92796512,92796543,DE
-92796544,92796583,FR
-92796584,92796587,PL
-92796588,92796671,FR
-92796672,92796687,GB
-92796688,92796695,FR
-92796696,92796703,BE
-92796704,92796711,PL
-92796712,92796727,FR
-92796728,92796735,IT
-92796736,92797567,FR
-92797568,92797759,PT
-92797760,92797903,FR
-92797904,92797911,NL
-92797912,92797983,FR
-92797984,92797987,GB
-92797988,92798015,FR
-92798016,92798047,ES
-92798048,92798175,FR
-92798176,92798191,IT
-92798192,92798223,FR
-92798224,92798231,CZ
-92798232,92798255,FR
-92798256,92798271,PL
-92798272,92798431,FR
-92798432,92798439,PL
-92798440,92798591,FR
-92798592,92798623,IE
-92798624,92798975,FR
+92795128,92796687,FR
+92796688,92796691,DE
+92796692,92797355,FR
+92797356,92797359,DE
+92797360,92798975,FR
92798976,93323263,RU
93323264,93335551,CH
93335552,93339647,IL
@@ -1912,7 +1109,9 @@
93419520,93421567,IT
93421568,93425663,DE
93425664,93426687,GI
-93426688,93427711,DE
+93426688,93427085,DE
+93427086,93427086,GI
+93427087,93427711,DE
93427712,93429759,NO
93429760,93431807,RU
93431808,93433855,ES
@@ -1936,23 +1135,21 @@
93693952,93695999,IE
93696000,93700095,FR
93700096,93702143,PL
-93702144,93708287,RU
+93702144,93704191,RU
+93704192,93708287,UA
93708288,93712383,DE
93712384,93714431,HU
-93714432,93716479,NL
+93714432,93714943,NL
+93714944,93715455,GB
+93715456,93715967,CA
+93715968,93716479,NL
93716480,93749247,GB
93749248,93753343,IT
93753344,93765631,GB
93765632,93774847,SE
93774848,93776127,NO
93776128,93782015,SE
-93782016,93833983,GB
-93833984,93834239,NL
-93834240,93835263,GB
-93835264,93835407,NL
-93835408,93835415,GB
-93835416,93835519,NL
-93835520,93836287,GB
+93782016,93836287,GB
93836288,93836799,NL
93836800,93842351,GB
93842352,93842359,NL
@@ -1961,99 +1158,20 @@
93880320,93888511,IT
93888512,93890559,PL
93890560,93892607,ES
-93892608,93894655,GB
+93892608,93892863,GB
+93892864,93893119,HK
+93893120,93893375,NL
+93893376,93893631,US
+93893632,93893887,AU
+93893888,93894399,US
+93894400,93894655,GB
93894656,93896703,US
93896704,93904895,GB
93904896,93906943,LV
93906944,93908991,BA
93908992,93911039,IT
93911040,93913087,AE
-93913088,93913727,NL
-93913728,93913735,US
-93913736,93914319,NL
-93914320,93914323,AZ
-93914324,93914357,NL
-93914358,93914358,GB
-93914359,93914671,NL
-93914672,93914679,US
-93914680,93914710,NL
-93914711,93914711,GB
-93914712,93914951,NL
-93914952,93914959,US
-93914960,93915327,NL
-93915328,93915391,US
-93915392,93915847,NL
-93915848,93915855,TR
-93915856,93915863,US
-93915864,93915895,NL
-93915896,93915903,AT
-93915904,93916335,NL
-93916336,93916343,US
-93916344,93916527,NL
-93916528,93916543,US
-93916544,93916591,NL
-93916592,93916599,US
-93916600,93916791,NL
-93916792,93916799,US
-93916800,93916971,NL
-93916972,93916975,US
-93916976,93917871,NL
-93917872,93917879,US
-93917880,93918103,NL
-93918104,93918111,US
-93918112,93918199,NL
-93918200,93918207,US
-93918208,93918215,NL
-93918216,93918223,US
-93918224,93918555,NL
-93918556,93918559,US
-93918560,93918591,NL
-93918592,93918599,US
-93918600,93918655,NL
-93918656,93918687,US
-93918688,93919263,NL
-93919264,93919287,US
-93919288,93919391,NL
-93919392,93919395,US
-93919396,93919727,NL
-93919728,93919735,US
-93919736,93919951,NL
-93919952,93919959,US
-93919960,93920059,NL
-93920060,93920063,US
-93920064,93920163,NL
-93920164,93920167,US
-93920168,93920575,NL
-93920576,93920639,US
-93920640,93920855,NL
-93920856,93920863,US
-93920864,93921055,NL
-93921056,93921059,US
-93921060,93921119,NL
-93921120,93921127,US
-93921128,93923095,NL
-93923096,93923103,US
-93923104,93923567,NL
-93923568,93923575,US
-93923576,93923855,NL
-93923856,93923863,US
-93923864,93924407,NL
-93924408,93924415,JP
-93924416,93925807,NL
-93925808,93925815,KE
-93925816,93927143,NL
-93927144,93927151,JP
-93927152,93927231,NL
-93927232,93927247,CL
-93927248,93927263,NL
-93927264,93927271,IT
-93927272,93927871,NL
-93927872,93927879,US
-93927880,93929031,NL
-93929032,93929039,US
-93929040,93929079,NL
-93929080,93929087,US
-93929088,93929471,NL
+93913088,93929471,NL
93929472,93939711,GB
93939712,93941759,NO
93941760,93945855,CH
@@ -2063,9 +1181,11 @@
93974528,93976575,CH
93976576,93978623,GB
93978624,94011391,ES
-94011392,94044159,RO
+94011392,94027775,RO
+94027776,94035967,IT
+94035968,94044159,RO
94044160,94109695,SY
-94109696,94175231,RO
+94109696,94175231,SA
94175232,94178303,SE
94178304,94178559,NO
94178560,94179071,SE
@@ -2075,7 +1195,9 @@
94180608,94180863,DK
94180864,94181887,FI
94181888,94182911,BE
-94182912,94183935,FR
+94182912,94183167,FR
+94183168,94183423,SE
+94183424,94183935,RU
94183936,94184959,CH
94184960,94185471,IT
94185472,94186495,LU
@@ -2124,7 +1246,7 @@
94369792,94371839,TR
94371840,94502911,IR
94502912,94568447,OM
-94568448,94633983,RO
+94568448,94633983,SA
94633984,94896127,RU
94896128,95158271,IT
95158272,95166463,RU
@@ -2153,7 +1275,8 @@
95387904,95388927,DE
95388928,95389183,AU
95389184,95389695,DE
-95389696,95390207,GB
+95389696,95389951,GB
+95389952,95390207,US
95390208,95393023,DE
95393024,95393151,GB
95393152,95393279,RS
@@ -2168,17 +1291,18 @@
95395584,95395839,GB
95395840,95398399,DE
95398400,95398655,GB
-95398656,95399679,DE
-95399680,95399807,US
-95399808,95399935,DE
-95399936,95400063,CA
-95400064,95400191,DE
-95400192,95400319,CA
+95398656,95399695,DE
+95399696,95399807,US
+95399808,95399951,DE
+95399952,95400063,CA
+95400064,95400207,DE
+95400208,95400319,US
95400320,95400447,DE
95400448,95400703,GB
-95400704,95400831,US
-95400832,95400959,DE
-95400960,95401087,US
+95400704,95400719,DE
+95400720,95400831,US
+95400832,95400975,DE
+95400976,95401087,US
95401088,95401471,DE
95401472,95401727,GB
95401728,95401855,US
@@ -2209,14 +1333,13 @@
95405568,95405823,GB
95405824,95405951,US
95405952,95406335,DE
-95406336,95407359,GB
+95406336,95407103,GB
+95407104,95407359,DE
95407360,95407871,US
95407872,95408639,DE
95408640,95409151,GB
-95409152,95409663,DE
-95409664,95409919,US
-95409920,95410175,DE
-95410176,95410431,AU
+95409152,95410175,DE
+95410176,95410431,US
95410432,95410447,CH
95410448,95410559,DE
95410560,95410943,GB
@@ -2228,7 +1351,9 @@
95555584,95557631,GB
95557632,95559679,RU
95559680,95561727,NL
-95561728,95563775,IT
+95561728,95563007,IT
+95563008,95563263,GB
+95563264,95563775,IT
95563776,95567871,SK
95567872,95569919,NL
95569920,95571967,SE
@@ -2258,20 +1383,34 @@
96153600,96155647,PL
96155648,96157695,CH
96157696,96165887,RU
-96165888,96166399,FR
-96166400,96166655,GP
-96166656,96168703,FR
+96165888,96168703,GP
96168704,96168959,MQ
-96168960,96171775,FR
+96168960,96171775,GP
96171776,96172031,GF
-96172032,96172799,FR
-96172800,96173055,GP
+96172032,96173055,GP
96173056,96173311,MQ
-96173312,96174079,FR
+96173312,96174079,GP
96174080,96206847,HU
96206848,96305151,RU
96305152,96321535,DE
-96321536,96337919,RU
+96321536,96323583,RU
+96323584,96323711,ZA
+96323712,96323839,KR
+96323840,96323967,EG
+96323968,96324095,ID
+96324096,96324223,PK
+96324224,96324351,VN
+96324352,96324479,SG
+96324480,96324607,US
+96324608,96324735,IR
+96324736,96324863,US
+96324864,96324991,CA
+96324992,96325119,FR
+96325120,96325247,US
+96325248,96325375,FI
+96325376,96325503,US
+96325504,96325631,SE
+96325632,96337919,RU
96337920,96403455,IR
96403456,96468991,AZ
96468992,96731135,AE
@@ -2279,9 +1418,13 @@
96739480,96739483,DE
96739484,96739583,FR
96739584,96739587,PT
-96739588,96740223,FR
+96739588,96740111,FR
+96740112,96740127,IT
+96740128,96740223,FR
96740224,96740351,IT
-96740352,96742407,FR
+96740352,96741039,FR
+96741040,96741043,PT
+96741044,96742407,FR
96742408,96742415,NL
96742416,96742427,FR
96742428,96742431,NL
@@ -2291,9 +1434,19 @@
96744608,96744611,IT
96744612,96744831,FR
96744832,96744839,GB
-96744840,96747291,FR
+96744840,96746879,FR
+96746880,96747007,IT
+96747008,96747103,FR
+96747104,96747135,DE
+96747136,96747291,FR
96747292,96747295,PT
-96747296,96756427,FR
+96747296,96747343,FR
+96747344,96747359,DE
+96747360,96747407,FR
+96747408,96747423,DE
+96747424,96755815,FR
+96755816,96755819,PT
+96755820,96756427,FR
96756428,96756431,ES
96756432,96756447,DE
96756448,96756743,FR
@@ -2302,33 +1455,94 @@
96757640,96757643,CH
96757644,96757883,FR
96757884,96757887,ES
-96757888,96759767,FR
+96757888,96758247,FR
+96758248,96758251,DE
+96758252,96759767,FR
96759768,96759775,IT
96759776,96760403,FR
96760404,96760407,IT
96760408,96761855,FR
96761856,96761871,BE
-96761872,96762943,FR
+96761872,96762863,FR
+96762864,96762879,NL
+96762880,96762943,FR
96762944,96763007,ES
-96763008,96763551,FR
+96763008,96763163,FR
+96763164,96763167,PT
+96763168,96763199,DE
+96763200,96763551,FR
96763552,96763555,GB
-96763556,96764375,FR
+96763556,96764239,FR
+96764240,96764255,DE
+96764256,96764375,FR
96764376,96764383,IT
96764384,96764559,FR
96764560,96764575,NL
-96764576,96767031,FR
+96764576,96766943,FR
+96766944,96766975,BE
+96766976,96767031,FR
96767032,96767035,GB
96767036,96767823,FR
96767824,96767839,BE
96767840,96768151,FR
96768152,96768155,FI
-96768156,96770651,FR
+96768156,96768603,FR
+96768604,96768607,DE
+96768608,96769279,FR
+96769280,96769295,ES
+96769296,96770651,FR
96770652,96770655,PL
-96770656,96773119,FR
+96770656,96772215,FR
+96772216,96772223,PT
+96772224,96772407,FR
+96772408,96772408,GB
+96772409,96773119,FR
96773120,96773375,ES
-96773376,96778867,FR
+96773376,96775599,FR
+96775600,96775615,DE
+96775616,96776319,FR
+96776320,96776323,ES
+96776324,96776511,FR
+96776512,96776543,ES
+96776544,96777023,FR
+96777024,96777087,ES
+96777088,96778171,FR
+96778172,96778175,PT
+96778176,96778247,FR
+96778248,96778255,IT
+96778256,96778867,FR
96778868,96778871,BE
-96778872,96796671,FR
+96778872,96778991,FR
+96778992,96779007,DE
+96779008,96779167,FR
+96779168,96779199,PT
+96779200,96779247,FR
+96779248,96779255,CZ
+96779256,96779839,FR
+96779840,96779903,NL
+96779904,96783299,FR
+96783300,96783303,ES
+96783304,96783311,BE
+96783312,96783327,DE
+96783328,96783519,FR
+96783520,96783551,ES
+96783552,96783887,FR
+96783888,96783903,DE
+96783904,96785135,FR
+96785136,96785151,NL
+96785152,96785407,FR
+96785408,96785411,NL
+96785412,96785415,FR
+96785416,96785423,NL
+96785424,96786431,FR
+96786432,96786495,GB
+96786496,96792751,FR
+96792752,96792767,DE
+96792768,96793583,FR
+96793584,96793599,DE
+96793600,96794471,FR
+96794472,96794479,ES
+96794480,96796671,FR
96796672,96862207,AZ
96862208,96894975,GB
96894976,96897023,CZ
@@ -2414,7 +1628,11 @@
99028864,99028991,US
99028992,99029503,GB
99029504,99029519,IE
-99029520,99031295,DE
+99029520,99030783,DE
+99030784,99030895,US
+99030896,99030911,DE
+99030912,99031039,US
+99031040,99031295,DE
99031296,99031551,GB
99031552,99031679,DE
99031680,99031807,US
@@ -2423,8 +1641,8 @@
99031936,99032063,US
99032064,99043839,DE
99043840,99043847,AT
-99043848,99044095,DE
-99044096,99044223,US
+99043848,99044111,DE
+99044112,99044223,US
99044224,99044351,DE
99044352,99044359,BE
99044360,99044607,DE
@@ -2459,7 +1677,9 @@
100329472,100331519,RU
100331520,100335615,TR
100335616,100401151,KZ
-100532224,100559551,RO
+100532224,100559255,RO
+100559256,100559263,EG
+100559264,100559551,RO
100559552,100559615,GB
100559616,100559743,RO
100559744,100559871,GB
@@ -2472,7 +1692,9 @@
100561024,100561151,GB
100561152,100561599,RO
100561600,100561663,US
-100561664,100564991,RO
+100561664,100564799,RO
+100564800,100564863,US
+100564864,100564991,RO
100564992,100569087,SE
100569088,100569343,FR
100569344,100573183,SE
@@ -2489,17 +1711,29 @@
100634624,100636671,ES
100636672,100638719,NL
100638720,100646911,UA
-100646912,100663295,RU
+100646912,100647679,RU
+100647680,100647711,TR
+100647712,100663295,RU
100663296,100663296,CN
-100663297,134874866,US
+100663297,134738943,US
+134738944,134739199,CA
+134739200,134874866,US
134874867,134874867,DO
134874868,135192575,US
135192576,135200767,MX
-135200768,135432191,US
+135200768,135430143,US
+135430144,135430399,CA
+135430400,135432191,US
135432192,135434239,CA
-135434240,135603199,US
+135434240,135441407,US
+135441408,135441663,CA
+135441664,135556607,US
+135556608,135556863,CA
+135556864,135603199,US
135603200,135604223,CA
-135604224,135607039,US
+135604224,135604479,US
+135604480,135604735,CA
+135604736,135607039,US
135607040,135607295,CA
135607296,135776255,US
135776256,135776511,GU
@@ -2509,15 +1743,19 @@
135792384,135794687,CA
135794688,135926527,US
135926528,135926783,VI
-135926784,136237055,US
+135926784,135945727,US
+135945728,135945983,CA
+135945984,136175615,US
+136175616,136175871,CA
+136175872,136237055,US
136237056,136239103,CA
136239104,136404991,US
136404992,136407039,CA
136407040,136413183,US
-136413184,136415231,CA
-136415232,136415665,US
+136413184,136415665,CA
136415666,136415666,FR
-136415667,139954241,US
+136415667,136415743,CA
+136415744,139954241,US
139954242,139954242,ES
139954243,152305663,US
152305664,152338431,GB
@@ -2542,9 +1780,7 @@
204048032,204048047,PR
204048048,209867103,US
209867104,209867111,CA
-209867112,211126783,US
-211126784,211126911,PR
-211126912,211263999,US
+209867112,211263999,US
211264000,211264255,SA
211264256,211597719,US
211597720,211597727,VI
@@ -2552,13 +1788,9 @@
212787200,212788223,PR
212788224,212788479,US
212788480,212788735,VI
-212788736,212788863,US
-212788864,212788991,PR
-212788992,212791831,US
+212788736,212791831,US
212791832,212791839,VI
-212791840,212791935,US
-212791936,212792063,VI
-212792064,212793087,US
+212791840,212793087,US
212793088,212793343,PR
212793344,212794575,US
212794576,212794583,VI
@@ -2570,10 +1802,7 @@
214698240,214698255,VI
214698256,214698303,US
214698304,214698311,VI
-214698312,214699519,US
-214699520,214699647,PR
-214699648,214699775,VI
-214699776,214779135,US
+214698312,214779135,US
214779136,214779391,PR
214779392,219249919,US
219249920,219250175,GB
@@ -2701,7 +1930,9 @@
266598656,266598911,BR
266598912,288130047,US
288130048,288131071,CA
-288131072,288167423,US
+288131072,288153599,US
+288153600,288157695,CA
+288157696,288167423,US
288167424,288167935,CA
288167936,288169471,US
288169472,288169983,CA
@@ -2722,9 +1953,12 @@
289628416,289628671,US
289628672,289652735,GB
289652736,289653759,NL
-289653760,289657855,GB
+289653760,289654271,DE
+289654272,289657855,GB
289657856,289658879,AE
-289658880,289669119,GB
+289658880,289660927,GB
+289660928,289665023,ES
+289665024,289669119,GB
289669120,289734655,FR
289734656,289746943,GB
289746944,289748991,US
@@ -2741,13 +1975,13 @@
289950976,289951231,US
289951232,289951487,RU
289951488,289951743,US
-289951744,289952255,DK
+289951744,289952255,DE
289952256,289952767,US
289952768,289953791,GB
289953792,289954303,US
289954304,289954559,ES
289954560,289955839,US
-289955840,289955967,FI
+289955840,289955967,NL
289955968,289956095,US
289956096,289956223,NO
289956224,289956351,US
@@ -2766,8 +2000,8 @@
289958912,289959423,IT
289959424,289959935,DK
289959936,289960447,DE
-289960448,289960959,US
-289960960,289961471,BY
+289960448,289960959,IN
+289960960,289961471,BE
289961472,289963007,US
289963008,289964031,FR
289964032,290264063,US
@@ -2805,7 +2039,7 @@
290305024,290306047,US
290306048,290308095,DK
290308096,290310143,DE
-290310144,290312191,US
+290310144,290312191,IN
290312192,290314239,BE
290314240,290320383,US
290320384,290324479,FR
@@ -3042,7 +2276,11 @@
391897088,391905279,CA
391905280,391938047,US
391938048,391946239,CA
-391946240,392429567,US
+391946240,392257535,US
+392257536,392261631,BR
+392261632,392390538,US
+392390539,392390539,HK
+392390540,392429567,US
392429568,392433663,NL
392433664,392441855,US
392441856,392445951,IE
@@ -3179,8 +2417,7 @@
401547264,401555455,CA
401555456,402096639,US
402096640,402096895,FR
-402096896,402097151,US
-402097152,402097407,AR
+402096896,402097407,US
402097408,402097663,KE
402097664,402097919,SY
402097920,402098175,MX
@@ -3206,9 +2443,7 @@
402239474,402239474,CA
402239475,402243583,US
402243584,402247679,CA
-402247680,402263807,US
-402263808,402264063,CA
-402264064,402279935,US
+402247680,402279935,US
402279936,402280191,CA
402280192,402366463,US
402366464,402374655,CA
@@ -3250,7 +2485,7 @@
406142976,406147071,US
406147072,406159359,CA
406159360,406175743,US
-406175744,406208511,CA
+406175744,406216703,CA
406216704,406241279,US
406241280,406257663,PR
406257664,406274047,US
@@ -3281,6 +2516,7 @@
409272320,409337855,US
409337856,409354239,CA
409354240,409509887,US
+409509888,409518079,CA
409518080,409550847,US
409550848,409567231,CA
409567232,409731071,US
@@ -3291,6 +2527,7 @@
410648576,410714111,CA
410714112,411156479,US
411156480,411160575,CA
+411160576,411164671,US
411164672,411168767,CA
411168768,411303935,US
411303936,411369471,NL
@@ -3316,8 +2553,9 @@
411983872,411988991,US
411988992,411989247,GB
411989248,412057599,US
+412057600,412073983,CA
412073984,412221439,US
-412221440,412237823,CA
+412221440,412254207,CA
412254208,412483583,US
412483584,412549119,CA
412549120,412614655,US
@@ -3646,7 +2884,7 @@
469729280,469762047,IN
469762048,520093695,US
520093696,520257535,PL
-520257536,520290303,RO
+520257536,520290303,IR
520290304,520292351,TR
520292352,520294399,NL
520294400,520296447,RU
@@ -3662,7 +2900,8 @@
520325120,520327167,FR
520327168,520329215,DE
520329216,520330239,SE
-520330240,520330751,NL
+520330240,520330495,NL
+520330496,520330751,US
520330752,520331263,SE
520331264,520339455,IT
520339456,520343551,UA
@@ -3681,7 +2920,9 @@
520491776,520492031,IE
520492032,520493055,GB
520493056,520493311,BE
-520493312,520494079,IT
+520493312,520493567,GB
+520493568,520493823,IT
+520493824,520494079,FI
520494080,520494335,FR
520494336,520494591,CZ
520494592,520494847,CH
@@ -3695,15 +2936,18 @@
520496768,520496895,TR
520496896,520497151,ES
520497152,520497407,FR
-520497408,520497919,IT
+520497408,520497919,CH
520497920,520498175,FR
520498176,520498431,CH
520498432,520498687,SE
-520498688,520499199,FR
-520499200,520500223,IT
+520498688,520499711,FR
+520499712,520500223,DK
520500224,520500479,LU
520500480,520500735,DE
-520500736,520501759,IT
+520500736,520500991,LT
+520500992,520501247,AT
+520501248,520501503,LU
+520501504,520501759,NO
520501760,520502271,GB
520502272,520502783,IT
520502784,520503295,GB
@@ -3766,11 +3010,16 @@
520988672,520990719,DE
520990720,520992767,RU
520994816,521011199,BG
-521011200,521020415,RO
-521020416,521021439,MD
-521021440,521039871,RO
+521011200,521027839,RO
+521027840,521028607,GB
+521028608,521031679,RO
+521031680,521035775,IR
+521035776,521039871,RO
521039872,521043967,IR
-521043968,521057279,RO
+521043968,521048063,RO
+521048064,521052159,IR
+521052160,521056255,RO
+521056256,521057279,LT
521057280,521058303,MD
521058304,521076735,RO
521076736,521078783,ES
@@ -3799,7 +3048,8 @@
521555968,521558015,NL
521558016,521560063,CY
521560064,521562111,PL
-521562112,521564159,GB
+521562112,521563135,GB
+521563136,521564159,NL
521564160,521565183,GR
521565184,521565439,GB
521565440,521565695,US
@@ -3809,7 +3059,9 @@
521601024,521666559,RU
521666560,521668607,GB
521668608,521670655,CH
-521670656,521672703,HU
+521670656,521670911,HU
+521670912,521671935,DE
+521671936,521672703,HU
521672704,521674751,RU
521674752,521676799,GB
521676800,521678847,ES
@@ -3834,7 +3086,8 @@
521711616,521713663,SK
521713664,521715711,HU
521715712,521717759,LV
-521717760,521719807,IR
+521717760,521718783,IQ
+521718784,521719807,IR
521719808,521721855,UA
521721856,521723903,GB
521723904,521725951,SA
@@ -3875,7 +3128,8 @@
521953280,521961471,RU
521961472,521969663,CZ
521969664,521977855,UA
-521977856,521994239,RU
+521977856,521986047,RU
+521986048,521994239,UA
521994240,522002431,KG
522002432,522010623,IR
522010624,522018815,AE
@@ -3883,9 +3137,7 @@
522027008,522059775,RU
522059776,522125311,CZ
522125312,522133503,MD
-522133504,522134783,NL
-522134784,522134911,US
-522134912,522135551,NL
+522133504,522135551,NL
522135552,522137599,IT
522137600,522141695,CH
522141696,522143743,RU
@@ -3907,8 +3159,9 @@
522719232,522721279,UA
522721280,522741759,RU
522741760,522743807,UA
-522743808,522747903,RU
-522747904,522764287,UA
+522743808,522763263,RU
+522763264,522763519,UA
+522763520,522764287,RU
522780672,522782719,RU
522782720,522784767,UA
522784768,522786815,BG
@@ -3952,14 +3205,20 @@
522989568,522993663,RU
522993664,522997759,AL
522997760,523001855,RU
-523001856,523005951,LT
+523001856,523003903,LT
+523003904,523004159,IL
+523004160,523004415,AE
+523004416,523004671,TR
+523004672,523004927,ES
+523004928,523005183,BE
+523005184,523005951,CH
523005952,523010047,IT
523010048,523014143,IL
523014144,523018239,ES
523018240,523022335,IT
523022336,523024895,RU
523024896,523025407,DE
-523025408,523025663,NL
+523025408,523025663,UA
523025664,523025919,CH
523025920,523026431,RU
523026432,523030527,TR
@@ -4011,7 +3270,7 @@
528664576,528666623,BY
528666624,528668671,RU
528668672,528670719,PL
-528670720,528674815,CH
+528670720,528674815,US
528674816,528676863,GB
528676864,528678911,RU
528678912,528680959,MD
@@ -4051,7 +3310,7 @@
528836608,528838655,RU
528838656,528840703,UA
528840704,528842751,RU
-528842752,528859135,CH
+528842752,528859135,US
528859136,528861183,RO
528861184,528863231,RU
528863232,528867327,KZ
@@ -4085,11 +3344,20 @@
529727488,529793023,HR
529793024,529793279,CZ
529793280,529794303,RU
-529794304,529795071,CZ
-529795072,529796095,RU
+529794304,529794559,CZ
+529794560,529796095,RU
529796096,529797119,UA
-529797120,529805311,CZ
-529805312,529817599,RU
+529797120,529798143,RU
+529798144,529798399,CZ
+529798400,529798655,RU
+529798656,529798911,KZ
+529798912,529799167,UA
+529799168,529799423,RU
+529799424,529799679,UA
+529799680,529800191,RU
+529800192,529800703,UA
+529800704,529801215,CZ
+529801216,529817599,RU
529817600,529818623,CZ
529818624,529826303,RU
529826304,529826815,CZ
@@ -4107,7 +3375,7 @@
529844224,529845247,CZ
529845248,529846271,UZ
529846272,529847295,CZ
-529847296,529848319,RU
+529847296,529848319,GB
529848320,529848575,NL
529848576,529848831,CZ
529848832,529849087,UA
@@ -4194,21 +3462,24 @@
531406848,531408895,FR
531410944,531415039,PL
531415040,531423231,RU
-531423232,531425279,NO
531425280,531427327,FR
-531427328,531427703,GB
+531427328,531427503,GB
+531427504,531427511,IT
+531427512,531427559,GB
+531427560,531427567,IT
+531427568,531427703,GB
531427704,531427711,IT
-531427712,531428263,GB
-531428264,531428271,IT
-531428272,531428351,GB
+531427712,531428191,GB
+531428192,531428199,IT
+531428200,531428351,GB
531428352,531428359,IT
531428360,531428495,GB
531428496,531428503,IT
-531428504,531429135,GB
+531428504,531428847,GB
+531428848,531428855,IT
+531428856,531429135,GB
531429136,531429143,IT
-531429144,531429167,GB
-531429168,531429175,IT
-531429176,531429207,GB
+531429144,531429207,GB
531429208,531429215,IT
531429216,531429239,GB
531429240,531429247,IT
@@ -4218,16 +3489,24 @@
531429408,531429415,IT
531429416,531429599,GB
531429600,531429607,IT
-531429608,531429855,GB
-531429856,531429863,IT
-531429864,531430319,GB
+531429608,531429967,GB
+531429968,531429975,IT
+531429976,531430319,GB
531430320,531430327,IT
-531430328,531430823,GB
+531430328,531430407,GB
+531430408,531430415,IT
+531430416,531430791,GB
+531430792,531430799,IT
+531430800,531430823,GB
531430824,531430831,IT
531430832,531430847,GB
531430848,531430855,IT
-531430856,531431423,GB
-531431424,531496959,RO
+531430856,531430871,GB
+531430872,531430879,IT
+531430880,531430903,GB
+531430904,531430911,IT
+531430912,531431423,GB
+531431424,531496959,RU
531496960,531628031,PL
531628032,531660799,TR
531660800,531693567,BA
@@ -4256,7 +3535,9 @@
532209664,532210687,DE
532210688,532211711,RU
532211712,532212223,LU
-532212224,532213759,RU
+532212224,532212479,KZ
+532212480,532212735,NL
+532212736,532213759,RU
532213760,532214015,GB
532214016,532221951,RU
532221952,532223999,IT
@@ -4289,21 +3570,38 @@
532332544,532340735,PL
532340736,532341503,GB
532341504,532341759,DE
-532341760,532344319,GB
+532341760,532343967,GB
+532343968,532343983,US
+532343984,532344319,GB
532344320,532344575,FR
532344576,532347391,GB
532347392,532347903,DE
532347904,532348671,GB
532348672,532348927,NL
532348928,532365311,IE
-532365312,532365567,LU
-532365568,532365823,NL
+532365312,532365823,NL
532365824,532366079,DE
532366080,532366207,NL
532366208,532366239,AR
532366240,532366271,PA
-532366272,532371455,DE
-532371456,532373503,NL
+532366272,532367359,DE
+532367360,532368383,US
+532368384,532368639,NL
+532368640,532371455,DE
+532371456,532372479,NL
+532372480,532372735,LU
+532372736,532372767,GB
+532372768,532372783,CA
+532372784,532372799,BR
+532372800,532372815,MX
+532372816,532372831,PL
+532372832,532372863,FR
+532372864,532372895,IT
+532372896,532372959,SE
+532372960,532372991,RU
+532372992,532373247,NL
+532373248,532373343,DE
+532373344,532373503,NL
532373504,532375551,RU
532375552,532377599,IT
532377600,532381695,DE
@@ -4362,7 +3660,11 @@
533463040,533479423,RU
533479424,533479519,DE
533479520,533479551,FI
-533479552,533481471,DE
+533479552,533479743,DE
+533479744,533479775,FI
+533479776,533480031,DE
+533480032,533480063,FI
+533480064,533481471,DE
533481472,533483519,NO
533483520,533485567,FR
533485568,533487615,LU
@@ -4425,7 +3727,9 @@
533970944,533987327,SE
533987328,534118399,DE
534118400,534151167,KW
-534151168,534183935,DE
+534151168,534163455,DE
+534163456,534167551,ES
+534167552,534183935,DE
534183936,534249471,AE
534249472,534253567,GB
534253568,534257663,FR
@@ -4463,7 +3767,8 @@
534513280,534513407,NL
534513408,534513663,SE
534513664,534514687,US
-534514688,534515711,DE
+534514688,534515455,DE
+534515456,534515711,SE
534515712,534515967,GB
534515968,534516735,US
534516736,534516991,GB
@@ -4486,10 +3791,17 @@
534519552,534519807,NL
534519808,534521855,US
534521856,534522367,DE
-534522368,534523391,NL
+534522368,534522879,NL
+534522880,534523034,DE
+534523035,534523035,NL
+534523036,534523135,DE
+534523136,534523391,NL
534523392,534523903,DE
534523904,534530047,US
-534530048,534544383,DE
+534530048,534538239,ES
+534538240,534540287,US
+534540288,534542335,NL
+534542336,534544383,DE
534544384,534546431,RO
534546432,534548479,DE
534548480,534550527,PL
@@ -4754,8 +4066,7 @@
621330432,621346815,PL
621346816,621355007,RU
621355008,621357055,UA
-621357056,621360895,RU
-621360896,621361151,DE
+621357056,621361151,RU
621361152,621363199,GB
621363200,621381631,RU
621381632,621383679,FR
@@ -4763,7 +4074,9 @@
621387776,621389823,NL
621389824,621391871,SK
621391872,621392127,IT
-621392128,621393919,CY
+621392128,621392383,CY
+621392384,621392639,GE
+621392640,621393919,CY
621393920,621395967,DE
621395968,621398015,CZ
621398016,621400063,TR
@@ -4811,7 +4124,7 @@
621975552,621977599,RU
621977600,621981695,FR
621981696,621983743,US
-621983744,621985791,RS
+621983744,621985791,GB
621985792,621987839,US
621987840,621989887,DK
621989888,621992959,SE
@@ -4842,7 +4155,7 @@
622415872,622417919,MK
622417920,622419967,IM
622419968,622428159,UA
-622428160,622460927,RO
+622428160,622460927,GB
622460928,622477311,AZ
622477312,622479359,AL
622479360,622481407,GB
@@ -4861,12 +4174,11 @@
622512128,622514175,DE
622514176,622518271,NO
622518272,622518527,GB
-622518528,622519295,NL
-622519296,622520319,FR
+622518528,622520319,NL
622520320,622522367,RU
622522368,622524415,FR
622524416,622526463,ES
-622526464,622591999,DE
+622526464,622591999,IR
622592000,622624767,OM
622624768,622626815,NO
622626816,622630911,DK
@@ -4881,7 +4193,7 @@
622868480,622870527,FR
622870528,622874623,AZ
622874624,622878719,IT
-622878720,622880767,FR
+622878720,622878975,FR
622880768,622882815,IT
622882816,622886911,IR
622886912,622919679,GR
@@ -4898,7 +4210,7 @@
623052800,623054847,RS
623054848,623058943,FI
623058944,623067135,RO
-623067136,623069183,RS
+623067136,623069183,AL
623069184,623071231,GB
623071232,623073279,FI
623073280,623075327,GB
@@ -4924,7 +4236,9 @@
623083520,623116287,ES
623116288,623378431,KW
623378432,623509503,OM
-623509504,623640575,RO
+623509504,623575807,SA
+623575808,623576063,RO
+623576064,623640575,SA
623640576,623642623,DE
623642624,623644671,NL
623644672,623648767,CZ
@@ -4957,7 +4271,6 @@
623804160,623804415,NL
623804416,623806463,RU
623806464,623808511,NL
-623808512,623810559,RU
623810560,623812607,ES
623812608,623820799,SE
623820800,623821823,NL
@@ -4965,7 +4278,9 @@
623822336,623822847,NL
623822848,623824895,GB
623824896,623826943,CZ
-623826944,623837183,UA
+623826944,623827967,UA
+623827968,623828991,BG
+623828992,623837183,UA
623837184,623902719,PL
623902720,623919103,CZ
623919104,623935487,NL
@@ -4984,7 +4299,7 @@
624029696,624033791,SE
624033792,624164863,DE
624164864,624427007,UA
-624427008,624492543,RO
+624427008,624492543,SA
624492544,624558079,UA
624558080,624562175,SK
624562176,624564223,TR
@@ -4992,919 +4307,203 @@
624566272,624568319,RU
624568320,624570367,BE
624570368,624574463,DE
-624574464,624574535,NL
-624574536,624574543,US
-624574544,624574559,NL
-624574560,624574567,US
-624574568,624574715,NL
-624574716,624574719,US
-624574720,624574855,NL
-624574856,624574863,US
-624574864,624575039,NL
-624575040,624575047,US
-624575048,624575063,NL
-624575064,624575071,US
-624575072,624575135,NL
-624575136,624575143,US
-624575144,624575399,NL
-624575400,624575403,US
-624575404,624575679,NL
-624575680,624575743,US
-624575744,624575759,NL
-624575760,624575767,BE
-624575768,624575895,NL
-624575896,624575903,US
-624575904,624576111,NL
-624576112,624576119,US
-624576120,624576127,NL
-624576128,624576131,US
-624576132,624576287,NL
-624576288,624576295,US
-624576296,624576471,NL
-624576472,624576479,US
-624576480,624576487,NL
-624576488,624576495,CA
-624576496,624576887,NL
-624576888,624576895,GB
-624576896,624577151,NL
-624577152,624577215,GB
-624577216,624577307,NL
-624577308,624577311,US
-624577312,624577483,NL
-624577484,624577487,US
-624577488,624578887,NL
-624578888,624578895,US
-624578896,624578951,NL
-624578952,624578955,US
-624578956,624579039,NL
-624579040,624579047,US
-624579048,624579075,NL
-624579076,624579079,US
-624579080,624579423,NL
-624579424,624579455,US
-624579456,624579495,NL
-624579496,624579499,US
-624579500,624579527,NL
-624579528,624579531,US
-624579532,624579623,NL
-624579624,624579627,US
-624579628,624580132,NL
-624580133,624580133,GB
-624580134,624580135,NL
-624580136,624580143,US
-624580144,624580151,NL
-624580152,624580159,ES
-624580160,624580231,NL
-624580232,624580239,US
-624580240,624580263,NL
-624580264,624580271,US
-624580272,624580495,NL
-624580496,624580503,US
-624580504,624580559,NL
-624580560,624580567,US
-624580568,624581071,NL
-624581072,624581087,US
-624581088,624581135,NL
-624581136,624581139,US
-624581140,624581199,NL
-624581200,624581207,GB
-624581208,624581535,NL
-624581536,624581543,US
-624581544,624581599,NL
-624581600,624581631,US
-624581632,624581927,NL
-624581928,624581935,US
-624581936,624582123,NL
-624582124,624582127,US
-624582128,624582139,NL
-624582140,624582147,US
-624582148,624582287,NL
-624582288,624582295,US
-624582296,624582399,NL
-624582400,624582403,US
-624582404,624582615,NL
-624582616,624582623,US
-624582624,624582631,NL
-624582632,624582639,US
-624582640,624582759,NL
-624582760,624582767,GB
-624582768,624583239,NL
-624583240,624583247,GB
-624583248,624584111,NL
-624584112,624584119,US
-624584120,624584159,NL
-624584160,624584175,US
-624584176,624584383,NL
-624584384,624584391,US
-624584392,624584415,NL
-624584416,624584423,US
-624584424,624586183,NL
-624586184,624586191,US
-624586192,624586279,NL
-624586280,624586287,US
-624586288,624587111,NL
-624587112,624587119,US
-624587120,624587583,NL
-624587584,624587599,US
-624587600,624587871,NL
-624587872,624587903,US
-624587904,624587935,NL
-624587936,624587943,US
-624587944,624588383,NL
-624588384,624588391,US
-624588392,624588399,GB
-624588400,624588927,NL
-624588928,624588943,GB
-624588944,624589159,NL
-624589160,624589167,IT
-624589168,624589199,NL
-624589200,624589215,KE
-624589216,624589375,NL
-624589376,624589383,US
-624589384,624589719,NL
-624589720,624589727,US
-624589728,624589783,NL
-624589784,624589791,US
-624589792,624589967,NL
-624589968,624589975,US
-624589976,624590847,NL
-624590848,624640527,FR
+624574464,624590847,NL
+624590848,624625848,FR
+624625849,624625849,CA
+624625850,624640527,FR
624640528,624640543,GB
-624640544,624640551,FR
-624640552,624640559,IE
-624640560,624640575,BE
-624640576,624640735,FR
-624640736,624640739,GB
-624640740,624640759,FR
+624640544,624640759,FR
624640760,624640767,NL
-624640768,624640775,ES
-624640776,624640847,FR
-624640848,624640851,ES
-624640852,624640903,FR
-624640904,624640907,CZ
-624640908,624640927,FR
-624640928,624640931,ES
-624640932,624640935,FR
-624640936,624640939,FI
-624640940,624640943,FR
-624640944,624640951,ES
+624640768,624640951,FR
624640952,624640959,PT
-624640960,624640967,NL
-624640968,624640991,FR
-624640992,624640999,CH
-624641000,624641023,FR
-624641024,624641055,GB
-624641056,624641063,FR
-624641064,624641067,GB
-624641068,624641119,FR
-624641120,624641127,PL
-624641128,624641195,FR
-624641196,624641199,PL
-624641200,624641207,DE
-624641208,624641223,FR
-624641224,624641231,PT
-624641232,624641311,FR
-624641312,624641319,BE
-624641320,624641323,ES
-624641324,624641367,FR
-624641368,624641371,DE
-624641372,624642055,FR
-624642056,624642063,PL
-624642064,624642079,BE
-624642080,624642127,FR
-624642128,624642159,GB
-624642160,624642231,FR
-624642232,624642235,ES
-624642236,624642255,FR
-624642256,624642271,IT
-624642272,624642379,FR
-624642380,624642383,FI
-624642384,624642495,FR
-624642496,624642511,ES
-624642512,624642591,FR
-624642592,624642623,DE
-624642624,624642679,FR
-624642680,624642683,IT
-624642684,624642719,FR
-624642720,624642723,IT
-624642724,624642743,FR
-624642744,624642751,GB
-624642752,624642767,FR
-624642768,624642783,GB
-624642784,624642879,FR
-624642880,624642883,IT
-624642884,624643019,FR
+624640960,624643019,FR
624643020,624643023,IT
-624643024,624643039,FR
-624643040,624643055,GB
-624643056,624643071,FR
-624643072,624643087,GB
-624643088,624643095,FR
-624643096,624643103,IT
-624643104,624643187,FR
-624643188,624643191,GB
-624643192,624643343,FR
-624643344,624643351,DE
-624643352,624643359,FR
-624643360,624643367,DE
-624643368,624643503,FR
-624643504,624643519,DE
-624643520,624643631,FR
-624643632,624643647,PL
-624643648,624643775,FR
-624643776,624643783,IT
-624643784,624644063,FR
-624644064,624644095,CH
-624644096,624644275,FR
-624644276,624644279,GB
-624644280,624644615,FR
-624644616,624644619,DE
-624644620,624644631,FR
-624644632,624644635,DE
-624644636,624644639,PL
-624644640,624644675,FR
-624644676,624644679,DE
-624644680,624644723,FR
-624644724,624644727,NL
-624644728,624644815,FR
-624644816,624644819,DE
-624644820,624645127,FR
-624645128,624645131,DE
-624645132,624645147,FR
+624643024,624645147,FR
624645148,624645151,IT
-624645152,624645279,FR
-624645280,624645295,CH
-624645296,624645619,FR
-624645620,624645623,NL
-624645624,624645759,FR
-624645760,624645823,DE
-624645824,624646095,FR
-624646096,624646099,GB
-624646100,624646143,FR
-624646144,624646159,ES
-624646160,624646235,FR
-624646236,624646239,CZ
-624646240,624646255,FR
-624646256,624646263,DE
-624646264,624646343,FR
+624645152,624646239,FR
+624646240,624646255,DE
+624646256,624646343,FR
624646344,624646347,NL
-624646348,624646351,FR
-624646352,624646367,DE
-624646368,624646495,FR
-624646496,624646527,ES
-624646528,624646535,CH
-624646536,624646583,FR
+624646348,624646583,FR
624646584,624646591,NL
-624646592,624646639,FR
-624646640,624646643,IE
-624646644,624646975,FR
-624646976,624646983,PL
-624646984,624647055,FR
-624647056,624647063,DE
-624647064,624647171,FR
+624646592,624647171,FR
624647172,624647183,ES
-624647184,624647247,FR
-624647248,624647263,GB
-624647264,624647295,FR
-624647296,624647327,ES
-624647328,624647359,FR
-624647360,624647375,PL
-624647376,624647391,FR
-624647392,624647399,PL
-624647400,624647455,FR
-624647456,624647471,ES
-624647472,624647487,FR
-624647488,624647503,PT
-624647504,624647615,FR
-624647616,624647623,PL
-624647624,624647631,ES
-624647632,624648079,FR
-624648080,624648095,ES
-624648096,624648111,FR
-624648112,624648115,IT
-624648116,624648127,FR
-624648128,624648135,DE
-624648136,624648139,FR
+624647184,624648139,FR
624648140,624648143,ES
624648144,624653311,FR
624653312,624653823,GB
-624653824,624656415,FR
-624656416,624656447,IT
-624656448,624656479,PL
-624656480,624656511,NL
-624656512,624656543,FR
-624656544,624656575,PL
-624656576,624656607,FR
-624656608,624656639,IT
-624656640,624656739,FR
-624656740,624656743,CZ
-624656744,624656767,FR
-624656768,624656799,NL
-624656800,624656975,FR
+624653824,624656975,FR
624656976,624656979,PT
-624656980,624657147,FR
-624657148,624657155,ES
-624657156,624657183,FR
-624657184,624657199,IE
-624657200,624657279,FR
-624657280,624657295,IT
-624657296,624657299,DE
-624657300,624657307,FR
-624657308,624657311,PT
-624657312,624657343,FR
-624657344,624657359,ES
-624657360,624657475,FR
-624657476,624657479,DE
-624657480,624657487,FR
-624657488,624657491,PT
-624657492,624657663,FR
-624657664,624657667,ES
-624657668,624657671,FI
-624657672,624657675,PL
-624657676,624657707,FR
-624657708,624657715,ES
-624657716,624657779,FR
-624657780,624657783,GB
-624657784,624657799,FR
-624657800,624657803,IE
-624657804,624657815,FR
-624657816,624657819,ES
-624657820,624657823,GB
-624657824,624657883,FR
+624656980,624657607,FR
+624657608,624657615,BE
+624657616,624657711,FR
+624657712,624657715,ES
+624657716,624657883,FR
624657884,624657887,ES
-624657888,624657967,FR
-624657968,624657975,GB
-624657976,624658015,FR
-624658016,624658031,IT
-624658032,624658087,FR
-624658088,624658095,NL
-624658096,624658175,FR
-624658176,624658179,BE
-624658180,624658183,ES
-624658184,624658319,FR
-624658320,624658335,IE
-624658336,624658431,FR
-624658432,624658447,IT
-624658448,624658479,FR
+624657888,624657923,FR
+624657924,624657927,DE
+624657928,624658323,FR
+624658324,624658327,IE
+624658328,624658479,FR
624658480,624658483,DE
-624658484,624658671,FR
-624658672,624658675,IT
-624658676,624658799,FR
-624658800,624658803,PT
-624658804,624658843,FR
-624658844,624658847,ES
-624658848,624659031,FR
+624658484,624658495,FR
+624658496,624658527,IT
+624658528,624659031,FR
624659032,624659039,IT
-624659040,624659055,ES
-624659056,624659071,FR
+624659040,624659071,FR
624659072,624659135,ES
-624659136,624659199,FR
-624659200,624659215,DE
-624659216,624659279,FR
-624659280,624659295,NL
-624659296,624659307,FR
-624659308,624659311,DE
-624659312,624659315,GB
-624659316,624659391,FR
-624659392,624659407,IT
-624659408,624659455,FR
-624659456,624659487,PL
-624659488,624659647,FR
-624659648,624659663,PL
-624659664,624659799,FR
-624659800,624659803,ES
-624659804,624659871,FR
-624659872,624659903,ES
-624659904,624659935,FR
-624659936,624659951,BE
-624659952,624659967,FR
-624659968,624659975,GB
-624659976,624660503,FR
-624660504,624660511,IT
-624660512,624660563,FR
-624660564,624660567,NL
-624660568,624660607,FR
-624660608,624660639,GB
-624660640,624660827,FR
+624659136,624660103,FR
+624660104,624660107,PT
+624660108,624660827,FR
624660828,624660831,ES
-624660832,624660883,FR
-624660884,624660887,DE
-624660888,624660911,FR
-624660912,624660915,PL
-624660916,624660919,IT
-624660920,624661247,FR
+624660832,624661247,FR
624661248,624661251,ES
-624661252,624661279,FR
-624661280,624661283,CZ
-624661284,624661787,FR
+624661252,624661787,FR
624661788,624661788,RO
-624661789,624661791,FR
-624661792,624661823,DE
-624661824,624661955,FR
+624661789,624661955,FR
624661956,624661959,PL
-624661960,624661967,ES
-624661968,624661975,FI
-624661976,624662455,FR
-624662456,624662459,ES
-624662460,624662543,FR
-624662544,624662559,ES
-624662560,624662623,FR
-624662624,624662627,DE
-624662628,624662751,FR
-624662752,624662755,CZ
-624662756,624662759,FR
-624662760,624662763,CH
-624662764,624662911,FR
-624662912,624663039,GB
-624663040,624663327,FR
-624663328,624663359,DE
-624663360,624663391,PT
-624663392,624663667,FR
-624663668,624663671,ES
-624663672,624663695,FR
-624663696,624663711,IT
-624663712,624663851,FR
-624663852,624663855,GB
-624663856,624663863,FR
-624663864,624663867,DE
-624663868,624663871,ES
-624663872,624663951,FR
+624661960,624663951,FR
624663952,624663955,ES
-624663956,624663971,FR
-624663972,624663975,IT
-624663976,624664255,FR
-624664256,624664287,GB
-624664288,624664319,ES
-624664320,624664351,FR
-624664352,624664367,ES
-624664368,624664479,FR
-624664480,624664483,IT
-624664484,624664527,FR
+624663956,624664527,FR
624664528,624664531,ES
-624664532,624664611,FR
-624664612,624664619,IT
-624664620,624664635,FR
-624664636,624664639,PL
-624664640,624664655,FR
-624664656,624664663,LT
-624664664,624664667,FI
-624664668,624664671,NL
-624664672,624664676,FR
+624664532,624664615,FR
+624664616,624664619,IT
+624664620,624664676,FR
624664677,624664677,IE
-624664678,624664863,FR
-624664864,624664895,ES
-624664896,624664959,NL
-624664960,624665247,FR
-624665248,624665263,PL
-624665264,624665391,FR
-624665392,624665407,PT
-624665408,624665551,FR
-624665552,624665555,LT
-624665556,624665567,FR
-624665568,624665583,GB
-624665584,624665587,FR
+624664678,624665587,FR
624665588,624665591,DE
-624665592,624665607,FR
-624665608,624665611,ES
-624665612,624665727,FR
-624665728,624665759,GB
-624665760,624665775,FR
-624665776,624665779,GB
-624665780,624665783,NL
-624665784,624665787,FR
-624665788,624665791,ES
-624665792,624665803,FR
+624665592,624665803,FR
624665804,624665807,NL
-624665808,624665811,CH
-624665812,624665859,FR
-624665860,624665863,PT
-624665864,624665951,FR
+624665808,624665951,FR
624665952,624665955,NL
-624665956,624665999,FR
-624666000,624666015,BE
-624666016,624666031,FR
-624666032,624666047,PL
-624666048,624666371,FR
-624666372,624666375,BE
-624666376,624666391,FR
-624666392,624666399,DE
-624666400,624666431,FR
-624666432,624666495,IT
-624666496,624666727,FR
-624666728,624666731,PL
-624666732,624666735,BE
-624666736,624666739,IT
-624666740,624666879,FR
-624666880,624666883,IT
-624666884,624666887,GB
-624666888,624666907,FR
-624666908,624666911,GB
-624666912,624666927,FR
-624666928,624666943,BE
-624666944,624666959,IE
-624666960,624666995,FR
-624666996,624666999,NL
-624667000,624667087,FR
-624667088,624667103,ES
-624667104,624667167,FR
-624667168,624667199,GB
-624667200,624667327,FR
-624667328,624667391,NL
-624667392,624667439,FR
-624667440,624667455,GB
-624667456,624667471,FR
+624665956,624666695,FR
+624666696,624666703,DE
+624666704,624667471,FR
624667472,624667475,IT
624667476,624667599,FR
624667600,624667603,IT
-624667604,624667827,FR
-624667828,624667831,ES
-624667832,624668063,FR
+624667604,624668063,FR
624668064,624668079,BE
-624668080,624668511,FR
-624668512,624668543,DE
-624668544,624668607,FR
-624668608,624668639,PT
+624668080,624668639,FR
624668640,624668643,NL
-624668644,624668715,FR
-624668716,624668735,ES
-624668736,624668751,FR
-624668752,624668767,GB
-624668768,624668815,FR
-624668816,624668831,ES
-624668832,624668863,FR
-624668864,624668879,ES
-624668880,624669011,FR
+624668644,624669011,FR
624669012,624669015,DE
-624669016,624669247,FR
-624669248,624669255,DE
-624669256,624669311,FR
-624669312,624669327,ES
-624669328,624669359,FR
-624669360,624669367,IT
-624669368,624669439,FR
-624669440,624669455,NL
-624669456,624669499,FR
-624669500,624669503,DE
-624669504,624669583,FR
-624669584,624669591,IT
-624669592,624669727,FR
-624669728,624669743,GB
-624669744,624669795,FR
+624669016,624669795,FR
624669796,624669799,ES
-624669800,624669871,FR
-624669872,624669879,NL
-624669880,624669887,ES
-624669888,624669963,FR
-624669964,624669967,LT
-624669968,624669983,FR
-624669984,624669987,IT
-624669988,624670147,FR
-624670148,624670151,CZ
-624670152,624670195,FR
-624670196,624670199,LT
-624670200,624670391,FR
-624670392,624670395,NL
-624670396,624670399,GB
-624670400,624670403,FR
-624670404,624670407,ES
-624670408,624670443,FR
-624670444,624670447,ES
-624670448,624670799,FR
-624670800,624670803,GB
-624670804,624670895,FR
-624670896,624670903,DE
-624670904,624670915,FR
+624669800,624670915,FR
624670916,624670919,ES
-624670920,624671263,FR
-624671264,624671279,ES
-624671280,624671407,FR
-624671408,624671423,GB
-624671424,624671439,FR
-624671440,624671455,IT
+624670920,624671455,FR
624671456,624671471,ES
-624671472,624671855,FR
-624671856,624671871,GB
-624671872,624671935,FR
-624671936,624671943,NL
-624671944,624672067,FR
-624672068,624672071,DE
-624672072,624672095,FR
-624672096,624672127,CZ
-624672128,624672131,FR
-624672132,624672135,BE
-624672136,624672175,FR
-624672176,624672179,IT
-624672180,624672511,FR
-624672512,624672515,LT
-624672516,624672519,IT
-624672520,624672523,FR
-624672524,624672527,GB
-624672528,624672547,FR
+624671472,624672547,FR
624672548,624672551,ES
-624672552,624672555,FI
-624672556,624672559,FR
+624672552,624672559,FR
624672560,624672563,IT
-624672564,624672607,FR
-624672608,624672615,NL
-624672616,624672671,FR
-624672672,624672703,PL
-624672704,624673279,FR
-624673280,624673283,CH
-624673284,624673287,FR
+624672564,624673287,FR
624673288,624673295,DE
-624673296,624673303,FR
-624673304,624673307,GB
-624673308,624673311,FR
-624673312,624673343,CH
-624673344,624673435,FR
-624673436,624673439,DE
-624673440,624673451,FR
+624673296,624673451,FR
624673452,624673455,ES
624673456,624673535,FR
624673536,624673791,ES
-624673792,624673795,PL
-624673796,624673799,DE
-624673800,624673803,FR
+624673792,624673803,FR
624673804,624673807,NL
-624673808,624673823,PL
-624673824,624673871,FR
-624673872,624673879,PL
-624673880,624673883,FR
-624673884,624673887,PL
-624673888,624673891,FI
-624673892,624673895,DE
-624673896,624673903,FR
+624673808,624673903,FR
624673904,624673919,ES
-624673920,624673955,FR
-624673956,624673959,IT
-624673960,624674079,FR
-624674080,624674111,PT
-624674112,624674339,FR
-624674340,624674343,NL
-624674344,624674459,FR
-624674460,624674463,PL
-624674464,624674495,FR
-624674496,624674503,GB
-624674504,624674527,FR
-624674528,624674559,DE
-624674560,624674735,FR
-624674736,624674739,ES
-624674740,624674783,FR
-624674784,624674815,GB
-624674816,624675055,FR
-624675056,624675059,DE
-624675060,624675691,FR
+624673920,624675691,FR
624675692,624675695,ES
-624675696,624675719,FR
-624675720,624675727,NL
-624675728,624675775,FR
+624675696,624675775,FR
624675776,624675779,ES
-624675780,624675803,FR
-624675804,624675807,ES
-624675808,624675839,GB
-624675840,624676003,FR
+624675780,624676003,FR
624676004,624676007,DE
-624676008,624676019,FR
-624676020,624676023,DE
-624676024,624676087,FR
+624676008,624676087,FR
624676088,624676091,DE
-624676092,624676183,FR
-624676184,624676191,GB
-624676192,624676495,FR
-624676496,624676511,BE
-624676512,624676715,FR
+624676092,624676715,FR
624676716,624676719,ES
-624676720,624676799,FR
-624676800,624676863,IT
-624676864,624676939,FR
-624676940,624676943,ES
-624676944,624677055,FR
-624677056,624677087,IT
-624677088,624677119,PL
-624677120,624677247,FR
-624677248,624677263,GB
-624677264,624677279,FI
-624677280,624677407,FR
-624677408,624677439,ES
-624677440,624677463,FR
+624676720,624677463,FR
624677464,624677467,ES
624677468,624677683,FR
624677684,624677687,NL
-624677688,624677727,FR
-624677728,624677731,IT
-624677732,624677767,FR
+624677688,624677767,FR
624677768,624677775,NL
-624677776,624677983,FR
-624677984,624678015,GB
-624678016,624678187,FR
-624678188,624678191,DE
-624678192,624678363,FR
-624678364,624678367,ES
-624678368,624678391,FR
+624677776,624678391,FR
624678392,624678399,NL
-624678400,624678415,FR
-624678416,624678431,GB
-624678432,624678463,FR
-624678464,624678479,PL
-624678480,624678487,FR
+624678400,624678487,FR
624678488,624678495,NL
-624678496,624678527,FR
-624678528,624678543,CH
-624678544,624678591,FR
-624678592,624678655,PT
-624678656,624679175,FR
+624678496,624679175,FR
624679176,624679183,NL
624679184,624679199,FR
624679200,624679203,ES
-624679204,624679311,FR
-624679312,624679327,DE
-624679328,624679391,FR
-624679392,624679407,GB
-624679408,624679679,FR
+624679204,624679679,FR
624679680,624679687,NL
-624679688,624679695,PL
-624679696,624679775,FR
-624679776,624679791,GB
-624679792,624679795,IT
-624679796,624679843,FR
+624679688,624679843,FR
624679844,624679847,ES
-624679848,624680191,FR
-624680192,624680255,IT
-624680256,624680511,FR
-624680512,624680527,IT
-624680528,624680735,FR
-624680736,624680743,IT
-624680744,624680747,NL
-624680748,624680895,FR
-624680896,624680927,ES
-624680928,624680931,FR
+624679848,624680839,FR
+624680840,624680847,NL
+624680848,624680931,FR
624680932,624680935,NL
-624680936,624681095,FR
-624681096,624681103,NL
-624681104,624681279,FR
-624681280,624681295,GB
-624681296,624681327,FR
-624681328,624681331,CH
-624681332,624681335,PL
-624681336,624681351,FR
+624680936,624681351,FR
624681352,624681359,NL
-624681360,624681439,FR
-624681440,624681447,CH
-624681448,624681451,DE
-624681452,624681807,FR
+624681360,624681807,FR
624681808,624681823,BE
-624681824,624681967,FR
-624681968,624681983,ES
-624681984,624681999,IT
-624682000,624682111,FR
-624682112,624682127,IT
-624682128,624682795,FR
-624682796,624682799,NL
-624682800,624683067,FR
-624683068,624683071,GB
-624683072,624683199,FR
-624683200,624683215,ES
-624683216,624683231,DE
-624683232,624683295,FR
-624683296,624683311,ES
-624683312,624683519,FR
-624683520,624683583,GB
-624683584,624683679,FR
-624683680,624683687,GB
-624683688,624683775,FR
+624681824,624682495,FR
+624682496,624682527,ES
+624682528,624683295,FR
+624683296,624683311,DE
+624683312,624683775,FR
624683776,624683779,DE
624683780,624683783,FR
624683784,624683787,DE
-624683788,624683791,PL
-624683792,624683815,FR
-624683816,624683823,PL
-624683824,624683887,FR
-624683888,624683903,GB
-624683904,624683935,FR
-624683936,624683943,DE
-624683944,624683975,FR
+624683788,624683975,FR
624683976,624683983,GB
-624683984,624683991,FR
-624683992,624683999,IT
-624684000,624684103,FR
-624684104,624684111,FI
-624684112,624684175,FR
-624684176,624684183,GB
+624683984,624684043,FR
+624684044,624684047,PT
+624684048,624684183,FR
624684184,624684191,IT
624684192,624684199,FR
624684200,624684203,IT
624684204,624684207,FR
624684208,624684211,ES
-624684212,624684287,FR
-624684288,624684303,IT
-624684304,624684511,FR
-624684512,624684543,NL
-624684544,624684671,FR
-624684672,624684679,DE
-624684680,624684735,FR
-624684736,624684767,GB
-624684768,624684775,ES
-624684776,624684799,FR
+624684212,624684799,FR
624684800,624684803,DE
-624684804,624684831,FR
-624684832,624684847,DE
-624684848,624685055,FR
-624685056,624685059,GB
-624685060,624685063,FI
-624685064,624685215,FR
-624685216,624685219,GB
-624685220,624685263,FR
-624685264,624685279,BE
-624685280,624685311,DE
-624685312,624685503,FR
-624685504,624685535,BE
+624684804,624685535,FR
624685536,624685539,PT
-624685540,624685559,FR
-624685560,624685567,PT
-624685568,624685711,FR
+624685540,624685711,FR
624685712,624685715,ES
-624685716,624685775,FR
-624685776,624685791,DE
-624685792,624685799,FR
+624685716,624685799,FR
624685800,624685803,ES
624685804,624685919,FR
624685920,624685923,ES
624685924,624685943,FR
624685944,624685947,IT
-624685948,624685951,GB
-624685952,624685983,FR
-624685984,624685987,IT
-624685988,624686207,FR
-624686208,624686239,GB
-624686240,624686271,FR
-624686272,624686303,GB
-624686304,624686335,IE
-624686336,624686627,FR
+624685948,624686627,FR
624686628,624686631,ES
624686632,624686667,FR
624686668,624686671,ES
-624686672,624686687,GB
-624686688,624686711,FR
+624686672,624686711,FR
624686712,624686715,ES
-624686716,624686719,FR
-624686720,624686735,NL
-624686736,624686911,FR
-624686912,624686975,GB
-624686976,624687055,FR
-624687056,624687071,IE
-624687072,624687343,FR
+624686716,624687343,FR
624687344,624687346,CZ
624687347,624687347,ES
-624687348,624687615,FR
-624687616,624687619,BE
-624687620,624687623,FR
-624687624,624687627,GB
-624687628,624687827,FR
+624687348,624687827,FR
624687828,624687831,ES
-624687832,624687967,FR
-624687968,624687983,IT
-624687984,624688007,FR
+624687832,624688007,FR
624688008,624688015,ES
-624688016,624688127,FR
-624688128,624688143,PT
-624688144,624688287,FR
-624688288,624688303,PL
-624688304,624688307,FR
+624688016,624688307,FR
624688308,624688311,ES
-624688312,624688319,FR
-624688320,624688327,FI
-624688328,624688335,PL
-624688336,624688487,FR
+624688312,624688487,FR
624688488,624688491,ES
624688492,624688639,FR
624688640,624688643,ES
-624688644,624688671,FR
-624688672,624688687,PL
-624688688,624688691,FR
+624688644,624688691,FR
624688692,624688695,ES
-624688696,624688723,FR
-624688724,624688727,CH
-624688728,624688779,FR
+624688696,624688779,FR
624688780,624688783,ES
624688784,624688791,FR
624688792,624688795,ES
624688796,624688831,FR
624688832,624688835,ES
-624688836,624688839,FR
-624688840,624688847,ES
-624688848,624688863,FR
-624688864,624688895,ES
-624688896,624688999,FR
-624689000,624689007,ES
-624689008,624689055,FR
-624689056,624689063,ES
-624689064,624689075,FR
-624689076,624689076,ES
+624688836,624689076,FR
624689077,624689078,BE
-624689079,624689079,ES
-624689080,624689119,FR
-624689120,624689123,GB
-624689124,624689151,FR
+624689079,624689151,FR
624689152,624691199,DE
624691200,624693247,FR
624693248,624695295,RU
@@ -5932,7 +4531,7 @@
624799744,624801791,RU
624801792,624803839,AT
624803840,624812031,DE
-624812032,624813055,BO
+624812032,624813055,US
624813056,624814079,IL
624814080,624816127,GB
624816128,624818175,FR
@@ -6010,9 +4609,8 @@
625860608,625868799,CZ
625868800,625999871,RU
625999872,627048447,DE
-627048448,627113983,DK
-627113984,627138559,RO
-627138560,627142655,FR
+627048448,627130367,DK
+627130368,627142655,FR
627142656,627145727,RO
627145728,627146751,ES
627146752,627179519,NL
@@ -6072,7 +4670,6 @@
628801536,628803583,GB
628803584,628805631,FR
628805632,628807679,GB
-628807680,628809727,AE
628809728,628813823,TR
628813824,628815871,DK
628815872,628817919,GB
@@ -6140,9 +4737,7 @@
629866496,629874687,NL
629874688,629879807,RU
629879808,629880063,DE
-629880064,629880831,RU
-629880832,629881855,EE
-629881856,629882879,DE
+629880064,629882879,RU
629882880,629883135,GB
629883136,629883391,AU
629883904,629884159,AU
@@ -6227,22 +4822,47 @@
630806528,630808575,ES
630808576,630810623,NL
630810624,630816767,CH
-630816768,630833151,RO
+630816768,630818303,RO
+630818304,630818431,CN
+630818432,630818559,KR
+630818560,630819327,RO
+630819328,630819839,SE
+630819840,630828031,RO
+630828032,630828543,SE
+630828544,630829055,RO
+630829056,630833151,IR
630833152,630849535,NL
630849536,630980607,TR
630980608,630981631,MD
-630981632,630982655,RO
+630981632,630982143,RO
+630982144,630982271,CN
+630982272,630982399,KR
+630982400,630982655,RO
630982656,630984703,MD
630984704,630988799,IR
-630988800,630998271,RO
+630988800,630990335,RO
+630990336,630990847,JE
+630990848,630992895,RO
+630992896,630996991,IR
+630996992,630997503,GB
+630997504,630998271,RO
630998272,630998783,MD
630998784,631001087,RO
631001088,631005183,MD
-631005184,631006207,RO
+631005184,631006207,IT
631006208,631007231,MD
-631007232,631017471,RO
+631007232,631009279,RO
+631009280,631017471,IR
631017472,631018495,MD
-631018496,631039999,RO
+631018496,631019519,IT
+631019520,631023615,IR
+631023616,631024639,IT
+631024640,631024895,RO
+631024896,631025151,GB
+631025152,631029759,RO
+631029760,631033855,SE
+631033856,631034879,IT
+631034880,631039999,RO
631040000,631043071,MD
631043072,631044095,RO
631044096,631045119,MD
@@ -6275,29 +4895,14 @@
632946688,632963071,AT
632963072,632979455,AM
632979456,633012223,IT
-633012224,633059583,FR
-633059584,633059615,ES
-633059616,633059647,DE
-633059648,633059839,FR
-633059840,633059871,IT
-633059872,633059983,FR
+633012224,633059983,FR
633059984,633059987,GB
-633059988,633060031,FR
-633060032,633060159,IT
-633060160,633060223,FR
-633060224,633060287,GB
-633060288,633060511,FR
-633060512,633060543,DE
-633060544,633060607,BE
-633060608,633061119,FR
-633061120,633061247,IT
-633061248,633061311,NL
-633061312,633061375,DE
-633061376,633063679,FR
+633059988,633063679,FR
633063680,633063935,PL
633063936,633064191,FR
633064192,633064447,GB
-633064448,633065727,FR
+633064448,633065471,FR
+633065472,633065727,GB
633065728,633065983,DE
633065984,633066239,FR
633066240,633066495,ES
@@ -6309,9 +4914,7 @@
633098240,633100287,HU
633100288,633102335,FR
633102336,633110527,GB
-633110528,633126911,CZ
-633126912,633135103,SK
-633135104,633143295,CZ
+633110528,633143295,CZ
633143296,633208831,PT
633208832,633241599,RU
633241600,633274367,PL
@@ -6336,8 +4939,7 @@
634001408,634003455,NO
634003456,634007551,PL
634007552,634009599,TR
-634009600,634010623,NO
-634010624,634011647,RU
+634009600,634011647,NO
634011648,634028031,JO
634028032,634060799,RO
634060800,634068991,UA
@@ -6356,9 +4958,7 @@
634124288,634126335,CH
634126336,634191871,RU
634191872,634193919,TR
-634193920,634194687,SK
-634194688,634194815,CZ
-634194816,634195967,SK
+634193920,634195967,CZ
634195968,634198015,RU
634198016,634200063,BA
634200064,634202111,IS
@@ -6453,7 +5053,9 @@
635281408,635283455,RO
635283456,635283967,DE
635283968,635284223,RO
-635284224,635284479,DE
+635284224,635284418,DE
+635284419,635284419,RO
+635284420,635284479,DE
635284480,635284991,RO
635284992,635285503,US
635285504,635287551,ME
@@ -6466,7 +5068,7 @@
635299840,635301887,ES
635301888,635305983,CZ
635305984,635437055,NL
-635437056,635502591,RO
+635437056,635502591,SA
635502592,635568127,PL
635568128,635699199,IT
635699200,635715583,PL
@@ -6486,9 +5088,7 @@
635856896,635858943,TR
635858944,635860991,RU
635860992,635863039,BE
-635863040,635889663,RU
-635889664,635891711,NG
-635891712,635895807,RU
+635863040,635895807,RU
635895808,635961343,KW
635961344,635994111,GE
635994112,636026879,RU
@@ -6518,7 +5118,11 @@
636176384,636178431,TR
636178432,636180479,NL
636180480,636182527,FR
-636182528,636186623,CZ
+636182528,636185087,CZ
+636185088,636185343,SE
+636185344,636186111,US
+636186112,636186367,FR
+636186368,636186623,ES
636186624,636188671,NL
636188672,636190719,GB
636190720,636223487,RU
@@ -6548,7 +5152,10 @@
637140992,637206527,SE
637206528,637239295,NL
637239296,637272063,RO
-637272064,637276159,DE
+637272064,637272831,RU
+637272832,637275135,DE
+637275136,637275391,RU
+637275392,637276159,DE
637276160,637278207,RU
637278208,637288447,GB
637288448,637296639,AM
@@ -6734,8 +5341,8 @@
645185536,645185791,CA
645185792,645187071,US
645187072,645187583,CA
-645187584,645221631,US
-645221632,645222399,CA
+645187584,645221375,US
+645221376,645222399,CA
645222400,645225471,US
645225472,645225727,CA
645225728,645227519,US
@@ -6772,7 +5379,9 @@
645984256,645988351,CA
645988352,645989450,US
645989451,645989451,CA
-645989452,654311423,US
+645989452,646160383,US
+646160384,646164479,CA
+646164480,654311423,US
654311424,654311679,CN
654311680,654311935,AU
654311936,654376959,CN
@@ -6783,7 +5392,10 @@
655360000,656408575,KR
656408576,658505727,PK
658505728,660602879,CN
-660602880,661520383,HK
+660602880,660602880,HK
+660602881,661454847,CN
+661454848,661487615,HK
+661487616,661520383,SG
661520384,661651455,JP
661651456,662700031,KR
662700032,666894335,CN
@@ -6814,11 +5426,7 @@
692191232,692207615,CI
692207616,692240383,ZA
692240384,692256767,GH
-692256768,692260863,SD
-692260864,692260865,UG
-692260866,692260866,SD
-692260867,692261887,UG
-692261888,692273151,SD
+692256768,692273151,SD
692273152,692289535,EG
692289536,692305919,NG
692305920,692322303,CM
@@ -6835,7 +5443,14 @@
692617216,692625407,ZA
692625408,692626687,KE
692626688,692626943,AO
-692626944,692641791,KE
+692626944,692633599,KE
+692633600,692634623,MU
+692634624,692635135,KE
+692635136,692636415,MU
+692636416,692636671,KE
+692636672,692637439,MU
+692637440,692637695,KE
+692637696,692641791,MU
692641792,692649983,GA
692649984,692658175,NG
692658176,692666367,ZA
@@ -6897,7 +5512,6 @@
692893696,692895743,KE
692895744,692897791,NG
692897792,692905983,ZA
-692905984,692908031,ZW
692908032,692910079,BW
692910080,692912127,NG
692912128,692914175,ZM
@@ -6951,7 +5565,9 @@
692999168,693000191,SL
693000192,693001215,NG
693001216,693002239,BW
-693002240,693003263,GA
+693002240,693002505,GA
+693002506,693002506,CM
+693002507,693003263,GA
693003264,693004287,NG
693004288,693005311,CD
693005312,693006335,SD
@@ -7022,8 +5638,7 @@
693082112,693083135,NG
693083136,693086207,ZA
693086208,693087231,KE
-693087232,693087999,ZA
-693088000,693088255,NZ
+693087232,693088255,ZA
693088256,693089279,NG
693089280,693090303,ZA
693090304,693091327,TZ
@@ -7087,7 +5702,9 @@
696254464,696516607,EG
696516608,696778751,ZA
696778752,696844287,MU
-696844288,696909823,MA
+696844288,696865423,MA
+696865424,696865424,EH
+696865425,696909823,MA
696909824,696918015,UG
696918016,696926207,NE
696926208,696928255,ZA
@@ -7099,12 +5716,12 @@
696942592,696950783,MR
696950784,696958975,NG
696958976,696963071,TZ
-696963072,696964095,ZA
-696964096,696965119,UG
+696963072,696965119,UG
696965120,696966143,NG
696966144,696967167,TZ
696967168,696971263,MZ
-696971264,696975359,KE
+696971264,696974335,KE
+696974336,696975359,LU
696975360,696991743,GH
696991744,697008127,NG
697008128,697040895,KE
@@ -7186,7 +5803,11 @@
700437504,700438527,MU
700438528,700439551,BW
700439552,700440575,GN
-700440576,700442623,KE
+700440576,700440831,MU
+700440832,700441087,KE
+700441088,700442247,MU
+700442248,700442251,KE
+700442252,700442623,MU
700442624,700444671,ZW
700444672,700446719,GH
700446720,700447743,SL
@@ -7197,7 +5818,9 @@
700588288,700588543,KM
700588544,700593151,ZA
700593152,700594175,NG
-700594176,700710911,ZA
+700594176,700595199,ZA
+700595200,700596223,CD
+700596224,700710911,ZA
700710912,700776447,EG
700776448,700841983,RW
700841984,700846079,MU
@@ -7324,7 +5947,8 @@
702021632,702029823,ZM
702029824,702038015,BJ
702038016,702046207,ZM
-702046208,702054399,RW
+702046208,702053375,RW
+702053376,702054399,ZW
702054400,702058495,ZA
702058496,702062591,BF
702062592,702066687,NG
@@ -7334,7 +5958,7 @@
702076928,702078975,TZ
702078976,702079999,MA
702080000,702081023,MW
-702081024,702082047,NG
+702081024,702082047,CM
702082048,702083071,AO
702087168,702119935,NG
702119936,702128127,CM
@@ -7373,7 +5997,12 @@
702328832,702332927,TZ
702332928,702337023,MZ
702337024,702341119,UG
-702341120,702349311,KE
+702341120,702342143,MU
+702342144,702342399,KE
+702342400,702344191,MU
+702344192,702344971,KE
+702344972,702345215,MU
+702345216,702349311,KE
702349312,702353407,ZA
702353408,702357503,DZ
702357504,702365695,TZ
@@ -7449,12 +6078,13 @@
702499840,702500863,MU
702500864,702501887,NA
702501888,702502911,UG
-702502912,702503935,SL
+702502912,702503935,CG
702503936,702504959,CM
702504960,702505983,MR
702505984,702507007,AO
702507008,702508031,CD
-702508032,702510079,KE
+702508032,702509055,SO
+702509056,702510079,KE
702510080,702511103,ZM
702511104,702512127,ZA
702512128,702513151,MZ
@@ -7504,15 +6134,18 @@
703749120,703750143,NG
703750144,703754239,MG
703754240,703755263,GH
-703755264,703755519,YT
-703755520,703755899,ZA
-703755900,703755900,YT
-703755901,703757311,ZA
+703755264,703756287,YT
+703756288,703757311,ZA
703757312,703758335,RE
703758336,703759359,CD
703759360,703760383,ZA
703760384,703761407,GH
-703761408,703791103,ZA
+703761408,703762431,RW
+703762432,703764479,ZA
+703764480,703766527,LY
+703766528,703770623,ZA
+703770624,703774719,BJ
+703774720,703791103,ZA
703791104,703856639,CD
703856640,703922175,CM
703922176,704118783,ZA
@@ -7585,81 +6218,1001 @@
717881344,720437247,CN
720437248,720502783,AU
720502784,721420287,CN
-721420288,737206271,JP
-737206272,737207295,ID
-737207296,737221631,JP
-737221632,737222655,IN
-737222656,737230847,JP
-737230848,737231871,IN
-737231872,737244159,JP
-737244160,737246207,IN
-737246208,737247231,JP
-737247232,737249279,IN
-737249280,737290239,JP
+721420288,736100351,JP
+736100352,736101375,IN
+736101376,736102399,HK
+736102400,736103423,IN
+736103424,736104447,CN
+736104448,736105471,ID
+736105472,736106495,TW
+736106496,736107519,CN
+736107520,736108543,HK
+736108544,736109567,JP
+736109568,736110591,LA
+736110592,736111615,MM
+736111616,736112639,CN
+736112640,736113663,HK
+736113664,736115711,CN
+736115712,736116735,AU
+736116736,736119807,CN
+736119808,736120831,AU
+736120832,736121855,CN
+736121856,736122879,MM
+736122880,736123903,MO
+736123904,736124927,HK
+736124928,736125951,IN
+736125952,736126975,CN
+736126976,736127999,KR
+736128000,736131071,BD
+736131072,736132095,NZ
+736132096,736133119,LK
+736133120,736136191,IN
+736136192,736138239,CN
+736138240,736139263,HK
+736139264,736140287,SG
+736140288,736141311,IN
+736141312,736142335,CN
+736142336,736143359,IN
+736143360,736144383,ID
+736144384,736145407,IN
+736145408,736146431,CN
+736146432,736147455,IN
+736147456,736148479,CN
+736148480,736149503,NZ
+736149504,736150527,NC
+736150528,736151551,HK
+736151552,736156671,CN
+736156672,736157695,IN
+736157696,736158719,CN
+736158720,736160767,HK
+736160768,736161791,PK
+736161792,736162815,CN
+736162816,736163839,HK
+736163840,736164351,TW
+736164352,736164863,NZ
+736164864,736166911,IN
+736166912,736167935,SG
+736167936,736168959,HK
+736168960,736169983,AU
+736169984,736173055,IN
+736173056,736174079,HK
+736174080,736175103,AU
+736175104,736176127,MY
+736176128,736177151,BN
+736177152,736178175,HK
+736178176,736179199,AU
+736179200,736180223,IN
+736180224,736181247,HK
+736181248,736182271,AU
+736182272,736183295,ID
+736183296,736185343,IN
+736185344,736186367,CN
+736186368,736187391,IN
+736187392,736188415,CN
+736188416,736189439,JP
+736189440,736190463,IN
+736190464,736191487,PK
+736191488,736193535,HK
+736193536,736194559,MY
+736194560,736195583,AU
+736195584,736196607,IN
+736196608,736198655,CN
+736198656,736199679,AU
+736199680,736200703,HK
+736200704,736201727,BN
+736201728,736202751,CN
+736202752,736203775,AU
+736203776,736204799,BD
+736204800,736205823,SG
+736205824,736206847,JP
+736206848,736209919,IN
+736209920,736210943,CN
+736210944,736211967,AU
+736211968,736214015,CN
+736214016,736216063,IN
+736216064,736217087,HK
+736217088,736218111,NZ
+736218112,736219135,BD
+736219136,736220159,CN
+736220160,736221183,IN
+736221184,736229375,CN
+736229376,736230399,IN
+736230400,736231423,CN
+736231424,736231935,AU
+736231936,736232447,IN
+736232448,736233471,PH
+736233472,736234495,NZ
+736234496,736235519,KH
+736235520,736237567,HK
+736237568,736239615,IN
+736239616,736263167,CN
+736263168,736264191,HK
+736264192,736286719,CN
+736286720,736287743,NZ
+736287744,736288767,MV
+736288768,736289791,MY
+736289792,736289919,KR
+736289920,736290047,JP
+736290048,736290303,AU
+736290304,736290815,US
+736290816,736291839,TW
+736291840,736300031,CN
+736300032,736301055,HK
+736301056,736303103,IN
+736303104,736304127,TW
+736304128,736324607,CN
+736324608,736325631,AU
+736325632,736326655,HK
+736326656,736328703,KR
+736328704,736329727,AU
+736329728,736331775,IN
+736331776,736334847,CN
+736334848,736335871,ID
+736335872,736344063,CN
+736344064,736345087,IN
+736345088,736354303,CN
+736354304,736355327,IN
+736355328,736356351,SG
+736356352,736357375,CN
+736357376,736358399,HK
+736358400,736359423,SG
+736359424,736360447,IN
+736360448,736380927,CN
+736380928,736381951,IN
+736381952,736382975,CN
+736382976,736383999,TH
+736384000,736385023,LA
+736385024,736386047,HK
+736386048,736388095,IN
+736388096,736389119,CN
+736389120,736390143,JP
+736390144,736391167,LK
+736391168,736392191,IN
+736392192,736394239,CN
+736394240,736395263,HK
+736395264,736396287,MN
+736396288,736398335,CN
+736398336,736400383,IN
+736400384,736402431,CN
+736402432,736403455,PK
+736403456,736404479,KR
+736405504,736408575,IN
+736408576,736409599,CN
+736409600,736410623,NZ
+736410624,736411647,CN
+736411648,736412671,NP
+736412672,736413695,TH
+736413696,736414719,HK
+736414720,736415743,CN
+736415744,736416767,BD
+736416768,736417791,SG
+736417792,736418815,HK
+736418816,736421887,IN
+736421888,736422911,SG
+736422912,736423935,IN
+736423936,736424959,CN
+736424960,736425983,JP
+736425984,736428031,MY
+736428032,736429055,IN
+736429056,736430079,HK
+736430080,736431103,IN
+736431104,736432127,BD
+736432128,736433151,CN
+736433152,736434175,ID
+736434176,736435199,IN
+736435200,736436223,HK
+736436224,736437247,JP
+736437248,736438271,HK
+736438272,736439295,CN
+736439296,736440319,TH
+736440320,736441343,CN
+736441344,736442367,HK
+736442368,736443391,CN
+736443392,736445439,AU
+736445440,736446463,JP
+736446464,736447487,IN
+736447488,736448511,TH
+736448512,736449535,IN
+736449536,736450559,SG
+736450560,736452607,IN
+736452608,736453631,CN
+736453632,736455679,IN
+736455680,736456703,CN
+736456704,736458751,HK
+736458752,736459775,CN
+736459776,736460799,JP
+736460800,736461823,SG
+736461824,736462847,TH
+736462848,736465919,CN
+736465920,736466943,TH
+736466944,736467967,HK
+736467968,736468991,SG
+736468992,736470015,IN
+736470016,736471039,JP
+736471040,736479231,CN
+736479232,736480255,IN
+736480256,736481279,ID
+736481280,736482303,BD
+736482304,736483327,HK
+736483328,736485375,CN
+736485376,736486399,IN
+736486400,736487423,NP
+736487424,736489471,CN
+736489472,736491519,JP
+736491520,736493567,ID
+736493568,736494591,KR
+736494592,736495103,ID
+736495104,736495359,NR
+736495360,736495615,ID
+736495616,736498687,HK
+736498688,736499711,CN
+736499712,736500479,SG
+736500480,736500735,TH
+736500736,736501759,JP
+736501760,736502783,CN
+736502784,736505855,IN
+736505856,736506879,AU
+736506880,736508927,JP
+736508928,736509951,BD
+736509952,736510975,AU
+736510976,736513023,CN
+736513024,736515071,KR
+736515072,736516095,CN
+736516096,736517119,HK
+736517120,736518143,PK
+736518144,736519167,HK
+736519168,736520191,AU
+736520192,736521215,IN
+736521216,736522239,AU
+736522240,736524287,HK
+736524288,736525311,BD
+736525312,736526335,CN
+736526336,736527359,ID
+736527360,736528383,IN
+736528384,736529407,CN
+736529408,736531455,HK
+736531456,736532479,IN
+736532480,736533503,ID
+736533504,736535551,IN
+736535552,736536575,HK
+736536576,736537599,CN
+736537600,736538623,IN
+736538624,736539647,AU
+736539648,736540671,SG
+736540672,736541695,IN
+736541696,736542719,HK
+736542720,736543743,KH
+736543744,736545791,IN
+736545792,736546815,HK
+736546816,736547839,JP
+736547840,736548863,IN
+736548864,736549887,KR
+736549888,736559103,CN
+736559104,736560127,HK
+736560128,736561151,MY
+736561152,736562175,HK
+736562176,736563199,SG
+736563200,736564223,HK
+736564224,736565247,BD
+736565248,736566271,AU
+736566272,736567295,MV
+736567296,736571391,CN
+736571392,736574463,IN
+736574464,736575487,PK
+736575488,736576511,KH
+736576512,736577535,AU
+736577536,736578559,MY
+736578560,736579583,BD
+736579584,736587775,CN
+736587776,736588799,MN
+736588800,736591871,IN
+736591872,736592383,ID
+736592384,736592639,SG
+736592640,736592895,AF
+736592896,736593919,IN
+736593920,736606207,CN
+736606208,736607231,HK
+736607232,736608255,JP
+736608256,736609279,NZ
+736609280,736610303,HK
+736610304,736611327,AU
+736611328,736612351,JP
+736612352,736613375,NP
+736613376,736615423,IN
+736615424,736616447,JP
+736616448,736617471,MY
+736617472,736618495,PH
+736618496,736621567,IN
+736621568,736622591,JP
+736622592,736624639,IN
+736624640,736886783,JP
+736886784,737096703,CN
+737148928,737149951,CN
+737149952,737151999,IN
+737152000,737154047,HK
+737154048,737155071,MY
+737155072,737156095,TW
+737156096,737157119,HK
+737157120,737158143,NZ
+737158144,737159167,HK
+737159168,737160191,AU
+737160192,737161215,TW
+737161216,737162239,CN
+737162240,737163263,BD
+737163264,737165311,CN
+737165312,737166335,IN
+737166336,737169407,CN
+737169408,737170431,ID
+737170432,737171455,CN
+737171456,737172479,GU
+737172480,737173503,HK
+737173504,737174527,AU
+737174528,737175551,BD
+737175552,737177599,TW
+737177600,737178623,IN
+737178624,737179647,HK
+737179648,737180671,AU
+737180672,737184767,CN
+737184768,737185791,VU
+737185792,737186815,AU
+737186816,737187839,ID
+737187840,737188863,TW
+737188864,737206271,CN
+737206272,737208319,ID
+737208320,737209343,AU
+737209344,737220607,CN
+737220608,737222655,IN
+737222656,737223679,TW
+737223680,737225727,IN
+737225728,737225983,KR
+737225984,737226751,HK
+737226752,737227775,CN
+737227776,737228799,AU
+737228800,737229823,TH
+737229824,737232895,IN
+737232896,737233919,HK
+737233920,737239039,CN
+737239040,737240063,MY
+737240064,737241087,HK
+737241088,737243135,KR
+737243136,737244159,CN
+737244160,737249279,IN
+737249280,737250303,BT
+737250304,737253375,IN
+737253376,737255423,HK
+737255424,737256447,TW
+737256448,737257471,WS
+737257472,737262591,CN
+737262592,737263615,AU
+737263616,737264639,IN
+737264640,737265663,CN
+737265664,737266687,AU
+737266688,737267711,HK
+737267712,737276927,CN
+737276928,737277951,IN
+737277952,737279999,CN
+737280000,737281023,HK
+737281024,737282047,SG
+737282048,737288191,CN
+737288192,737289215,HK
+737289216,737290239,IN
737290240,737291263,AU
-737291264,737479679,JP
+737291264,737297407,CN
+737297408,737298431,AU
+737298432,737305599,CN
+737305600,737306623,PK
+737306624,737307647,IN
+737307648,737308671,HK
+737308672,737309695,KR
+737309696,737312767,IN
+737312768,737313791,HK
+737313792,737315839,JP
+737315840,737316863,HK
+737316864,737324031,CN
+737324032,737325055,HK
+737325056,737326079,PK
+737326080,737327103,CN
+737327104,737328127,SG
+737328128,737331199,CN
+737331200,737332223,HK
+737332224,737333247,CN
+737333248,737335295,IN
+737335296,737337343,CN
+737337344,737339391,IN
+737339392,737341439,HK
+737341440,737342463,MN
+737342464,737344511,IN
+737344512,737345535,CN
+737345536,737346559,AU
+737346560,737350655,CN
+737350656,737350911,AU
+737350912,737351679,NZ
+737351680,737352703,CN
+737352704,737354751,HK
+737354752,737355775,IN
+737355776,737359871,HK
+737359872,737361919,NZ
+737361920,737364991,HK
+737364992,737368063,IN
+737368064,737369087,CN
+737369088,737370111,HK
+737370112,737371135,NP
+737371136,737375231,HK
+737375232,737376255,AU
+737376256,737377279,HK
+737377280,737378303,PH
+737378304,737379327,CN
+737380352,737381375,CN
+737381376,737382399,ID
+737382400,737384447,CN
+737384448,737385471,ID
+737385472,737386495,CN
+737386496,737387519,MN
+737387520,737388543,HK
+737388544,737389567,CN
+737389568,737390591,IN
+737390592,737391615,HK
+737391616,737392639,CN
+737392640,737393663,ID
+737393664,737394687,CN
+737394688,737395711,HK
+737395712,737396735,NZ
+737396736,737397759,AU
+737397760,737398783,BD
+737398784,737399807,HK
+737399808,737400831,IN
+737400832,737401855,KR
+737401856,737403903,HK
+737403904,737405951,CN
+737405952,737406975,AU
+737406976,737407999,HK
+737408000,737409023,CN
+737409024,737410047,HK
+737410048,737411071,TW
+737411072,737476607,JP
+737476608,737478655,IN
+737478656,737479679,PK
737479680,737480703,IN
-737480704,737488895,JP
+737480704,737481727,SG
+737481728,737482751,IN
+737482752,737484799,AU
+737484800,737485823,KH
+737485824,737487871,AU
+737487872,737488895,MM
737488896,737489151,AU
-737489152,737490943,JP
+737489152,737489407,SG
+737489408,737489919,HK
+737489920,737490943,NZ
737490944,737491967,FJ
-737491968,737502207,JP
+737491968,737492447,SG
+737492448,737492479,MY
+737492480,737492735,SG
+737492736,737492991,HK
+737492992,737497087,AU
+737497088,737498111,NZ
+737498112,737499135,NP
+737499136,737500159,IN
+737500160,737501183,NP
+737501184,737502207,SG
737502208,737503231,IN
-737503232,737507327,JP
+737503232,737505279,SG
+737505280,737506303,AU
+737506304,737507327,BD
737507328,737508351,AU
-737508352,737509872,JP
-737509873,737509873,PK
-737509874,737511423,JP
+737508352,737509375,MY
+737509376,737510399,PK
+737510400,737511423,AU
737511424,737512447,IN
737512448,737513471,BD
-737513472,737514495,JP
+737513472,737514495,TH
737514496,737515519,IN
-737515520,737516543,JP
+737515520,737516543,AU
737516544,737517567,IN
737517568,737517823,AU
737517824,737518079,NZ
-737518080,737518335,AU
-737518336,737526783,JP
+737518080,737520639,AU
+737520640,737521663,NZ
+737521664,737522687,AU
+737522688,737525759,ID
+737525760,737526783,BD
737526784,737527295,US
737527296,737527551,SG
737527552,737527807,ID
-737527808,737529855,JP
+737527808,737528831,KH
+737528832,737529855,PK
737529856,737530879,IN
-737530880,737538047,JP
+737530880,737531903,NC
+737531904,737532927,KH
+737533952,737534975,AU
+737534976,737535999,SG
+737536000,737537023,BD
+737537024,737538047,NP
737538048,737539071,NZ
-737539072,737644644,JP
-737644645,737644645,IN
-737644646,737838079,JP
+737539072,737540095,BD
+737540096,737541119,ID
+737541120,737542143,SG
+737542144,737574911,CN
+737607680,737608703,HK
+737608704,737610751,CN
+737610752,737611775,ID
+737611776,737612799,PH
+737612800,737613823,ID
+737613824,737614847,MO
+737614848,737615871,IN
+737615872,737617919,ID
+737617920,737618943,IN
+737618944,737620991,CN
+737620992,737622015,IN
+737622016,737623039,TH
+737623040,737624063,GU
+737624064,737625087,AU
+737625088,737626111,CN
+737626112,737627135,JP
+737627136,737628159,CN
+737628160,737629183,AU
+737629184,737634303,CN
+737634304,737635327,KR
+737635328,737637375,CN
+737637376,737638399,AU
+737638400,737639423,PK
+737639424,737640447,NZ
+737640448,737641471,AU
+737641472,737642495,HK
+737642496,737645567,IN
+737645568,737647615,CN
+737647616,737649663,IN
+737649664,737650687,HK
+737650688,737651711,JP
+737651712,737652735,NZ
+737652736,737656831,CN
+737656832,737657855,KR
+737657856,737675263,CN
+737675264,737676287,HK
+737676288,737677311,PK
+737677312,737678335,TW
+737678336,737679359,CN
+737679360,737680383,ID
+737680384,737681407,CN
+737681408,737683455,IN
+737683456,737685503,JP
+737685504,737686527,CN
+737686528,737687551,AU
+737687552,737688575,CN
+737688576,737690623,HK
+737690624,737692671,IN
+737692672,737712127,CN
+737712128,737713151,IN
+737713152,737714175,FM
+737714176,737715199,JP
+737715200,737718271,HK
+737718272,737727487,CN
+737727488,737728511,AU
+737728512,737729535,JP
+737729536,737730559,IN
+737730560,737731583,HK
+737731584,737733631,CN
+737733632,737735679,IN
+737735680,737736703,CN
+737736704,737737727,HK
+737737728,737738751,IN
+737738752,737741823,CN
+737741824,737742847,SG
+737742848,737744895,HK
+737744896,737745919,CN
+737745920,737746943,HK
+737746944,737747967,TH
+737747968,737748991,SG
+737748992,737750015,AF
+737750016,737751039,JP
+737751040,737753087,IN
+737753088,737757183,TH
+737757184,737758207,NZ
+737758208,737760255,HK
+737760256,737761279,IN
+737761280,737762303,HK
+737762304,737763327,AU
+737763328,737765375,HK
+737765376,737768447,TH
+737768448,737769471,AU
+737769472,737770495,CN
+737770496,737771519,HK
+737771520,737771647,KR
+737771648,737771775,JP
+737771776,737771903,KR
+737771904,737772159,JP
+737772160,737772287,KR
+737772288,737772415,JP
+737772416,737772543,KR
+737772544,737774591,CN
+737774592,737775615,ID
+737775616,737782783,CN
+737782784,737783807,HK
+737783808,737784831,PF
+737784832,737787903,IN
+737787904,737788927,CN
+737788928,737790975,NZ
+737790976,737791999,HK
+737792000,737793023,ID
+737793024,737794047,SG
+737794048,737795071,IN
+737795072,737796095,HK
+737796096,737799167,IN
+737799168,737800191,CN
+737800192,737802239,JP
+737802240,737803263,SG
+737803264,737804287,HK
+737804288,737805311,SG
+737805312,737806335,CN
+737806336,737807359,HK
+737807360,737810431,CN
+737810432,737811455,AU
+737811456,737814527,CN
+737814528,737815551,IN
+737815552,737816575,TW
+737816576,737817599,HK
+737817600,737818623,AU
+737818624,737821695,HK
+737821696,737822719,AU
+737822720,737823743,CN
+737824768,737825791,BD
+737825792,737826815,PK
+737826816,737827839,JP
+737827840,737828863,AU
+737828864,737835007,CN
+737835008,737836031,IN
+737836032,737837055,MN
+737837056,737838079,CN
737838080,737839103,IN
-737839104,737857535,JP
+737839104,737840127,AF
+737840128,737841151,AU
+737841152,737843199,CN
+737843200,737844223,KR
+737844224,737845247,IN
+737845248,737846271,CN
+737846272,737847295,IN
+737847296,737850367,CN
+737850368,737851391,IN
+737851392,737853439,HK
+737853440,737854463,SG
+737854464,737855487,JP
+737855488,737856511,CN
+737856512,737857535,AU
737857536,737858559,IN
-737858560,737941503,JP
+737858560,737861631,CN
+737861632,737862655,PH
+737862656,737863679,JP
+737863680,737864447,AU
+737864448,737864703,HK
+737864704,737865727,CN
+737865728,737866751,LK
+737866752,737867775,CN
+737867776,737868799,AU
+737868800,737870847,IN
+737870848,737874431,CN
+737874432,737874943,IN
+737874944,737876991,HK
+737876992,737878015,KR
+737878016,737879039,HK
+737879040,737880063,CN
+737880064,737881087,AU
+737881088,737882111,HK
+737882112,737883135,JP
+737883136,737884159,AU
+737884160,737886207,TW
+737886208,737887231,SG
+737887232,737888255,KR
+737888256,737889279,IN
+737889280,737890303,HK
+737890304,737894399,IN
+737894400,737895423,ID
+737895424,737896447,IN
+737896448,737897471,HK
+737897472,737898495,AU
+737898496,737899519,MY
+737899520,737900543,CN
+737900544,737901567,KR
+737901568,737902591,IN
+737902592,737903615,BN
+737903616,737904639,HK
+737904640,737905663,MY
+737905664,737906687,HK
+737906688,737908735,IN
+737908736,737909759,AU
+737909760,737910271,HK
+737910272,737910783,MY
+737910784,737911807,HK
+737911808,737912063,SG
+737912064,737912831,AU
+737912832,737915903,IN
+737915904,737916927,TW
+737916928,737917951,JP
+737917952,737918975,IN
+737918976,737919999,CN
+737920000,737921023,HK
+737921024,737922047,AU
+737922048,737923071,KR
+737923072,737924095,MY
+737924096,737927167,IN
+737927168,737929215,HK
+737929216,737931263,CN
+737931264,737932287,AU
+737932288,737933311,CN
+737933312,737934335,HK
+737934336,737935359,TH
+737935360,737936383,AU
+737936384,737937407,IN
+737937408,737938431,ID
+737938432,737939455,LK
+737939456,737940479,KH
+737940480,737941503,AU
737941504,737944575,IN
-737944576,737950719,JP
+737944576,737945599,MY
+737945600,737946623,HK
+737946624,737947647,MY
+737947648,737948671,CN
+737948672,737949695,HK
+737949696,737950719,CN
737950720,737951743,IN
-737951744,737958911,JP
-737958912,737959935,IN
-737959936,737965055,JP
+737951744,737953791,NZ
+737953792,737954815,ID
+737954816,737955839,AU
+737955840,737956863,IN
+737956864,737957887,HK
+737957888,737959935,IN
+737959936,737960959,AU
+737960960,737961983,IN
+737961984,737963007,ID
+737963008,737965055,AU
737965056,737966079,IN
-737966080,737967103,JP
-737967104,737968127,AU
-737968128,737971199,JP
+737966080,737967103,TH
+737967104,737969151,AU
+737969152,737970175,HK
+737970176,737971199,ID
737971200,737972223,IN
-737972224,737972735,ID
-737972736,737987583,JP
+737972224,737973247,ID
+737973248,737974271,HK
+737974272,737975295,IN
+737975296,737976319,ID
+737976320,737981439,HK
+737981440,737982463,IN
+737982464,737983487,ID
+737983488,737986559,IN
+737986560,737987583,HK
737987584,737988607,IN
-737988608,737991679,JP
+737988608,737989631,HK
+737989632,737991679,MY
737991680,737992191,IN
-737992192,737999320,JP
-737999321,737999321,IN
-737999322,738160639,JP
+737992192,737992703,ID
+737992704,737993727,CN
+737993728,737994751,HK
+737994752,737995775,MY
+737995776,737996799,ID
+737996800,737997823,IN
+737997824,737998847,LA
+737998848,737999871,IN
+737999872,738000895,AU
+738000896,738066431,JP
+738066432,738069503,CN
+738069504,738070527,PK
+738070528,738071551,TW
+738071552,738072575,NZ
+738072576,738073599,CN
+738073600,738075647,IN
+738075648,738076671,CN
+738076672,738077695,IN
+738077696,738078719,CN
+738078720,738079743,IN
+738079744,738080767,CN
+738080768,738081791,TL
+738081792,738082815,WS
+738082816,738083839,CN
+738083840,738084863,ID
+738084864,738085887,CN
+738085888,738086911,MY
+738086912,738087935,ID
+738087936,738091007,CN
+738091008,738092031,BD
+738092032,738094079,CN
+738094080,738095103,IN
+738095104,738097151,CN
+738097152,738098175,MY
+738098176,738099199,ID
+738099200,738100223,CN
+738100224,738101247,TH
+738101248,738107391,CN
+738107392,738108415,IN
+738108416,738109439,HK
+738109440,738111487,CN
+738111488,738112511,IN
+738112512,738118655,CN
+738118656,738119679,IN
+738119680,738120703,CN
+738120704,738121727,IN
+738121728,738122751,HK
+738122752,738128895,CN
+738128896,738129919,KR
+738129920,738135039,CN
+738135040,738136063,TW
+738136064,738137087,CN
+738137088,738138111,BD
+738138112,738139135,NZ
+738139136,738140159,SG
+738140160,738141183,AU
+738141184,738142207,HK
+738142208,738143231,JP
+738143232,738144255,AU
+738144256,738145279,CN
+738145280,738146303,HK
+738146304,738147327,IN
+738147328,738152447,CN
+738152448,738153471,HK
+738153472,738154495,CN
+738154496,738156543,TW
+738156544,738157567,CN
+738157568,738158591,SG
+738158592,738159615,HK
+738159616,738160639,CN
738160640,738161663,KH
-738161664,738173951,JP
+738161664,738163711,HK
+738163712,738164735,SG
+738164736,738165759,AU
+738165760,738166783,IN
+738166784,738167807,AU
+738167808,738168831,IN
+738168832,738169855,CN
+738169856,738170879,TO
+738170880,738171903,SG
+738171904,738172927,HK
+738172928,738173951,NZ
738173952,738174975,IN
-738174976,738197503,JP
+738174976,738175999,CN
+738176000,738177023,MY
+738177024,738178047,CN
+738178048,738179071,TW
+738179072,738180095,CN
+738180096,738181119,HK
+738181120,738182143,CN
+738182144,738183167,ID
+738183168,738187263,CN
+738187264,738188287,PH
+738188288,738189311,IN
+738189312,738192383,CN
+738192384,738193407,NC
+738193408,738194431,TH
+738194432,738195455,CN
+738195456,738197503,KR
738197504,746717183,US
746717184,746782719,DE
-746782720,755105791,US
+746782720,747175935,US
+747175936,747241471,NL
+747241472,755105791,US
+756023296,757186559,US
+757186560,757190655,CA
+757194752,757600255,US
+757600256,757604351,CA
+757604352,757612543,US
+757612544,757616639,CA
+757616640,757686271,US
+757686272,757694463,CA
+757694464,757729279,US
+757729280,757731327,CA
+757731328,757733375,US
+757733376,757734399,CA
+757734400,757736447,US
+757736448,757737471,CA
+757737472,757744639,US
+757745664,757747711,CA
+757747712,757751807,US
+757751808,757759999,CA
+757760000,757760255,US
+757760256,757760511,ML
+757760512,757761535,US
+757761536,757761791,MW
+757761792,757762815,US
+757762816,757763071,CD
+757763072,757764095,US
+757764096,757764351,ZW
+757764352,757765375,US
+757765376,757765631,SD
+757765632,757766655,US
+757766656,757766911,BI
+757766912,757767935,US
+757767936,757768191,MU
+757768192,757769215,US
+757769216,757769471,SL
+757769472,757770495,US
+757770496,757770751,TG
+757770752,757771775,US
+757771776,757772031,ER
+757772032,757773055,US
+757773056,757773311,MR
+757773312,757774335,US
+757774336,757774591,LR
+757774592,757858303,US
+757858304,757956607,CA
+757956608,758683647,US
+758683648,758683903,HK
+758683904,758684159,SG
+758684160,758779903,US
+758779904,758783999,CA
+758784000,758796287,US
+758796288,758804479,CA
+758804480,758824959,US
+758824960,758841343,CA
+758841344,758874367,US
+758874368,758874623,AM
+758874624,758875391,US
+758875392,758875647,AO
+758875648,758875903,US
+758875904,758876159,AZ
+758876160,758876671,US
+758876672,758876927,SD
+758876928,758877439,US
+758877440,758877695,KZ
+758877696,758878207,US
+758878208,758878463,ET
+758878464,758878975,US
+758878976,758879231,KG
+758879232,758879743,US
+758879744,758879999,CD
+758880000,758880511,US
+758880512,758880767,UZ
+758880768,758881535,US
+758881536,758881791,PH
+758881792,758882047,US
+758882048,758882303,TM
+758882304,758882815,US
+758882816,758883071,ZM
+758883072,758883583,US
+758883584,758883839,TJ
+758883840,758884351,US
+758884352,758884607,MZ
+758884608,758885119,US
+758885120,758885375,CN
+758885376,758885887,US
+758885888,758886143,SN
+758886144,758886655,US
+758886656,758886911,DZ
+758886912,758887167,NE
+758887168,758887423,US
+758887424,758887679,TD
+758887680,758888191,US
+758888192,758888447,LY
+758888448,758888703,US
+758888704,758888959,TZ
+758888960,758889215,US
+758889216,758889471,MG
+758889472,758889727,US
+758889728,758889983,TN
+758889984,758972415,US
+758972416,758976511,CA
+758976512,758984703,US
+758984704,758988799,CA
+758988800,759047423,US
+759047424,759047679,IN
+759047680,759048191,US
+759048192,759048447,PK
+759048448,759050495,US
+759050496,759050751,IN
+759050752,759051519,US
+759051520,759051775,PK
+759051776,759053055,US
+759053056,759053311,IN
+759053312,759053823,US
+759053824,759054079,PK
+759054080,759054335,US
+759054336,759062527,CA
+759062528,759068671,US
+759068672,759069695,NL
+759069696,759087103,US
+759087104,759103487,CA
+759103488,759128063,US
+759128064,759130111,GB
+759130112,759132159,US
+759132160,759133183,FR
+759133184,759134207,DE
+759134208,759136255,JP
+759136256,759169023,US
759169024,759171071,ID
759171072,759174143,IN
759174144,759175167,MO
@@ -7714,6 +7267,122 @@
759235584,759236607,NZ
759236608,759237631,IN
759237632,759238655,AU
+761266176,761790463,EG
+762314752,762315775,IN
+762315776,762316799,JP
+762316800,762320895,IN
+762320896,762321919,HK
+762321920,762323967,IN
+762323968,762324991,SG
+762324992,762330111,IN
+762330112,762331135,JP
+762331136,762332159,TH
+762332160,762333183,IN
+762333184,762334207,BD
+762334208,762335743,SG
+762335744,762336255,PH
+762336256,762337279,ID
+762337280,762345471,KR
+762345472,762346495,JP
+762346496,762347519,ID
+762347520,762348543,JP
+762348544,762349567,CN
+762349568,762350591,IN
+762350592,762351615,TH
+762351616,762353663,IN
+762353664,762358783,KR
+762358784,762359807,IN
+762359808,762360831,MM
+762360832,762361855,NP
+762361856,762362879,IN
+762362880,762363903,CN
+762363904,762364927,IN
+762364928,762365951,MY
+762365952,762366975,IN
+762366976,762367999,HK
+762368000,762372095,CN
+762372096,762373119,FJ
+762373120,762376191,CN
+762376192,762377215,HK
+762377216,762378239,AU
+762378240,762380287,IN
+762380288,762381311,HK
+762381312,762382335,JP
+762382336,762383359,NZ
+762383360,762388479,CN
+762388480,762389503,HK
+762389504,762390527,AU
+762390528,762391551,CN
+762391552,762393599,KR
+762393600,762395647,CN
+762395648,762396159,TH
+762396160,762397695,IN
+762397696,762398719,HK
+762398720,762399743,CN
+762399744,762400767,IN
+762400768,762401791,HK
+762401792,762402815,TH
+762402816,762403839,IN
+762403840,762404863,AU
+762404864,762407935,IN
+762407936,762408959,CN
+762408960,762409983,HK
+762409984,762411007,JP
+762411008,762412031,IN
+762412032,762413055,PK
+762413056,762414079,HK
+762414080,762415103,JP
+762415104,762416127,IN
+762416128,762417151,HK
+762417152,762419199,CN
+762419200,762420223,IN
+762420224,762421247,TW
+762421248,762422271,HK
+762422272,762423295,JP
+762423296,762424319,CN
+762424320,762425343,JP
+762425344,762426367,CN
+762426368,762427391,IN
+762427392,762428415,CN
+762428416,762429439,IN
+762429440,762430463,HK
+762430464,762431487,AU
+762431488,762437631,CN
+762437632,762438655,IN
+762438656,762439679,CN
+762439680,762440703,AU
+762440704,762441727,BD
+762441728,762442751,CN
+762442752,762443775,AU
+762443776,762444799,IN
+762444800,762447871,CN
+762447872,762448895,HK
+762448896,762449919,CN
+762449920,762450943,JP
+762450944,762451967,PH
+762451968,762452991,HK
+762452992,762454015,MY
+762454016,762455039,CN
+762455040,762456063,IN
+762456064,762457087,CN
+762457088,762458111,HK
+762458112,762459135,IN
+762459136,762460159,CN
+762460160,762467327,IN
+762467328,762469375,BD
+762469376,762470399,HK
+762470400,762471423,CN
+762471424,762472447,MY
+762472448,762473471,CN
+762473472,762475519,JP
+762475520,762476543,ID
+762476544,762478591,PK
+762478592,762479615,KR
+762479616,762480639,PK
+762480640,762481663,CN
+762481664,762486783,IN
+767557632,768606207,ZA
+769130496,769392639,MA
771751936,771817471,RU
771817472,771948543,TR
771948544,772014079,RU
@@ -7761,19 +7430,7 @@
772841472,772843519,GB
772843520,772845567,IT
772845568,772847615,RU
-772847616,772848103,NL
-772848104,772848111,US
-772848112,772848191,NL
-772848192,772848223,US
-772848224,772848871,NL
-772848872,772848879,US
-772848880,772849231,NL
-772849232,772849247,MY
-772849248,772849255,NL
-772849256,772849263,US
-772849264,772849271,NL
-772849272,772849279,US
-772849280,772849663,NL
+772847616,772849663,NL
772849664,772851711,BG
772851712,772853759,CH
772853760,772855807,GB
@@ -7891,8 +7548,9 @@
773111808,773115903,TJ
773115904,773119999,PS
773120000,773124095,GB
-773124096,773128191,CH
-773128192,773132287,DE
+773124096,773124607,DE
+773124608,773124863,CH
+773124864,773132287,DE
773132288,773134335,IT
773134336,773135359,CH
773135360,773136383,IT
@@ -7900,9 +7558,7 @@
773140480,773144575,CY
773144576,773148671,RU
773148672,773152767,IR
-773152768,773153791,SE
-773153792,773154815,US
-773154816,773156863,SE
+773152768,773156863,SE
773156864,773165055,FR
773165056,773166463,NL
773166464,773166591,PL
@@ -7910,7 +7566,9 @@
773167200,773167207,NL
773167208,773167359,US
773167360,773167615,NL
-773167616,773168127,US
+773167616,773167655,US
+773167656,773167663,NL
+773167664,773168127,US
773168128,773168415,NL
773168416,773168639,US
773168640,773168895,NL
@@ -8105,7 +7763,9 @@
773931008,773934591,DE
773934592,773935352,FR
773935353,773935353,US
-773935354,773939199,FR
+773935354,773938231,FR
+773938232,773938239,GB
+773938240,773939199,FR
773939200,773947391,CZ
773947392,773955583,GB
773955584,773963775,FR
@@ -8124,7 +7784,7 @@
774004736,774012927,IR
774012928,774021119,RU
774021120,774029311,IR
-774029312,774037503,RO
+774029312,774037503,KZ
774037504,774045695,SK
774045696,774053887,FR
774053888,774055935,DE
@@ -8135,7 +7795,8 @@
774078464,774086655,BA
774086656,774094847,BG
774094848,774103039,HU
-774103040,774119423,RU
+774103040,774111231,UA
+774111232,774119423,RU
774119424,774127615,CZ
774127616,774135807,LT
774135808,774143999,IR
@@ -8201,7 +7862,7 @@
774161263,774161272,TR
774161273,774161282,MT
774161283,774161292,SE
-774161293,774161302,US
+774161293,774161302,HK
774161303,774161312,VA
774161313,774161322,IE
774161323,774161332,PK
@@ -8221,26 +7882,21 @@
774161398,774161402,VA
774161403,774161405,LC
774161406,774161408,VA
-774161409,774161409,GB
-774161410,774161417,US
-774161418,774161418,GB
+774161409,774161418,US
774161419,774161428,GL
774161429,774161438,HU
774161439,774161448,MK
774161449,774161458,PS
774161459,774161468,UZ
774161469,774161478,MS
-774161479,774161479,GB
-774161480,774161487,US
-774161488,774161488,GB
+774161479,774161488,US
774161489,774161498,MN
774161499,774161518,US
774161519,774161528,TW
774161529,774161538,DO
774161539,774161548,PY
774161549,774161558,EE
-774161559,774161559,SK
-774161560,774161566,BR
+774161559,774161566,BR
774161567,774161568,SK
774161569,774161578,LC
774161579,774161588,VE
@@ -8255,8 +7911,7 @@
774161675,774161675,CL
774161676,774161684,VA
774161685,774161694,GR
-774161695,774161695,AG
-774161696,774161704,GR
+774161695,774161704,AG
774161705,774161714,AM
774161715,774161724,GB
774161725,774161734,RO
@@ -8267,18 +7922,12 @@
774161775,774161784,SN
774161785,774161794,MA
774161795,774161804,BH
-774161805,774161805,JE
-774161806,774161813,US
-774161814,774161814,JE
+774161805,774161814,US
774161815,774161824,TV
-774161825,774161825,PF
-774161826,774161833,US
-774161834,774161834,PF
+774161825,774161834,US
774161835,774161844,SB
774161845,774161854,VU
-774161855,774161855,CW
-774161856,774161863,MX
-774161864,774161864,CW
+774161855,774161864,MX
774161865,774161865,AR
774161866,774161869,VA
774161870,774161874,ES
@@ -8302,8 +7951,7 @@
774162337,774162346,AZ
774162347,774162366,US
774162367,774162376,MX
-774162377,774162383,GB
-774162384,774162386,MX
+774162377,774162386,GB
774162387,774162387,ZW
774162388,774162395,DE
774162396,774162396,ZW
@@ -8313,29 +7961,17 @@
774162427,774162432,VA
774162433,774162442,GB
774162443,774162452,BA
-774162453,774162453,WS
-774162454,774162461,BO
-774162462,774162462,WS
+774162453,774162462,BO
774162463,774162472,SR
-774162473,774162473,PT
-774162474,774162481,IT
-774162482,774162482,PT
+774162473,774162482,IT
774162483,774162492,CK
-774162493,774162493,KI
-774162494,774162501,IT
-774162502,774162502,KI
+774162493,774162502,IT
774162503,774162512,NU
-774162513,774162513,TO
-774162514,774162521,BO
-774162522,774162522,TO
-774162523,774162523,CL
-774162524,774162531,DE
-774162532,774162532,CL
+774162513,774162522,BO
+774162523,774162532,DE
774162533,774162542,TF
774162543,774162552,GG
-774162553,774162553,LR
-774162554,774162561,MX
-774162562,774162562,LR
+774162553,774162562,MX
774162563,774162572,MQ
774162573,774162582,YT
774162583,774162592,NC
@@ -8369,11 +8005,9 @@
774162809,774162813,US
774162814,774162818,IT
774162819,774162823,KZ
-774162824,774162827,US
-774162828,774162828,MV
+774162824,774162828,US
774162829,774162833,PN
-774162834,774162835,SM
-774162836,774162838,PN
+774162834,774162838,SM
774162839,774162848,GB
774162849,774162853,AU
774162854,774162858,NL
@@ -8383,8 +8017,8 @@
774162894,774162903,MX
774162904,774162908,GB
774162909,774162913,AX
-774162914,774162918,FO
-774162919,774162923,SJ
+774162914,774162917,FO
+774162918,774162923,SJ
774162924,774162928,CC
774162929,774162933,NR
774162934,774162938,GS
@@ -8405,9 +8039,7 @@
774162988,774162991,MX
774162992,774162999,VA
774163000,774163000,PK
-774163001,774163004,BO
-774163005,774163005,NZ
-774163006,774163009,BO
+774163001,774163009,BO
774163010,774163010,VE
774163011,774163014,BO
774163015,774163071,VA
@@ -8482,7 +8114,9 @@
774504448,774520831,RU
774520832,774537215,BH
774537216,774553599,RU
-774553600,774569983,RO
+774553600,774558719,KZ
+774558720,774558975,RO
+774558976,774569983,KZ
774569984,774586367,GB
774586368,774602751,PS
774602752,774619135,GB
@@ -8558,549 +8192,144 @@
778304306,778304306,SI
778304307,778305535,AL
778305536,778371071,IR
-778371072,778436607,RU
-778436608,778469375,RO
-778469376,778473471,IR
-778473472,778476031,RO
+778371072,778403839,GB
+778403840,778436607,DE
+778436608,778461183,RO
+778461184,778463231,EE
+778463232,778467327,RO
+778467328,778473471,IR
+778473472,778475519,RO
+778475520,778475775,CH
+778475776,778476031,RO
778476032,778476287,MD
-778476288,778493951,RO
+778476288,778481919,RO
+778481920,778482943,GB
+778482944,778484735,RO
+778484736,778485247,IT
+778485248,778485759,RO
+778485760,778493951,GB
778493952,778495999,NL
-778496000,778498047,RO
-778498048,778500095,NL
-778500096,778502143,RO
+778496000,778497791,RO
+778497792,778500095,NL
+778500096,778500863,RO
+778500864,778500991,CN
+778500992,778501119,HK
+778501120,778502143,RO
778502144,778567679,GR
778567680,778633215,TR
778633216,778640127,FR
778640128,778640383,GB
-778640384,778666143,FR
-778666144,778666151,DE
-778666152,778666239,FR
-778666240,778666243,PL
-778666244,778666259,FR
+778640384,778666259,FR
778666260,778666263,ES
-778666264,778666299,FR
-778666300,778666303,FI
-778666304,778666383,FR
-778666384,778666387,IE
-778666388,778666479,FR
+778666264,778666479,FR
778666480,778666495,DE
-778666496,778666871,FR
-778666872,778666879,DE
+778666496,778666879,FR
778666880,778666943,GB
-778666944,778666959,FR
-778666960,778666967,IT
-778666968,778666975,GB
-778666976,778667007,FR
-778667008,778667039,GB
-778667040,778667071,IT
-778667072,778667131,FR
-778667132,778667135,BE
-778667136,778667287,FR
-778667288,778667291,NL
-778667292,778667295,DE
-778667296,778667327,FR
+778666944,778667327,FR
778667328,778667331,DE
778667332,778667391,FR
778667392,778667395,IT
-778667396,778667399,FR
-778667400,778667407,FI
-778667408,778667455,FR
-778667456,778667471,GB
-778667472,778667475,NL
-778667476,778667911,FR
-778667912,778667919,BE
-778667920,778667927,GB
-778667928,778667935,FR
-778667936,778667943,DE
-778667944,778667947,FR
-778667948,778667951,IT
-778667952,778668015,FR
-778668016,778668019,CZ
-778668020,778668063,FR
-778668064,778668095,GB
-778668096,778668543,FR
-778668544,778668559,BE
-778668560,778668575,FR
-778668576,778668591,NL
-778668592,778668623,FR
-778668624,778668627,ES
-778668628,778668715,FR
-778668716,778668719,IT
-778668720,778668863,FR
+778667396,778668623,FR
+778668624,778668627,NL
+778668628,778668631,ES
+778668632,778668863,FR
778668864,778668895,DE
-778668896,778668927,PT
-778668928,778669503,FR
-778669504,778669535,FI
-778669536,778669567,FR
-778669568,778669575,BE
-778669576,778669623,FR
-778669624,778669631,IT
-778669632,778669759,FR
-778669760,778669767,DE
-778669768,778670043,FR
-778670044,778670047,DE
-778670048,778670151,FR
-778670152,778670159,IT
-778670160,778670163,NL
-778670164,778670171,FR
-778670172,778670175,DE
-778670176,778670215,FR
-778670216,778670223,DE
-778670224,778670247,FR
-778670248,778670255,PL
-778670256,778670347,FR
-778670348,778670351,PL
-778670352,778670387,FR
-778670388,778670391,ES
-778670392,778670395,GB
-778670396,778670399,FR
-778670400,778670407,DE
-778670408,778670415,FR
-778670416,778670431,DE
-778670432,778670543,FR
-778670544,778670559,GB
-778670560,778670567,NL
-778670568,778670571,FR
-778670572,778670575,DE
-778670576,778670591,BE
-778670592,778670975,FR
+778668896,778669935,FR
+778669936,778669951,ES
+778669952,778669967,FR
+778669968,778669983,IE
+778669984,778670751,FR
+778670752,778670755,DE
+778670756,778670975,FR
778670976,778670976,DE
-778670977,778671103,FR
-778671104,778671119,CH
-778671120,778671127,GB
-778671128,778671199,FR
-778671200,778671203,ES
-778671204,778671247,FR
-778671248,778671263,GB
-778671264,778671279,PT
-778671280,778671331,FR
-778671332,778671335,IT
-778671336,778671647,FR
-778671648,778671679,ES
-778671680,778671743,GB
-778671744,778671887,FR
-778671888,778671903,NL
-778671904,778671907,FR
-778671908,778671911,FI
-778671912,778672111,FR
-778672112,778672115,IT
-778672116,778672543,FR
-778672544,778672559,DE
-778672560,778672803,FR
-778672804,778672807,FI
-778672808,778672815,FR
-778672816,778672823,CH
-778672824,778672887,FR
-778672888,778672891,PL
-778672892,778673079,FR
-778673080,778673087,GB
-778673088,778673119,FR
-778673120,778673151,DE
-778673152,778673187,FR
+778670977,778671201,FR
+778671202,778671202,ES
+778671203,778673187,FR
778673188,778673191,ES
778673192,778673207,FR
778673208,778673211,ES
-778673212,778673215,FR
-778673216,778673247,IE
-778673248,778673383,FR
+778673212,778673383,FR
778673384,778673387,IT
-778673388,778673791,FR
-778673792,778673807,BE
-778673808,778673883,FR
+778673388,778673751,FR
+778673752,778673759,DE
+778673760,778673883,FR
778673884,778673887,ES
-778673888,778674431,FR
-778674432,778674439,IT
-778674440,778674447,FR
-778674448,778674451,BE
-778674452,778674459,FR
-778674460,778674463,DE
-778674464,778674475,IT
-778674476,778674479,CZ
-778674480,778674487,DE
-778674488,778674627,FR
-778674628,778674631,PL
-778674632,778674635,NL
-778674636,778674783,FR
-778674784,778674799,IT
-778674800,778674847,FR
-778674848,778674863,IT
-778674864,778674911,FR
-778674912,778674927,PL
-778674928,778674943,ES
-778674944,778674983,FR
-778674984,778674991,ES
-778674992,778675023,FR
-778675024,778675039,BE
-778675040,778675219,FR
-778675220,778675223,DE
-778675224,778675363,FR
-778675364,778675367,DE
-778675368,778675439,FR
-778675440,778675443,NL
-778675444,778675451,FR
-778675452,778675455,IT
-778675456,778675491,FR
-778675492,778675495,ES
-778675496,778675503,FR
-778675504,778675511,IT
-778675512,778675535,FR
-778675536,778675543,ES
-778675544,778675555,FR
-778675556,778675559,PT
-778675560,778675567,DE
-778675568,778675627,FR
-778675628,778675631,ES
-778675632,778675759,FR
-778675760,778675763,GB
-778675764,778675767,PL
-778675768,778675795,FR
+778673888,778675795,FR
778675796,778675799,ES
-778675800,778675851,FR
-778675852,778675855,PT
-778675856,778675863,IT
-778675864,778675891,FR
+778675800,778675891,FR
778675892,778675895,ES
-778675896,778675903,GB
-778675904,778675967,FR
-778675968,778675999,DE
-778676000,778676063,FR
-778676064,778676095,CH
-778676096,778676111,NL
-778676112,778676123,FR
-778676124,778676127,PL
-778676128,778676215,FR
-778676216,778676219,CZ
-778676220,778676415,FR
-778676416,778676423,IE
-778676424,778676579,FR
-778676580,778676587,DE
-778676588,778676591,ES
-778676592,778676611,FR
-778676612,778676615,LT
-778676616,778676655,FR
-778676656,778676671,NL
-778676672,778676687,FR
-778676688,778676691,IT
-778676692,778676695,GB
-778676696,778676727,FR
-778676728,778676735,NL
-778676736,778676743,FR
-778676744,778676751,DE
-778676752,778676783,FR
-778676784,778676799,BE
-778676800,778676807,FR
-778676808,778676815,ES
-778676816,778676827,FR
-778676828,778676831,ES
-778676832,778676847,FR
-778676848,778676851,PL
-778676852,778676855,NL
-778676856,778677039,FR
-778677040,778677055,PL
-778677056,778677063,FR
-778677064,778677071,CH
+778675896,778677071,FR
778677072,778677075,NL
-778677076,778677343,FR
-778677344,778677375,PL
-778677376,778677439,FR
-778677440,778677455,FI
-778677456,778677471,FR
+778677076,778677471,FR
778677472,778677475,DE
778677476,778677503,FR
778677504,778677505,GB
778677506,778677506,ES
778677507,778677507,GB
778677508,778677759,ES
-778677760,778677855,FR
-778677856,778677859,ES
-778677860,778677875,FR
-778677876,778677879,IT
-778677880,778677943,FR
-778677944,778677947,PL
-778677948,778678019,FR
-778678020,778678023,NL
-778678024,778678027,PL
-778678028,778678031,FR
-778678032,778678035,GB
-778678036,778678119,FR
-778678120,778678127,IT
-778678128,778678175,FR
-778678176,778678191,GB
-778678192,778678807,FR
-778678808,778678815,ES
-778678816,778678839,FR
-778678840,778678847,PL
-778678848,778678871,FR
-778678872,778678875,PL
-778678876,778678991,FR
-778678992,778679007,GB
-778679008,778679023,FR
-778679024,778679031,NL
-778679032,778679087,FR
-778679088,778679095,PL
-778679096,778679167,FR
-778679168,778679199,GB
-778679200,778679212,FR
+778677760,778679212,FR
778679213,778679214,FI
778679215,778679491,FR
778679492,778679495,ES
-778679496,778679503,IT
-778679504,778679519,FR
-778679520,778679531,ES
-778679532,778679679,FR
-778679680,778679695,ES
-778679696,778679711,NL
-778679712,778679907,FR
-778679908,778679911,PT
-778679912,778679935,FR
-778679936,778679999,GB
-778680000,778680111,FR
-778680112,778680127,NL
-778680128,778680227,FR
+778679496,778680227,FR
778680228,778680231,IE
-778680232,778680447,FR
-778680448,778680455,GB
-778680456,778680471,FR
-778680472,778680475,GB
-778680476,778680559,FR
-778680560,778680575,IT
-778680576,778680683,FR
+778680232,778680683,FR
778680684,778680687,ES
-778680688,778681403,FR
-778681404,778681407,ES
-778681408,778681423,FR
-778681424,778681431,FI
-778681432,778681435,IT
-778681436,778681459,FR
-778681460,778681463,LT
-778681464,778681487,FR
+778680688,778681487,FR
778681488,778681495,NL
778681496,778681503,FR
778681504,778681507,DE
778681508,778681519,FR
778681520,778681523,ES
-778681524,778681547,FR
-778681548,778681551,ES
-778681552,778681787,FR
-778681788,778681791,ES
-778681792,778681823,FR
+778681524,778681823,FR
778681824,778681827,IT
-778681828,778681843,FR
-778681844,778681847,CH
-778681848,778681919,FR
-778681920,778681983,PT
-778681984,778682295,FR
-778682296,778682299,PL
-778682300,778682351,FR
-778682352,778682367,DE
-778682368,778690559,FR
-778690560,778690591,BE
-778690592,778690635,FR
-778690636,778690639,BE
-778690640,778690711,FR
-778690712,778690719,BE
-778690720,778690935,FR
-778690936,778690943,CH
-778690944,778690959,BE
-778690960,778691047,FR
-778691048,778691055,ES
-778691056,778691063,NL
-778691064,778691375,FR
-778691376,778691391,ES
-778691392,778691471,FR
-778691472,778691479,PL
-778691480,778691619,FR
+778681828,778682103,FR
+778682104,778682111,DE
+778682112,778688627,FR
+778688628,778688631,NL
+778688632,778691619,FR
778691620,778691623,IT
778691624,778691711,FR
778691712,778691727,GB
-778691728,778691743,FR
-778691744,778691751,DE
-778691752,778691775,FR
-778691776,778691791,IT
-778691792,778691971,FR
-778691972,778691975,CZ
-778691976,778691983,FR
-778691984,778691987,CH
-778691988,778691999,FR
-778692000,778692007,IT
-778692008,778692055,FR
-778692056,778692059,LT
-778692060,778692107,FR
-778692108,778692111,GB
-778692112,778692119,IT
-778692120,778692143,FR
-778692144,778692159,ES
-778692160,778692195,FR
-778692196,778692199,GB
-778692200,778692287,FR
-778692288,778692319,LT
-778692320,778692499,FR
+778691728,778692499,FR
778692500,778692503,ES
778692504,778692519,FR
778692520,778692527,NL
-778692528,778692535,FR
+778692528,778692535,BE
778692536,778692539,IT
778692540,778692619,FR
778692620,778692623,ES
-778692624,778692739,FR
-778692740,778692743,IE
+778692624,778692743,FR
778692744,778692747,ES
-778692748,778692751,FR
-778692752,778692767,DE
-778692768,778692799,FR
-778692800,778692807,LT
-778692808,778692815,FR
-778692816,778692823,PL
-778692824,778692847,FR
-778692848,778692863,DE
-778692864,778692879,FR
-778692880,778692883,NL
-778692884,778692887,ES
-778692888,778692927,FR
-778692928,778692943,PL
-778692944,778693075,FR
-778693076,778693079,DE
-778693080,778693095,FR
+778692748,778693095,FR
778693096,778693099,ES
-778693100,778693151,FR
-778693152,778693155,IT
-778693156,778693223,FR
-778693224,778693227,PL
-778693228,778693243,FR
-778693244,778693247,CZ
-778693248,778693403,FR
-778693404,778693407,PL
-778693408,778693427,FR
+778693100,778693427,FR
778693428,778693431,ES
-778693432,778693455,FR
-778693456,778693459,BE
-778693460,778693471,FR
-778693472,778693503,NL
-778693504,778693515,FR
-778693516,778693519,GB
-778693520,778693623,FR
-778693624,778693627,NL
-778693628,778693631,ES
-778693632,778693679,FR
-778693680,778693695,DE
-778693696,778693759,FR
+778693432,778693759,FR
778693760,778693763,ES
-778693764,778693767,PL
-778693768,778693791,FR
-778693792,778693799,NL
-778693800,778693887,FR
-778693888,778693891,ES
-778693892,778693971,FR
-778693972,778693975,CH
-778693976,778694171,FR
-778694172,778694175,CH
-778694176,778694295,FR
-778694296,778694299,IT
-778694300,778694519,FR
-778694520,778694527,CH
-778694528,778694563,FR
-778694564,778694567,GB
-778694568,778694575,NL
-778694576,778694647,FR
-778694648,778694655,DE
-778694656,778694679,FR
-778694680,778694687,GB
-778694688,778694975,FR
-778694976,778695007,CH
-778695008,778695039,ES
-778695040,778695103,FR
-778695104,778695135,FI
-778695136,778695167,DE
-778695168,778695303,FR
-778695304,778695307,DE
-778695308,778695323,FR
-778695324,778695327,PL
-778695328,778695339,FR
-778695340,778695343,ES
-778695344,778695347,DE
-778695348,778695375,FR
-778695376,778695391,FI
-778695392,778695471,FR
+778693764,778695471,FR
778695472,778695475,ES
-778695476,778695487,FR
-778695488,778695503,BE
-778695504,778695663,FR
-778695664,778695679,PL
-778695680,778695711,FR
-778695712,778695743,GB
-778695744,778695759,FR
-778695760,778695767,NL
-778695768,778695823,FR
-778695824,778695839,FI
+778695476,778695839,FR
778695840,778695871,DE
-778695872,778695927,FR
-778695928,778695935,IT
-778695936,778696199,FR
-778696200,778696207,NL
-778696208,778696211,PL
-778696212,778696255,FR
-778696256,778696263,IE
-778696264,778696383,FR
-778696384,778696415,PT
-778696416,778696487,FR
-778696488,778696495,IT
+778695872,778696439,FR
+778696440,778696447,IT
+778696448,778696495,FR
778696496,778696499,ES
-778696500,778696559,FR
-778696560,778696567,PL
-778696568,778696591,FR
-778696592,778696607,DE
-778696608,778696639,NL
-778696640,778696643,ES
-778696644,778696647,FR
-778696648,778696655,PL
-778696656,778696987,FR
-778696988,778696991,NL
+778696500,778696991,FR
778696992,778696995,ES
778696996,778697067,FR
778697068,778697071,ES
-778697072,778697119,FR
-778697120,778697151,IT
-778697152,778697175,FR
+778697072,778697175,FR
778697176,778697179,ES
-778697180,778697183,FR
-778697184,778697215,PT
-778697216,778697247,FR
-778697248,778697255,DE
-778697256,778697347,FR
-778697348,778697351,PL
-778697352,778697567,FR
-778697568,778697599,GB
-778697600,778697663,FR
-778697664,778697667,IE
-778697668,778697671,FR
-778697672,778697675,GB
-778697676,778697679,FR
-778697680,778697683,DE
-778697684,778697727,FR
-778697728,778697791,DE
-778697792,778697807,FR
-778697808,778697815,IT
+778697180,778697815,FR
778697816,778697819,ES
-778697820,778697847,FR
-778697848,778697851,DE
-778697852,778697955,FR
+778697820,778697955,FR
778697956,778697959,ES
-778697960,778698399,FR
-778698400,778698431,BE
-778698432,778698447,FR
+778697960,778698447,FR
778698448,778698451,ES
-778698452,778698455,FR
-778698456,778698463,PL
-778698464,778698467,IT
-778698468,778698623,FR
-778698624,778698627,FI
-778698628,778698631,FR
-778698632,778698635,GB
-778698636,778698643,FR
+778698452,778698643,FR
778698644,778698647,ES
-778698648,778698667,FR
-778698668,778698671,GB
-778698672,778698703,FR
+778698648,778698703,FR
778698704,778698707,ES
778698708,778698751,FR
778698752,778764287,TR
@@ -9204,7 +8433,23 @@
782254080,782270463,UA
782270464,782306303,RU
782306304,782307327,NL
-782307328,782319615,RU
+782307328,782317567,RU
+782317568,782317695,IN
+782317696,782317823,CN
+782317824,782317951,TR
+782317952,782318079,JP
+782318080,782318207,SA
+782318208,782318335,IL
+782318336,782318463,AU
+782318464,782318591,RU
+782318592,782318719,ES
+782318720,782318847,RU
+782318848,782318975,IS
+782318976,782319103,RU
+782319104,782319231,KZ
+782319232,782319359,RU
+782319360,782319487,MD
+782319488,782319615,RU
782319616,782335999,ME
782336000,782352383,RU
782352384,782368767,SY
@@ -9233,11 +8478,15 @@
782663680,782667519,NL
782667520,782667775,LU
782667776,782671871,NL
-782671872,782672871,LT
+782671872,782672783,LT
+782672784,782672791,CH
+782672792,782672871,LT
782672872,782672879,IL
-782672880,782672927,LT
-782672928,782672959,US
-782672960,782675967,LT
+782672880,782672991,LT
+782672992,782673023,CR
+782673024,782673927,LT
+782673928,782673935,RU
+782673936,782675967,LT
782675968,782676735,NL
782676736,782676991,DE
782676992,782680063,NL
@@ -9251,8 +8500,10 @@
783040512,783048703,UA
783048704,783056895,RU
783056896,783065087,UA
-783065088,783073279,RU
-783073280,783089663,UA
+783065088,783077887,RU
+783077888,783078143,UA
+783078144,783081471,RU
+783081472,783089663,UA
783089664,783106047,RU
783106048,783134719,UA
783134720,783138815,RU
@@ -9360,7 +8611,7 @@
783765504,783767551,RU
783767552,783769599,IL
783769600,783771647,DE
-783771648,783773695,FR
+783771648,783773695,CH
783773696,783775743,ES
783775744,783777791,AL
783777792,783779839,RU
@@ -9388,7 +8639,19 @@
784039936,784072703,PL
784072704,784105471,RU
784105472,784138239,HR
-784138240,784169215,DE
+784138240,784155487,DE
+784155488,784155491,NL
+784155492,784155495,BE
+784155496,784155503,AT
+784155504,784155511,GB
+784155512,784155519,CZ
+784155520,784155615,DE
+784155616,784155619,NL
+784155620,784155623,BE
+784155624,784155631,AT
+784155632,784155639,GB
+784155640,784155640,CZ
+784155641,784169215,DE
784169216,784169231,AL
784169232,784169247,BG
784169248,784169263,CZ
@@ -9399,7 +8662,7 @@
784169472,784171007,DE
784171008,784203775,PT
784203776,784236543,GR
-784236544,784269311,RO
+784236544,784269311,GB
784269312,784302079,BY
784302080,784334847,RU
784334848,784465919,FR
@@ -9432,7 +8695,9 @@
786567168,786569215,CZ
786569216,786571263,NO
786571264,786575359,ES
-786575360,786577407,GB
+786575360,786576098,GB
+786576099,786576099,SE
+786576100,786577407,GB
786577408,786579455,NL
786579456,786581503,RU
786581504,786583551,GB
@@ -9541,13 +8806,9 @@
786919880,786919887,IT
786919888,786920191,GB
786920192,786920199,IT
-786920200,786920303,GB
-786920304,786920311,IT
-786920312,786920343,GB
+786920200,786920343,GB
786920344,786920351,IT
-786920352,786920631,GB
-786920632,786920639,IT
-786920640,786920839,GB
+786920352,786920839,GB
786920840,786920847,IT
786920848,786920855,GB
786920856,786920863,IT
@@ -9595,16 +8856,20 @@
787038976,787039231,FR
787039232,787039247,AR
787039248,787039263,PE
-787039264,787054591,GB
+787039264,787039279,VE
+787039280,787054591,GB
787054592,787070975,IT
787070976,787087359,RU
787087360,787095551,TR
787095680,787095711,CH
787096576,787097855,CH
+787098112,787098623,CH
787099392,787100671,CH
787101696,787102719,CH
787103744,787111935,HR
-787111936,787120127,CZ
+787111936,787116287,CZ
+787116288,787116543,US
+787116544,787120127,CZ
787120128,787128319,ES
787128320,787136511,CZ
787136512,787152895,IT
@@ -9658,12 +8923,11 @@
787383040,787383295,MF
787383296,787389951,GP
787389952,787390207,MQ
-787390208,787390463,GP
-787390464,787394559,FR
+787390208,787394559,GP
787394560,787394815,GF
-787394816,787396095,FR
+787394816,787396095,GP
787396096,787396351,GF
-787396352,787398399,FR
+787396352,787398399,GP
787398400,787398655,MQ
787398656,787415039,PL
787415040,787431423,BA
@@ -9692,15 +8956,26 @@
787707904,787709951,DE
787709952,787711487,IE
787711488,787711999,GB
-787712000,787713023,NL
+787712000,787712255,MT
+787712256,787712511,MA
+787712512,787712767,DE
+787712768,787713023,IT
787713024,787713279,LV
-787713280,787713535,NL
+787713280,787713535,SE
787713536,787713791,BG
-787713792,787718143,NL
-787718144,787724287,RU
-787724288,787726335,UA
-787726336,787742719,RU
-787742720,787759103,NL
+787713792,787714047,GR
+787714048,787714303,IM
+787714304,787714559,SY
+787714560,787714815,LB
+787714816,787715071,QA
+787715072,787715327,OM
+787715328,787715583,YE
+787715584,787715839,BH
+787715840,787718143,NL
+787718144,787742719,RU
+787742720,787750911,NL
+787750912,787755007,GB
+787755008,787759103,NL
787759104,787767295,PS
787767296,787775487,NL
787775488,787808255,DE
@@ -9739,7 +9014,9 @@
788070400,788078591,RU
788078592,788086783,NL
788086784,788094975,BG
-788094976,788103167,IR
+788094976,788095231,IR
+788095232,788095487,DE
+788095488,788103167,IR
788103168,788111359,HU
788111360,788119551,LT
788119552,788127743,GB
@@ -9866,7 +9143,9 @@
792723456,793247743,DE
793247744,793313279,NZ
793313280,793378815,DE
-793378816,795231487,CA
+793378816,794558463,CA
+794558464,794951679,CN
+794951680,795231487,CA
795231488,795231743,US
795231744,795233023,CA
795233024,795233279,US
@@ -9947,7 +9226,7 @@
831519744,831520767,IN
831520768,832045055,PH
832045056,832307199,CN
-832307200,832308223,MN
+832307456,832307711,MN
832308224,832311295,JP
832311296,832312319,AU
832313344,832315391,AU
@@ -10025,7 +9304,13 @@
839112704,839348223,US
839348224,839348479,DE
839348480,839348735,AT
-839348736,839352319,US
+839348736,839348991,GB
+839348992,839349247,AT
+839349248,839350271,DE
+839350272,839351295,NL
+839351296,839351807,US
+839351808,839352063,DE
+839352064,839352319,US
839352320,839357439,NL
839357440,839358463,FR
839358464,839359487,GB
@@ -10045,7 +9330,9 @@
840838509,840838509,UA
840838510,840838510,US
840838511,840838512,UA
-840838513,840898047,US
+840838513,840865791,US
+840865792,840866047,CA
+840866048,840898047,US
840898048,840898559,CA
840898560,840909055,US
840909056,840909311,CA
@@ -10072,8 +9359,22 @@
846627072,850506751,US
850506752,850507007,CA
850507008,855638015,US
-855638016,872415231,GB
-872415232,889192447,US
+855638016,860905167,GB
+860905168,860905171,FR
+860905172,872415231,GB
+872415232,873463807,US
+873463808,873594879,IE
+873594880,874250239,US
+874250240,874315775,DE
+874315776,876609535,US
+876609536,876642303,AU
+876642304,876871679,US
+876871680,877002751,JP
+877002752,877264895,US
+877264896,877330431,SG
+877330432,878510079,US
+878510080,878518271,DE
+878518272,889192447,US
889192448,905969663,DE
905969664,910163967,US
910163968,910197237,JP
@@ -10089,7 +9390,16 @@
912064512,912130047,DE
912130048,912195583,BR
912195584,912261119,JP
-912261120,916979711,US
+912261120,915800063,US
+915800064,915865599,JP
+915865600,915898367,US
+915898368,915931135,SG
+915931136,916029439,US
+916029440,916062207,AU
+916062208,916156392,IE
+916156393,916156393,GB
+916156394,916193279,IE
+916193280,916979711,US
916979712,917045247,JP
917045248,917110783,SG
917110784,917241855,IE
@@ -10111,17 +9421,63 @@
920518656,920649727,CN
920649728,920911871,US
920911872,921042943,IE
-921042944,921174015,US
-921174016,921255935,BR
-921255936,921567231,US
+921042944,921141247,US
+921141248,921149439,IE
+921149440,921157631,US
+921157632,921161727,DE
+921161728,921165823,CN
+921165824,921167871,JP
+921167872,921169919,US
+921169920,921170943,SG
+921170944,921172991,US
+921172992,921173247,AU
+921173248,921173503,BR
+921173504,921174015,US
+921174016,921305087,BR
+921305088,921567231,US
921567232,921632767,JP
-921632768,922091519,US
+921632768,921633791,US
+921633792,921634815,DE
+921634816,921640959,US
+921640960,921643007,IE
+921643008,921646079,US
+921646080,921646591,JP
+921646592,921649151,DE
+921649152,921657343,US
+921657344,921657599,JP
+921657600,921658111,US
+921658112,921658879,IE
+921658880,921747455,US
+921747456,921748479,AU
+921748480,921748735,US
+921748736,921748991,IE
+921748992,921749247,US
+921749248,921749503,SG
+921749504,921749759,JP
+921749760,921750271,US
+921750272,921751551,AU
+921751552,921754623,US
+921754624,921755647,IE
+921755648,921755903,US
+921755904,921756159,JP
+921756160,921756671,SG
+921756672,921758719,US
+921758720,921759999,DE
+921760000,921760767,US
+921760768,921761791,BR
+921761792,922091519,US
922091520,922189311,IE
922189312,922189567,US
922189568,922205775,IE
922205776,922205776,DE
922205777,922222591,IE
-922222592,922419199,JP
+922222592,922289836,JP
+922289837,922289837,DE
+922289838,922289844,JP
+922289845,922289845,DE
+922289846,922289852,JP
+922289853,922289853,DE
+922289854,922419199,JP
922419200,922427633,SG
922427634,922427634,US
922427635,922427703,SG
@@ -10315,7 +9671,9 @@
962281472,962285567,DO
962285568,962359295,BE
962359296,962363391,IN
-962363392,962392063,BE
+962363392,962364416,BE
+962364417,962364417,ID
+962364418,962392063,BE
962392064,962396159,PK
962396160,962408447,BE
962408448,962412543,TH
@@ -10696,7 +10054,11 @@
1040318464,1040383999,CH
1040384000,1040390853,SA
1040390854,1040390854,ZA
-1040390855,1040400383,SA
+1040390855,1040392191,SA
+1040392192,1040392319,GB
+1040392320,1040392375,SA
+1040392376,1040392383,GB
+1040392384,1040400383,SA
1040400384,1040416767,GB
1040416768,1040424959,SE
1040424960,1040433151,PL
@@ -10704,6 +10066,7 @@
1040449536,1040457727,FR
1040457728,1040465919,ME
1040467072,1040467087,FR
+1040473344,1040473599,DE
1040474112,1040482303,CZ
1040482304,1040515071,BE
1040515072,1040547839,GB
@@ -10745,117 +10108,9 @@
1041563648,1041596415,PL
1041596416,1041629183,NL
1041629184,1041694719,ES
-1041694720,1041700959,GB
-1041700960,1041700975,FR
-1041700976,1041701783,GB
-1041701784,1041701791,FR
-1041701792,1041701823,GB
-1041701824,1041701831,FR
-1041701832,1041702399,GB
-1041702400,1041702655,FR
-1041702656,1041703479,GB
-1041703480,1041703487,FR
-1041703488,1041703631,GB
-1041703632,1041703639,FR
-1041703640,1041703679,GB
-1041703680,1041703935,FR
-1041703936,1041704415,GB
-1041704416,1041704423,FR
-1041704424,1041706551,GB
-1041706552,1041706559,FR
-1041706560,1041706751,GB
-1041706752,1041707007,FR
-1041707008,1041708543,GB
-1041708544,1041708799,FR
-1041708800,1041709951,GB
-1041709952,1041709959,FR
-1041709960,1041710671,GB
-1041710672,1041710687,FR
-1041710688,1041711359,GB
-1041711360,1041711615,FR
-1041711616,1041711943,GB
-1041711944,1041711951,FR
-1041711952,1041712631,GB
-1041712632,1041712639,FR
-1041712640,1041715071,GB
-1041715072,1041715079,FR
-1041715080,1041715567,GB
-1041715568,1041715583,FR
-1041715584,1041716039,GB
-1041716040,1041716047,FR
-1041716048,1041716223,GB
-1041716224,1041716231,FR
-1041716232,1041716455,GB
-1041716456,1041716463,FR
-1041716464,1041718015,GB
-1041718016,1041718271,FR
-1041718272,1041718527,GB
-1041718528,1041718783,FR
-1041718784,1041719223,GB
-1041719224,1041719224,FR
-1041719225,1041719227,GB
-1041719228,1041719228,FR
-1041719229,1041719407,GB
-1041719408,1041719423,FR
-1041719424,1041721391,GB
-1041721392,1041721407,FR
-1041721408,1041721599,GB
-1041721600,1041721727,FR
-1041721728,1041721759,GB
-1041721760,1041721775,FR
-1041721776,1041722951,GB
-1041722952,1041722959,FR
-1041722960,1041723263,GB
-1041723264,1041723279,FR
-1041723280,1041723775,GB
-1041723776,1041723839,FR
-1041723840,1041729559,GB
-1041729560,1041729561,FR
-1041729562,1041729564,GB
-1041729565,1041729566,FR
-1041729567,1041729935,GB
-1041729936,1041729951,FR
-1041729952,1041731839,GB
-1041731840,1041732095,FR
-1041732096,1041734911,GB
-1041734912,1041735167,FR
-1041735168,1041736381,GB
-1041736382,1041736382,FR
-1041736383,1041736447,GB
-1041736448,1041736703,FR
-1041736704,1041737583,GB
-1041737584,1041737591,FR
-1041737592,1041737839,GB
-1041737840,1041737855,FR
-1041737856,1041739031,GB
-1041739032,1041739039,FR
-1041739040,1041740279,GB
-1041740280,1041740287,FR
-1041740288,1041741055,GB
-1041741056,1041741311,FR
-1041741312,1041742415,GB
-1041742416,1041742423,FR
-1041742424,1041743103,GB
-1041743104,1041743111,FR
-1041743112,1041743247,GB
-1041743248,1041743255,FR
-1041743256,1041745783,GB
-1041745784,1041745791,FR
-1041745792,1041746903,GB
-1041746904,1041746919,FR
-1041746920,1041749639,GB
-1041749640,1041749643,FR
-1041749644,1041749659,GB
-1041749660,1041749663,FR
-1041749664,1041753231,GB
-1041753232,1041753239,FR
-1041753240,1041756839,GB
-1041756840,1041756855,FR
-1041756856,1041757615,GB
-1041757616,1041757623,FR
-1041757624,1041758175,GB
-1041758176,1041758183,FR
-1041758184,1041760255,GB
+1041694720,1041748991,FR
+1041748992,1041749247,GB
+1041749248,1041760255,FR
1041760256,1041768447,DE
1041768448,1041776639,NO
1041776640,1041784831,CZ
@@ -10939,9 +10194,7 @@
1043595264,1043661567,DE
1043661568,1043661823,GB
1043661824,1043857407,DE
-1043857408,1043897343,GB
-1043897344,1043897855,KE
-1043897856,1043919442,GB
+1043857408,1043919442,GB
1043919443,1043919443,SS
1043919444,1043921919,GB
1043921920,1043922943,IL
@@ -10974,7 +10227,9 @@
1044414464,1044447231,GB
1044447232,1044453233,SE
1044453234,1044453234,NO
-1044453235,1044455423,SE
+1044453235,1044455168,SE
+1044455169,1044455169,NO
+1044455170,1044455423,SE
1044455424,1044463615,EE
1044463616,1044479999,SE
1044480000,1044488191,CH
@@ -10983,7 +10238,9 @@
1044512768,1044578303,DK
1044578304,1044578623,GB
1044578624,1044578639,DE
-1044578640,1044636671,GB
+1044578640,1044589055,GB
+1044589056,1044589311,DE
+1044589312,1044636671,GB
1044636672,1044637695,DE
1044637696,1044638463,GB
1044638464,1044638719,DE
@@ -11037,7 +10294,9 @@
1044936116,1044936119,BE
1044936120,1044936487,GB
1044936488,1044936495,BE
-1044936496,1044937247,GB
+1044936496,1044936735,GB
+1044936736,1044936743,BE
+1044936744,1044937247,GB
1044937248,1044937255,BE
1044937256,1044938503,GB
1044938504,1044938511,LU
@@ -11048,7 +10307,11 @@
1044971520,1044979711,FR
1044979712,1044987903,FI
1044987904,1045004287,BG
-1045004288,1045020671,GB
+1045004288,1045018623,GB
+1045018624,1045018751,ES
+1045018752,1045018787,GB
+1045018788,1045018799,ES
+1045018800,1045020671,GB
1045020672,1045037055,NO
1045037056,1045135359,GR
1045135360,1045152603,DE
@@ -11057,9 +10320,7 @@
1045154630,1045154630,SG
1045154631,1045158306,DE
1045158307,1045158307,SG
-1045158308,1045163509,DE
-1045163510,1045163511,SG
-1045163512,1045168127,DE
+1045158308,1045168127,DE
1045168128,1045233663,RU
1045233664,1045241855,GB
1045241856,1045250047,IT
@@ -11090,7 +10351,9 @@
1045708800,1045716991,LB
1045716992,1045725183,RU
1045725184,1045733375,CZ
-1045733376,1045748319,GB
+1045733376,1045745420,GB
+1045745421,1045745421,SE
+1045745422,1045748319,GB
1045748320,1045748351,SE
1045748352,1045749759,GB
1045749760,1045753855,SI
@@ -11201,7 +10464,9 @@
1046498688,1046498695,DE
1046498696,1046498799,GB
1046498800,1046498807,DE
-1046498808,1046503095,GB
+1046498808,1046502106,GB
+1046502107,1046502107,DE
+1046502108,1046503095,GB
1046503096,1046503103,DE
1046503104,1046504447,GB
1046504448,1046508543,DE
@@ -11215,7 +10480,9 @@
1046518784,1046519807,DE
1046519808,1046524215,GB
1046524216,1046524223,DE
-1046524224,1046525351,GB
+1046524224,1046524615,GB
+1046524616,1046524623,DE
+1046524624,1046525351,GB
1046525352,1046525359,DE
1046525360,1046525439,GB
1046525440,1046525695,DE
@@ -11281,7 +10548,9 @@
1047314432,1047322623,SE
1047322624,1047330815,IT
1047330816,1047339007,RU
-1047339008,1047342879,SE
+1047339008,1047340863,SE
+1047340864,1047340927,NO
+1047340928,1047342879,SE
1047342880,1047342887,FI
1047342888,1047347199,SE
1047347200,1047363583,DE
@@ -11307,7 +10576,12 @@
1047642112,1047658495,DE
1047658496,1047724031,EG
1047728128,1047732223,SE
+1047740544,1047740671,DE
+1047781856,1047781871,DE
+1047782690,1047782690,GB
1047787520,1047787775,ES
+1047788288,1047788543,NL
+1047788544,1047789055,GB
1047789568,1047822335,AT
1047822336,1047838719,DE
1047838720,1047846911,DK
@@ -11330,7 +10604,6 @@
1048193024,1048195071,RO
1048195072,1048197119,RU
1048197120,1048201215,UA
-1048201216,1048203263,PL
1048203264,1048205311,DE
1048205312,1048209407,RU
1048209408,1048211455,UA
@@ -11413,7 +10686,9 @@
1049477120,1049493503,PL
1049493504,1049559039,FI
1049559040,1049698303,DE
-1049698304,1049706495,NL
+1049698304,1049700351,NL
+1049700352,1049702399,DE
+1049702400,1049706495,NL
1049706496,1049709823,GB
1049709824,1049710079,NL
1049710080,1049710335,GB
@@ -11551,7 +10826,7 @@
1052170240,1052172287,SE
1052172288,1052174335,PL
1052174336,1052176383,CZ
-1052176384,1052178431,NL
+1052176384,1052178431,GB
1052178432,1052180479,DK
1052180480,1052213247,RU
1052213248,1052246015,FI
@@ -11629,17 +10904,16 @@
1053312872,1053312887,DK
1053312912,1053312927,DK
1053313280,1053313535,GB
-1053316688,1053316695,GB
1053318912,1053318943,FI
1053320224,1053320239,DE
1053325824,1053326335,DE
1053326504,1053326527,BE
1053326544,1053326551,BE
1053329440,1053329471,ES
+1053329516,1053329535,ES
1053332992,1053334015,BE
1053335552,1053336575,ZA
1053339904,1053340159,AT
-1053345280,1053345375,PK
1053349376,1053349631,NL
1053349952,1053349967,IE
1053353408,1053353423,GB
@@ -11695,6 +10969,7 @@
1053837568,1053837823,GB
1053837824,1053838335,FK
1053838336,1053838591,DE
+1053839360,1053840383,DE
1053840400,1053840415,DE
1053840448,1053840511,DE
1053843200,1053843231,DK
@@ -11761,7 +11036,9 @@
1053927160,1053927167,FI
1053927168,1053933567,SE
1053933568,1053949951,CZ
-1053949952,1054015487,FR
+1053949952,1053968188,FR
+1053968189,1053968189,PT
+1053968190,1054015487,FR
1054015488,1054089215,IT
1054089216,1054097407,GE
1054097408,1054105599,NL
@@ -11903,7 +11180,9 @@
1056571392,1056669695,NL
1056669696,1056702463,MA
1056702464,1056874751,GB
-1056874752,1056875007,IE
+1056874752,1056874943,IE
+1056874944,1056874975,GB
+1056874976,1056875007,IE
1056875008,1056875663,GB
1056875664,1056875671,IE
1056875672,1056964607,GB
@@ -11945,11 +11224,13 @@
1063053760,1063053823,CA
1063053824,1063057432,US
1063057433,1063057433,CA
-1063057434,1063305727,US
-1063305728,1063305983,CA
-1063305984,1063568895,US
+1063057434,1063390207,US
+1063390208,1063390463,PR
+1063390464,1063568895,US
1063568896,1063569151,TZ
-1063569152,1063748607,US
+1063569152,1063747839,US
+1063747840,1063748095,UG
+1063748096,1063748607,US
1063748608,1063749119,GH
1063749120,1063749631,US
1063749632,1063749887,LR
@@ -11996,15 +11277,25 @@
1065873408,1065877503,PR
1065877504,1065906175,US
1065906176,1065908223,KY
-1065908224,1066311679,US
+1065908224,1066254975,US
+1066254976,1066255103,GB
+1066255104,1066311679,US
1066311680,1066315775,CA
1066315776,1066352639,US
1066352640,1066355711,JM
1066355712,1066355967,BB
1066355968,1066369023,JM
-1066369024,1067238143,US
+1066369024,1066830303,US
+1066830304,1066830311,SG
+1066830312,1066831183,US
+1066831184,1066831191,JP
+1066831192,1066831335,US
+1066831336,1066831343,JP
+1066831344,1067238143,US
1067238144,1067238399,JP
-1067238400,1067481855,US
+1067238400,1067294719,US
+1067294720,1067294975,CA
+1067294976,1067481855,US
1067481856,1067482111,CA
1067482112,1067532287,US
1067532288,1067532799,HN
@@ -12211,11 +11502,17 @@
1071954224,1071954231,GB
1071954232,1071954303,US
1071954304,1071954319,GB
-1071954320,1071954391,US
+1071954320,1071954327,US
+1071954328,1071954335,ES
+1071954336,1071954391,US
1071954392,1071954399,GB
1071954400,1071998999,US
1071999000,1071999003,GB
-1071999004,1072157631,US
+1071999004,1072099327,US
+1072099328,1072099583,DE
+1072099584,1072157503,US
+1072157504,1072157511,GR
+1072157512,1072157631,US
1072157632,1072157663,DE
1072157664,1072228863,US
1072228864,1072229375,CA
@@ -12269,7 +11566,9 @@
1072941056,1072942079,CA
1072942080,1072943103,US
1072943104,1072945151,CA
-1072945152,1073022975,US
+1072945152,1072953599,US
+1072953600,1072953607,IE
+1072953608,1073022975,US
1073022976,1073025791,HN
1073025792,1073026047,NI
1073026048,1073026303,US
@@ -12437,10 +11736,7 @@
1075147267,1075147267,PK
1075147268,1075265535,US
1075265536,1075269631,KR
-1075269632,1075384319,US
-1075385600,1075386111,US
-1075387136,1075387391,US
-1075388416,1075421183,US
+1075269632,1075421183,US
1075421184,1075429375,CA
1075429376,1075478527,US
1075478528,1075494911,CA
@@ -12463,23 +11759,19 @@
1075871744,1075970047,US
1075970048,1075972095,CA
1075972096,1075972351,GB
-1075972352,1075973887,US
-1075973888,1075974143,CA
-1075974144,1075975167,US
+1075972352,1075975167,US
1075975168,1075975679,CA
1075975680,1075976191,US
1075976192,1075976447,CA
1075976448,1075977055,US
1075977056,1075977071,CA
-1075977072,1075977983,US
-1075977984,1075978239,CA
-1075978240,1075982335,US
+1075977072,1075982335,US
1075982336,1075982591,CA
1075982592,1075982847,US
1075982848,1075983103,CA
1075983104,1075983359,US
-1075983360,1075984383,CA
-1075984384,1075985919,US
+1075983360,1075984127,CA
+1075984128,1075985919,US
1075985920,1075986687,CA
1075986688,1075986943,US
1075986944,1075987199,CA
@@ -12501,7 +11793,9 @@
1075995648,1075996671,CA
1075996672,1075997183,US
1075997184,1075997439,CA
-1075997440,1075998207,US
+1075997440,1075998119,US
+1075998120,1075998127,CA
+1075998128,1075998207,US
1075998208,1075998271,CA
1075998272,1075998463,US
1075998464,1075999231,CA
@@ -12531,7 +11825,9 @@
1076009728,1076009983,CA
1076009984,1076026623,US
1076026624,1076026879,CA
-1076026880,1076028159,US
+1076026880,1076027019,US
+1076027020,1076027023,CA
+1076027024,1076028159,US
1076028160,1076028415,CA
1076028416,1076028927,US
1076028928,1076029183,BZ
@@ -12676,8 +11972,7 @@
1078312261,1078312261,GB
1078312262,1078349311,US
1078349312,1078349823,PH
-1078349824,1078413311,US
-1078415360,1078429695,US
+1078349824,1078429695,US
1078429696,1078429951,GR
1078429952,1078438399,US
1078438400,1078438655,CA
@@ -12773,8 +12068,8 @@
1079403264,1079403519,US
1079403520,1079403775,CA
1079403776,1079405567,US
-1079405568,1079406079,CA
-1079406080,1079408895,US
+1079405568,1079406111,CA
+1079406112,1079408895,US
1079408896,1079409407,PK
1079409408,1079409919,US
1079409920,1079410175,CA
@@ -12800,7 +12095,9 @@
1079433216,1079435263,CR
1079435264,1079435775,CO
1079435776,1079436031,CA
-1079436032,1079459839,US
+1079436032,1079440191,US
+1079440192,1079440207,CA
+1079440208,1079459839,US
1079459840,1079508991,CA
1079508992,1079566847,US
1079566848,1079567103,GB
@@ -12812,7 +12109,9 @@
1079623680,1079627775,PR
1079627776,1079664639,US
1079664640,1079668735,CA
-1079668736,1079861247,US
+1079668736,1079669247,US
+1079669248,1079669759,NL
+1079669760,1079861247,US
1079861248,1079865343,CA
1079865344,1079962879,US
1079962880,1079963135,GB
@@ -12845,8 +12144,9 @@
1080621056,1080621567,AU
1080621568,1080622079,US
1080622080,1080622335,AU
-1080622336,1080954879,US
+1080622336,1080956773,US
1080956774,1080956774,GB
+1080956775,1080957951,US
1080957952,1080958207,DE
1080958208,1080958463,BH
1080958464,1080958719,DE
@@ -12862,7 +12162,7 @@
1080969728,1080975039,DE
1080975040,1080975103,BJ
1080975104,1080983551,DE
-1080986624,1080987647,US
+1080983552,1080987647,US
1080987648,1080987903,IT
1080987904,1080988671,DE
1080988672,1080989951,US
@@ -12888,8 +12188,8 @@
1081379840,1081385215,US
1081385216,1081385471,PA
1081385472,1081387519,US
-1081387520,1081388031,PA
-1081388032,1081391103,US
+1081387520,1081387775,PA
+1081387776,1081391103,US
1081391104,1081393151,PA
1081393152,1081393407,US
1081393408,1081393663,CL
@@ -12937,6 +12237,7 @@
1082318848,1082351359,US
1082351360,1082351487,SA
1082351488,1082679807,US
+1082680320,1082683391,US
1082683392,1082687487,CA
1082687488,1082786591,US
1082786592,1082786623,HK
@@ -12949,9 +12250,7 @@
1082819840,1082820351,IN
1082820352,1082945535,US
1082945536,1082949631,CA
-1082949632,1082952703,US
-1082952704,1082952959,CA
-1082952960,1082982399,US
+1082966016,1082982399,US
1082982400,1083015167,CA
1083015168,1083396095,US
1083396096,1083400191,BM
@@ -12985,8 +12284,7 @@
1085997056,1086013439,CA
1086013440,1086042111,US
1086042112,1086046207,CA
-1086046208,1086050815,US
-1086054400,1086309887,US
+1086046208,1086309887,US
1086309888,1086310143,AU
1086310144,1086317823,US
1086317824,1086318079,CA
@@ -13034,7 +12332,9 @@
1087467292,1087467295,BR
1087467296,1087496703,US
1087496704,1087496959,CA
-1087496960,1087508161,US
+1087496960,1087501567,US
+1087501568,1087501695,HK
+1087501696,1087508161,US
1087508162,1087508162,JP
1087508163,1087510271,US
1087510272,1087510463,CA
@@ -13077,11 +12377,7 @@
1087735648,1087746079,US
1087746080,1087746083,HK
1087746084,1087758335,US
-1087758336,1087762175,PR
-1087762176,1087762431,US
-1087762432,1087763967,PR
-1087763968,1087764223,US
-1087764224,1087766527,PR
+1087758336,1087766527,PR
1087766528,1087798943,US
1087798944,1087798975,CA
1087798976,1087799295,US
@@ -13114,9 +12410,7 @@
1089053184,1089053439,BR
1089053440,1089054343,US
1089054344,1089054344,GB
-1089054345,1089058303,US
-1089058304,1089058559,TW
-1089058560,1089167359,US
+1089054345,1089167359,US
1089167360,1089171455,CA
1089171456,1089183231,US
1089183232,1089183487,GB
@@ -13162,9 +12456,7 @@
1089526784,1089527039,VE
1089527040,1089579519,US
1089579520,1089580031,VE
-1089580032,1089598975,US
-1089598976,1089599231,HK
-1089599232,1089824767,US
+1089580032,1089824767,US
1089824768,1089825023,VI
1089825024,1089881599,US
1089881600,1089882111,GB
@@ -13183,9 +12475,9 @@
1090355200,1090363391,CA
1090363392,1090387967,US
1090387968,1090396159,CA
-1090396160,1090424831,US
-1090424832,1090428927,CA
-1090428928,1090445311,US
+1090396160,1090427391,US
+1090427392,1090427647,CA
+1090427648,1090445311,US
1090445312,1090453503,CA
1090453504,1091798783,US
1091798784,1091799039,CN
@@ -13215,8 +12507,8 @@
1093074944,1093091327,CA
1093091328,1093107967,US
1093107968,1093108479,CA
-1093108480,1093108735,US
-1093108736,1093109247,CA
+1093108480,1093108991,US
+1093108992,1093109247,CA
1093109248,1093109503,US
1093109504,1093109759,CA
1093109760,1093109871,US
@@ -13233,7 +12525,9 @@
1093111728,1093111743,CA
1093111744,1093111903,US
1093111904,1093111935,CA
-1093111936,1093113855,US
+1093111936,1093112063,US
+1093112064,1093112319,CA
+1093112320,1093113855,US
1093113856,1093114111,CA
1093114112,1093114843,US
1093114844,1093114847,CA
@@ -13248,7 +12542,9 @@
1093118208,1093118463,HK
1093118464,1093119999,US
1093120000,1093120255,CA
-1093120256,1093120511,US
+1093120256,1093120415,US
+1093120416,1093120431,CA
+1093120432,1093120511,US
1093120512,1093120767,CA
1093120768,1093121023,US
1093121024,1093122047,CA
@@ -13260,9 +12556,7 @@
1093122816,1093123839,CA
1093123840,1093123951,US
1093123952,1093123967,CA
-1093123968,1093124607,US
-1093124608,1093124863,CA
-1093124864,1093126143,US
+1093123968,1093126143,US
1093126144,1093126399,CA
1093126400,1093126911,US
1093126912,1093127167,CA
@@ -13274,7 +12568,9 @@
1093132544,1093133055,CA
1093133056,1093135359,US
1093135360,1093135615,CA
-1093135616,1093135871,US
+1093135616,1093135631,US
+1093135632,1093135639,CA
+1093135640,1093135871,US
1093135872,1093136639,CA
1093136640,1093136895,US
1093136896,1093137151,CA
@@ -13310,13 +12606,7 @@
1093966217,1093966217,NL
1093966218,1094565887,US
1094565888,1094582271,CA
-1094582272,1094662271,US
-1094662272,1094662303,CN
-1094662304,1094669635,US
-1094669636,1094669639,HK
-1094669640,1094670795,US
-1094670796,1094670799,CN
-1094670800,1095450623,US
+1094582272,1095450623,US
1095450624,1095467007,BS
1095467008,1095483391,US
1095491584,1095627775,US
@@ -13351,7 +12641,11 @@
1097947136,1097949183,VI
1097949184,1097951231,US
1097951232,1097953279,VI
-1097953280,1101121535,US
+1097953280,1098070271,US
+1098070272,1098070279,GR
+1098070280,1098070295,US
+1098070296,1098070303,BE
+1098070304,1101121535,US
1101121536,1101121791,EC
1101121792,1101182975,US
1101182976,1101183487,YE
@@ -13468,15 +12762,15 @@
1104924416,1104924671,IN
1104924672,1105099519,US
1105099520,1105099775,EC
-1105099776,1106381199,US
+1105099776,1105719295,US
+1105719296,1105723391,IN
+1105723392,1106381199,US
1106381200,1106381207,UM
1106381208,1106469887,US
1106469888,1106470911,BS
1106470912,1106475007,US
1106475008,1106475519,CO
-1106475520,1106740991,US
-1106740992,1106741247,CR
-1106741248,1106758655,US
+1106475520,1106758655,US
1106758656,1106759167,EC
1106759168,1106759679,CO
1106759680,1106767871,US
@@ -13557,7 +12851,11 @@
1109934592,1109934847,GB
1109934848,1110126591,US
1110126592,1110130687,CA
-1110130688,1110310911,US
+1110130688,1110270207,US
+1110270208,1110270335,CA
+1110270336,1110270399,US
+1110270400,1110270431,CA
+1110270432,1110310911,US
1110310912,1110376447,CA
1110376448,1110443535,US
1110443536,1110443543,CA
@@ -13647,13 +12945,14 @@
1112440832,1112530943,US
1112530944,1112539135,CA
1112539136,1112873215,US
+1112873984,1112875007,CA
1112875008,1112875519,US
1112875776,1112877311,US
1112877568,1112877823,US
-1112881152,1112907775,US
+1112878080,1112887295,US
+1112888320,1112907775,US
1112907776,1112907783,CA
-1112907784,1112928255,US
-1112932096,1113591807,US
+1112907784,1113591807,US
1113591808,1113595903,CA
1113595904,1113596415,CL
1113596416,1113596927,GT
@@ -13699,8 +12998,8 @@
1114511872,1114512127,CA
1114512128,1114513407,US
1114513408,1114513471,SA
-1114513472,1114513535,US
-1114513536,1114513663,SA
+1114513472,1114513555,US
+1114513556,1114513663,SA
1114513664,1114514175,US
1114514176,1114515455,SA
1114515456,1114515463,US
@@ -13761,8 +13060,8 @@
1116016128,1116021247,US
1116021248,1116021503,CI
1116021504,1116024063,US
-1116024064,1116024127,PG
-1116024128,1116027135,US
+1116024064,1116024319,PG
+1116024320,1116027135,US
1116027136,1116027903,DE
1116027904,1116168191,US
1116168192,1116176383,CA
@@ -13790,14 +13089,16 @@
1117458912,1117458943,GB
1117458944,1117460223,US
1117460224,1117460287,GB
-1117460288,1117480191,US
+1117460288,1117470719,US
+1117470720,1117471231,CA
+1117471232,1117480191,US
1117480192,1117480255,CA
1117480256,1117683711,US
1117683712,1117691903,CA
1117691904,1117724671,US
1117724672,1117728767,CA
1117728768,1117744127,US
-1117745152,1117749247,CA
+1117744128,1117749247,CA
1117749248,1117815295,US
1117815296,1117815551,CN
1117815552,1117823231,US
@@ -13836,7 +13137,7 @@
1118167040,1118474239,US
1118474240,1118478335,CA
1118478336,1118483455,US
-1118486528,1118515199,US
+1118484480,1118515199,US
1118515200,1118519295,CA
1118519296,1118527487,US
1118527488,1118531583,CA
@@ -13850,8 +13151,7 @@
1118793472,1118793727,CO
1118793728,1118796543,US
1118796544,1118796799,GB
-1118796800,1118824447,US
-1118826496,1118962943,US
+1118796800,1118962943,US
1118962944,1118963199,AS
1118963200,1118965247,US
1118965248,1118965503,AS
@@ -13894,7 +13194,7 @@
1118994176,1118994431,LR
1118994432,1119109119,US
1119109120,1119111167,CA
-1119113216,1119173135,US
+1119111168,1119173135,US
1119173136,1119173143,MX
1119173144,1119173167,US
1119173168,1119173175,MX
@@ -13929,19 +13229,17 @@
1119440896,1119444991,CA
1119444992,1119469567,US
1119469568,1119477759,CA
-1119477760,1119502335,US
+1119477760,1119486783,US
+1119486784,1119486847,BR
+1119486848,1119502335,US
1119502336,1119510527,CA
1119510528,1119558143,US
1119558144,1119558655,PR
-1119558656,1119567871,US
-1119567872,1119568127,GB
-1119568128,1119568383,US
+1119558656,1119568383,US
1119568384,1119568639,GB
-1119568640,1119568895,US
-1119568896,1119569151,GB
-1119569152,1119570175,US
-1119570176,1119570431,GB
-1119570432,1119571967,US
+1119568640,1119570559,US
+1119570560,1119570687,GB
+1119570688,1119571967,US
1119571968,1119576063,CA
1119576064,1119580159,US
1119580160,1119584255,CA
@@ -13976,14 +13274,18 @@
1120346112,1120350207,CA
1120350208,1120370687,US
1120370688,1120371199,CA
-1120371200,1120372223,US
+1120371200,1120371567,US
+1120371568,1120371583,CA
+1120371584,1120372223,US
1120372224,1120372479,CA
1120372480,1120372991,US
1120372992,1120373247,CA
1120373248,1120373503,US
1120373504,1120374015,CA
-1120374016,1120374527,US
-1120374528,1120375039,CA
+1120374016,1120374519,US
+1120374520,1120374523,CA
+1120374524,1120374783,US
+1120374784,1120375039,CA
1120375040,1120375551,US
1120375552,1120376063,CA
1120376064,1120376303,US
@@ -14063,7 +13365,7 @@
1120737280,1120740351,US
1120740352,1120741375,TT
1120741376,1120741631,US
-1120741632,1120741887,MX
+1120741632,1120741887,KN
1120741888,1120743423,US
1120743424,1120743679,KN
1120743680,1120744447,US
@@ -14112,7 +13414,8 @@
1122092800,1122093055,CA
1122093056,1122140159,US
1122140160,1122148351,CA
-1122148352,1122203135,US
+1122148352,1122156543,BS
+1122156544,1122203135,US
1122203136,1122203391,GB
1122203392,1122412497,US
1122412498,1122412498,LB
@@ -14120,12 +13423,15 @@
1122416384,1122416639,DM
1122416640,1122417919,US
1122417920,1122418175,AU
-1122418176,1122430975,US
+1122418176,1122433023,US
+1122433024,1122434047,PR
1122434048,1122451455,US
1122451456,1122455551,CO
1122455552,1122476031,US
1122476032,1122480127,PR
-1122480128,1122533375,US
+1122480128,1122497327,US
+1122497328,1122497343,BR
+1122497344,1122533375,US
1122533376,1122535423,GB
1122535424,1122538495,KR
1122538496,1122635775,US
@@ -14136,9 +13442,7 @@
1123180544,1123184639,CA
1123184640,1123336191,US
1123336192,1123352575,CA
-1123352576,1123397631,US
-1123398656,1123399679,US
-1123401728,1123534847,US
+1123352576,1123534847,US
1123534848,1123536895,AW
1123536896,1123589631,US
1123589632,1123589887,DE
@@ -14172,7 +13476,9 @@
1123801088,1123801343,RU
1123801344,1123848191,US
1123848192,1123852287,CA
-1123852288,1123950591,US
+1123852288,1123929599,US
+1123929600,1123929855,CA
+1123929856,1123950591,US
1123950592,1123958783,CA
1123958784,1125064703,US
1125064704,1125065215,GB
@@ -14200,9 +13506,7 @@
1125238554,1125238554,ES
1125238555,1125290241,US
1125290242,1125290242,AE
-1125290243,1125457919,US
-1125458944,1125459455,US
-1125462016,1125474303,US
+1125290243,1125474303,US
1125474304,1125478399,CA
1125478400,1125481215,US
1125481216,1125481727,CA
@@ -14220,7 +13524,7 @@
1125543888,1125543903,US
1125543904,1125543935,CA
1125543936,1125545983,US
-1125548032,1125550079,CA
+1125545984,1125550079,CA
1125550080,1125550335,US
1125550336,1125552127,CA
1125552128,1125572607,US
@@ -14229,7 +13533,9 @@
1125593372,1125593375,GB
1125593376,1125613567,US
1125613568,1125617663,CA
-1125617664,1126924287,US
+1125617664,1126009343,US
+1126009344,1126009599,AR
+1126009600,1126924287,US
1126924288,1126928383,CA
1126928384,1126948863,US
1126948864,1126952959,CA
@@ -14253,11 +13559,16 @@
1133226240,1133226495,AS
1133226496,1133461247,US
1133461248,1133461503,CA
-1133461504,1133785439,US
+1133461504,1133785351,US
+1133785352,1133785359,IE
+1133785360,1133785439,US
1133785440,1133785471,GB
1133785472,1133789695,US
1133789696,1133789823,GB
-1133789824,1134444543,US
+1133789824,1133789887,US
+1133789888,1133789895,NL
+1133789896,1133789903,IE
+1133789904,1134444543,US
1134444544,1134448639,CA
1134448640,1134546943,US
1134546944,1134551039,CA
@@ -14298,7 +13609,9 @@
1137524736,1137541119,CA
1137541120,1137623039,US
1137623040,1137639423,PR
-1137639424,1137704959,US
+1137639424,1137680959,US
+1137680960,1137680975,UA
+1137680976,1137704959,US
1137704960,1137706239,CA
1137706240,1137706495,US
1137706496,1137712383,CA
@@ -14344,7 +13657,8 @@
1138184448,1138184959,US
1138184960,1138185215,AU
1138185216,1138185727,CA
-1138185728,1138188287,US
+1138185728,1138185983,ZA
+1138185984,1138188287,US
1138188288,1138192383,PR
1138192384,1138196479,US
1138196480,1138204671,CA
@@ -14370,8 +13684,8 @@
1138593792,1138597887,CA
1138597888,1138600447,US
1138600448,1138600703,BE
-1138600704,1138712575,US
-1138712576,1138716671,CA
+1138600704,1138704383,US
+1138704384,1138716671,CA
1138716672,1138720767,US
1138720768,1138728959,CA
1138728960,1138774015,US
@@ -14408,8 +13722,7 @@
1143726208,1143726335,CA
1143726336,1144796671,US
1144796672,1144796927,CA
-1144796928,1145141247,US
-1145142784,1145188351,US
+1144796928,1145188351,US
1145188352,1145192447,CA
1145192448,1145242111,US
1145242112,1145242367,NO
@@ -14437,9 +13750,9 @@
1145475072,1145479167,CA
1145479168,1145503743,US
1145503744,1145520127,CA
-1145520128,1145552895,US
-1145552896,1145556991,CA
-1145556992,1150043135,US
+1145520128,1145554431,US
+1145554432,1145554687,CA
+1145554688,1150043135,US
1150043136,1150044159,VA
1150044160,1150287871,US
1150287872,1150812159,CA
@@ -14471,21 +13784,23 @@
1151946240,1151946751,GB
1151946752,1152073727,US
1152073728,1152077823,CA
-1152077824,1152116479,US
-1152116480,1152116735,CA
-1152116736,1152117759,US
+1152077824,1152114687,US
+1152114688,1152117759,CA
1152117760,1152117952,IL
1152117953,1152117953,CA
1152117954,1152118015,IL
-1152118016,1152120319,US
-1152120320,1152120575,CA
-1152120576,1152581631,US
+1152118016,1152122879,CA
+1152122880,1152581631,US
1152581632,1152614399,CA
1152614400,1152778239,US
1152778240,1152843775,CA
1152843776,1156071423,US
1156071424,1156079615,CA
-1156079616,1156263935,US
+1156079616,1156243455,US
+1156243456,1156245503,CA
+1156245504,1156249599,US
+1156249600,1156250623,CA
+1156250624,1156263935,US
1156263936,1156265983,CA
1156265984,1156296703,US
1156296704,1156300799,CA
@@ -14497,7 +13812,13 @@
1157912704,1157912831,CA
1157912832,1157913215,US
1157913216,1157913279,CA
-1157913280,1157931007,US
+1157913280,1157914194,US
+1157914195,1157914202,IN
+1157914203,1157914234,US
+1157914235,1157914242,IN
+1157914243,1157914258,US
+1157914259,1157914266,IN
+1157914267,1157931007,US
1157931008,1157935103,BS
1157935104,1157943295,US
1157943296,1157947391,CA
@@ -14519,8 +13840,11 @@
1158340608,1158344703,CA
1158344704,1158348799,US
1158348800,1158381567,CA
-1158381568,1158438911,US
+1158381568,1158422527,US
+1158422528,1158423551,CA
+1158423552,1158440959,US
1158441216,1158441471,US
+1158441984,1158443007,DM
1158443008,1158724607,US
1158724608,1158724863,NL
1158724864,1158774783,US
@@ -14545,7 +13869,9 @@
1159269120,1159269375,AR
1159269376,1159274495,US
1159274496,1159274751,GB
-1159274752,1159281919,US
+1159274752,1159279359,US
+1159279360,1159279615,PR
+1159279616,1159281919,US
1159281920,1159282175,GB
1159282176,1159300607,US
1159300608,1159300863,SE
@@ -14555,7 +13881,11 @@
1159348224,1159356415,CA
1159356416,1159421951,US
1159421952,1159430143,CA
-1159430144,1159512575,US
+1159430144,1159480063,US
+1159480064,1159480319,CA
+1159480320,1159483903,US
+1159483904,1159484415,CA
+1159484416,1159512575,US
1159512576,1159512831,CA
1159512832,1159513599,US
1159513600,1159514879,CA
@@ -14598,7 +13928,9 @@
1160368128,1160373247,US
1160373248,1160373503,AE
1160373504,1160392703,US
-1160392704,1160396799,CA
+1160392704,1160392959,CA
+1160392960,1160393727,US
+1160393728,1160396799,CA
1160396800,1160405759,US
1160405760,1160406015,DO
1160406016,1160406319,US
@@ -14678,8 +14010,10 @@
1161428224,1161428991,KN
1161428992,1161429247,US
1161429248,1161429503,CA
-1161429504,1161429759,US
-1161429760,1161431039,CA
+1161429504,1161429951,US
+1161429952,1161430015,CA
+1161430016,1161430783,US
+1161430784,1161431039,CA
1161431040,1161433087,US
1161433088,1161437183,CA
1161437184,1161453567,US
@@ -14701,7 +14035,11 @@
1161830426,1161830426,UA
1161830427,1161830596,US
1161830597,1161830597,UA
-1161830598,1161831384,US
+1161830598,1161831090,US
+1161831091,1161831091,DE
+1161831092,1161831305,US
+1161831306,1161831306,DE
+1161831307,1161831384,US
1161831385,1161831385,UA
1161831386,1161832483,US
1161832484,1161832484,UA
@@ -14709,7 +14047,9 @@
1161835226,1161835226,UA
1161835227,1161835230,US
1161835231,1161835231,PH
-1161835232,1161837567,US
+1161835232,1161835338,US
+1161835339,1161835339,DE
+1161835340,1161837567,US
1161837568,1161837823,JP
1161837824,1161885695,US
1161885696,1161886207,JP
@@ -14822,8 +14162,8 @@
1163540480,1163540735,US
1163540736,1163541503,CA
1163541504,1163542015,US
-1163542016,1163542783,CA
-1163542784,1163543295,US
+1163542016,1163542527,CA
+1163542528,1163543295,US
1163543296,1163543551,CA
1163543552,1163544063,US
1163544064,1163544319,CA
@@ -14837,7 +14177,9 @@
1163546624,1163546879,CA
1163546880,1163547135,US
1163547136,1163547391,CA
-1163547392,1163548159,US
+1163547392,1163547647,US
+1163547648,1163547903,CA
+1163547904,1163548159,US
1163548160,1163548927,CA
1163548928,1163549183,US
1163549184,1163549695,CA
@@ -14890,7 +14232,9 @@
1163580928,1163581183,CA
1163581184,1163581695,US
1163581696,1163581951,CA
-1163581952,1163582031,US
+1163581952,1163582003,US
+1163582004,1163582007,CA
+1163582008,1163582031,US
1163582032,1163582039,CA
1163582040,1163582079,US
1163582080,1163582111,CA
@@ -14940,6 +14284,7 @@
1168461824,1168465919,CA
1168465920,1168474111,US
1168474112,1168506879,CA
+1168506880,1168508927,US
1168509440,1168510975,US
1168510976,1168515071,CA
1168515072,1168535551,US
@@ -14951,7 +14296,8 @@
1168687104,1168697599,US
1168697600,1168697855,GB
1168697856,1168698111,NL
-1168698112,1168727551,US
+1168698112,1168698367,GB
+1168698368,1168727551,US
1168727552,1168727807,ES
1168727808,1168859135,US
1168859136,1168863231,CA
@@ -15005,7 +14351,9 @@
1169211392,1170190335,US
1170190336,1170190847,GB
1170190848,1170191103,JP
-1170191104,1170227199,US
+1170191104,1170212351,US
+1170212352,1170212607,NL
+1170212608,1170227199,US
1170227200,1170231295,NL
1170231296,1170461183,US
1170461184,1170461695,CO
@@ -15171,7 +14519,9 @@
1208935984,1208935991,IN
1208935992,1208935999,JP
1208936000,1208936003,HK
-1208936004,1208936031,US
+1208936004,1208936007,US
+1208936008,1208936015,ID
+1208936016,1208936031,US
1208936032,1208936039,IN
1208936040,1208936191,US
1208936192,1208936199,AU
@@ -15185,7 +14535,9 @@
1208936256,1208936263,MY
1208936264,1208936295,US
1208936296,1208936299,HK
-1208936300,1208954879,US
+1208936300,1208936311,US
+1208936312,1208936313,ID
+1208936314,1208954879,US
1208954880,1208958975,CA
1208958976,1208975359,US
1208975360,1208983551,CA
@@ -15229,15 +14581,21 @@
1209867264,1209867519,CA
1209867520,1209917439,US
1209917440,1209925631,CA
-1209925632,1210253311,US
-1210253312,1210261503,CA
-1210261504,1210420223,US
+1209925632,1210254335,US
+1210254336,1210254591,CA
+1210254592,1210254935,US
+1210254936,1210254943,CA
+1210254944,1210255103,US
+1210255104,1210255359,CA
+1210255360,1210257663,US
+1210257664,1210257919,CA
+1210257920,1210259967,US
+1210259968,1210260223,CA
+1210260224,1210420223,US
1210420224,1210420479,IT
1210420480,1210421503,US
1210421504,1210421551,CA
-1210421552,1210447003,US
-1210447004,1210447004,CA
-1210447005,1210449919,US
+1210421552,1210449919,US
1210449920,1210554367,CA
1210554368,1210554623,US
1210554624,1210580991,CA
@@ -15303,7 +14661,35 @@
1219256320,1219264511,CA
1219264512,1219272703,US
1219272704,1219276799,CA
-1219276800,1224210431,US
+1219276800,1224093183,US
+1224093184,1224093439,NL
+1224093440,1224094463,US
+1224094464,1224094719,NL
+1224094720,1224095231,US
+1224095232,1224095487,NL
+1224095488,1224099327,US
+1224099328,1224099839,NL
+1224099840,1224106751,US
+1224106752,1224107519,NL
+1224107520,1224124415,US
+1224124416,1224126463,NL
+1224126464,1224151039,US
+1224151040,1224152575,NL
+1224152576,1224171519,US
+1224171520,1224173567,NL
+1224173568,1224184063,US
+1224184064,1224184319,NL
+1224184320,1224189951,US
+1224189952,1224191999,NL
+1224192000,1224196095,US
+1224196096,1224196607,NL
+1224196608,1224197119,US
+1224197120,1224198143,NL
+1224198144,1224200191,US
+1224200192,1224200959,NL
+1224200960,1224201215,US
+1224201216,1224202239,NL
+1224202240,1224210431,US
1224210432,1224212479,NL
1224212480,1224470527,US
1224470528,1224471567,NL
@@ -15355,7 +14741,13 @@
1246890465,1246890495,CA
1246890496,1246902783,US
1246902784,1246903039,NL
-1246903040,1246923519,US
+1246903040,1246904319,US
+1246904320,1246905366,CA
+1246905367,1246905367,US
+1246905368,1246905378,CA
+1246905379,1246905379,US
+1246905380,1246912511,CA
+1246912512,1246923519,US
1246923520,1246923775,AU
1246923776,1246937087,US
1246937088,1246945279,CA
@@ -15421,9 +14813,7 @@
1249101824,1249102847,PR
1249102848,1249103103,US
1249103104,1249103871,CA
-1249103872,1249106431,US
-1249106432,1249106687,DE
-1249106688,1249106943,US
+1249103872,1249106943,US
1249106944,1249107967,CA
1249107968,1249130495,US
1249130496,1249131519,JM
@@ -15431,7 +14821,9 @@
1249139712,1249140735,MF
1249140736,1249142015,US
1249142016,1249142271,GB
-1249142272,1249163263,US
+1249142272,1249146879,US
+1249146880,1249147903,CA
+1249147904,1249163263,US
1249163264,1249165311,CA
1249165312,1249165823,US
1249165824,1249166335,CA
@@ -15482,8 +14874,7 @@
1249396736,1249397759,CA
1249397760,1249409023,US
1249409024,1249410047,CA
-1249410048,1249432575,US
-1249433600,1249434623,US
+1249410048,1249434623,US
1249434624,1249435647,CA
1249435648,1249449983,US
1249451008,1249452031,US
@@ -15526,16 +14917,17 @@
1249710144,1249710207,CN
1249710208,1249710271,NL
1249710272,1249710591,BE
-1249710592,1249710847,DE
+1249710592,1249710847,NL
1249710848,1249715711,US
1249715712,1249715967,DE
1249715968,1249716479,US
1249716480,1249716735,TW
1249716736,1249716991,DE
1249716992,1249718015,US
-1249718016,1249718271,BE
+1249718016,1249718271,NL
1249718272,1249720319,US
-1249720320,1249720367,AU
+1249720320,1249720351,AU
+1249720352,1249720367,JP
1249720368,1249720383,SG
1249720384,1249720511,AU
1249720512,1249720527,IN
@@ -15543,7 +14935,9 @@
1249720576,1249720591,FR
1249720592,1249720599,GB
1249720600,1249720607,IT
-1249720608,1249720831,GB
+1249720608,1249720663,GB
+1249720664,1249720671,SE
+1249720672,1249720831,GB
1249720832,1249721343,US
1249721344,1249721351,AT
1249721352,1249721359,BE
@@ -15566,7 +14960,8 @@
1249721512,1249721519,TR
1249721520,1249721527,ZA
1249721528,1249721535,DK
-1249721536,1249721543,US
+1249721536,1249721539,PL
+1249721540,1249721543,US
1249721544,1249721551,GB
1249721552,1249721599,US
1249721600,1249721607,AT
@@ -15595,12 +14990,14 @@
1249721792,1249721799,KE
1249721800,1249721807,TR
1249721808,1249721815,ZA
-1249721816,1249722111,US
+1249721816,1249721833,US
+1249721834,1249721835,GB
+1249721836,1249722111,US
1249722112,1249722367,IN
1249722368,1249724671,US
-1249724672,1249724694,BE
+1249724672,1249724694,NL
1249724695,1249724695,US
-1249724696,1249724927,BE
+1249724696,1249724927,NL
1249724928,1249725183,FI
1249725184,1249725439,US
1249725440,1249725695,NL
@@ -15611,7 +15008,7 @@
1249728256,1249744895,US
1249744896,1249745151,TW
1249745152,1249752319,US
-1249752320,1249752575,BE
+1249752320,1249752575,NL
1249752576,1249754111,US
1249754112,1249754367,IE
1249754368,1249754390,US
@@ -15700,7 +15097,9 @@
1264763648,1264766975,CA
1264766976,1264990975,US
1264990976,1264991231,NL
-1264991232,1266147327,US
+1264991232,1264991311,US
+1264991312,1264991319,JP
+1264991320,1266147327,US
1266147328,1266155519,CA
1266155520,1267934968,US
1267934969,1267934969,CA
@@ -15805,7 +15204,8 @@
1280097280,1280097791,LC
1280097792,1280098303,AG
1280098304,1280102399,PR
-1280102400,1280131071,US
+1280102400,1280126975,US
+1280126976,1280131071,JP
1280131072,1280139263,CA
1280139264,1291845631,US
1291845632,1292894207,DE
@@ -15859,7 +15259,11 @@
1296236672,1296236799,US
1296236800,1296237439,FR
1296237440,1296237567,IT
-1296237568,1296238591,FR
+1296237568,1296237823,FR
+1296237824,1296237824,GB
+1296237825,1296237825,FR
+1296237826,1296237826,GB
+1296237827,1296238591,FR
1296238592,1296239103,NL
1296239104,1296239231,FR
1296239232,1296239359,NL
@@ -15881,7 +15285,9 @@
1296247296,1296248959,FR
1296248960,1296249023,DE
1296249024,1296249087,GB
-1296249088,1296250367,FR
+1296249088,1296249279,FR
+1296249280,1296249343,DE
+1296249344,1296250367,FR
1296250368,1296250399,CZ
1296250400,1296250431,DE
1296250432,1296250463,PL
@@ -15902,7 +15308,8 @@
1296252536,1296252543,IT
1296252544,1296252591,FR
1296252592,1296252595,GB
-1296252596,1296252607,FR
+1296252596,1296252599,FR
+1296252600,1296252607,GB
1296252608,1296252615,NL
1296252616,1296252623,ES
1296252624,1296252655,FR
@@ -15914,9 +15321,12 @@
1296252880,1296256839,FR
1296256840,1296256847,US
1296256848,1296258303,FR
-1296258304,1296259071,NL
+1296258304,1296258559,NL
+1296258560,1296258815,US
+1296258816,1296259071,NL
1296259072,1296259839,FR
-1296259840,1296260351,NL
+1296259840,1296260095,NL
+1296260096,1296260351,US
1296260352,1296261119,FR
1296261120,1296262143,DE
1296262144,1296262399,FR
@@ -15937,9 +15347,8 @@
1296367616,1296400383,GR
1296400384,1296433151,BH
1296433152,1296465919,BG
-1296465920,1296474111,FR
-1296474112,1296476159,US
-1296476160,1296479743,FR
+1296465920,1296469759,LU
+1296469760,1296479743,FR
1296479744,1296482303,NO
1296482304,1296498687,FR
1296498688,1296531455,BG
@@ -16086,17 +15495,28 @@
1297072128,1297088511,PL
1297088512,1297121279,AT
1297121280,1297154047,SE
-1297154048,1297173503,RO
+1297154048,1297168383,RO
+1297168384,1297170431,AZ
+1297170432,1297170943,RO
+1297170944,1297171455,GB
+1297171456,1297172479,RO
+1297172480,1297172991,GB
+1297172992,1297173503,RO
1297173504,1297173759,IR
1297173760,1297173775,IQ
1297173776,1297175551,IR
-1297175552,1297178623,RO
+1297175552,1297176319,GB
+1297176320,1297176831,RO
+1297176832,1297177599,GB
+1297177600,1297178623,RO
1297178624,1297178879,NL
1297178880,1297182719,RO
1297182720,1297184767,ES
-1297184768,1297215487,RO
+1297184768,1297203199,RO
+1297203200,1297211391,IR
+1297211392,1297215487,RO
1297215488,1297217535,NL
-1297217536,1297219583,RO
+1297217536,1297219583,AZ
1297219584,1297285119,RU
1297350656,1297416191,FR
1297416192,1297481727,BG
@@ -16140,9 +15560,7 @@
1297727488,1297743871,MD
1297743872,1297760255,DE
1297760256,1297776639,LT
-1297776640,1297782783,DE
-1297782784,1297784831,PT
-1297784832,1297793023,DE
+1297776640,1297793023,DE
1297793024,1297809407,UA
1297809408,1297825791,PL
1297825792,1297842175,RU
@@ -16171,7 +15589,9 @@
1297981440,1297989631,RO
1297989632,1297997823,CZ
1297997824,1298006015,IT
-1298006016,1298017279,RU
+1298006016,1298016255,RU
+1298016256,1298016511,LT
+1298016512,1298017279,RU
1298017280,1298018303,BY
1298018304,1298020351,RU
1298020352,1298022399,BY
@@ -16269,8 +15689,7 @@
1304428544,1305477119,FR
1305477120,1305739263,ES
1305739264,1306001407,DK
-1306001408,1306132479,RU
-1306132480,1306198015,SE
+1306001408,1306198015,SE
1306198016,1306206207,LV
1306206208,1306214399,HR
1306214400,1306222591,LT
@@ -16443,13 +15862,14 @@
1307807744,1307811839,SE
1307811840,1307815935,NL
1307816192,1307816447,GB
-1307817286,1307817286,DE
+1307817216,1307817471,DE
1307817984,1307818048,GB
1307818049,1307818049,BE
1307818050,1307818239,GB
1307819008,1307819263,GB
+1307819264,1307819519,NL
1307819520,1307819775,GB
-1307820032,1307824127,ES
+1307820032,1307824127,PT
1307824128,1307828223,HU
1307828224,1307832319,NL
1307832320,1307836415,RU
@@ -16478,9 +15898,7 @@
1307926528,1307930623,KZ
1307930624,1307934719,RU
1307934720,1307938815,FR
-1307938816,1307941242,US
-1307941243,1307941243,TR
-1307941244,1307942911,US
+1307938816,1307942911,TR
1307942912,1307947007,RU
1307947008,1307951103,CH
1307951104,1307959295,RU
@@ -16578,7 +15996,8 @@
1310588928,1310605311,RU
1310605312,1310621695,PL
1310621696,1310638079,RS
-1310638080,1310656511,RU
+1310638080,1310654463,UA
+1310654464,1310656511,RU
1310656512,1310657535,GB
1310657536,1310658559,SE
1310658560,1310660607,RU
@@ -16628,11 +16047,17 @@
1311250432,1311252479,RU
1311252480,1311253447,GB
1311253448,1311253455,IT
-1311253456,1311254527,GB
+1311253456,1311253887,GB
+1311253888,1311253895,IT
+1311253896,1311254007,GB
+1311254008,1311254015,IT
+1311254016,1311254527,GB
1311254528,1311256575,SE
1311256576,1311258623,FR
1311258624,1311262719,GB
-1311262720,1311264767,CH
+1311262720,1311262735,CH
+1311262736,1311262767,FR
+1311262768,1311264767,CH
1311264768,1311266815,RU
1311266816,1311268863,FR
1311268864,1311270911,BE
@@ -16711,7 +16136,8 @@
1314652160,1314717695,HU
1314717696,1314783231,SA
1314783232,1314848767,DE
-1314848768,1315045375,RO
+1314848768,1314914303,SA
+1314914304,1315045375,RO
1315045376,1315176447,SK
1315176448,1315307519,QA
1315307520,1315438591,CZ
@@ -16769,7 +16195,7 @@
1315893248,1315897343,RU
1315897344,1315901439,IR
1315901440,1315905535,UA
-1315905536,1315909631,SI
+1315905536,1315909631,BA
1315909632,1315913727,AZ
1315913728,1315917823,DE
1315917824,1315921919,RU
@@ -16823,7 +16249,9 @@
1317646552,1317646559,IE
1317646560,1317647015,GB
1317647016,1317647023,IE
-1317647024,1317650130,GB
+1317647024,1317647026,GB
+1317647027,1317647027,IE
+1317647028,1317650130,GB
1317650131,1317650131,IE
1317650132,1317650431,GB
1317650432,1317666815,PT
@@ -16854,7 +16282,11 @@
1318027264,1318043647,IE
1318043648,1318584319,GB
1318584320,1318592511,PL
-1318592512,1318597343,NL
+1318592512,1318593983,NL
+1318593984,1318593991,GB
+1318593992,1318594007,NL
+1318594008,1318594015,GB
+1318594016,1318597343,NL
1318597344,1318597359,US
1318597360,1318600703,NL
1318600704,1318608895,AT
@@ -16898,7 +16330,10 @@
1318903808,1318911999,RU
1318912000,1318920191,MK
1318920192,1318928383,IR
-1318928384,1318936575,LT
+1318928384,1318936319,LT
+1318936320,1318936383,US
+1318936384,1318936447,BR
+1318936448,1318936575,US
1318936576,1318944767,DK
1318944768,1318958079,CZ
1318958080,1318960127,PL
@@ -16961,7 +16396,6 @@
1331861504,1331863551,CZ
1331863552,1331865599,GB
1331865600,1331869695,NL
-1331869696,1331871743,SA
1331871744,1331873791,DK
1331873792,1331877887,RU
1331877888,1331879935,ES
@@ -17000,7 +16434,7 @@
1331941376,1331943423,ES
1331943424,1331945471,RU
1331945472,1331947519,SE
-1331947520,1331949567,CH
+1331947520,1331949567,DE
1331949568,1331951615,RU
1331951616,1331953663,GE
1331953664,1332019199,BG
@@ -17083,42 +16517,20 @@
1334345728,1334378495,RU
1334378496,1334411263,IT
1334411264,1334444031,RU
-1334444032,1334476799,SE
-1334476800,1334477311,DK
-1334477312,1334478847,SE
-1334478848,1334479359,DK
-1334479360,1334479871,SE
-1334479872,1334480639,DK
-1334480640,1334484991,SE
-1334484992,1334485503,DK
-1334485504,1334485759,SE
-1334485760,1334486015,DK
-1334486016,1334486527,SE
-1334486528,1334487039,DK
-1334487040,1334487295,SE
-1334487296,1334487551,DK
-1334487552,1334487807,SE
-1334487808,1334489087,DK
-1334489088,1334501631,SE
-1334501632,1334501887,DK
-1334501888,1334502143,SE
-1334502144,1334502911,DK
-1334502912,1334503423,SE
-1334503424,1334505855,DK
-1334505856,1334506239,SE
-1334506240,1334507007,DK
-1334507008,1334507519,SE
-1334507520,1334508031,DK
-1334508032,1334508543,SE
-1334508544,1334508799,DK
-1334508800,1334509567,SE
+1334444032,1334476800,SE
+1334476801,1334477311,DK
+1334477312,1334503935,SE
+1334503936,1334504191,DK
+1334504192,1334509567,SE
1334509568,1334542335,PL
1334542336,1334575103,RU
1334575104,1334579199,UA
1334579200,1334583295,RU
1334583296,1334591487,DE
1334591488,1334595583,RU
-1334595584,1334599679,IT
+1334595584,1334599039,IT
+1334599040,1334599167,FR
+1334599168,1334599679,IT
1334599680,1334603775,RU
1334603776,1334607871,DE
1334607872,1334611967,IE
@@ -17171,12 +16583,15 @@
1334718464,1334722559,KZ
1334722560,1334723583,NL
1334723584,1334723839,BE
-1334723840,1334724095,PT
+1334723840,1334724095,DK
1334724096,1334724351,NO
-1334724352,1334724863,US
+1334724352,1334724607,SE
+1334724608,1334724863,US
1334724864,1334725631,NL
1334725632,1334725887,SE
-1334725888,1334726143,NL
+1334725888,1334725900,NL
+1334725901,1334725901,SE
+1334725902,1334726143,NL
1334726144,1334726399,LU
1334726400,1334726655,SE
1334726656,1334734847,RU
@@ -17247,15 +16662,11 @@
1336619008,1336621055,AL
1336621056,1336623103,DE
1336623104,1336625151,BE
-1336625152,1336625407,IE
-1336625408,1336626286,GB
-1336626287,1336626287,IE
-1336626288,1336627199,GB
+1336625152,1336627199,IE
1336627200,1336629247,NO
1336629248,1336631295,DE
1336631296,1336633343,IS
-1336633344,1336634879,ES
-1336634880,1336635391,PT
+1336633344,1336635391,PT
1336635392,1336637439,RU
1336637440,1336639487,UA
1336639488,1336643583,HU
@@ -17354,15 +16765,18 @@
1343017984,1343018495,RE
1343018496,1343025151,FR
1343025152,1343025663,RE
-1343025664,1343220479,FR
+1343025664,1343218687,FR
+1343218688,1343219711,DE
+1343219712,1343220479,FR
1343220480,1343220671,DE
1343220672,1343220735,FR
1343220736,1343220863,GB
1343220864,1343221055,FR
1343221056,1343221119,GB
-1343221120,1343221759,FR
-1343221760,1343222271,GB
-1343222272,1343223679,FR
+1343221120,1343221247,DE
+1343221248,1343221759,FR
+1343221760,1343222335,GB
+1343222336,1343223679,FR
1343223680,1343223687,LB
1343223688,1343224063,FR
1343224064,1343224303,US
@@ -17422,11 +16836,13 @@
1346572288,1346576383,DE
1346580480,1346584575,RU
1346584576,1346588159,US
+1346588160,1346588671,KR
1346588928,1346589439,US
1346589440,1346589695,DE
1346589696,1346592767,US
1346592768,1346596863,ES
1346596864,1346600959,IT
+1346600960,1346605055,MU
1346605056,1346609151,CH
1346609152,1346617343,FR
1346617344,1346621439,SE
@@ -17535,9 +16951,16 @@
1347129344,1347133439,FR
1347133440,1347141631,EG
1347141632,1347145727,CH
-1347145728,1347147263,CA
+1347145728,1347146239,IN
+1347146240,1347146751,DE
+1347146752,1347147263,IN
1347147264,1347147775,GB
-1347147776,1347149823,CA
+1347147776,1347148287,DE
+1347148288,1347148543,GB
+1347148544,1347149055,IN
+1347149056,1347149311,GB
+1347149312,1347149567,DE
+1347149568,1347149823,IN
1347149824,1347151423,HU
1347151424,1347158015,AT
1347158016,1347162111,CH
@@ -17930,6 +17353,8 @@
1347854336,1347854591,DE
1347854600,1347854607,DE
1347857408,1347858431,DE
+1347858752,1347858815,DE
+1347860992,1347861247,DE
1347862090,1347862090,DE
1347862272,1347862527,DE
1347862528,1347866623,CH
@@ -18003,8 +17428,7 @@
1348157440,1348165631,ES
1348165632,1348169727,DE
1348169728,1348173823,AL
-1348173824,1348174591,FI
-1348174592,1348177919,DK
+1348173824,1348177919,DK
1348177920,1348182015,BE
1348182016,1348190207,UA
1348190208,1348194303,RU
@@ -18054,6 +17478,7 @@
1348390912,1348395007,SE
1348395008,1348399103,BY
1348399104,1348403199,MD
+1348403200,1348404223,ZA
1348407296,1348411391,BG
1348411392,1348415487,RU
1348415488,1348419583,GB
@@ -18102,7 +17527,9 @@
1352663040,1353187327,DK
1353187328,1353262295,GB
1353262296,1353262303,US
-1353262304,1353272079,GB
+1353262304,1353271567,GB
+1353271568,1353271575,AT
+1353271576,1353272079,GB
1353272080,1353272095,ES
1353272096,1353275247,GB
1353275248,1353275255,ES
@@ -18155,7 +17582,9 @@
1356070912,1356201983,NO
1356201984,1356333055,FR
1356333056,1356464127,SE
-1356464128,1356595199,CH
+1356464128,1356539775,CH
+1356539776,1356539903,DE
+1356539904,1356595199,CH
1356595200,1356857343,FI
1356857344,1356922879,ES
1356922880,1356988415,GB
@@ -18165,17 +17594,20 @@
1357185024,1357250559,GB
1357250560,1357316095,IL
1357317120,1357317375,GB
+1357318400,1357318655,FR
1357321024,1357321087,KE
1357321984,1357322239,GB
1357322240,1357322255,DE
1357322496,1357322751,DE
+1357322752,1357323007,GB
+1357323008,1357323015,CG
1357323520,1357323775,GB
1357323776,1357323779,FI
1357324288,1357325311,GB
1357326336,1357326337,ES
1357327360,1357327615,FR
1357328384,1357328671,GB
-1357328896,1357329151,NL
+1357328896,1357329159,NL
1357329408,1357329415,BE
1357330944,1357331199,GB
1357335808,1357336063,IT
@@ -18183,16 +17615,17 @@
1357340672,1357341695,GB
1357342976,1357343231,GB
1357343488,1357343503,GB
-1357344260,1357344263,FR
+1357344260,1357344271,FR
1357344512,1357344767,FR
1357346816,1357346835,FR
1357346848,1357346863,FR
1357347336,1357347375,FR
1357347456,1357347583,FR
-1357347616,1357347655,FR
+1357347616,1357347659,FR
1357347840,1357348095,PL
1357348384,1357348415,ES
1357348480,1357348607,ES
+1357350400,1357350527,GB
1357351168,1357351423,PL
1357359872,1357360383,GB
1357361152,1357363199,GB
@@ -18206,12 +17639,14 @@
1357371392,1357371647,GB
1357372160,1357372927,GB
1357373468,1357373471,GB
-1357373480,1357373483,GB
-1357373488,1357373519,GB
+1357373480,1357373519,GB
1357373520,1357373535,FI
+1357373536,1357373539,ES
+1357373540,1357373543,PT
+1357373544,1357373551,GB
1357373952,1357374975,GB
1357377536,1357377671,FR
-1357377792,1357378047,FR
+1357377792,1357378559,FR
1357381632,1357414399,NO
1357414400,1357447167,LV
1357447168,1357479935,IE
@@ -18229,27 +17664,55 @@
1357807616,1357840383,CH
1357840384,1357873151,NO
1357875296,1357875327,IE
+1357875456,1357875711,NL
+1357876448,1357876479,DE
+1357876736,1357876863,ES
1357877248,1357877311,DE
1357877376,1357877439,DE
+1357878272,1357878335,CH
+1357878336,1357878399,CZ
+1357878400,1357878463,NL
+1357878464,1357878527,NO
+1357878528,1357878591,AT
+1357878592,1357878655,PL
+1357878656,1357878719,DE
+1357879296,1357879423,DE
1357879936,1357880063,GB
1357883392,1357883647,FR
1357883648,1357883903,SE
+1357884160,1357884415,GB
+1357885120,1357885183,DE
+1357885200,1357885215,AT
+1357885248,1357885311,SE
1357885952,1357886207,SE
1357889024,1357889279,GB
1357889280,1357889535,SE
+1357890828,1357890831,NL
1357891072,1357891327,NL
+1357891584,1357891647,SE
1357891680,1357891711,GB
+1357891712,1357891839,SE
1357891840,1357892095,GB
+1357892224,1357892351,FR
1357892608,1357892735,NL
1357892864,1357893119,NL
+1357894912,1357895423,FR
+1357895680,1357895935,DE
+1357895936,1357896191,SE
1357896192,1357896447,DE
+1357897376,1357897407,PL
1357898752,1357898879,DE
1357899584,1357899615,NL
1357899648,1357899775,GB
1357900416,1357900543,SE
+1357901056,1357901183,SE
1357902366,1357902366,NO
1357902848,1357903359,GB
+1357903616,1357903743,CH
+1357903744,1357903871,DK
1357904896,1357905407,GB
+1357905408,1357905663,SE
+1357905664,1357905919,NL
1357905920,1357910015,LT
1357910016,1357914111,GR
1357914112,1357922303,RU
@@ -18268,29 +17731,21 @@
1357971456,1357975551,KZ
1357975552,1357979647,AT
1357979648,1357983743,KZ
-1357983744,1357983783,GB
-1357983784,1357983791,IT
-1357983792,1357984103,GB
+1357983744,1357984103,GB
1357984104,1357984119,IT
-1357984120,1357984319,GB
-1357984320,1357984327,IT
-1357984328,1357984367,GB
+1357984120,1357984367,GB
1357984368,1357984375,IT
1357984376,1357984527,GB
1357984528,1357984551,IT
1357984552,1357984591,GB
1357984592,1357984599,IT
-1357984600,1357984671,GB
-1357984672,1357984679,IT
-1357984680,1357984831,GB
+1357984600,1357984831,GB
1357984832,1357984839,IT
1357984840,1357984911,GB
1357984912,1357984919,IT
1357984920,1357985015,GB
1357985016,1357985023,IT
-1357985024,1357985599,GB
-1357985600,1357985607,IT
-1357985608,1357985791,GB
+1357985024,1357985791,GB
1357985792,1357987839,DE
1357987840,1357991935,GB
1357991936,1357996031,NO
@@ -18319,7 +17774,9 @@
1358118912,1358123007,RU
1358123008,1358127103,PT
1358127104,1358131199,CZ
-1358131200,1358135295,DK
+1358131200,1358132735,DK
+1358132736,1358133247,GB
+1358133248,1358135295,DK
1358135296,1358139391,RU
1358139392,1358143487,UA
1358143488,1358147583,AT
@@ -18335,9 +17792,7 @@
1358172160,1358176255,CY
1358176256,1358180351,RU
1358180352,1358184447,ES
-1358184448,1358186608,SE
-1358186609,1358186623,NO
-1358186624,1358187775,SE
+1358184448,1358187775,SE
1358187776,1358187839,NO
1358187840,1358192639,SE
1358192640,1358196735,HU
@@ -18418,9 +17873,7 @@
1358548992,1358551039,NL
1358551040,1358553087,GB
1358553088,1358557183,UA
-1358557184,1358557951,GB
-1358557952,1358558207,IE
-1358558208,1358561279,GB
+1358557184,1358561279,IE
1358561280,1358569471,CZ
1358569472,1358573567,NG
1358573568,1358577663,LV
@@ -18444,7 +17897,9 @@
1358668160,1358668167,PT
1358668168,1358668447,GB
1358668448,1358668455,PT
-1358668456,1358670943,GB
+1358668456,1358668623,GB
+1358668624,1358668631,PT
+1358668632,1358670943,GB
1358670944,1358670951,FR
1358670952,1358670975,GB
1358670976,1358670991,PT
@@ -18508,9 +17963,9 @@
1358861568,1358861823,DE
1358861824,1358862335,FR
1358862336,1358862847,US
-1358862848,1358862898,GB
-1358862899,1358862899,NO
-1358862900,1358863359,GB
+1358862848,1358862911,DK
+1358862912,1358863103,SE
+1358863104,1358863359,GB
1358863360,1358863615,US
1358863616,1358864383,GB
1358864384,1358872575,CH
@@ -18545,9 +18000,7 @@
1359003648,1359020031,CZ
1359020032,1359036415,FR
1359036416,1359052799,GB
-1359052800,1359063039,RU
-1359063040,1359064063,PL
-1359064064,1359101951,RU
+1359052800,1359101951,RU
1359101952,1359118335,GB
1359118336,1359119199,DE
1359119200,1359119231,NL
@@ -18560,7 +18013,7 @@
1359167488,1359183871,GB
1359183872,1359200255,RU
1359200256,1359216639,AT
-1359216640,1359233023,EG
+1359216640,1359233023,ZA
1359233024,1359249407,NL
1359249408,1359265791,CY
1359265792,1359282175,RU
@@ -18587,7 +18040,9 @@
1359577088,1359609855,ES
1359609856,1359641087,EG
1359641088,1359642623,JO
-1359642624,1359675391,AT
+1359642624,1359648255,AT
+1359648256,1359648767,DE
+1359648768,1359675391,AT
1359675392,1359708159,DE
1359708160,1359740927,BE
1359740928,1359773695,IR
@@ -18663,7 +18118,9 @@
1360273408,1360281599,GB
1360281600,1360281727,NL
1360281728,1360281855,ES
-1360281856,1360282495,NL
+1360281856,1360282111,NL
+1360282112,1360282239,ES
+1360282240,1360282495,NL
1360282496,1360282623,DE
1360282624,1360284671,NL
1360284672,1360284927,DK
@@ -18760,7 +18217,8 @@
1360674816,1360678911,DZ
1360678912,1360683007,RU
1360683008,1360691199,GB
-1360691200,1360699391,RU
+1360691200,1360698879,RU
+1360698880,1360699391,RO
1360699392,1360703487,DE
1360703488,1360707583,RU
1360707584,1360709631,IT
@@ -18828,21 +18286,19 @@
1361018880,1361022975,AT
1361022976,1361027071,IT
1361027072,1361035263,IR
-1361035264,1361035627,NL
1361035628,1361035631,DZ
-1361035632,1361039359,NL
1361039360,1361041407,IE
1361041408,1361042431,NL
1361042432,1361043455,PL
1361043456,1361051647,IR
1361051648,1362100223,ES
1362100224,1362395647,FR
-1362395648,1362396159,US
-1362396160,1362396415,FR
-1362396416,1362396927,US
-1362396928,1362397439,FR
-1362397440,1362397503,US
-1362397504,1362398463,FR
+1362395648,1362396031,US
+1362396032,1362396415,FR
+1362396416,1362396543,US
+1362396544,1362396671,FR
+1362396672,1362396927,US
+1362396928,1362398463,FR
1362398464,1362398719,DE
1362398720,1362403583,FR
1362403584,1362404351,DZ
@@ -18853,7 +18309,9 @@
1362407168,1362411519,FR
1362411520,1362413273,MQ
1362413274,1362414079,FR
-1362414080,1362414847,US
+1362414080,1362414143,US
+1362414144,1362414207,FR
+1362414208,1362414847,US
1362414848,1362415103,GB
1362415104,1362415359,FR
1362415360,1362415615,DE
@@ -18861,8 +18319,10 @@
1362417664,1362419711,SG
1362419712,1362423807,FR
1362423808,1362425855,SG
-1362425856,1362426623,US
-1362426624,1362426879,FR
+1362425856,1362426367,US
+1362426368,1362426495,FR
+1362426496,1362426559,US
+1362426560,1362426879,FR
1362426880,1362427815,MQ
1362427816,1362755583,FR
1362755584,1362886655,NL
@@ -19008,23 +18468,9 @@
1365204992,1365209087,CZ
1365209088,1365213183,BE
1365213184,1365217279,RU
-1365217280,1365217655,NL
-1365217656,1365217663,US
-1365217664,1365218191,NL
-1365218192,1365218199,US
-1365218200,1365219167,NL
+1365217280,1365219167,NL
1365219168,1365219168,GB
-1365219169,1365219391,NL
-1365219392,1365219407,MY
-1365219408,1365219703,NL
-1365219704,1365219711,US
-1365219712,1365220231,NL
-1365220232,1365220239,IE
-1365220240,1365220503,NL
-1365220504,1365220507,IE
-1365220508,1365221239,NL
-1365221240,1365221247,US
-1365221248,1365221375,NL
+1365219169,1365221375,NL
1365221376,1365225471,GE
1365225472,1365229567,UA
1365229568,1365233663,PL
@@ -19090,7 +18536,8 @@
1370062848,1370095615,DE
1370095616,1370128383,GB
1370128384,1370161151,SE
-1370161152,1370174463,NL
+1370161152,1370174207,NL
+1370174208,1370174463,DE
1370174464,1370174495,BE
1370174496,1370174527,FR
1370174528,1370174559,CH
@@ -19103,7 +18550,9 @@
1370174752,1370174752,NL
1370174753,1370174783,ES
1370174784,1370174815,CH
-1370174816,1370178815,NL
+1370174816,1370176255,NL
+1370176256,1370176511,GB
+1370176512,1370178815,NL
1370178816,1370179071,ES
1370179072,1370181887,NL
1370181888,1370182143,US
@@ -19117,8 +18566,8 @@
1370189056,1370189311,NL
1370189312,1370189567,US
1370189568,1370190847,NL
-1370190848,1370191871,DE
-1370191872,1370193919,NL
+1370190848,1370192127,DE
+1370192128,1370193919,NL
1370193920,1370226687,GB
1370226688,1370259455,ES
1370259456,1370292223,SE
@@ -19208,11 +18657,13 @@
1372585984,1372618751,IT
1372618752,1372651519,GB
1372651520,1372684287,FI
+1372684544,1372684799,DE
1372688384,1372689407,DE
1372690432,1372691455,DE
+1372693504,1372694015,DE
1372696000,1372696007,DK
1372697344,1372697599,DE
-1372698880,1372699391,DE
+1372698880,1372699647,DE
1372699904,1372700159,DE
1372702720,1372703231,DE
1372703616,1372703743,DE
@@ -19324,7 +18775,9 @@
1375257856,1375258111,RE
1375258112,1375259135,FR
1375259136,1375259647,RE
-1375259648,1375260671,FR
+1375259648,1375260062,FR
+1375260063,1375260063,RE
+1375260064,1375260671,FR
1375260672,1375260927,RE
1375260928,1375261951,FR
1375261952,1375262463,RE
@@ -19371,7 +18824,9 @@
1382187008,1382203391,ES
1382203392,1382205439,GB
1382213632,1382219775,GB
-1382219776,1382222847,SE
+1382219776,1382222807,SE
+1382222808,1382222815,FI
+1382222816,1382222847,SE
1382222848,1382223103,FI
1382223104,1382252543,SE
1382252544,1382268927,CZ
@@ -19398,7 +18853,9 @@
1382809600,1383071743,GB
1383071744,1383088127,RU
1383088128,1383096319,IS
-1383096320,1383100159,GB
+1383096320,1383098879,GB
+1383098880,1383099135,DE
+1383099136,1383100159,GB
1383100160,1383100415,FR
1383100416,1383104511,GB
1383104512,1383112703,JE
@@ -19427,7 +18884,9 @@
1383243776,1383251967,YE
1383251968,1383260159,CZ
1383260160,1383268351,RU
-1383268352,1383273983,IR
+1383268352,1383272191,IR
+1383272192,1383272447,NL
+1383272448,1383273983,IR
1383273984,1383274248,KW
1383274249,1383274249,IR
1383274250,1383275775,KW
@@ -19556,7 +19015,9 @@
1385286144,1385291775,GB
1385291776,1385299967,TR
1385299968,1385308159,BG
-1385308160,1385309439,BE
+1385308160,1385308671,BE
+1385308672,1385309183,RU
+1385309184,1385309439,BE
1385309440,1385309695,RU
1385309696,1385310207,BE
1385310208,1385312255,RU
@@ -19661,7 +19122,8 @@
1388560384,1388568575,FI
1388568576,1388576767,CH
1388576768,1388580863,NL
-1388580864,1388584959,FR
+1388580864,1388581119,GB
+1388581120,1388584959,FR
1388587456,1388587471,GB
1388587520,1388587775,GB
1388588288,1388588543,GB
@@ -19677,7 +19139,18 @@
1388642304,1388650495,FI
1388650496,1388658687,PL
1388658688,1388666879,GB
-1388666880,1388675071,FR
+1388666880,1388671097,FR
+1388671098,1388671098,RE
+1388671099,1388671763,FR
+1388671764,1388671764,RE
+1388671765,1388672244,FR
+1388672245,1388672245,RE
+1388672246,1388673079,FR
+1388673080,1388673080,RE
+1388673081,1388673769,FR
+1388673770,1388673770,RE
+1388673771,1388675071,FR
+1388675584,1388676095,DE
1388677632,1388677887,NL
1388678144,1388679167,DE
1388681216,1388683263,DE
@@ -19700,7 +19173,8 @@
1388714496,1388714751,RU
1388714752,1388715007,LT
1388715008,1388715263,LB
-1388715264,1388716031,RU
+1388715264,1388715519,LT
+1388715520,1388716031,RU
1388716032,1388724223,ES
1388724224,1388732415,DE
1388732416,1388740607,ES
@@ -19789,11 +19263,15 @@
1389477888,1389494271,BY
1389494272,1389510655,DE
1389510656,1389527039,NL
-1389527040,1389543423,PL
+1389527040,1389528551,RO
+1389528552,1389528552,PL
+1389528553,1389543423,RO
1389543424,1389576191,DE
1389576192,1389592575,GB
1389592576,1389598719,GE
-1389598720,1389598975,RU
+1389598720,1389598956,RU
+1389598957,1389598957,GE
+1389598958,1389598975,RU
1389598976,1389604863,GE
1389604864,1389605119,RU
1389605120,1389608959,GE
@@ -19816,7 +19294,9 @@
1389789184,1389805567,PL
1389805568,1389806591,DE
1389806592,1389806847,SA
-1389806848,1389821951,DE
+1389806848,1389817855,DE
+1389817856,1389819903,GB
+1389819904,1389821951,DE
1389821952,1389838335,NL
1389838336,1389854719,UZ
1389854720,1389871103,IT
@@ -19894,8 +19374,9 @@
1400709120,1400710143,DE
1400711168,1400712191,DE
1400713216,1400718335,DE
-1400719360,1400721407,DE
-1400723456,1400727551,DE
+1400719360,1400721919,DE
+1400722688,1400727551,DE
+1400727808,1400727935,DE
1400729600,1400730623,DE
1400731648,1400733695,DE
1400897536,1400963071,NL
@@ -19985,7 +19466,9 @@
1401634816,1401651199,HR
1401651200,1401667583,RU
1401667584,1401683967,IT
-1401683968,1401712895,SE
+1401683968,1401708287,SE
+1401708288,1401708543,DE
+1401708544,1401712895,SE
1401712896,1401713151,DE
1401713152,1401749503,SE
1401749504,1401765887,DE
@@ -19996,7 +19479,6 @@
1401819136,1401821183,BG
1401821184,1401825279,GB
1401825280,1401827327,PL
-1401827328,1401829375,GB
1401829376,1401831423,PL
1401831424,1401833471,GB
1401833472,1401835519,FI
@@ -20043,6 +19525,9 @@
1401935872,1401937919,FI
1401937920,1401939967,GB
1401939968,1401942015,UA
+1401942016,1401942047,CZ
+1401942528,1401943039,GB
+1401943552,1401943807,US
1401944064,1401946111,BG
1401946112,1401962495,FR
1401962496,1401978879,PL
@@ -20064,7 +19549,9 @@
1402142720,1402159103,ES
1402159104,1402175487,IT
1402175488,1402191871,IE
-1402191872,1402208255,IR
+1402191872,1402194943,IR
+1402194944,1402195967,PT
+1402195968,1402208255,IR
1402208256,1402224639,CZ
1402224640,1402241023,BG
1402241024,1402257407,GB
@@ -20102,7 +19589,9 @@
1403420672,1403428863,NL
1403428864,1403437055,GB
1403437056,1403445247,RO
-1403445248,1403461631,RU
+1403445248,1403447811,RU
+1403447812,1403447812,MD
+1403447813,1403461631,RU
1403461632,1403469823,FR
1403469824,1403486207,RU
1403486208,1403494399,FR
@@ -20171,7 +19660,10 @@
1404141568,1404166143,SE
1404166144,1404174335,LV
1404174336,1404182527,EE
-1404182528,1404189183,SE
+1404182528,1404187519,SE
+1404187520,1404187535,LV
+1404187536,1404187551,NL
+1404187552,1404189183,SE
1404189184,1404190719,EE
1404190720,1404192767,SE
1404192768,1404194815,LV
@@ -20186,20 +19678,16 @@
1404215296,1404219391,LV
1404219392,1404220415,SE
1404220416,1404221439,EE
-1404221440,1404222463,RU
-1404222464,1404225535,SE
-1404225536,1404227071,RU
-1404227072,1404227583,SE
+1404221440,1404227583,SE
1404227584,1404231679,LV
1404231680,1404232191,SE
1404232192,1404232703,NO
1404232704,1404234751,SE
1404234752,1404239871,HR
-1404239872,1404256255,SE
-1404256256,1404305407,RU
+1404239872,1404305407,SE
1404305408,1404313599,EE
1404313600,1404321791,HR
-1404321792,1404338175,RU
+1404321792,1404338175,EE
1404338176,1404340223,SE
1404340224,1404342271,HR
1404342272,1404379135,SE
@@ -20208,9 +19696,9 @@
1404385280,1404386047,LT
1404386048,1404387327,SE
1404387328,1404420095,LT
-1404420096,1404426502,RU
+1404420096,1404426502,HR
1404426503,1404426503,SE
-1404426504,1404436479,RU
+1404426504,1404436479,HR
1404436480,1404444671,SE
1404444672,1404452863,NO
1404452864,1404510207,SE
@@ -20249,7 +19737,9 @@
1404813312,1404815871,EE
1404815872,1404816383,LT
1404816384,1404829695,NL
-1404829696,1404870655,RU
+1404829696,1404854271,LT
+1404854272,1404862463,SE
+1404862464,1404870655,HR
1404870656,1404872703,LT
1404872704,1404874751,SE
1404874752,1404875775,LV
@@ -20454,7 +19944,9 @@
1406763008,1406771199,LU
1406771200,1406779391,GB
1406779392,1406787583,RU
-1406787584,1406791159,ES
+1406787584,1406788095,ES
+1406788096,1406788351,NL
+1406788352,1406791159,ES
1406791160,1406791295,GB
1406791296,1406793843,ES
1406793844,1406793847,GB
@@ -20534,11 +20026,23 @@
1407549440,1407582207,RU
1407582208,1407614975,PL
1407614976,1407680511,ES
-1407680512,1407695763,GB
+1407680512,1407686119,GB
+1407686120,1407686123,CH
+1407686124,1407686127,DE
+1407686128,1407686131,FR
+1407686132,1407686135,BE
+1407686136,1407686139,GB
+1407686140,1407686143,ES
+1407686144,1407686147,SE
+1407686148,1407695679,GB
+1407695680,1407695683,IT
+1407695684,1407695763,GB
1407695764,1407695767,DK
1407695768,1407695771,GB
1407695772,1407695775,DK
-1407695776,1407702271,GB
+1407695776,1407695807,GB
+1407695808,1407695811,SE
+1407695812,1407702271,GB
1407702272,1407702527,DE
1407702528,1407711239,GB
1407711240,1407711247,FR
@@ -20715,13 +20219,19 @@
1411842048,1411850239,NL
1411850240,1411858431,FR
1411858432,1411870719,DE
+1411871744,1411871999,GB
+1411872057,1411872057,GB
+1411872160,1411872161,GB
+1411872196,1411872199,GB
+1411872228,1411872231,GB
+1411872244,1411872255,GB
1411872768,1411874815,NL
1411874816,1411876863,RU
1411878912,1411880959,CH
1411880960,1411880990,DE
1411880991,1411880991,GB
1411880992,1411881215,DE
-1411881216,1411881471,GB
+1411881216,1411881471,US
1411881472,1411883007,DE
1411883008,1411887103,PL
1411887104,1411889151,IR
@@ -20753,16 +20263,26 @@
1412300800,1412333567,DE
1412333568,1412366335,LT
1412366336,1412399103,SK
-1412399104,1412415487,RU
+1412399104,1412400127,RU
+1412400128,1412400639,RO
+1412400640,1412403711,RU
+1412403712,1412403967,RO
+1412403968,1412405759,RU
+1412405760,1412406271,RO
+1412406272,1412408831,RU
+1412408832,1412409343,RO
+1412409344,1412412159,RU
+1412412160,1412412671,RO
+1412412672,1412413439,RU
+1412413440,1412413951,RO
+1412413952,1412415487,RU
1412415488,1412419583,AE
1412419584,1412427775,IR
1412427776,1412429823,AE
1412429824,1412431871,IR
1412431872,1412562943,NO
1412562944,1412628479,EE
-1412628480,1412641791,TR
-1412641792,1412642815,DE
-1412642816,1412644863,TR
+1412628480,1412644863,TR
1412644864,1412661247,RU
1412661248,1412677631,GB
1412677632,1412685823,RU
@@ -20773,7 +20293,8 @@
1412743168,1412775935,NO
1412775936,1412792319,NL
1412792320,1412793343,US
-1412793856,1412804607,US
+1412793856,1412795903,US
+1412796416,1412804607,US
1412804864,1412805631,US
1412806144,1412808703,US
1412808704,1412825087,RU
@@ -20790,7 +20311,9 @@
1412939776,1412956159,CH
1412956160,1413480447,DE
1413480448,1414004735,IN
-1414004736,1414039551,CH
+1414004736,1414034687,CH
+1414034688,1414034943,DE
+1414034944,1414039551,CH
1414039552,1414040191,DE
1414040192,1414069218,CH
1414069219,1414069219,AT
@@ -20840,8 +20363,10 @@
1422770176,1422786559,GR
1422786560,1422852095,HU
1422857088,1422857151,FR
+1422907392,1422909439,NL
1422910208,1422910463,NL
-1422911232,1422911487,NL
+1422910976,1422911487,NL
+1422911488,1422913535,GB
1422916608,1422916863,GB
1422917120,1422917343,GB
1422917344,1422917375,NL
@@ -20861,11 +20386,15 @@
1424503716,1424523263,ES
1424523264,1424556031,RO
1424556032,1424588799,EG
-1424588800,1424595743,GB
+1424588800,1424595726,GB
+1424595727,1424595727,IT
+1424595728,1424595743,GB
1424595744,1424595751,IT
1424595752,1424597069,GB
1424597070,1424597070,CZ
-1424597071,1424603023,GB
+1424597071,1424601887,GB
+1424601888,1424601903,NL
+1424601904,1424603023,GB
1424603024,1424603039,US
1424603040,1424604975,GB
1424604976,1424604991,NL
@@ -20873,7 +20402,9 @@
1424607744,1424607775,DE
1424607776,1424608083,GB
1424608084,1424608087,FR
-1424608088,1424610643,GB
+1424608088,1424609247,GB
+1424609248,1424609255,DE
+1424609256,1424610643,GB
1424610644,1424610644,PL
1424610645,1424610992,GB
1424610993,1424610993,FR
@@ -20881,9 +20412,13 @@
1424611003,1424611003,FR
1424611004,1424611005,GB
1424611006,1424611006,FR
-1424611007,1424617215,GB
+1424611007,1424611295,GB
+1424611296,1424611311,BE
+1424611312,1424617215,GB
1424617216,1424617231,IT
-1424617232,1424621567,GB
+1424617232,1424619855,GB
+1424619856,1424619863,BE
+1424619864,1424621567,GB
1424621568,1424625663,PL
1424625664,1424629759,GB
1424629760,1424633855,PL
@@ -20920,7 +20455,9 @@
1424949248,1424965631,RO
1424965632,1424982015,FR
1424982016,1425014783,FI
-1425014784,1425031167,LT
+1425014784,1425015295,LT
+1425015296,1425015551,RU
+1425015552,1425031167,LT
1425031168,1425047551,FI
1425047552,1425063935,IT
1425063936,1425080319,KZ
@@ -20969,7 +20506,7 @@
1425479680,1425480703,MD
1425480704,1425484799,RO
1425484800,1425485311,MD
-1425485312,1425489407,RO
+1425485824,1425489407,RO
1425489408,1425489663,NL
1425489664,1425506303,RO
1425506304,1425522687,NO
@@ -20988,7 +20525,11 @@
1425948672,1425965055,DE
1425965056,1425970175,IT
1425970176,1425970431,FR
-1425970432,1425977343,IT
+1425970432,1425974271,IT
+1425974272,1425974783,GB
+1425974784,1425975807,IT
+1425975808,1425976063,FR
+1425976064,1425977343,IT
1425977344,1425980415,FR
1425980416,1425980671,IQ
1425980672,1425981439,IT
@@ -21001,13 +20542,18 @@
1426587648,1426604031,SE
1426604032,1426620415,DE
1426636800,1426653183,GB
-1426653184,1426669567,RO
+1426653184,1426660657,RO
+1426660658,1426660658,US
+1426660659,1426669567,RO
1426669568,1426685951,IR
1426685952,1426702335,TJ
1426702336,1426718719,LV
1426718720,1426731007,SI
1426731008,1426735103,HR
-1426735104,1426751487,BE
+1426735104,1426743295,BE
+1426743296,1426745599,LU
+1426745600,1426745855,BE
+1426745856,1426751487,LU
1426751488,1426767871,FR
1426767872,1426784255,DE
1426784256,1426800639,SE
@@ -21061,7 +20607,9 @@
1427722028,1427722030,SG
1427722031,1427722031,DE
1427722032,1427722033,SG
-1427722034,1427728088,DE
+1427722034,1427722093,DE
+1427722094,1427722094,EE
+1427722095,1427728088,DE
1427728089,1427728100,SG
1427728101,1427728599,DE
1427728600,1427728600,SK
@@ -21121,9 +20669,7 @@
1431838720,1431846911,BE
1431846912,1431855103,NO
1431855104,1431863295,NL
-1431863296,1431866367,PT
-1431866368,1431867391,ES
-1431867392,1431871487,PT
+1431863296,1431871487,PT
1431871488,1431879679,RU
1431879680,1431887871,IT
1431887872,1431896063,GB
@@ -21148,7 +20694,14 @@
1432027136,1432035327,IE
1432035328,1432043519,GB
1432043520,1432051711,ES
-1432051712,1432059903,RU
+1432051712,1432054015,RU
+1432054016,1432054271,RO
+1432054272,1432056831,RU
+1432056832,1432057343,RO
+1432057344,1432058623,RU
+1432058624,1432058879,RO
+1432058880,1432059135,RU
+1432059136,1432059903,RO
1432059904,1432068095,BG
1432068096,1432076287,BE
1432076288,1432084479,RU
@@ -21160,7 +20713,9 @@
1432131584,1432133631,US
1432133632,1432150015,GB
1432150016,1432158207,BA
-1432158208,1432166399,DE
+1432158208,1432159487,DE
+1432159488,1432159743,AE
+1432159744,1432166399,DE
1432166400,1432174591,RU
1432174592,1432182783,DE
1432182784,1432190975,CZ
@@ -21283,8 +20838,7 @@
1433907200,1433909247,IT
1433909248,1433911295,BE
1433911296,1433913343,ES
-1433913344,1433915391,NL
-1433915392,1433917439,DE
+1433913344,1433917439,DE
1433917440,1433919487,BE
1433919488,1433921535,GB
1433921536,1433923583,CH
@@ -21412,11 +20966,11 @@
1438777344,1438793727,SE
1438793728,1438810111,SA
1438810112,1438826495,SE
-1438826496,1438842879,FI
+1438826496,1438841855,FI
+1438841856,1438842367,DE
+1438842368,1438842879,DK
1438842880,1438859263,SE
-1438859264,1438869655,DE
-1438869656,1438869663,UA
-1438869664,1438875647,DE
+1438859264,1438875647,DE
1438875648,1438877951,RU
1438877952,1438878207,LB
1438878208,1438885887,RU
@@ -21462,13 +21016,49 @@
1439346688,1439350783,RU
1439354880,1439358975,PL
1439358976,1439367167,RU
-1439367168,1439373311,NL
+1439367168,1439371519,NL
+1439371520,1439371775,FR
+1439371776,1439372031,SE
+1439372032,1439372287,TR
+1439372288,1439373311,NL
1439373312,1439373567,SE
-1439373568,1439399935,NL
+1439373568,1439383551,NL
+1439383552,1439399935,FR
1439399936,1439432703,DK
-1439432704,1439477759,RO
+1439432704,1439437823,RO
+1439437824,1439438335,FR
+1439438336,1439438847,RO
+1439438848,1439439359,FR
+1439439360,1439440383,RO
+1439440384,1439440895,IR
+1439440896,1439441919,RO
+1439441920,1439442943,ES
+1439442944,1439446527,RO
+1439446528,1439447039,DE
+1439447040,1439451647,RO
+1439451648,1439451903,LT
+1439451904,1439452159,RO
+1439452160,1439452671,IR
+1439452672,1439453183,RO
+1439453184,1439457279,IR
+1439457280,1439457791,DE
+1439457792,1439459327,RO
+1439459328,1439459839,IR
+1439459840,1439460607,RO
+1439460608,1439460863,MD
+1439460864,1439463423,RO
+1439463424,1439463935,DK
+1439463936,1439466495,RO
+1439466496,1439467007,DK
+1439467008,1439467519,RO
+1439467520,1439468031,DK
+1439468032,1439477759,RO
1439477760,1439479807,MD
-1439479808,1439498239,RO
+1439479808,1439482367,RO
+1439482368,1439482879,DK
+1439482880,1439485951,RO
+1439485952,1439490047,IR
+1439490048,1439498239,RO
1439498240,1439513599,DE
1439513600,1439514623,GB
1439514624,1439516671,IT
@@ -21518,7 +21108,8 @@
1440514048,1440546815,DE
1440546816,1440579583,NO
1440579584,1440645119,PL
-1440645120,1440669695,RS
+1440645120,1440653311,GB
+1440653312,1440669695,RS
1440669696,1440671743,NL
1440671744,1440672767,EE
1440672768,1440710655,NL
@@ -21558,9 +21149,7 @@
1441529856,1441538047,RU
1441538048,1441546239,DE
1441546240,1441554431,DK
-1441554432,1441554687,GB
-1441554688,1441554943,NL
-1441554944,1441556991,GB
+1441554432,1441556991,GB
1441556992,1441557503,SE
1441557504,1441564671,GB
1441564672,1441566719,IQ
@@ -21641,7 +21230,9 @@
1446576128,1446608895,IR
1446608896,1446641663,BY
1446641664,1446674431,SI
-1446674432,1446707199,DK
+1446674432,1446704127,DK
+1446704128,1446705151,ES
+1446705152,1446707199,DK
1446707200,1446739967,AT
1446739968,1446772735,HU
1446772736,1446805503,SA
@@ -21664,32 +21255,105 @@
1449459712,1449525247,HU
1449525248,1449590783,RU
1449590784,1449656319,DE
-1449656320,1449664511,RO
+1449656320,1449657087,GB
+1449657088,1449660159,RO
+1449660160,1449660415,NL
+1449660416,1449664511,RO
1449664512,1449668607,IR
-1449668608,1449706495,RO
+1449668608,1449670743,SE
+1449670744,1449670744,RO
+1449670745,1449672703,SE
+1449672704,1449676799,RO
+1449676800,1449684991,IR
+1449684992,1449690623,RO
+1449690624,1449690879,MD
+1449690880,1449695231,RO
+1449695232,1449697279,SE
+1449697280,1449699327,PS
+1449699328,1449706495,RO
1449706496,1449707519,MD
-1449707520,1449736191,RO
+1449707520,1449709567,SE
+1449709568,1449710591,RO
+1449710592,1449711103,GB
+1449711104,1449713151,RO
+1449713152,1449714175,GB
+1449714176,1449715711,RO
+1449715712,1449719807,IR
+1449719808,1449734143,RO
+1449734144,1449736191,IT
1449736192,1449738239,MD
1449738240,1449742335,RO
1449742336,1449744383,MD
-1449744384,1449765887,RO
+1449744384,1449750527,RO
+1449750528,1449752575,SE
+1449752576,1449754623,RO
+1449754624,1449758719,IR
+1449758720,1449765887,RO
1449765888,1449766911,MD
-1449766912,1449775103,RO
+1449766912,1449768959,RO
+1449768960,1449769471,GB
+1449769472,1449775103,RO
1449775104,1449776127,MD
-1449776128,1449819135,RO
-1449819136,1449820159,MD
-1449820160,1449824255,RO
+1449776128,1449780479,RO
+1449780480,1449780991,GB
+1449780992,1449782015,RO
+1449782016,1449782271,GB
+1449782272,1449783807,RO
+1449783808,1449784319,GB
+1449784320,1449789439,RO
+1449789440,1449790207,GB
+1449790208,1449790719,RO
+1449790720,1449791487,GB
+1449791488,1449793279,RO
+1449793280,1449793535,NL
+1449793536,1449811199,RO
+1449811200,1449811455,BG
+1449811456,1449811967,GB
+1449811968,1449812991,RO
+1449812992,1449813503,GB
+1449813504,1449814271,RO
+1449814272,1449815039,GB
+1449815040,1449815295,RO
+1449815296,1449816063,GB
+1449816064,1449816575,RO
+1449816576,1449817855,GB
+1449817856,1449820927,RO
+1449820928,1449821183,BZ
+1449821184,1449822719,RO
+1449822720,1449823743,GB
+1449823744,1449824255,RO
1449824256,1449826303,MD
-1449826304,1449840639,RO
+1449826304,1449828351,RO
+1449828352,1449830399,SE
+1449830400,1449831935,RO
+1449831936,1449832447,GB
+1449832448,1449840639,RO
1449840640,1449852927,MD
1449852928,1449857023,IR
-1449857024,1449869311,RO
+1449857024,1449859583,RO
+1449859584,1449860607,GB
+1449860608,1449863679,RO
+1449863680,1449863935,GB
+1449863936,1449869311,RO
1449869312,1449870335,MD
-1449870336,1449883647,RO
+1449870336,1449870847,RO
+1449870848,1449871615,GB
+1449871616,1449871871,RO
+1449871872,1449872383,GB
+1449872384,1449873407,RO
+1449873408,1449877503,IR
+1449877504,1449878527,IT
+1449878528,1449879039,RO
+1449879040,1449879167,PH
+1449879168,1449879295,TH
+1449879296,1449883647,RO
1449883648,1449885695,BE
-1449885696,1449893887,RO
+1449885696,1449889791,GB
+1449889792,1449893887,IR
1449893888,1449895935,MD
-1449895936,1449906175,RO
+1449895936,1449902335,RO
+1449902336,1449903103,GB
+1449903104,1449906175,RO
1449906176,1449910271,IR
1449910272,1449918463,RO
1449918464,1449951231,JO
@@ -21982,7 +21646,9 @@
1475338240,1475340287,RO
1475340288,1475342335,GR
1475342336,1475344383,PL
-1475344384,1475346431,RO
+1475344384,1475344639,RO
+1475344640,1475345919,NL
+1475345920,1475346431,RO
1475346432,1475362815,RU
1475362816,1475379199,FR
1475379200,1475395583,RU
@@ -21994,14 +21660,17 @@
1475477504,1475493887,HU
1475493888,1475510271,RU
1475510272,1475543039,GB
-1475543040,1475559423,RO
+1475543040,1475545087,RO
+1475545088,1475559423,KZ
1475559424,1475571711,GR
1475571712,1475572735,BG
1475572736,1475575807,GR
1475575808,1475592191,AT
1475592192,1475608575,GB
1475608576,1475624959,RU
-1475624960,1475638783,JE
+1475624960,1475636287,JE
+1475636288,1475636351,GB
+1475636352,1475638783,JE
1475638784,1475639039,GB
1475639040,1475639391,JE
1475639392,1475639399,GB
@@ -22013,17 +21682,39 @@
1475674112,1475690495,DE
1475690496,1475706879,CH
1475706880,1475723263,RU
-1475723264,1475724866,GB
+1475723264,1475723839,GB
+1475723840,1475723903,RU
+1475723904,1475723967,GB
+1475723968,1475724031,RU
+1475724032,1475724223,GB
+1475724224,1475724287,RU
+1475724288,1475724351,GB
+1475724352,1475724415,RU
+1475724416,1475724479,GB
+1475724480,1475724543,RU
+1475724544,1475724866,GB
1475724867,1475724867,RU
1475724868,1475724869,GB
1475724870,1475724870,RU
-1475724871,1475725055,GB
-1475725056,1475725183,RU
-1475725184,1475729663,GB
+1475724871,1475724927,GB
+1475724928,1475725183,RU
+1475725184,1475725311,GB
+1475725312,1475725439,RU
+1475725440,1475728639,GB
+1475728640,1475728767,PL
+1475728768,1475729407,GB
+1475729408,1475729535,UA
+1475729536,1475729663,GB
1475729664,1475729671,UA
-1475729672,1475731007,GB
+1475729672,1475729791,GB
+1475729792,1475729855,UA
+1475729856,1475730751,GB
+1475730752,1475730815,UA
+1475730816,1475731007,GB
1475731008,1475731071,UA
-1475731072,1475738111,GB
+1475731072,1475731135,GB
+1475731136,1475731167,UA
+1475731168,1475738111,GB
1475738112,1475738879,RU
1475738880,1475739647,GB
1475739648,1475756031,BG
@@ -22138,7 +21829,9 @@
1481646080,1481654271,RU
1481654272,1481662463,IT
1481662464,1481678847,BG
-1481678848,1481684991,SE
+1481678848,1481680663,SE
+1481680664,1481680671,GB
+1481680672,1481684991,SE
1481684992,1481687039,GB
1481687040,1481695231,DE
1481695232,1481703423,SK
@@ -22321,7 +22014,10 @@
1489655296,1489655551,GR
1489655552,1489659647,IT
1489659648,1489661951,FR
-1489661952,1489666047,IT
+1489661952,1489664511,IT
+1489664512,1489664767,LY
+1489664768,1489665023,TN
+1489665024,1489666047,IT
1489666048,1489674239,GB
1489674240,1489676287,NL
1489676288,1489698815,GB
@@ -22329,14 +22025,19 @@
1489731584,1489764351,BG
1489764352,1489797119,RU
1489797120,1489829887,KZ
-1489829888,1489862655,DE
+1489829888,1489855807,DE
+1489855808,1489855839,US
+1489855840,1489856527,DE
+1489856528,1489856543,US
+1489856544,1489862655,DE
1489862656,1489928191,RU
1489928192,1489960959,SE
1489960960,1489993727,HR
1489993728,1490026495,LU
-1490026496,1490028543,US
-1490028544,1490029055,UA
-1490029056,1490042879,NL
+1490026496,1490028543,NL
+1490028544,1490028671,GB
+1490028672,1490028799,DE
+1490028800,1490042879,NL
1490042880,1490053375,CZ
1490053376,1490054143,PL
1490054144,1490059263,CZ
@@ -22344,18 +22045,12 @@
1490075648,1490092031,GB
1490092032,1490108415,DE
1490108416,1490124799,MC
-1490124800,1490141183,HU
-1490141184,1490142719,CZ
-1490142720,1490142975,HU
-1490142976,1490145279,CZ
-1490145280,1490147327,HU
-1490147328,1490149375,CZ
-1490149376,1490150399,HU
-1490150400,1490155519,CZ
-1490155520,1490157567,HU
+1490124800,1490157567,HU
1490157568,1490173951,RU
1490173952,1490190335,PT
-1490190336,1490196991,GB
+1490190336,1490193616,GB
+1490193617,1490193617,DE
+1490193618,1490196991,GB
1490196992,1490197247,IE
1490197248,1490206719,GB
1490206720,1490223103,GE
@@ -22372,7 +22067,9 @@
1490419712,1490436095,DE
1490436096,1490452479,UA
1490452480,1490468863,PT
-1490468864,1490480127,GB
+1490468864,1490478591,GB
+1490478592,1490478847,RU
+1490478848,1490480127,GB
1490480128,1490480639,RU
1490480640,1490501631,GB
1490501632,1490518015,DE
@@ -22525,6 +22222,7 @@
1495160240,1495160255,FR
1495160256,1495160263,GB
1495163552,1495163567,FR
+1495168640,1495168655,FR
1495168768,1495169023,GB
1495170760,1495170763,DE
1495170816,1495171071,FR
@@ -22534,7 +22232,8 @@
1495207936,1495209983,RU
1495212032,1495214079,RU
1495214080,1495216127,CZ
-1495216128,1495220223,IT
+1495216128,1495218175,IT
+1495218176,1495220223,NL
1495220224,1495222271,PL
1495222272,1495224319,IT
1495224320,1495228415,RU
@@ -22556,54 +22255,193 @@
1495263232,1495265279,GB
1495265280,1495267327,US
1495267328,1495269375,SE
-1495269376,1495283711,RO
-1495283712,1495287807,MD
-1495287808,1495304191,RO
+1495269376,1495277567,IR
+1495277568,1495279615,SE
+1495279616,1495279871,DE
+1495279872,1495283711,RO
+1495283712,1495285759,MD
+1495285760,1495287807,US
+1495287808,1495289855,SE
+1495289856,1495293951,RO
+1495293952,1495298047,IR
+1495298048,1495304191,RO
1495304192,1495306239,MD
1495306240,1495306573,GB
1495306574,1495306574,RO
1495306575,1495308287,GB
-1495308288,1495313407,RO
+1495308288,1495312383,RO
+1495312384,1495312895,IT
+1495312896,1495313151,GB
+1495313152,1495313407,RO
1495313408,1495314431,MD
-1495314432,1495326719,RO
-1495326720,1495335935,MD
-1495335936,1495416831,RO
+1495314432,1495316991,RO
+1495316992,1495317503,IT
+1495317504,1495319551,RO
+1495319552,1495320063,IR
+1495320064,1495326719,RO
+1495326720,1495332863,MD
+1495332864,1495333887,RO
+1495333888,1495335935,MD
+1495335936,1495336447,RO
+1495336448,1495336959,NL
+1495336960,1495339519,RO
+1495339520,1495340031,IR
+1495340032,1495346687,RO
+1495346688,1495347199,GB
+1495347200,1495351295,RO
+1495351296,1495351551,GB
+1495351552,1495351807,RO
+1495351808,1495352319,IQ
+1495352320,1495362559,RO
+1495362560,1495363583,ES
+1495363584,1495364607,RO
+1495364608,1495364863,GB
+1495364864,1495367679,RO
+1495367680,1495368191,IR
+1495368192,1495369215,RO
+1495369216,1495369471,GB
+1495369472,1495369727,RO
+1495369728,1495371775,SE
+1495371776,1495376895,RO
+1495376896,1495377407,GB
+1495377408,1495385599,RO
+1495385600,1495386623,GB
+1495386624,1495387135,RO
+1495387136,1495387647,IR
+1495387648,1495387903,GB
+1495387904,1495388159,RO
+1495388160,1495392255,KZ
+1495392256,1495394815,RO
+1495394816,1495395327,IR
+1495395328,1495396351,RO
+1495396352,1495396863,IR
+1495396864,1495398911,RO
+1495398912,1495399423,GB
+1495399424,1495399935,RO
+1495399936,1495400447,GB
+1495400448,1495405567,RO
+1495405568,1495406079,IR
+1495406080,1495408639,RO
+1495408640,1495416831,IR
1495416832,1495418879,MD
-1495418880,1495429119,RO
+1495418880,1495422975,RO
+1495422976,1495423487,IR
+1495423488,1495424511,RO
+1495424512,1495425023,IR
+1495425024,1495426559,RO
+1495426560,1495426815,GB
+1495426816,1495427071,RO
+1495427072,1495427583,GB
+1495427584,1495428863,RO
+1495428864,1495429119,BZ
1495429120,1495431167,MD
-1495431168,1495442431,RO
-1495442432,1495443455,MD
-1495443456,1495446527,RO
-1495446528,1495447551,MD
-1495447552,1495449599,RO
+1495431168,1495433215,RO
+1495433216,1495441407,IR
+1495441408,1495443455,RO
+1495443456,1495443967,IR
+1495443968,1495444479,RO
+1495444480,1495444607,KR
+1495444608,1495444735,IN
+1495444736,1495445503,RO
+1495445504,1495446015,IR
+1495446016,1495447551,RO
+1495447552,1495449599,SE
1495449600,1495451647,MD
-1495451648,1495452671,RO
+1495451648,1495452159,IR
+1495452160,1495452671,RO
1495452672,1495453695,MD
-1495453696,1495459839,RO
-1495459840,1495460863,MD
-1495460864,1495468031,RO
+1495453696,1495461887,RO
+1495461888,1495463935,SE
+1495463936,1495468031,RO
1495468032,1495470079,MD
1495470080,1495476223,RO
1495476224,1495478271,MD
-1495478272,1495487487,RO
+1495478272,1495480831,RO
+1495480832,1495481343,IR
+1495481344,1495487487,RO
1495487488,1495488511,MD
-1495488512,1495492607,RO
-1495492608,1495494655,MD
-1495494656,1495508991,RO
-1495508992,1495510015,MD
-1495510016,1495517183,RO
+1495488512,1495488767,RO
+1495488768,1495489279,GB
+1495489280,1495489535,MD
+1495489536,1495492719,RO
+1495492720,1495492783,EE
+1495492784,1495492863,RO
+1495492864,1495493119,EE
+1495493120,1495493375,US
+1495493376,1495493631,RO
+1495493632,1495494655,AE
+1495494656,1495498239,RO
+1495498240,1495498367,IN
+1495498368,1495498495,BD
+1495498496,1495499775,RO
+1495499776,1495500287,IR
+1495500288,1495505919,RO
+1495505920,1495506431,IR
+1495506432,1495508991,RO
+1495508992,1495510015,IT
+1495510016,1495511039,RO
+1495511040,1495511551,IR
+1495511552,1495511807,LT
+1495511808,1495515647,RO
+1495515648,1495516159,IR
+1495516160,1495517183,RO
1495517184,1495518207,MD
-1495518208,1495571455,RO
+1495518208,1495535615,RO
+1495535616,1495536127,IR
+1495536128,1495541247,RO
+1495541248,1495541759,GB
+1495541760,1495543807,RO
+1495543808,1495547903,IR
+1495547904,1495548159,US
+1495548160,1495548671,EE
+1495548672,1495556095,RO
+1495556096,1495560191,IR
+1495560192,1495566847,RO
+1495566848,1495567359,GB
+1495567360,1495571455,RO
1495571456,1495572479,MD
-1495572480,1495597055,RO
+1495572480,1495576575,RO
+1495576576,1495580671,IR
+1495580672,1495581183,RO
+1495581184,1495581695,IR
+1495581696,1495589375,RO
+1495589376,1495589887,IR
+1495589888,1495596031,RO
+1495596032,1495596543,IR
+1495596544,1495597055,RO
1495597056,1495601151,IR
-1495601152,1495608319,RO
-1495608320,1495609343,MD
-1495609344,1495623679,RO
+1495601152,1495603199,AZ
+1495603200,1495604735,RO
+1495604736,1495605247,IR
+1495605248,1495606271,AZ
+1495606272,1495606527,RO
+1495606528,1495606783,AZ
+1495606784,1495607039,RO
+1495607040,1495607295,AZ
+1495607296,1495607807,RO
+1495607808,1495608319,IR
+1495608320,1495617535,RO
+1495617536,1495618559,ES
+1495618560,1495620607,RO
+1495620608,1495621375,GB
+1495621376,1495623167,RO
+1495623168,1495623679,IR
1495623680,1495623935,MD
-1495623936,1495632127,RO
+1495623936,1495630079,RO
+1495630080,1495631359,GB
+1495631360,1495632127,RO
1495632128,1495632639,MD
-1495632640,1495670783,RO
+1495632640,1495642111,RO
+1495642112,1495644159,SE
+1495644160,1495647743,RO
+1495647744,1495648255,IR
+1495648256,1495652863,RO
+1495652864,1495653375,IR
+1495653376,1495658495,RO
+1495658496,1495662591,IR
+1495662592,1495668735,RO
+1495668736,1495669247,IR
+1495669248,1495670783,RO
1495670784,1495671807,MD
1495671808,1495672831,RO
1495672832,1495674879,ES
@@ -22611,88 +22449,222 @@
1495678976,1495679999,MD
1495680000,1495682047,RO
1495682048,1495683071,MD
-1495683072,1495747583,RO
+1495683072,1495687167,IR
+1495687168,1495688703,RO
+1495688704,1495689215,IR
+1495689216,1495724543,RO
+1495724544,1495725055,IR
+1495725056,1495745791,RO
+1495745792,1495746047,GB
+1495746048,1495747583,RO
1495747584,1495748607,MD
1495748608,1495748863,RO
1495748864,1495749119,GB
1495749120,1495749631,RO
1495749632,1495750655,MD
1495750656,1495752703,RO
-1495752704,1495755775,MD
-1495755776,1495756799,RO
+1495752704,1495754751,MD
+1495754752,1495756799,RO
1495756800,1495758847,MD
-1495758848,1495759871,RO
+1495758848,1495759359,RO
+1495759360,1495759487,TH
+1495759488,1495759615,ID
+1495759616,1495759871,RO
1495759872,1495760127,MD
1495760128,1495760895,RO
1495760896,1495762943,DE
-1495762944,1495764991,MD
-1495764992,1495771135,RO
+1495762944,1495763967,GB
+1495763968,1495765759,RO
+1495765760,1495766015,NL
+1495766016,1495771135,RO
1495771136,1495772159,PL
-1495772160,1495782655,RO
-1495782656,1495782911,GB
-1495782912,1495790079,RO
+1495772160,1495775743,RO
+1495775744,1495776255,IR
+1495776256,1495782399,RO
+1495782400,1495782911,GB
+1495782912,1495783167,RO
+1495783168,1495783423,GB
+1495783424,1495789823,RO
+1495789824,1495790079,GB
1495790080,1495790335,MD
-1495790336,1495793663,RO
-1495793664,1495795711,MD
-1495795712,1495845631,RO
+1495790336,1495790847,GB
+1495790848,1495793663,RO
+1495793664,1495794687,DE
+1495794688,1495803391,RO
+1495803392,1495803903,IR
+1495803904,1495805951,RO
+1495805952,1495809023,KZ
+1495809024,1495809279,RO
+1495809280,1495810047,KZ
+1495810048,1495813631,RO
+1495813632,1495814143,IR
+1495814144,1495816703,RO
+1495816704,1495817215,IR
+1495817216,1495820799,RO
+1495820800,1495821311,IR
+1495821312,1495821823,RO
+1495821824,1495822335,IR
+1495822336,1495826431,RO
+1495826432,1495826943,IR
+1495826944,1495829503,RO
+1495829504,1495830015,GB
+1495830016,1495837695,RO
+1495837696,1495838719,IT
+1495838720,1495845631,RO
1495845632,1495845887,GB
-1495845888,1495852031,RO
+1495845888,1495846911,RO
+1495846912,1495847423,GB
+1495847424,1495852031,RO
1495852032,1495853055,MD
-1495853056,1495875583,RO
+1495853056,1495855103,RO
+1495855104,1495859199,IR
+1495859200,1495860223,ES
+1495860224,1495861247,AZ
+1495861248,1495865343,IR
+1495865344,1495866111,RO
+1495866112,1495866879,GB
+1495866880,1495867391,RO
+1495867392,1495867903,IR
+1495867904,1495871743,RO
+1495871744,1495872511,GB
+1495872512,1495874047,RO
+1495874048,1495874559,IR
+1495874560,1495875583,RO
1495875584,1495891967,MD
-1495891968,1495941119,RO
+1495891968,1495900159,RO
+1495900160,1495902207,SE
+1495902208,1495907583,RO
+1495907584,1495908351,GB
+1495908352,1495922687,IR
+1495922688,1495926783,RO
+1495926784,1495927039,SG
+1495927040,1495927295,RO
+1495927296,1495927551,GB
+1495927552,1495932927,RO
+1495932928,1495933439,IR
+1495933440,1495939071,RO
+1495939072,1495939583,IR
+1495939584,1495941119,RO
1495941120,1495942143,MD
-1495942144,1495943167,RO
+1495942144,1495942655,IR
+1495942656,1495943167,RO
1495943168,1495945215,MD
1495945216,1495951359,RO
1495951360,1495952383,MD
1495952384,1495957503,RO
1495957504,1495958527,MD
-1495958528,1495966719,RO
-1495966720,1495967743,MD
+1495958528,1495963135,RO
+1495963136,1495963647,IR
+1495963648,1495963903,RO
+1495963904,1495964415,GB
+1495964416,1495967743,RO
1495967744,1495968767,NL
1495968768,1495970815,RO
1495970816,1495971839,MD
1495971840,1495982079,RO
1495982080,1495983103,MD
-1495983104,1495986175,RO
-1495986176,1495988223,MD
-1495988224,1495990271,RO
+1495983104,1495983615,IR
+1495983616,1495990271,RO
1495990272,1495994367,IR
-1495994368,1496004607,RO
-1496004608,1496005631,MD
-1496005632,1496018943,RO
-1496018944,1496020991,MD
-1496020992,1496023039,RO
+1495994368,1495998463,RO
+1495998464,1495998719,SG
+1495998720,1495999487,RO
+1495999488,1495999999,IR
+1496000000,1496005631,RO
+1496005632,1496005887,GB
+1496005888,1496008191,RO
+1496008192,1496008703,IR
+1496008704,1496012799,RO
+1496012800,1496016895,IR
+1496016896,1496018943,RO
+1496018944,1496019967,FR
+1496019968,1496023039,RO
1496023040,1496024063,MD
1496024064,1496033279,RO
1496033280,1496034303,MD
-1496034304,1496053759,RO
-1496053760,1496055807,MD
-1496055808,1496078335,RO
+1496034304,1496036863,RO
+1496036864,1496037375,IR
+1496037376,1496038399,RO
+1496038400,1496038911,IR
+1496038912,1496042495,RO
+1496042496,1496043007,IR
+1496043008,1496045567,RO
+1496045568,1496049663,IR
+1496049664,1496051711,SE
+1496051712,1496055807,RO
+1496055808,1496057855,SE
+1496057856,1496058111,DE
+1496058112,1496078335,RO
1496078336,1496079359,MD
-1496079360,1496084991,RO
+1496079360,1496084479,RO
+1496084480,1496084991,IR
1496084992,1496085247,MD
-1496085248,1496094719,RO
-1496094720,1496095743,MD
-1496095744,1496121343,RO
+1496085248,1496086015,RO
+1496086016,1496086527,IR
+1496086528,1496093183,RO
+1496093184,1496093695,IR
+1496093696,1496104447,RO
+1496104448,1496104959,IR
+1496104960,1496107519,RO
+1496107520,1496108031,IR
+1496108032,1496119295,RO
+1496119296,1496121343,SE
1496121344,1496122367,MD
-1496122368,1496131583,RO
+1496122368,1496130559,RO
+1496130560,1496131583,ES
1496131584,1496132607,MD
1496132608,1496133631,RO
1496133632,1496137727,IR
-1496137728,1496197119,RO
+1496137728,1496138495,RO
+1496138496,1496138751,NL
+1496138752,1496139263,IR
+1496139264,1496141823,RO
+1496141824,1496142335,IR
+1496142336,1496150015,RO
+1496150016,1496152063,IR
+1496152064,1496153599,RO
+1496153600,1496154111,IR
+1496154112,1496180223,RO
+1496180224,1496180735,IR
+1496180736,1496182783,SE
+1496182784,1496188927,RO
+1496188928,1496189951,ES
+1496189952,1496190975,RO
+1496190976,1496191999,SE
+1496192000,1496192255,RO
+1496192256,1496193023,SE
+1496193024,1496197119,RO
1496197120,1496197631,MD
-1496197632,1496228863,RO
+1496197632,1496198143,RO
+1496198144,1496198655,IR
+1496198656,1496202239,RO
+1496202240,1496202751,IR
+1496202752,1496203263,RO
+1496203264,1496205311,IT
+1496205312,1496210943,RO
+1496210944,1496211455,IR
+1496211456,1496213503,RO
+1496213504,1496215551,IT
+1496215552,1496228863,RO
1496228864,1496229887,MD
-1496229888,1496238079,RO
-1496238080,1496240127,MD
-1496240128,1496276735,RO
+1496229888,1496231935,RO
+1496231936,1496232959,PS
+1496232960,1496233215,RO
+1496233216,1496233983,PS
+1496233984,1496236031,RO
+1496236032,1496238079,IT
+1496238080,1496240127,IQ
+1496240128,1496268799,RO
+1496268800,1496272895,IR
+1496272896,1496276735,RO
1496276736,1496276991,MD
-1496276992,1496295423,RO
+1496276992,1496285183,RO
+1496285184,1496293375,IR
+1496293376,1496295423,RO
1496295424,1496297471,GB
1496297472,1496299519,MD
-1496299520,1496317951,RO
+1496299520,1496301567,SE
+1496301568,1496317951,RO
1496317952,1497366527,DE
1497366528,1498415103,PL
1498415104,1499463679,FR
@@ -22702,7 +22674,9 @@
1499856896,1499987967,CZ
1499987968,1499996159,AT
1499996160,1500004351,GB
-1500004352,1500020735,RU
+1500004352,1500008447,RU
+1500008448,1500012543,IR
+1500012544,1500020735,RU
1500020736,1500028927,IS
1500028928,1500037119,NL
1500037120,1500045311,DK
@@ -22737,7 +22711,7 @@
1500184576,1500186623,IM
1500186624,1500188671,KW
1500188672,1500190719,FR
-1500190720,1500194815,RU
+1500192768,1500194815,RU
1500194816,1500196863,GB
1500196864,1500198911,ES
1500198912,1500200959,GB
@@ -22816,21 +22790,28 @@
1502920704,1502937087,RU
1502937088,1502953471,RO
1502953472,1502969855,MD
-1502969856,1502975231,FR
+1502969856,1502973951,FR
+1502973952,1502974975,DE
+1502974976,1502975231,FR
1502975232,1502975247,GB
1502975248,1502975327,FR
1502975328,1502975359,GB
1502975360,1502975743,FR
-1502975744,1502975999,DE
-1502976000,1502978047,FR
+1502975744,1502977023,DE
+1502977024,1502978047,FR
1502978048,1502979071,US
1502979072,1502979135,FR
1502979136,1502979199,GB
1502979200,1502979215,FR
1502979216,1502979231,CZ
-1502979232,1502980351,FR
+1502979232,1502979263,IE
+1502979264,1502980351,FR
1502980352,1502980607,US
-1502980608,1502981887,FR
+1502980608,1502980879,FR
+1502980880,1502980895,DE
+1502980896,1502980991,FR
+1502980992,1502981119,DE
+1502981120,1502981887,FR
1502981888,1502982143,NL
1502982144,1502986239,FR
1502986240,1502999734,DE
@@ -23032,7 +23013,28 @@
1503905624,1503905647,DE
1503905648,1503905655,IT
1503905656,1503905663,AT
-1503905664,1503920127,DE
+1503905664,1503905863,DE
+1503905864,1503905871,FI
+1503905872,1503905895,DE
+1503905896,1503905903,GB
+1503905904,1503905983,DE
+1503905984,1503905991,UA
+1503905992,1503906015,DE
+1503906016,1503906023,AT
+1503906024,1503906031,DE
+1503906032,1503906039,SK
+1503906040,1503906055,DE
+1503906056,1503906063,CH
+1503906064,1503906071,TR
+1503906072,1503906111,DE
+1503906112,1503906175,TR
+1503906176,1503906343,DE
+1503906344,1503906351,AT
+1503906352,1503906383,DE
+1503906384,1503906391,GR
+1503906392,1503906407,DE
+1503906408,1503906415,MX
+1503906416,1503920127,DE
1503920128,1503985663,HR
1503985664,1504018431,IR
1504018432,1504051199,RO
@@ -23041,7 +23043,9 @@
1504116736,1504149503,PL
1504149504,1504149759,GB
1504149760,1504150015,ES
-1504150016,1504154623,GB
+1504150016,1504151039,GB
+1504151040,1504151295,FR
+1504151296,1504154623,GB
1504154624,1504155647,IE
1504155648,1504247807,GB
1504247808,1504313343,RU
@@ -23142,17 +23146,23 @@
1506410496,1506422063,DE
1506422064,1506422079,GB
1506422080,1506443263,DE
-1506443264,1506445103,GB
+1506443264,1506444757,GB
+1506444758,1506444758,DE
+1506444759,1506445103,GB
1506445104,1506445119,DE
1506445120,1506445135,GB
1506445136,1506445151,DE
1506445152,1506445167,GB
1506445168,1506445183,DE
-1506445184,1506446823,GB
+1506445184,1506446143,GB
+1506446144,1506446151,FR
+1506446152,1506446823,GB
1506446824,1506446831,NL
1506446832,1506448319,GB
1506448320,1506448383,IT
-1506448384,1506450047,GB
+1506448384,1506449263,GB
+1506449264,1506449279,BE
+1506449280,1506450047,GB
1506450048,1506450111,CH
1506450112,1506450863,GB
1506450864,1506450879,CZ
@@ -23162,11 +23172,17 @@
1506456534,1506456534,IT
1506456535,1506458244,GB
1506458245,1506458245,CH
-1506458246,1506459968,GB
+1506458246,1506459207,GB
+1506459208,1506459247,BE
+1506459248,1506459295,GB
+1506459296,1506459327,BE
+1506459328,1506459968,GB
1506459969,1506459969,FR
1506459970,1506460151,GB
1506460152,1506460159,FR
-1506460160,1506462511,GB
+1506460160,1506460679,GB
+1506460680,1506460683,IT
+1506460684,1506462511,GB
1506462512,1506462527,FR
1506462528,1506462719,GB
1506462720,1506462975,IT
@@ -23225,9 +23241,7 @@
1506793472,1506795519,RU
1506795520,1506799615,CH
1506799616,1506801663,LV
-1506801664,1506803135,DE
-1506803136,1506803151,CH
-1506803152,1506803711,DE
+1506801664,1506803711,DE
1506803712,1506869247,RU
1506869248,1506934783,UA
1506934784,1507000319,GR
@@ -23241,11 +23255,18 @@
1507459072,1507483903,KZ
1507483904,1507484159,NZ
1507484160,1507524607,KZ
-1507524608,1507590143,EE
+1507524608,1507525631,EE
+1507525632,1507531775,KZ
+1507531776,1507540991,EE
+1507540992,1507557375,IR
+1507557376,1507573759,EE
+1507573760,1507590143,IR
1507590144,1507655679,NL
1507655680,1507659775,DE
1507659776,1507663871,RU
-1507663872,1507667967,IT
+1507663872,1507665791,IT
+1507665792,1507665919,GR
+1507665920,1507667967,IT
1507667968,1507672063,RU
1507672064,1507676159,EE
1507676160,1507680255,IR
@@ -23378,7 +23399,9 @@
1509883904,1509900287,NL
1509900288,1509916671,RU
1509916672,1509933055,GB
-1509933056,1509949439,NL
+1509933056,1509941247,NL
+1509941248,1509945343,SE
+1509945344,1509949439,NL
1509949440,1510605311,FR
1510605312,1510605823,RE
1510605824,1510608383,FR
@@ -23550,7 +23573,7 @@
1512025600,1512026879,GF
1512026880,1512028159,FR
1512028160,1512030207,GF
-1512030208,1512046591,YT
+1512030208,1512046591,MQ
1512046592,1512308991,FR
1512308992,1512309247,GP
1512309248,1512310271,FR
@@ -23687,47 +23710,15 @@
1512370944,1512372223,GP
1512372224,1512372735,FR
1512372736,1512372991,GP
-1512372992,1514111231,FR
-1514111232,1514111743,GP
-1514111744,1514111999,FR
-1514112000,1514112255,GP
-1514112256,1514113791,FR
-1514113792,1514114047,GP
-1514114048,1514114815,FR
-1514114816,1514115071,GP
-1514115072,1514115583,FR
-1514115584,1514115839,GP
-1514115840,1514116351,FR
-1514116352,1514116607,GP
-1514116608,1514119935,FR
-1514119936,1514120191,GP
-1514120192,1514121215,FR
-1514121216,1514121471,GP
-1514121472,1514123007,FR
-1514123008,1514123263,GP
-1514123264,1514124287,FR
-1514124288,1514124543,GP
-1514124544,1514127871,FR
-1514127872,1514128127,RE
-1514128128,1514128895,FR
-1514128896,1514129407,RE
-1514129408,1514131967,FR
-1514131968,1514132223,RE
-1514132224,1514132735,FR
-1514132736,1514132991,RE
-1514132992,1514134271,FR
-1514134272,1514134527,RE
-1514134528,1514136063,FR
-1514136064,1514136319,RE
-1514136320,1514137599,FR
-1514137600,1514137855,RE
-1514137856,1514142207,FR
-1514142208,1514142719,RE
-1514142720,1514142975,FR
-1514142976,1514143231,RE
-1514143232,1514143743,FR
+1512372992,1514143743,FR
1514143744,1514176511,SK
-1514176512,1515467007,FR
+1514176512,1514471423,FR
+1514471424,1514536959,ES
+1514536960,1514602495,FR
+1514602496,1514668031,ES
+1514668032,1514799103,FR
+1514799104,1514930175,ES
+1514930176,1515467007,FR
1515467008,1515467263,ES
1515467264,1515467519,FR
1515467520,1515468031,US
@@ -23739,14 +23730,16 @@
1515470080,1515470335,FR
1515470336,1515470847,US
1515470848,1515488511,FR
-1515488512,1515488895,US
-1515488896,1515489023,FR
+1515488512,1515489023,US
1515489024,1515489039,DE
1515489040,1515489055,FR
1515489056,1515489087,DE
1515489088,1515489151,FR
1515489152,1515489167,ES
-1515489168,1518338047,FR
+1515489168,1515489535,FR
+1515489536,1515489791,US
+1515489792,1515491007,NL
+1515491008,1518338047,FR
1518338048,1518370815,DE
1518370816,1518409727,NL
1518409728,1518412031,SE
@@ -23793,15 +23786,17 @@
1518635008,1518637055,NL
1518637056,1518641151,SE
1518641152,1518649343,NL
-1518649344,1518665727,SE
-1518665728,1518727167,RU
+1518649344,1518682879,SE
+1518682880,1518683135,RU
+1518683136,1518723071,SE
+1518723072,1518727167,EE
1518727168,1518731263,SE
1518731264,1518747647,DE
1518747648,1518772223,LT
1518772224,1518780415,NL
1518780416,1518796799,HR
1518796800,1518927871,DE
-1518927872,1518944255,RU
+1518927872,1518944255,SE
1518944256,1518945023,NL
1518945024,1518945535,SE
1518945536,1518946303,NL
@@ -23856,9 +23851,33 @@
1518992384,1518992639,NL
1518992640,1518992895,SE
1518992896,1518993152,NL
-1518993153,1518993407,SE
-1518993408,1519190015,RU
-1519190016,1519206399,SE
+1518993153,1519190271,SE
+1519190272,1519190783,NL
+1519190784,1519191551,SE
+1519191552,1519192063,NL
+1519192064,1519193343,SE
+1519193344,1519194111,NL
+1519194112,1519194623,SE
+1519194624,1519194879,NL
+1519194880,1519195135,SE
+1519195136,1519196671,NL
+1519196672,1519197183,SE
+1519197184,1519197951,NL
+1519197952,1519200255,SE
+1519200256,1519200511,EE
+1519200512,1519201023,SE
+1519201024,1519201279,EE
+1519201280,1519202303,SE
+1519202304,1519202815,EE
+1519202816,1519203071,SE
+1519203072,1519203327,EE
+1519203328,1519203583,SE
+1519203584,1519204351,EE
+1519204352,1519204607,SE
+1519204608,1519204863,EE
+1519204864,1519205631,SE
+1519205632,1519206143,EE
+1519206144,1519206399,SE
1519206400,1519208447,LV
1519208448,1519214591,SE
1519214592,1519219455,LV
@@ -23869,15 +23888,20 @@
1519260672,1519263743,SE
1519263744,1519290367,NL
1519290368,1519292415,SE
-1519292416,1519293951,LT
-1519293952,1519296511,SE
-1519296512,1519299583,LT
-1519299584,1519300607,SE
-1519300608,1519304703,LT
-1519304704,1519312895,SE
+1519292416,1519294463,LT
+1519294464,1519296511,SE
+1519296512,1519304703,LT
+1519304704,1519305983,NL
+1519305984,1519306239,SE
+1519306240,1519307775,NL
+1519307776,1519308031,SE
+1519308032,1519308287,NL
+1519308288,1519308543,SE
+1519308544,1519308799,NL
+1519308800,1519312895,SE
1519312896,1519321087,LT
-1519321088,1519386623,RU
-1519386624,1519394815,SE
+1519321088,1519337471,KZ
+1519337472,1519394815,SE
1519394816,1519398911,HR
1519398912,1519403007,SE
1519403008,1519419391,NL
@@ -23894,9 +23918,7 @@
1519931392,1519934463,NL
1519934464,1519936191,GB
1519936192,1519936255,DK
-1519936256,1519938559,GB
-1519938560,1519939583,NL
-1519939584,1519943679,GB
+1519936256,1519943679,GB
1519943680,1519976447,AT
1519976448,1520009215,DE
1520009216,1520041983,SY
@@ -24045,8 +24067,8 @@
1533730816,1533732863,NL
1533732864,1533734911,RU
1533734912,1533739007,CZ
-1533739008,1533804543,RU
-1533804544,1533837311,DE
+1533739008,1533820927,RU
+1533820928,1533837311,DE
1533837312,1533845503,IR
1533845504,1533847551,GB
1533847552,1533849599,RU
@@ -24079,248 +24101,52 @@
1534590976,1534656511,HU
1534656512,1534711807,FR
1534711808,1534712831,BE
-1534712832,1534713919,FR
-1534713920,1534713927,CH
-1534713928,1534714055,FR
-1534714056,1534714063,PL
-1534714064,1534714079,NL
-1534714080,1534714207,FR
-1534714208,1534714223,NL
-1534714224,1534714255,FR
-1534714256,1534714259,FI
-1534714260,1534714279,FR
-1534714280,1534714283,DE
-1534714284,1534714287,CH
-1534714288,1534714323,FR
-1534714324,1534714327,ES
-1534714328,1534714403,FR
-1534714404,1534714431,ES
-1534714432,1534714539,FR
-1534714540,1534714543,ES
-1534714544,1534714575,FR
-1534714576,1534714583,NL
-1534714584,1534714751,FR
+1534712832,1534714415,FR
+1534714416,1534714431,ES
+1534714432,1534714639,FR
+1534714640,1534714655,IE
+1534714656,1534714751,FR
1534714752,1534714767,DE
-1534714768,1534714799,FR
-1534714800,1534714815,GB
-1534714816,1534714927,FR
-1534714928,1534714931,DE
-1534714932,1534715211,FR
-1534715212,1534715215,LT
-1534715216,1534715263,FR
+1534714768,1534715263,FR
1534715264,1534715267,IT
-1534715268,1534715295,FR
-1534715296,1534715299,GB
-1534715300,1534715359,FR
-1534715360,1534715367,DE
-1534715368,1534715415,FR
-1534715416,1534715419,PL
-1534715420,1534715423,FR
-1534715424,1534715431,IT
-1534715432,1534715439,FR
-1534715440,1534715447,IT
-1534715448,1534715631,FR
-1534715632,1534715639,DE
-1534715640,1534715671,FR
-1534715672,1534715675,CZ
-1534715676,1534715711,FR
-1534715712,1534715727,GB
-1534715728,1534715775,FR
-1534715776,1534715783,ES
-1534715784,1534715791,IT
-1534715792,1534715871,FR
+1534715268,1534715871,FR
1534715872,1534715875,ES
-1534715876,1534715879,FR
-1534715880,1534715883,PL
-1534715884,1534715935,FR
+1534715876,1534715935,FR
1534715936,1534715939,NL
-1534715940,1534716007,FR
-1534716008,1534716015,IT
-1534716016,1534716031,ES
-1534716032,1534716095,FR
-1534716096,1534716127,NL
-1534716128,1534716131,GB
-1534716132,1534716163,FR
-1534716164,1534716167,BE
-1534716168,1534716303,FR
-1534716304,1534716307,GB
-1534716308,1534716367,FR
-1534716368,1534716375,IT
+1534715940,1534716095,FR
+1534716096,1534716099,DE
+1534716100,1534716111,FR
+1534716112,1534716115,DE
+1534716116,1534716375,FR
1534716376,1534716379,ES
-1534716380,1534716383,BE
-1534716384,1534716447,FR
-1534716448,1534716463,ES
-1534716464,1534716575,FR
-1534716576,1534716591,NL
-1534716592,1534716623,FR
-1534716624,1534716639,BE
-1534716640,1534716647,IT
-1534716648,1534716763,FR
-1534716764,1534716767,BE
-1534716768,1534716775,DE
-1534716776,1534716783,FR
-1534716784,1534716791,NL
-1534716792,1534716799,LT
-1534716800,1534716803,FI
-1534716804,1534716807,NL
-1534716808,1534717035,FR
-1534717036,1534717039,IT
-1534717040,1534717063,FR
-1534717064,1534717071,IT
-1534717072,1534717087,GB
-1534717088,1534717199,FR
+1534716380,1534717199,FR
1534717200,1534717215,GB
1534717216,1534717247,FR
1534717248,1534717251,ES
-1534717252,1534717255,FR
-1534717256,1534717263,IT
+1534717252,1534717263,FR
1534717264,1534717267,ES
-1534717268,1534717323,FR
-1534717324,1534717327,CH
-1534717328,1534717343,NL
-1534717344,1534717407,FR
-1534717408,1534717415,IT
-1534717416,1534717551,FR
-1534717552,1534717567,PL
-1534717568,1534717587,FR
-1534717588,1534717591,GB
-1534717592,1534717599,FR
-1534717600,1534717631,PT
-1534717632,1534717663,FR
+1534717268,1534717663,FR
1534717664,1534717679,GB
-1534717680,1534717695,BE
-1534717696,1534717711,PT
-1534717712,1534717791,FR
-1534717792,1534717823,NL
-1534717824,1534717915,FR
-1534717916,1534717919,ES
-1534717920,1534717923,FR
+1534717680,1534717923,FR
1534717924,1534717927,IT
-1534717928,1534717935,FR
-1534717936,1534717951,CZ
-1534717952,1534717991,FR
-1534717992,1534717995,FI
-1534717996,1534718007,FR
-1534718008,1534718011,ES
-1534718012,1534718271,FR
-1534718272,1534718335,PT
-1534718336,1534718351,FR
-1534718352,1534718359,IT
-1534718360,1534718363,GB
-1534718364,1534718475,FR
-1534718476,1534718479,GB
-1534718480,1534718535,FR
-1534718536,1534718539,IT
-1534718540,1534718575,FR
-1534718576,1534718591,LT
-1534718592,1534718631,FR
-1534718632,1534718639,GB
-1534718640,1534718655,FR
-1534718656,1534718687,GB
-1534718688,1534718759,FR
-1534718760,1534718767,ES
-1534718768,1534718819,FR
-1534718820,1534718823,PL
-1534718824,1534719087,FR
-1534719088,1534719103,GB
-1534719104,1534719335,FR
-1534719336,1534719339,IT
-1534719340,1534719423,FR
-1534719424,1534719439,PL
-1534719440,1534719459,FR
-1534719460,1534719463,DE
-1534719464,1534719471,FR
-1534719472,1534719487,BE
-1534719488,1534719507,FR
-1534719508,1534719511,FI
-1534719512,1534719519,FR
-1534719520,1534719535,GB
-1534719536,1534719567,FR
-1534719568,1534719575,LT
-1534719576,1534719583,IT
-1534719584,1534719599,PT
-1534719600,1534719607,PL
-1534719608,1534719615,FR
-1534719616,1534719631,PL
-1534719632,1534719747,FR
+1534717928,1534718763,FR
+1534718764,1534718767,ES
+1534718768,1534719747,FR
1534719748,1534719751,ES
1534719752,1534719783,FR
1534719784,1534719787,ES
-1534719788,1534719791,PT
-1534719792,1534719815,FR
-1534719816,1534719823,GB
-1534719824,1534719831,FR
-1534719832,1534719839,PL
-1534719840,1534719967,FR
-1534719968,1534719983,IT
-1534719984,1534720003,FR
+1534719788,1534720003,FR
1534720004,1534720007,ES
1534720008,1534720011,IT
-1534720012,1534720015,FR
-1534720016,1534720023,IT
+1534720012,1534720023,FR
1534720024,1534720027,PL
-1534720028,1534720047,FR
-1534720048,1534720063,GB
-1534720064,1534720095,FR
-1534720096,1534720111,IT
-1534720112,1534720179,FR
+1534720028,1534720179,FR
1534720180,1534720183,ES
-1534720184,1534720211,FR
-1534720212,1534720215,DE
-1534720216,1534720223,GB
-1534720224,1534720255,FR
-1534720256,1534720271,PL
-1534720272,1534720415,FR
-1534720416,1534720419,ES
-1534720420,1534720423,FR
-1534720424,1534720431,IT
-1534720432,1534720467,FR
-1534720468,1534720471,ES
+1534720184,1534720471,FR
1534720472,1534720479,DE
-1534720480,1534720527,FR
-1534720528,1534720531,BE
-1534720532,1534720647,FR
-1534720648,1534720655,ES
-1534720656,1534720735,FR
-1534720736,1534720739,PL
-1534720740,1534720743,FR
-1534720744,1534720767,GB
-1534720768,1534720787,FR
-1534720788,1534720791,IT
-1534720792,1534720943,FR
-1534720944,1534720951,LT
-1534720952,1534720967,FR
-1534720968,1534720975,IT
-1534720976,1534720991,FR
-1534720992,1534721007,IT
-1534721008,1534721035,FR
-1534721036,1534721039,PT
-1534721040,1534721071,FR
-1534721072,1534721087,IT
-1534721088,1534721115,FR
-1534721116,1534721119,CH
-1534721120,1534721195,FR
-1534721196,1534721199,DE
-1534721200,1534721215,IT
-1534721216,1534721295,FR
-1534721296,1534721311,GB
-1534721312,1534721391,FR
-1534721392,1534721407,GB
-1534721408,1534721487,FR
-1534721488,1534721491,BE
-1534721492,1534721587,FR
-1534721588,1534721591,LT
-1534721592,1534721619,FR
+1534720480,1534721619,FR
1534721620,1534721623,ES
-1534721624,1534721707,FR
-1534721708,1534721711,IT
-1534721712,1534721727,FR
-1534721728,1534721743,GB
-1534721744,1534721827,FR
-1534721828,1534721831,DE
-1534721832,1534721971,FR
-1534721972,1534721975,GB
-1534721976,1534722047,FR
+1534721624,1534722047,FR
1534722048,1534787583,RU
1534787584,1534791679,RO
1534791680,1534795775,RU
@@ -24338,12 +24164,14 @@
1534849024,1534853119,NL
1534853120,1534918655,UA
1534918656,1534984191,GB
-1534984192,1534985215,NO
-1534985216,1535049727,ES
+1534984192,1534988287,NO
+1534988288,1535049727,ES
1535049728,1535115263,SK
1535115264,1535197183,AT
1535197184,1535203359,EE
-1535203360,1535246335,SE
+1535203360,1535205375,SE
+1535205376,1535213567,EE
+1535213568,1535246335,SE
1535246336,1535311871,AT
1535311872,1535344639,NO
1535344640,1535350783,LV
@@ -24378,18 +24206,17 @@
1535631360,1535635455,GB
1535635456,1535639551,AZ
1535639552,1535672319,GB
-1535672320,1535706111,DE
-1535706112,1535707135,CH
-1535707136,1535709183,DE
-1535709184,1535715327,CH
-1535715328,1535717375,DE
-1535717376,1535721471,CH
-1535721472,1535721727,DE
-1535721728,1535727871,CH
-1535727872,1535728127,DE
-1535728128,1535732735,CH
-1535732736,1535735807,DE
-1535735808,1535737855,CH
+1535672320,1535723519,DE
+1535723520,1535724287,CH
+1535724288,1535725567,DE
+1535725568,1535725823,CH
+1535725824,1535727615,DE
+1535727616,1535727871,CH
+1535727872,1535728639,DE
+1535728640,1535728895,CH
+1535728896,1535729919,DE
+1535729920,1535730687,CH
+1535730688,1535737855,DE
1535737856,1535770623,HU
1535770624,1535803391,CH
1535803392,1535836159,GR
@@ -24461,7 +24288,9 @@
1536425984,1536442367,SK
1536442368,1536458751,RS
1536458752,1536475135,BG
-1536475136,1536491519,NL
+1536475136,1536479231,NL
+1536479232,1536483327,GB
+1536483328,1536491519,NL
1536491520,1536499711,NO
1536499712,1536503807,SE
1536503808,1536507903,NO
@@ -24473,9 +24302,7 @@
1536589824,1536614399,PL
1536614400,1536622591,DK
1536622592,1536626687,GB
-1536626688,1536626943,DE
-1536626944,1536627072,AT
-1536627073,1536630783,DE
+1536626688,1536630783,DE
1536630784,1536634879,RU
1536634880,1536643071,FR
1536643072,1536647167,TR
@@ -24591,8 +24418,7 @@
1539260416,1539276799,SK
1539276800,1539280895,SE
1539280896,1539284991,FR
-1539284992,1539287039,DE
-1539287040,1539289087,TR
+1539284992,1539289087,TR
1539289088,1539293183,RU
1539293184,1539297279,AZ
1539297280,1539301375,BG
@@ -24701,7 +24527,7 @@
1539427328,1539428351,UA
1539428352,1539429375,PL
1539429376,1539434495,RU
-1539434496,1539435519,UA
+1539434496,1539435519,GB
1539435520,1539437567,RU
1539437568,1539438591,GB
1539439616,1539440639,UA
@@ -24803,7 +24629,8 @@
1539503104,1539504127,RU
1539504128,1539504639,AT
1539504640,1539505151,UA
-1539505152,1539506175,RU
+1539505152,1539505663,RU
+1539505664,1539506175,AT
1539506176,1539506687,NL
1539506688,1539507199,UA
1539507200,1539508223,RO
@@ -25047,7 +24874,6 @@
1539711488,1539711743,UA
1539711744,1539711999,DE
1539712000,1539712255,UA
-1539712256,1539712511,NL
1539712512,1539713023,RU
1539713024,1539713279,UA
1539713536,1539713791,DK
@@ -25182,7 +25008,6 @@
1539751168,1539751423,DE
1539751424,1539751679,SI
1539751680,1539751935,FR
-1539751936,1539752191,DE
1539752192,1539752447,SE
1539752448,1539752703,PL
1539752704,1539752959,AT
@@ -25504,7 +25329,7 @@
1539891200,1539893247,RU
1539893248,1539894271,UA
1539894272,1539895295,PL
-1539896320,1539898367,UA
+1539897344,1539898367,UA
1539898368,1539899391,CZ
1539899392,1539900415,RU
1539901440,1539902463,RU
@@ -25541,7 +25366,7 @@
1539942400,1539943423,UA
1539943424,1539944447,BG
1539944448,1539946495,UA
-1539946496,1539947519,RU
+1539946496,1539947519,JE
1539947520,1539948543,UA
1539948544,1539949567,RO
1539950592,1539950847,GB
@@ -25623,7 +25448,6 @@
1540050944,1540052991,RU
1540052992,1540054015,UA
1540055040,1540056063,NO
-1540056064,1540057087,NL
1540057088,1540057343,PL
1540057344,1540057599,RU
1540057600,1540057855,US
@@ -25735,8 +25559,8 @@
1540199424,1540200447,CH
1540200448,1540201471,IL
1540201472,1540202495,UA
-1540202496,1540203519,RU
-1540203520,1540204543,UA
+1540202496,1540204287,RU
+1540204288,1540204543,UA
1540204544,1540205567,RU
1540205568,1540206591,DE
1540206592,1540208639,RU
@@ -26357,7 +26181,6 @@
1540477952,1540478207,NO
1540478208,1540478463,NL
1540478464,1540478719,UA
-1540478720,1540478975,SA
1540478976,1540479231,HR
1540479232,1540479487,GB
1540479488,1540479743,RU
@@ -26433,7 +26256,9 @@
1540535296,1540536319,SK
1540536320,1540537343,RU
1540537344,1540538367,UA
-1540538368,1540542463,RU
+1540538368,1540538879,RU
+1540538880,1540539391,UA
+1540539392,1540542463,RU
1540542464,1540543487,PL
1540543488,1540544511,DE
1540544512,1540545535,RU
@@ -26506,7 +26331,6 @@
1540624384,1540624639,IR
1540624640,1540624895,BG
1540624896,1540625151,GB
-1540625152,1540625407,IR
1540625664,1540625919,FR
1540625920,1540626175,UA
1540626176,1540626431,RO
@@ -26772,7 +26596,6 @@
1540703488,1540703743,NL
1540703744,1540703999,DK
1540704000,1540704255,PL
-1540704256,1540704511,KZ
1540704512,1540704767,IE
1540705280,1540705535,RO
1540705536,1540705791,AT
@@ -26791,7 +26614,6 @@
1540708864,1540709119,FR
1540709120,1540709375,DE
1540709376,1540709631,UA
-1540709632,1540709887,KZ
1540709888,1540710143,UA
1540710144,1540710399,NL
1540710400,1540710655,PL
@@ -26836,7 +26658,6 @@
1540722688,1540722943,RU
1540722944,1540723455,FR
1540723456,1540723711,SI
-1540723712,1540723967,RU
1540723968,1540724223,UA
1540724224,1540724479,HU
1540724736,1540724991,CH
@@ -26955,11 +26776,8 @@
1540779008,1540780031,NL
1540780032,1540781055,UA
1540781056,1540783103,RU
-1540783104,1540784383,UA
-1540784384,1540785151,RU
-1540785152,1540787199,UA
-1540787200,1540788223,KZ
-1540788224,1540790271,RU
+1540783104,1540787199,UA
+1540787200,1540790271,RU
1540790272,1540791295,KW
1540791296,1540792319,CZ
1540792320,1540793343,UA
@@ -27020,9 +26838,7 @@
1540860928,1540861951,KZ
1540861952,1540862975,BY
1540862976,1540865023,GB
-1540865024,1540867071,RU
-1540867072,1540868095,KZ
-1540868096,1540872191,RU
+1540865024,1540872191,RU
1540872192,1540873215,BG
1540873216,1540875263,RU
1540875264,1540876287,PL
@@ -27104,7 +26920,7 @@
1540901888,1540902143,GR
1540902144,1540902399,FI
1540902400,1540902655,RO
-1540902656,1540902911,DE
+1540902656,1540902911,CH
1540902912,1540903167,RO
1540903168,1540903423,RU
1540903424,1540903679,GB
@@ -27327,7 +27143,6 @@
1540982272,1540982783,GB
1540982784,1540983295,RU
1540983296,1540983551,ME
-1540983552,1540983807,CH
1540983808,1540984063,FR
1540984064,1540984319,DE
1540984320,1540984575,PL
@@ -27454,7 +27269,9 @@
1541041152,1541044223,RU
1541044224,1541045247,US
1541045248,1541046271,NL
-1541046272,1541051391,RU
+1541046272,1541047295,RU
+1541047296,1541047551,UA
+1541047552,1541051391,RU
1541051392,1541052415,NL
1541052416,1541053439,RO
1541053440,1541054463,PL
@@ -27476,7 +27293,7 @@
1541070848,1541071871,IT
1541071872,1541072895,RU
1541072896,1541073919,CZ
-1541073920,1541074943,RO
+1541073920,1541074943,GB
1541074944,1541075967,PL
1541075968,1541078015,RU
1541078016,1541079039,RO
@@ -27527,8 +27344,7 @@
1541133312,1541134335,RO
1541134336,1541135359,SE
1541135360,1541136383,UA
-1541136384,1541138431,RU
-1541138432,1541139455,UA
+1541136384,1541139455,RU
1541139456,1541140479,HU
1541140480,1541142527,CZ
1541142528,1541143551,RU
@@ -27590,7 +27406,7 @@
1541159680,1541159935,LT
1541159936,1541160447,UA
1541160448,1541160703,RU
-1541160704,1541160959,MD
+1541160704,1541160959,RO
1541160960,1541161215,CH
1541161216,1541161471,TR
1541161472,1541161727,ES
@@ -27692,6 +27508,7 @@
1541187840,1541188351,RU
1541188352,1541188607,FR
1541188608,1541188863,HU
+1541188864,1541189119,RU
1541189120,1541189375,UA
1541189376,1541189631,GB
1541189888,1541190143,PL
@@ -27889,7 +27706,7 @@
1541282816,1541283839,RU
1541283840,1541286911,UA
1541286912,1541287935,DE
-1541287936,1541288959,UA
+1541287936,1541288959,RU
1541288960,1541289983,CZ
1541289984,1541291007,PL
1541291008,1541293055,UA
@@ -28198,7 +28015,7 @@
1541420032,1541420543,RU
1541420544,1541421055,NL
1541421056,1541421567,PL
-1541421568,1541422079,GB
+1541421568,1541422079,CZ
1541422080,1541422591,PL
1541422592,1541423103,RU
1541423616,1541424127,AT
@@ -28760,7 +28577,7 @@
1541795584,1541795839,ES
1541795840,1541796863,UA
1541796864,1541797375,RU
-1541797376,1541798143,GB
+1541797376,1541797887,GB
1541798144,1541798911,PL
1541798912,1541799935,CZ
1541799936,1541800447,FR
@@ -28777,7 +28594,7 @@
1541805824,1541806079,RU
1541806080,1541806335,PL
1541806336,1541806591,UA
-1541806592,1541807103,RU
+1541806592,1541806847,RU
1541807104,1541808127,UA
1541808128,1541808383,IR
1541808384,1541809151,NL
@@ -29364,7 +29181,7 @@
1542159360,1542160127,PL
1542160128,1542160383,RU
1542160384,1542160895,UA
-1542160896,1542161407,RO
+1542160896,1542161407,GB
1542161408,1542162431,NL
1542162432,1542162943,RU
1542162944,1542163199,FR
@@ -29372,7 +29189,7 @@
1542163456,1542163711,GB
1542163712,1542163967,FR
1542163968,1542164479,UA
-1542164480,1542165759,RU
+1542164480,1542165503,RU
1542165760,1542166015,PL
1542166016,1542166527,IL
1542166528,1542167551,PL
@@ -29671,10 +29488,7 @@
1542342656,1542343167,FR
1542343168,1542343679,UA
1542343680,1542344447,PL
-1542344448,1542345215,RU
-1542345216,1542345471,UA
-1542345472,1542345727,RU
-1542345728,1542345983,UA
+1542344448,1542345727,RU
1542345984,1542346239,PL
1542346240,1542348287,RU
1542348288,1542348799,MD
@@ -29700,7 +29514,7 @@
1542359040,1542360319,RU
1542360320,1542360575,NL
1542360576,1542361087,PL
-1542361088,1542361343,LI
+1542361088,1542361343,CH
1542361344,1542361599,PL
1542361600,1542362111,UA
1542362112,1542362623,RO
@@ -29886,7 +29700,8 @@
1542458368,1542459391,UZ
1542459392,1542459647,RU
1542459648,1542459903,GB
-1542459904,1542461439,UA
+1542459904,1542460415,UA
+1542460416,1542461439,CZ
1542461440,1542461695,GB
1542461696,1542461951,RU
1542461952,1542462207,TR
@@ -29956,7 +29771,6 @@
1542498304,1542499583,RU
1542499584,1542499839,ES
1542499840,1542500095,GB
-1542500096,1542500351,UA
1542500352,1542500607,GB
1542500608,1542500863,RO
1542500864,1542501119,GB
@@ -30047,7 +29861,9 @@
1542543360,1542544383,RU
1542544384,1542544639,IR
1542544896,1542545407,GR
-1542545408,1542586367,UA
+1542545408,1542553599,UA
+1542553600,1542561791,RU
+1542561792,1542586367,UA
1542586368,1542594559,AZ
1542594560,1542597631,RU
1542597632,1542598143,IR
@@ -30072,7 +29888,6 @@
1542641664,1542641919,RO
1542641920,1542642175,AE
1542642176,1542642431,PL
-1542642432,1542642687,RU
1542642688,1542643199,PL
1542643200,1542643455,UA
1542643456,1542643711,NL
@@ -30084,9 +29899,11 @@
1542669568,1542669823,NO
1542669824,1542670079,DE
1542670080,1542670335,CH
-1542670336,1542671359,ES
+1542670336,1542670591,US
+1542670592,1542670847,ES
+1542670848,1542671359,NL
1542671360,1542671871,FR
-1542671872,1542672383,RS
+1542671872,1542672383,AT
1542672384,1542681087,RU
1542681088,1542681343,GB
1542681344,1542683135,RU
@@ -30165,7 +29982,6 @@
1542849536,1542850559,UA
1542850560,1542851583,GB
1542851584,1542851839,BG
-1542851840,1542852095,LU
1542852096,1542852351,KW
1542852352,1542852607,PL
1542852608,1542855167,RU
@@ -30217,9 +30033,11 @@
1542979584,1543110655,DE
1543110656,1543127039,UA
1543127040,1543143423,DE
-1543143424,1543167999,RO
+1543143424,1543159807,RO
+1543159808,1543167999,SE
1543168000,1543172095,MD
-1543172096,1543241727,RO
+1543172096,1543176191,RO
+1543176192,1543241727,IR
1543241728,1543503871,IT
1543503872,1545601023,GB
1545601024,1545674495,SE
@@ -30228,8 +30046,8 @@
1545863168,1545895935,RU
1545895936,1545928703,BA
1545928704,1545961471,SI
-1545961472,1545994239,RU
-1545994240,1545995263,CZ
+1545961472,1545994751,RU
+1545994752,1545995263,CZ
1545995264,1545995519,RU
1545995520,1545996287,CZ
1545996288,1545998335,RU
@@ -30243,8 +30061,7 @@
1546004736,1546005247,CZ
1546005248,1546006527,RU
1546006528,1546008575,UA
-1546008576,1546010623,BY
-1546010624,1546014719,CZ
+1546008576,1546014719,BY
1546014720,1546015743,RU
1546015744,1546027007,CZ
1546027008,1546059775,RU
@@ -30267,11 +30084,14 @@
1546121984,1546121987,ES
1546121988,1546122463,FR
1546122464,1546122479,DZ
-1546122480,1546122649,FR
+1546122480,1546122633,FR
+1546122634,1546122641,GB
+1546122642,1546122642,DE
+1546122643,1546122649,FR
1546122650,1546122650,PT
1546122651,1546122696,FR
-1546122697,1546122697,ES
-1546122698,1546125311,FR
+1546122697,1546122704,ES
+1546122705,1546125311,FR
1546125312,1546256383,GB
1546256384,1546264575,RU
1546264576,1546266623,TR
@@ -30388,7 +30208,8 @@
1547091968,1547108351,GE
1547108352,1547124735,RU
1547124736,1547141119,MK
-1547141120,1547157503,RO
+1547141120,1547149311,RO
+1547149312,1547157503,KZ
1547157504,1547173887,PL
1547173888,1547436031,ES
1547436032,1547440127,AT
@@ -30481,7 +30302,8 @@
1547665408,1547669503,GB
1547669504,1547673599,AT
1547673600,1547677695,NL
-1547677696,1547685887,RU
+1547677696,1547683839,RU
+1547683840,1547685887,FR
1547685888,1547689983,AT
1547689984,1547694079,IT
1547694080,1547698175,HU
@@ -30491,8 +30313,8 @@
1548159232,1548159235,ES
1548159236,1548159487,NL
1548159488,1548159999,GB
-1548160000,1548162479,NL
-1548162480,1548162495,FR
+1548160000,1548162463,NL
+1548162464,1548162495,FR
1548162496,1548169215,NL
1548169216,1548171263,DE
1548171264,1548172287,FR
@@ -30528,7 +30350,13 @@
1550843904,1550974975,UA
1550974976,1550979071,RO
1550979072,1550983167,IR
-1550983168,1551007743,RO
+1550983168,1550985215,RO
+1550985216,1550985727,PS
+1550985728,1550985983,RO
+1550985984,1550987263,PS
+1550987264,1550998527,RO
+1550998528,1550998783,NL
+1550998784,1551007743,RO
1551007744,1551106047,MD
1551106048,1551237119,DE
1551237120,1551368191,GR
@@ -30550,30 +30378,141 @@
1551604480,1551604735,SE
1551630336,1551892479,RU
1551892480,1556086783,FR
-1556086784,1557921791,DE
+1556086784,1557069823,DE
+1557069824,1557135359,GB
+1557135360,1557921791,DE
1557921792,1558052863,NO
1558052864,1558054399,FR
1558054400,1558054655,DE
-1558054656,1558079407,FR
+1558054656,1558056102,FR
+1558056103,1558056103,ES
+1558056104,1558079407,FR
1558079408,1558079415,PL
1558079416,1558079423,GB
1558079424,1558081175,FR
1558081176,1558081183,BE
-1558081184,1558084655,FR
+1558081184,1558083775,FR
+1558083776,1558083791,DE
+1558083792,1558084655,FR
1558084656,1558084659,BE
1558084660,1558085055,FR
1558085056,1558085071,GB
-1558085072,1558093531,FR
+1558085072,1558091351,FR
+1558091352,1558091352,ES
+1558091353,1558093531,FR
1558093532,1558093532,HR
-1558093533,1558118399,FR
+1558093533,1558097919,FR
+1558097920,1558098175,GB
+1558098176,1558103159,FR
+1558103160,1558103167,GB
+1558103168,1558118399,FR
1558118400,1558119423,DE
1558119424,1558122495,RU
-1558122496,1558123519,AT
-1558123520,1558124543,LU
-1558124544,1558151167,AT
-1558151168,1558183935,IT
+1558122496,1558123007,SG
+1558123008,1558123519,RU
+1558123520,1558125567,LU
+1558125568,1558147071,AT
+1558147072,1558147327,LU
+1558147328,1558147583,AT
+1558147584,1558147839,RU
+1558147840,1558148095,AT
+1558148096,1558148351,SG
+1558148352,1558148607,AT
+1558148608,1558149631,US
+1558149632,1558150143,RU
+1558150144,1558150655,DE
+1558150656,1558151167,NL
+1558151168,1558172927,IT
+1558172928,1558173183,US
+1558173184,1558179839,IT
+1558179840,1558180023,NL
+1558180024,1558180039,IT
+1558180040,1558180863,NL
+1558180864,1558183935,IT
1558183936,1558708223,DE
-1558708224,1559236607,GB
+1558708224,1558906623,GB
+1558906624,1558909695,BE
+1558909696,1558909951,GB
+1558909952,1558911231,BE
+1558911232,1558911999,GB
+1558912000,1558917119,BE
+1558917120,1558918143,GB
+1558918144,1558918399,BE
+1558918400,1558920191,GB
+1558920192,1558921215,BE
+1558921216,1558921471,GB
+1558921472,1558921727,BE
+1558921728,1558923263,GB
+1558923264,1558923519,BE
+1558923520,1558924287,GB
+1558924288,1558924543,BE
+1558924544,1558926079,GB
+1558926080,1558926335,BE
+1558926336,1558927615,GB
+1558927616,1558927871,BE
+1558927872,1558928383,GB
+1558928384,1558928639,BE
+1558928640,1558929919,GB
+1558929920,1558930175,BE
+1558930176,1558930943,GB
+1558930944,1558931199,BE
+1558931200,1558931711,GB
+1558931712,1558931967,BE
+1558931968,1558932223,GB
+1558932224,1558932735,BE
+1558932736,1558934783,GB
+1558934784,1558935295,BE
+1558935296,1558936575,GB
+1558936576,1558936831,BE
+1558936832,1558938367,GB
+1558938368,1558938623,BE
+1558938624,1558939135,GB
+1558939136,1558939391,BE
+1558939392,1558939647,GB
+1558939648,1558939903,BE
+1558939904,1558940159,GB
+1558940160,1558940415,BE
+1558940416,1558940671,GB
+1558940672,1558943999,BE
+1558944000,1558944255,GB
+1558944256,1558944511,BE
+1558944512,1558944767,GB
+1558944768,1558945791,BE
+1558945792,1558946303,GB
+1558946304,1558947327,BE
+1558947328,1558947839,GB
+1558947840,1558948095,BE
+1558948096,1558949887,GB
+1558949888,1558950911,BE
+1558950912,1558951935,GB
+1558951936,1558952447,BE
+1558952448,1558952703,GB
+1558952704,1558952959,BE
+1558952960,1558955519,GB
+1558955520,1558956031,BE
+1558956032,1558956799,GB
+1558956800,1558957311,BE
+1558957312,1558957567,GB
+1558957568,1558957823,BE
+1558957824,1558959103,GB
+1558959104,1558960255,BE
+1558960256,1558960383,GB
+1558960384,1558960639,BE
+1558960640,1558960895,GB
+1558960896,1558961407,BE
+1558961408,1558961919,GB
+1558961920,1558962431,BE
+1558962432,1558963199,GB
+1558963200,1558963455,BE
+1558963456,1558963711,GB
+1558963712,1558964223,BE
+1558964224,1558964479,GB
+1558964480,1558965247,BE
+1558965248,1558965503,GB
+1558965504,1558965759,BE
+1558965760,1558968319,GB
+1558968320,1558969343,BE
+1558969344,1559236607,GB
1559236608,1559240703,IL
1559240704,1559248895,BA
1559248896,1559257087,LV
@@ -30623,7 +30562,7 @@
1559633920,1559642111,IT
1559650304,1559658495,IT
1559658496,1559683071,RU
-1559683072,1559691263,NL
+1559683072,1559691263,IE
1559691264,1559756799,BG
1559756800,1559789567,AT
1559789568,1559822335,RU
@@ -30640,8 +30579,11 @@
1559944192,1559945727,FR
1559945728,1559946751,LU
1559946752,1559950335,DE
-1559950336,1559950847,LU
-1559950848,1559953407,DE
+1559950336,1559951359,LU
+1559951360,1559952383,DE
+1559952384,1559952895,LU
+1559952896,1559953151,DE
+1559953152,1559953407,LU
1559953408,1559986175,MT
1559986176,1560018943,IE
1560018944,1560051711,DE
@@ -30744,7 +30686,7 @@
1566359552,1566363647,RU
1566363648,1566365695,GB
1566365696,1566367743,RU
-1566367744,1566371839,ES
+1566369792,1566371839,ES
1566371840,1566373887,IT
1566373888,1566375935,RS
1566375936,1566377983,DE
@@ -30864,15 +30806,14 @@
1567424512,1567490047,CY
1567490048,1567555583,IR
1567555584,1567621119,AT
-1567621120,1567696383,RO
+1567621120,1567686655,SA
+1567686656,1567696383,RO
1567696384,1567696895,MD
1567696896,1567703039,RO
1567703040,1567709183,MD
1567709184,1567710207,RO
1567710208,1567711231,MD
-1567711232,1567713279,RO
-1567713280,1567714303,MD
-1567714304,1567715327,RO
+1567711232,1567715327,RO
1567715328,1567717375,MD
1567717376,1567727359,RO
1567727360,1567727615,GB
@@ -30884,45 +30825,68 @@
1567749120,1567750143,MD
1567750144,1567752191,RO
1567752192,1567756287,MD
-1567756288,1567775743,RO
+1567756288,1567760383,IR
+1567760384,1567765247,RO
+1567765248,1567766271,GB
+1567766272,1567767039,RO
+1567767040,1567767551,GB
+1567767552,1567768575,ES
+1567768576,1567775743,RO
1567775744,1567776767,MD
-1567776768,1567830015,RO
+1567776768,1567827455,RO
+1567827456,1567827711,BG
+1567827712,1567830015,RO
1567830016,1567831039,MD
-1567831040,1567852543,RO
+1567831040,1567833599,RO
+1567833600,1567834111,IT
+1567834112,1567852543,RO
1567852544,1567856639,MD
-1567856640,1567873023,RO
+1567856640,1567858687,RO
+1567858688,1567860735,SE
+1567860736,1567871999,RO
+1567872000,1567873023,ES
1567873024,1567879167,MD
-1567879168,1567880191,RO
-1567880192,1567881215,SE
-1567881216,1567883263,RO
+1567879168,1567883263,RO
1567883264,1567948799,MD
-1567948800,1567961087,RO
+1567948800,1567961087,IR
1567961088,1567965183,MD
1567965184,1567966207,RO
1567966208,1567969279,MD
-1567969280,1567981567,RO
+1567969280,1567973375,RO
+1567973376,1567981567,IR
1567981568,1567983615,MD
-1567983616,1567984639,RO
+1567983616,1567983871,RO
+1567983872,1567984127,NL
+1567984128,1567984639,RO
1567984640,1567987711,MD
-1567987712,1567988735,RO
+1567987712,1567988223,IT
+1567988224,1567988735,RO
1567988736,1567992831,MD
-1567992832,1567993343,RO
+1567992832,1567993343,IT
1567993344,1567993599,GB
1567993600,1567993855,RO
1567993856,1567997951,IR
1567997952,1568014335,NL
1568014336,1568022527,DE
-1568022528,1568026623,RO
+1568022528,1568024063,RO
+1568024064,1568024319,SG
+1568024320,1568026623,RO
1568026624,1568030719,MD
-1568030720,1568059391,RO
-1568059392,1568063487,MD
-1568063488,1568083967,RO
-1568083968,1568086015,MD
-1568086016,1568104447,RO
+1568030720,1568038911,RO
+1568038912,1568059391,IR
+1568059392,1568060415,RO
+1568060416,1568062463,MD
+1568062464,1568088063,RO
+1568088064,1568104447,IR
1568104448,1568106495,MD
1568106496,1568107519,RO
1568107520,1568108543,MD
-1568108544,1568112639,RO
+1568108544,1568109055,GB
+1568109056,1568110079,RO
+1568110080,1568111103,GB
+1568111104,1568111615,RO
+1568111616,1568112127,GB
+1568112128,1568112639,RO
1568112640,1568114687,MD
1568114688,1568115711,RO
1568115712,1568118783,MD
@@ -30933,59 +30897,32 @@
1568133120,1568137215,IR
1568137216,1568138239,RO
1568138240,1568141311,MD
-1568141312,1568178175,RO
+1568141312,1568145407,DE
+1568145408,1568178175,RO
1568178176,1568210943,RU
1568210944,1568243711,GB
-1568243712,1568245759,GP
-1568245760,1568247295,FR
+1568243712,1568247295,GP
1568247296,1568247551,GF
1568247552,1568247807,MF
-1568247808,1568248063,FR
-1568248064,1568248831,GP
-1568248832,1568249087,FR
-1568249088,1568249855,GP
-1568249856,1568250111,FR
-1568250112,1568250879,GP
-1568250880,1568251135,FR
-1568251136,1568251647,GP
+1568247808,1568251647,GP
1568251648,1568251903,MF
-1568251904,1568252159,FR
-1568252160,1568252927,GP
+1568251904,1568252927,GP
1568252928,1568253183,GF
-1568253184,1568254207,GP
-1568254208,1568254975,FR
-1568254976,1568255487,GP
-1568255488,1568255999,FR
-1568256000,1568256255,GP
-1568256256,1568259327,FR
-1568259328,1568260095,GP
-1568260096,1568260351,FR
+1568253184,1568260351,GP
1568260352,1568260863,MF
-1568260864,1568261119,GP
-1568261120,1568261375,FR
-1568261376,1568262143,GP
+1568260864,1568262143,GP
1568262144,1568262399,MQ
-1568262400,1568263167,GP
-1568263168,1568264447,FR
-1568264448,1568264959,GP
+1568262400,1568264959,GP
1568264960,1568265215,MF
-1568265216,1568266239,GP
-1568266240,1568266495,FR
-1568266496,1568267263,GP
+1568265216,1568267263,GP
1568267264,1568267775,MF
-1568267776,1568268543,FR
-1568268544,1568269311,GP
-1568269312,1568269567,FR
-1568269568,1568270079,GP
+1568267776,1568270079,GP
1568270080,1568270335,MQ
-1568270336,1568272383,GP
-1568272384,1568273151,FR
+1568270336,1568273151,GP
1568273152,1568273407,GF
-1568273408,1568274687,FR
-1568274688,1568275455,GP
-1568275456,1568275711,FR
+1568273408,1568275711,GP
1568275712,1568275967,MQ
-1568275968,1568276479,FR
+1568275968,1568276479,GP
1568276480,1568309247,DE
1568309248,1568342015,RO
1568342016,1568374783,BG
@@ -31055,7 +30992,7 @@
1570756608,1570764799,RU
1570764800,1570766847,DE
1570766848,1571291135,DK
-1571291136,1571422207,RO
+1571291136,1571422207,SA
1571422208,1571422463,CZ
1571422464,1571422719,UA
1571422720,1571423231,RU
@@ -31073,14 +31010,16 @@
1571425233,1571425279,CZ
1571425280,1571425535,RU
1571425536,1571425791,NL
-1571425792,1571428607,CZ
+1571425792,1571426047,CZ
+1571426048,1571426303,UA
+1571426304,1571428607,CZ
1571428608,1571428863,UA
-1571428864,1571429375,CZ
-1571429376,1571435519,UA
-1571435520,1571435775,RU
-1571435776,1571436287,CZ
+1571428864,1571430399,CZ
+1571430400,1571435519,UA
+1571435520,1571436031,RU
+1571436032,1571436287,CZ
1571436288,1571436543,UA
-1571436544,1571438591,RU
+1571436544,1571438591,BA
1571438592,1571440639,UA
1571440640,1571440895,RU
1571440896,1571441407,CZ
@@ -31095,7 +31034,7 @@
1571445248,1571446271,NL
1571446272,1571446783,RU
1571446784,1571447039,GB
-1571447040,1571447295,CZ
+1571447040,1571447295,UA
1571447296,1571447807,RU
1571447808,1571448063,CZ
1571448064,1571448319,RU
@@ -31103,7 +31042,8 @@
1571448832,1571449343,NL
1571449344,1571449855,CZ
1571449856,1571450879,RU
-1571450880,1571452927,UA
+1571450880,1571451647,CZ
+1571451648,1571452927,UA
1571452928,1571453183,CZ
1571453184,1571453695,RU
1571453696,1571453951,CZ
@@ -31115,9 +31055,13 @@
1571457536,1571458047,RU
1571458048,1571459071,CZ
1571459072,1571463167,UA
-1571463168,1571469311,CZ
+1571463168,1571467263,CZ
+1571467264,1571467775,RU
+1571467776,1571468287,CZ
+1571468288,1571469311,RU
1571469312,1571469823,BY
-1571469824,1571470847,CZ
+1571469824,1571470335,CZ
+1571470336,1571470847,UA
1571470848,1571471103,RU
1571471104,1571471359,CZ
1571471360,1571475455,RU
@@ -31127,8 +31071,9 @@
1571483648,1571484159,RU
1571484160,1571487743,CZ
1571487744,1571495935,SK
-1571495936,1571499007,CZ
-1571499008,1571500031,RU
+1571495936,1571496447,RU
+1571496448,1571497983,BY
+1571497984,1571500031,RU
1571500032,1571504127,BY
1571504128,1571508223,UA
1571508224,1571514367,CZ
@@ -31139,22 +31084,27 @@
1571524608,1571526655,RU
1571526656,1571528703,CZ
1571528704,1571529215,BY
-1571529216,1571529727,CZ
+1571529216,1571529471,CZ
+1571529472,1571529727,UA
1571529728,1571530239,RU
1571530240,1571531263,CZ
1571531264,1571532031,UA
1571532032,1571532287,RU
-1571532288,1571534079,CZ
+1571532288,1571532543,CZ
+1571532544,1571532799,RU
+1571532800,1571534079,CZ
1571534080,1571534847,RU
1571534848,1571535103,LV
-1571535104,1571535617,CZ
+1571535104,1571535359,UA
+1571535360,1571535617,CZ
1571535618,1571535618,RU
-1571535619,1571535871,CZ
-1571535872,1571538943,RU
+1571535619,1571536895,CZ
+1571536896,1571538943,RU
1571538944,1571540991,CZ
1571540992,1571541247,RU
1571541248,1571541503,UA
-1571541504,1571542527,CZ
+1571541504,1571542015,CZ
+1571542016,1571542527,RU
1571542528,1571542783,SK
1571542784,1571543039,CZ
1571543040,1571543551,NL
@@ -31246,7 +31196,9 @@
1572020224,1572028415,SE
1572028416,1572028927,GB
1572028928,1572029183,UA
-1572029184,1572030463,GB
+1572029184,1572030156,GB
+1572030157,1572030157,RU
+1572030158,1572030463,GB
1572030464,1572042751,RU
1572042752,1572043263,GB
1572043264,1572044799,RU
@@ -31322,7 +31274,9 @@
1572491264,1572495359,IT
1572495360,1572499455,RU
1572499456,1572503551,TR
-1572503552,1572507647,IT
+1572503552,1572505983,IT
+1572505984,1572506623,GR
+1572506624,1572507647,IT
1572507648,1572511743,GB
1572511744,1572515839,DE
1572515840,1572519935,NL
@@ -31330,7 +31284,7 @@
1572524032,1572528127,GE
1572528128,1572532223,RU
1572532224,1572536319,IT
-1572536320,1572538367,JE
+1572536320,1572538367,GB
1572538368,1572540415,NL
1572540416,1572542463,GB
1572542464,1572544511,IT
@@ -31346,8 +31300,7 @@
1572562944,1572564991,CZ
1572564992,1572567039,DE
1572567040,1572569087,RU
-1572571136,1572572159,RO
-1572572160,1572573183,BG
+1572571136,1572573183,BG
1572573184,1572573951,GG
1572573952,1572574207,GB
1572574208,1572574463,GG
@@ -31464,7 +31417,9 @@
1572794368,1572796415,RU
1572796416,1572798463,DE
1572798464,1572800511,NL
-1572800512,1572804607,RU
+1572800512,1572800739,RU
+1572800740,1572800740,UA
+1572800741,1572804607,RU
1572804608,1572808703,GB
1572808704,1572810751,FR
1572810752,1572812799,DE
@@ -31482,6 +31437,7 @@
1572835328,1572837375,IE
1572837376,1572839423,DK
1572839424,1572841471,DE
+1572842752,1572843007,NL
1572843520,1572845567,JO
1572845568,1572847615,FR
1572847616,1572849663,GI
@@ -31502,57 +31458,31 @@
1578369024,1578434559,AZ
1578434560,1578500095,HU
1578500096,1578565631,FI
-1578565632,1578582015,FR
+1578565632,1578579321,FR
+1578579322,1578579322,HR
+1578579323,1578582015,FR
1578582016,1578584063,IT
1578584064,1578584355,FR
1578584356,1578584356,IT
-1578584357,1578585087,FR
+1578584357,1578584689,FR
+1578584690,1578584690,PT
+1578584691,1578585087,FR
1578585088,1578586111,PT
1578586112,1578588159,ES
1578588160,1578590207,PL
-1578590208,1578590223,FR
-1578590224,1578590231,CH
-1578590232,1578590347,FR
-1578590348,1578590351,FI
-1578590352,1578590367,IT
-1578590368,1578590603,FR
-1578590604,1578590607,GB
-1578590608,1578590659,FR
-1578590660,1578590663,PL
-1578590664,1578590719,FR
-1578590720,1578590727,ES
-1578590728,1578590731,GB
-1578590732,1578590767,FR
-1578590768,1578590783,BE
-1578590784,1578590787,FR
+1578590208,1578590787,FR
1578590788,1578590791,ES
1578590792,1578590851,FR
1578590852,1578590855,ES
1578590856,1578590863,FR
1578590864,1578590879,BE
-1578590880,1578590895,GB
-1578590896,1578590975,FR
-1578590976,1578590991,IT
-1578590992,1578591087,FR
-1578591088,1578591103,GB
-1578591104,1578591231,FR
-1578591232,1578591247,NL
-1578591248,1578591263,GB
-1578591264,1578591391,FR
-1578591392,1578591399,BE
-1578591400,1578591663,FR
-1578591664,1578591679,GB
-1578591680,1578591695,FR
+1578590880,1578591087,FR
+1578591088,1578591103,IT
+1578591104,1578591695,FR
1578591696,1578591699,ES
-1578591700,1578591799,FR
-1578591800,1578591807,PL
-1578591808,1578591823,ES
-1578591824,1578591903,FR
-1578591904,1578591919,PL
-1578591920,1578591983,FR
-1578591984,1578591999,ES
-1578592000,1578592163,FR
-1578592164,1578592167,DE
+1578591700,1578592071,FR
+1578592072,1578592079,ES
+1578592080,1578592167,FR
1578592168,1578592171,IT
1578592172,1578592175,FR
1578592176,1578592183,CZ
@@ -31561,125 +31491,29 @@
1578592200,1578592207,CH
1578592208,1578592295,FR
1578592296,1578592303,NL
-1578592304,1578592379,FR
-1578592380,1578592383,GB
-1578592384,1578592511,FR
-1578592512,1578592519,ES
-1578592520,1578592543,FR
-1578592544,1578592559,GB
-1578592560,1578592575,BE
-1578592576,1578592687,FR
-1578592688,1578592695,ES
-1578592696,1578592735,FR
-1578592736,1578592743,FI
-1578592744,1578592799,FR
-1578592800,1578592803,NL
-1578592804,1578592811,FR
-1578592812,1578592815,ES
-1578592816,1578592855,FR
-1578592856,1578592859,PL
-1578592860,1578592863,FR
-1578592864,1578592879,DE
-1578592880,1578592883,GB
-1578592884,1578592991,FR
-1578592992,1578593007,NL
-1578593008,1578593023,FR
+1578592304,1578593023,FR
1578593024,1578593279,DE
-1578593280,1578593323,FR
-1578593324,1578593327,DE
-1578593328,1578593415,FR
+1578593280,1578593415,FR
1578593416,1578593423,IT
1578593424,1578593439,FR
1578593440,1578593443,ES
-1578593444,1578593479,FR
-1578593480,1578593483,ES
-1578593484,1578593491,FR
-1578593492,1578593495,GB
-1578593496,1578593551,FR
+1578593444,1578593551,FR
1578593552,1578593559,NL
-1578593560,1578593587,FR
-1578593588,1578593591,GB
-1578593592,1578593671,FR
-1578593672,1578593679,CH
-1578593680,1578593703,FR
-1578593704,1578593711,ES
-1578593712,1578593807,FR
-1578593808,1578593823,DE
-1578593824,1578593939,FR
-1578593940,1578593943,PL
-1578593944,1578593955,FR
+1578593560,1578593955,FR
1578593956,1578593959,ES
-1578593960,1578594063,FR
-1578594064,1578594079,PL
-1578594080,1578594095,FR
-1578594096,1578594111,PL
-1578594112,1578594143,FR
-1578594144,1578594147,ES
-1578594148,1578594151,FR
-1578594152,1578594159,ES
-1578594160,1578594163,IT
-1578594164,1578594239,FR
-1578594240,1578594255,PT
-1578594256,1578594271,IT
-1578594272,1578594303,BE
-1578594304,1578594359,FR
-1578594360,1578594363,NL
-1578594364,1578594367,FR
-1578594368,1578594371,IT
-1578594372,1578594383,FR
-1578594384,1578594399,IT
-1578594400,1578594523,FR
-1578594524,1578594527,CH
-1578594528,1578594547,FR
-1578594548,1578594551,IT
-1578594552,1578594559,FR
+1578593960,1578594559,FR
1578594560,1578594815,ES
-1578594816,1578594879,FR
-1578594880,1578594895,FI
-1578594896,1578595203,FR
-1578595204,1578595207,GB
-1578595208,1578595215,FR
-1578595216,1578595231,IE
-1578595232,1578595367,FR
+1578594816,1578595295,FR
+1578595296,1578595327,DE
+1578595328,1578595367,FR
1578595368,1578595371,IT
-1578595372,1578595379,FR
-1578595380,1578595383,ES
-1578595384,1578595419,FR
+1578595372,1578595419,FR
1578595420,1578595423,GB
-1578595424,1578595439,FR
-1578595440,1578595447,NL
-1578595448,1578595535,FR
-1578595536,1578595543,LT
-1578595544,1578595551,FR
-1578595552,1578595559,NL
-1578595560,1578595583,FR
-1578595584,1578595599,BE
-1578595600,1578595607,FR
-1578595608,1578595611,GB
-1578595612,1578595615,FR
-1578595616,1578595619,ES
-1578595620,1578595627,FR
-1578595628,1578595631,ES
-1578595632,1578595663,FR
-1578595664,1578595679,ES
-1578595680,1578595747,FR
-1578595748,1578595751,CH
-1578595752,1578595767,FR
-1578595768,1578595775,ES
-1578595776,1578595871,FR
-1578595872,1578595903,IT
-1578595904,1578595911,GB
-1578595912,1578595987,FR
+1578595424,1578595807,FR
+1578595808,1578595823,ES
+1578595824,1578595987,FR
1578595988,1578595991,ES
-1578595992,1578596119,FR
-1578596120,1578596123,IT
-1578596124,1578596143,FR
-1578596144,1578596147,ES
-1578596148,1578596159,FR
-1578596160,1578596167,DE
-1578596168,1578596239,FR
-1578596240,1578596255,ES
-1578596256,1578596351,FR
+1578595992,1578596351,FR
1578596352,1578596863,GB
1578596864,1578602495,FR
1578602496,1578604543,NL
@@ -31688,87 +31522,25 @@
1578607726,1578607726,FR
1578607727,1578608639,DE
1578608640,1578610687,CZ
-1578610688,1578610779,FR
-1578610780,1578610783,DE
-1578610784,1578610819,FR
-1578610820,1578610823,ES
-1578610824,1578610827,FR
-1578610828,1578610831,IT
-1578610832,1578610847,FR
-1578610848,1578610851,DE
-1578610852,1578610855,FR
-1578610856,1578610859,IT
-1578610860,1578610871,FR
-1578610872,1578610879,PL
-1578610880,1578611051,FR
-1578611052,1578611055,NL
-1578611056,1578611127,FR
-1578611128,1578611135,NL
-1578611136,1578611151,FR
-1578611152,1578611167,GB
-1578611168,1578611199,FR
-1578611200,1578611215,BE
-1578611216,1578611239,FR
-1578611240,1578611243,DE
-1578611244,1578611423,FR
-1578611424,1578611439,PT
-1578611440,1578611443,FR
-1578611444,1578611447,IT
-1578611448,1578611455,FI
-1578611456,1578611583,IE
-1578611584,1578611711,GB
-1578611712,1578611907,FR
-1578611908,1578611911,PT
-1578611912,1578611919,FR
-1578611920,1578611935,IT
-1578611936,1578612255,FR
-1578612256,1578612263,DE
-1578612264,1578612271,FR
-1578612272,1578612287,GB
-1578612288,1578612303,FR
-1578612304,1578612319,DE
-1578612320,1578612523,FR
-1578612524,1578612527,PL
-1578612528,1578612579,FR
-1578612580,1578612583,BE
-1578612584,1578612591,FI
-1578612592,1578612899,FR
-1578612900,1578612903,ES
-1578612904,1578612907,FR
+1578610688,1578611167,FR
+1578611168,1578611175,DE
+1578611176,1578611967,FR
+1578611968,1578611971,DE
+1578611972,1578611979,FR
+1578611980,1578611983,DE
+1578611984,1578612907,FR
1578612908,1578612911,ES
-1578612912,1578612943,FR
-1578612944,1578612959,NL
-1578612960,1578612979,FR
-1578612980,1578612983,IE
-1578612984,1578612991,FR
-1578612992,1578613247,IT
-1578613248,1578613279,ES
-1578613280,1578613427,FR
-1578613428,1578613431,BE
-1578613432,1578613663,FR
-1578613664,1578613679,IT
-1578613680,1578613711,FR
-1578613712,1578613719,BE
-1578613720,1578613735,FR
+1578612912,1578613436,FR
+1578613437,1578613437,ES
+1578613438,1578613735,FR
1578613736,1578613739,ES
-1578613740,1578613759,FR
-1578613760,1578613775,GB
-1578613776,1578613787,FR
-1578613788,1578613791,DE
-1578613792,1578613823,FR
-1578613824,1578613839,NL
-1578613840,1578613847,GB
-1578613848,1578613855,IT
-1578613856,1578613931,FR
+1578613740,1578613931,FR
1578613932,1578613935,NL
-1578613936,1578614003,FR
-1578614004,1578614007,CZ
-1578614008,1578614047,FR
-1578614048,1578614055,ES
-1578614056,1578614271,FR
+1578613936,1578614271,FR
1578614272,1578614527,ES
1578614528,1578631167,FR
-1578631168,1578663935,RO
+1578631168,1578659839,RO
+1578659840,1578663935,ES
1578663936,1578762239,RU
1578762240,1578795007,BG
1578795008,1578827775,RU
@@ -31791,11 +31563,13 @@
1580015616,1580048383,UA
1580048384,1580064767,RU
1580064768,1580072959,GB
-1580072960,1580134399,PT
+1580072960,1580109823,PT
+1580109824,1580113919,US
+1580113920,1580134399,PT
1580134400,1580136447,ES
1580136448,1580138495,PT
1580138496,1580204031,IT
-1580204032,1580335103,RO
+1580204032,1580335103,SA
1580335104,1580466175,RU
1580466176,1580597247,RO
1580597248,1580728319,TR
@@ -31891,9 +31665,7 @@
1583767552,1583771647,AT
1583771648,1583775743,RU
1583775744,1583779839,IT
-1583779840,1583780047,GB
-1583780048,1583780055,IT
-1583780056,1583780263,GB
+1583779840,1583780263,GB
1583780264,1583780271,IT
1583780272,1583780335,GB
1583780336,1583780343,IT
@@ -31907,9 +31679,7 @@
1583781360,1583781367,IT
1583781368,1583781863,GB
1583781864,1583781871,IT
-1583781872,1583782223,GB
-1583782224,1583782231,IT
-1583782232,1583782415,GB
+1583781872,1583782415,GB
1583782416,1583782423,IT
1583782424,1583782431,GB
1583782432,1583782439,IT
@@ -31943,9 +31713,9 @@
1583874048,1584398335,BE
1584398336,1584529407,CZ
1584529408,1584660479,DE
-1584660480,1584857087,GB
-1584857088,1584858879,DE
-1584858880,1584922623,GB
+1584660480,1584857354,GB
+1584857355,1584857355,DE
+1584857356,1584922623,GB
1584922624,1585184767,TR
1585184768,1585190911,PL
1585190912,1585192959,ES
@@ -32204,17 +31974,29 @@
1588068352,1588592639,GB
1588592640,1588593663,RO
1588593664,1588593919,MD
-1588593920,1588609023,RO
+1588593920,1588594687,RO
+1588594688,1588602879,IR
+1588602880,1588604927,RO
+1588604928,1588609023,IR
1588609024,1588613119,MD
-1588613120,1588621311,RO
+1588613120,1588617215,IR
+1588617216,1588619775,RO
+1588619776,1588620031,SG
+1588620032,1588621311,RO
1588621312,1588625407,MD
1588625408,1588641791,RO
1588641792,1588643839,ES
-1588643840,1588653055,RO
-1588653056,1588654079,MD
-1588654080,1588673535,RO
+1588643840,1588649983,RO
+1588649984,1588652031,SE
+1588652032,1588659199,RO
+1588659200,1588659711,NL
+1588659712,1588673535,RO
1588673536,1588674559,MD
-1588674560,1588723711,RO
+1588674560,1588676607,RO
+1588676608,1588678655,IR
+1588678656,1588689919,RO
+1588689920,1588690687,GB
+1588690688,1588723711,RO
1588723712,1588854783,UA
1588854784,1588985855,RU
1588985856,1589182463,IR
@@ -32427,9 +32209,12 @@
1593065472,1593081855,LT
1593081856,1593098239,UA
1593098240,1593114623,CH
-1593114624,1593122815,DK
+1593114624,1593118719,SE
+1593118720,1593122815,DK
1593122816,1593131007,SE
-1593131008,1593147391,GB
+1593131008,1593143295,GB
+1593143296,1593143551,IE
+1593143552,1593147391,GB
1593147392,1593163775,RU
1593163776,1593180159,AT
1593180160,1593196543,NO
@@ -32478,11 +32263,17 @@
1593421568,1593421823,GB
1593421824,1593422591,DE
1593422592,1593422847,GB
-1593422848,1593431167,DE
+1593422848,1593423359,DE
+1593423360,1593423423,US
+1593423424,1593423439,DE
+1593423440,1593423615,US
+1593423616,1593431167,DE
1593431168,1593431295,GB
-1593431296,1593440511,DE
-1593440512,1593440767,GB
-1593440768,1593442303,DE
+1593431296,1593438719,DE
+1593438720,1593438847,US
+1593438848,1593438863,DE
+1593438864,1593438975,US
+1593438976,1593442303,DE
1593442304,1593475071,BA
1593475072,1593491455,HR
1593491456,1593499647,DE
@@ -32512,19 +32303,26 @@
1596588032,1596719103,BG
1596719104,1596850175,IE
1596850176,1596866559,CZ
-1596866560,1596887039,RU
-1596887040,1596889087,UA
+1596866560,1596876799,RU
+1596876800,1596881919,CZ
+1596881920,1596887295,RU
+1596887296,1596887551,KZ
+1596887552,1596888063,UA
+1596888064,1596889087,RU
1596889088,1596889599,KZ
1596889600,1596889855,CZ
1596889856,1596890111,UA
1596890112,1596890623,RU
-1596890624,1596891135,CZ
-1596891136,1596900351,RU
-1596900352,1596907519,BY
+1596890624,1596890879,CZ
+1596890880,1596900351,RU
+1596900352,1596900863,CZ
+1596900864,1596901375,NL
+1596901376,1596907519,BY
1596907520,1596909567,RU
1596909568,1596911615,KZ
1596911616,1596915711,RU
-1596915712,1596925951,CZ
+1596915712,1596923903,UA
+1596923904,1596925951,CZ
1596925952,1596932095,RU
1596932096,1596940543,CZ
1596940544,1596940799,RU
@@ -32550,9 +32348,7 @@
1596955648,1596956159,CZ
1596956160,1596956671,RU
1596956672,1596956927,CZ
-1596956928,1596956963,DE
-1596956964,1596956964,RU
-1596956965,1596957183,DE
+1596956928,1596957183,RU
1596957184,1596957695,UA
1596957696,1596957951,RU
1596957952,1596958207,CZ
@@ -32617,7 +32413,8 @@
1599356928,1599373311,BH
1599373312,1599406079,RU
1599406080,1599422463,NL
-1599422464,1599438847,RU
+1599422464,1599430655,RU
+1599430656,1599438847,TM
1599438848,1599455231,RS
1599455232,1599471615,CZ
1599471616,1599487999,MK
@@ -32683,8 +32480,13 @@
1602267136,1602269183,RO
1602269184,1602271231,RU
1602271232,1602273279,MK
-1602273280,1602275327,CA
-1602275328,1602279423,DE
+1602273280,1602273535,FR
+1602273536,1602273536,GB
+1602273537,1602274559,IN
+1602274560,1602274815,IE
+1602274816,1602274816,GB
+1602274817,1602275071,IN
+1602275072,1602279423,DE
1602279424,1602281471,GB
1602281472,1602283519,RU
1602283520,1602285567,HR
@@ -32854,7 +32656,9 @@
1603153920,1603158015,NL
1603158016,1603162111,DE
1603162112,1603166207,TJ
-1603166208,1603168615,NL
+1603166208,1603168191,NL
+1603168192,1603168207,US
+1603168208,1603168615,NL
1603168616,1603168623,US
1603168624,1603170303,NL
1603170304,1603174399,IE
@@ -32949,30 +32753,36 @@
1605091328,1605099519,PL
1605099520,1605107711,RU
1605107712,1605108247,GB
-1605108248,1605108263,IT
-1605108264,1605108407,GB
+1605108248,1605108255,IT
+1605108256,1605108287,GB
+1605108288,1605108295,IT
+1605108296,1605108407,GB
1605108408,1605108415,IT
1605108416,1605108567,GB
1605108568,1605108575,IT
1605108576,1605109223,GB
1605109224,1605109231,IT
-1605109232,1605109431,GB
-1605109432,1605109439,IT
-1605109440,1605109495,GB
+1605109232,1605109495,GB
1605109496,1605109503,IT
-1605109504,1605109639,GB
+1605109504,1605109559,GB
+1605109560,1605109567,IT
+1605109568,1605109639,GB
1605109640,1605109647,IT
-1605109648,1605110111,GB
-1605110112,1605110119,IT
-1605110120,1605110263,GB
+1605109648,1605109815,GB
+1605109816,1605109823,IT
+1605109824,1605110263,GB
1605110264,1605110271,IT
1605110272,1605111023,GB
1605111024,1605111031,IT
1605111032,1605111199,GB
1605111200,1605111207,IT
-1605111208,1605111799,GB
+1605111208,1605111375,GB
+1605111376,1605111383,IT
+1605111384,1605111799,GB
1605111800,1605111807,IT
-1605111808,1605111919,GB
+1605111808,1605111879,GB
+1605111880,1605111887,IT
+1605111888,1605111919,GB
1605111920,1605111927,IT
1605111928,1605111935,GB
1605111936,1605111943,IT
@@ -32984,31 +32794,27 @@
1605113384,1605113391,IT
1605113392,1605113407,GB
1605113408,1605113415,IT
-1605113416,1605113503,GB
-1605113504,1605113511,IT
-1605113512,1605113567,GB
+1605113416,1605113567,GB
1605113568,1605113575,IT
-1605113576,1605113839,GB
-1605113840,1605113847,IT
-1605113848,1605114071,GB
-1605114072,1605114079,IT
-1605114080,1605114199,GB
+1605113576,1605114199,GB
1605114200,1605114207,IT
-1605114208,1605114263,GB
-1605114264,1605114271,IT
-1605114272,1605114295,GB
-1605114296,1605114303,IT
-1605114304,1605114327,GB
+1605114208,1605114287,GB
+1605114288,1605114295,IT
+1605114296,1605114327,GB
1605114328,1605114335,IT
1605114336,1605114871,GB
1605114872,1605114879,IT
-1605114880,1605115007,GB
+1605114880,1605114975,GB
+1605114976,1605114983,IT
+1605114984,1605115007,GB
1605115008,1605115015,IT
-1605115016,1605115599,GB
+1605115016,1605115583,GB
+1605115584,1605115591,IT
+1605115592,1605115599,GB
1605115600,1605115607,IT
-1605115608,1605115863,GB
-1605115864,1605115871,IT
-1605115872,1605115903,GB
+1605115608,1605115711,GB
+1605115712,1605115719,IT
+1605115720,1605115903,GB
1605115904,1605124095,RU
1605124096,1605125263,GB
1605125264,1605125267,DE
@@ -33064,15 +32870,12 @@
1605599232,1605631999,GR
1605632000,1605664767,RS
1605664768,1605697535,MK
-1605697536,1605734399,RU
-1605734400,1605734535,GB
-1605734536,1605734536,RU
-1605734537,1605735423,GB
-1605735424,1605742591,RU
-1605742592,1605744639,GB
-1605744640,1605763071,RU
-1605763072,1605767167,KZ
-1605767168,1605795839,RU
+1605697536,1605753855,RU
+1605753856,1605754879,FR
+1605754880,1605763071,RU
+1605763072,1605769215,KZ
+1605769216,1605771263,PL
+1605771264,1605795839,RU
1605795840,1605828607,BE
1605828608,1605828863,GB
1605828864,1605829375,US
@@ -33084,9 +32887,7 @@
1605861376,1605894143,TR
1605894144,1606156287,SA
1606156288,1606418431,RU
-1606418432,1606636287,SE
-1606636288,1606636543,GB
-1606636544,1607467007,SE
+1606418432,1607467007,SE
1607467008,1607532543,DE
1607532544,1607569407,SE
1607569408,1607572479,DK
@@ -33124,8 +32925,8 @@
1607663616,1607729151,NL
1607729152,1607737343,SY
1607737344,1607745535,EG
-1607745536,1607766015,SY
-1607766016,1607778303,EG
+1607745536,1607770111,SY
+1607770112,1607778303,EG
1607778304,1607794687,SY
1607794688,1607860223,RU
1607860224,1607892991,ES
@@ -33160,8 +32961,9 @@
1607949312,1607950335,UA
1607950336,1607952383,RU
1607952384,1607953407,UA
-1607953408,1607954431,RU
-1607954432,1607956479,UA
+1607953408,1607955711,RU
+1607955712,1607955967,UA
+1607955968,1607956479,RU
1607956480,1607957503,ES
1607957504,1607958527,UA
1607958528,1607959551,PS
@@ -33193,17 +32995,39 @@
1607988224,1607989247,KG
1607989248,1607991295,RU
1607991296,1608122367,UA
-1608122368,1608253439,RO
+1608122368,1608253439,SA
1608253440,1608384511,RU
1608384512,1608515583,DE
1608515584,1610612735,IT
1610612736,1610678271,US
1610678272,1610743807,CA
-1610743808,1611128831,US
+1610743808,1611005951,US
+1611005952,1611007999,NL
+1611008000,1611009023,US
+1611009024,1611010047,NL
+1611010048,1611016703,US
+1611016704,1611016959,NL
+1611016960,1611036671,US
+1611036672,1611037183,NL
+1611037184,1611084031,US
+1611084032,1611084287,NL
+1611084288,1611086335,US
+1611086336,1611086847,NL
+1611086848,1611116543,US
+1611116544,1611117567,NL
+1611117568,1611128831,US
1611128832,1611130879,NL
1611130880,1611227135,US
1611227136,1611235327,CA
-1611235328,1611923455,US
+1611235328,1611662335,US
+1611662336,1611662847,NL
+1611662848,1611692543,US
+1611692544,1611693567,NL
+1611693568,1611777023,US
+1611777024,1611777279,NL
+1611777280,1611778047,US
+1611778048,1611778559,NL
+1611778560,1611923455,US
1611923456,1612185599,CA
1612185600,1612611327,US
1612611328,1612636159,CA
@@ -33314,7 +33138,9 @@
1680646400,1680646655,CA
1680646656,1680646911,US
1680646912,1680647423,CA
-1680647424,1680651775,US
+1680647424,1680650751,US
+1680650752,1680650879,CA
+1680650880,1680651775,US
1680651776,1680652031,CA
1680652032,1680652351,US
1680652352,1680652543,CA
@@ -33741,8 +33567,7 @@
1728464896,1728465919,KR
1728465920,1728466943,CN
1728466944,1728467967,KR
-1728467968,1728468479,HK
-1728468480,1728468735,AU
+1728467968,1728468735,HK
1728468736,1728469247,IN
1728469248,1728469503,NZ
1728470016,1728471039,JP
@@ -33754,7 +33579,7 @@
1728476160,1728476415,AU
1728476416,1728476927,ID
1728476928,1728477183,IN
-1728477184,1728480255,HK
+1728478208,1728480255,HK
1728480256,1728481279,IN
1728481280,1728483327,HK
1728483328,1728484351,NZ
@@ -33784,7 +33609,7 @@
1728501504,1728502783,AU
1728502784,1728503807,CN
1728503808,1728504831,JP
-1728505856,1728506879,NZ
+1728505856,1728506879,NL
1728506880,1728507903,MY
1728507904,1728508927,JP
1728508928,1728509951,MY
@@ -34029,7 +33854,6 @@
1728750592,1728751615,JP
1728751616,1728751871,IN
1728751872,1728752639,ID
-1728752640,1728753663,LK
1728753664,1728754687,PH
1728754688,1728755711,IN
1728755712,1728756735,ID
@@ -34326,6 +34150,7 @@
1729029120,1729029375,AU
1729029376,1729029631,ID
1729029632,1729029887,AU
+1729029888,1729030143,PK
1729030144,1729031167,IN
1729031168,1729032191,SG
1729032192,1729033215,CN
@@ -34337,7 +34162,9 @@
1729037312,1729039359,CN
1729039360,1729040383,JP
1729040384,1729041407,CN
-1729041408,1729044479,HK
+1729041408,1729042687,HK
+1729042688,1729042943,SG
+1729042944,1729044479,HK
1729044480,1729045503,JP
1729045504,1729046015,ID
1729046016,1729046271,HK
@@ -34473,9 +34300,7 @@
1729165312,1729166335,JP
1729166336,1729166671,SG
1729166672,1729166687,PH
-1729166688,1729166799,SG
-1729166800,1729166815,PH
-1729166816,1729166847,SG
+1729166688,1729166847,SG
1729166848,1729167359,HK
1729167360,1729168383,IN
1729168384,1729169407,JP
@@ -34589,7 +34414,6 @@
1729274880,1729276927,IN
1729276928,1729277951,BN
1729277952,1729278975,VN
-1729278976,1729279999,MN
1729280000,1729281023,HK
1729281024,1729281535,AU
1729281536,1729282047,ID
@@ -34726,7 +34550,6 @@
1729419264,1729419519,AU
1729419520,1729419775,SG
1729419776,1729420031,IN
-1729420032,1729420287,AU
1729420288,1729421311,HK
1729421312,1729422335,MY
1729422336,1729423359,HK
@@ -34737,7 +34560,6 @@
1729426432,1729427455,AU
1729427456,1729428479,CN
1729428480,1729430527,AU
-1729431552,1729432575,JP
1729432576,1729433599,PH
1729433600,1729433855,IN
1729433856,1729434111,AU
@@ -34874,21 +34696,21 @@
1729596672,1729596927,ID
1729596928,1729597439,NZ
1729597440,1729598463,VN
-1729598464,1729598975,AU
1729598976,1729599231,IN
1729599232,1729599487,ID
1729599488,1729600511,AU
1729600512,1729601535,VN
1729601536,1729603583,CN
1729603584,1729604607,HK
-1729604608,1729605119,AU
1729605376,1729605631,ID
1729605632,1729606655,CN
1729606656,1729607679,ID
1729607680,1729609727,AU
1729609728,1729609999,HK
1729610000,1729610003,JP
-1729610004,1729610751,HK
+1729610004,1729610063,HK
+1729610064,1729610071,SG
+1729610072,1729610751,HK
1729610752,1729611775,JP
1729611776,1729612799,ID
1729613824,1729614847,SG
@@ -34997,7 +34819,6 @@
1729718272,1729719295,HK
1729719296,1729720319,ID
1729720320,1729721087,AU
-1729721088,1729721343,IN
1729721344,1729722367,NZ
1729723392,1729726463,IN
1729726464,1729727487,PK
@@ -35128,7 +34949,6 @@
1729856512,1729857535,AU
1729857536,1729858559,JP
1729858560,1729859583,IN
-1729859584,1729860607,HK
1729860608,1729861631,KR
1729861632,1729862655,AU
1729862656,1729863679,JP
@@ -35216,7 +35036,6 @@
1729932288,1729933311,VN
1729933312,1729934335,ID
1729934336,1729935359,IN
-1729935360,1729936383,JP
1729936384,1729938431,ID
1729938432,1729939455,AU
1729939456,1729939967,TW
@@ -35228,7 +35047,9 @@
1729946624,1729949695,JP
1729949696,1729950207,IN
1729950208,1729950719,KH
-1729951744,1729952767,JP
+1729951744,1729951999,SG
+1729952000,1729952511,JP
+1729952512,1729952767,NZ
1729952768,1729953791,IN
1729953792,1729954815,MY
1729954816,1729955839,ID
@@ -35341,12 +35162,11 @@
1730066432,1730067455,AU
1730067456,1730068479,BD
1730068480,1730069503,IN
-1730069504,1730070527,JP
1730070528,1730071551,CN
1730071552,1730072575,KR
1730072576,1730073599,SG
1730073600,1730073855,HK
-1730073856,1730074367,AU
+1730074112,1730074367,AU
1730074368,1730074623,SG
1730074624,1730075647,CN
1730075648,1730076671,ID
@@ -35356,7 +35176,6 @@
1730080768,1730081791,HK
1730081792,1730082815,ID
1730082816,1730083839,PW
-1730083840,1730084863,JP
1730084864,1730085887,CN
1730085888,1730086911,AU
1730086912,1730087935,HK
@@ -35364,14 +35183,14 @@
1730088960,1730091007,HK
1730091008,1730091519,SG
1730091520,1730091775,AU
-1730091776,1730092031,IN
1730092032,1730093055,AU
1730093056,1730093567,ID
1730093568,1730094079,MY
1730094080,1730095103,ID
1730095104,1730096127,JP
1730096128,1730097151,ID
-1730097152,1730104319,CN
+1730097152,1730103295,CN
+1730103296,1730104319,HK
1730104320,1730105343,JP
1730105344,1730106367,PK
1730106368,1730107391,MV
@@ -35565,6 +35384,7 @@
1730598912,1730599423,AU
1730599424,1730599935,VU
1730599936,1730604031,CN
+1730604032,1730605055,NP
1730605056,1730607103,IN
1730607104,1730608127,JP
1730608128,1730609151,CN
@@ -35703,7 +35523,8 @@
1730783744,1730783999,IN
1730784000,1730784255,ID
1730784256,1730785279,HK
-1730785280,1730786303,AU
+1730785280,1730785535,NL
+1730785536,1730786303,AU
1730786304,1730788351,HK
1730788352,1730790399,ID
1730790400,1730791423,IN
@@ -35728,7 +35549,8 @@
1730814976,1730815999,HK
1730816000,1730817023,ID
1730817024,1730818047,JP
-1730818048,1730819071,AU
+1730818048,1730818815,AU
+1730818816,1730819071,IN
1730819072,1730820095,JP
1730820096,1730821119,VN
1730821120,1730822143,HK
@@ -35737,11 +35559,622 @@
1730825216,1730826239,CN
1730826240,1730827263,JP
1730827264,1730829311,IN
-1742733312,1742734335,HK
+1730829312,1730831359,PH
+1730831360,1730832383,HK
+1730832384,1730833407,CN
+1730833408,1730834431,AU
+1730834432,1730834943,TW
+1730834944,1730835455,IN
+1730835456,1730837503,ID
+1730837504,1730838527,IN
+1730838528,1730839551,TH
+1730839552,1730840575,AU
+1730840576,1730841599,SG
+1730841600,1730842623,AU
+1730842624,1730844671,TW
+1730844672,1730845695,BD
+1730845696,1730848767,IN
+1730848768,1730849791,JP
+1730849792,1730850815,IN
+1730850816,1730851839,HK
+1730851840,1730852863,CN
+1730852864,1730853887,KR
+1730853888,1730854143,IN
+1730854144,1730854399,AU
+1730854400,1730854655,NZ
+1730854656,1730854911,HK
+1730854912,1730856959,IN
+1730856960,1730857983,JP
+1730857984,1730858239,AU
+1730858240,1730858495,ID
+1730858496,1730859007,IN
+1730859008,1730860031,BN
+1730860032,1730861055,MY
+1730861056,1730862079,MM
+1730862080,1730863103,JP
+1730863104,1730864127,AU
+1730864128,1730865151,TW
+1730865152,1730866175,CN
+1730866176,1730867199,AU
+1730867200,1730868223,JP
+1730868224,1730869247,KR
+1730869248,1730870271,IN
+1730870272,1730871807,ID
+1730871808,1730873343,IN
+1730873344,1730875391,HK
+1730875392,1730876415,CN
+1730876416,1730877439,AU
+1730877440,1730878463,CN
+1730878464,1730879487,HK
+1730879488,1730881023,IN
+1730881024,1730881535,AU
+1730881536,1730882559,IN
+1730882560,1730883583,ID
+1730883584,1730884607,TW
+1730884608,1730885631,BD
+1730885632,1730886655,AU
+1730886656,1730887679,HK
+1730887680,1730887935,KR
+1730887936,1730888191,IN
+1730888192,1730888703,ID
+1730888704,1730889727,HK
+1730889728,1730890751,AU
+1730890752,1730891775,LA
+1730891776,1730892799,IN
+1730892800,1730893823,CN
+1730893824,1730895103,AU
+1730895104,1730895359,BD
+1730895360,1730895871,IN
+1730895872,1730899455,CN
+1730899456,1730899967,MO
+1730899968,1730900991,IN
+1730900992,1730901503,AU
+1730901504,1730901759,DE
+1730901760,1730902015,AU
+1730902016,1730903039,KR
+1730903040,1730904063,CN
+1730904064,1730905087,ID
+1730905088,1730906111,CN
+1730906112,1730906367,TH
+1730906368,1730907135,AU
+1730907136,1730908159,JP
+1730908160,1730909183,PG
+1730909184,1730910207,BD
+1730910208,1730911231,IN
+1730911232,1730912255,NC
+1730912256,1730913279,IN
+1730913280,1730914303,CN
+1730914304,1730915327,NP
+1730915328,1730916351,HK
+1730916352,1730918399,AU
+1730918400,1730919423,CN
+1730919424,1730920447,SG
+1730920448,1730922495,CN
+1730922496,1730923519,IN
+1730923520,1730924031,NF
+1730924032,1730924543,NZ
+1730924544,1730925567,CN
+1730925568,1730926591,NZ
+1730926592,1730927615,HK
+1730927616,1730929663,CN
+1730929664,1730929919,IN
+1730929920,1730930175,TH
+1730930176,1730930431,BD
+1730930432,1730930687,IN
+1730930688,1730931711,CN
+1730931712,1730932735,HK
+1730932736,1730933759,CN
+1730933760,1730934783,HK
+1730934784,1730936063,IN
+1730936064,1730936831,AU
+1730936832,1730937855,IN
+1730937856,1730938879,SG
+1730938880,1730939903,JP
+1730939904,1730940927,IN
+1730940928,1730941439,JP
+1730941440,1730941951,IN
+1730941952,1730942975,HK
+1730942976,1730943487,AU
+1730943488,1730943999,ID
+1730944000,1730945023,HK
+1730945024,1730946047,AU
+1730946048,1730947071,ID
+1730947072,1730948095,AU
+1730948096,1730948351,TH
+1730948352,1730948607,NZ
+1730948608,1730949119,AU
+1730949120,1730951167,IN
+1730951168,1730952191,CN
+1730952192,1730954239,HK
+1730954240,1730955263,SG
+1730955264,1730957311,BD
+1730957312,1730958335,CN
+1730958336,1730959359,JP
+1730959360,1730960383,CN
+1730960384,1730961407,AU
+1730961408,1730962431,IN
+1730962432,1730962687,ID
+1730962688,1730962943,AU
+1730962944,1730963455,JP
+1730963456,1730964479,IN
+1730964480,1730964735,MY
+1730964736,1730964991,HK
+1730964992,1730965503,NZ
+1730965504,1730966527,SG
+1730966528,1730967551,IN
+1730967552,1730969599,CN
+1730969600,1730970623,JP
+1730970624,1730971647,CN
+1730971648,1730973695,IN
+1730973696,1730974719,CN
+1730974720,1730974975,AU
+1730974976,1730975231,ID
+1730975232,1730975743,BD
+1730975744,1730976767,CN
+1730976768,1730977791,IN
+1730977792,1730978815,HK
+1730978816,1730979839,NZ
+1730979840,1730980863,CN
+1730980864,1730981887,IN
+1730981888,1730990079,CN
+1730990080,1730992127,JP
+1730992128,1730993151,TH
+1730993152,1730993407,SG
+1730993408,1730993663,IN
+1730993664,1730993919,NZ
+1730993920,1730994175,PK
+1730994176,1730995199,CN
+1730995200,1730996223,AU
+1730996224,1730997247,PH
+1730997248,1731018751,CN
+1731018752,1731020799,HK
+1731020800,1731060735,CN
+1731060736,1731063807,VN
+1731063808,1731064831,NZ
+1731064832,1731065855,JP
+1731065856,1731066879,CN
+1731066880,1731067391,PH
+1731067392,1731067903,AU
+1731067904,1731068927,CN
+1731068928,1731070975,JP
+1731070976,1731103743,CN
+1731103744,1731103871,TH
+1731103872,1731103999,FR
+1731104000,1731104127,KR
+1731104128,1731104255,JP
+1731104256,1731104511,CN
+1731104512,1731104639,MY
+1731104640,1731104767,SG
+1731104768,1731105791,TW
+1731105792,1731106815,BD
+1731106816,1731115007,CN
+1731115008,1731116031,HK
+1731116032,1731117055,TW
+1731117056,1731118847,IN
+1731118848,1731119103,AU
+1731119104,1731120127,IN
+1731120128,1731121151,JP
+1731121152,1731122175,AF
+1731122176,1731123199,AU
+1731123200,1731124223,PF
+1731124224,1731125247,AU
+1731125248,1731126271,HK
+1731126272,1731127295,AU
+1731127296,1731130367,IN
+1731130368,1731132415,CN
+1731132416,1731133439,SG
+1731133440,1731133951,AU
+1731133952,1731134207,JP
+1731134208,1731134463,NZ
+1731134464,1731135487,CN
+1731135488,1731136511,JP
+1731136512,1731138559,IN
+1731138560,1731139583,CN
+1731139584,1731140607,HK
+1731140608,1731141631,SG
+1731141632,1731142655,IN
+1731142656,1731144703,CN
+1731144704,1731145727,IN
+1731145728,1731146751,CN
+1731146752,1731148799,IN
+1731148800,1731149055,ID
+1731149056,1731149311,HK
+1731149312,1731149823,AU
+1731149824,1731152895,IN
+1731152896,1731153407,SG
+1731153408,1731153919,IN
+1731153920,1731154943,CN
+1731154944,1731155967,TH
+1731155968,1731156479,HK
+1731156480,1731158015,IN
+1731158016,1731159039,CN
+1731159040,1731160063,JP
+1731160064,1731161087,IN
+1731161088,1731162111,CN
+1731162112,1731163135,HK
+1731163136,1731165183,CN
+1731165184,1731167231,IN
+1731167232,1731168255,ID
+1731168256,1731170559,CN
+1731170560,1731171327,PK
+1731171328,1731172863,IN
+1731172864,1731173375,MY
+1731173376,1731178495,IN
+1731178496,1731179519,HK
+1731179520,1731180543,JP
+1731180544,1731181055,MM
+1731181056,1731181311,IN
+1731181312,1731181567,AU
+1731181568,1731182591,KH
+1731182592,1731183615,VN
+1731183616,1731184639,IN
+1731184640,1731185663,CN
+1731185664,1731186687,NZ
+1731186688,1731187711,SG
+1731187712,1731188735,CN
+1731188736,1731189759,IN
+1731189760,1731190783,CN
+1731190784,1731191807,SG
+1731191808,1731192831,ID
+1731192832,1731193087,SG
+1731193088,1731193855,AU
+1731193856,1731194879,IN
+1731194880,1731196159,SG
+1731196160,1731196927,AU
+1731196928,1731197951,CN
+1731197952,1731199999,MY
+1731200000,1731201023,HK
+1731201024,1731202047,NZ
+1731202048,1731202303,TH
+1731202304,1731202559,ID
+1731202560,1731203071,AU
+1731203072,1731204095,BD
+1731204096,1731205119,CN
+1731205120,1731205631,PK
+1731205632,1731205887,HK
+1731205888,1731206143,ID
+1731206144,1731206655,HK
+1731206656,1731206911,PH
+1731206912,1731207167,JP
+1731207168,1731208191,IN
+1731208192,1731210239,JP
+1731210240,1731211263,IN
+1731211264,1731211775,HK
+1731211776,1731212287,IN
+1731212288,1731213311,CN
+1731213312,1731218431,IN
+1731218432,1731221503,VN
+1731221504,1731221759,NP
+1731221760,1731222015,AU
+1731222016,1731222527,IN
+1731222528,1731223551,CN
+1731223552,1731228671,IN
+1731228672,1731228927,MN
+1731228928,1731229183,AU
+1731229184,1731229439,NZ
+1731229440,1731229695,BD
+1731229696,1731230719,JP
+1731230720,1731231743,IN
+1731231744,1731232767,ID
+1731232768,1731233791,HK
+1731233792,1731234815,JP
+1731234816,1731235839,HK
+1731235840,1731239935,CN
+1731239936,1731241983,JP
+1731241984,1731243007,HK
+1731243008,1731244031,SG
+1731244032,1731247103,IN
+1731247104,1731249151,VN
+1731249152,1731250175,IN
+1731250176,1731250687,AU
+1731250688,1731251199,CN
+1731251200,1731252223,TH
+1731252224,1731253247,AU
+1731253248,1731253759,IN
+1731253760,1731254271,AU
+1731254272,1731262463,CN
+1731262464,1731263487,JP
+1731263488,1731264511,IN
+1731264512,1731265535,JP
+1731265536,1731266559,AU
+1731266560,1731267583,HK
+1731267584,1731268607,CN
+1731268608,1731269631,AU
+1731269632,1731270655,CN
+1731270656,1731271679,MY
+1731271680,1731272703,ID
+1731272704,1731273727,SG
+1731273728,1731273983,PH
+1731273984,1731274239,ID
+1731274240,1731274751,AU
+1731274752,1731275775,KH
+1731275776,1731276799,KR
+1731276800,1731279871,IN
+1731279872,1731280895,HK
+1731280896,1731281919,JP
+1731281920,1731282175,IN
+1731282176,1731282431,PK
+1731282432,1731282943,PH
+1731282944,1731284991,CN
+1731284992,1731286015,AU
+1731286016,1731288063,JP
+1731288064,1731290111,CN
+1731290112,1731291135,PH
+1731291136,1731291647,ID
+1731291648,1731292159,AU
+1731292160,1731293183,CN
+1731293184,1731294207,SG
+1731294208,1731296767,IN
+1731296768,1731297023,HK
+1731297024,1731297279,AU
+1731297280,1731298303,CN
+1731298304,1731299327,HK
+1731299328,1731300351,PK
+1731300352,1731301375,JP
+1731301376,1731302143,AU
+1731302144,1731302399,IN
+1731302400,1731302911,TH
+1731302912,1731303167,NZ
+1731303168,1731303423,AU
+1731303424,1731304447,IN
+1731304448,1731306495,HK
+1731306496,1731307519,SG
+1731307520,1731308543,BD
+1731308544,1731308799,NZ
+1731308800,1731309567,NR
+1731309568,1731311615,CN
+1731311616,1731314687,ID
+1731314688,1731315711,CN
+1731315712,1731316735,BD
+1731316736,1731316991,IN
+1731316992,1731317247,NZ
+1731317248,1731317503,IN
+1731317504,1731317759,PG
+1731317760,1731319807,HK
+1731319808,1731320831,JP
+1731320832,1731321855,ID
+1731321856,1731322879,IN
+1731322880,1731323903,ID
+1731323904,1731327487,IN
+1731327488,1731327999,HK
+1731328000,1731329023,CN
+1731329024,1731330047,IN
+1731330048,1731331071,SG
+1731331072,1731332095,IN
+1731332096,1731333119,HK
+1731333120,1731333631,AU
+1731333632,1731334143,SG
+1731334144,1731335167,HK
+1731335168,1731336191,JP
+1731336192,1731337215,ID
+1731337216,1731338239,JP
+1731338240,1731338751,IN
+1731338752,1731339263,AU
+1731339264,1731340287,CN
+1731340288,1731341311,KR
+1731341312,1731349503,CN
+1731349504,1731351551,IN
+1731351552,1731352575,JP
+1731352576,1731353599,HK
+1731353600,1731354623,SG
+1731354624,1731355647,HK
+1731355648,1731356671,AU
+1731356672,1731357695,MV
+1731357696,1731362815,CN
+1731362816,1731363839,ID
+1731363840,1731366911,CN
+1731366912,1731369983,IN
+1731369984,1731371007,PK
+1731371008,1731372031,IN
+1731372032,1731373055,MY
+1731373056,1731374079,BD
+1731374080,1731382271,CN
+1731382272,1731383295,MN
+1731383296,1731385343,IN
+1731385344,1731386111,ID
+1731386112,1731386367,IN
+1731386368,1731394559,CN
+1731394560,1731395583,HK
+1731395584,1731396095,IN
+1731396096,1731396607,BD
+1731396608,1731397631,JP
+1731397632,1731398143,IN
+1731398144,1731398655,TH
+1731398656,1731399679,HK
+1731399680,1731400703,NP
+1731400704,1731404799,IN
+1731404800,1731405823,JP
+1731405824,1731406079,AU
+1731406080,1731406335,MY
+1731406336,1731406591,AU
+1731406592,1731406847,MY
+1731406848,1731407871,ID
+1731407872,1731408895,MY
+1731408896,1731410943,IN
+1731410944,1731411199,MN
+1731411200,1731411455,AU
+1731411456,1731411711,SG
+1731411712,1731411967,IN
+1731411968,1731412991,TH
+1731412992,1731414015,AU
+1731414016,1731416063,IN
+1731416064,1731418111,JP
+1731418112,1731421183,IN
+1731421184,1731421695,NZ
+1731421696,1731421951,IN
+1731421952,1731422207,ID
+1731422208,1731423231,BD
+1731423232,1731424255,HK
+1731424256,1731425279,AU
+1731425280,1731426303,IN
+1731426304,1731427327,BD
+1731427328,1731428351,KH
+1731428352,1731428607,IN
+1731428608,1731428863,NZ
+1731428864,1731429119,AU
+1731429120,1731429375,ID
+1731429376,1731431423,IN
+1731431424,1731432447,TW
+1731432448,1731433471,HK
+1731433472,1731435519,IN
+1731435520,1731436031,NZ
+1731436032,1731436287,ID
+1731436288,1731436543,AU
+1731436544,1731437567,SG
+1731437568,1731438591,ID
+1731438592,1731441663,KR
+1731441664,1731442687,JP
+1731442688,1731447807,KR
+1731447808,1731448831,JP
+1731448832,1731449855,IN
+1731449856,1731450879,JP
+1731450880,1731451903,IN
+1731451904,1731452159,PK
+1731452160,1731452415,AU
+1731452416,1731452927,IN
+1731452928,1731453951,TH
+1731453952,1731454975,BD
+1731454976,1731457023,IN
+1731457024,1731461119,KR
+1731461120,1731461375,IN
+1731461376,1731461631,AU
+1731461632,1731462143,ID
+1731462144,1731462655,AU
+1731462656,1731462911,IN
+1731462912,1731463167,ID
+1731463168,1731464191,IN
+1731464192,1731465215,MM
+1731465216,1731466239,ID
+1731466240,1731467263,JP
+1731467264,1731469311,NP
+1731469312,1731470335,SG
+1731470336,1731471359,IN
+1731471360,1731472383,CN
+1731472384,1731473407,ID
+1731473408,1731475455,IN
+1731475456,1731476479,MY
+1731476480,1731476991,ID
+1731476992,1731477247,PH
+1731477248,1731477503,AU
+1731477504,1731479551,ID
+1731479552,1731483647,CN
+1731483648,1731484671,FJ
+1731484672,1731485695,VN
+1731485696,1731488767,CN
+1731488768,1731489791,JP
+1731489792,1731490815,HK
+1731490816,1731491839,AU
+1731491840,1731492863,ID
+1731492864,1731493887,IN
+1731493888,1731495167,JP
+1731495168,1731495423,SG
+1731495424,1731495935,BD
+1731495936,1731496959,IN
+1731496960,1731497983,BD
+1731497984,1731499007,ID
+1731499008,1731500031,JP
+1731500032,1731501055,HK
+1731501056,1731502079,NZ
+1731502080,1731504127,CN
+1731504128,1731504639,AU
+1731504640,1731505151,ID
+1731505152,1731507199,CN
+1731507200,1731508223,IN
+1731508224,1731509247,CN
+1731509248,1731510271,HK
+1731510272,1731510527,MY
+1731510528,1731510783,AU
+1731510784,1731511295,IN
+1731511296,1731512319,CN
+1731512320,1731513343,KR
+1731513344,1731514367,NZ
+1731514368,1731515391,IN
+1731515392,1731515647,AU
+1731515648,1731515903,ID
+1731515904,1731517439,HK
+1731517440,1731519487,IN
+1731519488,1731520511,MM
+1731520512,1731523583,JP
+1731523584,1731526655,IN
+1731526656,1731527679,ID
+1731527680,1731528703,CN
+1731528704,1731529727,HK
+1731529728,1731530751,JP
+1731530752,1731531775,AF
+1731531776,1731532031,ID
+1731532032,1731532287,IN
+1731532288,1731532799,NZ
+1731532800,1731533823,AF
+1731533824,1731534847,JP
+1731534848,1731535871,MY
+1731535872,1731536895,BD
+1731536896,1731537919,IN
+1731537920,1731538943,PK
+1731538944,1731539967,HK
+1731539968,1731540991,IN
+1731540992,1731542015,PH
+1731542016,1731543039,IN
+1731543040,1731545087,CN
+1731545088,1731546111,IN
+1731546112,1731547135,ID
+1731547136,1731548159,IN
+1731548160,1731548671,BD
+1731548672,1731549183,IN
+1731549184,1731550207,VN
+1731550208,1731551231,CN
+1731551232,1731552255,JP
+1731552256,1731553279,CN
+1731553280,1731555839,IN
+1731555840,1731556095,KR
+1731556096,1731557375,AU
+1731557376,1731558399,JP
+1731558400,1731564543,CN
+1731564544,1731565567,NZ
+1731565568,1731566079,HK
+1731566080,1731566591,PH
+1731566592,1731567615,IN
+1731567616,1731568639,CN
+1731568640,1731569663,IN
+1731569664,1731570687,VN
+1731570688,1731571711,SG
+1731571712,1731572735,PG
+1731572736,1731573759,CN
+1731573760,1731574271,ID
+1731574272,1731574527,MY
+1731574528,1731574783,AU
+1731574784,1731576831,ID
+1731576832,1731577087,AU
+1731577088,1731577599,SG
+1731577600,1731578879,AU
+1731578880,1731582975,CN
+1731582976,1731583999,PH
+1731584000,1731585023,HK
+1731585024,1731586047,VN
+1731586048,1731587071,IN
+1731587072,1731588095,CN
+1731588096,1731590143,IN
+1731590144,1731591167,CN
+1731591168,1731592191,VN
+1731592192,1731593215,ID
+1731593216,1731594239,HK
+1731594240,1731595263,CN
+1731595264,1731601407,IN
+1731601408,1731603455,BD
+1731603456,1731604479,HK
+1731604480,1731605503,CN
+1731605504,1731606527,MY
+1731606528,1731607551,JP
+1731607552,1731608575,CN
+1731608576,1731609599,IN
+1731609600,1731610623,AU
+1731610624,1731611647,KR
+1731611648,1731614719,PK
+1731614720,1731615743,JP
+1731615744,1731616767,ID
+1731616768,1731620863,IN
1742734336,1742735359,IN
1742735360,1742736383,JP
1742736384,1742737407,PK
-1742737408,1742738431,SG
1742738432,1742738687,HK
1742738688,1742738943,AU
1742738944,1742739199,HK
@@ -35948,7 +36381,6 @@
1742947328,1742948351,IN
1742948352,1742951423,CN
1742951424,1742953471,HK
-1742953472,1742954495,BD
1742954496,1742955519,IN
1742955520,1742956543,CN
1742956544,1742957567,HK
@@ -36312,7 +36744,6 @@
1743322112,1743323135,AU
1743323136,1743324159,MY
1743324160,1743325183,CN
-1743325184,1743326207,PK
1743326208,1743327231,SG
1743327232,1743328255,AU
1743328256,1743329279,NZ
@@ -36677,7 +37108,8 @@
1743826944,1743827967,MY
1743827968,1743828991,HK
1743828992,1743830015,NZ
-1743830016,1743832063,IN
+1743830016,1743830271,IN
+1743831040,1743832063,IN
1743832064,1743834111,HK
1743834112,1743838207,IN
1743838208,1743838463,PK
@@ -36710,7 +37142,6 @@
1743864832,1743865855,TW
1743865856,1743866879,CN
1743866880,1743867903,KR
-1743867904,1743868927,JP
1743868928,1743870975,NZ
1743870976,1743873023,CN
1743873024,1743874047,AU
@@ -36739,7 +37170,6 @@
1743897600,1743899647,AU
1743899648,1743900671,ID
1743900672,1743901695,JP
-1743901696,1743902719,IN
1743902720,1743903743,AU
1743903744,1743904767,CN
1743904768,1743908863,IN
@@ -36770,7 +37200,7 @@
1743931392,1743932415,HK
1743932416,1743933439,IN
1743933440,1743934463,AU
-1743934464,1743936511,SG
+1743935488,1743936511,SG
1743936512,1743937535,AU
1743937536,1743938559,MM
1743938560,1743939583,HK
@@ -36781,7 +37211,6 @@
1743944704,1743945215,ID
1743945216,1743945727,TO
1743945728,1743947775,CN
-1743947776,1743948799,JP
1743948800,1743949823,HK
1743949824,1743950847,TH
1743950848,1743951359,HK
@@ -36811,14 +37240,14 @@
1743976448,1743977471,AU
1743977472,1743978495,JP
1743978496,1743979519,HK
-1743979520,1743980543,JP
1743980544,1743981567,IN
1743981568,1743982591,SG
1743982592,1743983359,AU
1743983360,1743983615,IN
1743983616,1743984639,KR
1743984640,1743985663,CN
-1743985664,1743994879,IN
+1743985664,1743990783,IN
+1743991808,1743994879,IN
1743994880,1743995135,PG
1743995136,1743995903,AU
1743995904,1743997951,IN
@@ -36835,7 +37264,6 @@
1744006656,1744006911,AU
1744006912,1744009215,IN
1744009216,1744010239,JP
-1744010240,1744011263,ID
1744011264,1744012287,HK
1744012288,1744013311,IN
1744013312,1744014335,CN
@@ -36853,7 +37281,6 @@
1744024320,1744024575,AF
1744024576,1744025599,HK
1744025600,1744026623,IN
-1744026624,1744027647,JP
1744027648,1744028671,MY
1744028672,1744029695,JP
1744029696,1744030719,KR
@@ -36877,7 +37304,6 @@
1744049152,1744050175,BD
1744050176,1744051199,HK
1744051200,1744052223,PH
-1744052224,1744053247,MN
1744053248,1744054271,ID
1744054272,1744055295,KR
1744055296,1744056319,HK
@@ -36893,7 +37319,6 @@
1744069632,1744070655,SG
1744070656,1744071679,JP
1744071680,1744072703,KR
-1744072704,1744073727,JP
1744074752,1744076799,IN
1744076800,1744077823,AU
1744077824,1744078847,PK
@@ -36914,7 +37339,7 @@
1744092160,1744092671,MY
1744092672,1744092927,IN
1744092928,1744093183,MY
-1744093184,1744096255,AU
+1744094208,1744096255,AU
1744096256,1744097279,ID
1744097280,1744098303,JP
1744098304,1744099327,NZ
@@ -36968,10 +37393,10 @@
1744148480,1744149503,AU
1744149504,1744150527,IN
1744150528,1744151551,TO
-1744151552,1744152575,LA
+1744151552,1744152319,LA
+1744152320,1744152575,TH
1744152576,1744153599,JP
1744153600,1744154623,NZ
-1744154624,1744154879,IN
1744154880,1744155135,ID
1744155136,1744155647,BD
1744155648,1744156671,ID
@@ -37031,7 +37456,8 @@
1744209920,1744210943,AU
1744210944,1744211967,SG
1744211968,1744212991,KH
-1744212992,1744214015,JP
+1744212992,1744213503,SG
+1744213504,1744214015,JP
1744214016,1744216063,CN
1744216064,1744217087,HK
1744217088,1744218111,JP
@@ -37043,7 +37469,7 @@
1744220928,1744221183,JP
1744221184,1744222207,NZ
1744222208,1744222719,ID
-1744222720,1744223231,AU
+1744222720,1744222975,AU
1744223232,1744224255,TH
1744225280,1744226303,IN
1744226304,1744227327,SG
@@ -37064,9 +37490,7 @@
1744238848,1744239615,NZ
1744239616,1744240639,JP
1744240640,1744241663,AU
-1744242688,1744245503,ID
-1744245504,1744245759,AU
-1744245760,1744247807,ID
+1744242688,1744247807,ID
1744247808,1744248831,IN
1744248832,1744249855,ID
1744250368,1744250879,PH
@@ -37285,7 +37709,6 @@
1744473344,1744474111,SG
1744474112,1744481279,IN
1744481280,1744482303,JP
-1744482304,1744483327,IN
1744483328,1744484351,CN
1744484352,1744485119,IN
1744485120,1744485375,MY
@@ -37322,7 +37745,6 @@
1744514560,1744514815,IN
1744514816,1744515071,AU
1744515072,1744516095,IN
-1744516096,1744517119,HK
1744517120,1744519167,IN
1744519168,1744520191,AU
1744520192,1744521215,TH
@@ -37342,7 +37764,6 @@
1744534528,1744536575,CN
1744536576,1744537087,PW
1744537088,1744538623,AU
-1744538624,1744539647,HK
1744539648,1744540671,AU
1744540672,1744541695,IN
1744541696,1744542719,ID
@@ -37362,12 +37783,10 @@
1744562176,1744563199,BD
1744563200,1744564223,HK
1744564224,1744565247,CN
-1744565248,1744566271,HK
1744566272,1744567295,IN
1744567296,1744568319,JP
1744568320,1744569343,VN
1744569344,1744570367,IN
-1744570368,1744570879,JP
1744570880,1744571391,AU
1744571392,1744571903,ID
1744571904,1744572415,AU
@@ -37375,13 +37794,11 @@
1744573440,1744574463,ID
1744574464,1744575487,IN
1744575488,1744576511,CN
-1744576512,1744577535,IN
1744577536,1744578559,CN
1744578560,1744580607,IN
1744580608,1744580863,PH
1744580864,1744581119,SG
1744581120,1744581631,ID
-1744581632,1744582655,JP
1744582656,1744583679,AU
1744583680,1744584703,IN
1744584704,1744585727,CN
@@ -37393,13 +37810,13 @@
1744590336,1744590591,IN
1744590592,1744590847,AU
1744590848,1744591871,HK
-1744591872,1744593919,IN
+1744591872,1744592895,IN
1744593920,1744594431,ID
1744594432,1744594943,AU
1744594944,1744595967,CN
1744595968,1744596991,IN
1744596992,1744598015,SG
-1744598016,1744602111,JP
+1744599040,1744601087,JP
1744602112,1744603135,HK
1744603136,1744604159,JP
1744604160,1744607231,IN
@@ -37409,17 +37826,14 @@
1744610048,1744610303,ID
1744610304,1744612351,IN
1744612352,1744613375,CN
-1744613376,1744614399,HK
1744614400,1744615423,JP
1744615424,1744616447,IN
1744616448,1744616959,ID
1744616960,1744617471,AU
1744617472,1744618495,IN
-1744618496,1744619519,JP
1744619520,1744620543,SG
1744620544,1744622591,CN
1744622592,1744625663,IN
-1744625664,1744626687,SG
1744626688,1744627711,KR
1744627712,1744628735,CN
1744628736,1744629759,IN
@@ -37441,7 +37855,6 @@
1744643584,1744644095,BD
1744644096,1744645119,HK
1744645120,1744646143,BD
-1744646144,1744647167,PH
1744647168,1744648191,IN
1744648192,1744649215,KR
1744649216,1744650239,CN
@@ -37454,7 +37867,6 @@
1744656384,1744657407,VN
1744657408,1744658431,AU
1744658432,1744659455,HK
-1744659456,1744660479,JP
1744660480,1744660735,IN
1744660736,1744660991,MY
1744660992,1744661503,ID
@@ -37468,7 +37880,6 @@
1744665856,1744666111,IN
1744666112,1744666367,AU
1744666368,1744666623,PH
-1744666624,1744667647,JP
1744667648,1744668671,TH
1744668672,1744669695,NZ
1744669696,1744670719,HK
@@ -37476,11 +37887,10 @@
1744671744,1744673791,IN
1744673792,1744674815,PK
1744674816,1744675839,BD
-1744675840,1744676351,SG
1744676352,1744678911,IN
1744678912,1744679935,JP
1744679936,1744680959,KH
-1744680960,1744681983,WS
+1744680960,1744681983,TW
1744681984,1744683007,JP
1744683008,1744685055,AU
1744685056,1744686079,IN
@@ -37491,7 +37901,7 @@
1744690176,1744692223,CN
1744692224,1744693247,IN
1744693248,1744694271,CN
-1744694272,1744696319,HK
+1744694272,1744695295,HK
1744696320,1744697343,PH
1744697344,1744698367,HK
1744698368,1744699391,KH
@@ -37530,8 +37940,7 @@
1744733184,1744734207,NZ
1744734208,1744736255,AU
1744736256,1744737279,JP
-1744737280,1744738047,HK
-1744738048,1744738303,CN
+1744737280,1744738303,HK
1744738304,1744739327,SG
1744739328,1744740351,NZ
1744740352,1744741375,IN
@@ -37543,7 +37952,6 @@
1744744448,1744745471,CN
1744745472,1744747519,NP
1744747520,1744748543,CN
-1744748544,1744749055,JP
1744749056,1744749567,NZ
1744749568,1744749823,CN
1744749824,1744750591,AU
@@ -37558,7 +37966,6 @@
1744758528,1744758783,NZ
1744758784,1744759807,PF
1744759808,1744762879,IN
-1744762880,1744763903,PH
1744763904,1744764927,HK
1744764928,1744765951,JP
1744765952,1744766975,PK
@@ -37579,7 +37986,7 @@
1744777216,1744778239,AU
1744778240,1744778751,ID
1744778752,1744779263,AU
-1744779264,1744781311,HK
+1744780288,1744781311,HK
1744781312,1744782335,JP
1744782336,1744783359,CN
1744783360,1744786431,IN
@@ -37593,7 +38000,6 @@
1744797184,1744797439,NP
1744797440,1744797695,HK
1744797696,1744798719,PK
-1744798720,1744799743,HK
1744799744,1744801791,CN
1744801792,1744802815,IN
1744802816,1744803839,PK
@@ -37619,7 +38025,9 @@
1744828928,1744829183,SG
1744829184,1744829439,AU
1744829440,1744830463,HK
-1744830464,1747191807,US
+1744830464,1745410303,US
+1745410304,1745410559,PL
+1745410560,1747191807,US
1747191808,1747193855,CA
1747193856,1747215359,US
1747215360,1747216383,CA
@@ -37652,7 +38060,73 @@
1747304448,1747308543,CA
1747308544,1747316735,US
1747316736,1747317759,CA
-1747317760,1753251839,US
+1747317760,1747485016,US
+1747485017,1747485017,NL
+1747485018,1747517439,US
+1747517440,1747521535,BR
+1747521536,1747521791,US
+1747521792,1747522303,BR
+1747522304,1747525631,US
+1747525632,1747527679,BR
+1747527680,1747779583,US
+1747779584,1747795967,NL
+1747795968,1747801855,US
+1747801856,1747802111,IE
+1747802112,1749061631,US
+1749061632,1749069823,NL
+1749069824,1749094399,US
+1749094400,1749098495,NL
+1749098496,1749172223,US
+1749172224,1749188607,NL
+1749188608,1749196799,US
+1749196800,1749204991,NL
+1749204992,1749213183,US
+1749213184,1749237759,NL
+1749237760,1749327871,US
+1749327872,1749344255,NL
+1749344256,1749364735,US
+1749364736,1749389311,NL
+1749389312,1749397503,US
+1749397504,1749406719,NL
+1749406720,1749413887,US
+1749413888,1749422079,NL
+1749422080,1749476863,US
+1749476864,1749496319,NL
+1749496320,1749497855,US
+1749497856,1749499391,NL
+1749499392,1749508095,US
+1749508096,1749516287,NL
+1749516288,1749516799,US
+1749516800,1749517055,NL
+1749517056,1749517311,US
+1749517312,1749518335,NL
+1749518336,1749519871,US
+1749519872,1749520383,NL
+1749520384,1749528575,US
+1749528576,1749539327,NL
+1749539328,1749540863,US
+1749540864,1749549055,NL
+1749549056,1749586943,US
+1749586944,1749588479,NL
+1749588480,1749590015,US
+1749590016,1749598207,NL
+1749598208,1749685247,US
+1749685248,1749686783,NL
+1749686784,1749696511,US
+1749696512,1749698047,NL
+1749698048,1749749247,US
+1749749248,1749749759,NL
+1749749760,1749757951,US
+1749757952,1749767167,NL
+1749767168,1749816831,US
+1749816832,1749818367,NL
+1749818368,1749819391,US
+1749819392,1749827583,NL
+1749827584,1749862143,US
+1749862144,1749862399,NL
+1749862400,1749866239,US
+1749866240,1749866495,NL
+1749866496,1753251839,US
1753251840,1753252095,MN
1753252096,1753252351,SY
1753252352,1753252607,BY
@@ -37680,7 +38154,15 @@
1753483264,1753483519,IE
1753483520,1753486335,US
1753486336,1753486591,IN
-1753486592,1754136575,US
+1753486592,1753487359,US
+1753487360,1753487615,CH
+1753487616,1753489407,US
+1753489408,1753489663,GB
+1753489664,1753490175,US
+1753490176,1753490431,AU
+1753490432,1753735167,US
+1753735168,1753743359,IE
+1753743360,1754136575,US
1754136576,1754169343,CA
1754169344,1754206719,US
1754206720,1754206975,GW
@@ -37701,9 +38183,13 @@
1754209536,1754209791,BR
1754209792,1754210047,AR
1754210048,1754210303,BJ
-1754210304,1754251519,US
+1754210304,1754230783,US
+1754230784,1754234879,VG
+1754234880,1754251519,US
1754251520,1754251775,LY
-1754251776,1754252543,US
+1754251776,1754252031,US
+1754252032,1754252287,MR
+1754252288,1754252543,US
1754252544,1754252799,MZ
1754252800,1754253055,US
1754253056,1754253311,GN
@@ -37742,7 +38228,9 @@
1754830848,1754831871,CA
1754831872,1754832895,US
1754832896,1754835967,CA
-1754835968,1754845183,US
+1754835968,1754840743,US
+1754840744,1754840751,RO
+1754840752,1754845183,US
1754845184,1754846207,CA
1754846208,1754849279,US
1754849280,1754850303,CA
@@ -37797,7 +38285,11 @@
1755110656,1755110911,JO
1755110912,1755111167,US
1755111168,1755111423,SD
-1755111424,1755119615,US
+1755111424,1755113471,US
+1755113472,1755113983,AU
+1755113984,1755115007,US
+1755115008,1755115519,JP
+1755115520,1755119615,US
1755119616,1755283455,CA
1755283456,1755365375,US
1755365376,1755373567,CA
@@ -37879,9 +38371,9 @@
1755833856,1755834111,SZ
1755834112,1755834367,CN
1755834368,1755834623,TN
-1755834624,1755834879,US
+1755834624,1755834879,AS
1755834880,1755835135,PG
-1755835136,1755835391,US
+1755835136,1755835391,PR
1755835392,1755835647,BA
1755835648,1755835903,LS
1755835904,1755836159,GN
@@ -37904,7 +38396,21 @@
1755840256,1755840511,RU
1755840512,1756049407,US
1756049408,1756053503,CA
-1756053504,1756086271,US
+1756053504,1756066719,US
+1756066720,1756066751,RO
+1756066752,1756067663,US
+1756067664,1756067671,RO
+1756067672,1756068447,US
+1756068448,1756068479,RO
+1756068480,1756069439,US
+1756069440,1756069471,RO
+1756069472,1756069567,US
+1756069568,1756069599,RO
+1756069600,1756069695,US
+1756069696,1756069727,RO
+1756069728,1756069815,US
+1756069816,1756069823,RO
+1756069824,1756086271,US
1756086272,1756090367,CA
1756090368,1757417471,US
1757417472,1757419519,CA
@@ -37912,7 +38418,8 @@
1757424640,1757425663,CA
1757425664,1757426687,US
1757426688,1757427711,CA
-1757427712,1757443071,US
+1757427712,1757432831,US
+1757433856,1757443071,US
1757443072,1757446143,CA
1757446144,1757447167,US
1757447168,1757448191,CA
@@ -37930,7 +38437,7 @@
1757487104,1757489151,CA
1757489152,1757491199,US
1757491200,1757497343,CA
-1757497344,1757501439,US
+1757497344,1757502463,US
1757502464,1757503487,CA
1757503488,1757505535,US
1757505536,1757506559,CA
@@ -37942,18 +38449,23 @@
1757529088,1757530111,AI
1757530112,1757532159,US
1757532160,1757534207,CA
-1757534208,1757552639,US
+1757534208,1757543295,US
+1757543296,1757543327,AU
+1757543328,1757552639,US
1757552640,1757560831,CA
-1757560832,1757642751,US
+1757560832,1757597695,US
+1757597696,1757599743,GB
+1757599744,1757642751,US
1757642752,1757675519,CA
1757675520,1757937663,US
1757937664,1757941759,CA
-1757941760,1757958143,US
+1757941760,1757957631,US
+1757957632,1757957887,NL
+1757957888,1757958143,US
1757958144,1757962239,CA
1757962240,1757966335,BB
-1757966336,1758035967,US
-1758068736,1758265343,US
-1758265344,1758330879,CA
+1757966336,1758199807,US
+1758199808,1758330879,CA
1758330880,1758412799,US
1758412800,1758413055,BG
1758413056,1758413311,SE
@@ -37985,8 +38497,7 @@
1758420224,1758420479,HU
1758420480,1758420735,CH
1758420736,1758420991,MM
-1758420992,1759126527,US
-1759127552,1759128575,US
+1758420992,1759128575,US
1759128576,1759129599,CA
1759129600,1759131647,US
1759131648,1759133695,CA
@@ -38001,22 +38512,22 @@
1759162368,1759163391,BB
1759163392,1759166463,US
1759166464,1759167487,CA
-1759167488,1759168511,US
-1759170560,1759172607,US
+1759167488,1759172607,US
1759172608,1759173631,VC
1759173632,1759178751,US
1759178752,1759179775,PR
-1759179776,1759184895,US
+1759179776,1759184639,US
+1759184640,1759184895,AU
1759184896,1759186943,CA
1759186944,1759188991,US
1759188992,1759190015,VC
1759190016,1759191039,PR
1759191040,1759201279,US
1759201280,1759202303,VG
-1759203328,1759208447,US
+1759202304,1759208447,US
1759208448,1759209471,CA
-1759209472,1759213567,US
-1759215616,1759217663,CA
+1759209472,1759212543,US
+1759212544,1759217663,CA
1759217664,1759222783,US
1759222784,1759223807,CA
1759223808,1759230975,US
@@ -38025,11 +38536,9 @@
1759234048,1759236095,CA
1759236096,1759239167,US
1759239168,1759240191,CA
-1759240192,1759244287,US
-1759248384,1759313919,US
+1759240192,1759313919,US
1759313920,1759346687,CA
-1759346688,1759395839,US
-1759399936,1759408127,US
+1759346688,1759408127,US
1759408128,1759412223,CA
1759412224,1759412991,US
1759412992,1759413247,AU
@@ -38043,7 +38552,37 @@
1759417600,1759417855,FR
1759417856,1759419391,US
1759419392,1759419647,MX
-1759419648,1759510527,US
+1759419648,1759428607,US
+1759428608,1759428863,LB
+1759428864,1759429119,US
+1759429120,1759429375,LK
+1759429376,1759429631,MO
+1759429632,1759429887,CN
+1759429888,1759430143,DK
+1759430144,1759430399,QA
+1759430400,1759430655,BA
+1759430656,1759430911,AR
+1759430912,1759431167,MX
+1759431168,1759431423,AW
+1759431424,1759431679,BZ
+1759431680,1759431935,BS
+1759431936,1759432191,IN
+1759432192,1759432447,HR
+1759432448,1759432703,OM
+1759432704,1759432959,PK
+1759432960,1759433215,PS
+1759433216,1759433471,SA
+1759433472,1759433983,US
+1759433984,1759434239,MA
+1759434240,1759434495,DE
+1759434496,1759434751,JP
+1759434752,1759435007,SY
+1759435008,1759435263,US
+1759435264,1759435519,HK
+1759435520,1759435775,IQ
+1759435776,1759436031,KE
+1759436032,1759436287,AE
+1759436288,1759510527,US
1759510528,1759510783,VE
1759510784,1759511039,AG
1759511040,1759511295,GT
@@ -38082,7 +38621,7 @@
1759519488,1759519743,CO
1759519744,1759519999,TC
1759520000,1759520255,VG
-1759520256,1759520511,AX
+1759520256,1759520511,WF
1759520512,1759520767,UM
1759520768,1759521023,SV
1759521024,1759521279,TK
@@ -38110,16 +38649,274 @@
1759526656,1759526911,FO
1759526912,1759535103,US
1759535104,1759543295,CA
-1759543296,1759544319,US
-1759544320,1759559679,CA
-1759559680,1759608831,US
-1759641600,1760100351,US
+1759543296,1759547391,US
+1759547392,1759549439,NL
+1759549440,1760047103,US
+1760047104,1760051199,CA
+1760051200,1760083967,US
+1760083968,1760086015,SE
+1760086016,1760088063,GB
+1760088064,1760116735,US
+1760116736,1760133119,CA
+1760133120,1760165887,US
1760165888,1760231423,CA
-1760231424,1760362495,US
+1760231424,1760383743,US
+1760383744,1760383999,MO
+1760384000,1760384255,GB
+1760384256,1760384511,BZ
+1760384512,1760384767,US
+1760384768,1760385023,KE
+1760385024,1760385279,US
+1760385280,1760385535,SG
+1760385536,1760385791,US
+1760385792,1760386047,HK
+1760386048,1760386303,US
+1760386304,1760386559,GB
+1760386560,1760386815,US
+1760386816,1760387071,HK
+1760387072,1760440831,US
+1760440832,1760441343,AU
+1760441344,1760443391,US
+1760443392,1760444415,DE
+1760444416,1760468991,US
+1760468992,1760469503,JP
+1760469504,1760470527,US
+1760470528,1760471039,DE
+1760471040,1760473087,GB
+1760473088,1760473599,DE
+1760473600,1760475135,US
+1760475136,1760477183,GB
+1760477184,1760657407,US
+1760657408,1760677887,CA
+1760677888,1760690175,US
+1760690176,1760755711,CA
+1760755712,1760776191,US
+1760776192,1760784383,CA
+1760784384,1760817151,US
+1760817152,1760817407,MO
+1760817408,1760817663,BZ
+1760817664,1760817919,BS
+1760817920,1760818175,PA
+1760818176,1760818431,AR
+1760818432,1760818687,MX
+1760818688,1760818943,AW
+1760818944,1760819199,SE
+1760819200,1760819455,ES
+1760819456,1760819711,GB
+1760819712,1760819967,MA
+1760819968,1760820223,HK
+1760820224,1760820479,JP
+1760820480,1760820735,CA
+1760820736,1760837631,US
+1760837632,1760839679,CA
+1760839680,1760867327,US
+1760867328,1760868351,PR
+1760868352,1760869375,US
+1760869376,1760870399,CA
+1760870400,1760871423,US
+1760871424,1760872447,CA
+1760872448,1760878591,US
+1760878592,1760880639,JM
+1760880640,1760883711,US
+1760883712,1760884735,CA
+1760884736,1760886783,US
+1760886784,1760888831,CA
+1760888832,1760889087,US
+1760889088,1760889343,JP
+1760889344,1760889599,GB
+1760889600,1760890623,US
+1760890624,1760890879,SG
+1760890880,1760896255,US
+1760896256,1760896511,CA
+1760896512,1760899071,US
+1760899072,1760900095,GD
+1760900096,1760903167,US
+1760903168,1760904191,CA
+1760904192,1760909311,US
+1760909312,1760910335,VG
+1760910336,1760911359,GD
+1760911360,1760915455,US
+1760915456,1760917503,MQ
+1760917504,1760923647,US
+1760923648,1760924671,CA
+1760924672,1760925695,US
+1760925696,1760929791,CA
+1760929792,1760937983,US
+1760937984,1760939007,CA
+1760939008,1760940031,DM
+1760940032,1760944127,US
+1760944128,1760945151,CA
+1760945152,1760985087,US
+1760985088,1761017855,CA
+1761017856,1761019647,US
+1761019648,1761019903,VE
+1761019904,1761023231,US
+1761023232,1761023487,JP
+1761023488,1761075199,US
+1761075200,1761083391,CA
+1761083392,1761181695,US
+1761181696,1761181951,MX
+1761181952,1761185791,US
+1761185792,1761186047,MX
+1761186048,1761187327,US
+1761187328,1761187583,PK
+1761187584,1761189887,US
+1761189888,1761190143,JP
+1761190144,1761195007,US
+1761195008,1761195263,HK
+1761195264,1761198079,US
+1761198080,1761214463,CA
+1761214464,1761222655,GP
+1761222656,1761230847,US
+1761230848,1761239039,CA
+1761239040,1761255423,US
+1761255424,1761255679,CN
+1761255680,1761255935,NZ
+1761255936,1761256191,DK
+1761256192,1761256447,HR
+1761256448,1761256703,LI
+1761256704,1761256959,ME
+1761256960,1761257215,AM
+1761257216,1761257471,GE
+1761257472,1761257727,MC
+1761257728,1761257983,BA
+1761257984,1761258239,RS
+1761258240,1761258495,SI
+1761258496,1761258751,IT
+1761258752,1761259007,LU
+1761259008,1761259263,PT
+1761259264,1761259519,FR
+1761259520,1761259775,KH
+1761259776,1761260031,AZ
+1761260032,1761260287,ET
+1761260288,1761260543,CU
+1761260544,1761260799,EC
+1761260800,1761261055,MU
+1761261056,1761261311,JM
+1761261312,1761261567,PR
+1761261568,1761261823,VG
+1761261824,1761262079,SG
+1761262080,1761262335,IN
+1761262336,1761262591,PK
+1761262592,1761288191,US
+1761288192,1761292287,CA
+1761292288,1761302015,US
+1761302016,1761302271,CA
+1761302272,1761304575,US
+1761304576,1761308671,CA
+1761308672,1761478655,US
+1761478656,1761479679,CA
+1761479680,1761484799,US
+1761484800,1761485823,CA
+1761485824,1761488895,US
+1761488896,1761489919,CA
+1761489920,1761499135,US
+1761499136,1761501183,CA
+1761501184,1761502207,VG
+1761502208,1761515519,US
+1761515520,1761517567,CA
+1761517568,1761522687,US
+1761522688,1761523711,CA
+1761523712,1761524735,US
+1761524736,1761525759,CA
+1761525760,1761526783,US
+1761526784,1761527807,CA
+1761527808,1761544191,US
+1761544192,1761546239,CA
+1761546240,1761554431,US
+1761554432,1761555455,CA
+1761555456,1761581055,US
+1761581056,1761583103,CA
+1761583104,1761587199,US
+1761587200,1761588223,AI
+1761588224,1761589247,PR
+1761589248,1761595391,US
+1761595392,1761596415,CA
+1761596416,1761601535,US
+1761601536,1761602559,VC
+1761602560,1761605631,US
+1761606656,1761607679,VC
1761607680,1762656255,ZA
-1762656256,1763000335,MU
-1763000336,1763000339,UG
-1763000340,1763704831,MU
+1762656256,1762660351,MU
+1762660352,1762661375,KE
+1762661376,1762661887,MU
+1762661888,1762662399,TZ
+1762662400,1762662911,MZ
+1762662912,1762664447,ZA
+1762664448,1762664959,FR
+1762664960,1762665471,GB
+1762665472,1762680063,MU
+1762680064,1762680575,NL
+1762680576,1762681087,SE
+1762681088,1762681599,DE
+1762681600,1762684927,MU
+1762684928,1762689023,KE
+1762689024,1762691071,MU
+1762691072,1762693119,TZ
+1762693120,1762695167,MZ
+1762695168,1762701311,ZA
+1762701312,1762703359,FR
+1762703360,1762705407,GB
+1762705408,1762768895,MU
+1762768896,1762770943,DE
+1762770944,1762783231,MU
+1762783232,1762791423,KE
+1762791424,1762795519,DJ
+1762795520,1762803711,MU
+1762803712,1762807807,ZA
+1762807808,1762815999,MU
+1762816000,1762820095,FR
+1762820096,1762942975,MU
+1762942976,1762947071,NL
+1762947072,1762951167,SE
+1762951168,1762983935,MU
+1762983936,1763000319,KE
+1763000320,1763008511,UG
+1763008512,1763016703,RW
+1763016704,1763024895,DJ
+1763024896,1763041279,TZ
+1763041280,1763049471,MZ
+1763049472,1763074047,ZA
+1763074048,1763082239,FR
+1763082240,1763090431,GB
+1763090432,1763270655,MU
+1763270656,1763278847,US
+1763278848,1763319807,MU
+1763319808,1763327999,IN
+1763328000,1763336191,NL
+1763336192,1763344383,SE
+1763344384,1763344895,UG
+1763344896,1763352575,DE
+1763352576,1763385343,MU
+1763385344,1763393535,AE
+1763393536,1763402239,MU
+1763402240,1763402751,KE
+1763402752,1763428351,MU
+1763428352,1763428863,ZA
+1763428864,1763430399,MU
+1763430400,1763438591,KE
+1763438592,1763442687,UG
+1763442688,1763450879,MU
+1763450880,1763459071,TZ
+1763459072,1763463167,MZ
+1763463168,1763471359,ZA
+1763471360,1763475455,MU
+1763475456,1763479551,FR
+1763479552,1763573759,MU
+1763573760,1763577855,US
+1763577856,1763602431,MU
+1763602432,1763606527,NL
+1763606528,1763631103,MU
+1763631104,1763635199,AE
+1763635200,1763657727,MU
+1763657728,1763659775,ZA
+1763659776,1763661823,MU
+1763661824,1763663871,FR
+1763663872,1763690495,MU
+1763690496,1763692543,ZA
+1763692544,1763694591,MU
+1763694592,1763696639,FR
+1763696640,1763704831,MU
1763704832,1764753407,EG
1764753408,1765801983,KE
1765801984,1766850559,MA
@@ -38295,7 +39092,9 @@
1807056896,1807057151,AU
1807057152,1807057663,US
1807057664,1807057919,GB
-1807057920,1807597567,US
+1807057920,1807548415,US
+1807548416,1807548927,LU
+1807548928,1807597567,US
1807597568,1807646719,CA
1807646720,1807655679,US
1807655680,1807655935,IE
@@ -38305,7 +39104,15 @@
1807657984,1807658239,SG
1807658240,1807658495,GB
1807658496,1807658751,BS
-1807658752,1807695871,US
+1807658752,1807691263,US
+1807691264,1807691775,FR
+1807691776,1807692799,US
+1807692800,1807693311,JP
+1807693312,1807693823,US
+1807693824,1807694079,AU
+1807694080,1807694847,US
+1807694848,1807695359,JP
+1807695360,1807695871,FR
1807695872,1807699967,VI
1807699968,1807707311,US
1807707312,1807707312,JP
@@ -38328,8 +39135,8 @@
1815963648,1815964159,US
1815964160,1815964415,DK
1815964416,1815964671,PL
-1815964672,1815965951,US
-1815965952,1815966207,DE
+1815964672,1815965695,US
+1815965696,1815966207,DE
1815966208,1815966719,US
1815966720,1815966975,GB
1815966976,1815967231,US
@@ -38345,7 +39152,13 @@
1815980544,1815981055,DE
1815981056,1815982079,GB
1815982080,1815982591,FR
-1815982592,1815987199,US
+1815982592,1815983103,DE
+1815983104,1815984127,JP
+1815984128,1815984639,AU
+1815984640,1815985151,US
+1815985152,1815985663,NL
+1815985664,1815985919,DE
+1815985920,1815987199,US
1815987200,1815987711,GB
1815987712,1815988223,NL
1815988224,1815988735,JP
@@ -38357,14 +39170,17 @@
1815993600,1815993855,GB
1815993856,1815994111,US
1815994112,1815994367,JP
-1815994368,1815995135,US
+1815994368,1815994623,US
+1815994624,1815994879,GB
+1815994880,1815995135,US
1815995136,1815995391,AU
1815995392,1815995903,US
1815995904,1815996159,GB
1815996160,1815996415,CA
1815996416,1815997695,US
1815997696,1815997951,FR
-1815997952,1816001279,US
+1815997952,1816001023,US
+1816001024,1816001279,JP
1816001280,1816001535,AU
1816001536,1816001791,US
1816001792,1816002559,NL
@@ -38422,7 +39238,9 @@
1823170560,1823178751,US
1823178752,1823179007,GB
1823179008,1823179263,DE
-1823179264,1823186687,US
+1823179264,1823180287,US
+1823180288,1823180543,AU
+1823180544,1823186687,US
1823186688,1823186943,IN
1823186944,1823211519,US
1823211520,1823342591,CA
@@ -38490,9 +39308,7 @@
1832803840,1832812543,FR
1832812544,1832845311,RU
1832845312,1832878079,BH
-1832878080,1832878412,RU
-1832878413,1832878413,BH
-1832878414,1832910847,RU
+1832878080,1832910847,RU
1832910848,1833172991,IL
1833172992,1833177087,GB
1833177088,1833179135,RU
@@ -38595,7 +39411,6 @@
1833381888,1833383935,NL
1833383936,1833385983,DK
1833385984,1833388031,SK
-1833388032,1833390079,RU
1833390080,1833392127,GB
1833392128,1833396223,CH
1833396224,1833398271,NL
@@ -38613,7 +39428,6 @@
1833426944,1833428991,KG
1833428992,1833431039,IT
1833431040,1833433087,RU
-1833433088,1833435135,GB
1833435136,1833439231,CZ
1833439232,1833443327,GB
1833443328,1833447423,NL
@@ -38622,7 +39436,9 @@
1833455616,1833459711,NL
1833459712,1833463807,ME
1833463808,1833467903,UA
-1833467904,1833471999,CH
+1833467904,1833468579,CH
+1833468580,1833468580,RU
+1833468581,1833471999,CH
1833472000,1833473023,NL
1833474048,1833475071,UA
1833476096,1833484287,NL
@@ -38645,14 +39461,16 @@
1833542912,1833543167,GB
1833543168,1833543423,IN
1833543424,1833544959,GB
-1833544960,1833545087,IN
+1833544960,1833545001,IN
+1833545002,1833545002,GB
+1833545003,1833545087,IN
1833545088,1833545215,GB
1833545216,1833545471,NL
1833545472,1833545727,GB
1833545728,1833549823,IT
1833549824,1833553919,RU
1833553920,1833558015,CZ
-1833558016,1833562111,BG
+1833558016,1833562111,US
1833562112,1833566207,PS
1833566208,1833570303,SE
1833570304,1833571583,NL
@@ -38779,7 +39597,9 @@
1835917856,1835917863,IT
1835917864,1835917919,GB
1835917920,1835917935,IT
-1835917936,1835918439,GB
+1835917936,1835918383,GB
+1835918384,1835918391,IT
+1835918392,1835918439,GB
1835918440,1835918447,IT
1835918448,1835918519,GB
1835918520,1835918527,IT
@@ -38787,49 +39607,55 @@
1835918712,1835918719,IT
1835918720,1835918735,GB
1835918736,1835918743,IT
-1835918744,1835918823,GB
-1835918824,1835918831,IT
-1835918832,1835918847,GB
+1835918744,1835918847,GB
1835918848,1835918855,IT
1835918856,1835919127,GB
1835919128,1835919135,IT
1835919136,1835919151,GB
1835919152,1835919159,IT
-1835919160,1835919327,GB
-1835919328,1835919335,IT
-1835919336,1835919751,GB
+1835919160,1835919751,GB
1835919752,1835919759,IT
1835919760,1835920479,GB
1835920480,1835920487,IT
-1835920488,1835920991,GB
-1835920992,1835920999,IT
-1835921000,1835921119,GB
+1835920488,1835920519,GB
+1835920520,1835920527,IT
+1835920528,1835921119,GB
1835921120,1835921127,IT
1835921128,1835921343,GB
1835921344,1835921351,IT
1835921352,1835921711,GB
1835921712,1835921719,IT
-1835921720,1835922415,GB
+1835921720,1835922351,GB
+1835922352,1835922359,IT
+1835922360,1835922415,GB
1835922416,1835922423,IT
1835922424,1835922559,GB
1835922560,1835922567,IT
1835922568,1835922647,GB
1835922648,1835922655,IT
-1835922656,1835923351,GB
+1835922656,1835922671,GB
+1835922672,1835922679,IT
+1835922680,1835923007,GB
+1835923008,1835923015,IT
+1835923016,1835923351,GB
1835923352,1835923359,IT
1835923360,1835924375,GB
1835924376,1835924383,IT
1835924384,1835925159,GB
1835925160,1835925167,IT
-1835925168,1835925503,GB
+1835925168,1835925303,GB
+1835925304,1835925311,IT
+1835925312,1835925327,GB
+1835925328,1835925335,IT
+1835925336,1835925503,GB
1835925504,1835933695,LV
-1835933696,1835942399,RU
-1835942400,1835942655,UA
-1835942656,1835950079,RU
+1835933696,1835941887,RU
+1835941888,1835950079,UA
1835950080,1835958271,LB
1835958272,1835966463,HU
1835966464,1835974655,IR
-1835974656,1835982847,PL
+1835974656,1835978751,HU
+1835978752,1835982847,PL
1835982848,1835991039,CY
1835991040,1835999231,RU
1835999232,1836007423,IR
@@ -38842,16 +39668,17 @@
1836580864,1836597247,RU
1836597248,1836598271,LU
1836598272,1836605439,FR
-1836605440,1836611583,LU
+1836605440,1836606463,GB
+1836606464,1836611583,LU
1836611584,1836613631,DE
1836613632,1836626943,RU
1836626944,1836627967,NL
1836627968,1836630015,RU
1836630016,1836646399,BG
1836646400,1836679167,RS
-1836679168,1836686335,BG
-1836686336,1836687359,GR
-1836687360,1836711935,BG
+1836679168,1836680703,BG
+1836680704,1836681215,MK
+1836681216,1836711935,BG
1836711936,1836728319,UA
1836728320,1836744703,RS
1836744704,1836745983,FR
@@ -38951,7 +39778,7 @@
1840152576,1840185343,GB
1840185344,1840218111,BA
1840218112,1840232447,GB
-1840232448,1840232703,US
+1840232448,1840232703,NL
1840232704,1840247007,GB
1840247008,1840247023,NL
1840247024,1840316415,GB
@@ -39016,7 +39843,8 @@
1841758208,1841766399,PL
1841766400,1841774591,HU
1841774592,1841782783,PL
-1841782784,1841799167,BG
+1841782784,1841790975,US
+1841790976,1841799167,BG
1841799168,1841807359,DE
1841807360,1841815551,NO
1841815552,1841823743,BG
@@ -39034,7 +39862,7 @@
1841880064,1841881087,JP
1841881088,1841889279,UA
1841889280,1841897471,IR
-1841897472,1841905663,RO
+1841897472,1841905663,KZ
1841905664,1841922047,RU
1841922048,1841924351,NL
1841924352,1841924607,GB
@@ -39056,7 +39884,9 @@
1842017024,1842017279,BE
1842017280,1842020351,GB
1842020352,1842028543,NO
-1842028544,1842036735,CH
+1842028544,1842029567,CH
+1842029568,1842030591,FR
+1842030592,1842036735,CH
1842036736,1842042879,FR
1842042880,1842044927,LU
1842044928,1842053119,GB
@@ -39117,7 +39947,6 @@
1842241536,1842249727,RS
1842249728,1842257919,RU
1842266112,1842274303,PL
-1842274304,1842282495,RO
1842282496,1842286591,RU
1842286592,1842290687,GB
1842290688,1842294783,RS
@@ -39179,7 +40008,10 @@
1843943424,1843945471,CH
1843945472,1843947519,FR
1843947520,1843949567,RU
-1843949568,1843951615,BY
+1843949568,1843950079,ES
+1843950080,1843950335,BY
+1843950336,1843950591,ES
+1843950592,1843951615,BY
1843951616,1843955711,DE
1843955712,1843957759,IT
1843957760,1843959807,CZ
@@ -39228,7 +40060,8 @@
1844068352,1844070399,ES
1844070400,1844072447,LU
1844072448,1844076543,ES
-1844076544,1844078591,GB
+1844076544,1844078079,IE
+1844078080,1844078591,GB
1844078592,1844080639,DE
1844080640,1844082687,GE
1844082688,1844084735,DE
@@ -39284,7 +40117,9 @@
1844174848,1844178943,DE
1844178944,1844180991,EE
1844180992,1844183039,TR
-1844183040,1844191231,IT
+1844183040,1844185087,IT
+1844185088,1844186111,IE
+1844186112,1844191231,IT
1844191232,1844195327,AL
1844199424,1844203519,RU
1844203520,1844207615,NL
@@ -39563,7 +40398,9 @@
1866858496,1866989567,TW
1866989568,1867513855,CN
1867513856,1867775999,TW
-1867776000,1867841535,TH
+1867776000,1867825151,TH
+1867825152,1867825663,MM
+1867825664,1867841535,TH
1867841536,1867907071,CN
1867907072,1868038143,JP
1868038144,1868103679,PK
@@ -39585,7 +40422,6 @@
1868341248,1868345343,ID
1868345344,1868346367,GU
1868346368,1868347391,TH
-1868347392,1868348415,AU
1868348416,1868349439,KR
1868349440,1868357631,SG
1868357632,1868361727,HK
@@ -39633,7 +40469,9 @@
1876557824,1876688895,KR
1876688896,1876754431,AU
1876754432,1876756479,BD
-1876756480,1876762623,SG
+1876756480,1876761599,SG
+1876761600,1876761855,CN
+1876761856,1876762623,SG
1876762624,1876764671,KR
1876764672,1876765695,ID
1876765696,1876766719,SG
@@ -39674,8 +40512,7 @@
1883770880,1883783167,KR
1883783168,1883799551,VN
1883799552,1883832319,KR
-1883832320,1883833855,HK
-1883833856,1884028927,CN
+1883832320,1884028927,CN
1884028928,1884159999,KR
1884160000,1884164095,VN
1884164096,1884168191,TW
@@ -39789,7 +40626,6 @@
1897170944,1897172991,ID
1897172992,1897175039,PH
1897175040,1897176063,JP
-1897176064,1897177087,SG
1897177088,1897185279,PH
1897185280,1897201663,JP
1897201664,1897209855,KR
@@ -39797,8 +40633,7 @@
1897213952,1897218047,JP
1897218048,1897222143,IN
1897222144,1897226239,TW
-1897226240,1897231103,NC
-1897231104,1897234431,VU
+1897226240,1897234431,NC
1897234432,1897242623,MY
1897242624,1897250815,TW
1897250816,1897259007,HK
@@ -39889,7 +40724,6 @@
1908756480,1908760575,KR
1908760576,1908761599,NZ
1908761600,1908762623,CN
-1908762624,1908763647,IN
1908763648,1908764671,ID
1908764672,1908768767,AU
1908768768,1908801535,JP
@@ -40157,7 +40991,8 @@
1937672192,1937678335,JP
1937678336,1937686527,NC
1937686528,1937702911,KR
-1937702912,1937768447,BD
+1937702912,1937760255,BD
+1937760256,1937768447,JP
1937768448,1938030591,AU
1938030592,1938292735,MY
1938292736,1938948095,KR
@@ -40243,7 +41078,13 @@
1947205632,1948254207,CN
1948254208,1949302783,KR
1949302784,1949391103,HK
-1949391104,1949391359,CN
+1949391104,1949391116,CN
+1949391117,1949391117,HK
+1949391118,1949391218,CN
+1949391219,1949391219,HK
+1949391220,1949391242,CN
+1949391243,1949391243,HK
+1949391244,1949391359,CN
1949391360,1949433855,HK
1949433856,1949437951,CN
1949437952,1949439999,AU
@@ -40358,8 +41199,8 @@
1958830080,1958838271,JP
1958838272,1958842367,IN
1958842368,1958844415,NZ
-1958845440,1958845951,MY
-1958845952,1958846463,HK
+1958845440,1958845695,MY
+1958845696,1958846463,HK
1958846464,1958847487,IN
1958848512,1958850559,BD
1958850560,1958852607,CN
@@ -40434,7 +41275,9 @@
1962622976,1962639359,CN
1962639360,1962658815,NZ
1962658816,1962659839,HK
-1962659840,1962663935,SG
+1962659840,1962660863,SG
+1962660864,1962661375,HK
+1962661376,1962663935,SG
1962663936,1962672127,HK
1962672128,1962803199,CN
1962803200,1962827775,JP
@@ -40569,7 +41412,9 @@
1970143232,1970274303,KR
1970274304,1970798591,CN
1970798592,1970800639,SG
-1970800640,1970803711,AU
+1970800640,1970802943,AU
+1970802944,1970803199,SG
+1970803200,1970803711,AU
1970803712,1970804223,HK
1970804224,1970804479,AU
1970804480,1970804735,SG
@@ -40692,7 +41537,9 @@
1991835648,1991901183,IN
1991901184,1992097791,CN
1992097792,1992163327,SG
-1992163328,1992818687,CN
+1992163328,1992417279,CN
+1992417280,1992417535,HK
+1992417536,1992818687,CN
1992818688,1992949759,SG
1992949760,1993342975,CN
1993342976,1993605119,AU
@@ -40722,7 +41569,8 @@
1997176832,1997180927,AU
1997180928,1997185023,HK
1997185024,1997187071,JP
-1997187072,1997189119,HK
+1997187072,1997188095,HK
+1997188096,1997189119,BD
1997189120,1997191167,ID
1997191168,1997209599,JP
1997209600,1997242367,AU
@@ -40765,7 +41613,11 @@
1998271232,1998271487,AU
1998271488,1998271815,SG
1998271816,1998271823,JP
-1998271824,1998274559,SG
+1998271824,1998272431,SG
+1998272432,1998272447,JP
+1998272448,1998272547,SG
+1998272548,1998272551,JP
+1998272552,1998274559,SG
1998274560,1998454783,CN
1998454784,1998456831,AU
1998456832,1998458879,JP
@@ -40851,524 +41703,15 @@
2001559552,2001567743,KR
2001567744,2001600511,TW
2001600512,2001797119,CN
-2001797120,2001797647,SG
-2001797648,2001797663,US
-2001797664,2001798047,SG
-2001798048,2001798079,US
-2001798080,2001798087,SG
-2001798088,2001798095,US
-2001798096,2001798407,SG
-2001798408,2001798415,US
-2001798416,2001799687,SG
-2001799688,2001799695,US
-2001799696,2001799711,SG
-2001799712,2001799743,US
-2001799744,2001799807,SG
-2001799808,2001799935,US
-2001799936,2001799967,SG
-2001799968,2001799971,US
-2001799972,2001800391,SG
-2001800392,2001800399,US
-2001800400,2001800927,SG
-2001800928,2001800935,US
-2001800936,2001801023,SG
-2001801024,2001801039,US
-2001801040,2001801055,SG
-2001801056,2001801087,US
-2001801088,2001801135,SG
-2001801136,2001801151,US
-2001801152,2001801339,SG
-2001801340,2001801343,US
-2001801344,2001801663,SG
-2001801664,2001801695,US
-2001801696,2001801711,SG
-2001801712,2001801727,US
-2001801728,2001801775,SG
-2001801776,2001801807,US
-2001801808,2001801919,SG
-2001801920,2001801935,US
-2001801936,2001801983,SG
-2001801984,2001801999,US
-2001802000,2001802191,SG
-2001802192,2001802199,US
-2001802200,2001802879,SG
-2001802880,2001803007,US
-2001803008,2001803215,SG
-2001803216,2001803223,US
-2001803224,2001803647,SG
-2001803648,2001803679,US
-2001803680,2001803735,SG
-2001803736,2001803743,US
-2001803744,2001803839,SG
-2001803840,2001803871,US
-2001803872,2001803903,SG
-2001803904,2001803911,US
-2001803912,2001803919,SG
-2001803920,2001803935,US
-2001803936,2001804015,SG
-2001804016,2001804023,US
-2001804024,2001804295,SG
-2001804296,2001804303,US
-2001804304,2001805943,SG
-2001805944,2001805951,US
-2001805952,2001806527,SG
-2001806528,2001806559,SA
-2001806560,2001807959,SG
-2001807960,2001807967,US
-2001807968,2001809039,SG
-2001809040,2001809047,US
-2001809048,2001809127,SG
-2001809128,2001809135,US
-2001809136,2001809383,SG
-2001809384,2001809391,US
-2001809392,2001810111,SG
-2001810112,2001810143,US
-2001810144,2001810559,SG
-2001810560,2001810623,MY
-2001810624,2001812127,SG
-2001812128,2001812159,SA
-2001812160,2001812255,SG
-2001812256,2001812263,US
-2001812264,2001812671,SG
-2001812672,2001812675,GB
-2001812676,2001813783,SG
-2001813784,2001813791,IN
-2001813792,2001814431,SG
-2001814432,2001814439,US
-2001814440,2001814575,SG
-2001814576,2001814583,US
-2001814584,2001815191,SG
-2001815192,2001815199,US
-2001815200,2001816071,SG
-2001816072,2001816079,US
-2001816080,2001816407,SG
-2001816408,2001816415,US
-2001816416,2001818063,SG
-2001818064,2001818071,US
-2001818072,2001818615,SG
-2001818616,2001818623,IN
-2001818624,2001818639,SG
-2001818640,2001818647,US
-2001818648,2001819703,SG
-2001819704,2001819711,US
-2001819712,2001819887,SG
-2001819888,2001819895,IE
-2001819896,2001819999,SG
-2001820000,2001820031,IE
-2001820032,2001820719,SG
-2001820720,2001820727,CA
-2001820728,2001820871,SG
-2001820872,2001820879,US
-2001820880,2001821335,SG
-2001821336,2001821343,US
-2001821344,2001821367,SG
-2001821368,2001821375,US
-2001821376,2001821423,SG
-2001821424,2001821431,US
-2001821432,2001821439,SG
-2001821440,2001821447,US
-2001821448,2001822263,SG
-2001822264,2001822271,US
-2001822272,2001823007,SG
-2001823008,2001823015,US
-2001823016,2001823215,SG
-2001823216,2001823223,US
-2001823224,2001823303,SG
-2001823304,2001823311,US
-2001823312,2001823447,SG
-2001823448,2001823455,US
-2001823456,2001824175,SG
-2001824176,2001824183,US
-2001824184,2001824335,SG
-2001824336,2001824343,US
-2001824344,2001824543,SG
-2001824544,2001824551,PH
-2001824552,2001825247,SG
-2001825248,2001825255,US
-2001825256,2001825511,SG
-2001825512,2001825519,US
-2001825520,2001825623,SG
-2001825624,2001825631,US
-2001825632,2001826199,SG
-2001826200,2001826207,US
-2001826208,2001826639,SG
-2001826640,2001826671,US
-2001826672,2001826847,SG
-2001826848,2001826863,US
-2001826864,2001826911,SG
-2001826912,2001826943,US
-2001826944,2001827103,SG
-2001827104,2001827111,CA
-2001827112,2001827199,SG
-2001827200,2001827215,US
-2001827216,2001827551,SG
-2001827552,2001827567,PH
-2001827568,2001828351,SG
-2001828352,2001828367,US
-2001828368,2001828383,SG
-2001828384,2001828399,AU
-2001828400,2001828799,SG
-2001828800,2001828863,US
-2001828864,2001828927,SG
-2001828928,2001828991,US
-2001828992,2001829087,SG
-2001829088,2001829439,US
-2001829440,2001829887,SG
-2001829888,2001833007,HK
-2001833008,2001833015,CN
-2001833016,2001846271,HK
-2001846272,2001846311,US
-2001846312,2001846335,SG
-2001846336,2001846359,US
-2001846360,2001846479,SG
-2001846480,2001846495,US
-2001846496,2001846503,SG
-2001846504,2001846511,US
-2001846512,2001846519,SG
-2001846520,2001846523,US
-2001846524,2001846531,SG
-2001846532,2001846543,US
-2001846544,2001846559,SG
-2001846560,2001846567,US
-2001846568,2001846571,SG
-2001846572,2001846607,US
-2001846608,2001846615,SG
-2001846616,2001846727,US
-2001846728,2001846735,SG
-2001846736,2001846755,US
-2001846756,2001846847,SG
-2001846848,2001846911,US
-2001846912,2001846927,SG
-2001846928,2001846943,US
-2001846944,2001846959,SG
-2001846960,2001846975,IN
-2001846976,2001847071,SG
-2001847072,2001847103,US
-2001847104,2001847167,SG
-2001847168,2001847416,US
-2001847417,2001847417,SG
-2001847418,2001847429,US
-2001847430,2001847439,SG
-2001847440,2001847455,US
-2001847456,2001847463,SG
-2001847464,2001847479,US
-2001847480,2001847487,SG
-2001847488,2001847491,US
-2001847492,2001847493,SG
-2001847494,2001847495,US
-2001847496,2001847519,SG
-2001847520,2001847535,US
-2001847536,2001847537,SG
-2001847538,2001847559,US
-2001847560,2001847567,SG
-2001847568,2001847575,US
-2001847576,2001847591,SG
-2001847592,2001847599,US
-2001847600,2001847623,SG
-2001847624,2001847647,US
-2001847648,2001847663,SG
-2001847664,2001847671,US
-2001847672,2001847679,SG
-2001847680,2001847703,US
-2001847704,2001847711,SG
-2001847712,2001847727,US
-2001847728,2001847743,SG
-2001847744,2001847747,US
-2001847748,2001847755,SG
-2001847756,2001847771,US
-2001847772,2001847783,SG
-2001847784,2001847791,US
-2001847792,2001847799,SG
-2001847800,2001847839,US
-2001847840,2001847855,SG
-2001847856,2001847871,US
-2001847872,2001847875,SG
-2001847876,2001847879,US
-2001847880,2001847895,SG
-2001847896,2001847903,US
-2001847904,2001847935,SG
-2001847936,2001847951,US
-2001847952,2001847955,SG
-2001847956,2001847959,US
-2001847960,2001847963,SG
-2001847964,2001847967,US
-2001847968,2001847975,SG
-2001847976,2001847979,US
-2001847980,2001847981,SG
-2001847982,2001847991,US
-2001847992,2001848007,SG
-2001848008,2001848015,US
-2001848016,2001848047,SG
-2001848048,2001848055,US
-2001848056,2001848071,SG
-2001848072,2001848079,IN
-2001848080,2001848103,SG
-2001848104,2001848111,US
-2001848112,2001848135,SG
-2001848136,2001848143,US
-2001848144,2001848151,SG
-2001848152,2001848167,US
-2001848168,2001848189,SG
-2001848190,2001848199,US
-2001848200,2001848207,SG
-2001848208,2001848231,US
-2001848232,2001848247,SG
-2001848248,2001848253,US
-2001848254,2001848254,SG
-2001848255,2001848255,MY
-2001848256,2001848279,SG
-2001848280,2001848287,US
-2001848288,2001848303,SG
-2001848304,2001848327,US
-2001848328,2001848335,SG
-2001848336,2001848367,US
-2001848368,2001848383,SG
-2001848384,2001848407,US
-2001848408,2001848415,SG
-2001848416,2001848447,US
-2001848448,2001848479,SG
-2001848480,2001848575,US
-2001848576,2001848623,SG
-2001848624,2001848679,US
-2001848680,2001848687,SG
-2001848688,2001848767,US
-2001848768,2001848863,SG
-2001848864,2001848879,US
-2001848880,2001848895,SG
-2001848896,2001848943,US
-2001848944,2001848951,SG
-2001848952,2001848975,US
-2001848976,2001848991,SG
-2001848992,2001849015,US
-2001849016,2001849023,SG
-2001849024,2001849167,US
-2001849168,2001849183,SG
-2001849184,2001849247,US
-2001849248,2001849255,SG
-2001849256,2001849271,US
-2001849272,2001849279,SG
-2001849280,2001850391,US
-2001850392,2001850399,SG
-2001850400,2001850415,US
-2001850416,2001850423,SG
-2001850424,2001850435,US
-2001850436,2001850439,SG
-2001850440,2001850515,US
-2001850516,2001850517,SG
-2001850518,2001850519,US
-2001850520,2001850543,SG
-2001850544,2001850551,US
-2001850552,2001850591,SG
-2001850592,2001850599,US
-2001850600,2001850607,SG
-2001850608,2001850624,US
-2001850625,2001850625,SG
-2001850626,2001850655,US
-2001850656,2001850663,SG
-2001850664,2001850667,US
-2001850668,2001850679,SG
-2001850680,2001850727,US
-2001850728,2001850735,SG
-2001850736,2001850791,US
-2001850792,2001850795,SG
-2001850796,2001850823,US
-2001850824,2001850847,SG
-2001850848,2001850863,US
-2001850864,2001850867,SG
-2001850868,2001850871,US
-2001850872,2001850911,SG
-2001850912,2001850935,US
-2001850936,2001851023,SG
-2001851024,2001851083,US
-2001851084,2001851087,SG
-2001851088,2001851095,US
-2001851096,2001851099,SG
-2001851100,2001851159,US
-2001851160,2001851167,SG
-2001851168,2001851175,US
-2001851176,2001851231,SG
-2001851232,2001851239,US
-2001851240,2001851247,SG
-2001851248,2001851255,US
-2001851256,2001851271,SG
-2001851272,2001851287,US
-2001851288,2001851295,SG
-2001851296,2001851303,US
-2001851304,2001851311,SG
-2001851312,2001851407,US
-2001851408,2001851423,SG
-2001851424,2001851479,US
-2001851480,2001851487,SG
-2001851488,2001851503,US
-2001851504,2001851527,SG
-2001851528,2001851535,US
-2001851536,2001851551,SG
-2001851552,2001851591,US
-2001851592,2001851599,SG
-2001851600,2001851631,US
-2001851632,2001851647,SG
-2001851648,2001851655,US
-2001851656,2001851663,SG
-2001851664,2001851711,US
-2001851712,2001851727,SG
-2001851728,2001851743,US
-2001851744,2001851759,SG
-2001851760,2001851767,US
-2001851768,2001851771,SG
-2001851772,2001851775,US
-2001851776,2001851783,SG
-2001851784,2001851807,US
-2001851808,2001851815,SG
-2001851816,2001851823,US
-2001851824,2001851831,MY
-2001851832,2001851883,US
-2001851884,2001851903,SG
-2001851904,2001851905,US
-2001851906,2001851927,SG
-2001851928,2001851935,US
-2001851936,2001851967,SG
-2001851968,2001851975,US
-2001851976,2001851991,SG
-2001851992,2001851999,US
-2001852000,2001852007,SG
-2001852008,2001852015,US
-2001852016,2001852031,SG
-2001852032,2001852055,US
-2001852056,2001852065,SG
-2001852066,2001852067,PH
-2001852068,2001852103,US
-2001852104,2001852111,SG
-2001852112,2001852127,US
-2001852128,2001852135,SG
-2001852136,2001852167,US
-2001852168,2001852175,SG
-2001852176,2001852183,US
-2001852184,2001852207,SG
-2001852208,2001852215,US
-2001852216,2001852257,SG
-2001852258,2001852259,US
-2001852260,2001852263,SG
-2001852264,2001852271,US
-2001852272,2001852279,SG
-2001852280,2001852351,US
-2001852352,2001852357,SG
-2001852358,2001852359,US
-2001852360,2001852367,SG
-2001852368,2001852399,US
-2001852400,2001852403,SG
-2001852404,2001853015,US
-2001853016,2001853039,SG
-2001853040,2001853055,US
-2001853056,2001853063,SG
-2001853064,2001853071,US
-2001853072,2001853079,SG
-2001853080,2001853083,US
-2001853084,2001853087,SG
-2001853088,2001853239,US
-2001853240,2001853255,SG
-2001853256,2001853257,US
-2001853258,2001853258,MY
-2001853259,2001853263,SG
-2001853264,2001853271,US
-2001853272,2001853295,SG
-2001853296,2001853303,US
-2001853304,2001853335,SG
-2001853336,2001853375,US
-2001853376,2001853379,SG
-2001853380,2001853381,US
-2001853382,2001853383,SG
-2001853384,2001853399,US
-2001853400,2001853423,SG
-2001853424,2001853439,US
-2001853440,2001853463,SG
-2001853464,2001853471,US
-2001853472,2001853479,SG
-2001853480,2001853487,SA
-2001853488,2001853503,SG
-2001853504,2001853543,US
-2001853544,2001853559,SG
-2001853560,2001853575,US
-2001853576,2001853639,SG
-2001853640,2001853663,US
-2001853664,2001853671,SG
-2001853672,2001853676,US
-2001853677,2001853679,SG
-2001853680,2001853687,US
-2001853688,2001853703,SG
-2001853704,2001853727,US
-2001853728,2001853743,SG
-2001853744,2001853759,US
-2001853760,2001853803,SG
-2001853804,2001853823,US
-2001853824,2001853831,SG
-2001853832,2001853855,US
-2001853856,2001853863,SG
-2001853864,2001853895,US
-2001853896,2001853907,SG
-2001853908,2001853911,US
-2001853912,2001853943,SG
-2001853944,2001853947,US
-2001853948,2001853951,SG
-2001853952,2001854463,US
-2001854464,2001854475,SG
-2001854476,2001854479,US
-2001854480,2001854531,SG
-2001854532,2001854535,US
-2001854536,2001854547,SG
-2001854548,2001854551,US
-2001854552,2001854611,SG
-2001854612,2001854615,US
-2001854616,2001854703,SG
-2001854704,2001854707,US
-2001854708,2001854759,SG
-2001854760,2001854763,US
-2001854764,2001854767,SG
-2001854768,2001854775,AR
-2001854776,2001854783,SG
-2001854784,2001854787,US
-2001854788,2001854802,SG
-2001854803,2001854803,US
-2001854804,2001854863,SG
-2001854864,2001854867,US
-2001854868,2001855075,SG
-2001855076,2001855079,US
-2001855080,2001855083,SG
-2001855084,2001855087,US
-2001855088,2001855159,SG
-2001855160,2001855167,US
-2001855168,2001855183,SG
-2001855184,2001855187,US
-2001855188,2001855195,SG
-2001855196,2001855199,US
-2001855200,2001855223,SG
-2001855224,2001855231,IN
-2001855232,2001855247,SG
-2001855248,2001855251,US
-2001855252,2001855415,SG
-2001855416,2001855417,US
-2001855418,2001855419,SG
-2001855420,2001855423,US
-2001855424,2001855455,SG
-2001855456,2001855459,US
-2001855460,2001855655,SG
-2001855656,2001855663,US
-2001855664,2001855831,SG
-2001855832,2001855839,US
-2001855840,2001856055,SG
-2001856056,2001856059,US
-2001856060,2001856295,SG
-2001856296,2001856303,US
-2001856304,2001856355,SG
-2001856356,2001856363,US
-2001856364,2001856599,SG
-2001856600,2001856603,US
-2001856604,2001856639,SG
-2001856640,2001856703,US
-2001856704,2001856815,SG
-2001856816,2001856823,US
-2001856824,2001856835,SG
-2001856836,2001856847,US
-2001856848,2001857283,SG
+2001797120,2001829887,SG
+2001829888,2001841247,HK
+2001841248,2001841248,SA
+2001841249,2001846271,HK
+2001846272,2001855231,SG
+2001855232,2001855263,US
+2001855264,2001855807,SG
+2001855808,2001855823,GB
+2001855824,2001857283,SG
2001857284,2001857287,US
2001857288,2001857383,SG
2001857384,2001857391,US
@@ -41527,7 +41870,7 @@
2015217664,2015219456,GU
2015219457,2015219711,IN
2015219712,2015219967,US
-2015219968,2015220223,HK
+2015219968,2015220223,PH
2015220224,2015220479,IN
2015220480,2015220735,HK
2015220736,2015223807,IN
@@ -41655,7 +41998,6 @@
2033614848,2033623039,AU
2033625088,2033627135,HK
2033627136,2033629183,CN
-2033629184,2033631231,JP
2033631232,2033647615,KR
2033647616,2033663999,CN
2033664000,2033696767,KR
@@ -41747,11 +42089,14 @@
2047082496,2047410175,CN
2047410176,2047492095,HK
2047492096,2047496191,KR
-2047496192,2047506431,HK
+2047496192,2047504383,HK
+2047504384,2047506431,CN
2047506432,2047508479,US
2047508480,2047574015,CN
2047574016,2047606783,SG
-2047606784,2047803391,CN
+2047606784,2047770879,CN
+2047770880,2047773184,HK
+2047773185,2047803391,CN
2047803392,2047868927,IN
2047868928,2048917503,JP
2048917504,2049966079,KR
@@ -41799,9 +42144,7 @@
2053534720,2053537791,IN
2053537792,2053636095,JP
2053636096,2054160383,AU
-2054160384,2054189567,CN
-2054189568,2054190591,HK
-2054190592,2054376447,CN
+2054160384,2054376447,CN
2054376448,2054377471,HK
2054377472,2054422527,CN
2054422528,2054619135,TW
@@ -41843,7 +42186,9 @@
2056794112,2056796159,BD
2056796160,2056806399,JP
2056806400,2056814591,KR
-2056814592,2056816863,JP
+2056814592,2056815215,JP
+2056815216,2056815231,HK
+2056815232,2056816863,JP
2056816864,2056816895,MY
2056816896,2056817335,JP
2056817336,2056817343,HK
@@ -41915,11 +42260,7 @@
2063110144,2063111167,JP
2063111168,2063114239,AU
2063114240,2063115263,IN
-2063115264,2063117823,JP
-2063117824,2063117839,PH
-2063117840,2063117951,JP
-2063117952,2063118079,PH
-2063118080,2063118159,JP
+2063115264,2063118159,JP
2063118160,2063118191,PH
2063118192,2063118335,JP
2063118336,2063118591,IN
@@ -42235,6 +42576,7 @@
2090696704,2090729471,TH
2090729472,2090733567,VN
2090733568,2090736639,AU
+2090736640,2090737663,IN
2090737664,2090745855,PH
2090745856,2090762239,MN
2090762240,2090778623,ID
@@ -42377,10 +42719,16 @@
2111832064,2112487423,TW
2112487424,2112618495,VN
2112618496,2112880639,NZ
-2112880640,2113683455,KR
-2113683456,2113687999,JP
+2112880640,2113560063,KR
+2113560064,2113560319,SG
+2113560320,2113683455,KR
+2113683456,2113685663,JP
+2113685664,2113685695,SG
+2113685696,2113687999,JP
2113688000,2113688031,AU
-2113688032,2113693599,JP
+2113688032,2113688959,JP
+2113688960,2113688991,SG
+2113688992,2113693599,JP
2113693600,2113693615,HK
2113693616,2113716223,JP
2113716224,2113724927,SG
@@ -42543,7 +42891,7 @@
2156593152,2156658687,IL
2156658688,2156691455,IR
2156691456,2156697599,FR
-2156697600,2156699647,CY
+2156697600,2156699647,GR
2156699648,2156703743,RU
2156703744,2156707839,BG
2156707840,2156709887,RU
@@ -42584,7 +42932,7 @@
2161573888,2162687999,US
2162688000,2162753535,GB
2162753536,2162819071,CA
-2162819072,2162884607,RO
+2162819072,2162884607,SA
2162884608,2163212287,US
2163212288,2163277823,GB
2163277824,2163408895,US
@@ -42615,7 +42963,9 @@
2166571008,2166575103,GB
2166575104,2166575359,US
2166575360,2166575615,GB
-2166575616,2166606847,US
+2166575616,2166594563,US
+2166594564,2166594564,DE
+2166594565,2166606847,US
2166606848,2166607009,GB
2166607010,2166607010,DE
2166607011,2166607103,GB
@@ -42672,7 +43022,9 @@
2175926272,2175991807,SE
2175991808,2176057343,US
2176057344,2176122879,AU
-2176122880,2176450559,FR
+2176122880,2176425983,FR
+2176425984,2176434175,DE
+2176434176,2176450559,FR
2176450560,2176516095,US
2176516096,2176581631,DE
2176581632,2176868607,US
@@ -42686,7 +43038,7 @@
2177368064,2177695743,US
2177761280,2177826815,DE
2177826816,2177892351,US
-2177892352,2177957887,GB
+2177892352,2177957887,SA
2177957888,2178351103,US
2178351104,2178416639,GB
2178416640,2178482175,US
@@ -42698,6 +43050,8 @@
2179392000,2179397632,US
2179397633,2179397633,GB
2179397634,2179465215,US
+2179465216,2179497983,LS
+2179497984,2179530751,ZA
2179530752,2179596287,DE
2179596288,2179661823,GB
2179661824,2179989503,US
@@ -42922,15 +43276,13 @@
2193707656,2193707663,IT
2193707664,2193707751,GB
2193707752,2193707759,IT
-2193707760,2193708423,GB
-2193708424,2193708431,IT
-2193708432,2193708647,GB
-2193708648,2193708655,IT
-2193708656,2193708735,GB
+2193707760,2193708735,GB
2193708736,2193708743,IT
2193708744,2193709087,GB
2193709088,2193709095,IT
-2193709096,2193711103,GB
+2193709096,2193709631,GB
+2193709632,2193709639,IT
+2193709640,2193711103,GB
2193711104,2193713151,DE
2193713152,2193715199,ES
2193715200,2193717247,DE
@@ -42955,9 +43307,7 @@
2195456000,2195521535,AU
2195521536,2195652607,US
2195652608,2195718143,CH
-2195718144,2195742719,US
-2195742720,2195742743,GB
-2195742744,2195783679,US
+2195718144,2195783679,US
2195783680,2196045823,DK
2196045824,2196111359,SE
2196111360,2196439039,FI
@@ -42982,9 +43332,7 @@
2197776384,2197778431,DE
2197778432,2197780479,IT
2197780480,2197782527,DE
-2197782528,2197782685,RU
-2197782686,2197782686,UA
-2197782687,2197786623,RU
+2197782528,2197786623,UA
2197786624,2197788671,IT
2197788672,2197790719,PL
2197790720,2197792767,SE
@@ -43217,11 +43565,14 @@
2212303872,2212304895,BR
2212304896,2212305919,PA
2212305920,2212306943,TT
+2212306944,2212307967,CL
2212307968,2212308991,BR
2212308992,2212310015,CO
2212310016,2212315135,BR
2212315136,2212316159,AR
-2212316160,2212335615,BR
+2212316160,2212327423,BR
+2212327424,2212328447,VE
+2212328448,2212335615,BR
2212335616,2212336639,CW
2212336640,2212337663,BR
2212337664,2212338687,PE
@@ -43268,9 +43619,21 @@
2214528000,2214529023,AR
2214529024,2214530047,BR
2214530048,2214531071,AR
-2214531072,2214540287,BR
-2214541312,2214542335,BR
+2214531072,2214537215,BR
+2214537216,2214538239,BZ
+2214538240,2214542335,BR
2214542336,2214543359,AR
+2214543360,2214553599,BR
+2214553600,2214554623,VE
+2214554624,2214561791,BR
+2214561792,2214562815,PE
+2214562816,2214573055,BR
+2214573056,2214574079,AR
+2214574080,2214576127,BR
+2214576128,2214577151,PE
+2214577152,2214590463,BR
+2214590464,2214591487,AR
+2214591488,2214592511,BR
2214592512,2218786815,US
2218786816,2219769855,IL
2219769856,2224160767,US
@@ -43340,10 +43703,29 @@
2231107584,2231173119,DE
2231173120,2231238655,US
2231238656,2231304191,MX
-2231305216,2231306239,AR
+2231304192,2231305215,PE
+2231305216,2231307263,AR
2231307264,2231309311,BR
2231309312,2231310335,CO
-2231310336,2231311359,BR
+2231310336,2231321599,BR
+2231321600,2231322623,CL
+2231322624,2231332863,BR
+2231332864,2231333887,AR
+2231333888,2231335935,BR
+2231335936,2231336959,MX
+2231336960,2231337983,BR
+2231337984,2231339007,HN
+2231339008,2231346175,BR
+2231346176,2231347199,PY
+2231347200,2231355391,BR
+2231355392,2231356415,AR
+2231356416,2231357439,BR
+2231357440,2231358463,SV
+2231358464,2231361535,BR
+2231361536,2231362559,AR
+2231362560,2231364607,BR
+2231364608,2231365631,CL
+2231365632,2231369727,BR
2231369728,2248146943,JP
2248146944,2248148991,IT
2248148992,2248151039,ES
@@ -43395,7 +43777,8 @@
2250440704,2250506239,US
2250506240,2250571775,GB
2250571776,2250637311,FI
-2250637312,2250956799,US
+2250637312,2250702847,CH
+2250702848,2250956799,US
2250956800,2250957055,HK
2250957056,2250957311,SG
2250957312,2250957567,AU
@@ -43467,278 +43850,178 @@
2258305024,2258370559,DE
2258370560,2258436095,US
2258436096,2258567167,FR
-2258567168,2258568191,TW
+2258567168,2258568191,US
2258568192,2258568447,HK
-2258568448,2258571647,TW
-2258571648,2258571711,US
-2258571712,2258571719,TW
-2258571720,2258571735,US
-2258571736,2258571743,TW
-2258571744,2258571751,US
-2258571752,2258571763,TW
-2258571764,2258571767,US
-2258571768,2258579463,TW
-2258579464,2258579467,US
-2258579468,2258579967,TW
-2258579968,2258580031,US
-2258580032,2258582783,TW
+2258568448,2258582783,US
2258582784,2258582791,GB
-2258582792,2258583551,TW
+2258582792,2258583551,US
2258583552,2258591743,GB
-2258591744,2258591935,TW
+2258591744,2258591935,AU
2258591936,2258591967,HK
-2258591968,2258592271,TW
+2258591968,2258592271,AU
2258592272,2258592279,JP
-2258592280,2258592287,TW
+2258592280,2258592287,AU
2258592288,2258592291,JP
-2258592292,2258592439,TW
+2258592292,2258592439,AU
2258592440,2258592447,JP
-2258592448,2258592479,TW
-2258592480,2258592495,AU
-2258592496,2258592511,TW
-2258592512,2258592767,AU
+2258592448,2258592767,AU
2258592768,2258593023,HK
-2258593024,2258593279,TW
+2258593024,2258593087,TW
+2258593088,2258593279,AU
2258593280,2258593535,HK
-2258593536,2258594047,TW
+2258593536,2258594047,AU
2258594048,2258594111,HK
-2258594112,2258594303,TW
-2258594304,2258594319,HK
-2258594320,2258594559,TW
-2258594560,2258594815,HK
-2258594816,2258595167,TW
-2258595168,2258595199,AU
-2258595200,2258595383,TW
+2258594112,2258594143,AU
+2258594144,2258594175,HK
+2258594176,2258594303,AU
+2258594304,2258594815,HK
+2258594816,2258595103,AU
+2258595104,2258595167,TW
+2258595168,2258595231,AU
+2258595232,2258595263,TW
+2258595264,2258595295,AU
+2258595296,2258595327,TW
+2258595328,2258595383,AU
2258595384,2258595391,KR
-2258595392,2258595519,TW
-2258595520,2258595551,AU
-2258595552,2258595887,TW
+2258595392,2258595887,AU
2258595888,2258595895,NZ
-2258595896,2258595983,TW
-2258595984,2258595991,AU
-2258595992,2258596031,TW
-2258596032,2258596063,AU
-2258596064,2258596095,TW
+2258595896,2258595967,AU
+2258595968,2258595983,TW
+2258595984,2258596095,AU
2258596096,2258596103,HK
-2258596104,2258596159,TW
+2258596104,2258596159,AU
2258596160,2258596255,HK
-2258596256,2258596351,TW
+2258596256,2258596351,AU
2258596352,2258597071,HK
2258597072,2258597079,TW
2258597080,2258597215,HK
-2258597216,2258597263,TW
+2258597216,2258597263,AU
2258597264,2258597293,HK
2258597294,2258597294,PG
2258597295,2258597303,HK
-2258597304,2258597311,TW
+2258597304,2258597311,AU
2258597312,2258597367,HK
-2258597368,2258597371,TW
+2258597368,2258597371,AU
2258597372,2258597535,HK
-2258597536,2258597567,TW
+2258597536,2258597567,AU
2258597568,2258597583,HK
-2258597584,2258597599,TW
+2258597584,2258597599,AU
2258597600,2258597631,HK
-2258597632,2258597759,AU
-2258597760,2258597887,HK
-2258597888,2258597895,AU
-2258597896,2258597903,TW
+2258597632,2258597903,AU
2258597904,2258597919,JP
2258597920,2258597927,AU
2258597928,2258597935,JP
-2258597936,2258597951,AU
-2258597952,2258597975,TW
-2258597976,2258597983,AU
-2258597984,2258597999,TW
-2258598000,2258598007,AU
-2258598008,2258598111,TW
+2258597936,2258598079,AU
+2258598080,2258598087,TW
+2258598088,2258598095,AU
+2258598096,2258598111,TW
2258598112,2258598143,JP
-2258598144,2258598351,TW
-2258598352,2258598367,AU
-2258598368,2258598399,TW
-2258598400,2258598439,AU
-2258598440,2258598447,TW
-2258598448,2258598479,AU
-2258598480,2258598495,TW
+2258598144,2258598495,AU
2258598496,2258598511,NZ
-2258598512,2258598519,TW
+2258598512,2258598519,AU
2258598520,2258598527,JP
-2258598528,2258598567,TW
-2258598568,2258598623,AU
-2258598624,2258598667,TW
-2258598668,2258598671,AU
-2258598672,2258598991,TW
-2258598992,2258598999,AU
-2258599000,2258599011,TW
-2258599012,2258599019,AU
-2258599020,2258599183,TW
+2258598528,2258598623,AU
+2258598624,2258598655,TW
+2258598656,2258599183,AU
2258599184,2258599187,JP
-2258599188,2258599499,TW
-2258599500,2258599503,AU
-2258599504,2258599587,TW
-2258599588,2258599591,AU
-2258599592,2258599675,TW
+2258599188,2258599675,AU
2258599676,2258599679,JP
-2258599680,2258599743,TW
-2258599744,2258599747,AU
-2258599748,2258599935,TW
+2258599680,2258599935,AU
2258599936,2258599971,HK
2258599972,2258599975,AU
2258599976,2258600447,HK
-2258600448,2258600515,TW
+2258600448,2258600515,AU
2258600516,2258600519,IN
-2258600520,2258600523,TW
+2258600520,2258600523,AU
2258600524,2258600527,IN
-2258600528,2258600735,TW
-2258600736,2258600739,AU
-2258600740,2258600807,TW
-2258600808,2258600811,AU
-2258600812,2258600959,TW
+2258600528,2258600959,AU
2258600960,2258601087,SG
-2258601088,2258601119,AU
-2258601120,2258601151,TW
-2258601152,2258601167,AU
+2258601088,2258601167,AU
2258601168,2258601175,NZ
-2258601176,2258601199,AU
-2258601200,2258601207,TW
-2258601208,2258601215,AU
+2258601176,2258601215,AU
2258601216,2258601343,TW
-2258601344,2258601359,AU
-2258601360,2258601367,TW
-2258601368,2258601375,AU
-2258601376,2258601407,TW
-2258601408,2258601423,AU
-2258601424,2258601471,TW
+2258601344,2258601471,AU
2258601472,2258601983,JP
-2258601984,2258602239,TW
+2258601984,2258602239,AU
2258602240,2258602495,HK
-2258602496,2258602751,TW
+2258602496,2258602751,AU
2258602752,2258603071,HK
-2258603072,2258603087,TW
+2258603072,2258603087,PG
2258603088,2258603089,HK
2258603090,2258603090,PG
2258603091,2258603103,HK
-2258603104,2258603135,TW
+2258603104,2258603135,PG
2258603136,2258603139,HK
-2258603140,2258603199,TW
+2258603140,2258603199,PG
2258603200,2258603207,HK
-2258603208,2258603263,TW
-2258603264,2258603279,AU
-2258603280,2258603287,TW
-2258603288,2258603295,AU
-2258603296,2258603775,TW
+2258603208,2258603263,PG
+2258603264,2258603775,AU
2258603776,2258603839,HK
-2258603840,2258603903,TW
+2258603840,2258603903,AU
2258603904,2258603943,HK
-2258603944,2258603951,TW
+2258603944,2258603951,AU
2258603952,2258603967,HK
-2258603968,2258604031,TW
+2258603968,2258604031,AU
2258604032,2258604543,HK
-2258604544,2258604671,TW
+2258604544,2258604671,AU
2258604672,2258604735,SG
2258604736,2258604799,AU
2258604800,2258605311,HK
2258605312,2258605439,SG
-2258605440,2258605823,TW
-2258605824,2258605951,AU
-2258605952,2258605999,TW
-2258606000,2258606015,AU
-2258606016,2258606047,TW
-2258606048,2258606079,AU
+2258605440,2258606079,AU
2258606080,2258606367,HK
-2258606368,2258606415,TW
+2258606368,2258606415,AU
2258606416,2258606423,HK
-2258606424,2258606463,TW
+2258606424,2258606463,AU
2258606464,2258606471,HK
-2258606472,2258606487,TW
+2258606472,2258606487,AU
2258606488,2258606535,HK
-2258606536,2258606719,TW
-2258606720,2258606751,AU
-2258606752,2258606847,TW
-2258606848,2258606879,AU
-2258606880,2258606963,TW
+2258606536,2258606963,AU
2258606964,2258606967,NZ
-2258606968,2258606971,AU
-2258606972,2258607007,TW
-2258607008,2258607039,AU
-2258607040,2258607087,TW
-2258607088,2258607091,AU
+2258606968,2258607091,AU
2258607092,2258607095,NZ
-2258607096,2258607103,AU
-2258607104,2258607171,TW
-2258607172,2258607172,AU
-2258607173,2258607263,TW
-2258607264,2258607279,AU
-2258607280,2258607351,TW
+2258607096,2258607351,AU
2258607352,2258607359,NZ
-2258607360,2258607519,AU
-2258607520,2258607543,TW
-2258607544,2258607551,AU
-2258607552,2258607615,TW
+2258607360,2258607615,AU
2258607616,2258607879,HK
-2258607880,2258607903,TW
+2258607880,2258607903,AU
2258607904,2258607999,HK
-2258608000,2258608063,TW
+2258608000,2258608063,AU
2258608064,2258608127,HK
-2258608128,2258608255,TW
+2258608128,2258608183,AU
+2258608184,2258608187,TW
+2258608188,2258608255,AU
2258608256,2258608259,JP
-2258608260,2258608279,TW
+2258608260,2258608279,AU
2258608280,2258608283,JP
-2258608284,2258608383,TW
+2258608284,2258608383,AU
2258608384,2258608639,HK
-2258608640,2258608647,AU
-2258608648,2258608655,TW
+2258608640,2258608655,AU
2258608656,2258608663,JP
-2258608664,2258608671,TW
+2258608664,2258608671,AU
2258608672,2258608687,JP
-2258608688,2258608863,AU
-2258608864,2258608879,TW
-2258608880,2258608895,AU
-2258608896,2258609087,TW
-2258609088,2258609119,AU
-2258609120,2258609151,TW
-2258609152,2258609663,AU
-2258609664,2258609919,TW
-2258609920,2258609967,AU
-2258609968,2258610179,TW
-2258610180,2258610183,IN
-2258610184,2258610239,TW
-2258610240,2258610303,IN
-2258610304,2258610431,TW
-2258610432,2258610687,AU
-2258610688,2258611071,TW
+2258608688,2258610175,AU
+2258610176,2258610431,IN
+2258610432,2258610703,AU
+2258610704,2258610719,TW
+2258610720,2258610751,AU
+2258610752,2258610755,TW
+2258610756,2258610759,AU
+2258610760,2258610783,TW
+2258610784,2258611071,AU
2258611072,2258611103,JP
-2258611104,2258611119,TW
+2258611104,2258611119,AU
2258611120,2258611167,JP
-2258611168,2258611215,TW
+2258611168,2258611215,AU
2258611216,2258611223,NZ
-2258611224,2258611567,TW
-2258611568,2258611583,AU
-2258611584,2258611967,TW
+2258611224,2258611967,AU
2258611968,2258612223,HK
-2258612224,2258612303,AU
-2258612304,2258612351,TW
-2258612352,2258612367,AU
-2258612368,2258612383,TW
-2258612384,2258612743,AU
-2258612744,2258612767,TW
-2258612768,2258612799,AU
-2258612800,2258613503,TW
-2258613504,2258613567,AU
-2258613568,2258614783,TW
+2258612224,2258614783,AU
2258614784,2258614815,IN
-2258614816,2258615039,TW
+2258614816,2258615039,AU
2258615040,2258615055,IN
-2258615056,2258615295,TW
-2258615296,2258615551,AU
-2258615552,2258616191,TW
-2258616192,2258616203,AU
-2258616204,2258616207,TW
-2258616208,2258616303,AU
-2258616304,2258616311,TW
-2258616312,2258616319,AU
-2258616320,2258620415,TW
-2258620416,2258621951,HK
-2258621952,2258632703,TW
+2258615056,2258616319,AU
+2258616320,2258632703,HK
2258632704,2258698239,JP
2258698240,2259222527,US
2259222528,2259288063,DE
@@ -43789,7 +44072,8 @@
2262892544,2262958079,GB
2262958080,2263023615,IE
2263023616,2263089151,FR
-2263089152,2263678975,US
+2263089152,2263613439,US
+2263613440,2263678975,TH
2263678976,2263744511,JP
2263744512,2263810047,US
2263810048,2263875583,GB
@@ -43816,7 +44100,10 @@
2266431488,2266497023,CA
2266497024,2266694655,US
2266694656,2266694911,SG
-2266694912,2276786175,US
+2266694912,2270488575,US
+2270488576,2270490623,MO
+2270490624,2270494719,IN
+2270494720,2276786175,US
2276786176,2276851711,CA
2276851712,2277769215,US
2277769216,2277834751,GB
@@ -43927,7 +44214,9 @@
2304638976,2304704511,CA
2304704512,2304770047,US
2304770048,2304835583,FI
-2304835584,2305097727,US
+2304835584,2304901119,US
+2304901120,2304966655,CZ
+2304966656,2305097727,US
2305097728,2305163263,PK
2305163264,2305359871,US
2305359872,2305425407,GB
@@ -43937,7 +44226,10 @@
2305687552,2305753087,US
2305753088,2305818623,AU
2305818624,2306015231,US
-2306080768,2306342911,US
+2306080768,2306129919,US
+2306129920,2306138111,NL
+2306138112,2306146303,IE
+2306146304,2306342911,US
2306342912,2306408447,NL
2306408448,2306473983,FR
2306473984,2306539519,CA
@@ -44008,6 +44300,29 @@
2314993664,2315059199,US
2315059200,2315124735,GB
2315124736,2315190271,US
+2315255808,2315257855,BR
+2315257856,2315258879,AR
+2315258880,2315259903,CL
+2315259904,2315266047,BR
+2315266048,2315267071,VE
+2315267072,2315270143,BR
+2315270144,2315271167,AR
+2315271168,2315278335,BR
+2315278336,2315279359,CO
+2315279360,2315282431,BR
+2315282432,2315283455,AR
+2315283456,2315285503,BR
+2315285504,2315286527,PA
+2315286528,2315287551,CL
+2315287552,2315294719,BR
+2315294720,2315296767,AR
+2315296768,2315302911,BR
+2315302912,2315303935,AR
+2315303936,2315314175,BR
+2315314176,2315315199,HN
+2315315200,2315317247,BR
+2315317248,2315318271,HN
+2315318272,2315321343,BR
2315321344,2315452415,US
2315452416,2315517951,GB
2315517952,2315583487,ES
@@ -44020,7 +44335,9 @@
2316173312,2316238847,SE
2316238848,2316500991,US
2316500992,2316566527,AU
-2316566528,2316632063,US
+2316566528,2316613887,US
+2316613888,2316614143,GB
+2316614144,2316632063,US
2316632064,2316697599,FR
2316697600,2316763135,AT
2316763136,2316828671,US
@@ -44041,6 +44358,31 @@
2317487360,2317487615,US
2317487616,2317549567,CA
2317549568,2317615103,US
+2317615104,2317619199,BR
+2317619200,2317620223,AR
+2317620224,2317621247,BR
+2317621248,2317622271,DO
+2317622272,2317628415,BR
+2317628416,2317629439,AR
+2317629440,2317631487,BR
+2317631488,2317632511,CO
+2317632512,2317634559,BR
+2317634560,2317635583,BO
+2317635584,2317638655,BR
+2317638656,2317639679,HN
+2317639680,2317640703,AR
+2317640704,2317649919,BR
+2317649920,2317650943,HN
+2317650944,2317651967,BR
+2317651968,2317652991,PE
+2317652992,2317654015,AR
+2317654016,2317655039,MX
+2317655040,2317670399,BR
+2317671424,2317672447,AR
+2317672448,2317675519,BR
+2317675520,2317676543,AR
+2317676544,2317679615,BR
+2317679616,2317680639,CL
2317680640,2317811711,GB
2317811712,2317877247,US
2317877248,2317942783,GB
@@ -44051,7 +44393,33 @@
2318401536,2318467071,BE
2318467072,2318598143,US
2318598144,2318663679,CA
-2318663680,2319319039,US
+2318663680,2319122431,US
+2319122432,2319123455,AR
+2319123456,2319124479,HN
+2319124480,2319125503,VE
+2319125504,2319126527,UY
+2319126528,2319127551,CR
+2319127552,2319128575,BR
+2319128576,2319129599,TT
+2319129600,2319138815,BR
+2319138816,2319139839,PE
+2319139840,2319150079,BR
+2319150080,2319151103,EC
+2319151104,2319152127,BR
+2319152128,2319153151,VE
+2319153152,2319156223,BR
+2319156224,2319157247,CR
+2319158272,2319159295,AR
+2319159296,2319160319,BR
+2319160320,2319161343,PA
+2319161344,2319164415,BR
+2319164416,2319165439,PY
+2319165440,2319167487,AR
+2319167488,2319168511,HN
+2319168512,2319174655,BR
+2319174656,2319175679,HN
+2319175680,2319187967,BR
+2319187968,2319319039,US
2319319040,2319384575,NO
2319384576,2319450111,FR
2319450112,2319581183,US
@@ -44070,9 +44438,38 @@
2320564224,2320629759,CH
2320629760,2320695295,CA
2320695296,2321416191,US
+2321416192,2321417215,CO
+2321417216,2321419263,BR
+2321419264,2321420287,AR
+2321420288,2321430527,BR
+2321430528,2321431551,CR
+2321431552,2321446911,BR
+2321446912,2321447935,HN
+2321447936,2321453055,BR
+2321453056,2321454079,HN
+2321454080,2321456127,BR
+2321457152,2321471487,BR
+2321471488,2321472511,HN
+2321472512,2321477631,BR
+2321477632,2321478655,TT
2321481728,2321547263,US
2321547264,2321612799,FR
+2321612800,2321627135,BR
+2321627136,2321628159,CO
+2321628160,2321633279,BR
+2321633280,2321634303,CO
+2321634304,2321661951,BR
+2321662976,2321663999,BR
+2321664000,2321665023,AR
+2321665024,2321666047,BR
2321678336,2321743871,US
+2321743872,2321744895,SV
+2321744896,2321745919,AR
+2321745920,2321753087,BR
+2321753088,2321754111,HN
+2321755136,2321756159,UY
+2321756160,2321774591,BR
+2321775616,2321776639,VE
2321809408,2321874943,ES
2321874944,2321940479,JP
2321940480,2322006015,FR
@@ -44083,7 +44480,9 @@
2322137088,2322202623,US
2322202624,2322268159,SE
2322268160,2322333695,JP
-2322333696,2322923519,US
+2322333696,2322368511,US
+2322368512,2322368767,MY
+2322368768,2322923519,US
2323054592,2323120127,CA
2323316736,2323382271,US
2323382272,2323447807,NO
@@ -44245,8 +44644,9 @@
2342387712,2342453247,FR
2342453248,2342518783,CN
2342518784,2342584319,FR
-2342584320,2342649855,US
-2342649856,2342715391,NL
+2342584320,2342649856,US
+2342649857,2342658047,SG
+2342658048,2342715391,US
2342715392,2342780927,AU
2342780928,2342846463,NO
2342846464,2342911999,BE
@@ -44415,7 +44815,9 @@
2366149536,2366149543,UA
2366149544,2366149551,BY
2366149552,2366149559,KZ
-2366149560,2366162943,RU
+2366149560,2366160223,RU
+2366160224,2366160255,DE
+2366160256,2366162943,RU
2366162944,2366164991,AL
2366164992,2366167039,GE
2366167040,2366169087,GB
@@ -44453,12 +44855,12 @@
2372233472,2372233727,NO
2372238730,2372238730,US
2372239360,2372240383,SK
-2372240384,2372240895,NL
-2372240896,2372241151,AE
-2372241152,2372241407,NL
-2372241408,2372264447,RU
-2372264448,2372266495,UA
-2372266496,2372272127,RU
+2372240384,2372240511,NL
+2372240512,2372240639,LU
+2372240640,2372240895,NL
+2372240896,2372241151,CH
+2372241152,2372241407,PK
+2372241408,2372272127,RU
2372272128,2372337663,US
2372337664,2372403199,ID
2372403200,2372468735,US
@@ -44481,9 +44883,7 @@
2372510336,2372510336,ES
2372510337,2372510463,AO
2372510464,2372511743,AE
-2372511744,2372512815,SI
-2372512816,2372512816,BA
-2372512817,2372513791,SI
+2372511744,2372513791,BA
2372513792,2372534271,GB
2372534272,2372665343,US
2372665344,2372730879,IT
@@ -44575,7 +44975,9 @@
2377449472,2377515007,FR
2377515008,2377842687,US
2377842688,2377908223,GB
-2377908224,2378025983,US
+2377908224,2378022911,US
+2378022912,2378023423,HK
+2378023424,2378025983,US
2378025984,2378026239,NL
2378026240,2378026495,US
2378026496,2378027007,FR
@@ -44673,12 +45075,13 @@
2382692352,2383085567,CA
2383085568,2383151103,US
2383151104,2385903615,CA
-2385903616,2385905663,US
-2385907712,2385908223,US
-2385911808,2385915903,US
+2385903616,2385914367,US
+2385914880,2385915903,US
2385915904,2385919999,CA
2385920000,2385952767,US
+2385952768,2385954815,BM
2385954816,2385955327,US
+2385955840,2385956863,TC
2385956864,2385969151,US
2385969152,2386624511,CA
2386624512,2386690047,US
@@ -44714,9 +45117,18 @@
2391165440,2391165695,US
2391165696,2391277567,CA
2391277568,2391343103,US
-2391343104,2393313407,CA
-2393313408,2393313535,US
-2393313536,2394947583,CA
+2391343104,2392012799,CA
+2392012800,2392013823,US
+2392013824,2392020991,CA
+2392020992,2392021247,HK
+2392021248,2392021503,JP
+2392021504,2392021759,US
+2392021760,2392022015,NL
+2392022016,2392022271,FR
+2392022272,2392022527,DE
+2392022528,2392022783,GB
+2392022784,2392023039,US
+2392023040,2394947583,CA
2394947584,2395013119,US
2395013120,2395209727,CA
2395209728,2395340799,US
@@ -44826,7 +45238,8 @@
2415722496,2415788031,JP
2415788032,2415853567,US
2415919104,2415984639,CN
-2416050176,2416115711,NL
+2416050176,2416058367,US
+2416058368,2416115711,NL
2416115712,2416181247,US
2416181248,2416246783,FI
2416246784,2416312319,US
@@ -44849,13 +45262,13 @@
2418312960,2418313215,IN
2418313216,2418323007,US
2418323008,2418323008,PH
-2418323009,2418337023,US
-2418337024,2418337279,IN
-2418337280,2418338303,US
-2418338304,2418338815,IN
+2418323009,2418334719,US
+2418334720,2418338815,IN
2418338816,2418341887,US
2418341888,2418342143,IN
-2418342144,2418606079,US
+2418342144,2418342399,US
+2418342400,2418342911,IN
+2418342912,2418606079,US
2418606080,2418671615,DE
2418671616,2418737151,US
2418737152,2418802687,NL
@@ -44909,7 +45322,9 @@
2424111104,2424242175,US
2424242176,2424307711,NO
2424307712,2424438783,US
-2424438784,2425159679,AU
+2424438784,2424471551,AU
+2424471552,2424475647,US
+2424475648,2425159679,AU
2425159680,2425421823,US
2425421824,2425487359,DE
2425487360,2426667007,US
@@ -44943,7 +45358,9 @@
2429616128,2429643519,NL
2429643520,2429643775,RU
2429643776,2429681663,NL
-2429681664,2429878271,US
+2429681664,2429796607,US
+2429796608,2429797375,GB
+2429797376,2429878271,US
2429878272,2429943807,JP
2429943808,2430009343,HK
2430009344,2430205951,US
@@ -44970,7 +45387,9 @@
2436767744,2436767874,NL
2436767875,2436767875,DE
2436767876,2436767999,NL
-2436768000,2436825087,GB
+2436768000,2436775935,GB
+2436775936,2436784127,DE
+2436784128,2436825087,GB
2436825088,2436955647,NL
2436955648,2436955903,DE
2436955904,2441150463,NL
@@ -45034,7 +45453,8 @@
2449479680,2449481727,FR
2449481728,2449485823,DE
2449485824,2449487871,IE
-2449487872,2449489919,RO
+2449487872,2449488127,GB
+2449488128,2449489919,RO
2449489920,2449490943,FR
2449490944,2449491199,DE
2449491200,2449491967,FR
@@ -45042,7 +45462,8 @@
2449494016,2449496063,UA
2449496064,2449498111,FR
2449498112,2449506303,DE
-2449506304,2449539071,RO
+2449506304,2449534975,RO
+2449534976,2449539071,DE
2449539072,2449604607,US
2449604608,2449670143,NO
2449670144,2449735679,LU
@@ -45085,6 +45506,11 @@
2453831680,2453833727,IQ
2453833728,2453835775,ES
2453835776,2453837823,FR
+2453837824,2453838079,LU
+2453838336,2453838591,LU
+2453838592,2453838847,AT
+2453838848,2453839359,SE
+2453839360,2453839871,LU
2453839872,2453852159,RU
2453852160,2453856255,RO
2453856256,2453858303,DE
@@ -45129,7 +45555,7 @@
2455175168,2455240703,GB
2455240704,2455244799,US
2455244800,2455245567,AU
-2455245568,2455245823,US
+2455245568,2455245823,SG
2455245824,2455246847,AU
2455246848,2455247871,IN
2455247872,2455248895,US
@@ -45140,7 +45566,10 @@
2455263232,2455265279,PH
2455265280,2455273471,US
2455273472,2455275519,AU
-2455275520,2455371775,US
+2455275520,2455279615,US
+2455279616,2455281663,MO
+2455281664,2455285759,IN
+2455285760,2455371775,US
2455371776,2455437311,GB
2455437312,2455830527,US
2455830528,2455896063,GB
@@ -45156,7 +45585,10 @@
2456616960,2456682495,CH
2456682496,2456748031,HU
2456748032,2456813567,US
-2456813568,2456879103,AT
+2456813568,2456846335,AT
+2456846336,2456846591,FR
+2456846592,2456846847,CZ
+2456846848,2456879103,AT
2456879104,2457075711,US
2457075712,2457141247,AU
2457206784,2457272319,AU
@@ -45169,17 +45601,22 @@
2457360384,2457360895,CZ
2457360896,2457361151,RU
2457361152,2457361407,CZ
-2457361408,2457365503,RU
+2457361408,2457362431,RU
+2457362432,2457364479,GB
+2457364480,2457365503,RU
2457365504,2457366271,CZ
2457366272,2457366527,RU
2457366528,2457367551,GB
2457367552,2457372671,CZ
2457372672,2457376767,RU
2457376768,2457378815,DE
-2457378816,2457393151,RU
+2457378816,2457379839,NL
+2457379840,2457393151,RU
2457393152,2457397247,CZ
2457397248,2457403391,RU
-2457403392,2457599999,US
+2457403392,2457520895,US
+2457520896,2457521151,BE
+2457521152,2457599999,US
2457600000,2457665535,GR
2457665536,2458058751,US
2458058752,2458124287,CA
@@ -45196,7 +45633,7 @@
2459631616,2459697151,CL
2459697152,2459828223,US
2459828224,2459860991,RU
-2459860992,2459893759,RO
+2459860992,2459893759,ES
2459893760,2459959295,CH
2459959296,2460024831,US
2460024832,2460090367,FI
@@ -45231,7 +45668,16 @@
2461613824,2461614079,IL
2461614080,2461630463,TR
2461630464,2461646847,NL
-2461646848,2461659391,RU
+2461646848,2461648895,RU
+2461648896,2461649023,BY
+2461649024,2461649919,RU
+2461649920,2461650047,US
+2461650048,2461650175,RS
+2461650176,2461650303,PT
+2461650304,2461650431,TW
+2461650432,2461650559,MA
+2461650560,2461650687,NZ
+2461650688,2461659391,RU
2461659392,2461659647,UA
2461659648,2461662463,RU
2461662464,2461662719,NL
@@ -45245,7 +45691,9 @@
2462187520,2462253055,GB
2462253056,2462326783,AU
2462384128,2462449663,US
-2462449664,2462646271,GB
+2462449664,2462526602,GB
+2462526603,2462526603,US
+2462526604,2462646271,GB
2462646272,2463236095,US
2463236096,2463301631,AT
2463301632,2463367167,FI
@@ -45360,8 +45808,8 @@
2470772736,2470838271,AU
2470838272,2471165951,US
2471165952,2471198719,CH
-2471198720,2471211007,US
-2471211008,2471231487,CH
+2471198720,2471219199,US
+2471219200,2471231487,CH
2471231488,2471297023,AU
2471297024,2471362559,GB
2471428096,2471690239,US
@@ -45397,7 +45845,9 @@
2473656320,2473721855,US
2473721856,2473730559,GB
2473730560,2473731071,HK
-2473731072,2473787391,GB
+2473731072,2473785708,GB
+2473785709,2473785709,HK
+2473785710,2473787391,GB
2473787392,2474049535,US
2474049536,2474115071,GB
2474115072,2474246143,US
@@ -45435,7 +45885,7 @@
2478178304,2478309375,US
2478309376,2478374911,GB
2478374912,2478404095,US
-2478407680,2478440447,US
+2478404608,2478440447,US
2478440448,2478505983,SE
2478505984,2478571519,US
2478571520,2478702591,GB
@@ -45477,21 +45927,17 @@
2483027968,2483093503,DO
2483093504,2483159039,US
2483159040,2483224575,SE
-2483224576,2483290111,GB
+2483224576,2483290111,ES
2483290112,2483421183,US
2483421184,2483486719,HU
2483486720,2486566911,US
2486566912,2486632447,CH
2486632448,2486697983,US
-2486697984,2486763519,AT
+2486697984,2486763519,DE
2486763520,2486960127,US
2486960128,2487025663,FR
2487025664,2487369727,US
-2487369728,2487369983,PF
-2487369984,2487370495,US
-2487370496,2487384319,PF
-2487384320,2487384575,US
-2487384576,2487386111,PF
+2487369728,2487386111,PF
2487386112,2488205311,US
2488205312,2488270847,GB
2488270848,2488336383,US
@@ -45577,7 +46023,9 @@
2500038656,2500040703,IT
2500040704,2500042751,LB
2500042752,2500046847,SA
-2500046848,2500048895,IT
+2500046848,2500047615,IT
+2500047616,2500047871,GR
+2500047872,2500048895,IT
2500048896,2500050943,MD
2500050944,2500067327,KZ
2500067328,2500132991,US
@@ -45596,13 +46044,19 @@
2500150528,2500150783,GB
2500150784,2500161023,US
2500161024,2500161535,GB
-2500161536,2500162559,US
+2500161536,2500161791,US
+2500161792,2500162047,GB
+2500162048,2500162559,US
2500162560,2500162815,GB
2500162816,2500166143,US
2500166144,2500166399,GB
-2500166400,2500175871,US
+2500166400,2500170751,US
+2500170752,2500170752,FI
+2500170753,2500175871,US
2500175872,2500175879,RO
-2500175880,2500188679,US
+2500175880,2500177935,US
+2500177936,2500177943,PL
+2500177944,2500188679,US
2500188680,2500188687,CH
2500188688,2500196351,US
2500196352,2500198399,FI
@@ -45647,14 +46101,16 @@
2500245760,2500246015,US
2500246016,2500246527,GB
2500246528,2500247551,US
-2500247552,2500248063,ES
-2500248064,2500272127,US
+2500247552,2500248575,ES
+2500248576,2500272127,US
2500272128,2500272639,GB
2500272640,2500276223,US
2500276224,2500276735,GB
2500276736,2500276991,US
2500276992,2500277247,GB
-2500277248,2500289023,US
+2500277248,2500278751,US
+2500278752,2500278783,GB
+2500278784,2500289023,US
2500289024,2500289151,FR
2500289152,2500292607,US
2500292608,2500292863,DE
@@ -45663,8 +46119,8 @@
2500293632,2500313855,US
2500313856,2500314111,AT
2500314112,2500319231,US
-2500319232,2500319743,ES
-2500319744,2500392959,US
+2500319232,2500321279,ES
+2500321280,2500392959,US
2500392960,2500393215,IN
2500393216,2500393983,US
2500393984,2500394239,GB
@@ -45686,7 +46142,15 @@
2500554380,2500554487,DE
2500554488,2500555263,US
2500555264,2500555519,FR
-2500555520,2500591615,US
+2500555520,2500562719,US
+2500562720,2500562727,GB
+2500562728,2500562767,US
+2500562768,2500562775,GB
+2500562776,2500562959,US
+2500562960,2500562967,ES
+2500562968,2500568679,US
+2500568680,2500568683,GB
+2500568684,2500591615,US
2500591616,2500595711,GB
2500595712,2500608511,US
2500608512,2500608767,ES
@@ -45702,21 +46166,27 @@
2500638720,2500639743,GB
2500639744,2500646911,US
2500646912,2500647935,ES
-2500647936,2500666111,US
-2500666112,2500666367,LU
-2500666368,2500666463,US
+2500647936,2500666463,US
2500666464,2500666471,LU
-2500666472,2500687871,US
+2500666472,2500681759,US
+2500681760,2500681767,PL
+2500681768,2500687871,US
2500687872,2500689919,FR
2500689920,2500694271,US
-2500694272,2500694527,IT
-2500694528,2500719103,US
+2500694272,2500694783,IT
+2500694784,2500719103,US
2500719104,2500720639,IE
2500720640,2500720652,US
2500720653,2500720653,IE
-2500720654,2500723799,US
+2500720654,2500720895,US
+2500720896,2500721151,IE
+2500721152,2500723799,US
2500723800,2500723807,ES
-2500723808,2501574655,US
+2500723808,2500743215,US
+2500743216,2500743223,GB
+2500743224,2500984831,US
+2500984832,2501001215,GB
+2501001216,2501574655,US
2501574656,2501640191,KZ
2501640192,2503016447,US
2503016448,2503081983,IL
@@ -45734,7 +46204,9 @@
2503911424,2503915519,ES
2503915520,2503917567,IT
2503917568,2503933951,BG
-2503933952,2504470527,US
+2503933952,2504180735,US
+2504180736,2504180991,ES
+2504180992,2504470527,US
2504470528,2504470783,ES
2504470784,2504472831,US
2504472832,2504473599,ES
@@ -45743,23 +46215,81 @@
2504482816,2504486911,ES
2504486912,2504491007,US
2504491008,2504499199,IT
-2504499200,2504916991,US
-2504916992,2504982527,IL
+2504499200,2504519679,US
+2504519680,2504519935,IT
+2504519936,2504520191,DE
+2504520192,2504521215,US
+2504521216,2504521471,CH
+2504521472,2504521727,NL
+2504521728,2504921087,US
+2504921088,2504921343,IL
+2504921344,2504921855,US
+2504921856,2504922111,IL
+2504922112,2504922879,US
+2504922880,2504923391,IL
+2504923392,2504925951,US
+2504925952,2504926207,IL
+2504926208,2504926975,US
+2504926976,2504927231,IL
+2504927232,2504927743,US
+2504927744,2504927999,IL
+2504928000,2504934399,US
+2504934400,2504934655,IL
+2504934656,2504935935,US
+2504935936,2504936191,IL
+2504936192,2504936447,US
+2504936448,2504936703,IL
+2504936704,2504938751,US
+2504938752,2504939007,IL
+2504939008,2504939519,US
+2504939520,2504939775,IL
+2504939776,2504943871,US
+2504943872,2504944639,IL
+2504944640,2504944895,US
+2504944896,2504945663,IL
+2504945664,2504946687,US
+2504946688,2504946943,IL
+2504946944,2504947711,US
+2504947712,2504947967,IL
+2504947968,2504949759,US
+2504949760,2504982527,IL
2504982528,2505457663,US
2505457664,2505459711,IE
-2505459712,2505469951,US
+2505459712,2505469439,US
+2505469440,2505469951,ES
2505469952,2505474047,NL
-2505474048,2505572351,US
+2505474048,2505482239,US
+2505482240,2505484287,NL
+2505484288,2505488383,US
+2505488384,2505490431,FR
+2505490432,2505502719,US
+2505502720,2505503743,UA
+2505503744,2505504767,US
+2505504768,2505506815,FI
+2505506816,2505572351,US
2505572352,2505637887,IL
-2505637888,2505793535,US
+2505637888,2505789439,US
+2505789440,2505790463,FR
+2505790464,2505791487,US
+2505791488,2505792511,FR
+2505792512,2505793535,US
2505793536,2505801727,ES
2505801728,2506293247,US
2506293248,2506358783,CA
-2506358784,2506359039,US
-2506359040,2506359295,ES
+2506358784,2506359295,ES
2506359296,2506360831,US
2506360832,2506361087,ES
-2506361088,2507124735,US
+2506361088,2506401791,US
+2506401792,2506402815,IT
+2506402816,2506489855,US
+2506489856,2506498047,ES
+2506498048,2506499071,FR
+2506499072,2506506239,ES
+2506506240,2506514431,NO
+2506514432,2506522623,ES
+2506522624,2506530815,GB
+2506530816,2506555391,ES
+2506555392,2507124735,US
2507124736,2507124991,IN
2507124992,2507145215,US
2507210752,2508062719,US
@@ -45771,8 +46301,11 @@
2508075008,2508077055,CH
2508077056,2508079103,BE
2508079104,2508081151,DE
-2508081152,2508082175,US
-2508082176,2508083199,GB
+2508081152,2508081407,NL
+2508081408,2508081663,IL
+2508081664,2508082431,GB
+2508082432,2508082943,DE
+2508082944,2508083199,GB
2508083200,2508085247,IS
2508085248,2508087295,PS
2508087296,2508089343,RU
@@ -45837,7 +46370,9 @@
2512781312,2512912383,US
2512912384,2512945151,HU
2512945152,2512977919,JO
-2512977920,2513502207,DE
+2512977920,2513043455,DE
+2513043456,2513108991,FR
+2513108992,2513502207,DE
2513502208,2513567743,NO
2513567744,2513600511,GR
2513600512,2513633279,NL
@@ -46082,11 +46617,66 @@
2533097472,2533228543,US
2533228544,2533294079,PL
2533294080,2533359615,CN
-2533359616,2533373951,UA
-2533373952,2533375999,BG
+2533359616,2533369855,UA
+2533369856,2533371903,BG
+2533371904,2533375999,UA
2533376000,2533392383,HU
-2533392384,2533425151,RO
-2533425152,2539978751,IT
+2533392384,2538602495,IT
+2538602496,2538604967,FR
+2538604968,2538604975,ES
+2538604976,2538606031,FR
+2538606032,2538606039,ES
+2538606040,2538606043,FR
+2538606044,2538606047,DE
+2538606048,2538619903,FR
+2538619904,2538619911,ES
+2538619912,2538634227,FR
+2538634228,2538634231,DE
+2538634232,2538644015,FR
+2538644016,2538644039,ES
+2538644040,2538645855,FR
+2538645856,2538645871,ES
+2538645872,2538646135,FR
+2538646136,2538646139,DE
+2538646140,2538646143,FR
+2538646144,2538646155,DE
+2538646156,2538646219,FR
+2538646220,2538646227,DE
+2538646228,2538646271,FR
+2538646272,2538646399,BE
+2538646400,2538646783,FR
+2538646784,2538647039,CZ
+2538647040,2538648591,FR
+2538648592,2538648623,BE
+2538648624,2538649767,FR
+2538649768,2538649775,DE
+2538649776,2538649991,FR
+2538649992,2538649995,DE
+2538649996,2538650059,FR
+2538650060,2538650063,DE
+2538650064,2538650103,FR
+2538650104,2538650107,DE
+2538650108,2538650199,FR
+2538650200,2538650203,DE
+2538650204,2538651135,FR
+2538651136,2538651139,DE
+2538651140,2538651183,FR
+2538651184,2538651187,DE
+2538651188,2538651255,FR
+2538651256,2538651259,DE
+2538651260,2538651279,FR
+2538651280,2538651283,DE
+2538651284,2538652727,FR
+2538652728,2538652731,DE
+2538652732,2538653379,FR
+2538653380,2538653383,DE
+2538653384,2538653387,ES
+2538653388,2538653927,FR
+2538653928,2538653931,ES
+2538653932,2538656959,FR
+2538656960,2538656975,ES
+2538656976,2538668031,FR
+2538668032,2539978751,IT
2539978752,2540240895,US
2540240896,2540306431,FI
2540306432,2540896255,US
@@ -46131,7 +46721,7 @@
2547318784,2547515391,US
2547523584,2547535871,GB
2547540480,2547540735,SE
-2547553024,2547553279,RU
+2547548160,2547580927,NO
2548039680,2548563967,GB
2548563968,2548826111,IR
2548826112,2548829695,AT
@@ -46171,7 +46761,9 @@
2548953088,2548955135,RU
2548955136,2548957183,DE
2548957184,2549612543,IR
-2549612544,2549614591,SE
+2549612544,2549614447,SE
+2549614448,2549614463,NL
+2549614464,2549614591,SE
2549614592,2549616639,IT
2549616640,2549618687,BE
2549618688,2549618943,US
@@ -46201,7 +46793,13 @@
2549874688,2549876735,GB
2549876736,2549878783,NO
2549878784,2549880831,DE
-2549880832,2549882879,SE
+2549880832,2549881327,SE
+2549881328,2549881343,NL
+2549881344,2549882335,SE
+2549882336,2549882351,FI
+2549882352,2549882383,SE
+2549882384,2549882399,FI
+2549882400,2549882879,SE
2549882880,2549884927,CH
2549884928,2549891071,DE
2549891072,2549899263,RU
@@ -46215,7 +46813,7 @@
2549929984,2549932031,DE
2549932032,2549940223,HR
2549940224,2550005759,AE
-2550005760,2550136831,RO
+2550005760,2550136831,SA
2550136832,2550202367,DO
2550202368,2553544703,US
2553544704,2553610239,IN
@@ -46246,17 +46844,7 @@
2556493824,2556559359,US
2556559360,2556624895,AU
2556624896,2556690431,KR
-2556690432,2556703871,US
-2556703872,2556703935,SG
-2556703936,2556715719,US
-2556715720,2556715727,HK
-2556715728,2556716159,US
-2556716160,2556716175,HK
-2556716176,2556742071,US
-2556742072,2556742079,GB
-2556742080,2556742327,US
-2556742328,2556742335,GB
-2556742336,2556755967,US
+2556690432,2556755967,US
2556755968,2556780031,HK
2556780032,2556780799,SG
2556780800,2556821503,HK
@@ -46325,17 +46913,27 @@
2568224768,2568290303,SG
2568290304,2569142271,US
2569142272,2569404415,CN
-2569404416,2569601023,US
-2569601024,2569666559,CA
-2569666560,2569797631,US
+2569404416,2569797631,US
2569797632,2569863167,NO
-2569863168,2569994239,CH
+2569863168,2569885183,US
+2569885184,2569885439,CH
+2569885440,2569885951,US
+2569885952,2569886207,CH
+2569886208,2569928703,US
+2569928704,2569994239,CH
2569994240,2570125311,US
2570125312,2570190847,BE
2570190848,2572681215,US
2572681216,2572746751,SE
2572746752,2572943359,US
-2572943360,2573353983,DE
+2572943360,2572955647,DE
+2572955648,2572959743,BR
+2572959744,2572976127,DE
+2572976128,2572989439,NL
+2572989440,2572989951,GR
+2572989952,2572991487,DE
+2572991488,2573000703,BR
+2573000704,2573353983,DE
2573353984,2573354239,BE
2573354240,2573402111,DE
2573402112,2573467647,CN
@@ -46351,7 +46949,9 @@
2574287104,2574319615,SE
2574319616,2574647295,US
2574647296,2574778367,CN
-2574778368,2583691263,JP
+2574778368,2583582207,JP
+2583582208,2583582463,HK
+2583582464,2583691263,JP
2583691264,2583695359,ZA
2583695360,2583697407,BW
2583697408,2583699455,CI
@@ -46372,87 +46972,154 @@
2584412160,2584477695,CA
2584477696,2584608767,US
2584608768,2584739839,CH
-2584739840,2584739903,SG
-2584739904,2584740351,MU
-2584740352,2584740415,HK
-2584740416,2584740863,MU
-2584740864,2584740927,SG
-2584740928,2584741375,MU
-2584741376,2584741439,HK
-2584741440,2584741887,MU
-2584741888,2584741951,SG
-2584741952,2584742399,MU
-2584742400,2584742463,HK
-2584742464,2584742911,MU
-2584742912,2584742975,SG
-2584742976,2584743423,MU
-2584743424,2584743487,HK
-2584743488,2584743935,MU
-2584743936,2584743999,SG
-2584744000,2584744447,MU
-2584744448,2584744511,HK
-2584744512,2584744959,MU
-2584744960,2584745023,SG
-2584745024,2584745471,MU
-2584745472,2584745535,HK
-2584745536,2584745983,MU
-2584745984,2584746047,SG
-2584746048,2584746495,MU
-2584746496,2584746559,HK
-2584746560,2584747007,MU
-2584747008,2584747071,SG
-2584747072,2584747519,MU
-2584747520,2584747583,HK
-2584747584,2584748031,MU
-2584748032,2584748095,SG
-2584748096,2584748543,MU
-2584748544,2584748607,HK
-2584748608,2584749055,MU
-2584749056,2584749119,SG
-2584749120,2584749567,MU
-2584749568,2584749631,HK
-2584749632,2584750079,MU
-2584750080,2584750143,SG
-2584750144,2584750591,MU
-2584750592,2584750655,HK
-2584750656,2584751103,MU
-2584751104,2584751167,SG
-2584751168,2584751615,MU
-2584751616,2584751679,HK
-2584751680,2584752127,MU
-2584752128,2584752191,SG
-2584752192,2584752639,MU
-2584752640,2584752703,HK
-2584752704,2584753151,MU
-2584753152,2584753215,SG
-2584753216,2584753663,MU
-2584753664,2584753727,HK
-2584753728,2584754175,MU
-2584754176,2584754239,SG
-2584754240,2584754687,MU
-2584754688,2584754751,HK
-2584754752,2584755199,MU
-2584755200,2584755263,SG
-2584755264,2584755711,MU
-2584755712,2584755775,HK
-2584755776,2584756223,MU
-2584756224,2584756287,SG
-2584756288,2584756735,MU
-2584756736,2584756799,HK
-2584756800,2584757247,MU
+2584739840,2584739903,AU
+2584739904,2584740095,ZA
+2584740096,2584740351,US
+2584740352,2584740415,AU
+2584740416,2584740607,ZA
+2584740608,2584740863,US
+2584740864,2584740927,AU
+2584740928,2584741119,ZA
+2584741120,2584741375,US
+2584741376,2584741439,AU
+2584741440,2584741631,ZA
+2584741632,2584741887,US
+2584741888,2584741951,AU
+2584741952,2584742143,ZA
+2584742144,2584742399,US
+2584742400,2584742463,AU
+2584742464,2584742655,ZA
+2584742656,2584742911,US
+2584742912,2584742975,KR
+2584742976,2584743167,ZA
+2584743168,2584743423,US
+2584743424,2584743487,KR
+2584743488,2584743679,ZA
+2584743680,2584743935,US
+2584743936,2584743999,AU
+2584744000,2584744191,ZA
+2584744192,2584744447,US
+2584744448,2584744511,AU
+2584744512,2584744703,ZA
+2584744704,2584744959,US
+2584744960,2584745023,AU
+2584745024,2584745215,ZA
+2584745216,2584745471,US
+2584745472,2584745535,AU
+2584745536,2584745727,ZA
+2584745728,2584745983,US
+2584745984,2584746047,AU
+2584746048,2584746239,ZA
+2584746240,2584746495,US
+2584746496,2584746559,AU
+2584746560,2584746751,ZA
+2584746752,2584747007,US
+2584747008,2584747071,MY
+2584747072,2584747263,ZA
+2584747264,2584747519,US
+2584747520,2584747583,MY
+2584747584,2584747775,ZA
+2584747776,2584748031,US
+2584748032,2584748095,MY
+2584748096,2584748287,ZA
+2584748288,2584748543,US
+2584748544,2584748607,MY
+2584748608,2584748799,ZA
+2584748800,2584749055,US
+2584749056,2584749119,MY
+2584749120,2584749311,ZA
+2584749312,2584749567,US
+2584749568,2584749631,MY
+2584749632,2584749823,ZA
+2584749824,2584750079,US
+2584750080,2584750143,MY
+2584750144,2584750335,ZA
+2584750336,2584750591,US
+2584750592,2584750655,MY
+2584750656,2584750847,ZA
+2584750848,2584751103,US
+2584751104,2584751167,AE
+2584751168,2584751359,ZA
+2584751360,2584751615,US
+2584751616,2584751679,AE
+2584751680,2584751871,ZA
+2584751872,2584752127,US
+2584752128,2584752191,AE
+2584752192,2584752383,ZA
+2584752384,2584752639,US
+2584752640,2584752703,AE
+2584752704,2584752895,ZA
+2584752896,2584753151,US
+2584753152,2584753215,AE
+2584753216,2584753407,ZA
+2584753408,2584753663,US
+2584753664,2584753727,AE
+2584753728,2584753919,ZA
+2584753920,2584754175,US
+2584754176,2584754431,ZA
+2584754432,2584754687,US
+2584754688,2584754943,ZA
+2584754944,2584755199,US
+2584755200,2584755263,AR
+2584755264,2584755455,ZA
+2584755456,2584755711,US
+2584755712,2584755775,AR
+2584755776,2584755967,ZA
+2584755968,2584756223,US
+2584756224,2584756479,ZA
+2584756480,2584756735,US
+2584756736,2584756991,ZA
+2584756992,2584757247,US
2584757248,2584757311,SG
-2584757312,2584757759,MU
+2584757312,2584757503,ZA
+2584757504,2584757759,US
2584757760,2584757823,HK
-2584757824,2584758271,MU
+2584757824,2584758015,ZA
+2584758016,2584758271,US
2584758272,2584758335,SG
-2584758336,2584758783,MU
+2584758336,2584758527,ZA
+2584758528,2584758783,US
2584758784,2584758847,HK
-2584758848,2584759295,MU
+2584758848,2584759039,ZA
+2584759040,2584759295,US
2584759296,2584759359,SG
-2584759360,2584759807,MU
+2584759360,2584759551,ZA
+2584759552,2584759807,US
2584759808,2584759871,HK
-2584759872,2584805375,MU
-2584805376,2585001983,US
+2584759872,2584760063,ZA
+2584760064,2584760319,US
+2584760320,2584760383,SG
+2584760384,2584760575,ZA
+2584760576,2584760831,US
+2584760832,2584760895,HK
+2584760896,2584761087,ZA
+2584761088,2584761343,US
+2584761344,2584761407,SG
+2584761408,2584761599,ZA
+2584761600,2584761855,US
+2584761856,2584761919,HK
+2584761920,2584762111,ZA
+2584762112,2584762367,US
+2584762368,2584762431,SG
+2584762432,2584762623,ZA
+2584762624,2584762879,US
+2584762880,2584762943,HK
+2584762944,2584763135,ZA
+2584763136,2584763391,US
+2584763392,2584763455,SG
+2584763456,2584763647,ZA
+2584763648,2584763903,US
+2584763904,2584763967,HK
+2584763968,2584764159,ZA
+2584764160,2584764415,US
+2584764416,2584764671,ZA
+2584764672,2584764927,US
+2584764928,2584775679,ZA
+2584775680,2584777727,US
+2584777728,2584780799,ZA
+2584780800,2584788991,US
+2584788992,2584801279,ZA
+2584801280,2585001983,US
2585001984,2585067519,CA
2585067520,2585788415,US
2585788416,2585853951,GB
@@ -46493,18 +47160,27 @@
2586804480,2586828799,US
2586828800,2586829055,CH
2586829056,2586870783,US
-2586870784,2586874879,ES
-2586874880,2586875135,US
-2586875136,2586875903,ES
-2586875904,2586876927,US
-2586876928,2586879999,ES
-2586880000,2586952191,US
+2586870784,2586875903,ES
+2586875904,2586876415,US
+2586876416,2586876671,ES
+2586876672,2586876927,US
+2586876928,2586882559,ES
+2586882560,2586952191,US
2586952192,2586952447,FR
-2586952448,2587017215,US
+2586952448,2586952703,US
+2586952704,2586953471,FR
+2586953472,2586953727,ES
+2586953728,2586953983,MX
+2586953984,2586954239,PE
+2586954240,2587017215,US
2587017216,2587017471,IE
2587017472,2587018239,US
2587018240,2587018495,IE
-2587018496,2587021823,US
+2587018496,2587018671,US
+2587018672,2587018687,IE
+2587018688,2587019263,US
+2587019264,2587019775,IE
+2587019776,2587021823,US
2587021824,2587022335,IE
2587022336,2587066879,US
2587066880,2587067135,GB
@@ -46532,7 +47208,9 @@
2587394816,2587395071,ES
2587395072,2587396095,US
2587396096,2587399167,ES
-2587399168,2587443199,US
+2587399168,2587412479,US
+2587412480,2587414527,IT
+2587414528,2587443199,US
2587443200,2587447295,CH
2587447296,2587476760,US
2587476761,2587476761,LB
@@ -46546,13 +47224,19 @@
2587481970,2587481970,LB
2587481971,2587492351,US
2587492352,2587493375,ES
-2587493376,2587508735,US
+2587493376,2587494399,US
+2587494400,2587496447,ES
+2587496448,2587508735,US
2587508736,2587525119,GB
2587525120,2587542527,US
2587542528,2587544063,ES
-2587544064,2587582463,US
+2587544064,2587545599,US
+2587545600,2587546623,ES
+2587546624,2587582463,US
2587582464,2587586559,NL
-2587586560,2587926527,US
+2587586560,2587592703,US
+2587592704,2587594751,GB
+2587594752,2587926527,US
2587926528,2587930623,BG
2587930624,2587939071,US
2587939072,2587939583,PR
@@ -46566,10 +47250,7 @@
2587955200,2587959295,KE
2587959296,2587961343,SN
2587961344,2587962367,ZA
-2587962368,2587963391,SS
-2587963392,2587964027,SD
-2587964028,2587964028,SS
-2587964029,2587964415,SD
+2587962368,2587964415,SS
2587964416,2587965439,ZA
2587965440,2587966463,KE
2587966464,2587967487,BF
@@ -46582,7 +47263,7 @@
2588038144,2588039167,GN
2588039168,2588041215,ZA
2588041216,2588042239,DZ
-2588042240,2588043263,SD
+2588042240,2588043263,SS
2588043264,2588044287,AO
2588044288,2588045311,LS
2588046336,2588047359,TD
@@ -46677,6 +47358,7 @@
2588512256,2588514303,TZ
2588514304,2588516351,ZA
2588516352,2588518399,TD
+2588518400,2588519423,TZ
2588519424,2588520447,SN
2588520448,2588521471,SL
2588521472,2588526591,ZA
@@ -46685,37 +47367,58 @@
2588534784,2588535807,ZM
2588535808,2588536831,NG
2588536832,2588540927,ZA
+2588540928,2588671999,TZ
2588672000,2588934143,KE
2588934144,2589982719,SC
2589982720,2590507007,SD
2590507008,2591031295,TN
2591031296,2591096831,GA
+2591096832,2591162367,NG
2591293440,2591326207,GA
2591326208,2591358975,AO
+2591358976,2591375359,GH
+2591375360,2591391743,NG
+2591391744,2591408127,ZA
+2591424512,2591457279,NG
+2591457280,2591473663,ML
+2591473664,2591477759,AO
+2591477760,2591481855,PT
+2591481856,2591483903,TZ
+2591485952,2591486975,SO
+2591486976,2591487999,ZA
+2591488000,2591489023,GA
+2591489024,2591490047,ZA
2591490048,2591498239,BI
2591498240,2591510527,ZA
+2591510528,2591514623,ZW
2591514624,2591522815,SZ
2591522816,2591526911,LR
2591526912,2591539199,ZA
2591539200,2591547391,GA
-2591547392,2591571967,ZA
+2591547392,2591555583,ZA
+2591555584,2591571967,GH
2591571968,2591588351,NG
2591588352,2591604735,MG
-2591604736,2591612927,MU
+2591604736,2591605759,MU
+2591605760,2591606783,KE
+2591606784,2591610879,MU
+2591610880,2591612927,ZM
2591612928,2591621119,ZW
2591621120,2591686655,DZ
2591686656,2591817727,KE
2591948800,2591981567,MG
2591981568,2591997951,CM
2591997952,2592006143,ZA
-2592006144,2592022527,TZ
+2592006144,2592007167,TZ
+2592007168,2592009215,ZA
+2592009216,2592022527,TZ
2592022528,2592026623,BJ
2592026624,2592026879,US
2592026880,2592027391,ZA
2592027392,2592027647,GB
-2592027648,2592028159,ZA
+2592027648,2592028159,US
2592028160,2592028415,CA
-2592028416,2592028671,ZA
+2592028416,2592028671,US
2592028672,2592028799,NG
2592028800,2592028927,KE
2592028928,2592029183,ZA
@@ -46730,9 +47433,10 @@
2592038912,2592043007,DZ
2592043008,2592047103,ZA
2592047104,2592079871,AO
+2600468480,2600534015,ZM
2600534016,2600665087,US
2600665088,2600730623,CA
-2600730624,2600796159,NO
+2600730624,2600796159,SE
2600796160,2601123839,US
2601123840,2601189375,CA
2601320448,2601451519,US
@@ -46830,11 +47534,13 @@
2617114880,2617115135,US
2617118720,2617123839,US
2617123840,2617124095,DE
-2617124096,2617131007,US
+2617124096,2617124863,US
+2617124864,2617126911,NL
+2617126912,2617131007,US
2617131008,2617139199,CA
2617139200,2617139455,PE
2617139456,2617139711,SZ
-2617139712,2617139967,JM
+2617139712,2617139967,AU
2617139968,2617140223,PA
2617140224,2617140479,CO
2617140480,2617140735,SC
@@ -46994,13 +47700,16 @@
2625961984,2626027519,LU
2626027520,2626093055,US
2626093056,2626158591,CH
-2626158592,2626879487,US
+2626158592,2626224127,US
+2626224128,2626289663,CZ
+2626289664,2626879487,US
2626879488,2626945023,KR
2626945024,2627010559,SI
2627010560,2627076095,NZ
2627076096,2627141631,NL
2627141632,2627403775,US
2627469312,2627731455,TZ
+2627731456,2629828607,EG
2634022912,2634088447,CN
2634088448,2634350591,JP
2634416128,2635005951,JP
@@ -47041,7 +47750,7 @@
2642018304,2642083839,CN
2642083840,2642149375,US
2642149376,2642214911,FI
-2642214912,2642280447,SE
+2642214912,2642280447,GB
2642280448,2642411519,US
2642411520,2642477055,AU
2642477056,2642542591,FI
@@ -47190,7 +47899,9 @@
2658664448,2658926591,US
2658926592,2659057663,GB
2659057664,2659123199,SE
-2659123200,2659188735,FI
+2659123200,2659180543,FI
+2659180544,2659182591,NL
+2659182592,2659188735,FI
2659188736,2659254271,CA
2659254272,2659319807,LT
2659319808,2659385343,US
@@ -47308,104 +48019,8 @@
2667642880,2667970559,US
2667970560,2668036095,CA
2668036096,2668101631,SE
-2668101632,2668101663,NL
-2668101664,2668101671,US
-2668101672,2668101791,NL
-2668101792,2668101823,US
-2668101824,2668101855,NL
-2668101856,2668101863,US
-2668101864,2668101887,NL
-2668101888,2668101919,US
-2668101920,2668102063,NL
-2668102064,2668102071,US
-2668102072,2668102647,NL
-2668102648,2668102655,US
-2668102656,2668102991,NL
-2668102992,2668102999,US
-2668103000,2668103719,NL
-2668103720,2668103727,US
-2668103728,2668103735,NL
-2668103736,2668103743,US
-2668103744,2668103775,KE
-2668103776,2668104127,NL
-2668104128,2668104135,GB
-2668104136,2668104191,NL
-2668104192,2668104207,KE
-2668104208,2668104247,NL
-2668104248,2668104255,US
-2668104256,2668104999,NL
-2668105000,2668105015,US
-2668105016,2668105063,NL
-2668105064,2668105071,US
-2668105072,2668105135,NL
-2668105136,2668105151,US
-2668105152,2668105223,NL
-2668105224,2668105239,US
-2668105240,2668105255,NL
-2668105256,2668105271,US
-2668105272,2668105287,NL
-2668105288,2668105351,US
-2668105352,2668105383,NL
-2668105384,2668105391,US
-2668105392,2668105399,NL
-2668105400,2668105439,US
-2668105440,2668105471,NL
-2668105472,2668105479,US
-2668105480,2668105727,NL
-2668105728,2668105791,US
-2668105792,2668106935,NL
-2668106936,2668106943,US
-2668106944,2668106951,NL
-2668106952,2668106959,US
-2668106960,2668107599,NL
-2668107600,2668107607,US
-2668107608,2668107679,NL
-2668107680,2668107687,US
-2668107688,2668107711,NL
-2668107712,2668107759,US
-2668107760,2668107767,NL
-2668107768,2668107775,US
-2668107776,2668108303,NL
-2668108304,2668108335,US
-2668108336,2668108343,CA
-2668108344,2668108359,US
-2668108360,2668108383,NL
-2668108384,2668108391,US
-2668108392,2668108399,NL
-2668108400,2668108415,US
-2668108416,2668108799,NL
-2668108800,2668108807,US
-2668108808,2668108823,NL
-2668108824,2668108831,US
-2668108832,2668108855,NL
-2668108856,2668108863,US
-2668108864,2668108887,NL
-2668108888,2668108903,US
-2668108904,2668108919,NL
-2668108920,2668108927,US
-2668108928,2668108935,NL
-2668108936,2668108951,GB
-2668108952,2668108967,NL
-2668108968,2668108983,US
-2668108984,2668108999,NL
-2668109000,2668109023,US
-2668109024,2668109031,NL
-2668109032,2668109047,US
-2668109048,2668109063,NL
-2668109064,2668109071,US
-2668109072,2668109615,NL
-2668109616,2668109623,US
-2668109624,2668109639,NL
-2668109640,2668109663,US
-2668109664,2668109671,NL
-2668109672,2668109687,US
-2668109688,2668109695,NL
-2668109696,2668109743,US
-2668109744,2668109751,NL
-2668109752,2668109759,US
-2668109760,2668109951,NL
-2668109952,2668110047,US
-2668110048,2668134399,NL
+2668101632,2668118015,NL
+2668118016,2668134399,FR
2668134400,2668150783,GB
2668150784,2668167167,NL
2668167168,2668286463,US
@@ -47463,7 +48078,9 @@
2671509504,2671575039,NL
2671575040,2671711479,US
2671711480,2671711483,DE
-2671711484,2671749119,US
+2671711484,2671718827,US
+2671718828,2671718831,GB
+2671718832,2671749119,US
2671749120,2671750143,CA
2671750144,2672295935,US
2672295936,2672361471,SE
@@ -47484,7 +48101,9 @@
2673737728,2673803263,US
2673803264,2673868799,FR
2673868800,2674130943,US
-2674130944,2674175999,GB
+2674130944,2674147327,GB
+2674147328,2674163711,NL
+2674163712,2674175999,GB
2674176000,2674192383,US
2674192384,2674196479,CH
2674196480,2674249727,GB
@@ -47503,9 +48122,11 @@
2675048448,2675113983,GB
2675113984,2675245055,US
2675245056,2675310591,NZ
-2675310592,2675572735,US
-2675572736,2675638271,NL
-2675638272,2675965951,US
+2675310592,2675574463,US
+2675574464,2675574495,IT
+2675574496,2675589119,US
+2675589120,2675605503,DE
+2675605504,2675965951,US
2675965952,2676031487,CA
2676031488,2676097023,US
2676097024,2676162559,NO
@@ -47542,7 +48163,8 @@
2677651456,2677652479,SG
2677652480,2677658367,US
2677658368,2677658623,AU
-2677658624,2677659903,US
+2677658624,2677659647,US
+2677659648,2677659903,AU
2677659904,2677660159,IN
2677660160,2677660415,KR
2677660416,2677669887,US
@@ -47595,12 +48217,16 @@
2679308288,2679373823,CH
2679373824,2679406591,GB
2679406592,2679414783,US
-2679414784,2679418879,BR
+2679414784,2679415307,PR
+2679415308,2679415308,DE
+2679415309,2679418879,PR
2679418880,2679420927,SG
-2679420928,2679422975,BR
+2679420928,2679422975,PR
2679422976,2679431167,US
2679431168,2679439359,FR
-2679439360,2679523327,US
+2679439360,2679515391,US
+2679515392,2679515903,GB
+2679515904,2679523327,US
2679523328,2679525375,GB
2679525376,2679535615,US
2679535616,2679537663,GB
@@ -47625,7 +48251,8 @@
2681536512,2681602047,IT
2681602048,2681700863,US
2681700864,2681701119,HK
-2681701120,2681733119,US
+2681701120,2681731071,US
+2681731072,2681733119,FR
2681733120,2681798655,NO
2681798656,2681864191,FR
2681864192,2681929727,US
@@ -47676,155 +48303,7 @@
2684184576,2684186623,SK
2684186624,2684188671,DE
2684188672,2684190719,RU
-2684190720,2684190735,US
-2684190736,2684190783,NL
-2684190784,2684190787,US
-2684190788,2684190971,NL
-2684190972,2684190975,US
-2684190976,2684191487,NL
-2684191488,2684191495,US
-2684191496,2684191551,NL
-2684191552,2684191615,US
-2684191616,2684191759,NL
-2684191760,2684191767,US
-2684191768,2684191807,NL
-2684191808,2684191815,US
-2684191816,2684191843,NL
-2684191844,2684191847,US
-2684191848,2684191859,NL
-2684191860,2684191863,US
-2684191864,2684191987,NL
-2684191988,2684191999,US
-2684192000,2684192103,NL
-2684192104,2684192107,US
-2684192108,2684192151,NL
-2684192152,2684192159,US
-2684192160,2684192303,NL
-2684192304,2684192311,US
-2684192312,2684192387,NL
-2684192388,2684192391,US
-2684192392,2684192459,NL
-2684192460,2684192463,US
-2684192464,2684192495,NL
-2684192496,2684192503,US
-2684192504,2684192511,NL
-2684192512,2684192519,US
-2684192520,2684192523,NL
-2684192524,2684192535,US
-2684192536,2684192607,NL
-2684192608,2684192611,US
-2684192612,2684192623,NL
-2684192624,2684192627,US
-2684192628,2684192735,NL
-2684192736,2684192767,US
-2684192768,2684192775,NL
-2684192776,2684192783,US
-2684192784,2684192979,NL
-2684192980,2684192983,US
-2684192984,2684193147,NL
-2684193148,2684193151,US
-2684193152,2684193175,NL
-2684193176,2684193183,US
-2684193184,2684193275,NL
-2684193276,2684193279,US
-2684193280,2684193447,NL
-2684193448,2684193455,AZ
-2684193456,2684193583,NL
-2684193584,2684193591,IE
-2684193592,2684193735,NL
-2684193736,2684193743,US
-2684193744,2684193751,NL
-2684193752,2684193759,US
-2684193760,2684193887,NL
-2684193888,2684193911,US
-2684193912,2684193931,NL
-2684193932,2684193935,US
-2684193936,2684194002,NL
-2684194003,2684194003,BH
-2684194004,2684194007,US
-2684194008,2684194071,NL
-2684194072,2684194079,US
-2684194080,2684194143,NL
-2684194144,2684194151,US
-2684194152,2684194167,NL
-2684194168,2684194171,US
-2684194172,2684194319,NL
-2684194320,2684194327,SA
-2684194328,2684194351,NL
-2684194352,2684194359,US
-2684194360,2684194487,NL
-2684194488,2684194495,GB
-2684194496,2684194511,NL
-2684194512,2684194519,GB
-2684194520,2684194527,NL
-2684194528,2684194535,US
-2684194536,2684194559,NL
-2684194560,2684194623,US
-2684194624,2684194723,NL
-2684194724,2684194727,US
-2684194728,2684194815,NL
-2684194816,2684194823,US
-2684194824,2684195119,NL
-2684195120,2684195123,US
-2684195124,2684195199,NL
-2684195200,2684195263,US
-2684195264,2684195323,NL
-2684195324,2684195327,US
-2684195328,2684195335,NL
-2684195336,2684195339,US
-2684195340,2684195663,NL
-2684195664,2684195667,US
-2684195668,2684195695,NL
-2684195696,2684195703,US
-2684195704,2684195867,NL
-2684195868,2684195871,US
-2684195872,2684195927,NL
-2684195928,2684195935,JP
-2684195936,2684195979,NL
-2684195980,2684195983,US
-2684195984,2684196095,NL
-2684196096,2684196159,US
-2684196160,2684196215,NL
-2684196216,2684196223,US
-2684196224,2684196343,NL
-2684196344,2684196351,US
-2684196352,2684196391,NL
-2684196392,2684196399,US
-2684196400,2684196419,NL
-2684196420,2684196423,US
-2684196424,2684196517,NL
-2684196518,2684196518,GB
-2684196519,2684196535,NL
-2684196536,2684196539,US
-2684196540,2684196939,NL
-2684196940,2684196943,US
-2684196944,2684196959,NL
-2684196960,2684196963,US
-2684196964,2684197031,NL
-2684197032,2684197039,IT
-2684197040,2684197099,NL
-2684197100,2684197103,US
-2684197104,2684197115,NL
-2684197116,2684197119,US
-2684197120,2684197123,NL
-2684197124,2684197127,US
-2684197128,2684197143,NL
-2684197144,2684197151,GB
-2684197152,2684197191,NL
-2684197192,2684197195,US
-2684197196,2684197211,NL
-2684197212,2684197215,US
-2684197216,2684197251,NL
-2684197252,2684197255,US
-2684197256,2684197259,NL
-2684197260,2684197263,US
-2684197264,2684197267,NL
-2684197268,2684197271,US
-2684197272,2684197303,NL
-2684197304,2684197311,US
-2684197312,2684197343,NL
-2684197344,2684197355,US
-2684197356,2684198911,NL
+2684190720,2684198911,NL
2684198912,2684200959,GB
2684200960,2684203007,RU
2684203008,2684205055,GB
@@ -47941,8 +48420,10 @@
2692284416,2692546559,ZA
2692546560,2694316031,US
2694381568,2694447103,US
+2694578176,2694840319,TN
+2694840320,2696151039,MA
2696151040,2696216575,IT
-2696216576,2696282111,ZA
+2696216576,2696282111,BG
2696413184,2696478719,ZA
2696478720,2696871935,JP
2696937472,2697789439,JP
@@ -47975,7 +48456,10 @@
2700017664,2700738559,JP
2700804096,2700935167,JP
2700935168,2701066239,US
-2701066240,2701131775,ZA
+2701066240,2701074431,ZA
+2701074432,2701099007,BG
+2701099008,2701123583,ZA
+2701123584,2701131775,BG
2701131776,2701139967,HN
2701139968,2701148159,NI
2701148160,2701149183,AR
@@ -47985,7 +48469,8 @@
2701156352,2701160447,CW
2701160448,2701162495,TT
2701162496,2701164543,UY
-2701164544,2701172735,HT
+2701164544,2701170687,HT
+2701170688,2701172735,TT
2701172736,2701176831,CL
2701176832,2701178879,AR
2701178880,2701180927,CL
@@ -48020,7 +48505,7 @@
2702835712,2702901247,US
2702901248,2702966783,IT
2702966784,2703032319,US
-2703032320,2703097855,NZ
+2703032320,2703097855,AU
2703097856,2703163391,GB
2703163392,2703556607,US
2703556608,2703622143,ES
@@ -48048,7 +48533,12 @@
2705195008,2705260543,CH
2705260544,2705326079,US
2705326080,2705391615,MO
-2705391616,2705522687,NZ
+2705391616,2705399807,AU
+2705399808,2705407999,NZ
+2705408000,2705432575,AU
+2705432576,2705440767,NZ
+2705440768,2705456895,AU
+2705456896,2705522687,NZ
2705522688,2705588223,ES
2705588224,2705596159,US
2705596160,2705596415,CA
@@ -48119,9 +48609,9 @@
2713976832,2714042367,VE
2714042368,2714238975,US
2714238976,2714304511,TH
-2714304512,2714370047,US
-2714370048,2714435583,NL
-2714435584,2714697727,US
+2714304512,2714386431,US
+2714386432,2714402815,JP
+2714402816,2714697727,US
2714697728,2714763263,CN
2714763264,2715025407,US
2715025408,2715090943,VE
@@ -48158,11 +48648,15 @@
2719612928,2719678463,CH
2719678464,2720399359,US
2720399360,2720464895,FR
-2720464896,2721382399,US
+2720464896,2720849919,US
+2720849920,2720850175,GB
+2720850176,2721382399,US
2721382400,2721447935,CA
2721447936,2721579007,US
2721579008,2721644543,IN
-2721644544,2722693119,US
+2721644544,2722496511,US
+2722496512,2722562047,CA
+2722562048,2722693119,US
2722693120,2722754559,CA
2722754560,2722754815,GB
2722754816,2722758655,CA
@@ -48173,7 +48667,9 @@
2723832576,2723832831,GB
2723832832,2724268287,US
2724268288,2724268415,MX
-2724268416,2724790271,US
+2724268416,2724303989,US
+2724303990,2724303990,GB
+2724303991,2724790271,US
2724790272,2724855807,CN
2724855808,2724921343,CA
2724921344,2725249023,US
@@ -48204,7 +48700,8 @@
2731667456,2731671551,HK
2731671552,2731673599,US
2731673600,2731674623,CA
-2731674624,2731679743,US
+2731674624,2731676671,US
+2731677696,2731679743,US
2731679744,2731680767,CA
2731680768,2731681791,US
2731681792,2731682047,PR
@@ -48242,7 +48739,8 @@
2731800576,2731801599,CA
2731801600,2731804671,US
2731804672,2731805695,CA
-2731805696,2731806719,BB
+2731805696,2731806463,BB
+2731806464,2731806719,VG
2731806720,2731807743,US
2731807744,2731808767,CA
2731808768,2731819007,US
@@ -48276,11 +48774,14 @@
2732086272,2732087295,CA
2732087296,2732105727,US
2732105728,2732107775,JM
-2732107776,2732111871,US
+2732107776,2732109823,US
+2732110848,2732111871,US
2732111872,2732113919,CA
2732113920,2732136447,US
2732136448,2732138495,CA
-2732138496,2732189695,US
+2732138496,2732159999,US
+2732161024,2732170239,US
+2732171264,2732189695,US
2732189696,2732192767,CA
2732192768,2732201983,US
2732201984,2732203007,VG
@@ -48352,7 +48853,8 @@
2732494848,2732495871,CA
2732495872,2732497919,US
2732497920,2732499967,CA
-2732499968,2732500479,TW
+2732499968,2732500223,US
+2732500224,2732500479,TW
2732500480,2732515327,US
2732515328,2732516351,VG
2732516352,2732523519,US
@@ -48436,7 +48938,9 @@
2734200832,2734205951,CA
2734205952,2734206975,US
2734206976,2734209023,CA
-2734209024,2734229503,US
+2734209024,2734218239,US
+2734218240,2734218751,CA
+2734218752,2734229503,US
2734229504,2734230527,CA
2734230528,2734237695,US
2734237696,2734238719,CA
@@ -48471,7 +48975,9 @@
2734376960,2734379007,CA
2734379008,2734381055,VG
2734381056,2734389247,US
-2734389248,2734390271,CA
+2734389248,2734389503,CA
+2734389504,2734389535,US
+2734389536,2734390271,CA
2734390272,2734398463,US
2734398464,2734399487,PR
2734399488,2734407679,US
@@ -48511,7 +49017,8 @@
2734542848,2734544895,CA
2734544896,2734553087,US
2734553088,2734555135,CA
-2734555136,2734565375,US
+2734555136,2734557183,CN
+2734557184,2734565375,US
2734565376,2734566399,CA
2734566400,2734577151,US
2734577152,2734577167,LU
@@ -48519,11 +49026,21 @@
2734588928,2734589951,CA
2734589952,2734599167,US
2734599168,2734600191,CA
-2734600192,2734633983,US
+2734600192,2734605311,US
+2734605312,2734605567,GB
+2734605568,2734605823,DE
+2734605824,2734606079,SE
+2734606080,2734633983,US
2734633984,2734635007,CA
2734635008,2734649343,US
2734649344,2734650367,CA
-2734650368,2734657535,US
+2734650368,2734655927,US
+2734655928,2734655935,GB
+2734655936,2734656127,US
+2734656128,2734656255,GB
+2734656256,2734656383,US
+2734656384,2734656511,GB
+2734656512,2734657535,US
2734657536,2734658559,VG
2734658560,2734659583,CA
2734659584,2734665727,US
@@ -48610,7 +49127,6 @@
2738167808,2738168831,AU
2738168832,2738177023,CN
2738177024,2738178047,AU
-2738178048,2738179071,HK
2738179072,2738182143,IN
2738182144,2738195455,CN
2738195456,2738196479,BD
@@ -48626,7 +49142,7 @@
2738208768,2738209791,ID
2738209792,2738210815,KH
2738210816,2738213887,IN
-2738213888,2738215935,HK
+2738214912,2738215935,HK
2738215936,2738216959,CN
2738216960,2738217983,HK
2738217984,2738220031,AU
@@ -48657,7 +49173,7 @@
2744844288,2744909823,CA
2744909824,2744975359,GB
2744975360,2745040895,SE
-2745040896,2745106431,DE
+2745040896,2745106431,NL
2745106432,2745171967,SI
2745171968,2745237503,GB
2745237504,2745303039,CH
@@ -48750,9 +49266,7 @@
2754674688,2754936831,US
2754936832,2755002367,AU
2755002368,2755330047,US
-2755330048,2755395583,DE
-2755395584,2755461119,FR
-2755461120,2755526655,DE
+2755330048,2755526655,DE
2755526656,2755985407,US
2755985408,2756182015,JP
2756182016,2756247551,US
@@ -48809,7 +49323,7 @@
2760529920,2760531967,RU
2760534016,2760536063,BE
2760536064,2760540159,IL
-2760540160,2760556543,RO
+2760540160,2760556543,IR
2760556544,2760558591,DE
2760558592,2760562687,ES
2760562688,2760564735,BG
@@ -48882,7 +49396,10 @@
2773090304,2773221375,US
2773221376,2773286911,JP
2773286912,2773745663,US
-2773745664,2773811199,NZ
+2773745664,2773794815,NZ
+2773794816,2773798911,IN
+2773798912,2773807103,NZ
+2773807104,2773811199,IN
2773811200,2773876735,US
2773876736,2773942271,AU
2773942272,2774138879,US
@@ -48947,7 +49464,9 @@
2780933376,2780933631,GB
2780933632,2780933887,US
2780933888,2780934143,GB
-2780934144,2780954623,US
+2780934144,2780934911,US
+2780934912,2780935167,GB
+2780935168,2780954623,US
2780954624,2781020159,KR
2781020160,2781478911,US
2781478912,2781544447,HK
@@ -48967,11 +49486,37 @@
2782658560,2782724095,PH
2782724096,2782789631,US
2782789632,2782855167,CH
-2782855168,2783182847,US
+2782855168,2783002623,US
+2783002624,2783002879,DK
+2783002880,2783003135,US
+2783003136,2783003391,RU
+2783003392,2783003647,US
+2783003648,2783003903,SE
+2783003904,2783004159,US
+2783004160,2783004671,CH
+2783004672,2783010815,US
+2783010816,2783011327,HK
+2783011328,2783011583,AU
+2783011584,2783011839,US
+2783011840,2783012351,JP
+2783012352,2783012607,TW
+2783012608,2783012863,US
+2783012864,2783013375,IN
+2783013376,2783182847,US
2783182848,2783248383,AU
2783248384,2783313919,KR
2783313920,2783379455,US
-2783379456,2783444991,SC
+2783379456,2783383551,SC
+2783383552,2783387647,CA
+2783387648,2783391743,SC
+2783391744,2783395839,US
+2783395840,2783399935,DE
+2783399936,2783404031,FR
+2783404032,2783416319,SC
+2783416320,2783420415,US
+2783420416,2783424511,EE
+2783424512,2783440895,SC
+2783440896,2783444991,IN
2783444992,2783510527,US
2783510528,2783576063,ZA
2783576064,2783969279,US
@@ -48982,9 +49527,7 @@
2784362496,2784428031,KR
2784428032,2784952063,US
2784952064,2784952319,NL
-2785017856,2785542143,US
-2785542144,2785673215,CH
-2785673216,2785738751,NL
+2785017856,2785738751,US
2785738752,2786066431,CH
2786066432,2788163583,US
2788163584,2788229119,CA
@@ -49009,6 +49552,7 @@
2790653952,2790719487,US
2790719488,2790785023,SA
2790785024,2791112703,US
+2791135872,2791135872,US
2791170304,2791170559,US
2791178240,2791571455,US
2791571456,2791636991,JP
@@ -49081,9 +49625,23 @@
2808938496,2809069567,US
2809069568,2809135103,SA
2809135104,2809266175,US
-2809266176,2809286975,CA
+2809266176,2809274367,CA
+2809274368,2809274623,US
+2809274624,2809277375,CA
+2809277376,2809277407,FR
+2809277408,2809281575,CA
+2809281576,2809281583,US
+2809281584,2809282652,CA
+2809282653,2809282653,US
+2809282654,2809286975,CA
2809286976,2809286991,US
-2809286992,2809331711,CA
+2809286992,2809291823,CA
+2809291824,2809291824,US
+2809291825,2809291891,CA
+2809291892,2809291892,US
+2809291893,2809308599,CA
+2809308600,2809308607,US
+2809308608,2809331711,CA
2809331712,2809397247,US
2809397248,2809462783,UY
2809462784,2809855999,US
@@ -49182,10 +49740,8 @@
2818244608,2818310143,US
2818310144,2818375679,AR
2818375680,2818572287,US
-2818637824,2818654207,NL
-2818654208,2818670591,AU
-2818670592,2818703359,NL
-2818703360,2822731894,US
+2818637824,2818670591,AU
+2818670592,2822731894,US
2822731895,2822731895,GB
2822731896,2823159807,US
2823159808,2823225343,HK
@@ -49193,7 +49749,10 @@
2823553024,2823618559,ZA
2823618560,2823684095,PA
2823684096,2823749631,KR
-2823815168,2823946239,ZA
+2823815168,2823823359,ZA
+2823823360,2823888895,SC
+2823888896,2823897087,ZA
+2823897088,2823946239,SC
2823946240,2824011775,US
2824011776,2824077311,AR
2824077312,2824357375,US
@@ -49231,7 +49790,9 @@
2827943936,2828009471,US
2828009472,2828075007,CA
2828075008,2828533759,US
-2828533760,2828664831,AU
+2828533760,2828599551,AU
+2828599552,2828599807,IN
+2828599808,2828664831,AU
2828664832,2828730367,KR
2828730368,2828795903,ZA
2828795904,2829033471,US
@@ -49299,7 +49860,9 @@
2833711104,2833776639,CL
2833842176,2833907711,US
2833907712,2833973247,GT
-2833973248,2834010111,US
+2833973248,2833992901,US
+2833992902,2833992902,MX
+2833992903,2834010111,US
2834010112,2834014207,CA
2834014208,2834030591,US
2834030592,2834034687,CA
@@ -49309,24 +49872,50 @@
2834825216,2834956287,KR
2834956288,2835087359,US
2835087360,2835152895,AU
+2835202048,2835206143,ZA
+2835206144,2835208191,NG
+2835208192,2835210239,ZA
+2835210240,2835218431,MW
2835218432,2835283967,US
2835283968,2835349503,MX
2835480576,2837446655,US
2837446656,2837839871,CH
-2837839872,2837905407,NL
-2837905408,2838298623,CH
-2838298624,2838495231,NL
-2838495232,2838691839,CH
-2838691840,2838757375,NL
+2837839872,2837905407,US
+2837905408,2837970943,CH
+2837970944,2838036479,US
+2838036480,2838298623,CH
+2838298624,2838560767,NL
+2838560768,2838626303,CH
+2838626304,2838757375,US
2838757376,2838822911,CH
-2838822912,2839019519,NL
-2839019520,2839085055,CH
-2839085056,2839101439,NL
-2839101440,2839117823,MX
-2839117824,2839150591,NL
-2839150592,2839281663,CH
-2839281664,2839412735,NL
-2839412736,2839543807,CH
+2838822912,2838865599,US
+2838865600,2838865615,KR
+2838865616,2838881055,US
+2838881056,2838881087,AT
+2838881088,2838890351,US
+2838890352,2838890367,CO
+2838890368,2838904831,US
+2838904832,2838921215,CA
+2838921216,2838938991,US
+2838938992,2838939007,AU
+2838939008,2838939615,US
+2838939616,2838939647,IE
+2838939648,2838942527,US
+2838942528,2838942559,AU
+2838942560,2838943263,US
+2838943264,2838943279,GB
+2838943280,2838944975,US
+2838944976,2838944991,AF
+2838944992,2838946431,US
+2838946432,2838946447,CA
+2838946448,2838946735,US
+2838946736,2838946751,CA
+2838946752,2838948127,US
+2838948128,2838948143,BR
+2838948144,2839085055,US
+2839085056,2839117823,MX
+2839117824,2839150591,US
+2839150592,2839543807,CH
2839543808,2843803647,US
2843803648,2843869183,ZA
2843869184,2844524543,US
@@ -49344,6 +49933,9 @@
2844912640,2844912895,JP
2844912896,2845704191,US
2845704192,2845769727,CU
+2845769728,2845786111,GA
+2845786112,2845802495,NG
+2845818880,2845822975,ZA
2845835264,2848212991,US
2848212992,2848215039,GB
2848215040,2848244735,US
@@ -49357,16 +49949,42 @@
2850029568,2851012607,US
2851078144,2851995647,US
2852061184,2852062207,ZA
+2852062208,2852063231,CM
2852063232,2852064255,KE
2852064256,2852065279,ZA
2852065280,2852066303,GH
-2852067328,2852068351,SD
-2852069376,2852070399,ZA
+2852066304,2852067327,ZA
+2852067328,2852068351,SS
+2852068352,2852071423,ZA
2852071424,2852072447,NG
2852072448,2852073471,ZA
2852073472,2852074495,TZ
2852074496,2852075519,MW
-2852075520,2852076543,ZA
+2852075520,2852077567,ZA
+2852077568,2852078591,CD
+2852078592,2852079615,TN
+2852079616,2852080639,CG
+2852080640,2852081663,ZA
+2852081664,2852082687,BW
+2852082688,2852083711,EG
+2852083712,2852084735,AO
+2852084736,2852085759,TN
+2852085760,2852086783,KE
+2852086784,2852087807,SD
+2852087808,2852088831,KE
+2852088832,2852089855,LY
+2852089856,2852090879,TZ
+2852090880,2852091903,ZA
+2852091904,2852092927,CG
+2852092928,2852093951,NG
+2852093952,2852094975,ZA
+2852096000,2852097023,SD
+2852097024,2852098047,NG
+2852098048,2852099071,ZA
+2852099072,2852100095,GA
+2852100096,2852101119,TD
+2852101120,2852102143,LY
+2852102144,2852103167,MU
2852192256,2852716653,US
2852716654,2852716654,AU
2852716655,2853306367,US
@@ -49435,7 +50053,11 @@
2867462144,2867593215,US
2867593216,2867724287,CH
2867855360,2868117503,US
-2868379648,2868605376,US
+2868379648,2868420607,US
+2868420608,2868423679,IN
+2868423680,2868586495,US
+2868586496,2868588543,IN
+2868588544,2868605376,US
2868605377,2868605377,NO
2868605378,2868658175,US
2868658176,2868658431,GB
@@ -49496,7 +50118,9 @@
2870600960,2870601215,BE
2870601216,2870601727,PL
2870601728,2870602751,RU
-2870602752,2870604287,UA
+2870602752,2870603775,UA
+2870603776,2870604031,CZ
+2870604032,2870604287,UA
2870604288,2870607871,RU
2870607872,2870673407,BE
2870673408,2870738943,CH
@@ -49537,8 +50161,9 @@
2885681152,2886667007,US
2886667008,2886667263,DE
2886667264,2886729727,US
-2887778304,2889875455,US
+2887778304,2890399743,US
2890414080,2890415103,ZA
+2890661888,2890924031,US
2894069760,2894921727,US
2894921728,2895118335,GB
2895118336,2895301887,US
@@ -49548,15 +50173,16 @@
2895708160,2896035839,US
2896035840,2896101375,DE
2896101376,2896166911,GB
-2896166912,2897018879,US
+2896166912,2896429280,US
+2896429281,2896429281,CA
+2896429282,2897018879,US
2897018880,2897149951,DE
2897149952,2897215487,US
2897215488,2897739775,DE
2897739776,2898001919,FR
2898001920,2898132991,GB
2898132992,2898264063,US
-2898264064,2898264064,AU
-2898264065,2898788351,US
+2898264064,2898788351,AU
2898788352,2899050495,GB
2899050496,2899116031,FR
2899116032,2899148799,VN
@@ -49606,9 +50232,14 @@
2905473024,2905481215,CA
2905481216,2913992703,US
2913992704,2914516991,CA
-2914516992,2915195647,US
+2914516992,2915105791,US
+2915105792,2915106047,NL
+2915106048,2915106303,US
+2915106304,2915106559,SG
+2915106560,2915195647,US
2915195648,2915195903,CL
-2915195904,2915196927,US
+2915195904,2915196159,NL
+2915196160,2915196927,US
2915196928,2915197183,IE
2915197184,2915197439,US
2915197440,2915197695,FI
@@ -49616,8 +50247,7 @@
2915250176,2915254271,CA
2915254272,2915516415,US
2915516416,2915516671,NL
-2915516672,2915516927,CA
-2915516928,2915517183,US
+2915516672,2915517183,US
2915517184,2915517439,RU
2915517440,2915518463,DK
2915518464,2915520511,GB
@@ -49631,13 +50261,15 @@
2915528716,2915528735,US
2915528736,2915528751,NL
2915528752,2915528767,US
-2915528768,2915528783,NL
-2915528784,2915795013,US
+2915528768,2915528791,NL
+2915528792,2915795013,US
2915795014,2915795014,MX
2915795015,2915958783,US
2915958784,2916024319,CA
2916024320,2916163583,US
-2916163584,2916171775,CA
+2916163584,2916169015,CA
+2916169016,2916169023,US
+2916169024,2916171775,CA
2916171776,2916184063,US
2916184064,2916196351,CA
2916196352,2916253695,US
@@ -49652,27 +50284,52 @@
2916515840,2916519935,CA
2916519936,2916581375,US
2916581376,2916614143,PR
-2916614144,2917117951,US
+2916614144,2917031935,US
+2917031936,2917032959,NL
+2917032960,2917040127,US
+2917040128,2917041407,NL
+2917041408,2917048831,US
+2917048832,2917049343,NL
+2917049344,2917058559,US
+2917058560,2917059583,NL
+2917059584,2917060607,US
+2917060608,2917061631,NL
+2917061632,2917075455,US
+2917075456,2917075967,NL
+2917075968,2917078527,US
+2917078528,2917079039,NL
+2917079040,2917080063,US
+2917080064,2917081087,NL
+2917081088,2917105663,US
+2917105664,2917106175,NL
+2917106176,2917106431,US
+2917106432,2917106687,NL
+2917106688,2917117951,US
2917117952,2917122047,NL
-2917122048,2917170822,US
+2917122048,2917167905,US
+2917167906,2917167906,BZ
+2917167907,2917170822,US
2917170823,2917170823,UA
2917170824,2917170854,US
2917170855,2917170856,UA
2917170857,2917171086,US
2917171087,2917171087,UA
-2917171088,2917179391,US
-2917181440,2917181951,US
-2917183488,2917195775,US
+2917171088,2917171199,US
+2917175296,2917195775,US
2917195776,2917203967,CA
2917203968,2917257215,US
2917257216,2917261311,KY
2917261312,2917265407,US
2917265408,2917267711,JM
-2917267712,2917267967,AG
+2917267712,2917267775,AG
+2917267776,2917267839,VG
+2917267840,2917267967,AG
2917267968,2917268223,JM
2917268224,2917268479,BB
2917268480,2917268735,TC
-2917268736,2917269503,JM
+2917268736,2917269113,JM
+2917269114,2917269114,TC
+2917269115,2917269503,JM
2917269504,2917449727,US
2917449728,2917466111,PR
2917466112,2917572607,US
@@ -49852,10 +50509,7 @@
2921547008,2921547263,FR
2921547264,2921547519,US
2921547520,2921547775,DE
-2921547776,2921548031,GB
-2921548032,2921548831,US
-2921548832,2921549055,FR
-2921549056,2921550335,US
+2921547776,2921550335,US
2921550336,2921550591,IT
2921550592,2921551615,US
2921551616,2921551871,BR
@@ -49868,9 +50522,7 @@
2921553408,2921553663,CO
2921553664,2921562111,US
2921562112,2921594879,CA
-2921594880,2921681631,US
-2921681632,2921681639,JP
-2921681640,2925002751,US
+2921594880,2925002751,US
2925002752,2925527039,CA
2925527040,2926575615,US
2926575616,2926777727,CA
@@ -49886,7 +50538,9 @@
2927254784,2927255039,AE
2927255040,2927581183,US
2927581184,2927581439,SG
-2927581440,2928175551,US
+2927581440,2927981567,US
+2927981568,2927982591,SG
+2927982592,2928175551,US
2928175552,2928175559,VN
2928175560,2928177151,US
2928177152,2928181247,CA
@@ -49911,7 +50565,7 @@
2936012800,2937847807,CN
2937847808,2937848831,KH
2937848832,2937849855,JP
-2937849856,2937850879,AU
+2937849856,2937850879,SG
2937850880,2937851903,MY
2937851904,2937855999,JP
2937856000,2937860095,KR
@@ -49931,7 +50585,7 @@
2938701568,2938702079,IN
2938702080,2938703103,HK
2938703104,2938703359,IL
-2938703360,2938703615,ZA
+2938703360,2938703615,EG
2938703616,2938703871,IN
2938703872,2938707967,HK
2938707968,2938710015,JP
@@ -50012,7 +50666,11 @@
2947590144,2947590655,JP
2947590656,2947590911,SG
2947590912,2947590927,HK
-2947590928,2947591167,SG
+2947590928,2947591023,SG
+2947591024,2947591031,HK
+2947591032,2947591039,SG
+2947591040,2947591071,HK
+2947591072,2947591167,SG
2947591168,2947591183,HK
2947591184,2947591679,SG
2947591680,2947591695,JP
@@ -50075,992 +50733,201 @@
2954647552,2954657791,ES
2954657792,2954756095,JO
2954756096,2954821631,TR
-2954821632,2954821651,FR
-2954821652,2954821655,IT
-2954821656,2954821775,FR
-2954821776,2954821783,IT
-2954821784,2954822047,FR
-2954822048,2954822063,ES
-2954822064,2954822159,FR
-2954822160,2954822167,GB
-2954822168,2954822175,NL
-2954822176,2954822255,FR
-2954822256,2954822263,PL
-2954822264,2954822311,FR
-2954822312,2954822319,GB
-2954822320,2954822335,FR
-2954822336,2954822339,PL
-2954822340,2954822347,FR
-2954822348,2954822351,BE
-2954822352,2954822527,FR
-2954822528,2954822531,ES
-2954822532,2954822559,FR
-2954822560,2954822575,NL
-2954822576,2954822591,FR
-2954822592,2954822599,GB
-2954822600,2954822655,FR
-2954822656,2954822687,GB
-2954822688,2954822783,FR
-2954822784,2954822791,GB
-2954822792,2954822927,FR
+2954821632,2954821947,FR
+2954821948,2954821951,DE
+2954821952,2954822079,FR
+2954822080,2954822143,ES
+2954822144,2954822927,FR
2954822928,2954822931,DE
-2954822932,2954823071,FR
-2954823072,2954823103,BE
-2954823104,2954823263,FR
-2954823264,2954823295,CZ
-2954823296,2954823383,FR
-2954823384,2954823387,DE
-2954823388,2954823395,FR
-2954823396,2954823399,GB
-2954823400,2954823403,NL
-2954823404,2954823551,FR
-2954823552,2954823555,BE
-2954823556,2954823559,CZ
-2954823560,2954823567,FR
-2954823568,2954823583,GB
-2954823584,2954823703,FR
-2954823704,2954823707,NL
-2954823708,2954823767,FR
-2954823768,2954823771,GB
-2954823772,2954823779,FR
-2954823780,2954823791,GB
-2954823792,2954823891,FR
-2954823892,2954823895,CH
-2954823896,2954823903,FR
-2954823904,2954823911,DE
-2954823912,2954823927,FR
-2954823928,2954823935,CH
-2954823936,2954823999,FR
+2954822932,2954823999,FR
2954824000,2954824015,ES
-2954824016,2954824031,FR
-2954824032,2954824047,IT
-2954824048,2954824255,FR
+2954824016,2954824255,FR
2954824256,2954824259,ES
-2954824260,2954824271,FR
-2954824272,2954824275,ES
-2954824276,2954824279,FR
-2954824280,2954824283,PT
-2954824284,2954824431,FR
-2954824432,2954824447,PL
-2954824448,2954824711,FR
-2954824712,2954824719,ES
-2954824720,2954824735,FI
-2954824736,2954824767,DE
-2954824768,2954824775,FR
-2954824776,2954824783,IT
-2954824784,2954824911,FR
-2954824912,2954824919,CH
-2954824920,2954824943,FR
-2954824944,2954824959,BE
-2954824960,2954824975,FR
-2954824976,2954824991,ES
-2954824992,2954825023,FR
-2954825024,2954825039,NL
-2954825040,2954825063,FR
+2954824260,2954824415,FR
+2954824416,2954824431,GB
+2954824432,2954825063,FR
2954825064,2954825067,ES
-2954825068,2954825159,FR
-2954825160,2954825167,GB
-2954825168,2954825183,FR
-2954825184,2954825191,GB
-2954825192,2954825271,FR
-2954825272,2954825275,ES
-2954825276,2954825315,FR
+2954825068,2954825151,FR
+2954825152,2954825159,NL
+2954825160,2954825315,FR
2954825316,2954825319,ES
-2954825320,2954825327,FR
-2954825328,2954825335,DE
-2954825336,2954825343,FR
-2954825344,2954825351,DE
-2954825352,2954825375,FR
-2954825376,2954825383,DE
-2954825384,2954825403,FR
+2954825320,2954825403,FR
2954825404,2954825407,ES
2954825408,2954825535,FR
2954825536,2954825539,ES
-2954825540,2954825551,FR
-2954825552,2954825567,ES
-2954825568,2954825759,FR
-2954825760,2954825791,LT
-2954825792,2954825927,FR
-2954825928,2954825931,CZ
-2954825932,2954826031,FR
+2954825540,2954826031,FR
2954826032,2954826035,ES
-2954826036,2954826039,FR
-2954826040,2954826043,DE
-2954826044,2954826063,FR
-2954826064,2954826071,DE
-2954826072,2954826159,FR
+2954826036,2954826159,FR
2954826160,2954826163,ES
-2954826164,2954826167,FR
-2954826168,2954826175,DE
-2954826176,2954826279,FR
-2954826280,2954826287,ES
-2954826288,2954826343,FR
-2954826344,2954826351,NL
-2954826352,2954826379,FR
-2954826380,2954826383,ES
-2954826384,2954826403,FR
-2954826404,2954826407,IT
-2954826408,2954826415,FR
-2954826416,2954826423,NL
-2954826424,2954826447,FR
-2954826448,2954826451,GB
-2954826452,2954826471,FR
-2954826472,2954826475,GB
-2954826476,2954826755,FR
+2954826164,2954826755,FR
2954826756,2954826759,IT
2954826760,2954826763,ES
2954826764,2954826775,FR
2954826776,2954826779,ES
-2954826780,2954826799,FR
-2954826800,2954826807,ES
-2954826808,2954827007,FR
-2954827008,2954827135,ES
-2954827136,2954827167,FR
-2954827168,2954827199,GB
-2954827200,2954827231,FR
-2954827232,2954827263,BE
-2954827264,2954827295,ES
-2954827296,2954827391,FR
-2954827392,2954827423,DE
-2954827424,2954827647,FR
-2954827648,2954827775,GB
-2954827776,2954827779,FR
-2954827780,2954827783,GB
-2954827784,2954827799,FR
+2954826780,2954827799,FR
2954827800,2954827807,DE
-2954827808,2954827811,IT
-2954827812,2954827823,FR
-2954827824,2954827831,IE
-2954827832,2954827839,PT
-2954827840,2954827855,FR
-2954827856,2954827871,ES
-2954827872,2954827999,FR
-2954828000,2954828031,NL
-2954828032,2954828159,FR
+2954827808,2954828159,FR
2954828160,2954828191,IT
-2954828192,2954828447,FR
-2954828448,2954828463,GB
-2954828464,2954828471,IT
-2954828472,2954828799,FR
-2954828800,2954828815,GB
-2954828816,2954828823,FR
-2954828824,2954828831,PT
-2954828832,2954828839,DE
-2954828840,2954828959,FR
-2954828960,2954828975,PL
-2954828976,2954829135,FR
+2954828192,2954829135,FR
2954829136,2954829139,DE
-2954829140,2954829179,FR
-2954829180,2954829183,NL
-2954829184,2954829215,GB
-2954829216,2954829375,FR
-2954829376,2954829391,ES
-2954829392,2954829395,FR
+2954829140,2954829395,FR
2954829396,2954829399,IT
2954829400,2954829427,FR
2954829428,2954829431,NL
-2954829432,2954829435,GB
-2954829436,2954829459,FR
-2954829460,2954829463,PL
-2954829464,2954829727,FR
-2954829728,2954829735,DE
-2954829736,2954829751,FR
+2954829432,2954829751,FR
2954829752,2954829752,ES
2954829753,2954829759,FR
2954829760,2954829823,ES
2954829824,2954829843,FR
2954829844,2954829847,DE
-2954829848,2954829855,FR
-2954829856,2954829871,PL
-2954829872,2954829875,FR
+2954829848,2954829875,FR
2954829876,2954829879,DE
-2954829880,2954829887,FR
-2954829888,2954829903,BE
-2954829904,2954829983,FR
-2954829984,2954830015,GB
-2954830016,2954830111,FR
-2954830112,2954830127,IE
-2954830128,2954830183,FR
+2954829880,2954830183,FR
2954830184,2954830191,IT
-2954830192,2954830207,FR
-2954830208,2954830271,PL
-2954830272,2954830287,FR
-2954830288,2954830303,NL
-2954830304,2954830375,FR
-2954830376,2954830383,DE
-2954830384,2954830391,FR
-2954830392,2954830395,BE
+2954830192,2954830395,FR
2954830396,2954830399,ES
-2954830400,2954830447,FR
-2954830448,2954830455,PL
-2954830456,2954830735,FR
+2954830400,2954830523,FR
+2954830524,2954830527,DE
+2954830528,2954830735,FR
2954830736,2954830751,NL
-2954830752,2954830847,FR
-2954830848,2954830855,IT
-2954830856,2954830895,FR
-2954830896,2954830911,GB
-2954830912,2954830927,FR
-2954830928,2954830931,CZ
-2954830932,2954830975,FR
-2954830976,2954830983,IT
-2954830984,2954830991,FR
-2954830992,2954830995,IT
-2954830996,2954831247,FR
+2954830752,2954831247,FR
2954831248,2954831251,ES
-2954831252,2954831255,FR
-2954831256,2954831263,DE
-2954831264,2954831327,FR
-2954831328,2954831331,LT
-2954831332,2954831503,FR
-2954831504,2954831511,NL
-2954831512,2954831519,FR
-2954831520,2954831535,BE
-2954831536,2954831543,FR
-2954831544,2954831551,ES
-2954831552,2954831611,FR
-2954831612,2954831615,ES
-2954831616,2954831667,FR
-2954831668,2954831671,CZ
-2954831672,2954831807,FR
+2954831252,2954831807,FR
2954831808,2954831823,ES
-2954831824,2954831919,FR
-2954831920,2954831935,PL
-2954831936,2954832007,FR
-2954832008,2954832015,PL
-2954832016,2954832159,FR
+2954831824,2954832159,FR
2954832160,2954832167,PT
-2954832168,2954832215,FR
-2954832216,2954832219,IE
-2954832220,2954832223,GB
-2954832224,2954832255,FR
-2954832256,2954832287,GB
-2954832288,2954832319,PT
-2954832320,2954832343,FR
+2954832168,2954832343,FR
2954832344,2954832347,CH
-2954832348,2954832671,FR
-2954832672,2954832679,ES
-2954832680,2954832799,FR
-2954832800,2954832815,CZ
-2954832816,2954832823,PT
-2954832824,2954832887,FR
-2954832888,2954832891,IT
+2954832348,2954832891,FR
2954832892,2954832895,ES
-2954832896,2954832927,GB
-2954832928,2954832959,DE
-2954832960,2954833039,FR
-2954833040,2954833047,CZ
-2954833048,2954833055,ES
-2954833056,2954833079,FR
-2954833080,2954833087,IT
-2954833088,2954833255,FR
-2954833256,2954833263,LT
-2954833264,2954833315,FR
-2954833316,2954833319,FI
-2954833320,2954833419,FR
+2954832896,2954832899,DE
+2954832900,2954833419,FR
2954833420,2954833423,PL
-2954833424,2954833551,FR
-2954833552,2954833555,ES
+2954833424,2954833555,FR
2954833556,2954833559,NL
2954833560,2954833567,FR
2954833568,2954833571,ES
-2954833572,2954833575,FR
-2954833576,2954833583,NL
-2954833584,2954833615,FR
-2954833616,2954833631,DE
-2954833632,2954833635,IT
-2954833636,2954833655,FR
+2954833572,2954833655,FR
2954833656,2954833659,IT
-2954833660,2954833679,FR
-2954833680,2954833695,ES
-2954833696,2954833723,FR
-2954833724,2954833727,LT
-2954833728,2954833855,FR
-2954833856,2954833887,ES
-2954833888,2954833919,FR
-2954833920,2954833927,GB
-2954833928,2954834007,FR
-2954834008,2954834011,GB
-2954834012,2954834063,FR
-2954834064,2954834079,ES
-2954834080,2954834095,CH
-2954834096,2954834151,FR
-2954834152,2954834159,DE
-2954834160,2954834223,FR
-2954834224,2954834227,CH
-2954834228,2954834255,FR
-2954834256,2954834271,CH
-2954834272,2954834287,FR
-2954834288,2954834303,DE
-2954834304,2954834335,NL
-2954834336,2954834431,FR
-2954834432,2954834439,PL
-2954834440,2954834447,FR
-2954834448,2954834455,ES
-2954834456,2954834495,FR
-2954834496,2954834503,PT
-2954834504,2954834519,FR
+2954833660,2954834519,FR
2954834520,2954834523,ES
-2954834524,2954834559,FR
-2954834560,2954834563,GB
-2954834564,2954834623,FR
-2954834624,2954834627,DE
-2954834628,2954834663,FR
-2954834664,2954834671,IE
+2954834524,2954834671,FR
2954834672,2954834675,ES
-2954834676,2954834847,FR
-2954834848,2954834863,ES
-2954834864,2954834871,FR
-2954834872,2954834879,PT
-2954834880,2954834911,ES
-2954834912,2954835295,FR
+2954834676,2954834983,FR
+2954834984,2954834991,IT
+2954834992,2954835039,FR
+2954835040,2954835043,DE
+2954835044,2954835295,FR
2954835296,2954835299,ES
-2954835300,2954835307,DE
-2954835308,2954835407,FR
-2954835408,2954835411,NL
-2954835412,2954835443,FR
+2954835300,2954835443,FR
2954835444,2954835447,ES
2954835448,2954835451,FR
2954835452,2954835455,ES
-2954835456,2954835479,FR
-2954835480,2954835487,PL
-2954835488,2954835583,FR
-2954835584,2954835599,PT
-2954835600,2954835607,FR
-2954835608,2954835611,PL
-2954835612,2954835615,FR
-2954835616,2954835619,DE
-2954835620,2954836031,FR
-2954836032,2954836063,DE
-2954836064,2954836239,FR
-2954836240,2954836255,IE
-2954836256,2954836351,FR
-2954836352,2954836355,IE
-2954836356,2954836359,FR
-2954836360,2954836367,ES
-2954836368,2954836399,FR
-2954836400,2954836407,BE
-2954836408,2954836415,IT
-2954836416,2954836771,FR
-2954836772,2954836775,GB
-2954836776,2954836895,FR
-2954836896,2954836903,IE
-2954836904,2954837071,FR
+2954835456,2954837071,FR
2954837072,2954837075,ES
-2954837076,2954837119,FR
-2954837120,2954837123,IE
-2954837124,2954837127,ES
-2954837128,2954837135,FR
-2954837136,2954837143,DE
-2954837144,2954837407,FR
-2954837408,2954837423,BE
-2954837424,2954837431,FR
-2954837432,2954837439,PL
-2954837440,2954837479,FR
-2954837480,2954837483,ES
-2954837484,2954837495,FR
-2954837496,2954837499,DE
-2954837500,2954837535,FR
-2954837536,2954837543,PT
-2954837544,2954837551,IT
-2954837552,2954837559,DE
-2954837560,2954837567,FR
-2954837568,2954837575,CZ
-2954837576,2954837583,FR
-2954837584,2954837591,IE
-2954837592,2954837615,FR
+2954837076,2954837615,FR
2954837616,2954837619,IT
-2954837620,2954837663,FR
-2954837664,2954837667,IT
+2954837620,2954837667,FR
2954837668,2954837671,ES
-2954837672,2954837691,FR
-2954837692,2954837695,ES
-2954837696,2954837827,FR
+2954837672,2954837827,FR
2954837828,2954837831,DE
2954837832,2954837867,FR
2954837868,2954837871,ES
-2954837872,2954837919,FR
-2954837920,2954837935,GB
-2954837936,2954838115,FR
-2954838116,2954838119,DE
-2954838120,2954838127,FR
-2954838128,2954838131,FI
-2954838132,2954838135,FR
-2954838136,2954838143,GB
-2954838144,2954838151,PL
-2954838152,2954838199,FR
-2954838200,2954838203,CH
-2954838204,2954838239,FR
-2954838240,2954838255,IT
-2954838256,2954838263,IE
-2954838264,2954838379,FR
-2954838380,2954838383,IT
-2954838384,2954838415,FR
-2954838416,2954838423,ES
-2954838424,2954838511,FR
-2954838512,2954838519,NL
-2954838520,2954838539,FR
-2954838540,2954838543,PT
-2954838544,2954838559,FR
-2954838560,2954838575,IT
-2954838576,2954838599,FR
+2954837872,2954838103,FR
+2954838104,2954838107,DE
+2954838108,2954838599,FR
2954838600,2954838607,GB
2954838608,2954838615,NL
-2954838616,2954838863,FR
-2954838864,2954838871,GB
-2954838872,2954838879,FR
-2954838880,2954838895,ES
-2954838896,2954838935,FR
-2954838936,2954838939,PL
-2954838940,2954838943,CH
-2954838944,2954838959,IT
-2954838960,2954838975,DE
-2954838976,2954838999,FR
-2954839000,2954839007,DE
-2954839008,2954839063,FR
+2954838616,2954838911,FR
+2954838912,2954838915,DE
+2954838916,2954839063,FR
2954839064,2954839067,IT
-2954839068,2954839211,FR
-2954839212,2954839215,ES
-2954839216,2954839239,FR
+2954839068,2954839239,FR
2954839240,2954839243,IT
2954839244,2954839267,FR
2954839268,2954839271,ES
-2954839272,2954839343,FR
-2954839344,2954839351,FI
-2954839352,2954839403,FR
-2954839404,2954839407,IT
-2954839408,2954839423,ES
-2954839424,2954839471,FR
+2954839272,2954839471,FR
2954839472,2954839479,BE
-2954839480,2954839487,ES
-2954839488,2954839523,FR
-2954839524,2954839527,BE
-2954839528,2954839551,FR
-2954839552,2954839583,PL
-2954839584,2954839647,FR
-2954839648,2954839679,GB
-2954839680,2954840175,FR
-2954840176,2954840179,GB
-2954840180,2954840183,FR
-2954840184,2954840191,PT
-2954840192,2954840255,FR
+2954839480,2954840255,FR
2954840256,2954840447,GB
2954840448,2954840515,FR
2954840516,2954840519,NL
-2954840520,2954840575,FR
-2954840576,2954840591,DE
-2954840592,2954840619,FR
-2954840620,2954840623,ES
-2954840624,2954840639,IT
-2954840640,2954840903,FR
-2954840904,2954840911,GB
-2954840912,2954840927,FR
+2954840520,2954840731,FR
+2954840732,2954840735,IT
+2954840736,2954840927,FR
2954840928,2954840931,DE
-2954840932,2954841111,FR
-2954841112,2954841119,BE
-2954841120,2954841183,FR
-2954841184,2954841199,NL
-2954841200,2954841207,PL
-2954841208,2954841275,FR
-2954841276,2954841279,DE
-2954841280,2954841299,FR
-2954841300,2954841303,BE
-2954841304,2954841567,FR
-2954841568,2954841583,ES
-2954841584,2954841595,FR
-2954841596,2954841599,ES
-2954841600,2954841639,FR
-2954841640,2954841643,GB
-2954841644,2954841667,FR
-2954841668,2954841671,DE
-2954841672,2954841707,FR
+2954840932,2954841707,FR
2954841708,2954841711,NL
-2954841712,2954841715,FR
-2954841716,2954841719,IT
-2954841720,2954841727,FR
-2954841728,2954841759,CH
-2954841760,2954841807,FR
+2954841712,2954841807,FR
2954841808,2954841815,NL
-2954841816,2954841855,FR
-2954841856,2954841871,IT
-2954841872,2954841903,FR
-2954841904,2954841907,BE
-2954841908,2954841983,FR
-2954841984,2954841999,ES
-2954842000,2954842043,FR
-2954842044,2954842047,CH
-2954842048,2954842111,FR
-2954842112,2954842143,PL
-2954842144,2954842207,FR
-2954842208,2954842239,DE
-2954842240,2954842403,FR
-2954842404,2954842407,BE
-2954842408,2954842415,FR
-2954842416,2954842419,CH
-2954842420,2954842431,FR
-2954842432,2954842439,GB
-2954842440,2954842463,FR
-2954842464,2954842467,NL
-2954842468,2954842559,FR
-2954842560,2954842575,CZ
-2954842576,2954842703,FR
-2954842704,2954842719,GB
-2954842720,2954842727,FR
-2954842728,2954842731,DE
-2954842732,2954842863,FR
-2954842864,2954842879,ES
-2954842880,2954842911,CZ
-2954842912,2954843055,FR
-2954843056,2954843071,PL
-2954843072,2954843103,FR
-2954843104,2954843135,IE
-2954843136,2954843183,FR
-2954843184,2954843187,ES
-2954843188,2954843319,FR
-2954843320,2954843323,GB
-2954843324,2954843407,FR
-2954843408,2954843415,PL
-2954843416,2954843419,BE
-2954843420,2954843423,PL
-2954843424,2954843503,FR
+2954841816,2954843503,FR
2954843504,2954843507,ES
-2954843508,2954843591,FR
-2954843592,2954843595,BE
-2954843596,2954843599,ES
-2954843600,2954843603,BE
-2954843604,2954843723,FR
-2954843724,2954843727,DE
-2954843728,2954843767,FR
-2954843768,2954843771,ES
-2954843772,2954843871,FR
-2954843872,2954843887,DE
-2954843888,2954843895,FR
-2954843896,2954843899,DE
-2954843900,2954844031,FR
-2954844032,2954844039,NL
-2954844040,2954844047,IE
-2954844048,2954844147,FR
+2954843508,2954843759,FR
+2954843760,2954843771,ES
+2954843772,2954844147,FR
2954844148,2954844151,DE
-2954844152,2954844155,ES
-2954844156,2954844183,FR
-2954844184,2954844187,DE
-2954844188,2954844191,FR
-2954844192,2954844223,IE
-2954844224,2954844239,FR
-2954844240,2954844255,IT
-2954844256,2954844447,FR
-2954844448,2954844455,PT
-2954844456,2954844551,FR
-2954844552,2954844559,PL
-2954844560,2954844607,FR
-2954844608,2954844639,ES
-2954844640,2954844731,FR
-2954844732,2954844735,PL
-2954844736,2954844991,FR
-2954844992,2954844999,GB
+2954844152,2954844999,FR
2954845000,2954845003,ES
-2954845004,2954845023,FR
-2954845024,2954845039,DE
-2954845040,2954845083,FR
-2954845084,2954845087,IE
-2954845088,2954845091,FR
-2954845092,2954845095,CZ
-2954845096,2954845111,FR
-2954845112,2954845119,DE
-2954845120,2954845135,GB
-2954845136,2954845159,FR
-2954845160,2954845167,CZ
-2954845168,2954845391,FR
-2954845392,2954845407,PL
-2954845408,2954845695,FR
-2954845696,2954845759,BE
-2954845760,2954845791,DE
-2954845792,2954845999,FR
-2954846000,2954846015,PT
-2954846016,2954846047,FR
-2954846048,2954846055,NL
-2954846056,2954846063,FR
-2954846064,2954846079,ES
-2954846080,2954846095,FR
+2954845004,2954846095,FR
2954846096,2954846103,NL
2954846104,2954846107,FR
2954846108,2954846111,ES
-2954846112,2954846123,FR
-2954846124,2954846127,IT
-2954846128,2954846139,FR
+2954846112,2954846139,FR
2954846140,2954846143,ES
-2954846144,2954846175,FR
-2954846176,2954846191,NL
-2954846192,2954854471,FR
-2954854472,2954854475,CH
-2954854476,2954854495,FR
-2954854496,2954854511,IT
-2954854512,2954854671,FR
-2954854672,2954854687,ES
-2954854688,2954854815,FR
-2954854816,2954854847,PL
-2954854848,2954854871,FR
+2954846144,2954854871,FR
2954854872,2954854875,IT
-2954854876,2954854975,FR
-2954854976,2954854991,PL
-2954854992,2954855007,IT
-2954855008,2954855023,FR
-2954855024,2954855039,DE
-2954855040,2954855075,FR
+2954854876,2954855075,FR
2954855076,2954855079,ES
-2954855080,2954855087,FR
-2954855088,2954855091,PL
-2954855092,2954855507,FR
+2954855080,2954855507,FR
2954855508,2954855511,DE
2954855512,2954855515,FR
2954855516,2954855519,ES
2954855520,2954855527,FR
2954855528,2954855531,ES
-2954855532,2954855615,FR
-2954855616,2954855619,DE
-2954855620,2954855639,FR
-2954855640,2954855643,DE
-2954855644,2954855647,ES
-2954855648,2954855651,CZ
-2954855652,2954855727,FR
-2954855728,2954855743,DE
-2954855744,2954856063,FR
-2954856064,2954856067,LT
-2954856068,2954856071,FR
-2954856072,2954856079,GB
-2954856080,2954856111,FR
-2954856112,2954856115,ES
-2954856116,2954856175,FR
-2954856176,2954856179,DE
+2954855532,2954856179,FR
2954856180,2954856183,ES
-2954856184,2954856543,FR
-2954856544,2954856547,CH
-2954856548,2954856551,CZ
-2954856552,2954856563,FR
-2954856564,2954856567,DE
-2954856568,2954856571,CH
-2954856572,2954856611,FR
-2954856612,2954856615,IT
-2954856616,2954856619,FR
-2954856620,2954856623,ES
-2954856624,2954856975,FR
-2954856976,2954856979,GB
-2954856980,2954856983,LT
-2954856984,2954856999,FR
-2954857000,2954857003,DE
-2954857004,2954857087,FR
-2954857088,2954857091,IT
-2954857092,2954857095,FR
-2954857096,2954857099,LT
-2954857100,2954857115,FR
+2954856184,2954857115,FR
2954857116,2954857119,NL
-2954857120,2954857183,FR
-2954857184,2954857215,PL
-2954857216,2954857703,FR
-2954857704,2954857707,ES
-2954857708,2954857999,FR
-2954858000,2954858015,IE
-2954858016,2954858059,FR
-2954858060,2954858063,BE
-2954858064,2954858367,FR
-2954858368,2954858375,NL
-2954858376,2954858379,ES
-2954858380,2954858383,IE
-2954858384,2954858419,FR
-2954858420,2954858423,GB
-2954858424,2954858427,FR
-2954858428,2954858431,BE
-2954858432,2954858483,FR
-2954858484,2954858487,GB
-2954858488,2954858819,FR
+2954857120,2954858819,FR
2954858820,2954858823,IT
-2954858824,2954858827,ES
-2954858828,2954858831,FR
-2954858832,2954858847,PL
-2954858848,2954859043,FR
+2954858824,2954858911,FR
+2954858912,2954858943,ES
+2954858944,2954859043,FR
2954859044,2954859047,ES
-2954859048,2954859119,FR
-2954859120,2954859123,CZ
-2954859124,2954859239,FR
-2954859240,2954859243,PL
-2954859244,2954859311,FR
-2954859312,2954859315,ES
-2954859316,2954859323,FR
+2954859048,2954859323,FR
2954859324,2954859327,ES
-2954859328,2954859583,FR
-2954859584,2954859615,DE
-2954859616,2954859679,FR
-2954859680,2954859695,PT
-2954859696,2954859711,FR
-2954859712,2954859727,PL
-2954859728,2954859743,FR
-2954859744,2954859775,ES
-2954859776,2954859831,FR
-2954859832,2954859839,ES
-2954859840,2954859871,FR
+2954859328,2954859871,FR
2954859872,2954859903,ES
-2954859904,2954859955,FR
-2954859956,2954859959,GB
-2954859960,2954860223,FR
-2954860224,2954860227,PL
-2954860228,2954860231,FR
-2954860232,2954860239,IT
-2954860240,2954860255,FR
-2954860256,2954860259,PL
-2954860260,2954860263,FR
-2954860264,2954860271,GB
-2954860272,2954860303,FR
-2954860304,2954860319,FI
-2954860320,2954860327,FR
-2954860328,2954860335,NL
-2954860336,2954860367,FR
-2954860368,2954860383,PL
-2954860384,2954860415,FR
-2954860416,2954860423,NL
-2954860424,2954860427,FR
-2954860428,2954860431,BE
-2954860432,2954860447,FR
-2954860448,2954860455,GB
-2954860456,2954860535,FR
-2954860536,2954860539,DE
-2954860540,2954860671,FR
-2954860672,2954860687,DE
-2954860688,2954860695,GB
-2954860696,2954860703,CZ
-2954860704,2954860735,FR
-2954860736,2954860751,PL
-2954860752,2954860767,FR
-2954860768,2954860783,ES
-2954860784,2954860791,FR
-2954860792,2954860799,IT
-2954860800,2954860991,FR
-2954860992,2954861007,DE
-2954861008,2954861119,FR
-2954861120,2954861135,GB
-2954861136,2954861167,FR
-2954861168,2954861183,BE
-2954861184,2954861191,PL
-2954861192,2954861423,FR
-2954861424,2954861431,CZ
-2954861432,2954861619,FR
-2954861620,2954861623,IT
-2954861624,2954861635,FR
-2954861636,2954861639,ES
-2954861640,2954861671,FR
-2954861672,2954861675,ES
-2954861676,2954861759,FR
-2954861760,2954861763,ES
-2954861764,2954861839,FR
-2954861840,2954861847,IT
-2954861848,2954861875,FR
+2954859904,2954861623,FR
+2954861624,2954861631,IT
+2954861632,2954861875,FR
2954861876,2954861879,CH
-2954861880,2954861919,FR
-2954861920,2954861923,CZ
-2954861924,2954861947,FR
-2954861948,2954861951,FI
-2954861952,2954861983,FR
-2954861984,2954861987,IE
-2954861988,2954861995,FR
-2954861996,2954861999,ES
-2954862000,2954862047,FR
-2954862048,2954862079,ES
-2954862080,2954862207,FR
-2954862208,2954862211,ES
-2954862212,2954862247,FR
-2954862248,2954862255,ES
-2954862256,2954862367,FR
-2954862368,2954862375,DE
-2954862376,2954862383,FR
-2954862384,2954862391,DE
-2954862392,2954862415,FR
+2954861880,2954862415,FR
2954862416,2954862419,ES
-2954862420,2954862423,FR
-2954862424,2954862431,PL
-2954862432,2954862471,FR
-2954862472,2954862479,FI
-2954862480,2954863615,FR
-2954863616,2954864639,DE
-2954864640,2954865663,IT
+2954862420,2954865663,FR
2954865664,2954866687,ES
2954866688,2954867041,FR
2954867042,2954867043,PT
2954867044,2954870799,FR
2954870800,2954870803,ES
-2954870804,2954870843,FR
+2954870804,2954870839,FR
+2954870840,2954870843,IT
2954870844,2954870847,ES
-2954870848,2954870871,FR
-2954870872,2954870875,ES
-2954870876,2954870903,FR
+2954870848,2954870903,FR
2954870904,2954870907,ES
-2954870908,2954871391,FR
-2954871392,2954871423,DE
-2954871424,2954871615,FR
-2954871616,2954871623,PT
-2954871624,2954871627,FR
-2954871628,2954871631,IT
-2954871632,2954871635,FR
-2954871636,2954871639,IT
-2954871640,2954871743,FR
-2954871744,2954871759,CH
-2954871760,2954871839,FR
-2954871840,2954871871,NL
-2954871872,2954871887,FR
-2954871888,2954871895,BE
-2954871896,2954872323,FR
-2954872324,2954872327,IT
-2954872328,2954872383,FR
-2954872384,2954872415,IE
-2954872416,2954872447,FR
-2954872448,2954872479,CH
-2954872480,2954872559,FR
-2954872560,2954872567,NL
-2954872568,2954872587,FR
-2954872588,2954872591,LT
-2954872592,2954872679,FR
-2954872680,2954872687,ES
-2954872688,2954872863,FR
-2954872864,2954872895,ES
-2954872896,2954872959,FR
-2954872960,2954872975,IT
-2954872976,2954872979,FR
-2954872980,2954872983,GB
-2954872984,2954872987,FR
-2954872988,2954872991,FI
-2954872992,2954873023,PL
-2954873024,2954873087,BE
-2954873088,2954873391,FR
-2954873392,2954873407,NL
-2954873408,2954873451,FR
-2954873452,2954873455,GB
-2954873456,2954873551,FR
-2954873552,2954873567,PL
-2954873568,2954873583,FR
-2954873584,2954873591,DE
-2954873592,2954873647,FR
-2954873648,2954873663,IE
-2954873664,2954873783,FR
-2954873784,2954873787,PT
-2954873788,2954873839,FR
-2954873840,2954873847,ES
-2954873848,2954873851,CZ
-2954873852,2954873903,FR
-2954873904,2954873911,IT
-2954873912,2954874123,FR
-2954874124,2954874127,LT
-2954874128,2954874135,FR
-2954874136,2954874143,FI
-2954874144,2954874151,NL
-2954874152,2954874319,FR
-2954874320,2954874335,IT
-2954874336,2954874355,FR
-2954874356,2954874359,IT
-2954874360,2954874379,FR
-2954874380,2954874383,CZ
-2954874384,2954874391,FR
-2954874392,2954874399,DE
-2954874400,2954874419,FR
-2954874420,2954874423,NL
-2954874424,2954874799,FR
-2954874800,2954874815,GB
-2954874816,2954874827,FR
-2954874828,2954874831,ES
-2954874832,2954874867,FR
-2954874868,2954874871,IT
-2954874872,2954874927,FR
-2954874928,2954874943,IE
-2954874944,2954875023,FR
-2954875024,2954875039,PL
-2954875040,2954875047,NL
-2954875048,2954875055,FR
-2954875056,2954875071,CZ
-2954875072,2954875103,FR
-2954875104,2954875135,NL
-2954875136,2954875167,GB
-2954875168,2954875183,FR
-2954875184,2954875191,GB
-2954875192,2954875203,FR
-2954875204,2954875207,CH
-2954875208,2954875231,FR
-2954875232,2954875247,ES
-2954875248,2954875279,FR
-2954875280,2954875287,PL
-2954875288,2954875295,GB
-2954875296,2954875311,FR
-2954875312,2954875327,IT
-2954875328,2954875379,FR
-2954875380,2954875383,DE
-2954875384,2954875391,FR
-2954875392,2954875455,GB
-2954875456,2954875471,FR
-2954875472,2954875479,FI
-2954875480,2954875695,FR
-2954875696,2954875711,PL
-2954875712,2954875779,FR
-2954875780,2954875783,ES
-2954875784,2954875871,FR
-2954875872,2954875879,BE
+2954870908,2954875879,FR
2954875880,2954875883,ES
-2954875884,2954875911,FR
-2954875912,2954875919,PL
-2954875920,2954876055,FR
-2954876056,2954876063,IE
-2954876064,2954876111,FR
-2954876112,2954876119,ES
-2954876120,2954876399,FR
-2954876400,2954876407,IT
-2954876408,2954876447,FR
-2954876448,2954876455,CH
-2954876456,2954876459,DE
-2954876460,2954876591,FR
-2954876592,2954876607,CH
-2954876608,2954876639,PT
-2954876640,2954876871,FR
+2954875884,2954876871,FR
2954876872,2954876875,ES
2954876876,2954876887,FR
2954876888,2954876891,ES
-2954876892,2954876903,FR
-2954876904,2954876911,IT
-2954876912,2954876927,FR
-2954876928,2954876943,PL
-2954876944,2954877103,FR
+2954876892,2954877103,FR
2954877104,2954877107,PL
-2954877108,2954877111,FR
-2954877112,2954877119,NL
-2954877120,2954877151,FR
-2954877152,2954877159,PL
-2954877160,2954877163,FR
+2954877108,2954877163,FR
2954877164,2954877167,ES
-2954877168,2954877279,FR
-2954877280,2954877311,NL
-2954877312,2954877535,FR
-2954877536,2954877539,IT
-2954877540,2954877599,FR
-2954877600,2954877615,IT
-2954877616,2954877819,FR
+2954877168,2954877819,FR
2954877820,2954877823,ES
-2954877824,2954877983,FR
-2954877984,2954877991,DE
-2954877992,2954878031,FR
-2954878032,2954878035,IT
-2954878036,2954878095,FR
-2954878096,2954878111,ES
-2954878112,2954878143,FR
-2954878144,2954878207,ES
-2954878208,2954878463,IE
-2954878464,2954878495,FR
-2954878496,2954878499,ES
-2954878500,2954878511,FR
-2954878512,2954878527,ES
-2954878528,2954878591,FR
-2954878592,2954878607,DE
-2954878608,2954878707,FR
-2954878708,2954878711,ES
-2954878712,2954878815,FR
-2954878816,2954878847,LT
-2954878848,2954878863,FR
-2954878864,2954878871,GB
-2954878872,2954878887,FR
-2954878888,2954878891,PL
-2954878892,2954878907,FR
+2954877824,2954878907,FR
2954878908,2954878911,ES
2954878912,2954887167,FR
2954887168,2954891263,UA
@@ -51070,10 +50937,12 @@
2954899456,2954901503,ES
2954901504,2954903551,IT
2954903552,2954911743,JP
-2954911744,2954911999,NL
-2954912000,2954912767,US
-2954912768,2954918911,NL
-2954918912,2954919935,IE
+2954911744,2954913791,US
+2954913792,2954915839,IE
+2954915840,2954918911,US
+2954918912,2954919167,IE
+2954919168,2954919295,US
+2954919296,2954919935,IE
2954919936,2954928127,RU
2954928128,2954932223,PL
2954932224,2954936319,RU
@@ -51097,11 +50966,11 @@
2955837440,2955845631,IR
2955845632,2955853823,GB
2955853824,2955870207,CH
-2955870208,2955935743,UA
+2955870208,2955935743,SA
2955935744,2956230655,RU
2956230656,2956238847,SI
2956238848,2956242943,ES
-2956242944,2956244991,SE
+2956242944,2956244991,JO
2956244992,2956245247,FR
2956245248,2956245503,RO
2956245504,2956245759,GB
@@ -51130,7 +50999,8 @@
2956504576,2956504831,NL
2956504832,2956505087,RU
2956505088,2956506111,NL
-2956506112,2956507135,RU
+2956506112,2956506367,GB
+2956506368,2956507135,RU
2956507136,2956508159,NL
2956508160,2956509183,RU
2956509184,2956517375,GB
@@ -51145,9 +51015,7 @@
2956548096,2956550143,HR
2956550144,2956554239,ES
2956554240,2956558335,IT
-2956558336,2956574527,DE
-2956574528,2956574559,PL
-2956574560,2956574719,DE
+2956558336,2956574719,DE
2956574720,2956576767,SE
2956576768,2956578815,ES
2956578816,2956582911,RU
@@ -51205,9 +51073,7 @@
2957068288,2957070335,LU
2957070336,2957074431,IT
2957074432,2957082623,RU
-2957082624,2957090815,DE
-2957090816,2957094911,AT
-2957094912,2957099007,DE
+2957082624,2957099007,DE
2957099008,2957100031,CH
2957100032,2957104639,DE
2957104640,2957105663,US
@@ -51218,8 +51084,7 @@
2957193216,2957195263,RU
2957195264,2957197311,PS
2957197312,2957201407,IR
-2957201408,2957201423,GB
-2957201424,2957202679,US
+2957201408,2957202679,US
2957202680,2957202680,PT
2957202681,2957203455,US
2957203456,2957205503,FR
@@ -51239,9 +51104,7 @@
2957240320,2957242367,BG
2957242368,2957244415,RU
2957244416,2957246463,HU
-2957246464,2957311999,SE
-2957312000,2957377535,RU
-2957377536,2957508607,SE
+2957246464,2957508607,SE
2957508608,2957574143,FI
2957574144,2957639679,GE
2957639680,2957641727,GB
@@ -51319,11 +51182,9 @@
2959278080,2959282175,RU
2959282176,2959290367,RO
2959290368,2959292415,PL
-2959292416,2959302655,RU
-2959302656,2959308877,UA
-2959308878,2959308878,RU
-2959308879,2959310847,UA
-2959310848,2959343615,RU
+2959292416,2959309055,RU
+2959309056,2959309311,UA
+2959309312,2959343615,RU
2959343616,2959351807,UA
2959351808,2959353855,DE
2959353856,2959355903,RU
@@ -51395,7 +51256,7 @@
2959753216,2959761407,RU
2959761408,2959763455,LV
2959763456,2959765503,PL
-2959765504,2959767551,RU
+2959765504,2959767551,GB
2959767552,2959769599,RS
2959769600,2959777791,RU
2959777792,2959783935,LV
@@ -51424,9 +51285,7 @@
2959884288,2959892479,KZ
2959892480,2959900671,UA
2959900672,2959902719,PL
-2959902720,2959915007,RU
-2959915008,2959917055,UA
-2959917056,2959925247,RU
+2959902720,2959925247,RU
2959925248,2959927295,RO
2959927296,2959929343,UA
2959929344,2959935487,RU
@@ -51482,9 +51341,7 @@
2960152576,2960158719,RU
2960158720,2960160767,PL
2960160768,2960162815,UA
-2960162816,2960168959,RU
-2960168960,2960171007,CZ
-2960171008,2960175103,RU
+2960162816,2960175103,RU
2960175104,2960179199,SK
2960179200,2960205823,RU
2960207872,2960211967,RU
@@ -51599,7 +51456,7 @@
2960848384,2960848639,GB
2960848640,2960850943,RU
2960850944,2960859135,MD
-2960859136,2960863231,RO
+2960859136,2960863231,GB
2960863232,2960863487,DE
2960863488,2960863743,RU
2960863744,2960863999,GB
@@ -51670,9 +51527,13 @@
2961088512,2961088767,SE
2961088768,2961089535,UA
2961089536,2961090559,KG
-2961090560,2961102847,RO
+2961090560,2961096703,RO
+2961096704,2961097471,GB
+2961097472,2961102847,RO
2961102848,2961103871,DE
-2961103872,2961108991,RO
+2961103872,2961104895,RO
+2961104896,2961106943,GB
+2961106944,2961108991,RO
2961108992,2961111039,GB
2961111040,2961112063,PL
2961112064,2961113087,RO
@@ -51687,12 +51548,14 @@
2966159360,2966290431,AE
2966290432,2966421503,IT
2966421504,2966945791,RU
-2966945792,2967273471,TR
+2966945792,2967268351,TR
+2967268352,2967269375,IN
+2967269376,2967273471,TR
2967273472,2967277567,RU
2967277568,2967281663,IR
2967281664,2967283711,PT
2967283712,2967285759,DE
-2967285760,2967287807,UA
+2967285760,2967287807,IT
2967287808,2967289855,GB
2967289856,2967291903,IR
2967291904,2967293951,RS
@@ -51714,12 +51577,18 @@
2967396352,2967398399,CZ
2967398400,2967400447,DK
2967400448,2967404543,RU
-2967404544,2967425023,RO
+2967404544,2967422975,RO
+2967422976,2967425023,KZ
2967425024,2967427071,DE
2967427072,2967428095,NL
-2967428096,2967441407,RO
+2967428096,2967432959,RO
+2967432960,2967433215,CH
+2967433216,2967434239,RO
+2967434240,2967435007,GB
+2967435008,2967441407,RO
2967441408,2967445503,MD
-2967445504,2967470079,RO
+2967445504,2967446015,GB
+2967446016,2967470079,RO
2967470080,2967601151,SA
2967601152,2967633919,HU
2967633920,2967666687,RU
@@ -51761,7 +51630,9 @@
2968648576,2968649727,FR
2968649728,2969042943,IT
2969042944,2969567231,GB
-2969567232,2984247295,BR
+2969567232,2975594495,BR
+2975594496,2975596543,PE
+2975596544,2984247295,BR
2984247296,2984935423,MX
2984935424,2984936447,AR
2984936448,2984937471,BR
@@ -51778,7 +51649,8 @@
2987401216,2987405311,LT
2987405312,2987409407,DE
2987409408,2987413503,NO
-2987413504,2987417599,UA
+2987413504,2987415807,UA
+2987415808,2987417599,RU
2987417600,2987425791,PL
2987425792,2987429887,BG
2987429888,2987433983,RU
@@ -51840,8 +51712,7 @@
2987642880,2987651071,DE
2987651072,2987655167,RU
2987655168,2987659263,DE
-2987659264,2987661311,SI
-2987661312,2987663359,GB
+2987659264,2987661311,BA
2987663360,2987665407,IT
2987665408,2987667455,RU
2987667456,2987669503,FR
@@ -51968,1850 +51839,307 @@
2988179456,2988411647,SE
2988411648,2988411775,DE
2988411776,2988441599,SE
-2988441600,2988441603,ES
-2988441604,2988441607,FR
-2988441608,2988441615,DE
-2988441616,2988441815,FR
-2988441816,2988441819,LT
-2988441820,2988441887,FR
-2988441888,2988441895,NL
-2988441896,2988441899,FR
-2988441900,2988441903,IT
-2988441904,2988441919,FR
-2988441920,2988441923,ES
-2988441924,2988441927,FR
-2988441928,2988441931,DE
-2988441932,2988441951,FR
-2988441952,2988441967,IE
-2988441968,2988441975,FR
-2988441976,2988441979,GB
-2988441980,2988441983,FR
-2988441984,2988441991,DE
-2988441992,2988442075,FR
+2988441600,2988442075,FR
2988442076,2988442079,ES
-2988442080,2988442087,PT
-2988442088,2988442111,FR
-2988442112,2988442143,CZ
-2988442144,2988442175,CH
-2988442176,2988442207,BE
-2988442208,2988442239,GB
-2988442240,2988442447,FR
-2988442448,2988442463,PL
-2988442464,2988442495,FR
-2988442496,2988442503,BE
-2988442504,2988442687,FR
-2988442688,2988442703,IT
-2988442704,2988442751,FR
-2988442752,2988442783,PT
-2988442784,2988442815,FR
-2988442816,2988442831,PL
-2988442832,2988442847,FR
+2988442080,2988442847,FR
2988442848,2988442863,IT
-2988442864,2988442871,FR
-2988442872,2988442879,DE
-2988442880,2988442911,FR
-2988442912,2988442919,GB
-2988442920,2988442923,FR
-2988442924,2988442927,PT
-2988442928,2988442943,FR
-2988442944,2988442975,GB
-2988442976,2988443071,FR
-2988443072,2988443087,BE
-2988443088,2988443447,FR
-2988443448,2988443455,DE
-2988443456,2988443647,FR
-2988443648,2988443651,NL
-2988443652,2988443927,FR
-2988443928,2988443935,IT
-2988443936,2988444203,FR
-2988444204,2988444207,DE
-2988444208,2988444208,PL
+2988442864,2988444208,FR
2988444209,2988444209,FI
-2988444210,2988444211,PL
-2988444212,2988444287,FR
-2988444288,2988444415,GB
-2988444416,2988444543,PT
-2988444544,2988444575,FR
-2988444576,2988444607,FI
-2988444608,2988444639,ES
-2988444640,2988444671,FR
+2988444210,2988444671,FR
2988444672,2988444679,ES
-2988444680,2988444703,FR
-2988444704,2988444719,GB
-2988444720,2988444967,FR
-2988444968,2988444975,IT
-2988444976,2988445279,FR
-2988445280,2988445287,IT
-2988445288,2988445295,GB
-2988445296,2988445375,FR
-2988445376,2988445391,GB
-2988445392,2988446275,FR
-2988446276,2988446279,ES
-2988446280,2988446431,FR
-2988446432,2988446463,IT
-2988446464,2988447327,FR
-2988447328,2988447359,IT
-2988447360,2988447423,FR
-2988447424,2988447487,PT
-2988447488,2988447507,FR
-2988447508,2988447511,NL
-2988447512,2988447519,FR
-2988447520,2988447535,IT
-2988447536,2988447551,FR
-2988447552,2988447583,DE
-2988447584,2988447599,NL
-2988447600,2988447615,FR
-2988447616,2988447743,PT
-2988447744,2988447747,DE
-2988447748,2988447959,FR
-2988447960,2988447967,IT
-2988447968,2988448031,FR
-2988448032,2988448063,GB
-2988448064,2988448127,FR
-2988448128,2988448255,IT
-2988448256,2988448271,FR
-2988448272,2988448287,NL
-2988448288,2988448567,FR
-2988448568,2988448575,PL
-2988448576,2988448639,FR
-2988448640,2988448671,NL
-2988448672,2988448687,CZ
-2988448688,2988448695,FR
-2988448696,2988448703,DE
-2988448704,2988448767,PT
-2988448768,2988448799,FR
+2988444680,2988448607,FR
+2988448608,2988448639,ES
+2988448640,2988448799,FR
2988448800,2988448815,ES
-2988448816,2988448907,FR
-2988448908,2988448911,IT
-2988448912,2988449055,FR
-2988449056,2988449071,ES
-2988449072,2988449183,FR
-2988449184,2988449191,PL
-2988449192,2988449199,FI
-2988449200,2988449215,ES
-2988449216,2988449567,FR
-2988449568,2988449575,GB
-2988449576,2988451839,FR
+2988448816,2988449207,FR
+2988449208,2988449215,ES
+2988449216,2988451839,FR
2988451840,2988453887,BE
2988453888,2988454399,GB
2988454400,2988454655,FR
2988454656,2988457983,GB
-2988457984,2988458047,FR
-2988458048,2988458063,DE
-2988458064,2988458299,FR
-2988458300,2988458303,ES
-2988458304,2988458319,FR
+2988457984,2988458319,FR
2988458320,2988458327,NL
-2988458328,2988458399,FR
-2988458400,2988458431,NL
-2988458432,2988458763,FR
-2988458764,2988458767,DE
-2988458768,2988459023,FR
-2988459024,2988459039,ES
-2988459040,2988459047,IT
-2988459048,2988459055,FR
-2988459056,2988459071,ES
-2988459072,2988459107,FR
-2988459108,2988459111,PL
-2988459112,2988459119,FR
+2988458328,2988459119,FR
2988459120,2988459127,IT
2988459128,2988459135,PL
-2988459136,2988459183,FR
-2988459184,2988459199,CZ
-2988459200,2988459243,FR
-2988459244,2988459247,ES
-2988459248,2988459251,DE
-2988459252,2988459439,FR
-2988459440,2988459455,GB
-2988459456,2988459535,FR
+2988459136,2988459535,FR
2988459536,2988459539,ES
-2988459540,2988459543,BE
-2988459544,2988459603,FR
-2988459604,2988459607,ES
-2988459608,2988459631,FR
-2988459632,2988459639,DE
-2988459640,2988459643,IT
-2988459644,2988459679,FR
+2988459540,2988459679,FR
2988459680,2988459683,ES
2988459684,2988459687,FR
2988459688,2988459691,PL
-2988459692,2988459695,ES
-2988459696,2988459719,FR
-2988459720,2988459723,IT
-2988459724,2988459759,FR
-2988459760,2988459767,DE
-2988459768,2988459863,FR
+2988459692,2988459863,FR
2988459864,2988459867,ES
-2988459868,2988459903,FR
-2988459904,2988459967,PL
-2988459968,2988460031,FR
-2988460032,2988460063,DE
-2988460064,2988460115,FR
-2988460116,2988460119,DE
-2988460120,2988460123,IT
-2988460124,2988460191,FR
-2988460192,2988460207,BE
-2988460208,2988460223,IT
-2988460224,2988460311,FR
-2988460312,2988460319,IT
-2988460320,2988460371,FR
-2988460372,2988460375,DE
-2988460376,2988460383,FR
-2988460384,2988460399,ES
-2988460400,2988460547,FR
-2988460548,2988460551,NL
-2988460552,2988460559,FR
-2988460560,2988460575,CZ
+2988459868,2988460575,FR
2988460576,2988460591,PT
-2988460592,2988460631,FR
-2988460632,2988460635,DE
-2988460636,2988460647,FR
-2988460648,2988460651,GB
+2988460592,2988460651,FR
2988460652,2988460655,ES
-2988460656,2988460703,FR
-2988460704,2988460711,PL
-2988460712,2988460735,FR
-2988460736,2988460751,GB
-2988460752,2988460755,FR
-2988460756,2988460759,BE
-2988460760,2988460767,FR
-2988460768,2988460799,GB
-2988460800,2988460895,FR
-2988460896,2988460927,PT
-2988460928,2988460959,FR
-2988460960,2988460975,NL
-2988460976,2988461003,FR
-2988461004,2988461007,ES
-2988461008,2988461031,FR
-2988461032,2988461035,GB
-2988461036,2988461183,FR
-2988461184,2988461215,IE
-2988461216,2988461255,FR
-2988461256,2988461259,ES
-2988461260,2988461263,DE
-2988461264,2988461279,FR
-2988461280,2988461295,IT
-2988461296,2988461299,PL
-2988461300,2988461307,FR
-2988461308,2988461311,NL
-2988461312,2988461375,PL
-2988461376,2988461391,FR
-2988461392,2988461399,DE
-2988461400,2988461407,PL
-2988461408,2988461415,NL
-2988461416,2988461523,FR
-2988461524,2988461527,LT
-2988461528,2988461595,FR
-2988461596,2988461599,CH
-2988461600,2988461631,FR
-2988461632,2988461695,PL
-2988461696,2988461703,FR
+2988460656,2988461703,FR
2988461704,2988461707,NL
-2988461708,2988461815,FR
-2988461816,2988461819,GB
-2988461820,2988461871,FR
-2988461872,2988461879,PT
-2988461880,2988461907,FR
-2988461908,2988461911,ES
-2988461912,2988462127,FR
-2988462128,2988462131,CH
-2988462132,2988462171,FR
-2988462172,2988462175,IT
-2988462176,2988462195,FR
-2988462196,2988462199,IT
-2988462200,2988462311,FR
-2988462312,2988462319,DE
-2988462320,2988462323,FR
-2988462324,2988462327,IE
-2988462328,2988462603,FR
+2988461708,2988462603,FR
2988462604,2988462607,ES
-2988462608,2988462623,FR
-2988462624,2988462639,CH
-2988462640,2988462747,FR
+2988462608,2988462747,FR
2988462748,2988462751,ES
-2988462752,2988463131,FR
-2988463132,2988463135,ES
-2988463136,2988463143,IT
-2988463144,2988463167,FR
-2988463168,2988463199,PL
-2988463200,2988463203,ES
-2988463204,2988463207,FR
-2988463208,2988463211,NL
-2988463212,2988463247,FR
-2988463248,2988463251,PL
-2988463252,2988463263,FR
-2988463264,2988463279,GB
-2988463280,2988463319,FR
-2988463320,2988463323,FI
-2988463324,2988463615,FR
-2988463616,2988463623,GB
-2988463624,2988463627,FR
-2988463628,2988463631,ES
-2988463632,2988463791,FR
-2988463792,2988463799,ES
-2988463800,2988463915,FR
+2988462752,2988463915,FR
2988463916,2988463919,ES
2988463920,2988463999,FR
2988464000,2988464007,IE
2988464008,2988464015,LT
-2988464016,2988464059,FR
-2988464060,2988464063,ES
-2988464064,2988464359,FR
+2988464016,2988464359,FR
2988464360,2988464360,NL
-2988464361,2988464543,FR
-2988464544,2988464551,NL
-2988464552,2988464591,FR
-2988464592,2988464595,BE
-2988464596,2988464611,FR
+2988464361,2988464611,FR
2988464612,2988464615,IT
-2988464616,2988464619,FR
-2988464620,2988464623,LT
+2988464616,2988464623,FR
2988464624,2988464627,ES
-2988464628,2988464927,FR
-2988464928,2988464943,DE
-2988464944,2988464947,BE
-2988464948,2988464951,FR
-2988464952,2988464955,IE
-2988464956,2988464959,FR
-2988464960,2988464975,ES
-2988464976,2988464991,FR
-2988464992,2988465023,DE
-2988465024,2988465151,FR
-2988465152,2988465215,GB
+2988464628,2988465215,FR
2988465216,2988465219,ES
-2988465220,2988465231,FR
-2988465232,2988465239,IT
-2988465240,2988465279,FR
+2988465220,2988465279,FR
2988465280,2988465295,DE
-2988465296,2988465307,FR
-2988465308,2988465311,DE
-2988465312,2988465359,FR
-2988465360,2988465363,GB
-2988465364,2988465391,FR
-2988465392,2988465399,CH
-2988465400,2988465559,FR
+2988465296,2988465559,FR
2988465560,2988465563,ES
-2988465564,2988465567,FR
-2988465568,2988465571,ES
-2988465572,2988465587,FR
-2988465588,2988465591,IT
-2988465592,2988465615,FR
-2988465616,2988465619,IT
-2988465620,2988465623,DE
-2988465624,2988465919,FR
-2988465920,2988465983,ES
-2988465984,2988476415,FR
+2988465564,2988476415,FR
2988476416,2988478463,IT
-2988478464,2988478487,FR
-2988478488,2988478495,PL
-2988478496,2988478499,ES
-2988478500,2988478579,FR
+2988478464,2988478579,FR
2988478580,2988478583,DE
2988478584,2988478587,FR
2988478588,2988478591,DE
-2988478592,2988478683,FR
-2988478684,2988478687,BE
-2988478688,2988478863,FR
-2988478864,2988478871,IE
-2988478872,2988478879,FR
-2988478880,2988478911,GB
-2988478912,2988478947,FR
-2988478948,2988478951,CZ
-2988478952,2988479003,FR
+2988478592,2988479003,FR
2988479004,2988479007,ES
-2988479008,2988479055,FR
-2988479056,2988479071,ES
-2988479072,2988479075,BE
-2988479076,2988479103,FR
-2988479104,2988479107,IE
-2988479108,2988479119,FR
-2988479120,2988479135,NL
-2988479136,2988479143,FR
-2988479144,2988479147,DE
-2988479148,2988479159,FR
-2988479160,2988479167,ES
-2988479168,2988479199,FR
-2988479200,2988479231,PL
-2988479232,2988479323,FR
-2988479324,2988479327,PL
-2988479328,2988479343,FR
-2988479344,2988479359,NL
-2988479360,2988479519,FR
-2988479520,2988479535,DE
-2988479536,2988479567,FR
-2988479568,2988479575,DE
-2988479576,2988479711,FR
-2988479712,2988479743,CH
-2988479744,2988479783,FR
-2988479784,2988479787,ES
-2988479788,2988479791,FR
+2988479008,2988479727,FR
+2988479728,2988479735,DE
+2988479736,2988479791,FR
2988479792,2988479807,GB
-2988479808,2988480007,FR
-2988480008,2988480011,CH
-2988480012,2988480031,FR
-2988480032,2988480047,DE
-2988480048,2988480095,FR
-2988480096,2988480111,IT
-2988480112,2988480143,FR
-2988480144,2988480147,ES
-2988480148,2988480155,FR
-2988480156,2988480159,BE
-2988480160,2988480223,FR
-2988480224,2988480227,NL
-2988480228,2988480231,IE
-2988480232,2988480235,FR
-2988480236,2988480239,IT
-2988480240,2988480431,FR
-2988480432,2988480435,BE
-2988480436,2988480503,FR
-2988480504,2988480511,DE
-2988480512,2988480783,FR
-2988480784,2988480799,NL
-2988480800,2988480895,FR
-2988480896,2988480903,DE
-2988480904,2988480915,ES
-2988480916,2988480923,FR
-2988480924,2988480927,ES
-2988480928,2988481039,FR
-2988481040,2988481047,GB
-2988481048,2988481063,FR
-2988481064,2988481067,GB
-2988481068,2988481223,FR
-2988481224,2988481231,BE
-2988481232,2988481599,FR
-2988481600,2988481663,NL
-2988481664,2988481679,FR
-2988481680,2988481695,IT
-2988481696,2988481775,FR
-2988481776,2988481779,IE
-2988481780,2988482031,FR
-2988482032,2988482035,ES
-2988482036,2988482111,FR
+2988479808,2988482111,FR
2988482112,2988482143,DE
-2988482144,2988482163,FR
-2988482164,2988482167,IT
-2988482168,2988482175,FR
-2988482176,2988482191,ES
-2988482192,2988482291,FR
-2988482292,2988482295,IE
-2988482296,2988482315,FR
-2988482316,2988482335,IT
-2988482336,2988482399,FR
-2988482400,2988482407,GB
-2988482408,2988482411,PL
-2988482412,2988482447,FR
-2988482448,2988482463,DE
-2988482464,2988482495,FR
-2988482496,2988482511,PL
-2988482512,2988482535,FR
-2988482536,2988482543,ES
-2988482544,2988482575,FR
+2988482144,2988482319,FR
+2988482320,2988482335,IT
+2988482336,2988482575,FR
2988482576,2988482579,CZ
-2988482580,2988482639,FR
-2988482640,2988482647,PL
-2988482648,2988482655,FR
-2988482656,2988482687,GB
-2988482688,2988482775,FR
-2988482776,2988482779,DE
-2988482780,2988482823,FR
-2988482824,2988482827,CZ
-2988482828,2988482879,FR
-2988482880,2988482883,DE
-2988482884,2988482887,PL
-2988482888,2988482891,BE
-2988482892,2988482895,FI
-2988482896,2988482927,ES
-2988482928,2988483027,FR
+2988482580,2988483027,FR
2988483028,2988483031,ES
-2988483032,2988483035,FR
-2988483036,2988483039,IT
-2988483040,2988483095,FR
-2988483096,2988483103,BE
-2988483104,2988483115,FR
-2988483116,2988483119,IT
-2988483120,2988483199,FR
-2988483200,2988483231,PT
-2988483232,2988483387,FR
-2988483388,2988483391,GB
-2988483392,2988483427,FR
-2988483428,2988483431,GB
-2988483432,2988483639,FR
-2988483640,2988483647,GB
-2988483648,2988483663,IT
-2988483664,2988483679,FR
-2988483680,2988483695,PT
-2988483696,2988483739,FR
-2988483740,2988483743,BE
-2988483744,2988483771,FR
-2988483772,2988483775,PL
-2988483776,2988483871,FR
-2988483872,2988483879,GB
-2988483880,2988483959,FR
-2988483960,2988483963,ES
-2988483964,2988483987,FR
-2988483988,2988483991,ES
-2988483992,2988484031,FR
-2988484032,2988484047,GB
-2988484048,2988484095,FR
-2988484096,2988484111,ES
-2988484112,2988484127,PL
-2988484128,2988484163,FR
-2988484164,2988484167,GB
-2988484168,2988484171,PL
-2988484172,2988484187,FR
-2988484188,2988484191,ES
-2988484192,2988484407,FR
-2988484408,2988484415,PL
-2988484416,2988484423,IT
-2988484424,2988484427,FR
-2988484428,2988484431,DE
-2988484432,2988484439,FR
-2988484440,2988484443,FI
-2988484444,2988484831,FR
+2988483032,2988484831,FR
2988484832,2988484847,GB
-2988484848,2988484955,FR
-2988484956,2988484959,DE
-2988484960,2988485167,FR
-2988485168,2988485183,GB
-2988485184,2988485599,FR
-2988485600,2988485607,ES
-2988485608,2988485675,FR
-2988485676,2988485679,NL
-2988485680,2988485683,FR
+2988484848,2988485683,FR
2988485684,2988485687,PL
-2988485688,2988485767,FR
-2988485768,2988485771,BE
-2988485772,2988485831,FR
-2988485832,2988485839,NL
-2988485840,2988486015,FR
-2988486016,2988486031,GB
-2988486032,2988486075,FR
+2988485688,2988486075,FR
2988486076,2988486079,DE
2988486080,2988486083,FR
2988486084,2988486087,PT
-2988486088,2988486127,FR
-2988486128,2988486143,GB
-2988486144,2988486147,FR
-2988486148,2988486151,BE
-2988486152,2988486199,FR
-2988486200,2988486207,GB
-2988486208,2988486215,IT
-2988486216,2988486311,FR
+2988486088,2988486311,FR
2988486312,2988486319,NL
-2988486320,2988486375,FR
-2988486376,2988486379,DE
-2988486380,2988486519,FR
-2988486520,2988486527,PL
-2988486528,2988486575,FR
-2988486576,2988486579,GB
-2988486580,2988486647,FR
-2988486648,2988486651,ES
-2988486652,2988486655,IT
-2988486656,2988486707,FR
-2988486708,2988486711,IT
-2988486712,2988486719,IE
-2988486720,2988486791,FR
-2988486792,2988486795,ES
-2988486796,2988486799,FR
-2988486800,2988486807,PL
-2988486808,2988486811,FR
-2988486812,2988486815,DE
-2988486816,2988486879,FR
-2988486880,2988486887,BE
-2988486888,2988486891,FR
-2988486892,2988486895,IT
-2988486896,2988486907,FR
-2988486908,2988486911,NL
-2988486912,2988487071,FR
+2988486320,2988487071,FR
2988487072,2988487075,ES
2988487076,2988487095,FR
2988487096,2988487099,ES
-2988487100,2988487135,FR
-2988487136,2988487167,ES
-2988487168,2988487235,FR
+2988487100,2988487235,FR
2988487236,2988487239,NL
2988487240,2988487303,FR
2988487304,2988487311,NL
2988487312,2988487883,FR
2988487884,2988487887,NL
-2988487888,2988487967,FR
-2988487968,2988487975,DE
-2988487976,2988488031,FR
-2988488032,2988488047,NL
-2988488048,2988488151,FR
-2988488152,2988488159,IT
-2988488160,2988488183,FR
-2988488184,2988488187,DE
-2988488188,2988488479,FR
-2988488480,2988488487,CH
-2988488488,2988488563,FR
-2988488564,2988488567,GB
-2988488568,2988488647,FR
-2988488648,2988488655,IT
-2988488656,2988488671,FR
-2988488672,2988488679,BE
-2988488680,2988488963,FR
-2988488964,2988488967,DE
-2988488968,2988488971,GB
-2988488972,2988488975,IT
-2988488976,2988489071,FR
-2988489072,2988489087,GB
-2988489088,2988489095,FR
-2988489096,2988489099,DE
-2988489100,2988489119,FR
-2988489120,2988489127,DE
-2988489128,2988489135,FR
-2988489136,2988489151,PT
-2988489152,2988489175,FR
-2988489176,2988489179,DE
-2988489180,2988489255,FR
-2988489256,2988489259,GB
-2988489260,2988489295,FR
-2988489296,2988489311,CH
-2988489312,2988489335,FR
-2988489336,2988489343,BE
-2988489344,2988489379,FR
-2988489380,2988489383,ES
-2988489384,2988489391,PL
-2988489392,2988489479,FR
+2988487888,2988489479,FR
2988489480,2988489483,DE
-2988489484,2988489487,NL
-2988489488,2988489527,FR
-2988489528,2988489535,PT
-2988489536,2988489671,FR
-2988489672,2988489675,IT
+2988489484,2988489675,FR
2988489676,2988489679,ES
-2988489680,2988489711,FR
-2988489712,2988489719,IE
-2988489720,2988489727,PL
-2988489728,2988489743,FR
-2988489744,2988489747,CH
-2988489748,2988489791,FR
-2988489792,2988489823,PL
-2988489824,2988489855,FR
-2988489856,2988489887,GB
-2988489888,2988489903,FR
-2988489904,2988489919,PT
-2988489920,2988490047,FR
-2988490048,2988490051,PL
-2988490052,2988490055,FR
-2988490056,2988490059,BE
-2988490060,2988490063,FR
-2988490064,2988490079,GB
-2988490080,2988490095,FR
-2988490096,2988490103,CH
-2988490104,2988490179,FR
+2988489680,2988490179,FR
2988490180,2988490183,ES
-2988490184,2988490195,FR
-2988490196,2988490199,GB
-2988490200,2988490247,FR
-2988490248,2988490251,IE
-2988490252,2988490359,FR
-2988490360,2988490367,PT
-2988490368,2988490383,FR
-2988490384,2988490399,IE
-2988490400,2988490407,DE
-2988490408,2988490631,FR
-2988490632,2988490639,IT
-2988490640,2988490655,PL
-2988490656,2988490671,ES
-2988490672,2988490683,FR
+2988490184,2988490683,FR
2988490684,2988490686,IT
2988490687,2988490687,BE
2988490688,2988490719,ES
2988490720,2988492799,FR
2988492800,2988494847,PL
-2988494848,2988498991,FR
-2988498992,2988499007,DE
-2988499008,2988499167,FR
-2988499168,2988499199,NL
-2988499200,2988499231,FR
-2988499232,2988499263,PT
-2988499264,2988499455,FR
-2988499456,2988499463,CZ
-2988499464,2988499471,ES
-2988499472,2988499487,FR
-2988499488,2988499503,DE
-2988499504,2988499559,FR
-2988499560,2988499567,PT
-2988499568,2988499623,FR
-2988499624,2988499631,GB
-2988499632,2988499639,FR
-2988499640,2988499647,IT
-2988499648,2988499663,FR
+2988494848,2988499663,FR
2988499664,2988499671,NL
2988499672,2988499729,FR
2988499730,2988499730,GB
2988499731,2988499736,FR
2988499737,2988499737,NL
-2988499738,2988499767,FR
-2988499768,2988499775,GB
-2988499776,2988499823,FR
-2988499824,2988499831,GB
-2988499832,2988499851,FR
-2988499852,2988499855,ES
-2988499856,2988499935,FR
-2988499936,2988499967,IE
-2988499968,2988500255,FR
-2988500256,2988500271,ES
-2988500272,2988500343,FR
-2988500344,2988500347,IT
-2988500348,2988500351,CH
-2988500352,2988500415,FR
+2988499738,2988500415,FR
2988500416,2988500447,CZ
-2988500448,2988500511,FR
-2988500512,2988500519,CH
-2988500520,2988500607,FR
-2988500608,2988500623,PL
-2988500624,2988500639,FR
-2988500640,2988500671,IT
-2988500672,2988500679,FR
-2988500680,2988500687,ES
-2988500688,2988500703,GB
-2988500704,2988500735,FR
-2988500736,2988500751,PL
-2988500752,2988500855,FR
+2988500448,2988500855,FR
2988500856,2988500859,ES
-2988500860,2988500959,FR
-2988500960,2988500975,NL
-2988500976,2988501055,FR
-2988501056,2988501087,GB
-2988501088,2988501127,FR
+2988500860,2988501127,FR
2988501128,2988501131,IT
-2988501132,2988501215,FR
-2988501216,2988501223,FI
-2988501224,2988501367,FR
-2988501368,2988501375,IE
-2988501376,2988502051,FR
+2988501132,2988501415,FR
+2988501416,2988501423,IT
+2988501424,2988502051,FR
2988502052,2988502055,PL
-2988502056,2988502107,FR
-2988502108,2988502111,GB
-2988502112,2988502267,FR
-2988502268,2988502271,BE
-2988502272,2988502287,FR
-2988502288,2988502303,PL
-2988502304,2988502391,FR
-2988502392,2988502399,IT
-2988502400,2988502407,FR
-2988502408,2988502411,FI
-2988502412,2988502479,FR
+2988502056,2988502479,FR
2988502480,2988502483,ES
-2988502484,2988502487,PL
-2988502488,2988502491,FR
-2988502492,2988502495,DE
-2988502496,2988502631,FR
-2988502632,2988502639,FI
-2988502640,2988502655,FR
+2988502484,2988502655,FR
2988502656,2988502719,DE
-2988502720,2988502735,FR
-2988502736,2988502751,ES
-2988502752,2988502881,FR
+2988502720,2988502881,FR
2988502882,2988502882,IT
-2988502883,2988502891,FR
-2988502892,2988502895,ES
-2988502896,2988502911,FI
-2988502912,2988503031,FR
-2988503032,2988503035,FI
-2988503036,2988503327,FR
-2988503328,2988503343,IT
-2988503344,2988503395,FR
-2988503396,2988503399,NL
-2988503400,2988503407,CH
-2988503408,2988503903,FR
-2988503904,2988503907,PL
-2988503908,2988503911,DE
-2988503912,2988503919,FR
-2988503920,2988503927,IT
-2988503928,2988503935,FR
-2988503936,2988503939,GB
-2988503940,2988503999,FR
-2988504000,2988504003,BE
-2988504004,2988504095,FR
-2988504096,2988504127,PL
-2988504128,2988504143,CH
-2988504144,2988504231,FR
-2988504232,2988504239,DE
-2988504240,2988504315,FR
-2988504316,2988504319,PT
-2988504320,2988504371,FR
+2988502883,2988504371,FR
2988504372,2988504375,PL
-2988504376,2988504435,FR
-2988504436,2988504439,LT
-2988504440,2988504543,FR
-2988504544,2988504559,DE
-2988504560,2988504567,FR
-2988504568,2988504575,IT
-2988504576,2988504591,FR
-2988504592,2988504599,IT
-2988504600,2988504647,FR
-2988504648,2988504655,IT
-2988504656,2988504827,FR
-2988504828,2988504831,DE
-2988504832,2988504895,FR
-2988504896,2988504959,DE
-2988504960,2988504967,FR
-2988504968,2988504975,ES
-2988504976,2988504979,PL
-2988504980,2988505151,FR
+2988504376,2988505151,FR
2988505152,2988505167,GB
-2988505168,2988505183,FR
-2988505184,2988505191,NL
-2988505192,2988505199,DE
-2988505200,2988505207,FR
-2988505208,2988505215,ES
-2988505216,2988505335,FR
-2988505336,2988505339,IE
-2988505340,2988505343,DE
-2988505344,2988505375,FR
-2988505376,2988505391,GB
+2988505168,2988505391,FR
2988505392,2988505395,ES
-2988505396,2988505399,FI
-2988505400,2988505403,PL
-2988505404,2988505455,FR
-2988505456,2988505463,GB
-2988505464,2988505479,FR
-2988505480,2988505487,IT
-2988505488,2988505495,FR
-2988505496,2988505499,NL
-2988505500,2988505503,ES
-2988505504,2988505567,FR
-2988505568,2988505583,IE
-2988505584,2988505615,FR
-2988505616,2988505623,PL
-2988505624,2988505703,FR
-2988505704,2988505707,FI
-2988505708,2988505735,FR
-2988505736,2988505743,FI
-2988505744,2988505751,ES
-2988505752,2988505951,FR
-2988505952,2988505967,NL
-2988505968,2988506235,FR
+2988505396,2988506235,FR
2988506236,2988506239,NL
-2988506240,2988506379,FR
-2988506380,2988506383,GB
-2988506384,2988506439,FR
-2988506440,2988506447,IE
-2988506448,2988506459,FR
-2988506460,2988506463,ES
-2988506464,2988506495,FR
-2988506496,2988506499,CH
-2988506500,2988506527,FR
-2988506528,2988506543,IE
-2988506544,2988506567,FR
-2988506568,2988506571,NL
-2988506572,2988506651,FR
-2988506652,2988506655,IT
-2988506656,2988506671,FR
-2988506672,2988506687,DE
-2988506688,2988506703,FR
-2988506704,2988506719,ES
-2988506720,2988506767,FR
-2988506768,2988506771,NL
-2988506772,2988506827,FR
-2988506828,2988506831,ES
-2988506832,2988506867,FR
-2988506868,2988506875,CH
-2988506876,2988506879,DE
-2988506880,2988506943,FR
+2988506240,2988506943,FR
2988506944,2988506975,DE
-2988506976,2988507039,FR
-2988507040,2988507071,ES
-2988507072,2988507135,FR
-2988507136,2988507143,PL
-2988507144,2988507151,FR
-2988507152,2988507155,ES
-2988507156,2988507163,FR
+2988506976,2988507163,FR
2988507164,2988507167,ES
-2988507168,2988507203,FR
-2988507204,2988507207,DE
-2988507208,2988507215,FR
-2988507216,2988507223,FI
-2988507224,2988507231,DE
-2988507232,2988507291,FR
-2988507292,2988507295,IT
-2988507296,2988507459,FR
-2988507460,2988507463,BE
-2988507464,2988507471,DE
-2988507472,2988507503,FR
-2988507504,2988507519,IT
-2988507520,2988507527,FR
-2988507528,2988507531,GB
+2988507168,2988507531,FR
2988507532,2988507535,NL
-2988507536,2988507567,FR
-2988507568,2988507583,ES
-2988507584,2988507595,FR
-2988507596,2988507599,LT
-2988507600,2988507615,FR
-2988507616,2988507623,DE
-2988507624,2988507627,FR
-2988507628,2988507631,PL
-2988507632,2988507743,FR
-2988507744,2988507759,NL
-2988507760,2988507775,FR
-2988507776,2988507791,NL
-2988507792,2988507807,IT
-2988507808,2988507871,FR
-2988507872,2988507879,DE
-2988507880,2988507955,FR
-2988507956,2988507959,DE
-2988507960,2988507975,FR
+2988507536,2988507807,FR
+2988507808,2988507823,NL
+2988507824,2988507975,FR
2988507976,2988507979,IT
-2988507980,2988508035,FR
-2988508036,2988508039,DE
-2988508040,2988508111,FR
-2988508112,2988508127,IE
-2988508128,2988508143,FR
-2988508144,2988508147,IE
-2988508148,2988508175,FR
-2988508176,2988508191,IE
-2988508192,2988508211,FR
-2988508212,2988508215,CZ
-2988508216,2988508239,FR
-2988508240,2988508255,GB
-2988508256,2988508303,FR
-2988508304,2988508307,CH
-2988508308,2988508479,FR
-2988508480,2988508543,BE
-2988508544,2988508607,FR
+2988507980,2988508607,FR
2988508608,2988508639,ES
-2988508640,2988508671,DE
-2988508672,2988508723,FR
-2988508724,2988508727,GB
-2988508728,2988508947,FR
-2988508948,2988508951,ES
-2988508952,2988508987,FR
-2988508988,2988508991,ES
-2988508992,2988509007,BE
-2988509008,2988509011,FR
-2988509012,2988509015,BE
-2988509016,2988509023,FR
-2988509024,2988509055,CH
-2988509056,2988509287,FR
-2988509288,2988509291,GB
-2988509292,2988509403,FR
-2988509404,2988509407,FI
-2988509408,2988509467,FR
-2988509468,2988509471,BE
-2988509472,2988509511,FR
+2988508640,2988509511,FR
2988509512,2988509515,PL
-2988509516,2988509551,FR
-2988509552,2988509559,DE
-2988509560,2988509599,FR
-2988509600,2988509615,DE
-2988509616,2988509619,FR
-2988509620,2988509623,DE
-2988509624,2988509627,FR
-2988509628,2988509631,GB
-2988509632,2988509735,FR
-2988509736,2988509739,CH
-2988509740,2988509747,FR
+2988509516,2988509747,FR
2988509748,2988509751,LT
-2988509752,2988509755,IT
-2988509756,2988509767,FR
-2988509768,2988509775,PL
-2988509776,2988509779,DE
-2988509780,2988509791,FR
-2988509792,2988509823,ES
-2988509824,2988509839,PL
-2988509840,2988509863,FR
-2988509864,2988509871,NL
-2988509872,2988509875,FR
-2988509876,2988509879,NL
-2988509880,2988509931,FR
-2988509932,2988509935,ES
-2988509936,2988509939,IT
-2988509940,2988509951,FR
-2988509952,2988509955,DE
-2988509956,2988509983,FR
-2988509984,2988509991,DE
-2988509992,2988509999,FR
-2988510000,2988510015,IT
-2988510016,2988510023,IE
-2988510024,2988510039,FR
-2988510040,2988510043,ES
-2988510044,2988510207,FR
-2988510208,2988510215,GB
-2988510216,2988510223,DE
-2988510224,2988510255,FR
-2988510256,2988510259,FI
-2988510260,2988510323,FR
-2988510324,2988510327,FI
-2988510328,2988510335,ES
-2988510336,2988510423,FR
-2988510424,2988510427,DE
-2988510428,2988510431,IT
-2988510432,2988510499,FR
-2988510500,2988510503,GB
-2988510504,2988510507,FR
-2988510508,2988510511,GB
-2988510512,2988510515,FR
-2988510516,2988510519,ES
-2988510520,2988510975,FR
-2988510976,2988510983,PL
-2988510984,2988511559,FR
-2988511560,2988511567,IT
-2988511568,2988511615,FR
-2988511616,2988511647,IE
-2988511648,2988511695,FR
-2988511696,2988511703,PL
-2988511704,2988511719,FR
-2988511720,2988511723,PL
-2988511724,2988511743,FR
-2988511744,2988511747,IT
-2988511748,2988511835,FR
-2988511836,2988511839,IT
-2988511840,2988511855,BE
-2988511856,2988511871,FR
-2988511872,2988511879,IT
-2988511880,2988511887,FR
-2988511888,2988511903,CH
-2988511904,2988511927,FR
-2988511928,2988511931,ES
-2988511932,2988511959,FR
-2988511960,2988511967,DE
-2988511968,2988511999,FR
-2988512000,2988512031,PL
-2988512032,2988512055,FR
-2988512056,2988512059,GB
-2988512060,2988512143,FR
-2988512144,2988512159,ES
-2988512160,2988512195,FR
-2988512196,2988512199,PL
-2988512200,2988512231,FR
-2988512232,2988512239,NL
-2988512240,2988512435,FR
-2988512436,2988512439,DE
-2988512440,2988512455,FR
-2988512456,2988512459,GB
-2988512460,2988512467,FR
-2988512468,2988512471,GB
-2988512472,2988512511,FR
-2988512512,2988512515,DE
-2988512516,2988512519,PL
-2988512520,2988512703,FR
-2988512704,2988512735,ES
-2988512736,2988512767,PL
-2988512768,2988512879,FR
-2988512880,2988512895,GB
-2988512896,2988512903,FR
+2988509752,2988510175,FR
+2988510176,2988510191,DE
+2988510192,2988512903,FR
2988512904,2988512907,GB
-2988512908,2988512911,DE
-2988512912,2988512963,FR
-2988512964,2988512967,PL
-2988512968,2988513003,FR
+2988512908,2988513003,FR
2988513004,2988513007,ES
-2988513008,2988513015,FR
-2988513016,2988513019,PT
-2988513020,2988513023,GB
-2988513024,2988513135,FR
-2988513136,2988513151,IT
-2988513152,2988513207,FR
-2988513208,2988513219,GB
-2988513220,2988513231,FR
-2988513232,2988513235,GB
-2988513236,2988513239,FR
-2988513240,2988513247,IT
-2988513248,2988513327,FR
-2988513328,2988513331,PL
-2988513332,2988513351,FR
-2988513352,2988513359,DE
-2988513360,2988513363,ES
-2988513364,2988513503,FR
-2988513504,2988513511,GB
-2988513512,2988513711,FR
-2988513712,2988513715,GB
-2988513716,2988513743,FR
-2988513744,2988513747,DE
+2988513008,2988513747,FR
2988513748,2988513751,IT
-2988513752,2988513919,FR
-2988513920,2988513951,PL
-2988513952,2988513967,FR
-2988513968,2988513983,NL
-2988513984,2988513999,BE
-2988514000,2988514015,FR
-2988514016,2988514023,GB
-2988514024,2988514131,FR
-2988514132,2988514135,DE
-2988514136,2988514239,FR
-2988514240,2988514243,DE
-2988514244,2988514335,FR
-2988514336,2988514339,GB
-2988514340,2988514359,FR
-2988514360,2988514367,ES
-2988514368,2988514399,FR
+2988513752,2988514207,FR
+2988514208,2988514215,PT
+2988514216,2988514399,FR
2988514400,2988514431,NL
-2988514432,2988514463,FR
-2988514464,2988514495,GB
-2988514496,2988514527,NL
-2988514528,2988514543,GB
-2988514544,2988514559,PT
-2988514560,2988514591,FR
-2988514592,2988514623,PL
-2988514624,2988514687,FR
-2988514688,2988514719,FI
-2988514720,2988514735,FR
-2988514736,2988514739,DE
-2988514740,2988514747,FR
-2988514748,2988514751,NL
-2988514752,2988514819,FR
-2988514820,2988514823,NL
-2988514824,2988514847,FR
-2988514848,2988514879,DE
-2988514880,2988514991,FR
-2988514992,2988514995,IT
-2988514996,2988515007,FR
-2988515008,2988515023,BE
-2988515024,2988515031,FR
-2988515032,2988515035,ES
-2988515036,2988515327,FR
+2988514432,2988515327,FR
2988515328,2988517375,DE
2988517376,2988519423,FR
2988519424,2988521471,PL
-2988521472,2988523523,FR
-2988523524,2988523527,GB
-2988523528,2988523603,FR
-2988523604,2988523607,LT
-2988523608,2988523631,FR
-2988523632,2988523639,IT
-2988523640,2988523651,FR
-2988523652,2988523655,IT
-2988523656,2988523663,ES
-2988523664,2988523667,FR
-2988523668,2988523671,NL
-2988523672,2988523711,FR
-2988523712,2988523727,ES
-2988523728,2988523735,FI
-2988523736,2988524047,FR
-2988524048,2988524055,NL
-2988524056,2988524063,FR
-2988524064,2988524071,PL
-2988524072,2988524075,FR
+2988521472,2988523743,FR
+2988523744,2988523759,DE
+2988523760,2988524075,FR
2988524076,2988524079,ES
-2988524080,2988524143,FR
-2988524144,2988524147,GB
-2988524148,2988524175,FR
-2988524176,2988524183,IT
-2988524184,2988524271,FR
+2988524080,2988524271,FR
2988524272,2988524287,DE
-2988524288,2988524299,FR
-2988524300,2988524303,DE
-2988524304,2988524367,FR
-2988524368,2988524383,NL
-2988524384,2988524479,FR
-2988524480,2988524483,NL
-2988524484,2988524511,FR
-2988524512,2988524543,IT
-2988524544,2988524559,ES
-2988524560,2988524575,BE
-2988524576,2988524591,PL
-2988524592,2988524639,FR
-2988524640,2988524671,PL
-2988524672,2988524767,FR
-2988524768,2988524799,CH
-2988524800,2988524815,FR
-2988524816,2988524831,GB
-2988524832,2988524863,FR
-2988524864,2988524895,PL
-2988524896,2988524911,FR
-2988524912,2988524919,DE
-2988524920,2988525579,FR
+2988524288,2988525579,FR
2988525580,2988525583,IT
-2988525584,2988525631,FR
-2988525632,2988525647,ES
-2988525648,2988525819,FR
-2988525820,2988525823,IT
-2988525824,2988525847,FR
-2988525848,2988525851,CZ
-2988525852,2988525887,FR
+2988525584,2988525887,FR
2988525888,2988525951,GB
-2988525952,2988526079,FR
-2988526080,2988526087,DE
-2988526088,2988526091,IT
-2988526092,2988526143,FR
-2988526144,2988526175,CH
-2988526176,2988526367,FR
-2988526368,2988526383,IT
-2988526384,2988526423,ES
-2988526424,2988526427,GB
-2988526428,2988526431,FR
-2988526432,2988526435,IT
-2988526436,2988526575,FR
-2988526576,2988526579,GB
-2988526580,2988526927,FR
-2988526928,2988526935,DE
-2988526936,2988526939,IT
-2988526940,2988526947,FR
-2988526948,2988526951,BE
-2988526952,2988526999,FR
-2988527000,2988527003,IT
-2988527004,2988527039,FR
-2988527040,2988527055,NL
-2988527056,2988527087,FR
-2988527088,2988527095,IT
-2988527096,2988527167,FR
-2988527168,2988527175,ES
-2988527176,2988527191,FR
-2988527192,2988527195,NL
-2988527196,2988527411,FR
-2988527412,2988527415,ES
-2988527416,2988527527,FR
+2988525952,2988526415,FR
+2988526416,2988526423,ES
+2988526424,2988527527,FR
2988527528,2988527531,NL
-2988527532,2988527535,FR
-2988527536,2988527543,PL
-2988527544,2988527583,FR
-2988527584,2988527591,IT
-2988527592,2988527615,FR
-2988527616,2988527623,DE
-2988527624,2988527671,FR
-2988527672,2988527675,IT
-2988527676,2988527747,FR
-2988527748,2988527751,IT
-2988527752,2988527755,FR
-2988527756,2988527759,IT
-2988527760,2988527823,FR
-2988527824,2988527831,PL
+2988527532,2988527723,FR
+2988527724,2988527727,ES
+2988527728,2988527831,FR
2988527832,2988527839,ES
2988527840,2988527887,FR
2988527888,2988527891,ES
-2988527892,2988528015,FR
-2988528016,2988528031,GB
-2988528032,2988528111,FR
-2988528112,2988528115,PL
-2988528116,2988528187,FR
-2988528188,2988528191,IT
-2988528192,2988528219,FR
-2988528220,2988528223,PT
-2988528224,2988528279,FR
-2988528280,2988528287,DE
-2988528288,2988528351,FR
-2988528352,2988528383,PL
-2988528384,2988528639,FR
-2988528640,2988528647,ES
-2988528648,2988528655,FR
-2988528656,2988528659,BE
-2988528660,2988528699,FR
+2988527892,2988528699,FR
2988528700,2988528703,CZ
-2988528704,2988528751,FR
-2988528752,2988528759,NL
-2988528760,2988528835,FR
-2988528836,2988528839,IT
-2988528840,2988528931,FR
-2988528932,2988528935,NL
-2988528936,2988528943,FR
-2988528944,2988528959,ES
-2988528960,2988528983,FR
-2988528984,2988528991,GB
-2988528992,2988529031,FR
-2988529032,2988529039,GB
-2988529040,2988529087,FR
-2988529088,2988529095,GB
-2988529096,2988529159,FR
-2988529160,2988529163,ES
-2988529164,2988529215,FR
-2988529216,2988529247,IE
-2988529248,2988529251,FR
-2988529252,2988529255,PT
-2988529256,2988529263,IT
-2988529264,2988529315,FR
-2988529316,2988529319,PL
-2988529320,2988529323,FR
-2988529324,2988529327,BE
-2988529328,2988529343,FR
-2988529344,2988529351,ES
+2988528704,2988529351,FR
2988529352,2988529359,GB
2988529360,2988529375,FR
2988529376,2988529383,GB
2988529384,2988529387,ES
-2988529388,2988529599,FR
-2988529600,2988529607,IT
-2988529608,2988529787,FR
-2988529788,2988529791,ES
-2988529792,2988529915,FR
-2988529916,2988529919,DE
-2988529920,2988529935,NL
-2988529936,2988529947,FR
-2988529948,2988529951,BE
-2988529952,2988529955,FR
-2988529956,2988529959,ES
-2988529960,2988530031,FR
-2988530032,2988530039,GB
-2988530040,2988530255,FR
-2988530256,2988530271,IT
-2988530272,2988530311,FR
-2988530312,2988530319,CH
-2988530320,2988530407,FR
-2988530408,2988530415,ES
-2988530416,2988530695,FR
-2988530696,2988530703,IE
-2988530704,2988530735,FR
-2988530736,2988530739,IT
-2988530740,2988530847,FR
-2988530848,2988530863,ES
-2988530864,2988530871,FR
-2988530872,2988530879,ES
-2988530880,2988530927,FR
-2988530928,2988530943,BE
-2988530944,2988531027,FR
-2988531028,2988531031,CZ
-2988531032,2988531039,FR
-2988531040,2988531043,DE
-2988531044,2988531075,FR
-2988531076,2988531079,GB
-2988531080,2988531247,FR
-2988531248,2988531255,GB
-2988531256,2988531259,FR
-2988531260,2988531263,ES
-2988531264,2988531291,FR
-2988531292,2988531295,DE
-2988531296,2988531311,GB
-2988531312,2988531315,CZ
-2988531316,2988531319,FR
-2988531320,2988531323,GB
-2988531324,2988531327,FR
-2988531328,2988531351,GB
-2988531352,2988531391,FR
-2988531392,2988531399,NL
-2988531400,2988531423,FR
-2988531424,2988531427,NL
-2988531428,2988531431,FR
-2988531432,2988531439,ES
-2988531440,2988535807,FR
+2988529388,2988531275,FR
+2988531276,2988531279,PT
+2988531280,2988535807,FR
2988535808,2988537855,ES
2988537856,2988539971,FR
2988539972,2988539975,ES
-2988539976,2988540007,FR
-2988540008,2988540015,ES
-2988540016,2988540019,FR
-2988540020,2988540023,DE
-2988540024,2988540231,FR
-2988540232,2988540235,ES
-2988540236,2988540239,DE
-2988540240,2988540303,FR
-2988540304,2988540319,IT
-2988540320,2988540359,FR
-2988540360,2988540363,DE
-2988540364,2988540495,FR
-2988540496,2988540503,IE
+2988539976,2988540199,FR
+2988540200,2988540207,BE
+2988540208,2988540503,FR
2988540504,2988540507,NL
2988540508,2988540563,FR
2988540564,2988540567,CZ
-2988540568,2988540631,FR
-2988540632,2988540635,CZ
-2988540636,2988540639,FR
-2988540640,2988540647,IT
-2988540648,2988540667,FR
-2988540668,2988540671,DE
-2988540672,2988540783,FR
-2988540784,2988540787,PL
-2988540788,2988541119,FR
-2988541120,2988541127,BE
-2988541128,2988541315,FR
-2988541316,2988541319,FI
-2988541320,2988541343,FR
-2988541344,2988541347,NL
-2988541348,2988541367,FR
-2988541368,2988541371,GB
-2988541372,2988541439,FR
-2988541440,2988541443,ES
-2988541444,2988541455,FR
-2988541456,2988541463,DE
-2988541464,2988541547,FR
-2988541548,2988541551,GB
-2988541552,2988541659,FR
-2988541660,2988541663,ES
-2988541664,2988541691,FR
-2988541692,2988541695,DE
-2988541696,2988541735,FR
-2988541736,2988541743,DE
-2988541744,2988541815,FR
-2988541816,2988541819,IE
-2988541820,2988541855,FR
-2988541856,2988541863,PL
-2988541864,2988541867,BE
-2988541868,2988541895,FR
-2988541896,2988541903,NL
-2988541904,2988541927,FR
-2988541928,2988541935,LT
-2988541936,2988542027,FR
-2988542028,2988542031,ES
-2988542032,2988542047,PT
-2988542048,2988542143,FR
-2988542144,2988542175,IT
-2988542176,2988542431,FR
-2988542432,2988542439,BE
-2988542440,2988542443,GB
-2988542444,2988542447,IE
-2988542448,2988542539,FR
-2988542540,2988542543,DE
-2988542544,2988542607,FR
-2988542608,2988542611,PL
-2988542612,2988542615,FR
-2988542616,2988542623,IT
-2988542624,2988542627,FR
+2988540568,2988541955,FR
+2988541956,2988541959,DE
+2988541960,2988542627,FR
2988542628,2988542631,NL
-2988542632,2988542911,FR
-2988542912,2988542919,IE
-2988542920,2988542927,FR
-2988542928,2988542931,IT
-2988542932,2988542935,PL
-2988542936,2988542939,FR
-2988542940,2988542943,ES
-2988542944,2988543023,FR
-2988543024,2988543039,BE
-2988543040,2988543051,FR
-2988543052,2988543055,NL
-2988543056,2988543063,FR
-2988543064,2988543067,ES
-2988543068,2988543103,FR
-2988543104,2988543135,CH
-2988543136,2988543167,BE
-2988543168,2988543191,FR
-2988543192,2988543195,NL
-2988543196,2988543379,FR
-2988543380,2988543383,ES
-2988543384,2988543407,FR
-2988543408,2988543411,CZ
-2988543412,2988543439,FR
-2988543440,2988543447,GB
-2988543448,2988543551,FR
-2988543552,2988543559,ES
-2988543560,2988543563,PT
-2988543564,2988543615,FR
-2988543616,2988543647,CZ
-2988543648,2988543679,FR
-2988543680,2988543711,NL
-2988543712,2988543935,FR
-2988543936,2988543939,GB
-2988543940,2988544003,FR
-2988544004,2988544007,PL
-2988544008,2988544015,FR
-2988544016,2988544023,DE
-2988544024,2988544039,FR
-2988544040,2988544043,IT
-2988544044,2988544047,BE
-2988544048,2988544183,FR
-2988544184,2988544187,DE
-2988544188,2988544223,FR
-2988544224,2988544227,ES
-2988544228,2988544231,FR
-2988544232,2988544239,GB
-2988544240,2988544271,FR
-2988544272,2988544275,CH
-2988544276,2988544303,FR
-2988544304,2988544307,DE
-2988544308,2988544327,FR
-2988544328,2988544331,PT
-2988544332,2988544495,FR
-2988544496,2988544511,GB
-2988544512,2988544655,FR
-2988544656,2988544659,ES
-2988544660,2988544671,FR
+2988542632,2988544671,FR
2988544672,2988544687,GB
-2988544688,2988544691,NL
-2988544692,2988544727,FR
-2988544728,2988544735,DE
-2988544736,2988544935,FR
-2988544936,2988544943,NL
-2988544944,2988544987,FR
-2988544988,2988544991,IE
-2988544992,2988544999,ES
-2988545000,2988545003,DE
-2988545004,2988545007,IT
-2988545008,2988545015,FR
-2988545016,2988545019,DE
-2988545020,2988545031,FR
-2988545032,2988545039,FI
-2988545040,2988545051,FR
-2988545052,2988545055,GB
-2988545056,2988545215,FR
-2988545216,2988545223,ES
-2988545224,2988545227,NL
-2988545228,2988545383,FR
-2988545384,2988545387,DE
-2988545388,2988545455,FR
-2988545456,2988545471,IT
-2988545472,2988545487,GB
-2988545488,2988545551,FR
-2988545552,2988545555,GB
-2988545556,2988545559,NL
-2988545560,2988545583,FR
-2988545584,2988545599,IT
-2988545600,2988545871,FR
-2988545872,2988545887,ES
-2988545888,2988545931,FR
-2988545932,2988545935,PL
-2988545936,2988546015,FR
-2988546016,2988546031,NL
-2988546032,2988546035,GB
-2988546036,2988546291,FR
-2988546292,2988546295,ES
-2988546296,2988546555,FR
-2988546556,2988546559,ES
-2988546560,2988546583,FR
-2988546584,2988546591,DE
-2988546592,2988546619,FR
-2988546620,2988546623,ES
-2988546624,2988546687,FR
+2988544688,2988546687,FR
2988546688,2988546691,CH
-2988546692,2988546695,FR
-2988546696,2988546699,ES
-2988546700,2988546703,FR
+2988546692,2988546703,FR
2988546704,2988546719,DE
2988546720,2988546727,FR
2988546728,2988546731,ES
-2988546732,2988546735,DE
-2988546736,2988546863,FR
-2988546864,2988546867,CH
-2988546868,2988546871,FR
-2988546872,2988546879,DE
-2988546880,2988546995,FR
-2988546996,2988546999,IT
-2988547000,2988547063,FR
-2988547064,2988547067,GB
+2988546732,2988547019,FR
+2988547020,2988547023,NL
+2988547024,2988547055,FR
+2988547056,2988547059,NL
+2988547060,2988547067,FR
2988547068,2988547071,ES
2988547072,2988547095,FR
2988547096,2988547099,ES
-2988547100,2988547167,FR
-2988547168,2988547175,GB
-2988547176,2988547263,FR
-2988547264,2988547267,NL
-2988547268,2988547479,FR
-2988547480,2988547487,GB
-2988547488,2988547507,FR
-2988547508,2988547511,NL
-2988547512,2988547543,FR
-2988547544,2988547547,NL
-2988547548,2988547567,FR
-2988547568,2988547583,DE
-2988547584,2988547655,FR
+2988547100,2988547655,FR
2988547656,2988547663,PL
-2988547664,2988547807,FR
-2988547808,2988547823,GB
-2988547824,2988547839,FR
-2988547840,2988547855,DE
-2988547856,2988547871,FR
+2988547664,2988547871,FR
2988547872,2988547903,GB
-2988547904,2988547979,FR
-2988547980,2988547983,ES
-2988547984,2988548015,FR
+2988547904,2988548015,FR
2988548016,2988548019,ES
2988548020,2988548095,FR
2988548096,2988550143,ES
-2988550144,2988550175,FR
-2988550176,2988550179,DE
-2988550180,2988550207,FR
-2988550208,2988550239,DE
-2988550240,2988550247,FR
-2988550248,2988550251,PL
-2988550252,2988550259,FR
-2988550260,2988550263,PL
-2988550264,2988550359,FR
+2988550144,2988550359,FR
2988550360,2988550363,ES
-2988550364,2988550367,FR
-2988550368,2988550399,FI
-2988550400,2988550431,FR
-2988550432,2988550438,ES
+2988550364,2988550438,FR
2988550439,2988550439,GB
-2988550440,2988550447,ES
-2988550448,2988550451,FR
-2988550452,2988550455,IE
-2988550456,2988550463,FR
+2988550440,2988550463,FR
2988550464,2988550527,DE
-2988550528,2988550627,FR
-2988550628,2988550631,CZ
-2988550632,2988550679,FR
-2988550680,2988550687,GB
-2988550688,2988550911,FR
-2988550912,2988550927,NL
-2988550928,2988551135,FR
-2988551136,2988551167,ES
-2988551168,2988551443,FR
+2988550528,2988551443,FR
2988551444,2988551447,ES
-2988551448,2988551511,FR
-2988551512,2988551519,ES
-2988551520,2988551535,FI
+2988551448,2988551535,FR
2988551536,2988551551,DE
-2988551552,2988551871,FR
-2988551872,2988551887,PL
-2988551888,2988552543,FR
-2988552544,2988552551,PL
-2988552552,2988552567,FR
-2988552568,2988552575,GB
-2988552576,2988552603,FR
-2988552604,2988552607,GB
-2988552608,2988552647,FR
-2988552648,2988552655,NL
-2988552656,2988552659,FR
-2988552660,2988552663,PT
-2988552664,2988552671,NL
-2988552672,2988552711,FR
-2988552712,2988552719,IE
-2988552720,2988552735,GB
-2988552736,2988552831,FR
-2988552832,2988552847,ES
-2988552848,2988552883,FR
+2988551552,2988552883,FR
2988552884,2988552887,IT
-2988552888,2988552891,DE
-2988552892,2988552915,FR
-2988552916,2988552919,NL
-2988552920,2988552927,FR
-2988552928,2988552943,ES
-2988552944,2988553087,FR
-2988553088,2988553119,GB
-2988553120,2988553399,FR
+2988552888,2988553399,FR
2988553400,2988553407,NL
-2988553408,2988553415,FR
-2988553416,2988553423,DE
-2988553424,2988553455,FR
-2988553456,2988553471,GB
-2988553472,2988553531,FR
+2988553408,2988553531,FR
2988553532,2988553535,ES
-2988553536,2988553551,GB
-2988553552,2988553567,FR
-2988553568,2988553575,PL
-2988553576,2988553659,FR
-2988553660,2988553663,NL
-2988553664,2988554015,FR
-2988554016,2988554031,BE
-2988554032,2988554035,FR
+2988553536,2988554035,FR
2988554036,2988554039,ES
-2988554040,2988554063,FR
-2988554064,2988554067,DE
-2988554068,2988554071,FR
-2988554072,2988554075,ES
-2988554076,2988554127,FR
-2988554128,2988554131,IT
-2988554132,2988554175,FR
-2988554176,2988554183,CZ
-2988554184,2988554499,FR
-2988554500,2988554503,GB
-2988554504,2988554547,FR
-2988554548,2988554551,IT
-2988554552,2988554787,FR
-2988554788,2988554791,CH
-2988554792,2988554795,FI
-2988554796,2988554919,FR
-2988554920,2988554927,BE
-2988554928,2988555055,FR
-2988555056,2988555063,FI
-2988555064,2988555115,FR
-2988555116,2988555119,ES
-2988555120,2988555123,BE
-2988555124,2988555127,IT
-2988555128,2988555167,FR
-2988555168,2988555183,ES
-2988555184,2988555187,IT
-2988555188,2988555211,FR
-2988555212,2988555215,GB
-2988555216,2988555231,FR
-2988555232,2988555263,PL
-2988555264,2988555527,FR
-2988555528,2988555531,ES
-2988555532,2988555563,FR
-2988555564,2988555567,PL
-2988555568,2988555719,FR
-2988555720,2988555723,IE
-2988555724,2988555727,CZ
-2988555728,2988556179,FR
-2988556180,2988556183,ES
-2988556184,2988556191,FR
-2988556192,2988556195,ES
-2988556196,2988556199,CH
-2988556200,2988556207,FR
+2988554040,2988555527,FR
+2988555528,2988555531,DE
+2988555532,2988555551,FR
+2988555552,2988555559,PT
+2988555560,2988556207,FR
2988556208,2988556211,DE
-2988556212,2988556215,FR
-2988556216,2988556219,DE
-2988556220,2988556223,PL
-2988556224,2988556359,FR
+2988556212,2988556359,FR
2988556360,2988556363,ES
-2988556364,2988556463,FR
-2988556464,2988556479,CH
-2988556480,2988556483,GB
-2988556484,2988556539,FR
-2988556540,2988556543,BE
-2988556544,2988556891,FR
-2988556892,2988556895,IT
-2988556896,2988556967,FR
-2988556968,2988556975,DE
-2988556976,2988557051,FR
-2988557052,2988557055,PT
-2988557056,2988557063,FR
-2988557064,2988557071,GB
-2988557072,2988557079,FR
-2988557080,2988557087,IT
-2988557088,2988557095,FI
-2988557096,2988557247,FR
-2988557248,2988557251,DE
-2988557252,2988557263,FR
-2988557264,2988557279,BE
-2988557280,2988557287,FR
-2988557288,2988557291,PL
-2988557292,2988557295,FR
-2988557296,2988557299,IE
-2988557300,2988557303,ES
-2988557304,2988557311,DE
-2988557312,2988557439,FR
-2988557440,2988557471,GB
-2988557472,2988557491,FR
-2988557492,2988557495,GB
-2988557496,2988557499,DE
-2988557500,2988557507,FR
+2988556364,2988557103,FR
+2988557104,2988557111,PT
+2988557112,2988557507,FR
2988557508,2988557511,ES
-2988557512,2988557531,FR
-2988557532,2988557535,ES
-2988557536,2988557539,FR
+2988557512,2988557539,FR
2988557540,2988557543,ES
-2988557544,2988557559,FR
-2988557560,2988557563,DE
-2988557564,2988557643,FR
-2988557644,2988557651,DE
-2988557652,2988557767,FR
-2988557768,2988557771,DE
-2988557772,2988558063,FR
-2988558064,2988558067,BE
-2988558068,2988558071,DE
-2988558072,2988558111,FR
-2988558112,2988558119,IT
-2988558120,2988558143,FR
-2988558144,2988558159,GB
-2988558160,2988558175,FR
-2988558176,2988558191,NL
-2988558192,2988558203,FR
+2988557544,2988558203,FR
2988558204,2988558207,DE
-2988558208,2988558591,FR
-2988558592,2988558623,DE
+2988558208,2988558623,FR
2988558624,2988558655,NL
-2988558656,2988558719,PL
-2988558720,2988558727,NL
-2988558728,2988558731,BE
-2988558732,2988558803,FR
+2988558656,2988558803,FR
2988558804,2988558807,ES
2988558808,2988558815,NL
-2988558816,2988558831,GB
-2988558832,2988558863,FR
-2988558864,2988558879,NL
-2988558880,2988558891,FR
-2988558892,2988558895,DE
-2988558896,2988558907,FR
-2988558908,2988558911,DE
-2988558912,2988558927,FR
-2988558928,2988558935,CZ
-2988558936,2988558939,IT
-2988558940,2988559011,FR
-2988559012,2988559015,BE
-2988559016,2988559023,DE
-2988559024,2988559247,FR
-2988559248,2988559255,GB
-2988559256,2988559631,FR
-2988559632,2988559647,GB
-2988559648,2988559663,IT
-2988559664,2988559695,FR
-2988559696,2988559703,GB
-2988559704,2988559735,FR
-2988559736,2988559743,GB
-2988559744,2988560287,FR
-2988560288,2988560319,ES
-2988560320,2988560351,FR
-2988560352,2988560383,ES
-2988560384,2988560387,CZ
-2988560388,2988560431,FR
-2988560432,2988560439,CH
-2988560440,2988560463,FR
-2988560464,2988560479,NL
-2988560480,2988560511,FR
-2988560512,2988560527,IT
-2988560528,2988560531,FR
-2988560532,2988560535,ES
-2988560536,2988560543,IT
-2988560544,2988560595,FR
-2988560596,2988560599,ES
-2988560600,2988560607,FR
-2988560608,2988560623,PL
-2988560624,2988560635,FR
-2988560636,2988560639,DE
-2988560640,2988560703,PT
-2988560704,2988560711,NL
-2988560712,2988560719,FR
-2988560720,2988560735,DE
-2988560736,2988560895,FR
-2988560896,2988560919,PL
-2988560920,2988561039,FR
-2988561040,2988561043,GB
-2988561044,2988561055,FR
-2988561056,2988561059,ES
-2988561060,2988561063,FR
-2988561064,2988561071,PL
-2988561072,2988561075,BE
-2988561076,2988561095,FR
-2988561096,2988561099,NL
-2988561100,2988561103,ES
-2988561104,2988561179,FR
-2988561180,2988561183,NL
-2988561184,2988561203,FR
-2988561204,2988561207,PT
-2988561208,2988561215,PL
-2988561216,2988561231,ES
-2988561232,2988561283,FR
-2988561284,2988561287,PT
-2988561288,2988561291,IE
-2988561292,2988561295,DE
-2988561296,2988561343,FR
-2988561344,2988561375,PL
-2988561376,2988561391,NL
-2988561392,2988561583,FR
+2988558816,2988560639,FR
+2988560640,2988560703,ES
+2988560704,2988560759,FR
+2988560760,2988560767,FI
+2988560768,2988560783,FR
+2988560784,2988560799,NL
+2988560800,2988560815,DE
+2988560816,2988561583,FR
2988561584,2988561591,GB
-2988561592,2988561599,FR
-2988561600,2988561631,PL
-2988561632,2988561663,FR
-2988561664,2988561671,PL
-2988561672,2988561747,FR
-2988561748,2988561751,FI
-2988561752,2988561759,FR
-2988561760,2988561763,LT
+2988561592,2988561763,FR
2988561764,2988561767,IT
-2988561768,2988561847,FR
-2988561848,2988561855,IT
-2988561856,2988561871,GB
-2988561872,2988561875,IE
-2988561876,2988561887,FR
-2988561888,2988561903,GB
-2988561904,2988562143,FR
-2988562144,2988562151,IE
-2988562152,2988562159,DE
-2988562160,2988562495,FR
-2988562496,2988562527,GB
-2988562528,2988562559,FR
-2988562560,2988562575,PL
-2988562576,2988562599,FR
-2988562600,2988562607,DE
-2988562608,2988562615,PT
-2988562616,2988562843,FR
-2988562844,2988562847,DE
+2988561768,2988562847,FR
2988562848,2988562863,GB
-2988562864,2988563015,FR
-2988563016,2988563023,IE
-2988563024,2988563075,FR
-2988563076,2988563079,ES
-2988563080,2988563135,FR
-2988563136,2988563151,PT
-2988563152,2988563167,FR
-2988563168,2988563183,GB
-2988563184,2988563199,FR
-2988563200,2988563263,PT
-2988563264,2988564011,FR
-2988564012,2988564015,IE
-2988564016,2988564019,ES
-2988564020,2988564023,FR
+2988562864,2988563559,FR
+2988563560,2988563567,NL
+2988563568,2988564023,FR
2988564024,2988564027,IE
2988564028,2988564143,FR
2988564144,2988564159,ES
-2988564160,2988564187,FR
-2988564188,2988564191,PL
-2988564192,2988564199,FR
-2988564200,2988564207,IT
-2988564208,2988564471,FR
-2988564472,2988564479,CZ
-2988564480,2988572671,FR
+2988564160,2988564367,FR
+2988564368,2988564383,GB
+2988564384,2988572671,FR
2988572672,2988703743,RU
2988703744,2988834815,PL
2988834816,2988965887,CH
@@ -53828,20 +52156,13 @@
2989883392,2989948927,UA
2989948928,2990014463,FI
2990014464,2990079999,PL
-2990080000,2990096383,GB
-2990096384,2990104575,RU
-2990104576,2990112767,GB
-2990112768,2990145535,RU
+2990080000,2990145535,RU
2990145536,2990211071,SI
2990211072,2990276607,GR
2990276608,2990342143,ES
2990342144,2990407679,KW
-2990407680,2990407935,US
-2990407936,2990408191,GB
-2990408192,2990421728,US
-2990421729,2990421729,GB
-2990421730,2990440447,US
-2990440448,2990473215,GB
+2990407680,2990440447,GB
+2990440448,2990473215,NL
2990473216,2990475674,DE
2990475675,2990475675,HR
2990475676,2990500113,DE
@@ -53887,7 +52208,7 @@
2991587328,2991718399,SA
2991718400,2991849471,CH
2991849472,2991980543,NL
-2991980544,2992111615,UA
+2991980544,2992111615,SA
2992111616,2992373759,KZ
2992373760,2992635903,UA
2992635904,2993684479,GB
@@ -54004,7 +52325,17 @@
2997515684,2997515684,GB
2997515685,2997518335,FR
2997518336,2997520383,DE
-2997520384,2997526527,NL
+2997520384,2997520895,NL
+2997520896,2997521151,MT
+2997521152,2997521407,US
+2997521408,2997522175,IN
+2997522176,2997522431,PK
+2997522432,2997522687,IT
+2997522688,2997522943,BE
+2997522944,2997523199,NO
+2997523200,2997523455,NL
+2997523456,2997524479,DE
+2997524480,2997526527,NL
2997526528,2997583871,RU
2997583872,2997616639,SY
2997616640,2997649407,SI
@@ -54013,22 +52344,17 @@
2997714944,2997747711,IR
2997747712,2997780479,CH
2997780480,2997813247,SE
-2997813248,2997817343,AL
-2997817344,2997819391,RS
-2997819392,2997823487,AL
-2997823488,2997825535,RS
-2997825536,2997829631,AL
-2997829632,2997846015,RS
+2997813248,2997846015,AL
2997846016,2997878783,MD
2997878784,2998140927,RU
2998140928,2998403071,PL
2998403072,2998665215,RU
-2998665216,2998679039,AT
-2998679040,2998679295,SI
-2998679296,2998902527,AT
-2998902528,2998902783,SI
-2998902784,2998927359,AT
-2998927360,2999451647,CH
+2998665216,2998927359,AT
+2998927360,2999026943,CH
+2999026944,2999027199,DE
+2999027200,2999380351,CH
+2999380352,2999380479,DE
+2999380480,2999451647,CH
2999451648,2999713791,DE
2999713792,2999975935,RU
2999975936,2999984127,FR
@@ -54192,9 +52518,9 @@
3000713216,3000717311,IT
3000717312,3000721407,UA
3000721408,3000733695,PL
-3000733696,3000737791,RU
-3000737792,3000741887,UA
-3000741888,3000745983,RU
+3000733696,3000741375,RU
+3000741376,3000741631,UA
+3000741632,3000745983,RU
3000745984,3000750079,UA
3000750080,3000754175,RU
3000754176,3000758271,IR
@@ -54325,7 +52651,7 @@
3002697728,3002699775,DE
3002699776,3002701823,SE
3002701824,3002703871,NL
-3002703872,3002705919,DE
+3002703872,3002705919,FR
3002705920,3002707967,MK
3002707968,3002710015,KW
3002710016,3002712063,IT
@@ -54342,9 +52668,7 @@
3002736640,3002738687,LT
3002738688,3002740735,PL
3002740736,3002742783,GB
-3002742784,3002743039,LI
-3002743040,3002743047,GR
-3002743048,3002744831,LI
+3002742784,3002744831,LI
3002744832,3002746879,IT
3002746880,3002748927,GB
3002748928,3002750975,DE
@@ -54556,23 +52880,23 @@
3005891328,3005893119,PA
3005893120,3005893631,CO
3005893632,3005893887,PA
-3005893888,3005894143,CO
-3005894144,3005894399,PA
-3005894400,3005894911,CO
-3005894912,3005896703,PA
+3005893888,3005894911,CO
+3005894912,3005895167,PA
+3005895168,3005895423,CO
+3005895424,3005896703,PA
3005896704,3005896959,CO
3005896960,3005897215,PA
3005897216,3005897727,CO
3005897728,3005897983,PA
3005897984,3005898239,CO
3005898240,3005899007,PA
-3005899008,3005900287,CO
-3005900288,3005901055,PA
+3005899008,3005900543,CO
+3005900544,3005901055,PA
3005901056,3005901311,CO
-3005901312,3005902591,PA
-3005902592,3005902847,CO
-3005902848,3005903103,PA
-3005903104,3005903871,CO
+3005901312,3005901567,PA
+3005901568,3005901823,CO
+3005901824,3005902591,PA
+3005902592,3005903871,CO
3005903872,3005904895,PA
3005904896,3005905407,CO
3005905408,3005905663,PA
@@ -54581,13 +52905,15 @@
3005911040,3005911295,CO
3005911296,3005911551,PA
3005911552,3005911807,CO
-3005911808,3005912831,PA
+3005911808,3005912063,PA
+3005912064,3005912319,CO
+3005912320,3005912831,PA
3005912832,3005913087,CO
3005913088,3005913343,PA
3005913344,3005913599,CO
3005913600,3005913855,PA
-3005913856,3005914623,CO
-3005914624,3005915135,PA
+3005913856,3005914879,CO
+3005914880,3005915135,PA
3005915136,3005918207,AR
3005918208,3005919231,CO
3005919232,3005923327,AR
@@ -54623,34 +52949,32 @@
3006284544,3006284799,PA
3006284800,3006285055,CR
3006285056,3006285311,PA
-3006285312,3006285567,CR
-3006285568,3006285823,PA
-3006285824,3006286079,CR
-3006286080,3006287103,PA
-3006287104,3006287359,CR
-3006287360,3006287871,PA
+3006285312,3006286079,CR
+3006286080,3006286847,PA
+3006286848,3006287615,CR
+3006287616,3006287871,PA
3006287872,3006288127,CR
-3006288128,3006288639,PA
-3006288640,3006289151,CR
+3006288128,3006288383,PA
+3006288384,3006289151,CR
3006289152,3006289407,PA
3006289408,3006289919,CR
3006289920,3006291199,PA
3006291200,3006291967,CR
-3006291968,3006292991,PA
-3006292992,3006293247,CR
-3006293248,3006296575,PA
+3006291968,3006296575,PA
3006296576,3006296831,CR
3006296832,3006308351,PA
3006308352,3006308863,CR
-3006308864,3006310143,PA
+3006308864,3006309631,PA
+3006309632,3006309887,CR
+3006309888,3006310143,PA
3006310144,3006310655,CR
3006310656,3006311167,PA
3006311168,3006311423,CR
3006311424,3006311679,PA
3006311680,3006312447,CR
3006312448,3006312703,PA
-3006312704,3006313215,CR
-3006313216,3006313727,PA
+3006312704,3006313471,CR
+3006313472,3006313727,PA
3006313728,3006314495,CR
3006314496,3006315263,PA
3006315264,3006315775,CR
@@ -54664,12 +52988,10 @@
3006322432,3006323199,CR
3006323200,3006323455,PA
3006323456,3006323711,CR
-3006323712,3006328831,PA
-3006328832,3006329087,NI
-3006329088,3006329343,PA
-3006329344,3006330111,NI
-3006330112,3006330367,PA
-3006330368,3006330623,NI
+3006323712,3006324223,PA
+3006324224,3006324479,CR
+3006324480,3006328831,PA
+3006328832,3006330623,NI
3006330624,3006330879,PA
3006330880,3006331903,CR
3006331904,3006332927,AR
@@ -54725,7 +53047,9 @@
3007092736,3007094783,AR
3007094784,3007096831,CR
3007096832,3007098879,AR
-3007098880,3007100887,HN
+3007098880,3007100647,HN
+3007100648,3007100655,MX
+3007100656,3007100887,HN
3007100888,3007100895,PH
3007100896,3007100927,HN
3007100928,3007102975,AR
@@ -54843,33 +53167,43 @@
3007160448,3007160575,US
3007160576,3007160591,IE
3007160592,3007160607,US
-3007160608,3007160703,CL
+3007160608,3007160639,CL
+3007160640,3007160655,GB
+3007160656,3007160703,CL
3007160704,3007160831,US
3007160832,3007160847,CL
3007160848,3007160863,DE
3007160864,3007161087,CL
3007161088,3007161103,GB
-3007161104,3007161215,CL
+3007161104,3007161151,CL
+3007161152,3007161167,GB
+3007161168,3007161215,CL
3007161216,3007161343,DE
3007161344,3007161359,CL
3007161360,3007161375,DE
3007161376,3007161471,CL
3007161472,3007161599,US
3007161600,3007161615,GB
-3007161616,3007161727,CL
+3007161616,3007161663,CL
+3007161664,3007161679,GB
+3007161680,3007161727,CL
3007161728,3007161855,DE
3007161856,3007161871,CL
3007161872,3007161887,DE
3007161888,3007162111,CL
3007162112,3007162127,ES
-3007162128,3007162239,CL
+3007162128,3007162175,CL
+3007162176,3007162191,GB
+3007162192,3007162239,CL
3007162240,3007162367,US
3007162368,3007162383,CL
3007162384,3007162399,DE
3007162400,3007162495,CL
3007162496,3007162623,US
3007162624,3007162639,NL
-3007162640,3007162751,CL
+3007162640,3007162687,CL
+3007162688,3007162703,GB
+3007162704,3007162751,CL
3007162752,3007162879,DE
3007162880,3007162895,CL
3007162896,3007162911,DE
@@ -54950,11 +53284,16 @@
3007169024,3007169151,US
3007169152,3007169279,CL
3007169280,3007169535,US
-3007169536,3007170559,CL
+3007169536,3007170047,CL
+3007170048,3007170303,MX
+3007170304,3007170559,CL
3007170560,3007171071,DE
3007171072,3007171855,CL
3007171856,3007171871,US
-3007171872,3007172607,CL
+3007171872,3007171873,BR
+3007171874,3007171875,CL
+3007171876,3007171903,BR
+3007171904,3007172607,CL
3007172608,3007175679,BR
3007175680,3007175935,GB
3007175936,3007183359,BR
@@ -54987,8 +53326,8 @@
3007281920,3007283455,CR
3007283456,3007283711,PA
3007283712,3007283967,CR
-3007283968,3007284223,PA
-3007284224,3007285759,CR
+3007283968,3007284479,PA
+3007284480,3007285759,CR
3007285760,3007286271,PA
3007286272,3007286783,CR
3007286784,3007287295,PA
@@ -55029,8 +53368,8 @@
3025141760,3025403903,KR
3025403904,3025600511,CN
3025600512,3025603071,IN
-3025603072,3025603087,HK
-3025603088,3025603103,IN
+3025603072,3025603091,HK
+3025603092,3025603103,IN
3025603104,3025603199,HK
3025603200,3025603839,IN
3025603840,3025604095,HK
@@ -55045,11 +53384,13 @@
3025608192,3025608203,JP
3025608204,3025610751,IN
3025610752,3025612799,SG
-3025612800,3025612895,IN
-3025612896,3025612927,SG
-3025612928,3025616895,IN
-3025616896,3025617407,SG
-3025617408,3025618943,IN
+3025612800,3025612815,IN
+3025612816,3025612831,SG
+3025612832,3025612895,IN
+3025612896,3025613063,SG
+3025613064,3025616895,IN
+3025616896,3025617423,SG
+3025617424,3025618943,IN
3025618944,3025619487,SG
3025619488,3025620991,IN
3025620992,3025621247,PH
@@ -55060,7 +53401,7 @@
3025623552,3025625343,IN
3025625344,3025625375,SG
3025625376,3025625391,IN
-3025625392,3025625395,SG
+3025625392,3025625395,CA
3025625396,3025625399,IN
3025625400,3025625407,TH
3025625408,3025625471,SG
@@ -55069,20 +53410,25 @@
3025625520,3025625535,IN
3025625536,3025625599,CA
3025625600,3025625855,SG
-3025625856,3025629439,IN
-3025629440,3025629503,HK
-3025629504,3025629695,IN
+3025625856,3025626111,IN
+3025626112,3025626367,SG
+3025626368,3025629439,IN
+3025629440,3025629567,HK
+3025629568,3025629695,IN
3025629696,3025629951,HK
-3025629952,3025630207,IN
+3025629952,3025630023,AU
+3025630024,3025630207,IN
3025630208,3025630719,AU
3025630720,3025630975,JP
3025630976,3025631239,IN
3025631240,3025631247,AU
-3025631248,3025632255,IN
+3025631248,3025631747,IN
+3025631748,3025631759,HK
+3025631760,3025632255,IN
3025632256,3025632271,SG
3025632272,3025632287,IN
-3025632288,3025632351,SG
-3025632352,3025632511,IN
+3025632288,3025632383,SG
+3025632384,3025632511,IN
3025632512,3025632767,SG
3025632768,3025633535,IN
3025633536,3025633791,HK
@@ -55101,7 +53447,9 @@
3025638792,3025639167,IN
3025639168,3025639175,SG
3025639176,3025639423,IN
-3025639424,3025639679,SG
+3025639424,3025639535,SG
+3025639536,3025639551,HK
+3025639552,3025639679,SG
3025639680,3025639935,HK
3025639936,3025640191,IN
3025640192,3025640447,JP
@@ -55209,7 +53557,6 @@
3029715200,3029715455,AU
3029715456,3029716991,JP
3029716992,3029721087,PK
-3029721088,3029725183,AU
3029725184,3029727231,IN
3029727232,3029728255,AU
3029728256,3029729279,HK
@@ -55246,7 +53593,9 @@
3032271872,3032272895,AU
3032272896,3032276991,JP
3032276992,3032285183,IN
-3032285184,3032301567,JP
+3032285184,3032289279,JP
+3032289280,3032293375,AU
+3032293376,3032301567,JP
3032301568,3032317951,KR
3032317952,3032319999,JP
3032320000,3032323071,AU
@@ -55365,25 +53714,24 @@
3039166464,3039231999,PA
3039232000,3039297535,EC
3039297536,3039363071,PY
-3039363072,3039412223,BZ
+3039363072,3039411199,BZ
+3039411200,3039412223,US
3039412224,3039412735,CL
-3039412736,3039413247,BR
-3039413248,3039413503,CL
-3039413504,3039414015,BR
+3039412736,3039414015,BR
3039414016,3039414271,CL
3039414272,3039414527,BR
-3039414528,3039415295,CL
-3039415296,3039415807,BR
-3039415808,3039416713,CL
+3039414528,3039414783,CL
+3039414784,3039415039,BR
+3039415040,3039415295,CL
+3039415296,3039416319,BR
+3039416320,3039416713,CL
3039416714,3039416715,US
3039416716,3039416735,CL
3039416736,3039416739,US
3039416740,3039416831,CL
3039416832,3039417599,BR
3039417600,3039417855,CL
-3039417856,3039418111,BR
-3039418112,3039418367,CL
-3039418368,3039418879,BR
+3039417856,3039418879,BR
3039418880,3039419135,CL
3039419136,3039420415,BR
3039420416,3039428607,AR
@@ -55430,7 +53778,7 @@
3048121344,3048122367,PA
3048122368,3048123391,CR
3048123392,3048126463,AR
-3048126464,3048128511,VE
+3048126464,3048128511,ES
3048128512,3048132607,AR
3048132608,3048135935,CR
3048135936,3048136447,PA
@@ -55486,114 +53834,189 @@
3050569728,3050635263,CL
3050635264,3050700799,BR
3050700800,3050700815,JP
-3050700816,3050701311,CL
+3050700816,3050700831,CL
+3050700832,3050700832,BR
+3050700833,3050700835,CL
+3050700836,3050700847,BR
+3050700848,3050701055,CL
+3050701056,3050701311,US
3050701312,3050701327,IE
3050701328,3050701343,US
-3050701344,3050701823,CL
+3050701344,3050701344,BR
+3050701345,3050701567,CL
+3050701568,3050701823,US
3050701824,3050701839,SG
-3050701840,3050702335,CL
+3050701840,3050702079,CL
+3050702080,3050702335,US
3050702336,3050702351,DK
-3050702352,3050703359,CL
+3050702352,3050702591,CL
+3050702592,3050702847,US
+3050702848,3050702863,FR
+3050702864,3050703103,CL
+3050703104,3050703359,US
3050703360,3050703375,AT
3050703376,3050703871,CL
-3050703872,3050703887,RU
-3050703888,3050704383,CL
+3050703872,3050703887,PE
+3050703888,3050704127,CL
+3050704128,3050704383,US
3050704384,3050704399,KR
-3050704400,3050704895,CL
+3050704400,3050704639,CL
+3050704640,3050704895,US
3050704896,3050704911,IT
-3050704912,3050705407,CL
+3050704912,3050705151,CL
+3050705152,3050705407,US
3050705408,3050705423,JP
-3050705424,3050705919,CL
+3050705424,3050705663,CL
+3050705664,3050705919,US
3050705920,3050705935,AU
-3050705936,3050706431,CL
+3050705936,3050706175,CL
+3050706176,3050706431,US
3050706432,3050706447,NL
-3050706448,3050706943,CL
+3050706448,3050706687,CL
+3050706688,3050706943,US
3050706944,3050706959,HK
-3050706960,3050707455,CL
+3050706960,3050707199,CL
+3050707200,3050707455,US
3050707456,3050707471,IT
-3050707472,3050707967,CL
+3050707472,3050707711,CL
+3050707712,3050707967,US
3050707968,3050707983,CH
-3050707984,3050708479,CL
+3050707984,3050708223,CL
+3050708224,3050708479,US
3050708480,3050708495,FR
-3050708496,3050708991,CL
+3050708496,3050708735,CL
+3050708736,3050708991,US
3050708992,3050709007,AT
-3050709008,3050709247,CL
+3050709008,3050709023,BR
+3050709024,3050709247,CL
3050709248,3050709375,DE
3050709376,3050709503,CL
3050709504,3050709519,TH
3050709520,3050710015,CL
3050710016,3050710031,ES
-3050710032,3050710527,CL
+3050710032,3050710271,CL
+3050710272,3050710527,US
3050710528,3050710543,FR
-3050710544,3050711039,CL
+3050710544,3050710783,CL
+3050710784,3050711039,US
3050711040,3050711055,AU
3050711056,3050711551,CL
3050711552,3050711567,EE
-3050711568,3050712063,CL
+3050711568,3050711807,CL
+3050711808,3050712063,US
3050712064,3050712079,FR
-3050712080,3050712575,CL
+3050712080,3050712319,CL
+3050712320,3050712575,US
3050712576,3050712591,PL
-3050712592,3050713087,CL
+3050712592,3050712831,CL
+3050712832,3050713087,US
3050713088,3050713103,LV
-3050713104,3050714367,CL
+3050713104,3050713343,CL
+3050713344,3050713599,US
+3050713600,3050713855,NL
+3050713856,3050714367,CL
3050714368,3050714623,GB
-3050714624,3050715647,CL
-3050715648,3050718719,US
-3050718720,3050766335,CL
+3050714624,3050714879,BR
+3050714880,3050715647,CL
+3050715648,3050725375,US
+3050725376,3050749951,CL
+3050749952,3050758143,US
+3050758144,3050764287,CL
+3050764288,3050766335,US
3050766336,3050766351,NO
-3050766352,3050766847,CL
+3050766352,3050766591,CL
+3050766592,3050766847,US
3050766848,3050766863,KR
3050766864,3050767359,CL
3050767360,3050767375,AT
-3050767376,3050767871,CL
+3050767376,3050767615,CL
+3050767616,3050767871,US
3050767872,3050767887,MY
-3050767888,3050768383,CL
+3050767888,3050768127,CL
+3050768128,3050768383,US
3050768384,3050768399,AT
-3050768400,3050768895,CL
+3050768400,3050768639,CL
+3050768640,3050768895,US
3050768896,3050768911,CZ
-3050768912,3050769407,CL
+3050768912,3050769151,CL
+3050769152,3050769407,US
3050769408,3050769423,AU
-3050769424,3050769919,CL
+3050769424,3050769663,CL
+3050769664,3050769919,US
3050769920,3050769935,MY
-3050769936,3050770431,CL
+3050769936,3050770175,CL
+3050770176,3050770431,US
3050770432,3050770447,LV
-3050770448,3050770943,CL
+3050770448,3050770687,CL
+3050770688,3050770943,US
3050770944,3050770959,HK
-3050770960,3050771455,CL
+3050770960,3050771199,CL
+3050771200,3050771455,US
3050771456,3050771471,SG
-3050771472,3050771967,CL
+3050771472,3050771711,CL
+3050771712,3050771967,US
3050771968,3050771983,EE
-3050771984,3050772479,CL
+3050771984,3050772223,CL
+3050772224,3050772479,US
3050772480,3050772495,MY
-3050772496,3050772991,CL
+3050772496,3050772735,CL
+3050772736,3050772991,US
3050772992,3050773007,HK
-3050773008,3050773503,CL
+3050773008,3050773247,CL
+3050773248,3050773503,US
3050773504,3050773519,NL
-3050773520,3050774015,CL
+3050773520,3050773759,CL
+3050773760,3050774015,US
3050774016,3050774031,TR
-3050774032,3050774527,CL
+3050774032,3050774271,CL
+3050774272,3050774527,US
3050774528,3050774543,ES
-3050774544,3050775039,CL
+3050774544,3050774783,CL
+3050774784,3050775039,US
3050775040,3050775055,KR
-3050775056,3050775551,CL
+3050775056,3050775295,CL
+3050775296,3050775551,US
3050775552,3050775567,FR
-3050775568,3050776063,CL
+3050775568,3050775807,CL
+3050775808,3050776063,US
3050776064,3050776079,MY
-3050776080,3050776575,CL
+3050776080,3050776319,CL
+3050776320,3050776575,US
3050776576,3050776591,TH
-3050776592,3050777087,CL
+3050776592,3050776831,CL
+3050776832,3050777087,US
3050777088,3050777103,AU
-3050777104,3050777599,CL
+3050777104,3050777343,CL
+3050777344,3050777599,US
3050777600,3050777615,HK
-3050777616,3050778111,CL
+3050777616,3050777855,CL
+3050777856,3050778111,US
3050778112,3050778127,KR
-3050778128,3050778623,CL
+3050778128,3050778367,CL
+3050778368,3050778623,US
3050778624,3050778639,TR
-3050778640,3050786815,CL
-3050786816,3050788863,US
-3050788864,3050790911,CL
-3050790912,3050807295,US
-3050807296,3050831871,CL
+3050778640,3050778879,CL
+3050778880,3050788863,US
+3050788864,3050788991,CL
+3050788992,3050789119,US
+3050789120,3050789247,CL
+3050789248,3050789375,US
+3050789376,3050789503,CL
+3050789504,3050789631,US
+3050789632,3050789759,CL
+3050789760,3050789887,US
+3050789888,3050790015,CL
+3050790016,3050790143,US
+3050790144,3050790271,CL
+3050790272,3050790399,US
+3050790400,3050790527,CL
+3050790528,3050790655,US
+3050790656,3050790783,CL
+3050790784,3050825215,US
+3050825216,3050825471,CL
+3050825472,3050825983,US
+3050825984,3050827007,CL
+3050827008,3050831871,US
3050831872,3051356159,BR
3051356160,3051372543,CR
3051372544,3051372799,PA
@@ -55901,37 +54324,115 @@
3088605184,3088609279,NL
3088609280,3088629759,US
3088629760,3088633855,NL
-3088633856,3088998399,US
+3088633856,3088673535,US
+3088673536,3088673791,NL
+3088673792,3088686591,US
+3088686592,3088687103,NL
+3088687104,3088701439,US
+3088701440,3088702463,NL
+3088702464,3088753919,US
+3088753920,3088754175,NL
+3088754176,3088785407,US
+3088785408,3088786431,NL
+3088786432,3088812031,US
+3088812032,3088813055,NL
+3088813056,3088827135,US
+3088827136,3088827391,NL
+3088827392,3088829951,US
+3088829952,3088830463,NL
+3088830464,3088830975,US
+3088830976,3088831487,NL
+3088831488,3088856575,US
+3088856576,3088857599,NL
+3088857600,3088858111,US
+3088858112,3088858623,NL
+3088858624,3088861695,US
+3088861696,3088862719,NL
+3088862720,3088863231,US
+3088863232,3088863743,NL
+3088863744,3088863999,US
+3088864000,3088864255,NL
+3088864256,3088866303,US
+3088866304,3088866815,NL
+3088866816,3088868607,US
+3088868608,3088868863,NL
+3088868864,3088869119,US
+3088869120,3088870143,NL
+3088870144,3088880639,US
+3088880640,3088881663,NL
+3088881664,3088888831,US
+3088888832,3088889343,NL
+3088889344,3088924671,US
+3088924672,3088925695,NL
+3088925696,3088998399,US
3088998400,3089002495,NL
3089002496,3089027071,US
3089027072,3089031167,NL
3089031168,3089059839,US
3089059840,3089063935,NL
-3089063936,3090325503,US
+3089063936,3090292223,US
+3090292224,3090292735,NL
+3090292736,3090308863,US
+3090308864,3090309119,NL
+3090309120,3090325503,US
3090325504,3090329599,NL
-3090329600,3090389503,US
+3090329600,3090387455,US
+3090387456,3090387711,NL
+3090387712,3090387967,US
+3090387968,3090388479,NL
+3090388480,3090389503,US
3090389504,3090389631,CA
-3090389632,3091202047,US
+3090389632,3090415103,US
+3090415104,3090415615,NL
+3090415616,3091202047,US
3091202048,3091726335,CA
3091726336,3091955711,US
3091955712,3091959807,CA
3091959808,3091976191,US
3091976192,3091980287,CA
-3091980288,3092578303,US
+3091980288,3092559359,US
+3092559360,3092559615,NL
+3092559616,3092567039,US
+3092567040,3092568063,NL
+3092568064,3092572671,US
+3092572672,3092573183,NL
+3092573184,3092578303,US
3092578304,3092582399,NL
3092582400,3092615167,US
3092615168,3092619263,NL
3092619264,3092623359,US
3092623360,3092631551,NL
-3092631552,3092643839,US
+3092631552,3092635391,US
+3092635392,3092635647,NL
+3092635648,3092640255,US
+3092640256,3092640767,NL
+3092640768,3092641791,US
+3092641792,3092642047,NL
+3092642048,3092642559,US
+3092642560,3092642815,NL
+3092642816,3092643839,US
3092643840,3092647935,NL
3092647936,3092656127,US
3092656128,3092660223,NL
-3092660224,3092688895,US
+3092660224,3092664319,US
+3092664320,3092665343,NL
+3092665344,3092666367,US
+3092666368,3092667391,NL
+3092667392,3092669439,US
+3092669440,3092669951,NL
+3092669952,3092671487,US
+3092671488,3092672511,NL
+3092672512,3092688895,US
3092688896,3092692991,NL
-3092692992,3092754431,US
-3092754432,3092758527,NL
-3092758528,3093168127,US
+3092692992,3092697087,US
+3092697088,3092697599,NL
+3092697600,3092701183,US
+3092701184,3092703231,NL
+3092703232,3092704255,US
+3092704256,3092705279,NL
+3092705280,3092754431,US
+3092754432,3092759039,NL
+3092759040,3093168127,US
3093168128,3093200895,CA
3093200896,3093213183,US
3093213184,3093217279,CA
@@ -55982,7 +54483,6 @@
3098106624,3098106879,NL
3098106880,3098107135,DE
3098107136,3098107391,FR
-3098107392,3098107647,US
3098107648,3098107903,SE
3098107904,3098108159,ES
3098108160,3098108415,IL
@@ -56003,9 +54503,7 @@
3098263552,3098271743,CA
3098271744,3098278847,US
3098278848,3098278911,CA
-3098278912,3098350383,US
-3098350384,3098350391,BR
-3098350392,3098411007,US
+3098278912,3098411007,US
3098411008,3098415103,PK
3098415104,3098476543,US
3098476544,3098492927,CA
@@ -56033,6 +54531,7 @@
3103855104,3103855359,DE
3103855360,3103855615,RU
3103855616,3103855871,ES
+3103855872,3103856127,AT
3103856128,3103856383,PL
3103856384,3103856639,RU
3103856640,3103856895,HU
@@ -56043,6 +54542,17 @@
3103857920,3103858175,PL
3103858176,3103858431,BG
3103858432,3103858687,AT
+3103858688,3103858943,NL
+3103858944,3103859199,GB
+3103859200,3103859455,SK
+3103859456,3103859711,DE
+3103859712,3103859967,RO
+3103859968,3103860223,PL
+3103860224,3103860479,FR
+3103860736,3103860991,BG
+3103860992,3103861247,RU
+3103861248,3103861503,PL
+3103861504,3103861759,AT
3103916032,3103917055,CH
3103917056,3103918079,IT
3103918080,3103919103,DE
@@ -56202,7 +54712,7 @@
3104075776,3104076799,NL
3104076800,3104077823,GB
3104077824,3104078847,AT
-3104078848,3104079871,LU
+3104078848,3104079871,FR
3104079872,3104080895,GB
3104080896,3104081919,GR
3104081920,3104082943,DK
@@ -56229,7 +54739,6 @@
3104103424,3104104447,IR
3104104448,3104105471,TR
3104105472,3104106495,FI
-3104106496,3104107519,CH
3104107520,3104108543,UA
3104108544,3104109567,GB
3104109568,3104110591,ES
@@ -56294,6 +54803,7 @@
3104173056,3104174079,ES
3104174080,3104175103,IE
3104175104,3104176127,IT
+3104176128,3104177151,RU
3104177152,3104178175,UA
3104178176,3104179199,PL
3104179200,3104180223,ES
@@ -56315,7 +54825,7 @@
3104195584,3104196607,DE
3104196608,3104197631,IT
3104197632,3104198655,GR
-3104198656,3104199679,GB
+3104198656,3104199679,RU
3104199680,3104200703,NL
3104200704,3104201727,IT
3104201728,3104202751,FR
@@ -56332,6 +54842,7 @@
3104212992,3104214015,HU
3104214016,3104215039,FR
3104215040,3104216063,DE
+3104216064,3104217087,LB
3104217088,3104218111,GB
3104218112,3104219135,HU
3104219136,3104220159,NL
@@ -56442,11 +54953,7 @@
3104331776,3104333823,GB
3104333824,3104334847,ES
3104334848,3104335871,SE
-3104335872,3104336359,LT
-3104336360,3104336367,BE
-3104336368,3104336407,LT
-3104336408,3104336415,CH
-3104336416,3104336895,LT
+3104335872,3104336895,LT
3104336896,3104337919,GB
3104337920,3104338943,IE
3104338944,3104339967,DE
@@ -56583,7 +55090,6 @@
3104478208,3104479231,DE
3104479232,3104480255,RU
3104480256,3104483327,NL
-3104483328,3104484351,SA
3104484352,3104485375,RU
3104485376,3104486399,FR
3104486400,3104488447,RU
@@ -56633,7 +55139,6 @@
3104533504,3104534527,PL
3104534528,3104535551,SE
3104535552,3104536575,ES
-3104536576,3104537599,RO
3104537600,3104538623,US
3104538624,3104539647,PL
3104539648,3104540671,RU
@@ -56704,7 +55209,11 @@
3104606208,3104607231,GB
3104607232,3104608255,UA
3104608256,3104609279,NL
-3104609280,3104610303,SE
+3104609280,3104609503,SE
+3104609504,3104609535,NL
+3104609536,3104609759,SE
+3104609760,3104609791,NL
+3104609792,3104610303,SE
3104610304,3104611327,RU
3104611328,3104612351,IE
3104612352,3104613375,GB
@@ -56725,7 +55234,7 @@
3104629760,3104630783,RU
3104630784,3104631807,GB
3104631808,3104632831,EE
-3104632832,3104633855,AT
+3104632832,3104633855,NL
3104633856,3104634879,JO
3104634880,3104635903,SE
3104635904,3104637951,RU
@@ -56736,7 +55245,7 @@
3104642048,3104643071,KZ
3104643072,3104644095,RU
3104644096,3104645119,DE
-3104645120,3104646143,GB
+3104645120,3104646143,RU
3104646144,3104647167,FR
3104647168,3104648191,GB
3104648192,3104649215,RU
@@ -56830,7 +55339,9 @@
3104747520,3104749567,FR
3104749568,3104750591,NL
3104750592,3104751615,CZ
-3104751616,3104752639,UA
+3104751616,3104751871,UA
+3104751872,3104752127,CA
+3104752128,3104752639,UA
3104752640,3104753663,SA
3104753664,3104754687,GR
3104754688,3104755711,MK
@@ -56888,7 +55399,7 @@
3104809984,3104811007,NL
3104811008,3104812031,IT
3104812032,3104813055,RU
-3104814080,3104816127,DE
+3104813056,3104816127,DE
3104816128,3104817151,RU
3104817152,3104818175,DE
3104818176,3104819199,TR
@@ -56902,6 +55413,7 @@
3104826368,3104827391,CH
3104827392,3104828415,PL
3104828416,3104829439,AT
+3104829440,3104830463,GB
3104830464,3104831487,DE
3104831488,3104832511,NL
3104832512,3104833535,CZ
@@ -56992,7 +55504,6 @@
3104919552,3104920575,NL
3104920576,3104922623,RU
3104922624,3104923647,NO
-3104923648,3104924671,NL
3104924672,3104925695,CZ
3104925696,3104926719,IT
3104926720,3104927743,FR
@@ -57056,7 +55567,7 @@
3104988160,3104989183,DE
3104989184,3104990207,FR
3104990208,3104991231,DE
-3104991232,3104992255,SK
+3104991232,3104992255,BE
3104992256,3104995327,RU
3104995328,3104996351,GB
3104996352,3104997375,RU
@@ -57083,7 +55594,8 @@
3105017856,3105018879,FR
3105018880,3105019903,IR
3105019904,3105020927,GB
-3105020928,3105021951,CA
+3105020928,3105021439,NL
+3105021440,3105021951,IN
3105021952,3105022975,RO
3105022976,3105023999,BG
3105024000,3105025023,IT
@@ -57105,6 +55617,7 @@
3105042432,3105043455,FR
3105043456,3105044479,DE
3105044480,3105045503,NL
+3105045504,3105046527,DE
3105046528,3105047551,NO
3105047552,3105048575,ES
3105048576,3105049599,SK
@@ -57131,6 +55644,7 @@
3105072128,3105073151,IT
3105073152,3105074175,RU
3105074176,3105075199,DE
+3105075200,3105076223,RU
3105076224,3105077247,BE
3105077248,3105078271,IT
3105078272,3105079295,ES
@@ -57145,10 +55659,10 @@
3105087488,3105088511,FR
3105088512,3105089535,JO
3105089536,3105090559,DE
-3105090560,3105091583,GB
+3105090560,3105091583,NL
3105091584,3105092607,FR
3105092608,3105093631,UA
-3105093632,3105094655,SE
+3105093632,3105095679,SE
3105095680,3105097727,GB
3105097728,3105098751,FR
3105098752,3105099775,SE
@@ -57329,6 +55843,7 @@
3105289216,3105290239,AT
3105290240,3105291263,TR
3105291264,3105292287,CH
+3105292288,3105293311,AT
3105293312,3105294335,GB
3105294336,3105295359,RU
3105295360,3105296383,PL
@@ -57356,8 +55871,7 @@
3105320960,3105321983,SK
3105321984,3105323007,GB
3105323008,3105324031,ES
-3105324032,3105324287,SA
-3105324288,3105325055,BH
+3105324032,3105325055,SA
3105325056,3105326079,IR
3105326080,3105328127,FR
3105328128,3105329151,NL
@@ -57413,7 +55927,7 @@
3105383680,3105383935,SK
3105383936,3105384447,AT
3105384448,3105385471,IT
-3105386496,3105387519,RU
+3105385472,3105387519,RU
3105387520,3105388543,IT
3105388544,3105389567,GB
3105389568,3105390591,TR
@@ -57444,7 +55958,11 @@
3105420288,3105421311,RU
3105421312,3105422335,NL
3105422336,3105423359,IR
-3105423360,3105424383,LT
+3105423360,3105423487,VN
+3105423488,3105423615,NO
+3105423616,3105423871,FI
+3105423872,3105424127,RU
+3105424128,3105424383,IL
3105424384,3105426431,RU
3105426432,3105427455,QA
3105427456,3105428479,RU
@@ -57490,6 +56008,9 @@
3105466368,3105467391,BE
3105467392,3105468415,GB
3105468416,3105469439,RU
+3105469440,3105469951,SE
+3105469952,3105470207,AT
+3105470208,3105470463,AE
3105470464,3105471487,CZ
3105471488,3105472511,GB
3105472512,3105473535,CH
@@ -57534,6 +56055,7 @@
3105515520,3105516543,FR
3105516544,3105517567,NL
3105517568,3105518591,RU
+3105518592,3105519615,RS
3105519616,3105520639,RU
3105520640,3105521663,FR
3105521664,3105522687,NO
@@ -57567,6 +56089,7 @@
3105549312,3105549823,AT
3105549824,3105550079,NL
3105550080,3105550335,FR
+3105550336,3105551359,GB
3105551360,3105552383,US
3105552384,3105553407,FR
3105553408,3105554431,DE
@@ -57648,6 +56171,7 @@
3105632256,3105633279,ES
3105633280,3105634303,IT
3105634304,3105635327,NL
+3105635328,3105636351,TR
3105636352,3105637375,IT
3105637376,3105637631,NL
3105637632,3105637887,DE
@@ -57687,7 +56211,9 @@
3105668132,3105668159,NL
3105668160,3105668191,US
3105668192,3105668351,NL
-3105668352,3105668863,US
+3105668352,3105668772,US
+3105668773,3105668773,NL
+3105668774,3105668863,US
3105668864,3105668879,NL
3105668880,3105669119,US
3105669120,3105670143,CZ
@@ -57716,7 +56242,7 @@
3105696768,3105697791,GB
3105697792,3105698815,FR
3105698816,3105700863,RU
-3105700864,3105701887,NL
+3105700864,3105701887,BE
3105701888,3105702911,FR
3105702912,3105703935,ES
3105703936,3105704959,IT
@@ -57734,7 +56260,7 @@
3105716224,3105717247,TR
3105717248,3105719295,RU
3105719296,3105721343,GB
-3105721344,3105722367,SI
+3105721344,3105722367,BA
3105722368,3105723391,IT
3105723392,3105724415,FR
3105724416,3105725439,CH
@@ -57822,7 +56348,7 @@
3105807360,3105808383,RU
3105808384,3105809407,NO
3105809408,3105810431,RU
-3105810432,3105811455,IL
+3105810432,3105811455,FR
3105811456,3105812479,NL
3105812480,3105814527,ES
3105814528,3105815551,JO
@@ -57840,7 +56366,10 @@
3105827840,3105828863,LV
3105828864,3105829887,PL
3105829888,3105830911,AT
-3105830912,3105831935,IT
+3105830912,3105831167,IT
+3105831168,3105831423,US
+3105831424,3105831679,IT
+3105831680,3105831935,BR
3105831936,3105832959,DE
3105832960,3105833983,IT
3105833984,3105835007,FI
@@ -57879,6 +56408,8 @@
3105869824,3105870847,DE
3105870848,3105871871,AT
3105871872,3105872895,PL
+3105872896,3105873919,IM
+3105873920,3105874943,GB
3105874944,3105875967,NL
3105875968,3105876991,GB
3105876992,3105878015,ES
@@ -57902,8 +56433,8 @@
3105895424,3105896447,GB
3105896448,3105897471,RU
3105897472,3105898495,UA
-3105898496,3105899007,CZ
-3105899008,3105900543,RU
+3105898496,3105898751,CZ
+3105898752,3105900543,RU
3105900544,3105902591,GB
3105902592,3105903615,DE
3105903616,3105904639,RU
@@ -57920,6 +56451,7 @@
3105916928,3105917951,ES
3105917952,3105918975,NL
3105918976,3105919999,PL
+3105920000,3105921023,IQ
3105921024,3105922047,IE
3105922048,3105923071,PL
3105923072,3105924095,CZ
@@ -57932,8 +56464,8 @@
3105929216,3105930239,RU
3105930240,3105931263,PT
3105932288,3105933311,SE
-3105933312,3105933343,GB
-3105933344,3105933359,IT
+3105933312,3105933351,GB
+3105933352,3105933359,IT
3105933360,3105933463,GB
3105933464,3105933471,IT
3105933472,3105933871,GB
@@ -57942,7 +56474,8 @@
3105934216,3105934223,IT
3105934224,3105934231,GB
3105934232,3105934239,IT
-3105934240,3105934335,GB
+3105934240,3105934327,GB
+3105934328,3105934335,IT
3105934336,3105935359,SE
3105935360,3105936383,FR
3105936384,3105937407,CH
@@ -57958,6 +56491,7 @@
3105944576,3105945599,DE
3105945600,3105946623,RU
3105946624,3105947647,IE
+3105947648,3105948671,AD
3105948672,3105949695,GB
3105949696,3105950719,AT
3105950720,3105951743,FR
@@ -58000,7 +56534,8 @@
3105987584,3105988607,CZ
3105988608,3105989631,RU
3105989632,3105990655,NL
-3105990656,3105991679,US
+3105990656,3105990911,PS
+3105990912,3105991679,US
3105991680,3105992703,SA
3105992704,3105993727,BH
3105993728,3105994751,DE
@@ -58033,7 +56568,7 @@
3106022400,3106023423,IT
3106023424,3106023679,NL
3106023680,3106024319,US
-3106024320,3106024447,RU
+3106024320,3106024447,DE
3106024448,3106025471,GB
3106025472,3106026495,PL
3106026496,3106027519,NL
@@ -58172,8 +56707,7 @@
3106160640,3106161663,IT
3106161664,3106162687,BA
3106162688,3106163711,IT
-3106163712,3106164735,GB
-3106164736,3106165759,LT
+3106163712,3106165759,GB
3106165760,3106166783,BA
3106166784,3106167807,BH
3106167808,3106168831,RO
@@ -58256,7 +56790,7 @@
3106245632,3106245887,DK
3106245888,3106246655,SE
3106246656,3106247679,DE
-3106247680,3106248703,NO
+3106247680,3106248703,IL
3106248704,3106249727,DE
3106249728,3106250751,FR
3106250752,3106251775,IQ
@@ -58403,7 +56937,7 @@
3106402304,3106403327,IT
3106403328,3106405375,GB
3106405376,3106406399,DE
-3106406400,3106407423,RU
+3106406400,3106408447,RU
3106408448,3106409471,GB
3106409472,3106411519,IT
3106411520,3106412543,HU
@@ -58438,6 +56972,7 @@
3106442240,3106443263,GB
3106443264,3106445311,ES
3106445312,3106446335,RU
+3106446336,3106447359,AZ
3106447360,3106448383,DE
3106448384,3106449407,BG
3106449408,3106450431,AT
@@ -58456,9 +56991,12 @@
3106462720,3106463743,IT
3106463744,3106464767,IR
3106464768,3106465791,PL
+3106465792,3106466047,FR
+3106466048,3106466303,NL
+3106466304,3106466559,DE
+3106466560,3106466815,RO
3106466816,3106467839,EE
3106467840,3106468863,IR
-3106468864,3106469887,GB
3106469888,3106470911,DE
3106470912,3106471935,NL
3106471936,3106472959,IR
@@ -58478,7 +57016,25 @@
3106483426,3106483426,FR
3106483427,3106483429,GB
3106483430,3106483430,IE
-3106483431,3106484223,GB
+3106483431,3106483761,GB
+3106483762,3106483762,DE
+3106483763,3106483763,CZ
+3106483764,3106483765,GB
+3106483766,3106483766,IT
+3106483767,3106483767,DE
+3106483768,3106483768,CZ
+3106483769,3106483769,BE
+3106483770,3106483770,PL
+3106483771,3106483771,FR
+3106483772,3106483772,IE
+3106483773,3106483773,IT
+3106483774,3106483774,PL
+3106483775,3106483775,IE
+3106483776,3106483815,GB
+3106483816,3106483816,FR
+3106483817,3106483826,GB
+3106483827,3106483827,FR
+3106483828,3106484223,GB
3106484224,3106485247,NL
3106485248,3106486271,CZ
3106486272,3106488319,DE
@@ -58658,7 +57214,9 @@
3106684928,3106685951,IR
3106685952,3106686975,RU
3106686976,3106687999,LT
-3106688000,3106689023,GB
+3106688000,3106688255,GB
+3106688256,3106688511,FR
+3106688512,3106689023,GB
3106689024,3106690047,CH
3106690048,3106691071,UA
3106691072,3106692095,FR
@@ -58667,7 +57225,11 @@
3106694144,3106695167,IR
3106695168,3106697215,DE
3106697216,3106698239,IR
-3106698240,3106699263,BG
+3106698240,3106698303,BG
+3106698304,3106698367,GE
+3106698368,3106698559,BG
+3106698560,3106698623,GE
+3106698624,3106699263,BG
3106699264,3106700287,RU
3106700288,3106701311,BG
3106701312,3106702335,NL
@@ -58699,7 +57261,9 @@
3106728960,3106729983,RU
3106729984,3106731007,IS
3106731008,3106732031,NL
-3106732032,3106736127,GB
+3106732032,3106735167,GB
+3106735168,3106735199,IE
+3106735200,3106736127,GB
3106736128,3106737151,IE
3106737152,3106738175,RO
3106738176,3106739199,DE
@@ -58746,8 +57310,7 @@
3106780160,3106781183,FR
3106781184,3106782207,DK
3106782208,3106783231,IR
-3106783232,3106783743,NL
-3106783744,3106784255,AE
+3106783232,3106784255,NL
3106784256,3106785279,HU
3106785280,3106786303,CZ
3106786304,3106787327,DE
@@ -58779,9 +57342,13 @@
3106817024,3106818047,IT
3106818048,3106819071,IE
3106819072,3106820095,BE
-3106820096,3106821631,CH
-3106821632,3106821887,HK
-3106821888,3106822143,RU
+3106820096,3106821247,CH
+3106821248,3106821375,PL
+3106821376,3106821631,US
+3106821632,3106821759,HK
+3106821760,3106821887,CN
+3106821888,3106822015,RU
+3106822016,3106822143,JP
3106822144,3106824191,CH
3106824192,3106825215,RU
3106825216,3106826239,IT
@@ -58813,7 +57380,9 @@
3106850816,3106851839,GB
3106851840,3106852863,PL
3106852864,3106853887,GB
-3106853888,3106854911,CH
+3106853888,3106854015,CH
+3106854016,3106854143,NL
+3106854144,3106854911,CH
3106854912,3106855935,IR
3106855936,3106856959,UA
3106856960,3106857983,NO
@@ -58861,7 +57430,8 @@
3106900992,3106902015,DE
3106902016,3106903039,IE
3106903040,3106904063,BE
-3106904064,3106906111,RU
+3106904064,3106904319,BY
+3106904320,3106906111,RU
3106906112,3106907135,HU
3106907136,3106908159,SE
3106908160,3106909183,NL
@@ -58869,7 +57439,7 @@
3106910208,3106911231,CZ
3106911232,3106912255,IQ
3106912256,3106913279,HU
-3106913280,3106914303,ME
+3106913280,3106914303,AL
3106914304,3106915327,SE
3106915328,3106917375,NL
3106917376,3106918399,RU
@@ -59010,7 +57580,9 @@
3107067904,3107068927,RU
3107068928,3107069951,HU
3107069952,3107070975,FR
-3107070976,3107073023,SE
+3107070976,3107071487,SE
+3107071488,3107071999,IR
+3107072000,3107073023,SE
3107073024,3107074047,ES
3107074048,3107075071,PL
3107075072,3107076095,FR
@@ -59036,7 +57608,8 @@
3107096576,3107097599,RU
3107097600,3107098623,DE
3107098624,3107099647,ES
-3107099648,3107101695,CZ
+3107099648,3107099903,UA
+3107099904,3107101695,CZ
3107101696,3107102719,RU
3107102720,3107103743,GB
3107103744,3107104767,PL
@@ -59117,7 +57690,6 @@
3107183616,3107184639,IQ
3107184640,3107185663,SE
3107185664,3107186687,CZ
-3107186688,3107187711,GB
3107187712,3107188735,MT
3107188736,3107189759,CZ
3107189760,3107190783,NL
@@ -59208,7 +57780,7 @@
3107286016,3107287039,AT
3107287040,3107288063,RS
3107288064,3107289087,NO
-3107289088,3107290111,IT
+3107289088,3107290111,SI
3107290112,3107291135,PL
3107291136,3107292159,NL
3107292160,3107293183,PL
@@ -59235,7 +57807,8 @@
3107315712,3107316735,GB
3107316736,3107317759,KG
3107317760,3107318783,RU
-3107318784,3107319807,NL
+3107318784,3107318799,IE
+3107318800,3107319807,NL
3107319808,3107320831,OM
3107320832,3107321855,SA
3107321856,3107322879,NL
@@ -59273,12 +57846,14 @@
3107356672,3107357695,SI
3107357696,3107358719,SY
3107358720,3107359743,RU
-3107359744,3107360767,GB
+3107359744,3107360767,NL
3107360768,3107361791,AT
3107361792,3107362815,DE
3107362816,3107363839,IT
3107363840,3107364863,IQ
-3107364864,3107365887,CY
+3107364864,3107365375,CY
+3107365376,3107365631,NL
+3107365632,3107365887,BE
3107365888,3107366911,IQ
3107366912,3107367935,GB
3107367936,3107368959,CH
@@ -59287,19 +57862,7 @@
3107371008,3107372031,PL
3107372032,3107373055,DE
3107373056,3107374079,ES
-3107374081,3107374100,MT
-3107374101,3107374120,CR
-3107374121,3107374140,IT
-3107374141,3107374160,ES
-3107374161,3107374180,AU
-3107374181,3107374200,SI
-3107374201,3107374220,BR
-3107374221,3107374240,CA
-3107374241,3107374260,BO
-3107374261,3107374280,US
-3107374321,3107374332,MX
-3107374334,3107374335,MX
-3107374337,3107374340,US
+3107374080,3107375103,SE
3107375104,3107376127,GB
3107376128,3107377151,NL
3107377152,3107378175,AT
@@ -59307,7 +57870,7 @@
3107379200,3107380223,NL
3107380224,3107381247,RU
3107381248,3107382271,IE
-3107382272,3107383295,FR
+3107382272,3107383295,NL
3107383296,3107384319,DE
3107384320,3107385343,RU
3107385344,3107386367,DE
@@ -59401,15 +57964,21 @@
3107485696,3107486719,IT
3107486720,3107487743,AT
3107487744,3107489791,DE
-3107489792,3107490815,MT
+3107489792,3107489892,MT
+3107489893,3107489893,NL
+3107489894,3107490044,MT
+3107490045,3107490046,NL
+3107490047,3107490055,MT
+3107490056,3107490056,NL
+3107490057,3107490057,MT
+3107490058,3107490058,NL
+3107490059,3107490815,MT
3107490816,3107491839,DK
3107491840,3107492863,NL
3107492864,3107493887,DE
3107493888,3107494911,FR
3107494912,3107495935,IT
-3107495936,3107496031,FR
-3107496032,3107496063,VG
-3107496064,3107496191,FR
+3107495936,3107496191,FR
3107496192,3107496255,DE
3107496256,3107496287,BS
3107496288,3107496319,VG
@@ -59419,10 +57988,9 @@
3107496480,3107496511,GB
3107496512,3107496703,NL
3107496704,3107496719,PE
-3107496720,3107496735,KP
+3107496720,3107496735,PK
3107496736,3107496751,FJ
-3107496752,3107496767,AR
-3107496768,3107496783,PA
+3107496752,3107496783,PA
3107496784,3107496799,AQ
3107496800,3107496815,MX
3107496816,3107496831,CN
@@ -59508,7 +58076,8 @@
3107575808,3107576831,DE
3107576832,3107577855,FR
3107577856,3107578879,SI
-3107578880,3107579903,CZ
+3107578880,3107579391,CZ
+3107579392,3107579903,RU
3107579904,3107580927,IT
3107580928,3107581951,RU
3107581952,3107582975,DE
@@ -59627,7 +58196,10 @@
3107704832,3107705855,CZ
3107705856,3107706879,NO
3107706880,3107707903,RU
-3107707904,3107708927,GB
+3107707904,3107708159,DE
+3107708160,3107708415,GB
+3107708416,3107708671,NL
+3107708672,3107708927,US
3107708928,3107709951,PL
3107709952,3107710975,DK
3107710976,3107711999,RU
@@ -59654,7 +58226,10 @@
3107734528,3107735551,HU
3107735552,3107737599,DE
3107737600,3107738623,NL
-3107738624,3107739647,RO
+3107738624,3107738879,DE
+3107738880,3107739135,DK
+3107739136,3107739391,RO
+3107739392,3107739647,PL
3107739648,3107740671,IM
3107740672,3107741695,FR
3107741696,3107742719,DE
@@ -59716,7 +58291,7 @@
3107802112,3107803135,RU
3107803136,3107804159,ES
3107804160,3107805183,CZ
-3107805184,3107806207,ES
+3107805184,3107806207,GB
3107806208,3107807231,RU
3107807232,3107808255,GB
3107808256,3107809279,DE
@@ -59776,7 +58351,7 @@
3107867648,3107868671,GB
3107868672,3107869695,CH
3107869696,3107870719,GB
-3107870720,3107871743,CH
+3107870720,3107871743,DE
3107871744,3107872767,PL
3107872768,3107873791,LV
3107873792,3107874815,RU
@@ -59832,7 +58407,8 @@
3107929088,3107930111,RU
3107930112,3107931135,CH
3107931136,3107932159,NL
-3107932160,3107934207,MT
+3107932160,3107932415,SE
+3107932416,3107934207,MT
3107934208,3107935231,GB
3107935232,3107936255,PL
3107936256,3107937279,IT
@@ -59910,7 +58486,8 @@
3108012032,3108013055,FR
3108013056,3108014079,HR
3108014080,3108015103,NL
-3108015104,3108016127,IE
+3108015104,3108015359,GB
+3108015360,3108016127,IE
3108016128,3108017151,DE
3108017152,3108018175,FR
3108018176,3108019199,AT
@@ -59935,17 +58512,13 @@
3108038656,3108039679,ES
3108039680,3108040703,MD
3108040704,3108041727,ES
-3108041728,3108042751,DE
-3108042752,3108044799,GB
+3108041728,3108044799,GB
3108044800,3108045823,LU
3108045824,3108046847,DE
3108046848,3108047871,HU
-3108047872,3108048895,RU
-3108048896,3108049919,UA
-3108049920,3108050943,RU
+3108047872,3108050943,RU
3108050944,3108051967,GB
3108051968,3108052991,FR
-3108052992,3108054015,IR
3108054016,3108055039,LV
3108055040,3108056063,GB
3108056064,3108057087,IT
@@ -59969,7 +58542,7 @@
3108076544,3108077567,NL
3108077568,3108078591,GB
3108078592,3108079615,SE
-3108079616,3108080639,MD
+3108079616,3108080639,RU
3108080640,3108081663,SE
3108081664,3108082687,GB
3108082688,3108083711,RU
@@ -59984,7 +58557,8 @@
3108091904,3108092927,ES
3108092928,3108093951,SE
3108093952,3108095999,DE
-3108096000,3108096767,RU
+3108096000,3108096511,LT
+3108096512,3108096767,RU
3108096768,3108097023,ES
3108097024,3108098047,TR
3108098048,3108099071,DE
@@ -59992,7 +58566,7 @@
3108100096,3108101119,IT
3108101120,3108102143,SK
3108102144,3108103167,FR
-3108103168,3108104191,SI
+3108103168,3108104191,BA
3108104192,3108105215,AT
3108105216,3108106239,GB
3108106240,3108107263,DE
@@ -60058,7 +58632,8 @@
3108172800,3108173823,DE
3108173824,3108174847,NL
3108174848,3108175871,KG
-3108175872,3108176895,UA
+3108175872,3108176127,NL
+3108176128,3108176895,UA
3108176896,3108177919,NL
3108177920,3108178943,PL
3108178944,3108179967,IR
@@ -60072,10 +58647,11 @@
3108187136,3108188159,NL
3108188160,3108189183,GB
3108189184,3108190207,RU
+3108190208,3108191231,SE
3108191232,3108193279,NL
3108193280,3108194303,PL
3108194304,3108195327,FR
-3108195328,3108196351,GB
+3108195328,3108196351,ES
3108196352,3108197375,FI
3108197376,3108198399,IS
3108198400,3108199423,FR
@@ -60091,12 +58667,12 @@
3108209664,3108210687,CZ
3108210688,3108211711,BR
3108211712,3108212735,GB
-3108212736,3108213759,FR
-3108213760,3108214783,GB
-3108214784,3108215807,FR
+3108212736,3108215807,FR
3108215808,3108216831,DE
3108216832,3108217855,RU
-3108217856,3108218879,GB
+3108217856,3108218111,GB
+3108218112,3108218623,US
+3108218624,3108218879,GB
3108218880,3108219903,RU
3108219904,3108220927,AT
3108220928,3108221951,AL
@@ -60179,10 +58755,10 @@
3108302848,3108303871,NL
3108303872,3108304895,RU
3108304896,3108305919,GB
-3108305920,3108306943,IE
+3108305920,3108306943,DE
3108306944,3108307967,PL
3108307968,3108308991,IQ
-3108308992,3108310015,FR
+3108308992,3108310015,ES
3108310016,3108312063,GB
3108312064,3108313087,PL
3108313088,3108314111,LV
@@ -60192,7 +58768,7 @@
3108317184,3108318207,CH
3108318208,3108319231,SE
3108319232,3108320255,SK
-3108320256,3108321279,FR
+3108320256,3108321279,LT
3108321280,3108322303,RO
3108322304,3108323327,NL
3108323328,3108324351,GB
@@ -60227,9 +58803,8 @@
3108354048,3108355071,TM
3108355072,3108356095,IT
3108356096,3108358143,PL
-3108358144,3108359167,RO
+3108358144,3108359167,DE
3108359168,3108360191,NL
-3108360192,3108361215,RU
3108361216,3108362239,IE
3108362240,3108363263,LU
3108363264,3108364287,RU
@@ -60238,7 +58813,7 @@
3108366336,3108367359,NL
3108367360,3108368383,AT
3108368384,3108369407,RO
-3108369408,3108370431,BE
+3108369408,3108370431,AT
3108370432,3108371455,FR
3108371456,3108372479,ES
3108372480,3108373503,SK
@@ -60256,7 +58831,7 @@
3108384768,3108385791,CH
3108385792,3108386815,GE
3108386816,3108387839,GB
-3108387840,3108388863,IQ
+3108387840,3108388863,IR
3108388864,3108389887,NL
3108389888,3108390911,CH
3108390912,3108391935,BE
@@ -60301,7 +58876,7 @@
3108434944,3108435967,CH
3108435968,3108436991,IL
3108436992,3108438015,GB
-3108438016,3108439039,UA
+3108438016,3108439039,US
3108439040,3108440063,DE
3108440064,3108441087,IT
3108441088,3108443135,CH
@@ -60368,7 +58943,7 @@
3108508672,3108509695,CH
3108509696,3108510719,IR
3108510720,3108511743,SI
-3108511744,3108512767,RU
+3108511744,3108512767,PL
3108512768,3108513791,DK
3108513792,3108514815,IT
3108514816,3108515839,ES
@@ -60460,7 +59035,8 @@
3108611072,3108612095,IT
3108612096,3108615167,ES
3108615168,3108616191,RU
-3108616192,3108618239,GB
+3108616192,3108617215,GB
+3108617216,3108618239,ES
3108618240,3108619263,RU
3108619264,3108620287,DK
3108620288,3108621311,TR
@@ -60480,13 +59056,13 @@
3108636672,3108637695,FR
3108637696,3108638719,DE
3108638720,3108639743,ES
-3108639744,3108640767,HU
+3108639744,3108640767,TR
3108640768,3108641791,GB
3108641792,3108642815,CH
3108642816,3108643839,FR
3108643840,3108644863,IT
3108644864,3108645887,FR
-3108645888,3108646911,NL
+3108645888,3108646911,US
3108646912,3108647935,DK
3108647936,3108648959,FR
3108648960,3108649983,IM
@@ -60524,13 +59100,13 @@
3108696064,3108697087,ES
3108697088,3108698111,DE
3108698112,3108699135,IT
-3108699136,3108700159,RU
+3108699136,3108700159,CZ
3108700160,3108701183,PL
3108701184,3108702207,RU
3108702208,3108703231,AT
3108703232,3108704255,ES
3108704256,3108705279,SA
-3108705280,3108706303,GB
+3108705280,3108706303,ES
3108706304,3108707327,DE
3108707328,3108708351,GB
3108708352,3108709375,CH
@@ -60543,7 +59119,7 @@
3108715520,3108716543,GB
3108716544,3108717567,RU
3108717568,3108718591,FR
-3108718592,3108719615,RU
+3108718592,3108719615,DE
3108719616,3108720639,IT
3108720640,3108721663,MD
3108721664,3108723711,RU
@@ -60565,7 +59141,1165 @@
3108739072,3108740095,CH
3108740096,3108741119,NL
3108741120,3108742143,PL
+3108742144,3108743167,DE
3108743168,3108744191,NL
+3108744192,3108745215,GB
+3108745216,3108746239,ES
+3108746240,3108747263,RU
+3108747264,3108748287,DE
+3108748288,3108749311,RU
+3108749312,3108750335,HU
+3108750336,3108751359,IR
+3108751360,3108752383,RU
+3108752384,3108753407,IR
+3108753408,3108754431,NL
+3108754432,3108755455,GB
+3108755456,3108756479,AT
+3108756480,3108757503,NL
+3108757504,3108758527,FR
+3108758528,3108759551,DE
+3108759552,3108760575,CZ
+3108760576,3108761599,LV
+3108761600,3108762623,GB
+3108762624,3108763647,NL
+3108763648,3108764671,RU
+3108764672,3108765695,NL
+3108765696,3108766719,FR
+3108766720,3108767743,PT
+3108767744,3108768767,CZ
+3108768768,3108769791,UA
+3108769792,3108770815,NL
+3108770816,3108772863,FR
+3108772864,3108773887,RO
+3108773888,3108774911,IQ
+3108774912,3108775935,GB
+3108775936,3108776959,DE
+3108776960,3108779007,GB
+3108779008,3108780031,RO
+3108780032,3108781055,IT
+3108781056,3108782079,RO
+3108782080,3108783103,SE
+3108783104,3108784127,UA
+3108784128,3108785151,NL
+3108785152,3108786175,ES
+3108786176,3108787199,RU
+3108787200,3108788223,NO
+3108788224,3108789247,NL
+3108789248,3108790271,GB
+3108790272,3108791295,DE
+3108791296,3108792319,IT
+3108792320,3108793343,PL
+3108793344,3108794367,RU
+3108794368,3108795391,FR
+3108795392,3108796415,DE
+3108796416,3108797439,FR
+3108797440,3108798463,NL
+3108798464,3108799487,AE
+3108799488,3108800511,NL
+3108800512,3108801535,RO
+3108801536,3108802559,TR
+3108802560,3108803583,RU
+3108803584,3108804607,GB
+3108804608,3108805631,TR
+3108805632,3108808703,DE
+3108808704,3108809727,NL
+3108809728,3108810751,DE
+3108810752,3108811775,LB
+3108811776,3108812799,CH
+3108812800,3108813823,GB
+3108813824,3108814847,DE
+3108814848,3108815871,FR
+3108815872,3108817919,TR
+3108817920,3108818943,AE
+3108818944,3108819967,GB
+3108819968,3108822015,ES
+3108822016,3108823039,RU
+3108823040,3108825087,IE
+3108825088,3108826111,RU
+3108826112,3108827135,NL
+3108827136,3108828159,RU
+3108828160,3108829183,MT
+3108829184,3108830207,IR
+3108830208,3108831231,RU
+3108831232,3108832255,TR
+3108832256,3108833279,GB
+3108833280,3108834303,RU
+3108834304,3108835327,BE
+3108835328,3108836351,RU
+3108836352,3108837375,GB
+3108837376,3108838399,NL
+3108838400,3108839423,GE
+3108839424,3108840447,IT
+3108840448,3108841471,GR
+3108841472,3108842495,TR
+3108842496,3108843519,LI
+3108843520,3108844543,IT
+3108844544,3108845567,LI
+3108845568,3108846591,GB
+3108846592,3108847615,BE
+3108847616,3108847639,GB
+3108847640,3108847647,IT
+3108847648,3108848639,GB
+3108848640,3108849663,CH
+3108849664,3108850687,GB
+3108850688,3108851711,PL
+3108851712,3108852735,GB
+3108852736,3108853759,IT
+3108853760,3108854783,TR
+3108854784,3108855807,CH
+3108855808,3108856831,LT
+3108856832,3108857855,UA
+3108857856,3108858879,DE
+3108858880,3108859903,AT
+3108859904,3108860927,FR
+3108860928,3108861951,NO
+3108861952,3108862975,NL
+3108862976,3108863999,BG
+3108864000,3108865023,NL
+3108865024,3108866047,ES
+3108866048,3108867071,RU
+3108867072,3108868095,GB
+3108868096,3108869119,SK
+3108869120,3108870143,RU
+3108870144,3108871167,GB
+3108871168,3108872191,ES
+3108872192,3108873215,IT
+3108873216,3108873343,SG
+3108873344,3108873471,MY
+3108873472,3108873599,SG
+3108873600,3108873727,MY
+3108873728,3108873855,SG
+3108873856,3108873983,ID
+3108873984,3108874111,SG
+3108874112,3108874239,ID
+3108874240,3108875263,ES
+3108875264,3108876287,GB
+3108876288,3108877311,ES
+3108877312,3108878335,FR
+3108878336,3108879359,ES
+3108879360,3108880383,NL
+3108880384,3108881407,AM
+3108881408,3108882431,BE
+3108882432,3108883455,GB
+3108883456,3108884479,RU
+3108884480,3108885503,NL
+3108885504,3108886527,BE
+3108886528,3108888575,RU
+3108888576,3108889599,VA
+3108889600,3108893695,RU
+3108893696,3108894719,FI
+3108894720,3108895743,RO
+3108895744,3108896767,AT
+3108896768,3108897791,ES
+3108897792,3108899839,GB
+3108899840,3108900863,CZ
+3108900864,3108901887,IT
+3108901888,3108902911,IR
+3108902912,3108903935,ES
+3108903936,3108905983,RU
+3108905984,3108907007,BG
+3108907008,3108907263,DE
+3108907264,3108907279,NL
+3108907280,3108907295,BE
+3108907296,3108907311,GB
+3108907312,3108907327,DK
+3108907328,3108907343,ES
+3108907344,3108907359,IT
+3108907360,3108907375,FR
+3108907376,3108907391,AT
+3108907392,3108907407,CH
+3108907408,3108907423,US
+3108907424,3108908031,DE
+3108908032,3108909055,EE
+3108909056,3108910079,IT
+3108910080,3108911103,GB
+3108911104,3108912127,CZ
+3108912128,3108913151,DE
+3108913152,3108914175,IT
+3108914176,3108915199,NO
+3108915200,3108916223,PL
+3108916224,3108917247,RU
+3108917248,3108918271,FR
+3108918272,3108919295,TR
+3108919296,3108920319,GB
+3108920320,3108921343,RU
+3108921344,3108922367,NL
+3108922368,3108923391,CZ
+3108923392,3108924415,IR
+3108924416,3108927487,RU
+3108927488,3108929535,CH
+3108929536,3108930559,CY
+3108930560,3108931583,PL
+3108931584,3108932607,UZ
+3108932608,3108933631,FR
+3108933632,3108934655,AM
+3108934656,3108935679,PL
+3108935680,3108936703,SK
+3108936704,3108937727,FR
+3108937728,3108938751,NL
+3108938752,3108940799,GB
+3108940800,3108941823,SE
+3108941824,3108942847,DE
+3108942848,3108943871,BE
+3108943872,3108944895,DE
+3108944896,3108945919,CH
+3108945920,3108946943,GB
+3108946944,3108947967,NL
+3108947968,3108948991,RU
+3108948992,3108950015,GB
+3108950016,3108951039,NO
+3108951040,3108952063,ES
+3108952064,3108953087,GB
+3108953088,3108954111,GR
+3108954112,3108955135,AL
+3108955136,3108956159,NO
+3108956160,3108956671,UA
+3108956672,3108957183,TJ
+3108957184,3108958207,RU
+3108958208,3108959231,SI
+3108959232,3108960255,AE
+3108960256,3108961279,NL
+3108961280,3108962303,DE
+3108962304,3108963327,AM
+3108963328,3108964351,ES
+3108964352,3108965375,NL
+3108965376,3108966399,TR
+3108966400,3108967423,BY
+3108967424,3108968447,ES
+3108968448,3108969471,DE
+3108969472,3108970495,ES
+3108970496,3108971519,PL
+3108971520,3108972543,ES
+3108972544,3108973567,MD
+3108973568,3108974591,DE
+3108974592,3108975615,RU
+3108975616,3108976639,IT
+3108976640,3108977663,GB
+3108977664,3108978687,IR
+3108978688,3108979711,DE
+3108979712,3108980735,RU
+3108980736,3108981759,DE
+3108981760,3108982783,RU
+3108982784,3108983807,NL
+3108983808,3108984831,NO
+3108984832,3108985855,CH
+3108985856,3108986879,HU
+3108986880,3108987903,IR
+3108987904,3108988927,RU
+3108988928,3108989951,CH
+3108989952,3108991999,GB
+3108992000,3108993023,RU
+3108993024,3108994047,BG
+3108994048,3108995071,DE
+3108995072,3108996095,ES
+3108996096,3108998143,RU
+3108998144,3108999167,GB
+3108999168,3109000191,ES
+3109000192,3109001215,FR
+3109001216,3109002239,NL
+3109002240,3109003263,IR
+3109003264,3109004287,NL
+3109004288,3109005311,SE
+3109005312,3109006335,DE
+3109006336,3109007359,ES
+3109007360,3109008383,GB
+3109008384,3109009407,CH
+3109009408,3109010431,GB
+3109010432,3109011455,GR
+3109011456,3109012479,FR
+3109012480,3109013503,DE
+3109013504,3109015551,CH
+3109015552,3109016575,DE
+3109016576,3109017599,KZ
+3109017600,3109018623,DE
+3109018624,3109019647,FR
+3109019648,3109020671,PT
+3109020672,3109021695,BA
+3109021696,3109022719,CH
+3109022720,3109023743,RU
+3109023744,3109024767,PL
+3109024768,3109025791,LT
+3109025792,3109026815,SA
+3109026816,3109027839,CH
+3109027840,3109028863,BG
+3109028864,3109029887,ES
+3109029888,3109030911,NL
+3109030912,3109031935,GB
+3109031936,3109032959,FR
+3109032960,3109033983,TR
+3109033984,3109035007,JO
+3109035008,3109036031,RU
+3109036032,3109037055,PL
+3109037056,3109038079,NL
+3109038080,3109039103,IQ
+3109039104,3109040127,YE
+3109040128,3109041151,HU
+3109041152,3109042175,NL
+3109042176,3109043199,PL
+3109043200,3109044223,NO
+3109044224,3109045247,CH
+3109045248,3109046271,RS
+3109046272,3109047295,TR
+3109047296,3109048319,PT
+3109048320,3109050367,GB
+3109050368,3109051391,CH
+3109051392,3109052415,DE
+3109052416,3109053439,ME
+3109053440,3109054463,RU
+3109054464,3109055487,JO
+3109055488,3109056511,IL
+3109056512,3109058559,GB
+3109058560,3109059583,DE
+3109059584,3109060607,LU
+3109060608,3109061631,LT
+3109061632,3109062655,GB
+3109062656,3109063679,TR
+3109063680,3109064703,YE
+3109064704,3109065727,DE
+3109065728,3109066751,RU
+3109066752,3109067775,UA
+3109067776,3109068799,NO
+3109068800,3109069823,PL
+3109069824,3109070847,MK
+3109070848,3109071871,DE
+3109071872,3109072895,AZ
+3109072896,3109073919,GB
+3109073920,3109074943,NO
+3109074944,3109075967,DE
+3109075968,3109076991,AT
+3109076992,3109078015,HR
+3109078016,3109079039,IR
+3109079040,3109080063,US
+3109080064,3109081087,RU
+3109081088,3109082111,SE
+3109082112,3109083135,PL
+3109083136,3109084159,SE
+3109084160,3109085183,GB
+3109085184,3109086207,AL
+3109086208,3109087231,RU
+3109087232,3109088255,NL
+3109088256,3109089279,LV
+3109089280,3109090303,AT
+3109090304,3109091327,NL
+3109091328,3109092351,RU
+3109092352,3109093375,SE
+3109093376,3109095423,IT
+3109095424,3109096447,NL
+3109096448,3109097471,NO
+3109097472,3109098495,GB
+3109098496,3109099519,HU
+3109099520,3109100543,RU
+3109100544,3109101567,SI
+3109101568,3109102591,CY
+3109102592,3109103615,DK
+3109103616,3109104639,IR
+3109104640,3109105663,FR
+3109105664,3109106687,LV
+3109106688,3109107711,FR
+3109107712,3109108735,PL
+3109108736,3109109759,RS
+3109109760,3109110783,RU
+3109110784,3109111807,FI
+3109111808,3109112831,IE
+3109112832,3109113855,ES
+3109113856,3109115903,AZ
+3109115904,3109116927,AU
+3109116928,3109117951,GE
+3109117952,3109118975,IR
+3109118976,3109119999,DE
+3109120000,3109121023,PL
+3109121024,3109122047,SE
+3109122048,3109123071,NL
+3109123072,3109124095,DK
+3109124096,3109126143,ES
+3109126144,3109127167,LV
+3109127168,3109128191,ES
+3109128192,3109129215,NL
+3109129216,3109130239,LB
+3109130240,3109131263,RU
+3109131264,3109132287,DE
+3109132288,3109133311,TR
+3109133312,3109134335,FR
+3109134336,3109135359,GB
+3109135360,3109136383,RO
+3109136384,3109137407,GB
+3109137408,3109138431,RU
+3109138432,3109139455,GB
+3109139456,3109140479,ES
+3109140480,3109141503,RU
+3109141504,3109143551,GB
+3109143552,3109144575,GR
+3109144576,3109145599,FR
+3109145600,3109148671,AT
+3109148672,3109149695,AZ
+3109149696,3109150719,RU
+3109150720,3109151743,BE
+3109151744,3109152767,HR
+3109152768,3109153791,GB
+3109153792,3109154815,TR
+3109154816,3109155839,AT
+3109155840,3109156863,GB
+3109156864,3109157887,RU
+3109157888,3109158911,GB
+3109158912,3109159935,IT
+3109159936,3109160959,DE
+3109160960,3109161983,GB
+3109161984,3109163007,RU
+3109163008,3109164031,AT
+3109164032,3109165055,DE
+3109165056,3109166079,RU
+3109166080,3109167103,IR
+3109167104,3109168127,LB
+3109168128,3109169151,BG
+3109169152,3109170175,DE
+3109170176,3109171199,IE
+3109171200,3109172223,GI
+3109172224,3109173247,IL
+3109173248,3109174271,ES
+3109174272,3109175295,GB
+3109175296,3109176319,IR
+3109176320,3109177343,IL
+3109177344,3109178367,IE
+3109178368,3109179391,GB
+3109179392,3109180415,ES
+3109180416,3109181439,DE
+3109181440,3109182463,NL
+3109182464,3109183487,LT
+3109183488,3109184511,LB
+3109184512,3109185535,CH
+3109185536,3109187583,RS
+3109187584,3109188607,IT
+3109188608,3109189631,SA
+3109189632,3109190655,AT
+3109190656,3109191679,NL
+3109191680,3109192703,CH
+3109192704,3109193727,IT
+3109193728,3109194751,IR
+3109194752,3109195775,NL
+3109195776,3109196799,FI
+3109196800,3109197823,FR
+3109197824,3109198847,NL
+3109198848,3109199871,GB
+3109199872,3109200895,DE
+3109200896,3109201919,IR
+3109201920,3109202943,IT
+3109202944,3109203967,RO
+3109203968,3109204991,RU
+3109204992,3109206015,IR
+3109206016,3109209087,NL
+3109209088,3109210111,GB
+3109210112,3109211135,NL
+3109211136,3109212159,CH
+3109212160,3109213183,NL
+3109213184,3109214207,CZ
+3109214208,3109215231,BG
+3109215232,3109216255,TR
+3109216256,3109217279,IT
+3109217280,3109218303,DK
+3109218304,3109219327,HU
+3109219328,3109220351,CZ
+3109220352,3109221375,IE
+3109221376,3109222399,GB
+3109222400,3109223423,PL
+3109223424,3109224447,TR
+3109224448,3109225471,RU
+3109225472,3109226495,EE
+3109226496,3109227519,NL
+3109227520,3109228543,GB
+3109228544,3109230591,NO
+3109230592,3109231615,FR
+3109231616,3109232639,IR
+3109232640,3109233663,NL
+3109233664,3109234687,GE
+3109234688,3109235711,GB
+3109235712,3109236735,PL
+3109236736,3109237759,BE
+3109237760,3109238783,GB
+3109238784,3109239807,CZ
+3109239808,3109240831,CH
+3109240832,3109241855,GB
+3109241856,3109242879,FR
+3109242880,3109245951,IR
+3109245952,3109246975,GB
+3109246976,3109247999,IR
+3109248000,3109249023,SE
+3109249024,3109250047,FR
+3109250048,3109251071,GB
+3109251072,3109252095,ES
+3109252096,3109253119,CH
+3109253120,3109254143,IR
+3109254144,3109255167,FI
+3109255168,3109256191,GB
+3109256192,3109257215,AZ
+3109257216,3109258239,GB
+3109258240,3109259263,ES
+3109259264,3109260287,BE
+3109260288,3109261311,DE
+3109261312,3109262335,TR
+3109262336,3109263359,GI
+3109263360,3109264383,GB
+3109264384,3109265407,US
+3109265408,3109266431,ES
+3109266432,3109267455,NO
+3109267456,3109268479,GB
+3109268480,3109269503,IT
+3109269504,3109270527,GB
+3109270528,3109272575,IR
+3109272576,3109273599,FR
+3109273600,3109274623,NO
+3109274624,3109276671,IR
+3109276672,3109277695,FI
+3109277696,3109278719,IR
+3109278720,3109279743,PT
+3109279744,3109280767,NL
+3109280768,3109281791,IL
+3109281792,3109282815,HU
+3109282816,3109283839,DE
+3109283840,3109284863,IE
+3109284864,3109285887,FR
+3109285888,3109286911,RU
+3109286912,3109287935,TR
+3109287936,3109288959,PT
+3109288960,3109289983,MK
+3109289984,3109291007,NL
+3109291008,3109292031,CH
+3109292032,3109293055,IE
+3109293056,3109295103,GB
+3109295104,3109296127,DE
+3109296128,3109297151,BE
+3109297152,3109298175,SE
+3109298176,3109299199,RU
+3109299200,3109300223,NO
+3109300224,3109301247,RU
+3109301248,3109302271,ES
+3109302272,3109303295,AE
+3109303296,3109304319,SE
+3109304320,3109305343,DE
+3109305344,3109306367,DK
+3109306368,3109307391,RO
+3109307392,3109308415,IQ
+3109308416,3109309439,NL
+3109309440,3109310463,CH
+3109310464,3109311487,DE
+3109311488,3109312511,GB
+3109312512,3109313535,IT
+3109313536,3109314559,GB
+3109314560,3109315583,IT
+3109315584,3109316607,SI
+3109316608,3109317631,LB
+3109317632,3109318655,RU
+3109318656,3109319679,FR
+3109319680,3109320703,ES
+3109320704,3109321727,DE
+3109321728,3109322751,GR
+3109322752,3109323775,ES
+3109323776,3109324799,DK
+3109324800,3109325823,PL
+3109325824,3109326847,NL
+3109326848,3109327871,BA
+3109327872,3109328895,UA
+3109328896,3109329919,CZ
+3109329920,3109330943,RU
+3109330944,3109331967,IR
+3109331968,3109332991,SA
+3109332992,3109334015,IT
+3109334016,3109335039,RU
+3109335040,3109336063,IT
+3109336064,3109337087,TR
+3109337088,3109339135,RU
+3109339136,3109340159,CH
+3109340160,3109341183,NL
+3109341184,3109342207,GB
+3109342208,3109343231,ES
+3109343232,3109344255,CH
+3109344256,3109345279,SE
+3109345280,3109346303,DE
+3109346304,3109347327,IR
+3109347328,3109348351,LB
+3109348352,3109349375,IT
+3109349376,3109350399,CZ
+3109350400,3109351423,SY
+3109351424,3109352447,SE
+3109352448,3109353471,RU
+3109353472,3109354495,SE
+3109354496,3109355519,IE
+3109355520,3109356543,DE
+3109356544,3109357567,DK
+3109357568,3109359615,RU
+3109359616,3109360639,NL
+3109360640,3109362687,IT
+3109362688,3109364735,AT
+3109364736,3109365759,SK
+3109365760,3109366783,GB
+3109366784,3109367807,DK
+3109367808,3109368831,DE
+3109368832,3109369855,FI
+3109369856,3109371903,GB
+3109371904,3109372927,AT
+3109372928,3109373951,IR
+3109373952,3109374975,TR
+3109374976,3109375999,FR
+3109376000,3109377023,NL
+3109377024,3109379071,GB
+3109379072,3109380095,CZ
+3109380096,3109381119,GB
+3109381120,3109382143,SE
+3109382144,3109383167,TR
+3109383168,3109384191,CH
+3109384192,3109385215,NL
+3109385216,3109386239,GB
+3109386240,3109387263,RU
+3109387264,3109388287,CH
+3109388288,3109389311,NO
+3109389312,3109390335,DE
+3109390336,3109391359,IR
+3109391360,3109392383,NL
+3109392384,3109393407,CH
+3109393408,3109394431,SI
+3109394432,3109395455,AL
+3109395456,3109396479,SE
+3109396480,3109397503,DE
+3109397504,3109398527,CZ
+3109398528,3109399551,CH
+3109399552,3109400575,BE
+3109400576,3109402623,RO
+3109402624,3109403647,GB
+3109403648,3109404671,TR
+3109404672,3109405695,IT
+3109405696,3109406719,UA
+3109406720,3109407743,RO
+3109407744,3109408767,TR
+3109408768,3109409791,IR
+3109409792,3109410815,IT
+3109410816,3109411839,RU
+3109411840,3109412863,DE
+3109412864,3109413887,FR
+3109413888,3109414911,CH
+3109414912,3109415935,FR
+3109415936,3109416959,TR
+3109416960,3109417983,FR
+3109417984,3109419007,GB
+3109419008,3109420031,CH
+3109420032,3109421055,IT
+3109421056,3109422079,UA
+3109422080,3109423103,TR
+3109423104,3109424127,ES
+3109424128,3109425151,TR
+3109425152,3109426175,BE
+3109426176,3109427199,GB
+3109427200,3109428223,AT
+3109428224,3109429247,CH
+3109429248,3109430271,ES
+3109430272,3109431295,IR
+3109431296,3109432319,IL
+3109432320,3109433343,MT
+3109433344,3109435391,FR
+3109435392,3109436415,UA
+3109436416,3109437439,SM
+3109437440,3109438463,RO
+3109438464,3109439487,DK
+3109439488,3109440511,ES
+3109440512,3109441535,UA
+3109441536,3109442559,TR
+3109442560,3109443583,IT
+3109443584,3109444607,FR
+3109444608,3109445631,RU
+3109445632,3109446655,CZ
+3109446656,3109448703,SE
+3109448704,3109449727,GB
+3109449728,3109453823,RU
+3109453824,3109454847,IT
+3109454848,3109455871,RU
+3109455872,3109456895,FR
+3109456896,3109457919,PS
+3109457920,3109458943,RU
+3109458944,3109459967,SE
+3109459968,3109460991,TR
+3109460992,3109462015,DE
+3109462016,3109463039,LB
+3109463040,3109464063,TR
+3109464064,3109465087,FR
+3109465088,3109466111,DE
+3109466112,3109467135,FR
+3109467136,3109468159,IR
+3109468160,3109469183,GB
+3109469184,3109470207,DE
+3109470208,3109471231,AM
+3109471232,3109472255,FR
+3109472256,3109473279,IT
+3109473280,3109474303,IL
+3109474304,3109476351,ES
+3109476352,3109477375,GB
+3109477376,3109478399,IS
+3109478400,3109480447,CH
+3109480448,3109481471,DE
+3109481472,3109482495,MK
+3109482496,3109483519,RS
+3109483520,3109484543,TR
+3109484544,3109485567,ES
+3109485568,3109486591,FR
+3109486592,3109487615,DE
+3109487616,3109488639,BE
+3109488640,3109489663,NL
+3109489664,3109490687,GB
+3109490688,3109491711,AT
+3109491712,3109492735,DE
+3109492736,3109493759,TR
+3109493760,3109494783,IT
+3109494784,3109495807,GB
+3109495808,3109498879,AD
+3109498880,3109499903,RU
+3109499904,3109500927,NO
+3109500928,3109502975,GB
+3109502976,3109503999,LB
+3109504000,3109505023,IT
+3109505024,3109506047,DE
+3109506048,3109507071,IT
+3109507072,3109508095,DK
+3109508096,3109509119,ES
+3109509120,3109511167,FR
+3109511168,3109512191,ES
+3109512192,3109513215,FR
+3109513216,3109514239,NL
+3109514240,3109515263,FI
+3109515264,3109516287,CH
+3109516288,3109517311,NL
+3109517312,3109518335,TR
+3109518336,3109519359,BE
+3109519360,3109520383,ES
+3109520384,3109521407,DE
+3109521408,3109522431,PL
+3109522432,3109523455,CZ
+3109523456,3109524479,PL
+3109524480,3109525503,GB
+3109525504,3109527551,NL
+3109527552,3109528575,IL
+3109528576,3109529599,SE
+3109529600,3109530623,LB
+3109530624,3109531647,TR
+3109531648,3109532671,DE
+3109532672,3109533695,IR
+3109533696,3109534719,NL
+3109534720,3109535743,ES
+3109535744,3109537791,RU
+3109537792,3109538815,NL
+3109538816,3109539839,LV
+3109539840,3109541887,GB
+3109541888,3109542911,EE
+3109542912,3109543935,GB
+3109543936,3109544959,DE
+3109544960,3109545983,FR
+3109545984,3109547007,PL
+3109547008,3109548031,AT
+3109548032,3109549055,IT
+3109549056,3109550079,FI
+3109550080,3109551103,NL
+3109551104,3109552127,TR
+3109552128,3109553151,ES
+3109553152,3109554175,TR
+3109554176,3109555199,RU
+3109555200,3109556223,CZ
+3109556224,3109557247,PT
+3109557248,3109558271,GR
+3109558272,3109559295,IQ
+3109559296,3109560319,RO
+3109560320,3109561343,KG
+3109561344,3109562367,RU
+3109562368,3109563391,NO
+3109563392,3109564415,GB
+3109564416,3109565439,IR
+3109565440,3109566463,ES
+3109566464,3109567487,GB
+3109567488,3109568511,DE
+3109568512,3109569535,NL
+3109569536,3109570559,ES
+3109570560,3109571583,CZ
+3109571584,3109572607,CH
+3109572608,3109573631,PS
+3109573632,3109574655,IT
+3109574656,3109575679,PS
+3109575680,3109576703,DE
+3109576704,3109578751,RU
+3109578752,3109579775,FR
+3109579776,3109580799,GB
+3109580800,3109581823,SE
+3109581824,3109582847,CH
+3109582848,3109583871,BE
+3109583872,3109584895,RU
+3109584896,3109585919,RO
+3109585920,3109586943,NL
+3109586944,3109587967,SE
+3109587968,3109588991,NL
+3109588992,3109590015,DE
+3109590016,3109591039,NL
+3109591040,3109592063,IR
+3109592064,3109594111,RU
+3109594112,3109595135,NL
+3109595136,3109596159,IT
+3109596160,3109597183,TR
+3109597184,3109598207,IR
+3109598208,3109599231,NL
+3109599232,3109600255,IT
+3109600256,3109601279,NL
+3109601280,3109602303,GB
+3109602304,3109603327,FR
+3109603328,3109604351,ES
+3109604352,3109605375,IT
+3109605376,3109606399,RU
+3109606400,3109607423,DE
+3109607424,3109608447,GB
+3109608448,3109610495,DE
+3109610496,3109611519,FO
+3109611520,3109612543,ES
+3109612544,3109613567,CH
+3109613568,3109614591,IT
+3109614592,3109615615,DE
+3109615616,3109616639,CZ
+3109616640,3109617663,IR
+3109617664,3109618687,NO
+3109618688,3109619711,NL
+3109619712,3109621759,RU
+3109621760,3109622783,NL
+3109622784,3109623807,US
+3109623808,3109624831,DE
+3109624832,3109625855,ES
+3109625856,3109626879,GB
+3109626880,3109627903,DE
+3109627904,3109628927,RU
+3109628928,3109629951,IT
+3109629952,3109630975,LV
+3109630976,3109631999,FI
+3109632000,3109633023,DE
+3109633024,3109634047,ES
+3109634048,3109635071,PL
+3109635072,3109636095,FR
+3109636096,3109637119,IE
+3109637120,3109637887,NL
+3109637888,3109638143,RU
+3109638144,3109639167,NL
+3109639168,3109640191,LB
+3109640192,3109641215,IQ
+3109641216,3109642239,NO
+3109642240,3109643263,US
+3109643264,3109644287,UA
+3109644288,3109646335,RU
+3109646336,3109647359,IR
+3109647360,3109648383,CZ
+3109648384,3109649407,GB
+3109649408,3109650431,IQ
+3109650432,3109651455,FR
+3109651456,3109652479,NL
+3109652480,3109653503,MT
+3109653504,3109654527,GB
+3109654528,3109655551,CH
+3109655552,3109656575,AT
+3109656576,3109657599,NL
+3109657600,3109658623,AL
+3109658624,3109659647,AT
+3109659648,3109661695,FR
+3109661696,3109662719,NL
+3109662720,3109663743,PL
+3109663744,3109664767,IT
+3109664768,3109665791,PL
+3109665792,3109666815,CH
+3109666816,3109667839,PT
+3109667840,3109668863,DE
+3109668864,3109669887,CH
+3109669888,3109670911,GB
+3109670912,3109671935,DE
+3109671936,3109672959,HR
+3109672960,3109673983,GB
+3109673984,3109675007,FR
+3109675008,3109677055,DE
+3109677056,3109678079,BE
+3109678080,3109679103,MT
+3109679104,3109680127,RO
+3109680128,3109681151,MK
+3109681152,3109682175,NL
+3109682176,3109683199,CH
+3109683200,3109684223,GB
+3109684224,3109685247,TR
+3109685248,3109686271,IT
+3109686272,3109687295,GB
+3109687296,3109688319,SA
+3109688320,3109689343,AT
+3109689344,3109690367,SE
+3109690368,3109691391,ES
+3109691392,3109692415,GB
+3109692416,3109693439,CH
+3109693440,3109694463,AT
+3109694464,3109695487,CY
+3109695488,3109696511,DE
+3109696512,3109697535,DK
+3109697536,3109698559,PT
+3109698560,3109698815,GB
+3109698816,3109699071,FI
+3109699072,3109699583,GB
+3109699584,3109700607,DK
+3109700608,3109701631,IT
+3109701632,3109702655,KZ
+3109702656,3109703679,IE
+3109703680,3109704703,TR
+3109704704,3109705727,HU
+3109705728,3109706751,SA
+3109706752,3109707775,AT
+3109707776,3109708799,FR
+3109708800,3109709823,RU
+3109709824,3109710847,IQ
+3109710848,3109711871,CH
+3109711872,3109712895,DK
+3109712896,3109713919,IT
+3109713920,3109714943,GB
+3109714944,3109715967,PS
+3109715968,3109716991,DE
+3109716992,3109718015,RS
+3109718016,3109719039,NL
+3109719040,3109720063,GB
+3109720064,3109721087,RU
+3109721088,3109722111,ES
+3109722112,3109723135,CH
+3109723136,3109725183,DE
+3109725184,3109726207,SK
+3109726208,3109727231,LB
+3109727232,3109728255,DE
+3109728256,3109729279,SE
+3109729280,3109730303,NO
+3109730304,3109731327,BE
+3109731328,3109732351,IT
+3109732352,3109733375,GB
+3109733376,3109734399,NL
+3109734400,3109735423,DE
+3109735424,3109737471,ES
+3109737472,3109738495,NO
+3109738496,3109739519,GB
+3109739520,3109740543,NL
+3109740544,3109741567,RU
+3109741568,3109743615,DE
+3109743616,3109744639,HU
+3109744640,3109745663,TR
+3109745664,3109746687,DE
+3109746688,3109747711,AZ
+3109747712,3109748735,ES
+3109748736,3109749759,MT
+3109749760,3109750783,DE
+3109750784,3109751807,GB
+3109751808,3109752831,NL
+3109752832,3109753855,IQ
+3109753856,3109754879,GB
+3109754880,3109755903,DE
+3109755904,3109756927,NL
+3109756928,3109757951,AT
+3109757952,3109758975,FR
+3109758976,3109759999,GB
+3109760000,3109762047,DE
+3109762048,3109765119,RU
+3109765120,3109766143,NO
+3109766144,3109767167,ES
+3109767168,3109768191,UA
+3109768192,3109769215,GB
+3109769216,3109770239,AT
+3109770240,3109771263,GB
+3109771264,3109772287,FR
+3109772288,3109773311,NL
+3109773312,3109774335,LB
+3109774336,3109775359,GB
+3109775360,3109776383,DE
+3109776384,3109777407,ES
+3109777408,3109778431,GB
+3109778432,3109779455,CZ
+3109779456,3109782527,GB
+3109782528,3109783551,KG
+3109783552,3109784575,ES
+3109784576,3109785599,HU
+3109785600,3109786623,AT
+3109786624,3109787647,IT
+3109787648,3109788671,NO
+3109788672,3109789695,BA
+3109789696,3109790719,IT
+3109790720,3109792767,CZ
+3109792768,3109795839,RU
+3109795840,3109796863,HU
+3109796864,3109797887,IT
+3109797888,3109798911,ES
+3109798912,3109799935,DE
+3109799936,3109800959,SK
+3109800960,3109801983,CZ
+3109801984,3109803007,AZ
+3109803008,3109804031,PL
+3109804032,3109805055,GB
+3109805056,3109807103,FR
+3109807104,3109808127,ES
+3109808128,3109809151,FR
+3109809152,3109810175,GB
+3109810176,3109811199,IT
+3109811200,3109812223,DE
+3109812224,3109813247,NL
+3109813248,3109814271,RU
+3109814272,3109815295,TR
+3109815296,3109817343,IR
+3109817344,3109818367,TR
+3109818368,3109819391,NL
+3109819392,3109820415,FR
+3109820416,3109821439,GB
+3109821440,3109822463,IR
+3109822464,3109823487,RU
+3109823488,3109824511,FR
+3109824512,3109825535,IR
+3109825536,3109826559,ES
+3109826560,3109827583,PL
+3109827584,3109828607,NO
+3109828608,3109829631,GE
+3109829632,3109830655,NL
+3109830656,3109831679,CH
+3109831680,3109833727,NL
+3109833728,3109834751,DE
+3109834752,3109835775,ES
+3109835776,3109836799,AM
+3109836800,3109837823,SY
+3109837824,3109838847,NL
+3109838848,3109839871,PT
+3109839872,3109840895,AT
+3109840896,3109841919,IT
+3109841920,3109842943,ES
+3109842944,3109843967,FI
+3109843968,3109844991,HU
+3109844992,3109846015,DE
+3109846016,3109847039,GB
+3109847040,3109848063,IE
+3109848064,3109849087,BG
+3109849088,3109852159,RU
+3109852160,3109853183,NL
+3109853184,3109854207,RU
+3109854208,3109855231,PL
+3109855232,3109856255,RU
+3109856256,3109857279,IT
+3109857280,3109858303,RU
+3109858304,3109859327,GB
+3109859328,3109860351,SI
+3109860352,3109863423,RU
+3109863424,3109864447,RO
+3109864448,3109865471,BE
+3109865472,3109866495,AT
+3109866496,3109867519,RU
+3109867520,3109868543,CH
+3109868544,3109869567,TR
+3109869568,3109870591,CZ
+3109870592,3109871615,NL
+3109871616,3109872639,AZ
+3109872640,3109874687,SI
+3109874688,3109875711,ES
+3109875712,3109876735,DK
+3109876736,3109877759,ES
+3109877760,3109878783,PL
+3109878784,3109879807,GB
+3109879808,3109880831,CZ
+3109880832,3109881855,FR
+3109881856,3109882879,AT
+3109882880,3109883903,NL
+3109883904,3109884927,BE
+3109884928,3109885951,GL
+3109885952,3109886975,NL
+3109886976,3109887999,GB
+3109888000,3109888767,PL
+3109888768,3109889023,RU
+3109889024,3109890047,FR
+3109890048,3109891071,RU
+3109891072,3109892095,ES
+3109892096,3109893119,FI
+3109893120,3109894143,TR
+3109894144,3109895167,DE
+3109895168,3109896191,CZ
+3109896192,3109897215,HU
+3109897216,3109898239,TR
+3109898240,3109899263,PL
+3109899264,3109900287,NL
+3109900288,3109901311,ES
+3109901312,3109902335,DK
+3109902336,3109903359,GB
+3109903360,3109904383,PL
+3109904384,3109905407,RO
+3109905408,3109906431,RS
+3109906432,3109907455,SI
+3109907456,3109908479,RU
+3109908480,3109909503,ES
+3109909504,3109910527,DE
+3109910528,3109911551,ES
+3109911552,3109912575,UZ
+3109912576,3109913599,FR
+3109913600,3109914623,PL
+3109914624,3109916671,DE
+3109916672,3109917695,IT
+3109917696,3109918719,IE
+3109918720,3109919743,ES
+3109919744,3109920767,IS
+3109920768,3109921791,SE
+3109921792,3109922815,IR
+3109922816,3109924863,GB
+3109924864,3109925887,IT
+3109925888,3109926911,GB
+3109926912,3109927935,UA
+3109927936,3109928959,DE
+3109928960,3109929983,DK
+3109929984,3109931007,AE
+3109931008,3109932031,DE
+3109932032,3109933055,IT
+3109933056,3109934079,RU
+3109934080,3109935103,AT
+3109935104,3109937151,CH
+3109937152,3109938175,ES
+3109938176,3109939199,GB
+3109939200,3109940223,ES
+3109940224,3109941247,DE
+3109941248,3109942271,PL
+3109942272,3109943295,AE
+3109943296,3109944319,TR
+3109944320,3109945343,RU
+3109945344,3109946367,LU
+3109946368,3109947391,CZ
+3109947392,3109948415,CH
+3109948416,3109949439,SE
+3109949440,3109951487,IT
+3109951488,3109952511,DE
+3109952512,3109953535,GB
+3109953536,3109954559,RU
+3109954560,3109955583,DE
+3109955584,3109956607,BE
+3109956608,3109957631,IE
+3109957632,3109958655,ES
+3109958656,3109959679,CZ
+3109959680,3109960703,FR
+3109960704,3109961727,SE
+3109961728,3109962751,RU
+3109962752,3109963775,PL
+3109963776,3109964799,SE
+3109964800,3109965823,ES
+3109965824,3109966847,IT
+3109966848,3109967871,NL
+3109967872,3109968895,IT
+3109968896,3109969919,NL
+3109969920,3109970943,IR
+3109970944,3109971967,CH
+3109971968,3109972991,DE
+3109972992,3109974015,RU
+3109974016,3109975039,EE
+3109975040,3109976063,GB
+3109976064,3109977087,NL
+3109977088,3109978111,GB
+3109978112,3109979135,SE
+3109979136,3109980159,IT
+3109980160,3109981183,BE
+3109981184,3109982207,FR
+3109982208,3109984255,CH
+3109984256,3109985279,RU
+3109985280,3109986303,SK
+3109986304,3109987327,SI
+3109987328,3109988351,RU
+3109988352,3109989375,NL
+3109989376,3109990399,RU
+3109990400,3109991423,GB
+3109991424,3109992447,NL
+3109992448,3109993471,GB
+3113710318,3113710318,CA
3120562176,3120594943,CO
3120594944,3120599039,AR
3120599040,3120601087,EC
@@ -60585,11 +60319,12 @@
3120691200,3120693247,CO
3120693248,3120726015,BO
3120726016,3120734207,HN
-3120734208,3120738303,BZ
+3120734208,3120735999,RU
+3120736000,3120738303,BZ
3120738304,3120742399,CW
3120742400,3120754687,PY
3120754688,3120755711,CR
-3120755712,3120756735,GY
+3120755712,3120756735,GF
3120757504,3120757759,BZ
3120757760,3120758783,CL
3120758784,3120824319,EC
@@ -60681,9 +60416,13 @@
3124846592,3124848639,AR
3124848640,3124849663,PA
3124849664,3124850687,AR
-3124850688,3124852175,HN
+3124850688,3124851471,HN
+3124851472,3124851487,CM
+3124851488,3124852175,HN
3124852176,3124852191,PH
-3124852192,3124853887,HN
+3124852192,3124853103,HN
+3124853104,3124853119,VN
+3124853120,3124853887,HN
3124853888,3124853903,FR
3124853904,3124854783,HN
3124854784,3124887551,CL
@@ -60701,7 +60440,13 @@
3126857856,3126857983,US
3126857984,3126858495,AR
3126858496,3126858623,US
-3126858624,3126870015,AR
+3126858624,3126861311,AR
+3126861312,3126861439,US
+3126861440,3126862591,AR
+3126862592,3126862719,US
+3126862720,3126863999,AR
+3126864000,3126864127,US
+3126864128,3126870015,AR
3126870016,3126874111,VE
3126874112,3126878207,CR
3126878208,3126882303,PA
@@ -60730,9 +60475,11 @@
3130312704,3130314751,AR
3130314752,3130315775,CL
3130315776,3130316799,CR
-3130316800,3130318847,CW
+3130316800,3130317823,AW
+3130317824,3130318847,CW
3130318848,3130319871,AR
-3130319872,3130320895,RU
+3130319872,3130320639,RU
+3130320640,3130320895,BR
3130320896,3130327039,AR
3130327040,3130458111,DO
3130458112,3130523647,GT
@@ -60774,7 +60521,9 @@
3133079552,3133145087,AR
3133145088,3136985343,BR
3136985344,3136986111,AR
-3136986112,3145727999,BR
+3136986112,3140614143,BR
+3140614144,3140616191,CR
+3140616192,3145727999,BR
3145728000,3149135871,MX
3149135872,3149398015,BR
3149398016,3149881343,MX
@@ -60813,7 +60562,8 @@
3156759432,3156759432,GB
3156759433,3156803583,DE
3156803584,3156869119,TR
-3156869120,3156926463,LU
+3156869120,3156924415,LU
+3156924416,3156926463,SG
3156926464,3156928511,NL
3156928512,3156930559,LU
3156930560,3156933631,US
@@ -60829,9 +60579,13 @@
3157196800,3157262335,PL
3157262336,3157786623,SA
3157786624,3158048767,TR
-3158048768,3158092031,CH
+3158048768,3158070548,CH
+3158070549,3158070549,SE
+3158070550,3158092031,CH
3158092032,3158092287,DE
-3158092288,3158310911,CH
+3158092288,3158214911,CH
+3158214912,3158215167,DE
+3158215168,3158310911,CH
3158310912,3158312959,FI
3158312960,3158315007,AZ
3158315008,3158317055,DE
@@ -60913,7 +60667,8 @@
3158704128,3158835199,KW
3158835200,3158851583,IQ
3158851584,3158859775,RU
-3158859776,3158860031,NL
+3158859776,3158859903,NL
+3158859904,3158860031,CZ
3158860032,3158860287,GB
3158860288,3158860543,NL
3158860544,3158860799,GB
@@ -60941,7 +60696,8 @@
3158866944,3158867199,DE
3158867200,3158867455,HU
3158867456,3158867711,DE
-3158867712,3158867967,NL
+3158867712,3158867839,NL
+3158867840,3158867967,NO
3158867968,3158884351,AZ
3158884352,3158884863,DE
3158884864,3158885119,GB
@@ -61137,15 +60893,17 @@
3161784320,3161800703,FI
3161800704,3161817087,SA
3161817088,3161833471,PL
-3161833472,3161846015,AT
-3161846016,3161847039,MK
-3161847040,3161849855,AT
+3161833472,3161835519,RS
+3161835520,3161841663,AT
+3161841664,3161845759,RS
+3161845760,3161846015,AT
+3161846016,3161846271,MK
+3161846272,3161849855,AT
3161849856,3161866239,BE
3161866240,3161882623,IR
3161882624,3161899007,DE
3161899008,3161915391,AT
3161915392,3161931775,TR
-3161931776,3161948159,SA
3161948160,3161964543,RO
3161964544,3161980927,ES
3161980928,3161989119,SK
@@ -61212,7 +60970,8 @@
3162374144,3162382335,BG
3162382336,3162390527,RU
3162390528,3162398719,SE
-3162398720,3162406911,BE
+3162398720,3162404863,NL
+3162404864,3162406911,BE
3162406912,3162415103,IR
3162415104,3162423295,DE
3162423296,3162431487,NO
@@ -61232,7 +60991,7 @@
3162669056,3162681343,RU
3162681344,3162682367,UA
3162682368,3162682879,RU
-3162682880,3162683135,CZ
+3162682880,3162683135,IE
3162683136,3162683391,ES
3162683392,3162685439,RU
3162685440,3162693631,UA
@@ -61256,7 +61015,9 @@
3163166976,3163167231,FR
3163167232,3163170527,DE
3163170528,3163170559,AE
-3163170560,3163186534,DE
+3163170560,3163184739,DE
+3163184740,3163184740,GR
+3163184741,3163186534,DE
3163186535,3163186535,FR
3163186536,3163186673,DE
3163186674,3163186674,FR
@@ -61275,7 +61036,9 @@
3163684864,3163815935,PL
3163815936,3164078079,NO
3164078080,3164209151,IT
-3164209152,3164340223,CH
+3164209152,3164307327,CH
+3164307328,3164307455,DE
+3164307456,3164340223,CH
3164340224,3164471295,HU
3164471296,3164602367,IR
3164602368,3164667903,SY
@@ -61284,7 +61047,8 @@
3164798976,3164864511,UA
3164864512,3164864703,GB
3164864704,3164864735,ZA
-3164864736,3164897279,GB
+3164864736,3164864767,IE
+3164864768,3164897279,GB
3164897280,3164899327,IT
3164899328,3164901375,RU
3164901376,3164903423,PL
@@ -61304,451 +61068,93 @@
3164936192,3164937749,LT
3164937750,3164937750,FR
3164937751,3164938239,LT
-3164938240,3164946431,FR
-3164946432,3164946435,BE
-3164946436,3164946463,FR
-3164946464,3164946471,IT
-3164946472,3164946655,FR
-3164946656,3164946671,BE
-3164946672,3164946727,FR
+3164938240,3164946727,FR
3164946728,3164946731,NL
-3164946732,3164946751,FR
-3164946752,3164946783,ES
-3164946784,3164947567,FR
-3164947568,3164947575,ES
-3164947576,3164947579,DE
+3164946732,3164947579,FR
3164947580,3164947583,IT
-3164947584,3164947631,FR
-3164947632,3164947635,IT
-3164947636,3164947727,FR
-3164947728,3164947743,GB
-3164947744,3164948671,FR
-3164948672,3164948703,IT
-3164948704,3164948851,FR
-3164948852,3164948855,IT
-3164948856,3164948959,FR
-3164948960,3164948991,ES
-3164948992,3164949103,FR
-3164949104,3164949107,LT
-3164949108,3164949135,FR
+3164947584,3164949135,FR
3164949136,3164949151,NL
-3164949152,3164949171,FR
-3164949172,3164949175,LT
-3164949176,3164949183,FR
-3164949184,3164949191,IT
-3164949192,3164949195,FR
-3164949196,3164949199,IE
-3164949200,3164949311,FR
-3164949312,3164949327,NL
-3164949328,3164949331,DE
-3164949332,3164949407,FR
-3164949408,3164949439,GB
-3164949440,3164949479,FR
-3164949480,3164949487,PL
-3164949488,3164950063,FR
-3164950064,3164950079,IT
-3164950080,3164950407,FR
-3164950408,3164950411,DE
-3164950412,3164950451,FR
-3164950452,3164950455,FI
-3164950456,3164950511,FR
-3164950512,3164950515,NL
-3164950516,3164950519,FR
-3164950520,3164950523,ES
-3164950524,3164950559,FR
-3164950560,3164950591,GB
-3164950592,3164950687,FR
-3164950688,3164950695,PL
+3164949152,3164950695,FR
3164950696,3164950703,NL
-3164950704,3164950707,IT
-3164950708,3164950751,FR
-3164950752,3164950759,NL
-3164950760,3164950767,GB
-3164950768,3164951167,FR
-3164951168,3164951199,PT
-3164951200,3164951247,FR
-3164951248,3164951263,ES
-3164951264,3164951295,PL
-3164951296,3164951455,ES
-3164951456,3164951523,FR
-3164951524,3164951527,PL
-3164951528,3164951547,FR
-3164951548,3164951559,IT
-3164951560,3164951567,NL
-3164951568,3164951583,FR
-3164951584,3164951591,DE
-3164951592,3164951663,FR
+3164950704,3164951663,FR
3164951664,3164951671,PL
-3164951672,3164951675,FR
-3164951676,3164951679,ES
-3164951680,3164951683,FR
-3164951684,3164951687,GB
-3164951688,3164951743,FR
-3164951744,3164951775,PL
-3164951776,3164951807,DE
-3164951808,3164952224,FR
+3164951672,3164952224,FR
3164952225,3164952231,GB
3164952232,3164952233,FR
3164952234,3164952235,GB
3164952236,3164952236,FR
3164952237,3164952237,GB
-3164952238,3164952271,FR
-3164952272,3164952287,DE
-3164952288,3164952303,FR
-3164952304,3164952319,LT
-3164952320,3164952399,FR
-3164952400,3164952415,NL
-3164952416,3164952431,FR
-3164952432,3164952447,ES
-3164952448,3164952479,FR
-3164952480,3164952511,ES
-3164952512,3164952527,IE
-3164952528,3164952831,FR
-3164952832,3164952895,GB
-3164952896,3164953247,FR
-3164953248,3164953255,BE
+3164952238,3164953255,FR
3164953256,3164953263,CZ
-3164953264,3164953383,FR
-3164953384,3164953387,PL
-3164953388,3164953391,FR
+3164953264,3164953391,FR
3164953392,3164953399,NL
-3164953400,3164953443,FR
-3164953444,3164953447,BE
-3164953448,3164953451,PL
-3164953452,3164953463,FR
-3164953464,3164953467,NL
-3164953468,3164953503,FR
-3164953504,3164953511,IT
-3164953512,3164953571,FR
-3164953572,3164953575,ES
-3164953576,3164953583,FR
+3164953400,3164953583,FR
3164953584,3164953599,ES
-3164953600,3164953663,FR
-3164953664,3164953727,CH
-3164953728,3164953855,DE
-3164953856,3164954207,FR
-3164954208,3164954223,LT
-3164954224,3164954255,FR
-3164954256,3164954271,NL
-3164954272,3164954495,FR
-3164954496,3164954499,IT
-3164954500,3164954511,FR
+3164953600,3164954511,FR
3164954512,3164954515,IT
-3164954516,3164954527,FR
-3164954528,3164954543,IE
-3164954544,3164954583,FR
-3164954584,3164954591,IT
-3164954592,3164958815,FR
-3164958816,3164958847,ES
-3164958848,3164958911,BE
-3164958912,3164959039,FR
-3164959040,3164959103,IT
-3164959104,3164959135,PT
-3164959136,3164959239,FR
-3164959240,3164959247,ES
-3164959248,3164959263,FR
-3164959264,3164959279,IT
-3164959280,3164959375,FR
-3164959376,3164959383,DE
-3164959384,3164959387,ES
-3164959388,3164959391,FR
-3164959392,3164959407,ES
-3164959408,3164959663,FR
-3164959664,3164959679,IT
-3164959680,3164959743,PT
-3164959744,3164959935,FR
-3164959936,3164959999,BE
-3164960000,3164960263,FR
+3164954516,3164959551,FR
+3164959552,3164959583,DE
+3164959584,3164960263,FR
3164960264,3164960267,ES
-3164960268,3164960303,FR
-3164960304,3164960319,CH
-3164960320,3164960335,FR
-3164960336,3164960339,LT
-3164960340,3164960363,FR
-3164960364,3164960367,ES
-3164960368,3164960439,FR
+3164960268,3164960439,FR
3164960440,3164960443,DE
-3164960444,3164960471,FR
-3164960472,3164960479,CH
-3164960480,3164960495,ES
-3164960496,3164960599,FR
-3164960600,3164960607,FI
-3164960608,3164960631,FR
-3164960632,3164960639,ES
-3164960640,3164960715,FR
+3164960444,3164960715,FR
3164960716,3164960719,NL
-3164960720,3164960799,FR
+3164960720,3164960787,FR
+3164960788,3164960791,DE
+3164960792,3164960799,FR
3164960800,3164960831,PT
3164960832,3164960843,FR
3164960844,3164960847,NL
-3164960848,3164960943,FR
-3164960944,3164960959,GB
-3164960960,3164960999,FR
-3164961000,3164961003,PL
-3164961004,3164961015,FR
-3164961016,3164961023,NL
-3164961024,3164961151,FR
-3164961152,3164961167,PL
-3164961168,3164961175,IE
-3164961176,3164961335,FR
-3164961336,3164961343,DE
-3164961344,3164961359,FR
-3164961360,3164961363,FI
-3164961364,3164961391,FR
+3164960848,3164961391,FR
3164961392,3164961395,ES
-3164961396,3164961407,FR
-3164961408,3164961471,PT
-3164961472,3164961503,FR
-3164961504,3164961511,IT
-3164961512,3164961519,GB
-3164961520,3164961551,FR
-3164961552,3164961559,ES
-3164961560,3164961563,FR
-3164961564,3164961567,CH
-3164961568,3164961759,FR
-3164961760,3164961763,NL
-3164961764,3164961767,IT
-3164961768,3164961775,FR
-3164961776,3164961783,GB
-3164961784,3164961815,FR
-3164961816,3164961823,IT
-3164961824,3164961859,FR
-3164961860,3164961863,ES
-3164961864,3164961871,FR
-3164961872,3164961887,PL
-3164961888,3164961979,FR
-3164961980,3164961983,IE
-3164961984,3164962015,FR
-3164962016,3164962031,NL
-3164962032,3164962111,FR
-3164962112,3164962143,CH
-3164962144,3164962151,FR
-3164962152,3164962159,BE
-3164962160,3164962247,FR
-3164962248,3164962255,DE
-3164962256,3164962279,FR
-3164962280,3164962283,PL
-3164962284,3164962443,FR
-3164962444,3164962447,CZ
-3164962448,3164962463,FR
-3164962464,3164962471,IT
+3164961396,3164961551,FR
+3164961552,3164961555,ES
+3164961556,3164962471,FR
3164962472,3164962475,ES
-3164962476,3164962631,FR
-3164962632,3164962639,DE
-3164962640,3164962719,FR
-3164962720,3164962723,GB
-3164962724,3164962815,FR
+3164962476,3164962815,FR
3164962816,3164964863,ES
3164964864,3164966911,FI
-3164966912,3164968255,FR
-3164968256,3164968271,DE
-3164968272,3164968287,GB
-3164968288,3164968319,IT
+3164966912,3164967231,FR
+3164967232,3164967239,ES
+3164967240,3164967303,FR
+3164967304,3164967307,DE
+3164967308,3164968319,FR
3164968320,3164968447,GB
3164968448,3164968455,FR
3164968456,3164968459,NL
-3164968460,3164968463,FR
-3164968464,3164968471,IT
-3164968472,3164968687,FR
-3164968688,3164968703,IT
-3164968704,3164968831,FR
-3164968832,3164968835,PL
+3164968460,3164968835,FR
3164968836,3164968839,ES
-3164968840,3164968903,FR
-3164968904,3164968911,IT
-3164968912,3164969019,FR
+3164968840,3164969019,FR
3164969020,3164969023,BE
-3164969024,3164969027,IT
-3164969028,3164969039,FR
+3164969024,3164969039,FR
3164969040,3164969047,NL
-3164969048,3164969191,FR
-3164969192,3164969199,ES
-3164969200,3164969203,DE
-3164969204,3164969503,FR
-3164969504,3164969535,IT
-3164969536,3164969647,FR
-3164969648,3164969655,GB
-3164969656,3164969663,FR
-3164969664,3164969695,BE
-3164969696,3164969895,FR
-3164969896,3164969899,ES
-3164969900,3164969919,FR
-3164969920,3164969951,DE
-3164969952,3164970207,FR
-3164970208,3164970215,PL
-3164970216,3164970219,GB
-3164970220,3164970287,FR
-3164970288,3164970291,ES
-3164970292,3164970295,FR
-3164970296,3164970299,ES
-3164970300,3164970303,FR
-3164970304,3164970335,NL
-3164970336,3164970347,FR
-3164970348,3164970351,ES
-3164970352,3164970359,PL
-3164970360,3164970371,FR
-3164970372,3164970375,CH
-3164970376,3164970383,FR
-3164970384,3164970387,PL
-3164970388,3164970413,FR
+3164969048,3164970413,FR
3164970414,3164970415,IT
-3164970416,3164970495,FR
-3164970496,3164970527,BE
-3164970528,3164970543,FR
-3164970544,3164970551,IE
-3164970552,3164970599,FR
-3164970600,3164970603,BE
-3164970604,3164970607,FR
-3164970608,3164970615,DE
-3164970616,3164970639,FR
-3164970640,3164970647,DE
-3164970648,3164970687,FR
-3164970688,3164970691,DE
-3164970692,3164970879,FR
-3164970880,3164970883,ES
-3164970884,3164970911,FR
-3164970912,3164970915,ES
-3164970916,3164970923,FR
+3164970416,3164970923,FR
3164970924,3164970927,LT
-3164970928,3164971455,FR
-3164971456,3164971459,CZ
-3164971460,3164971567,FR
-3164971568,3164971571,DE
-3164971572,3164971679,FR
-3164971680,3164971711,NL
-3164971712,3164971791,FR
+3164970928,3164971791,FR
3164971792,3164971799,IT
-3164971800,3164971967,FR
-3164971968,3164971983,PT
-3164971984,3164972027,FR
-3164972028,3164972031,DE
-3164972032,3164972499,FR
-3164972500,3164972503,IT
-3164972504,3164972511,FR
-3164972512,3164972527,IT
-3164972528,3164972687,FR
-3164972688,3164972695,PT
-3164972696,3164972703,FR
-3164972704,3164972719,IT
-3164972720,3164973419,FR
+3164971800,3164973419,FR
3164973420,3164973423,ES
-3164973424,3164973627,FR
-3164973628,3164973631,IT
-3164973632,3164973695,GB
-3164973696,3164973759,FR
-3164973760,3164973791,IE
-3164973792,3164973843,FR
-3164973844,3164973847,IE
-3164973848,3164973855,PL
-3164973856,3164973863,FR
-3164973864,3164973867,BE
-3164973868,3164973871,GB
-3164973872,3164973879,FR
-3164973880,3164973883,PL
-3164973884,3164974111,FR
-3164974112,3164974119,ES
-3164974120,3164974127,FR
-3164974128,3164974135,NL
-3164974136,3164974239,FR
-3164974240,3164974271,PT
-3164974272,3164974303,FR
-3164974304,3164974335,NL
+3164973424,3164973663,FR
+3164973664,3164973695,GB
+3164973696,3164974335,FR
3164974336,3164974463,GB
3164974464,3164974527,FR
3164974528,3164974559,ES
-3164974560,3164974647,FR
-3164974648,3164974655,DE
-3164974656,3164974667,FR
-3164974668,3164974671,BE
-3164974672,3164974727,FR
-3164974728,3164974731,CH
-3164974732,3164974887,FR
-3164974888,3164974895,GB
-3164974896,3164975039,FR
-3164975040,3164975103,GB
-3164975104,3164975135,PT
-3164975136,3164975167,FR
-3164975168,3164975199,NL
-3164975200,3164975739,FR
-3164975740,3164975743,BE
-3164975744,3164975815,FR
-3164975816,3164975823,IT
-3164975824,3164975939,FR
-3164975940,3164975943,DE
-3164975944,3164975999,FR
-3164976000,3164976015,ES
-3164976016,3164976063,FR
-3164976064,3164976095,GB
-3164976096,3164976127,FR
-3164976128,3164976135,GB
-3164976136,3164976143,FR
+3164974560,3164974651,FR
+3164974652,3164974655,DE
+3164974656,3164976143,FR
3164976144,3164976159,BE
-3164976160,3164976175,IT
-3164976176,3164976191,FR
-3164976192,3164976207,DE
-3164976208,3164976239,FR
-3164976240,3164976255,GB
-3164976256,3164976263,FR
-3164976264,3164976271,ES
-3164976272,3164976295,FR
+3164976160,3164976295,FR
3164976296,3164976303,IT
-3164976304,3164976315,FR
-3164976316,3164976319,GB
-3164976320,3164976327,ES
-3164976328,3164976463,FR
-3164976464,3164976479,ES
-3164976480,3164976535,FR
-3164976536,3164976539,ES
-3164976540,3164976571,FR
-3164976572,3164976575,DE
-3164976576,3164976583,FR
-3164976584,3164976591,IT
-3164976592,3164976663,FR
-3164976664,3164976671,ES
-3164976672,3164976831,FR
-3164976832,3164976839,DE
-3164976840,3164977415,FR
-3164977416,3164977423,GB
-3164977424,3164977503,FR
-3164977504,3164977535,CZ
-3164977536,3164977551,PT
-3164977552,3164977599,FR
-3164977600,3164977631,GB
-3164977632,3164977647,IE
-3164977648,3164977855,FR
-3164977856,3164977871,LT
-3164977872,3164977883,FR
-3164977884,3164977887,PL
-3164977888,3164977903,FR
-3164977904,3164977907,GB
-3164977908,3164977911,FR
-3164977912,3164977919,IT
-3164977920,3164978063,FR
-3164978064,3164978067,ES
-3164978068,3164978151,FR
-3164978152,3164978155,CH
-3164978156,3164978159,FR
-3164978160,3164978175,ES
-3164978176,3164978607,FR
-3164978608,3164978623,IT
-3164978624,3164978719,FR
-3164978720,3164978751,ES
-3164978752,3164978975,FR
-3164978976,3164978979,PL
-3164978980,3164978983,FR
-3164978984,3164978991,IT
-3164978992,3164978999,FR
-3164979000,3164979003,ES
-3164979004,3164979103,FR
-3164979104,3164979111,IT
-3164979112,3164979159,FR
-3164979160,3164979167,IT
-3164979168,3164995583,FR
-3164995584,3165061119,RU
+3164976304,3164995583,FR
+3164995584,3165061119,NL
3165061120,3165126655,SK
3165126656,3165192191,RU
3165192192,3165257727,GE
-3165257728,3165323263,RO
+3165257728,3165323263,RU
3165323264,3165388799,ES
3165388800,3165417471,MT
3165417472,3165421567,DE
@@ -61757,7 +61163,21 @@
3165429760,3165437951,RO
3165437952,3165439487,AT
3165439488,3165439743,GB
-3165439744,3165454335,AT
+3165439744,3165439999,AT
+3165440000,3165440255,JP
+3165440256,3165440511,HK
+3165440512,3165440767,JP
+3165440768,3165442047,AT
+3165442048,3165442303,TW
+3165442304,3165442559,AU
+3165442560,3165442815,KR
+3165442816,3165443071,HK
+3165443072,3165443583,CA
+3165443584,3165444095,US
+3165444096,3165444351,BR
+3165444352,3165444607,ZA
+3165444608,3165444863,IT
+3165444864,3165454335,AT
3165454336,3165519871,RO
3165519872,3165585407,DE
3165585408,3165650943,CZ
@@ -61768,8 +61188,10 @@
3166568448,3166601215,UA
3166601216,3166609407,RU
3166609408,3166633983,UA
-3166633984,3166638079,RU
-3166638080,3166646271,UA
+3166633984,3166639103,RU
+3166639104,3166639359,UA
+3166639360,3166642175,RU
+3166642176,3166646271,UA
3166646272,3166650367,CZ
3166650368,3166654463,UA
3166654464,3166658559,RU
@@ -61794,68 +61216,111 @@
3166699520,3166961663,DE
3166961664,3167223807,SI
3167223808,3167748095,NL
-3167748096,3167762431,RO
+3167748096,3167760383,RO
+3167760384,3167762431,GB
3167762432,3167764479,MD
-3167764480,3167772671,RO
+3167764480,3167772671,IR
3167772672,3167773695,MD
-3167773696,3167774719,RO
+3167773696,3167774207,RO
+3167774208,3167774335,KR
+3167774336,3167774463,PH
+3167774464,3167774719,RO
3167774720,3167775743,MD
-3167775744,3167776511,RO
+3167775744,3167775999,RO
+3167776000,3167776255,GB
+3167776256,3167776511,RO
3167776512,3167776767,GB
3167776768,3167777791,MD
3167777792,3167778815,RO
3167778816,3167780863,MD
-3167780864,3167797247,RO
+3167780864,3167784959,RO
+3167784960,3167797247,IR
3167797248,3167798271,MD
3167798272,3167799295,RO
-3167799296,3167803391,MD
-3167803392,3167813631,RO
+3167799296,3167800319,MD
+3167800320,3167801343,RO
+3167801344,3167803391,MD
+3167803392,3167804415,RO
+3167804416,3167805439,GB
+3167805440,3167813631,IR
3167813632,3167815679,MD
-3167815680,3167842303,RO
+3167815680,3167825919,IR
+3167825920,3167830015,NL
+3167830016,3167834111,IR
+3167834112,3167838207,IT
+3167838208,3167842303,RO
3167842304,3167843327,ES
-3167843328,3167846399,RO
-3167846400,3167851519,IR
-3167851520,3167852543,DE
-3167852544,3167862783,RO
-3167862784,3167866879,IR
+3167843328,3167844351,RO
+3167844352,3167846399,GB
+3167846400,3167850495,RO
+3167850496,3167851519,IR
+3167851520,3167853055,RO
+3167853056,3167853567,IR
+3167853568,3167854591,RO
+3167854592,3167866879,IR
3167866880,3167868927,RO
3167868928,3167879167,MD
3167879168,3167895551,DE
3167895552,3167899647,IR
3167899648,3167902719,RO
3167902720,3167902975,BE
-3167902976,3167928319,RO
-3167928320,3167932415,IR
-3167932416,3167934463,RO
+3167902976,3167903231,NL
+3167903232,3167903743,RO
+3167903744,3167932415,IR
+3167932416,3167933439,CH
+3167933440,3167933695,RO
+3167933696,3167933951,DE
+3167933952,3167934207,US
+3167934208,3167934463,RO
3167934464,3167935487,ES
-3167935488,3167938559,RO
+3167935488,3167936511,PL
+3167936512,3167938559,RO
3167938560,3167939583,MD
3167939584,3167940607,RO
3167940608,3167943679,MD
-3167943680,3167944447,RO
+3167943680,3167944191,GB
+3167944192,3167944447,RO
3167944448,3167944703,GB
3167944704,3167948799,IR
-3167948800,3167987711,RO
+3167948800,3167951359,RO
+3167951360,3167951487,IN
+3167951488,3167951615,KR
+3167951616,3167952895,RO
+3167952896,3167985663,IR
+3167985664,3167985919,US
+3167985920,3167986431,RO
+3167986432,3167986687,UA
+3167986688,3167987711,RO
3167987712,3167989759,MD
-3167989760,3168005887,RO
+3167989760,3168002047,IR
+3168002048,3168005887,RO
3168005888,3168006143,NL
-3168006144,3168010239,RO
+3168006144,3168008191,SE
+3168008192,3168010239,RO
3168010240,3168011263,MD
3168011264,3168012287,RO
3168012288,3168014335,MD
-3168014336,3168016383,RO
+3168014336,3168015359,ES
+3168015360,3168015871,RO
+3168015872,3168016127,US
+3168016128,3168016383,GB
3168016384,3168018431,MD
-3168018432,3168020479,RO
+3168018432,3168018687,TR
+3168018688,3168020479,RO
3168020480,3168022527,MD
-3168022528,3168026623,IR
-3168026624,3168038911,RO
+3168022528,3168034815,IR
+3168034816,3168038911,RO
3168038912,3168039935,MD
3168039936,3168040959,BE
3168040960,3168050431,RO
3168050432,3168050687,MD
-3168050688,3168071679,RO
-3168071680,3168073727,IR
-3168073728,3168077823,RO
+3168050688,3168051199,RO
+3168051200,3168059391,IR
+3168059392,3168063487,RO
+3168063488,3168073727,IR
+3168073728,3168074239,RO
+3168074240,3168074495,GB
+3168074496,3168077823,RO
3168077824,3168079871,ES
3168079872,3168081919,RO
3168081920,3168083967,FR
@@ -61867,32 +61332,53 @@
3168090112,3168092159,ES
3168092160,3168096255,IR
3168096256,3168100351,MD
-3168100352,3168111615,RO
+3168100352,3168108543,IR
+3168108544,3168110335,RO
+3168110336,3168110591,GB
+3168110592,3168111615,RO
3168111616,3168112639,FR
-3168112640,3168124927,RO
-3168124928,3168126975,IR
-3168126976,3168129023,RO
+3168112640,3168116735,IR
+3168116736,3168120831,RO
+3168120832,3168126975,IR
+3168126976,3168127999,RO
+3168128000,3168128255,NL
+3168128256,3168128511,RO
+3168128512,3168129023,GB
3168129024,3168130047,MD
-3168130048,3168132095,RO
+3168130048,3168130559,RO
+3168130560,3168131071,GB
+3168131072,3168131583,RO
+3168131584,3168131711,IN
+3168131712,3168131839,CN
+3168131840,3168132095,RO
3168132096,3168133119,MD
-3168133120,3168136191,RO
-3168136192,3168137215,MD
-3168137216,3168138239,RO
-3168138240,3168139263,MD
-3168139264,3168156671,RO
+3168133120,3168135679,RO
+3168135680,3168136191,CZ
+3168136192,3168137471,RO
+3168137984,3168138239,NL
+3168138240,3168139263,RO
+3168139264,3168141311,GB
+3168141312,3168156671,RO
3168156672,3168157695,MD
3168157696,3168161791,IR
-3168161792,3168165119,RO
+3168161792,3168164351,RO
+3168164352,3168164863,GB
+3168164864,3168165119,RO
3168165120,3168165375,DE
-3168165376,3168165887,RO
+3168165376,3168165887,GB
3168165888,3168166911,MD
-3168166912,3168169983,RO
+3168166912,3168167935,FR
+3168167936,3168169983,RO
3168169984,3168172031,ES
-3168172032,3168176127,RO
+3168172032,3168172543,IR
+3168172544,3168174079,RO
+3168174080,3168176127,LT
3168176128,3168177151,MD
3168177152,3168178175,RO
3168178176,3168179199,MD
-3168179200,3168191999,RO
+3168179200,3168182271,RO
+3168182272,3168190463,IR
+3168190464,3168191999,RO
3168192000,3168192255,GB
3168192256,3168192511,RO
3168192512,3168194559,MD
@@ -61900,8 +61386,21 @@
3168199680,3168200703,MD
3168200704,3168202751,IR
3168202752,3168203775,ES
-3168203776,3168267263,RO
-3168267264,3168269311,MD
+3168203776,3168211455,RO
+3168211456,3168211967,CZ
+3168211968,3168212223,RO
+3168212224,3168212479,US
+3168212480,3168212735,RO
+3168212736,3168212991,FR
+3168212992,3168215551,RO
+3168215552,3168215807,TH
+3168215808,3168237567,RO
+3168237568,3168239615,PS
+3168239616,3168243711,IR
+3168243712,3168247807,RO
+3168247808,3168264191,IR
+3168264192,3168268287,RO
+3168268288,3168269311,MD
3168269312,3168271359,RO
3168271360,3168272383,MD
3168272384,3168534527,IT
@@ -61936,9 +61435,7 @@
3169648640,3169714175,MD
3169714176,3169779711,FI
3169779712,3169845247,UA
-3169845248,3169851391,RO
-3169851392,3169853439,MD
-3169853440,3169854463,RO
+3169845248,3169854463,RO
3169854464,3169855487,IR
3169855488,3169863167,RO
3169863168,3169863423,MD
@@ -61947,14 +61444,29 @@
3169864704,3169869823,RO
3169869824,3169878015,MD
3169878016,3169882111,RO
-3169882112,3169886207,MD
-3169886208,3169894399,RO
-3169894400,3169895423,MD
+3169882112,3169886207,SE
+3169886208,3169894399,GB
+3169894400,3169895423,ES
3169895424,3169896447,RO
3169896448,3169898495,ES
-3169898496,3169927423,RO
+3169898496,3169899263,RO
+3169899264,3169899391,CN
+3169899392,3169899519,TW
+3169899520,3169921023,RO
+3169921024,3169921791,GB
+3169921792,3169922047,RO
+3169922048,3169922303,GB
+3169922304,3169922559,RO
+3169922560,3169923071,GB
+3169923072,3169927423,RO
3169927424,3169927679,NL
-3169927680,3169976319,RO
+3169927680,3169935359,RO
+3169935360,3169937407,ES
+3169937408,3169951743,RO
+3169951744,3169955839,SE
+3169955840,3169960191,RO
+3169960192,3169960447,NL
+3169960448,3169976319,RO
3169976320,3170111487,RU
3170111488,3170115583,MD
3170115584,3170119679,RU
@@ -61975,9 +61487,16 @@
3170295808,3170303999,RU
3170304000,3170312191,SY
3170312192,3170320383,RU
-3170320384,3170328575,JO
+3170320384,3170327593,JO
+3170327594,3170327594,US
+3170327595,3170328575,JO
3170328576,3170336767,UA
-3170336768,3170369535,RO
+3170336768,3170338815,RO
+3170338816,3170344959,ES
+3170344960,3170347007,RO
+3170347008,3170349055,ES
+3170349056,3170361343,KZ
+3170361344,3170369535,RO
3170369536,3170500607,SA
3170500608,3170631679,PT
3170631680,3170664447,PL
@@ -62040,13 +61559,17 @@
3187936048,3187936063,HN
3187936064,3187936711,GT
3187936712,3187936719,HN
-3187936720,3187939847,GT
+3187936720,3187937799,GT
+3187937800,3187937807,HN
+3187937808,3187939847,GT
3187939848,3187939855,HN
3187939856,3187940479,GT
3187940480,3187940543,HN
3187940544,3187940963,GT
3187940964,3187940967,HN
-3187940968,3187943055,GT
+3187940968,3187941207,GT
+3187941208,3187941215,HN
+3187941216,3187943055,GT
3187943056,3187943063,HN
3187943064,3187943127,GT
3187943128,3187943135,HN
@@ -62060,7 +61583,9 @@
3187945972,3187945975,HN
3187945976,3187946111,GT
3187946112,3187946239,HN
-3187946240,3187946639,GT
+3187946240,3187946495,GT
+3187946496,3187946511,HN
+3187946512,3187946639,GT
3187946640,3187946647,HN
3187946648,3187947983,GT
3187947984,3187947987,HN
@@ -62119,8 +61644,7 @@
3188242432,3188244479,AR
3188244480,3188260863,CO
3188260864,3188269055,AR
-3188269056,3188269183,VE
-3188269184,3188269311,MX
+3188269056,3188269311,MX
3188269312,3188269439,VE
3188269440,3188269567,CO
3188269568,3188269823,MX
@@ -62211,14 +61735,17 @@
3191108960,3191108991,CO
3191108992,3191109119,PE
3191109120,3191109631,MX
-3191109632,3191111679,PE
+3191109632,3191110655,PE
+3191110656,3191111167,MX
+3191111168,3191111679,PE
3191111680,3191128063,PY
3191128064,3191132159,EC
3191132160,3191136255,AR
3191136256,3191144447,DO
3191144448,3191152639,SV
3191152640,3191155711,NI
-3191155712,3191156735,SV
+3191155712,3191156223,SV
+3191156224,3191156735,NI
3191156736,3191169023,HN
3191169024,3191193599,SV
3191193600,3191209983,HN
@@ -62233,18 +61760,22 @@
3191472128,3191603199,TT
3191603200,3191603519,CO
3191603520,3191603583,PR
-3191603584,3191607807,CO
+3191603584,3191607295,CO
+3191607296,3191607327,MX
+3191607328,3191607807,CO
3191607808,3191608319,CL
3191608320,3191610623,CO
-3191610624,3191610879,PE
-3191610880,3191611391,CO
+3191610624,3191611135,PE
+3191611136,3191611391,CO
3191611392,3191619583,VE
-3191619584,3191635967,CL
+3191619584,3191619903,CL
+3191619904,3191619935,VE
+3191619936,3191635967,CL
3191635968,3191637759,CO
3191637760,3191638015,AR
3191638016,3191647743,CO
-3191647744,3191647807,AR
-3191647808,3191648255,CO
+3191647744,3191647935,AR
+3191647936,3191648255,CO
3191648256,3191649791,US
3191649792,3191650303,CO
3191650304,3191650815,US
@@ -62265,8 +61796,8 @@
3191681280,3191681535,US
3191681536,3191682303,AR
3191682304,3191682559,US
-3191682560,3191683327,AR
-3191683328,3191685119,US
+3191682560,3191683071,AR
+3191683072,3191685119,US
3191685120,3191685631,AR
3191685632,3191685887,US
3191685888,3191687167,AR
@@ -62283,26 +61814,23 @@
3191704576,3191704831,CO
3191704832,3191705343,US
3191705344,3191705599,CO
-3191705600,3191705855,US
-3191705856,3191706111,CO
-3191706112,3191706623,US
+3191705600,3191706623,US
3191706624,3191707647,CO
3191707648,3191719935,CL
3191719936,3191722495,AR
-3191722496,3191724031,CL
-3191724032,3191725055,CO
+3191722496,3191725055,CL
3191725056,3191725311,AR
3191725312,3191725567,CL
3191725568,3191726079,CO
3191726080,3191726335,AR
-3191726336,3191726591,CO
+3191726336,3191726591,CL
3191726592,3191726847,AR
-3191726848,3191727103,CO
+3191726848,3191727103,CL
3191727104,3191727359,AR
3191727360,3191729919,CO
3191729920,3191730431,CL
3191730432,3191730687,AR
-3191730688,3191730943,CO
+3191730688,3191730943,CL
3191730944,3191731199,AR
3191731200,3191731711,CO
3191731712,3191731967,AR
@@ -62340,24 +61868,27 @@
3193595648,3193599743,CO
3193599744,3193600255,EC
3193600256,3193604351,CO
-3193604352,3193605119,EC
-3193605120,3193605375,CO
-3193605376,3193605631,EC
+3193604352,3193605631,EC
3193605632,3193606143,CO
3193606144,3193606399,EC
3193606400,3193606655,CO
3193606656,3193607167,EC
3193607168,3193617151,CO
3193617152,3193617407,EC
-3193617408,3193622527,CO
+3193617408,3193621759,CO
+3193621760,3193622015,EC
+3193622016,3193622527,CO
3193622528,3193623551,EC
3193623552,3193625599,CO
3193625600,3193625855,EC
3193625856,3193626111,CO
3193626112,3193626623,US
-3193626624,3193629439,CO
-3193629440,3193629695,EC
-3193629696,3193634815,CO
+3193626624,3193628927,CO
+3193628928,3193629695,EC
+3193629696,3193630975,CO
+3193630976,3193631231,EC
+3193631232,3193634559,CO
+3193634560,3193634815,EC
3193634816,3193700351,CL
3193700352,3193722751,HN
3193722752,3193722879,GT
@@ -62368,14 +61899,12 @@
3193735168,3193735679,US
3193735680,3193736191,AR
3193736192,3193736447,US
-3193736448,3193737471,AR
-3193737472,3193739007,US
+3193736448,3193737215,AR
+3193737216,3193739007,US
3193739008,3193739263,AR
-3193739264,3193740543,US
-3193740544,3193741311,AR
-3193741312,3193741823,US
-3193741824,3193742079,AR
-3193742080,3193742335,US
+3193739264,3193740799,US
+3193740800,3193741311,AR
+3193741312,3193742335,US
3193742336,3193742591,AR
3193742592,3193742847,US
3193742848,3193743231,AR
@@ -62397,18 +61926,20 @@
3193747456,3193747583,AR
3193747584,3193748479,US
3193748480,3193748863,AR
-3193748864,3193749759,US
-3193749760,3193750015,AR
-3193750016,3193750271,US
+3193748864,3193750271,US
3193750272,3193750527,AR
3193750528,3193750783,US
-3193750784,3193751807,AR
-3193751808,3193752703,US
-3193752704,3193752831,AR
-3193752832,3193752959,US
+3193750784,3193751039,AR
+3193751040,3193751295,US
+3193751296,3193751807,AR
+3193751808,3193752959,US
3193752960,3193753087,AR
3193753088,3193753343,US
-3193753344,3193754623,AR
+3193753344,3193753471,AR
+3193753472,3193753599,US
+3193753600,3193754239,AR
+3193754240,3193754367,US
+3193754368,3193754623,AR
3193754624,3193754751,US
3193754752,3193755135,AR
3193755136,3193755263,US
@@ -62449,9 +61980,9 @@
3194028032,3194044415,AR
3194044416,3194052607,CO
3194052608,3194056703,TT
-3194056704,3194057727,CW
+3194056704,3194057727,BQ
3194057728,3194057983,CA
-3194057984,3194058751,CW
+3194057984,3194058751,BQ
3194058752,3194060799,AR
3194060800,3194068991,CO
3194068992,3194071039,PA
@@ -62461,10 +61992,12 @@
3194085376,3194093567,VE
3194093568,3194126335,SR
3194126336,3194127359,GT
-3194127360,3194129407,PE
+3194127360,3194128383,PE
+3194128384,3194129407,NI
3194129408,3194129663,AR
-3194129664,3194129919,BR
-3194129920,3194130431,AR
+3194129664,3194130047,BR
+3194130048,3194130175,CO
+3194130176,3194130431,AR
3194130432,3194134527,BR
3194134528,3194135551,AR
3194135552,3194136063,GT
@@ -62550,8 +62083,8 @@
3194659840,3194660351,US
3194660352,3194661119,AR
3194661120,3194661375,US
-3194661376,3194662143,AR
-3194662144,3194662399,US
+3194661376,3194661887,AR
+3194661888,3194662399,US
3194662400,3194663167,AR
3194663168,3194664447,US
3194664448,3194664959,AR
@@ -62582,7 +62115,7 @@
3194740736,3194742783,CL
3194742784,3194744831,EC
3194744832,3194746879,AR
-3194746880,3194748927,CW
+3194746880,3194748927,BQ
3194748928,3194757119,UY
3194757120,3194765311,AR
3194765312,3194767359,EC
@@ -62676,7 +62209,7 @@
3195139072,3195140095,CL
3195140096,3195142143,CR
3195142144,3195142399,MX
-3195142400,3195150335,VE
+3195142400,3195150335,PA
3195150336,3195158527,CL
3195158528,3195199487,AR
3195199488,3195201535,PY
@@ -62731,7 +62264,9 @@
3195721728,3195723775,VE
3195723776,3195731967,AR
3195731968,3195736063,EC
-3195736064,3195737087,BQ
+3195736064,3195736575,BQ
+3195736576,3195736831,AI
+3195736832,3195737087,BQ
3195737088,3195738111,CW
3195738112,3195740159,HN
3195740160,3195740415,US
@@ -62769,7 +62304,7 @@
3195840512,3195842559,AR
3195842560,3195846655,BR
3195846656,3195852799,AR
-3195852800,3195853823,CW
+3195852800,3195853823,SX
3195853824,3195854847,GY
3195854848,3195859967,AR
3195859968,3195862015,CR
@@ -62829,7 +62364,8 @@
3199729664,3199762431,NI
3199762432,3199778815,CO
3199778816,3199779839,AR
-3199779840,3199780863,CR
+3199779840,3199780735,CR
+3199780736,3199780863,US
3199780864,3199782911,CO
3199782912,3199784959,AR
3199784960,3199785983,EC
@@ -62887,7 +62423,9 @@
3201867776,3201869823,PE
3201869824,3201869855,AR
3201869856,3201869871,PE
-3201869872,3201871743,AR
+3201869872,3201869919,AR
+3201869920,3201869935,PE
+3201869936,3201871743,AR
3201871744,3201871807,PE
3201871808,3201871811,AR
3201871812,3201871815,PE
@@ -62940,7 +62478,9 @@
3203566592,3203566847,PA
3203566848,3203568639,CO
3203568640,3203569663,SV
-3203569664,3203661823,CO
+3203569664,3203570609,CO
+3203570610,3203570610,CR
+3203570611,3203661823,CO
3203661824,3203923967,AR
3203923968,3204448255,CO
3204448256,3208642559,BR
@@ -62960,9 +62500,12 @@
3210742080,3210742271,BR
3210742272,3210742527,CL
3210742528,3210742543,KR
-3210742544,3210742567,CL
+3210742544,3210742560,CL
+3210742561,3210742561,BR
+3210742562,3210742567,CL
3210742568,3210742575,US
-3210742576,3210743039,CL
+3210742576,3210742591,BR
+3210742592,3210743039,CL
3210743040,3210743055,GR
3210743056,3210743079,CL
3210743080,3210743087,US
@@ -62972,50 +62515,63 @@
3210743568,3210743583,US
3210743584,3210744063,CL
3210744064,3210744079,TR
-3210744080,3210744575,CL
+3210744080,3210744319,CL
+3210744320,3210744575,US
3210744576,3210744591,BE
3210744592,3210745343,CL
3210745344,3210745359,RU
3210745360,3210745375,US
-3210745376,3210745855,CL
+3210745376,3210745599,CL
+3210745600,3210745855,US
3210745856,3210745871,IT
3210745872,3210746367,BR
3210746368,3210746383,SE
3210746384,3210746879,CL
3210746880,3210746895,CH
-3210746896,3210747647,CL
-3210747648,3210747903,US
+3210746896,3210747135,CL
+3210747136,3210747903,US
3210747904,3210748159,BR
3210748160,3210748175,JP
3210748176,3210748415,BR
-3210748416,3210751999,CL
-3210752000,3210752255,US
-3210752256,3210755839,CL
+3210748416,3210749951,CL
+3210749952,3210752255,US
+3210752256,3210752511,CL
+3210752512,3210755839,US
3210755840,3210755855,MY
3210755856,3210755871,US
-3210755872,3210757119,CL
-3210757120,3210757375,US
-3210757376,3210763519,CL
-3210763520,3210763775,US
-3210763776,3210764031,CL
+3210755872,3210756351,CL
+3210756352,3210756607,US
+3210756608,3210756863,DE
+3210756864,3210757119,RU
+3210757120,3210758911,US
+3210758912,3210759167,CL
+3210759168,3210759423,US
+3210759424,3210762495,CL
+3210762496,3210762751,US
+3210762752,3210763007,CL
+3210763008,3210764031,US
3210764032,3210764047,IE
3210764048,3210764063,US
-3210764064,3210765055,CL
+3210764064,3210764287,CL
+3210764288,3210764543,US
+3210764544,3210765055,CL
3210765056,3210765071,SE
-3210765072,3210769919,CL
+3210765072,3210765311,BR
+3210765312,3210769919,CL
3210769920,3210770175,US
3210770176,3210771199,CL
3210771200,3210771215,TH
3210771216,3210772991,CL
3210772992,3210773247,US
-3210773248,3210773503,CL
+3210773248,3210773503,BR
3210773504,3210773519,PL
-3210773520,3210774271,CL
+3210773520,3210774015,CL
+3210774016,3210774271,US
3210774272,3210774287,NO
-3210774288,3210774527,CL
-3210774528,3210774783,BR
+3210774288,3210774783,BR
3210774784,3210774799,IT
-3210774800,3210775295,BR
+3210774800,3210775039,BR
+3210775040,3210775295,US
3210775296,3210775311,CH
3210775312,3210775551,BR
3210775552,3210776319,CL
@@ -63024,7 +62580,10 @@
3210776832,3210777087,US
3210777088,3210778367,CL
3210778368,3210778623,US
-3210778624,3210782975,CL
+3210778624,3210779903,CL
+3210779904,3210780159,US
+3210780160,3210782719,CL
+3210782720,3210782975,US
3210782976,3210782991,TR
3210782992,3210783487,CL
3210783488,3210783503,JP
@@ -63032,17 +62591,56 @@
3210784000,3210784015,JP
3210784016,3210784511,CL
3210784512,3210784527,BE
-3210784528,3210786047,CL
+3210784528,3210785791,CL
+3210785792,3210786047,BR
3210786048,3210786063,AU
-3210786064,3210786559,CL
+3210786064,3210786303,CL
+3210786304,3210786559,US
3210786560,3210786575,GR
-3210786576,3210803071,CL
+3210786576,3210787071,CL
+3210787072,3210787839,US
+3210787840,3210788351,CL
+3210788352,3210788607,US
+3210788608,3210789119,CL
+3210789120,3210789375,US
+3210789376,3210790143,CL
+3210790144,3210790399,US
+3210790400,3210790655,CL
+3210790656,3210790911,US
+3210790912,3210791679,CL
+3210791680,3210791935,US
+3210791936,3210792447,CL
+3210792448,3210792703,US
+3210792704,3210794239,CL
+3210794240,3210794751,US
+3210794752,3210796287,CL
+3210796288,3210797055,US
+3210797056,3210797311,CL
+3210797312,3210797567,US
+3210797568,3210797823,CL
+3210797824,3210798079,US
+3210798080,3210799103,CL
+3210799104,3210799359,US
+3210799360,3210799615,CL
+3210799616,3210800639,US
+3210800640,3210800895,CL
+3210800896,3210801151,US
+3210801152,3210801663,CL
+3210801664,3210802431,US
+3210802432,3210802687,CL
+3210802688,3210802943,US
+3210802944,3210803071,CL
3210803072,3210803087,US
3210803088,3210803199,CL
3210803200,3210803201,US
3210803202,3210803327,CL
3210803328,3210803455,BR
-3210803456,3210805247,CL
+3210803456,3210803711,CL
+3210803712,3210804223,US
+3210804224,3210804479,CL
+3210804480,3210804735,US
+3210804736,3210804991,CL
+3210804992,3210805247,US
3210805248,3210809343,PA
3210809344,3210810367,VE
3210810368,3210811391,PA
@@ -63068,34 +62666,52 @@
3210928128,3210936319,NI
3210936320,3211067391,EC
3211067392,3211071487,US
-3211071488,3211071999,DE
-3211072000,3211073023,US
-3211073024,3211073279,CA
-3211073280,3211073535,US
-3211073536,3211075583,NL
+3211071488,3211071743,NL
+3211071744,3211071999,DE
+3211072000,3211072027,US
+3211072028,3211072057,BR
+3211072058,3211072511,US
+3211072512,3211073023,NL
+3211073024,3211073279,GB
+3211073280,3211073791,US
+3211073792,3211074047,LT
+3211074048,3211074815,NL
+3211074816,3211075327,DK
+3211075328,3211075583,NL
3211075584,3211075839,US
3211075840,3211076095,CL
3211076096,3211076607,LT
-3211076608,3211079167,CL
+3211076608,3211078655,US
+3211078656,3211079167,CL
3211079168,3211079423,NL
-3211079424,3211080703,CL
-3211080704,3211080959,NL
+3211079424,3211079679,CL
+3211079680,3211079935,GB
+3211079936,3211080703,CL
+3211080704,3211080959,GB
3211080960,3211081215,CL
3211081216,3211081727,CH
-3211081728,3211083775,CL
+3211081728,3211082239,US
+3211082240,3211082751,GB
+3211082752,3211083007,SG
+3211083008,3211083519,US
+3211083520,3211083775,HK
3211083776,3211083791,RU
-3211083792,3211083855,CL
+3211083792,3211083839,CL
+3211083840,3211083855,GB
3211083856,3211083871,DE
-3211083872,3211084287,CL
+3211083872,3211084031,CL
+3211084032,3211084287,DE
3211084288,3211084303,NL
-3211084304,3211084367,CL
+3211084304,3211084351,CL
+3211084352,3211084367,GB
3211084368,3211084383,DE
3211084384,3211084559,CL
3211084560,3211084575,DE
3211084576,3211084671,CL
3211084672,3211084799,BY
3211084800,3211084815,AT
-3211084816,3211084879,CL
+3211084816,3211084863,CL
+3211084864,3211084879,GB
3211084880,3211084895,DE
3211084896,3211084927,CL
3211084928,3211085055,US
@@ -63103,18 +62719,17 @@
3211085072,3211085087,DE
3211085088,3211085311,CL
3211085312,3211085327,GB
-3211085328,3211085391,CL
+3211085328,3211085375,CL
+3211085376,3211085391,GB
3211085392,3211085407,DE
3211085408,3211085583,CL
3211085584,3211085599,DE
3211085600,3211085695,CL
3211085696,3211085823,GE
3211085824,3211085839,TH
-3211085840,3211085903,CL
-3211085904,3211085919,DE
-3211085920,3211086095,CL
-3211086096,3211086111,US
-3211086112,3211086335,CL
+3211085840,3211085887,DE
+3211085888,3211085903,GB
+3211085904,3211086335,DE
3211086336,3211086351,FR
3211086352,3211086367,DE
3211086368,3211086463,CL
@@ -63145,30 +62760,18 @@
3211088656,3211088671,DE
3211088672,3211088895,CL
3211088896,3211088911,DK
-3211088912,3211088927,DE
-3211088928,3211089167,CL
-3211089168,3211089183,DE
-3211089184,3211089407,CL
+3211088912,3211089407,DE
3211089408,3211089423,GB
3211089424,3211089439,DE
3211089440,3211089535,CL
3211089536,3211089663,US
-3211089664,3211089679,CL
-3211089680,3211089695,DE
-3211089696,3211089919,CL
+3211089664,3211089919,DE
3211089920,3211089935,GB
-3211089936,3211089951,DE
-3211089952,3211090191,CL
-3211090192,3211090207,DE
-3211090208,3211090431,CL
+3211089936,3211090431,DE
3211090432,3211090447,GR
-3211090448,3211090463,DE
-3211090464,3211090703,CL
-3211090704,3211090719,DE
-3211090720,3211090943,CL
+3211090448,3211090943,DE
3211090944,3211090959,TR
-3211090960,3211090975,DE
-3211090976,3211091071,CL
+3211090960,3211091071,DE
3211091072,3211091199,US
3211091200,3211091215,CL
3211091216,3211091231,DE
@@ -63208,10 +62811,7 @@
3211094288,3211094303,DE
3211094304,3211094527,CL
3211094528,3211094543,HR
-3211094544,3211094559,DE
-3211094560,3211094799,CL
-3211094800,3211094815,DE
-3211094816,3211095039,CL
+3211094544,3211095039,DE
3211095040,3211095055,ES
3211095056,3211095071,DE
3211095072,3211095311,CL
@@ -63221,15 +62821,13 @@
3211095568,3211095583,DE
3211095584,3211095679,CL
3211095680,3211095807,US
-3211095808,3211095823,CL
-3211095824,3211095839,DE
-3211095840,3211096063,CL
+3211095808,3211096063,DE
3211096064,3211096079,GB
3211096080,3211096095,DE
3211096096,3211096335,CL
3211096336,3211096351,DE
3211096352,3211096575,CL
-3211096576,3211096831,GB
+3211096576,3211096831,DE
3211096832,3211096847,CL
3211096848,3211096863,DE
3211096864,3211097087,CL
@@ -63248,32 +62846,44 @@
3211098368,3211098383,CL
3211098384,3211098399,DE
3211098400,3211098623,CL
-3211098624,3211098879,US
+3211098624,3211098879,DE
3211098880,3211098895,CL
3211098896,3211098911,DE
3211098912,3211099135,CL
-3211099136,3211099391,DE
-3211099392,3211099407,CL
-3211099408,3211099423,DE
-3211099424,3211099647,CL
-3211099648,3211099663,DE
-3211099664,3211099679,GB
-3211099680,3211099711,CL
+3211099136,3211099679,DE
+3211099680,3211099711,GB
3211099712,3211099775,DE
3211099776,3211099903,GB
3211099904,3211099919,CL
3211099920,3211099935,DE
-3211099936,3211101951,CL
+3211099936,3211101183,CL
+3211101184,3211101951,US
3211101952,3211102207,AR
3211102208,3211104767,AU
3211104768,3211106303,CL
3211106304,3211108351,US
-3211108352,3211124735,CL
+3211108352,3211113471,CL
+3211113472,3211113727,GB
+3211113728,3211113983,LT
+3211113984,3211114495,CL
+3211114496,3211114751,IT
+3211114752,3211115007,US
+3211115008,3211115263,NO
+3211115264,3211115519,BE
+3211115520,3211115775,DK
+3211115776,3211116287,RU
+3211116288,3211116543,US
+3211116544,3211116799,CL
+3211116800,3211117055,US
+3211117056,3211117567,CL
+3211117568,3211122687,US
+3211122688,3211124735,CL
3211124736,3211128831,US
3211128832,3211129343,CL
3211129344,3211129599,SG
3211129600,3211129855,NL
-3211129856,3211132927,CL
+3211129856,3211130367,CL
+3211130368,3211132927,US
3211132928,3211137023,CO
3211137024,3211141119,AR
3211141120,3211142143,CL
@@ -63393,14 +63003,17 @@
3221226240,3221226495,US
3221226496,3221227519,KY
3221227520,3221242879,US
-3221242880,3221243391,GB
+3221242880,3221243135,AU
+3221243136,3221243391,DE
3221243392,3221243647,US
3221243648,3221243903,SG
3221243904,3221258239,US
3221258240,3221291007,CA
3221291008,3221334269,US
3221334270,3221334270,DZ
-3221334271,3221560319,US
+3221334271,3221469175,US
+3221469176,3221469183,CA
+3221469184,3221560319,US
3221560320,3221561087,GB
3221561088,3221562367,US
3221562368,3221562623,SE
@@ -63439,23 +63052,28 @@
3221647104,3221647359,FR
3221647360,3221656831,US
3221656832,3221657087,AU
-3221657088,3221795583,US
-3221795584,3221795839,IN
-3221795840,3221801983,US
-3221801984,3221802239,IN
-3221802240,3221803775,US
-3221803776,3221804031,IN
-3221804032,3221806079,US
-3221806080,3221806335,IN
-3221806336,3221806591,US
-3221806592,3221806847,IN
-3221806848,3221991167,US
+3221657088,3221757951,US
+3221757952,3221761023,IN
+3221761024,3221790719,US
+3221790720,3221794815,IN
+3221794816,3221795583,US
+3221795584,3221796095,IN
+3221796096,3221796351,US
+3221796352,3221796607,IN
+3221796608,3221796863,US
+3221796864,3221808895,IN
+3221808896,3221809151,US
+3221809152,3221815295,IN
+3221815296,3221946367,US
+3221946368,3221964287,FR
+3221964288,3221964543,US
+3221964544,3221985791,FR
+3221985792,3221986047,US
+3221986048,3221991167,FR
3221991168,3221991423,NZ
-3221991424,3221993727,US
-3221993728,3221993983,FR
-3221993984,3222003967,US
-3222003968,3222004223,FR
-3222004224,3222011903,US
+3221991424,3222005503,FR
+3222005504,3222005759,US
+3222005760,3222011903,FR
3222011904,3222012159,CA
3222012160,3222012415,NL
3222012416,3222023935,US
@@ -63478,7 +63096,7 @@
3222036992,3222037247,CA
3222037248,3222037503,NL
3222037504,3222039807,US
-3222042368,3222044927,US
+3222042624,3222044927,US
3222044928,3222045183,CA
3222045184,3222056447,US
3222056448,3222059007,CA
@@ -63512,7 +63130,12 @@
3222405376,3222405631,GB
3222405632,3222455039,US
3222455040,3222455295,NL
-3222455296,3222866431,US
+3222455296,3222524159,US
+3222524160,3222524415,JP
+3222524416,3222524927,SG
+3222524928,3222525183,US
+3222525184,3222525439,DE
+3222525440,3222866431,US
3222866944,3222867199,US
3222867712,3222872319,US
3222872320,3222872575,CA
@@ -63730,7 +63353,8 @@
3223589376,3223594495,SE
3223594496,3223595007,AT
3223595008,3223599103,SE
-3223599104,3223599615,AT
+3223599104,3223599359,AT
+3223599360,3223599615,IS
3223599616,3223601663,SE
3223601664,3223602175,GB
3223602176,3223606527,SE
@@ -63766,7 +63390,9 @@
3223638272,3223638527,GB
3223638528,3223640831,SE
3223640832,3223641087,GB
-3223641088,3223646207,SE
+3223641088,3223644415,SE
+3223644416,3223644671,DE
+3223644672,3223646207,SE
3223646208,3223646463,IT
3223646464,3223646975,SE
3223646976,3223647231,IT
@@ -63896,7 +63522,7 @@
3224099584,3224099839,CA
3224099840,3224101375,US
3224101376,3224102399,AU
-3224102912,3224103423,US
+3224102400,3224103423,US
3224103424,3224103679,NL
3224103680,3224104703,US
3224104704,3224104959,AU
@@ -63943,8 +63569,7 @@
3224430336,3224430591,NL
3224430592,3224431103,US
3224431104,3224431359,CA
-3224431360,3224431615,US
-3224432128,3224434687,US
+3224431360,3224434687,US
3224434688,3224434943,AU
3224434944,3224435967,US
3224435968,3224436223,MU
@@ -63954,7 +63579,9 @@
3224567808,3224571903,NO
3224571904,3224580095,JP
3224580096,3224580351,US
-3224580352,3224633343,JP
+3224580352,3224616959,JP
+3224616960,3224617471,US
+3224617472,3224633343,JP
3224633344,3224646399,DE
3224646400,3224651775,US
3224651776,3224652287,AU
@@ -64094,8 +63721,7 @@
3224890880,3224891135,AU
3224891136,3224892415,US
3224892416,3224892671,NL
-3224892672,3224893951,US
-3224894464,3224899071,US
+3224892672,3224899071,US
3224899072,3224899327,AT
3224899328,3224908543,US
3224908544,3224908799,CA
@@ -64135,8 +63761,7 @@
3225314304,3225314559,GB
3225314560,3225420799,US
3225420800,3225423871,CA
-3225423872,3225424383,US
-3225424896,3225426943,US
+3225423872,3225426943,US
3225426944,3225427199,NL
3225427200,3225427455,US
3225427456,3225427967,CA
@@ -64152,18 +63777,20 @@
3225451264,3225451519,MS
3225451520,3225451775,US
3225451776,3225452031,NL
+3225452032,3225452543,US
3225452544,3225456639,CA
3225456640,3225459711,US
3225459712,3225459967,CA
3225459968,3225460479,US
-3225460480,3225462015,CA
+3225460480,3225460735,CA
+3225460736,3225460991,US
+3225460992,3225462015,CA
3225462016,3225468927,US
-3225468928,3225469951,CA
+3225468928,3225470463,CA
3225470464,3225471487,US
3225471488,3225471743,NL
3225471744,3225472255,HK
-3225472256,3225472511,US
-3225473024,3225498367,US
+3225472256,3225498367,US
3225498368,3225503487,NL
3225503488,3225506303,US
3225506304,3225508863,AU
@@ -64182,8 +63809,9 @@
3225524480,3225524735,GB
3225524736,3225526271,US
3225526272,3225528319,BB
-3225529088,3225529343,US
-3225529600,3225530367,US
+3225528320,3225528831,US
+3225528832,3225529087,VI
+3225529088,3225530367,US
3225530368,3225530623,PR
3225530624,3225531903,US
3225531904,3225532159,AU
@@ -64210,8 +63838,9 @@
3225619456,3225619711,AU
3225619712,3225624575,US
3225624576,3225625599,CA
+3225625600,3225626367,US
3225626368,3225626623,GB
-3225626880,3225627391,US
+3225626624,3225627391,US
3225627392,3225627647,NL
3225627648,3225627903,US
3225627904,3225628159,CA
@@ -64233,7 +63862,7 @@
3225637888,3225638399,AU
3225638400,3225638655,US
3225638656,3225638911,GB
-3225639424,3225640447,US
+3225638912,3225640447,US
3225640448,3225640703,NL
3225640704,3225641983,US
3225641984,3225643263,GB
@@ -64275,25 +63904,26 @@
3225701376,3225709567,NO
3225709568,3225710079,US
3225710080,3225710591,AU
-3225710592,3225711615,US
-3225712128,3225715455,US
+3225710592,3225715455,US
3225715456,3225715711,CA
3225715712,3225715967,AU
3225715968,3225716991,US
3225716992,3225717247,CA
3225717248,3225717503,MU
3225717504,3225717759,AU
-3225717760,3225720063,US
+3225717760,3225720575,US
3225720576,3225721343,GB
-3225721344,3225723903,US
-3225723904,3225725439,DE
+3225721344,3225723647,US
+3225723648,3225723903,CA
+3225723904,3225724159,US
+3225724160,3225725439,DE
3225725440,3225725695,GB
3225725696,3225726207,AU
3225726208,3225726463,US
3225726464,3225726719,NL
3225726720,3225726975,US
3225726976,3225727231,NL
-3225727232,3225727487,US
+3225727232,3225727743,US
3225727744,3225727999,AU
3225728000,3225728511,US
3225728512,3225728767,NL
@@ -64301,8 +63931,9 @@
3225729024,3225729279,CA
3225729280,3225729535,US
3225729536,3225729791,NL
-3225729792,3225733887,US
-3225734144,3225735167,US
+3225729792,3225730047,US
+3225730048,3225730303,CA
+3225730304,3225735423,US
3225735424,3225735679,PT
3225735680,3225735935,US
3225735936,3225737215,DE
@@ -64314,36 +63945,35 @@
3225739520,3225740543,US
3225740544,3225740799,CA
3225740800,3225741055,NL
-3225741056,3225741823,US
+3225741056,3225742079,US
3225742080,3225745919,JP
3225745920,3225746687,NL
3225746688,3225746943,US
3225746944,3225747199,NL
-3225747456,3225747711,US
-3225748480,3225752575,US
-3225752832,3225753087,US
-3225753600,3225757695,US
+3225747200,3225747711,US
+3225747712,3225747967,CA
+3225747968,3225757695,US
3225757696,3225758719,CA
-3225759232,3225759487,US
-3225759744,3225763839,US
+3225759232,3225763839,US
3225763840,3225764095,BE
+3225764096,3225764863,US
3225764864,3225765887,CA
+3225765888,3225766399,US
3225766400,3225766655,CA
-3225766912,3225773055,US
+3225766656,3225769471,US
+3225769472,3225769983,CA
+3225769984,3225773311,US
3225773312,3225773567,CA
-3225774080,3225776383,US
+3225773568,3225776639,US
+3225776640,3225777151,CA
3225777152,3225777407,AU
-3225777408,3225777663,US
-3225778176,3225780479,US
+3225777408,3225781247,US
3225781248,3225782271,CA
-3225782272,3225785343,US
-3225785344,3225788415,CA
-3225788416,3225795583,US
-3225796096,3225796351,US
-3225796608,3225806847,US
+3225782272,3225785599,US
+3225785600,3225788159,CA
+3225788160,3225807359,US
3225807360,3225807615,DE
-3225807872,3225809919,US
-3225810688,3225812991,US
+3225807616,3225812991,US
3225812992,3225843711,FR
3225843712,3225847039,US
3225847040,3225847551,NL
@@ -64351,8 +63981,7 @@
3225847808,3225848063,NL
3225848064,3225848831,US
3225848832,3225853951,DE
-3225853952,3225854719,US
-3225854976,3225857023,US
+3225853952,3225857023,US
3225857024,3225857279,CA
3225857280,3225857535,US
3225857536,3225857791,AU
@@ -64360,30 +63989,33 @@
3225858048,3225858559,CA
3225858560,3225858815,US
3225858816,3225859583,JP
-3225860096,3225861887,US
-3225862144,3225868287,US
+3225860096,3225868287,US
3225868288,3225868543,AU
3225868544,3225869055,US
3225869056,3225869311,AU
-3225869312,3225870335,US
+3225869312,3225869567,CA
+3225869568,3225870335,US
3225870336,3225870591,CA
3225870592,3225873663,US
3225873664,3225873919,ZA
3225873920,3225874943,US
3225874944,3225875199,GB
-3225875456,3225875967,US
-3225876480,3225878271,US
+3225875200,3225878527,US
3225878528,3225880319,SE
3225880320,3225880575,US
3225880576,3225881343,SE
3225881344,3225881599,IT
-3225881600,3225885183,SE
+3225881600,3225882367,SE
+3225882368,3225882623,DE
+3225882624,3225882879,SE
+3225882880,3225883391,DE
+3225883392,3225885183,SE
3225885184,3225885695,AT
3225885696,3225887999,SE
3225888000,3225888255,GB
3225888256,3225894399,SE
-3225894400,3225894911,GB
-3225894912,3225905407,SE
+3225894400,3225895423,GB
+3225895424,3225905407,SE
3225905408,3225905663,IT
3225905664,3225913855,SE
3225913856,3225914111,DE
@@ -64391,7 +64023,9 @@
3225915136,3225915391,DK
3225915392,3225917183,SE
3225917184,3225917439,NL
-3225917440,3225918463,SE
+3225917440,3225917695,SE
+3225917696,3225917951,NL
+3225917952,3225918463,SE
3225918464,3225918719,GB
3225918720,3225920767,SE
3225920768,3225921023,GB
@@ -64416,93 +64050,96 @@
3225936896,3225937407,SE
3225937408,3225937663,US
3225937664,3225938175,SE
-3225938176,3225938431,RU
+3225938176,3225938431,CH
3225938432,3225938687,US
3225938688,3225940991,SE
3225940992,3225941247,IL
3225941248,3225941503,IT
3225941504,3225942271,SE
-3225942272,3225942527,HU
+3225942272,3225942527,BE
3225942528,3225944063,SE
-3225944064,3226008831,TW
-3226008832,3226009343,US
-3226009600,3226010879,US
+3225944064,3225944831,US
+3225944832,3226008831,TW
+3226008832,3226010879,US
3226010880,3226011135,CA
3226011136,3226012671,US
3226012672,3226012927,AU
-3226012928,3226014207,US
+3226012928,3226014463,US
3226014464,3226014975,NL
3226014976,3226015487,AU
+3226015488,3226015743,US
3226015744,3226016255,AU
3226016256,3226018303,US
3226018304,3226018559,DE
3226018560,3226021119,CH
-3226021376,3226023423,US
-3226023680,3226026495,US
+3226021120,3226026495,US
3226026496,3226026751,AU
-3226026752,3226064383,US
-3226064640,3226067455,US
+3226026752,3226067455,US
3226067456,3226067711,BE
3226067712,3226068223,US
3226068224,3226068479,NL
3226068480,3226074879,US
3226074880,3226075135,AT
-3226075136,3226109951,US
-3226110208,3226110719,US
+3226075136,3226110719,US
3226110720,3226128639,AU
-3226128640,3226140671,US
+3226128640,3226140927,US
3226140928,3226141695,CA
3226141696,3226141951,US
3226141952,3226143487,CA
+3226143488,3226143743,US
3226143744,3226156543,CA
+3226156544,3226156799,US
3226156800,3226157567,CA
3226157568,3226157823,US
3226157824,3226167807,CA
-3226168064,3226175487,CA
-3226175744,3226175999,US
+3226167808,3226168063,US
+3226168064,3226175231,CA
+3226175232,3226175999,US
3226176000,3226177535,CA
3226177536,3226178559,US
3226178560,3226188543,CA
-3226189056,3226189311,CA
-3226189568,3226189823,CA
-3226189824,3226190847,US
-3226191360,3226191615,US
+3226188544,3226188799,PR
+3226188800,3226189055,US
+3226189056,3226189823,CA
+3226189824,3226191871,US
3226191872,3226194175,CA
+3226194176,3226194431,US
3226194432,3226194687,CA
+3226194688,3226194943,US
3226194944,3226201087,CA
3226201088,3226201343,US
3226201344,3226201855,CA
3226202112,3226205439,CA
3226205440,3226205695,AE
3226205696,3226205951,CA
-3226206208,3226207231,US
+3226205952,3226207743,US
3226207744,3226215423,GB
-3226215424,3226236159,US
-3226237184,3226237439,US
+3226215424,3226237439,US
3226237440,3226237695,AU
-3226237696,3226241535,DE
-3226241536,3226241791,LI
-3226241792,3226250495,DE
+3226237696,3226240255,DE
+3226240256,3226240511,US
+3226240512,3226241535,DE
+3226241536,3226241791,AT
+3226241792,3226248447,DE
+3226248448,3226248703,IE
+3226248704,3226250495,DE
3226250496,3226251263,US
3226251264,3226251519,DE
-3226251520,3226252287,US
-3226252544,3226267903,US
+3226251520,3226267903,US
3226267904,3226268159,DE
3226268160,3226268415,PT
3226268416,3226268927,AT
3226268928,3226269951,DE
3226269952,3226270719,US
-3226271744,3226273791,US
+3226271488,3226273791,US
3226273792,3226274047,AU
3226274048,3226274559,US
3226274560,3226274815,NL
3226274816,3226276095,US
3226276096,3226276351,AU
-3226276352,3226276863,US
-3226277632,3226283519,US
+3226276352,3226283519,US
3226283520,3226291199,CA
-3226291200,3226300159,US
-3226300416,3226300927,US
+3226291200,3226300927,US
3226300928,3226301439,DE
3226301440,3226302463,US
3226302464,3226303487,FI
@@ -64510,10 +64147,7 @@
3226305536,3226307327,GB
3226307328,3226307583,US
3226307584,3226308095,NL
-3226308096,3226317823,US
-3226318080,3226318335,US
-3226319360,3226319615,US
-3226319872,3226366975,US
+3226308096,3226366975,US
3226366976,3226367231,CA
3226367232,3226374143,US
3226374144,3226375423,DE
@@ -64530,65 +64164,67 @@
3226473728,3226473983,PT
3226473984,3226474495,US
3226474496,3226474751,CL
-3226475264,3226475519,US
-3226475776,3226476287,US
+3226474752,3226476287,US
3226476288,3226479359,CH
-3226479360,3226479871,US
+3226479360,3226480127,US
3226480128,3226480383,NL
3226480384,3226481407,US
3226481408,3226481663,NL
-3226481664,3226483199,US
-3226483968,3226484479,US
-3226484736,3226488831,US
-3226489088,3226520575,US
-3226521344,3226521855,US
+3226481664,3226488831,US
+3226488832,3226489087,CA
+3226489088,3226521855,US
3226521856,3226522111,BR
-3226522112,3226523135,US
-3226523392,3226536191,US
+3226522112,3226536959,US
3226536960,3226542079,CA
-3226542080,3226546431,US
-3226547200,3226548223,CA
+3226542080,3226547199,US
+3226547200,3226548735,CA
+3226548736,3226548991,US
3226548992,3226549247,BE
-3226549248,3226550271,NL
-3226550272,3226552319,US
-3226552832,3226553087,US
-3226553344,3226555391,US
-3226555648,3226555903,CA
-3226556416,3226556671,US
-3226557440,3226558463,US
-3226558720,3226558975,US
-3226559488,3226561535,US
+3226549248,3226549503,US
+3226549504,3226550015,NL
+3226550016,3226550783,US
+3226550784,3226551039,CA
+3226551040,3226551807,US
+3226551808,3226552319,CA
+3226552320,3226552831,VI
+3226552832,3226555391,US
+3226555392,3226555903,CA
+3226555904,3226556671,US
+3226556672,3226556927,CA
+3226556928,3226561791,US
3226561792,3226562047,NL
-3226563072,3226563327,US
-3226563584,3226564607,US
-3226564864,3226565119,NL
+3226562048,3226564863,US
+3226564864,3226565119,DE
+3226565120,3226565375,US
3226565376,3226565631,FI
-3226565632,3226569727,US
-3226569984,3226570239,US
-3226570752,3226574847,US
+3226565632,3226574847,US
3226574848,3226575103,FI
-3226576384,3226576639,US
+3226575104,3226575359,US
+3226575360,3226576383,CA
+3226576384,3226576895,US
3226576896,3226578943,CA
-3226578944,3226579967,US
+3226578944,3226580479,US
3226580480,3226581247,FI
3226581248,3226583295,US
+3226583296,3226583551,CA
3226583552,3226583807,NL
-3226584064,3226584415,US
+3226583808,3226584415,US
3226584416,3226584447,AU
-3226584448,3226591231,US
+3226584448,3226590207,US
+3226590208,3226591231,NL
3226591232,3226592255,CA
+3226592256,3226592767,US
3226592768,3226593023,NL
+3226593024,3226593791,US
3226593792,3226594047,NL
-3226594304,3226598911,US
-3226599424,3226625535,US
+3226594048,3226625535,US
3226625792,3226626047,US
3226626048,3226626303,CA
-3226626304,3226627327,US
-3226627584,3226629375,US
+3226626304,3226629375,US
3226629376,3226629631,CA
3226629632,3226630399,US
3226630400,3226630655,NL
-3226630912,3226631167,US
+3226630656,3226631167,US
3226631168,3226631423,NL
3226631424,3226631935,US
3226631936,3226632191,NL
@@ -64599,16 +64235,15 @@
3226635520,3226635775,US
3226635776,3226636031,ZA
3226636032,3226636287,AU
-3226637056,3226637823,US
+3226636288,3226637823,US
3226637824,3226638079,CA
-3226638080,3226638335,US
+3226638080,3226638591,US
3226638592,3226638847,NL
3226638848,3226639615,US
3226639616,3226640127,AT
3226640128,3226640639,US
3226640640,3226640895,AU
-3226640896,3226652927,US
-3226653696,3226654207,US
+3226640896,3226654207,US
3226654208,3226654463,NL
3226654464,3226655743,US
3226655744,3226656255,NL
@@ -64617,29 +64252,29 @@
3226658304,3226658559,AU
3226658560,3226661119,US
3226661120,3226661375,NL
-3226661888,3226662143,US
-3226662912,3226664959,US
+3226661888,3226664959,US
3226664960,3226690815,FI
3226690816,3226691071,CA
3226691072,3226691327,NL
+3226691328,3226691583,US
3226691584,3226691839,AU
-3226691840,3226693631,US
-3226694144,3226695167,US
+3226691840,3226695167,US
3226695168,3226695679,AU
3226695680,3226695935,US
3226695936,3226696191,CA
3226696192,3226696703,AU
-3226696704,3226704895,US
+3226696704,3226705151,US
3226705152,3226705407,AU
3226705408,3226705919,US
3226705920,3226706175,FR
-3226706176,3226706943,US
+3226706176,3226707199,US
3226707200,3226707455,PL
3226707456,3226715391,TW
3226715392,3226715647,US
3226715648,3226715903,AU
3226715904,3226716159,US
3226716160,3226716415,GB
+3226716416,3226716671,US
3226716672,3226716927,GB
3226716928,3226718207,US
3226720768,3226721279,JP
@@ -64652,27 +64287,24 @@
3226724096,3226724351,AU
3226724352,3226725631,US
3226725632,3226726143,AU
-3226726144,3226727679,US
-3226727936,3226728191,US
+3226726144,3226728191,US
3226728192,3226728447,CA
-3226728448,3226729983,US
-3226731008,3226731519,US
+3226728448,3226731775,US
3226731776,3226732031,GB
-3226732288,3226733567,US
+3226732032,3226733567,US
3226733568,3226733823,MX
3226733824,3226734079,NL
3226734080,3226734335,US
3226734336,3226734591,NL
3226734592,3226735615,US
-3226735872,3226736383,US
+3226735872,3226736639,US
3226736896,3226737407,US
3226737408,3226737663,AT
3226737664,3226738175,US
3226738176,3226738431,NL
3226738432,3226738687,US
3226738688,3226739199,NL
-3226739712,3226743807,US
-3226744576,3226746367,US
+3226739200,3226746367,US
3226746368,3226746623,NL
3226746624,3226748927,US
3226749440,3226749695,US
@@ -64683,16 +64315,18 @@
3226753280,3226753535,AU
3226753536,3226753791,SI
3226753792,3226754303,HR
-3226754304,3226757375,SI
+3226754304,3226756095,SI
+3226756096,3226756351,US
+3226756352,3226757375,SI
3226757376,3226757887,HR
3226757888,3226758655,SI
-3226758912,3226762751,US
+3226758656,3226763007,US
3226763008,3226770687,IT
3226770688,3226772991,US
3226772992,3226773247,NL
3226773248,3226774783,US
3226774784,3226775039,GB
-3226775040,3226775295,US
+3226775040,3226775551,US
3226775552,3226782463,FI
3226782720,3226783743,FI
3226783744,3226784767,US
@@ -64700,7 +64334,7 @@
3226785024,3226786559,US
3226786560,3226786815,AU
3226786816,3226787327,NL
-3226787328,3226788095,US
+3226787328,3226788351,US
3226788352,3226789375,HU
3226789376,3226789631,AU
3226789632,3226791167,US
@@ -64712,8 +64346,7 @@
3226793216,3226793983,DE
3226793984,3226795263,US
3226795264,3226795519,AU
-3226795520,3226795775,US
-3226796032,3226800127,US
+3226795520,3226800127,US
3226800128,3226800639,DE
3226800640,3226811391,US
3226811392,3226811647,DE
@@ -64721,7 +64354,7 @@
3226824192,3226824291,DE
3226824292,3226824293,US
3226824294,3226824447,DE
-3226824448,3226861567,US
+3226824448,3226861823,US
3226861824,3226862079,CA
3226862080,3226864383,US
3226864384,3226864639,RU
@@ -64736,19 +64369,17 @@
3226868480,3226868735,GB
3226868736,3226884351,US
3226884352,3226884607,NL
-3226884608,3226892799,US
-3226893056,3226893567,US
+3226884608,3226893567,US
3226893568,3226894079,NL
3226894080,3226894335,GB
3226894336,3226894591,US
3226894592,3226894847,AU
-3226895104,3226895359,US
+3226894848,3226895359,US
3226895360,3226895871,AU
3226895872,3226896127,NL
3226896128,3226896639,US
3226896640,3226897151,NL
-3226897152,3226902527,US
-3226903040,3226903295,US
+3226897152,3226903295,US
3226903296,3226903551,NL
3226903552,3226903807,US
3226903808,3226904063,AU
@@ -64757,7 +64388,9 @@
3226904832,3226905087,NL
3226905088,3226926591,US
3226926592,3226926847,NL
+3226926848,3226927103,US
3226927104,3226992639,NL
+3226992640,3226992895,US
3226992896,3226993151,NL
3226993152,3226993663,US
3226993664,3226993919,NL
@@ -64765,53 +64398,51 @@
3226994176,3226994687,AU
3226994688,3226994943,US
3226994944,3226995455,NL
-3226995456,3226996479,US
+3226995456,3226996991,US
3226996992,3226997247,NL
-3226998016,3226998527,US
+3226997248,3226998527,US
3226998528,3226999039,NL
-3226999040,3227005439,US
-3227005696,3227013119,US
+3226999040,3227013119,US
3227013120,3227013375,AU
3227013376,3227013887,US
3227013888,3227014399,NL
3227014400,3227014655,AU
3227014656,3227014911,NL
-3227014912,3227017215,US
+3227014912,3227017471,US
3227017472,3227017983,NL
+3227018240,3227018495,US
3227018496,3227019007,AU
3227019008,3227020287,US
3227020288,3227020543,NL
-3227020800,3227022847,US
+3227020544,3227022847,US
3227022848,3227023103,NL
3227023104,3227023359,AU
-3227023360,3227023615,US
-3227023872,3227024127,US
+3227023360,3227024127,US
3227024128,3227024383,NL
-3227024384,3227024895,US
+3227024384,3227025407,US
3227025408,3227025663,NL
3227025664,3227025919,US
3227025920,3227026175,GB
3227026176,3227026687,US
3227026688,3227026943,GB
-3227027456,3227038207,US
-3227038720,3227040255,US
+3227026944,3227027455,CA
+3227027456,3227040511,US
3227040512,3227040767,AU
3227040768,3227041279,US
3227041280,3227041535,AU
3227041536,3227042815,US
3227042816,3227043071,NL
-3227043072,3227043327,US
-3227043584,3227044863,US
+3227043072,3227044863,US
3227044864,3227045119,NL
3227045120,3227053567,US
3227053568,3227054079,NL
3227054080,3227056639,US
-3227056640,3227058175,PT
+3227056640,3227057919,PT
+3227057920,3227058175,US
3227058176,3227123711,FI
3227123712,3227224831,US
3227225088,3227225599,NL
-3227225600,3227226111,US
-3227226368,3227234559,US
+3227225600,3227234559,US
3227234560,3227234815,NL
3227234816,3227235071,US
3227235072,3227235327,AU
@@ -64822,7 +64453,7 @@
3227237632,3227237887,NO
3227237888,3227238143,US
3227238144,3227238399,NL
-3227238400,3227239935,US
+3227238400,3227240191,US
3227240192,3227240447,GB
3227240704,3227240959,GB
3227240960,3227243007,US
@@ -64831,21 +64462,19 @@
3227243520,3227243775,US
3227243776,3227244031,AU
3227244032,3227249151,SE
-3227249408,3227249663,US
+3227249152,3227249663,US
3227249664,3227252735,CH
-3227252736,3227252991,US
-3227253248,3227254271,US
+3227252736,3227254271,US
3227254272,3227254527,AU
-3227254784,3227258623,US
+3227254528,3227258623,US
3227258624,3227258879,AU
-3227258880,3227259135,US
-3227259392,3227273983,US
+3227258880,3227273983,US
3227273984,3227274239,FI
3227274240,3227274495,US
3227274496,3227274751,NL
-3227274752,3227276543,US
+3227274752,3227276799,US
3227276800,3227277055,FR
-3227277312,3227278847,US
+3227277056,3227278847,US
3227278848,3227279103,IE
3227279104,3227281407,US
3227281408,3227282175,IT
@@ -64853,7 +64482,7 @@
3227282432,3227282943,NL
3227282944,3227284479,US
3227284480,3227284735,FI
-3227284992,3227286783,US
+3227284736,3227286783,US
3227286784,3227287039,AT
3227287040,3227287295,IT
3227287296,3227287551,NL
@@ -64867,14 +64496,13 @@
3227289600,3227290111,NL
3227290112,3227290367,AT
3227290368,3227290623,CH
+3227290624,3227290879,US
3227290880,3227291135,AT
3227291136,3227294207,PT
3227294464,3227294975,GR
-3227295232,3227299839,US
-3227300096,3227301375,US
-3227301632,3227302399,US
-3227302656,3227309055,US
-3227309824,3227310079,US
+3227294976,3227304191,US
+3227304192,3227304447,PR
+3227304448,3227310079,US
3227310080,3227310335,NL
3227310336,3227312127,US
3227312128,3227312383,DK
@@ -64889,26 +64517,26 @@
3227393024,3227393279,AT
3227393280,3227396351,US
3227396352,3227396607,AU
-3227396608,3227400447,US
+3227396608,3227398399,US
+3227398400,3227398655,CA
+3227398656,3227400447,US
3227400448,3227400703,AT
3227400704,3227400959,GB
3227400960,3227401471,US
3227401472,3227401727,MU
3227401728,3227402495,AU
-3227402496,3227402751,US
+3227402496,3227403007,US
3227403008,3227403519,GR
-3227403520,3227403775,US
+3227403520,3227404287,US
3227404544,3227405311,US
3227405312,3227405567,NL
-3227405568,3227414015,US
+3227405568,3227414271,US
3227414272,3227416063,GB
3227416064,3227417087,US
3227417088,3227417343,AU
-3227417344,3227417599,US
-3227417856,3227418111,US
+3227417344,3227418111,US
3227418112,3227418367,CA
-3227418368,3227425023,US
-3227425280,3227425791,US
+3227418368,3227425791,US
3227425792,3227427583,DK
3227427584,3227427839,ES
3227427840,3227429119,US
@@ -64919,8 +64547,7 @@
3227430400,3227430655,AU
3227430656,3227437055,FR
3227437056,3227437311,AU
-3227437312,3227437823,US
-3227438848,3227439103,US
+3227437312,3227439103,US
3227439104,3227439615,AU
3227439616,3227439871,MU
3227439872,3227440127,US
@@ -64944,6 +64571,7 @@
3227448576,3227448831,US
3227448832,3227449087,MU
3227449088,3227450111,US
+3227450112,3227450367,CA
3227450368,3227451455,US
3227451456,3227452375,CA
3227452376,3227452382,US
@@ -64977,35 +64605,61 @@
3227466136,3227466143,US
3227466144,3227467775,CA
3227468032,3227468287,US
+3227468288,3227468799,CA
3227468800,3227484159,US
-3227484160,3227516927,CA
+3227484160,3227517183,CA
3227517184,3227517695,ZA
-3227517696,3227519743,MU
+3227517696,3227518207,MU
+3227518208,3227518463,ZA
+3227518464,3227519743,MU
3227519744,3227520255,ZA
3227520256,3227520767,MU
3227520768,3227521023,ZA
-3227521024,3227522047,MU
+3227521024,3227521279,MU
+3227521280,3227521791,US
+3227521792,3227522047,MU
3227522048,3227522559,ZA
3227522560,3227522815,MU
+3227522816,3227523071,US
3227523072,3227526143,MU
+3227526144,3227526399,US
3227526400,3227526655,MU
3227526656,3227526911,ZA
-3227526912,3227533311,MU
-3227533312,3227534335,US
-3227534336,3227541503,MU
+3227526912,3227527423,MU
+3227527424,3227527935,US
+3227527936,3227528191,MU
+3227528192,3227528447,US
+3227528448,3227532031,MU
+3227532032,3227532287,US
+3227532288,3227532799,MU
+3227532800,3227534335,US
+3227534336,3227535615,MU
+3227535616,3227535871,US
+3227535872,3227536895,MU
+3227536896,3227537151,CA
+3227537152,3227541503,MU
3227541504,3227541759,ZA
-3227541760,3227557887,MU
-3227557888,3227558911,US
+3227541760,3227543295,MU
+3227543296,3227543551,US
+3227543552,3227551743,MU
+3227551744,3227552255,MF
+3227552256,3227556863,MU
+3227556864,3227557375,US
+3227557376,3227557631,MU
+3227557632,3227558911,US
3227558912,3227559935,MU
-3227559936,3227561983,US
-3227561984,3227567103,MU
+3227559936,3227562239,US
+3227562240,3227566079,MU
+3227566080,3227566335,US
+3227566336,3227567103,MU
3227567104,3227568127,ZA
3227568128,3227574271,US
3227574272,3227579391,MU
+3227579392,3227579647,US
3227579648,3227580159,MU
3227580160,3227580927,ZA
-3227580928,3227582463,MU
-3227582464,3227638271,US
+3227580928,3227582207,MU
+3227582208,3227638271,US
3227638272,3227638527,CA
3227638528,3227647999,US
3227648000,3227713535,FI
@@ -65034,6 +64688,7 @@
3227777968,3227777983,CA
3227777984,3227777999,US
3227778000,3227779071,CA
+3227779072,3227779327,US
3227779328,3227779583,MU
3227779584,3227779839,AU
3227779840,3227783679,US
@@ -65041,8 +64696,7 @@
3227783936,3227784703,US
3227784704,3227784959,AU
3227784960,3227785727,AT
-3227785728,3227786495,US
-3227786752,3227792383,US
+3227785728,3227792383,US
3227792384,3227792639,NL
3227792640,3227792895,AU
3227792896,3227794687,US
@@ -65054,8 +64708,9 @@
3227799040,3227799295,GB
3227799296,3227799551,US
3227799552,3227799807,AU
-3227799808,3227800063,US
-3227800320,3227803647,US
+3227799808,3227801343,US
+3227801344,3227801599,CA
+3227801600,3227803647,US
3227803648,3227804415,DE
3227804416,3227804671,GB
3227804672,3227804927,US
@@ -65094,21 +64749,25 @@
3227837952,3227842303,MX
3227842304,3227842815,BR
3227842816,3227843327,MX
-3227843328,3227843583,BR
+3227843328,3227844095,BR
3227844096,3227844351,AR
+3227844352,3227844607,US
+3227844608,3227844863,CA
3227844864,3227845119,NL
3227845120,3227845631,US
3227845632,3227845887,NL
-3227846144,3227846655,US
-3227846656,3227847679,NL
+3227845888,3227846655,US
+3227846656,3227846911,NL
+3227846912,3227847423,US
+3227847424,3227847679,NL
3227847680,3227848703,US
3227848704,3227848959,AU
3227848960,3227851775,US
3227851776,3227852031,NL
-3227852032,3227852799,US
+3227852032,3227853311,US
3227853312,3227853567,GB
-3227853568,3227856127,US
-3227856896,3227860991,US
+3227853568,3227860991,US
+3227863552,3227863807,US
3227863808,3227864063,NL
3227864064,3227865343,US
3227865344,3227867647,NL
@@ -65123,14 +64782,13 @@
3227878912,3227879167,AU
3227879168,3227879679,US
3227879680,3227879935,NL
-3227880192,3227880959,US
+3227879936,3227880959,US
3227880960,3227881215,MU
-3227881472,3227885567,US
-3227885568,3227887871,ES
+3227881216,3227885823,US
+3227885824,3227887871,ES
3227887872,3227888127,PR
3227888128,3227888383,NL
-3227888384,3227889151,US
-3227889408,3227889663,US
+3227888384,3227889663,US
3227889664,3227889919,NL
3227890176,3227890431,US
3227890432,3227890943,NL
@@ -65140,10 +64798,11 @@
3227893760,3227894015,NL
3227894016,3227895039,US
3227895040,3227895551,DE
-3227895808,3227909119,US
+3227895552,3227909119,US
3227909120,3227909375,BE
3227909376,3227909631,US
3227909632,3227909887,AU
+3227909888,3227910399,US
3227910400,3227910655,NL
3227910656,3227911679,US
3227911680,3227912191,UA
@@ -65157,6 +64816,7 @@
3227931136,3227931391,US
3227931392,3227931647,AU
3227931648,3227931903,PE
+3227931904,3227932159,US
3227932672,3227932927,US
3227932928,3227933183,DE
3227933184,3227933695,US
@@ -65167,8 +64827,7 @@
3227947520,3227955711,DE
3227955712,3227964927,US
3227964928,3227965183,NL
-3227965184,3227966975,US
-3227967232,3227967487,US
+3227965184,3227967487,US
3227967488,3227967999,NL
3227968000,3227968255,US
3227968256,3227968767,GB
@@ -65178,18 +64837,18 @@
3227971584,3227974143,US
3227974144,3227974655,AU
3227974656,3227975167,US
-3227975936,3227976191,US
+3227975168,3227975679,CA
+3227975680,3227976191,US
3227976192,3227976447,LU
3227976448,3227977471,US
3227977472,3227977727,NL
-3227977728,3227978751,US
-3227979008,3227979263,US
+3227977728,3227979263,US
3227979264,3227979519,NL
3227979520,3227980799,US
3227980800,3227981055,NL
3227981056,3227981567,US
3227981568,3227981823,NL
-3227981824,3227982335,US
+3227981824,3227982591,US
3227982592,3227982847,DE
3227982848,3227985919,GB
3227985920,3227986175,DE
@@ -65201,18 +64860,15 @@
3227997440,3228005631,FI
3228005632,3228008959,US
3228008960,3228009215,AU
+3228009216,3228009471,US
3228009472,3228009727,AU
3228009728,3228010751,US
3228010752,3228011519,GB
3228011520,3228013311,US
3228013312,3228013567,NL
-3228013568,3228039423,US
-3228040192,3228041215,US
-3228041472,3228042239,US
-3228042752,3228045055,US
+3228013568,3228045055,US
3228045056,3228045311,AU
-3228045312,3228046335,US
-3228046592,3228047103,US
+3228045312,3228047103,US
3228047104,3228047359,NL
3228047360,3228048383,US
3228048384,3228048895,NL
@@ -65225,21 +64881,20 @@
3228052224,3228052991,AU
3228052992,3228053503,US
3228053504,3228053759,PT
-3228054016,3228054783,US
+3228053760,3228054783,US
3228054784,3228055039,NL
3228055040,3228055295,US
3228055296,3228055807,NL
3228055808,3228056319,NO
3228056320,3228059647,US
3228059648,3228059903,CH
-3228060160,3228060927,US
+3228059904,3228060927,US
3228060928,3228061183,NL
3228061184,3228061695,US
3228061696,3228061951,AU
3228061952,3228062207,US
3228062208,3228062463,GB
-3228062464,3228069631,US
-3228069888,3228077055,US
+3228062464,3228077055,US
3228077056,3228077311,NL
3228077312,3228077567,US
3228077568,3228077823,NL
@@ -65247,8 +64902,7 @@
3228078848,3228079103,GR
3228079104,3228080639,US
3228080640,3228081151,NL
-3228081152,3228082175,US
-3228082944,3228083967,US
+3228081152,3228083967,US
3228083968,3228084479,NL
3228084480,3228085247,US
3228085248,3228085503,AU
@@ -65263,8 +64917,7 @@
3228104960,3228105471,US
3228105472,3228105727,NL
3228105728,3228105983,AU
-3228105984,3228106495,US
-3228106752,3228109311,US
+3228105984,3228109311,US
3228109312,3228109567,AU
3228109568,3228125951,US
3228125952,3228126207,NL
@@ -65278,6 +64931,7 @@
3228171776,3228172031,GB
3228172032,3228172287,US
3228172288,3228237823,IT
+3228237824,3228238079,US
3228238080,3228238591,NL
3228238592,3228238847,US
3228238848,3228239359,GB
@@ -65294,7 +64948,7 @@
3228265984,3228266239,IE
3228266496,3228267007,AU
3228267008,3228267263,NL
-3228267264,3228268543,US
+3228267264,3228269055,US
3228269056,3228269311,PT
3228269312,3228269567,DE
3228269568,3228270079,AT
@@ -65302,8 +64956,10 @@
3228271104,3228271359,US
3228271360,3228271615,CA
3228271616,3228271871,DE
-3228272128,3228272383,US
-3228272640,3228280831,US
+3228271872,3228272127,CA
+3228272128,3228274687,US
+3228274688,3228274943,CA
+3228274944,3228280831,US
3228280832,3228281087,NL
3228281088,3228281599,US
3228281600,3228282111,AU
@@ -65319,11 +64975,11 @@
3228297216,3228297727,AT
3228297728,3228297983,US
3228297984,3228298495,NL
-3228298752,3228303103,US
-3228303360,3228309247,US
+3228298496,3228309247,US
3228309248,3228310271,DE
3228311808,3228312063,DE
3228312320,3228316159,DE
+3228316160,3228316415,US
3228316416,3228327167,DE
3228327168,3228328703,US
3228328704,3228328959,AU
@@ -65339,6 +64995,7 @@
3228334592,3228335359,US
3228335360,3228335615,SK
3228335616,3228335871,CZ
+3228335872,3228336127,US
3228336128,3228336639,CZ
3228336640,3228337663,SK
3228337664,3228337919,CZ
@@ -65367,7 +65024,18 @@
3228364800,3228368895,US
3228368896,3228373247,DE
3228373504,3228380415,DE
-3228380672,3228404735,DE
+3228380416,3228380671,US
+3228380672,3228380927,DE
+3228381184,3228388095,DE
+3228388096,3228388351,US
+3228388352,3228393727,DE
+3228393984,3228394239,DE
+3228394240,3228394495,US
+3228394752,3228395263,DE
+3228395264,3228395775,US
+3228395776,3228399615,DE
+3228399616,3228399871,US
+3228399872,3228404735,DE
3228404736,3228405247,FR
3228405248,3228405503,KR
3228405504,3228405759,SG
@@ -65376,7 +65044,8 @@
3228406272,3228406527,IN
3228406528,3228407039,FR
3228407040,3228420095,DE
-3228420608,3228424703,DE
+3228420608,3228420863,DE
+3228421120,3228424703,DE
3228424704,3228424959,US
3228425216,3228426239,DE
3228426752,3228430847,DE
@@ -65390,24 +65059,20 @@
3228461568,3228461823,CA
3228461824,3228464127,US
3228464128,3228464383,CA
-3228464384,3228472831,US
-3228473344,3228477695,US
+3228464384,3228478463,US
3228478464,3228479487,CA
-3228479488,3228490751,US
-3228491520,3228496127,US
+3228479488,3228496127,US
3228496128,3228496383,GB
3228496384,3228508159,US
3228508160,3228508415,AU
3228508416,3228508671,NL
-3228508672,3228509439,US
+3228508672,3228509951,US
3228509952,3228510207,NL
3228510208,3228511231,US
3228511232,3228511487,NL
3228511488,3228511999,US
3228512000,3228512511,NL
-3228512512,3228513791,US
-3228514304,3228521471,US
-3228521984,3228522495,US
+3228512512,3228522495,US
3228522496,3228522751,NL
3228522752,3228525823,US
3228525824,3228526079,NL
@@ -65418,31 +65083,31 @@
3228531712,3228532223,NO
3228532224,3228532479,US
3228532480,3228532735,NL
-3228532736,3228554751,US
-3228555008,3228558591,US
+3228532736,3228539247,US
+3228539248,3228539251,AT
+3228539252,3228558591,US
3228558592,3228559103,BR
3228559104,3228564479,US
3228564480,3228564735,AT
-3228564992,3228565247,US
-3228565760,3228572927,US
+3228564736,3228565247,US
+3228565504,3228572927,US
+3228572928,3228573183,CA
3228573184,3228573951,PT
3228573952,3228574463,US
-3228574720,3228574975,US
-3228575232,3228577023,US
+3228574720,3228577023,US
3228577024,3228577279,NL
3228577280,3228578047,US
3228578048,3228578303,NL
3228578304,3228581119,US
3228581120,3228581375,AT
-3228581376,3228583167,US
+3228581376,3228583423,US
3228583424,3228585983,ES
3228585984,3228590591,US
3228590592,3228590847,GB
3228590848,3228591103,DK
3228591104,3228591359,GB
3228591360,3228603391,US
-3228603648,3228603903,US
-3228604160,3228617727,US
+3228603648,3228617727,US
3228617728,3228617983,FI
3228617984,3228618239,US
3228618240,3228618495,NL
@@ -65455,6 +65120,7 @@
3228628736,3228628991,ES
3228628992,3228630527,US
3228630528,3228630783,NL
+3228630784,3228631039,US
3228631040,3228696575,NL
3228696576,3228714764,IL
3228714765,3228714765,CA
@@ -65463,9 +65129,10 @@
3228826373,3228830719,IL
3228830720,3228833791,PS
3228833792,3229024255,IL
-3229024512,3229024767,US
-3229025280,3229058047,US
-3229058816,3229092095,US
+3229024256,3229024511,CA
+3229024512,3229089791,US
+3229089792,3229090047,CA
+3229090048,3229092095,US
3229092096,3229093887,AU
3229093888,3229104895,US
3229104896,3229105151,ES
@@ -65478,7 +65145,7 @@
3229155584,3229155839,SE
3229155840,3229156095,ES
3229156096,3229159423,SE
-3229159424,3229159935,AT
+3229159424,3229159935,NL
3229159936,3229160959,SE
3229160960,3229161471,DE
3229161472,3229161727,SE
@@ -65515,38 +65182,42 @@
3229201152,3229201407,SE
3229201408,3229201663,IT
3229201664,3229201919,DK
-3229201920,3229203199,SE
+3229201920,3229202943,SE
+3229202944,3229203199,NL
3229203200,3229203967,GB
3229203968,3229205503,SE
3229205504,3229206015,GB
3229206016,3229220863,SE
-3229220864,3229245439,GB
+3229220864,3229221119,US
+3229221120,3229245439,GB
3229245440,3229246463,US
3229246464,3229254399,GB
3229254400,3229256959,SG
3229256960,3229258495,GB
-3229258496,3229259007,US
+3229258496,3229259519,US
3229259520,3229264639,GB
3229264640,3229264895,AU
3229264896,3229265919,US
3229265920,3229266175,AU
3229266176,3229266943,US
3229266944,3229267199,AU
-3229267200,3229272319,US
+3229267200,3229273599,US
+3229273600,3229273855,CA
3229273856,3229274623,US
3229274624,3229274879,AU
3229274880,3229275647,US
3229275648,3229275903,NL
+3229275904,3229276159,US
3229276160,3229281023,IE
3229281024,3229281791,US
3229281792,3229283071,PT
-3229283072,3229285887,US
-3229285888,3229286143,NO
-3229286400,3229354495,US
+3229283072,3229354495,US
3229354496,3229355775,AU
3229355776,3229358079,US
3229358080,3229358335,AU
3229358336,3229359359,DE
+3229359360,3229359615,US
+3229359616,3229359871,CA
3229359872,3229360127,US
3229360128,3229360383,AT
3229360384,3229361919,US
@@ -65559,8 +65230,7 @@
3229380864,3229381375,US
3229381376,3229381887,NL
3229381888,3229382143,AU
-3229382144,3229382399,US
-3229382656,3229390847,US
+3229382144,3229390847,US
3229390848,3229391103,AU
3229391104,3229391359,US
3229391360,3229391615,AU
@@ -65568,28 +65238,28 @@
3229391872,3229392895,US
3229392896,3229393151,NZ
3229393152,3229394175,US
-3229394944,3229408255,RU
+3229394432,3229395455,US
+3229395456,3229408255,RU
3229408256,3229412095,US
3229412096,3229412351,NL
3229412352,3229414911,DE
3229414912,3229415167,US
3229415168,3229415679,NL
+3229415680,3229415935,CA
3229415936,3229417215,DE
3229417472,3229483007,DE
3229483008,3229499647,FI
-3229499648,3229500671,US
-3229501440,3229614847,US
+3229499648,3229614847,US
3229614848,3229615103,GB
3229615104,3229679615,US
3229679616,3229695487,DE
-3229695488,3229697535,US
-3229697792,3229700095,US
+3229695488,3229700095,US
3229700096,3229700351,AT
3229700352,3229701887,US
3229701888,3229702143,TR
3229702144,3229704703,US
3229704704,3229704959,DE
-3229705216,3229745151,US
+3229704960,3229745151,US
3229745152,3229810687,FI
3229810688,3229814015,US
3229814016,3229814271,AU
@@ -65602,7 +65272,7 @@
3229818880,3229820927,JM
3229820928,3229830911,US
3229830912,3229831167,NL
-3229831168,3229833215,US
+3229831168,3229833471,US
3229833472,3229833727,NL
3229833728,3229834495,AU
3229834496,3229834751,US
@@ -65617,7 +65287,7 @@
3229844480,3229844735,BE
3229844736,3229844991,US
3229845248,3229845503,US
-3229845504,3229847295,CA
+3229845504,3229846527,CA
3229847296,3229849599,US
3229849600,3229849855,AU
3229849856,3229870335,US
@@ -65636,6 +65306,7 @@
3229881344,3229883135,US
3229883648,3229883903,US
3229884160,3229884415,AU
+3229884416,3229884927,US
3229884928,3229885183,NL
3229885184,3229885439,BR
3229885440,3229886719,US
@@ -65646,7 +65317,7 @@
3229890304,3229890559,NL
3229890560,3229891583,US
3229891584,3229891839,CA
-3229892608,3229900031,US
+3229892096,3229900031,US
3229900032,3229900287,AU
3229900288,3229901567,US
3229901568,3229901823,GB
@@ -65664,7 +65335,8 @@
3229940736,3229940991,CH
3229940992,3229941247,AU
3229941248,3229941503,US
-3229941760,3229944319,US
+3229941760,3229942271,CA
+3229942272,3229944319,US
3229944320,3229944575,AU
3229944576,3229945087,US
3229945344,3229945599,AU
@@ -65689,11 +65361,13 @@
3229958144,3229958399,NL
3229958400,3229958655,US
3229958656,3229959167,AU
-3229959168,3229962239,US
+3229959168,3229962079,US
+3229962080,3229962111,CA
+3229962112,3229962751,US
3229963008,3229963519,US
3229963776,3229967615,US
3229967872,3229968127,US
-3229968384,3229968895,US
+3229968384,3229969407,US
3229969408,3229969663,PT
3229969664,3229969919,AT
3229969920,3229970431,FI
@@ -65704,6 +65378,7 @@
3229975552,3230004223,US
3230004224,3230004479,NL
3230004480,3230004991,US
+3230005248,3230005759,US
3230005760,3230006015,MU
3230006016,3230007039,US
3230007296,3230072831,FR
@@ -65718,7 +65393,7 @@
3230085376,3230085631,US
3230085888,3230086143,DE
3230086144,3230086655,GB
-3230087168,3230088191,US
+3230086656,3230088703,US
3230088960,3230089215,NL
3230089216,3230089727,US
3230089728,3230089983,NL
@@ -65731,7 +65406,8 @@
3230094080,3230094335,CA
3230094336,3230095615,US
3230095616,3230095871,JP
-3230096384,3230101503,JP
+3230096384,3230100735,JP
+3230100992,3230101503,PR
3230101504,3230104319,US
3230104576,3230105855,US
3230105856,3230106111,NL
@@ -65750,8 +65426,7 @@
3230120192,3230120447,NL
3230120448,3230120703,US
3230120704,3230120959,PT
-3230120960,3230122495,US
-3230123008,3230125055,US
+3230120960,3230125055,US
3230125312,3230125567,US
3230125824,3230126335,AU
3230126336,3230126591,US
@@ -65796,12 +65471,12 @@
3230153984,3230154239,NL
3230154240,3230156543,US
3230156544,3230164991,FI
-3230165504,3230167295,US
+3230164992,3230167295,US
3230167552,3230168063,CA
-3230168832,3230177791,US
+3230168064,3230177791,US
3230177792,3230178303,GB
3230178304,3230178559,CH
-3230179328,3230210047,US
+3230178816,3230210047,US
3230210048,3230210303,CA
3230210304,3230211839,US
3230211840,3230212095,CN
@@ -65864,7 +65539,7 @@
3230267136,3230267903,CA
3230267904,3230269439,US
3230269440,3230271743,GB
-3230272512,3230291455,US
+3230272000,3230291455,US
3230291456,3230291711,NL
3230291712,3230295039,US
3230295040,3230295295,AU
@@ -65926,7 +65601,7 @@
3230824448,3230825215,US
3230825216,3230825471,GB
3230825472,3230826239,ES
-3230826240,3230827007,US
+3230826240,3230827519,US
3230827520,3230827775,NL
3230827776,3230828031,AU
3230828032,3230828543,HU
@@ -65936,7 +65611,7 @@
3230832128,3230832383,AU
3230832384,3230832639,US
3230832640,3230832895,NL
-3230832896,3230833151,US
+3230832896,3230833663,US
3230833664,3230833919,CA
3230833920,3230834175,BR
3230834176,3230835455,US
@@ -65962,6 +65637,7 @@
3230850048,3230851839,US
3230851840,3230852351,NL
3230852352,3230852607,BR
+3230852608,3230853119,CA
3230853120,3230853375,AU
3230853376,3230853887,FR
3230853888,3230854399,US
@@ -65982,8 +65658,7 @@
3230870016,3230870271,NL
3230870272,3230873343,US
3230873344,3230873599,HK
-3230873600,3230877183,US
-3230877696,3230878719,US
+3230873600,3230878719,US
3230878720,3230879487,PT
3230879488,3230879743,FR
3230879744,3230888447,US
@@ -66047,7 +65722,7 @@
3230981376,3230981631,AU
3230981632,3230981887,US
3230981888,3230983935,AU
-3230983936,3230989823,US
+3230983936,3230990335,US
3230990592,3230991103,US
3230991104,3230991359,PL
3230991360,3230991615,US
@@ -66076,14 +65751,14 @@
3231004928,3231005183,GB
3231005440,3231005695,FR
3231005696,3231005951,GB
-3231005952,3231008767,US
-3231009280,3231009791,US
+3231005952,3231009791,US
3231010048,3231010303,FR
3231010304,3231010815,NO
3231010816,3231011071,CA
3231011328,3231011839,US
3231012096,3231012863,US
3231013120,3231013375,US
+3231013376,3231013887,CA
3231013888,3231014655,US
3231015168,3231015423,US
3231015424,3231015679,CA
@@ -66110,7 +65785,9 @@
3231042048,3231042303,GU
3231042304,3231043839,US
3231043840,3231044095,AU
-3231044352,3231048447,US
+3231044352,3231047935,US
+3231047936,3231048191,GB
+3231048192,3231048447,US
3231048448,3231048703,NL
3231048704,3231049727,US
3231049728,3231049983,AT
@@ -66119,8 +65796,7 @@
3231051264,3231051519,GB
3231051520,3231051775,AU
3231051776,3231053055,US
-3231053824,3231055103,US
-3231055872,3231057151,US
+3231053312,3231057151,US
3231057152,3231057407,CA
3231057408,3231070463,US
3231070720,3231074559,SE
@@ -66177,8 +65853,7 @@
3231109120,3231109375,GB
3231109376,3231109631,NO
3231109632,3231109887,US
-3231110144,3231110399,US
-3231111168,3231111679,US
+3231110144,3231111679,US
3231111680,3231112191,NZ
3231112448,3231112959,US
3231112960,3231113215,NO
@@ -66199,7 +65874,7 @@
3231149312,3231149567,CA
3231149568,3231154431,US
3231154432,3231154687,AU
-3231155200,3231155711,US
+3231154688,3231155711,US
3231155712,3231156223,CA
3231156224,3231174655,US
3231174656,3231182847,CN
@@ -66211,7 +65886,7 @@
3231190528,3231190783,GB
3231190784,3231191295,US
3231191296,3231191551,GB
-3231191552,3231192575,US
+3231191552,3231193599,US
3231193600,3231194111,DE
3231194368,3231197695,US
3231197696,3231197951,FR
@@ -66247,7 +65922,8 @@
3231218176,3231218431,GB
3231218432,3231218687,US
3231218688,3231218943,BE
-3231218944,3231223039,US
+3231218944,3231219967,US
+3231220224,3231223039,US
3231223040,3231223295,IT
3231223296,3231223807,US
3231223808,3231224063,AU
@@ -66255,7 +65931,7 @@
3231224320,3231224575,AU
3231224576,3231225599,US
3231225600,3231225855,DE
-3231226368,3231226879,US
+3231225856,3231226879,US
3231226880,3231227135,GB
3231227648,3231228927,US
3231228928,3231229183,PR
@@ -66264,11 +65940,9 @@
3231229696,3231229951,FR
3231229952,3231231487,US
3231231488,3231231743,PT
-3231231744,3231233023,US
-3231233536,3231234047,US
+3231231744,3231234047,US
3231234048,3231235071,GB
-3231235072,3231236095,US
-3231236608,3231236863,US
+3231235072,3231236863,US
3231236864,3231237119,CA
3231237120,3231237375,US
3231237376,3231237631,AU
@@ -66323,7 +65997,7 @@
3231296256,3231296511,NL
3231296512,3231296767,US
3231296768,3231299327,AT
-3231299328,3231299583,US
+3231299328,3231300095,US
3231300352,3231300607,US
3231300608,3231301119,NL
3231301120,3231302143,US
@@ -66342,17 +66016,17 @@
3231318272,3231318783,US
3231319040,3231322111,US
3231322112,3231324671,SG
+3231324672,3231325183,US
3231325184,3231326207,CA
-3231326208,3231349759,US
-3231350528,3231352831,US
+3231326208,3231352831,US
3231352832,3231358975,CA
3231358976,3231369215,US
3231369216,3231369471,TW
3231369472,3231383551,US
3231383552,3231385599,NO
-3231385600,3231444071,US
-3231444072,3231444079,CA
-3231444080,3231477759,US
+3231385600,3231423999,US
+3231424000,3231424511,PR
+3231424512,3231477759,US
3231477760,3231478015,CA
3231478016,3231482879,US
3231482880,3231483135,BE
@@ -66387,8 +66061,8 @@
3231506688,3231506943,AU
3231506944,3231507199,US
3231507200,3231507455,BE
-3231507456,3231508479,US
-3231508992,3231509247,US
+3231507456,3231509247,US
+3231509504,3231510015,US
3231510272,3231510527,NL
3231510528,3231512575,US
3231512576,3231512831,LU
@@ -66396,19 +66070,19 @@
3231513088,3231513343,US
3231513600,3231514367,US
3231514624,3231515647,NO
-3231515648,3231516159,US
+3231515648,3231516671,US
3231516672,3231519231,SE
-3231519744,3231521791,US
-3231522560,3231528959,US
-3231528960,3231528991,CA
+3231519232,3231528959,US
+3231528960,3231528975,CA
+3231528976,3231528983,US
+3231528984,3231528991,CA
3231528992,3231529031,US
3231529032,3231529039,CA
3231529040,3231529471,US
3231529472,3231529487,CA
3231529488,3231529727,US
3231529728,3231529983,CA
-3231529984,3231533567,US
-3231534080,3231539199,US
+3231529984,3231539199,US
3231539200,3231547391,CA
3231547392,3231547647,US
3231547648,3231547903,NL
@@ -66422,8 +66096,7 @@
3231553024,3231553791,JP
3231553792,3231554047,CH
3231554048,3231555327,DE
-3231555328,3231555583,CA
-3231555584,3231556095,US
+3231555328,3231556095,CA
3231556096,3231556351,AU
3231556352,3231556607,US
3231556608,3231556863,CA
@@ -66445,20 +66118,24 @@
3231563520,3231563775,AU
3231563776,3231583231,US
3231583232,3231584255,CA
-3231584256,3231586559,US
-3231587328,3231588863,US
+3231584256,3231588863,US
3231588864,3231589119,GB
3231589120,3231591679,US
3231591680,3231591935,AU
3231591936,3231594239,US
3231594240,3231594495,GB
-3231594496,3231641855,US
+3231594496,3231596031,US
+3231596032,3231596543,PR
+3231596544,3231634943,US
+3231634944,3231635455,CA
+3231635456,3231641855,US
3231641856,3231642111,SG
3231642112,3231644927,US
3231645184,3231645439,US
3231645696,3231649791,US
3231649792,3231653887,SG
-3231653888,3231663103,US
+3231653888,3231655167,US
+3231655424,3231663615,US
3231663616,3231663871,NL
3231663872,3231664127,CA
3231664128,3231664383,US
@@ -66481,7 +66158,7 @@
3231673856,3231674111,US
3231674112,3231674367,CA
3231674368,3231675391,US
-3231675392,3231675647,BR
+3231675392,3231675903,BR
3231675904,3231676159,NL
3231676416,3231677439,NL
3231677440,3231694847,US
@@ -66551,6 +66228,7 @@
3231755776,3231756543,PR
3231756544,3231757311,GB
3231757312,3231759359,US
+3231759360,3231759615,BR
3231759616,3231760895,US
3231760896,3231761151,GB
3231761152,3231761407,NL
@@ -66570,11 +66248,11 @@
3231776000,3231776511,US
3231776768,3231793151,US
3231793152,3231793663,NL
-3231794176,3231800319,US
+3231793664,3231800319,US
3231800320,3231801343,CN
3231801344,3231809535,CA
3231809536,3231810047,AU
-3231810560,3231842303,US
+3231810048,3231842303,US
3231842304,3231843327,RU
3231843328,3231844351,NO
3231844352,3231845375,RU
@@ -66631,7 +66309,7 @@
3231905792,3231906047,PL
3231906048,3231907839,RU
3231907840,3231913215,US
-3231913984,3231916031,US
+3231913472,3231916031,US
3231916032,3231948799,FI
3231948800,3231973375,US
3231973376,3232038911,AT
@@ -66706,27 +66384,24 @@
3232156160,3232156671,PL
3232157696,3232159743,DE
3232159744,3232160767,PL
-3232160768,3232161791,DE
3232163840,3232165887,RU
-3232167936,3232168959,DE
3232169216,3232169727,DE
3232169728,3232169983,PL
3232169984,3232183295,IT
3232183296,3232184319,SI
3232184320,3232235519,IT
3232301056,3232302335,US
-3232303104,3232303615,US
-3232304128,3232309247,US
+3232302592,3232309247,US
3232309248,3232311807,SG
-3232312320,3232317951,US
-3232318464,3232399615,US
-3232400384,3232407039,US
+3232311808,3232399615,US
+3232399872,3232407039,US
3232407040,3232407551,SG
3232407552,3232432127,US
-3232433920,3232436735,US
-3232437248,3232440319,US
+3232433920,3232435455,US
+3232435712,3232440319,US
3232440320,3232448511,CA
3232448512,3232461311,US
+3232461312,3232461823,CA
3232461824,3232462847,US
3232462848,3232464895,BB
3232464896,3232483327,GB
@@ -66741,26 +66416,26 @@
3232562432,3232562687,NL
3232562688,3232562943,CA
3232563456,3232564479,GB
-3232565248,3232567295,US
+3232564736,3232567295,US
3232567296,3232569599,NZ
3232570368,3232571391,CA
3232571392,3232595967,US
3232595968,3232598015,GB
-3232598016,3232628735,US
-3232629248,3232629759,US
+3232598016,3232629759,US
3232629760,3232630783,CA
3232630784,3232645119,US
3232645120,3232646399,AT
-3232647168,3232661503,US
+3232646656,3232661503,US
3232661504,3232694271,JP
-3232694272,3232702463,US
+3232694272,3232695807,US
+3232695808,3232696319,CA
+3232696320,3232702463,US
3232702464,3232703743,FI
3232703744,3232703999,FR
3232704000,3232704511,CH
3232704512,3232705535,GB
3232705536,3232706559,FI
-3232706560,3232706815,US
-3232707584,3232716799,US
+3232706560,3232716799,US
3232716800,3232724151,CA
3232724152,3232724159,US
3232724160,3232727039,CA
@@ -66784,12 +66459,19 @@
3232813056,3232820223,SE
3232820224,3232820479,IE
3232820480,3232825343,SE
-3232825344,3233285375,US
-3233286144,3233288191,US
+3232825344,3233288191,US
3233288192,3233292287,CA
3233292288,3233431551,US
3233431552,3233447935,CA
-3233447936,3233451519,US
+3233447936,3233449095,US
+3233449096,3233449103,GB
+3233449104,3233449207,US
+3233449208,3233449215,GB
+3233449216,3233449359,US
+3233449360,3233449367,GB
+3233449368,3233450199,US
+3233450200,3233450207,GB
+3233450208,3233451519,US
3233451520,3233451775,GB
3233451776,3233453567,US
3233453568,3233453823,IT
@@ -66802,10 +66484,11 @@
3233458944,3233459199,BG
3233459200,3233484799,US
3233484800,3233487359,ES
+3233487360,3233487871,US
3233487872,3233488895,CA
3233488896,3233547519,US
3233547520,3233547775,CA
-3233547776,3233548287,US
+3233547776,3233548799,US
3233548800,3233549055,NL
3233549056,3233549311,BR
3233549312,3233557247,US
@@ -66883,6 +66566,7 @@
3233617408,3233617663,CA
3233617664,3233617919,NL
3233617920,3233618175,AU
+3233618432,3233618943,US
3233619456,3233620479,US
3233620480,3233620735,AU
3233620736,3233620991,US
@@ -66938,11 +66622,10 @@
3233676032,3233676287,NL
3233676288,3233677055,US
3233677312,3233679103,US
-3233679360,3233682431,US
-3233682944,3233684991,US
+3233679616,3233684991,US
3233684992,3233685247,MX
3233685248,3233685503,BR
-3233685760,3233688063,US
+3233685760,3233688575,US
3233688576,3233688831,NL
3233688832,3233692159,US
3233692160,3233692671,NL
@@ -66957,7 +66640,7 @@
3233694976,3233695231,FR
3233695232,3233696511,US
3233696512,3233696767,CA
-3233696768,3233700863,US
+3233696768,3233701375,US
3233701632,3233701887,NL
3233701888,3233704959,US
3233704960,3233705215,NZ
@@ -66977,9 +66660,9 @@
3233729280,3233729535,US
3233729536,3233729791,SG
3233729792,3233730047,AU
+3233730048,3233730559,US
3233730560,3233732607,AU
-3233732608,3233734911,US
-3233735680,3233736959,US
+3233732608,3233736959,US
3233736960,3233737983,FR
3233737984,3233738751,US
3233738752,3233739007,NL
@@ -67069,7 +66752,7 @@
3234019840,3234023423,US
3234023424,3234023679,NL
3234023680,3234024703,US
-3234025472,3234026495,US
+3234024960,3234026495,US
3234026752,3234030079,US
3234030080,3234030335,NL
3234030336,3234031103,US
@@ -67147,9 +66830,7 @@
3234230016,3234230271,ES
3234230272,3234232319,US
3234232320,3234232575,EG
-3234232576,3234232831,US
-3234232832,3234233087,BR
-3234233088,3234238975,US
+3234232576,3234238975,US
3234238976,3234239231,MY
3234239232,3234239327,US
3234239328,3234239329,MY
@@ -67164,9 +66845,7 @@
3234271232,3234275327,PT
3234275328,3234279423,AU
3234279424,3234283519,CA
-3234283520,3234310367,US
-3234310368,3234310371,HK
-3234310372,3234312703,US
+3234283520,3234312703,US
3234313216,3234316287,US
3234316288,3234320383,CA
3234320384,3234332671,US
@@ -67431,7 +67110,9 @@
3236102144,3236106239,PH
3236106240,3236140031,US
3236140032,3236142079,CA
-3236142080,3236142847,US
+3236142080,3236142335,US
+3236142336,3236142463,CA
+3236142464,3236142847,US
3236142848,3236143005,CA
3236143006,3236143006,US
3236143007,3236143103,CA
@@ -67441,7 +67122,9 @@
3236200448,3236233215,MY
3236233216,3236238591,US
3236239360,3236241407,CA
-3236241408,3236302847,US
+3236241408,3236291071,US
+3236291072,3236291327,GB
+3236291328,3236302847,US
3236306944,3236312063,US
3236312064,3236312319,MO
3236312320,3236312575,GH
@@ -67470,7 +67153,9 @@
3236389376,3236392447,US
3236392448,3236392703,CL
3236392704,3236393471,US
-3236393472,3236395519,BR
+3236393472,3236393983,BR
+3236393984,3236395007,CO
+3236395008,3236395519,BR
3236395520,3236396799,US
3236396800,3236397055,AU
3236397056,3236398591,US
@@ -67483,7 +67168,8 @@
3236406784,3236407551,AU
3236407552,3236408063,SG
3236408064,3236408319,US
-3236408320,3236409343,CA
+3236408320,3236409087,CA
+3236409088,3236409599,BR
3236409600,3236411135,US
3236411136,3236411391,AU
3236411392,3236412415,US
@@ -67585,9 +67271,7 @@
3237046016,3237046271,RO
3237046272,3237047039,US
3237047040,3237047295,FR
-3237047296,3237047551,US
-3237047552,3237047807,IE
-3237047808,3237050111,US
+3237047296,3237050111,US
3237050112,3237050367,GB
3237050368,3237051903,US
3237051904,3237052159,TR
@@ -67595,9 +67279,7 @@
3237052288,3237154815,US
3237154816,3237155839,ES
3237155840,3237156863,AU
-3237156864,3237163007,US
-3237163008,3237167103,DM
-3237167104,3237182463,US
+3237156864,3237182463,US
3237182464,3237183487,NL
3237183488,3237216255,US
3237216256,3237281791,JP
@@ -67608,6 +67290,7 @@
3237285632,3237287935,US
3237287936,3237288191,CA
3237288192,3237289471,US
+3237289472,3237289727,BR
3237289728,3237290495,US
3237291008,3237291263,NZ
3237291264,3237294847,US
@@ -67640,7 +67323,7 @@
3237328640,3237328895,CA
3237328896,3237329151,US
3237329152,3237329407,NZ
-3237329408,3237330943,US
+3237329664,3237330943,US
3237330944,3237331199,AU
3237331456,3237331711,US
3237331968,3237332223,AU
@@ -67726,8 +67409,7 @@
3237863424,3237867519,US
3237867520,3237867775,HK
3237867776,3237868031,GB
-3237868032,3237868287,HK
-3237868288,3237869311,US
+3237868032,3237869311,US
3237869312,3237869439,KR
3237869440,3237869567,JP
3237869568,3237869823,AU
@@ -67738,9 +67420,10 @@
3237870592,3237870847,DE
3237870848,3237870975,KR
3237870976,3237871103,JP
-3237871104,3237871231,TH
+3237871104,3237871231,PH
3237871232,3237871359,TW
-3237871360,3237871615,NZ
+3237871360,3237871487,SG
+3237871488,3237871615,MY
3237871616,3237896191,US
3237896192,3237900287,PR
3237900288,3237957631,US
@@ -67788,7 +67471,8 @@
3238049792,3238050303,RU
3238050304,3238050815,DE
3238050816,3238051071,AT
-3238051072,3238051583,RO
+3238051072,3238051327,GB
+3238051328,3238051583,RO
3238051584,3238051839,GB
3238051840,3238053375,PL
3238053376,3238053631,RU
@@ -67835,10 +67519,11 @@
3238395904,3238461439,HU
3238461440,3238502399,DE
3238502400,3238504447,RU
-3238504448,3238526975,DE
+3238504448,3238510591,DE
+3238518784,3238526975,DE
3238526976,3238527231,RU
-3238527232,3238530047,CH
-3238530560,3238535167,CH
+3238529024,3238530047,CH
+3238531072,3238535167,CH
3238535168,3238536191,SE
3238536192,3238537215,DK
3238537216,3238538495,CH
@@ -67848,15 +67533,17 @@
3238541568,3238541823,PL
3238541824,3238542591,CH
3238542592,3238542847,PL
-3238542848,3238545407,CH
+3238542848,3238543103,CH
+3238543360,3238545407,CH
3238545920,3238546431,RU
3238546432,3238546943,CH
3238546944,3238547455,UA
3238548480,3238548991,CH
3238548992,3238549503,CZ
-3238549504,3238559231,CH
+3238549504,3238550527,CH
+3238551296,3238559231,CH
3238559232,3238559487,SE
-3238559488,3238562559,CH
+3238559744,3238562559,CH
3238562560,3238562815,IR
3238562816,3238571263,CH
3238571520,3238573567,CH
@@ -67867,7 +67554,8 @@
3238578432,3238578687,UA
3238578688,3238578943,CH
3238578944,3238579199,RU
-3238579200,3238589951,CH
+3238579200,3238579455,CH
+3238580224,3238589951,CH
3238589952,3238590207,LT
3238590208,3238590719,CH
3238590976,3238591231,SA
@@ -67887,9 +67575,7 @@
3238598656,3238598911,CH
3238598912,3238599167,PL
3238599168,3238599679,HU
-3238599680,3238599935,UA
-3238599936,3238600703,HU
-3238600704,3238604799,DE
+3238599680,3238599935,US
3238608896,3238621183,SE
3238623232,3238623487,LV
3238623488,3238623743,PL
@@ -68033,8 +67719,7 @@
3239116544,3239116799,PL
3239116800,3239117055,PT
3239117056,3239117311,SI
-3239117312,3239117823,DE
-3239118336,3239118591,DE
+3239117312,3239117567,DE
3239118848,3239119871,DE
3239119872,3239120127,GB
3239120128,3239120383,CZ
@@ -68071,7 +67756,7 @@
3239137024,3239137279,LI
3239138304,3239138559,PL
3239138560,3239138815,CH
-3239138816,3239141375,DE
+3239139328,3239141375,DE
3239141376,3239145471,US
3239145472,3239147519,DE
3239147520,3239149567,SG
@@ -68082,7 +67767,7 @@
3239161088,3239161343,BY
3239161344,3239161599,PL
3239161600,3239161855,HU
-3239161856,3239162623,DE
+3239162368,3239162623,DE
3239162624,3239162879,BE
3239163904,3239164159,PL
3239164160,3239164671,DE
@@ -68182,8 +67867,8 @@
3239445760,3239446015,PL
3239446016,3239446271,RU
3239446272,3239446527,FR
-3239446528,3239449599,DE
-3239450624,3239451647,DE
+3239446528,3239447551,DE
+3239448576,3239449599,DE
3239451648,3239451903,PL
3239451904,3239452159,DE
3239452160,3239452415,CY
@@ -68223,7 +67908,6 @@
3239489024,3239489279,DE
3239489280,3239489535,PL
3239489536,3239501823,DE
-3239505920,3239506431,DE
3239506432,3239506687,RU
3239506688,3239506943,GB
3239507200,3239507455,GB
@@ -68235,10 +67919,7 @@
3239508992,3239509247,PL
3239509248,3239509503,DE
3239509504,3239509759,CH
-3239509760,3239510015,DE
-3239510016,3239510271,UA
-3239510272,3239511039,DE
-3239512064,3239514111,DE
+3239509760,3239514111,DE
3239518208,3239521791,DE
3239522304,3239522559,PL
3239522560,3239522815,SI
@@ -68274,7 +67955,7 @@
3239546112,3239546367,GB
3239546368,3239546623,RU
3239546624,3239546879,NL
-3239546880,3239549951,DE
+3239547904,3239549951,DE
3239549952,3239550207,TR
3239550208,3239550463,UA
3239550464,3239550719,FR
@@ -68297,12 +67978,13 @@
3239568384,3239568639,SE
3239568640,3239568895,NO
3239568896,3239573759,DE
-3239574016,3239574783,DE
+3239574272,3239574783,DE
3239575040,3239575295,DE
3239575296,3239575551,DK
3239576064,3239576319,DE
3239576576,3239576831,DE
-3239577088,3239578879,DE
+3239577344,3239577599,DE
+3239578624,3239578879,DE
3239579136,3239579391,PL
3239579392,3239581695,DE
3239581696,3239581951,PL
@@ -68352,7 +68034,7 @@
3239682048,3239682559,PL
3239682560,3239683071,BG
3239683072,3239683583,PT
-3239683584,3239684607,PL
+3239683584,3239684095,PL
3239684608,3239686143,DE
3239686144,3239686655,UA
3239686656,3239687167,IT
@@ -68402,7 +68084,8 @@
3239714560,3239714815,HU
3239714816,3239723007,DE
3239723008,3239731199,GB
-3239731200,3239739391,DE
+3239731200,3239735295,DE
+3239737344,3239739391,DE
3239739392,3239739647,IT
3239739648,3239739903,RO
3239739904,3239740159,CH
@@ -68410,7 +68093,8 @@
3239740416,3239740671,DK
3239740928,3239741183,UA
3239741184,3239741439,RU
-3239741440,3239759871,DE
+3239741440,3239744511,DE
+3239745536,3239759871,DE
3239760128,3239760383,UA
3239761408,3239761663,RU
3239761920,3239762175,BG
@@ -68428,7 +68112,7 @@
3239773952,3239774207,SA
3239774464,3239774719,ES
3239774976,3239775231,PT
-3239776256,3239782399,DE
+3239776256,3239778303,DE
3239782400,3239782655,AT
3239782656,3239782911,RU
3239782912,3239783167,GB
@@ -68437,6 +68121,7 @@
3239783936,3239784191,DE
3239784192,3239784447,ES
3239784448,3239788543,DE
+3239788544,3239788607,GB
3239789056,3239789567,DE
3239789568,3239790079,FR
3239790080,3239790591,RO
@@ -68479,7 +68164,6 @@
3239837696,3239837951,PL
3239838976,3239839231,DE
3239839232,3239839487,RU
-3239839488,3239839743,DE
3239839744,3239839999,SK
3239840000,3239840511,SA
3239840512,3239840767,DE
@@ -68562,14 +68246,13 @@
3239902720,3239902975,EE
3239903232,3239904255,DE
3239904512,3239904767,GB
-3239905024,3239907327,DE
+3239905536,3239905791,DE
3239907328,3239907583,UA
-3239907584,3239907839,DE
3239908096,3239908351,RU
-3239908352,3239911423,DE
+3239908352,3239910399,DE
3239912960,3239913215,DE
3239913216,3239913471,LT
-3239913472,3239915519,DE
+3239914240,3239914495,DE
3239915520,3239915775,PL
3239915776,3239916031,HU
3239916032,3239916287,SA
@@ -68582,10 +68265,11 @@
3239931904,3239935999,DE
3239936512,3239938815,DE
3239938816,3239939071,NL
-3239939072,3239949311,DE
+3239939072,3239948543,DE
3239950848,3239951103,DE
3239951104,3239951359,AT
-3239951360,3239954431,DE
+3239951360,3239951615,DE
+3239952384,3239954431,DE
3239954432,3239954687,UA
3239954688,3239954943,DK
3239954944,3239955199,ES
@@ -68603,13 +68287,14 @@
3239967744,3239968255,DE
3239968512,3239968767,PL
3239968768,3239969023,NO
-3239969536,3239971839,DE
+3239969536,3239970047,DE
+3239970816,3239971839,DE
3239972864,3239974911,DE
3239974912,3239975935,GB
3239975936,3239976191,RO
3239976192,3239976447,DE
3239976448,3239976959,NL
-3239976960,3239978751,DE
+3239977984,3239978751,DE
3239978752,3239979007,RU
3239979264,3239979519,GB
3239979520,3239979775,DE
@@ -68637,14 +68322,15 @@
3240032256,3240033279,RS
3240033280,3240033535,GB
3240033536,3240033791,UA
-3240033792,3240034303,RO
+3240033792,3240034303,GB
3240034304,3240034559,RU
3240034560,3240035327,DE
3240036096,3240037375,DE
3240037888,3240038143,AT
3240038400,3240040447,DE
-3240042496,3240048639,DE
-3240049664,3240083455,DE
+3240049664,3240050687,DE
+3240054784,3240058879,DE
+3240067072,3240083455,DE
3240083456,3240085503,RU
3240085504,3240087551,KZ
3240087552,3240097791,DE
@@ -68657,7 +68343,9 @@
3240104704,3240104959,NL
3240104960,3240105215,RU
3240105216,3240105471,UA
-3240105472,3240109055,GB
+3240105472,3240105727,GB
+3240105984,3240107007,GB
+3240107520,3240109055,GB
3240109056,3240109567,PL
3240109568,3240112639,GB
3240112640,3240112895,PL
@@ -68673,14 +68361,16 @@
3240115200,3240116223,RU
3240116224,3240116479,DE
3240116480,3240116735,DK
-3240116736,3240117247,RO
+3240116736,3240117247,GB
3240117248,3240118271,RU
3240118272,3240120319,ES
3240120320,3240120831,IR
3240120832,3240121343,GB
3240122368,3240123391,GB
3240125440,3240125695,RO
-3240125696,3240165375,GB
+3240125696,3240125951,GB
+3240126208,3240132607,GB
+3240163328,3240165375,GB
3240165376,3240165887,PL
3240165888,3240166399,ES
3240166400,3240166911,PL
@@ -68849,7 +68539,6 @@
3240280064,3240280191,DE
3240280192,3240280319,SE
3240280320,3240280447,PL
-3240280704,3240280831,RU
3240280832,3240280959,GB
3240280960,3240281215,PL
3240281344,3240281471,PL
@@ -68871,10 +68560,9 @@
3240285184,3240286207,PL
3240286208,3240287231,UA
3240287232,3240288255,PL
-3240288256,3240292351,GB
-3240294400,3240296447,GB
+3240288256,3240296447,GB
3240296448,3240296703,RO
-3240297472,3240300543,GB
+3240298496,3240300031,GB
3240302848,3240303103,UA
3240304640,3240305663,RU
3240305664,3240305919,PL
@@ -68892,17 +68580,18 @@
3240312064,3240312319,RU
3240312320,3240312575,IR
3240312576,3240312831,RU
-3240312832,3240321023,GB
+3240312832,3240316927,GB
3240321024,3240321791,RU
3240321792,3240322047,PL
-3240322048,3240322559,RU
+3240322048,3240322303,RU
3240322560,3240324095,CZ
3240324096,3240324351,RO
3240324352,3240324607,RU
3240324608,3240324863,PL
3240324864,3240325119,SI
3240325120,3240334335,GB
-3240336640,3240352255,GB
+3240336640,3240347647,GB
+3240351744,3240352255,GB
3240352768,3240353791,GB
3240355840,3240361983,GB
3240361984,3240362239,TR
@@ -68925,7 +68614,6 @@
3240373760,3240374015,DE
3240374016,3240374271,GB
3240378368,3240394751,GB
-3240395264,3240395775,GB
3240396032,3240396287,GB
3240396800,3240398847,GB
3240400896,3240407039,GB
@@ -68943,11 +68631,10 @@
3240411136,3240419327,RO
3240419840,3240420095,AT
3240420608,3240420863,NL
-3240420864,3240421375,GB
+3240420864,3240421119,GB
3240423424,3240435711,GB
3240436480,3240436735,GB
3240436736,3240437759,DE
-3240438784,3240439807,GB
3240450048,3240454911,GB
3240454912,3240455167,IN
3240456192,3240460287,GB
@@ -68978,24 +68665,22 @@
3240468224,3240468479,CH
3240468480,3240476671,GB
3240485120,3240485375,GB
-3240485632,3240486399,GB
-3240487424,3240487935,GB
+3240485888,3240486399,GB
3240487936,3240488191,CH
3240488192,3240488447,GB
3240488448,3240488703,BG
3240488704,3240488959,NL
-3240488960,3240493055,GB
+3240488960,3240491007,GB
3240493056,3240501247,SE
-3240503296,3240504319,GB
-3240505088,3240505343,GB
3240505344,3240505599,PL
3240505600,3240505855,GB
3240506368,3240506623,GB
-3240507392,3240529919,GB
+3240507392,3240525823,GB
+3240529408,3240529919,GB
3240534016,3240536640,GB
3240536641,3240536641,US
3240536642,3240550399,GB
-3240558592,3240560127,GB
+3240559616,3240560127,GB
3240560640,3240575487,GB
3240575488,3240575743,RO
3240575744,3240575999,GB
@@ -69146,7 +68831,8 @@
3240794112,3240794367,GB
3240794368,3240794879,PL
3240794880,3240795135,DE
-3240795136,3240795647,UA
+3240795136,3240795391,UA
+3240795392,3240795647,RU
3240795648,3240795903,CH
3240795904,3240796159,SE
3240796160,3240808959,IT
@@ -69222,11 +68908,18 @@
3240882176,3240883199,PL
3240883200,3240884223,IL
3240884224,3240886271,UA
-3240886272,3241017343,SE
+3240886272,3240954495,SE
+3240954496,3240954623,DE
+3240954624,3240955647,SE
+3240955648,3240955903,GB
+3240955904,3240961151,SE
+3240961152,3240961279,GB
+3240961280,3241017343,SE
3241017344,3241017855,AT
3241017856,3241018111,RU
3241018112,3241018367,FR
-3241018368,3241029119,AT
+3241018368,3241022463,AT
+3241027584,3241029119,AT
3241029120,3241029375,UA
3241029376,3241029631,PL
3241029632,3241031679,AT
@@ -69276,9 +68969,8 @@
3241071616,3241071871,PL
3241071872,3241072127,RU
3241072384,3241072639,DE
-3241073664,3241073919,AT
3241073920,3241074175,GB
-3241074432,3241076735,AT
+3241074688,3241076735,AT
3241077248,3241077759,AT
3241077760,3241078015,LV
3241078016,3241078271,PL
@@ -69286,7 +68978,8 @@
3241078528,3241078783,DE
3241078784,3241082879,AT
3241082880,3241083135,FR
-3241083136,3241100287,CH
+3241083136,3241091071,CH
+3241099264,3241100287,CH
3241101056,3241101311,DK
3241101312,3241101567,RO
3241101568,3241101823,DE
@@ -69352,15 +69045,15 @@
3241148416,3241416767,FR
3241416768,3241416831,US
3241416832,3241476095,FR
-3241476608,3241477375,BE
+3241476864,3241477375,BE
3241477632,3241477887,GB
3241478144,3241481727,BE
3241481728,3241481983,PT
3241481984,3241482239,DE
3241482240,3241484799,SE
3241484800,3241485055,BE
-3241485312,3241486591,BE
-3241486592,3241487615,SE
+3241485312,3241486335,BE
+3241486336,3241487615,SE
3241487616,3241496575,BE
3241496576,3241496831,AT
3241497344,3241497599,UA
@@ -69380,27 +69073,33 @@
3241503488,3241508095,BE
3241508096,3241508351,NL
3241508352,3241508607,BE
-3241508864,3241541375,BE
+3241508864,3241539839,BE
+3241540864,3241541119,BE
3241541376,3241541631,PL
3241541632,3241672703,FR
-3241673728,3241678847,FR
+3241673728,3241674751,FR
+3241676544,3241676799,FR
3241680896,3241689087,FR
-3241691136,3241692159,FR
3241693184,3241699327,FR
-3241699584,3241699839,FR
3241699840,3241700095,SE
-3241700096,3241723903,FR
+3241700352,3241721855,FR
+3241722112,3241722367,FR
3241724160,3241724415,FR
3241724416,3241724671,RU
3241724672,3241724927,FR
-3241725952,3241736191,FR
-3241737216,3241740287,FR
-3241740544,3241748479,FR
+3241725952,3241734143,FR
+3241734400,3241736191,FR
+3241737216,3241737727,FR
+3241739264,3241740287,FR
+3241740800,3241741823,FR
+3241743360,3241743615,DE
+3241744128,3241747455,FR
3241750528,3241752831,FR
-3241754368,3241758719,FR
+3241754624,3241758719,FR
3241759744,3241763071,FR
3241763072,3241763327,DE
-3241763328,3241771007,FR
+3241764864,3241765887,FR
+3241766144,3241771007,FR
3241772032,3241789439,FR
3241789696,3241789951,FR
3241790464,3241790975,FR
@@ -69416,7 +69115,8 @@
3241841664,3241842175,BE
3241842688,3241843455,BE
3241843456,3241843711,CH
-3241843712,3241848063,BE
+3241843712,3241846783,BE
+3241847808,3241848063,BE
3241852928,3241854463,SK
3241854464,3241854975,GB
3241854976,3241855999,DE
@@ -69470,7 +69170,7 @@
3243376640,3243442175,GB
3243442176,3243507711,AT
3243507712,3243507967,GB
-3243509248,3243509759,CZ
+3243509504,3243509759,CZ
3243509760,3243510015,RU
3243510016,3243510271,NL
3243510272,3243510527,CZ
@@ -69538,7 +69238,6 @@
3243571456,3243571711,CZ
3243571968,3243572223,GR
3243572224,3243572479,CZ
-3243572736,3243572991,CZ
3243572992,3243573247,RU
3243573248,3243704319,CZ
3243704320,3243769855,SK
@@ -69597,7 +69296,7 @@
3244153856,3244154879,NO
3244154880,3244155903,GB
3244155904,3244156927,UA
-3244156928,3244158975,RU
+3244157952,3244158975,RU
3244158976,3244159999,DE
3244160000,3244161023,RU
3244161024,3244163071,NO
@@ -69618,7 +69317,6 @@
3244820736,3244820991,DE
3244820992,3244821247,SI
3244821248,3244821503,RU
-3244821504,3244821759,UA
3244821760,3244822015,TR
3244822016,3244822271,RU
3244822272,3244822527,GB
@@ -69781,7 +69479,8 @@
3244866560,3244866815,FI
3244866816,3244867071,UA
3244867072,3244867583,RU
-3244867584,3244868095,NL
+3244867584,3244867839,NL
+3244867840,3244868095,BE
3244868096,3244868351,DE
3244868352,3244868607,RU
3244868608,3244868863,FI
@@ -69809,7 +69508,7 @@
3244875008,3244875263,PL
3244875520,3244875775,IT
3244875776,3244876799,RU
-3244876800,3244877055,GB
+3244876800,3244877055,DK
3244877056,3244877311,JO
3244877312,3244877567,RU
3244877568,3244877823,FR
@@ -69864,7 +69563,6 @@
3244890368,3244890623,NL
3244890624,3244890879,FR
3244890880,3244891135,RU
-3244891136,3244891391,RO
3244891392,3244891647,PL
3244891648,3244891903,UA
3244891904,3244892159,RO
@@ -69991,7 +69689,7 @@
3244926464,3244926719,LV
3244926720,3244926975,PL
3244926976,3244927231,DE
-3244927232,3244927487,UA
+3244927232,3244927487,RU
3244927488,3244927743,GB
3244927744,3244927999,US
3244928000,3244928255,GB
@@ -70209,7 +69907,7 @@
3245106688,3245107711,UA
3245107712,3245108735,CZ
3245108736,3245109247,FR
-3245109248,3245112319,UA
+3245110272,3245112319,UA
3245112320,3245113343,PL
3245113344,3245113855,UA
3245113856,3245114367,RU
@@ -70262,7 +69960,6 @@
3245135872,3245136127,FR
3245136128,3245136383,DE
3245136384,3245136639,GB
-3245136640,3245136895,RU
3245136896,3245137151,PL
3245137152,3245137407,GB
3245137408,3245137663,DE
@@ -70298,7 +69995,7 @@
3245165056,3245165567,AT
3245165568,3245166079,RU
3245166592,3245166847,UA
-3245166848,3245167103,GB
+3245166848,3245167103,SA
3245167104,3245167359,IL
3245167360,3245167615,GB
3245168128,3245168383,SE
@@ -70365,7 +70062,7 @@
3245207552,3245208063,UA
3245208064,3245208575,DE
3245208576,3245209087,PL
-3245209088,3245209599,VG
+3245209088,3245209599,RU
3245209600,3245210111,UA
3245210112,3245210623,FR
3245210624,3245211135,HU
@@ -70560,8 +70257,12 @@
3246129152,3246260223,RU
3246260224,3246325759,PT
3246351616,3246352639,ES
+3246370816,3246371073,ES
+3246371074,3246371074,PT
+3246371075,3246374911,ES
3246378752,3246379007,ES
3246379008,3246381055,GB
+3246387200,3246388223,GB
3246391296,3246613503,GB
3246613504,3246614527,HU
3246614528,3246744543,GB
@@ -70572,7 +70273,7 @@
3246826240,3246915583,CH
3246915584,3247046655,PT
3247046656,3247046911,AT
-3247046912,3247048191,SI
+3247046912,3247047679,SI
3247048192,3247048703,NO
3247048704,3247048959,EE
3247048960,3247049215,SI
@@ -70674,19 +70375,18 @@
3247300608,3247308799,NL
3247308800,3247309055,BG
3247309056,3247309567,FI
-3247309824,3247313663,FI
+3247309824,3247313407,FI
3247313664,3247313919,AM
-3247313920,3247316479,FI
+3247314688,3247315967,FI
3247316480,3247316735,IR
3247316736,3247316991,RU
3247321600,3247322111,FI
3247322368,3247322623,DE
-3247322624,3247323135,FI
+3247322880,3247323135,FI
3247323136,3247323647,RU
-3247324160,3247324415,FI
3247324416,3247324671,SE
3247324672,3247324927,CH
-3247324928,3247333631,FI
+3247325184,3247333631,FI
3247333632,3247333887,DE
3247333888,3247334399,FI
3247334400,3247334655,NO
@@ -70706,7 +70406,6 @@
3247341312,3247341567,DE
3247343616,3247345663,FI
3247345920,3247346175,HU
-3247346432,3247346943,FI
3247346944,3247347199,SI
3247347200,3247347455,FI
3247347456,3247347711,IL
@@ -70715,7 +70414,8 @@
3247349248,3247349503,FR
3247349504,3247349759,UA
3247349760,3247353855,SE
-3247353856,3247362047,FI
+3247353856,3247357951,FI
+3247361024,3247361279,FI
3247362048,3247362303,RO
3247362304,3247362559,HU
3247362560,3247362815,PL
@@ -70748,7 +70448,7 @@
3247394048,3247394303,PL
3247394560,3247397887,FI
3247397888,3247398143,RU
-3247398144,3247399167,FI
+3247398144,3247398911,FI
3247399424,3247399679,RU
3247399680,3247404799,FI
3247404800,3247405055,RU
@@ -70758,7 +70458,8 @@
3247406080,3247431679,FI
3247431936,3247432191,FI
3247432192,3247432447,TR
-3247432448,3247437823,FI
+3247432704,3247433471,FI
+3247433728,3247437823,FI
3247438080,3247438335,IT
3247438848,3247439871,FI
3247439872,3247702015,ES
@@ -70771,7 +70472,6 @@
3247713280,3247713535,RU
3247713536,3247713791,BE
3247713792,3247714047,SK
-3247714304,3247716351,CH
3247726592,3247742975,ES
3247742976,3247751167,DE
3247751168,3247769599,ES
@@ -70910,7 +70610,6 @@
3248541184,3248541695,SE
3248545792,3248546815,UA
3248546816,3248547839,RU
-3248547840,3248548351,NO
3248549632,3248549887,SE
3248551936,3248553215,NO
3248553728,3248553983,RU
@@ -70997,7 +70696,7 @@
3248816128,3248881663,CZ
3248881664,3249012735,FI
3249012736,3249012991,DE
-3249012992,3249014015,LU
+3249012992,3249013503,LU
3249014272,3249014783,DE
3249014784,3249025023,LU
3249025536,3249025791,FR
@@ -71116,34 +70815,39 @@
3249521344,3249537023,DE
3249537024,3249537279,PT
3249537792,3249538047,GB
-3249538048,3249541119,NL
-3249545216,3249551359,NL
+3249538304,3249541119,NL
+3249545216,3249547263,NL
+3249548288,3249551359,NL
3249551360,3249552639,GB
-3249552640,3249553407,NL
+3249552640,3249552895,NL
+3249553152,3249553407,NL
3249561600,3249565695,NL
3249569792,3249574143,NL
3249574144,3249574399,RU
-3249574400,3249574655,GB
-3249574656,3249574911,UA
+3249574400,3249574655,SE
3249574912,3249576191,NL
3249577728,3249583103,NL
-3249584128,3249590527,NL
+3249585152,3249590527,NL
3249590528,3249590783,FR
-3249591808,3249595391,NL
-3249595904,3249600255,NL
+3249592320,3249595135,NL
+3249596416,3249598463,NL
+3249598976,3249599743,NL
+3249600000,3249600255,NL
3249600256,3249600511,AT
3249600512,3249601535,UA
3249601536,3249601791,RU
-3249601792,3249655807,NL
+3249601792,3249602047,NL
+3249602304,3249635327,NL
+3249637376,3249644543,NL
+3249645056,3249655807,NL
3249659904,3249668095,NL
3249668096,3249676287,IE
3249676288,3249676543,GB
-3249676544,3249676799,IE
3249676800,3249677055,UA
3249677056,3249677311,SE
-3249677312,3249678847,IE
+3249678336,3249678847,IE
3249679104,3249679359,CH
-3249679360,3249682943,IE
+3249679360,3249682431,IE
3249683456,3249684479,SE
3249684480,3249696767,IE
3249697280,3249697535,IE
@@ -71151,7 +70855,6 @@
3249698048,3249698303,PL
3249698304,3249698559,RU
3249698560,3249698815,HU
-3249699840,3249700863,UA
3249701120,3249701631,SE
3249701632,3249701887,RU
3249701888,3249702143,PL
@@ -71248,8 +70951,8 @@
3249863424,3249863679,SE
3249863680,3249863935,ES
3249863936,3249865471,SE
-3249865472,3249866751,GB
-3249866752,3249868543,SE
+3249865472,3249865727,GB
+3249865728,3249868543,SE
3249868544,3249868799,DE
3249868800,3249869823,NL
3249869824,3249871103,SE
@@ -71258,18 +70961,22 @@
3249871616,3249871871,NO
3249871872,3249872383,SE
3249872384,3249872639,GB
-3249872640,3249910783,SE
-3249910784,3249911807,GB
-3249911808,3249926143,SE
+3249872640,3249910271,SE
+3249910272,3249910783,NL
+3249910784,3249926143,SE
3249926144,3249926399,AU
3249926400,3249926655,SE
-3249926656,3249926911,AU
+3249926656,3249926911,BE
3249926912,3249929471,SE
3249929472,3249929983,CA
-3249929984,3249932287,SE
+3249929984,3249931263,SE
+3249931264,3249931775,NL
+3249931776,3249932287,SE
3249932288,3249934335,US
3249934336,3249934847,IT
-3249934848,3249960447,SE
+3249934848,3249935871,SE
+3249935872,3249936383,DE
+3249936384,3249960447,SE
3249960448,3249960959,DE
3249960960,3249961215,CA
3249961216,3249961471,SE
@@ -71310,9 +71017,15 @@
3250010368,3250010879,CH
3250010880,3250012159,SE
3250012160,3250013183,DE
-3250013184,3250015231,SE
+3250013184,3250014207,SE
+3250014208,3250014719,DE
+3250014720,3250015231,SE
3250015232,3250015743,FI
-3250015744,3250020863,SE
+3250015744,3250016767,SE
+3250016768,3250017023,NL
+3250017024,3250017791,SE
+3250017792,3250018303,DE
+3250018304,3250020863,SE
3250020864,3250021375,IT
3250021376,3250022399,FR
3250022400,3250023423,SE
@@ -71366,7 +71079,7 @@
3250246656,3250247423,AT
3250247680,3250257663,AT
3250257664,3250257919,PL
-3250258176,3250271231,AT
+3250258432,3250271231,AT
3250271232,3250271743,PL
3250271744,3250271999,LB
3250272000,3250272255,GB
@@ -71386,9 +71099,8 @@
3250324480,3250324991,GB
3250324992,3250325247,AE
3250325248,3250325503,MA
-3250325504,3250326527,OM
3250326528,3250327039,BH
-3250327040,3250327551,SA
+3250327040,3250327295,SA
3250331648,3250335743,MT
3250335744,3250339839,KW
3250339840,3250348031,JO
@@ -71403,7 +71115,6 @@
3250357904,3250357919,FR
3250357920,3250357927,PL
3250357928,3250357959,CY
-3250357984,3250357999,GB
3250358016,3250358527,LB
3250358528,3250358783,HU
3250359296,3250359807,HU
@@ -71415,8 +71126,7 @@
3250372608,3250373631,HU
3250373632,3250374143,DE
3250374144,3250374655,PL
-3250374656,3250374911,SA
-3250374912,3250375679,SE
+3250374656,3250375679,SE
3250375680,3250376703,GB
3250376704,3250380799,AT
3250380800,3250386943,CH
@@ -71540,7 +71250,6 @@
3250748416,3250749439,UA
3250749440,3250749695,GH
3250749696,3250749951,IT
-3250750208,3250750463,RO
3250750464,3250751487,FR
3250751488,3250751999,DE
3250752000,3250752511,CH
@@ -71607,8 +71316,7 @@
3251132928,3251133439,DK
3251133440,3251133951,NO
3251133952,3251134463,RU
-3251134464,3251134975,DE
-3251134976,3251135999,GB
+3251134464,3251136511,GB
3251136512,3251137023,DK
3251137024,3251137535,DE
3251137536,3251138047,PL
@@ -71638,7 +71346,6 @@
3251147264,3251147519,PL
3251147520,3251147775,NL
3251147776,3251148031,SE
-3251148032,3251148287,RU
3251148544,3251148799,UA
3251149056,3251149311,NL
3251149312,3251149567,DE
@@ -71778,7 +71485,7 @@
3251208192,3251209215,CY
3251209216,3251210239,GB
3251210240,3251211263,PL
-3251211264,3251212287,UA
+3251211264,3251212287,BG
3251212288,3251212415,PL
3251212416,3251212671,FI
3251212800,3251212927,FR
@@ -71879,14 +71586,13 @@
3251273472,3251290111,DE
3251290112,3251302399,GB
3251302400,3251306495,LI
-3251306496,3251306751,AT
-3251306752,3251307007,MK
+3251306496,3251307007,AT
3251307520,3251307775,MK
3251307776,3251308031,GB
3251308032,3251308543,RS
3251311104,3251311615,RS
3251311616,3251312127,GB
-3251312384,3251312639,CH
+3251312384,3251312639,RS
3251313152,3251313663,RS
3251314688,3251315711,FR
3251315712,3251317759,RU
@@ -71979,8 +71685,8 @@
3252289792,3252291327,GR
3252291584,3252293631,FR
3252293632,3252297727,DE
-3252297984,3252298239,GR
-3252298752,3252308223,GR
+3252298752,3252299007,GR
+3252299776,3252308223,GR
3252308224,3252308479,DE
3252308480,3252310527,GR
3252311040,3252313599,GR
@@ -72070,7 +71776,9 @@
3252415488,3252415743,LT
3252415744,3252420607,FR
3252420608,3252424703,NO
-3252424704,3252428799,FR
+3252424704,3252428321,FR
+3252428322,3252428322,AO
+3252428323,3252428799,FR
3252428800,3252429823,NO
3252429824,3252448511,FR
3252448512,3252448767,NO
@@ -72113,7 +71821,6 @@
3252518656,3252518911,DE
3252518912,3252527103,NL
3252527104,3252535295,BE
-3252540416,3252541951,NL
3252541952,3252542207,CI
3252542208,3252542719,BE
3252543488,3252551679,BE
@@ -72125,11 +71832,12 @@
3252566016,3252566271,DE
3252566272,3252566527,RO
3252566528,3252566783,RU
-3252566784,3252567295,CH
+3252566784,3252567039,CH
3252567296,3252567551,GB
3252567552,3252567807,RU
3252567808,3252568063,RO
-3252568064,3252579327,CH
+3252568064,3252576255,CH
+3252578816,3252579327,CH
3252579328,3252579583,FR
3252579584,3252579839,RU
3252579840,3252580095,SE
@@ -72231,7 +71939,8 @@
3252944896,3252945151,AT
3252945152,3252945407,GB
3252945408,3252945663,UA
-3252945664,3252976639,AT
+3252945920,3252963327,AT
+3252965376,3252976639,AT
3252980992,3252981247,GB
3252981248,3252981503,RU
3252981504,3252981759,SE
@@ -72249,7 +71958,7 @@
3252985344,3252985855,RU
3252985856,3252989183,AT
3252989440,3252989695,PL
-3252989696,3253004799,AT
+3252989952,3253004799,AT
3253004800,3253005055,CZ
3253005056,3253006335,AT
3253006336,3253010431,DE
@@ -72259,7 +71968,9 @@
3253270528,3253271551,BY
3253271552,3253338111,RU
3253338112,3253338367,PL
-3253338368,3253380863,SE
+3253338368,3253380351,SE
+3253380352,3253380607,GB
+3253380608,3253380863,SE
3253380864,3253381119,IT
3253381120,3253383935,SE
3253383936,3253384191,NO
@@ -72267,9 +71978,12 @@
3253388288,3253388799,FR
3253388800,3253389055,SE
3253389056,3253389823,FR
-3253389824,3253395455,SE
+3253389824,3253395199,SE
+3253395200,3253395455,GB
3253395456,3253395967,IT
-3253395968,3253398271,SE
+3253395968,3253397503,SE
+3253397504,3253397759,GB
+3253397760,3253398271,SE
3253398272,3253398783,FR
3253398784,3253399039,SE
3253399040,3253399295,FR
@@ -72324,7 +72038,9 @@
3253462016,3253462527,SE
3253462528,3253463039,US
3253463040,3253464063,GB
-3253464064,3253469183,SE
+3253464064,3253464575,SE
+3253464576,3253465087,NL
+3253465088,3253469183,SE
3253469184,3253534719,PT
3253534720,3253600255,GB
3253601280,3253602303,FI
@@ -72354,7 +72070,6 @@
3253627904,3253628927,UA
3253628928,3253629951,GR
3253629952,3253630975,UA
-3253630976,3253631999,RU
3253632000,3253633023,DE
3253633024,3253635071,RU
3253635072,3253636095,IT
@@ -72389,7 +72104,7 @@
3253670912,3253671935,CH
3253671936,3253672959,UA
3253672960,3253673983,DE
-3253673984,3253675007,GB
+3253674752,3253675007,GB
3253675008,3253676031,PL
3253676032,3253677055,AT
3253677056,3253678079,PL
@@ -72470,16 +72185,18 @@
3253737848,3253737855,HU
3253737856,3253738559,GB
3253738560,3253738567,CZ
-3253738568,3253738575,BE
+3253738568,3253738569,BE
+3253738570,3253738570,US
+3253738571,3253738575,BE
3253738576,3253739263,GB
3253739264,3253739519,FR
3253739520,3253741055,GB
3253741056,3253741311,BE
3253741312,3253741679,GB
3253741680,3253741695,RU
-3253741696,3253745151,GB
-3253745152,3253745279,NO
-3253745280,3253745983,GB
+3253741696,3253744415,GB
+3253744416,3253744447,CH
+3253744448,3253745983,GB
3253745984,3253745999,SE
3253746000,3253746007,DK
3253746008,3253746015,IE
@@ -72505,9 +72222,18 @@
3253765280,3253765295,NL
3253765296,3253765311,BE
3253765312,3253765375,TR
-3253765376,3253767711,GB
+3253765376,3253767615,GB
+3253767616,3253767675,IE
+3253767676,3253767679,DE
+3253767680,3253767711,GB
3253767712,3253767743,DE
-3253767744,3253796863,GB
+3253767744,3253770983,GB
+3253770984,3253770984,DE
+3253770985,3253771199,GB
+3253771200,3253771263,IE
+3253771264,3253773055,GB
+3253773056,3253773311,DE
+3253773312,3253796863,GB
3253796864,3253862399,SE
3253862400,3253862655,GB
3253862656,3253882879,FR
@@ -72555,7 +72281,7 @@
3253901824,3253902079,SI
3253902080,3253902335,DK
3253902336,3253904383,UA
-3253904384,3253904895,GB
+3253904384,3253904895,ES
3253904896,3253905151,UA
3253905152,3253905407,RU
3253905408,3253905919,PL
@@ -72613,11 +72339,18 @@
3254079744,3254079999,HU
3254080000,3254124543,BE
3254124544,3254255615,CH
-3254255616,3254256127,FR
-3254256128,3254256383,GP
-3254256384,3254260991,FR
+3254255616,3254256127,RE
+3254256128,3254256639,GP
+3254256640,3254257151,YT
+3254257152,3254259455,FR
+3254259456,3254259967,YT
+3254259968,3254260223,GF
+3254260224,3254260479,MQ
+3254260480,3254260991,FR
3254260992,3254262015,YT
-3254262016,3254266367,FR
+3254262016,3254262527,FR
+3254262528,3254263039,YT
+3254263040,3254266367,FR
3254266368,3254266623,RE
3254266624,3254277119,FR
3254277120,3254278143,YT
@@ -72651,7 +72384,9 @@
3254495488,3254495743,DZ
3254495744,3254508799,FR
3254508800,3254508831,MQ
-3254508832,3254521855,FR
+3254508832,3254509412,FR
+3254509413,3254509413,GQ
+3254509414,3254521855,FR
3254521856,3254522111,GB
3254522112,3254608895,FR
3254608896,3254609151,RE
@@ -72666,7 +72401,8 @@
3254611456,3254611967,YT
3254611968,3254612991,FR
3254612992,3254613247,RE
-3254613248,3254615551,FR
+3254613248,3254615039,FR
+3254615040,3254615551,RE
3254615552,3254616063,YT
3254616064,3254648831,FR
3254648832,3254649855,AL
@@ -72678,7 +72414,7 @@
3254656512,3254656767,DE
3254656768,3254657023,GB
3254657024,3254661119,ES
-3254661120,3254665215,RO
+3254661120,3254665215,GB
3254681600,3254697983,DE
3254697984,3254698495,SE
3254698496,3254699007,GB
@@ -72732,6 +72468,7 @@
3254788352,3254789119,ES
3254789120,3254789375,FR
3254789376,3254789631,BE
+3254789890,3254789890,TK
3254790656,3254790911,LU
3254790912,3254791423,BE
3254791424,3254791679,SK
@@ -72838,7 +72575,6 @@
3254837248,3254837503,HR
3254837504,3254837759,RU
3254837760,3254838015,IE
-3254838016,3254838271,GE
3254838528,3254838783,CH
3254838784,3254839039,AT
3254839296,3254839551,DE
@@ -72924,31 +72660,38 @@
3254904832,3254907903,RU
3254908160,3254908415,CH
3254908416,3254908671,PL
-3254908672,3254908927,MT
+3254908672,3254908927,SE
3254908928,3254909951,RU
3254909952,3254910719,PL
3254910720,3254910975,HR
-3254910976,3255044095,FR
+3254910976,3254962380,FR
+3254962381,3254962381,NL
+3254962382,3254962421,FR
+3254962422,3254962422,NL
+3254962423,3255044095,FR
3255044608,3255056383,FR
3255058432,3255067647,FR
-3255068672,3255081727,FR
+3255068672,3255081471,FR
3255081984,3255114751,FR
3255115264,3255117823,FR
-3255118336,3255120127,FR
-3255120384,3255120639,FR
+3255118336,3255119871,FR
3255120640,3255120895,DE
-3255120896,3255123711,FR
+3255120896,3255121919,FR
+3255123200,3255123711,FR
3255123712,3255123967,DE
-3255123968,3255125503,FR
+3255123968,3255124991,FR
3255126016,3255127551,FR
3255127808,3255128575,FR
3255129856,3255130111,HR
-3255130112,3255134207,FR
-3255135232,3255146495,FR
+3255130112,3255133183,FR
+3255135232,3255140351,FR
+3255141376,3255146495,FR
3255148544,3255153151,FR
-3255153664,3255164927,FR
+3255153664,3255153919,FR
+3255154176,3255164927,FR
3255166720,3255166975,FR
-3255167488,3255171071,FR
+3255167488,3255167743,FR
+3255168512,3255169023,FR
3255172352,3255172607,DE
3255172608,3255173119,FR
3255173120,3255173631,SH
@@ -73153,16 +72896,17 @@
3255507712,3255507967,AT
3255507968,3255508223,UA
3255508224,3255508479,RU
-3255508480,3255544319,CH
+3255508480,3255522303,CH
+3255523328,3255544319,CH
3255544320,3255544575,DE
3255544576,3255544831,AT
-3255544832,3255558143,CH
+3255544832,3255555839,CH
+3255556096,3255558143,CH
3255558400,3255558655,UA
-3255558656,3255561983,CH
+3255558912,3255561983,CH
3255562240,3255563263,CH
3255563776,3255564031,CH
3255564032,3255564287,RU
-3255564288,3255564799,CH
3255565312,3255565955,DE
3255565956,3255565956,CH
3255565957,3255566079,DE
@@ -73174,11 +72918,13 @@
3255599104,3255615487,CH
3255615488,3255623679,DE
3255623680,3255631871,BG
-3255631872,3255660287,NL
+3255631872,3255649279,NL
+3255650304,3255660287,NL
3255660288,3255660543,GR
-3255660544,3255666431,NL
+3255660544,3255663615,NL
+3255664640,3255666175,NL
3255666432,3255666687,DE
-3255666688,3255697407,NL
+3255667712,3255697407,NL
3255697408,3255710719,SE
3255710720,3255710975,ES
3255710976,3255724543,SE
@@ -73196,17 +72942,19 @@
3255752960,3255753215,LI
3255753216,3255762943,SE
3255762944,3255771135,DE
-3255779328,3255791615,DE
+3255779328,3255782655,DE
+3255783424,3255791615,DE
3255791616,3255792639,UA
3255792640,3255793663,RU
3255793664,3255794943,PL
3255794944,3255795711,RU
-3255795712,3255799039,DE
+3255795712,3255798783,DE
3255799040,3255799295,SE
3255799296,3255800575,DE
3255800576,3255800831,UA
3255800832,3255801855,DE
-3255802368,3255817215,DE
+3255802368,3255802623,DE
+3255802880,3255817215,DE
3255817216,3255817471,SE
3255817472,3255817727,ES
3255817728,3255820287,DE
@@ -73257,16 +73005,21 @@
3256417280,3256417791,NO
3256417792,3256418303,GB
3256418304,3256483839,DE
-3256483840,3256489471,NL
+3256483840,3256484095,NL
+3256485888,3256489471,NL
3256489472,3256489983,GR
3256489984,3256490239,BE
3256490496,3256490751,CH
-3256490752,3256511487,NL
-3256511744,3256513023,NL
-3256513280,3256524287,NL
+3256490752,3256502271,NL
+3256503296,3256509439,NL
+3256510464,3256511487,NL
+3256512000,3256513023,NL
+3256513536,3256522239,NL
+3256522752,3256524287,NL
3256524288,3256524799,DE
-3256524800,3256528895,NL
-3256530944,3256549375,NL
+3256524800,3256526847,NL
+3256530944,3256531967,NL
+3256532992,3256549375,NL
3256549376,3256614911,TR
3256614912,3256615935,FI
3256615936,3256616959,UA
@@ -73291,7 +73044,7 @@
3256640512,3256641535,UA
3256641536,3256642559,PL
3256642560,3256643583,SI
-3256643584,3256644607,MD
+3256643584,3256644607,NL
3256644608,3256645631,IT
3256645632,3256646655,SE
3256646656,3256647679,GB
@@ -73325,6 +73078,7 @@
3256694784,3256695807,DE
3256695808,3256696831,UA
3256698368,3256698623,NL
+3256699136,3256699391,NL
3256699392,3256699647,GB
3256705024,3256705279,IE
3256705536,3256705791,BE
@@ -73393,29 +73147,32 @@
3256860672,3256863743,DE
3256864256,3256864511,DE
3256864512,3256864767,CH
-3256864768,3256870911,DE
+3256864768,3256866815,DE
+3256867840,3256870911,DE
3256870912,3256871167,RU
3256871168,3256871935,DE
-3256872448,3256874239,DE
-3256874496,3256875007,DE
+3256872448,3256872703,DE
+3256872960,3256873983,DE
+3256874496,3256874751,DE
3256875008,3256875519,UA
3256875520,3256876031,RU
3256876032,3256876287,PL
3256876288,3256876543,RU
3256876544,3256876799,CH
-3256877056,3256898559,GB
+3256877056,3256896511,GB
+3256898048,3256898303,GB
3256898560,3256899071,TR
3256899072,3256899583,RU
-3256899584,3256915455,GB
+3256905216,3256905471,GB
+3256909824,3256915455,GB
3256915456,3256915711,RS
3256915712,3256915967,SE
-3256915968,3256944639,GB
-3256944896,3256945151,GB
+3256918016,3256944639,GB
+3256945408,3256945663,GB
3256945664,3256945919,SI
3256945920,3256946175,GB
3256946176,3256946431,RO
3256946432,3256946687,UA
-3256946688,3256946943,GB
3256946944,3256947711,DE
3256947712,3256958975,GB
3256958976,3256959999,RO
@@ -73446,7 +73203,8 @@
3256973312,3256973823,DE
3256973824,3256975359,IR
3256975360,3256988671,GB
-3256988672,3256989183,UA
+3256988672,3256988927,RU
+3256988928,3256989183,UA
3256989440,3256989695,GB
3256989696,3256989951,HU
3256989952,3256990207,PL
@@ -73460,15 +73218,24 @@
3257011456,3257024511,GB
3257024512,3257032703,AU
3257032704,3257040895,GB
-3257042944,3257051135,GB
-3257052160,3257052927,GB
+3257042944,3257043711,GB
+3257043968,3257047039,GB
+3257050112,3257051135,GB
+3257052672,3257052927,GB
3257053184,3257057279,GB
3257058816,3257059071,PL
-3257059072,3257092607,GB
+3257059328,3257065471,GB
+3257073664,3257085951,GB
+3257087744,3257087999,GB
+3257090048,3257092351,GB
3257092608,3257092863,RO
-3257092864,3257095167,GB
+3257092864,3257093119,GB
+3257093888,3257094143,GB
+3257094656,3257095167,GB
3257097472,3257097983,GB
-3257098240,3257139199,GB
+3257106432,3257131007,GB
+3257135104,3257137151,GB
+3257138176,3257139199,GB
3257139200,3257139455,DK
3257139456,3257143295,GB
3257143296,3257143807,RU
@@ -73478,10 +73245,11 @@
3257144576,3257144831,GB
3257144832,3257145087,FR
3257145088,3257145343,GB
-3257146112,3257146367,GB
-3257147392,3257163775,GB
-3257167872,3257169919,GB
-3257170176,3257176063,GB
+3257147392,3257154559,GB
+3257155584,3257163775,GB
+3257167872,3257168895,GB
+3257170176,3257170943,GB
+3257171968,3257176063,GB
3257178112,3257180159,GB
3257180160,3257180415,TR
3257180416,3257180671,RU
@@ -73491,51 +73259,52 @@
3257181440,3257181695,PL
3257181696,3257181951,FR
3257182208,3257182463,PL
-3257182720,3257186303,GB
-3257188352,3257196543,GB
+3257184256,3257186303,GB
+3257192448,3257196543,GB
3257196544,3257200639,LU
3257200640,3257204735,GB
3257204736,3257225215,AT
-3257226240,3257227263,AT
+3257226240,3257227263,DE
3257229312,3257268223,AT
3257268224,3257268479,UA
3257268480,3257268735,SE
-3257268736,3257269247,AT
+3257268992,3257269247,AT
3257269248,3257269503,IT
-3257269504,3257270015,AT
+3257269504,3257269759,AT
3257270016,3257270271,DE
3257286656,3257294847,CH
3257294848,3257303039,HU
3257303040,3257311231,PT
3257311232,3257335807,CH
-3257335808,3257355775,DE
+3257335808,3257343999,DE
+3257348096,3257355775,DE
3257356288,3257356799,DE
3257357312,3257357567,PT
3257357568,3257357823,SI
-3257357824,3257371903,DE
+3257357824,3257363455,DE
+3257364480,3257371903,DE
3257371904,3257372159,BE
3257372416,3257372671,GB
-3257372672,3257382911,DE
+3257372672,3257380863,DE
+3257381120,3257381375,DE
+3257381888,3257382911,DE
3257382912,3257383167,NL
3257383168,3257383679,DE
-3257383936,3257387007,DE
-3257388544,3257388799,DE
-3257388800,3257389055,FR
-3257389056,3257390079,DE
-3257390592,3257395199,DE
-3257396224,3257401343,DE
+3257383936,3257389055,DE
+3257390592,3257390847,DE
+3257391104,3257395199,DE
+3257396480,3257396735,DE
+3257397248,3257401343,DE
3257401344,3257453567,CH
3257453568,3257454591,RO
3257454592,3257455103,IT
3257455104,3257455359,RO
3257455360,3257455615,SI
-3257455616,3257461759,CH
-3257462016,3257466879,CH
+3257455616,3257466879,CH
3257466880,3257467135,DE
3257467392,3257467903,SE
3257467904,3257468927,IT
3257469184,3257469439,IT
-3257469440,3257469951,GB
3257469952,3257470975,PL
3257470976,3257471999,FI
3257472000,3257472511,SG
@@ -73544,12 +73313,11 @@
3257481216,3257481471,GB
3257481472,3257481727,DE
3257481728,3257481983,FI
-3257481984,3257482239,FR
-3257482240,3257482751,RO
+3257482240,3257482751,GB
3257482752,3257483007,NL
3257483008,3257491455,CH
3257491456,3257495551,BE
-3257495552,3257532415,CH
+3257499648,3257532415,CH
3257532416,3257542655,CY
3257542656,3257542911,PL
3257542912,3257543423,IT
@@ -73565,7 +73333,11 @@
3257546688,3257546719,DE
3257546720,3257546751,DK
3257546752,3257548799,IE
-3257548800,3257556991,GB
+3257548800,3257551623,GB
+3257551624,3257551647,BE
+3257551648,3257551711,GB
+3257551712,3257551719,BE
+3257551720,3257556991,GB
3257557504,3257558015,LU
3257558016,3257559039,RO
3257559552,3257560063,UA
@@ -73629,13 +73401,14 @@
3257841664,3257841919,IE
3257841920,3257842943,GB
3257842944,3257843199,IE
-3257843200,3257844735,GB
-3257844736,3257860095,IE
+3257843200,3257843711,GB
+3257843712,3257860095,IE
3257860096,3257925631,SE
3257925632,3257925887,AT
3257925888,3257926143,SE
3257926144,3257926399,AT
-3257926656,3257977855,AT
+3257926656,3257970687,AT
+3257972736,3257977855,AT
3257977856,3257978111,GB
3257978112,3257978367,SE
3257978368,3257978623,BG
@@ -73654,13 +73427,12 @@
3257986048,3257987327,AT
3257987328,3257987583,CZ
3257987840,3257988095,AT
-3257989120,3257991167,AT
+3257990656,3257990911,AT
3257991168,3257995263,DE
3257996032,3258003967,DE
3258003968,3258004479,RU
-3258004992,3258018815,DE
-3258019328,3258019583,DE
-3258019840,3258021887,DE
+3258004992,3258005503,DE
+3258006528,3258021887,DE
3258021888,3258022911,RU
3258022912,3258023167,PL
3258023168,3258023423,DE
@@ -73704,7 +73476,6 @@
3258073088,3258074111,CZ
3258074112,3258074879,DE
3258074880,3258075135,IL
-3258075136,3258075391,RO
3258075904,3258076159,PL
3258076160,3258076415,BG
3258076416,3258076927,FR
@@ -73786,7 +73557,7 @@
3258103552,3258103807,AE
3258104320,3258104575,PL
3258104576,3258104831,DE
-3258105088,3258105599,CZ
+3258105088,3258105343,CZ
3258105600,3258105855,DE
3258105856,3258109951,CZ
3258109952,3258110207,DK
@@ -73795,7 +73566,7 @@
3258111488,3258111743,PL
3258111744,3258118399,CZ
3258118400,3258118655,UA
-3258118656,3258119679,CZ
+3258118656,3258118911,CZ
3258120192,3258120703,CZ
3258121216,3258121471,PL
3258121728,3258121983,UA
@@ -73805,16 +73576,19 @@
3258230784,3258232831,NO
3258232832,3258249215,SE
3258249216,3258253311,NO
-3258253312,3258272767,NL
+3258253312,3258254335,NL
+3258255360,3258269695,NL
+3258271744,3258272767,NL
3258272768,3258273791,FR
-3258273792,3258279935,NL
-3258281984,3258284031,NL
-3258284288,3258290175,NL
+3258273792,3258275071,NL
+3258275840,3258286079,NL
+3258286592,3258288127,NL
3258294272,3258297343,NL
3258297344,3258297599,BE
3258297600,3258298111,NL
3258298112,3258298367,GB
-3258298368,3258318847,NL
+3258298368,3258302463,NL
+3258306560,3258318847,NL
3258318848,3258320895,DE
3258320896,3258321919,GB
3258321920,3258322943,RU
@@ -73831,32 +73605,35 @@
3258343424,3258351615,NO
3258351616,3258352639,RO
3258352640,3258353663,RU
-3258353664,3258354687,NO
3258354688,3258355711,BG
3258355712,3258356735,NL
3258356736,3258357759,RU
3258357760,3258360831,UA
3258360832,3258361855,SE
3258361856,3258362879,IL
-3258362880,3258363903,IM
+3258362880,3258362891,IM
+3258362892,3258362892,GB
+3258362893,3258363903,IM
3258363904,3258364927,RU
3258364928,3258365951,XK
3258365952,3258366975,UA
3258366976,3258367999,PL
3258368000,3258384383,KW
3258384384,3258385407,DE
-3258386432,3258411007,DE
-3258411520,3258423295,DE
+3258388480,3258395647,DE
+3258396672,3258423295,DE
3258424320,3258424575,DE
3258424832,3258426367,DE
-3258427392,3258427647,DE
3258427648,3258427903,RO
3258427904,3258428159,DE
-3258428416,3258449919,DE
+3258428416,3258441727,DE
+3258443776,3258444799,DE
+3258445824,3258449919,DE
3258449920,3258468351,CH
3258474496,3258486783,CH
3258486784,3258487807,LI
-3258487808,3258503935,CH
+3258488832,3258495999,CH
+3258499072,3258503935,CH
3258503936,3258504191,PL
3258504192,3258504703,CH
3258504704,3258504959,DE
@@ -73866,9 +73643,13 @@
3258507008,3258515455,CH
3258515456,3258580991,FR
3258580992,3258646527,RU
-3258646528,3258660351,DE
+3258646528,3258654719,DE
+3258655232,3258658303,DE
+3258658560,3258659839,DE
3258660864,3258681343,DE
-3258683136,3258691583,DE
+3258683136,3258689023,DE
+3258689792,3258690047,DE
+3258690560,3258691583,DE
3258691840,3258692351,AT
3258692352,3258692607,DE
3258692608,3258692863,FR
@@ -73878,7 +73659,7 @@
3258693888,3258694143,SI
3258694144,3258694399,RU
3258694656,3258694911,GB
-3258694912,3258701823,DE
+3258694912,3258701311,DE
3258702848,3258712063,DE
3258712064,3258728447,GB
3258728448,3258729471,FR
@@ -73890,7 +73671,6 @@
3258730752,3258731007,TR
3258731008,3258731263,SI
3258731264,3258731519,NO
-3258731520,3258731775,ES
3258731776,3258732031,UA
3258732032,3258732287,DE
3258732288,3258732543,PL
@@ -73898,11 +73678,10 @@
3258732800,3258733055,CH
3258733056,3258733311,RO
3258733312,3258734079,GB
-3258734336,3258734591,GB
3258735104,3258735359,GB
3258736640,3258745855,GB
3258746880,3258762239,GB
-3258763264,3258764287,GB
+3258764032,3258764287,GB
3258764288,3258764543,DE
3258764800,3258765055,BE
3258765056,3258765311,NL
@@ -73931,24 +73710,22 @@
3258794496,3258794751,PL
3258794752,3258795007,RU
3258795008,3258796031,PL
-3258796032,3258802175,GB
+3258797568,3258802175,GB
3258802176,3258806271,LU
-3258806272,3258813439,GB
-3258814464,3258817535,GB
-3258817792,3258818047,GB
+3258808832,3258809343,GB
+3258812416,3258813439,GB
3258818048,3258818303,SE
-3258818560,3258843135,GB
+3258818560,3258834943,GB
+3258839040,3258843135,GB
3258843136,3258843391,RU
-3258844672,3258847231,GB
+3258844928,3258847231,GB
3258848256,3258848767,GB
3258848768,3258849023,RO
3258849024,3258849279,DE
3258849280,3258859519,GB
3258859520,3258859775,BY
3258859776,3258860031,GB
-3258860288,3258882047,GB
-3258883072,3258883327,GB
-3258884096,3258900479,GB
+3258860288,3258900479,GB
3258901504,3258902783,GB
3258903040,3258903295,FR
3258903296,3258903551,GB
@@ -74000,7 +73777,8 @@
3259284480,3259284735,US
3259284736,3259285759,SE
3259285760,3259286015,GB
-3259286016,3259290879,SE
+3259286016,3259290623,SE
+3259290624,3259290879,NO
3259290880,3259291135,US
3259291136,3259293951,SE
3259293952,3259294207,LI
@@ -74051,14 +73829,15 @@
3259498496,3259541503,GB
3259541504,3259543551,NL
3259543552,3259760639,GB
-3259761152,3259767807,DE
+3259761152,3259767295,DE
3259768064,3259787263,DE
-3259787520,3259814399,DE
+3259787776,3259789311,DE
+3259791360,3259814399,DE
3259814400,3259814655,AT
3259814656,3259816447,DE
3259816704,3259821055,DE
3259821824,3259822079,AT
-3259822080,3259823103,DE
+3259822592,3259823103,DE
3259823104,3259823615,RO
3259823616,3259823871,NO
3259823872,3259824127,IE
@@ -74071,7 +73850,9 @@
3259961344,3259962367,FI
3259962368,3259963391,UA
3259963392,3259964415,PL
-3259964416,3259965439,GB
+3259964416,3259964927,GB
+3259964928,3259964959,NL
+3259964960,3259965439,GB
3259965440,3259966463,RU
3259967488,3259968511,RS
3259968512,3259969535,RU
@@ -74104,11 +73885,10 @@
3260549120,3260549375,AT
3260549376,3260549631,CH
3260549632,3260549887,DE
-3260550144,3260550399,PL
3260550656,3260551167,RU
3260551168,3260553983,DE
3260553984,3260554239,GB
-3260554240,3260555263,SE
+3260554240,3260555263,CH
3260555264,3260563455,HU
3260563456,3260571647,GB
3260571648,3260579839,BE
@@ -74182,8 +73962,9 @@
3261202432,3261213439,FR
3261213440,3261213695,AF
3261213696,3261267967,FR
-3261267968,3261281023,DE
-3261281280,3261297663,DE
+3261267968,3261280767,DE
+3261281280,3261282559,DE
+3261283328,3261297663,DE
3261297664,3261297919,RU
3261297920,3261298175,PL
3261298176,3261333503,DE
@@ -74192,19 +73973,24 @@
3261472768,3261530111,RO
3261530112,3261531903,SE
3261531904,3261532159,GB
-3261532160,3261534207,SE
+3261532160,3261532415,SE
+3261532416,3261532671,GB
+3261532672,3261532927,SE
+3261532928,3261533183,GB
+3261533184,3261534207,SE
3261534208,3261534463,NL
3261534464,3261534719,SE
3261534720,3261534975,US
-3261534976,3261539327,SE
-3261539328,3261540351,SG
+3261534976,3261538559,SE
+3261538560,3261538815,GB
+3261538816,3261539327,SE
+3261539328,3261540351,GB
3261540352,3261554175,SE
3261554176,3261554431,DK
3261554432,3261595647,SE
3261595648,3261599743,NL
-3261600768,3261632511,NL
-3261633536,3261636095,NL
-3261636352,3261643775,NL
+3261601792,3261624831,NL
+3261626368,3261643775,NL
3261644800,3261661183,NL
3261661184,3261669375,RO
3261669376,3261673471,MT
@@ -74291,15 +74077,13 @@
3261824000,3261824255,RU
3261824512,3261824767,FR
3261824768,3261825023,PT
-3261825280,3261855743,AT
+3261825280,3261827071,AT
+3261828096,3261855743,AT
3261857792,3261923327,CZ
3261923328,3261988863,NL
3261988864,3261989119,SE
-3261989120,3261989375,FI
3261990400,3261990655,UA
-3261992448,3261992703,FI
3261993472,3261993727,RU
-3261993728,3261993983,FI
3261994752,3261995263,FI
3261995264,3261995519,DE
3261995520,3261995775,PL
@@ -74317,9 +74101,7 @@
3262008576,3262008831,PL
3262008832,3262009087,AT
3262009088,3262009343,UA
-3262010112,3262010367,FI
3262013440,3262017535,SE
-3262018304,3262018559,FI
3262018560,3262018815,PL
3262021120,3262021375,UA
3262021376,3262021631,PL
@@ -74336,7 +74118,6 @@
3262028800,3262029823,DE
3262029824,3262030847,NL
3262030848,3262031871,FR
-3262031872,3262033919,FI
3262033920,3262038015,AX
3262038016,3262038271,FR
3262038272,3262038527,RU
@@ -74415,16 +74196,17 @@
3262151936,3262152191,DE
3262152664,3262152671,DE
3262152704,3262185471,AT
-3262185472,3262191615,DE
-3262192128,3262192383,DE
-3262192640,3262196479,DE
-3262196736,3262200319,DE
-3262200576,3262218239,DE
-3262219264,3262224383,DE
+3262185472,3262194175,DE
+3262195712,3262196223,DE
+3262197760,3262200319,DE
+3262200576,3262201087,DE
+3262201856,3262224383,DE
3262224896,3262225151,AT
-3262225408,3262227455,DE
+3262226432,3262227455,DE
3262227712,3262227967,RO
-3262227968,3262229247,DE
+3262227968,3262228223,DE
+3262228480,3262228735,DE
+3262228992,3262229247,DE
3262229248,3262229503,NL
3262229504,3262248191,DE
3262248448,3262283775,DE
@@ -74492,7 +74274,6 @@
3262446592,3262447103,PL
3262447104,3262447615,GB
3262447616,3262460415,PT
-3262460416,3262460543,UA
3262460544,3262460671,RU
3262460672,3262460927,AE
3262460928,3262461055,CY
@@ -74579,9 +74360,7 @@
3262478308,3262478311,ES
3262478312,3262478319,DE
3262478320,3262478323,GB
-3262478324,3262478345,DE
-3262478346,3262478346,PT
-3262478347,3262478389,DE
+3262478324,3262478389,DE
3262478390,3262478390,ES
3262478391,3262478404,DE
3262478405,3262478405,GB
@@ -74604,12 +74383,9 @@
3262479428,3262479428,FR
3262479429,3262479654,DE
3262479655,3262479655,NL
-3262479656,3262479751,DE
-3262479752,3262479752,CH
-3262479753,3262480282,DE
+3262479656,3262480282,DE
3262480283,3262480283,GB
-3262480284,3262480316,DE
-3262480317,3262480317,NL
+3262480284,3262480317,DE
3262480318,3262480318,IT
3262480319,3262480383,DE
3262480384,3262488575,GB
@@ -74619,7 +74395,8 @@
3262505984,3262506495,PL
3262506496,3262507007,RO
3262507008,3262507519,DK
-3262507520,3262508543,RO
+3262507520,3262508031,VG
+3262508032,3262508543,RO
3262509056,3262509567,PL
3262509568,3262510079,RO
3262510080,3262511103,FR
@@ -74636,7 +74413,9 @@
3262648576,3262654463,NL
3262654464,3262654719,DE
3262654720,3262664703,NL
-3262664704,3262670847,DE
+3262664704,3262665736,DE
+3262665737,3262665737,CH
+3262665738,3262670847,DE
3262670848,3262690815,NL
3262690816,3262691583,DE
3262691584,3262693375,NL
@@ -74652,10 +74431,13 @@
3262754816,3262832639,NL
3262832640,3262840319,DE
3262840320,3262906367,NL
-3262906368,3262954495,CH
+3262906368,3262914559,CH
+3262922752,3262954495,CH
3262954496,3262955519,LI
3262955520,3262958591,CH
-3262959104,3262964991,CH
+3262959360,3262960127,CH
+3262960640,3262960895,CH
+3262961408,3262964991,CH
3262964992,3262965247,DE
3262965248,3262971903,CH
3262971904,3263029247,IE
@@ -74705,7 +74487,6 @@
3263091456,3263091711,NO
3263091712,3263091967,FI
3263091968,3263092479,HR
-3263092480,3263092735,ES
3263092736,3263092991,PL
3263092992,3263093247,FR
3263093248,3263093503,CH
@@ -74738,7 +74519,7 @@
3263101440,3263101695,DK
3263101696,3263101951,RU
3263101952,3263102207,LT
-3263102208,3263102463,RO
+3263102208,3263102463,GB
3263102464,3263102719,PL
3263102720,3263102975,GR
3263102976,3263104030,DE
@@ -74748,21 +74529,25 @@
3263104042,3263121420,DE
3263121421,3263121421,BE
3263121422,3263131647,DE
-3263133184,3263133439,DE
3263133696,3263137791,DE
3263137792,3263138303,PL
3263138304,3263138551,DE
3263138552,3263138815,AT
-3263138816,3263165439,DE
-3263166464,3263168511,DE
+3263138816,3263168511,DE
3263168512,3263430655,GB
3263430656,3263436543,SE
3263436544,3263436799,ES
-3263436800,3263458047,SE
+3263436800,3263443455,SE
+3263443456,3263443967,NL
+3263443968,3263446527,SE
+3263446528,3263447039,DE
+3263447040,3263458047,SE
3263458048,3263458303,DE
3263458304,3263459583,SE
3263459584,3263459839,FR
-3263459840,3263469567,SE
+3263459840,3263460095,SE
+3263460096,3263460351,GB
+3263460352,3263469567,SE
3263469568,3263470591,SG
3263470592,3263475711,SE
3263475712,3263476735,JP
@@ -74770,7 +74555,9 @@
3263478528,3263478783,ES
3263478784,3263480831,SE
3263480832,3263481855,JP
-3263481856,3263496191,SE
+3263481856,3263482879,SE
+3263482880,3263483903,GB
+3263483904,3263496191,SE
3263496192,3263501519,GB
3263501520,3263501527,IE
3263501528,3263503103,GB
@@ -74903,7 +74690,7 @@
3264334336,3264334847,UA
3264334848,3264335359,PL
3264335360,3264335871,SK
-3264335872,3264336383,GB
+3264335872,3264336383,BZ
3264337408,3264338431,UA
3264338432,3264338943,DE
3264338944,3264339455,UA
@@ -74925,10 +74712,13 @@
3264345088,3264346111,NL
3264346112,3264347135,SE
3264347136,3264348159,DE
-3264348160,3264360191,FR
-3264360448,3264372223,FR
-3264372736,3264375039,FR
-3264375040,3264376063,SE
+3264350208,3264356351,FR
+3264356608,3264356863,FR
+3264357632,3264357887,DE
+3264359936,3264360191,FR
+3264360448,3264369151,FR
+3264372736,3264373759,FR
+3264374784,3264376063,SE
3264376064,3264376319,HR
3264376320,3264376575,UA
3264376576,3264376831,CH
@@ -74968,26 +74758,24 @@
3264409600,3264410623,RU
3264410624,3264411647,NO
3264411648,3264413695,PL
-3264417536,3264419327,CH
+3264417792,3264419839,CH
3264423424,3264428031,CH
3264430592,3264430847,CH
3264431104,3264431615,LI
3264431616,3264431871,CH
-3264432128,3264434687,CH
-3264434944,3264438783,CH
-3264439296,3264439551,CH
+3264432128,3264438527,CH
3264439808,3264440831,CH
3264441344,3264441599,PL
-3264442368,3264444415,CH
-3264444928,3264445183,DE
-3264445184,3264445439,CH
+3264442368,3264446463,CH
3264447488,3264447743,CH
3264447744,3264447999,DE
3264448000,3264448511,CH
-3264449536,3264450047,CH
+3264449792,3264450047,CH
3264450304,3264452607,CH
3264454656,3264456191,CH
-3264456704,3264463871,CH
+3264456704,3264457471,CH
+3264457472,3264457727,AT
+3264457728,3264463871,CH
3264463872,3264466943,LI
3264466944,3264474623,CH
3264475136,3264475391,CH
@@ -74995,8 +74783,12 @@
3264476672,3264477183,RU
3264477184,3264477439,PL
3264477440,3264477695,RU
-3264477696,3264544767,CH
-3264544768,3264561151,HU
+3264477952,3264544767,CH
+3264544768,3264556799,HU
+3264556800,3264557055,BG
+3264557056,3264557823,HU
+3264557824,3264558079,BG
+3264558080,3264561151,HU
3264561152,3264563199,RU
3264563200,3264564223,ES
3264564224,3264565247,IE
@@ -75022,7 +74814,11 @@
3264606976,3264607231,BE
3264607232,3264607487,IT
3264607488,3264610303,DE
-3264610304,3264614911,GB
+3264610304,3264612479,GB
+3264612480,3264612575,FR
+3264612576,3264613027,GB
+3264613028,3264613031,FR
+3264613032,3264614911,GB
3264614912,3264615167,SE
3264615168,3264617983,GB
3264617984,3264618239,US
@@ -75195,27 +74991,39 @@
3264921600,3264929791,LU
3264929792,3264937983,SK
3264937984,3265003519,GB
-3265003520,3265006591,DE
-3265007616,3265018879,DE
+3265003520,3265005567,DE
+3265007616,3265010175,DE
+3265011712,3265018879,DE
3265018880,3265019903,HK
-3265036288,3265042943,DE
-3265043456,3265044991,DE
-3265045504,3265045759,DE
+3265036288,3265037311,DE
+3265038080,3265041919,DE
+3265042176,3265042943,DE
+3265043712,3265043967,DE
+3265044736,3265044991,DE
3265045760,3265046015,TR
-3265046016,3265048575,DE
-3265050624,3265054719,DE
+3265046016,3265046271,DE
+3265046528,3265048575,DE
+3265050624,3265052671,DE
+3265053696,3265054719,DE
3265055232,3265055743,FR
-3265055744,3265069055,DE
+3265055744,3265067007,DE
+3265068544,3265068799,DE
3265069056,3265134591,FI
-3265134592,3265137983,CH
+3265134592,3265134863,CH
+3265134864,3265134879,BE
+3265134880,3265135039,CH
+3265135040,3265135071,BE
+3265135072,3265137983,CH
3265137984,3265138047,NL
3265138048,3265138599,CH
3265138600,3265138607,NL
-3265138608,3265138863,CH
-3265138864,3265138879,SE
-3265138880,3265139999,CH
+3265138608,3265139967,CH
+3265139968,3265139975,BE
+3265139976,3265139999,CH
3265140000,3265140015,BE
-3265140016,3265141135,CH
+3265140016,3265140119,CH
+3265140120,3265140127,BE
+3265140128,3265141135,CH
3265141136,3265141151,GB
3265141152,3265141551,CH
3265141552,3265141555,IE
@@ -75261,8 +75069,9 @@
3265595392,3265595903,PL
3265596416,3265596927,GB
3265596928,3265597439,FR
-3265597440,3265599999,RU
-3265600000,3265600511,HU
+3265597440,3265597951,MC
+3265597952,3265599999,RU
+3265600000,3265600255,HU
3265600512,3265601023,GB
3265601024,3265601535,RU
3265601536,3265601791,SE
@@ -75302,8 +75111,11 @@
3265724416,3265789951,FR
3265789952,3265824767,GB
3265824768,3265825023,US
-3265825024,3265877247,GB
-3265877504,3265879039,GB
+3265825024,3265867775,GB
+3265868288,3265868543,GB
+3265868800,3265869055,DE
+3265869312,3265869823,GB
+3265871872,3265878015,GB
3265880064,3265886207,GB
3265887232,3265887487,GB
3265887488,3265887743,PT
@@ -75313,7 +75125,6 @@
3265904384,3265904639,RO
3265904640,3265904895,DE
3265905152,3265905663,GB
-3265905664,3265905919,IE
3265905920,3265906175,GB
3265906176,3265906431,DE
3265906432,3265906687,CH
@@ -75420,26 +75231,33 @@
3266445312,3266510847,NL
3266510848,3266543615,ES
3266543616,3266576383,IT
-3266576384,3266582783,DE
-3266583040,3266588927,DE
+3266576384,3266584575,DE
+3266586624,3266588927,DE
3266589440,3266603007,DE
3266603264,3266603519,DE
-3266604032,3266617279,DE
-3266617312,3266617327,DE
+3266604032,3266616831,DE
+3266617088,3266617279,DE
3266617328,3266617343,GB
-3266617344,3266621439,DE
-3266624512,3266634383,DE
+3266617344,3266619903,DE
+3266620160,3266621439,DE
+3266624512,3266634271,DE
+3266634368,3266634383,DE
3266634392,3266634399,EE
3266634400,3266634431,DE
-3266634464,3266634751,DE
-3266635520,3266637055,DE
+3266634496,3266634751,DE
+3266636288,3266636799,DE
+3266636928,3266636991,DE
3266637312,3266641919,DE
3266641920,3266707455,PL
3266707456,3266772991,DK
3266772992,3266781183,IT
3266781184,3266789375,PL
3266789376,3266797567,SM
-3266797568,3266805759,GB
+3266797568,3266797823,GB
+3266797824,3266798079,ES
+3266798080,3266798847,GB
+3266798848,3266798879,CZ
+3266798880,3266805759,GB
3266805760,3266813951,AT
3266813952,3266822143,UA
3266822144,3266830335,FR
@@ -75453,7 +75271,6 @@
3267040256,3267041279,RO
3267042304,3267043327,UA
3267043328,3267044351,GB
-3267044352,3267045375,RU
3267045376,3267046399,PL
3267046400,3267047423,NL
3267047424,3267048447,UA
@@ -75484,7 +75301,7 @@
3267073024,3267075071,UA
3267075072,3267076095,CH
3267076096,3267078143,DE
-3267078144,3267079167,PL
+3267078144,3267079167,FR
3267079168,3267080191,IT
3267080192,3267081215,AT
3267081216,3267082239,PL
@@ -75503,7 +75320,9 @@
3267095552,3267096575,PL
3267096576,3267097599,DE
3267097600,3267098623,KZ
-3267098624,3267099647,GB
+3267098624,3267099391,GB
+3267099392,3267099399,BE
+3267099400,3267099647,GB
3267099648,3267100671,IT
3267100672,3267166207,FI
3267166208,3267231743,GB
@@ -75530,13 +75349,11 @@
3267631096,3267631103,IT
3267631104,3267631615,GB
3267634176,3267635199,GB
-3267636864,3267636991,ZA
3267648320,3267648335,GB
3267650320,3267650335,AT
3267657576,3267657583,RO
3267657696,3267657703,RO
3267657712,3267657727,RO
-3267660608,3267660671,ES
3267661904,3267661967,ES
3267662896,3267662911,IE
3267665920,3267666943,GB
@@ -75600,12 +75417,13 @@
3268235936,3268236031,GB
3268236192,3268236207,GB
3268236544,3268236799,GB
+3268237824,3268237855,GB
3268238336,3268238359,GB
3268238368,3268238399,GB
3268238472,3268238543,GB
3268238552,3268238591,GB
-3268238608,3268238623,GB
-3268238632,3268238847,GB
+3268238632,3268238783,GB
+3268238816,3268238847,GB
3268239584,3268240127,GB
3268240160,3268240191,GB
3268240384,3268240399,GB
@@ -75692,9 +75510,7 @@
3268427776,3268464127,AT
3268464128,3268464383,LI
3268464384,3268476927,AT
-3268476928,3268537087,CH
-3268537088,3268537343,US
-3268537344,3268542463,CH
+3268476928,3268542463,CH
3268542464,3268607999,PT
3268608000,3268673535,FI
3268673536,3268739071,CZ
@@ -75788,6 +75604,7 @@
3269285088,3269285135,DE
3269285136,3269285151,GB
3269285152,3269285215,DE
+3269285216,3269285311,FR
3269285312,3269285327,DE
3269285336,3269285343,FR
3269285344,3269285344,GB
@@ -75916,7 +75733,9 @@
3270680576,3270688767,FR
3270688768,3270836223,IT
3270836224,3270901759,DE
-3270901760,3270909951,IT
+3270901760,3270903807,IT
+3270903808,3270905855,SE
+3270905856,3270909951,IT
3270909952,3270911743,DE
3270911840,3270911871,PL
3270911872,3270911935,DE
@@ -76041,7 +75860,7 @@
3271745024,3271745535,PL
3271745536,3271746047,GB
3271746048,3271746559,RU
-3271746560,3271747071,CH
+3271746560,3271747071,US
3271747072,3271747583,KZ
3271747584,3271748095,RU
3271748096,3271748607,GR
@@ -76056,7 +75875,6 @@
3271753728,3271770111,FR
3271770112,3271786495,AT
3271786496,3271788543,UA
-3271788544,3271789567,GB
3271789568,3271790591,RU
3271790592,3271791615,LV
3271791616,3271792639,UA
@@ -76065,7 +75883,7 @@
3271794688,3271795711,IT
3271795712,3271796735,NL
3271796736,3271797759,SK
-3271797760,3271798783,GB
+3271797760,3271798783,SA
3271798784,3271799807,NL
3271799808,3271800831,RU
3271800832,3271801855,GB
@@ -76102,7 +75920,7 @@
3271916032,3271916543,GB
3271916544,3271917311,UA
3271917312,3271925759,RU
-3271925760,3271926015,DE
+3271925760,3271926015,DK
3271926016,3271926271,MD
3271926272,3271926527,RU
3271926528,3271926783,NL
@@ -76258,7 +76076,7 @@
3272217088,3272217151,GB
3272217216,3272217279,BE
3272217280,3272217303,DE
-3272217304,3272217311,BE
+3272217304,3272217319,BE
3272217344,3272217599,GB
3272217600,3272217631,CH
3272217856,3272217875,ES
@@ -76358,7 +76176,10 @@
3272384512,3272392703,LT
3272392704,3272400895,AT
3272400912,3272400919,GB
+3272401216,3272401247,PL
+3272401280,3272401407,NL
3272402432,3272402687,GB
+3272403072,3272403199,NL
3272403968,3272404991,FR
3272404992,3272406015,DE
3272406016,3272407039,NL
@@ -76431,7 +76252,7 @@
3272625152,3272626175,UA
3272626176,3272627199,DE
3272627200,3272628223,NL
-3272628224,3272629247,UA
+3272628224,3272629247,CZ
3272629248,3272638463,RU
3272638464,3272646655,ES
3272646656,3272647385,GB
@@ -76456,7 +76277,7 @@
3272870912,3272871935,FR
3272871936,3272872959,FI
3272872960,3272875007,BG
-3272875008,3272876031,UA
+3272875008,3272876031,RU
3272876032,3272884223,NL
3272884224,3272892415,DE
3272892416,3272892927,UA
@@ -76484,7 +76305,8 @@
3272902912,3272903167,RU
3272903168,3272903423,PL
3272903424,3272903679,AT
-3272903680,3272904191,RU
+3272903680,3272903935,RU
+3272903936,3272904191,DK
3272904192,3272904447,SI
3272904704,3272904959,NL
3272904960,3272905215,RO
@@ -76597,6 +76419,7 @@
3273326592,3273326847,IE
3273326984,3273326987,DE
3273326992,3273327047,DE
+3273327104,3273327231,DE
3273327264,3273327287,DE
3273327376,3273327423,IE
3273327424,3273327511,GB
@@ -76628,7 +76451,8 @@
3273334272,3273334783,DE
3273334784,3273335039,AE
3273335296,3273335423,GB
-3273335432,3273335447,GB
+3273335432,3273335455,GB
+3273335512,3273335535,GB
3273335936,3273335999,DE
3273336848,3273336863,DE
3273336864,3273336871,GB
@@ -76638,9 +76462,7 @@
3273338624,3273338879,DE
3273339136,3273339391,DE
3273339392,3273340415,GB
-3273340928,3273341695,FR
-3273341696,3273341951,DE
-3273341952,3273342207,GB
+3273340928,3273341711,FR
3273342208,3273342231,AE
3273342464,3273342975,DE
3273342976,3273343999,GB
@@ -76762,13 +76584,16 @@
3273687040,3273719807,DE
3273719808,3273720831,NL
3273720832,3273720847,IE
-3273720848,3273727087,NL
-3273727088,3273727088,GB
+3273720848,3273727079,NL
+3273727080,3273727088,GB
3273727089,3273727095,ES
-3273727096,3273727119,NL
+3273727096,3273727103,DE
+3273727104,3273727119,NL
3273727120,3273727127,PT
-3273727128,3273727135,NL
-3273727136,3273727167,IT
+3273727128,3273727135,FI
+3273727136,3273727143,NO
+3273727144,3273727151,CZ
+3273727152,3273727167,IT
3273727168,3273732095,NL
3273732096,3273736191,GB
3273736192,3273744383,FR
@@ -76812,7 +76637,6 @@
3273867264,3273867519,BE
3273867520,3273867775,UA
3273867776,3273868031,PT
-3273868032,3273868287,GB
3273868288,3273869311,RU
3273869312,3273871359,DE
3273871360,3273871615,PL
@@ -76847,7 +76671,9 @@
3273883392,3273883647,DE
3273883648,3273916415,NL
3273916416,3273932799,IT
-3273932800,3273949183,DE
+3273932800,3273940991,DE
+3273940992,3273943039,GB
+3273943040,3273949183,DE
3273949184,3273981951,FR
3273981952,3274047487,DE
3274050560,3274051583,PL
@@ -76873,7 +76699,7 @@
3274163712,3274164223,BG
3274164224,3274164735,AT
3274165760,3274166271,RU
-3274166272,3274166783,AT
+3274166272,3274166783,RO
3274166784,3274167295,UA
3274167296,3274167807,BG
3274168320,3274168831,PL
@@ -77234,6 +77060,7 @@
3275426576,3275428367,GB
3275428376,3275428407,GB
3275428416,3275428447,GB
+3275428608,3275428863,GB
3275429888,3275430143,GB
3275430592,3275430631,GB
3275430656,3275430911,GB
@@ -77298,6 +77125,8 @@
3275475720,3275475791,GB
3275475800,3275475879,GB
3275475968,3275476735,GB
+3275476920,3275476927,GB
+3275476944,3275476959,GB
3275476992,3275477567,GB
3275477760,3275478271,GB
3275478528,3275481087,GB
@@ -77306,6 +77135,10 @@
3275483136,3275483647,GB
3275484160,3275484415,GB
3275485184,3275485759,GB
+3275485784,3275485791,GB
+3275485840,3275485855,GB
+3275485936,3275485936,GB
+3275486208,3275487231,GB
3275488768,3275489279,CZ
3275489280,3275497471,GB
3275497472,3275505663,DE
@@ -77556,7 +77389,9 @@
3276026368,3276026623,FR
3276026624,3276027391,GB
3276027392,3276027647,FR
-3276027648,3276029183,GB
+3276027648,3276028543,GB
+3276028544,3276028671,FR
+3276028672,3276029183,GB
3276029184,3276029439,FR
3276029440,3276030591,GB
3276030592,3276030607,FR
@@ -77667,7 +77502,8 @@
3276300288,3276304383,DE
3276304384,3276304639,BG
3276304640,3276305407,GB
-3276305408,3276308479,IL
+3276305408,3276307455,IL
+3276307456,3276308479,NL
3276308480,3276309503,GB
3276309504,3276310527,AT
3276310528,3276311551,PT
@@ -77713,7 +77549,6 @@
3276428544,3276428799,BG
3276428800,3276429055,DE
3276429056,3276429311,NL
-3276429312,3276430079,RU
3276430080,3276430591,PL
3276430592,3276430847,GB
3276430848,3276431103,DE
@@ -77727,17 +77562,18 @@
3276478064,3276478095,CH
3276478720,3276478975,FR
3276485632,3276486655,GB
+3276490776,3276490776,NL
+3276490782,3276490782,AT
+3276490783,3276490783,CH
3276494336,3276494591,GB
3276499504,3276499567,DE
3276503040,3276505087,DE
-3276508680,3276508687,GB
3276509184,3276510207,IT
3276512256,3276513023,ZA
3276518368,3276518383,NL
3276520704,3276520735,SE
3276522496,3276523519,NL
3276524864,3276524895,PT
-3276527616,3276527743,PK
3276528128,3276528191,GB
3276528352,3276528359,GB
3276530688,3276531711,NL
@@ -77834,21 +77670,31 @@
3276865536,3276866303,NL
3276866304,3276870911,GB
3276870912,3276871679,IT
-3276871680,3276873983,GB
+3276871680,3276873759,GB
+3276873760,3276873791,ES
+3276873792,3276873983,GB
3276873984,3276874239,ES
3276874240,3276874959,GB
3276874960,3276874975,NL
3276874976,3276876383,GB
3276876384,3276876415,NL
-3276876416,3276883711,GB
+3276876416,3276882175,GB
+3276882176,3276882687,IT
+3276882688,3276883077,GB
+3276883078,3276883078,IT
+3276883079,3276883711,GB
3276883712,3276883839,IT
3276883840,3276886363,GB
3276886364,3276886367,DE
-3276886368,3276892159,GB
+3276886368,3276890175,GB
+3276890176,3276890191,US
+3276890192,3276892159,GB
3276892160,3276893183,IT
3276893184,3276893695,GB
3276893696,3276893951,IT
-3276893952,3276898671,GB
+3276893952,3276897727,GB
+3276897728,3276897791,BE
+3276897792,3276898671,GB
3276898672,3276898687,CH
3276898688,3276901613,GB
3276901614,3276901614,CH
@@ -77864,7 +77710,9 @@
3276911616,3276911871,IT
3276911872,3276912207,GB
3276912208,3276912215,IT
-3276912216,3276912383,GB
+3276912216,3276912287,GB
+3276912288,3276912319,IT
+3276912320,3276912383,GB
3276912384,3276912511,IT
3276912512,3276912671,GB
3276912672,3276912687,IT
@@ -78075,8 +77923,8 @@
3277403312,3277403327,GB
3277403328,3277403359,FR
3277403360,3277403375,GB
-3277403376,3277403455,FR
-3277403456,3277403647,GB
+3277403376,3277403471,FR
+3277403472,3277403647,GB
3277403648,3277403807,ES
3277403808,3277404159,GB
3277404160,3277404415,DE
@@ -78155,7 +78003,7 @@
3277704192,3277704703,UA
3277704704,3277705215,RU
3277705728,3277706239,ES
-3277706240,3277707263,UA
+3277706240,3277706751,UA
3277707264,3277707775,CZ
3277707776,3277708287,MD
3277708288,3277708799,AT
@@ -78363,11 +78211,7 @@
3278943429,3278943429,IT
3278943430,3278943666,DE
3278943667,3278943667,IT
-3278943668,3278943940,DE
-3278943941,3278943941,GB
-3278943942,3278943949,DE
-3278943950,3278943950,BE
-3278943951,3278944022,DE
+3278943668,3278944022,DE
3278944023,3278944023,AT
3278944024,3278944080,DE
3278944081,3278944081,GB
@@ -78375,9 +78219,7 @@
3278944099,3278944099,GB
3278944100,3278944137,DE
3278944138,3278944138,GB
-3278944139,3278944161,DE
-3278944162,3278944162,GB
-3278944163,3278944202,DE
+3278944139,3278944202,DE
3278944203,3278944203,NL
3278944204,3278944286,DE
3278944287,3278944287,CA
@@ -78458,7 +78300,6 @@
3279028224,3279028735,PL
3279028736,3279029247,RU
3279029760,3279030271,UA
-3279030272,3279030783,RU
3279030784,3279031295,DE
3279031296,3279031807,NL
3279032320,3279032831,HU
@@ -78513,7 +78354,9 @@
3279560704,3279568895,GB
3279568896,3279577087,IT
3279577088,3279585279,BE
-3279585280,3279587583,GB
+3279585280,3279586815,GB
+3279586816,3279587327,DE
+3279587328,3279587583,GB
3279587584,3279588095,DE
3279588096,3279590911,GB
3279590912,3279591167,DE
@@ -78611,11 +78454,11 @@
3280126976,3280127231,CH
3280127232,3280127487,PL
3280127488,3280127743,AT
+3280127744,3280127999,NL
3280128000,3280128255,SE
3280128256,3280128511,GB
3280128512,3280129023,HU
3280129280,3280129535,LV
-3280129536,3280129791,SA
3280129792,3280130047,FR
3280130304,3280130559,RU
3280130560,3280130815,GB
@@ -78758,7 +78601,6 @@
3280765952,3280766975,DK
3280766976,3280767999,AT
3280768000,3280769023,FR
-3280769024,3280770047,NL
3280770048,3280771071,FR
3280771072,3280772095,PL
3280772096,3280773119,ES
@@ -78873,7 +78715,6 @@
3281344512,3281344767,UA
3281344768,3281345023,RU
3281345280,3281345535,SA
-3281345536,3281345791,CH
3281346048,3281346303,SI
3281346304,3281346559,PL
3281346560,3281346815,UA
@@ -79058,7 +78899,8 @@
3283113472,3283156991,CH
3283156992,3283173375,DE
3283173376,3283174399,PL
-3283174400,3283176447,UA
+3283174400,3283175423,GB
+3283175424,3283176447,UA
3283177472,3283178495,BE
3283178496,3283179519,PL
3283180544,3283181567,UA
@@ -79217,7 +79059,6 @@
3283636224,3283636735,UA
3283636736,3283637759,PL
3283638272,3283638783,PL
-3283638784,3283639295,RU
3283639296,3283639807,CH
3283639808,3283640319,DE
3283640320,3283648511,DK
@@ -79347,7 +79188,9 @@
3284016384,3284016639,CH
3284016640,3284017151,DK
3284017152,3284025343,GR
-3284025344,3284029183,GB
+3284025344,3284028287,GB
+3284028288,3284028319,US
+3284028320,3284029183,GB
3284029184,3284029199,US
3284029200,3284030471,GB
3284030472,3284030479,IL
@@ -79358,7 +79201,6 @@
3284033536,3284041727,RU
3284041728,3284041983,DK
3284041984,3284042239,SI
-3284042240,3284042495,GB
3284042496,3284042751,AT
3284042752,3284043007,RU
3284043008,3284043263,TH
@@ -79368,7 +79210,7 @@
3284044032,3284044287,FR
3284044288,3284044543,DE
3284044800,3284045055,CZ
-3284045056,3284045311,LT
+3284045056,3284045311,EE
3284045312,3284045567,DE
3284045568,3284045823,AT
3284046080,3284046335,DE
@@ -79692,7 +79534,6 @@
3285451608,3285451615,GB
3285452496,3285452511,GB
3285453440,3285453567,GB
-3285457072,3285457079,GB
3285461184,3285461215,NL
3285461808,3285461839,NL
3285463168,3285463199,LU
@@ -79788,13 +79629,11 @@
3285773056,3285773311,DE
3285773312,3285773567,LV
3285773568,3285773823,KG
-3285773824,3285774079,RU
3285774080,3285774335,RO
3285774336,3285774591,CZ
3285774592,3285774847,RU
3285774848,3285775103,FR
-3285775104,3285775359,GB
-3285775360,3285775615,RU
+3285775104,3285775615,RU
3285775872,3285776127,NL
3285776384,3285776639,UA
3285776640,3285776895,FR
@@ -79811,11 +79650,11 @@
3285868544,3285876735,IE
3285876736,3285909503,RU
3285910336,3285910399,ES
-3285911552,3285912447,GB
+3285911552,3285912575,GB
3285913648,3285913655,IE
3285913656,3285913703,GB
3285913708,3285913711,FI
-3285913712,3285913719,GB
+3285913712,3285913863,GB
3285917696,3285917703,GB
3285917712,3285917807,GB
3285917952,3285918207,GB
@@ -79823,18 +79662,26 @@
3285924912,3285924919,CH
3285924920,3285924927,FI
3285924928,3285924943,DE
+3285924944,3285924947,IT
+3285924948,3285924951,AT
+3285924952,3285924955,CH
+3285924956,3285924959,PL
+3285924960,3285924991,DE
3285925164,3285925171,CH
3285926432,3285926463,CH
3285926592,3285926623,DE
3285928304,3285928311,GB
-3285931528,3285931535,DE
+3285929216,3285929231,DE
+3285931528,3285931543,DE
3285934592,3285934847,ES
3285935872,3285936127,GB
+3285936136,3285936143,FR
3285939136,3285939175,GB
3285939184,3285939191,GB
3285939744,3285939759,GB
3285939840,3285939967,GB
3285941248,3285941503,ES
+3285949604,3285949607,CH
3285949856,3285949887,ES
3285950208,3285950463,IT
3285951648,3285951679,ES
@@ -79844,7 +79691,8 @@
3285954568,3285954575,PL
3285954576,3285954815,GB
3285962752,3285963775,DE
-3285964800,3285964927,DE
+3285964800,3285964935,DE
+3285965056,3285965311,DE
3285975040,3286013695,FR
3286013696,3286013951,RE
3286013952,3286106111,FR
@@ -79968,9 +79816,15 @@
3286425344,3286425599,IT
3286425600,3286433791,KW
3286433792,3286499327,DE
-3286499328,3286514431,HU
+3286499328,3286502143,HU
+3286502144,3286502399,BG
+3286502400,3286510335,HU
+3286510336,3286510591,BG
+3286510592,3286514431,HU
3286514432,3286514687,RO
-3286514688,3286564863,HU
+3286514688,3286552575,HU
+3286552576,3286553087,BG
+3286553088,3286564863,HU
3286564864,3286566655,AE
3286566656,3286567423,KW
3286567424,3286630399,AE
@@ -80155,7 +80009,6 @@
3287170816,3287171071,GB
3287171072,3287171583,LT
3287171584,3287172095,PL
-3287172096,3287172607,DE
3287172608,3287173119,PL
3287173120,3287173631,RU
3287173632,3287174143,NL
@@ -80469,7 +80322,6 @@
3287869952,3287870463,UA
3287870464,3287870975,RU
3287870976,3287871487,NL
-3287872512,3287873023,GB
3287873024,3287873535,PL
3287873536,3287874047,RU
3287874048,3287874559,FR
@@ -80508,7 +80360,8 @@
3287965696,3287973887,RS
3287973888,3287982079,CZ
3287982080,3287990271,EE
-3287990272,3287998463,SI
+3287990272,3287996415,SI
+3287996416,3287998463,BA
3287998464,3288006655,IT
3288006656,3288072191,GR
3288072192,3288088575,SE
@@ -80652,7 +80505,9 @@
3288578048,3288580095,JM
3288580096,3288588287,BB
3288588288,3288608255,ZA
-3288608256,3288614655,US
+3288608256,3288608264,US
+3288608265,3288608265,DE
+3288608266,3288614655,US
3288614656,3288616959,ZA
3288616960,3288617215,ZW
3288617216,3288661759,ZA
@@ -80709,8 +80564,7 @@
3289048832,3289049087,NG
3289049088,3289053951,ZA
3289053952,3289055231,NG
-3289055232,3289063423,ZA
-3289067520,3289071103,ZA
+3289055232,3289071103,ZA
3289071104,3289071359,SO
3289071616,3289074431,ZA
3289074432,3289074687,DZ
@@ -80732,6 +80586,7 @@
3289103616,3289103871,AO
3289103872,3289104383,KE
3289104384,3289107967,ZA
+3289107968,3289108479,GH
3289108480,3289114367,ZA
3289114368,3289114623,NG
3289114624,3289115135,ZA
@@ -80745,7 +80600,9 @@
3289124864,3289128959,ZA
3289128960,3289137151,IN
3289137152,3289153535,BM
-3289153536,3289161727,RW
+3289153536,3289156607,MU
+3289156608,3289158655,RW
+3289158656,3289161727,MU
3289161728,3289169919,PR
3289169920,3289186303,MA
3289186304,3289212159,ZA
@@ -80754,6 +80611,10 @@
3289214976,3289215231,NG
3289215232,3289217279,ZA
3289217280,3289217535,KE
+3289217536,3289217791,UG
+3289217792,3289218047,GH
+3289218048,3289218303,ZA
+3289218304,3289218559,MU
3289218560,3289220351,ZA
3289220352,3289220607,TZ
3289220608,3289221119,ZA
@@ -80771,12 +80632,21 @@
3289237504,3289237759,ZA
3289238528,3289238783,AO
3289238784,3289239039,ZA
-3289239552,3289243391,ZA
+3289239552,3289239807,SC
+3289239808,3289240063,KE
+3289240064,3289243391,ZA
3289243392,3289243647,BI
-3289243648,3289321471,ZA
+3289243648,3289248255,ZA
+3289248256,3289248511,NG
+3289248512,3289248767,AO
+3289249280,3289250815,ZA
+3289251840,3289321471,ZA
3289321472,3289325567,IN
3289325568,3289333759,SA
-3289333760,3289645055,ZA
+3289333760,3289391103,ZA
+3289391104,3289440255,SC
+3289440256,3289448447,ZA
+3289448448,3289645055,SC
3289645056,3289653247,NA
3289653248,3289661439,EG
3289661440,3289677823,DZ
@@ -80803,11 +80673,7 @@
3290031360,3290060287,ZA
3290060288,3290060543,SZ
3290060544,3290103807,ZA
-3290103808,3290107647,US
-3290107648,3290107903,CA
-3290107904,3290111999,US
-3290112000,3290112255,CA
-3290112256,3290120191,US
+3290103808,3290120191,CA
3290120192,3290128383,MU
3290128384,3290136575,ZW
3290136576,3290169343,NG
@@ -80873,7 +80739,13 @@
3291045888,3291078655,ZA
3291078656,3291086847,DZ
3291086848,3291103231,PR
-3291103232,3291168767,ZA
+3291103232,3291123711,ZA
+3291123712,3291127807,BG
+3291127808,3291131903,ZA
+3291131904,3291135999,BG
+3291136000,3291148287,ZA
+3291148288,3291152383,BG
+3291152384,3291168767,ZA
3291168768,3291176959,TZ
3291176960,3291185151,ZW
3291185152,3291201535,UG
@@ -80929,7 +80801,9 @@
3291215872,3291216127,KE
3291216128,3291216383,LS
3291216384,3291216639,ZA
-3291216640,3291216895,NG
+3291216640,3291217151,NG
+3291217152,3291217407,ZA
+3291217408,3291217919,TZ
3291217920,3291230207,ZA
3291230208,3291234303,GH
3291234304,3291242495,ZA
@@ -80943,7 +80817,9 @@
3291287552,3291291647,ZA
3291291648,3291295743,TZ
3291295744,3291299839,NG
-3291299840,3291315199,ZA
+3291299840,3291313151,ZA
+3291313152,3291314175,NG
+3291314176,3291315199,ZA
3291315200,3291316223,UG
3291316224,3291324415,TZ
3291324416,3291325439,AO
@@ -80996,6 +80872,7 @@
3291432960,3291439103,ZA
3291439104,3291447295,NG
3291447296,3291463679,CI
+3291463680,3291480063,ZA
3291480064,3291488255,DE
3291488256,3291496447,SC
3291496448,3291512831,US
@@ -81009,6 +80886,14 @@
3291546880,3291547135,TZ
3291547136,3291547391,AO
3291547392,3291547647,RW
+3291547648,3291547903,BJ
+3291547904,3291548159,MU
+3291548160,3291548415,DJ
+3291548416,3291548671,SC
+3291548672,3291548927,TZ
+3291548928,3291549183,MG
+3291549184,3291549439,GH
+3291611136,3291611391,ZA
3291742208,3292004351,US
3292004352,3292266495,SC
3292397568,3292528639,ZA
@@ -81019,30 +80904,39 @@
3300953088,3300954111,MU
3300966400,3301113855,ZA
3301113856,3301146623,NG
-3301146624,3301175295,ZA
+3301146624,3301171199,ZA
+3301171200,3301172223,IN
+3301172224,3301175295,ZA
3301175296,3301177343,AF
3301177344,3301177599,ZA
3301177600,3301179391,AF
3301179392,3301181439,SC
3301181440,3301182463,SE
-3301182464,3301212159,SC
-3301212160,3301214207,SE
-3301214208,3301215231,SC
-3301215232,3301216255,SE
-3301216256,3301244927,SC
+3301182464,3301191679,SC
+3301191680,3301191680,CA
+3301191681,3301193727,SC
+3301193728,3301195775,US
+3301195776,3301197823,SC
+3301197824,3301199871,GB
+3301199872,3301203967,SC
+3301203968,3301204991,DK
+3301204992,3301205247,SE
+3301205248,3301206015,DK
+3301206016,3301212159,SC
+3301212160,3301216255,SE
+3301216256,3301220351,SC
+3301220352,3301224447,SE
+3301224448,3301238783,SC
+3301238784,3301240831,US
+3301240832,3301242879,SE
+3301242880,3301244927,SC
3301244928,3301246975,SE
3301246976,3301311487,SC
-3301311488,3301313535,SA
+3301311488,3301313535,SE
3301313536,3301314559,SC
3301314560,3301315583,SE
3301315584,3301318655,SC
-3301318656,3301322751,DE
-3301322752,3301330943,SA
-3301330944,3301335039,SE
-3301335040,3301339135,SA
-3301339136,3301347327,SE
-3301347328,3301351423,PL
-3301351424,3301375999,SE
+3301318656,3301375999,SE
3301376000,3301441535,SC
3301441536,3301445631,ZA
3301445632,3301453823,KE
@@ -81074,7 +80968,10 @@
3301556224,3301557759,DJ
3301557760,3301558015,US
3301558016,3301560319,DJ
-3301560320,3301566463,KE
+3301560320,3301565439,KE
+3301565440,3301565695,MU
+3301565696,3301565951,KE
+3301565952,3301566463,MU
3301568512,3301570559,EG
3301570560,3301572607,KE
3301572608,3301605375,EG
@@ -81091,6 +80988,8 @@
3301904384,3301908479,KE
3301908480,3301912575,ZA
3301912576,3301916671,MU
+3301916672,3301924863,IN
+3301924864,3301933055,ZA
3301949440,3301965823,SN
3301965824,3302490111,ZA
3302490112,3302490367,KE
@@ -81099,6 +80998,7 @@
3302491136,3302492159,NG
3302492160,3302494207,MW
3302494208,3302496255,ZA
+3302496256,3302498303,EG
3302498304,3302502399,NA
3302502400,3302505471,AO
3302505472,3302506495,NA
@@ -81126,6 +81026,9 @@
3302540288,3302540799,UG
3302540800,3302541311,AO
3302541312,3302542335,NG
+3302542336,3302542847,ZA
+3302542848,3302543103,EG
+3302543104,3302543359,NA
3302543360,3302544383,NG
3302544384,3302544639,CM
3302544640,3302544895,MU
@@ -81198,6 +81101,11 @@
3302958336,3302958591,SZ
3302958592,3302958847,DJ
3302958848,3302959103,GA
+3302959104,3302959359,BJ
+3302959360,3302959615,MG
+3302959616,3302959871,TD
+3302959872,3302960127,SC
+3302985728,3302987775,DJ
3304062976,3304456191,SC
3304456192,3304521727,NG
3304521728,3304587263,SC
@@ -81248,7 +81156,19 @@
3315138560,3315204095,MA
3315204096,3315269631,ET
3315269632,3315286015,ZA
-3315286016,3315294207,KE
+3315286016,3315286527,MU
+3315286528,3315286783,KE
+3315286784,3315287039,MU
+3315287040,3315287295,KE
+3315287296,3315287807,MU
+3315287808,3315288319,KE
+3315288320,3315288413,MU
+3315288414,3315288414,KE
+3315288415,3315288575,MU
+3315288576,3315288831,KE
+3315288832,3315291135,MU
+3315291136,3315293183,KE
+3315293184,3315294207,MU
3315294208,3315302399,ZA
3315302400,3315318783,ML
3315318784,3315322879,LS
@@ -81392,7 +81312,7 @@
3320505344,3320506367,NG
3320506368,3320507391,ZA
3320507392,3320508415,KE
-3320508416,3320509439,SC
+3320508416,3320509439,ZA
3320509440,3320510463,RW
3320510464,3320511487,LY
3320511488,3320512511,ZA
@@ -81403,12 +81323,17 @@
3320774656,3320791039,UG
3320791040,3320807423,BF
3320807424,3320823807,ZA
-3320823808,3320840191,KE
+3320823808,3320827903,KE
+3320827904,3320831999,MU
+3320832000,3320834047,KE
+3320834048,3320840191,MU
3320840192,3320905727,NG
3320905728,3320938495,DJ
3320938496,3320971263,AO
3320971264,3320979455,GA
-3320979456,3320995839,ZA
+3320979456,3320985599,ZA
+3320985600,3320985607,KE
+3320985608,3320995839,ZA
3320995840,3321004031,NG
3321004032,3321008127,GM
3321008128,3321012223,ZA
@@ -81439,11 +81364,7 @@
3321790464,3321806847,LS
3321806848,3321823231,SD
3321823232,3321839615,NG
-3321839616,3321848831,GH
-3321848832,3321849855,ZA
-3321849856,3321850879,GH
-3321850880,3321851903,ZA
-3321851904,3321855999,GH
+3321839616,3321855999,GH
3321856000,3321860095,CV
3321860096,3321864191,ZA
3321864192,3321868287,NG
@@ -81467,7 +81388,8 @@
3322202112,3322203135,GB
3322203136,3322339583,US
3322339584,3322339839,GB
-3322339840,3322354175,US
+3322339840,3322353663,US
+3322353664,3322354175,VI
3322354176,3322354431,JP
3322354432,3322609663,US
3322609664,3322610687,SA
@@ -81476,7 +81398,17 @@
3322691584,3322691839,US
3322691840,3322692095,SE
3322692096,3322773503,US
-3322773504,3322806271,CA
+3322773504,3322781695,CA
+3322781696,3322781951,US
+3322781952,3322786559,CA
+3322786560,3322786751,US
+3322786752,3322791679,CA
+3322791680,3322791935,US
+3322791936,3322792191,CA
+3322792192,3322792319,US
+3322792320,3322797823,CA
+3322797824,3322798079,US
+3322798080,3322806271,CA
3322806272,3322875903,US
3322880000,3322888191,AU
3322888192,3322945535,US
@@ -81505,8 +81437,9 @@
3323038720,3323038975,CA
3323038976,3323048959,US
3323048960,3323049727,NL
-3323049728,3323062271,US
-3323062272,3323062527,BR
+3323049728,3323061247,US
+3323061504,3323062015,US
+3323062016,3323062527,BR
3323062528,3323064319,US
3323064832,3323068415,US
3323199488,3323201535,US
@@ -81521,7 +81454,9 @@
3323244544,3323244671,CA
3323244672,3323245319,US
3323245320,3323245327,CA
-3323245328,3323270420,US
+3323245328,3323245463,US
+3323245464,3323245471,CA
+3323245472,3323270420,US
3323270421,3323270421,CH
3323270422,3323331583,US
3323331584,3323331839,CA
@@ -81583,7 +81518,9 @@
3323685888,3323686399,US
3323686400,3323686911,CA
3323686912,3323687423,US
-3323687424,3323687935,CA
+3323687424,3323687815,CA
+3323687816,3323687819,US
+3323687820,3323687935,CA
3323687936,3323687999,US
3323688000,3323688959,CA
3323688960,3323689199,US
@@ -81596,19 +81533,13 @@
3323747328,3323747583,GB
3323747584,3323987967,US
3323987968,3323988223,KN
-3323988224,3324011007,US
-3324011008,3324011263,KN
-3324011264,3324023039,US
-3324023040,3324023295,KN
-3324023296,3324030463,US
-3324030464,3324030719,KN
-3324030720,3324031999,US
+3323988224,3324031999,US
3324032000,3324032255,KN
-3324032256,3324033791,US
-3324033792,3324034047,KN
-3324034048,3324035327,US
-3324035328,3324035583,KN
-3324035584,3324040191,US
+3324032256,3324035583,US
+3324035584,3324035839,KN
+3324035840,3324036351,US
+3324036352,3324036607,KN
+3324036608,3324040191,US
3324040192,3324040447,AU
3324040448,3324047359,US
3324047360,3324047615,KN
@@ -81749,7 +81680,9 @@
3325206640,3325206655,US
3325206656,3325207807,CA
3325207808,3325207935,US
-3325207936,3325211419,CA
+3325207936,3325208119,CA
+3325208120,3325208123,US
+3325208124,3325211419,CA
3325211420,3325211423,US
3325211424,3325211647,CA
3325211648,3325211775,US
@@ -81757,9 +81690,9 @@
3325212648,3325212655,US
3325212656,3325213687,CA
3325213688,3325213695,US
-3325213696,3325216271,CA
-3325216272,3325216287,BY
-3325216288,3325216527,CA
+3325213696,3325216319,CA
+3325216320,3325216327,US
+3325216328,3325216527,CA
3325216528,3325216531,US
3325216532,3325217939,CA
3325217940,3325217943,US
@@ -81767,7 +81700,9 @@
3325218208,3325218239,US
3325218240,3325218307,CA
3325218308,3325218311,ES
-3325218312,3325220635,CA
+3325218312,3325218519,CA
+3325218520,3325218523,US
+3325218524,3325220635,CA
3325220636,3325220636,US
3325220637,3325220863,CA
3325220864,3325220879,US
@@ -81945,12 +81880,15 @@
3326713344,3326714111,US
3326714112,3326716927,CA
3326716928,3326717951,US
-3326717952,3326726399,CA
+3326717952,3326722047,CA
+3326722048,3326726143,US
+3326726144,3326726399,CA
3326726400,3326726655,US
3326726656,3326729215,CA
3326729216,3326729471,JP
3326729472,3326729727,CA
-3326729728,3326734335,US
+3326729728,3326730751,US
+3326731264,3326734335,US
3326734336,3326737663,CA
3326737664,3326737919,US
3326737920,3326738175,CA
@@ -82025,7 +81963,9 @@
3328358400,3328360447,CA
3328360448,3328383999,US
3328384000,3328385023,CA
-3328385024,3328394239,US
+3328385024,3328393727,US
+3328393728,3328393983,GB
+3328393984,3328394239,US
3328394240,3328394495,GB
3328394496,3328414719,US
3328414720,3328414975,CH
@@ -82039,14 +81979,14 @@
3328433920,3328475135,US
3328475136,3328477183,CA
3328477184,3328479231,US
-3328479232,3328481279,CA
+3328479232,3328479623,CA
+3328479624,3328479624,US
+3328479625,3328481279,CA
3328481280,3328481791,US
3328481792,3328482303,CA
3328482304,3328483071,US
3328483072,3328483327,CA
-3328483328,3328510064,US
-3328510065,3328510077,AE
-3328510078,3328515071,US
+3328483328,3328515071,US
3328515072,3328516095,DM
3328516096,3328617983,US
3328617984,3328618239,CA
@@ -82062,10 +82002,22 @@
3328774400,3328775935,CA
3328775936,3328788479,US
3328788480,3328789503,FR
-3328789504,3328794623,US
-3328794624,3328801279,CA
+3328789504,3328794879,US
+3328794880,3328795391,CA
+3328795392,3328796159,US
+3328796160,3328796671,CA
+3328796672,3328797695,US
+3328797696,3328797951,CA
+3328797952,3328798207,US
+3328798208,3328798719,CA
+3328798720,3328799743,NL
+3328799744,3328799999,CA
+3328800000,3328800255,NL
+3328800256,3328800767,IT
+3328800768,3328801023,NZ
+3328801024,3328801279,SE
3328801280,3328801791,CZ
-3328801792,3328802047,CA
+3328801792,3328802047,US
3328802048,3328802303,DE
3328802304,3328802815,AU
3328802816,3328826813,US
@@ -82117,9 +82069,7 @@
3330791424,3330791679,CA
3330791680,3330812927,US
3330812928,3330813951,CA
-3330813952,3330815743,US
-3330815744,3330815999,CA
-3330816000,3330866943,US
+3330813952,3330866943,US
3330866944,3330867199,CA
3330867200,3330883583,US
3330883584,3330884351,NL
@@ -82173,13 +82123,13 @@
3331563520,3331563775,CH
3331563776,3331565567,US
3331565568,3331566079,CA
-3331566080,3331575807,US
-3331575808,3331576831,KY
-3331576832,3331632639,US
+3331566080,3331632639,US
3331632640,3331632895,CA
3331632896,3331633407,US
3331633408,3331633919,CH
-3331633920,3331637247,US
+3331633920,3331636479,US
+3331636480,3331636735,AU
+3331636736,3331637247,US
3331637248,3331638271,KR
3331638272,3331647231,US
3331647232,3331647487,CA
@@ -82281,7 +82231,8 @@
3332909568,3332922879,CA
3332922880,3332923391,US
3332923392,3332925695,CA
-3332925696,3332929023,US
+3332925696,3332927487,US
+3332928512,3332929023,US
3332929024,3332930047,CA
3332930560,3332931327,US
3332931328,3332947967,CA
@@ -82331,7 +82282,8 @@
3333609734,3333609734,AU
3333609735,3333614591,US
3333614592,3333614847,GB
-3333614848,3333624319,US
+3333614848,3333621247,US
+3333621760,3333624319,US
3333624320,3333624575,CA
3333624576,3333675775,US
3333675776,3333676031,CA
@@ -82385,8 +82337,8 @@
3334932224,3334932479,CA
3334932480,3334934015,US
3334934016,3334934527,CA
-3334934528,3334962431,US
-3334962432,3334963199,NL
+3334934528,3334962175,US
+3334962176,3334963199,NL
3334963200,3334995967,US
3334995968,3334998527,PH
3334998528,3335004655,US
@@ -82401,7 +82353,9 @@
3335252736,3335252991,CA
3335252992,3335276287,US
3335276288,3335276799,PR
-3335276800,3335439615,US
+3335276800,3335354179,US
+3335354180,3335354183,CA
+3335354184,3335439615,US
3335439616,3335439871,CH
3335439872,3335440383,US
3335440384,3335441151,CH
@@ -82413,7 +82367,9 @@
3335524352,3335524607,AU
3335524608,3335573759,US
3335573760,3335574015,IN
-3335574016,3335784191,US
+3335574016,3335747071,US
+3335747072,3335749631,NL
+3335749632,3335784191,US
3335784192,3335784447,CA
3335784448,3335860991,US
3335860992,3335861247,MX
@@ -82423,11 +82379,15 @@
3336854016,3336854271,CO
3336854272,3336896767,US
3336896768,3336897023,VE
-3336897024,3336991231,US
+3336897024,3336990719,US
+3336990720,3336990975,CA
+3336990976,3336991231,US
3336991232,3336991487,CA
3336991488,3336993023,US
3336993024,3336993535,CA
-3336993536,3337030655,US
+3336993536,3336993791,US
+3336993792,3336994047,CA
+3336994048,3337030655,US
3337030656,3337030911,GB
3337030912,3337044479,US
3337044480,3337044735,CA
@@ -82443,11 +82403,11 @@
3337053184,3337053695,CA
3337053696,3337055231,US
3337055232,3337060351,CA
-3337060352,3337069055,US
-3337069056,3337069119,GB
-3337069120,3337107711,US
+3337060352,3337107711,US
3337107712,3337107967,GB
-3337107968,3337289983,US
+3337107968,3337198703,US
+3337198704,3337198707,CA
+3337198708,3337289983,US
3337289984,3337293567,CA
3337293568,3337293823,US
3337293824,3337297919,CA
@@ -82490,7 +82450,9 @@
3337961728,3337961983,CA
3337961984,3337963391,US
3337963392,3337963519,CA
-3337963520,3337969663,US
+3337963520,3337963639,US
+3337963640,3337963647,CA
+3337963648,3337969663,US
3337969664,3337973759,PR
3337973760,3337977855,CA
3337977856,3337980671,US
@@ -82593,12 +82555,13 @@
3338272000,3338272255,CA
3338272256,3338350591,US
3338350592,3338354687,CA
-3338354688,3338371071,US
+3338354688,3338359817,US
+3338359818,3338359818,GB
+3338359819,3338371071,US
3338371072,3338403839,CA
3338403840,3338424319,US
3338424320,3338428415,CA
-3338428416,3338429439,US
-3338429440,3338429695,CA
+3338428416,3338429695,US
3338429696,3338429951,SG
3338429952,3338430719,US
3338430720,3338430975,NL
@@ -82674,7 +82637,9 @@
3339180032,3339181055,CA
3339181056,3339184127,US
3339184128,3339186175,CA
-3339186176,3339270399,US
+3339186176,3339261951,US
+3339261952,3339263999,HK
+3339264000,3339270399,US
3339271168,3339327999,US
3339328512,3339329535,CA
3339329536,3339337727,US
@@ -82746,9 +82711,7 @@
3340429824,3340430079,PA
3340430080,3340431871,US
3340432384,3340435199,US
-3340435456,3340452863,US
-3340452864,3340453887,CA
-3340453888,3340460031,US
+3340435456,3340460031,US
3340460032,3340462079,PR
3340462080,3340481535,US
3340481536,3340482559,CA
@@ -82781,25 +82744,33 @@
3340926296,3340926303,DE
3340926304,3341027839,US
3341028352,3341031935,US
-3341032448,3341082623,US
+3341032448,3341043711,US
+3341045760,3341057279,US
+3341057536,3341057791,US
+3341058048,3341082623,US
3341082624,3341084671,CA
3341084672,3341162751,US
3341163520,3341180927,US
3341180928,3341182975,CA
3341182976,3341196799,US
3341197312,3341205503,US
-3341205504,3341207551,BB
+3341205504,3341205759,VC
+3341205760,3341206015,BB
+3341206016,3341206271,VC
+3341206272,3341206527,BB
+3341206528,3341206589,VC
+3341206590,3341206590,BB
+3341206591,3341207551,VC
3341207552,3341216255,US
-3341216256,3341216511,JP
-3341216512,3341216767,US
+3341216256,3341216767,JP
3341216768,3341217791,CA
3341217792,3341218623,US
3341218624,3341218655,CA
-3341218656,3341339647,US
-3341339648,3341339903,CZ
-3341339904,3341340159,US
-3341340160,3341340415,CZ
-3341340416,3341439200,US
+3341218656,3341287423,US
+3341287424,3341408511,CZ
+3341408512,3341408767,US
+3341408768,3341418495,CZ
+3341418496,3341439200,US
3341439201,3341439201,CA
3341439202,3341444863,US
3341444864,3341445631,DE
@@ -82857,7 +82828,8 @@
3341760512,3341762559,CA
3341762560,3341777919,US
3341777920,3341778943,CA
-3341778944,3341796863,US
+3341778944,3341796607,US
+3341796608,3341796863,AU
3341796864,3341797375,JP
3341797376,3341807615,US
3341807616,3341808639,CA
@@ -82907,7 +82879,8 @@
3342603264,3342604799,US
3342604800,3342605311,CA
3342605312,3342605567,US
-3342605568,3342663423,CA
+3342605568,3342627839,CA
+3342628096,3342663423,CA
3342663680,3342831103,US
3342831104,3342831359,IN
3342831360,3343013887,US
@@ -82933,7 +82906,13 @@
3343364096,3343365631,US
3343365632,3343366655,CA
3343366912,3343372543,CA
-3343372800,3343378823,US
+3343372800,3343378511,US
+3343378512,3343378519,GB
+3343378520,3343378535,US
+3343378536,3343378543,GB
+3343378544,3343378575,US
+3343378576,3343378583,GB
+3343378584,3343378823,US
3343378824,3343378839,SE
3343378840,3343379079,US
3343379080,3343379087,SE
@@ -83053,15 +83032,23 @@
3345011712,3345295871,US
3345296384,3345299455,US
3345299456,3345301503,CA
-3345301504,3345315071,US
+3345301504,3345303551,US
+3345303552,3345304575,CA
+3345304576,3345315071,US
3345315072,3345315327,TW
3345315328,3345315583,US
3345315584,3345315839,TW
3345315840,3345321471,US
-3345321472,3345321727,CA
+3345321472,3345321727,GB
3345321728,3345327103,US
3345327104,3345328127,CA
-3345328128,3345333247,US
+3345328128,3345332487,US
+3345332488,3345332495,RO
+3345332496,3345332607,US
+3345332608,3345332639,RO
+3345332640,3345332655,US
+3345332656,3345332663,RO
+3345332664,3345333247,US
3345333248,3345334271,MF
3345334272,3345339391,US
3345339392,3345340415,CA
@@ -83140,13 +83127,15 @@
3346243328,3346282495,US
3346282496,3346284543,PR
3346284544,3346319359,US
-3346321408,3346323455,US
+3346321408,3346322687,US
3346323456,3346325503,CA
3346325504,3346327551,US
3346327552,3346328575,CA
3346328576,3346329599,US
3346329600,3346330623,CA
-3346330624,3346471423,US
+3346330624,3346399231,US
+3346399232,3346464767,FR
+3346464768,3346471423,US
3346471936,3346497535,US
3346497536,3346498559,CA
3346498560,3346520063,US
@@ -83313,7 +83302,7 @@
3350864640,3350950399,US
3350950912,3350970367,US
3350970368,3350971391,CA
-3350971392,3350979583,US
+3350971392,3350978559,US
3350979584,3350980607,CA
3350980608,3350988287,US
3350988800,3350994943,US
@@ -83530,9 +83519,7 @@
3351895552,3351895807,CA
3351895808,3351896319,US
3351896576,3351904255,US
-3351904256,3351912447,CA
-3351912448,3351920639,US
-3351920640,3351927551,CA
+3351904256,3351927551,CA
3351927552,3351927807,US
3351927808,3351933951,CA
3351933952,3351939071,US
@@ -83582,9 +83569,7 @@
3353729024,3353729279,HK
3353729280,3353730047,US
3353730048,3353731071,CA
-3353731072,3353731487,US
-3353731488,3353731503,AU
-3353731504,3353732607,US
+3353731072,3353732607,US
3353732608,3353732863,DE
3353732864,3353736191,US
3353736192,3353736959,PR
@@ -83630,7 +83615,7 @@
3354663936,3354676223,US
3354676224,3354677247,CA
3354677248,3354686975,US
-3354686976,3354687231,HK
+3354686976,3354687231,CN
3354687232,3354687487,US
3354687488,3354688511,CA
3354688512,3354720767,US
@@ -83675,7 +83660,10 @@
3355372288,3355372543,CA
3355372544,3355384831,US
3355384832,3355385855,CA
-3355385856,3355407359,US
+3355385856,3355389439,US
+3355389440,3355389695,GB
+3355389696,3355389951,JP
+3355389952,3355407359,US
3355407360,3355408383,PR
3355408384,3355412479,US
3355412480,3355412607,BE
@@ -83700,6 +83688,7 @@
3355459584,3355459839,PA
3355459840,3355460095,VE
3355460096,3355460351,CL
+3355460352,3355460607,BR
3355460608,3355460863,UY
3355460864,3355461887,BR
3355461888,3355463423,EC
@@ -83709,19 +83698,21 @@
3355464448,3355464959,MX
3355464960,3355465727,BR
3355465728,3355465983,UY
+3355465984,3355466239,BR
3355466240,3355466751,MX
3355466752,3355467007,BR
3355467008,3355467263,MX
3355467264,3355467519,US
3355467520,3355467775,MX
3355467776,3355468799,AR
-3355469312,3355469567,BR
+3355468800,3355469567,BR
3355469568,3355470591,MX
3355470592,3355470847,PE
3355470848,3355471103,CL
3355471104,3355471359,MX
3355471360,3355471615,PE
3355471616,3355472383,MX
+3355472384,3355472639,BR
3355472640,3355473407,CL
3355473408,3355473919,PE
3355473920,3355475199,CL
@@ -83931,7 +83922,9 @@
3356076288,3356078079,BR
3356078080,3356078335,EC
3356078336,3356079359,CL
+3356079616,3356080127,MX
3356080128,3356080383,BR
+3356080384,3356080639,MX
3356080896,3356082431,NI
3356082432,3356082687,CL
3356082688,3356082943,AR
@@ -84102,8 +84095,8 @@
3356329984,3356332031,GF
3356332032,3356334079,CU
3356334080,3356336127,BO
-3356336128,3356337151,SV
-3356337152,3356337663,HN
+3356336128,3356336895,SV
+3356336896,3356337663,HN
3356337664,3356337919,SV
3356337920,3356338175,HN
3356338176,3356339967,SV
@@ -84139,10 +84132,10 @@
3356391168,3356391423,PA
3356393472,3356413439,CL
3356413440,3356413823,CO
-3356413824,3356420863,CL
-3356420864,3356421119,CO
-3356421120,3356421247,CL
-3356421248,3356421375,CO
+3356413824,3356419839,CL
+3356419840,3356419967,CO
+3356419968,3356420863,CL
+3356420864,3356421375,CO
3356421376,3356421631,CL
3356421632,3356422143,CO
3356422144,3356425471,CL
@@ -84156,7 +84149,9 @@
3356499968,3356508159,MX
3356508160,3356508671,AR
3356508672,3356509183,CR
-3356509184,3356510207,VE
+3356509184,3356509439,VE
+3356509440,3356509503,US
+3356509504,3356510207,VE
3356510208,3356511999,AR
3356512000,3356512255,CO
3356512256,3356514303,AR
@@ -84178,8 +84173,7 @@
3356958720,3356967167,MX
3356967424,3356967935,MX
3356967936,3356968959,BR
-3356968960,3356970495,MX
-3356971520,3356972031,MX
+3356968960,3356972031,MX
3356972288,3356979967,MX
3356980480,3356980735,MX
3356981248,3356988415,MX
@@ -84220,7 +84214,7 @@
3357409280,3357411327,BR
3357411328,3357412351,VE
3357412352,3357412863,PE
-3357412864,3357413119,BR
+3357412864,3357413119,CA
3357413120,3357413375,FR
3357413376,3357414399,US
3357414400,3357415423,PR
@@ -84300,7 +84294,9 @@
3357456640,3357456895,HN
3357456896,3357457711,GT
3357457712,3357457727,CR
-3357457728,3357458431,GT
+3357457728,3357457919,GT
+3357457920,3357458047,HN
+3357458048,3357458431,GT
3357458432,3357474815,CL
3357474816,3357475015,US
3357475016,3357475019,AR
@@ -84353,9 +84349,13 @@
3357480464,3357480479,CO
3357480480,3357480511,AR
3357480512,3357480543,CO
-3357480544,3357480719,AR
+3357480544,3357480703,AR
+3357480704,3357480711,CO
+3357480712,3357480719,AR
3357480720,3357480735,CO
-3357480736,3357480959,AR
+3357480736,3357480799,AR
+3357480800,3357480807,CO
+3357480808,3357480959,AR
3357480960,3357483007,EC
3357483008,3357491199,CL
3357491200,3357499391,CO
@@ -84393,8 +84393,8 @@
3357606912,3357607167,AR
3357607168,3357613055,MX
3357613056,3357613311,AR
-3357613312,3357616127,MX
-3357616384,3357623039,MX
+3357613312,3357618943,MX
+3357619200,3357623039,MX
3357623040,3357623295,AR
3357623296,3357626623,MX
3357627392,3357627647,MX
@@ -84422,7 +84422,8 @@
3357715456,3357715711,MX
3357715968,3357723903,MX
3357724416,3357725183,MX
-3357725440,3357726719,MX
+3357725440,3357726463,MX
+3357726464,3357726719,AR
3357726720,3357727743,BR
3357727744,3357728767,MX
3357728768,3357736959,BR
@@ -84468,7 +84469,8 @@
3358133760,3358142719,AR
3358142720,3358142975,US
3358142976,3358143231,CO
-3358143232,3358143487,AR
+3358143232,3358143295,VE
+3358143296,3358143487,AR
3358143488,3358143999,US
3358144000,3358144127,CL
3358144128,3358144255,AR
@@ -84491,8 +84493,8 @@
3358151680,3358151807,PE
3358151808,3358151935,AR
3358151936,3358152191,PE
-3358152192,3358152559,AR
-3358152560,3358152575,PE
+3358152192,3358152543,AR
+3358152544,3358152575,PE
3358152576,3358152703,AR
3358152704,3358152959,US
3358152960,3358153215,EC
@@ -84524,7 +84526,9 @@
3358326784,3358392319,VE
3358392320,3358457855,AR
3358457856,3358523391,PA
-3358523392,3358525951,VE
+3358523392,3358524159,VE
+3358524160,3358524415,AR
+3358524416,3358525951,VE
3358525952,3358526463,AR
3358526464,3358529535,VE
3358529536,3358530303,AR
@@ -84542,7 +84546,10 @@
3358539520,3358539775,AR
3358539776,3358543871,VE
3358543872,3358544127,MX
-3358544128,3358548223,VE
+3358544128,3358544383,AR
+3358544384,3358545407,VE
+3358545408,3358545663,AR
+3358545664,3358548223,VE
3358548224,3358548479,AR
3358548480,3358549759,VE
3358549760,3358550015,AR
@@ -84577,15 +84584,9 @@
3358565184,3358565247,AR
3358565248,3358565311,VE
3358565312,3358565343,AR
-3358565344,3358565567,VE
-3358565568,3358565599,AR
-3358565600,3358565791,VE
-3358565792,3358565855,AR
-3358565856,3358565951,VE
-3358565952,3358566015,AR
-3358566016,3358566047,VE
-3358566048,3358566111,AR
-3358566112,3358566847,VE
+3358565344,3358565375,VE
+3358565376,3358566399,AR
+3358566400,3358566847,VE
3358566848,3358566879,AR
3358566880,3358566911,VE
3358566912,3358566975,AR
@@ -84610,9 +84611,7 @@
3358577408,3358578431,AR
3358578432,3358578687,VE
3358578688,3358579967,CO
-3358579968,3358580223,AR
-3358580224,3358580735,MX
-3358580736,3358588927,AR
+3358579968,3358588927,AR
3358588928,3358654463,PE
3358654464,3358658559,AR
3358658560,3358660607,CL
@@ -84652,7 +84651,8 @@
3359080448,3359096831,CU
3359096832,3359105023,CL
3359105024,3359109119,EC
-3359109120,3359111167,AR
+3359109120,3359109375,US
+3359109376,3359111167,AR
3359111168,3359113215,EC
3359113216,3359244287,MX
3359244288,3359260671,US
@@ -84699,9 +84699,9 @@
3359520768,3359522815,US
3359522816,3359539199,NI
3359539200,3359571967,PE
-3359571968,3359573759,AR
-3359573760,3359574015,US
-3359574016,3359582207,AR
+3359571968,3359579647,AR
+3359579648,3359579903,US
+3359579904,3359582207,AR
3359582208,3359584255,PA
3359584256,3359586303,AR
3359586304,3359588351,CL
@@ -84718,7 +84718,9 @@
3359899648,3359916031,CL
3359916032,3359932415,AR
3359932416,3359948799,MX
-3359948800,3359989759,AR
+3359948800,3359989247,AR
+3359989248,3359989503,US
+3359989504,3359989759,AR
3359989760,3359997951,CO
3359997952,3360006143,AR
3360006144,3360014335,EC
@@ -84735,7 +84737,7 @@
3360145408,3360153599,CL
3360153600,3360157695,AR
3360157696,3360159743,VE
-3360159744,3360161791,CW
+3360159744,3360161791,BQ
3360161792,3360251903,CL
3360251904,3360253951,BO
3360253952,3360255999,SV
@@ -84794,7 +84796,9 @@
3360765952,3360767999,CO
3360768000,3360772351,AR
3360772352,3360772479,BO
-3360772480,3360780399,AR
+3360772480,3360780303,AR
+3360780304,3360780319,BR
+3360780320,3360780399,AR
3360780400,3360780415,BR
3360780416,3360781839,AR
3360781840,3360781847,DO
@@ -84802,7 +84806,9 @@
3360781944,3360781947,MX
3360781948,3360782167,AR
3360782168,3360782175,MX
-3360782176,3360788479,AR
+3360782176,3360782239,AR
+3360782240,3360782247,MX
+3360782248,3360788479,AR
3360788480,3360790527,CL
3360790528,3360849919,AR
3360849920,3360882687,VE
@@ -84815,28 +84821,18 @@
3361034240,3361036287,EC
3361036288,3361046527,AR
3361046528,3361052671,BO
-3361052672,3361054719,AR
+3361052672,3361054463,AR
+3361054464,3361054719,PE
3361054720,3361058815,NI
3361058816,3361062911,AR
3361062912,3361071103,CL
3361071104,3361072639,CO
3361072640,3361072767,VE
-3361072768,3361072895,CO
-3361072896,3361073151,VE
-3361073152,3361079295,CO
+3361072768,3361079295,CO
3361079296,3361144831,CL
3361144832,3361210367,BO
3361210368,3361275903,DO
-3361275904,3361276415,VE
-3361276416,3361276543,PE
-3361276544,3361278463,VE
-3361278464,3361278591,PE
-3361278592,3361278719,VE
-3361278720,3361278975,PE
-3361278976,3361279615,VE
-3361279616,3361279743,PE
-3361279744,3361279999,VE
-3361280000,3361284095,PE
+3361275904,3361284095,PE
3361284096,3361296383,CL
3361296384,3361298431,SV
3361298432,3361300479,DO
@@ -84872,7 +84868,9 @@
3362258944,3362324479,CL
3362324480,3362324735,AR
3362324736,3362324991,US
-3362324992,3362327039,AR
+3362324992,3362326015,AR
+3362326016,3362326271,US
+3362326272,3362327039,AR
3362327040,3362327551,US
3362327552,3362328063,AR
3362328064,3362328575,US
@@ -84887,8 +84885,10 @@
3362342400,3362343423,AR
3362343424,3362343679,US
3362343680,3362344447,AR
-3362344448,3362346751,US
-3362346752,3362348799,AR
+3362344448,3362344959,US
+3362344960,3362345983,AR
+3362345984,3362346495,US
+3362346496,3362348799,AR
3362348800,3362349055,US
3362349056,3362351103,CR
3362351104,3362353151,AR
@@ -84953,7 +84953,9 @@
3362689280,3362689311,AR
3362689312,3362690367,CO
3362690368,3362690431,AR
-3362690432,3362691071,CO
+3362690432,3362690527,CO
+3362690528,3362690559,AR
+3362690560,3362691071,CO
3362691072,3362692095,PA
3362692096,3362692287,AR
3362692288,3362692351,CO
@@ -85106,24 +85108,40 @@
3380815360,3380815871,CL
3380815872,3380816127,MX
3380816128,3380816383,BO
+3380816384,3380816639,SV
+3380816640,3380816895,CW
3380816896,3380817151,MX
3380817152,3380817407,BO
+3380817408,3380817663,CO
+3380817664,3380817919,AR
3380817920,3380818175,MX
3380818176,3380818431,PA
+3380818432,3380818687,DO
+3380818688,3380818943,PY
3380818944,3380822527,MX
+3380822528,3380822783,NI
+3380822784,3380823039,PE
3380823040,3380824063,BR
3380824064,3380824319,MX
+3380824320,3380824575,GT
+3380824576,3380825087,AR
3380825088,3380825343,MX
3380825344,3380825599,HT
+3380825600,3380825855,CO
3380826112,3380828159,BR
3380828160,3380828671,MX
+3380828672,3380829183,CO
3380829184,3380830207,BR
3380830208,3380830463,MX
3380830464,3380830719,CO
+3380830720,3380831231,PA
3380831232,3380831743,MX
+3380832000,3380832255,SR
3380832256,3380832767,MX
+3380833024,3380833279,DO
3380833280,3380833791,MX
3380834304,3380834815,MX
+3380834816,3380835071,CO
3380835328,3380835839,MX
3380836352,3380836607,MX
3380836608,3380836863,PE
@@ -85232,9 +85250,7 @@
3382704128,3382706175,BR
3382706176,3382853631,MX
3382853632,3382870015,BR
-3382870016,3383630843,MX
-3383630844,3383630847,US
-3383630848,3383701503,MX
+3382870016,3383701503,MX
3383701504,3383705599,BR
3383705600,3383754751,MX
3383754752,3384147967,AR
@@ -85291,9 +85307,9 @@
3386634240,3386636287,CO
3386636288,3386637311,BR
3386637312,3386638335,UY
-3386638336,3386640895,CW
+3386638336,3386640895,SX
3386640896,3386641151,US
-3386641152,3386642431,CW
+3386641152,3386642431,SX
3386642432,3386644735,AR
3386644736,3386644991,PY
3386644992,3386645247,CR
@@ -85341,8 +85357,8 @@
3387572224,3387572539,AR
3387572540,3387572543,CO
3387572544,3387573375,AR
-3387573376,3387573759,CO
-3387573760,3387574015,AR
+3387573376,3387573887,CO
+3387573888,3387574015,AR
3387574016,3387574143,CO
3387574144,3387574783,AR
3387574784,3387575039,CO
@@ -85350,8 +85366,8 @@
3387575296,3387575423,CO
3387575424,3387575551,AR
3387575552,3387575567,CO
-3387575568,3387575807,AR
-3387575808,3387576063,CO
+3387575568,3387575679,AR
+3387575680,3387576063,CO
3387576064,3387576319,AR
3387576320,3387578367,EC
3387578368,3387584511,AR
@@ -85477,7 +85493,7 @@
3389211392,3389211647,AU
3389211648,3389212671,TH
3389213184,3389213439,AU
-3389213440,3389214207,IN
+3389213952,3389214207,IN
3389214208,3389214463,SG
3389214464,3389214719,AU
3389214720,3389218815,NZ
@@ -85587,7 +85603,6 @@
3389420032,3389420287,CN
3389420288,3389420543,AU
3389420544,3389421055,NZ
-3389421056,3389421311,AU
3389421312,3389421567,JP
3389421568,3389422591,KI
3389422592,3389431807,AU
@@ -85862,7 +85877,6 @@
3390339328,3390339839,NZ
3390339840,3390340351,JP
3390340352,3390340607,CN
-3390340608,3390340863,IN
3390340864,3390341119,CN
3390341120,3390375935,KR
3390375936,3390377983,AU
@@ -85922,7 +85936,6 @@
3391356928,3391388159,NZ
3391388672,3391414783,NZ
3391415040,3391441407,NZ
-3391441408,3391441663,PH
3391441664,3391444479,NZ
3391444480,3391444991,VN
3391444992,3391453183,NZ
@@ -85956,7 +85969,9 @@
3391620864,3391621119,CN
3391621120,3391622911,HK
3391622912,3391623167,CN
-3391623168,3391653631,HK
+3391623168,3391627263,HK
+3391627264,3391651839,IN
+3391651840,3391653631,HK
3391653632,3391654143,CN
3391654144,3391654911,HK
3391654912,3391655167,CN
@@ -86076,7 +86091,6 @@
3391947776,3391948287,HK
3391948288,3391948799,IN
3391948800,3391949311,HK
-3391949312,3391949823,IN
3391949824,3391950079,JP
3391950080,3391950335,AU
3391950336,3391950591,HK
@@ -86144,11 +86158,7 @@
3392114432,3392114687,KR
3392114688,3392118783,GU
3392118784,3392126975,MY
-3392126976,3392127847,ID
-3392127848,3392127851,HK
-3392127852,3392128423,ID
-3392128424,3392128431,HK
-3392128432,3392135167,ID
+3392126976,3392135167,ID
3392135168,3392143359,TH
3392143360,3392208895,JP
3392208896,3392217343,NZ
@@ -86236,8 +86246,7 @@
3392503808,3392505343,HK
3392506880,3392507903,HK
3392512000,3392516095,BD
-3392516096,3392520191,NZ
-3392520192,3392524287,AU
+3392516096,3392524287,AU
3392524288,3392528383,JP
3392528384,3392536575,ID
3392536576,3392602111,IN
@@ -86293,6 +86302,7 @@
3392830464,3392830719,ID
3392830720,3392830975,IN
3392830976,3392831231,TH
+3392831232,3392831487,IN
3392831488,3392832511,PG
3392832512,3392833535,IN
3392833536,3392835583,AU
@@ -86303,7 +86313,7 @@
3392856064,3392857087,AU
3392857088,3392857343,IN
3392857344,3392858111,AU
-3392858112,3392858623,IN
+3392858112,3392858367,IN
3392858624,3392858879,JP
3392858880,3392859135,AU
3392859136,3392859647,PH
@@ -86498,7 +86508,7 @@
3393620992,3393621247,JP
3393621248,3393622015,AU
3393622016,3393626111,PK
-3393626112,3393630207,CN
+3393626112,3393630207,HK
3393630208,3393634303,JP
3393634304,3393638399,CN
3393638400,3393650687,JP
@@ -86569,7 +86579,9 @@
3393863680,3393865727,AU
3393865728,3393867775,ID
3393867776,3393871871,CN
-3393871872,3393874943,HK
+3393871872,3393872383,HK
+3393872384,3393872895,IN
+3393872896,3393874943,HK
3393874944,3393875967,AU
3393875968,3393876991,HK
3393876992,3393878015,SG
@@ -86681,7 +86693,9 @@
3394347008,3394351103,PH
3394355200,3394359295,IN
3394359296,3394363391,AU
-3394363392,3394441215,HK
+3394363392,3394375839,HK
+3394375840,3394375847,CN
+3394375848,3394441215,HK
3394441216,3394453503,IN
3394453504,3394461695,AU
3394461696,3394465791,SG
@@ -86711,7 +86725,7 @@
3394625536,3394629631,HK
3394629632,3394631679,AU
3394631680,3394634751,HK
-3394634752,3394635775,IN
+3394634752,3394635775,AU
3394635776,3394637823,KR
3394637824,3394641919,AF
3394641920,3394648063,AU
@@ -86757,13 +86771,17 @@
3394830336,3394831359,HK
3394831360,3394832383,NZ
3394832384,3394834431,CN
-3394834432,3394834687,HK
+3394834432,3394834559,HK
+3394834560,3394834575,JP
+3394834576,3394834687,HK
3394834688,3394834943,JP
3394834944,3394834959,HK
3394834960,3394834975,JP
3394834976,3394834983,HK
3394834984,3394834991,SG
-3394834992,3394835199,HK
+3394834992,3394835055,HK
+3394835056,3394835071,SG
+3394835072,3394835199,HK
3394835200,3394835455,JP
3394835456,3394835583,SG
3394835584,3394835711,JP
@@ -86788,7 +86806,9 @@
3394871296,3394879487,AU
3394879488,3394883583,PH
3394883584,3394887679,ID
-3394887680,3394893823,JP
+3394887680,3394889727,JP
+3394889728,3394891775,CN
+3394891776,3394893823,JP
3394893824,3394894847,KR
3394894848,3394895871,HK
3394895872,3394896895,CN
@@ -86929,7 +86949,6 @@
3397026304,3397026815,TH
3397026816,3397027071,CN
3397027072,3397027327,PH
-3397027328,3397027839,IN
3397027840,3397029887,JP
3397029888,3397033983,MY
3397033984,3397038079,ID
@@ -87142,19 +87161,27 @@
3397812224,3397816319,CN
3397816320,3397832703,IN
3397836800,3397844991,AU
-3397844992,3397857791,JP
-3397857792,3397858047,AU
-3397858048,3397862143,JP
-3397862144,3397862399,PH
+3397844992,3397845247,JP
+3397845248,3397845503,AU
+3397845504,3397846015,JP
+3397846016,3397846271,AU
+3397846272,3397857791,JP
+3397857792,3397858559,AU
+3397858560,3397861887,JP
+3397861888,3397862399,PH
3397862400,3397869823,JP
3397869824,3397870079,AU
-3397870080,3397878527,JP
+3397870080,3397871871,JP
+3397871872,3397872127,AU
+3397872128,3397878527,JP
3397878528,3397878783,TW
3397878784,3397881855,JP
3397881856,3397882111,HK
3397882112,3397887999,JP
3397888000,3397889023,IN
-3397889024,3397910527,JP
+3397889024,3397895423,JP
+3397895424,3397895679,AU
+3397895680,3397910527,JP
3397910528,3397918719,SG
3397918720,3397922815,AU
3397922816,3397926911,CN
@@ -87272,7 +87299,8 @@
3398642944,3398643199,JP
3398643200,3398643455,AU
3398643456,3398647807,JP
-3398647808,3398668287,AU
+3398647808,3398655999,IN
+3398656000,3398668287,AU
3398668288,3398672383,CN
3398672384,3398680575,PK
3398680576,3398684671,ID
@@ -87448,7 +87476,7 @@
3399827456,3399835647,AU
3399835648,3399839743,CN
3399839744,3399841791,JP
-3399841792,3399852031,TW
+3399843840,3399852031,TW
3399852032,3399856127,JP
3399856128,3399860223,CN
3399860224,3399864319,PG
@@ -87549,7 +87577,6 @@
3400269824,3400270847,CN
3400270848,3400271359,VN
3400271360,3400271615,AU
-3400271616,3400271871,IN
3400271872,3400273919,AU
3400273920,3400275967,TH
3400275968,3400278015,JP
@@ -87615,7 +87642,9 @@
3400630272,3400646655,IN
3400646656,3400647935,SG
3400647936,3400648191,AU
-3400648192,3400648815,SG
+3400648192,3400648677,SG
+3400648678,3400648678,HK
+3400648679,3400648815,SG
3400648816,3400648831,HK
3400648832,3400649943,SG
3400649944,3400649951,HK
@@ -87696,7 +87725,9 @@
3401547776,3401580543,IN
3401580544,3402629119,CN
3402629120,3402917631,JP
-3402917632,3402917887,US
+3402917632,3402917785,US
+3402917786,3402917786,JP
+3402917787,3402917887,US
3402917888,3405774847,JP
3405774848,3405775871,AU
3405775872,3405776895,CN
@@ -87812,7 +87843,6 @@
3406002432,3406002943,AU
3406002944,3406003199,CN
3406003200,3406005247,AU
-3406005248,3406005503,HK
3406005504,3406006015,AU
3406006016,3406006271,CN
3406006272,3406007039,AU
@@ -88012,7 +88042,9 @@
3406512384,3406512639,IN
3406512640,3406513663,AU
3406513664,3406513919,CN
-3406513920,3406514687,AU
+3406513920,3406514175,AU
+3406514176,3406514431,IN
+3406514432,3406514687,AU
3406514688,3406514943,TH
3406514944,3406515199,AU
3406515200,3406516223,CN
@@ -88122,7 +88154,8 @@
3406696960,3406697215,IN
3406697216,3406698495,AU
3406698496,3406699519,CN
-3406699520,3406700799,AU
+3406699520,3406700543,AU
+3406700544,3406700799,IN
3406700800,3406701055,CN
3406701056,3406706687,AU
3406706688,3406706943,CN
@@ -88271,7 +88304,8 @@
3406962688,3406963967,AU
3406963968,3406964223,CN
3406964224,3406966783,AU
-3406966784,3406967551,CN
+3406966784,3406967295,CN
+3406967296,3406967551,HK
3406967552,3406967807,IN
3406967808,3406968063,CN
3406968064,3406972927,AU
@@ -88318,7 +88352,7 @@
3407026432,3407027711,AU
3407027712,3407027967,CN
3407027968,3407028223,AU
-3407028224,3407030271,CN
+3407028224,3407030271,HK
3407030272,3407030527,AU
3407030528,3407030783,CN
3407030784,3407031295,AU
@@ -88394,7 +88428,8 @@
3407117056,3407117823,AU
3407117824,3407118335,CN
3407118336,3407120127,AU
-3407120128,3407122431,CN
+3407120128,3407120383,CN
+3407120384,3407122431,HK
3407122432,3407123967,AU
3407123968,3407124223,CN
3407124224,3407124479,AU
@@ -88474,7 +88509,7 @@
3407259392,3407260159,AU
3407260160,3407260415,CN
3407260416,3407261695,AU
-3407261696,3407263743,CN
+3407261696,3407263743,HK
3407263744,3407266303,AU
3407266304,3407266559,CN
3407266560,3407268863,AU
@@ -88493,7 +88528,8 @@
3407297792,3407298559,CN
3407298560,3407300863,AU
3407300864,3407301119,CN
-3407301120,3407303935,AU
+3407301120,3407301887,AU
+3407302144,3407303935,AU
3407303936,3407304191,CN
3407304192,3407305727,AU
3407305728,3407306751,CN
@@ -88591,7 +88627,7 @@
3407418880,3407425023,AU
3407425024,3407425279,CN
3407425280,3407425535,AU
-3407425536,3407427583,CN
+3407425536,3407427583,HK
3407427584,3407429631,AU
3407429632,3407430143,CN
3407430144,3407436543,AU
@@ -88600,7 +88636,9 @@
3407438592,3407439103,CN
3407439104,3407440383,AU
3407440384,3407440639,CN
-3407440640,3407446783,AU
+3407440640,3407440895,AU
+3407440896,3407441151,IN
+3407441152,3407446783,AU
3407446784,3407447039,CN
3407447040,3407447807,AU
3407447808,3407448063,CN
@@ -88779,7 +88817,8 @@
3407644672,3407644927,CN
3407644928,3407645695,AU
3407645696,3407645951,CN
-3407645952,3407646975,AU
+3407645952,3407646463,AU
+3407646720,3407646975,AU
3407646976,3407647231,CN
3407647232,3407652095,AU
3407652096,3407652351,CN
@@ -88797,7 +88836,8 @@
3407667712,3407668223,CN
3407668224,3407671039,AU
3407671040,3407671295,CN
-3407671296,3407675903,AU
+3407671296,3407674367,AU
+3407674880,3407675903,AU
3407675904,3407676159,CN
3407676160,3407677439,AU
3407677440,3407677951,CN
@@ -89019,7 +89059,8 @@
3407928832,3407938559,AU
3407938560,3407938815,CN
3407938816,3407939327,AU
-3407939328,3407941631,CN
+3407939328,3407939583,CN
+3407939584,3407941631,HK
3407941632,3407942911,AU
3407942912,3407943167,CN
3407943168,3407944191,AU
@@ -89123,7 +89164,7 @@
3408044800,3408050943,AU
3408050944,3408051199,CN
3408051200,3408052223,AU
-3408052224,3408054271,CN
+3408052224,3408054271,HK
3408054272,3408055295,AU
3408055296,3408056319,CN
3408056320,3408062463,AU
@@ -89193,7 +89234,7 @@
3409455360,3409456639,AU
3409456640,3409456895,CN
3409456896,3409457151,AU
-3409457152,3409459199,CN
+3409457152,3409459199,HK
3409459200,3409462271,AU
3409462272,3409462783,CN
3409462784,3409465855,AU
@@ -89316,7 +89357,11 @@
3409888000,3409888255,HK
3409888256,3409888511,AU
3409888512,3409888767,CN
-3409888768,3409896447,AU
+3409888768,3409891327,AU
+3409891328,3409891839,GB
+3409891840,3409892351,AU
+3409892352,3409892863,US
+3409892864,3409896447,AU
3409896448,3409897471,CN
3409897472,3409897983,AU
3409897984,3409898239,CN
@@ -89389,12 +89434,13 @@
3411050496,3411050751,PK
3411051008,3411051263,PK
3411051264,3411051519,SG
-3411051520,3411058687,CN
+3411051520,3411052543,CN
+3411052544,3411054591,HK
+3411054592,3411058687,CN
3411058688,3411062783,AU
3411062784,3411064831,HK
3411064832,3411065087,BD
-3411065088,3411083263,HK
-3411083264,3411085311,CN
+3411065088,3411085311,HK
3411085312,3411086335,KR
3411086336,3411087359,JP
3411087360,3411091455,CN
@@ -89412,8 +89458,7 @@
3411148800,3411149311,CN
3411149312,3411149823,MV
3411149824,3411150847,IN
-3411150848,3411152895,HK
-3411152896,3411154943,CN
+3411150848,3411154943,HK
3411154944,3411156991,JP
3411156992,3411161087,PH
3411161088,3411165183,PK
@@ -89485,7 +89530,6 @@
3411558400,3411565257,HK
3411565258,3411565258,US
3411565259,3411566591,HK
-3411566592,3411570687,BD
3411570688,3411574783,AU
3411574784,3411582975,IN
3411582976,3411587071,HK
@@ -89495,8 +89539,7 @@
3411607552,3411608575,CN
3411608576,3411608831,IN
3411608832,3411609087,AU
-3411609088,3411609599,HK
-3411609600,3411611647,CN
+3411609088,3411611647,HK
3411611648,3411615743,ID
3411615744,3411623935,JP
3411623936,3411640319,AU
@@ -89551,12 +89594,7 @@
3411859252,3411861503,JP
3411861504,3411869695,AU
3411869696,3411943423,CN
-3411943424,3411946495,NZ
-3411946496,3411947007,AU
-3411947008,3411948031,NZ
-3411948032,3411948543,AU
-3411948544,3411950591,NZ
-3411950592,3411951615,AU
+3411943424,3411951615,NZ
3411951616,3411967999,LK
3411968000,3411984383,AU
3411984384,3412000767,IN
@@ -89576,7 +89614,8 @@
3412253696,3412254719,JP
3412254720,3412262911,NR
3412262912,3412264959,JP
-3412264960,3412271103,CN
+3412264960,3412267007,HK
+3412267008,3412271103,CN
3412271104,3412273151,NZ
3412273152,3412275199,IN
3412275200,3412279295,PK
@@ -89603,7 +89642,8 @@
3412327936,3412328191,HK
3412328192,3412328447,WS
3412328448,3412336639,AU
-3412336640,3412342783,CN
+3412336640,3412340735,CN
+3412340736,3412342783,HK
3412342784,3412343039,AU
3412343040,3412343295,HK
3412343552,3412343807,AU
@@ -89752,7 +89792,9 @@
3413597696,3413597951,TW
3413597952,3413602303,AU
3413602304,3413602559,ID
-3413602560,3413639167,CN
+3413602560,3413604351,CN
+3413604352,3413606399,HK
+3413606400,3413639167,CN
3413639168,3413704703,SG
3413704704,3413737471,MY
3413737472,3413753855,TH
@@ -89782,8 +89824,8 @@
3413966848,3414024191,SG
3414024192,3414024447,AU
3414024448,3414050303,SG
-3414050304,3414050559,US
-3414050560,3414155519,SG
+3414050304,3414050815,US
+3414050816,3414155519,SG
3414155520,3414155775,PH
3414155776,3414163455,SG
3414163456,3414171647,PK
@@ -89792,7 +89834,7 @@
3414188032,3414196223,CN
3414196224,3414204415,AU
3414204416,3414220799,KR
-3414220800,3414222847,CN
+3414220800,3414222847,HK
3414222848,3414223871,AU
3414223872,3414224895,KR
3414224896,3414226943,VN
@@ -89800,7 +89842,7 @@
3414227968,3414230015,PK
3414230016,3414230527,PH
3414230528,3414231039,KR
-3414231040,3414233087,CN
+3414231040,3414233087,HK
3414233088,3414245375,AU
3414245376,3414253567,HK
3414253568,3414261759,JP
@@ -89952,10 +89994,11 @@
3416262656,3416264703,AU
3416264704,3416268799,JP
3416268800,3416272895,HK
+3416272896,3416274943,MN
3416274944,3416276991,ID
3416276992,3416285183,HK
3416285184,3416287231,VN
-3416287232,3416289279,CN
+3416287232,3416289279,HK
3416289280,3416293375,NZ
3416293376,3416293631,ID
3416293632,3416293887,CN
@@ -90125,7 +90168,6 @@
3417227264,3417243647,JP
3417243648,3417244671,PH
3417244672,3417245695,IN
-3417245696,3417247743,BT
3417247744,3417251839,JP
3417251840,3417260031,KR
3417260032,3417264127,PK
@@ -90257,7 +90299,8 @@
3418292992,3418293503,HK
3418293760,3418294015,AU
3418294272,3418296319,VN
-3418296320,3418298367,CN
+3418296320,3418297343,HK
+3418297344,3418298367,CN
3418298368,3418299391,HK
3418299392,3418300415,CN
3418300416,3418300927,BD
@@ -90306,24 +90349,26 @@
3418512336,3418513407,JP
3418513408,3418517503,IN
3418517504,3418519551,MN
-3418519552,3418521599,CN
-3418521600,3418554367,HK
+3418519552,3418554367,HK
3418554368,3418570751,VN
3418570752,3418578943,CN
3418578944,3418583039,TH
-3418583040,3418585087,CN
+3418583040,3418585087,HK
3418585088,3418586111,SG
3418586112,3418586367,AU
3418586368,3418586879,SG
3418586880,3418587135,AU
-3418587136,3418623999,CN
+3418587136,3418621951,CN
+3418621952,3418623999,HK
3418624000,3418626047,JP
3418628096,3418636287,AU
3418636288,3418642943,JP
3418642944,3418643199,ID
3418643200,3418643455,JP
3418643456,3418644479,AU
-3418644480,3418650807,JP
+3418644480,3418644735,JP
+3418644736,3418644863,AU
+3418644864,3418650807,JP
3418650808,3418650808,HK
3418650809,3418650823,JP
3418650824,3418650839,HK
@@ -90440,7 +90485,9 @@
3419899904,3419900159,FR
3419900160,3419900415,BE
3419900416,3419901567,AU
-3419901568,3419901951,NZ
+3419901568,3419901673,NZ
+3419901674,3419901674,AU
+3419901675,3419901951,NZ
3419901952,3419902207,AU
3419902208,3419902463,HK
3419902464,3419902719,CN
@@ -90451,8 +90498,7 @@
3419906048,3419914239,PK
3419914240,3419922431,KR
3419922432,3419924479,JP
-3419924480,3419926527,CN
-3419926528,3419930623,HK
+3419924480,3419930623,HK
3419930624,3419971583,JP
3419971584,3419979775,KR
3419979776,3419996159,JP
@@ -90496,7 +90542,7 @@
3420375808,3420377087,HK
3420377088,3420389375,JP
3420389376,3420393471,US
-3420393472,3420395519,CN
+3420393472,3420395519,HK
3420395520,3420397567,JP
3420397568,3420401663,KH
3420401664,3420411903,JP
@@ -90523,12 +90569,15 @@
3422850816,3422955519,US
3422955520,3422956799,FR
3422956800,3423076351,US
+3423076352,3423077375,CA
3423077376,3423092735,US
3423092736,3423093759,VI
3423093760,3423094783,US
3423094784,3423095807,CA
3423095808,3423128575,US
-3423129600,3423143935,US
+3423129600,3423131647,US
+3423131648,3423133695,PL
+3423133696,3423143935,US
3423143936,3423145983,CA
3423145984,3423162367,US
3423162368,3423163391,CA
@@ -90565,7 +90614,9 @@
3423416320,3423417343,CA
3423417344,3423430655,US
3423430656,3423431167,TC
-3423431168,3423468543,US
+3423431168,3423431416,US
+3423431417,3423431417,TC
+3423431418,3423468543,US
3423468544,3423469567,CA
3423469568,3423473663,US
3423473664,3423474687,CA
@@ -90590,7 +90641,8 @@
3423586304,3423588351,US
3423590400,3423602687,US
3423602688,3423603711,KN
-3423603712,3423626239,US
+3423603712,3423614975,US
+3423616000,3423626239,US
3423626240,3423627263,CA
3423627264,3423629311,US
3423629312,3423630335,AG
@@ -90641,8 +90693,7 @@
3425173504,3425304575,CA
3425304576,3425697791,US
3425697792,3425699839,CA
-3425699840,3425711615,US
-3425713152,3425714175,US
+3425699840,3425714175,US
3425714176,3425722367,CA
3425722368,3425726463,US
3425728512,3425828863,US
@@ -90651,7 +90702,9 @@
3425869184,3425894399,CA
3425894400,3426013183,US
3426013184,3426013439,IL
-3426013440,3426306559,US
+3426013440,3426306047,US
+3426306048,3426306303,IN
+3426306304,3426306559,US
3426306560,3426306815,IN
3426306816,3426369023,US
3426369024,3426369535,CA
@@ -90674,8 +90727,7 @@
3426482688,3426484223,CA
3426484224,3426617855,US
3426617856,3426618367,CA
-3426618368,3426628607,US
-3426629632,3426679039,US
+3426618368,3426679039,US
3426679040,3426679295,ES
3426679296,3426717695,US
3426719744,3426729471,US
@@ -90683,7 +90735,8 @@
3426729984,3426735615,US
3426736128,3426744319,US
3426744320,3426746367,CA
-3426746368,3427112447,US
+3426746368,3427109887,US
+3427110400,3427112447,US
3427112448,3427112703,CN
3427112704,3427117055,US
3427117056,3427117311,CA
@@ -90699,7 +90752,6 @@
3427618304,3427618559,CA
3427618560,3427631103,US
3427632128,3427647999,US
-3427648000,3427648511,CA
3427648512,3427651071,US
3427651072,3427651327,CA
3427651328,3427729407,US
@@ -90855,8 +90907,7 @@
3427860480,3428025343,CA
3428025344,3428025855,US
3428025856,3428057087,CA
-3428057088,3428217855,US
-3428218880,3428286719,US
+3428057088,3428286719,US
3428286720,3428286975,CA
3428286976,3428296959,US
3428296960,3428297215,CL
@@ -90872,7 +90923,6 @@
3428391936,3428399359,US
3428399360,3428399615,CA
3428399616,3428433919,US
-3428433920,3428434175,CA
3428434176,3428434943,US
3428434944,3428435199,CA
3428435200,3428437503,US
@@ -90894,8 +90944,8 @@
3428589568,3428591871,US
3428591872,3428592127,CA
3428592128,3428592383,US
-3428592384,3428594175,CA
-3428594176,3428594687,US
+3428592384,3428593919,CA
+3428593920,3428594687,US
3428594688,3428595199,CA
3428595200,3428596223,US
3428596224,3428596735,CA
@@ -90969,36 +91019,24 @@
3429382144,3429382399,DE
3429382400,3429500927,US
3429500928,3429502975,CA
-3429502976,3429517407,US
-3429517408,3429517411,HK
-3429517412,3429518763,US
-3429518764,3429518767,SG
-3429518768,3429520951,US
-3429520952,3429520955,GB
-3429520956,3429739175,US
-3429739176,3429739179,GB
-3429739180,3429775359,US
+3429502976,3429775359,US
3429775360,3429777407,TC
-3429777408,3429809151,US
-3429810176,3429892095,US
+3429777408,3429892095,US
3429892096,3429957631,CA
-3429957632,3430073354,US
+3429957632,3430025471,US
+3430025728,3430073354,US
3430073355,3430073355,AU
-3430073356,3430146047,US
-3430148096,3430328831,US
+3430073356,3430328831,US
3430328832,3430329087,GH
3430329088,3430354943,US
3430354944,3430356991,PR
3430356992,3430468607,US
3430468608,3430468863,AQ
-3430468864,3430701055,US
-3430702080,3430703871,US
+3430468864,3430703871,US
3430703872,3430704127,PR
3430704128,3430705151,US
3430705152,3430706175,MX
-3430706176,3430708223,US
-3430709248,3430714367,US
-3430715392,3430722303,US
+3430706176,3430722303,US
3430722304,3430722559,CA
3430722560,3430729244,US
3430729245,3430729245,GB
@@ -91082,8 +91120,7 @@
3431642624,3431657471,CA
3431657472,3431658495,US
3431658752,3431661311,CA
-3431661312,3431675903,US
-3431677952,3431745023,US
+3431661312,3431745023,US
3431745024,3431745279,BE
3431745280,3431745791,US
3431745792,3431746047,GB
@@ -91132,26 +91169,22 @@
3432493824,3432495103,DE
3432495104,3432517119,US
3432517120,3432517631,MU
-3432517632,3432571647,US
-3432571648,3432571903,CA
-3432571904,3432579071,US
-3432580096,3432585215,US
+3432517632,3432570879,US
+3432570880,3432572927,HK
+3432572928,3432585215,US
3432585216,3432585727,MX
3432585728,3432609791,US
-3432610560,3432611839,US
-3432612864,3432613631,US
+3432610560,3432613631,US
3432613632,3432613887,CA
3432613888,3432634111,US
3432634112,3432634367,CA
3432634368,3432660991,US
3432660992,3432663039,DE
-3432663040,3432676351,US
-3432677376,3432689151,US
+3432663040,3432689151,US
3432689152,3432689663,CA
3432689664,3432695807,US
3432697856,3432708095,US
-3432710144,3432717311,US
-3432718336,3432807423,US
+3432710144,3432807423,US
3432807424,3432808447,CA
3432808448,3433824511,US
3433824512,3433824767,DE
@@ -91384,7 +91417,8 @@
3448263424,3448263935,AG
3448263936,3448303615,US
3448303616,3448303871,KY
-3448303872,3448377343,US
+3448303872,3448369151,US
+3448373248,3448377343,US
3448377344,3448377855,AG
3448377856,3448379647,US
3448379648,3448379903,SG
@@ -91401,24 +91435,23 @@
3448398336,3448399103,CA
3448399104,3448399359,US
3448399360,3448399871,CA
-3448399872,3448500479,US
+3448399872,3448444143,US
+3448444144,3448444159,SG
+3448444160,3448500479,US
3448500480,3448500735,SG
3448500736,3448559103,US
3448559104,3448559359,GB
3448559360,3448651775,US
-3448652800,3448673279,US
-3448674304,3448711167,US
+3448652800,3448711167,US
3448713216,3448717311,US
3448717312,3448717567,AU
3448717568,3448838143,US
3448838144,3448838399,CA
-3448838400,3448868863,US
-3448870912,3448985599,US
+3448838400,3448985599,US
3448987648,3448989695,IN
3448989696,3448990719,HK
3448990720,3448991743,IN
-3448991744,3449096191,US
-3449098240,3449159679,US
+3448991744,3449159679,US
3449159680,3449160703,CA
3449160704,3449161471,US
3449161472,3449163519,CA
@@ -91553,9 +91586,17 @@
3450272768,3450275327,US
3450275328,3450275583,GB
3450275584,3450275839,FR
-3450275840,3450345359,US
+3450275840,3450345279,US
+3450345280,3450345287,AT
+3450345288,3450345295,DE
+3450345296,3450345303,CZ
+3450345304,3450345359,US
3450345360,3450345367,DE
-3450345368,3450612479,US
+3450345368,3450345407,US
+3450345408,3450345415,IT
+3450345416,3450345423,CZ
+3450345424,3450345439,DE
+3450345440,3450612479,US
3450612480,3450612735,CA
3450612736,3450685183,US
3450685184,3450685439,CA
@@ -91569,6 +91610,7 @@
3450774784,3450775039,US
3450775040,3450777599,CA
3450777600,3450851839,US
+3450852352,3450853375,CA
3450855424,3450935295,US
3450935296,3450935551,MY
3450935552,3450935807,US
@@ -91661,10 +91703,11 @@
3451896320,3451896575,DE
3451896576,3451912191,US
3451912192,3452174335,CA
-3452174336,3452180479,US
-3452181504,3452436479,US
+3452174336,3452436479,US
3452436480,3452502015,CA
-3452502016,3452715007,US
+3452502016,3452658431,US
+3452658432,3452658687,HK
+3452658688,3452715007,US
3452715008,3452723199,CA
3452723200,3452764671,US
3452764672,3452765183,CA
@@ -91826,6 +91869,7 @@
3453028864,3453029375,CA
3453029376,3453092095,US
3453092096,3453096959,CA
+3453096960,3453097983,US
3453097984,3453101055,CA
3453101056,3453101311,US
3453101312,3453123839,CA
@@ -91956,7 +92000,9 @@
3454672896,3454681087,CA
3454681088,3454708353,US
3454708354,3454708355,GB
-3454708356,3454730239,US
+3454708356,3454727935,US
+3454727936,3454727951,JP
+3454727952,3454730239,US
3454730240,3454732287,EC
3454732288,3454796031,US
3454796032,3454808831,CA
@@ -92120,8 +92166,8 @@
3456892928,3456958463,CA
3456958464,3457551871,US
3457551872,3457552127,CA
-3457552128,3457553151,US
-3457553152,3457553663,CA
+3457552128,3457553407,US
+3457553408,3457553663,CA
3457553664,3457554175,US
3457554176,3457554431,CA
3457554432,3457555711,US
@@ -92164,7 +92210,9 @@
3458820096,3458820351,CA
3458820352,3458820863,US
3458820864,3458821119,JM
-3458821120,3459055615,US
+3458821120,3458821887,US
+3458821888,3458822143,CA
+3458822144,3459055615,US
3459055616,3459121151,CA
3459121152,3459186687,US
3459186688,3459252223,CA
@@ -92294,14 +92342,12 @@
3459512320,3459513855,CA
3459513856,3459592191,US
3459592192,3459596287,CA
-3459596288,3459614719,US
-3459616768,3459617791,US
-3459617792,3459617999,CA
+3459596288,3459615743,US
+3459615744,3459615999,CA
+3459616768,3459617999,CA
3459618000,3459618000,ID
-3459618001,3459618047,CA
-3459618048,3459618815,US
-3459618816,3459619071,CA
-3459619072,3459622911,US
+3459618001,3459620863,CA
+3459620864,3459622911,US
3459624960,3459629055,BM
3459629056,3459631103,US
3459633152,3459686399,US
@@ -92316,17 +92362,7 @@
3459848960,3459849215,FR
3459849216,3459850239,US
3459850240,3459850495,CA
-3459850496,3460057283,US
-3460057284,3460057287,TH
-3460057288,3460061687,US
-3460061688,3460061691,HK
-3460061692,3460063175,US
-3460063176,3460063179,HK
-3460063180,3460070959,US
-3460070960,3460070963,GB
-3460070964,3460071043,US
-3460071044,3460071047,GB
-3460071048,3460104703,US
+3459850496,3460104703,US
3460104704,3460105215,MX
3460105216,3460114431,US
3460114432,3460116479,SR
@@ -92342,7 +92378,7 @@
3460763648,3460794367,US
3460796416,3460878335,US
3460878336,3460878591,CA
-3460878592,3460879359,US
+3460878592,3460880383,US
3460882432,3460893439,US
3460893440,3460893695,IT
3460893696,3460894463,US
@@ -92485,14 +92521,16 @@
3461513728,3461513983,BF
3461513984,3461514495,US
3461514496,3461514751,QA
-3461514752,3461516287,US
+3461514752,3461515775,US
+3461515776,3461516031,CA
+3461516032,3461516287,US
3461516288,3461516543,IL
3461516544,3461548031,US
-3461550080,3461554175,US
-3461554176,3461556223,CA
+3461550080,3461554943,US
+3461554944,3461555199,CA
+3461555200,3461556223,US
3461558272,3461580799,US
-3461582848,3461604351,US
-3461605376,3461808127,US
+3461582848,3461808127,US
3461808128,3461873663,CA
3461873664,3461897727,US
3461897728,3461897983,CA
@@ -92580,7 +92618,9 @@
3462634752,3462635007,SG
3462635008,3462635263,US
3462635264,3462635519,SG
-3462635520,3463004159,US
+3462635520,3462661375,US
+3462661376,3462661631,SG
+3462661632,3463004159,US
3463004160,3463006207,CO
3463006208,3463032319,US
3463032320,3463032831,PR
@@ -92654,14 +92694,14 @@
3464428800,3464429311,US
3464429568,3464464383,US
3464466432,3464472575,US
-3464474624,3464548607,US
+3464474624,3464548351,US
+3464548352,3464548607,AG
3464548608,3464548863,LC
3464548864,3464549119,KN
3464549120,3464549375,VG
-3464549376,3464549695,US
-3464549696,3464549727,AG
+3464549376,3464549727,AG
3464549728,3464549759,KN
-3464549760,3464550143,US
+3464549760,3464550143,AG
3464550144,3464550399,LC
3464550400,3464626175,US
3464626176,3464626687,CA
@@ -92711,8 +92751,8 @@
3465962496,3465962751,CA
3465962752,3466067967,US
3466067968,3466068223,CA
-3466068224,3466069071,US
-3466069072,3466069087,CA
+3466068224,3466069055,US
+3466069056,3466069087,CA
3466069088,3466069343,US
3466069344,3466069375,CA
3466069376,3466069447,US
@@ -92936,11 +92976,11 @@
3470610432,3470614527,AR
3470614528,3470646591,US
3470646592,3470646599,CN
-3470646600,3470651391,US
+3470646600,3470646831,US
+3470646832,3470646847,IL
+3470646848,3470651391,US
3470651392,3470655487,CA
-3470655488,3470660647,US
-3470660648,3470660655,IE
-3470660656,3470671871,US
+3470655488,3470671871,US
3470671872,3470680063,CA
3470680064,3470744063,US
3470744064,3470744575,CA
@@ -92986,8 +93026,7 @@
3471572992,3472375807,US
3472375808,3472392191,PR
3472392192,3472408575,CA
-3472408576,3472565247,US
-3472566272,3472571647,US
+3472408576,3472571647,US
3472571648,3472571903,GH
3472571904,3472721919,US
3472723968,3473039359,US
@@ -93050,7 +93089,9 @@
3475882768,3475882783,FR
3475882784,3475882799,US
3475882800,3475882815,FR
-3475882816,3475896319,US
+3475882816,3475885951,US
+3475885952,3475885983,CA
+3475885984,3475896319,US
3475896320,3475896575,FR
3475896576,3475897471,US
3475897472,3475897503,FR
@@ -93070,7 +93111,8 @@
3476447232,3476455423,CA
3476455424,3476881407,US
3476881408,3476946943,CA
-3476946944,3477542143,US
+3476946944,3477389311,US
+3477393408,3477542143,US
3477542144,3477542399,IN
3477542400,3478114303,US
3478114304,3478118399,PE
@@ -93078,7 +93120,13 @@
3478192128,3478257663,CA
3478257664,3478274823,US
3478274824,3478274831,GB
-3478274832,3478288671,US
+3478274832,3478275983,US
+3478275984,3478275999,GB
+3478276000,3478286591,US
+3478286592,3478286847,GB
+3478286848,3478288607,US
+3478288608,3478288615,GB
+3478288616,3478288671,US
3478288672,3478288703,GB
3478288704,3478372351,US
3478372352,3478380543,MX
@@ -93217,7 +93265,9 @@
3480907264,3480907775,FR
3480907776,3480968191,US
3480968192,3480968447,AU
-3480968448,3481176063,US
+3480968448,3481169151,US
+3481169152,3481169407,NZ
+3481169408,3481176063,US
3481178112,3481665535,US
3481665536,3481731071,CA
3481731072,3481812991,US
@@ -93370,9 +93420,18 @@
3484321792,3484322047,PR
3484322048,3484323839,US
3484326912,3484327423,US
-3484331008,3484437503,US
-3484437504,3484442623,GB
-3484442624,3484450815,US
+3484329984,3484336127,US
+3484338176,3484340223,US
+3484340736,3484341247,US
+3484341248,3484342271,VG
+3484344320,3484437503,US
+3484437504,3484438527,GB
+3484438528,3484438783,ZM
+3484438784,3484439039,US
+3484439040,3484439295,GB
+3484439296,3484439551,US
+3484439552,3484439807,ZM
+3484439808,3484450815,US
3484450816,3484451839,CA
3484451840,3484452095,US
3484452096,3484453631,CA
@@ -93450,7 +93509,9 @@
3484884992,3484893183,CA
3484893184,3485220863,US
3485220864,3485229055,CA
-3485229056,3485327359,US
+3485229056,3485317119,US
+3485317120,3485318143,IN
+3485318144,3485327359,US
3485327360,3485335551,CA
3485335552,3485442047,US
3485446144,3485462527,US
@@ -93733,7 +93794,9 @@
3488940032,3488956415,CA
3488956416,3488989183,US
3488989184,3489005567,CA
-3489005568,3489136639,US
+3489005568,3489058047,US
+3489058048,3489058063,GB
+3489058064,3489136639,US
3489136640,3489153535,MX
3489153536,3489154047,HN
3489154048,3489155583,MX
@@ -93816,7 +93879,9 @@
3492151296,3492167679,CA
3492167680,3492669951,US
3492669952,3492671487,PA
-3492671488,3492812759,US
+3492671488,3492807155,US
+3492807156,3492807159,SE
+3492807160,3492812759,US
3492812760,3492812763,JP
3492812764,3492845823,US
3492845824,3492846079,CH
@@ -93912,9 +93977,9 @@
3493901312,3493901567,AE
3493901568,3493936127,US
3493936128,3493937151,CA
-3493937152,3493939455,US
-3493939456,3493939711,CA
-3493939712,3493980159,US
+3493937152,3493939199,US
+3493939200,3493941247,CA
+3493941248,3493980159,US
3493980160,3493981183,CA
3493981184,3493982207,US
3493982208,3493984255,CA
@@ -93971,8 +94036,8 @@
3494198272,3494244351,US
3494244352,3494246399,CA
3494246400,3494247423,US
-3494247424,3494250495,CA
-3494251520,3494262783,US
+3494247424,3494251519,CA
+3494252544,3494262783,US
3494262784,3494264831,CA
3494264832,3494271999,US
3494272000,3494273023,KN
@@ -94015,9 +94080,7 @@
3494459392,3494460415,CA
3494460416,3494464511,US
3494464512,3494465535,CA
-3494465536,3494496255,US
-3494496512,3494496767,US
-3494498304,3494510591,US
+3494465536,3494510591,US
3494510592,3494512639,CA
3494512640,3494516735,US
3494516736,3494517759,CA
@@ -94025,8 +94088,7 @@
3494540032,3494540287,UG
3494540288,3494563839,US
3494563840,3494565887,CA
-3494565888,3494567935,US
-3494568960,3494594559,US
+3494565888,3494594559,US
3494594560,3494595583,CA
3494595584,3494605823,US
3494605824,3494606847,CA
@@ -94042,7 +94104,8 @@
3494651904,3494652927,CA
3494652928,3494660095,US
3494660096,3494661119,CA
-3494661120,3494668287,US
+3494661120,3494664191,US
+3494665216,3494668287,US
3494668288,3494670335,CA
3494670336,3494700031,US
3494700032,3494701055,CA
@@ -94086,7 +94149,7 @@
3494928384,3494930431,CA
3494930432,3494938623,US
3494938624,3494939647,CA
-3494939648,3494950655,US
+3494940672,3494950655,US
3494950656,3494950911,PH
3494950912,3494964223,US
3494964224,3494965247,PR
@@ -94135,11 +94198,11 @@
3495226624,3495226879,US
3495227392,3495251967,US
3495251968,3495254015,CA
-3495255040,3495260159,US
+3495254016,3495260159,US
3495260160,3495261183,CA
3495261184,3495271423,US
3495272192,3495285759,US
-3495286784,3495288831,CA
+3495285760,3495288831,CA
3495288832,3495332863,US
3495332864,3495333887,CA
3495333888,3495349247,US
@@ -94170,20 +94233,18 @@
3495475200,3495477247,CA
3495477248,3495478271,US
3495478272,3495479295,CA
-3495479296,3495501823,US
-3495502848,3495505919,US
+3495479296,3495505919,US
3495505920,3495507967,CA
3495507968,3495515135,US
3495515136,3495516159,CA
-3495516160,3495521279,US
-3495522304,3495526399,US
+3495516160,3495526399,US
3495526400,3495527423,CA
3495527424,3495544063,US
3495544064,3495544319,NG
3495544320,3495551999,US
3495552000,3495553023,BM
-3495553024,3495556095,US
-3495557120,3495576575,US
+3495553024,3495576575,US
+3495576576,3495577599,CA
3495577600,3495579647,US
3495579648,3495581695,CA
3495581696,3495583743,US
@@ -94194,13 +94255,14 @@
3495618560,3495619583,CA
3495619584,3495620607,US
3495620608,3495622655,CA
-3495622656,3495635967,US
-3495636992,3495647231,US
+3495622656,3495647231,US
3495648000,3495654143,US
3495654144,3495654399,CA
3495654400,3495673855,US
3495673856,3495674879,MF
-3495674880,3495675391,VG
+3495674880,3495675162,VG
+3495675163,3495675163,US
+3495675164,3495675391,VG
3495675392,3495688191,US
3495688192,3495689215,CA
3495689216,3495694335,US
@@ -94213,13 +94275,15 @@
3495723008,3495724031,US
3495724032,3495727103,CA
3495727104,3495739391,US
+3495739392,3495740415,CA
3495740416,3495749631,US
3495749632,3495749856,CA
3495749857,3495749861,RU
3495749862,3495750655,CA
3495750656,3495787519,US
3495788544,3495792639,US
-3495794688,3495815167,US
+3495794688,3495811071,US
+3495812096,3495815167,US
3495815168,3495817215,CA
3495817216,3495828479,US
3495828480,3495829503,CA
@@ -94314,8 +94378,8 @@
3497664256,3497664511,NL
3497664512,3497717759,US
3497717760,3497721855,CA
-3497721856,3497778943,US
-3497778944,3497779199,CA
+3497721856,3497775103,US
+3497775104,3497779199,CA
3497779200,3497820159,US
3497820160,3497852927,CA
3497852928,3498254591,US
@@ -94383,8 +94447,8 @@
3500689408,3500689919,CL
3500689920,3500707327,US
3500707328,3500707839,CA
-3500707840,3500725247,US
-3500725248,3500725503,EC
+3500707840,3500724991,US
+3500724992,3500725503,EC
3500725504,3500725759,HT
3500725760,3500726015,EC
3500726016,3500726271,HT
@@ -94489,7 +94553,9 @@
3505661952,3505662463,JM
3505662464,3505818623,US
3505818624,3505819647,BS
-3505819648,3506043135,US
+3505819648,3505999359,US
+3505999360,3506000127,PR
+3506000128,3506043135,US
3506043136,3506044927,PA
3506044928,3506231807,US
3506231808,3506232063,IN
@@ -94531,7 +94597,7 @@
3508111360,3508111615,CA
3508111616,3508114431,US
3508114432,3508114687,ID
-3508114688,3508219903,US
+3508114688,3508220927,US
3508220928,3508221951,KY
3508221952,3508222975,US
3508222976,3508223999,KY
@@ -94715,8 +94781,7 @@
3509520896,3509521151,CA
3509521152,3509521407,US
3509521408,3509521663,CA
-3509521664,3509522175,US
-3509522176,3509522431,CA
+3509521664,3509522431,US
3509522432,3509522687,KW
3509522688,3509522943,CA
3509522944,3509524479,US
@@ -94745,9 +94810,9 @@
3509538560,3509538815,CA
3509538816,3509539071,US
3509539072,3509539327,CA
-3509539328,3509539631,US
-3509539632,3509539647,CA
-3509539648,3509539967,US
+3509539328,3509539643,US
+3509539644,3509539644,CA
+3509539645,3509539967,US
3509539968,3509540031,CA
3509540032,3509540607,US
3509540608,3509541503,CA
@@ -94898,7 +94963,9 @@
3510470928,3510470935,IL
3510470936,3510479791,US
3510479792,3510479799,IE
-3510479800,3510788447,US
+3510479800,3510546431,US
+3510546432,3510550527,CA
+3510550528,3510788447,US
3510788448,3510788479,GB
3510788480,3510844415,US
3510844416,3510844927,CA
@@ -95124,7 +95191,17 @@
3514592256,3514593279,SV
3514593280,3514596863,US
3514596864,3514597375,SV
-3514597376,3514732071,US
+3514597376,3514721301,US
+3514721302,3514721303,BZ
+3514721304,3514721385,US
+3514721386,3514721391,BZ
+3514721392,3514723693,US
+3514723694,3514723695,BZ
+3514723696,3514723696,US
+3514723697,3514723697,BZ
+3514723698,3514724635,US
+3514724636,3514724636,UA
+3514724637,3514732071,US
3514732072,3514732075,UA
3514732076,3514826751,US
3514826752,3514843135,CA
@@ -95241,9 +95318,7 @@
3517394432,3517394943,CA
3517394944,3517395199,US
3517395200,3517395455,CA
-3517395456,3517396111,US
-3517396112,3517396127,CA
-3517396128,3517396223,US
+3517395456,3517396223,US
3517396224,3517396479,CA
3517396480,3517396751,US
3517396752,3517396767,CA
@@ -95371,7 +95446,9 @@
3517597696,3517597951,IE
3517597952,3517598207,DE
3517598208,3517598463,IE
-3517598464,3517599263,SE
+3517598464,3517598591,SE
+3517598592,3517598719,US
+3517598720,3517599263,SE
3517599264,3517599295,US
3517599296,3517599359,SE
3517599360,3517599615,US
@@ -95383,7 +95460,9 @@
3517602560,3517602687,SE
3517602688,3517602815,US
3517602816,3517603071,SE
-3517603072,3517603583,US
+3517603072,3517603231,US
+3517603232,3517603327,SE
+3517603328,3517603583,US
3517603584,3517603647,SE
3517603648,3517603711,US
3517603712,3517604095,SE
@@ -95403,7 +95482,9 @@
3517609744,3517609751,US
3517609752,3517610495,SE
3517610496,3517611263,IE
-3517611264,3517612031,SE
+3517611264,3517611311,SE
+3517611312,3517611343,US
+3517611344,3517612031,SE
3517612032,3517644799,US
3517644800,3517710335,CA
3517710336,3517718527,US
@@ -95449,7 +95530,9 @@
3519351424,3519351455,GB
3519351456,3519351551,US
3519351552,3519351807,GB
-3519351808,3519381503,US
+3519351808,3519354909,US
+3519354910,3519354910,BR
+3519354911,3519381503,US
3519381504,3519397887,CA
3519397888,3519467519,US
3519469568,3519475711,US
@@ -95498,8 +95581,7 @@
3519938560,3520020479,US
3520020480,3520036863,CA
3520036864,3520135167,US
-3520167936,3520344063,US
-3520348160,3520356351,US
+3520167936,3520356351,US
3520356352,3520364543,ZA
3520364544,3520413439,US
3520413440,3520413695,CA
@@ -95541,7 +95623,9 @@
3521363968,3521366783,US
3521366784,3521367039,CY
3521367040,3521802239,US
-3521806336,3521888483,US
+3521806336,3521837055,US
+3521837056,3521837311,SG
+3521837312,3521888483,US
3521888484,3521888484,KW
3521888485,3521896927,US
3521896928,3521896935,NG
@@ -95573,9 +95657,21 @@
3522123520,3522123775,GB
3522123776,3522125055,US
3522125056,3522125311,GB
-3522125312,3522132395,US
+3522125312,3522130302,US
+3522130303,3522130303,BZ
+3522130304,3522130307,US
+3522130308,3522130308,BZ
+3522130309,3522130309,US
+3522130310,3522130310,BZ
+3522130311,3522131858,US
+3522131859,3522131859,DE
+3522131860,3522132395,US
3522132396,3522132396,BR
-3522132397,3522174975,US
+3522132397,3522133639,US
+3522133640,3522133647,DE
+3522133648,3522133663,US
+3522133664,3522133695,DE
+3522133696,3522174975,US
3522174976,3522179071,BM
3522179072,3522195455,US
3522195456,3522199551,CA
@@ -95663,7 +95759,9 @@
3524157440,3524161535,AU
3524161536,3524247551,CN
3524247552,3524263935,AU
-3524263936,3524280319,PH
+3524263936,3524274175,PH
+3524274176,3524274431,SG
+3524274432,3524280319,PH
3524296704,3524313087,CN
3524313088,3524329471,KR
3524329472,3524362239,TW
@@ -95688,7 +95786,7 @@
3524853760,3526361087,CN
3526361088,3526393855,NZ
3526393856,3526395903,JP
-3526395904,3526397951,CN
+3526395904,3526397951,HK
3526397952,3526402047,MY
3526402048,3526410239,NZ
3526410240,3526414335,MY
@@ -95752,7 +95850,9 @@
3529097216,3529113599,JP
3529113600,3531603967,KR
3531603968,3534749695,JP
-3534749696,3534757887,HK
+3534749696,3534756351,HK
+3534756352,3534756383,CN
+3534756384,3534757887,HK
3534757888,3534758143,AU
3534758144,3534758147,JP
3534758148,3534758911,AU
@@ -95890,9 +95990,12 @@
3557244928,3557253119,IT
3557253120,3557261311,RU
3557261312,3557277695,DE
-3557277696,3557283839,NL
-3557283840,3557284863,PL
-3557284864,3557285887,NL
+3557277696,3557279743,NL
+3557279744,3557280255,US
+3557280256,3557280511,DE
+3557280512,3557283839,NL
+3557283840,3557285119,PL
+3557285120,3557285887,NL
3557285888,3557294079,RU
3557294080,3557302271,DE
3557302272,3557310463,UA
@@ -95913,7 +96016,13 @@
3557360744,3557360751,GB
3557360752,3557360863,JE
3557360864,3557360871,GB
-3557360872,3557365791,JE
+3557360872,3557363583,JE
+3557363584,3557363595,GB
+3557363596,3557363631,JE
+3557363632,3557363639,GB
+3557363640,3557363703,JE
+3557363704,3557363711,GB
+3557363712,3557365791,JE
3557365792,3557365799,GB
3557365800,3557367807,JE
3557367808,3557375999,DE
@@ -95999,7 +96108,11 @@
3557998592,3558006783,DE
3558006784,3558010879,GB
3558010880,3558012927,FR
-3558012928,3558014975,GB
+3558012928,3558013951,GB
+3558013952,3558014207,IL
+3558014208,3558014463,NL
+3558014464,3558014464,US
+3558014465,3558014975,IL
3558014976,3558023167,RU
3558023168,3558031359,DE
3558031360,3558039551,GB
@@ -96027,9 +96140,11 @@
3558203392,3558211583,ES
3558211584,3558219775,GB
3558219776,3558227967,ES
-3558227968,3558232063,RU
-3558232064,3558234111,ES
-3558234112,3558234623,RU
+3558227968,3558228479,RU
+3558228480,3558228735,FR
+3558228736,3558232063,RU
+3558232064,3558232575,LB
+3558232576,3558234623,RU
3558234624,3558234879,UA
3558234880,3558235647,RU
3558235648,3558235903,LB
@@ -96041,7 +96156,9 @@
3558268928,3558277119,GI
3558277120,3558285951,GB
3558285952,3558286079,DE
-3558286080,3558289119,GB
+3558286080,3558286591,GB
+3558286592,3558286655,FR
+3558286656,3558289119,GB
3558289120,3558289151,FR
3558289152,3558289431,GB
3558289432,3558289439,NL
@@ -96147,13 +96264,19 @@
3559055360,3559063551,AM
3559063552,3559079935,CH
3559079936,3559088127,JO
-3559088128,3559090239,GB
+3559088128,3559089527,GB
+3559089528,3559089535,BE
+3559089536,3559089935,GB
+3559089936,3559089951,BE
+3559089952,3559090239,GB
3559090240,3559090303,BE
3559090304,3559093311,GB
3559093312,3559093319,BE
3559093320,3559093503,GB
3559093504,3559093759,BE
-3559093760,3559095455,GB
+3559093760,3559094303,GB
+3559094304,3559094319,BE
+3559094320,3559095455,GB
3559095456,3559095456,BE
3559095457,3559096063,GB
3559096064,3559096319,NL
@@ -96186,7 +96309,9 @@
3559309312,3559317503,PL
3559317504,3559325695,FI
3559325696,3559333887,IT
-3559333888,3559342079,SE
+3559333888,3559336447,SE
+3559336448,3559336703,US
+3559336704,3559342079,SE
3559342080,3559350271,BG
3559350272,3559358463,BA
3559358464,3559366655,FR
@@ -96255,9 +96380,7 @@
3559899136,3559899647,UA
3559899648,3559899967,EE
3559899968,3559900031,UA
-3559900032,3559900095,EE
-3559900096,3559900223,UA
-3559900224,3559900351,EE
+3559900032,3559900351,EE
3559900352,3559902719,UA
3559902720,3559902975,EE
3559902976,3559903231,UA
@@ -96318,8 +96441,8 @@
3560325120,3560333311,DK
3560333312,3560341503,RO
3560341504,3560345855,GB
-3560345856,3560348159,US
-3560348160,3560357887,GB
+3560345856,3560348415,US
+3560348416,3560357887,GB
3560357888,3560366079,GR
3560366080,3560374271,CH
3560374272,3560382463,ES
@@ -96604,7 +96727,8 @@
3561947136,3561963519,DE
3561963520,3561971711,BE
3561971712,3561975807,CZ
-3561975808,3561979903,UA
+3561975808,3561976831,BG
+3561976832,3561979903,UA
3561979904,3561988095,ES
3561988096,3562004479,DE
3562004480,3562012671,NL
@@ -96633,8 +96757,8 @@
3562086400,3562087423,SE
3562087424,3562088447,GB
3562088448,3562094591,SE
-3562094592,3562106879,GB
-3562106880,3562106911,FR
+3562094592,3562106895,GB
+3562106896,3562106911,FR
3562106912,3562110975,GB
3562110976,3562143743,ES
3562143744,3562151935,GB
@@ -96684,8 +96808,7 @@
3562504192,3562507071,DE
3562507072,3562507199,AT
3562507200,3562512383,DE
-3562512384,3562519551,UA
-3562519552,3562520575,BG
+3562512384,3562520575,UA
3562528768,3562536959,PL
3562536960,3562545151,AT
3562545152,3562553343,GB
@@ -96843,9 +96966,7 @@
3563855872,3563864063,AT
3563864064,3563872255,GB
3563872256,3563880447,RU
-3563880448,3563884651,CY
-3563884652,3563884652,TR
-3563884653,3563888639,CY
+3563880448,3563888639,TR
3563888640,3563896831,DE
3563896832,3563913215,HU
3563913216,3563921407,RU
@@ -96924,7 +97045,11 @@
3564572428,3564572431,ES
3564572432,3564572527,GB
3564572528,3564572531,DK
-3564572532,3564576767,GB
+3564572532,3564574847,GB
+3564574848,3564574975,NL
+3564574976,3564575487,GB
+3564575488,3564575615,DE
+3564575616,3564576767,GB
3564584960,3564593151,SA
3564593152,3564601343,RU
3564601344,3564609535,EE
@@ -96959,7 +97084,17 @@
3564756992,3564765183,ES
3564765184,3564773375,RU
3564773376,3564781567,DE
-3564781568,3564789759,LT
+3564781568,3564782079,LT
+3564782080,3564782335,US
+3564782336,3564786175,LT
+3564786176,3564786431,US
+3564786432,3564786687,LT
+3564786688,3564786943,US
+3564786944,3564787199,LT
+3564787200,3564787455,US
+3564787456,3564787583,NL
+3564787584,3564787711,US
+3564787712,3564789759,LT
3564789760,3564797951,ES
3564797952,3564806143,DE
3564806144,3564814335,BG
@@ -96984,12 +97119,16 @@
3564883200,3564883455,NL
3564883456,3564886719,GB
3564886720,3564886751,NL
-3564886752,3564889633,GB
+3564886752,3564888479,GB
+3564888480,3564888495,NL
+3564888496,3564889633,GB
3564889634,3564889634,NL
-3564889635,3564892735,GB
+3564889635,3564891119,GB
+3564891120,3564891135,NL
+3564891136,3564892735,GB
3564892736,3564892751,NL
-3564892752,3564894207,GB
-3564894208,3564895743,NL
+3564892752,3564895231,GB
+3564895232,3564895743,NL
3564895744,3564896255,GB
3564896256,3564904447,RU
3564904448,3564912639,DE
@@ -97231,9 +97370,7 @@
3567391232,3567391487,DE
3567391488,3567399167,GB
3567399168,3567399423,DE
-3567399424,3567399935,GB
-3567399936,3567401471,DE
-3567401472,3567403007,GB
+3567399424,3567403007,GB
3567403008,3567419391,IT
3567419392,3567427583,SA
3567427584,3567435775,SE
@@ -97289,8 +97426,8 @@
3567620352,3567626239,GB
3567626240,3567626751,TZ
3567626752,3567627263,GB
-3567627264,3567628287,LU
-3567628288,3567630335,GB
+3567627264,3567629311,LU
+3567629312,3567630335,GB
3567630336,3567634431,LU
3567634432,3567636479,GB
3567636480,3567646719,LU
@@ -97407,7 +97544,9 @@
3571655561,3571655561,RO
3571655562,3571688383,DE
3571688384,3571689215,ES
-3571689216,3571711999,DE
+3571689216,3571699711,DE
+3571699712,3571700735,GB
+3571700736,3571711999,DE
3571712000,3571843071,GB
3571843072,3571974143,ES
3571974144,3571978239,RU
@@ -97454,7 +97593,9 @@
3573743616,3573809151,CH
3573809152,3573874687,ES
3573874688,3573878783,PL
-3573878784,3573882879,RU
+3573878784,3573879807,RU
+3573879808,3573880831,MD
+3573880832,3573882879,RU
3573882880,3573884927,DK
3573884928,3573886975,PL
3573886976,3573889023,RU
@@ -97482,11 +97623,9 @@
3574136832,3574169599,DE
3574169600,3574174839,GB
3574174840,3574174847,ES
-3574174848,3574186801,GB
-3574186802,3574186802,ES
-3574186803,3574186803,GB
-3574186804,3574186804,ES
-3574186805,3574187007,GB
+3574174848,3574186799,GB
+3574186800,3574186815,ES
+3574186816,3574187007,GB
3574187008,3574188031,ES
3574188032,3574190591,GB
3574190592,3574190847,ES
@@ -97504,7 +97643,9 @@
3574348288,3574348543,GB
3574398976,3574464511,PT
3574464512,3574530047,TR
-3574530048,3574594559,SE
+3574530048,3574531631,SE
+3574531632,3574531639,GB
+3574531640,3574594559,SE
3574594560,3574595583,GB
3574595584,3574596607,FR
3574596608,3574596863,MF
@@ -97663,7 +97804,6 @@
3576073216,3576073279,GB
3576074752,3576074879,GB
3576075264,3576075327,GB
-3576075648,3576075711,GB
3576075776,3576075903,GB
3576076272,3576076351,GB
3576076568,3576076575,GB
@@ -97714,7 +97854,9 @@
3576093184,3576093247,GB
3576095232,3576096767,GB
3576099072,3576100863,GB
-3576101376,3576134653,GB
+3576101376,3576110939,GB
+3576110940,3576110943,NL
+3576110944,3576134653,GB
3576134654,3576134654,CH
3576134655,3576135679,GB
3576135680,3576168447,DE
@@ -97791,7 +97933,9 @@
3577160960,3577161215,YT
3577161216,3577163775,FR
3577163776,3577164031,RE
-3577164032,3577165567,FR
+3577164032,3577164073,FR
+3577164074,3577164074,RE
+3577164075,3577165567,FR
3577165568,3577166079,RE
3577166080,3577166591,FR
3577166592,3577167103,RE
@@ -97813,7 +97957,6 @@
3577641200,3577641215,FR
3577641472,3577641983,FR
3577650048,3577650063,NL
-3577653248,3577655295,IT
3577663488,3577664511,SE
3577669632,3577670655,BE
3577675776,3577741311,PT
@@ -97849,7 +97992,9 @@
3579197312,3579197439,US
3579197440,3579248639,GB
3579248640,3579346943,RU
-3579346944,3579445247,SE
+3579346944,3579362055,SE
+3579362056,3579362063,NO
+3579362064,3579445247,SE
3579445248,3579478015,AT
3579478016,3579527167,FR
3579527168,3579543551,BA
@@ -97884,8 +98029,7 @@
3580199936,3580200447,EE
3580200448,3580201983,SE
3580201984,3580203007,LT
-3580203008,3580203519,SE
-3580203520,3580204543,RU
+3580203008,3580204543,SE
3580204544,3580205055,NL
3580205056,3580206079,SE
3580206080,3580207103,HR
@@ -97920,9 +98064,7 @@
3580266496,3580268543,EE
3580268544,3580272639,LV
3580272640,3580276735,SE
-3580276736,3580280831,NL
-3580280832,3580329983,RU
-3580329984,3580338175,NL
+3580276736,3580338175,NL
3580338176,3580338687,SE
3580338688,3580339199,HR
3580339200,3580339711,SE
@@ -97969,7 +98111,8 @@
3580727296,3580731391,RU
3580735488,3580739583,RO
3580739584,3580743679,RU
-3580743680,3580751871,UA
+3580743680,3580747775,RO
+3580747776,3580751871,UA
3580751872,3580755967,IR
3580755968,3580772351,RU
3580772352,3580780543,LV
@@ -98020,8 +98163,7 @@
3582115936,3582115967,EE
3582115968,3582116863,SE
3582116864,3582117887,EE
-3582117888,3582120447,LT
-3582120448,3582120959,SE
+3582117888,3582120959,LT
3582120960,3582121983,EE
3582121984,3582124031,LT
3582124032,3582132223,FI
@@ -98060,9 +98202,7 @@
3582313872,3582320639,JE
3582320640,3582328831,CH
3582328832,3582337023,HU
-3582337024,3582343167,ES
-3582343168,3582343423,PT
-3582343424,3582345215,ES
+3582337024,3582345215,PT
3582345216,3582353407,IT
3582353408,3582361599,SE
3582361600,3582377983,PL
@@ -98243,13 +98383,17 @@
3583727872,3583728127,GB
3583728128,3583729663,DE
3583729664,3583737855,TR
+3583740928,3583741183,GB
3583742976,3583743487,PL
3583743488,3583743743,GB
3583743744,3583743999,IE
+3583744128,3583744255,PL
3583744320,3583744447,GB
3583744512,3583744767,GB
3583744960,3583744991,GB
+3583745216,3583745279,SE
3583745280,3583745535,GB
+3583745536,3583745663,CZ
3583746048,3583754239,PL
3583754240,3583762431,RU
3583762432,3583770623,CZ
@@ -98280,7 +98424,10 @@
3583950848,3583959039,PL
3583959040,3583967231,NO
3583967232,3583975423,NL
-3583975424,3583983615,LT
+3583975424,3583983103,LT
+3583983104,3583983231,US
+3583983232,3583983359,BR
+3583983360,3583983615,LT
3583983616,3583999999,RU
3584000000,3584008191,IE
3584008192,3584016383,SE
@@ -98315,11 +98462,7 @@
3584221184,3584229375,NO
3584229376,3584245759,HU
3584245760,3584253951,NL
-3584253952,3584254975,ME
-3584254976,3584255743,AL
-3584255744,3584255999,ME
-3584256000,3584260095,AL
-3584260096,3584262143,ME
+3584253952,3584262143,AL
3584262144,3584270335,SE
3584270336,3584278527,FR
3584278528,3584286719,GB
@@ -98367,7 +98510,9 @@
3584589824,3584598015,RU
3584598016,3584606207,CZ
3584606208,3584614399,DE
-3584614400,3584622591,IE
+3584614400,3584620543,IE
+3584620544,3584621567,GB
+3584621568,3584622591,IE
3584622592,3584630783,FI
3584630784,3584638975,BG
3584638976,3584647167,UA
@@ -98413,7 +98558,9 @@
3584942080,3584950271,DK
3584950272,3584958463,UA
3584958464,3584966655,DE
-3584966656,3584974847,DK
+3584966656,3584971263,DK
+3584971264,3584972287,FI
+3584972288,3584974847,DK
3584974848,3584983039,FR
3584983040,3584991231,US
3584991232,3584999423,IT
@@ -98540,9 +98687,7 @@
3585900544,3585906687,NO
3585906688,3585907711,CZ
3585907712,3585908735,NO
-3585908736,3585913855,FR
-3585913856,3585914367,GP
-3585914368,3585916671,FR
+3585908736,3585916671,GP
3585916672,3585916927,MQ
3585916928,3585925119,IT
3585925120,3585933311,CH
@@ -98608,7 +98753,9 @@
3586544268,3586544271,DK
3586544272,3586544383,DE
3586544384,3586544511,DK
-3586544512,3586555903,DE
+3586544512,3586547711,DE
+3586547712,3586547967,NL
+3586547968,3586555903,DE
3586555904,3586572287,IT
3586572288,3586588671,RS
3586588672,3586596863,IT
@@ -98634,7 +98781,9 @@
3586677656,3586679599,FR
3586679600,3586679615,IT
3586679616,3586680319,FR
-3586680320,3586680575,ES
+3586680320,3586680511,ES
+3586680512,3586680519,GB
+3586680520,3586680575,ES
3586680576,3586681615,FR
3586681616,3586681631,CZ
3586681632,3586682239,FR
@@ -98717,8 +98866,7 @@
3587242672,3587242679,DE
3587242680,3587244031,GB
3587244032,3587260415,IT
-3587260416,3587282943,DE
-3587282944,3587284991,PT
+3587260416,3587284991,DE
3587284992,3587291135,IT
3587291136,3587292159,FR
3587292160,3587309567,IT
@@ -98915,7 +99063,10 @@
3589583104,3589583871,GB
3589583872,3589584127,NL
3589584128,3589586943,GB
-3589586944,3589603327,RS
+3589586944,3589587199,DE
+3589587200,3589599231,RS
+3589599232,3589601279,SE
+3589601280,3589603327,RS
3589603328,3589668863,FR
3589668864,3589677055,RU
3589677056,3589685247,FR
@@ -98923,7 +99074,8 @@
3589718016,3589722023,BE
3589722024,3589722031,FR
3589722032,3589734399,BE
-3589734400,3589742591,EG
+3589734400,3589739519,EG
+3589739520,3589742591,ZA
3589742592,3589746175,NL
3589746176,3589746687,US
3589746688,3589767167,NL
@@ -98931,8 +99083,11 @@
3589810432,3589810687,PL
3589810688,3589816319,RU
3589825792,3589826047,DE
+3589827584,3589827647,DE
3589827712,3589827839,DE
-3589828736,3589828863,NL
+3589828736,3589828991,NL
+3589828992,3589829119,ES
+3589829504,3589829631,DE
3589829632,3589830143,GB
3589832704,3589849087,TR
3589849088,3589865471,GB
@@ -99018,7 +99173,9 @@
3624255488,3624257535,ZA
3624257536,3624271871,US
3624271872,3624272383,SY
-3624272384,3624272639,US
+3624272384,3624272447,US
+3624272448,3624272451,CA
+3624272452,3624272639,US
3624272640,3624272895,DZ
3624272896,3624281087,US
3624281088,3624281343,HT
@@ -99043,7 +99200,9 @@
3624298496,3624299519,PH
3624299520,3624300031,US
3624300032,3624300287,LY
-3624300288,3624302847,US
+3624300288,3624302335,US
+3624302336,3624302591,CA
+3624302592,3624302847,US
3624302848,3624303103,MY
3624303104,3624303871,US
3624303872,3624304127,CA
@@ -99081,26 +99240,19 @@
3624435712,3624452095,CA
3624452096,3624480767,US
3624480768,3624484863,CA
-3624484864,3624534015,US
+3624484864,3624529919,US
+3624529920,3624532479,CA
+3624532480,3624532735,US
+3624532736,3624534015,CA
3624534016,3624534271,PA
3624534272,3624536063,CA
3624536064,3624587263,US
3624587264,3624591359,JM
-3624594176,3624594431,US
-3624595456,3624706047,US
-3624710144,3624714239,US
-3624714240,3624717311,SG
-3624717312,3624718335,US
-3624718336,3624720383,SG
-3624720384,3624720895,US
-3624720896,3624721919,SG
-3624721920,3624730623,US
+3624594176,3624714239,US
+3624714240,3624722431,SG
+3624722432,3624730623,US
3624730624,3624796159,CA
-3624796160,3624812543,US
-3624813056,3624813823,US
-3624814336,3624815103,US
-3624815616,3624816383,US
-3624816640,3624828927,US
+3624796160,3624828927,US
3624828928,3624833023,CA
3624833024,3624845311,US
3624845312,3624849407,AU
@@ -99114,8 +99266,12 @@
3625140224,3625148415,CA
3625148416,3625168895,US
3625168896,3625172991,CA
-3625172992,3625259263,US
-3625260032,3625287679,US
+3625172992,3625256959,US
+3625256960,3625257983,CA
+3625258496,3625258751,US
+3625259008,3625259263,US
+3625260032,3625261055,US
+3625263104,3625287679,US
3625287680,3625295871,CA
3625295872,3625346047,US
3625346048,3625346303,AR
@@ -99142,9 +99298,7 @@
3626222655,3626270719,US
3626270720,3626287103,CA
3626287104,3626332159,US
-3626332160,3626334207,CA
-3626334208,3626334463,US
-3626334464,3626336255,CA
+3626332160,3626336255,CA
3626336256,3626508287,US
3626508288,3626512383,CA
3626512384,3626524671,US
@@ -99173,7 +99327,9 @@
3627679744,3627712511,CA
3627712512,3627753471,US
3627753472,3627753727,AR
-3627753728,3627802623,US
+3627753728,3627759071,US
+3627759072,3627759103,GB
+3627759104,3627802623,US
3627802624,3627810815,CA
3627810816,3627842047,US
3627842048,3627842303,IS
@@ -99248,7 +99404,7 @@
3628657920,3628658175,BS
3628658176,3628679167,US
3628679168,3628683263,CA
-3628683264,3628834815,US
+3628687360,3628834815,US
3628834816,3628843007,CA
3628843008,3629187071,US
3629187072,3629195263,CA
@@ -99342,24 +99498,16 @@
3630073856,3630074111,CA
3630074112,3630074879,US
3630074880,3630075135,CA
-3630075136,3630075311,US
-3630075312,3630075327,CA
-3630075328,3630075391,US
-3630075392,3630075647,CA
-3630075648,3630076927,US
-3630076928,3630077439,CA
-3630077440,3630078463,US
+3630075136,3630076927,US
+3630076928,3630077183,CA
+3630077184,3630078463,US
3630078464,3630078719,CA
-3630078720,3630078975,US
-3630078976,3630079039,CA
-3630079040,3630079407,US
-3630079408,3630079423,CA
-3630079424,3630080575,US
-3630080576,3630080639,CA
-3630080640,3630081151,US
-3630081152,3630081791,CA
-3630081792,3630082047,US
-3630082048,3630082559,CA
+3630078720,3630081151,US
+3630081152,3630081279,CA
+3630081280,3630081535,US
+3630081536,3630081791,CA
+3630081792,3630082303,US
+3630082304,3630082559,CA
3630082560,3630082815,US
3630082816,3630083071,CA
3630083072,3630083583,US
@@ -99413,31 +99561,29 @@
3630151680,3630152191,CA
3630152192,3630152703,US
3630152704,3630153215,CA
-3630153216,3630155775,US
-3630155776,3630158335,CA
-3630158336,3630159103,US
-3630159104,3630159359,CA
-3630159360,3630159615,US
+3630153216,3630156287,US
+3630156288,3630156543,CA
+3630156544,3630157311,US
+3630157312,3630157567,CA
+3630157568,3630158079,US
+3630158080,3630158335,CA
+3630158336,3630159615,US
3630159616,3630159871,CA
3630159872,3630160127,US
3630160128,3630160383,CA
-3630160384,3630160639,US
-3630160640,3630160895,CA
-3630160896,3630161151,US
-3630161152,3630161919,CA
-3630161920,3630162431,US
-3630162432,3630162943,CA
-3630162944,3630163199,US
+3630160384,3630161151,US
+3630161152,3630161407,CA
+3630161408,3630162431,US
+3630162432,3630162687,CA
+3630162688,3630163199,US
3630163200,3630163455,CA
3630163456,3630163711,US
-3630163712,3630164735,CA
-3630164736,3630164991,US
-3630164992,3630166527,CA
-3630166528,3630167007,US
-3630167008,3630167023,CA
-3630167024,3630168319,US
-3630168320,3630169087,CA
-3630169088,3630169855,US
+3630163712,3630163967,CA
+3630163968,3630164991,US
+3630164992,3630165247,CA
+3630165248,3630165503,US
+3630165504,3630166015,CA
+3630166016,3630169855,US
3630169856,3630170111,CA
3630170112,3630309375,US
3630309376,3630317567,CA
@@ -99453,7 +99599,7 @@
3630745600,3630747647,UG
3630747648,3630780415,US
3630780416,3630784511,CA
-3630784512,3630801919,US
+3630784512,3630802943,US
3630804992,3630850047,US
3630850048,3630854143,CA
3630854144,3630895615,US
@@ -99513,9 +99659,16 @@
3631939584,3632005119,CA
3632005120,3632150527,US
3632152576,3632168959,CA
-3632168960,3632197631,US
+3632168960,3632185343,US
+3632187392,3632188415,CA
+3632188416,3632191487,US
+3632193536,3632197631,US
3632197632,3632201727,CA
-3632201728,3632244223,US
+3632201728,3632218271,US
+3632218272,3632218287,AU
+3632218288,3632218295,US
+3632218296,3632218303,SG
+3632218304,3632244223,US
3632244224,3632244479,CA
3632244480,3632279039,US
3632279040,3632279295,SA
@@ -99566,8 +99719,7 @@
3633545728,3633546239,US
3633546240,3633546751,GA
3633546752,3633547263,US
-3633547264,3633547775,GA
-3633547776,3633548287,NG
+3633547264,3633548287,GA
3633548288,3633548543,US
3633548544,3633548799,GA
3633548800,3633549567,US
@@ -99606,7 +99758,13 @@
3634053120,3634061311,CL
3634061312,3634094079,US
3634094080,3634098175,SE
-3634098176,3634511871,US
+3634098176,3634283263,US
+3634283264,3634283519,CA
+3634283520,3634286079,US
+3634286080,3634286335,CA
+3634286336,3634288895,US
+3634288896,3634289151,CA
+3634289152,3634511871,US
3634511872,3634515967,CA
3634515968,3634552831,US
3634552832,3634556927,CA
@@ -99633,9 +99791,7 @@
3635171072,3635171327,CA
3635171328,3635314687,US
3635314688,3635322879,CA
-3635322880,3635425279,US
-3635425280,3635429375,CA
-3635429376,3635466239,US
+3635322880,3635466239,US
3635466240,3635470335,CA
3635470336,3635533535,US
3635533536,3635533551,IN
@@ -99672,15 +99828,7 @@
3635740928,3635741439,US
3635741440,3635741695,CA
3635741696,3635741951,US
-3635741952,3635742463,CA
-3635742464,3635742719,US
-3635742720,3635743487,CA
-3635743488,3635744255,US
-3635744256,3635744511,CA
-3635744512,3635744767,US
-3635744768,3635745023,CA
-3635745024,3635745279,US
-3635745280,3635745535,CA
+3635741952,3635745535,CA
3635745536,3635746047,US
3635746048,3635749375,CA
3635749376,3635749631,US
@@ -99774,20 +99922,9 @@
3635968000,3635970047,SV
3635970048,3636019199,US
3636019200,3636027391,CA
-3636027392,3636027647,US
-3636027648,3636029439,SG
-3636029440,3636029695,US
-3636029696,3636029951,SG
-3636029952,3636030207,US
-3636030208,3636031231,SG
-3636031232,3636031999,US
-3636032000,3636032511,SG
-3636032512,3636032767,US
-3636032768,3636033535,SG
-3636033536,3636033791,US
-3636033792,3636034303,SG
-3636034304,3636035327,US
-3636035328,3636035583,SG
+3636027392,3636031517,SG
+3636031518,3636031518,US
+3636031519,3636035583,SG
3636035584,3636064255,US
3636064256,3636068351,CA
3636068352,3636150783,US
@@ -99826,12 +99963,12 @@
3636162048,3636162559,CA
3636162560,3636163583,US
3636163584,3636164095,CA
-3636164096,3636164327,US
+3636164096,3636164255,US
+3636164256,3636164271,CA
+3636164272,3636164327,US
3636164328,3636164335,CA
-3636164336,3636165119,US
-3636165120,3636165375,CA
-3636165376,3636166399,US
-3636166400,3636166655,CA
+3636164336,3636166143,US
+3636166144,3636166655,CA
3636166656,3636206079,US
3636206080,3636206335,AU
3636206336,3636396031,US
@@ -99879,7 +100016,8 @@
3637706752,3637726591,CA
3637726592,3637726719,US
3637726720,3637739519,CA
-3637739520,3638165503,US
+3637739520,3637821439,US
+3637829632,3638165503,US
3638165504,3638181887,CA
3638181888,3638214399,US
3638214400,3638214655,GR
@@ -99903,7 +100041,9 @@
3638399744,3638399999,CH
3638400000,3638401087,US
3638401088,3638401119,CA
-3638401120,3638509567,US
+3638401120,3638500125,US
+3638500126,3638500126,CA
+3638500127,3638509567,US
3638509568,3638526719,CA
3638526720,3638526975,US
3638526976,3638534143,CA
@@ -99947,7 +100087,8 @@
3639402240,3639402495,GH
3639402496,3639513239,US
3639513240,3639513243,AE
-3639513244,3639533567,US
+3639513244,3639525375,US
+3639529472,3639533567,US
3639533568,3639537663,CA
3639537664,3639550207,US
3639550208,3639550215,AR
@@ -99956,9 +100097,10 @@
3639550240,3639550247,MX
3639550248,3639550311,US
3639550312,3639550319,AU
-3639550320,3639550327,CO
-3639550328,3639554559,US
-3639554560,3639554815,GB
+3639550320,3639554559,US
+3639554560,3639554748,GB
+3639554749,3639554749,US
+3639554750,3639554815,GB
3639554816,3639555839,US
3639555840,3639555847,AR
3639555848,3639555855,BR
@@ -100034,10 +100176,12 @@
3640432640,3640433407,US
3640433408,3640433663,DE
3640433664,3640434943,US
+3640435712,3640436479,US
3640436480,3640436735,GH
3640438784,3640442879,DE
3640442880,3640446975,US
3640449024,3640450047,DE
+3640450048,3640451071,US
3640451072,3640459263,DE
3640459264,3640557567,US
3640557568,3640582143,CA
@@ -100115,7 +100259,10 @@
3641483264,3641491455,IT
3641491456,3641493503,UA
3641493504,3641494015,NL
-3641494016,3641499647,UA
+3641494016,3641494527,BG
+3641494528,3641495551,UA
+3641495552,3641496063,NL
+3641496064,3641499647,UA
3641499648,3641503743,SA
3641503744,3641507839,RU
3641507840,3641516031,NO
@@ -100201,7 +100348,6 @@
3641835520,3641839615,IT
3641839616,3641843711,GB
3641843712,3641847807,ES
-3641847808,3641851903,IT
3641851904,3641855999,NL
3641856000,3641860095,GB
3641860096,3641868287,IT
@@ -100323,7 +100469,6 @@
3642392576,3642394623,AT
3642394624,3642396671,FR
3642396672,3642404863,MD
-3642404864,3642408959,RU
3642408960,3642413055,FR
3642413056,3642415103,RS
3642415104,3642417151,GB
@@ -100362,9 +100507,8 @@
3642535936,3642540031,IS
3642540032,3642544127,SE
3642544128,3642552319,RU
-3642552320,3642554198,UA
-3642554199,3642554199,RU
-3642554200,3642554367,UA
+3642552320,3642554111,UA
+3642554112,3642554367,RU
3642554368,3642554623,LT
3642554624,3642554720,UA
3642554721,3642554721,LV
@@ -100382,6 +100526,7 @@
3642597376,3642601471,IT
3642601472,3642605567,RU
3642605568,3642609663,GB
+3642609664,3642613759,ZA
3642613760,3642617855,FI
3642617856,3642621951,JO
3642621952,3642626047,IT
@@ -100496,17 +100641,14 @@
3645169664,3645173759,CH
3645173760,3645177855,GB
3645177856,3645181951,GR
-3645181952,3645183375,FR
-3645183376,3645183383,SA
-3645183384,3645185759,FR
+3645181952,3645185759,FR
3645185760,3645185775,GB
3645185776,3645186047,FR
3645186048,3645190143,GB
3645190144,3645194239,FI
3645194240,3645202431,DE
3645202432,3645206527,CZ
-3645206528,3645208575,LV
-3645208576,3645210623,LT
+3645206528,3645210623,LV
3645210624,3645214719,RU
3645214720,3645218815,NL
3645218816,3645222911,DE
@@ -100576,7 +100718,8 @@
3645489152,3645493247,RU
3645493248,3645501439,IT
3645501440,3645505535,PL
-3645505536,3645509631,DE
+3645505536,3645507583,DE
+3645507584,3645509631,AT
3645509632,3645511679,NL
3645511680,3645513727,TR
3645513728,3645517823,RU
@@ -100605,7 +100748,7 @@
3645616128,3645620223,AT
3645620224,3645624319,BA
3645624320,3645628415,CZ
-3645628416,3645636607,ES
+3645628416,3645636607,PT
3645636608,3645640703,AM
3645640704,3645644799,NL
3645644800,3645648895,RU
@@ -100625,7 +100768,9 @@
3645670437,3645670441,ES
3645670442,3645670456,PT
3645670457,3645670460,ES
-3645670461,3645670508,PT
+3645670461,3645670467,PT
+3645670468,3645670483,ES
+3645670484,3645670508,PT
3645670509,3645670509,ES
3645670510,3645670527,PT
3645670528,3645670655,ES
@@ -100674,6 +100819,7 @@
3645767680,3645771775,IE
3645771776,3645779967,SE
3645779968,3645784063,PS
+3645784064,3645788159,DJ
3645788160,3645792255,GB
3645792256,3645796351,TR
3645796352,3645800447,CH
@@ -100765,12 +100911,16 @@
3647987656,3647987695,DE
3647987696,3647987711,ES
3647987712,3647988735,IT
-3647988736,3647989759,BE
-3647989760,3647995903,DE
+3647988736,3647989063,DE
+3647989064,3647989071,BE
+3647989072,3647989247,DE
+3647989248,3647989503,BE
+3647989504,3647995903,DE
3647995904,3648004095,RU
3648004096,3648007167,GB
3648007168,3648007679,US
-3648007680,3648008191,GB
+3648007680,3648007935,RU
+3648007936,3648008191,GB
3648008192,3648016383,FR
3648016384,3648020479,GB
3648020480,3648024575,IT
@@ -100778,6 +100928,7 @@
3648028672,3648032767,HU
3648032768,3648033023,IE
3648034888,3648034895,IE
+3648036096,3648036351,IE
3648036864,3648040959,CZ
3648040960,3648045055,BE
3648045056,3648049151,FI
@@ -100798,15 +100949,16 @@
3648080896,3648081023,ZM
3648081024,3648081055,GA
3648081056,3648081151,ZM
-3648081152,3648082239,BE
+3648081152,3648081407,BE
+3648081408,3648081663,CG
+3648081664,3648082239,BE
3648082240,3648082311,NE
3648082312,3648082431,BE
3648082432,3648082479,ZM
3648082480,3648084223,BE
3648084224,3648084479,CD
3648084480,3648084991,BE
-3648084992,3648085759,GB
-3648085760,3648086015,ZM
+3648084992,3648086015,GB
3648086016,3648090111,AT
3648090112,3648094207,RU
3648094208,3648102399,PL
@@ -100858,8 +101010,7 @@
3648282624,3648286719,PL
3648286720,3648290815,DE
3648290816,3648299007,RU
-3648299008,3648301055,FI
-3648301056,3648303103,CZ
+3648299008,3648303103,FI
3648303104,3648307199,AT
3648307200,3648311295,TR
3648311296,3648323583,DK
@@ -100883,7 +101034,9 @@
3648397312,3648405503,NO
3648405504,3648413695,RU
3648413696,3648417791,SK
-3648417792,3648425983,GB
+3648417792,3648419903,GB
+3648419904,3648419935,BE
+3648419936,3648425983,GB
3648425984,3648430079,IT
3648430080,3648434175,NL
3648434176,3648438271,RU
@@ -100974,7 +101127,7 @@
3650225408,3650225663,BR
3650225664,3650226175,TR
3650226176,3650226431,RS
-3650226432,3650226687,AT
+3650226432,3650226687,SG
3650226688,3650227455,IN
3650227456,3650227711,PL
3650227712,3650227967,PT
@@ -101094,7 +101247,9 @@
3650611836,3650611836,RU
3650611837,3650611866,LB
3650611867,3650611867,RU
-3650611868,3650611947,LB
+3650611868,3650611920,LB
+3650611921,3650611921,RU
+3650611922,3650611947,LB
3650611948,3650611948,RU
3650611949,3650611967,LB
3650611968,3650613247,RU
@@ -101110,7 +101265,10 @@
3650920458,3650920458,GB
3650920459,3650920703,FR
3650920704,3650920895,LB
-3650920896,3650920927,GB
+3650920896,3650920896,US
+3650920897,3650920897,GR
+3650920898,3650920898,GB
+3650920899,3650920927,GR
3650920928,3650920959,LB
3650920960,3650922799,GB
3650922800,3650922815,FR
@@ -101127,7 +101285,9 @@
3650939600,3650939607,FR
3650939608,3650939615,TR
3650939616,3650940927,GB
-3650940928,3650941183,NL
+3650940928,3650941177,NL
+3650941178,3650941178,GB
+3650941179,3650941183,NL
3650941184,3650945023,GB
3650945024,3651010559,DK
3651010560,3651076095,GB
@@ -101262,8 +101422,8 @@
3652014080,3652018175,SA
3652018176,3652022271,IE
3652022272,3652026367,ES
-3652026368,3652032511,DE
-3652032512,3652033791,NL
+3652026368,3652032767,DE
+3652032768,3652033791,NL
3652033792,3652034559,DE
3652034560,3652046847,PL
3652046848,3652050943,IE
@@ -101332,7 +101492,6 @@
3653451776,3653464063,RU
3653464064,3653468159,NL
3653468160,3653472255,GR
-3653472256,3653476351,NL
3653476352,3653480447,CZ
3653480448,3653484543,DK
3653484544,3653488639,TR
@@ -101397,13 +101556,20 @@
3653758976,3653763071,RU
3653763072,3654025215,IT
3654025216,3654287359,GB
-3654287360,3654608404,SE
+3654287360,3654607103,SE
+3654607104,3654607359,DE
+3654607360,3654608404,SE
3654608405,3654608405,NO
3654608406,3654608895,SE
3654608896,3654609919,NO
-3654609920,3654614143,SE
-3654614144,3654614271,FI
-3654614272,3654811647,SE
+3654609920,3654610431,SE
+3654610432,3654610943,FR
+3654610944,3654611199,SE
+3654611200,3654611455,NL
+3654611456,3654614079,SE
+3654614080,3654614271,FI
+3654614272,3654614527,NL
+3654614528,3654811647,SE
3654811648,3654942719,ES
3654942720,3655073791,IR
3655073792,3655335935,IT
@@ -101549,13 +101715,10 @@
3690463232,3690987519,KR
3690987520,3695181823,JP
3695181824,3697278975,KR
-3697278976,3697574399,JP
-3697574400,3697574687,GB
-3697574688,3697574719,JP
-3697574720,3697574783,GB
-3697574784,3697574903,JP
-3697574904,3697574911,GB
-3697574912,3697606655,JP
+3697278976,3697573887,JP
+3697573888,3697582079,GB
+3697582080,3697586175,SG
+3697586176,3697606655,JP
3697606656,3697655807,AU
3697655808,3697672191,CN
3697672192,3697737727,JP
@@ -101601,7 +101764,8 @@
3706978304,3707109375,AU
3707109376,3707174911,HK
3707174912,3707207679,JP
-3707209728,3707215871,CN
+3707209728,3707211775,CN
+3707211776,3707215871,JP
3707215872,3707217919,BD
3707217920,3707219967,ID
3707219968,3707222015,AU
@@ -101730,7 +101894,9 @@
3743121408,3743125503,MY
3743125504,3743129599,ID
3743129600,3743130623,HK
-3743130624,3743133695,SG
+3743130624,3743130879,SG
+3743130880,3743131135,HK
+3743131136,3743133695,SG
3743133696,3743134719,AU
3743134720,3743135743,JP
3743135744,3743136767,CN
diff --git a/src/config/geoip6 b/src/config/geoip6
index b5f0575cbf..5f82c4b943 100644
--- a/src/config/geoip6
+++ b/src/config/geoip6
@@ -1,4 +1,4 @@
-# Last updated based on November 15 2014 Maxmind GeoLite2 Country
+# Last updated based on April 8 2015 Maxmind GeoLite2 Country
# wget https://geolite.maxmind.com/download/geoip/database/GeoLite2-Country.mmdb.gz
# gunzip GeoLite2-Country.mmdb.gz
# python mmdb-convert.py GeoLite2-Country.mmdb
@@ -6,6 +6,9 @@
2001:200:120::,2001:200:120:ffff:ffff:ffff:ffff:ffff,JP
2001:200:148::,2001:200:148:ffff:ffff:ffff:ffff:ffff,JP
2001:200:167::,2001:200:167:ffff:ffff:ffff:ffff:ffff,JP
+2001:200:180::,2001:200:180:ffff:ffff:ffff:ffff:ffff,JP
+2001:200:601::,2001:200:601:ffff:ffff:ffff:ffff:ffff,AU
+2001:200:905::,2001:200:905:ffff:ffff:ffff:ffff:ffff,JP
2001:208:3::,2001:208:3:ffff:ffff:ffff:ffff:ffff,SG
2001:208:5::,2001:208:5:ffff:ffff:ffff:ffff:ffff,SG
2001:218::,2001:218:e000:ffff:ffff:ffff:ffff:ffff,JP
@@ -74,95 +77,336 @@
2001:408::,2001:408:ffff:ffff:ffff:ffff:ffff:ffff,US
2001:410::,2001:410:ffff:ffff:ffff:ffff:ffff:ffff,CA
2001:418::,2001:418:ffff:ffff:ffff:ffff:ffff:ffff,US
-2001:420::,2001:420:4049:ffff:ffff:ffff:ffff:ffff,US
+2001:420::,2001:420:283f:ffff:ffff:ffff:ffff:ffff,US
+2001:420:2840::,2001:420:2840:ffff:ffff:ffff:ffff:ffff,CA
+2001:420:2841::,2001:420:4049:ffff:ffff:ffff:ffff:ffff,US
2001:420:404a::,2001:420:404a:ffff:ffff:ffff:ffff:ffff,GB
-2001:420:404b::,2001:420:5040:ffff:ffff:ffff:ffff:ffff,US
+2001:420:404b::,2001:420:4083:ffff:ffff:ffff:ffff:ffff,US
+2001:420:4084::,2001:420:4084:ffff:ffff:ffff:ffff:ffff,GB
+2001:420:4085::,2001:420:44d9:ffff:ffff:ffff:ffff:ffff,US
+2001:420:44da::,2001:420:44da:ffff:ffff:ffff:ffff:ffff,ES
+2001:420:44db::,2001:420:5040:ffff:ffff:ffff:ffff:ffff,US
2001:420:5041::,2001:420:5041:ffff:ffff:ffff:ffff:ffff,AU
2001:420:5042::,2001:420:5042:ffff:ffff:ffff:ffff:ffff,US
2001:420:5043::,2001:420:5043:ffff:ffff:ffff:ffff:ffff,AU
-2001:420:5044::,2001:420:5441:ffff:ffff:ffff:ffff:ffff,US
-2001:420:5442::,2001:420:5442:ffff:ffff:ffff:ffff:ffff,IN
-2001:420:5443::,2001:420:5882:ffff:ffff:ffff:ffff:ffff,US
+2001:420:5044::,2001:420:5046:ffff:ffff:ffff:ffff:ffff,US
+2001:420:5047::,2001:420:5047:ffff:ffff:ffff:ffff:ffff,AU
+2001:420:5048::,2001:420:5049:ffff:ffff:ffff:ffff:ffff,US
+2001:420:504a::,2001:420:504a:ffff:ffff:ffff:ffff:ffff,AU
+2001:420:504b::,2001:420:5441:ffff:ffff:ffff:ffff:ffff,US
+2001:420:5442::,2001:420:5443:ffff:ffff:ffff:ffff:ffff,IN
+2001:420:5444::,2001:420:5504:ffff:ffff:ffff:ffff:ffff,US
+2001:420:5505::,2001:420:5505:ffff:ffff:ffff:ffff:ffff,IN
+2001:420:5506::,2001:420:5882:ffff:ffff:ffff:ffff:ffff,US
2001:420:5883::,2001:420:5883:ffff:ffff:ffff:ffff:ffff,CN
2001:420:5884::,2001:420:5a3f:ffff:ffff:ffff:ffff:ffff,US
2001:420:5a40::,2001:420:5a40:ffff:ffff:ffff:ffff:ffff,CN
-2001:420:5a41::,2001:420:5a43:ffff:ffff:ffff:ffff:ffff,US
-2001:420:5a44::,2001:420:5a44:ffff:ffff:ffff:ffff:ffff,CN
-2001:420:5a45::,2001:420:5c3f:ffff:ffff:ffff:ffff:ffff,US
-2001:420:5c40::,2001:420:5c40:ffff:ffff:ffff:ffff:ffff,SG
-2001:420:5c41::,2001:420:c0cf:ffff:ffff:ffff:ffff:ffff,US
+2001:420:5a41::,2001:420:5c3f:ffff:ffff:ffff:ffff:ffff,US
+2001:420:5c40::,2001:420:5c42:ffff:ffff:ffff:ffff:ffff,SG
+2001:420:5c43::,2001:420:5e3f:ffff:ffff:ffff:ffff:ffff,US
+2001:420:5e40::,2001:420:5e40:ffff:ffff:ffff:ffff:ffff,JP
+2001:420:5e41::,2001:420:c0c0:ffff:ffff:ffff:ffff:ffff,US
+2001:420:c0c1::,2001:420:c0c1:ffff:ffff:ffff:ffff:ffff,CH
+2001:420:c0c2::,2001:420:c0cf:ffff:ffff:ffff:ffff:ffff,US
2001:420:c0d0::,2001:420:c0d0:ffff:ffff:ffff:ffff:ffff,AU
-2001:420:c0d1::,2001:420:c0d3:ffff:ffff:ffff:ffff:ffff,US
-2001:420:c0d4::,2001:420:c0d4:ffff:ffff:ffff:ffff:ffff,SG
-2001:420:c0d5::,2001:420:c0d7:ffff:ffff:ffff:ffff:ffff,US
+2001:420:c0d1::,2001:420:c0d7:ffff:ffff:ffff:ffff:ffff,US
2001:420:c0d8::,2001:420:c0d8:ffff:ffff:ffff:ffff:ffff,CN
-2001:420:c0d9::,2001:420:c0df:ffff:ffff:ffff:ffff:ffff,US
-2001:420:c0e0::,2001:420:c0e0:ffff:ffff:ffff:ffff:ffff,IN
-2001:420:c0e1::,2001:420:ffff:ffff:ffff:ffff:ffff:ffff,US
+2001:420:c0d9::,2001:420:c0db:ffff:ffff:ffff:ffff:ffff,US
+2001:420:c0dc::,2001:420:c0dc:ffff:ffff:ffff:ffff:ffff,JP
+2001:420:c0dd::,2001:420:ffff:ffff:ffff:ffff:ffff:ffff,US
2001:428::,2001:428:ffff:ffff:ffff:ffff:ffff:ffff,US
2001:430::,2001:430:ffff:ffff:ffff:ffff:ffff:ffff,US
2001:438::,2001:438:ffff:ffff:ffff:ffff:ffff:ffff,US
2001:440::,2001:440:ffff:ffff:ffff:ffff:ffff:ffff,US
2001:448::,2001:448:ffff:ffff:ffff:ffff:ffff:ffff,MX
-2001:450::,2001:450:ffff:ffff:ffff:ffff:ffff:ffff,US
+2001:450::,2001:450:1b:ffff:ffff:ffff:ffff:ffff,US
+2001:450:1c::,2001:450:1c:ffff:ffff:ffff:ffff:ffff,CA
+2001:450:1d::,2001:450:1d:ffff:ffff:ffff:ffff:ffff,GB
+2001:450:1e::,2001:450:1e:ffff:ffff:ffff:ffff:ffff,FR
+2001:450:1f::,2001:450:1f:ffff:ffff:ffff:ffff:ffff,CA
+2001:450:20::,2001:450:ffff:ffff:ffff:ffff:ffff:ffff,US
2001:458::,2001:458:ffff:ffff:ffff:ffff:ffff:ffff,US
2001:460::,2001:460:ffff:ffff:ffff:ffff:ffff:ffff,US
2001:468::,2001:468:ffff:ffff:ffff:ffff:ffff:ffff,US
-2001:470::,2001:470:19:9ff:ffff:ffff:ffff:ffff,US
-2001:470:19:a00::,2001:470:19:fff:ffff:ffff:ffff:ffff,CN
-2001:470:19:1000::,2001:470:1c:ffff:ffff:ffff:ffff:ffff,US
+2001:470::,2001:470:17:ffff:ffff:ffff:ffff:ffff,US
+2001:470:18::,2001:470:18:ffff:ffff:ffff:ffff:ffff,HK
+2001:470:19::,2001:470:1c:9ff:ffff:ffff:ffff:ffff,US
+2001:470:1c:a00::,2001:470:1c:bff:ffff:ffff:ffff:ffff,CA
+2001:470:1c:c00::,2001:470:1c:ffff:ffff:ffff:ffff:ffff,US
2001:470:1d::,2001:470:1d:ffff:ffff:ffff:ffff:ffff,CA
-2001:470:1e::,2001:470:26:7ff:ffff:ffff:ffff:ffff,US
-2001:470:26:800::,2001:470:26:fff:ffff:ffff:ffff:ffff,CH
-2001:470:26:1000::,2001:470:34:ffff:ffff:ffff:ffff:ffff,US
-2001:470:35::,2001:470:35:7ff:ffff:ffff:ffff:ffff,ID
-2001:470:35:800::,2001:470:3c:ffff:ffff:ffff:ffff:ffff,US
+2001:470:1e::,2001:470:26:5ff:ffff:ffff:ffff:ffff,US
+2001:470:26:600::,2001:470:26:7ff:ffff:ffff:ffff:ffff,DE
+2001:470:26:800::,2001:470:26:fff:ffff:ffff:ffff:ffff,IT
+2001:470:26:1000::,2001:470:26:ffff:ffff:ffff:ffff:ffff,US
+2001:470:27::,2001:470:27:ffff:ffff:ffff:ffff:ffff,RU
+2001:470:28::,2001:470:28:1a5:ffff:ffff:ffff:ffff,US
+2001:470:28:1a6::,2001:470:28:1a6:ffff:ffff:ffff:ffff,RU
+2001:470:28:1a7::,2001:470:28:3ff:ffff:ffff:ffff:ffff,US
+2001:470:28:400::,2001:470:28:7ff:ffff:ffff:ffff:ffff,SE
+2001:470:28:800::,2001:470:28:dff:ffff:ffff:ffff:ffff,US
+2001:470:28:e00::,2001:470:28:fff:ffff:ffff:ffff:ffff,NO
+2001:470:28:1000::,2001:470:3c:ffff:ffff:ffff:ffff:ffff,US
2001:470:3d::,2001:470:3d:ffff:ffff:ffff:ffff:ffff,PH
-2001:470:3e::,2001:470:6d:3ff:ffff:ffff:ffff:ffff,US
-2001:470:6d:400::,2001:470:6d:7ff:ffff:ffff:ffff:ffff,DE
-2001:470:6d:800::,2001:470:1eff:ffff:ffff:ffff:ffff:ffff,US
+2001:470:3e::,2001:470:6e:ffff:ffff:ffff:ffff:ffff,US
+2001:470:6f::,2001:470:6f:1ff:ffff:ffff:ffff:ffff,CZ
+2001:470:6f:200::,2001:470:6f:49e:ffff:ffff:ffff:ffff,US
+2001:470:6f:49f::,2001:470:6f:49f:ffff:ffff:ffff:ffff,SK
+2001:470:6f:4a0::,2001:470:6f:ffff:ffff:ffff:ffff:ffff,US
+2001:470:70::,2001:470:70:ffff:ffff:ffff:ffff:ffff,PL
+2001:470:71::,2001:470:71:5ff:ffff:ffff:ffff:ffff,US
+2001:470:71:600::,2001:470:71:600:ffff:ffff:ffff:ffff,PL
+2001:470:71:601::,2001:470:71:60b:ffff:ffff:ffff:ffff,US
+2001:470:71:60c::,2001:470:71:60c:ffff:ffff:ffff:ffff,PL
+2001:470:71:60d::,2001:470:1eff:ffff:ffff:ffff:ffff:ffff,US
2001:470:1f00::,2001:470:1f00:ffff:ffff:ffff:ffff:ffff,AU
-2001:470:1f01::,2001:470:69a3:ffff:ffff:ffff:ffff:ffff,US
+2001:470:1f01::,2001:470:1f08:136:ffff:ffff:ffff:ffff,US
+2001:470:1f08:137::,2001:470:1f08:137:ffff:ffff:ffff:ffff,GB
+2001:470:1f08:138::,2001:470:1f08:415::1,US
+2001:470:1f08:415::2,2001:470:1f08:415::2,GB
+2001:470:1f08:415::3,2001:470:1f08:ffff:ffff:ffff:ffff:ffff,US
+2001:470:1f09::,2001:470:1f09:ffff:ffff:ffff:ffff:ffff,GB
+2001:470:1f0a::,2001:470:1f0a:9ff:ffff:ffff:ffff:ffff,US
+2001:470:1f0a:a00::,2001:470:1f0a:bff:ffff:ffff:ffff:ffff,DE
+2001:470:1f0a:c00::,2001:470:1f0b:30e:ffff:ffff:ffff:ffff,US
+2001:470:1f0b:30f::,2001:470:1f0b:30f:ffff:ffff:ffff:ffff,DE
+2001:470:1f0b:310::,2001:470:1f0b:4b0:ffff:ffff:ffff:ffff,US
+2001:470:1f0b:4b1::,2001:470:1f0b:4b1:ffff:ffff:ffff:ffff,UA
+2001:470:1f0b:4b2::,2001:470:1f0b:779:ffff:ffff:ffff:ffff,US
+2001:470:1f0b:77a::,2001:470:1f0b:77a:ffff:ffff:ffff:ffff,DE
+2001:470:1f0b:77b::,2001:470:1f0b:784:ffff:ffff:ffff:ffff,US
+2001:470:1f0b:785::,2001:470:1f0b:785:ffff:ffff:ffff:ffff,PL
+2001:470:1f0b:786::,2001:470:1f12:3ff:ffff:ffff:ffff:ffff,US
+2001:470:1f12:400::,2001:470:1f12:7ff:ffff:ffff:ffff:ffff,NL
+2001:470:1f12:800::,2001:470:1f12:ffff:ffff:ffff:ffff:ffff,US
+2001:470:1f13::,2001:470:1f13:3ff:ffff:ffff:ffff:ffff,FR
+2001:470:1f13:400::,2001:470:1f13:5ff:ffff:ffff:ffff:ffff,ES
+2001:470:1f13:600::,2001:470:1f13:9ff:ffff:ffff:ffff:ffff,US
+2001:470:1f13:a00::,2001:470:1f13:bff:ffff:ffff:ffff:ffff,FR
+2001:470:1f13:c00::,2001:470:1f15:44f:ffff:ffff:ffff:ffff,US
+2001:470:1f15:450::,2001:470:1f15:450:ffff:ffff:ffff:ffff,NL
+2001:470:1f15:451::,2001:470:1f15:a5f:ffff:ffff:ffff:ffff,US
+2001:470:1f15:a60::,2001:470:1f15:a60:ffff:ffff:ffff:ffff,NL
+2001:470:1f15:a61::,2001:470:1f15:ffff:ffff:ffff:ffff:ffff,US
+2001:470:1f16::,2001:470:1f16:ffff:ffff:ffff:ffff:ffff,CA
+2001:470:1f17::,2001:470:2050:ffff:ffff:ffff:ffff:ffff,US
+2001:470:2051::,2001:470:2051:ffff:ffff:ffff:ffff:ffff,RO
+2001:470:2052::,2001:470:2092:ffff:ffff:ffff:ffff:ffff,US
+2001:470:2093::,2001:470:2093:ffff:ffff:ffff:ffff:ffff,SI
+2001:470:2094::,2001:470:507c:ffff:ffff:ffff:ffff:ffff,US
+2001:470:507d::,2001:470:507d:ffff:ffff:ffff:ffff:ffff,UA
+2001:470:507e::,2001:470:52ba:ffff:ffff:ffff:ffff:ffff,US
+2001:470:52bb::,2001:470:52bb:ffff:ffff:ffff:ffff:ffff,UA
+2001:470:52bc::,2001:470:5802:ffff:ffff:ffff:ffff:ffff,US
+2001:470:5803::,2001:470:5803:ffff:ffff:ffff:ffff:ffff,CZ
+2001:470:5804::,2001:470:5853:ffff:ffff:ffff:ffff:ffff,US
+2001:470:5854::,2001:470:5854:ffff:ffff:ffff:ffff:ffff,CZ
+2001:470:5855::,2001:470:591a:ffff:ffff:ffff:ffff:ffff,US
+2001:470:591b::,2001:470:591b:ffff:ffff:ffff:ffff:ffff,CZ
+2001:470:591c::,2001:470:591c:ffff:ffff:ffff:ffff:ffff,US
+2001:470:591d::,2001:470:591d:ffff:ffff:ffff:ffff:ffff,CZ
+2001:470:591e::,2001:470:5948:ffff:ffff:ffff:ffff:ffff,US
+2001:470:5949::,2001:470:5949:ffff:ffff:ffff:ffff:ffff,CZ
+2001:470:594a::,2001:470:598f:ffff:ffff:ffff:ffff:ffff,US
+2001:470:5990::,2001:470:5990:ffff:ffff:ffff:ffff:ffff,CZ
+2001:470:5991::,2001:470:60a2:ffff:ffff:ffff:ffff:ffff,US
+2001:470:60a3::,2001:470:60a3:ffff:ffff:ffff:ffff:ffff,BY
+2001:470:60a4::,2001:470:618d:ffff:ffff:ffff:ffff:ffff,US
+2001:470:618e::,2001:470:618e:ffff:ffff:ffff:ffff:ffff,PL
+2001:470:618f::,2001:470:619f:ffff:ffff:ffff:ffff:ffff,US
+2001:470:61a0::,2001:470:61a0:ffff:ffff:ffff:ffff:ffff,RU
+2001:470:61a1::,2001:470:68a5:ffff:ffff:ffff:ffff:ffff,US
+2001:470:68a6::,2001:470:68a6:ffff:ffff:ffff:ffff:ffff,ES
+2001:470:68a7::,2001:470:68df:ffff:ffff:ffff:ffff:ffff,US
+2001:470:68e0::,2001:470:68e0:ffff:ffff:ffff:ffff:ffff,IL
+2001:470:68e1::,2001:470:6914:ffff:ffff:ffff:ffff:ffff,US
+2001:470:6915::,2001:470:6915:ffff:ffff:ffff:ffff:ffff,ES
+2001:470:6916::,2001:470:6978:ffff:ffff:ffff:ffff:ffff,US
+2001:470:6979::,2001:470:6979:ffff:ffff:ffff:ffff:ffff,ES
+2001:470:697a::,2001:470:69a3:ffff:ffff:ffff:ffff:ffff,US
2001:470:69a4::,2001:470:69a4:ffff:ffff:ffff:ffff:ffff,GB
-2001:470:69a5::,2001:470:6adc:ffff:ffff:ffff:ffff:ffff,US
-2001:470:6add::,2001:470:6add:ffff:ffff:ffff:ffff:ffff,GB
-2001:470:6ade::,2001:470:6b2e:ffff:ffff:ffff:ffff:ffff,US
+2001:470:69a5::,2001:470:6af6:ffff:ffff:ffff:ffff:ffff,US
+2001:470:6af7::,2001:470:6af7:ffff:ffff:ffff:ffff:ffff,GB
+2001:470:6af8::,2001:470:6b2e:ffff:ffff:ffff:ffff:ffff,US
2001:470:6b2f::,2001:470:6b2f:ffff:ffff:ffff:ffff:ffff,GB
-2001:470:6b30::,2001:470:6be4:ffff:ffff:ffff:ffff:ffff,US
+2001:470:6b30::,2001:470:6b38:ffff:ffff:ffff:ffff:ffff,US
+2001:470:6b39::,2001:470:6b39:ffff:ffff:ffff:ffff:ffff,GB
+2001:470:6b3a::,2001:470:6b76:ffff:ffff:ffff:ffff:ffff,US
+2001:470:6b77::,2001:470:6b77:ffff:ffff:ffff:ffff:ffff,GB
+2001:470:6b78::,2001:470:6bba:ffff:ffff:ffff:ffff:ffff,US
+2001:470:6bbb::,2001:470:6bbb:ffff:ffff:ffff:ffff:ffff,GB
+2001:470:6bbc::,2001:470:6be4:ffff:ffff:ffff:ffff:ffff,US
2001:470:6be5::,2001:470:6be5:ffff:ffff:ffff:ffff:ffff,GB
2001:470:6be6::,2001:470:6bed:ffff:ffff:ffff:ffff:ffff,US
2001:470:6bee::,2001:470:6bee:ffff:ffff:ffff:ffff:ffff,IN
-2001:470:6bef::,2001:470:710f:ffff:ffff:ffff:ffff:ffff,US
-2001:470:7110::,2001:470:7110:ffff:ffff:ffff:ffff:ffff,UA
-2001:470:7111::,2001:470:75bf:ffff:ffff:ffff:ffff:ffff,US
+2001:470:6bef::,2001:470:6c0d:ffff:ffff:ffff:ffff:ffff,US
+2001:470:6c0e::,2001:470:6c0e:ffff:ffff:ffff:ffff:ffff,GB
+2001:470:6c0f::,2001:470:6c96:ffff:ffff:ffff:ffff:ffff,US
+2001:470:6c97::,2001:470:6c97:ffff:ffff:ffff:ffff:ffff,RU
+2001:470:6c98::,2001:470:6cee:ffff:ffff:ffff:ffff:ffff,US
+2001:470:6cef::,2001:470:6cef:ffff:ffff:ffff:ffff:ffff,ES
+2001:470:6cf0::,2001:470:7053:ffff:ffff:ffff:ffff:ffff,US
+2001:470:7054::,2001:470:7054:ffff:ffff:ffff:ffff:ffff,DE
+2001:470:7055::,2001:470:7069:ffff:ffff:ffff:ffff:ffff,US
+2001:470:706a::,2001:470:706a:ffff:ffff:ffff:ffff:ffff,DE
+2001:470:706b::,2001:470:7072:ffff:ffff:ffff:ffff:ffff,US
+2001:470:7073::,2001:470:7073:ffff:ffff:ffff:ffff:ffff,DE
+2001:470:7074::,2001:470:7170:ffff:ffff:ffff:ffff:ffff,US
+2001:470:7171::,2001:470:7171:ffff:ffff:ffff:ffff:ffff,DE
+2001:470:7172::,2001:470:7286:ffff:ffff:ffff:ffff:ffff,US
+2001:470:7287::,2001:470:7287:ffff:ffff:ffff:ffff:ffff,PL
+2001:470:7288::,2001:470:72bd:ffff:ffff:ffff:ffff:ffff,US
+2001:470:72be::,2001:470:72be:ffff:ffff:ffff:ffff:ffff,DE
+2001:470:72bf::,2001:470:7479:ffff:ffff:ffff:ffff:ffff,US
+2001:470:747a::,2001:470:747a:ffff:ffff:ffff:ffff:ffff,DE
+2001:470:747b::,2001:470:74e0:ffff:ffff:ffff:ffff:ffff,US
+2001:470:74e1::,2001:470:74e1:ffff:ffff:ffff:ffff:ffff,DE
+2001:470:74e2::,2001:470:75bf:ffff:ffff:ffff:ffff:ffff,US
2001:470:75c0::,2001:470:75c0:ffff:ffff:ffff:ffff:ffff,TR
2001:470:75c1::,2001:470:75c4:ffff:ffff:ffff:ffff:ffff,US
2001:470:75c5::,2001:470:75c5:ffff:ffff:ffff:ffff:ffff,DE
-2001:470:75c6::,2001:470:80b6:ffff:ffff:ffff:ffff:ffff,US
+2001:470:75c6::,2001:470:78e8:ffff:ffff:ffff:ffff:ffff,US
+2001:470:78e9::,2001:470:78e9:ffff:ffff:ffff:ffff:ffff,LV
+2001:470:78ea::,2001:470:79ff:ffff:ffff:ffff:ffff:ffff,US
+2001:470:7a00::,2001:470:7a00:ffff:ffff:ffff:ffff:ffff,NL
+2001:470:7a01::,2001:470:7c14:ffff:ffff:ffff:ffff:ffff,US
+2001:470:7c15::,2001:470:7c15:ffff:ffff:ffff:ffff:ffff,DE
+2001:470:7c16::,2001:470:7c4f:ffff:ffff:ffff:ffff:ffff,US
+2001:470:7c50::,2001:470:7c50:ffff:ffff:ffff:ffff:ffff,NL
+2001:470:7c51::,2001:470:8091:ffff:ffff:ffff:ffff:ffff,US
+2001:470:8092::,2001:470:8092:ffff:ffff:ffff:ffff:ffff,CN
+2001:470:8093::,2001:470:80b6:ffff:ffff:ffff:ffff:ffff,US
2001:470:80b7::,2001:470:80b7:ffff:ffff:ffff:ffff:ffff,CN
2001:470:80b8::,2001:470:81ee:ffff:ffff:ffff:ffff:ffff,US
2001:470:81ef::,2001:470:81ef:ffff:ffff:ffff:ffff:ffff,CA
-2001:470:81f0::,2001:470:83a2:ffff:ffff:ffff:ffff:ffff,US
+2001:470:81f0::,2001:470:8327:ffff:ffff:ffff:ffff:ffff,US
+2001:470:8328::,2001:470:8328:ffff:ffff:ffff:ffff:ffff,CN
+2001:470:8329::,2001:470:83a2:ffff:ffff:ffff:ffff:ffff,US
2001:470:83a3::,2001:470:83a3:ffff:ffff:ffff:ffff:ffff,AU
2001:470:83a4::,2001:470:83bb:ffff:ffff:ffff:ffff:ffff,US
2001:470:83bc::,2001:470:83bc:ffff:ffff:ffff:ffff:ffff,CN
-2001:470:83bd::,2001:470:83e8:ffff:ffff:ffff:ffff:ffff,US
+2001:470:83bd::,2001:470:83cf:ffff:ffff:ffff:ffff:ffff,US
+2001:470:83d0::,2001:470:83d0:ffff:ffff:ffff:ffff:ffff,CN
+2001:470:83d1::,2001:470:83e8:ffff:ffff:ffff:ffff:ffff,US
2001:470:83e9::,2001:470:83e9:ffff:ffff:ffff:ffff:ffff,CN
-2001:470:83ea::,2001:470:9ebf:ffff:ffff:ffff:ffff:ffff,US
+2001:470:83ea::,2001:470:859e:ffff:ffff:ffff:ffff:ffff,US
+2001:470:859f::,2001:470:859f:ffff:ffff:ffff:ffff:ffff,AU
+2001:470:85a0::,2001:470:8928:ffff:ffff:ffff:ffff:ffff,US
+2001:470:8929::,2001:470:8929:ffff:ffff:ffff:ffff:ffff,CA
+2001:470:892a::,2001:470:94f1:ffff:ffff:ffff:ffff:ffff,US
+2001:470:94f2::,2001:470:94f2:ffff:ffff:ffff:ffff:ffff,CZ
+2001:470:94f3::,2001:470:9616:ffff:ffff:ffff:ffff:ffff,US
+2001:470:9617::,2001:470:9617:ffff:ffff:ffff:ffff:ffff,GB
+2001:470:9618::,2001:470:974e:ffff:ffff:ffff:ffff:ffff,US
+2001:470:974f::,2001:470:974f:ffff:ffff:ffff:ffff:ffff,GB
+2001:470:9750::,2001:470:9794:ffff:ffff:ffff:ffff:ffff,US
+2001:470:9795::,2001:470:9795:ffff:ffff:ffff:ffff:ffff,GB
+2001:470:9796::,2001:470:999c:ffff:ffff:ffff:ffff:ffff,US
+2001:470:999d::,2001:470:999d:ffff:ffff:ffff:ffff:ffff,DE
+2001:470:999e::,2001:470:99b8:ffff:ffff:ffff:ffff:ffff,US
+2001:470:99b9::,2001:470:99b9:ffff:ffff:ffff:ffff:ffff,DE
+2001:470:99ba::,2001:470:9d38:ffff:ffff:ffff:ffff:ffff,US
+2001:470:9d39::,2001:470:9d39:ffff:ffff:ffff:ffff:ffff,DE
+2001:470:9d3a::,2001:470:9ebf:ffff:ffff:ffff:ffff:ffff,US
2001:470:9ec0::,2001:470:9ec0:ffff:ffff:ffff:ffff:ffff,DE
-2001:470:9ec1::,2001:470:b7a4:ffff:ffff:ffff:ffff:ffff,US
+2001:470:9ec1::,2001:470:9f5e:ffff:ffff:ffff:ffff:ffff,US
+2001:470:9f5f::,2001:470:9f5f:ffff:ffff:ffff:ffff:ffff,RU
+2001:470:9f60::,2001:470:b0e1:ffff:ffff:ffff:ffff:ffff,US
+2001:470:b0e2::,2001:470:b0e2:ffff:ffff:ffff:ffff:ffff,CA
+2001:470:b0e3::,2001:470:b135:ffff:ffff:ffff:ffff:ffff,US
+2001:470:b136::,2001:470:b136:ffff:ffff:ffff:ffff:ffff,CA
+2001:470:b137::,2001:470:b23e:ffff:ffff:ffff:ffff:ffff,US
+2001:470:b23f::,2001:470:b23f:ffff:ffff:ffff:ffff:ffff,CA
+2001:470:b240::,2001:470:b27e:ffff:ffff:ffff:ffff:ffff,US
+2001:470:b27f::,2001:470:b27f:ffff:ffff:ffff:ffff:ffff,CA
+2001:470:b280::,2001:470:b2d9:ffff:ffff:ffff:ffff:ffff,US
+2001:470:b2da::,2001:470:b2da:ffff:ffff:ffff:ffff:ffff,CA
+2001:470:b2db::,2001:470:b34f:ffff:ffff:ffff:ffff:ffff,US
+2001:470:b350::,2001:470:b350:ffff:ffff:ffff:ffff:ffff,CA
+2001:470:b351::,2001:470:b36c:ffff:ffff:ffff:ffff:ffff,US
+2001:470:b36d::,2001:470:b36d:ffff:ffff:ffff:ffff:ffff,CA
+2001:470:b36e::,2001:470:b430:ffff:ffff:ffff:ffff:ffff,US
+2001:470:b431::,2001:470:b431:ffff:ffff:ffff:ffff:ffff,CH
+2001:470:b432::,2001:470:b517:ffff:ffff:ffff:ffff:ffff,US
+2001:470:b518::,2001:470:b518:ffff:ffff:ffff:ffff:ffff,PL
+2001:470:b519::,2001:470:b625:ffff:ffff:ffff:ffff:ffff,US
+2001:470:b626::,2001:470:b626:ffff:ffff:ffff:ffff:ffff,DE
+2001:470:b627::,2001:470:b7a4:ffff:ffff:ffff:ffff:ffff,US
2001:470:b7a5::,2001:470:b7a5:ffff:ffff:ffff:ffff:ffff,CH
-2001:470:b7a6::,2001:470:de60:ffff:ffff:ffff:ffff:ffff,US
+2001:470:b7a6::,2001:470:b8e6:ffff:ffff:ffff:ffff:ffff,US
+2001:470:b8e7::,2001:470:b8e7:ffff:ffff:ffff:ffff:ffff,CR
+2001:470:b8e8::,2001:470:c322:ffff:ffff:ffff:ffff:ffff,US
+2001:470:c323::,2001:470:c323:ffff:ffff:ffff:ffff:ffff,CA
+2001:470:c324::,2001:470:c8b6:ffff:ffff:ffff:ffff:ffff,US
+2001:470:c8b7::,2001:470:c8b7:ffff:ffff:ffff:ffff:ffff,FR
+2001:470:c8b8::,2001:470:c8f1:ffff:ffff:ffff:ffff:ffff,US
+2001:470:c8f2::,2001:470:c8f2:ffff:ffff:ffff:ffff:ffff,ES
+2001:470:c8f3::,2001:470:c9b2:ffff:ffff:ffff:ffff:ffff,US
+2001:470:c9b3::,2001:470:c9b3:ffff:ffff:ffff:ffff:ffff,ES
+2001:470:c9b4::,2001:470:cc65:ffff:ffff:ffff:ffff:ffff,US
+2001:470:cc66::,2001:470:cc66:ffff:ffff:ffff:ffff:ffff,NL
+2001:470:cc67::,2001:470:d050:ffff:ffff:ffff:ffff:ffff,US
+2001:470:d051::,2001:470:d051:ffff:ffff:ffff:ffff:ffff,NL
+2001:470:d052::,2001:470:d4ec:ffff:ffff:ffff:ffff:ffff,US
+2001:470:d4ed::,2001:470:d4ed:ffff:ffff:ffff:ffff:ffff,FR
+2001:470:d4ee::,2001:470:d6b8:ffff:ffff:ffff:ffff:ffff,US
+2001:470:d6b9::,2001:470:d6b9:ffff:ffff:ffff:ffff:ffff,RU
+2001:470:d6ba::,2001:470:d890:ffff:ffff:ffff:ffff:ffff,US
+2001:470:d891::,2001:470:d891:ffff:ffff:ffff:ffff:ffff,BR
+2001:470:d892::,2001:470:dc08:ffff:ffff:ffff:ffff:ffff,US
+2001:470:dc09::,2001:470:dc09:ffff:ffff:ffff:ffff:ffff,SE
+2001:470:dc0a::,2001:470:dcc3:ffff:ffff:ffff:ffff:ffff,US
+2001:470:dcc4::,2001:470:dcc4:ffff:ffff:ffff:ffff:ffff,SE
+2001:470:dcc5::,2001:470:dcd0:ffff:ffff:ffff:ffff:ffff,US
+2001:470:dcd1::,2001:470:dcd1:ffff:ffff:ffff:ffff:ffff,SE
+2001:470:dcd2::,2001:470:dd3a:ffff:ffff:ffff:ffff:ffff,US
+2001:470:dd3b::,2001:470:dd3b:ffff:ffff:ffff:ffff:ffff,FI
+2001:470:dd3c::,2001:470:dd94:ffff:ffff:ffff:ffff:ffff,US
+2001:470:dd95::,2001:470:dd95:ffff:ffff:ffff:ffff:ffff,UA
+2001:470:dd96::,2001:470:de60:ffff:ffff:ffff:ffff:ffff,US
2001:470:de61::,2001:470:de61:ffff:ffff:ffff:ffff:ffff,RU
-2001:470:de62::,2001:470:e97e:ffff:ffff:ffff:ffff:ffff,US
+2001:470:de62::,2001:470:de8a:ffff:ffff:ffff:ffff:ffff,US
+2001:470:de8b::,2001:470:de8b:ffff:ffff:ffff:ffff:ffff,RU
+2001:470:de8c::,2001:470:deb4:ffff:ffff:ffff:ffff:ffff,US
+2001:470:deb5::,2001:470:deb5:ffff:ffff:ffff:ffff:ffff,RU
+2001:470:deb6::,2001:470:dec3:ffff:ffff:ffff:ffff:ffff,US
+2001:470:dec4::,2001:470:dec4:ffff:ffff:ffff:ffff:ffff,SE
+2001:470:dec5::,2001:470:dfad:ffff:ffff:ffff:ffff:ffff,US
+2001:470:dfae::,2001:470:dfae:ffff:ffff:ffff:ffff:ffff,SE
+2001:470:dfaf::,2001:470:e20e:ffff:ffff:ffff:ffff:ffff,US
+2001:470:e20f::,2001:470:e20f:ffff:ffff:ffff:ffff:ffff,CA
+2001:470:e210::,2001:470:e939:ffff:ffff:ffff:ffff:ffff,US
+2001:470:e93a::,2001:470:e93a:ffff:ffff:ffff:ffff:ffff,CA
+2001:470:e93b::,2001:470:e97e:ffff:ffff:ffff:ffff:ffff,US
2001:470:e97f::,2001:470:e97f:ffff:ffff:ffff:ffff:ffff,CA
-2001:470:e980::,2001:470:ea76:ffff:ffff:ffff:ffff:ffff,US
+2001:470:e980::,2001:470:ea08:ffff:ffff:ffff:ffff:ffff,US
+2001:470:ea09::,2001:470:ea09:ffff:ffff:ffff:ffff:ffff,CA
+2001:470:ea0a::,2001:470:ea76:ffff:ffff:ffff:ffff:ffff,US
2001:470:ea77::,2001:470:ea77:ffff:ffff:ffff:ffff:ffff,AU
-2001:470:ea78::,2001:470:f1fa:ffff:ffff:ffff:ffff:ffff,US
+2001:470:ea78::,2001:470:ecf5:ffff:ffff:ffff:ffff:ffff,US
+2001:470:ecf6::,2001:470:ecf7:ffff:ffff:ffff:ffff:ffff,ID
+2001:470:ecf8::,2001:470:ed26:ffff:ffff:ffff:ffff:ffff,US
+2001:470:ed27::,2001:470:ed27:ffff:ffff:ffff:ffff:ffff,ID
+2001:470:ed28::,2001:470:ed42:ffff:ffff:ffff:ffff:ffff,US
+2001:470:ed43::,2001:470:ed43:ffff:ffff:ffff:ffff:ffff,ID
+2001:470:ed44::,2001:470:f1fa:ffff:ffff:ffff:ffff:ffff,US
2001:470:f1fb::,2001:470:f1fb:ffff:ffff:ffff:ffff:ffff,CN
2001:470:f1fc::,2001:470:f382:ffff:ffff:ffff:ffff:ffff,US
2001:470:f383::,2001:470:f383:ffff:ffff:ffff:ffff:ffff,CN
-2001:470:f384::,2001:470:fe3f:ffff:ffff:ffff:ffff:ffff,US
+2001:470:f384::,2001:470:f3bd:ffff:ffff:ffff:ffff:ffff,US
+2001:470:f3be::,2001:470:f3be:ffff:ffff:ffff:ffff:ffff,CN
+2001:470:f3bf::,2001:470:f4b3:ffff:ffff:ffff:ffff:ffff,US
+2001:470:f4b4::,2001:470:f4b4:ffff:ffff:ffff:ffff:ffff,CN
+2001:470:f4b5::,2001:470:f91b:ffff:ffff:ffff:ffff:ffff,US
+2001:470:f91c::,2001:470:f91c:ffff:ffff:ffff:ffff:ffff,CN
+2001:470:f91d::,2001:470:fa87:ffff:ffff:ffff:ffff:ffff,US
+2001:470:fa88::,2001:470:fa88:ffff:ffff:ffff:ffff:ffff,HK
+2001:470:fa89::,2001:470:fb3b:ffff:ffff:ffff:ffff:ffff,US
+2001:470:fb3c::,2001:470:fb3c:ffff:ffff:ffff:ffff:ffff,CN
+2001:470:fb3d::,2001:470:fc78:ffff:ffff:ffff:ffff:ffff,US
+2001:470:fc79::,2001:470:fc79:ffff:ffff:ffff:ffff:ffff,JP
+2001:470:fc7a::,2001:470:fc85:ffff:ffff:ffff:ffff:ffff,US
+2001:470:fc86::,2001:470:fc86:ffff:ffff:ffff:ffff:ffff,JP
+2001:470:fc87::,2001:470:fe3f:ffff:ffff:ffff:ffff:ffff,US
2001:470:fe40::,2001:470:fe40:ffff:ffff:ffff:ffff:ffff,JP
2001:470:fe41::,2001:470:fe7b:ffff:ffff:ffff:ffff:ffff,US
2001:470:fe7c::,2001:470:fe7c:ffff:ffff:ffff:ffff:ffff,CN
@@ -274,6 +518,9 @@
2001:504:3a::,2001:504:3d:ffff:ffff:ffff:ffff:ffff,US
2001:504:3e::,2001:504:3e:ffff:ffff:ffff:ffff:ffff,JM
2001:504:3f::,2001:504:41:ffff:ffff:ffff:ffff:ffff,US
+2001:504:42::,2001:504:42:ffff:ffff:ffff:ffff:ffff,CA
+2001:504:43::,2001:504:45:ffff:ffff:ffff:ffff:ffff,US
+2001:504:46::,2001:504:46:ffff:ffff:ffff:ffff:ffff,CA
2001:506::,2001:506:1:ffff:ffff:ffff:ffff:ffff,US
2001:506:8::,2001:506:8:ffff:ffff:ffff:ffff:ffff,US
2001:506:20::,2001:506:20:ffff:ffff:ffff:ffff:ffff,CA
@@ -290,7 +537,11 @@
2001:538::,2001:538:ffff:ffff:ffff:ffff:ffff:ffff,US
2001:540::,2001:540:ffff:ffff:ffff:ffff:ffff:ffff,US
2001:548::,2001:548:ffff:ffff:ffff:ffff:ffff:ffff,US
-2001:550::,2001:550:ffff:ffff:ffff:ffff:ffff:ffff,US
+2001:550::,2001:550:907:ffff:ffff:ffff:ffff:ffff,US
+2001:550:908::,2001:550:908:ffff:ffff:ffff:ffff:ffff,CA
+2001:550:909::,2001:550:909:ffff:ffff:ffff:ffff:ffff,US
+2001:550:90a::,2001:550:90a:ffff:ffff:ffff:ffff:ffff,CA
+2001:550:90b::,2001:550:ffff:ffff:ffff:ffff:ffff:ffff,US
2001:558::,2001:560:ffff:ffff:ffff:ffff:ffff:ffff,US
2001:568::,2001:56f:ffff:ffff:ffff:ffff:ffff:ffff,CA
2001:570::,2001:570:ffff:ffff:ffff:ffff:ffff:ffff,US
@@ -298,11 +549,19 @@
2001:580::,2001:580:ffff:ffff:ffff:ffff:ffff:ffff,US
2001:590::,2001:590:ffff:ffff:ffff:ffff:ffff:ffff,US
2001:598::,2001:598:ffff:ffff:ffff:ffff:ffff:ffff,CA
-2001:5a0::,2001:5a0:ffff:ffff:ffff:ffff:ffff:ffff,US
+2001:5a0::,2001:5a0:36ff:ffff:ffff:ffff:ffff:ffff,US
+2001:5a0:3700::,2001:5a0:3700:ff:ffff:ffff:ffff:ffff,CA
+2001:5a0:3700:100::,2001:5a0:ffff:ffff:ffff:ffff:ffff:ffff,US
2001:5a8::,2001:5a8:ffff:ffff:ffff:ffff:ffff:ffff,US
2001:5b0::,2001:5b0:ffff:ffff:ffff:ffff:ffff:ffff,US
2001:5b8::,2001:5b8:ffff:ffff:ffff:ffff:ffff:ffff,US
-2001:5c0:1000::,2001:5c0:1fff:ffff:ffff:ffff:ffff:ffff,CA
+2001:5c0:1000::,2001:5c0:10ff:ffff:ffff:ffff:ffff:ffff,CA
+2001:5c0:1100::,2001:5c0:1100:ffff:ffff:ffff:ffff:ffff,US
+2001:5c0:1101::,2001:5c0:1504:ffff:ffff:ffff:ffff:ffff,CA
+2001:5c0:1505::,2001:5c0:1505:ffff:ffff:ffff:ffff:ffff,RU
+2001:5c0:1506::,2001:5c0:1507:7fff:ffff:ffff:ffff:ffff,CA
+2001:5c0:1507:8000::,2001:5c0:1507:ffff:ffff:ffff:ffff:ffff,IT
+2001:5c0:1508::,2001:5c0:1fff:ffff:ffff:ffff:ffff:ffff,CA
2001:5c8::,2001:5c8:ffff:ffff:ffff:ffff:ffff:ffff,US
2001:5d0::,2001:5d0:ffff:ffff:ffff:ffff:ffff:ffff,US
2001:5d8::,2001:5d8:ffff:ffff:ffff:ffff:ffff:ffff,US
@@ -370,6 +629,8 @@
2001:678:94::,2001:678:94:ffff:ffff:ffff:ffff:ffff,EE
2001:678:98::,2001:678:98:ffff:ffff:ffff:ffff:ffff,KZ
2001:678:9c::,2001:678:9c:ffff:ffff:ffff:ffff:ffff,SK
+2001:678:a0::,2001:678:a0:ffff:ffff:ffff:ffff:ffff,FI
+2001:678:a4::,2001:678:a4:ffff:ffff:ffff:ffff:ffff,AT
2001:67c::,2001:67c::ffff:ffff:ffff:ffff:ffff,IE
2001:67c:4::,2001:67c:4:ffff:ffff:ffff:ffff:ffff,DE
2001:67c:8::,2001:67c:8:ffff:ffff:ffff:ffff:ffff,CH
@@ -380,24 +641,28 @@
2001:67c:1c::,2001:67c:1c:ffff:ffff:ffff:ffff:ffff,SE
2001:67c:20::,2001:67c:20:ffff:ffff:ffff:ffff:ffff,IE
2001:67c:24::,2001:67c:24:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:28::,2001:67c:28:ffff:ffff:ffff:ffff:ffff,UA
2001:67c:2c::,2001:67c:2c:ffff:ffff:ffff:ffff:ffff,NL
2001:67c:30::,2001:67c:30:ffff:ffff:ffff:ffff:ffff,RO
2001:67c:34::,2001:67c:34:ffff:ffff:ffff:ffff:ffff,NL
2001:67c:38::,2001:67c:38:ffff:ffff:ffff:ffff:ffff,NL
+2001:67c:3c::,2001:67c:3c:ffff:ffff:ffff:ffff:ffff,SE
2001:67c:40::,2001:67c:40:ffff:ffff:ffff:ffff:ffff,BE
2001:67c:44::,2001:67c:44:ffff:ffff:ffff:ffff:ffff,RO
+2001:67c:48::,2001:67c:48:ffff:ffff:ffff:ffff:ffff,CZ
2001:67c:4c::,2001:67c:4c:ffff:ffff:ffff:ffff:ffff,AT
2001:67c:50::,2001:67c:50:ffff:ffff:ffff:ffff:ffff,NL
2001:67c:54::,2001:67c:54:ffff:ffff:ffff:ffff:ffff,NL
2001:67c:58::,2001:67c:58:ffff:ffff:ffff:ffff:ffff,SI
2001:67c:5c::,2001:67c:5c:ffff:ffff:ffff:ffff:ffff,BE
2001:67c:60::,2001:67c:60:ffff:ffff:ffff:ffff:ffff,NL
-2001:67c:64::,2001:67c:64:ffff:ffff:ffff:ffff:ffff,NL
+2001:67c:64::,2001:67c:64:ffff:ffff:ffff:ffff:ffff,GB
2001:67c:68::,2001:67c:68:ffff:ffff:ffff:ffff:ffff,CZ
2001:67c:6c::,2001:67c:6c:ffff:ffff:ffff:ffff:ffff,IS
2001:67c:70::,2001:67c:70:ffff:ffff:ffff:ffff:ffff,FR
-2001:67c:74::,2001:67c:74:ffff:ffff:ffff:ffff:ffff,NL
2001:67c:78::,2001:67c:78:ffff:ffff:ffff:ffff:ffff,RO
+2001:67c:7c::,2001:67c:7c:ffff:ffff:ffff:ffff:ffff,AT
+2001:67c:80::,2001:67c:80:ffff:ffff:ffff:ffff:ffff,GB
2001:67c:84::,2001:67c:84:ffff:ffff:ffff:ffff:ffff,CZ
2001:67c:88::,2001:67c:88:ffff:ffff:ffff:ffff:ffff,CH
2001:67c:8c::,2001:67c:8c:ffff:ffff:ffff:ffff:ffff,RU
@@ -413,6 +678,7 @@
2001:67c:b4::,2001:67c:b4:ffff:ffff:ffff:ffff:ffff,GB
2001:67c:b8::,2001:67c:b8:ffff:ffff:ffff:ffff:ffff,DK
2001:67c:bc::,2001:67c:bc:ffff:ffff:ffff:ffff:ffff,EE
+2001:67c:c0::,2001:67c:c0:ffff:ffff:ffff:ffff:ffff,CH
2001:67c:c4::,2001:67c:c4:ffff:ffff:ffff:ffff:ffff,FR
2001:67c:c8::,2001:67c:c8:ffff:ffff:ffff:ffff:ffff,CH
2001:67c:cc::,2001:67c:cc:ffff:ffff:ffff:ffff:ffff,DE
@@ -492,7 +758,6 @@
2001:67c:208::,2001:67c:208:ffff:ffff:ffff:ffff:ffff,DE
2001:67c:20c::,2001:67c:20c:ffff:ffff:ffff:ffff:ffff,NL
2001:67c:210::,2001:67c:210:ffff:ffff:ffff:ffff:ffff,AT
-2001:67c:214::,2001:67c:214:ffff:ffff:ffff:ffff:ffff,DE
2001:67c:218::,2001:67c:218:ffff:ffff:ffff:ffff:ffff,LT
2001:67c:21c::,2001:67c:21c:ffff:ffff:ffff:ffff:ffff,AM
2001:67c:220::,2001:67c:220:ffff:ffff:ffff:ffff:ffff,DE
@@ -537,7 +802,6 @@
2001:67c:2c4::,2001:67c:2c4:ffff:ffff:ffff:ffff:ffff,CH
2001:67c:2c8::,2001:67c:2c8:ffff:ffff:ffff:ffff:ffff,NL
2001:67c:2cc::,2001:67c:2cc:ffff:ffff:ffff:ffff:ffff,DE
-2001:67c:2d0::,2001:67c:2d0:ffff:ffff:ffff:ffff:ffff,NL
2001:67c:2d4::,2001:67c:2d4:ffff:ffff:ffff:ffff:ffff,NL
2001:67c:2d8::,2001:67c:2d8:ffff:ffff:ffff:ffff:ffff,AT
2001:67c:2dc::,2001:67c:2dc:ffff:ffff:ffff:ffff:ffff,NO
@@ -575,10 +839,10 @@
2001:67c:364::,2001:67c:364:ffff:ffff:ffff:ffff:ffff,CH
2001:67c:368::,2001:67c:368:ffff:ffff:ffff:ffff:ffff,LV
2001:67c:36c::,2001:67c:36c:ffff:ffff:ffff:ffff:ffff,CH
-2001:67c:370::,2001:67c:370:ffff:ffff:ffff:ffff:ffff,CH
+2001:67c:370::,2001:67c:370:ffff:ffff:ffff:ffff:ffff,US
2001:67c:374::,2001:67c:374:ffff:ffff:ffff:ffff:ffff,DE
2001:67c:37c::,2001:67c:37c:ffff:ffff:ffff:ffff:ffff,CH
-2001:67c:380::,2001:67c:380:ffff:ffff:ffff:ffff:ffff,CZ
+2001:67c:380::,2001:67c:380:ffff:ffff:ffff:ffff:ffff,RU
2001:67c:384::,2001:67c:384:ffff:ffff:ffff:ffff:ffff,DE
2001:67c:388::,2001:67c:388:ffff:ffff:ffff:ffff:ffff,DE
2001:67c:38c::,2001:67c:38c:ffff:ffff:ffff:ffff:ffff,GB
@@ -638,7 +902,6 @@
2001:67c:468::,2001:67c:468:ffff:ffff:ffff:ffff:ffff,PL
2001:67c:46c::,2001:67c:46c:ffff:ffff:ffff:ffff:ffff,CH
2001:67c:470::,2001:67c:470:ffff:ffff:ffff:ffff:ffff,RO
-2001:67c:474::,2001:67c:474:ffff:ffff:ffff:ffff:ffff,DE
2001:67c:478::,2001:67c:478:ffff:ffff:ffff:ffff:ffff,NL
2001:67c:47c::,2001:67c:47c:ffff:ffff:ffff:ffff:ffff,CH
2001:67c:480::,2001:67c:480:ffff:ffff:ffff:ffff:ffff,NO
@@ -692,7 +955,6 @@
2001:67c:548::,2001:67c:548:ffff:ffff:ffff:ffff:ffff,SI
2001:67c:54c::,2001:67c:54c:ffff:ffff:ffff:ffff:ffff,FR
2001:67c:550::,2001:67c:550:ffff:ffff:ffff:ffff:ffff,NO
-2001:67c:554::,2001:67c:554:ffff:ffff:ffff:ffff:ffff,UA
2001:67c:558::,2001:67c:558:ffff:ffff:ffff:ffff:ffff,NO
2001:67c:55c::,2001:67c:55c:ffff:ffff:ffff:ffff:ffff,NO
2001:67c:560::,2001:67c:560:ffff:ffff:ffff:ffff:ffff,SE
@@ -793,13 +1055,10 @@
2001:67c:6e8::,2001:67c:6e8:ffff:ffff:ffff:ffff:ffff,SE
2001:67c:6ec::,2001:67c:6ec:ffff:ffff:ffff:ffff:ffff,NL
2001:67c:6f0::,2001:67c:6f0:ffff:ffff:ffff:ffff:ffff,GB
-2001:67c:6f4::,2001:67c:6f4:ffff:ffff:ffff:ffff:ffff,RU
-2001:67c:6f8::,2001:67c:6f8:ffff:ffff:ffff:ffff:ffff,CH
2001:67c:6fc::,2001:67c:6fc:ffff:ffff:ffff:ffff:ffff,DE
2001:67c:700::,2001:67c:700:ffff:ffff:ffff:ffff:ffff,PL
2001:67c:704::,2001:67c:704:ffff:ffff:ffff:ffff:ffff,AT
2001:67c:708::,2001:67c:708:ffff:ffff:ffff:ffff:ffff,CZ
-2001:67c:70c::,2001:67c:70c:ffff:ffff:ffff:ffff:ffff,RU
2001:67c:710::,2001:67c:710:ffff:ffff:ffff:ffff:ffff,PL
2001:67c:714::,2001:67c:714:ffff:ffff:ffff:ffff:ffff,NO
2001:67c:718::,2001:67c:718:ffff:ffff:ffff:ffff:ffff,PL
@@ -824,7 +1083,6 @@
2001:67c:764::,2001:67c:764:ffff:ffff:ffff:ffff:ffff,DE
2001:67c:768::,2001:67c:768:ffff:ffff:ffff:ffff:ffff,PL
2001:67c:76c::,2001:67c:76c:ffff:ffff:ffff:ffff:ffff,DE
-2001:67c:770::,2001:67c:771:ffff:ffff:ffff:ffff:ffff,GB
2001:67c:778::,2001:67c:778:ffff:ffff:ffff:ffff:ffff,PL
2001:67c:77c::,2001:67c:77c:ffff:ffff:ffff:ffff:ffff,NL
2001:67c:784::,2001:67c:784:ffff:ffff:ffff:ffff:ffff,RU
@@ -880,6 +1138,7 @@
2001:67c:107c::,2001:67c:107c:ffff:ffff:ffff:ffff:ffff,SE
2001:67c:1080::,2001:67c:1080:ffff:ffff:ffff:ffff:ffff,NL
2001:67c:1084::,2001:67c:1084:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:1088::,2001:67c:1089:ffff:ffff:ffff:ffff:ffff,GB
2001:67c:1090::,2001:67c:1090:ffff:ffff:ffff:ffff:ffff,CH
2001:67c:1098::,2001:67c:1098:ffff:ffff:ffff:ffff:ffff,GB
2001:67c:109c::,2001:67c:109c:ffff:ffff:ffff:ffff:ffff,GB
@@ -967,12 +1226,11 @@
2001:67c:1200::,2001:67c:1203:ffff:ffff:ffff:ffff:ffff,FR
2001:67c:1210::,2001:67c:1213:ffff:ffff:ffff:ffff:ffff,RU
2001:67c:1220::,2001:67c:1223:ffff:ffff:ffff:ffff:ffff,CZ
-2001:67c:1230::,2001:67c:1233:ffff:ffff:ffff:ffff:ffff,CH
+2001:67c:1230::,2001:67c:1233:ffff:ffff:ffff:ffff:ffff,US
2001:67c:1240::,2001:67c:1240:ffff:ffff:ffff:ffff:ffff,IE
2001:67c:1244::,2001:67c:1244:ffff:ffff:ffff:ffff:ffff,SE
2001:67c:1248::,2001:67c:1248:ffff:ffff:ffff:ffff:ffff,RO
2001:67c:124c::,2001:67c:124c:ffff:ffff:ffff:ffff:ffff,SE
-2001:67c:1250::,2001:67c:1250:ffff:ffff:ffff:ffff:ffff,LU
2001:67c:1254::,2001:67c:1254:ffff:ffff:ffff:ffff:ffff,FR
2001:67c:125c::,2001:67c:125c:ffff:ffff:ffff:ffff:ffff,UA
2001:67c:1260::,2001:67c:1260:ffff:ffff:ffff:ffff:ffff,CZ
@@ -1001,7 +1259,6 @@
2001:67c:12cc::,2001:67c:12cc:ffff:ffff:ffff:ffff:ffff,NL
2001:67c:12d0::,2001:67c:12d0:ffff:ffff:ffff:ffff:ffff,SI
2001:67c:12d4::,2001:67c:12d4:ffff:ffff:ffff:ffff:ffff,GB
-2001:67c:12d8::,2001:67c:12d8:ffff:ffff:ffff:ffff:ffff,PL
2001:67c:12dc::,2001:67c:12dc:ffff:ffff:ffff:ffff:ffff,GB
2001:67c:12e0::,2001:67c:12e0:ffff:ffff:ffff:ffff:ffff,UA
2001:67c:12e4::,2001:67c:12e4:ffff:ffff:ffff:ffff:ffff,SA
@@ -1070,7 +1327,6 @@
2001:67c:13f4::,2001:67c:13f4:ffff:ffff:ffff:ffff:ffff,SE
2001:67c:13f8::,2001:67c:13f8:ffff:ffff:ffff:ffff:ffff,AT
2001:67c:1400::,2001:67c:1407:ffff:ffff:ffff:ffff:ffff,DE
-2001:67c:1420::,2001:67c:1427:ffff:ffff:ffff:ffff:ffff,DE
2001:67c:1440::,2001:67c:1447:ffff:ffff:ffff:ffff:ffff,RU
2001:67c:1460::,2001:67c:1467:ffff:ffff:ffff:ffff:ffff,DE
2001:67c:1480::,2001:67c:1480:ffff:ffff:ffff:ffff:ffff,CZ
@@ -1110,7 +1366,6 @@
2001:67c:1534::,2001:67c:1534:ffff:ffff:ffff:ffff:ffff,SE
2001:67c:1538::,2001:67c:1538:ffff:ffff:ffff:ffff:ffff,GB
2001:67c:153c::,2001:67c:153c:ffff:ffff:ffff:ffff:ffff,SE
-2001:67c:1540::,2001:67c:1540:ffff:ffff:ffff:ffff:ffff,RO
2001:67c:1544::,2001:67c:1544:ffff:ffff:ffff:ffff:ffff,SE
2001:67c:154c::,2001:67c:154c:ffff:ffff:ffff:ffff:ffff,SE
2001:67c:1554::,2001:67c:1554:ffff:ffff:ffff:ffff:ffff,TR
@@ -1151,7 +1406,6 @@
2001:67c:1640::,2001:67c:164f:ffff:ffff:ffff:ffff:ffff,NO
2001:67c:1680::,2001:67c:1680:ffff:ffff:ffff:ffff:ffff,GB
2001:67c:1684::,2001:67c:1684:ffff:ffff:ffff:ffff:ffff,SI
-2001:67c:1688::,2001:67c:1688:ffff:ffff:ffff:ffff:ffff,UA
2001:67c:168c::,2001:67c:168c:ffff:ffff:ffff:ffff:ffff,AT
2001:67c:1690::,2001:67c:1690:ffff:ffff:ffff:ffff:ffff,FR
2001:67c:1694::,2001:67c:1694:ffff:ffff:ffff:ffff:ffff,PL
@@ -1171,7 +1425,6 @@
2001:67c:16d0::,2001:67c:16d1:ffff:ffff:ffff:ffff:ffff,GB
2001:67c:16d8::,2001:67c:16d8:ffff:ffff:ffff:ffff:ffff,RO
2001:67c:16dc::,2001:67c:16dc:ffff:ffff:ffff:ffff:ffff,CH
-2001:67c:16e0::,2001:67c:16e0:ffff:ffff:ffff:ffff:ffff,RO
2001:67c:16e4::,2001:67c:16e4:ffff:ffff:ffff:ffff:ffff,HR
2001:67c:16e8::,2001:67c:16e8:ffff:ffff:ffff:ffff:ffff,PL
2001:67c:16ec::,2001:67c:16ec:ffff:ffff:ffff:ffff:ffff,RO
@@ -1190,7 +1443,7 @@
2001:67c:172c::,2001:67c:172c:ffff:ffff:ffff:ffff:ffff,GB
2001:67c:1730::,2001:67c:1730:ffff:ffff:ffff:ffff:ffff,GB
2001:67c:1734::,2001:67c:1734:ffff:ffff:ffff:ffff:ffff,NL
-2001:67c:1738::,2001:67c:1738:ffff:ffff:ffff:ffff:ffff,IL
+2001:67c:1738::,2001:67c:1738:ffff:ffff:ffff:ffff:ffff,UA
2001:67c:173c::,2001:67c:173c:ffff:ffff:ffff:ffff:ffff,DE
2001:67c:1740::,2001:67c:1740:ffff:ffff:ffff:ffff:ffff,FR
2001:67c:1744::,2001:67c:1744:ffff:ffff:ffff:ffff:ffff,DK
@@ -1209,7 +1462,6 @@
2001:67c:177c::,2001:67c:177c:ffff:ffff:ffff:ffff:ffff,LT
2001:67c:1780::,2001:67c:1780:ffff:ffff:ffff:ffff:ffff,CH
2001:67c:1784::,2001:67c:1784:ffff:ffff:ffff:ffff:ffff,SE
-2001:67c:1788::,2001:67c:1788:ffff:ffff:ffff:ffff:ffff,RO
2001:67c:178c::,2001:67c:178c:ffff:ffff:ffff:ffff:ffff,RO
2001:67c:1790::,2001:67c:1790:ffff:ffff:ffff:ffff:ffff,RU
2001:67c:1794::,2001:67c:1794:ffff:ffff:ffff:ffff:ffff,SE
@@ -1256,7 +1508,6 @@
2001:67c:1844::,2001:67c:1844:ffff:ffff:ffff:ffff:ffff,RO
2001:67c:1848::,2001:67c:1848:ffff:ffff:ffff:ffff:ffff,UA
2001:67c:184c::,2001:67c:184c:ffff:ffff:ffff:ffff:ffff,FR
-2001:67c:1850::,2001:67c:1850:ffff:ffff:ffff:ffff:ffff,RU
2001:67c:1854::,2001:67c:1854:ffff:ffff:ffff:ffff:ffff,RO
2001:67c:1858::,2001:67c:1858:ffff:ffff:ffff:ffff:ffff,DK
2001:67c:185c::,2001:67c:185c:ffff:ffff:ffff:ffff:ffff,DK
@@ -1301,12 +1552,12 @@
2001:67c:18fc::,2001:67c:18fc:ffff:ffff:ffff:ffff:ffff,SE
2001:67c:1900::,2001:67c:1903:ffff:ffff:ffff:ffff:ffff,BE
2001:67c:1910::,2001:67c:1910:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:1914::,2001:67c:1914:ffff:ffff:ffff:ffff:ffff,RU
2001:67c:1918::,2001:67c:1918:ffff:ffff:ffff:ffff:ffff,NL
2001:67c:191c::,2001:67c:191c:ffff:ffff:ffff:ffff:ffff,SE
2001:67c:1920::,2001:67c:1920:ffff:ffff:ffff:ffff:ffff,SE
2001:67c:1924::,2001:67c:1924:ffff:ffff:ffff:ffff:ffff,DE
2001:67c:1928::,2001:67c:1928:ffff:ffff:ffff:ffff:ffff,DE
-2001:67c:192c::,2001:67c:192c:ffff:ffff:ffff:ffff:ffff,RO
2001:67c:1930::,2001:67c:1933:ffff:ffff:ffff:ffff:ffff,AT
2001:67c:1940::,2001:67c:1940:ffff:ffff:ffff:ffff:ffff,GB
2001:67c:1944::,2001:67c:1944:ffff:ffff:ffff:ffff:ffff,DE
@@ -1344,18 +1595,15 @@
2001:67c:19d4::,2001:67c:19d4:ffff:ffff:ffff:ffff:ffff,RU
2001:67c:19d8::,2001:67c:19d8:ffff:ffff:ffff:ffff:ffff,SI
2001:67c:19dc::,2001:67c:19dc:ffff:ffff:ffff:ffff:ffff,SE
-2001:67c:19e0::,2001:67c:19e0:ffff:ffff:ffff:ffff:ffff,RO
2001:67c:19e4::,2001:67c:19e4:ffff:ffff:ffff:ffff:ffff,RO
2001:67c:19e8::,2001:67c:19e8:ffff:ffff:ffff:ffff:ffff,TR
2001:67c:19ec::,2001:67c:19ec:ffff:ffff:ffff:ffff:ffff,DE
2001:67c:19f0::,2001:67c:19f0:ffff:ffff:ffff:ffff:ffff,RU
2001:67c:19f4::,2001:67c:19f4:ffff:ffff:ffff:ffff:ffff,RU
2001:67c:19f8::,2001:67c:19f8:ffff:ffff:ffff:ffff:ffff,RU
-2001:67c:19fc::,2001:67c:19fc:ffff:ffff:ffff:ffff:ffff,CH
2001:67c:1a00::,2001:67c:1a3f:ffff:ffff:ffff:ffff:ffff,NL
2001:67c:1b00::,2001:67c:1b00:ffff:ffff:ffff:ffff:ffff,RU
2001:67c:1b04::,2001:67c:1b04:ffff:ffff:ffff:ffff:ffff,RU
-2001:67c:1b08::,2001:67c:1b08:ffff:ffff:ffff:ffff:ffff,CZ
2001:67c:1b0c::,2001:67c:1b0c:ffff:ffff:ffff:ffff:ffff,SA
2001:67c:1b10::,2001:67c:1b10:ffff:ffff:ffff:ffff:ffff,RU
2001:67c:1b14::,2001:67c:1b14:ffff:ffff:ffff:ffff:ffff,SE
@@ -1586,7 +1834,7 @@
2001:67c:2320::,2001:67c:2320:ffff:ffff:ffff:ffff:ffff,NO
2001:67c:2324::,2001:67c:2324:ffff:ffff:ffff:ffff:ffff,SI
2001:67c:2328::,2001:67c:2328:ffff:ffff:ffff:ffff:ffff,AT
-2001:67c:232c::,2001:67c:232c:ffff:ffff:ffff:ffff:ffff,LV
+2001:67c:232c::,2001:67c:232c:ffff:ffff:ffff:ffff:ffff,SE
2001:67c:2330::,2001:67c:2330:ffff:ffff:ffff:ffff:ffff,AT
2001:67c:2334::,2001:67c:2334:ffff:ffff:ffff:ffff:ffff,DE
2001:67c:2338::,2001:67c:2338:ffff:ffff:ffff:ffff:ffff,DE
@@ -1671,13 +1919,11 @@
2001:67c:24ac::,2001:67c:24ac:ffff:ffff:ffff:ffff:ffff,GB
2001:67c:24b4::,2001:67c:24b4:ffff:ffff:ffff:ffff:ffff,NL
2001:67c:24b8::,2001:67c:24b8:ffff:ffff:ffff:ffff:ffff,SE
-2001:67c:24bc::,2001:67c:24bc:ffff:ffff:ffff:ffff:ffff,SE
2001:67c:24c4::,2001:67c:24c4:ffff:ffff:ffff:ffff:ffff,RO
2001:67c:24c8::,2001:67c:24c8:ffff:ffff:ffff:ffff:ffff,RU
2001:67c:24cc::,2001:67c:24cc:ffff:ffff:ffff:ffff:ffff,PL
2001:67c:24d0::,2001:67c:24d0:ffff:ffff:ffff:ffff:ffff,RU
2001:67c:24d4::,2001:67c:24d4:ffff:ffff:ffff:ffff:ffff,GB
-2001:67c:24d8::,2001:67c:24d8:ffff:ffff:ffff:ffff:ffff,SE
2001:67c:24dc::,2001:67c:24dc:ffff:ffff:ffff:ffff:ffff,SI
2001:67c:24e0::,2001:67c:24e0:ffff:ffff:ffff:ffff:ffff,DK
2001:67c:24e4::,2001:67c:24e4:ffff:ffff:ffff:ffff:ffff,NO
@@ -1755,7 +2001,6 @@
2001:67c:265c::,2001:67c:265c:ffff:ffff:ffff:ffff:ffff,DE
2001:67c:2660::,2001:67c:2660:ffff:ffff:ffff:ffff:ffff,GB
2001:67c:2664::,2001:67c:2664:ffff:ffff:ffff:ffff:ffff,DK
-2001:67c:2668::,2001:67c:2668:ffff:ffff:ffff:ffff:ffff,DK
2001:67c:266c::,2001:67c:266c:ffff:ffff:ffff:ffff:ffff,SE
2001:67c:2670::,2001:67c:2670:ffff:ffff:ffff:ffff:ffff,SK
2001:67c:2674::,2001:67c:2674:ffff:ffff:ffff:ffff:ffff,DE
@@ -1846,7 +2091,6 @@
2001:67c:2808::,2001:67c:2808:ffff:ffff:ffff:ffff:ffff,PL
2001:67c:280c::,2001:67c:280c:ffff:ffff:ffff:ffff:ffff,FR
2001:67c:2810::,2001:67c:2810:ffff:ffff:ffff:ffff:ffff,DK
-2001:67c:2814::,2001:67c:2814:ffff:ffff:ffff:ffff:ffff,LI
2001:67c:2818::,2001:67c:2818:ffff:ffff:ffff:ffff:ffff,DE
2001:67c:281c::,2001:67c:281c:ffff:ffff:ffff:ffff:ffff,NL
2001:67c:2820::,2001:67c:2820:ffff:ffff:ffff:ffff:ffff,AT
@@ -1897,7 +2141,6 @@
2001:67c:28e8::,2001:67c:28e8:ffff:ffff:ffff:ffff:ffff,SE
2001:67c:28f0::,2001:67c:28f0:ffff:ffff:ffff:ffff:ffff,NL
2001:67c:28f4::,2001:67c:28f4:ffff:ffff:ffff:ffff:ffff,SI
-2001:67c:28f8::,2001:67c:28f8:ffff:ffff:ffff:ffff:ffff,BE
2001:67c:28fc::,2001:67c:28fc:ffff:ffff:ffff:ffff:ffff,NL
2001:67c:2900::,2001:67c:291f:ffff:ffff:ffff:ffff:ffff,NL
2001:67c:2980::,2001:67c:2980:ffff:ffff:ffff:ffff:ffff,NL
@@ -2057,6 +2300,132 @@
2001:67c:2c28::,2001:67c:2c28:ffff:ffff:ffff:ffff:ffff,CH
2001:67c:2c2c::,2001:67c:2c2c:ffff:ffff:ffff:ffff:ffff,HU
2001:67c:2c30::,2001:67c:2c30:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:2c34::,2001:67c:2c34:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:2c38::,2001:67c:2c38:ffff:ffff:ffff:ffff:ffff,CH
+2001:67c:2c3c::,2001:67c:2c3c:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:2c40::,2001:67c:2c40:ffff:ffff:ffff:ffff:ffff,CH
+2001:67c:2c44::,2001:67c:2c44:ffff:ffff:ffff:ffff:ffff,UA
+2001:67c:2c48::,2001:67c:2c48:ffff:ffff:ffff:ffff:ffff,PL
+2001:67c:2c4c::,2001:67c:2c4c:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:2c50::,2001:67c:2c50:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:2c54::,2001:67c:2c54:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:2c58::,2001:67c:2c58:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:2c5c::,2001:67c:2c5c:ffff:ffff:ffff:ffff:ffff,RU
+2001:67c:2c60::,2001:67c:2c60:ffff:ffff:ffff:ffff:ffff,BE
+2001:67c:2c64::,2001:67c:2c64:ffff:ffff:ffff:ffff:ffff,PL
+2001:67c:2c68::,2001:67c:2c68:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:2c6c::,2001:67c:2c6c:ffff:ffff:ffff:ffff:ffff,RU
+2001:67c:2c70::,2001:67c:2c70:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:2c74::,2001:67c:2c74:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:2c78::,2001:67c:2c78:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:2c7c::,2001:67c:2c7c:ffff:ffff:ffff:ffff:ffff,CH
+2001:67c:2c80::,2001:67c:2c80:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:2c84::,2001:67c:2c84:ffff:ffff:ffff:ffff:ffff,BE
+2001:67c:2c88::,2001:67c:2c89:ffff:ffff:ffff:ffff:ffff,BG
+2001:67c:2c90::,2001:67c:2c93:ffff:ffff:ffff:ffff:ffff,BG
+2001:67c:2ca0::,2001:67c:2ca7:ffff:ffff:ffff:ffff:ffff,BE
+2001:67c:2cc0::,2001:67c:2cc0:ffff:ffff:ffff:ffff:ffff,CZ
+2001:67c:2cc4::,2001:67c:2cc4:ffff:ffff:ffff:ffff:ffff,RU
+2001:67c:2cc8::,2001:67c:2cc8:ffff:ffff:ffff:ffff:ffff,UA
+2001:67c:2ccc::,2001:67c:2ccc:ffff:ffff:ffff:ffff:ffff,CH
+2001:67c:2cd0::,2001:67c:2cd0:ffff:ffff:ffff:ffff:ffff,GB
+2001:67c:2cd4::,2001:67c:2cd4:ffff:ffff:ffff:ffff:ffff,PL
+2001:67c:2cd8::,2001:67c:2cd8:ffff:ffff:ffff:ffff:ffff,SK
+2001:67c:2cdc::,2001:67c:2cdc:ffff:ffff:ffff:ffff:ffff,RU
+2001:67c:2ce0::,2001:67c:2ce0:ffff:ffff:ffff:ffff:ffff,PL
+2001:67c:2ce4::,2001:67c:2ce4:ffff:ffff:ffff:ffff:ffff,BG
+2001:67c:2ce8::,2001:67c:2ce8:ffff:ffff:ffff:ffff:ffff,FI
+2001:67c:2cec::,2001:67c:2cec:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:2cf0::,2001:67c:2cf0:ffff:ffff:ffff:ffff:ffff,NO
+2001:67c:2cf4::,2001:67c:2cf4:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:2cf8::,2001:67c:2cf8:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:2cfc::,2001:67c:2cfc:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:2d00::,2001:67c:2d00:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:2d04::,2001:67c:2d04:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:2d08::,2001:67c:2d08:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:2d0c::,2001:67c:2d0c:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:2d10::,2001:67c:2d10:ffff:ffff:ffff:ffff:ffff,NL
+2001:67c:2d18::,2001:67c:2d19:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:2d20::,2001:67c:2d20:ffff:ffff:ffff:ffff:ffff,UA
+2001:67c:2d24::,2001:67c:2d24:ffff:ffff:ffff:ffff:ffff,PL
+2001:67c:2d28::,2001:67c:2d28:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:2d2c::,2001:67c:2d2c:ffff:ffff:ffff:ffff:ffff,CZ
+2001:67c:2d30::,2001:67c:2d30:ffff:ffff:ffff:ffff:ffff,CZ
+2001:67c:2d34::,2001:67c:2d34:ffff:ffff:ffff:ffff:ffff,CZ
+2001:67c:2d38::,2001:67c:2d38:ffff:ffff:ffff:ffff:ffff,CZ
+2001:67c:2d3c::,2001:67c:2d3c:ffff:ffff:ffff:ffff:ffff,GB
+2001:67c:2d40::,2001:67c:2d40:ffff:ffff:ffff:ffff:ffff,UA
+2001:67c:2d44::,2001:67c:2d44:ffff:ffff:ffff:ffff:ffff,PT
+2001:67c:2d48::,2001:67c:2d48:ffff:ffff:ffff:ffff:ffff,FR
+2001:67c:2d4c::,2001:67c:2d4c:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:2d50::,2001:67c:2d50:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:2d54::,2001:67c:2d54:ffff:ffff:ffff:ffff:ffff,NL
+2001:67c:2d58::,2001:67c:2d58:ffff:ffff:ffff:ffff:ffff,AT
+2001:67c:2d5c::,2001:67c:2d5c:ffff:ffff:ffff:ffff:ffff,RO
+2001:67c:2d60::,2001:67c:2d60:ffff:ffff:ffff:ffff:ffff,DK
+2001:67c:2d64::,2001:67c:2d64:ffff:ffff:ffff:ffff:ffff,BE
+2001:67c:2d68::,2001:67c:2d68:ffff:ffff:ffff:ffff:ffff,NO
+2001:67c:2d6c::,2001:67c:2d6c:ffff:ffff:ffff:ffff:ffff,FI
+2001:67c:2d70::,2001:67c:2d70:ffff:ffff:ffff:ffff:ffff,CH
+2001:67c:2d74::,2001:67c:2d74:ffff:ffff:ffff:ffff:ffff,FI
+2001:67c:2d78::,2001:67c:2d78:ffff:ffff:ffff:ffff:ffff,NL
+2001:67c:2d7c::,2001:67c:2d7c:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:2d80::,2001:67c:2d80:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:2d84::,2001:67c:2d84:ffff:ffff:ffff:ffff:ffff,GB
+2001:67c:2d88::,2001:67c:2d88:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:2d8c::,2001:67c:2d8c:ffff:ffff:ffff:ffff:ffff,CH
+2001:67c:2d90::,2001:67c:2d90:ffff:ffff:ffff:ffff:ffff,CZ
+2001:67c:2d94::,2001:67c:2d94:ffff:ffff:ffff:ffff:ffff,RU
+2001:67c:2d98::,2001:67c:2d98:ffff:ffff:ffff:ffff:ffff,PL
+2001:67c:2d9c::,2001:67c:2d9c:ffff:ffff:ffff:ffff:ffff,UA
+2001:67c:2da0::,2001:67c:2da0:ffff:ffff:ffff:ffff:ffff,RU
+2001:67c:2da4::,2001:67c:2da4:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:2da8::,2001:67c:2da8:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:2dac::,2001:67c:2dac:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:2db0::,2001:67c:2db0:ffff:ffff:ffff:ffff:ffff,IT
+2001:67c:2db4::,2001:67c:2db4:ffff:ffff:ffff:ffff:ffff,RO
+2001:67c:2dbc::,2001:67c:2dbc:ffff:ffff:ffff:ffff:ffff,IL
+2001:67c:2dc0::,2001:67c:2dc0:ffff:ffff:ffff:ffff:ffff,LI
+2001:67c:2dc4::,2001:67c:2dc4:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:2dc8::,2001:67c:2dc8:ffff:ffff:ffff:ffff:ffff,NL
+2001:67c:2dcc::,2001:67c:2dcc:ffff:ffff:ffff:ffff:ffff,RU
+2001:67c:2dd0::,2001:67c:2dd0:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:2dd4::,2001:67c:2dd4:ffff:ffff:ffff:ffff:ffff,RU
+2001:67c:2dd8::,2001:67c:2dd8:ffff:ffff:ffff:ffff:ffff,SI
+2001:67c:2ddc::,2001:67c:2ddc:ffff:ffff:ffff:ffff:ffff,PL
+2001:67c:2de0::,2001:67c:2de0:ffff:ffff:ffff:ffff:ffff,SI
+2001:67c:2de4::,2001:67c:2de4:ffff:ffff:ffff:ffff:ffff,CH
+2001:67c:2de8::,2001:67c:2de8:ffff:ffff:ffff:ffff:ffff,CH
+2001:67c:2dec::,2001:67c:2dec:ffff:ffff:ffff:ffff:ffff,RU
+2001:67c:2df0::,2001:67c:2df0:ffff:ffff:ffff:ffff:ffff,BG
+2001:67c:2df4::,2001:67c:2df4:ffff:ffff:ffff:ffff:ffff,RU
+2001:67c:2df8::,2001:67c:2df8:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:2dfc::,2001:67c:2dfc:ffff:ffff:ffff:ffff:ffff,UA
+2001:67c:2e00::,2001:67c:2e00:ffff:ffff:ffff:ffff:ffff,RU
+2001:67c:2e04::,2001:67c:2e04:ffff:ffff:ffff:ffff:ffff,RU
+2001:67c:2e08::,2001:67c:2e08:ffff:ffff:ffff:ffff:ffff,UA
+2001:67c:2e0c::,2001:67c:2e0c:ffff:ffff:ffff:ffff:ffff,NL
+2001:67c:2e10::,2001:67c:2e10:ffff:ffff:ffff:ffff:ffff,AT
+2001:67c:2e14::,2001:67c:2e14:ffff:ffff:ffff:ffff:ffff,AT
+2001:67c:2e18::,2001:67c:2e18:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:2e1c::,2001:67c:2e1c:ffff:ffff:ffff:ffff:ffff,BE
+2001:67c:2e24::,2001:67c:2e24:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:2e28::,2001:67c:2e28:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:2e2c::,2001:67c:2e2c:ffff:ffff:ffff:ffff:ffff,AT
+2001:67c:2e30::,2001:67c:2e30:ffff:ffff:ffff:ffff:ffff,FI
+2001:67c:2e34::,2001:67c:2e34:ffff:ffff:ffff:ffff:ffff,UA
+2001:67c:2e38::,2001:67c:2e38:ffff:ffff:ffff:ffff:ffff,CH
+2001:67c:2e3c::,2001:67c:2e3c:ffff:ffff:ffff:ffff:ffff,PL
+2001:67c:2e40::,2001:67c:2e40:ffff:ffff:ffff:ffff:ffff,RU
+2001:67c:2e44::,2001:67c:2e44:ffff:ffff:ffff:ffff:ffff,NO
+2001:67c:2e48::,2001:67c:2e48:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:2e4c::,2001:67c:2e4c:ffff:ffff:ffff:ffff:ffff,RU
+2001:67c:2e50::,2001:67c:2e50:ffff:ffff:ffff:ffff:ffff,PL
+2001:67c:2e54::,2001:67c:2e54:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:2e58::,2001:67c:2e58:ffff:ffff:ffff:ffff:ffff,UA
+2001:67c:2e5c::,2001:67c:2e5c:ffff:ffff:ffff:ffff:ffff,FR
+2001:67c:2e60::,2001:67c:2e60:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:2e68::,2001:67c:2e69:ffff:ffff:ffff:ffff:ffff,FR
2001:680::,2001:680:ffff:ffff:ffff:ffff:ffff:ffff,DE
2001:688::,2001:688:ffff:ffff:ffff:ffff:ffff:ffff,FR
2001:690::,2001:697:ffff:ffff:ffff:ffff:ffff:ffff,PT
@@ -2070,7 +2439,29 @@
2001:6e0::,2001:6e0:ffff:ffff:ffff:ffff:ffff:ffff,NL
2001:6e8::,2001:6ef:ffff:ffff:ffff:ffff:ffff:ffff,FI
2001:6f0::,2001:6f7:ffff:ffff:ffff:ffff:ffff:ffff,SE
-2001:6f8::,2001:6f8:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2001:6f8::,2001:6f8:8ff:ffff:ffff:ffff:ffff:ffff,GB
+2001:6f8:900::,2001:6f8:900:7fff:ffff:ffff:ffff:ffff,DE
+2001:6f8:900:8000::,2001:6f8:900:8fff:ffff:ffff:ffff:ffff,GB
+2001:6f8:900:9000::,2001:6f8:900:9fff:ffff:ffff:ffff:ffff,DE
+2001:6f8:900:a000::,2001:6f8:91c:ffff:ffff:ffff:ffff:ffff,GB
+2001:6f8:91d::,2001:6f8:91d:ffff:ffff:ffff:ffff:ffff,DE
+2001:6f8:91e::,2001:6f8:11ab:ffff:ffff:ffff:ffff:ffff,GB
+2001:6f8:11ac::,2001:6f8:11ac:ffff:ffff:ffff:ffff:ffff,DE
+2001:6f8:11ad::,2001:6f8:11b1:ffff:ffff:ffff:ffff:ffff,GB
+2001:6f8:11b2::,2001:6f8:11b2:ffff:ffff:ffff:ffff:ffff,AT
+2001:6f8:11b3::,2001:6f8:12c9:ffff:ffff:ffff:ffff:ffff,GB
+2001:6f8:12ca::,2001:6f8:12ca:ffff:ffff:ffff:ffff:ffff,DE
+2001:6f8:12cb::,2001:6f8:12d8:ffff:ffff:ffff:ffff:ffff,GB
+2001:6f8:12d9::,2001:6f8:12d9:ffff:ffff:ffff:ffff:ffff,DE
+2001:6f8:12da::,2001:6f8:13e0:ffff:ffff:ffff:ffff:ffff,GB
+2001:6f8:13e1::,2001:6f8:13e1:ffff:ffff:ffff:ffff:ffff,DE
+2001:6f8:13e2::,2001:6f8:1c00:7fff:ffff:ffff:ffff:ffff,GB
+2001:6f8:1c00:8000::,2001:6f8:1c00:83ff:ffff:ffff:ffff:ffff,DE
+2001:6f8:1c00:8400::,2001:6f8:1cba:ffff:ffff:ffff:ffff:ffff,GB
+2001:6f8:1cbb::,2001:6f8:1cbb:ffff:ffff:ffff:ffff:ffff,DE
+2001:6f8:1cbc::,2001:6f8:1d69:ffff:ffff:ffff:ffff:ffff,GB
+2001:6f8:1d6a::,2001:6f8:1d6a:ffff:ffff:ffff:ffff:ffff,DE
+2001:6f8:1d6b::,2001:6f8:ffff:ffff:ffff:ffff:ffff:ffff,GB
2001:700::,2001:700:ffff:ffff:ffff:ffff:ffff:ffff,NO
2001:708::,2001:708:ffff:ffff:ffff:ffff:ffff:ffff,FI
2001:710::,2001:710:ffff:ffff:ffff:ffff:ffff:ffff,GB
@@ -2115,6 +2506,7 @@
2001:7f8:e::,2001:7f8:e:ffff:ffff:ffff:ffff:ffff,NL
2001:7f8:f::,2001:7f8:f:ffff:ffff:ffff:ffff:ffff,ES
2001:7f8:10::,2001:7f8:10:ffff:ffff:ffff:ffff:ffff,IT
+2001:7f8:11::,2001:7f8:11:ffff:ffff:ffff:ffff:ffff,AT
2001:7f8:12::,2001:7f8:12:ffff:ffff:ffff:ffff:ffff,NO
2001:7f8:13::,2001:7f8:13:ffff:ffff:ffff:ffff:ffff,NL
2001:7f8:14::,2001:7f8:14:ffff:ffff:ffff:ffff:ffff,CZ
@@ -2217,8 +2609,20 @@
2001:7f8:88::,2001:7f8:89:ffff:ffff:ffff:ffff:ffff,FR
2001:7f8:8a::,2001:7f8:8a:ffff:ffff:ffff:ffff:ffff,PL
2001:7f8:8b::,2001:7f8:8b:ffff:ffff:ffff:ffff:ffff,BY
+2001:7f8:8c::,2001:7f8:8c:ffff:ffff:ffff:ffff:ffff,GB
2001:7f8:8d::,2001:7f8:8d:ffff:ffff:ffff:ffff:ffff,AT
2001:7f8:8e::,2001:7f8:8e:ffff:ffff:ffff:ffff:ffff,BG
+2001:7f8:8f::,2001:7f8:8f:ffff:ffff:ffff:ffff:ffff,NL
+2001:7f8:90::,2001:7f8:90:ffff:ffff:ffff:ffff:ffff,GB
+2001:7f8:91::,2001:7f8:91:ffff:ffff:ffff:ffff:ffff,SK
+2001:7f8:92::,2001:7f8:92:ffff:ffff:ffff:ffff:ffff,DE
+2001:7f8:93::,2001:7f8:93:ffff:ffff:ffff:ffff:ffff,AT
+2001:7f8:94::,2001:7f8:94:ffff:ffff:ffff:ffff:ffff,AM
+2001:7f8:97::,2001:7f8:97:ffff:ffff:ffff:ffff:ffff,RO
+2001:7f8:98::,2001:7f8:98:ffff:ffff:ffff:ffff:ffff,BG
+2001:7f8:99::,2001:7f8:99:ffff:ffff:ffff:ffff:ffff,FR
+2001:7f8:9a::,2001:7f8:9a:ffff:ffff:ffff:ffff:ffff,RU
+2001:7f8:9b::,2001:7f8:9b:ffff:ffff:ffff:ffff:ffff,PL
2001:7fa:0:1::,2001:7fa::1:ffff:ffff:ffff:ffff,HK
2001:7fa:0:2::,2001:7fa::2:ffff:ffff:ffff:ffff,KR
2001:7fa:0:3::,2001:7fa::3:ffff:ffff:ffff:ffff,JP
@@ -2268,7 +2672,15 @@
2001:908::,2001:908:ffff:ffff:ffff:ffff:ffff:ffff,PL
2001:910::,2001:917:ffff:ffff:ffff:ffff:ffff:ffff,FR
2001:918::,2001:918:ffff:ffff:ffff:ffff:ffff:ffff,CH
-2001:920::,2001:927:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2001:920::,2001:920:187f:ffff:ffff:ffff:ffff:ffff,GB
+2001:920:1880::,2001:920:1880:ffff:ffff:ffff:ffff:ffff,DE
+2001:920:1881::,2001:920:18ad:ffff:ffff:ffff:ffff:ffff,GB
+2001:920:18ae::,2001:920:18ae:ffff:ffff:ffff:ffff:ffff,DE
+2001:920:18af::,2001:920:18bf:ffff:ffff:ffff:ffff:ffff,GB
+2001:920:18c0::,2001:920:18c1:ffff:ffff:ffff:ffff:ffff,DE
+2001:920:18c2::,2001:920:5809:ffff:ffff:ffff:ffff:ffff,GB
+2001:920:580a::,2001:920:580a:ffff:ffff:ffff:ffff:ffff,ES
+2001:920:580b::,2001:927:ffff:ffff:ffff:ffff:ffff:ffff,GB
2001:928::,2001:928:ffff:ffff:ffff:ffff:ffff:ffff,DE
2001:930::,2001:930:ffff:ffff:ffff:ffff:ffff:ffff,TR
2001:938::,2001:938:ffff:ffff:ffff:ffff:ffff:ffff,AT
@@ -2278,7 +2690,11 @@
2001:958::,2001:958:ffff:ffff:ffff:ffff:ffff:ffff,GB
2001:960::,2001:960:ffff:ffff:ffff:ffff:ffff:ffff,NL
2001:968::,2001:968:ffff:ffff:ffff:ffff:ffff:ffff,NL
-2001:978::,2001:978:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2001:978::,2001:978:1200:ffff:ffff:ffff:ffff:ffff,DE
+2001:978:1201::,2001:978:1201:ffff:ffff:ffff:ffff:ffff,ES
+2001:978:1202::,2001:978:29ff:ffff:ffff:ffff:ffff:ffff,DE
+2001:978:2a00::,2001:978:2a00:ffff:ffff:ffff:ffff:ffff,IE
+2001:978:2a01::,2001:978:ffff:ffff:ffff:ffff:ffff:ffff,DE
2001:980::,2001:987:ffff:ffff:ffff:ffff:ffff:ffff,NL
2001:988::,2001:988:ffff:ffff:ffff:ffff:ffff:ffff,FR
2001:990::,2001:990:ffff:ffff:ffff:ffff:ffff:ffff,NL
@@ -2329,7 +2745,6 @@
2001:b20::,2001:b20:ffff:ffff:ffff:ffff:ffff:ffff,LU
2001:b28::,2001:b28:ffff:ffff:ffff:ffff:ffff:ffff,RU
2001:b30::,2001:b30:ffff:ffff:ffff:ffff:ffff:ffff,RO
-2001:b38::,2001:b38:ffff:ffff:ffff:ffff:ffff:ffff,ES
2001:b40::,2001:b40:ffff:ffff:ffff:ffff:ffff:ffff,IT
2001:b48::,2001:b4f:ffff:ffff:ffff:ffff:ffff:ffff,SE
2001:b50::,2001:b50:ffff:ffff:ffff:ffff:ffff:ffff,DK
@@ -2350,7 +2765,9 @@
2001:bd0::,2001:bd0:ffff:ffff:ffff:ffff:ffff:ffff,GB
2001:be0::,2001:be7:ffff:ffff:ffff:ffff:ffff:ffff,GB
2001:be8::,2001:be8:ffff:ffff:ffff:ffff:ffff:ffff,SE
-2001:bf0::,2001:bf7:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2001:bf0::,2001:bf7:10f:ffff:ffff:ffff:ffff:ffff,DE
+2001:bf7:110::,2001:bf7:110:ffff:ffff:ffff:ffff:ffff,NL
+2001:bf7:111::,2001:bf7:ffff:ffff:ffff:ffff:ffff:ffff,DE
2001:bf8::,2001:bf8:ffff:ffff:ffff:ffff:ffff:ffff,IL
2001:c00::,2001:c00:ffff:ffff:ffff:ffff:ffff:ffff,TH
2001:c08::,2001:c08:ffff:ffff:ffff:ffff:ffff:ffff,TW
@@ -2442,6 +2859,8 @@
2001:dd8:20::,2001:dd8:21:ffff:ffff:ffff:ffff:ffff,IN
2001:dd8:22::,2001:dd8:22:ffff:ffff:ffff:ffff:ffff,JP
2001:dd8:24::,2001:dd8:25:ffff:ffff:ffff:ffff:ffff,NP
+2001:dda::,2001:dda::ffff:ffff:ffff:ffff:ffff,JP
+2001:ddc::,2001:ddc::ffff:ffff:ffff:ffff:ffff,MY
2001:de1::,2001:de1:3f:ffff:ffff:ffff:ffff:ffff,JP
2001:de8::,2001:de8::ffff:ffff:ffff:ffff:ffff,TH
2001:de8:1::,2001:de8:1:ffff:ffff:ffff:ffff:ffff,IN
@@ -2474,6 +2893,7 @@
2001:dec::,2001:dec::ffff:ffff:ffff:ffff:ffff,VU
2001:ded::,2001:ded::ffff:ffff:ffff:ffff:ffff,SG
2001:dee::,2001:dee::ffff:ffff:ffff:ffff:ffff,HK
+2001:def::,2001:def::ffff:ffff:ffff:ffff:ffff,HK
2001:df0::,2001:df0:1:ffff:ffff:ffff:ffff:ffff,NZ
2001:df0:2::,2001:df0:2:ffff:ffff:ffff:ffff:ffff,JP
2001:df0:4::,2001:df0:4:ffff:ffff:ffff:ffff:ffff,NZ
@@ -2804,7 +3224,6 @@
2001:df0:421::,2001:df0:421:ffff:ffff:ffff:ffff:ffff,AU
2001:df0:422::,2001:df0:422:ffff:ffff:ffff:ffff:ffff,IN
2001:df0:423::,2001:df0:423:ffff:ffff:ffff:ffff:ffff,CN
-2001:df0:424::,2001:df0:424:ffff:ffff:ffff:ffff:ffff,AU
2001:df0:425::,2001:df0:425:ffff:ffff:ffff:ffff:ffff,SG
2001:df0:426::,2001:df0:426:ffff:ffff:ffff:ffff:ffff,ID
2001:df0:427::,2001:df0:427:ffff:ffff:ffff:ffff:ffff,MY
@@ -2831,7 +3250,6 @@
2001:df0:456::,2001:df0:456:ffff:ffff:ffff:ffff:ffff,JP
2001:df0:457::,2001:df0:457:ffff:ffff:ffff:ffff:ffff,MY
2001:df0:458::,2001:df0:458:ffff:ffff:ffff:ffff:ffff,IN
-2001:df0:459::,2001:df0:459:ffff:ffff:ffff:ffff:ffff,NZ
2001:df0:45a::,2001:df0:45a:ffff:ffff:ffff:ffff:ffff,IN
2001:df0:45b::,2001:df0:45b:ffff:ffff:ffff:ffff:ffff,AU
2001:df0:45c::,2001:df0:45d:ffff:ffff:ffff:ffff:ffff,IN
@@ -2913,86 +3331,156 @@
2001:df0:fc00::,2001:df0:fc01:ffff:ffff:ffff:ffff:ffff,IN
2001:df1::,2001:df1::ffff:ffff:ffff:ffff:ffff,TH
2001:df1:400::,2001:df1:400:ffff:ffff:ffff:ffff:ffff,BD
-2001:df1:800::,2001:df1:800:ffff:ffff:ffff:ffff:ffff,SG
+2001:df1:800::,2001:df1:801:ffff:ffff:ffff:ffff:ffff,SG
2001:df1:c00::,2001:df1:c00:ffff:ffff:ffff:ffff:ffff,IN
-2001:df1:1000::,2001:df1:1000:ffff:ffff:ffff:ffff:ffff,IN
2001:df1:1400::,2001:df1:1400:ffff:ffff:ffff:ffff:ffff,IN
2001:df1:1800::,2001:df1:1800:ffff:ffff:ffff:ffff:ffff,AU
2001:df1:1c00::,2001:df1:1c00:ffff:ffff:ffff:ffff:ffff,IN
2001:df1:2000::,2001:df1:2000:ffff:ffff:ffff:ffff:ffff,AU
+2001:df1:2400::,2001:df1:2400:ffff:ffff:ffff:ffff:ffff,PH
2001:df1:2800::,2001:df1:2800:ffff:ffff:ffff:ffff:ffff,SG
+2001:df1:2c00::,2001:df1:2c00:ffff:ffff:ffff:ffff:ffff,AU
2001:df1:3000::,2001:df1:3000:ffff:ffff:ffff:ffff:ffff,AU
+2001:df1:3400::,2001:df1:3400:ffff:ffff:ffff:ffff:ffff,BD
2001:df1:3800::,2001:df1:3800:ffff:ffff:ffff:ffff:ffff,NZ
+2001:df1:3c00::,2001:df1:3c00:ffff:ffff:ffff:ffff:ffff,IN
2001:df1:4000::,2001:df1:4000:ffff:ffff:ffff:ffff:ffff,AU
+2001:df1:4400::,2001:df1:4400:ffff:ffff:ffff:ffff:ffff,IN
2001:df1:4800::,2001:df1:4800:ffff:ffff:ffff:ffff:ffff,IN
+2001:df1:4c00::,2001:df1:4c00:ffff:ffff:ffff:ffff:ffff,HK
2001:df1:5000::,2001:df1:5000:ffff:ffff:ffff:ffff:ffff,HK
+2001:df1:5400::,2001:df1:5400:ffff:ffff:ffff:ffff:ffff,KR
2001:df1:5800::,2001:df1:5800:ffff:ffff:ffff:ffff:ffff,BD
+2001:df1:5c00::,2001:df1:5c00:ffff:ffff:ffff:ffff:ffff,ID
2001:df1:6000::,2001:df1:6000:ffff:ffff:ffff:ffff:ffff,SG
+2001:df1:6400::,2001:df1:6400:ffff:ffff:ffff:ffff:ffff,TH
2001:df1:6800::,2001:df1:6800:ffff:ffff:ffff:ffff:ffff,AU
+2001:df1:6c00::,2001:df1:6c00:ffff:ffff:ffff:ffff:ffff,TH
2001:df1:7000::,2001:df1:7000:ffff:ffff:ffff:ffff:ffff,ID
+2001:df1:7400::,2001:df1:7400:ffff:ffff:ffff:ffff:ffff,SG
2001:df1:7800::,2001:df1:7800:ffff:ffff:ffff:ffff:ffff,ID
+2001:df1:7c00::,2001:df1:7c00:ffff:ffff:ffff:ffff:ffff,NZ
2001:df1:8000::,2001:df1:8000:ffff:ffff:ffff:ffff:ffff,IN
+2001:df1:8400::,2001:df1:8400:ffff:ffff:ffff:ffff:ffff,BD
2001:df1:8800::,2001:df1:8800:ffff:ffff:ffff:ffff:ffff,AU
+2001:df1:8c00::,2001:df1:8c00:ffff:ffff:ffff:ffff:ffff,AU
2001:df1:9000::,2001:df1:9000:ffff:ffff:ffff:ffff:ffff,ID
+2001:df1:9400::,2001:df1:9400:ffff:ffff:ffff:ffff:ffff,HK
2001:df1:9800::,2001:df1:9800:ffff:ffff:ffff:ffff:ffff,MY
+2001:df1:9c00::,2001:df1:9c00:ffff:ffff:ffff:ffff:ffff,SG
2001:df1:a000::,2001:df1:a000:ffff:ffff:ffff:ffff:ffff,IN
+2001:df1:a400::,2001:df1:a400:ffff:ffff:ffff:ffff:ffff,BD
2001:df1:a800::,2001:df1:a800:ffff:ffff:ffff:ffff:ffff,SG
+2001:df1:ac00::,2001:df1:ac00:ffff:ffff:ffff:ffff:ffff,HK
2001:df1:b000::,2001:df1:b000:ffff:ffff:ffff:ffff:ffff,TH
+2001:df1:b400::,2001:df1:b400:ffff:ffff:ffff:ffff:ffff,AU
2001:df1:b800::,2001:df1:b800:ffff:ffff:ffff:ffff:ffff,AU
-2001:df1:c000::,2001:df1:c000:ffff:ffff:ffff:ffff:ffff,AU
+2001:df1:bc00::,2001:df1:bc00:ffff:ffff:ffff:ffff:ffff,SG
+2001:df1:c400::,2001:df1:c400:ffff:ffff:ffff:ffff:ffff,AU
2001:df1:c800::,2001:df1:c800:ffff:ffff:ffff:ffff:ffff,HK
+2001:df1:cc00::,2001:df1:cc00:ffff:ffff:ffff:ffff:ffff,AU
2001:df1:d000::,2001:df1:d000:ffff:ffff:ffff:ffff:ffff,AU
+2001:df1:d400::,2001:df1:d400:ffff:ffff:ffff:ffff:ffff,HK
2001:df1:d800::,2001:df1:d800:ffff:ffff:ffff:ffff:ffff,AU
+2001:df1:dc00::,2001:df1:dc00:ffff:ffff:ffff:ffff:ffff,SG
2001:df1:e000::,2001:df1:e000:ffff:ffff:ffff:ffff:ffff,ID
+2001:df1:e400::,2001:df1:e400:ffff:ffff:ffff:ffff:ffff,ID
2001:df1:e800::,2001:df1:e800:ffff:ffff:ffff:ffff:ffff,AU
+2001:df1:ec00::,2001:df1:ec00:ffff:ffff:ffff:ffff:ffff,AU
2001:df1:f000::,2001:df1:f000:ffff:ffff:ffff:ffff:ffff,ID
+2001:df1:f400::,2001:df1:f400:ffff:ffff:ffff:ffff:ffff,HK
2001:df1:f800::,2001:df1:f800:ffff:ffff:ffff:ffff:ffff,BN
+2001:df1:fc00::,2001:df1:fc00:ffff:ffff:ffff:ffff:ffff,MY
2001:df2::,2001:df2::ffff:ffff:ffff:ffff:ffff,AU
+2001:df2:400::,2001:df2:400:ffff:ffff:ffff:ffff:ffff,TH
2001:df2:800::,2001:df2:800:ffff:ffff:ffff:ffff:ffff,AU
-2001:df2:1000::,2001:df2:1000:ffff:ffff:ffff:ffff:ffff,IN
+2001:df2:c00::,2001:df2:c00:ffff:ffff:ffff:ffff:ffff,JP
+2001:df2:1000::,2001:df2:1001:ffff:ffff:ffff:ffff:ffff,IN
+2001:df2:1400::,2001:df2:1400:ffff:ffff:ffff:ffff:ffff,NP
2001:df2:1800::,2001:df2:1803:ffff:ffff:ffff:ffff:ffff,IN
+2001:df2:1c00::,2001:df2:1c00:ffff:ffff:ffff:ffff:ffff,IN
2001:df2:2000::,2001:df2:2000:ffff:ffff:ffff:ffff:ffff,IN
+2001:df2:2400::,2001:df2:2400:ffff:ffff:ffff:ffff:ffff,ID
2001:df2:2800::,2001:df2:2800:ffff:ffff:ffff:ffff:ffff,IN
+2001:df2:2c00::,2001:df2:2c00:ffff:ffff:ffff:ffff:ffff,HK
2001:df2:3000::,2001:df2:3000:ffff:ffff:ffff:ffff:ffff,SG
+2001:df2:3400::,2001:df2:3400:ffff:ffff:ffff:ffff:ffff,NZ
2001:df2:3800::,2001:df2:3800:ffff:ffff:ffff:ffff:ffff,TH
+2001:df2:3c00::,2001:df2:3c07:ffff:ffff:ffff:ffff:ffff,AU
2001:df2:4000::,2001:df2:4000:ffff:ffff:ffff:ffff:ffff,HK
-2001:df2:4800::,2001:df2:4800:ffff:ffff:ffff:ffff:ffff,IN
+2001:df2:4400::,2001:df2:4400:ffff:ffff:ffff:ffff:ffff,AU
+2001:df2:4c00::,2001:df2:4c00:ffff:ffff:ffff:ffff:ffff,ID
2001:df2:5000::,2001:df2:5000:ffff:ffff:ffff:ffff:ffff,IN
+2001:df2:5400::,2001:df2:5400:ffff:ffff:ffff:ffff:ffff,IN
2001:df2:5800::,2001:df2:5800:ffff:ffff:ffff:ffff:ffff,HK
+2001:df2:5c00::,2001:df2:5c00:ffff:ffff:ffff:ffff:ffff,TH
2001:df2:6000::,2001:df2:6000:ffff:ffff:ffff:ffff:ffff,ID
+2001:df2:6400::,2001:df2:6400:ffff:ffff:ffff:ffff:ffff,IN
2001:df2:6800::,2001:df2:6800:ffff:ffff:ffff:ffff:ffff,PH
+2001:df2:6c00::,2001:df2:6c00:ffff:ffff:ffff:ffff:ffff,IN
2001:df2:7000::,2001:df2:7000:ffff:ffff:ffff:ffff:ffff,IN
+2001:df2:7400::,2001:df2:7400:ffff:ffff:ffff:ffff:ffff,HK
2001:df2:7800::,2001:df2:7800:ffff:ffff:ffff:ffff:ffff,AU
+2001:df2:7c00::,2001:df2:7c00:ffff:ffff:ffff:ffff:ffff,NZ
2001:df2:8000::,2001:df2:8000:ffff:ffff:ffff:ffff:ffff,BN
+2001:df2:8400::,2001:df2:8400:ffff:ffff:ffff:ffff:ffff,NZ
2001:df2:8800::,2001:df2:8800:ffff:ffff:ffff:ffff:ffff,IN
-2001:df2:9000::,2001:df2:9000:ffff:ffff:ffff:ffff:ffff,AU
+2001:df2:8c00::,2001:df2:8c00:ffff:ffff:ffff:ffff:ffff,HK
+2001:df2:9400::,2001:df2:9400:ffff:ffff:ffff:ffff:ffff,AU
2001:df2:9800::,2001:df2:9803:ffff:ffff:ffff:ffff:ffff,IN
2001:df2:a000::,2001:df2:a000:ffff:ffff:ffff:ffff:ffff,ID
+2001:df2:a400::,2001:df2:a400:ffff:ffff:ffff:ffff:ffff,MY
2001:df2:a800::,2001:df2:a800:ffff:ffff:ffff:ffff:ffff,IN
+2001:df2:ac00::,2001:df2:ac00:ffff:ffff:ffff:ffff:ffff,TH
2001:df2:b000::,2001:df2:b000:ffff:ffff:ffff:ffff:ffff,IN
+2001:df2:b400::,2001:df2:b400:ffff:ffff:ffff:ffff:ffff,IN
+2001:df2:bc00::,2001:df2:bc00:ffff:ffff:ffff:ffff:ffff,ID
2001:df2:c000::,2001:df2:c000:ffff:ffff:ffff:ffff:ffff,ID
+2001:df2:c400::,2001:df2:c400:ffff:ffff:ffff:ffff:ffff,AU
2001:df2:c800::,2001:df2:c800:ffff:ffff:ffff:ffff:ffff,AU
+2001:df2:cc00::,2001:df2:cc00:ffff:ffff:ffff:ffff:ffff,ID
2001:df2:d000::,2001:df2:d000:ffff:ffff:ffff:ffff:ffff,HK
+2001:df2:d400::,2001:df2:d400:ffff:ffff:ffff:ffff:ffff,ID
2001:df2:d800::,2001:df2:d800:ffff:ffff:ffff:ffff:ffff,JP
+2001:df2:dc00::,2001:df2:dc00:ffff:ffff:ffff:ffff:ffff,TH
2001:df2:e000::,2001:df2:e000:ffff:ffff:ffff:ffff:ffff,AU
+2001:df2:e400::,2001:df2:e400:ffff:ffff:ffff:ffff:ffff,PH
2001:df2:e800::,2001:df2:e800:ffff:ffff:ffff:ffff:ffff,IN
+2001:df2:ec00::,2001:df2:ec00:ffff:ffff:ffff:ffff:ffff,ID
2001:df2:f000::,2001:df2:f000:ffff:ffff:ffff:ffff:ffff,VN
+2001:df2:f400::,2001:df2:f400:ffff:ffff:ffff:ffff:ffff,HK
2001:df2:f800::,2001:df2:f800:ffff:ffff:ffff:ffff:ffff,IN
+2001:df2:fc00::,2001:df2:fc00:ffff:ffff:ffff:ffff:ffff,JP
2001:df3::,2001:df3::ffff:ffff:ffff:ffff:ffff,MY
+2001:df3:400::,2001:df3:400:ffff:ffff:ffff:ffff:ffff,ID
2001:df3:800::,2001:df3:80f:ffff:ffff:ffff:ffff:ffff,CN
+2001:df3:c00::,2001:df3:c00:ffff:ffff:ffff:ffff:ffff,ID
2001:df3:1000::,2001:df3:1000:ffff:ffff:ffff:ffff:ffff,BD
+2001:df3:1400::,2001:df3:1400:ffff:ffff:ffff:ffff:ffff,AU
2001:df3:1800::,2001:df3:1800:ffff:ffff:ffff:ffff:ffff,ID
+2001:df3:1c00::,2001:df3:1c00:ffff:ffff:ffff:ffff:ffff,AU
2001:df3:2000::,2001:df3:2000:ffff:ffff:ffff:ffff:ffff,ID
+2001:df3:2400::,2001:df3:2400:ffff:ffff:ffff:ffff:ffff,TH
2001:df3:2800::,2001:df3:2800:ffff:ffff:ffff:ffff:ffff,IN
+2001:df3:2c00::,2001:df3:2c00:ffff:ffff:ffff:ffff:ffff,MY
2001:df3:3000::,2001:df3:3000:ffff:ffff:ffff:ffff:ffff,IN
+2001:df3:3400::,2001:df3:3400:ffff:ffff:ffff:ffff:ffff,BD
2001:df3:3800::,2001:df3:3800:ffff:ffff:ffff:ffff:ffff,ID
+2001:df3:3c00::,2001:df3:3c00:ffff:ffff:ffff:ffff:ffff,IN
2001:df3:4000::,2001:df3:4000:ffff:ffff:ffff:ffff:ffff,NZ
+2001:df3:4400::,2001:df3:4400:ffff:ffff:ffff:ffff:ffff,IN
2001:df3:4800::,2001:df3:4800:ffff:ffff:ffff:ffff:ffff,IN
+2001:df3:4c00::,2001:df3:4c00:ffff:ffff:ffff:ffff:ffff,PG
2001:df3:5000::,2001:df3:5000:ffff:ffff:ffff:ffff:ffff,IN
+2001:df3:5400::,2001:df3:5400:ffff:ffff:ffff:ffff:ffff,AU
2001:df3:5800::,2001:df3:5800:ffff:ffff:ffff:ffff:ffff,AU
+2001:df3:5c00::,2001:df3:5c00:ffff:ffff:ffff:ffff:ffff,VN
2001:df3:6000::,2001:df3:6000:ffff:ffff:ffff:ffff:ffff,SG
+2001:df3:6400::,2001:df3:6400:ffff:ffff:ffff:ffff:ffff,NZ
2001:df3:6800::,2001:df3:6800:ffff:ffff:ffff:ffff:ffff,AU
+2001:df3:6c00::,2001:df3:6c00:ffff:ffff:ffff:ffff:ffff,IN
2001:df3:7000::,2001:df3:7000:ffff:ffff:ffff:ffff:ffff,ID
+2001:df3:7400::,2001:df3:7400:ffff:ffff:ffff:ffff:ffff,SG
2001:df3:7800::,2001:df3:7800:ffff:ffff:ffff:ffff:ffff,SG
2001:df3:8000::,2001:df3:8000:ffff:ffff:ffff:ffff:ffff,ID
2001:df3:8800::,2001:df3:8800:ffff:ffff:ffff:ffff:ffff,IN
@@ -3051,7 +3539,6 @@
2001:df5:3800::,2001:df5:3800:ffff:ffff:ffff:ffff:ffff,IN
2001:df5:4000::,2001:df5:4000:ffff:ffff:ffff:ffff:ffff,ID
2001:df5:4800::,2001:df5:4800:ffff:ffff:ffff:ffff:ffff,BN
-2001:df5:5000::,2001:df5:5000:ffff:ffff:ffff:ffff:ffff,ID
2001:df5:5800::,2001:df5:5800:ffff:ffff:ffff:ffff:ffff,AU
2001:df5:6000::,2001:df5:6000:ffff:ffff:ffff:ffff:ffff,NZ
2001:df5:6800::,2001:df5:6800:ffff:ffff:ffff:ffff:ffff,KR
@@ -3096,7 +3583,6 @@
2001:df6:a800::,2001:df6:a800:ffff:ffff:ffff:ffff:ffff,IN
2001:df6:b000::,2001:df6:b000:ffff:ffff:ffff:ffff:ffff,TH
2001:df6:b800::,2001:df6:b800:ffff:ffff:ffff:ffff:ffff,SG
-2001:df6:c000::,2001:df6:c000:ffff:ffff:ffff:ffff:ffff,IN
2001:df6:c800::,2001:df6:c800:ffff:ffff:ffff:ffff:ffff,IN
2001:df6:d000::,2001:df6:d000:ffff:ffff:ffff:ffff:ffff,HK
2001:df6:d800::,2001:df6:d800:ffff:ffff:ffff:ffff:ffff,BD
@@ -3120,7 +3606,6 @@
2001:df7:7000::,2001:df7:7000:ffff:ffff:ffff:ffff:ffff,HK
2001:df7:7800::,2001:df7:7800:ffff:ffff:ffff:ffff:ffff,JP
2001:df7:8800::,2001:df7:8800:ffff:ffff:ffff:ffff:ffff,ID
-2001:df7:9000::,2001:df7:9000:ffff:ffff:ffff:ffff:ffff,PH
2001:df7:9800::,2001:df7:9800:ffff:ffff:ffff:ffff:ffff,NZ
2001:df7:a000::,2001:df7:a000:ffff:ffff:ffff:ffff:ffff,AU
2001:df7:a800::,2001:df7:a800:ffff:ffff:ffff:ffff:ffff,JP
@@ -3134,8 +3619,8 @@
2001:df7:e800::,2001:df7:e800:ffff:ffff:ffff:ffff:ffff,AU
2001:df7:f000::,2001:df7:f000:ffff:ffff:ffff:ffff:ffff,JP
2001:df7:f800::,2001:df7:f800:ffff:ffff:ffff:ffff:ffff,IN
-2001:df8::,2001:df9:ffff:ffff:ffff:ffff:ffff:ffff,AU
-2001:dfa::,2001:dfa:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2001:df8::,2001:df8:ffff:ffff:ffff:ffff:ffff:ffff,US
+2001:df9::,2001:dfa:ffff:ffff:ffff:ffff:ffff:ffff,JP
2001:e00::,2001:e01:ffff:ffff:ffff:ffff:ffff:ffff,ID
2001:e08::,2001:e08:ffff:ffff:ffff:ffff:ffff:ffff,CN
2001:e10::,2001:e10:ffff:ffff:ffff:ffff:ffff:ffff,TW
@@ -3294,9 +3779,17 @@
2001:1450::,2001:1450:ffff:ffff:ffff:ffff:ffff:ffff,IT
2001:1458::,2001:1459:ffff:ffff:ffff:ffff:ffff:ffff,CH
2001:1460::,2001:1460:ffff:ffff:ffff:ffff:ffff:ffff,NL
-2001:1468::,2001:1469:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2001:1468::,2001:1468:7fff:ffff:ffff:ffff:ffff:ffff,CZ
+2001:1468:8000::,2001:1468:ffff:ffff:ffff:ffff:ffff:ffff,IE
+2001:1469::,2001:1469:ffff:ffff:ffff:ffff:ffff:ffff,CZ
2001:146a::,2001:146a::ffff:ffff:ffff:ffff:ffff,RU
-2001:146a:1::,2001:146f:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2001:146a:1::,2001:146a:81:ffff:ffff:ffff:ffff:ffff,CZ
+2001:146a:82::,2001:146a:82:ffff:ffff:ffff:ffff:ffff,RU
+2001:146a:83::,2001:146a:98:ffff:ffff:ffff:ffff:ffff,CZ
+2001:146a:99::,2001:146a:99:ffff:ffff:ffff:ffff:ffff,RU
+2001:146a:9a::,2001:146a:9d:ffff:ffff:ffff:ffff:ffff,CZ
+2001:146a:9e::,2001:146a:9e:ffff:ffff:ffff:ffff:ffff,RU
+2001:146a:9f::,2001:146f:ffff:ffff:ffff:ffff:ffff:ffff,CZ
2001:1470::,2001:1477:ffff:ffff:ffff:ffff:ffff:ffff,SI
2001:1478::,2001:1478:ffff:ffff:ffff:ffff:ffff:ffff,GB
2001:1488::,2001:1488:ffff:ffff:ffff:ffff:ffff:ffff,CZ
@@ -3312,8 +3805,7 @@
2001:14d8::,2001:14d8:ffff:ffff:ffff:ffff:ffff:ffff,DE
2001:14e0::,2001:14e0:ffff:ffff:ffff:ffff:ffff:ffff,DE
2001:14e8::,2001:14e8:ffff:ffff:ffff:ffff:ffff:ffff,IR
-2001:14f0::,2001:14f0:ffff:ffff:ffff:ffff:ffff:ffff,DE
-2001:14f8::,2001:14f8:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2001:14f0::,2001:14f8:ffff:ffff:ffff:ffff:ffff:ffff,DE
2001:1500::,2001:1500:ffff:ffff:ffff:ffff:ffff:ffff,IR
2001:1508::,2001:1508:ffff:ffff:ffff:ffff:ffff:ffff,CZ
2001:1510::,2001:1510:ffff:ffff:ffff:ffff:ffff:ffff,GB
@@ -3324,7 +3816,7 @@
2001:1540::,2001:1540:ffff:ffff:ffff:ffff:ffff:ffff,NL
2001:1548::,2001:1548:ffff:ffff:ffff:ffff:ffff:ffff,GR
2001:1558::,2001:1558:ffff:ffff:ffff:ffff:ffff:ffff,CH
-2001:1560::,2001:1560:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2001:1560::,2001:1567:ffff:ffff:ffff:ffff:ffff:ffff,DE
2001:1568::,2001:1568:ffff:ffff:ffff:ffff:ffff:ffff,CZ
2001:1570::,2001:1570:ffff:ffff:ffff:ffff:ffff:ffff,GB
2001:1578::,2001:1578:ffff:ffff:ffff:ffff:ffff:ffff,DE
@@ -3336,7 +3828,9 @@
2001:15a8::,2001:15a8:ffff:ffff:ffff:ffff:ffff:ffff,IT
2001:15b0::,2001:15b0:ffff:ffff:ffff:ffff:ffff:ffff,NL
2001:15b8::,2001:15b8:ffff:ffff:ffff:ffff:ffff:ffff,NL
-2001:15c0::,2001:15c7:ffff:ffff:ffff:ffff:ffff:ffff,SI
+2001:15c0::,2001:15c0:67cc:ffff:ffff:ffff:ffff:ffff,SI
+2001:15c0:67cd::,2001:15c0:67cd:ffff:ffff:ffff:ffff:ffff,AT
+2001:15c0:67ce::,2001:15c7:ffff:ffff:ffff:ffff:ffff:ffff,SI
2001:15c8::,2001:15c8:ffff:ffff:ffff:ffff:ffff:ffff,NL
2001:15d8::,2001:15d8:ffff:ffff:ffff:ffff:ffff:ffff,PT
2001:15e0::,2001:15e0:ffff:ffff:ffff:ffff:ffff:ffff,GB
@@ -3348,7 +3842,6 @@
2001:1610::,2001:1610:ffff:ffff:ffff:ffff:ffff:ffff,LU
2001:1618::,2001:1618:ffff:ffff:ffff:ffff:ffff:ffff,AT
2001:1620::,2001:1623:ffff:ffff:ffff:ffff:ffff:ffff,CH
-2001:1628::,2001:1628:ffff:ffff:ffff:ffff:ffff:ffff,FR
2001:1630::,2001:1637:ffff:ffff:ffff:ffff:ffff:ffff,SE
2001:1638::,2001:1638:ffff:ffff:ffff:ffff:ffff:ffff,DE
2001:1640::,2001:1640:ffff:ffff:ffff:ffff:ffff:ffff,DE
@@ -3368,13 +3861,19 @@
2001:16b8::,2001:16b8:ffff:ffff:ffff:ffff:ffff:ffff,DE
2001:16c0::,2001:16c0:1233:ffff:ffff:ffff:ffff:ffff,IR
2001:16c0:1234::,2001:16c0:1234:ffff:ffff:ffff:ffff:ffff,AU
-2001:16c0:1235::,2001:16c0:ffff:ffff:ffff:ffff:ffff:ffff,IR
+2001:16c0:1235::,2001:16c7:ffff:ffff:ffff:ffff:ffff:ffff,IR
2001:16c8::,2001:16c8:ffff:ffff:ffff:ffff:ffff:ffff,GB
2001:16d0::,2001:16d0:ffff:ffff:ffff:ffff:ffff:ffff,IT
-2001:16d8::,2001:16d8:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2001:16d8::,2001:16d8:dcff:ffff:ffff:ffff:ffff:ffff,SE
+2001:16d8:dd00::,2001:16d8:dd00:ffff:ffff:ffff:ffff:ffff,DK
+2001:16d8:dd01::,2001:16d8:dd72:ffff:ffff:ffff:ffff:ffff,SE
+2001:16d8:dd73::,2001:16d8:dd73:ffff:ffff:ffff:ffff:ffff,DK
+2001:16d8:dd74::,2001:16d8:edff:ffff:ffff:ffff:ffff:ffff,SE
+2001:16d8:ee00::,2001:16d8:ee00:ffff:ffff:ffff:ffff:ffff,NO
+2001:16d8:ee01::,2001:16d8:ffff:ffff:ffff:ffff:ffff:ffff,SE
2001:16e0::,2001:16e7:ffff:ffff:ffff:ffff:ffff:ffff,DE
2001:16e8::,2001:16e8:ffff:ffff:ffff:ffff:ffff:ffff,NL
-2001:16f0::,2001:16f0:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2001:16f0::,2001:16f7:ffff:ffff:ffff:ffff:ffff:ffff,DE
2001:16f8::,2001:16f8:ffff:ffff:ffff:ffff:ffff:ffff,NL
2001:1700::,2001:171f:ffff:ffff:ffff:ffff:ffff:ffff,CH
2001:1800::,2001:1800:ffff:ffff:ffff:ffff:ffff:ffff,US
@@ -3433,7 +3932,15 @@
2001:19d8::,2001:19d8:ffff:ffff:ffff:ffff:ffff:ffff,US
2001:19e0::,2001:19e0:ffff:ffff:ffff:ffff:ffff:ffff,US
2001:19e8::,2001:19e8:ffff:ffff:ffff:ffff:ffff:ffff,US
-2001:19f0::,2001:19f0:ffff:ffff:ffff:ffff:ffff:ffff,US
+2001:19f0::,2001:19f0:4fff:ffff:ffff:ffff:ffff:ffff,US
+2001:19f0:5000::,2001:19f0:5000:ffff:ffff:ffff:ffff:ffff,NL
+2001:19f0:5001::,2001:19f0:6800:7fff:ffff:ffff:ffff:ffff,US
+2001:19f0:6800:8000::,2001:19f0:6800:83ff:ffff:ffff:ffff:ffff,FR
+2001:19f0:6800:8400::,2001:19f0:6fff:ffff:ffff:ffff:ffff:ffff,US
+2001:19f0:7000::,2001:19f0:7000:ffff:ffff:ffff:ffff:ffff,JP
+2001:19f0:7001::,2001:19f0:73ff:ffff:ffff:ffff:ffff:ffff,US
+2001:19f0:7400::,2001:19f0:7400:ffff:ffff:ffff:ffff:ffff,GB
+2001:19f0:7401::,2001:19f0:ffff:ffff:ffff:ffff:ffff:ffff,US
2001:19f8::,2001:19f8:ffff:ffff:ffff:ffff:ffff:ffff,US
2001:1a08::,2001:1a08:ffff:ffff:ffff:ffff:ffff:ffff,GB
2001:1a10::,2001:1a10:ffff:ffff:ffff:ffff:ffff:ffff,QA
@@ -3449,8 +3956,7 @@
2001:1a60::,2001:1a60:ffff:ffff:ffff:ffff:ffff:ffff,IT
2001:1a68::,2001:1a68:ffff:ffff:ffff:ffff:ffff:ffff,PL
2001:1a70::,2001:1a70:ffff:ffff:ffff:ffff:ffff:ffff,MT
-2001:1a78::,2001:1a78:ffff:ffff:ffff:ffff:ffff:ffff,DE
-2001:1a80::,2001:1a87:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2001:1a78::,2001:1a87:ffff:ffff:ffff:ffff:ffff:ffff,DE
2001:1a88::,2001:1a8f:ffff:ffff:ffff:ffff:ffff:ffff,CH
2001:1a90::,2001:1a90:ffff:ffff:ffff:ffff:ffff:ffff,GB
2001:1a98::,2001:1a9f:ffff:ffff:ffff:ffff:ffff:ffff,IS
@@ -3499,8 +4005,40 @@
2001:1bf0::,2001:1bf7:ffff:ffff:ffff:ffff:ffff:ffff,EE
2001:1bf8::,2001:1bf8:ffff:ffff:ffff:ffff:ffff:ffff,LV
2001:1c00::,2001:1dff:ffff:ffff:ffff:ffff:ffff:ffff,NL
-2001:2002:4e48::,2001:2002:4e49:ffff:ffff:ffff:ffff:ffff,SE
-2001:2003:54fa::,2001:2003:54fa:ffff:ffff:ffff:ffff:ffff,FI
+2001:2002:2f8::,2001:2002:2f8:ffff:ffff:ffff:ffff:ffff,SE
+2001:2002:3e14::,2001:2002:3e14:ffff:ffff:ffff:ffff:ffff,SE
+2001:2002:4e44::,2001:2002:4e44:ffff:ffff:ffff:ffff:ffff,SE
+2001:2002:4e46::,2001:2002:4e48:89ff:ffff:ffff:ffff:ffff,SE
+2001:2002:4e48:a000::,2001:2002:4e48:bfff:ffff:ffff:ffff:ffff,SE
+2001:2002:51e0::,2001:2002:51e1:ffff:ffff:ffff:ffff:ffff,SE
+2001:2002:51e3::,2001:2002:51e6:ffff:ffff:ffff:ffff:ffff,SE
+2001:2002:51e8::,2001:2002:51e9:ffff:ffff:ffff:ffff:ffff,SE
+2001:2002:51ea:8000::,2001:2002:51ec:7ff:ffff:ffff:ffff:ffff,SE
+2001:2002:51ed::,2001:2002:51ed:ffff:ffff:ffff:ffff:ffff,SE
+2001:2002:5ae0::,2001:2002:5ae0:bfff:ffff:ffff:ffff:ffff,SE
+2001:2002:5ae2::,2001:2002:5ae2:ffff:ffff:ffff:ffff:ffff,SE
+2001:2002:5ae4::,2001:2002:5ae4:ffff:ffff:ffff:ffff:ffff,SE
+2001:2002:5ae5:8000::,2001:2002:5ae5:bfff:ffff:ffff:ffff:ffff,SE
+2001:2002:5ae5:e000::,2001:2002:5ae5:ffff:ffff:ffff:ffff:ffff,SE
+2001:2002:5ae6:8000::,2001:2002:5ae7:ffff:ffff:ffff:ffff:ffff,SE
+2001:2002:d4b5::,2001:2002:d4b5:ffff:ffff:ffff:ffff:ffff,SE
+2001:2002:d540::,2001:2002:d541:3fff:ffff:ffff:ffff:ffff,SE
+2001:2002:d541:8000::,2001:2002:d542:ffff:ffff:ffff:ffff:ffff,SE
+2001:2002:d9d1::,2001:2002:d9d1:ffff:ffff:ffff:ffff:ffff,SE
+2001:2002:d9d2:8000::,2001:2002:d9d3:ffff:ffff:ffff:ffff:ffff,SE
+2001:2003:50dc::,2001:2003:50dc:ffff:ffff:ffff:ffff:ffff,FI
+2001:2003:50de::,2001:2003:50df:ffff:ffff:ffff:ffff:ffff,FI
+2001:2003:54f9::,2001:2003:54fb:ffff:ffff:ffff:ffff:ffff,FI
+2001:2003:58c0::,2001:2003:58c1:ffff:ffff:ffff:ffff:ffff,FI
+2001:2003:58c3::,2001:2003:58c3:ffff:ffff:ffff:ffff:ffff,FI
+2001:2010:d002::,2001:2010:d003:ffff:ffff:ffff:ffff:ffff,DK
+2001:2010:d006::,2001:2010:d006:ffff:ffff:ffff:ffff:ffff,DK
+2001:2010:d009::,2001:2010:d00a:ffff:ffff:ffff:ffff:ffff,DK
+2001:2010:d00c::,2001:2010:d00e:ffff:ffff:ffff:ffff:ffff,DK
+2001:2010:d012::,2001:2010:d013:ffff:ffff:ffff:ffff:ffff,DK
+2001:2010:d01a::,2001:2010:d01c:ffff:ffff:ffff:ffff:ffff,DK
+2001:2010:d023::,2001:2010:d023:ffff:ffff:ffff:ffff:ffff,DK
+2001:2040:4b::,2001:2040:4b:ffff:ffff:ffff:ffff:ffff,SE
2001:4000::,2001:4000:ffff:ffff:ffff:ffff:ffff:ffff,FR
2001:4010::,2001:4010:ffff:ffff:ffff:ffff:ffff:ffff,GB
2001:4018::,2001:4018:ffff:ffff:ffff:ffff:ffff:ffff,NL
@@ -3552,7 +4090,9 @@
2001:41b0::,2001:41b0:ffff:ffff:ffff:ffff:ffff:ffff,PL
2001:41b8::,2001:41b8:ffff:ffff:ffff:ffff:ffff:ffff,DE
2001:41c0::,2001:41cf:ffff:ffff:ffff:ffff:ffff:ffff,GB
-2001:41d0::,2001:41d0:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2001:41d0::,2001:41d0:2:4dbd:ffff:ffff:ffff:ffff,FR
+2001:41d0:2:4dbe::,2001:41d0:2:4dbe:ffff:ffff:ffff:ffff,CZ
+2001:41d0:2:4dbf::,2001:41d0:ffff:ffff:ffff:ffff:ffff:ffff,FR
2001:41d8::,2001:41d8:ffff:ffff:ffff:ffff:ffff:ffff,CZ
2001:41e0::,2001:41e0:ffff:ffff:ffff:ffff:ffff:ffff,CH
2001:41e8::,2001:41e8:ffff:ffff:ffff:ffff:ffff:ffff,GB
@@ -3563,7 +4103,7 @@
2001:4218::,2001:4218:ffff:ffff:ffff:ffff:ffff:ffff,ZA
2001:4220::,2001:4220:ffff:ffff:ffff:ffff:ffff:ffff,EG
2001:4228::,2001:4228:ffff:ffff:ffff:ffff:ffff:ffff,SD
-2001:4238::,2001:4238:ffff:ffff:ffff:ffff:ffff:ffff,KE
+2001:4238::,2001:4238:ffff:ffff:ffff:ffff:ffff:ffff,MU
2001:4240::,2001:4240:ffff:ffff:ffff:ffff:ffff:ffff,TZ
2001:4248::,2001:4248:ffff:ffff:ffff:ffff:ffff:ffff,MU
2001:4250::,2001:4250:ffff:ffff:ffff:ffff:ffff:ffff,AO
@@ -3612,7 +4152,7 @@
2001:43e0::,2001:43e0:ffff:ffff:ffff:ffff:ffff:ffff,ZA
2001:43e8::,2001:43e8:ffff:ffff:ffff:ffff:ffff:ffff,ZA
2001:43f0::,2001:43f0:ffff:ffff:ffff:ffff:ffff:ffff,ZW
-2001:43f8::,2001:43f8:1:ffff:ffff:ffff:ffff:ffff,TZ
+2001:43f8::,2001:43f8:2:ffff:ffff:ffff:ffff:ffff,TZ
2001:43f8:10::,2001:43f8:10:ffff:ffff:ffff:ffff:ffff,KE
2001:43f8:20::,2001:43f8:20:ffff:ffff:ffff:ffff:ffff,ZA
2001:43f8:30::,2001:43f8:30:ffff:ffff:ffff:ffff:ffff,ZA
@@ -3621,9 +4161,11 @@
2001:43f8:70::,2001:43f8:77:ffff:ffff:ffff:ffff:ffff,ZA
2001:43f8:80::,2001:43f8:80:ffff:ffff:ffff:ffff:ffff,NA
2001:43f8:90::,2001:43f8:90:ffff:ffff:ffff:ffff:ffff,MU
+2001:43f8:92::,2001:43f8:92:ffff:ffff:ffff:ffff:ffff,MU
2001:43f8:a0::,2001:43f8:a0:ffff:ffff:ffff:ffff:ffff,ZA
2001:43f8:b0::,2001:43f8:b0:ffff:ffff:ffff:ffff:ffff,SL
2001:43f8:c0::,2001:43f8:c0:ffff:ffff:ffff:ffff:ffff,KE
+2001:43f8:d0::,2001:43f8:d0:ffff:ffff:ffff:ffff:ffff,MU
2001:43f8:e0::,2001:43f8:e0:ffff:ffff:ffff:ffff:ffff,TZ
2001:43f8:100::,2001:43f8:100:ffff:ffff:ffff:ffff:ffff,ZA
2001:43f8:110::,2001:43f8:110:ffff:ffff:ffff:ffff:ffff,MU
@@ -3636,17 +4178,20 @@
2001:43f8:180::,2001:43f8:180:ffff:ffff:ffff:ffff:ffff,NG
2001:43f8:190::,2001:43f8:190:ffff:ffff:ffff:ffff:ffff,NG
2001:43f8:1a0::,2001:43f8:1a0:ffff:ffff:ffff:ffff:ffff,GH
+2001:43f8:1b0::,2001:43f8:1b0:ffff:ffff:ffff:ffff:ffff,ZA
2001:43f8:1c0::,2001:43f8:1c0:ffff:ffff:ffff:ffff:ffff,DZ
2001:43f8:1d0::,2001:43f8:1d0:ffff:ffff:ffff:ffff:ffff,GH
2001:43f8:1e0::,2001:43f8:1e0:ffff:ffff:ffff:ffff:ffff,NG
2001:43f8:1f0::,2001:43f8:1f6:ffff:ffff:ffff:ffff:ffff,ZA
2001:43f8:200::,2001:43f8:200:ffff:ffff:ffff:ffff:ffff,KE
2001:43f8:210::,2001:43f8:210:ffff:ffff:ffff:ffff:ffff,LS
+2001:43f8:220::,2001:43f8:220:ffff:ffff:ffff:ffff:ffff,MU
2001:43f8:230::,2001:43f8:230:ffff:ffff:ffff:ffff:ffff,ZA
2001:43f8:240::,2001:43f8:241:ffff:ffff:ffff:ffff:ffff,GH
2001:43f8:250::,2001:43f8:250:ffff:ffff:ffff:ffff:ffff,KE
2001:43f8:260::,2001:43f8:260:ffff:ffff:ffff:ffff:ffff,KE
-2001:43f8:270::,2001:43f8:270:ffff:ffff:ffff:ffff:ffff,MU
+2001:43f8:270::,2001:43f8:271:ffff:ffff:ffff:ffff:ffff,MU
+2001:43f8:280::,2001:43f8:280:ffff:ffff:ffff:ffff:ffff,MU
2001:43f8:290::,2001:43f8:290:ffff:ffff:ffff:ffff:ffff,MG
2001:43f8:2a0::,2001:43f8:2a0:ffff:ffff:ffff:ffff:ffff,BW
2001:43f8:2b0::,2001:43f8:2b0:ffff:ffff:ffff:ffff:ffff,BW
@@ -3665,6 +4210,7 @@
2001:43f8:3b0::,2001:43f8:3b0:ffff:ffff:ffff:ffff:ffff,NA
2001:43f8:3c0::,2001:43f8:3c0:ffff:ffff:ffff:ffff:ffff,CD
2001:43f8:3d0::,2001:43f8:3d0:ffff:ffff:ffff:ffff:ffff,BF
+2001:43f8:3e0::,2001:43f8:3ef:ffff:ffff:ffff:ffff:ffff,ZA
2001:43f8:400::,2001:43f8:4ff:ffff:ffff:ffff:ffff:ffff,AO
2001:43f8:600::,2001:43f8:60f:ffff:ffff:ffff:ffff:ffff,NG
2001:43f8:610::,2001:43f8:610:ffff:ffff:ffff:ffff:ffff,TZ
@@ -3706,11 +4252,15 @@
2001:43f8:990::,2001:43f8:991:ffff:ffff:ffff:ffff:ffff,BI
2001:43f8:9a0::,2001:43f8:9a0:ffff:ffff:ffff:ffff:ffff,BJ
2001:43f8:9b0::,2001:43f8:9b1:ffff:ffff:ffff:ffff:ffff,SZ
-2001:43f8:9c0::,2001:43f8:9c0:ffff:ffff:ffff:ffff:ffff,DJ
+2001:43f8:9c0::,2001:43f8:9c1:ffff:ffff:ffff:ffff:ffff,DJ
2001:43f8:9d0::,2001:43f8:9d0:ffff:ffff:ffff:ffff:ffff,AO
2001:43f8:9e0::,2001:43f8:9e0:ffff:ffff:ffff:ffff:ffff,ZW
2001:43f8:9f0::,2001:43f8:9f0:ffff:ffff:ffff:ffff:ffff,NG
2001:43f8:a00::,2001:43f8:a00:ffff:ffff:ffff:ffff:ffff,NG
+2001:43f8:a10::,2001:43f8:a11:ffff:ffff:ffff:ffff:ffff,MG
+2001:43f8:a20::,2001:43f8:a21:ffff:ffff:ffff:ffff:ffff,SC
+2001:43f8:a30::,2001:43f8:a30:ffff:ffff:ffff:ffff:ffff,UG
+2001:43f8:a40::,2001:43f8:a40:ffff:ffff:ffff:ffff:ffff,MZ
2001:4400::,2001:4403:ffff:ffff:ffff:ffff:ffff:ffff,NZ
2001:4408::,2001:4408:ffff:ffff:ffff:ffff:ffff:ffff,IN
2001:4410::,2001:4410:ffff:ffff:ffff:ffff:ffff:ffff,NZ
@@ -3749,9 +4299,17 @@
2001:4810::,2001:4810:ffff:ffff:ffff:ffff:ffff:ffff,US
2001:4818::,2001:4818:ffff:ffff:ffff:ffff:ffff:ffff,CA
2001:4828::,2001:4828:ffff:ffff:ffff:ffff:ffff:ffff,US
-2001:4830::,2001:4830:11ff:ffff:ffff:ffff:ffff:ffff,US
-2001:4830:1200::,2001:4830:1200:ffff:ffff:ffff:ffff:ffff,AU
-2001:4830:1201::,2001:4830:ffff:ffff:ffff:ffff:ffff:ffff,US
+2001:4830::,2001:4830:10ff:ffff:ffff:ffff:ffff:ffff,US
+2001:4830:1100::,2001:4830:1100:1ff:ffff:ffff:ffff:ffff,CA
+2001:4830:1100:200::,2001:4830:1100:81ff:ffff:ffff:ffff:ffff,US
+2001:4830:1100:8200::,2001:4830:1100:83ff:ffff:ffff:ffff:ffff,CA
+2001:4830:1100:8400::,2001:4830:1200:7fff:ffff:ffff:ffff:ffff,US
+2001:4830:1200:8000::,2001:4830:1200:81ff:ffff:ffff:ffff:ffff,AU
+2001:4830:1200:8200::,2001:4830:1301:ffff:ffff:ffff:ffff:ffff,US
+2001:4830:1302::,2001:4830:1302:ffff:ffff:ffff:ffff:ffff,AU
+2001:4830:1303::,2001:4830:600f:ffff:ffff:ffff:ffff:ffff,US
+2001:4830:6010::,2001:4830:601f:ffff:ffff:ffff:ffff:ffff,GB
+2001:4830:6020::,2001:4830:ffff:ffff:ffff:ffff:ffff:ffff,US
2001:4838::,2001:4838:ffff:ffff:ffff:ffff:ffff:ffff,US
2001:4840::,2001:4840:ffff:ffff:ffff:ffff:ffff:ffff,US
2001:4848::,2001:4848:ffff:ffff:ffff:ffff:ffff:ffff,US
@@ -3760,9 +4318,17 @@
2001:4860::,2001:4860:ffff:ffff:ffff:ffff:ffff:ffff,US
2001:4868::,2001:4868:ffff:ffff:ffff:ffff:ffff:ffff,US
2001:4870::,2001:4871:ffff:ffff:ffff:ffff:ffff:ffff,US
-2001:4878::,2001:4878:8304:ffff:ffff:ffff:ffff:ffff,US
+2001:4878::,2001:4878:8203:ffff:ffff:ffff:ffff:ffff,US
+2001:4878:8204::,2001:4878:8204:ffff:ffff:ffff:ffff:ffff,DE
+2001:4878:8205::,2001:4878:8224:ffff:ffff:ffff:ffff:ffff,US
+2001:4878:8225::,2001:4878:8225:ffff:ffff:ffff:ffff:ffff,PL
+2001:4878:8226::,2001:4878:8227:ffff:ffff:ffff:ffff:ffff,US
+2001:4878:8228::,2001:4878:8228:ffff:ffff:ffff:ffff:ffff,IL
+2001:4878:8229::,2001:4878:8304:ffff:ffff:ffff:ffff:ffff,US
2001:4878:8305::,2001:4878:8305:ffff:ffff:ffff:ffff:ffff,IN
-2001:4878:8306::,2001:4878:ffff:ffff:ffff:ffff:ffff:ffff,US
+2001:4878:8306::,2001:4878:8321:ffff:ffff:ffff:ffff:ffff,US
+2001:4878:8322::,2001:4878:8322:ffff:ffff:ffff:ffff:ffff,JP
+2001:4878:8323::,2001:4878:ffff:ffff:ffff:ffff:ffff:ffff,US
2001:4888::,2001:4888:ffff:ffff:ffff:ffff:ffff:ffff,US
2001:4890::,2001:4890:ffff:ffff:ffff:ffff:ffff:ffff,US
2001:4898::,2001:489a:ffff:ffff:ffff:ffff:ffff:ffff,US
@@ -3771,7 +4337,11 @@
2001:48b0::,2001:48b0:ffff:ffff:ffff:ffff:ffff:ffff,US
2001:48b8::,2001:48b8:ffff:ffff:ffff:ffff:ffff:ffff,US
2001:48c0::,2001:48c0:ffff:ffff:ffff:ffff:ffff:ffff,US
-2001:48c8::,2001:48c8:ffff:ffff:ffff:ffff:ffff:ffff,US
+2001:48c8::,2001:48c8:6:ffff:ffff:ffff:ffff:ffff,US
+2001:48c8:7::,2001:48c8:7:ffff:ffff:ffff:ffff:ffff,NL
+2001:48c8:8::,2001:48c8:f:ffff:ffff:ffff:ffff:ffff,US
+2001:48c8:10::,2001:48c8:10:ffff:ffff:ffff:ffff:ffff,SG
+2001:48c8:11::,2001:48c8:ffff:ffff:ffff:ffff:ffff:ffff,US
2001:48d0::,2001:48d0:ffff:ffff:ffff:ffff:ffff:ffff,US
2001:48d8::,2001:48d8:ffff:ffff:ffff:ffff:ffff:ffff,US
2001:48e0::,2001:48e0:ffff:ffff:ffff:ffff:ffff:ffff,US
@@ -3792,7 +4362,11 @@
2001:4960::,2001:4960:ffff:ffff:ffff:ffff:ffff:ffff,US
2001:4968::,2001:4968:ffff:ffff:ffff:ffff:ffff:ffff,US
2001:4970::,2001:4970:ffff:ffff:ffff:ffff:ffff:ffff,US
-2001:4978::,2001:4978:ffff:ffff:ffff:ffff:ffff:ffff,US
+2001:4978::,2001:4978:1e2:ffff:ffff:ffff:ffff:ffff,US
+2001:4978:1e3::,2001:4978:1e3:ffff:ffff:ffff:ffff:ffff,CA
+2001:4978:1e4::,2001:4978:2d0:ffff:ffff:ffff:ffff:ffff,US
+2001:4978:2d1::,2001:4978:2d1:ffff:ffff:ffff:ffff:ffff,CA
+2001:4978:2d2::,2001:4978:ffff:ffff:ffff:ffff:ffff:ffff,US
2001:4980::,2001:4980:ffff:ffff:ffff:ffff:ffff:ffff,US
2001:4988::,2001:4988:ffff:ffff:ffff:ffff:ffff:ffff,US
2001:4990::,2001:4990:ffff:ffff:ffff:ffff:ffff:ffff,US
@@ -3807,7 +4381,9 @@
2001:49d8::,2001:49d8:ffff:ffff:ffff:ffff:ffff:ffff,US
2001:49e0::,2001:49e0:ffff:ffff:ffff:ffff:ffff:ffff,US
2001:49e8::,2001:49e8:ffff:ffff:ffff:ffff:ffff:ffff,US
-2001:49f0::,2001:49f0:ffff:ffff:ffff:ffff:ffff:ffff,US
+2001:49f0::,2001:49f0:b002:ffff:ffff:ffff:ffff:ffff,US
+2001:49f0:b003::,2001:49f0:b003:ffff:ffff:ffff:ffff:ffff,CZ
+2001:49f0:b004::,2001:49f0:ffff:ffff:ffff:ffff:ffff:ffff,US
2001:49f8::,2001:49f8:ffff:ffff:ffff:ffff:ffff:ffff,US
2001:4a00::,2001:4a1f:ffff:ffff:ffff:ffff:ffff:ffff,GB
2001:4b00::,2001:4b07:ffff:ffff:ffff:ffff:ffff:ffff,CH
@@ -3841,7 +4417,9 @@
2001:4bf0::,2001:4bf0:ffff:ffff:ffff:ffff:ffff:ffff,GB
2001:4bf8::,2001:4bf8:ffff:ffff:ffff:ffff:ffff:ffff,CH
2001:4c00::,2001:4c07:ffff:ffff:ffff:ffff:ffff:ffff,IT
-2001:4c08::,2001:4c08:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2001:4c08::,2001:4c08:2000:ffff:ffff:ffff:ffff:ffff,GB
+2001:4c08:2001::,2001:4c08:2001:ffff:ffff:ffff:ffff:ffff,NL
+2001:4c08:2002::,2001:4c08:ffff:ffff:ffff:ffff:ffff:ffff,GB
2001:4c10::,2001:4c10:ffff:ffff:ffff:ffff:ffff:ffff,NL
2001:4c20::,2001:4c20:ffff:ffff:ffff:ffff:ffff:ffff,GB
2001:4c28::,2001:4c28:ffff:ffff:ffff:ffff:ffff:ffff,NO
@@ -3862,14 +4440,13 @@
2001:4ca0::,2001:4ca0:ffff:ffff:ffff:ffff:ffff:ffff,DE
2001:4ca8::,2001:4ca8:ffff:ffff:ffff:ffff:ffff:ffff,DE
2001:4cb0::,2001:4cb0:ffff:ffff:ffff:ffff:ffff:ffff,GB
-2001:4cb8::,2001:4cb8:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2001:4cb8::,2001:4cbf:ffff:ffff:ffff:ffff:ffff:ffff,NL
2001:4cc0::,2001:4cc0:ffff:ffff:ffff:ffff:ffff:ffff,PT
2001:4cc8::,2001:4cc8:ffff:ffff:ffff:ffff:ffff:ffff,CZ
2001:4cd0::,2001:4cd0:ffff:ffff:ffff:ffff:ffff:ffff,IL
2001:4cd8::,2001:4cd8:ffff:ffff:ffff:ffff:ffff:ffff,DE
2001:4ce0::,2001:4ce0:ffff:ffff:ffff:ffff:ffff:ffff,DE
-2001:4ce8::,2001:4cf0:ffff:ffff:ffff:ffff:ffff:ffff,DE
-2001:4cf8::,2001:4cf8:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2001:4ce8::,2001:4cf8:ffff:ffff:ffff:ffff:ffff:ffff,DE
2001:4d00::,2001:4d00:ffff:ffff:ffff:ffff:ffff:ffff,AM
2001:4d08::,2001:4d08:ffff:ffff:ffff:ffff:ffff:ffff,DE
2001:4d10::,2001:4d10:ffff:ffff:ffff:ffff:ffff:ffff,ES
@@ -3885,7 +4462,9 @@
2001:4d70::,2001:4d70:ffff:ffff:ffff:ffff:ffff:ffff,GR
2001:4d78::,2001:4d78:ffff:ffff:ffff:ffff:ffff:ffff,GB
2001:4d80::,2001:4d80:ffff:ffff:ffff:ffff:ffff:ffff,RO
-2001:4d88::,2001:4d88:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2001:4d88::,2001:4d88:1010:ffff:ffff:ffff:ffff:ffff,DE
+2001:4d88:1011::,2001:4d88:1011:ffff:ffff:ffff:ffff:ffff,ZA
+2001:4d88:1012::,2001:4d88:ffff:ffff:ffff:ffff:ffff:ffff,DE
2001:4d90::,2001:4d90:ffff:ffff:ffff:ffff:ffff:ffff,ES
2001:4d98::,2001:4d98:ffff:ffff:ffff:ffff:ffff:ffff,CH
2001:4da0::,2001:4da7:ffff:ffff:ffff:ffff:ffff:ffff,CH
@@ -3901,10 +4480,20 @@
2001:4df0::,2001:4df0:ffff:ffff:ffff:ffff:ffff:ffff,IL
2001:8000::,2001:8fff:ffff:ffff:ffff:ffff:ffff:ffff,AU
2001:a000::,2001:a7ff:ffff:ffff:ffff:ffff:ffff:ffff,JP
-2001:b000::,2001:b7ff:ffff:ffff:ffff:ffff:ffff:ffff,TW
-2003::,2003:62:4401:ffff:ffff:ffff:ffff:ffff,DE
-2003:62:4402::,2003:62:4402:ffff:ffff:ffff:ffff:ffff,US
-2003:62:4403::,2003:1fff:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2001:b000::,2001:b010:fc7f:ffff:ffff:ffff:ffff:ffff,TW
+2001:b010:fc80::,2001:b010:fc80:ffff:ffff:ffff:ffff:ffff,CN
+2001:b010:fc81::,2001:b7ff:ffff:ffff:ffff:ffff:ffff:ffff,TW
+2003::,2003:45:2d03:ffff:ffff:ffff:ffff:ffff,DE
+2003:45:2d04::,2003:45:2d04:ffff:ffff:ffff:ffff:ffff,TR
+2003:45:2d05::,2003:4b:ae58:ffff:ffff:ffff:ffff:ffff,DE
+2003:4b:ae59::,2003:4b:ae59:ffff:ffff:ffff:ffff:ffff,PL
+2003:4b:ae5a::,2003:56:ae38:ffff:ffff:ffff:ffff:ffff,DE
+2003:56:ae39::,2003:56:ae39:ffff:ffff:ffff:ffff:ffff,PL
+2003:56:ae3a::,2003:66:8627:ffff:ffff:ffff:ffff:ffff,DE
+2003:66:8628::,2003:66:8628:ffff:ffff:ffff:ffff:ffff,US
+2003:66:8629::,2003:1fff:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2067:8e00::,2067:8e00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2160:150::,2160:150:7fff:ffff:ffff:ffff:ffff:ffff,US
2400::,2400:fff:ffff:ffff:ffff:ffff:ffff:ffff,KR
2400:1000::,2400:1000:ffff:ffff:ffff:ffff:ffff:ffff,JP
2400:1100::,2400:1100:ffff:ffff:ffff:ffff:ffff:ffff,HK
@@ -3988,7 +4577,6 @@
2400:4e00::,2400:4e00:ffff:ffff:ffff:ffff:ffff:ffff,CN
2400:4e80::,2400:4e80:ffff:ffff:ffff:ffff:ffff:ffff,TW
2400:4f00::,2400:4f00:ffff:ffff:ffff:ffff:ffff:ffff,PK
-2400:4f80::,2400:4f80:ffff:ffff:ffff:ffff:ffff:ffff,TH
2400:5000::,2400:5000:ffff:ffff:ffff:ffff:ffff:ffff,AU
2400:5080::,2400:5080:ffff:ffff:ffff:ffff:ffff:ffff,CN
2400:5100::,2400:5100:ffff:ffff:ffff:ffff:ffff:ffff,JP
@@ -4008,7 +4596,6 @@
2400:5800::,2400:5800:ffff:ffff:ffff:ffff:ffff:ffff,BD
2400:5880::,2400:5880:ffff:ffff:ffff:ffff:ffff:ffff,MY
2400:5900::,2400:5900:ffff:ffff:ffff:ffff:ffff:ffff,NZ
-2400:5980::,2400:5980:ffff:ffff:ffff:ffff:ffff:ffff,SG
2400:5a00::,2400:5a00:ffff:ffff:ffff:ffff:ffff:ffff,CN
2400:5a80::,2400:5a80:ffff:ffff:ffff:ffff:ffff:ffff,BD
2400:5b00::,2400:5b00:ffff:ffff:ffff:ffff:ffff:ffff,NZ
@@ -4102,8 +4689,7 @@
2400:8780::,2400:8780:ffff:ffff:ffff:ffff:ffff:ffff,CN
2400:8800::,2400:8800:ffff:ffff:ffff:ffff:ffff:ffff,HK
2400:8880::,2400:8880:ffff:ffff:ffff:ffff:ffff:ffff,IN
-2400:8900::,2400:8900::ffff:ffff:ffff:ffff:ffff,JP
-2400:8900:1::,2400:8901:ffff:ffff:ffff:ffff:ffff:ffff,SG
+2400:8900::,2400:8901:ffff:ffff:ffff:ffff:ffff:ffff,SG
2400:8980::,2400:8980:ffff:ffff:ffff:ffff:ffff:ffff,CN
2400:8a00::,2400:8a00:ffff:ffff:ffff:ffff:ffff:ffff,AU
2400:8a80::,2400:8a80:ffff:ffff:ffff:ffff:ffff:ffff,PH
@@ -4150,7 +4736,6 @@
2400:9f80::,2400:9f80:ffff:ffff:ffff:ffff:ffff:ffff,KR
2400:a000::,2400:a000:ffff:ffff:ffff:ffff:ffff:ffff,IN
2400:a080::,2400:a080:ffff:ffff:ffff:ffff:ffff:ffff,JP
-2400:a100::,2400:a100:ffff:ffff:ffff:ffff:ffff:ffff,NP
2400:a280::,2400:a280:ffff:ffff:ffff:ffff:ffff:ffff,AU
2400:a300::,2400:a300:ffff:ffff:ffff:ffff:ffff:ffff,JP
2400:a380::,2400:a380:ffff:ffff:ffff:ffff:ffff:ffff,CN
@@ -4217,6 +4802,7 @@
2400:c300::,2400:c300:ffff:ffff:ffff:ffff:ffff:ffff,HK
2400:c380::,2400:c380:ffff:ffff:ffff:ffff:ffff:ffff,CN
2400:c400::,2400:c400:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2400:c401::,2400:c401:ffff:ffff:ffff:ffff:ffff:ffff,US
2400:c480::,2400:c480:ffff:ffff:ffff:ffff:ffff:ffff,HK
2400:c500::,2400:c500:ffff:ffff:ffff:ffff:ffff:ffff,AU
2400:c580::,2400:c580:ffff:ffff:ffff:ffff:ffff:ffff,NZ
@@ -4232,9 +4818,7 @@
2400:ca80::,2400:ca80:ffff:ffff:ffff:ffff:ffff:ffff,AU
2400:cb00::,2400:cb00:20:ffff:ffff:ffff:ffff:ffff,HK
2400:cb00:21::,2400:cb00:21:ffff:ffff:ffff:ffff:ffff,IT
-2400:cb00:22::,2400:cb00:24:ffff:ffff:ffff:ffff:ffff,HK
-2400:cb00:25::,2400:cb00:25:ffff:ffff:ffff:ffff:ffff,US
-2400:cb00:26::,2400:cb00:38:ffff:ffff:ffff:ffff:ffff,HK
+2400:cb00:22::,2400:cb00:38:ffff:ffff:ffff:ffff:ffff,HK
2400:cb00:39::,2400:cb00:39:ffff:ffff:ffff:ffff:ffff,IT
2400:cb00:3a::,2400:cb00:f00c:ffff:ffff:ffff:ffff:ffff,HK
2400:cb00:f00d::,2400:cb00:f00d:ffff:ffff:ffff:ffff:ffff,US
@@ -4281,13 +4865,10 @@
2400:df00::,2400:df00:ffff:ffff:ffff:ffff:ffff:ffff,JP
2400:df80::,2400:df80:ffff:ffff:ffff:ffff:ffff:ffff,MY
2400:e000::,2400:e000:ffff:ffff:ffff:ffff:ffff:ffff,JP
-2400:e080::,2400:e080:ffff:ffff:ffff:ffff:ffff:ffff,HK
2400:e100::,2400:e100:ffff:ffff:ffff:ffff:ffff:ffff,JP
2400:e180::,2400:e180:ffff:ffff:ffff:ffff:ffff:ffff,KR
2400:e200::,2400:e200:ffff:ffff:ffff:ffff:ffff:ffff,AU
-2400:e280::,2400:e280:ffff:ffff:ffff:ffff:ffff:ffff,HK
2400:e300::,2400:e300:ffff:ffff:ffff:ffff:ffff:ffff,AU
-2400:e380::,2400:e380:ffff:ffff:ffff:ffff:ffff:ffff,HK
2400:e400::,2400:e400:ffff:ffff:ffff:ffff:ffff:ffff,JP
2400:e480::,2400:e480:ffff:ffff:ffff:ffff:ffff:ffff,TW
2400:e500::,2400:e500:ffff:ffff:ffff:ffff:ffff:ffff,AF
@@ -4387,7 +4968,9 @@
2401:1680::,2401:1680:ffff:ffff:ffff:ffff:ffff:ffff,MY
2401:1700::,2401:1700:ffff:ffff:ffff:ffff:ffff:ffff,ID
2401:1780::,2401:1780:ffff:ffff:ffff:ffff:ffff:ffff,TW
-2401:1800::,2401:1801:ffff:ffff:ffff:ffff:ffff:ffff,HK
+2401:1800::,2401:1801:7800:ffff:ffff:ffff:ffff:ffff,HK
+2401:1801:7801::,2401:1801:7801:ffff:ffff:ffff:ffff:ffff,AU
+2401:1801:7802::,2401:1801:ffff:ffff:ffff:ffff:ffff:ffff,HK
2401:1880::,2401:1880:ffff:ffff:ffff:ffff:ffff:ffff,NZ
2401:1900::,2401:1900:ffff:ffff:ffff:ffff:ffff:ffff,BD
2401:1980::,2401:1980:ffff:ffff:ffff:ffff:ffff:ffff,BD
@@ -4446,7 +5029,6 @@
2401:3380::,2401:3380:ffff:ffff:ffff:ffff:ffff:ffff,CN
2401:3400::,2401:3400:ffff:ffff:ffff:ffff:ffff:ffff,MY
2401:3480::,2401:3480:ffff:ffff:ffff:ffff:ffff:ffff,CN
-2401:3500::,2401:3500:ffff:ffff:ffff:ffff:ffff:ffff,HK
2401:3580::,2401:3580:ffff:ffff:ffff:ffff:ffff:ffff,BD
2401:3600::,2401:3600:ffff:ffff:ffff:ffff:ffff:ffff,JP
2401:3680::,2401:3680:ffff:ffff:ffff:ffff:ffff:ffff,HK
@@ -4562,7 +5144,8 @@
2401:7e80::,2401:7e80:ffff:ffff:ffff:ffff:ffff:ffff,AU
2401:7f00::,2401:7f00:ffff:ffff:ffff:ffff:ffff:ffff,JP
2401:7f80::,2401:7f80:ffff:ffff:ffff:ffff:ffff:ffff,CN
-2401:8000::,2401:803f:ffff:ffff:ffff:ffff:ffff:ffff,TW
+2401:8000::,2401:8000::ffff:ffff:ffff:ffff:ffff,CN
+2401:8000:1::,2401:803f:ffff:ffff:ffff:ffff:ffff:ffff,TW
2401:8080::,2401:8080:ffff:ffff:ffff:ffff:ffff:ffff,AF
2401:8100::,2401:8100:ffff:ffff:ffff:ffff:ffff:ffff,AU
2401:8180::,2401:8180:ffff:ffff:ffff:ffff:ffff:ffff,AU
@@ -4670,147 +5253,287 @@
2401:b600::,2401:b600:ffff:ffff:ffff:ffff:ffff:ffff,CN
2401:b680::,2401:b680:ffff:ffff:ffff:ffff:ffff:ffff,CN
2401:b700::,2401:b700:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2401:b780::,2401:b780:ffff:ffff:ffff:ffff:ffff:ffff,MY
2401:b800::,2401:b800:ffff:ffff:ffff:ffff:ffff:ffff,VN
+2401:b880::,2401:b880:ffff:ffff:ffff:ffff:ffff:ffff,AU
2401:b900::,2401:b900:ffff:ffff:ffff:ffff:ffff:ffff,PH
+2401:b980::,2401:b980:ffff:ffff:ffff:ffff:ffff:ffff,TH
2401:ba00::,2401:ba00:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2401:ba80::,2401:ba80:ffff:ffff:ffff:ffff:ffff:ffff,PK
2401:bb00::,2401:bb00:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2401:bb80::,2401:bb80:ffff:ffff:ffff:ffff:ffff:ffff,CN
2401:bc00::,2401:bc00:ffff:ffff:ffff:ffff:ffff:ffff,PH
+2401:bc80::,2401:bc80:ffff:ffff:ffff:ffff:ffff:ffff,MM
2401:bd00::,2401:bd00:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2401:bd80::,2401:bd80:ffff:ffff:ffff:ffff:ffff:ffff,TW
2401:be00::,2401:be00:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2401:be80::,2401:be80:ffff:ffff:ffff:ffff:ffff:ffff,ID
2401:bf00::,2401:bf00:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2401:bf80::,2401:bf80:ffff:ffff:ffff:ffff:ffff:ffff,MY
2401:c000::,2401:c000:ffff:ffff:ffff:ffff:ffff:ffff,BD
+2401:c080::,2401:c080:ffff:ffff:ffff:ffff:ffff:ffff,JP
2401:c100::,2401:c100:ffff:ffff:ffff:ffff:ffff:ffff,SG
+2401:c180::,2401:c180:ffff:ffff:ffff:ffff:ffff:ffff,HK
2401:c200::,2401:c200:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2401:c280::,2401:c280:ffff:ffff:ffff:ffff:ffff:ffff,IN
2401:c300::,2401:c300:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2401:c380::,2401:c380:ffff:ffff:ffff:ffff:ffff:ffff,IN
2401:c400::,2401:c400:ffff:ffff:ffff:ffff:ffff:ffff,MY
+2401:c480::,2401:c480:ffff:ffff:ffff:ffff:ffff:ffff,HK
2401:c500::,2401:c500:ffff:ffff:ffff:ffff:ffff:ffff,KR
+2401:c580::,2401:c580:ffff:ffff:ffff:ffff:ffff:ffff,HK
2401:c600::,2401:c600:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2401:c680::,2401:c680:ffff:ffff:ffff:ffff:ffff:ffff,BD
2401:c700::,2401:c700:ffff:ffff:ffff:ffff:ffff:ffff,HK
+2401:c780::,2401:c780:ffff:ffff:ffff:ffff:ffff:ffff,AU
2401:c800::,2401:c800:ffff:ffff:ffff:ffff:ffff:ffff,JP
-2401:c900::,2401:c901:ffff:ffff:ffff:ffff:ffff:ffff,SG
+2401:c880::,2401:c880:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2401:c900::,2401:c900:1000:ffff:ffff:ffff:ffff:ffff,SG
+2401:c900:1001::,2401:c900:1001:ffff:ffff:ffff:ffff:ffff,JP
+2401:c900:1002::,2401:c900:11ff:ffff:ffff:ffff:ffff:ffff,SG
+2401:c900:1200::,2401:c900:12ff:ffff:ffff:ffff:ffff:ffff,US
+2401:c900:1300::,2401:c900:1300:ffff:ffff:ffff:ffff:ffff,SG
+2401:c900:1301::,2401:c900:1301:ffff:ffff:ffff:ffff:ffff,AU
+2401:c900:1302::,2401:c901:ffff:ffff:ffff:ffff:ffff:ffff,SG
+2401:c980::,2401:c980:ffff:ffff:ffff:ffff:ffff:ffff,NZ
2401:ca00::,2401:ca00:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2401:ca80::,2401:ca80:ffff:ffff:ffff:ffff:ffff:ffff,CN
2401:cb00::,2401:cb00:ffff:ffff:ffff:ffff:ffff:ffff,KH
+2401:cb80::,2401:cb80:ffff:ffff:ffff:ffff:ffff:ffff,CN
2401:cc00::,2401:cc00:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2401:cc80::,2401:cc80:ffff:ffff:ffff:ffff:ffff:ffff,AU
2401:cd00::,2401:cd00:ffff:ffff:ffff:ffff:ffff:ffff,BD
+2401:cd80::,2401:cd81:ffff:ffff:ffff:ffff:ffff:ffff,AU
2401:ce00::,2401:ce00:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2401:ce80::,2401:ce80:ffff:ffff:ffff:ffff:ffff:ffff,JP
2401:cf00::,2401:cf00:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2401:cf80::,2401:cf80:ffff:ffff:ffff:ffff:ffff:ffff,PH
2401:d000::,2401:d000:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2401:d080::,2401:d080:ffff:ffff:ffff:ffff:ffff:ffff,AU
2401:d100::,2401:d100:ffff:ffff:ffff:ffff:ffff:ffff,SG
+2401:d180::,2401:d180:ffff:ffff:ffff:ffff:ffff:ffff,CN
2401:d200::,2401:d200:ffff:ffff:ffff:ffff:ffff:ffff,NZ
+2401:d280::,2401:d280:ffff:ffff:ffff:ffff:ffff:ffff,HK
2401:d300::,2401:d300:ffff:ffff:ffff:ffff:ffff:ffff,MY
+2401:d380::,2401:d380:ffff:ffff:ffff:ffff:ffff:ffff,BD
2401:d400::,2401:d400:ffff:ffff:ffff:ffff:ffff:ffff,NZ
+2401:d480::,2401:d480:ffff:ffff:ffff:ffff:ffff:ffff,AU
2401:d500::,2401:d500:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2401:d580::,2401:d580:ffff:ffff:ffff:ffff:ffff:ffff,AU
2401:d600::,2401:d600:ffff:ffff:ffff:ffff:ffff:ffff,MN
+2401:d680::,2401:d680:ffff:ffff:ffff:ffff:ffff:ffff,MY
2401:d700::,2401:d700:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2401:d780::,2401:d780:ffff:ffff:ffff:ffff:ffff:ffff,CN
2401:d800::,2401:d800:ffff:ffff:ffff:ffff:ffff:ffff,VN
+2401:d880::,2401:d880:ffff:ffff:ffff:ffff:ffff:ffff,TH
2401:d900::,2401:d900:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2401:d980::,2401:d980:ffff:ffff:ffff:ffff:ffff:ffff,HK
2401:da00::,2401:da00:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2401:da80::,2401:da80:ffff:ffff:ffff:ffff:ffff:ffff,HK
2401:db00::,2401:db00:ffff:ffff:ffff:ffff:ffff:ffff,SG
+2401:db80::,2401:db80:ffff:ffff:ffff:ffff:ffff:ffff,SG
2401:dc00::,2401:dc00:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2401:dc80::,2401:dc80:ffff:ffff:ffff:ffff:ffff:ffff,PF
2401:dd00::,2401:dd00:ffff:ffff:ffff:ffff:ffff:ffff,LK
+2401:dd80::,2401:dd80:ffff:ffff:ffff:ffff:ffff:ffff,AU
2401:de00::,2401:de00:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2401:de80::,2401:de80:ffff:ffff:ffff:ffff:ffff:ffff,ID
2401:df00::,2401:df01:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2401:df80::,2401:df80:ffff:ffff:ffff:ffff:ffff:ffff,IN
2401:e000::,2401:e000:ffff:ffff:ffff:ffff:ffff:ffff,TH
+2401:e080::,2401:e080:ffff:ffff:ffff:ffff:ffff:ffff,CN
2401:e100::,2401:e100:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2401:e180::,2401:e180:ffff:ffff:ffff:ffff:ffff:ffff,TW
2401:e200::,2401:e200:ffff:ffff:ffff:ffff:ffff:ffff,KR
+2401:e280::,2401:e280:ffff:ffff:ffff:ffff:ffff:ffff,MY
2401:e300::,2401:e300:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2401:e380::,2401:e380:ffff:ffff:ffff:ffff:ffff:ffff,HK
2401:e400::,2401:e400:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2401:e480::,2401:e480:ffff:ffff:ffff:ffff:ffff:ffff,ID
2401:e500::,2401:e500:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2401:e580::,2401:e580:ffff:ffff:ffff:ffff:ffff:ffff,AU
2401:e600::,2401:e600:ffff:ffff:ffff:ffff:ffff:ffff,FJ
+2401:e680::,2401:e680:ffff:ffff:ffff:ffff:ffff:ffff,IN
2401:e700::,2401:e700:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2401:e780::,2401:e780:ffff:ffff:ffff:ffff:ffff:ffff,SG
2401:e800::,2401:e800:ffff:ffff:ffff:ffff:ffff:ffff,VN
+2401:e880::,2401:e880:ffff:ffff:ffff:ffff:ffff:ffff,AU
2401:e900::,2401:e900:ffff:ffff:ffff:ffff:ffff:ffff,BD
+2401:e980::,2401:e980:ffff:ffff:ffff:ffff:ffff:ffff,AU
2401:ea00::,2401:ea00:ffff:ffff:ffff:ffff:ffff:ffff,PK
+2401:ea80::,2401:ea80:ffff:ffff:ffff:ffff:ffff:ffff,AU
2401:eb00::,2401:eb00:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2401:eb80::,2401:eb80:ffff:ffff:ffff:ffff:ffff:ffff,MY
2401:ec00::,2401:ec00:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2401:ec80::,2401:ec80:ffff:ffff:ffff:ffff:ffff:ffff,NZ
2401:ed00::,2401:ed00:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2401:ed80::,2401:ed80:ffff:ffff:ffff:ffff:ffff:ffff,BD
2401:ee00::,2401:ee00:ffff:ffff:ffff:ffff:ffff:ffff,ID
+2401:ee80::,2401:ee80:ffff:ffff:ffff:ffff:ffff:ffff,AU
2401:ef00::,2401:ef00:ffff:ffff:ffff:ffff:ffff:ffff,SG
+2401:ef80::,2401:ef80:ffff:ffff:ffff:ffff:ffff:ffff,HK
2401:f000::,2401:f000:ffff:ffff:ffff:ffff:ffff:ffff,NZ
+2401:f080::,2401:f080:ffff:ffff:ffff:ffff:ffff:ffff,AU
2401:f100::,2401:f100:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2401:f180::,2401:f180:ffff:ffff:ffff:ffff:ffff:ffff,AU
2401:f200::,2401:f200:ffff:ffff:ffff:ffff:ffff:ffff,MM
+2401:f280::,2401:f280:ffff:ffff:ffff:ffff:ffff:ffff,JP
2401:f300::,2401:f300:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2401:f380::,2401:f380:ffff:ffff:ffff:ffff:ffff:ffff,HK
2401:f400::,2401:f400:ffff:ffff:ffff:ffff:ffff:ffff,HK
+2401:f480::,2401:f480:ffff:ffff:ffff:ffff:ffff:ffff,IN
2401:f500::,2401:f500:ffff:ffff:ffff:ffff:ffff:ffff,NZ
-2401:f600::,2401:f600:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2401:f580::,2401:f580:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2401:f680::,2401:f680:ffff:ffff:ffff:ffff:ffff:ffff,PG
2401:f700::,2401:f700:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2401:f780::,2401:f780:ffff:ffff:ffff:ffff:ffff:ffff,NP
2401:f800::,2401:f800:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2401:f880::,2401:f880:ffff:ffff:ffff:ffff:ffff:ffff,MY
2401:f900::,2401:f900:ffff:ffff:ffff:ffff:ffff:ffff,SG
+2401:f980::,2401:f980:ffff:ffff:ffff:ffff:ffff:ffff,ID
2401:fa00::,2401:fa00::ffff:ffff:ffff:ffff:ffff,AU
-2401:fa00:1::,2401:fa00:c:ffff:ffff:ffff:ffff:ffff,IN
+2401:fa00:1::,2401:fa00:1:ffff:ffff:ffff:ffff:ffff,TW
+2401:fa00:3::,2401:fa00:3:ffff:ffff:ffff:ffff:ffff,SG
+2401:fa00:4::,2401:fa00:4:ffff:ffff:ffff:ffff:ffff,JP
+2401:fa00:5::,2401:fa00:6:ffff:ffff:ffff:ffff:ffff,IN
+2401:fa00:7::,2401:fa00:7:ffff:ffff:ffff:ffff:ffff,US
+2401:fa00:9::,2401:fa00:9:ffff:ffff:ffff:ffff:ffff,AU
+2401:fa00:a::,2401:fa00:c:ffff:ffff:ffff:ffff:ffff,IN
2401:fa00:d::,2401:fa00:d:ffff:ffff:ffff:ffff:ffff,KR
-2401:fa00:e::,2401:fa00:e:ffff:ffff:ffff:ffff:ffff,IN
2401:fa00:f::,2401:fa00:f:ffff:ffff:ffff:ffff:ffff,SG
-2401:fa00:10::,2401:fa00:14:ffff:ffff:ffff:ffff:ffff,IN
+2401:fa00:11::,2401:fa00:11:ffff:ffff:ffff:ffff:ffff,AU
+2401:fa00:13::,2401:fa00:13:ffff:ffff:ffff:ffff:ffff,HK
2401:fa00:15::,2401:fa00:15:ffff:ffff:ffff:ffff:ffff,JP
-2401:fa00:16::,2401:fa00:3f:ffff:ffff:ffff:ffff:ffff,IN
+2401:fa00:18::,2401:fa00:18:7fff:ffff:ffff:ffff:ffff,PH
+2401:fa00:18:8000::,2401:fa00:18:ffff:ffff:ffff:ffff:ffff,US
+2401:fa00:1d::,2401:fa00:1d:ffff:ffff:ffff:ffff:ffff,IN
+2401:fa00:1f::,2401:fa00:1f:ffff:ffff:ffff:ffff:ffff,US
2401:fa00:40::,2401:fa00:40:ffff:ffff:ffff:ffff:ffff,CN
-2401:fa00:41::,2401:fa00:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2401:fa00:42::,2401:fa00:42:ffff:ffff:ffff:ffff:ffff,CN
+2401:fa80::,2401:fa80:ffff:ffff:ffff:ffff:ffff:ffff,CN
2401:fb00::,2401:fb00:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2401:fb80::,2401:fb80:ffff:ffff:ffff:ffff:ffff:ffff,CN
2401:fc00::,2401:fc00:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2401:fc80::,2401:fc80:ffff:ffff:ffff:ffff:ffff:ffff,CN
2401:fd00::,2401:fd00:ffff:ffff:ffff:ffff:ffff:ffff,MY
+2401:fd80::,2401:fd80:ffff:ffff:ffff:ffff:ffff:ffff,AU
2401:fe00::,2401:fe00:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2401:fe80::,2401:fe80:ffff:ffff:ffff:ffff:ffff:ffff,CN
2401:ff00::,2401:ff00:ffff:ffff:ffff:ffff:ffff:ffff,NZ
+2401:ff80::,2401:ff80:ffff:ffff:ffff:ffff:ffff:ffff,BD
2402::,2402:3ff:ffff:ffff:ffff:ffff:ffff:ffff,KR
2402:400::,2402:400:ffff:ffff:ffff:ffff:ffff:ffff,SG
+2402:480::,2402:480:ffff:ffff:ffff:ffff:ffff:ffff,ID
2402:500::,2402:500:ffff:ffff:ffff:ffff:ffff:ffff,SG
+2402:580::,2402:580:ffff:ffff:ffff:ffff:ffff:ffff,ID
2402:600::,2402:600:ffff:ffff:ffff:ffff:ffff:ffff,ID
+2402:680::,2402:680:ffff:ffff:ffff:ffff:ffff:ffff,ID
2402:700::,2402:700:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2402:780::,2402:780:ffff:ffff:ffff:ffff:ffff:ffff,ID
2402:800::,2402:800:ffff:ffff:ffff:ffff:ffff:ffff,VN
+2402:880::,2402:880:ffff:ffff:ffff:ffff:ffff:ffff,CN
2402:900::,2402:900:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2402:980::,2402:980:ffff:ffff:ffff:ffff:ffff:ffff,SG
2402:a00::,2402:a00:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2402:a80::,2402:a80:ffff:ffff:ffff:ffff:ffff:ffff,AU
2402:b00::,2402:b00:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2402:b80::,2402:b80:ffff:ffff:ffff:ffff:ffff:ffff,IN
2402:c00::,2402:c00:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2402:c80::,2402:c80:ffff:ffff:ffff:ffff:ffff:ffff,HK
2402:d00::,2402:d00:ffff:ffff:ffff:ffff:ffff:ffff,AF
+2402:d80::,2402:d80:ffff:ffff:ffff:ffff:ffff:ffff,SG
2402:e00::,2402:e00:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2402:e80::,2402:e80:ffff:ffff:ffff:ffff:ffff:ffff,IN
2402:f00::,2402:f00:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2402:f80::,2402:f80:ffff:ffff:ffff:ffff:ffff:ffff,IN
2402:1000::,2402:1000:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2402:1080::,2402:1080:ffff:ffff:ffff:ffff:ffff:ffff,IN
2402:1100::,2402:1100:ffff:ffff:ffff:ffff:ffff:ffff,MY
+2402:1180::,2402:1180:ffff:ffff:ffff:ffff:ffff:ffff,AU
2402:1200::,2402:1200:ffff:ffff:ffff:ffff:ffff:ffff,ID
+2402:1280::,2402:1280:ffff:ffff:ffff:ffff:ffff:ffff,AU
2402:1300::,2402:1300:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2402:1380::,2402:1380:ffff:ffff:ffff:ffff:ffff:ffff,BD
2402:1400::,2402:1400:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2402:1480::,2402:1480:ffff:ffff:ffff:ffff:ffff:ffff,NP
2402:1500::,2402:1500:ffff:ffff:ffff:ffff:ffff:ffff,HK
+2402:1580::,2402:1580:ffff:ffff:ffff:ffff:ffff:ffff,JP
2402:1600::,2402:1600:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2402:1680::,2402:1680:ffff:ffff:ffff:ffff:ffff:ffff,PK
2402:1700::,2402:1700:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2402:1780::,2402:1780:ffff:ffff:ffff:ffff:ffff:ffff,TW
2402:1800::,2402:1800:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2402:1880::,2402:1883:ffff:ffff:ffff:ffff:ffff:ffff,HK
2402:1900::,2402:1900:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2402:1980::,2402:1980:ffff:ffff:ffff:ffff:ffff:ffff,MY
2402:1a00::,2402:1a00:ffff:ffff:ffff:ffff:ffff:ffff,KR
+2402:1a80::,2402:1a80:ffff:ffff:ffff:ffff:ffff:ffff,MY
2402:1b00::,2402:1b00:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2402:1b80::,2402:1b80:ffff:ffff:ffff:ffff:ffff:ffff,AU
2402:1c00::,2402:1c00:ffff:ffff:ffff:ffff:ffff:ffff,NZ
+2402:1c80::,2402:1c80:ffff:ffff:ffff:ffff:ffff:ffff,BD
2402:1d00::,2402:1d00:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2402:1d80::,2402:1d80:ffff:ffff:ffff:ffff:ffff:ffff,ID
2402:1e00::,2402:1e00:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2402:1e80::,2402:1e80:ffff:ffff:ffff:ffff:ffff:ffff,JP
2402:1f00::,2402:1f00:ffff:ffff:ffff:ffff:ffff:ffff,HK
+2402:1f80::,2402:1f80:ffff:ffff:ffff:ffff:ffff:ffff,CN
2402:2000::,2402:2000:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2402:2080::,2402:2080:ffff:ffff:ffff:ffff:ffff:ffff,TW
2402:2100::,2402:2100:ffff:ffff:ffff:ffff:ffff:ffff,HK
+2402:2180::,2402:2180:ffff:ffff:ffff:ffff:ffff:ffff,HK
2402:2200::,2402:2200:ffff:ffff:ffff:ffff:ffff:ffff,MY
+2402:2280::,2402:2280:ffff:ffff:ffff:ffff:ffff:ffff,CN
2402:2300::,2402:2300:ffff:ffff:ffff:ffff:ffff:ffff,BD
+2402:2380::,2402:2380:ffff:ffff:ffff:ffff:ffff:ffff,NZ
2402:2400::,2402:2400:ffff:ffff:ffff:ffff:ffff:ffff,SG
+2402:2480::,2402:2480:ffff:ffff:ffff:ffff:ffff:ffff,IN
2402:2500::,2402:2500:ffff:ffff:ffff:ffff:ffff:ffff,SG
+2402:2580::,2402:2580:ffff:ffff:ffff:ffff:ffff:ffff,TW
2402:2600::,2402:2600:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2402:2680::,2402:2680:ffff:ffff:ffff:ffff:ffff:ffff,ID
2402:2700::,2402:2700:ffff:ffff:ffff:ffff:ffff:ffff,TH
+2402:2780::,2402:2780:ffff:ffff:ffff:ffff:ffff:ffff,CN
2402:2800::,2402:2800:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2402:2880::,2402:2880:ffff:ffff:ffff:ffff:ffff:ffff,AF
2402:2900::,2402:2900:ffff:ffff:ffff:ffff:ffff:ffff,ID
+2402:2980::,2402:2980:ffff:ffff:ffff:ffff:ffff:ffff,NZ
2402:2a00::,2402:2a00:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2402:2a80::,2402:2a80:ffff:ffff:ffff:ffff:ffff:ffff,HK
2402:2b00::,2402:2b00:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2402:2b80::,2402:2b80:ffff:ffff:ffff:ffff:ffff:ffff,CN
2402:2c00::,2402:2c00:ffff:ffff:ffff:ffff:ffff:ffff,SG
+2402:2c80::,2402:2c80:ffff:ffff:ffff:ffff:ffff:ffff,AU
2402:2d00::,2402:2d00:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2402:2d80::,2402:2d80:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2402:2e80::,2402:2e80:ffff:ffff:ffff:ffff:ffff:ffff,CN
2402:2f00::,2402:2f00:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2402:2f80::,2402:2f80:ffff:ffff:ffff:ffff:ffff:ffff,AU
2402:3000::,2402:3000:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2402:3080::,2402:3080:ffff:ffff:ffff:ffff:ffff:ffff,CN
2402:3100::,2402:3100:ffff:ffff:ffff:ffff:ffff:ffff,KR
+2402:3180::,2402:3180:ffff:ffff:ffff:ffff:ffff:ffff,CN
2402:3200::,2402:3200:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2402:3280::,2402:3280:ffff:ffff:ffff:ffff:ffff:ffff,BD
2402:3300::,2402:3300:ffff:ffff:ffff:ffff:ffff:ffff,SG
+2402:3380::,2402:3380:ffff:ffff:ffff:ffff:ffff:ffff,AU
2402:3400::,2402:3400:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2402:3480::,2402:3480:ffff:ffff:ffff:ffff:ffff:ffff,ID
2402:3500::,2402:3500:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2402:3580::,2402:3580:ffff:ffff:ffff:ffff:ffff:ffff,NZ
2402:3600::,2402:3600:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2402:3680::,2402:3680:ffff:ffff:ffff:ffff:ffff:ffff,AU
2402:3700::,2402:3700:ffff:ffff:ffff:ffff:ffff:ffff,ID
+2402:3780::,2402:3780:ffff:ffff:ffff:ffff:ffff:ffff,AU
2402:3800::,2402:3800:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2402:3880::,2402:3880:ffff:ffff:ffff:ffff:ffff:ffff,JP
2402:3900::,2402:3900:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2402:3980::,2402:3980:ffff:ffff:ffff:ffff:ffff:ffff,AU
2402:3a00::,2402:3a00:ffff:ffff:ffff:ffff:ffff:ffff,AU
2402:3b00::,2402:3b00:ffff:ffff:ffff:ffff:ffff:ffff,JP
2402:3c00::,2402:3c00:ffff:ffff:ffff:ffff:ffff:ffff,CN
2402:3d00::,2402:3d00:ffff:ffff:ffff:ffff:ffff:ffff,JP
2402:3e00::,2402:3e00:ffff:ffff:ffff:ffff:ffff:ffff,CN
-2402:3f00::,2402:3f00:ffff:ffff:ffff:ffff:ffff:ffff,MN
2402:4000::,2402:4000:ffff:ffff:ffff:ffff:ffff:ffff,LK
2402:4100::,2402:4100:ffff:ffff:ffff:ffff:ffff:ffff,ID
2402:4200::,2402:4200:ffff:ffff:ffff:ffff:ffff:ffff,JP
@@ -4842,10 +5565,13 @@
2402:5d00::,2402:5d00:ffff:ffff:ffff:ffff:ffff:ffff,CN
2402:5e00::,2402:5e00:ffff:ffff:ffff:ffff:ffff:ffff,CN
2402:5f00::,2402:5f00:ffff:ffff:ffff:ffff:ffff:ffff,ID
-2402:6000::,2402:6000:ffff:ffff:ffff:ffff:ffff:ffff,NZ
+2402:6000::,2402:6000:ff:ffff:ffff:ffff:ffff:ffff,AU
+2402:6000:100::,2402:6000:101:ffff:ffff:ffff:ffff:ffff,NZ
+2402:6000:102::,2402:6000:1fe:ffff:ffff:ffff:ffff:ffff,AU
+2402:6000:1ff::,2402:6000:1ff:ffff:ffff:ffff:ffff:ffff,NZ
+2402:6000:200::,2402:6000:ffff:ffff:ffff:ffff:ffff:ffff,AU
2402:6100::,2402:6100:ffff:ffff:ffff:ffff:ffff:ffff,KR
2402:6200::,2402:6200:ffff:ffff:ffff:ffff:ffff:ffff,GU
-2402:6300::,2402:6300:ffff:ffff:ffff:ffff:ffff:ffff,AU
2402:6400::,2402:6400:ffff:ffff:ffff:ffff:ffff:ffff,AU
2402:6500::,2402:6500:ffff:ffff:ffff:ffff:ffff:ffff,AU
2402:6600::,2402:6600:ffff:ffff:ffff:ffff:ffff:ffff,AU
@@ -4973,7 +5699,6 @@
2402:e600::,2402:e600:ffff:ffff:ffff:ffff:ffff:ffff,SG
2402:e800::,2402:e800:ffff:ffff:ffff:ffff:ffff:ffff,JP
2402:e900::,2402:e900:ffff:ffff:ffff:ffff:ffff:ffff,AU
-2402:ea00::,2402:ea00:ffff:ffff:ffff:ffff:ffff:ffff,IN
2402:eb00::,2402:eb00:ffff:ffff:ffff:ffff:ffff:ffff,AU
2402:ec00::,2402:ec00:ffff:ffff:ffff:ffff:ffff:ffff,AU
2402:ed00::,2402:ed00:ffff:ffff:ffff:ffff:ffff:ffff,JP
@@ -5191,7 +5916,9 @@
2403:c900::,2403:c900:ffff:ffff:ffff:ffff:ffff:ffff,NZ
2403:ca00::,2403:ca00:ffff:ffff:ffff:ffff:ffff:ffff,AU
2403:cb00::,2403:cb00:ffff:ffff:ffff:ffff:ffff:ffff,SG
-2403:cc00::,2403:cc00:ffff:ffff:ffff:ffff:ffff:ffff,SG
+2403:cc00::,2403:cc00:9fff:ffff:ffff:ffff:ffff:ffff,SG
+2403:cc00:a000::,2403:cc00:a000:ffff:ffff:ffff:ffff:ffff,ES
+2403:cc00:a001::,2403:cc00:ffff:ffff:ffff:ffff:ffff:ffff,SG
2403:cd00::,2403:cd00:ffff:ffff:ffff:ffff:ffff:ffff,PH
2403:ce00::,2403:ce00:ffff:ffff:ffff:ffff:ffff:ffff,AU
2403:cf00::,2403:cf00:ffff:ffff:ffff:ffff:ffff:ffff,AU
@@ -5230,7 +5957,6 @@
2403:f100::,2403:f100:ffff:ffff:ffff:ffff:ffff:ffff,CN
2403:f200::,2403:f200:ffff:ffff:ffff:ffff:ffff:ffff,JP
2403:f300::,2403:f300:ffff:ffff:ffff:ffff:ffff:ffff,CN
-2403:f400::,2403:f400:ffff:ffff:ffff:ffff:ffff:ffff,BD
2403:f500::,2403:f500:ffff:ffff:ffff:ffff:ffff:ffff,HK
2403:f600::,2403:f600:ffff:ffff:ffff:ffff:ffff:ffff,NR
2403:f700::,2403:f700:ffff:ffff:ffff:ffff:ffff:ffff,NZ
@@ -5287,7 +6013,7 @@
2404:1300::,2404:1300:ffff:ffff:ffff:ffff:ffff:ffff,JP
2404:1400::,2404:1400:ffff:ffff:ffff:ffff:ffff:ffff,ID
2404:1500::,2404:1500:ffff:ffff:ffff:ffff:ffff:ffff,IN
-2404:1600::,2404:1600:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2404:1600::,2404:1601:ffff:ffff:ffff:ffff:ffff:ffff,AU
2404:1700::,2404:1700:ffff:ffff:ffff:ffff:ffff:ffff,JP
2404:1800::,2404:1800:ffff:ffff:ffff:ffff:ffff:ffff,NZ
2404:1900::,2404:1900:ffff:ffff:ffff:ffff:ffff:ffff,JP
@@ -5364,7 +6090,11 @@
2404:6500::,2404:6500:ffff:ffff:ffff:ffff:ffff:ffff,CN
2404:6600::,2404:6600:ffff:ffff:ffff:ffff:ffff:ffff,NZ
2404:6700::,2404:6700:ffff:ffff:ffff:ffff:ffff:ffff,CN
-2404:6800::,2404:6800:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2404:6800::,2404:6800:4002:ffff:ffff:ffff:ffff:ffff,AU
+2404:6800:4003::,2404:6800:4003:ffff:ffff:ffff:ffff:ffff,SG
+2404:6800:4004::,2404:6800:4007:ffff:ffff:ffff:ffff:ffff,AU
+2404:6800:4008::,2404:6800:4008:ffff:ffff:ffff:ffff:ffff,TW
+2404:6800:4009::,2404:6800:ffff:ffff:ffff:ffff:ffff:ffff,AU
2404:6900::,2404:6900:ffff:ffff:ffff:ffff:ffff:ffff,HK
2404:6a00::,2404:6a00:ffff:ffff:ffff:ffff:ffff:ffff,NZ
2404:6b00::,2404:6b00:ffff:ffff:ffff:ffff:ffff:ffff,IN
@@ -5505,10 +6235,9 @@
2404:f600::,2404:f600:ffff:ffff:ffff:ffff:ffff:ffff,ID
2404:f700::,2404:f700:ffff:ffff:ffff:ffff:ffff:ffff,ID
2404:f800::,2404:f800:ffff:ffff:ffff:ffff:ffff:ffff,JP
-2404:f801::,2404:f801:7:ffff:ffff:ffff:ffff:ffff,SG
-2404:f801:8::,2404:f801:8:ffff:ffff:ffff:ffff:ffff,IN
-2404:f801:9::,2404:f801:802f:ffff:ffff:ffff:ffff:ffff,SG
-2404:f801:8030::,2404:f801:8030:ffff:ffff:ffff:ffff:ffff,IN
+2404:f801::,2404:f801::ffff:ffff:ffff:ffff:ffff,IN
+2404:f801:1::,2404:f801:802f:ffff:ffff:ffff:ffff:ffff,SG
+2404:f801:8030::,2404:f801:8030:ffff:ffff:ffff:ffff:ffff,AU
2404:f801:8031::,2404:f801:8057:ffff:ffff:ffff:ffff:ffff,SG
2404:f801:8058::,2404:f801:8058:ffff:ffff:ffff:ffff:ffff,IN
2404:f801:8059::,2404:f801:ffff:ffff:ffff:ffff:ffff:ffff,SG
@@ -5548,7 +6277,15 @@
2405:1d00::,2405:1d00:ffff:ffff:ffff:ffff:ffff:ffff,BD
2405:1e00::,2405:1e00:ffff:ffff:ffff:ffff:ffff:ffff,IN
2405:1f00::,2405:1f00:ffff:ffff:ffff:ffff:ffff:ffff,TL
-2405:2000::,2405:2001:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2405:2000::,2405:2000:400:ffff:ffff:ffff:ffff:ffff,IN
+2405:2000:401::,2405:2000:401:ffff:ffff:ffff:ffff:ffff,HK
+2405:2000:402::,2405:2000:7ff:ffff:ffff:ffff:ffff:ffff,IN
+2405:2000:800::,2405:2000:800:ff:ffff:ffff:ffff:ffff,SG
+2405:2000:800:100::,2405:2000:8ff:ffff:ffff:ffff:ffff:ffff,IN
+2405:2000:900::,2405:2000:900:ff:ffff:ffff:ffff:ffff,JP
+2405:2000:900:100::,2405:2000:ffc7:ffff:ffff:ffff:ffff:ffff,IN
+2405:2000:ffc8::,2405:2000:ffc8:ffff:ffff:ffff:ffff:ffff,SG
+2405:2000:ffc9::,2405:2001:ffff:ffff:ffff:ffff:ffff:ffff,IN
2405:2200::,2405:2200:ffff:ffff:ffff:ffff:ffff:ffff,NZ
2405:2300::,2405:2300:ffff:ffff:ffff:ffff:ffff:ffff,SG
2405:2400::,2405:2400:ffff:ffff:ffff:ffff:ffff:ffff,IN
@@ -5628,7 +6365,6 @@
2405:7000::,2405:7000:ffff:ffff:ffff:ffff:ffff:ffff,JP
2405:7100::,2405:7100:ffff:ffff:ffff:ffff:ffff:ffff,AU
2405:7200::,2405:7200:ffff:ffff:ffff:ffff:ffff:ffff,BD
-2405:7300::,2405:7300:ffff:ffff:ffff:ffff:ffff:ffff,MN
2405:7400::,2405:7400:ffff:ffff:ffff:ffff:ffff:ffff,GU
2405:7500::,2405:7500:ffff:ffff:ffff:ffff:ffff:ffff,AU
2405:7600::,2405:7600:ffff:ffff:ffff:ffff:ffff:ffff,BD
@@ -5794,7 +6530,9 @@
2406:1f00::,2406:1f00:ffff:ffff:ffff:ffff:ffff:ffff,AU
2406:2000::,2406:2000:ef95:ffff:ffff:ffff:ffff:ffff,TW
2406:2000:ef96::,2406:2000:ef96:ffff:ffff:ffff:ffff:ffff,HK
-2406:2000:ef97::,2406:2000:efb9:ffff:ffff:ffff:ffff:ffff,TW
+2406:2000:ef97::,2406:2000:efa5:ffff:ffff:ffff:ffff:ffff,TW
+2406:2000:efa6::,2406:2000:efa6:ffff:ffff:ffff:ffff:ffff,SG
+2406:2000:efa7::,2406:2000:efb9:ffff:ffff:ffff:ffff:ffff,TW
2406:2000:efba::,2406:2000:efba:ffff:ffff:ffff:ffff:ffff,HK
2406:2000:efbb::,2406:2000:ffff:ffff:ffff:ffff:ffff:ffff,TW
2406:2100::,2406:2100:ffff:ffff:ffff:ffff:ffff:ffff,IN
@@ -5817,7 +6555,6 @@
2406:3200::,2406:3200:ffff:ffff:ffff:ffff:ffff:ffff,PH
2406:3300::,2406:3300:ffff:ffff:ffff:ffff:ffff:ffff,CN
2406:3400::,2406:3400:ffff:ffff:ffff:ffff:ffff:ffff,AU
-2406:3500::,2406:3500:ffff:ffff:ffff:ffff:ffff:ffff,PG
2406:3600::,2406:3600:ffff:ffff:ffff:ffff:ffff:ffff,AU
2406:3700::,2406:3700:ffff:ffff:ffff:ffff:ffff:ffff,CN
2406:3800::,2406:3800:ffff:ffff:ffff:ffff:ffff:ffff,AU
@@ -5878,7 +6615,6 @@
2406:6f00::,2406:6f00:ffff:ffff:ffff:ffff:ffff:ffff,SG
2406:7000::,2406:7000:ffff:ffff:ffff:ffff:ffff:ffff,PK
2406:7100::,2406:7100:ffff:ffff:ffff:ffff:ffff:ffff,NZ
-2406:7200::,2406:7200:ffff:ffff:ffff:ffff:ffff:ffff,HK
2406:7300::,2406:7300:ffff:ffff:ffff:ffff:ffff:ffff,AU
2406:7400::,2406:7400:ffff:ffff:ffff:ffff:ffff:ffff,IN
2406:7500::,2406:7500:ffff:ffff:ffff:ffff:ffff:ffff,AU
@@ -5899,7 +6635,7 @@
2406:8600::,2406:8600:ffff:ffff:ffff:ffff:ffff:ffff,IN
2406:8700::,2406:8700:ffff:ffff:ffff:ffff:ffff:ffff,AU
2406:8800::,2406:8800:ffff:ffff:ffff:ffff:ffff:ffff,IN
-2406:8900::,2406:8900:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2406:8900::,2406:8901:ffff:ffff:ffff:ffff:ffff:ffff,AU
2406:8a00::,2406:8a00:ffff:ffff:ffff:ffff:ffff:ffff,AU
2406:8b00::,2406:8b00:ffff:ffff:ffff:ffff:ffff:ffff,MY
2406:8c00::,2406:8c00:ffff:ffff:ffff:ffff:ffff:ffff,JP
@@ -5977,6 +6713,8 @@
2406:d600::,2406:d600:ffff:ffff:ffff:ffff:ffff:ffff,IN
2406:d700::,2406:d700:ffff:ffff:ffff:ffff:ffff:ffff,KR
2406:d800::,2406:d800:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2406:da00::,2406:da00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2406:da01::,2406:daff:ffff:ffff:ffff:ffff:ffff:ffff,JP
2406:db00::,2406:db00:ffff:ffff:ffff:ffff:ffff:ffff,IN
2406:dc00::,2406:dc00:ffff:ffff:ffff:ffff:ffff:ffff,CN
2406:dd00::,2406:dd00:ffff:ffff:ffff:ffff:ffff:ffff,CN
@@ -6135,7 +6873,6 @@
2407:7b00::,2407:7b00:ffff:ffff:ffff:ffff:ffff:ffff,HK
2407:7c00::,2407:7c00:ffff:ffff:ffff:ffff:ffff:ffff,SG
2407:7d00::,2407:7d00:ffff:ffff:ffff:ffff:ffff:ffff,CN
-2407:7e00::,2407:7e00:ffff:ffff:ffff:ffff:ffff:ffff,HK
2407:7f00::,2407:7f00:ffff:ffff:ffff:ffff:ffff:ffff,NZ
2407:8000::,2407:8000:ffff:ffff:ffff:ffff:ffff:ffff,HK
2407:8100::,2407:8100:ffff:ffff:ffff:ffff:ffff:ffff,SG
@@ -6271,6 +7008,7 @@
240c::,240c:f:ffff:ffff:ffff:ffff:ffff:ffff,CN
240c:8000::,240c:87ff:ffff:ffff:ffff:ffff:ffff:ffff,CN
240d::,240d:1f:ffff:ffff:ffff:ffff:ffff:ffff,JP
+240d:8000::,240d:80ff:ffff:ffff:ffff:ffff:ffff:ffff,CN
240e::,240e:fff:ffff:ffff:ffff:ffff:ffff:ffff,CN
240f::,240f:ff:ffff:ffff:ffff:ffff:ffff:ffff,JP
2600::,2600:7:ffff:ffff:ffff:ffff:ffff:ffff,US
@@ -6297,6 +7035,8 @@
2600:1d00::,2600:1d0f:ffff:ffff:ffff:ffff:ffff:ffff,US
2600:1e00::,2600:1e0f:ffff:ffff:ffff:ffff:ffff:ffff,VC
2600:1f00::,2600:200f:ffff:ffff:ffff:ffff:ffff:ffff,US
+2600:2100::,2600:210f:ffff:ffff:ffff:ffff:ffff:ffff,US
+2600:2200::,2600:220f:ffff:ffff:ffff:ffff:ffff:ffff,US
2600:2400::,2600:2407:ffff:ffff:ffff:ffff:ffff:ffff,US
2600:2800::,2600:2803:ffff:ffff:ffff:ffff:ffff:ffff,US
2600:2c00::,2600:2c03:ffff:ffff:ffff:ffff:ffff:ffff,US
@@ -6323,8 +7063,11 @@
2600:8000::,2600:80ff:ffff:ffff:ffff:ffff:ffff:ffff,US
2600:8400::,2600:840f:ffff:ffff:ffff:ffff:ffff:ffff,BB
2600:8800::,2600:880f:ffff:ffff:ffff:ffff:ffff:ffff,US
+2600:8c00::,2600:8c0f:ffff:ffff:ffff:ffff:ffff:ffff,US
2600:e000::,2600:e00f:ffff:ffff:ffff:ffff:ffff:ffff,CA
-2601::,2601:f:ffff:ffff:ffff:ffff:ffff:ffff,US
+2601::,2601:6:117f:ffff:ffff:ffff:ffff:ffff,US
+2601:6:1180::,2601:6:1180:ffff:ffff:ffff:ffff:ffff,CA
+2601:6:1181::,2601:fff:ffff:ffff:ffff:ffff:ffff:ffff,US
2602::,2602:10f:ffff:ffff:ffff:ffff:ffff:ffff,US
2602:200::,2602:200:ffff:ffff:ffff:ffff:ffff:ffff,CA
2602:210::,2602:210:ffff:ffff:ffff:ffff:ffff:ffff,CA
@@ -6332,9 +7075,36 @@
2602:230::,2602:231:ffff:ffff:ffff:ffff:ffff:ffff,US
2602:232::,2602:232:ffff:ffff:ffff:ffff:ffff:ffff,CA
2602:240::,2602:25f:ffff:ffff:ffff:ffff:ffff:ffff,US
-2602:300::,2602:306:b868:ffff:ffff:ffff:ffff:ffff,US
-2602:306:b869::,2602:306:b869:ffff:ffff:ffff:ffff:ffff,NL
-2602:306:b86a::,2602:3ff:ffff:ffff:ffff:ffff:ffff:ffff,US
+2602:300::,2602:3ff:ffff:ffff:ffff:ffff:ffff:ffff,US
+2602:ff87::,2602:ff87:fff:ffff:ffff:ffff:ffff:ffff,US
+2602:ff88::,2602:ff88:fff:ffff:ffff:ffff:ffff:ffff,US
+2602:ff89::,2602:ff89:fff:ffff:ffff:ffff:ffff:ffff,US
+2602:ff8a::,2602:ff8a:fff:ffff:ffff:ffff:ffff:ffff,US
+2602:ff8b::,2602:ff8b:fff:ffff:ffff:ffff:ffff:ffff,US
+2602:ff8c::,2602:ff8c:fff:ffff:ffff:ffff:ffff:ffff,US
+2602:ff8d::,2602:ff8d:fff:ffff:ffff:ffff:ffff:ffff,US
+2602:ff8e::,2602:ff8e:fff:ffff:ffff:ffff:ffff:ffff,US
+2602:ff8f::,2602:ff8f:fff:ffff:ffff:ffff:ffff:ffff,US
+2602:ff90::,2602:ff90:fff:ffff:ffff:ffff:ffff:ffff,US
+2602:ff91::,2602:ff91:fff:ffff:ffff:ffff:ffff:ffff,US
+2602:ff92::,2602:ff92:fff:ffff:ffff:ffff:ffff:ffff,US
+2602:ff93::,2602:ff93:fff:ffff:ffff:ffff:ffff:ffff,CA
+2602:ff94::,2602:ff94:fff:ffff:ffff:ffff:ffff:ffff,US
+2602:ff95::,2602:ff95:fff:ffff:ffff:ffff:ffff:ffff,US
+2602:ff96::,2602:ff96:fff:ffff:ffff:ffff:ffff:ffff,US
+2602:ff97::,2602:ff97:fff:ffff:ffff:ffff:ffff:ffff,US
+2602:ff98::,2602:ff98:fff:ffff:ffff:ffff:ffff:ffff,CA
+2602:ff99::,2602:ff99:fff:ffff:ffff:ffff:ffff:ffff,US
+2602:ff9a::,2602:ff9a:fff:ffff:ffff:ffff:ffff:ffff,US
+2602:ff9b::,2602:ff9b:fff:ffff:ffff:ffff:ffff:ffff,US
+2602:ff9c::,2602:ff9c:fff:ffff:ffff:ffff:ffff:ffff,CA
+2602:ff9d::,2602:ff9d:fff:ffff:ffff:ffff:ffff:ffff,CA
+2602:ff9e::,2602:ff9e:fff:ffff:ffff:ffff:ffff:ffff,CA
+2602:ff9f::,2602:ff9f:fff:ffff:ffff:ffff:ffff:ffff,CA
+2602:ffa0::,2602:ffa0:1ff:ffff:ffff:ffff:ffff:ffff,VG
+2602:ffa0:200::,2602:ffa0:200:ffff:ffff:ffff:ffff:ffff,US
+2602:ffa0:201::,2602:ffa0:fff:ffff:ffff:ffff:ffff:ffff,VG
+2602:ffa1::,2602:ffa1:fff:ffff:ffff:ffff:ffff:ffff,US
2602:ffa2::,2602:ffa2:fff:ffff:ffff:ffff:ffff:ffff,US
2602:ffa3::,2602:ffa3:fff:ffff:ffff:ffff:ffff:ffff,US
2602:ffa4::,2602:ffa4:fff:ffff:ffff:ffff:ffff:ffff,US
@@ -6349,14 +7119,15 @@
2602:ffad::,2602:ffad:fff:ffff:ffff:ffff:ffff:ffff,US
2602:ffae::,2602:ffae:fff:ffff:ffff:ffff:ffff:ffff,US
2602:ffaf::,2602:ffaf:fff:ffff:ffff:ffff:ffff:ffff,US
-2602:ffb0::,2602:ffb0:fff:ffff:ffff:ffff:ffff:ffff,US
+2602:ffb0::,2602:ffb0:ffff:ffff:ffff:ffff:ffff:ffff,US
2602:ffb1::,2602:ffb1:fff:ffff:ffff:ffff:ffff:ffff,CA
2602:ffb2::,2602:ffb2:fff:ffff:ffff:ffff:ffff:ffff,US
2602:ffb3::,2602:ffb3:fff:ffff:ffff:ffff:ffff:ffff,US
2602:ffb4::,2602:ffb4:fff:ffff:ffff:ffff:ffff:ffff,US
2602:ffb5::,2602:ffb5:fff:ffff:ffff:ffff:ffff:ffff,US
2602:ffb6::,2602:ffb6:fff:ffff:ffff:ffff:ffff:ffff,CA
-2602:ffb7::,2602:ffb7:fff:ffff:ffff:ffff:ffff:ffff,US
+2602:ffb7::,2602:ffb7:eff:ffff:ffff:ffff:ffff:ffff,US
+2602:ffb7:f00::,2602:ffb7:fff:ffff:ffff:ffff:ffff:ffff,DE
2602:ffb8::,2602:ffb8:fff:ffff:ffff:ffff:ffff:ffff,US
2602:ffb9::,2602:ffb9:fff:ffff:ffff:ffff:ffff:ffff,US
2602:ffba::,2602:ffba:fff:ffff:ffff:ffff:ffff:ffff,US
@@ -6373,8 +7144,7 @@
2602:ffc5::,2602:ffc5:fff:ffff:ffff:ffff:ffff:ffff,US
2602:ffc6::,2602:ffc6:fff:ffff:ffff:ffff:ffff:ffff,US
2602:ffc7::,2602:ffc7:fff:ffff:ffff:ffff:ffff:ffff,US
-2602:ffc8::,2602:ffc8:fff:ffff:ffff:ffff:ffff:ffff,US
-2602:ffc9::,2602:ffc9:fff:ffff:ffff:ffff:ffff:ffff,US
+2602:ffc8::,2602:ffc9:fff:ffff:ffff:ffff:ffff:ffff,US
2602:ffca::,2602:ffca:fff:ffff:ffff:ffff:ffff:ffff,US
2602:ffcb::,2602:ffcb:fff:ffff:ffff:ffff:ffff:ffff,US
2602:ffcc::,2602:ffcc:fff:ffff:ffff:ffff:ffff:ffff,US
@@ -6390,7 +7160,9 @@
2602:ffd7::,2602:ffd7:fff:ffff:ffff:ffff:ffff:ffff,US
2602:ffd8::,2602:ffd8:fff:ffff:ffff:ffff:ffff:ffff,US
2602:ffd9::,2602:ffd9:fff:ffff:ffff:ffff:ffff:ffff,US
-2602:ffda::,2602:ffda:fff:ffff:ffff:ffff:ffff:ffff,US
+2602:ffda::,2602:ffda:aa9:ffff:ffff:ffff:ffff:ffff,US
+2602:ffda:aaa::,2602:ffda:aaa:ffff:ffff:ffff:ffff:ffff,NL
+2602:ffda:aab::,2602:ffda:fff:ffff:ffff:ffff:ffff:ffff,US
2602:ffdb::,2602:ffdb:fff:ffff:ffff:ffff:ffff:ffff,US
2602:ffdc::,2602:ffdc:fff:ffff:ffff:ffff:ffff:ffff,US
2602:ffdd::,2602:ffdd:fff:ffff:ffff:ffff:ffff:ffff,US
@@ -6426,6 +7198,7 @@
2602:fffd::,2602:fffd:fff:ffff:ffff:ffff:ffff:ffff,CA
2602:ffff::,2602:ffff:fff:ffff:ffff:ffff:ffff:ffff,US
2603::,2603:10ff:ffff:ffff:ffff:ffff:ffff:ffff,US
+2603:2000::,2603:2fff:ffff:ffff:ffff:ffff:ffff:ffff,US
2604::,2604::ffff:ffff:ffff:ffff:ffff:ffff,US
2604:10::,2604:10:ffff:ffff:ffff:ffff:ffff:ffff,US
2604:100::,2604:100:ffff:ffff:ffff:ffff:ffff:ffff,US
@@ -6540,7 +7313,6 @@
2604:3780::,2604:3780:ffff:ffff:ffff:ffff:ffff:ffff,US
2604:3800::,2604:3800:ffff:ffff:ffff:ffff:ffff:ffff,US
2604:3880::,2604:3880:ffff:ffff:ffff:ffff:ffff:ffff,US
-2604:3900::,2604:3900:ffff:ffff:ffff:ffff:ffff:ffff,US
2604:3980::,2604:3980:ffff:ffff:ffff:ffff:ffff:ffff,US
2604:3a00::,2604:3a00:ffff:ffff:ffff:ffff:ffff:ffff,US
2604:3a80::,2604:3a80:ffff:ffff:ffff:ffff:ffff:ffff,CA
@@ -6725,7 +7497,6 @@
2604:9500::,2604:9500:ffff:ffff:ffff:ffff:ffff:ffff,US
2604:9580::,2604:9580:ffff:ffff:ffff:ffff:ffff:ffff,US
2604:9600::,2604:9600:ffff:ffff:ffff:ffff:ffff:ffff,US
-2604:9680::,2604:9680:ffff:ffff:ffff:ffff:ffff:ffff,US
2604:9700::,2604:9700:ffff:ffff:ffff:ffff:ffff:ffff,US
2604:9780::,2604:9780:ffff:ffff:ffff:ffff:ffff:ffff,US
2604:9800::,2604:9800:ffff:ffff:ffff:ffff:ffff:ffff,US
@@ -6862,12 +7633,11 @@
2604:da00::,2604:da00:fff:ffff:ffff:ffff:ffff:ffff,US
2604:da80::,2604:da80:ffff:ffff:ffff:ffff:ffff:ffff,US
2604:db00::,2604:db00:ffff:ffff:ffff:ffff:ffff:ffff,CA
-2604:db80::,2604:db80:ffff:ffff:ffff:ffff:ffff:ffff,US
2604:dc00::,2604:dc00:ffff:ffff:ffff:ffff:ffff:ffff,CA
2604:dc80::,2604:dc80:ffff:ffff:ffff:ffff:ffff:ffff,US
2604:dd00::,2604:dd00:ffff:ffff:ffff:ffff:ffff:ffff,US
2604:dd80::,2604:dd80:ffff:ffff:ffff:ffff:ffff:ffff,US
-2604:de00::,2604:de00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:de00::,2604:de00:fff:ffff:ffff:ffff:ffff:ffff,US
2604:de80::,2604:de80:ffff:ffff:ffff:ffff:ffff:ffff,US
2604:df00::,2604:df00:ffff:ffff:ffff:ffff:ffff:ffff,US
2604:df80::,2604:df80:ffff:ffff:ffff:ffff:ffff:ffff,US
@@ -6902,7 +7672,6 @@
2604:ee00::,2604:ee00:fff:ffff:ffff:ffff:ffff:ffff,US
2604:ee80::,2604:ee80:ffff:ffff:ffff:ffff:ffff:ffff,US
2604:ef00::,2604:ef00:ffff:ffff:ffff:ffff:ffff:ffff,CA
-2604:ef80::,2604:ef80:ffff:ffff:ffff:ffff:ffff:ffff,US
2604:f000::,2604:f000:ffff:ffff:ffff:ffff:ffff:ffff,CA
2604:f080::,2604:f080:ffff:ffff:ffff:ffff:ffff:ffff,US
2604:f100::,2604:f100:ffff:ffff:ffff:ffff:ffff:ffff,US
@@ -6918,7 +7687,6 @@
2604:f600::,2604:f600:ffff:ffff:ffff:ffff:ffff:ffff,US
2604:f680::,2604:f680:ffff:ffff:ffff:ffff:ffff:ffff,CA
2604:f700::,2604:f700:ffff:ffff:ffff:ffff:ffff:ffff,US
-2604:f780::,2604:f780:ffff:ffff:ffff:ffff:ffff:ffff,US
2604:f800::,2604:f800:ffff:ffff:ffff:ffff:ffff:ffff,CA
2604:f880::,2604:f880:ffff:ffff:ffff:ffff:ffff:ffff,US
2604:f900::,2604:f900:ffff:ffff:ffff:ffff:ffff:ffff,US
@@ -6946,7 +7714,6 @@
2605:400::,2605:400:ffff:ffff:ffff:ffff:ffff:ffff,US
2605:480::,2605:480:ffff:ffff:ffff:ffff:ffff:ffff,US
2605:500::,2605:500:ffff:ffff:ffff:ffff:ffff:ffff,CA
-2605:580::,2605:580:ffff:ffff:ffff:ffff:ffff:ffff,US
2605:600::,2605:600:ffff:ffff:ffff:ffff:ffff:ffff,US
2605:680::,2605:680:ffff:ffff:ffff:ffff:ffff:ffff,US
2605:700::,2605:700:ffff:ffff:ffff:ffff:ffff:ffff,US
@@ -6960,7 +7727,6 @@
2605:b00::,2605:b00:fff:ffff:ffff:ffff:ffff:ffff,US
2605:b80::,2605:b80:ffff:ffff:ffff:ffff:ffff:ffff,US
2605:c00::,2605:c00:ffff:ffff:ffff:ffff:ffff:ffff,CA
-2605:c80::,2605:c80:ffff:ffff:ffff:ffff:ffff:ffff,US
2605:d00::,2605:d00:ffff:ffff:ffff:ffff:ffff:ffff,US
2605:d80::,2605:d80:ffff:ffff:ffff:ffff:ffff:ffff,US
2605:e00::,2605:e00:ffff:ffff:ffff:ffff:ffff:ffff,US
@@ -7064,7 +7830,7 @@
2605:4000::,2605:4000:ffff:ffff:ffff:ffff:ffff:ffff,US
2605:4080::,2605:4080:ffff:ffff:ffff:ffff:ffff:ffff,US
2605:4100::,2605:4100:ffff:ffff:ffff:ffff:ffff:ffff,US
-2605:4180::,2605:4180:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:4180::,2605:418f:ffff:ffff:ffff:ffff:ffff:ffff,US
2605:4200::,2605:4200:ffff:ffff:ffff:ffff:ffff:ffff,US
2605:4280::,2605:4280:ffff:ffff:ffff:ffff:ffff:ffff,US
2605:4300::,2605:4300:ffff:ffff:ffff:ffff:ffff:ffff,US
@@ -7123,7 +7889,7 @@
2605:5e80::,2605:5e80:ffff:ffff:ffff:ffff:ffff:ffff,US
2605:5f00::,2605:5f00:ffff:ffff:ffff:ffff:ffff:ffff,US
2605:5f80::,2605:5f80:ffff:ffff:ffff:ffff:ffff:ffff,US
-2605:6000::,2605:6000:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:6000::,2605:600f:ffff:ffff:ffff:ffff:ffff:ffff,US
2605:6080::,2605:6080:ffff:ffff:ffff:ffff:ffff:ffff,US
2605:6100::,2605:6100:ffff:ffff:ffff:ffff:ffff:ffff,US
2605:6180::,2605:6180:ffff:ffff:ffff:ffff:ffff:ffff,US
@@ -7171,12 +7937,10 @@
2605:7680::,2605:7680:ffff:ffff:ffff:ffff:ffff:ffff,US
2605:7700::,2605:7700:ffff:ffff:ffff:ffff:ffff:ffff,US
2605:7780::,2605:7780:ffff:ffff:ffff:ffff:ffff:ffff,US
-2605:7800::,2605:7801:ffff:ffff:ffff:ffff:ffff:ffff,US
2605:7880::,2605:7880:ffff:ffff:ffff:ffff:ffff:ffff,US
2605:7900::,2605:7900:ffff:ffff:ffff:ffff:ffff:ffff,US
2605:7980::,2605:7980:ffff:ffff:ffff:ffff:ffff:ffff,US
2605:7a00::,2605:7a00:ffff:ffff:ffff:ffff:ffff:ffff,US
-2605:7a80::,2605:7a80:ffff:ffff:ffff:ffff:ffff:ffff,US
2605:7b00::,2605:7b00:ffff:ffff:ffff:ffff:ffff:ffff,US
2605:7b80::,2605:7b80:ffff:ffff:ffff:ffff:ffff:ffff,US
2605:7c00::,2605:7c00:ffff:ffff:ffff:ffff:ffff:ffff,CA
@@ -7216,7 +7980,6 @@
2605:8d00::,2605:8d00:ffff:ffff:ffff:ffff:ffff:ffff,US
2605:8d80::,2605:8d80:ffff:ffff:ffff:ffff:ffff:ffff,CA
2605:8e00::,2605:8e00:ffff:ffff:ffff:ffff:ffff:ffff,US
-2605:8e80::,2605:8e80:ffff:ffff:ffff:ffff:ffff:ffff,US
2605:8f00::,2605:8f00:ffff:ffff:ffff:ffff:ffff:ffff,US
2605:8f80::,2605:8f80:ffff:ffff:ffff:ffff:ffff:ffff,US
2605:9000::,2605:9000:ffff:ffff:ffff:ffff:ffff:ffff,CA
@@ -7312,89 +8075,173 @@
2605:bd00::,2605:bd00:ffff:ffff:ffff:ffff:ffff:ffff,US
2605:bd80::,2605:bd80:ffff:ffff:ffff:ffff:ffff:ffff,US
2605:be00::,2605:be00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:be80::,2605:be80:ffff:ffff:ffff:ffff:ffff:ffff,US
2605:bf00::,2605:bf00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:bf80::,2605:bf80:ffff:ffff:ffff:ffff:ffff:ffff,US
2605:c000::,2605:c000:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:c080::,2605:c080:ffff:ffff:ffff:ffff:ffff:ffff,GD
2605:c100::,2605:c100:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:c180::,2605:c180:ffff:ffff:ffff:ffff:ffff:ffff,US
2605:c200::,2605:c200:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:c280::,2605:c280:ffff:ffff:ffff:ffff:ffff:ffff,US
2605:c300::,2605:c300:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:c380::,2605:c380:ffff:ffff:ffff:ffff:ffff:ffff,US
2605:c400::,2605:c400:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:c480::,2605:c480:ffff:ffff:ffff:ffff:ffff:ffff,US
2605:c500::,2605:c500:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2605:c580::,2605:c580:ffff:ffff:ffff:ffff:ffff:ffff,CA
2605:c600::,2605:c600:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:c680::,2605:c680:ffff:ffff:ffff:ffff:ffff:ffff,US
2605:c700::,2605:c700:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2605:c780::,2605:c780:ffff:ffff:ffff:ffff:ffff:ffff,US
2605:c800::,2605:c800:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:c880::,2605:c880:ffff:ffff:ffff:ffff:ffff:ffff,US
2605:c900::,2605:c900:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:c980::,2605:c980:ffff:ffff:ffff:ffff:ffff:ffff,CA
2605:ca00::,2605:ca00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:ca80::,2605:ca80:ffff:ffff:ffff:ffff:ffff:ffff,US
2605:cb00::,2605:cb00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:cb80::,2605:cb80:ffff:ffff:ffff:ffff:ffff:ffff,US
2605:cc00::,2605:cc00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:cc80::,2605:cc80:ffff:ffff:ffff:ffff:ffff:ffff,US
2605:cd00::,2605:cd00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:cd80::,2605:cd80:ffff:ffff:ffff:ffff:ffff:ffff,US
2605:ce00::,2605:ce00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:ce80::,2605:ce80:ffff:ffff:ffff:ffff:ffff:ffff,US
2605:cf00::,2605:cf00:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2605:cf80::,2605:cf80:ffff:ffff:ffff:ffff:ffff:ffff,CA
2605:d000::,2605:d000:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:d080::,2605:d080:ffff:ffff:ffff:ffff:ffff:ffff,US
2605:d100::,2605:d100:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:d180::,2605:d180:ffff:ffff:ffff:ffff:ffff:ffff,US
2605:d200::,2605:d200:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:d280::,2605:d280:ffff:ffff:ffff:ffff:ffff:ffff,US
2605:d300::,2605:d300:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:d380::,2605:d380:ffff:ffff:ffff:ffff:ffff:ffff,US
2605:d400::,2605:d400:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:d480::,2605:d480:ffff:ffff:ffff:ffff:ffff:ffff,US
2605:d500::,2605:d500:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2605:d580::,2605:d580:ffff:ffff:ffff:ffff:ffff:ffff,US
2605:d600::,2605:d600:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:d680::,2605:d680:ffff:ffff:ffff:ffff:ffff:ffff,US
2605:d700::,2605:d700:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:d780::,2605:d780:ffff:ffff:ffff:ffff:ffff:ffff,US
2605:d800::,2605:d800:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:d880::,2605:d880:ffff:ffff:ffff:ffff:ffff:ffff,DM
2605:d900::,2605:d900:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:d980::,2605:d980:ffff:ffff:ffff:ffff:ffff:ffff,US
2605:da00::,2605:da00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:da80::,2605:da80:ffff:ffff:ffff:ffff:ffff:ffff,US
2605:db00::,2605:db00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:db80::,2605:db80:ffff:ffff:ffff:ffff:ffff:ffff,US
2605:dc00::,2605:dc00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:dc80::,2605:dc80:ffff:ffff:ffff:ffff:ffff:ffff,US
2605:dd00::,2605:dd00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:dd80::,2605:dd80:ffff:ffff:ffff:ffff:ffff:ffff,US
2605:de00::,2605:de00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:de80::,2605:de80:ffff:ffff:ffff:ffff:ffff:ffff,VI
2605:df00::,2605:df00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:df80::,2605:df80:ffff:ffff:ffff:ffff:ffff:ffff,US
2605:e000::,2605:e000:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:e080::,2605:e080:ffff:ffff:ffff:ffff:ffff:ffff,US
2605:e100::,2605:e100:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:e180::,2605:e180:ffff:ffff:ffff:ffff:ffff:ffff,US
2605:e200::,2605:e200:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2605:e280::,2605:e280:ffff:ffff:ffff:ffff:ffff:ffff,US
2605:e300::,2605:e300:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:e380::,2605:e380:ffff:ffff:ffff:ffff:ffff:ffff,US
2605:e400::,2605:e400:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:e480::,2605:e480:ffff:ffff:ffff:ffff:ffff:ffff,US
2605:e500::,2605:e500:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:e580::,2605:e580:ffff:ffff:ffff:ffff:ffff:ffff,US
2605:e600::,2605:e600:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:e680::,2605:e680:ffff:ffff:ffff:ffff:ffff:ffff,CA
2605:e700::,2605:e700:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:e780::,2605:e780:ffff:ffff:ffff:ffff:ffff:ffff,US
2605:e800::,2605:e800:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:e880::,2605:e880:ffff:ffff:ffff:ffff:ffff:ffff,US
2605:e900::,2605:e900:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:e980::,2605:e980:ffff:ffff:ffff:ffff:ffff:ffff,US
2605:ea00::,2605:ea00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:ea80::,2605:ea80:ffff:ffff:ffff:ffff:ffff:ffff,US
2605:eb00::,2605:eb00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:eb80::,2605:eb80:ffff:ffff:ffff:ffff:ffff:ffff,US
2605:ec00::,2605:ec00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:ec80::,2605:ec80:ffff:ffff:ffff:ffff:ffff:ffff,US
2605:ed00::,2605:ed00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:ed80::,2605:ed80:ffff:ffff:ffff:ffff:ffff:ffff,US
2605:ee00::,2605:ee00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:ee80::,2605:ee80:fff:ffff:ffff:ffff:ffff:ffff,US
2605:ef00::,2605:ef00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:ef80::,2605:ef80:ffff:ffff:ffff:ffff:ffff:ffff,US
2605:f000::,2605:f000:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:f080::,2605:f080:ffff:ffff:ffff:ffff:ffff:ffff,US
2605:f100::,2605:f100:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:f180::,2605:f180:ffff:ffff:ffff:ffff:ffff:ffff,US
2605:f200::,2605:f200:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:f280::,2605:f280:ffff:ffff:ffff:ffff:ffff:ffff,US
2605:f300::,2605:f300:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:f380::,2605:f380:ffff:ffff:ffff:ffff:ffff:ffff,US
2605:f400::,2605:f400:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:f480::,2605:f480:ffff:ffff:ffff:ffff:ffff:ffff,US
2605:f500::,2605:f500:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:f580::,2605:f580:ffff:ffff:ffff:ffff:ffff:ffff,US
2605:f600::,2605:f600:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:f680::,2605:f680:ffff:ffff:ffff:ffff:ffff:ffff,US
2605:f700::,2605:f700:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:f780::,2605:f780:fff:ffff:ffff:ffff:ffff:ffff,US
2605:f800::,2605:f800:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:f880::,2605:f880:ffff:ffff:ffff:ffff:ffff:ffff,US
2605:f900::,2605:f900:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:f980::,2605:f980:ffff:ffff:ffff:ffff:ffff:ffff,US
2605:fa00::,2605:fa00:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2605:fa80::,2605:fa80:ffff:ffff:ffff:ffff:ffff:ffff,US
2605:fb00::,2605:fb00:ffff:ffff:ffff:ffff:ffff:ffff,US
-2605:fc00::,2605:fc00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:fb80::,2605:fb80:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:fc00:1::,2605:fc00:1:ffff:ffff:ffff:ffff:ffff,US
+2605:fc80::,2605:fc80:ffff:ffff:ffff:ffff:ffff:ffff,US
2605:fd00::,2605:fd00:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2605:fd80::,2605:fd80:ffff:ffff:ffff:ffff:ffff:ffff,US
2605:fe00::,2605:fe00:fff:ffff:ffff:ffff:ffff:ffff,US
+2605:fe80::,2605:fe80:ffff:ffff:ffff:ffff:ffff:ffff,US
2605:ff00::,2605:ff00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:ff80::,2605:ff80:ffff:ffff:ffff:ffff:ffff:ffff,US
2606::,2606::ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:80::,2606:80:ffff:ffff:ffff:ffff:ffff:ffff,US
2606:100::,2606:100:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:180::,2606:180:ffff:ffff:ffff:ffff:ffff:ffff,US
2606:200::,2606:200:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:280::,2606:280:ffff:ffff:ffff:ffff:ffff:ffff,US
2606:300::,2606:300:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:380::,2606:380:ffff:ffff:ffff:ffff:ffff:ffff,US
2606:400::,2606:400:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:480::,2606:480:ffff:ffff:ffff:ffff:ffff:ffff,BM
2606:500::,2606:500:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:580::,2606:580:ffff:ffff:ffff:ffff:ffff:ffff,US
2606:600::,2606:600:ffff:ffff:ffff:ffff:ffff:ffff,KY
+2606:680::,2606:680:ffff:ffff:ffff:ffff:ffff:ffff,US
2606:700::,2606:700:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:780::,2606:780:ffff:ffff:ffff:ffff:ffff:ffff,US
2606:800::,2606:800:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:880::,2606:880:ffff:ffff:ffff:ffff:ffff:ffff,US
2606:900::,2606:900:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:980::,2606:980:ffff:ffff:ffff:ffff:ffff:ffff,US
2606:a00::,2606:a00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:a80::,2606:a80:ffff:ffff:ffff:ffff:ffff:ffff,CA
2606:b00::,2606:b00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:b80::,2606:b80:ffff:ffff:ffff:ffff:ffff:ffff,BM
2606:c00::,2606:c00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:c80::,2606:c80:ffff:ffff:ffff:ffff:ffff:ffff,US
2606:d00::,2606:d00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:d80::,2606:d80:ffff:ffff:ffff:ffff:ffff:ffff,US
2606:e00::,2606:e00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:e80::,2606:e80:ffff:ffff:ffff:ffff:ffff:ffff,US
2606:f00::,2606:f00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:f80::,2606:f80:ffff:ffff:ffff:ffff:ffff:ffff,US
2606:1000::,2606:1000:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:1080::,2606:1080:ffff:ffff:ffff:ffff:ffff:ffff,US
2606:1100::,2606:1100:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:1180::,2606:1180:ffff:ffff:ffff:ffff:ffff:ffff,US
2606:1200::,2606:1200:ffff:ffff:ffff:ffff:ffff:ffff,US
2606:1300::,2606:1300:ffff:ffff:ffff:ffff:ffff:ffff,US
2606:1400::,2606:1400:ffff:ffff:ffff:ffff:ffff:ffff,US
@@ -7423,7 +8270,9 @@
2606:2b00::,2606:2b00:ffff:ffff:ffff:ffff:ffff:ffff,US
2606:2c00::,2606:2c00:ffff:ffff:ffff:ffff:ffff:ffff,US
2606:2d00::,2606:2d00:fff:ffff:ffff:ffff:ffff:ffff,US
-2606:2e00::,2606:2e00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:2e00::,2606:2e00:8001:ffff:ffff:ffff:ffff:ffff,US
+2606:2e00:8002::,2606:2e00:8002:ffff:ffff:ffff:ffff:ffff,JP
+2606:2e00:8003::,2606:2e00:ffff:ffff:ffff:ffff:ffff:ffff,US
2606:2f00::,2606:2f00:ffff:ffff:ffff:ffff:ffff:ffff,US
2606:3000::,2606:3000:ffff:ffff:ffff:ffff:ffff:ffff,CA
2606:3100::,2606:3100:ffff:ffff:ffff:ffff:ffff:ffff,CA
@@ -7537,9 +8386,7 @@
2606:9d00::,2606:9d00:ffff:ffff:ffff:ffff:ffff:ffff,US
2606:9e00::,2606:9e00:ffff:ffff:ffff:ffff:ffff:ffff,BM
2606:9f00::,2606:9f00:ffff:ffff:ffff:ffff:ffff:ffff,US
-2606:a000::,2606:a000:dd41:f5ff:ffff:ffff:ffff:ffff,US
-2606:a000:dd41:f600::,2606:a000:dd41:f7ff:ffff:ffff:ffff:ffff,AU
-2606:a000:dd41:f800::,2606:a000:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:a000::,2606:a000:ffff:ffff:ffff:ffff:ffff:ffff,US
2606:a100::,2606:a100:ffff:ffff:ffff:ffff:ffff:ffff,US
2606:a200::,2606:a200:ffff:ffff:ffff:ffff:ffff:ffff,US
2606:a300::,2606:a300:ffff:ffff:ffff:ffff:ffff:ffff,US
@@ -7576,7 +8423,6 @@
2606:c300::,2606:c300:ffff:ffff:ffff:ffff:ffff:ffff,US
2606:c400::,2606:c400:ffff:ffff:ffff:ffff:ffff:ffff,US
2606:c500::,2606:c500:ffff:ffff:ffff:ffff:ffff:ffff,JM
-2606:c600::,2606:c600:ffff:ffff:ffff:ffff:ffff:ffff,CA
2606:c700::,2606:c700:ffff:ffff:ffff:ffff:ffff:ffff,US
2606:c800::,2606:c800:ffff:ffff:ffff:ffff:ffff:ffff,US
2606:c900::,2606:c900:ffff:ffff:ffff:ffff:ffff:ffff,US
@@ -7629,7 +8475,6 @@
2606:f800::,2606:f800:ffff:ffff:ffff:ffff:ffff:ffff,US
2606:f900::,2606:f900:ffff:ffff:ffff:ffff:ffff:ffff,CA
2606:fa00::,2606:fa00:ffff:ffff:ffff:ffff:ffff:ffff,CA
-2606:fb00::,2606:fb00:ffff:ffff:ffff:ffff:ffff:ffff,US
2606:fc00::,2606:fc00:ffff:ffff:ffff:ffff:ffff:ffff,US
2606:fd00::,2606:fd00:ffff:ffff:ffff:ffff:ffff:ffff,US
2606:fe00::,2606:fe00:ffff:ffff:ffff:ffff:ffff:ffff,US
@@ -7950,7 +8795,7 @@
2607:f270::,2607:f270:ffff:ffff:ffff:ffff:ffff:ffff,US
2607:f278::,2607:f278:ffff:ffff:ffff:ffff:ffff:ffff,US
2607:f280::,2607:f281:ffff:ffff:ffff:ffff:ffff:ffff,US
-2607:f288::,2607:f288:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2607:f288::,2607:f288:ffff:ffff:ffff:ffff:ffff:ffff,US
2607:f290::,2607:f290:ffff:ffff:ffff:ffff:ffff:ffff,US
2607:f298::,2607:f298:ffff:ffff:ffff:ffff:ffff:ffff,US
2607:f2a8::,2607:f2a8:ffff:ffff:ffff:ffff:ffff:ffff,US
@@ -7989,7 +8834,6 @@
2607:f3d0::,2607:f3d0:ffff:ffff:ffff:ffff:ffff:ffff,US
2607:f3d8::,2607:f3d8:ffff:ffff:ffff:ffff:ffff:ffff,CA
2607:f3e0::,2607:f3e0:ffff:ffff:ffff:ffff:ffff:ffff,CA
-2607:f3e8::,2607:f3e8:ffff:ffff:ffff:ffff:ffff:ffff,US
2607:f3f0::,2607:f3f0:ffff:ffff:ffff:ffff:ffff:ffff,US
2607:f3f8::,2607:f3f8:ffff:ffff:ffff:ffff:ffff:ffff,US
2607:f400::,2607:f400:ffff:ffff:ffff:ffff:ffff:ffff,US
@@ -8089,7 +8933,11 @@
2607:f720::,2607:f720:ffff:ffff:ffff:ffff:ffff:ffff,US
2607:f728::,2607:f728:ffff:ffff:ffff:ffff:ffff:ffff,US
2607:f738::,2607:f738:ffff:ffff:ffff:ffff:ffff:ffff,US
-2607:f740::,2607:f740:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f740::,2607:f740:e:ffff:ffff:ffff:ffff:ffff,US
+2607:f740:f::,2607:f740:f:ffff:ffff:ffff:ffff:ffff,CA
+2607:f740:10::,2607:f740:6f:ffff:ffff:ffff:ffff:ffff,US
+2607:f740:70::,2607:f740:70:ffff:ffff:ffff:ffff:ffff,CA
+2607:f740:71::,2607:f740:ffff:ffff:ffff:ffff:ffff:ffff,US
2607:f748::,2607:f748:ffff:ffff:ffff:ffff:ffff:ffff,CA
2607:f750::,2607:f750:ffff:ffff:ffff:ffff:ffff:ffff,US
2607:f758::,2607:f758:ffff:ffff:ffff:ffff:ffff:ffff,US
@@ -8213,7 +9061,6 @@
2607:fb50::,2607:fb50:ffff:ffff:ffff:ffff:ffff:ffff,US
2607:fb58::,2607:fb58:ffff:ffff:ffff:ffff:ffff:ffff,US
2607:fb60::,2607:fb60:ffff:ffff:ffff:ffff:ffff:ffff,US
-2607:fb68::,2607:fb68:ffff:ffff:ffff:ffff:ffff:ffff,US
2607:fb70::,2607:fb70:ffff:ffff:ffff:ffff:ffff:ffff,US
2607:fb78::,2607:fb78:ffff:ffff:ffff:ffff:ffff:ffff,US
2607:fb80::,2607:fb80:ffff:ffff:ffff:ffff:ffff:ffff,US
@@ -8247,7 +9094,6 @@
2607:fc68::,2607:fc68:ffff:ffff:ffff:ffff:ffff:ffff,US
2607:fc70::,2607:fc70:ffff:ffff:ffff:ffff:ffff:ffff,CA
2607:fc78::,2607:fc78:ffff:ffff:ffff:ffff:ffff:ffff,CA
-2607:fc80::,2607:fc80:ffff:ffff:ffff:ffff:ffff:ffff,US
2607:fc88::,2607:fc88:ffff:ffff:ffff:ffff:ffff:ffff,US
2607:fc90::,2607:fc90:ffff:ffff:ffff:ffff:ffff:ffff,US
2607:fc98::,2607:fc98:ffff:ffff:ffff:ffff:ffff:ffff,US
@@ -8388,7 +9234,9 @@
2610:60::,2610:60:ffff:ffff:ffff:ffff:ffff:ffff,US
2610:68::,2610:68:ffff:ffff:ffff:ffff:ffff:ffff,US
2610:78::,2610:78:ffff:ffff:ffff:ffff:ffff:ffff,CA
-2610:80::,2610:88:ffff:ffff:ffff:ffff:ffff:ffff,US
+2610:80::,2610:88:1:ffff:ffff:ffff:ffff:ffff,US
+2610:88:2::,2610:88:2:ffff:ffff:ffff:ffff:ffff,PL
+2610:88:3::,2610:88:ffff:ffff:ffff:ffff:ffff:ffff,US
2610:98::,2610:98:ffff:ffff:ffff:ffff:ffff:ffff,CA
2610:a0::,2610:a8:ffff:ffff:ffff:ffff:ffff:ffff,US
2610:b0::,2610:b0:ffff:ffff:ffff:ffff:ffff:ffff,US
@@ -8471,7 +9319,6 @@
2620:0:320::,2620::320:ffff:ffff:ffff:ffff:ffff,US
2620:0:350::,2620::353:ffff:ffff:ffff:ffff:ffff,US
2620:0:360::,2620::361:ffff:ffff:ffff:ffff:ffff,US
-2620:0:380::,2620::380:ffff:ffff:ffff:ffff:ffff,US
2620:0:390::,2620::390:ffff:ffff:ffff:ffff:ffff,US
2620:0:3b0::,2620::3b0:ffff:ffff:ffff:ffff:ffff,US
2620:0:3c0::,2620::3c0:ffff:ffff:ffff:ffff:ffff,US
@@ -8496,7 +9343,6 @@
2620:0:700::,2620::77f:ffff:ffff:ffff:ffff:ffff,US
2620:0:800::,2620::802:ffff:ffff:ffff:ffff:ffff,US
2620:0:810::,2620::810:ffff:ffff:ffff:ffff:ffff,CA
-2620:0:820::,2620::820:ffff:ffff:ffff:ffff:ffff,US
2620:0:840::,2620::840:ffff:ffff:ffff:ffff:ffff,US
2620:0:850::,2620::850:ffff:ffff:ffff:ffff:ffff,US
2620:0:860::,2620::863:ffff:ffff:ffff:ffff:ffff,US
@@ -8528,7 +9374,6 @@
2620:0:b20::,2620::b20:ffff:ffff:ffff:ffff:ffff,US
2620:0:b30::,2620::b30:ffff:ffff:ffff:ffff:ffff,US
2620:0:b40::,2620::b40:ffff:ffff:ffff:ffff:ffff,US
-2620:0:b50::,2620::b50:ffff:ffff:ffff:ffff:ffff,US
2620:0:b60::,2620::b61:ffff:ffff:ffff:ffff:ffff,US
2620:0:b80::,2620::b80:ffff:ffff:ffff:ffff:ffff,US
2620:0:b90::,2620::b90:ffff:ffff:ffff:ffff:ffff,US
@@ -8545,7 +9390,15 @@
2620:0:c80::,2620::c80:ffff:ffff:ffff:ffff:ffff,US
2620:0:c90::,2620::ca0:ffff:ffff:ffff:ffff:ffff,US
2620:0:cb0::,2620::cb0:ffff:ffff:ffff:ffff:ffff,US
-2620:0:cc0::,2620::ccf:ffff:ffff:ffff:ffff:ffff,US
+2620:0:cc0::,2620::cc3:ffff:ffff:ffff:ffff:ffff,US
+2620:0:cc4::,2620::cc4:ffff:ffff:ffff:ffff:ffff,NL
+2620:0:cc5::,2620::cc6:ffff:ffff:ffff:ffff:ffff,US
+2620:0:cc7::,2620::cc7:ffff:ffff:ffff:ffff:ffff,DE
+2620:0:cc8::,2620::cc9:ffff:ffff:ffff:ffff:ffff,US
+2620:0:cca::,2620::cca:ffff:ffff:ffff:ffff:ffff,SG
+2620:0:ccb::,2620::ccd:ffff:ffff:ffff:ffff:ffff,US
+2620:0:cce::,2620::cce:ffff:ffff:ffff:ffff:ffff,HK
+2620:0:ccf::,2620::ccf:ffff:ffff:ffff:ffff:ffff,AU
2620:0:ce0::,2620::ce0:ffff:ffff:ffff:ffff:ffff,US
2620:0:cf0::,2620::cf0:ffff:ffff:ffff:ffff:ffff,US
2620:0:d20::,2620::d20:ffff:ffff:ffff:ffff:ffff,US
@@ -8572,21 +9425,54 @@
2620:0:ee0::,2620::ee0:ffff:ffff:ffff:ffff:ffff,US
2620:0:ef0::,2620::ef0:ffff:ffff:ffff:ffff:ffff,US
2620:0:f00::,2620::f7f:ffff:ffff:ffff:ffff:ffff,US
-2620:0:1000::,2620::101f:ffff:ffff:ffff:ffff:ffff,US
+2620:0:1000::,2620::100c:ffff:ffff:ffff:ffff:ffff,US
+2620:0:100d::,2620::100d:ffff:ffff:ffff:ffff:ffff,CA
+2620:0:100e::,2620::1016:ffff:ffff:ffff:ffff:ffff,US
+2620:0:1017::,2620::1017:ffff:ffff:ffff:ffff:ffff,CO
+2620:0:1018::,2620::101f:ffff:ffff:ffff:ffff:ffff,US
2620:0:1020::,2620::1020:ffff:ffff:ffff:ffff:ffff,MX
-2620:0:1021::,2620::103f:ffff:ffff:ffff:ffff:ffff,US
+2620:0:1021::,2620::1024:ffff:ffff:ffff:ffff:ffff,US
+2620:0:1025::,2620::1025:ffff:ffff:ffff:ffff:ffff,BR
+2620:0:1026::,2620::103f:ffff:ffff:ffff:ffff:ffff,US
2620:0:1040::,2620::1040:ffff:ffff:ffff:ffff:ffff,IE
2620:0:1041::,2620::1041:ffff:ffff:ffff:ffff:ffff,US
2620:0:1042::,2620::1042:ffff:ffff:ffff:ffff:ffff,GB
-2620:0:1043::,2620::104a:ffff:ffff:ffff:ffff:ffff,US
+2620:0:1043::,2620::1043:ffff:ffff:ffff:ffff:ffff,SE
+2620:0:1044::,2620::1044:ffff:ffff:ffff:ffff:ffff,US
+2620:0:1045::,2620::1045:ffff:ffff:ffff:ffff:ffff,IL
+2620:0:1046::,2620::1046:ffff:ffff:ffff:ffff:ffff,US
+2620:0:1047::,2620::1047:ffff:ffff:ffff:ffff:ffff,PL
+2620:0:1048::,2620::1048:ffff:ffff:ffff:ffff:ffff,US
+2620:0:1049::,2620::1049:ffff:ffff:ffff:ffff:ffff,DE
+2620:0:104a::,2620::104a:ffff:ffff:ffff:ffff:ffff,US
2620:0:104b::,2620::104b:ffff:ffff:ffff:ffff:ffff,NL
-2620:0:104c::,2620::105e:ffff:ffff:ffff:ffff:ffff,US
+2620:0:104c::,2620::104f:ffff:ffff:ffff:ffff:ffff,US
+2620:0:1050::,2620::1050:1ff:ffff:ffff:ffff:ffff,GB
+2620:0:1050:200::,2620::1050:ffff:ffff:ffff:ffff:ffff,US
+2620:0:1051::,2620::1051:ffff:ffff:ffff:ffff:ffff,ES
+2620:0:1052::,2620::1052:ffff:ffff:ffff:ffff:ffff,IE
+2620:0:1053::,2620::1053:ffff:ffff:ffff:ffff:ffff,FR
+2620:0:1054::,2620::1056:ffff:ffff:ffff:ffff:ffff,US
+2620:0:1057::,2620::1057:ffff:ffff:ffff:ffff:ffff,DE
+2620:0:1058::,2620::1059:ffff:ffff:ffff:ffff:ffff,US
+2620:0:105a::,2620::105a:ffff:ffff:ffff:ffff:ffff,UG
+2620:0:105b::,2620::105e:ffff:ffff:ffff:ffff:ffff,US
2620:0:105f::,2620::105f:ffff:ffff:ffff:ffff:ffff,CH
-2620:0:1060::,2620::106a:ffff:ffff:ffff:ffff:ffff,US
+2620:0:1060::,2620::1060:ffff:ffff:ffff:ffff:ffff,US
+2620:0:1061::,2620::1061:ffff:ffff:ffff:ffff:ffff,CH
+2620:0:1062::,2620::1068:ffff:ffff:ffff:ffff:ffff,US
+2620:0:1069::,2620::1069:ffff:ffff:ffff:ffff:ffff,PL
+2620:0:106a::,2620::106a:ffff:ffff:ffff:ffff:ffff,US
2620:0:106b::,2620::106b:ffff:ffff:ffff:ffff:ffff,RU
-2620:0:106c::,2620::1072:ffff:ffff:ffff:ffff:ffff,US
+2620:0:106c::,2620::106d:ffff:ffff:ffff:ffff:ffff,US
+2620:0:106e::,2620::106e:ffff:ffff:ffff:ffff:ffff,ZA
+2620:0:106f::,2620::1072:ffff:ffff:ffff:ffff:ffff,US
2620:0:1073::,2620::1073:ffff:ffff:ffff:ffff:ffff,GB
-2620:0:1074::,2620::10ff:ffff:ffff:ffff:ffff:ffff,US
+2620:0:1074::,2620::1079:ffff:ffff:ffff:ffff:ffff,US
+2620:0:107a::,2620::107a:ffff:ffff:ffff:ffff:ffff,IE
+2620:0:107b::,2620::10e7:ffff:ffff:ffff:ffff:ffff,US
+2620:0:10e8::,2620::10e8:ffff:ffff:ffff:ffff:ffff,AR
+2620:0:10e9::,2620::10ff:ffff:ffff:ffff:ffff:ffff,US
2620:0:1400::,2620::143f:ffff:ffff:ffff:ffff:ffff,US
2620:0:1500::,2620::157f:ffff:ffff:ffff:ffff:ffff,US
2620:0:1600::,2620::167f:ffff:ffff:ffff:ffff:ffff,US
@@ -8759,7 +9645,6 @@
2620:14:8000::,2620:14:8000:ffff:ffff:ffff:ffff:ffff,US
2620:14:c000::,2620:14:c000:ffff:ffff:ffff:ffff:ffff,CA
2620:15::,2620:15::ffff:ffff:ffff:ffff:ffff,US
-2620:15:4000::,2620:15:4000:ffff:ffff:ffff:ffff:ffff,US
2620:15:8000::,2620:15:8000:ffff:ffff:ffff:ffff:ffff,US
2620:15:c000::,2620:15:c000:ffff:ffff:ffff:ffff:ffff,US
2620:16::,2620:16::ffff:ffff:ffff:ffff:ffff,CA
@@ -9132,7 +10017,7 @@
2620:78:4000::,2620:78:4000:ffff:ffff:ffff:ffff:ffff,US
2620:78:8000::,2620:78:8000:ffff:ffff:ffff:ffff:ffff,US
2620:78:c000::,2620:78:c000:ffff:ffff:ffff:ffff:ffff,CA
-2620:79::,2620:79::ffff:ffff:ffff:ffff:ffff,US
+2620:79::,2620:79:f:ffff:ffff:ffff:ffff:ffff,US
2620:79:4000::,2620:79:4000:ffff:ffff:ffff:ffff:ffff,US
2620:79:8000::,2620:79:8000:ffff:ffff:ffff:ffff:ffff,US
2620:79:c000::,2620:79:c000:ffff:ffff:ffff:ffff:ffff,US
@@ -9142,7 +10027,7 @@
2620:7a:c000::,2620:7a:c000:ffff:ffff:ffff:ffff:ffff,US
2620:7b::,2620:7b::ffff:ffff:ffff:ffff:ffff,US
2620:7b:4000::,2620:7b:4000:ffff:ffff:ffff:ffff:ffff,US
-2620:7b:8000::,2620:7b:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:7b:8000::,2620:7b:800f:ffff:ffff:ffff:ffff:ffff,US
2620:7b:e000::,2620:7b:e000:ffff:ffff:ffff:ffff:ffff,US
2620:7c:4000::,2620:7c:4000:ffff:ffff:ffff:ffff:ffff,US
2620:7c:a000::,2620:7c:a000:ffff:ffff:ffff:ffff:ffff,US
@@ -9156,7 +10041,6 @@
2620:7f:2040::,2620:7f:2040:ffff:ffff:ffff:ffff:ffff,US
2620:7f:8000::,2620:7f:8000:ffff:ffff:ffff:ffff:ffff,CA
2620:7f:c000::,2620:7f:c000:ffff:ffff:ffff:ffff:ffff,US
-2620:80::,2620:80::ffff:ffff:ffff:ffff:ffff,US
2620:80:4000::,2620:80:4000:ffff:ffff:ffff:ffff:ffff,US
2620:80:8000::,2620:80:8000:ffff:ffff:ffff:ffff:ffff,CA
2620:80:c000::,2620:80:c000:ffff:ffff:ffff:ffff:ffff,CA
@@ -9164,12 +10048,13 @@
2620:81:4000::,2620:81:4000:ffff:ffff:ffff:ffff:ffff,US
2620:81:8000::,2620:81:8000:ffff:ffff:ffff:ffff:ffff,US
2620:81:c000::,2620:81:c000:ffff:ffff:ffff:ffff:ffff,US
+2620:82::,2620:82::ffff:ffff:ffff:ffff:ffff,US
2620:82:4000::,2620:82:4000:ffff:ffff:ffff:ffff:ffff,US
2620:82:8000::,2620:82:8000:ffff:ffff:ffff:ffff:ffff,US
2620:82:c000::,2620:82:c000:ffff:ffff:ffff:ffff:ffff,US
2620:83::,2620:83::ffff:ffff:ffff:ffff:ffff,US
2620:83:4000::,2620:83:4000:ffff:ffff:ffff:ffff:ffff,US
-2620:83:8000::,2620:83:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:83:8000::,2620:83:800f:ffff:ffff:ffff:ffff:ffff,US
2620:83:c000::,2620:83:c000:ffff:ffff:ffff:ffff:ffff,US
2620:84::,2620:84:1:ffff:ffff:ffff:ffff:ffff,US
2620:84:4000::,2620:84:4000:ffff:ffff:ffff:ffff:ffff,US
@@ -9189,7 +10074,7 @@
2620:87:c000::,2620:87:c00f:ffff:ffff:ffff:ffff:ffff,US
2620:88::,2620:88::ffff:ffff:ffff:ffff:ffff,US
2620:88:4000::,2620:88:4000:ffff:ffff:ffff:ffff:ffff,US
-2620:88:8000::,2620:88:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:88:8000::,2620:88:800f:ffff:ffff:ffff:ffff:ffff,US
2620:88:c000::,2620:88:c000:ffff:ffff:ffff:ffff:ffff,US
2620:89::,2620:89::ffff:ffff:ffff:ffff:ffff,US
2620:89:4000::,2620:89:4000:ffff:ffff:ffff:ffff:ffff,US
@@ -9225,7 +10110,7 @@
2620:91::,2620:91::ffff:ffff:ffff:ffff:ffff,US
2620:91:4000::,2620:91:4000:ffff:ffff:ffff:ffff:ffff,US
2620:91:8000::,2620:91:8000:ffff:ffff:ffff:ffff:ffff,US
-2620:91:c000::,2620:91:c000:ffff:ffff:ffff:ffff:ffff,US
+2620:91:c000::,2620:91:c00f:ffff:ffff:ffff:ffff:ffff,US
2620:92::,2620:92:f:ffff:ffff:ffff:ffff:ffff,US
2620:92:4000::,2620:92:4000:ffff:ffff:ffff:ffff:ffff,US
2620:92:8000::,2620:92:8000:ffff:ffff:ffff:ffff:ffff,US
@@ -9257,64 +10142,116 @@
2620:99::,2620:99::ffff:ffff:ffff:ffff:ffff,US
2620:99:4000::,2620:99:4000:ffff:ffff:ffff:ffff:ffff,CA
2620:99:8000::,2620:99:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:99:c000::,2620:99:c000:ffff:ffff:ffff:ffff:ffff,US
2620:9a::,2620:9a::ffff:ffff:ffff:ffff:ffff,CA
+2620:9a:4000::,2620:9a:4000:ffff:ffff:ffff:ffff:ffff,US
2620:9a:8000::,2620:9a:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:9a:c000::,2620:9a:c000:ffff:ffff:ffff:ffff:ffff,US
+2620:9b:4000::,2620:9b:4000:ffff:ffff:ffff:ffff:ffff,US
2620:9b:8000::,2620:9b:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:9b:c000::,2620:9b:c000:ffff:ffff:ffff:ffff:ffff,US
2620:9c::,2620:9c::ffff:ffff:ffff:ffff:ffff,US
+2620:9c:4000::,2620:9c:4000:ffff:ffff:ffff:ffff:ffff,US
2620:9c:8000::,2620:9c:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:9c:c000::,2620:9c:c000:ffff:ffff:ffff:ffff:ffff,US
2620:9d::,2620:9d::ffff:ffff:ffff:ffff:ffff,US
-2620:9d:8000::,2620:9d:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:9d:4000::,2620:9d:4000:ffff:ffff:ffff:ffff:ffff,US
+2620:9d:c000::,2620:9d:c000:ffff:ffff:ffff:ffff:ffff,US
2620:9e::,2620:9e::ffff:ffff:ffff:ffff:ffff,US
+2620:9e:4000::,2620:9e:4000:ffff:ffff:ffff:ffff:ffff,US
2620:9e:8000::,2620:9e:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:9e:c000::,2620:9e:c000:ffff:ffff:ffff:ffff:ffff,US
2620:9f::,2620:9f:ff:ffff:ffff:ffff:ffff:ffff,US
2620:9f:8000::,2620:9f:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:9f:c000::,2620:9f:c000:ffff:ffff:ffff:ffff:ffff,US
2620:a0::,2620:a0::ffff:ffff:ffff:ffff:ffff,US
+2620:a0:4000::,2620:a0:4000:ffff:ffff:ffff:ffff:ffff,US
2620:a0:8000::,2620:a0:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:a0:c000::,2620:a0:c000:ffff:ffff:ffff:ffff:ffff,US
2620:a1::,2620:a1::ffff:ffff:ffff:ffff:ffff,US
+2620:a1:4000::,2620:a1:4000:ffff:ffff:ffff:ffff:ffff,US
2620:a1:8000::,2620:a1:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:a1:c000::,2620:a1:c000:ffff:ffff:ffff:ffff:ffff,US
2620:a2::,2620:a2::ffff:ffff:ffff:ffff:ffff,US
+2620:a2:4000::,2620:a2:4000:ffff:ffff:ffff:ffff:ffff,US
2620:a2:8000::,2620:a2:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:a2:c000::,2620:a2:c000:ffff:ffff:ffff:ffff:ffff,US
2620:a3::,2620:a3::ffff:ffff:ffff:ffff:ffff,US
+2620:a3:4000::,2620:a3:400f:ffff:ffff:ffff:ffff:ffff,US
2620:a3:8000::,2620:a3:8000:ffff:ffff:ffff:ffff:ffff,US
2620:a3:c020::,2620:a3:c020:ffff:ffff:ffff:ffff:ffff,US
2620:a4:40::,2620:a4:40:ffff:ffff:ffff:ffff:ffff,US
2620:a4:4060::,2620:a4:4060:ffff:ffff:ffff:ffff:ffff,US
2620:a4:8080::,2620:a4:8080:ffff:ffff:ffff:ffff:ffff,US
2620:a5::,2620:a5::ffff:ffff:ffff:ffff:ffff,US
+2620:a5:4000::,2620:a5:4000:ffff:ffff:ffff:ffff:ffff,US
2620:a5:8000::,2620:a5:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:a5:c000::,2620:a5:c000:ffff:ffff:ffff:ffff:ffff,US
2620:a6::,2620:a6::ffff:ffff:ffff:ffff:ffff,US
+2620:a6:4000::,2620:a6:4000:ffff:ffff:ffff:ffff:ffff,US
2620:a6:8000::,2620:a6:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:a6:c000::,2620:a6:c000:ffff:ffff:ffff:ffff:ffff,US
2620:a7::,2620:a7::ffff:ffff:ffff:ffff:ffff,US
+2620:a7:4000::,2620:a7:4000:ffff:ffff:ffff:ffff:ffff,US
2620:a7:8000::,2620:a7:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:a7:c000::,2620:a7:c000:ffff:ffff:ffff:ffff:ffff,US
2620:a8::,2620:a8::ffff:ffff:ffff:ffff:ffff,US
+2620:a8:4000::,2620:a8:4000:ffff:ffff:ffff:ffff:ffff,US
2620:a8:8000::,2620:a8:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:a8:c000::,2620:a8:c000:ffff:ffff:ffff:ffff:ffff,US
2620:a9::,2620:a9::ffff:ffff:ffff:ffff:ffff,US
+2620:a9:4000::,2620:a9:4000:ffff:ffff:ffff:ffff:ffff,US
2620:a9:8000::,2620:a9:800f:ffff:ffff:ffff:ffff:ffff,US
2620:aa::,2620:aa::ffff:ffff:ffff:ffff:ffff,US
+2620:aa:4000::,2620:aa:4000:ffff:ffff:ffff:ffff:ffff,US
2620:aa:8000::,2620:aa:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:aa:c000::,2620:aa:c000:ffff:ffff:ffff:ffff:ffff,US
2620:ab::,2620:ab::ffff:ffff:ffff:ffff:ffff,US
+2620:ab:4000::,2620:ab:4000:ffff:ffff:ffff:ffff:ffff,US
2620:ab:8000::,2620:ab:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:ab:c000::,2620:ab:c000:ffff:ffff:ffff:ffff:ffff,US
2620:ac::,2620:ac::ffff:ffff:ffff:ffff:ffff,US
+2620:ac:4000::,2620:ac:4000:ffff:ffff:ffff:ffff:ffff,CA
2620:ac:8000::,2620:ac:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:ac:c000::,2620:ac:c000:ffff:ffff:ffff:ffff:ffff,US
2620:ad::,2620:ad::ffff:ffff:ffff:ffff:ffff,US
+2620:ad:4000::,2620:ad:4000:ffff:ffff:ffff:ffff:ffff,US
2620:ad:8000::,2620:ad:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:ad:c000::,2620:ad:c000:ffff:ffff:ffff:ffff:ffff,CA
2620:ae::,2620:ae::ffff:ffff:ffff:ffff:ffff,CA
+2620:ae:4000::,2620:ae:4000:ffff:ffff:ffff:ffff:ffff,US
2620:ae:8000::,2620:ae:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:ae:c000::,2620:ae:c000:ffff:ffff:ffff:ffff:ffff,CA
2620:af::,2620:af::ffff:ffff:ffff:ffff:ffff,US
+2620:af:4000::,2620:af:4000:ffff:ffff:ffff:ffff:ffff,US
2620:af:8000::,2620:af:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:af:c000::,2620:af:c000:ffff:ffff:ffff:ffff:ffff,CA
2620:b0::,2620:b0::ffff:ffff:ffff:ffff:ffff,CA
+2620:b0:4000::,2620:b0:4000:ffff:ffff:ffff:ffff:ffff,US
2620:b0:8000::,2620:b0:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:b0:c000::,2620:b0:c000:ffff:ffff:ffff:ffff:ffff,US
2620:b1::,2620:b1::ffff:ffff:ffff:ffff:ffff,US
+2620:b1:4000::,2620:b1:4000:ffff:ffff:ffff:ffff:ffff,US
2620:b1:8000::,2620:b1:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:b1:c000::,2620:b1:c000:ffff:ffff:ffff:ffff:ffff,US
2620:b2::,2620:b2::ffff:ffff:ffff:ffff:ffff,US
+2620:b2:4000::,2620:b2:4000:ffff:ffff:ffff:ffff:ffff,CA
2620:b2:8000::,2620:b2:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:b2:c000::,2620:b2:c000:ffff:ffff:ffff:ffff:ffff,US
2620:b3::,2620:b3::ffff:ffff:ffff:ffff:ffff,US
+2620:b3:4000::,2620:b3:4000:ffff:ffff:ffff:ffff:ffff,US
2620:b3:8000::,2620:b3:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:b3:c000::,2620:b3:c00f:ffff:ffff:ffff:ffff:ffff,US
2620:b4::,2620:b4::ffff:ffff:ffff:ffff:ffff,US
+2620:b4:4000::,2620:b4:4000:ffff:ffff:ffff:ffff:ffff,US
2620:b4:8000::,2620:b4:8000:ffff:ffff:ffff:ffff:ffff,CA
+2620:b4:c000::,2620:b4:c000:ffff:ffff:ffff:ffff:ffff,US
2620:b5::,2620:b5::ffff:ffff:ffff:ffff:ffff,US
+2620:b5:4000::,2620:b5:4000:ffff:ffff:ffff:ffff:ffff,US
2620:b5:8000::,2620:b5:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:b5:c000::,2620:b5:c000:ffff:ffff:ffff:ffff:ffff,US
2620:b6::,2620:b6::ffff:ffff:ffff:ffff:ffff,US
+2620:b6:4000::,2620:b6:4000:ffff:ffff:ffff:ffff:ffff,US
2620:b6:8000::,2620:b6:8000:ffff:ffff:ffff:ffff:ffff,US
2620:b7::,2620:b7::ffff:ffff:ffff:ffff:ffff,US
2620:b7:8000::,2620:b7:8000:ffff:ffff:ffff:ffff:ffff,CA
@@ -9442,7 +10379,6 @@
2620:f4:8000::,2620:f4:8000:ffff:ffff:ffff:ffff:ffff,CA
2620:f5::,2620:f5::ffff:ffff:ffff:ffff:ffff,US
2620:f5:8000::,2620:f5:8000:ffff:ffff:ffff:ffff:ffff,US
-2620:f6::,2620:f6::ffff:ffff:ffff:ffff:ffff,CA
2620:f6:8000::,2620:f6:8000:ffff:ffff:ffff:ffff:ffff,US
2620:f7::,2620:f7::ffff:ffff:ffff:ffff:ffff,US
2620:f7:8000::,2620:f7:8000:ffff:ffff:ffff:ffff:ffff,US
@@ -9463,7 +10399,6 @@
2620:ff::,2620:ff::ffff:ffff:ffff:ffff:ffff,US
2620:ff:8000::,2620:ff:8000:ffff:ffff:ffff:ffff:ffff,US
2620:100::,2620:100:f:ffff:ffff:ffff:ffff:ffff,US
-2620:100:1000::,2620:100:1001:ffff:ffff:ffff:ffff:ffff,US
2620:100:3000::,2620:100:3007:ffff:ffff:ffff:ffff:ffff,US
2620:100:4000::,2620:100:403f:ffff:ffff:ffff:ffff:ffff,US
2620:100:5000::,2620:100:5007:ffff:ffff:ffff:ffff:ffff,US
@@ -9490,7 +10425,7 @@
2620:101:9006::,2620:101:900f:ffff:ffff:ffff:ffff:ffff,US
2620:101:a000::,2620:101:a001:ffff:ffff:ffff:ffff:ffff,US
2620:101:b000::,2620:101:b07f:ffff:ffff:ffff:ffff:ffff,US
-2620:101:c000::,2620:101:c00f:ffff:ffff:ffff:ffff:ffff,CA
+2620:101:c000::,2620:101:c0ff:ffff:ffff:ffff:ffff:ffff,CA
2620:101:d000::,2620:101:d007:ffff:ffff:ffff:ffff:ffff,US
2620:101:e000::,2620:101:e00f:ffff:ffff:ffff:ffff:ffff,US
2620:101:f000::,2620:101:f001:ffff:ffff:ffff:ffff:ffff,CA
@@ -9503,7 +10438,6 @@
2620:102:7000::,2620:102:700f:ffff:ffff:ffff:ffff:ffff,US
2620:102:8000::,2620:102:800f:ffff:ffff:ffff:ffff:ffff,US
2620:102:9000::,2620:102:90ff:ffff:ffff:ffff:ffff:ffff,US
-2620:102:a000::,2620:102:a01f:ffff:ffff:ffff:ffff:ffff,US
2620:102:b000::,2620:102:b001:ffff:ffff:ffff:ffff:ffff,US
2620:102:c000::,2620:102:c007:ffff:ffff:ffff:ffff:ffff,US
2620:102:d000::,2620:102:d07f:ffff:ffff:ffff:ffff:ffff,US
@@ -9528,7 +10462,10 @@
2620:104:1000::,2620:104:100f:ffff:ffff:ffff:ffff:ffff,US
2620:104:2000::,2620:104:20ff:ffff:ffff:ffff:ffff:ffff,US
2620:104:3000::,2620:104:300f:ffff:ffff:ffff:ffff:ffff,US
-2620:104:4000::,2620:104:400f:ffff:ffff:ffff:ffff:ffff,US
+2620:104:4000::,2620:104:4001:ffff:ffff:ffff:ffff:ffff,GB
+2620:104:4002::,2620:104:4003:ffff:ffff:ffff:ffff:ffff,US
+2620:104:4004::,2620:104:4007:ffff:ffff:ffff:ffff:ffff,GB
+2620:104:4008::,2620:104:400f:ffff:ffff:ffff:ffff:ffff,US
2620:104:5000::,2620:104:500f:ffff:ffff:ffff:ffff:ffff,US
2620:104:6000::,2620:104:600f:ffff:ffff:ffff:ffff:ffff,US
2620:104:7000::,2620:104:70ff:ffff:ffff:ffff:ffff:ffff,US
@@ -9677,7 +10614,9 @@
2620:10d:9000::,2620:10d:900f:ffff:ffff:ffff:ffff:ffff,US
2620:10d:a000::,2620:10d:a0ff:ffff:ffff:ffff:ffff:ffff,US
2620:10d:b000::,2620:10d:b00f:ffff:ffff:ffff:ffff:ffff,US
-2620:10d:c000::,2620:10d:c0ff:ffff:ffff:ffff:ffff:ffff,US
+2620:10d:c000::,2620:10d:c0c0:ffff:ffff:ffff:ffff:ffff,US
+2620:10d:c0c1::,2620:10d:c0c1:ffff:ffff:ffff:ffff:ffff,GB
+2620:10d:c0c2::,2620:10d:c0ff:ffff:ffff:ffff:ffff:ffff,US
2620:10d:d000::,2620:10d:d00f:ffff:ffff:ffff:ffff:ffff,CA
2620:10d:e000::,2620:10d:e00f:ffff:ffff:ffff:ffff:ffff,CA
2620:10d:f000::,2620:10d:f00f:ffff:ffff:ffff:ffff:ffff,US
@@ -9766,7 +10705,9 @@
2620:113:5000::,2620:113:500f:ffff:ffff:ffff:ffff:ffff,US
2620:113:6000::,2620:113:600f:ffff:ffff:ffff:ffff:ffff,US
2620:113:7000::,2620:113:700f:ffff:ffff:ffff:ffff:ffff,US
-2620:113:8000::,2620:113:80ff:ffff:ffff:ffff:ffff:ffff,US
+2620:113:8000::,2620:113:80bf:ffff:ffff:ffff:ffff:ffff,US
+2620:113:80c0::,2620:113:80c0:ffff:ffff:ffff:ffff:ffff,DE
+2620:113:80c1::,2620:113:80ff:ffff:ffff:ffff:ffff:ffff,US
2620:113:9000::,2620:113:900f:ffff:ffff:ffff:ffff:ffff,US
2620:113:a000::,2620:113:a00f:ffff:ffff:ffff:ffff:ffff,US
2620:113:b000::,2620:113:b00f:ffff:ffff:ffff:ffff:ffff,US
@@ -9792,7 +10733,7 @@
2620:115::,2620:115:f:ffff:ffff:ffff:ffff:ffff,US
2620:115:1000::,2620:115:100f:ffff:ffff:ffff:ffff:ffff,US
2620:115:2000::,2620:115:200f:ffff:ffff:ffff:ffff:ffff,US
-2620:115:3000::,2620:115:300f:ffff:ffff:ffff:ffff:ffff,KY
+2620:115:3000::,2620:115:300f:ffff:ffff:ffff:ffff:ffff,US
2620:115:4000::,2620:115:40ff:ffff:ffff:ffff:ffff:ffff,US
2620:115:5000::,2620:115:500f:ffff:ffff:ffff:ffff:ffff,US
2620:115:6000::,2620:115:600f:ffff:ffff:ffff:ffff:ffff,US
@@ -9800,6 +10741,7 @@
2620:115:8000::,2620:115:800f:ffff:ffff:ffff:ffff:ffff,US
2620:115:9000::,2620:115:900f:ffff:ffff:ffff:ffff:ffff,US
2620:115:a000::,2620:115:a00f:ffff:ffff:ffff:ffff:ffff,US
+2620:115:a096::,2620:115:a096:ffff:ffff:ffff:ffff:ffff,US
2620:115:b000::,2620:115:b00f:ffff:ffff:ffff:ffff:ffff,US
2620:115:c000::,2620:115:c00f:ffff:ffff:ffff:ffff:ffff,US
2620:115:d000::,2620:115:d0ff:ffff:ffff:ffff:ffff:ffff,US
@@ -9853,7 +10795,9 @@
2620:118:d000::,2620:118:d00f:ffff:ffff:ffff:ffff:ffff,US
2620:118:e000::,2620:118:e00f:ffff:ffff:ffff:ffff:ffff,US
2620:118:f000::,2620:118:f0ff:ffff:ffff:ffff:ffff:ffff,US
-2620:119::,2620:119:ff:ffff:ffff:ffff:ffff:ffff,US
+2620:119::,2620:119:f:ffff:ffff:ffff:ffff:ffff,US
+2620:119:10::,2620:119:11:ffff:ffff:ffff:ffff:ffff,CA
+2620:119:12::,2620:119:ff:ffff:ffff:ffff:ffff:ffff,US
2620:119:1000::,2620:119:10ff:ffff:ffff:ffff:ffff:ffff,US
2620:119:2000::,2620:119:200f:ffff:ffff:ffff:ffff:ffff,US
2620:119:3000::,2620:119:30ff:ffff:ffff:ffff:ffff:ffff,US
@@ -9917,6 +10861,40 @@
2620:11c:d000::,2620:11c:d00f:ffff:ffff:ffff:ffff:ffff,US
2620:11c:e000::,2620:11c:e00f:ffff:ffff:ffff:ffff:ffff,US
2620:11c:f000::,2620:11c:f00f:ffff:ffff:ffff:ffff:ffff,US
+2620:11d::,2620:11d:f:ffff:ffff:ffff:ffff:ffff,US
+2620:11d:1000::,2620:11d:100f:ffff:ffff:ffff:ffff:ffff,US
+2620:11d:2000::,2620:11d:20ff:ffff:ffff:ffff:ffff:ffff,US
+2620:11d:3000::,2620:11d:300f:ffff:ffff:ffff:ffff:ffff,US
+2620:11d:4000::,2620:11d:400f:ffff:ffff:ffff:ffff:ffff,US
+2620:11d:5000::,2620:11d:500f:ffff:ffff:ffff:ffff:ffff,US
+2620:11d:6000::,2620:11d:60ff:ffff:ffff:ffff:ffff:ffff,US
+2620:11d:7000::,2620:11d:700f:ffff:ffff:ffff:ffff:ffff,US
+2620:11d:8000::,2620:11d:80ff:ffff:ffff:ffff:ffff:ffff,US
+2620:11d:9000::,2620:11d:900f:ffff:ffff:ffff:ffff:ffff,US
+2620:11d:a000::,2620:11d:a00f:ffff:ffff:ffff:ffff:ffff,US
+2620:11d:b000::,2620:11d:b0ff:ffff:ffff:ffff:ffff:ffff,US
+2620:11d:c000::,2620:11d:c00f:ffff:ffff:ffff:ffff:ffff,US
+2620:11d:d000::,2620:11d:d0ff:ffff:ffff:ffff:ffff:ffff,US
+2620:11d:e000::,2620:11d:e0ff:ffff:ffff:ffff:ffff:ffff,US
+2620:11d:f000::,2620:11d:f0ff:ffff:ffff:ffff:ffff:ffff,CA
+2620:11e::,2620:11e:ff:ffff:ffff:ffff:ffff:ffff,US
+2620:11e:1000::,2620:11e:100f:ffff:ffff:ffff:ffff:ffff,US
+2620:11e:2000::,2620:11e:20ff:ffff:ffff:ffff:ffff:ffff,US
+2620:11e:3000::,2620:11e:30ff:ffff:ffff:ffff:ffff:ffff,US
+2620:11e:4000::,2620:11e:40ff:ffff:ffff:ffff:ffff:ffff,US
+2620:11e:5000::,2620:11e:50ff:ffff:ffff:ffff:ffff:ffff,US
+2620:11e:6000::,2620:11e:600f:ffff:ffff:ffff:ffff:ffff,US
+2620:11e:7000::,2620:11e:70ff:ffff:ffff:ffff:ffff:ffff,US
+2620:11e:8000::,2620:11e:80ff:ffff:ffff:ffff:ffff:ffff,US
+2620:11e:9000::,2620:11e:900f:ffff:ffff:ffff:ffff:ffff,US
+2620:11e:a000::,2620:11e:a00f:ffff:ffff:ffff:ffff:ffff,US
+2620:11e:b000::,2620:11e:b0ff:ffff:ffff:ffff:ffff:ffff,US
+2620:11e:c000::,2620:11e:c0ff:ffff:ffff:ffff:ffff:ffff,US
+2620:11e:d000::,2620:11e:d00f:ffff:ffff:ffff:ffff:ffff,CA
+2620:11e:e000::,2620:11e:e00f:ffff:ffff:ffff:ffff:ffff,US
+2620:11e:f000::,2620:11e:f00f:ffff:ffff:ffff:ffff:ffff,US
+2620:11f::,2620:11f:f:ffff:ffff:ffff:ffff:ffff,US
+2620:11f:1000::,2620:11f:100f:ffff:ffff:ffff:ffff:ffff,US
2620:140::,2620:140:3ff:ffff:ffff:ffff:ffff:ffff,US
2620:141::,2620:141:fff:ffff:ffff:ffff:ffff:ffff,US
2620:143::,2620:143:7ff:ffff:ffff:ffff:ffff:ffff,US
@@ -9980,6 +10958,14 @@
2620:1e2::,2620:1e2:fff:ffff:ffff:ffff:ffff:ffff,US
2620:1e3::,2620:1e3:fff:ffff:ffff:ffff:ffff:ffff,US
2620:1e4::,2620:1e4:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2620:1e5::,2620:1e5:fff:ffff:ffff:ffff:ffff:ffff,US
+2620:1e6::,2620:1e6:fff:ffff:ffff:ffff:ffff:ffff,US
+2620:1e7::,2620:1e7:fff:ffff:ffff:ffff:ffff:ffff,US
+2620:1e8::,2620:1e8:fff:ffff:ffff:ffff:ffff:ffff,US
+2620:1e9::,2620:1e9:fff:ffff:ffff:ffff:ffff:ffff,US
+2620:1ea::,2620:1ea:fff:ffff:ffff:ffff:ffff:ffff,US
+2620:1eb::,2620:1eb:fff:ffff:ffff:ffff:ffff:ffff,US
+2620:1ec::,2620:1ec:fff:ffff:ffff:ffff:ffff:ffff,US
2620:1f0::,2620:1f1:fff:ffff:ffff:ffff:ffff:ffff,US
2620:1f2::,2620:1f4:fff:ffff:ffff:ffff:ffff:ffff,US
2620:1f5::,2620:1f5:fff:ffff:ffff:ffff:ffff:ffff,CA
@@ -10051,7 +11037,9 @@
2800:3c0::,2800:3c0:ffff:ffff:ffff:ffff:ffff:ffff,GY
2800:3d0::,2800:3d0:ffff:ffff:ffff:ffff:ffff:ffff,AR
2800:3e0::,2800:3e0:ffff:ffff:ffff:ffff:ffff:ffff,VE
-2800:3f0::,2800:3f0:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2800:3f0::,2800:3f0:4002:ffff:ffff:ffff:ffff:ffff,AR
+2800:3f0:4003::,2800:3f0:4003:ffff:ffff:ffff:ffff:ffff,CL
+2800:3f0:4004::,2800:3f0:ffff:ffff:ffff:ffff:ffff:ffff,AR
2800:400::,2800:400:ffff:ffff:ffff:ffff:ffff:ffff,EC
2800:410::,2800:410:ffff:ffff:ffff:ffff:ffff:ffff,BZ
2800:420::,2800:423:ffff:ffff:ffff:ffff:ffff:ffff,TT
@@ -10272,9 +11260,11 @@
2801:10:8000::,2801:10:8000:ffff:ffff:ffff:ffff:ffff,AR
2801:10:a000::,2801:10:a000:ffff:ffff:ffff:ffff:ffff,AR
2801:10:c000::,2801:10:c000:ffff:ffff:ffff:ffff:ffff,CO
+2801:10:e000::,2801:10:e000:ffff:ffff:ffff:ffff:ffff,AR
2801:11::,2801:11::ffff:ffff:ffff:ffff:ffff,AR
2801:11:2000::,2801:11:2000:ffff:ffff:ffff:ffff:ffff,AR
2801:11:4000::,2801:11:4000:ffff:ffff:ffff:ffff:ffff,CO
+2801:11:6000::,2801:11:6000:ffff:ffff:ffff:ffff:ffff,AR
2801:11:8000::,2801:11:8000:ffff:ffff:ffff:ffff:ffff,CO
2801:11:a000::,2801:11:a000:ffff:ffff:ffff:ffff:ffff,VE
2801:11:c000::,2801:11:c000:ffff:ffff:ffff:ffff:ffff,AR
@@ -10285,9 +11275,11 @@
2801:12:8000::,2801:12:8000:ffff:ffff:ffff:ffff:ffff,AR
2801:12:a000::,2801:12:a00f:ffff:ffff:ffff:ffff:ffff,CL
2801:12:c000::,2801:12:c000:ffff:ffff:ffff:ffff:ffff,AR
+2801:12:e000::,2801:12:e000:ffff:ffff:ffff:ffff:ffff,PA
2801:13::,2801:13::ffff:ffff:ffff:ffff:ffff,VE
2801:13:2000::,2801:13:2000:ffff:ffff:ffff:ffff:ffff,AR
2801:13:4000::,2801:13:4000:ffff:ffff:ffff:ffff:ffff,CL
+2801:13:6000::,2801:13:6000:ffff:ffff:ffff:ffff:ffff,GT
2801:13:8000::,2801:13:8000:ffff:ffff:ffff:ffff:ffff,SV
2801:13:a000::,2801:13:a000:ffff:ffff:ffff:ffff:ffff,CO
2801:13:c000::,2801:13:c000:ffff:ffff:ffff:ffff:ffff,TT
@@ -10295,11 +11287,14 @@
2801:14:2000::,2801:14:2000:ffff:ffff:ffff:ffff:ffff,AR
2801:14:4000::,2801:14:4000:ffff:ffff:ffff:ffff:ffff,CO
2801:14:6000::,2801:14:6000:ffff:ffff:ffff:ffff:ffff,BO
+2801:14:8000::,2801:14:8000:ffff:ffff:ffff:ffff:ffff,CO
2801:14:a000::,2801:14:a001:ffff:ffff:ffff:ffff:ffff,UY
2801:14:c000::,2801:14:c000:ffff:ffff:ffff:ffff:ffff,BO
+2801:14:e000::,2801:14:e000:ffff:ffff:ffff:ffff:ffff,PY
2801:15::,2801:15::ffff:ffff:ffff:ffff:ffff,EC
2801:15:2000::,2801:15:2000:ffff:ffff:ffff:ffff:ffff,CR
2801:15:4000::,2801:15:4000:ffff:ffff:ffff:ffff:ffff,CO
+2801:15:6000::,2801:15:6000:ffff:ffff:ffff:ffff:ffff,SV
2801:15:8000::,2801:15:8000:ffff:ffff:ffff:ffff:ffff,CR
2801:15:a000::,2801:15:a000:ffff:ffff:ffff:ffff:ffff,DO
2801:15:c000::,2801:15:c000:ffff:ffff:ffff:ffff:ffff,GT
@@ -10313,6 +11308,7 @@
2801:17::,2801:17::ffff:ffff:ffff:ffff:ffff,CL
2801:17:2000::,2801:17:2000:ffff:ffff:ffff:ffff:ffff,PY
2801:17:4000::,2801:17:4000:ffff:ffff:ffff:ffff:ffff,CO
+2801:17:6000::,2801:17:6000:ffff:ffff:ffff:ffff:ffff,AR
2801:17:8000::,2801:17:8000:ffff:ffff:ffff:ffff:ffff,CR
2801:17:a000::,2801:17:a000:ffff:ffff:ffff:ffff:ffff,HT
2801:17:c000::,2801:17:c000:ffff:ffff:ffff:ffff:ffff,PA
@@ -10323,22 +11319,26 @@
2801:18:8000::,2801:18:8000:ffff:ffff:ffff:ffff:ffff,AR
2801:18:a000::,2801:18:a000:ffff:ffff:ffff:ffff:ffff,BO
2801:18:c000::,2801:18:c000:ffff:ffff:ffff:ffff:ffff,AR
+2801:18:e000::,2801:18:e000:ffff:ffff:ffff:ffff:ffff,DO
2801:19::,2801:19::ffff:ffff:ffff:ffff:ffff,AR
2801:19:2000::,2801:19:2000:ffff:ffff:ffff:ffff:ffff,CL
2801:19:4000::,2801:19:4000:ffff:ffff:ffff:ffff:ffff,PY
+2801:19:6000::,2801:19:6000:ffff:ffff:ffff:ffff:ffff,CW
2801:19:8000::,2801:19:8000:ffff:ffff:ffff:ffff:ffff,EC
2801:19:a000::,2801:19:a000:ffff:ffff:ffff:ffff:ffff,BO
2801:19:c000::,2801:19:c000:ffff:ffff:ffff:ffff:ffff,AR
2801:1a::,2801:1a::ffff:ffff:ffff:ffff:ffff,CO
-2801:1a:2000::,2801:1a:2000:ffff:ffff:ffff:ffff:ffff,AR
+2801:1a:2000::,2801:1a:2000:ffff:ffff:ffff:ffff:ffff,SR
2801:1a:4000::,2801:1a:4000:ffff:ffff:ffff:ffff:ffff,CO
2801:1a:6000::,2801:1a:6000:ffff:ffff:ffff:ffff:ffff,CR
2801:1a:8000::,2801:1a:8000:ffff:ffff:ffff:ffff:ffff,CL
2801:1a:a000::,2801:1a:a000:ffff:ffff:ffff:ffff:ffff,AR
2801:1a:c000::,2801:1a:c000:ffff:ffff:ffff:ffff:ffff,CO
+2801:1a:e000::,2801:1a:e000:ffff:ffff:ffff:ffff:ffff,DO
2801:1b::,2801:1b::ffff:ffff:ffff:ffff:ffff,CR
2801:1b:2000::,2801:1b:2000:ffff:ffff:ffff:ffff:ffff,UY
2801:1b:4000::,2801:1b:4000:ffff:ffff:ffff:ffff:ffff,CL
+2801:1b:6000::,2801:1b:6000:ffff:ffff:ffff:ffff:ffff,CL
2801:1b:8000::,2801:1b:8000:ffff:ffff:ffff:ffff:ffff,CL
2801:1b:a000::,2801:1b:a000:ffff:ffff:ffff:ffff:ffff,AR
2801:1b:c000::,2801:1b:c000:ffff:ffff:ffff:ffff:ffff,PA
@@ -10349,21 +11349,25 @@
2801:1c:8000::,2801:1c:8000:ffff:ffff:ffff:ffff:ffff,EC
2801:1c:a000::,2801:1c:a000:ffff:ffff:ffff:ffff:ffff,CO
2801:1c:c000::,2801:1c:c000:ffff:ffff:ffff:ffff:ffff,HN
+2801:1c:e000::,2801:1c:e000:ffff:ffff:ffff:ffff:ffff,CO
2801:1d::,2801:1d::ffff:ffff:ffff:ffff:ffff,PY
2801:1d:2000::,2801:1d:2000:ffff:ffff:ffff:ffff:ffff,GT
2801:1d:4000::,2801:1d:4000:ffff:ffff:ffff:ffff:ffff,TT
+2801:1d:6000::,2801:1d:6000:ffff:ffff:ffff:ffff:ffff,NI
2801:1d:8000::,2801:1d:8000:ffff:ffff:ffff:ffff:ffff,AR
2801:1d:a000::,2801:1d:a000:ffff:ffff:ffff:ffff:ffff,CR
2801:1d:c000::,2801:1d:c000:ffff:ffff:ffff:ffff:ffff,AR
2801:1e::,2801:1e::ffff:ffff:ffff:ffff:ffff,EC
2801:1e:2000::,2801:1e:2000:ffff:ffff:ffff:ffff:ffff,AR
2801:1e:4000::,2801:1e:4007:ffff:ffff:ffff:ffff:ffff,AR
+2801:1e:6000::,2801:1e:6000:ffff:ffff:ffff:ffff:ffff,CO
2801:1e:8000::,2801:1e:8000:ffff:ffff:ffff:ffff:ffff,CR
2801:1e:a000::,2801:1e:a000:ffff:ffff:ffff:ffff:ffff,AR
2801:1e:c000::,2801:1e:c000:ffff:ffff:ffff:ffff:ffff,AR
2801:1f::,2801:1f::ffff:ffff:ffff:ffff:ffff,AR
2801:1f:2000::,2801:1f:2000:ffff:ffff:ffff:ffff:ffff,CR
2801:1f:4000::,2801:1f:4000:ffff:ffff:ffff:ffff:ffff,CR
+2801:1f:6000::,2801:1f:6000:ffff:ffff:ffff:ffff:ffff,AR
2801:1f:8000::,2801:1f:8000:ffff:ffff:ffff:ffff:ffff,AR
2801:1f:a000::,2801:1f:a000:ffff:ffff:ffff:ffff:ffff,CL
2801:1f:c000::,2801:1f:c000:ffff:ffff:ffff:ffff:ffff,CR
@@ -10568,11 +11572,36 @@
2801:80:cd0::,2801:80:cd0:ffff:ffff:ffff:ffff:ffff,BR
2801:80:ce0::,2801:80:ce0:ffff:ffff:ffff:ffff:ffff,BR
2801:80:cf0::,2801:80:cf0:ffff:ffff:ffff:ffff:ffff,BR
+2801:80:d00::,2801:80:d00:ffff:ffff:ffff:ffff:ffff,BR
2801:80:d10::,2801:80:d10:ffff:ffff:ffff:ffff:ffff,BR
2801:80:d20::,2801:80:d2f:ffff:ffff:ffff:ffff:ffff,BR
2801:80:d40::,2801:80:d40:ffff:ffff:ffff:ffff:ffff,BR
2801:80:d50::,2801:80:d50:ffff:ffff:ffff:ffff:ffff,BR
2801:80:d60::,2801:80:d6f:ffff:ffff:ffff:ffff:ffff,BR
+2801:80:d80::,2801:80:d80:ffff:ffff:ffff:ffff:ffff,BR
+2801:80:d90::,2801:80:d90:ffff:ffff:ffff:ffff:ffff,BR
+2801:80:da0::,2801:80:daf:ffff:ffff:ffff:ffff:ffff,BR
+2801:80:dc0::,2801:80:dcf:ffff:ffff:ffff:ffff:ffff,BR
+2801:80:de0::,2801:80:de0:ffff:ffff:ffff:ffff:ffff,BR
+2801:80:df0::,2801:80:df0:ffff:ffff:ffff:ffff:ffff,BR
+2801:80:e00::,2801:80:e00:ffff:ffff:ffff:ffff:ffff,BR
+2801:80:e10::,2801:80:e10:ffff:ffff:ffff:ffff:ffff,BR
+2801:80:e20::,2801:80:e20:ffff:ffff:ffff:ffff:ffff,BR
+2801:80:e30::,2801:80:e30:ffff:ffff:ffff:ffff:ffff,BR
+2801:80:e40::,2801:80:e40:ffff:ffff:ffff:ffff:ffff,BR
+2801:80:e50::,2801:80:e50:ffff:ffff:ffff:ffff:ffff,BR
+2801:80:e60::,2801:80:e60:ffff:ffff:ffff:ffff:ffff,BR
+2801:80:e70::,2801:80:e70:ffff:ffff:ffff:ffff:ffff,BR
+2801:80:e80::,2801:80:e80:ffff:ffff:ffff:ffff:ffff,BR
+2801:80:e90::,2801:80:e90:ffff:ffff:ffff:ffff:ffff,BR
+2801:80:ea0::,2801:80:ea0:ffff:ffff:ffff:ffff:ffff,BR
+2801:80:eb0::,2801:80:eb0:ffff:ffff:ffff:ffff:ffff,BR
+2801:80:ec0::,2801:80:ec0:ffff:ffff:ffff:ffff:ffff,BR
+2801:80:ed0::,2801:80:ed0:ffff:ffff:ffff:ffff:ffff,BR
+2801:80:ee0::,2801:80:ee0:ffff:ffff:ffff:ffff:ffff,BR
+2801:80:ef0::,2801:80:ef0:ffff:ffff:ffff:ffff:ffff,BR
+2801:80:f00::,2801:80:f00:ffff:ffff:ffff:ffff:ffff,BR
+2801:80:1000::,2801:80:10ff:ffff:ffff:ffff:ffff:ffff,BR
2801:82::,2801:82:ffff:ffff:ffff:ffff:ffff:ffff,BR
2801:84::,2801:84:ffff:ffff:ffff:ffff:ffff:ffff,BR
2801:86::,2801:86:ffff:ffff:ffff:ffff:ffff:ffff,BR
@@ -10625,8 +11654,10 @@
2801:108::,2801:108:f:ffff:ffff:ffff:ffff:ffff,CO
2801:110::,2801:110:1fff:ffff:ffff:ffff:ffff:ffff,CO
2801:120::,2801:120:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2801:128::,2801:128:fff:ffff:ffff:ffff:ffff:ffff,UY
2801:130::,2801:130:fff:ffff:ffff:ffff:ffff:ffff,CO
2801:140::,2801:140:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2801:148::,2801:148:ff:ffff:ffff:ffff:ffff:ffff,AR
2801:150::,2801:150:ffff:ffff:ffff:ffff:ffff:ffff,PE
2801:160::,2801:160:ff:ffff:ffff:ffff:ffff:ffff,CO
2801:170::,2801:170:fff:ffff:ffff:ffff:ffff:ffff,CO
@@ -10634,13 +11665,16 @@
2801:188::,2801:188:f:ffff:ffff:ffff:ffff:ffff,AR
2801:190::,2801:190:fff:ffff:ffff:ffff:ffff:ffff,CO
2801:1a0::,2801:1a0:3f:ffff:ffff:ffff:ffff:ffff,CO
+2801:1a8::,2801:1a8:ff:ffff:ffff:ffff:ffff:ffff,AR
2801:1b0::,2801:1b0:ff:ffff:ffff:ffff:ffff:ffff,CO
2801:1c0::,2801:1c0:1ff:ffff:ffff:ffff:ffff:ffff,AR
+2801:1c8::,2801:1c8:fff:ffff:ffff:ffff:ffff:ffff,CO
2801:1d0::,2801:1d0:f:ffff:ffff:ffff:ffff:ffff,CO
2801:1e0::,2801:1e0:7f:ffff:ffff:ffff:ffff:ffff,AR
2801:1f0::,2801:1f0:ffff:ffff:ffff:ffff:ffff:ffff,AR
2802::,2802:3:ffff:ffff:ffff:ffff:ffff:ffff,CO
2803::,2803::ffff:ffff:ffff:ffff:ffff:ffff,AR
+2803:40::,2803:40:ffff:ffff:ffff:ffff:ffff:ffff,PE
2803:80::,2803:80:ffff:ffff:ffff:ffff:ffff:ffff,CL
2803:100::,2803:100:ffff:ffff:ffff:ffff:ffff:ffff,HN
2803:180::,2803:180:ffff:ffff:ffff:ffff:ffff:ffff,NI
@@ -10655,6 +11689,7 @@
2803:600::,2803:600:ffff:ffff:ffff:ffff:ffff:ffff,PA
2803:680::,2803:680:ffff:ffff:ffff:ffff:ffff:ffff,AR
2803:700::,2803:700:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2803:780::,2803:780:ffff:ffff:ffff:ffff:ffff:ffff,VE
2803:800::,2803:800:ffff:ffff:ffff:ffff:ffff:ffff,NI
2803:880::,2803:880:ffff:ffff:ffff:ffff:ffff:ffff,AR
2803:900::,2803:900:ffff:ffff:ffff:ffff:ffff:ffff,AR
@@ -10669,7 +11704,14 @@
2803:d80::,2803:d8f:ffff:ffff:ffff:ffff:ffff:ffff,CO
2803:e00::,2803:e00:ffff:ffff:ffff:ffff:ffff:ffff,CL
2803:e80::,2803:e80:ffff:ffff:ffff:ffff:ffff:ffff,CO
-2803:f00::,2803:f00:ffff:ffff:ffff:ffff:ffff:ffff,PE
+2803:f00::,2803:f00:48a:ffff:ffff:ffff:ffff:ffff,PE
+2803:f00:48b::,2803:f00:48e:ffff:ffff:ffff:ffff:ffff,CO
+2803:f00:48f::,2803:f00:4a6:ffff:ffff:ffff:ffff:ffff,PE
+2803:f00:4a7::,2803:f00:4aa:ffff:ffff:ffff:ffff:ffff,CL
+2803:f00:4ab::,2803:f00:68c:ffff:ffff:ffff:ffff:ffff,PE
+2803:f00:68d::,2803:f00:68d:ffff:ffff:ffff:ffff:ffff,CO
+2803:f00:68e::,2803:f00:ffff:ffff:ffff:ffff:ffff:ffff,PE
+2803:f80::,2803:f80:ffff:ffff:ffff:ffff:ffff:ffff,AR
2803:1000::,2803:1000:ffff:ffff:ffff:ffff:ffff:ffff,SV
2803:1080::,2803:1080:ffff:ffff:ffff:ffff:ffff:ffff,AR
2803:1100::,2803:1100:ffff:ffff:ffff:ffff:ffff:ffff,CW
@@ -10684,6 +11726,7 @@
2803:1600::,2803:1600:ffff:ffff:ffff:ffff:ffff:ffff,BQ
2803:1680::,2803:1680:ffff:ffff:ffff:ffff:ffff:ffff,GF
2803:1700::,2803:1700:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2803:1780::,2803:1780:ffff:ffff:ffff:ffff:ffff:ffff,CO
2803:1800::,2803:1800:ffff:ffff:ffff:ffff:ffff:ffff,CO
2803:1880::,2803:1880:ffff:ffff:ffff:ffff:ffff:ffff,PE
2803:1900::,2803:1900:ffff:ffff:ffff:ffff:ffff:ffff,AR
@@ -10698,7 +11741,9 @@
2803:1e00::,2803:1e00:ffff:ffff:ffff:ffff:ffff:ffff,NI
2803:1e80::,2803:1e80:ffff:ffff:ffff:ffff:ffff:ffff,AR
2803:1f00::,2803:1f00:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2803:1f80::,2803:1f80:ffff:ffff:ffff:ffff:ffff:ffff,VE
2803:2000::,2803:2000:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2803:2040::,2803:2040:ffff:ffff:ffff:ffff:ffff:ffff,CR
2803:2080::,2803:2080:ffff:ffff:ffff:ffff:ffff:ffff,HN
2803:2100::,2803:2100:ffff:ffff:ffff:ffff:ffff:ffff,PE
2803:2180::,2803:2180:ffff:ffff:ffff:ffff:ffff:ffff,CO
@@ -10713,6 +11758,7 @@
2803:2600::,2803:2600:ffff:ffff:ffff:ffff:ffff:ffff,AR
2803:2680::,2803:2680:ffff:ffff:ffff:ffff:ffff:ffff,UY
2803:2700::,2803:2700:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2803:2780::,2803:2780:ffff:ffff:ffff:ffff:ffff:ffff,AR
2803:2800::,2803:2800:ffff:ffff:ffff:ffff:ffff:ffff,CL
2803:2880::,2803:2880:ffff:ffff:ffff:ffff:ffff:ffff,BO
2803:2900::,2803:2900:ffff:ffff:ffff:ffff:ffff:ffff,PA
@@ -10728,6 +11774,7 @@
2803:2e00::,2803:2e00:ffff:ffff:ffff:ffff:ffff:ffff,EC
2803:2e80::,2803:2e80:ffff:ffff:ffff:ffff:ffff:ffff,AR
2803:2f00::,2803:2f00:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2803:2f80::,2803:2f80:ffff:ffff:ffff:ffff:ffff:ffff,CL
2803:3000::,2803:3000:ffff:ffff:ffff:ffff:ffff:ffff,PA
2803:3080::,2803:3080:ffff:ffff:ffff:ffff:ffff:ffff,PA
2803:3100::,2803:3100:ffff:ffff:ffff:ffff:ffff:ffff,CR
@@ -10743,6 +11790,7 @@
2803:3600::,2803:3600:ffff:ffff:ffff:ffff:ffff:ffff,CR
2803:3680::,2803:3680:ffff:ffff:ffff:ffff:ffff:ffff,AR
2803:3700::,2803:3700:ffff:ffff:ffff:ffff:ffff:ffff,DO
+2803:3780::,2803:3780:ffff:ffff:ffff:ffff:ffff:ffff,AR
2803:3800::,2803:3800:ffff:ffff:ffff:ffff:ffff:ffff,CL
2803:3880::,2803:3880:ffff:ffff:ffff:ffff:ffff:ffff,AR
2803:3900::,2803:3900:ffff:ffff:ffff:ffff:ffff:ffff,VE
@@ -10750,6 +11798,7 @@
2803:3a00::,2803:3a00:ffff:ffff:ffff:ffff:ffff:ffff,GT
2803:3a80::,2803:3a80:ffff:ffff:ffff:ffff:ffff:ffff,HN
2803:3b00::,2803:3b00:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2803:3b80::,2803:3b80:ffff:ffff:ffff:ffff:ffff:ffff,CL
2803:3c00::,2803:3c00:ffff:ffff:ffff:ffff:ffff:ffff,EC
2803:3c80::,2803:3c80:ffff:ffff:ffff:ffff:ffff:ffff,CL
2803:3d00::,2803:3d00:ffff:ffff:ffff:ffff:ffff:ffff,BZ
@@ -10757,7 +11806,9 @@
2803:3e00::,2803:3e00:ffff:ffff:ffff:ffff:ffff:ffff,AR
2803:3e80::,2803:3e80:ffff:ffff:ffff:ffff:ffff:ffff,CO
2803:3f00::,2803:3f00:ffff:ffff:ffff:ffff:ffff:ffff,HN
+2803:3f80::,2803:3f80:ffff:ffff:ffff:ffff:ffff:ffff,AR
2803:4000::,2803:4000:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2803:4040::,2803:4040:ffff:ffff:ffff:ffff:ffff:ffff,AR
2803:4080::,2803:4080:ffff:ffff:ffff:ffff:ffff:ffff,AR
2803:4100::,2803:4100:ffff:ffff:ffff:ffff:ffff:ffff,AR
2803:4180::,2803:4180:ffff:ffff:ffff:ffff:ffff:ffff,EC
@@ -10772,6 +11823,7 @@
2803:4600::,2803:4600:ffff:ffff:ffff:ffff:ffff:ffff,HN
2803:4680::,2803:4680:ffff:ffff:ffff:ffff:ffff:ffff,TT
2803:4700::,2803:4700:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2803:4780::,2803:4780:ffff:ffff:ffff:ffff:ffff:ffff,PE
2803:4800::,2803:4800:ffff:ffff:ffff:ffff:ffff:ffff,PE
2803:4880::,2803:4880:ffff:ffff:ffff:ffff:ffff:ffff,AR
2803:4900::,2803:4900:ffff:ffff:ffff:ffff:ffff:ffff,BQ
@@ -10787,6 +11839,7 @@
2803:4e00::,2803:4e00:ffff:ffff:ffff:ffff:ffff:ffff,UY
2803:4e80::,2803:4e80:ffff:ffff:ffff:ffff:ffff:ffff,CR
2803:4f00::,2803:4f00:ffff:ffff:ffff:ffff:ffff:ffff,VE
+2803:4f80::,2803:4f80:ffff:ffff:ffff:ffff:ffff:ffff,AR
2803:5000::,2803:5000:ffff:ffff:ffff:ffff:ffff:ffff,AR
2803:5080::,2803:5080:ffff:ffff:ffff:ffff:ffff:ffff,AR
2803:5100::,2803:5100:ffff:ffff:ffff:ffff:ffff:ffff,GT
@@ -10802,6 +11855,7 @@
2803:5600::,2803:5600:ffff:ffff:ffff:ffff:ffff:ffff,HN
2803:5680::,2803:5680:ffff:ffff:ffff:ffff:ffff:ffff,VE
2803:5700::,2803:5700:ffff:ffff:ffff:ffff:ffff:ffff,BO
+2803:5780::,2803:5780:ffff:ffff:ffff:ffff:ffff:ffff,AR
2803:5880::,2803:5880:ffff:ffff:ffff:ffff:ffff:ffff,AR
2803:5900::,2803:5900:ffff:ffff:ffff:ffff:ffff:ffff,GF
2803:5980::,2803:5980:ffff:ffff:ffff:ffff:ffff:ffff,AR
@@ -10816,6 +11870,7 @@
2803:5e00::,2803:5e00:ffff:ffff:ffff:ffff:ffff:ffff,BO
2803:5e80::,2803:5e80:ffff:ffff:ffff:ffff:ffff:ffff,AR
2803:5f00::,2803:5f00:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2803:5f80::,2803:5f80:ffff:ffff:ffff:ffff:ffff:ffff,EC
2803:6000::,2803:6000:ffff:ffff:ffff:ffff:ffff:ffff,CR
2803:6080::,2803:6080:ffff:ffff:ffff:ffff:ffff:ffff,US
2803:6100::,2803:6100:ffff:ffff:ffff:ffff:ffff:ffff,AR
@@ -10831,6 +11886,7 @@
2803:6600::,2803:6600:ffff:ffff:ffff:ffff:ffff:ffff,AR
2803:6680::,2803:6680:ffff:ffff:ffff:ffff:ffff:ffff,VE
2803:6700::,2803:6700:ffff:ffff:ffff:ffff:ffff:ffff,CO
+2803:6780::,2803:6780:ffff:ffff:ffff:ffff:ffff:ffff,SV
2803:6800::,2803:6800:ffff:ffff:ffff:ffff:ffff:ffff,AR
2803:6880::,2803:6880:ffff:ffff:ffff:ffff:ffff:ffff,AR
2803:6900::,2803:6900:ffff:ffff:ffff:ffff:ffff:ffff,CR
@@ -10846,6 +11902,7 @@
2803:6e00::,2803:6e00:ffff:ffff:ffff:ffff:ffff:ffff,SR
2803:6e80::,2803:6e80:ffff:ffff:ffff:ffff:ffff:ffff,HN
2803:6f00::,2803:6f00:ffff:ffff:ffff:ffff:ffff:ffff,CL
+2803:6f80::,2803:6f80:ffff:ffff:ffff:ffff:ffff:ffff,CO
2803:7000::,2803:7000:ffff:ffff:ffff:ffff:ffff:ffff,GT
2803:7080::,2803:7080:ffff:ffff:ffff:ffff:ffff:ffff,AR
2803:7100::,2803:7100:ffff:ffff:ffff:ffff:ffff:ffff,AR
@@ -10861,6 +11918,7 @@
2803:7600::,2803:7600:ffff:ffff:ffff:ffff:ffff:ffff,AR
2803:7680::,2803:7680:ffff:ffff:ffff:ffff:ffff:ffff,BO
2803:7700::,2803:7700:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2803:7780::,2803:7780:ffff:ffff:ffff:ffff:ffff:ffff,HN
2803:7800::,2803:7800:ffff:ffff:ffff:ffff:ffff:ffff,VE
2803:7880::,2803:7880:ffff:ffff:ffff:ffff:ffff:ffff,AR
2803:7900::,2803:7900:ffff:ffff:ffff:ffff:ffff:ffff,BZ
@@ -10868,6 +11926,7 @@
2803:7a00::,2803:7a00:ffff:ffff:ffff:ffff:ffff:ffff,CR
2803:7a80::,2803:7a80:ffff:ffff:ffff:ffff:ffff:ffff,CR
2803:7b00::,2803:7b00:ffff:ffff:ffff:ffff:ffff:ffff,CL
+2803:7b80::,2803:7b80:ffff:ffff:ffff:ffff:ffff:ffff,PE
2803:7c00::,2803:7c00:ffff:ffff:ffff:ffff:ffff:ffff,CR
2803:7c80::,2803:7c80:ffff:ffff:ffff:ffff:ffff:ffff,PA
2803:7d00::,2803:7d00:ffff:ffff:ffff:ffff:ffff:ffff,AR
@@ -10875,7 +11934,9 @@
2803:7e00::,2803:7e00:ffff:ffff:ffff:ffff:ffff:ffff,AR
2803:7e80::,2803:7e80:ffff:ffff:ffff:ffff:ffff:ffff,AR
2803:7f00::,2803:7f00:ffff:ffff:ffff:ffff:ffff:ffff,CO
+2803:7f80::,2803:7f80:ffff:ffff:ffff:ffff:ffff:ffff,AR
2803:8000::,2803:8000:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2803:8040::,2803:8040:ffff:ffff:ffff:ffff:ffff:ffff,CR
2803:8080::,2803:8080:ffff:ffff:ffff:ffff:ffff:ffff,AR
2803:8100::,2803:8100:ffff:ffff:ffff:ffff:ffff:ffff,VE
2803:8180::,2803:8180:ffff:ffff:ffff:ffff:ffff:ffff,CL
@@ -10890,11 +11951,11 @@
2803:8600::,2803:8600:ffff:ffff:ffff:ffff:ffff:ffff,HT
2803:8680::,2803:8680:ffff:ffff:ffff:ffff:ffff:ffff,AR
2803:8700::,2803:8700:ffff:ffff:ffff:ffff:ffff:ffff,CR
+2803:8780::,2803:8780:ffff:ffff:ffff:ffff:ffff:ffff,BZ
2803:8800::,2803:8800:ffff:ffff:ffff:ffff:ffff:ffff,CR
2803:8880::,2803:8880:ffff:ffff:ffff:ffff:ffff:ffff,NI
2803:8900::,2803:8900:ffff:ffff:ffff:ffff:ffff:ffff,AR
2803:8980::,2803:8980:ffff:ffff:ffff:ffff:ffff:ffff,CO
-2803:8a00::,2803:8a00:ffff:ffff:ffff:ffff:ffff:ffff,EC
2803:8a80::,2803:8a80:ffff:ffff:ffff:ffff:ffff:ffff,AR
2803:8b00::,2803:8b00:ffff:ffff:ffff:ffff:ffff:ffff,CO
2803:8b80::,2803:8b80:ffff:ffff:ffff:ffff:ffff:ffff,CO
@@ -10905,6 +11966,7 @@
2803:8e00::,2803:8e00:ffff:ffff:ffff:ffff:ffff:ffff,CL
2803:8e80::,2803:8e80:ffff:ffff:ffff:ffff:ffff:ffff,PY
2803:8f00::,2803:8f00:ffff:ffff:ffff:ffff:ffff:ffff,PA
+2803:8f80::,2803:8f80:ffff:ffff:ffff:ffff:ffff:ffff,HN
2803:9000::,2803:9000:ffff:ffff:ffff:ffff:ffff:ffff,AR
2803:9080::,2803:9080:ffff:ffff:ffff:ffff:ffff:ffff,HN
2803:9100::,2803:9100:ffff:ffff:ffff:ffff:ffff:ffff,AR
@@ -10920,6 +11982,7 @@
2803:9600::,2803:9600:ffff:ffff:ffff:ffff:ffff:ffff,CW
2803:9680::,2803:9680:ffff:ffff:ffff:ffff:ffff:ffff,AR
2803:9700::,2803:9700:ffff:ffff:ffff:ffff:ffff:ffff,EC
+2803:9780::,2803:9780:ffff:ffff:ffff:ffff:ffff:ffff,AR
2803:9800::,2803:9800:ffff:ffff:ffff:ffff:ffff:ffff,AR
2803:9880::,2803:9880:ffff:ffff:ffff:ffff:ffff:ffff,BZ
2803:9900::,2803:9900:ffff:ffff:ffff:ffff:ffff:ffff,CL
@@ -10935,13 +11998,13 @@
2803:9e00::,2803:9e00:ffff:ffff:ffff:ffff:ffff:ffff,AR
2803:9e80::,2803:9e80:ffff:ffff:ffff:ffff:ffff:ffff,CL
2803:9f00::,2803:9f00:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2803:9f80::,2803:9f80:ffff:ffff:ffff:ffff:ffff:ffff,HN
2803:a000::,2803:a000:ffff:ffff:ffff:ffff:ffff:ffff,BQ
2803:a080::,2803:a080:ffff:ffff:ffff:ffff:ffff:ffff,AR
2803:a100::,2803:a100:ffff:ffff:ffff:ffff:ffff:ffff,CL
2803:a180::,2803:a180:ffff:ffff:ffff:ffff:ffff:ffff,DO
2803:a200::,2803:a200:ffff:ffff:ffff:ffff:ffff:ffff,SR
2803:a280::,2803:a280:ffff:ffff:ffff:ffff:ffff:ffff,DO
-2803:a300::,2803:a300:ffff:ffff:ffff:ffff:ffff:ffff,BZ
2803:a380::,2803:a380:ffff:ffff:ffff:ffff:ffff:ffff,PA
2803:a400::,2803:a400:ffff:ffff:ffff:ffff:ffff:ffff,EC
2803:a480::,2803:a480:ffff:ffff:ffff:ffff:ffff:ffff,AR
@@ -10950,6 +12013,7 @@
2803:a600::,2803:a600:ffff:ffff:ffff:ffff:ffff:ffff,AR
2803:a680::,2803:a680:ffff:ffff:ffff:ffff:ffff:ffff,AR
2803:a700::,2803:a700:ffff:ffff:ffff:ffff:ffff:ffff,HN
+2803:a780::,2803:a780:ffff:ffff:ffff:ffff:ffff:ffff,AR
2803:a800::,2803:a800:ffff:ffff:ffff:ffff:ffff:ffff,CR
2803:a880::,2803:a880:ffff:ffff:ffff:ffff:ffff:ffff,AR
2803:a900::,2803:a900:ffff:ffff:ffff:ffff:ffff:ffff,AR
@@ -10965,6 +12029,7 @@
2803:ae00::,2803:ae00:ffff:ffff:ffff:ffff:ffff:ffff,AR
2803:ae80::,2803:ae80:ffff:ffff:ffff:ffff:ffff:ffff,AR
2803:af00::,2803:af00:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2803:af80::,2803:af80:ffff:ffff:ffff:ffff:ffff:ffff,PY
2803:b000::,2803:b000:ffff:ffff:ffff:ffff:ffff:ffff,CO
2803:b080::,2803:b080:ffff:ffff:ffff:ffff:ffff:ffff,BZ
2803:b100::,2803:b100:ffff:ffff:ffff:ffff:ffff:ffff,CR
@@ -10980,6 +12045,7 @@
2803:b600::,2803:b600:ffff:ffff:ffff:ffff:ffff:ffff,AR
2803:b680::,2803:b680:ffff:ffff:ffff:ffff:ffff:ffff,AR
2803:b700::,2803:b700:ffff:ffff:ffff:ffff:ffff:ffff,HN
+2803:b780::,2803:b780:ffff:ffff:ffff:ffff:ffff:ffff,NI
2803:b800::,2803:b800:ffff:ffff:ffff:ffff:ffff:ffff,CR
2803:b880::,2803:b880:ffff:ffff:ffff:ffff:ffff:ffff,AR
2803:b900::,2803:b900:ffff:ffff:ffff:ffff:ffff:ffff,AR
@@ -10987,6 +12053,7 @@
2803:ba00::,2803:ba00:ffff:ffff:ffff:ffff:ffff:ffff,GT
2803:ba80::,2803:ba80:ffff:ffff:ffff:ffff:ffff:ffff,AR
2803:bb00::,2803:bb00:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2803:bb80::,2803:bb80:ffff:ffff:ffff:ffff:ffff:ffff,VE
2803:bc00::,2803:bc00:ffff:ffff:ffff:ffff:ffff:ffff,AR
2803:bc80::,2803:bc80:ffff:ffff:ffff:ffff:ffff:ffff,CO
2803:bd00::,2803:bd00:ffff:ffff:ffff:ffff:ffff:ffff,AR
@@ -10994,7 +12061,9 @@
2803:be00::,2803:be00:ffff:ffff:ffff:ffff:ffff:ffff,AR
2803:be80::,2803:be80:ffff:ffff:ffff:ffff:ffff:ffff,CO
2803:bf00::,2803:bf00:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2803:bf80::,2803:bf80:ffff:ffff:ffff:ffff:ffff:ffff,PA
2803:c000::,2803:c000:ffff:ffff:ffff:ffff:ffff:ffff,VE
+2803:c040::,2803:c040:ffff:ffff:ffff:ffff:ffff:ffff,VE
2803:c080::,2803:c080:ffff:ffff:ffff:ffff:ffff:ffff,AR
2803:c100::,2803:c100:ffff:ffff:ffff:ffff:ffff:ffff,PY
2803:c180::,2803:c180:ffff:ffff:ffff:ffff:ffff:ffff,CL
@@ -11009,6 +12078,7 @@
2803:c600::,2803:c600:ffff:ffff:ffff:ffff:ffff:ffff,CL
2803:c680::,2803:c680:ffff:ffff:ffff:ffff:ffff:ffff,HT
2803:c700::,2803:c700:ffff:ffff:ffff:ffff:ffff:ffff,GF
+2803:c780::,2803:c780:ffff:ffff:ffff:ffff:ffff:ffff,AR
2803:c800::,2803:c800:ffff:ffff:ffff:ffff:ffff:ffff,GT
2803:c880::,2803:c880:ffff:ffff:ffff:ffff:ffff:ffff,HN
2803:c900::,2803:c900:ffff:ffff:ffff:ffff:ffff:ffff,AR
@@ -11024,6 +12094,7 @@
2803:ce00::,2803:ce00:ffff:ffff:ffff:ffff:ffff:ffff,HN
2803:ce80::,2803:ce80:ffff:ffff:ffff:ffff:ffff:ffff,AR
2803:cf00::,2803:cf00:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2803:cf80::,2803:cf80:ffff:ffff:ffff:ffff:ffff:ffff,AR
2803:d000::,2803:d000:ffff:ffff:ffff:ffff:ffff:ffff,BZ
2803:d080::,2803:d080:ffff:ffff:ffff:ffff:ffff:ffff,AR
2803:d100::,2803:d100:ffff:ffff:ffff:ffff:ffff:ffff,GT
@@ -11039,6 +12110,7 @@
2803:d600::,2803:d600:ffff:ffff:ffff:ffff:ffff:ffff,UY
2803:d680::,2803:d680:ffff:ffff:ffff:ffff:ffff:ffff,PE
2803:d700::,2803:d700:ffff:ffff:ffff:ffff:ffff:ffff,VE
+2803:d780::,2803:d780:ffff:ffff:ffff:ffff:ffff:ffff,CL
2803:d800::,2803:d800:ffff:ffff:ffff:ffff:ffff:ffff,AR
2803:d880::,2803:d880:ffff:ffff:ffff:ffff:ffff:ffff,CR
2803:d900::,2803:d900:ffff:ffff:ffff:ffff:ffff:ffff,CR
@@ -11046,6 +12118,7 @@
2803:da00::,2803:da00:ffff:ffff:ffff:ffff:ffff:ffff,GY
2803:da80::,2803:da80:ffff:ffff:ffff:ffff:ffff:ffff,AR
2803:db00::,2803:db00:ffff:ffff:ffff:ffff:ffff:ffff,HN
+2803:db80::,2803:db80:ffff:ffff:ffff:ffff:ffff:ffff,CL
2803:dc00::,2803:dc00:ffff:ffff:ffff:ffff:ffff:ffff,CO
2803:dc80::,2803:dc80:ffff:ffff:ffff:ffff:ffff:ffff,AR
2803:dd00::,2803:dd00:ffff:ffff:ffff:ffff:ffff:ffff,PA
@@ -11053,6 +12126,7 @@
2803:de00::,2803:de00:ffff:ffff:ffff:ffff:ffff:ffff,AR
2803:de80::,2803:de80:ffff:ffff:ffff:ffff:ffff:ffff,CO
2803:df00::,2803:df00:ffff:ffff:ffff:ffff:ffff:ffff,SV
+2803:df80::,2803:df80:ffff:ffff:ffff:ffff:ffff:ffff,AR
2803:e000::,2803:e000:ffff:ffff:ffff:ffff:ffff:ffff,CO
2803:e080::,2803:e080:ffff:ffff:ffff:ffff:ffff:ffff,AR
2803:e100::,2803:e100:ffff:ffff:ffff:ffff:ffff:ffff,AR
@@ -11068,6 +12142,7 @@
2803:e600::,2803:e600:ffff:ffff:ffff:ffff:ffff:ffff,PA
2803:e680::,2803:e680:ffff:ffff:ffff:ffff:ffff:ffff,HN
2803:e700::,2803:e700:ffff:ffff:ffff:ffff:ffff:ffff,HN
+2803:e780::,2803:e780:ffff:ffff:ffff:ffff:ffff:ffff,PY
2803:e800::,2803:e800:ffff:ffff:ffff:ffff:ffff:ffff,CL
2803:e880::,2803:e880:ffff:ffff:ffff:ffff:ffff:ffff,GT
2803:e900::,2803:e900:ffff:ffff:ffff:ffff:ffff:ffff,AR
@@ -11083,6 +12158,7 @@
2803:ee00::,2803:ee00:ffff:ffff:ffff:ffff:ffff:ffff,AR
2803:ee80::,2803:ee80:ffff:ffff:ffff:ffff:ffff:ffff,AR
2803:ef00::,2803:ef00:ffff:ffff:ffff:ffff:ffff:ffff,PA
+2803:ef80::,2803:ef80:ffff:ffff:ffff:ffff:ffff:ffff,CL
2803:f000::,2803:f000:ffff:ffff:ffff:ffff:ffff:ffff,AR
2803:f080::,2803:f080:ffff:ffff:ffff:ffff:ffff:ffff,PE
2803:f100::,2803:f100:ffff:ffff:ffff:ffff:ffff:ffff,AR
@@ -11098,6 +12174,7 @@
2803:f600::,2803:f600:ffff:ffff:ffff:ffff:ffff:ffff,CR
2803:f680::,2803:f680:ffff:ffff:ffff:ffff:ffff:ffff,AR
2803:f700::,2803:f700:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2803:f780::,2803:f780:ffff:ffff:ffff:ffff:ffff:ffff,DO
2803:f800::,2803:f800:ffff:ffff:ffff:ffff:ffff:ffff,CR
2803:f880::,2803:f880:ffff:ffff:ffff:ffff:ffff:ffff,CR
2803:f900::,2803:f900:ffff:ffff:ffff:ffff:ffff:ffff,BZ
@@ -11105,6 +12182,7 @@
2803:fa00::,2803:fa00:ffff:ffff:ffff:ffff:ffff:ffff,BO
2803:fa80::,2803:fa80:ffff:ffff:ffff:ffff:ffff:ffff,AR
2803:fb00::,2803:fb00:ffff:ffff:ffff:ffff:ffff:ffff,PA
+2803:fb80::,2803:fb80:ffff:ffff:ffff:ffff:ffff:ffff,AR
2803:fc00::,2803:fc00:ffff:ffff:ffff:ffff:ffff:ffff,PY
2803:fc80::,2803:fc80:ffff:ffff:ffff:ffff:ffff:ffff,AR
2803:fd00::,2803:fd00:ffff:ffff:ffff:ffff:ffff:ffff,CO
@@ -11112,6 +12190,7 @@
2803:fe00::,2803:fe00:ffff:ffff:ffff:ffff:ffff:ffff,CO
2803:fe80::,2803:fe80:ffff:ffff:ffff:ffff:ffff:ffff,PE
2803:ff00::,2803:ff00:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2803:ff80::,2803:ff80:ffff:ffff:ffff:ffff:ffff:ffff,CO
2804::,2804::ffff:ffff:ffff:ffff:ffff:ffff,BR
2804:4::,2804:4:ffff:ffff:ffff:ffff:ffff:ffff,BR
2804:8::,2804:c:ffff:ffff:ffff:ffff:ffff:ffff,BR
@@ -11235,7 +12314,6 @@
2804:1f0::,2804:1f0:ffff:ffff:ffff:ffff:ffff:ffff,BR
2804:1f4::,2804:1f4:ffff:ffff:ffff:ffff:ffff:ffff,BR
2804:1f8::,2804:1f8:ffff:ffff:ffff:ffff:ffff:ffff,BR
-2804:1fc::,2804:1fc:ffff:ffff:ffff:ffff:ffff:ffff,BR
2804:200::,2804:200:ffff:ffff:ffff:ffff:ffff:ffff,BR
2804:204::,2804:204:ffff:ffff:ffff:ffff:ffff:ffff,BR
2804:208::,2804:208:ffff:ffff:ffff:ffff:ffff:ffff,BR
@@ -13058,6 +14136,14 @@
2804:1ed4::,2804:1ed4:ffff:ffff:ffff:ffff:ffff:ffff,BR
2804:1ed8::,2804:1ed8:ffff:ffff:ffff:ffff:ffff:ffff,BR
2804:1edc::,2804:1edc:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1ee0::,2804:1ee0:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1ee4::,2804:1ee4:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1ee8::,2804:1ee8:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1eec::,2804:1eec:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1ef0::,2804:1ef0:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1ef4::,2804:1ef4:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1ef8::,2804:1ef8:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1efc::,2804:1efc:ffff:ffff:ffff:ffff:ffff:ffff,BR
2804:1f00::,2804:1f00:ffff:ffff:ffff:ffff:ffff:ffff,BR
2804:1f02::,2804:1f02:ffff:ffff:ffff:ffff:ffff:ffff,BR
2804:1f04::,2804:1f04:ffff:ffff:ffff:ffff:ffff:ffff,BR
@@ -13066,10 +14152,267 @@
2804:1f0a::,2804:1f0a:ffff:ffff:ffff:ffff:ffff:ffff,BR
2804:1f0c::,2804:1f0c:ffff:ffff:ffff:ffff:ffff:ffff,BR
2804:1f0e::,2804:1f0e:1fff:ffff:ffff:ffff:ffff:ffff,BR
+2804:2000::,2804:2000:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:2004::,2804:2004:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:2008::,2804:2008:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:200c::,2804:200c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:2010::,2804:2010:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:2014::,2804:2014:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:2018::,2804:2018:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:201c::,2804:201c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:2020::,2804:2020:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:2024::,2804:2024:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:2028::,2804:2028:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:202c::,2804:202c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:2030::,2804:2030:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:2034::,2804:2034:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:2038::,2804:2038:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:203c::,2804:203c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:2040::,2804:2040:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:2044::,2804:2044:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:2048::,2804:2048:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:204c::,2804:204c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:2050::,2804:2050:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:2054::,2804:2054:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:2058::,2804:2058:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:205c::,2804:205c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:2060::,2804:2060:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:2064::,2804:2064:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:2068::,2804:2068:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:206c::,2804:206c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:2070::,2804:2070:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:2074::,2804:2074:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:2078::,2804:2078:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:207c::,2804:207c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:2080::,2804:2080:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:2084::,2804:2084:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:2088::,2804:2088:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:208c::,2804:208c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:2090::,2804:2090:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:2094::,2804:2094:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:2098::,2804:2098:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:209c::,2804:209c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:20a0::,2804:20a0:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:20a4::,2804:20a4:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:20a8::,2804:20a8:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:20ac::,2804:20ac:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:20b0::,2804:20b0:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:20b4::,2804:20b4:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:20b8::,2804:20b8:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:20bc::,2804:20bc:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:20c0::,2804:20c0:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:20c4::,2804:20c4:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:20c8::,2804:20c8:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:20cc::,2804:20cc:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:20d0::,2804:20d0:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:20d4::,2804:20d4:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:20d8::,2804:20d8:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:20dc::,2804:20dc:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:20e0::,2804:20e0:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:20e4::,2804:20e4:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:20e8::,2804:20e8:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:20ec::,2804:20ec:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:20f0::,2804:20f0:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:20f4::,2804:20f4:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:20f8::,2804:20f8:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:20fc::,2804:20fc:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:2100::,2804:2100:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:2104::,2804:2104:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:2108::,2804:2108:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:210c::,2804:210c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:2110::,2804:2110:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:2114::,2804:2114:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:2118::,2804:2118:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:211c::,2804:211c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:2120::,2804:2120:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:2124::,2804:2124:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:2128::,2804:2128:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:212c::,2804:212c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:2130::,2804:2130:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:2134::,2804:2134:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:2138::,2804:2138:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:213c::,2804:213c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:2140::,2804:2140:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:2144::,2804:2144:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:2148::,2804:2148:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:214c::,2804:214c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:2150::,2804:2150:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:2154::,2804:2154:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:2158::,2804:2158:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:215c::,2804:215c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:2160::,2804:2160:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:2164::,2804:2164:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:2168::,2804:2168:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:216c::,2804:216c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:2170::,2804:2170:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:2174::,2804:2174:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:2178::,2804:2178:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:217c::,2804:217c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:2180::,2804:2180:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:2184::,2804:2184:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:2188::,2804:2188:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:218c::,2804:218c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:2190::,2804:2190:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:2194::,2804:2194:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:2198::,2804:2198:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:219c::,2804:219c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:21a0::,2804:21a0:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:21a4::,2804:21a4:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:21a8::,2804:21a8:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:21ac::,2804:21ac:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:21b0::,2804:21b0:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:21b4::,2804:21b4:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:21b8::,2804:21b8:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:21bc::,2804:21bc:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:21c0::,2804:21c0:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:21c4::,2804:21c4:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:21c8::,2804:21c8:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:21cc::,2804:21cc:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:21d0::,2804:21d0:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:21d4::,2804:21d4:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:21d8::,2804:21d8:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:21dc::,2804:21dc:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:21e0::,2804:21e0:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:21e4::,2804:21e4:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:21e8::,2804:21e8:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:21ec::,2804:21ec:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:21f0::,2804:21f0:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:21f4::,2804:21f4:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:21f8::,2804:21f8:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:21fc::,2804:21fc:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:2200::,2804:2200:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:2204::,2804:2204:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:2208::,2804:2208:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:220c::,2804:220c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:2210::,2804:2210:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:2214::,2804:2214:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:2218::,2804:2218:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:221c::,2804:221c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:2220::,2804:2220:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:2224::,2804:2224:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:2228::,2804:2228:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:222c::,2804:222c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:2230::,2804:2230:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:2234::,2804:2234:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:2238::,2804:2238:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:223c::,2804:223c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:2240::,2804:2240:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:2244::,2804:2244:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:2248::,2804:2248:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:224c::,2804:224c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:2250::,2804:2250:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:2254::,2804:2254:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:2258::,2804:2258:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:225c::,2804:225c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:2260::,2804:2260:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:2264::,2804:2264:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:2268::,2804:2268:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:226c::,2804:226c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:2270::,2804:2270:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:2274::,2804:2274:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:2278::,2804:2278:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:227c::,2804:227c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:2280::,2804:2280:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:2284::,2804:2284:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:2288::,2804:2288:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:228c::,2804:228c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:2290::,2804:2290:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:2294::,2804:2294:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:2298::,2804:2298:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:229c::,2804:229c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:22a0::,2804:22a0:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:22a4::,2804:22a4:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:22a8::,2804:22a8:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:22ac::,2804:22ac:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:22b0::,2804:22b0:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:22b4::,2804:22b4:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:22b8::,2804:22b8:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:22bc::,2804:22bc:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:22c0::,2804:22c0:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:22c4::,2804:22c4:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:22c8::,2804:22c8:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:22cc::,2804:22cc:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:22d0::,2804:22d0:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:22d4::,2804:22d4:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:22d8::,2804:22d8:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:22dc::,2804:22dc:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:22e0::,2804:22e0:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:22e4::,2804:22e4:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:22e8::,2804:22e8:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:22ec::,2804:22ec:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:22f0::,2804:22f0:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:22f4::,2804:22f4:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:22f8::,2804:22f8:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:22fc::,2804:22fc:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:2300::,2804:2300:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:2304::,2804:2304:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:2308::,2804:2308:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:230c::,2804:230c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:2310::,2804:2310:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:2314::,2804:2314:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:2318::,2804:2318:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:231c::,2804:231c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:2320::,2804:2320:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:2324::,2804:2324:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:2328::,2804:2328:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:232c::,2804:232c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:2330::,2804:2330:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:2334::,2804:2334:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:2338::,2804:2338:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:233c::,2804:233c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:2340::,2804:2340:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:2344::,2804:2344:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:2348::,2804:2348:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:234c::,2804:234c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:2350::,2804:2350:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:2354::,2804:2354:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:2358::,2804:2358:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:235c::,2804:235c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:2360::,2804:2360:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:2364::,2804:2364:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:2368::,2804:2368:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:236c::,2804:236c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:2370::,2804:2370:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:2374::,2804:2374:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:2378::,2804:2378:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:237c::,2804:237c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:2380::,2804:2380:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:2384::,2804:2384:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:2388::,2804:2388:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:238c::,2804:238c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:2390::,2804:2390:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:2394::,2804:2394:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:2398::,2804:2398:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:239c::,2804:239c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:23a0::,2804:23a0:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:23a4::,2804:23a4:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:23a8::,2804:23a8:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:23ac::,2804:23ac:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:23b0::,2804:23b0:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:23b4::,2804:23b4:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:23b8::,2804:23b8:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:23bc::,2804:23bc:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:23c0::,2804:23c1:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:23c4::,2804:23c4:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:23c8::,2804:23c8:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:23cc::,2804:23cc:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:23d0::,2804:23d0:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:23d4::,2804:23d4:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:23d8::,2804:23d8:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:23dc::,2804:23dc:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:23e0::,2804:23e0:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:23e4::,2804:23e4:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:23e8::,2804:23e8:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:23ec::,2804:23ec:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:23f0::,2804:23f0:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:23f4::,2804:23f4:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:23f8::,2804:23f8:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:23fc::,2804:23fc:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:2400::,2804:2400:ffff:ffff:ffff:ffff:ffff:ffff,BR
2806::,2806:f:ffff:ffff:ffff:ffff:ffff:ffff,MX
2806:200::,2806:200:ffff:ffff:ffff:ffff:ffff:ffff,MX
2806:210::,2806:216::ffff:ffff:ffff:ffff:ffff,MX
-2806:217::,2806:21b:ffff:ffff:ffff:ffff:ffff:ffff,MX
+2806:217::,2806:21d:ffff:ffff:ffff:ffff:ffff:ffff,MX
2806:220::,2806:220:ffff:ffff:ffff:ffff:ffff:ffff,MX
2806:230::,2806:230:ffff:ffff:ffff:ffff:ffff:ffff,MX
2806:238::,2806:238::ffff:ffff:ffff:ffff:ffff,MX
@@ -13097,9 +14440,7 @@
2806:370::,2806:370:ffff:ffff:ffff:ffff:ffff:ffff,MX
2806:1000::,2806:10ff:ffff:ffff:ffff:ffff:ffff:ffff,MX
2a00::,2a00:3ff:ffff:ffff:ffff:ffff:ffff:ffff,DE
-2a00:800::,2a00:801:210:ffff:ffff:ffff:ffff:ffff,SE
-2a00:801:211::,2a00:801:211:ffff:ffff:ffff:ffff:ffff,NO
-2a00:801:212::,2a00:87f:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a00:800::,2a00:87f:ffff:ffff:ffff:ffff:ffff:ffff,SE
2a00:c00::,2a00:c00:ffff:ffff:ffff:ffff:ffff:ffff,DE
2a00:c08::,2a00:c08:ffff:ffff:ffff:ffff:ffff:ffff,GB
2a00:c10::,2a00:c10:ffff:ffff:ffff:ffff:ffff:ffff,CH
@@ -13123,7 +14464,7 @@
2a00:ca8::,2a00:ca8:ffff:ffff:ffff:ffff:ffff:ffff,CZ
2a00:cb0::,2a00:cb0:ffff:ffff:ffff:ffff:ffff:ffff,DE
2a00:cb8::,2a00:cb8:ffff:ffff:ffff:ffff:ffff:ffff,NL
-2a00:cc0::,2a00:cc0:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:cc0::,2a00:cc7:ffff:ffff:ffff:ffff:ffff:ffff,DE
2a00:cc8::,2a00:cc8:ffff:ffff:ffff:ffff:ffff:ffff,SE
2a00:cd0::,2a00:cd0:ffff:ffff:ffff:ffff:ffff:ffff,DE
2a00:cd8::,2a00:cd8:ffff:ffff:ffff:ffff:ffff:ffff,NL
@@ -13208,7 +14549,7 @@
2a00:f88::,2a00:f88:ffff:ffff:ffff:ffff:ffff:ffff,DE
2a00:f90::,2a00:f90:ffff:ffff:ffff:ffff:ffff:ffff,CH
2a00:f98::,2a00:f98:ffff:ffff:ffff:ffff:ffff:ffff,SE
-2a00:fa0::,2a00:fa0:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a00:fa0::,2a00:fa7:ffff:ffff:ffff:ffff:ffff:ffff,CH
2a00:fa8::,2a00:fa8:ffff:ffff:ffff:ffff:ffff:ffff,DE
2a00:fb8::,2a00:fb8:ffff:ffff:ffff:ffff:ffff:ffff,DE
2a00:fc0::,2a00:fc0:ffff:ffff:ffff:ffff:ffff:ffff,SI
@@ -13226,11 +14567,12 @@
2a00:1020::,2a00:1020:ffff:ffff:ffff:ffff:ffff:ffff,RU
2a00:1028::,2a00:1028:ffff:ffff:ffff:ffff:ffff:ffff,CZ
2a00:1030::,2a00:1030:ffff:ffff:ffff:ffff:ffff:ffff,DE
-2a00:1038::,2a00:1038:ffff:ffff:ffff:ffff:ffff:ffff,CH
2a00:1040::,2a00:1040:ffff:ffff:ffff:ffff:ffff:ffff,DK
2a00:1048::,2a00:1048:ffff:ffff:ffff:ffff:ffff:ffff,NL
2a00:1050::,2a00:1050:ffff:ffff:ffff:ffff:ffff:ffff,DE
-2a00:1058::,2a00:1058:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a00:1058::,2a00:1058:111:ffff:ffff:ffff:ffff:ffff,FR
+2a00:1058:112::,2a00:1058:112:ffff:ffff:ffff:ffff:ffff,GB
+2a00:1058:113::,2a00:1058:ffff:ffff:ffff:ffff:ffff:ffff,FR
2a00:1060::,2a00:1060:ffff:ffff:ffff:ffff:ffff:ffff,MT
2a00:1068::,2a00:1068:ffff:ffff:ffff:ffff:ffff:ffff,GB
2a00:1070::,2a00:1070:ffff:ffff:ffff:ffff:ffff:ffff,GB
@@ -13262,7 +14604,7 @@
2a00:1150::,2a00:1150:ffff:ffff:ffff:ffff:ffff:ffff,BH
2a00:1158::,2a00:1158:ffff:ffff:ffff:ffff:ffff:ffff,DE
2a00:1160::,2a00:1160:ffff:ffff:ffff:ffff:ffff:ffff,GB
-2a00:1168::,2a00:1168:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a00:1168::,2a00:116f:ffff:ffff:ffff:ffff:ffff:ffff,NL
2a00:1170::,2a00:1170:ffff:ffff:ffff:ffff:ffff:ffff,IE
2a00:1178::,2a00:1178:ffff:ffff:ffff:ffff:ffff:ffff,NL
2a00:1180::,2a00:1180:ffff:ffff:ffff:ffff:ffff:ffff,DE
@@ -13350,7 +14692,13 @@
2a00:1430::,2a00:1430:ffff:ffff:ffff:ffff:ffff:ffff,GB
2a00:1440::,2a00:1440:ffff:ffff:ffff:ffff:ffff:ffff,RU
2a00:1448::,2a00:1448:ffff:ffff:ffff:ffff:ffff:ffff,SI
-2a00:1450::,2a00:1457:ffff:ffff:ffff:ffff:ffff:ffff,IE
+2a00:1450::,2a00:1450:400b:ffff:ffff:ffff:ffff:ffff,IE
+2a00:1450:400c::,2a00:1450:400c:ffff:ffff:ffff:ffff:ffff,BE
+2a00:1450:400d::,2a00:1450:400f:ffff:ffff:ffff:ffff:ffff,IE
+2a00:1450:4010::,2a00:1450:4010:ffff:ffff:ffff:ffff:ffff,FI
+2a00:1450:4011::,2a00:1450:4012:ffff:ffff:ffff:ffff:ffff,IE
+2a00:1450:4013::,2a00:1450:4013:ffff:ffff:ffff:ffff:ffff,NL
+2a00:1450:4014::,2a00:1457:ffff:ffff:ffff:ffff:ffff:ffff,IE
2a00:1458::,2a00:1458:ffff:ffff:ffff:ffff:ffff:ffff,BE
2a00:1460::,2a00:1460:ffff:ffff:ffff:ffff:ffff:ffff,RU
2a00:1468::,2a00:1468:ffff:ffff:ffff:ffff:ffff:ffff,RU
@@ -13372,7 +14720,7 @@
2a00:14e8::,2a00:14ef:ffff:ffff:ffff:ffff:ffff:ffff,FR
2a00:14f0::,2a00:14f0:ffff:ffff:ffff:ffff:ffff:ffff,GB
2a00:14f8::,2a00:14f8:ffff:ffff:ffff:ffff:ffff:ffff,IT
-2a00:1500::,2a00:1500:ffff:ffff:ffff:ffff:ffff:ffff,AM
+2a00:1500::,2a00:1507:ffff:ffff:ffff:ffff:ffff:ffff,AM
2a00:1508::,2a00:1508:ffff:ffff:ffff:ffff:ffff:ffff,ES
2a00:1510::,2a00:1510:ffff:ffff:ffff:ffff:ffff:ffff,AT
2a00:1518::,2a00:1518:ffff:ffff:ffff:ffff:ffff:ffff,RU
@@ -13489,7 +14837,7 @@
2a00:18f0::,2a00:18f0:ffff:ffff:ffff:ffff:ffff:ffff,DE
2a00:18f8::,2a00:18f8:ffff:ffff:ffff:ffff:ffff:ffff,SA
2a00:1900::,2a00:1900:ffff:ffff:ffff:ffff:ffff:ffff,DE
-2a00:1908::,2a00:1908:ffff:ffff:ffff:ffff:ffff:ffff,UA
+2a00:1908::,2a00:190f:ffff:ffff:ffff:ffff:ffff:ffff,UA
2a00:1910::,2a00:1917:ffff:ffff:ffff:ffff:ffff:ffff,DE
2a00:1918::,2a00:191f:ffff:ffff:ffff:ffff:ffff:ffff,SA
2a00:1920::,2a00:1920:ffff:ffff:ffff:ffff:ffff:ffff,DE
@@ -13516,7 +14864,7 @@
2a00:19c8::,2a00:19c8:ffff:ffff:ffff:ffff:ffff:ffff,DE
2a00:19d0::,2a00:19d0:ffff:ffff:ffff:ffff:ffff:ffff,DE
2a00:19d8::,2a00:19d8:ffff:ffff:ffff:ffff:ffff:ffff,GB
-2a00:19e0::,2a00:19e0:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:19e0::,2a00:19e7:ffff:ffff:ffff:ffff:ffff:ffff,DE
2a00:19e8::,2a00:19e8:ffff:ffff:ffff:ffff:ffff:ffff,GB
2a00:19f0::,2a00:19f0:ffff:ffff:ffff:ffff:ffff:ffff,NL
2a00:19f8::,2a00:19f8:ffff:ffff:ffff:ffff:ffff:ffff,DK
@@ -13525,7 +14873,9 @@
2a00:1a10::,2a00:1a10:ffff:ffff:ffff:ffff:ffff:ffff,GB
2a00:1a18::,2a00:1a18:ffff:ffff:ffff:ffff:ffff:ffff,DE
2a00:1a20::,2a00:1a20:ffff:ffff:ffff:ffff:ffff:ffff,SI
-2a00:1a28::,2a00:1a28:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a00:1a28::,2a00:1a28:1162:ffff:ffff:ffff:ffff:ffff,SE
+2a00:1a28:1163::,2a00:1a28:1163:ffff:ffff:ffff:ffff:ffff,GB
+2a00:1a28:1164::,2a00:1a28:ffff:ffff:ffff:ffff:ffff:ffff,SE
2a00:1a30::,2a00:1a30:ffff:ffff:ffff:ffff:ffff:ffff,GB
2a00:1a38::,2a00:1a38:ffff:ffff:ffff:ffff:ffff:ffff,RU
2a00:1a40::,2a00:1a40:ffff:ffff:ffff:ffff:ffff:ffff,PL
@@ -13600,7 +14950,7 @@
2a00:1c68::,2a00:1c68:ffff:ffff:ffff:ffff:ffff:ffff,FI
2a00:1c70::,2a00:1c70:ffff:ffff:ffff:ffff:ffff:ffff,RU
2a00:1c78::,2a00:1c78:ffff:ffff:ffff:ffff:ffff:ffff,RU
-2a00:1c80::,2a00:1c80:ffff:ffff:ffff:ffff:ffff:ffff,SI
+2a00:1c80::,2a00:1c87:ffff:ffff:ffff:ffff:ffff:ffff,SI
2a00:1c88::,2a00:1c88:ffff:ffff:ffff:ffff:ffff:ffff,RU
2a00:1c90::,2a00:1c90:ffff:ffff:ffff:ffff:ffff:ffff,NO
2a00:1c98::,2a00:1c98:ffff:ffff:ffff:ffff:ffff:ffff,BE
@@ -13650,7 +15000,7 @@
2a00:1e00::,2a00:1e00:ffff:ffff:ffff:ffff:ffff:ffff,RU
2a00:1e08::,2a00:1e08:ffff:ffff:ffff:ffff:ffff:ffff,DK
2a00:1e10::,2a00:1e10:ffff:ffff:ffff:ffff:ffff:ffff,RU
-2a00:1e18::,2a00:1e18:ffff:ffff:ffff:ffff:ffff:ffff,NO
+2a00:1e18::,2a00:1e1f:ffff:ffff:ffff:ffff:ffff:ffff,NO
2a00:1e20::,2a00:1e20:ffff:ffff:ffff:ffff:ffff:ffff,UA
2a00:1e28::,2a00:1e28:ffff:ffff:ffff:ffff:ffff:ffff,NL
2a00:1e30::,2a00:1e30:ffff:ffff:ffff:ffff:ffff:ffff,FR
@@ -13694,7 +15044,7 @@
2a00:1f60::,2a00:1f60:ffff:ffff:ffff:ffff:ffff:ffff,FR
2a00:1f68::,2a00:1f68:ffff:ffff:ffff:ffff:ffff:ffff,GR
2a00:1f70::,2a00:1f70:ffff:ffff:ffff:ffff:ffff:ffff,RU
-2a00:1f78::,2a00:1f78:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:1f78::,2a00:1f7f:ffff:ffff:ffff:ffff:ffff:ffff,DE
2a00:1f80::,2a00:1f80:ffff:ffff:ffff:ffff:ffff:ffff,SE
2a00:1f88::,2a00:1f88:ffff:ffff:ffff:ffff:ffff:ffff,AT
2a00:1f90::,2a00:1f90:ffff:ffff:ffff:ffff:ffff:ffff,TR
@@ -13737,7 +15087,7 @@
2a00:4320::,2a00:4320:ffff:ffff:ffff:ffff:ffff:ffff,DE
2a00:4340::,2a00:4340:ffff:ffff:ffff:ffff:ffff:ffff,GB
2a00:4360::,2a00:4360:ffff:ffff:ffff:ffff:ffff:ffff,IQ
-2a00:4380::,2a00:4380:ffff:ffff:ffff:ffff:ffff:ffff,FI
+2a00:4380::,2a00:4387:ffff:ffff:ffff:ffff:ffff:ffff,FI
2a00:43a0::,2a00:43a0:ffff:ffff:ffff:ffff:ffff:ffff,GB
2a00:43c0::,2a00:43c0:ffff:ffff:ffff:ffff:ffff:ffff,ES
2a00:43e0::,2a00:43e0:ffff:ffff:ffff:ffff:ffff:ffff,IT
@@ -13757,7 +15107,6 @@
2a00:45a0::,2a00:45a0:ffff:ffff:ffff:ffff:ffff:ffff,SY
2a00:45c0::,2a00:45c0:ffff:ffff:ffff:ffff:ffff:ffff,NL
2a00:45e0::,2a00:45e0:ffff:ffff:ffff:ffff:ffff:ffff,IM
-2a00:4600::,2a00:4600:ffff:ffff:ffff:ffff:ffff:ffff,AT
2a00:4620::,2a00:4620:ffff:ffff:ffff:ffff:ffff:ffff,JO
2a00:4640::,2a00:4640:ffff:ffff:ffff:ffff:ffff:ffff,FR
2a00:4660::,2a00:4660:ffff:ffff:ffff:ffff:ffff:ffff,FR
@@ -13774,7 +15123,7 @@
2a00:47c0::,2a00:47c0:ffff:ffff:ffff:ffff:ffff:ffff,GB
2a00:47e0::,2a00:47e0:ffff:ffff:ffff:ffff:ffff:ffff,RU
2a00:4800::,2a00:4807:ffff:ffff:ffff:ffff:ffff:ffff,BG
-2a00:4840::,2a00:4840:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:4840::,2a00:4847:ffff:ffff:ffff:ffff:ffff:ffff,DE
2a00:4860::,2a00:4860:ffff:ffff:ffff:ffff:ffff:ffff,RU
2a00:4880::,2a00:4880:ffff:ffff:ffff:ffff:ffff:ffff,CZ
2a00:48a0::,2a00:48a0:ffff:ffff:ffff:ffff:ffff:ffff,UA
@@ -13866,13 +15215,15 @@
2a00:5420::,2a00:5420:ffff:ffff:ffff:ffff:ffff:ffff,GB
2a00:5440::,2a00:5440:ffff:ffff:ffff:ffff:ffff:ffff,US
2a00:5460::,2a00:5460:ffff:ffff:ffff:ffff:ffff:ffff,NL
-2a00:5480::,2a00:5480:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a00:5480::,2a00:5487:ffff:ffff:ffff:ffff:ffff:ffff,CH
2a00:54a0::,2a00:54a0:ffff:ffff:ffff:ffff:ffff:ffff,TR
2a00:54c0::,2a00:54c0:ffff:ffff:ffff:ffff:ffff:ffff,PL
2a00:54e0::,2a00:54e0:ffff:ffff:ffff:ffff:ffff:ffff,IT
2a00:5500::,2a00:5500:ffff:ffff:ffff:ffff:ffff:ffff,FI
2a00:5520::,2a00:5520:ffff:ffff:ffff:ffff:ffff:ffff,FR
-2a00:5540::,2a00:5540:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:5540::,2a00:5540:385:ffff:ffff:ffff:ffff:ffff,GB
+2a00:5540:386::,2a00:5540:387:ffff:ffff:ffff:ffff:ffff,SI
+2a00:5540:388::,2a00:5540:ffff:ffff:ffff:ffff:ffff:ffff,GB
2a00:5560::,2a00:5560:ffff:ffff:ffff:ffff:ffff:ffff,DE
2a00:5580::,2a00:5580:ffff:ffff:ffff:ffff:ffff:ffff,GB
2a00:55a0::,2a00:55a0:ffff:ffff:ffff:ffff:ffff:ffff,IL
@@ -13965,10 +15316,10 @@
2a00:6140::,2a00:6140:ffff:ffff:ffff:ffff:ffff:ffff,DE
2a00:6160::,2a00:6160:ffff:ffff:ffff:ffff:ffff:ffff,DE
2a00:6180::,2a00:6180:ffff:ffff:ffff:ffff:ffff:ffff,UA
-2a00:61a0::,2a00:61a0:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a00:61a0::,2a00:61a7:ffff:ffff:ffff:ffff:ffff:ffff,SE
2a00:61c0::,2a00:61c7:ffff:ffff:ffff:ffff:ffff:ffff,RS
2a00:61e0::,2a00:61e0:ffff:ffff:ffff:ffff:ffff:ffff,DE
-2a00:6200::,2a00:6200:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a00:6200::,2a00:6207:ffff:ffff:ffff:ffff:ffff:ffff,FR
2a00:6220::,2a00:6220:ffff:ffff:ffff:ffff:ffff:ffff,DK
2a00:6240::,2a00:6240:ffff:ffff:ffff:ffff:ffff:ffff,RU
2a00:6260::,2a00:6260:ffff:ffff:ffff:ffff:ffff:ffff,PL
@@ -14003,7 +15354,6 @@
2a00:6600::,2a00:6600:ffff:ffff:ffff:ffff:ffff:ffff,BH
2a00:6620::,2a00:6620:ffff:ffff:ffff:ffff:ffff:ffff,GR
2a00:6640::,2a00:6647:ffff:ffff:ffff:ffff:ffff:ffff,ES
-2a00:6660::,2a00:6660:ffff:ffff:ffff:ffff:ffff:ffff,LV
2a00:6680::,2a00:6680:ffff:ffff:ffff:ffff:ffff:ffff,ES
2a00:66a0::,2a00:66a0:ffff:ffff:ffff:ffff:ffff:ffff,IL
2a00:66e0::,2a00:66e0:ffff:ffff:ffff:ffff:ffff:ffff,TR
@@ -14033,7 +15383,7 @@
2a00:6a20::,2a00:6a20:ffff:ffff:ffff:ffff:ffff:ffff,TR
2a00:6a40::,2a00:6a40:ffff:ffff:ffff:ffff:ffff:ffff,FR
2a00:6a60::,2a00:6a60:ffff:ffff:ffff:ffff:ffff:ffff,IT
-2a00:6a80::,2a00:6a80:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:6a80::,2a00:6a87:ffff:ffff:ffff:ffff:ffff:ffff,GB
2a00:6ac0::,2a00:6ac0:ffff:ffff:ffff:ffff:ffff:ffff,ES
2a00:6ae0::,2a00:6ae0:ffff:ffff:ffff:ffff:ffff:ffff,LT
2a00:6b00::,2a00:6b00:ffff:ffff:ffff:ffff:ffff:ffff,SE
@@ -14091,7 +15441,7 @@
2a00:7200::,2a00:7200:ffff:ffff:ffff:ffff:ffff:ffff,FR
2a00:7220::,2a00:7220:ffff:ffff:ffff:ffff:ffff:ffff,TR
2a00:7240::,2a00:7243:ffff:ffff:ffff:ffff:ffff:ffff,NO
-2a00:7260::,2a00:7260:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a00:7260::,2a00:7267:ffff:ffff:ffff:ffff:ffff:ffff,FR
2a00:7280::,2a00:7280:ffff:ffff:ffff:ffff:ffff:ffff,GB
2a00:72a0::,2a00:72a0:ffff:ffff:ffff:ffff:ffff:ffff,IT
2a00:72e0::,2a00:72e0:ffff:ffff:ffff:ffff:ffff:ffff,FR
@@ -14121,10 +15471,10 @@
2a00:7600::,2a00:7600:ffff:ffff:ffff:ffff:ffff:ffff,LT
2a00:7620::,2a00:7620:ffff:ffff:ffff:ffff:ffff:ffff,CY
2a00:7640::,2a00:7640:ffff:ffff:ffff:ffff:ffff:ffff,GB
-2a00:7660::,2a00:7660:ffff:ffff:ffff:ffff:ffff:ffff,DK
+2a00:7660::,2a00:7667:ffff:ffff:ffff:ffff:ffff:ffff,DK
2a00:7680::,2a00:7680:ffff:ffff:ffff:ffff:ffff:ffff,SA
2a00:76a0::,2a00:76a0:ffff:ffff:ffff:ffff:ffff:ffff,PL
-2a00:76c0::,2a00:76c0:ffff:ffff:ffff:ffff:ffff:ffff,IR
+2a00:76c0::,2a00:76c7:ffff:ffff:ffff:ffff:ffff:ffff,IR
2a00:76e0::,2a00:76e0:ffff:ffff:ffff:ffff:ffff:ffff,JO
2a00:7700::,2a00:7700:ffff:ffff:ffff:ffff:ffff:ffff,RU
2a00:7720::,2a00:7720:ffff:ffff:ffff:ffff:ffff:ffff,ES
@@ -14140,7 +15490,7 @@
2a00:7860::,2a00:7860:ffff:ffff:ffff:ffff:ffff:ffff,RU
2a00:7880::,2a00:7880:ffff:ffff:ffff:ffff:ffff:ffff,HR
2a00:78a0::,2a00:78a0:ffff:ffff:ffff:ffff:ffff:ffff,RU
-2a00:78c0::,2a00:78c0:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a00:78c0::,2a00:78c7:ffff:ffff:ffff:ffff:ffff:ffff,FR
2a00:78e0::,2a00:78e0:ffff:ffff:ffff:ffff:ffff:ffff,FR
2a00:7900::,2a00:7900:ffff:ffff:ffff:ffff:ffff:ffff,FR
2a00:7920::,2a00:7920:ffff:ffff:ffff:ffff:ffff:ffff,NO
@@ -14149,7 +15499,12 @@
2a00:7980::,2a00:7980:ffff:ffff:ffff:ffff:ffff:ffff,RU
2a00:79a0::,2a00:79a0:ffff:ffff:ffff:ffff:ffff:ffff,RU
2a00:79c0::,2a00:79c0:ffff:ffff:ffff:ffff:ffff:ffff,DE
-2a00:79e0::,2a00:79e0:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a00:79e0::,2a00:79e0:5:ffff:ffff:ffff:ffff:ffff,CH
+2a00:79e0:6::,2a00:79e0:6:ffff:ffff:ffff:ffff:ffff,GB
+2a00:79e0:7::,2a00:79e0:a:ffff:ffff:ffff:ffff:ffff,CH
+2a00:79e0:b::,2a00:79e0:b:ffff:ffff:ffff:ffff:ffff,IT
+2a00:79e0:c::,2a00:79e0:c:ffff:ffff:ffff:ffff:ffff,GB
+2a00:79e0:d::,2a00:79e0:ffff:ffff:ffff:ffff:ffff:ffff,CH
2a00:7a00::,2a00:7a00:ffff:ffff:ffff:ffff:ffff:ffff,NO
2a00:7a20::,2a00:7a20:ffff:ffff:ffff:ffff:ffff:ffff,FI
2a00:7a40::,2a00:7a40:ffff:ffff:ffff:ffff:ffff:ffff,GB
@@ -14166,7 +15521,7 @@
2a00:7c00::,2a00:7c00:ffff:ffff:ffff:ffff:ffff:ffff,RU
2a00:7c20::,2a00:7c20:ffff:ffff:ffff:ffff:ffff:ffff,DE
2a00:7c40::,2a00:7c40:ffff:ffff:ffff:ffff:ffff:ffff,GB
-2a00:7c80::,2a00:7c80:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a00:7c80::,2a00:7c87:ffff:ffff:ffff:ffff:ffff:ffff,NL
2a00:7ca0::,2a00:7ca0:ffff:ffff:ffff:ffff:ffff:ffff,IT
2a00:7cc0::,2a00:7cc0:ffff:ffff:ffff:ffff:ffff:ffff,DE
2a00:7ce0::,2a00:7ce0:ffff:ffff:ffff:ffff:ffff:ffff,RU
@@ -14356,7 +15711,13 @@
2a00:95a0::,2a00:95a0:ffff:ffff:ffff:ffff:ffff:ffff,RU
2a00:95c0::,2a00:95c0:ffff:ffff:ffff:ffff:ffff:ffff,GB
2a00:95e0::,2a00:95e0:ffff:ffff:ffff:ffff:ffff:ffff,GB
-2a00:9600::,2a00:9600:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:9600::,2a00:9600:83ff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:9600:8400::,2a00:9600:8400:ffff:ffff:ffff:ffff:ffff,US
+2a00:9600:8401::,2a00:9600:840f:ffff:ffff:ffff:ffff:ffff,GB
+2a00:9600:8410::,2a00:9600:8410:ffff:ffff:ffff:ffff:ffff,US
+2a00:9600:8411::,2a00:9600:860f:ffff:ffff:ffff:ffff:ffff,GB
+2a00:9600:8610::,2a00:9600:8610:ffff:ffff:ffff:ffff:ffff,DE
+2a00:9600:8611::,2a00:9600:ffff:ffff:ffff:ffff:ffff:ffff,GB
2a00:9620::,2a00:9620:ffff:ffff:ffff:ffff:ffff:ffff,SE
2a00:9640::,2a00:9640:ffff:ffff:ffff:ffff:ffff:ffff,SK
2a00:9680::,2a00:9680:ffff:ffff:ffff:ffff:ffff:ffff,DE
@@ -14371,7 +15732,7 @@
2a00:97a0::,2a00:97a0:ffff:ffff:ffff:ffff:ffff:ffff,RU
2a00:97c0::,2a00:97c0:ffff:ffff:ffff:ffff:ffff:ffff,NO
2a00:97e0::,2a00:97e0:ffff:ffff:ffff:ffff:ffff:ffff,DK
-2a00:9800::,2a00:9800:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:9800::,2a00:9801:ffff:ffff:ffff:ffff:ffff:ffff,RU
2a00:9820::,2a00:9820:ffff:ffff:ffff:ffff:ffff:ffff,NL
2a00:9840::,2a00:9840:ffff:ffff:ffff:ffff:ffff:ffff,CH
2a00:9860::,2a00:9860:ffff:ffff:ffff:ffff:ffff:ffff,HR
@@ -14486,7 +15847,6 @@
2a00:a6a0::,2a00:a6a0:ffff:ffff:ffff:ffff:ffff:ffff,AT
2a00:a6c0::,2a00:a6c0:ffff:ffff:ffff:ffff:ffff:ffff,ES
2a00:a6e0::,2a00:a6e0:ffff:ffff:ffff:ffff:ffff:ffff,NL
-2a00:a700::,2a00:a700:ffff:ffff:ffff:ffff:ffff:ffff,RU
2a00:a720::,2a00:a720:ffff:ffff:ffff:ffff:ffff:ffff,IT
2a00:a740::,2a00:a740:ffff:ffff:ffff:ffff:ffff:ffff,IE
2a00:a760::,2a00:a760:ffff:ffff:ffff:ffff:ffff:ffff,SE
@@ -14532,7 +15892,7 @@
2a00:ace0::,2a00:ace0:ffff:ffff:ffff:ffff:ffff:ffff,BE
2a00:ad00::,2a00:ad00:ffff:ffff:ffff:ffff:ffff:ffff,RS
2a00:ad20::,2a00:ad20:ffff:ffff:ffff:ffff:ffff:ffff,IT
-2a00:ad40::,2a00:ad40:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:ad40::,2a00:ad47:ffff:ffff:ffff:ffff:ffff:ffff,GB
2a00:ad60::,2a00:ad60:ffff:ffff:ffff:ffff:ffff:ffff,RU
2a00:ad80::,2a00:ad87:ffff:ffff:ffff:ffff:ffff:ffff,DE
2a00:adc0::,2a00:adc0:ffff:ffff:ffff:ffff:ffff:ffff,CH
@@ -14602,7 +15962,6 @@
2a00:b640::,2a00:b640:ffff:ffff:ffff:ffff:ffff:ffff,SE
2a00:b660::,2a00:b660:ffff:ffff:ffff:ffff:ffff:ffff,NL
2a00:b680::,2a00:b680:ffff:ffff:ffff:ffff:ffff:ffff,SE
-2a00:b6a0::,2a00:b6a0:ffff:ffff:ffff:ffff:ffff:ffff,ES
2a00:b6c0::,2a00:b6c0:ffff:ffff:ffff:ffff:ffff:ffff,DE
2a00:b6e0::,2a00:b6e0:ffff:ffff:ffff:ffff:ffff:ffff,FR
2a00:b700::,2a00:b700:ffff:ffff:ffff:ffff:ffff:ffff,RU
@@ -14662,7 +16021,7 @@
2a00:bde0::,2a00:bde0:ffff:ffff:ffff:ffff:ffff:ffff,PL
2a00:be00::,2a00:be00:ffff:ffff:ffff:ffff:ffff:ffff,RU
2a00:be20::,2a00:be20:ffff:ffff:ffff:ffff:ffff:ffff,RU
-2a00:be40::,2a00:be40:ffff:ffff:ffff:ffff:ffff:ffff,NO
+2a00:be40::,2a00:be47:ffff:ffff:ffff:ffff:ffff:ffff,NO
2a00:be60::,2a00:be60:ffff:ffff:ffff:ffff:ffff:ffff,ES
2a00:be80::,2a00:be80:ffff:ffff:ffff:ffff:ffff:ffff,FR
2a00:bea0::,2a00:bea0:ffff:ffff:ffff:ffff:ffff:ffff,AE
@@ -14691,7 +16050,6 @@
2a00:c1e0::,2a00:c1e7:ffff:ffff:ffff:ffff:ffff:ffff,CH
2a00:c200::,2a00:c200:ffff:ffff:ffff:ffff:ffff:ffff,UA
2a00:c220::,2a00:c220:ffff:ffff:ffff:ffff:ffff:ffff,RU
-2a00:c240::,2a00:c240:ffff:ffff:ffff:ffff:ffff:ffff,AE
2a00:c260::,2a00:c260:ffff:ffff:ffff:ffff:ffff:ffff,IT
2a00:c280::,2a00:c280:ffff:ffff:ffff:ffff:ffff:ffff,IL
2a00:c2a0::,2a00:c2a0:ffff:ffff:ffff:ffff:ffff:ffff,GB
@@ -14750,7 +16108,7 @@
2a00:c9a0::,2a00:c9a0:ffff:ffff:ffff:ffff:ffff:ffff,HU
2a00:c9c0::,2a00:c9c0:ffff:ffff:ffff:ffff:ffff:ffff,RU
2a00:c9e0::,2a00:c9e0:ffff:ffff:ffff:ffff:ffff:ffff,IQ
-2a00:ca00::,2a00:ca00:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:ca00::,2a00:ca07:ffff:ffff:ffff:ffff:ffff:ffff,DE
2a00:ca20::,2a00:ca20:ffff:ffff:ffff:ffff:ffff:ffff,IE
2a00:ca40::,2a00:ca40:ffff:ffff:ffff:ffff:ffff:ffff,DK
2a00:ca60::,2a00:ca67:ffff:ffff:ffff:ffff:ffff:ffff,LU
@@ -14759,7 +16117,7 @@
2a00:cae0::,2a00:cae0:ffff:ffff:ffff:ffff:ffff:ffff,HU
2a00:cb00::,2a00:cb00:ffff:ffff:ffff:ffff:ffff:ffff,BA
2a00:cb20::,2a00:cb20:ffff:ffff:ffff:ffff:ffff:ffff,CZ
-2a00:cb40::,2a00:cb40:ffff:ffff:ffff:ffff:ffff:ffff,SK
+2a00:cb40:2::,2a00:cb40:2:ffff:ffff:ffff:ffff:ffff,CZ
2a00:cb80::,2a00:cb80:ffff:ffff:ffff:ffff:ffff:ffff,FR
2a00:cba0::,2a00:cba0:ffff:ffff:ffff:ffff:ffff:ffff,DE
2a00:cbc0::,2a00:cbc0:ffff:ffff:ffff:ffff:ffff:ffff,RU
@@ -14917,7 +16275,6 @@
2a00:dfa0::,2a00:dfa0:ffff:ffff:ffff:ffff:ffff:ffff,NL
2a00:dfc0::,2a00:dfc0:ffff:ffff:ffff:ffff:ffff:ffff,FR
2a00:dfe0::,2a00:dfe7:ffff:ffff:ffff:ffff:ffff:ffff,CZ
-2a00:e000::,2a00:e000:ffff:ffff:ffff:ffff:ffff:ffff,IR
2a00:e020::,2a00:e020:ffff:ffff:ffff:ffff:ffff:ffff,CH
2a00:e040::,2a00:e040:ffff:ffff:ffff:ffff:ffff:ffff,BE
2a00:e060::,2a00:e060:ffff:ffff:ffff:ffff:ffff:ffff,DE
@@ -14975,7 +16332,8 @@
2a00:e760::,2a00:e760:ffff:ffff:ffff:ffff:ffff:ffff,BE
2a00:e780::,2a00:e780:ffff:ffff:ffff:ffff:ffff:ffff,UA
2a00:e7a0::,2a00:e7a0:ffff:ffff:ffff:ffff:ffff:ffff,GB
-2a00:e7c0::,2a00:e7c0:ffff:ffff:ffff:ffff:ffff:ffff,DK
+2a00:e7c0::,2a00:e7c0::ffff:ffff:ffff:ffff:ffff,LT
+2a00:e7c0:1::,2a00:e7c0:ffff:ffff:ffff:ffff:ffff:ffff,DK
2a00:e7e0::,2a00:e7e0:ffff:ffff:ffff:ffff:ffff:ffff,CH
2a00:e800::,2a00:e807:ffff:ffff:ffff:ffff:ffff:ffff,PL
2a00:e840::,2a00:e840:ffff:ffff:ffff:ffff:ffff:ffff,FR
@@ -14994,7 +16352,9 @@
2a00:ea00::,2a00:ea00:ffff:ffff:ffff:ffff:ffff:ffff,PL
2a00:ea20::,2a00:ea20:ffff:ffff:ffff:ffff:ffff:ffff,RU
2a00:ea40::,2a00:ea40:ffff:ffff:ffff:ffff:ffff:ffff,GB
-2a00:ea60::,2a00:ea60:ffff:ffff:ffff:ffff:ffff:ffff,LT
+2a00:ea60::,2a00:ea60:ff:ffff:ffff:ffff:ffff:ffff,LT
+2a00:ea60:100::,2a00:ea60:1ff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:ea60:200::,2a00:ea60:ffff:ffff:ffff:ffff:ffff:ffff,LT
2a00:ea80::,2a00:ea80:ffff:ffff:ffff:ffff:ffff:ffff,FR
2a00:eaa0::,2a00:eaa0:ffff:ffff:ffff:ffff:ffff:ffff,FR
2a00:eac0::,2a00:eac0:ffff:ffff:ffff:ffff:ffff:ffff,GB
@@ -15117,7 +16477,6 @@
2a00:fa80::,2a00:fa80:ffff:ffff:ffff:ffff:ffff:ffff,IT
2a00:faa0::,2a00:faa0:ffff:ffff:ffff:ffff:ffff:ffff,IE
2a00:fac0::,2a00:fac0:ffff:ffff:ffff:ffff:ffff:ffff,DE
-2a00:fae0::,2a00:fae0:ffff:ffff:ffff:ffff:ffff:ffff,RU
2a00:fb00::,2a00:fb00:ffff:ffff:ffff:ffff:ffff:ffff,CH
2a00:fb20::,2a00:fb20:ffff:ffff:ffff:ffff:ffff:ffff,PL
2a00:fb40::,2a00:fb40:ffff:ffff:ffff:ffff:ffff:ffff,FR
@@ -15171,7 +16530,8 @@
2a01:50::,2a01:50:ffff:ffff:ffff:ffff:ffff:ffff,GB
2a01:58::,2a01:58:ffff:ffff:ffff:ffff:ffff:ffff,SE
2a01:68::,2a01:68:ffff:ffff:ffff:ffff:ffff:ffff,FR
-2a01:70::,2a01:70:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a01:70::,2a01:70:fffe:ffff:ffff:ffff:ffff:ffff,GB
+2a01:70:ffff::,2a01:70:ffff:ffff:ffff:ffff:ffff:ffff,BE
2a01:78::,2a01:78:ffff:ffff:ffff:ffff:ffff:ffff,DE
2a01:80::,2a01:80:ffff:ffff:ffff:ffff:ffff:ffff,EE
2a01:88::,2a01:88:ffff:ffff:ffff:ffff:ffff:ffff,IE
@@ -15183,7 +16543,13 @@
2a01:b8::,2a01:b8:ffff:ffff:ffff:ffff:ffff:ffff,VA
2a01:c0::,2a01:c0:ffff:ffff:ffff:ffff:ffff:ffff,GB
2a01:c8::,2a01:c8:ffff:ffff:ffff:ffff:ffff:ffff,FR
-2a01:d0::,2a01:d0:ffff:ffff:ffff:ffff:ffff:ffff,UA
+2a01:d0::,2a01:d0:8de4:ffff:ffff:ffff:ffff:ffff,UA
+2a01:d0:8de5::,2a01:d0:8de5:ffff:ffff:ffff:ffff:ffff,RU
+2a01:d0:8de6::,2a01:d0:9008:ffff:ffff:ffff:ffff:ffff,UA
+2a01:d0:9009::,2a01:d0:9009:ffff:ffff:ffff:ffff:ffff,RU
+2a01:d0:900a::,2a01:d0:92ea:ffff:ffff:ffff:ffff:ffff,UA
+2a01:d0:92eb::,2a01:d0:92eb:ffff:ffff:ffff:ffff:ffff,RU
+2a01:d0:92ec::,2a01:d0:ffff:ffff:ffff:ffff:ffff:ffff,UA
2a01:d8::,2a01:d8:ffff:ffff:ffff:ffff:ffff:ffff,RU
2a01:e0::,2a01:e0:ffff:ffff:ffff:ffff:ffff:ffff,SK
2a01:e8::,2a01:e8:ffff:ffff:ffff:ffff:ffff:ffff,SE
@@ -15192,6 +16558,8 @@
2a01:100::,2a01:100:ffff:ffff:ffff:ffff:ffff:ffff,AT
2a01:108::,2a01:108:ffff:ffff:ffff:ffff:ffff:ffff,SK
2a01:110:10::,2a01:110:10:ffff:ffff:ffff:ffff:ffff,GB
+2a01:110:8008::,2a01:110:8008:ffff:ffff:ffff:ffff:ffff,GB
+2a01:110:8012:1000::,2a01:110:8012:11ff:ffff:ffff:ffff:ffff,GB
2a01:120::,2a01:120:ffff:ffff:ffff:ffff:ffff:ffff,DE
2a01:130::,2a01:13f:ffff:ffff:ffff:ffff:ffff:ffff,DE
2a01:140::,2a01:140:ffff:ffff:ffff:ffff:ffff:ffff,GB
@@ -15202,7 +16570,7 @@
2a01:168::,2a01:168:ffff:ffff:ffff:ffff:ffff:ffff,CZ
2a01:170::,2a01:170:ffff:ffff:ffff:ffff:ffff:ffff,DE
2a01:178::,2a01:178:ffff:ffff:ffff:ffff:ffff:ffff,GB
-2a01:180::,2a01:180:ffff:ffff:ffff:ffff:ffff:ffff,MT
+2a01:180::,2a01:187:ffff:ffff:ffff:ffff:ffff:ffff,MT
2a01:188::,2a01:188:ffff:ffff:ffff:ffff:ffff:ffff,TR
2a01:190::,2a01:197:ffff:ffff:ffff:ffff:ffff:ffff,AT
2a01:198::,2a01:198:ffff:ffff:ffff:ffff:ffff:ffff,DE
@@ -15225,7 +16593,11 @@
2a01:228::,2a01:228:ffff:ffff:ffff:ffff:ffff:ffff,CH
2a01:230::,2a01:230:ffff:ffff:ffff:ffff:ffff:ffff,RU
2a01:238::,2a01:238:ffff:ffff:ffff:ffff:ffff:ffff,DE
-2a01:240::,2a01:240:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a01:240::,2a01:240:fdff:ffff:ffff:ffff:ffff:ffff,FR
+2a01:240:fe00::,2a01:240:fe00:ffff:ffff:ffff:ffff:ffff,ES
+2a01:240:fe01::,2a01:240:feda:ffff:ffff:ffff:ffff:ffff,FR
+2a01:240:fedb::,2a01:240:fedb:ffff:ffff:ffff:ffff:ffff,PT
+2a01:240:fedc::,2a01:240:ffff:ffff:ffff:ffff:ffff:ffff,FR
2a01:248::,2a01:248:ffff:ffff:ffff:ffff:ffff:ffff,GB
2a01:250::,2a01:250:ffff:ffff:ffff:ffff:ffff:ffff,ES
2a01:258::,2a01:258:ffff:ffff:ffff:ffff:ffff:ffff,IE
@@ -15244,7 +16616,7 @@
2a01:2c0::,2a01:2c0:ffff:ffff:ffff:ffff:ffff:ffff,GB
2a01:2c8::,2a01:2c8:ffff:ffff:ffff:ffff:ffff:ffff,RU
2a01:2d0::,2a01:2d0:ffff:ffff:ffff:ffff:ffff:ffff,CH
-2a01:2d8::,2a01:2d8:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a01:2d8::,2a01:2df:ffff:ffff:ffff:ffff:ffff:ffff,IT
2a01:2e0::,2a01:2ef:ffff:ffff:ffff:ffff:ffff:ffff,PL
2a01:300:22::,2a01:300:22:ffff:ffff:ffff:ffff:ffff,GB
2a01:308::,2a01:308:ffff:ffff:ffff:ffff:ffff:ffff,GB
@@ -15253,24 +16625,38 @@
2a01:328::,2a01:328:ffff:ffff:ffff:ffff:ffff:ffff,SK
2a01:330::,2a01:330:ffff:ffff:ffff:ffff:ffff:ffff,CH
2a01:338::,2a01:338:ffff:ffff:ffff:ffff:ffff:ffff,PL
-2a01:340::,2a01:340:ffff:ffff:ffff:ffff:ffff:ffff,NO
-2a01:348::,2a01:348:6f:ffff:ffff:ffff:ffff:ffff,GB
-2a01:348:70::,2a01:348:70:ffff:ffff:ffff:ffff:ffff,AE
-2a01:348:71::,2a01:348:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a01:348::,2a01:348:98:ffff:ffff:ffff:ffff:ffff,GB
+2a01:348:99::,2a01:348:99:ffff:ffff:ffff:ffff:ffff,FR
+2a01:348:9a::,2a01:348:ffff:ffff:ffff:ffff:ffff:ffff,GB
2a01:350::,2a01:350:ffff:ffff:ffff:ffff:ffff:ffff,NL
2a01:358::,2a01:35f:ffff:ffff:ffff:ffff:ffff:ffff,TR
-2a01:360::,2a01:360:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a01:360::,2a01:367:ffff:ffff:ffff:ffff:ffff:ffff,DE
2a01:368::,2a01:36f:ffff:ffff:ffff:ffff:ffff:ffff,HU
2a01:378::,2a01:378:ffff:ffff:ffff:ffff:ffff:ffff,FR
2a01:380::,2a01:380:ffff:ffff:ffff:ffff:ffff:ffff,NL
-2a01:388::,2a01:38f:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a01:388::,2a01:388:24e:ffff:ffff:ffff:ffff:ffff,GB
+2a01:388:24f::,2a01:388:24f:ffff:ffff:ffff:ffff:ffff,NL
+2a01:388:250::,2a01:388:250:ffff:ffff:ffff:ffff:ffff,GB
+2a01:388:251::,2a01:388:251:ffff:ffff:ffff:ffff:ffff,NL
+2a01:388:252::,2a01:38f:ffff:ffff:ffff:ffff:ffff:ffff,GB
2a01:390::,2a01:390:ffff:ffff:ffff:ffff:ffff:ffff,SK
2a01:398::,2a01:398:ffff:ffff:ffff:ffff:ffff:ffff,GB
2a01:3a0::,2a01:3a7:ffff:ffff:ffff:ffff:ffff:ffff,DK
2a01:3a8::,2a01:3a8:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a01:3b0:c08::,2a01:3b0:c08:ffff:ffff:ffff:ffff:ffff,DE
2a01:3b8::,2a01:3b8:ffff:ffff:ffff:ffff:ffff:ffff,SE
2a01:3c8::,2a01:3c8:ffff:ffff:ffff:ffff:ffff:ffff,IR
2a01:3d8::,2a01:3d8:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a01:3e0:402::,2a01:3e0:403:ffff:ffff:ffff:ffff:ffff,FR
+2a01:3e0:d01::,2a01:3e0:d02:ffff:ffff:ffff:ffff:ffff,GB
+2a01:3e0:1101::,2a01:3e0:1101:ffff:ffff:ffff:ffff:ffff,NL
+2a01:3e0:1200::,2a01:3e0:1200:1ff:ffff:ffff:ffff:ffff,FR
+2a01:3e0:1300::,2a01:3e0:1300:ff:ffff:ffff:ffff:ffff,GB
+2a01:3e0:1400::,2a01:3e0:1400:ff:ffff:ffff:ffff:ffff,NL
+2a01:3e0:1500::,2a01:3e0:1500:ff:ffff:ffff:ffff:ffff,GB
+2a01:3e0:1600::,2a01:3e0:1600:ffff:ffff:ffff:ffff:ffff,GB
+2a01:3e0:1700::,2a01:3e0:1701:ff:ffff:ffff:ffff:ffff,GB
+2a01:3e0:ff24::,2a01:3e0:ff24:ffff:ffff:ffff:ffff:ffff,DE
2a01:3e8::,2a01:3e8:ffff:ffff:ffff:ffff:ffff:ffff,IT
2a01:3f0::,2a01:3f0:ffff:ffff:ffff:ffff:ffff:ffff,SE
2a01:3f8::,2a01:3f8:ffff:ffff:ffff:ffff:ffff:ffff,GB
@@ -15287,14 +16673,14 @@
2a01:450::,2a01:450:ffff:ffff:ffff:ffff:ffff:ffff,GB
2a01:458::,2a01:458:ffff:ffff:ffff:ffff:ffff:ffff,IR
2a01:460::,2a01:460:ffff:ffff:ffff:ffff:ffff:ffff,NO
-2a01:468::,2a01:468:ffff:ffff:ffff:ffff:ffff:ffff,AT
+2a01:468::,2a01:46f:ffff:ffff:ffff:ffff:ffff:ffff,AT
2a01:470::,2a01:477:ffff:ffff:ffff:ffff:ffff:ffff,FR
2a01:478::,2a01:47f:ffff:ffff:ffff:ffff:ffff:ffff,BA
2a01:480::,2a01:480:ffff:ffff:ffff:ffff:ffff:ffff,DE
2a01:488::,2a01:488:ffff:ffff:ffff:ffff:ffff:ffff,DE
2a01:490::,2a01:490:ffff:ffff:ffff:ffff:ffff:ffff,CZ
2a01:498::,2a01:498:ffff:ffff:ffff:ffff:ffff:ffff,BE
-2a01:4a0::,2a01:4a8:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a01:4a0::,2a01:4af:ffff:ffff:ffff:ffff:ffff:ffff,DE
2a01:4b0::,2a01:4b0:ffff:ffff:ffff:ffff:ffff:ffff,IE
2a01:4c0::,2a01:4c0:ffff:ffff:ffff:ffff:ffff:ffff,BE
2a01:4c8::,2a01:4cf:ffff:ffff:ffff:ffff:ffff:ffff,GB
@@ -15303,7 +16689,9 @@
2a01:4e0::,2a01:4e7:ffff:ffff:ffff:ffff:ffff:ffff,LV
2a01:4e8::,2a01:4e8:ffff:ffff:ffff:ffff:ffff:ffff,GB
2a01:4f0::,2a01:4f0:ffff:ffff:ffff:ffff:ffff:ffff,DK
-2a01:4f8::,2a01:4ff:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a01:4f8::,2a01:4f8:12f:ffff:ffff:ffff:ffff:ffff,DE
+2a01:4f8:130::,2a01:4f8:130:1fff:ffff:ffff:ffff:ffff,AT
+2a01:4f8:130:2000::,2a01:4ff:ffff:ffff:ffff:ffff:ffff:ffff,DE
2a01:500::,2a01:500:ffff:ffff:ffff:ffff:ffff:ffff,GB
2a01:508::,2a01:508:ffff:ffff:ffff:ffff:ffff:ffff,RU
2a01:510::,2a01:510:ffff:ffff:ffff:ffff:ffff:ffff,CZ
@@ -15350,7 +16738,7 @@
2a01:678::,2a01:67f:ffff:ffff:ffff:ffff:ffff:ffff,FR
2a01:680::,2a01:680:ffff:ffff:ffff:ffff:ffff:ffff,RU
2a01:688::,2a01:688:ffff:ffff:ffff:ffff:ffff:ffff,DE
-2a01:690::,2a01:690:ffff:ffff:ffff:ffff:ffff:ffff,BE
+2a01:690::,2a01:697:ffff:ffff:ffff:ffff:ffff:ffff,BE
2a01:698::,2a01:698:ffff:ffff:ffff:ffff:ffff:ffff,PL
2a01:6a0::,2a01:6a0:ffff:ffff:ffff:ffff:ffff:ffff,IT
2a01:6a8::,2a01:6a8:ffff:ffff:ffff:ffff:ffff:ffff,CH
@@ -15394,13 +16782,11 @@
2a01:7e8::,2a01:7e8:ffff:ffff:ffff:ffff:ffff:ffff,DK
2a01:7f0::,2a01:7f0:ffff:ffff:ffff:ffff:ffff:ffff,DE
2a01:7f8::,2a01:7f8:ffff:ffff:ffff:ffff:ffff:ffff,DE
-2a01:800::,2a01:8ff:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a01:800::,2a01:838:fffe:ffff:ffff:ffff:ffff:ffff,DE
+2a01:838:ffff::,2a01:838:ffff:ffff:ffff:ffff:ffff:ffff,MT
+2a01:839::,2a01:8ff:ffff:ffff:ffff:ffff:ffff:ffff,DE
2a01:c00::,2a01:c3f:ffff:ffff:ffff:ffff:ffff:ffff,DE
-2a01:e00::,2a01:e35:2e0a:ffff:ffff:ffff:ffff:ffff,FR
-2a01:e35:2e0b::,2a01:e35:2e0b:ffff:ffff:ffff:ffff:ffff,US
-2a01:e35:2e0c::,2a01:e35:8bde:ffff:ffff:ffff:ffff:ffff,FR
-2a01:e35:8bdf::,2a01:e35:8bdf:ffff:ffff:ffff:ffff:ffff,NL
-2a01:e35:8be0::,2a01:e3f:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a01:e00::,2a01:e3f:ffff:ffff:ffff:ffff:ffff:ffff,FR
2a01:1000::,2a01:17ff:ffff:ffff:ffff:ffff:ffff:ffff,PL
2a01:2000::,2a01:2fff:ffff:ffff:ffff:ffff:ffff:ffff,IT
2a01:4000::,2a01:4000:ffff:ffff:ffff:ffff:ffff:ffff,AM
@@ -15426,7 +16812,6 @@
2a01:4300::,2a01:4300:ffff:ffff:ffff:ffff:ffff:ffff,GB
2a01:4320::,2a01:4320:ffff:ffff:ffff:ffff:ffff:ffff,GB
2a01:4340::,2a01:4340:ffff:ffff:ffff:ffff:ffff:ffff,BE
-2a01:4360::,2a01:4360:ffff:ffff:ffff:ffff:ffff:ffff,FR
2a01:4380::,2a01:4380:ffff:ffff:ffff:ffff:ffff:ffff,RU
2a01:43a0::,2a01:43a0:ffff:ffff:ffff:ffff:ffff:ffff,SE
2a01:43c0::,2a01:43c0:ffff:ffff:ffff:ffff:ffff:ffff,IQ
@@ -15471,7 +16856,6 @@
2a01:4920::,2a01:4920:ffff:ffff:ffff:ffff:ffff:ffff,RU
2a01:4940::,2a01:4940:ffff:ffff:ffff:ffff:ffff:ffff,RU
2a01:4960::,2a01:4960:ffff:ffff:ffff:ffff:ffff:ffff,CH
-2a01:4980::,2a01:4980:ffff:ffff:ffff:ffff:ffff:ffff,HU
2a01:49a0::,2a01:49a0:ffff:ffff:ffff:ffff:ffff:ffff,IS
2a01:49c0::,2a01:49c0:ffff:ffff:ffff:ffff:ffff:ffff,RU
2a01:49e0::,2a01:49e0:ffff:ffff:ffff:ffff:ffff:ffff,AZ
@@ -15583,10 +16967,10 @@
2a01:57c0::,2a01:57c0:ffff:ffff:ffff:ffff:ffff:ffff,RU
2a01:57e0::,2a01:57e0:ffff:ffff:ffff:ffff:ffff:ffff,SA
2a01:5800::,2a01:5800:ffff:ffff:ffff:ffff:ffff:ffff,UA
-2a01:5820::,2a01:5820:ffff:ffff:ffff:ffff:ffff:ffff,RU
2a01:5840::,2a01:5840:ffff:ffff:ffff:ffff:ffff:ffff,IR
2a01:5860::,2a01:5860:ffff:ffff:ffff:ffff:ffff:ffff,NL
2a01:58a0::,2a01:58a0:ffff:ffff:ffff:ffff:ffff:ffff,IQ
+2a01:58c0::,2a01:58c0:ffff:ffff:ffff:ffff:ffff:ffff,FR
2a01:5900::,2a01:5900:ffff:ffff:ffff:ffff:ffff:ffff,DE
2a01:5920::,2a01:5920:ffff:ffff:ffff:ffff:ffff:ffff,IT
2a01:5940::,2a01:5940:ffff:ffff:ffff:ffff:ffff:ffff,IT
@@ -15596,9 +16980,7 @@
2a01:59c0::,2a01:59c0:ffff:ffff:ffff:ffff:ffff:ffff,GB
2a01:59e0::,2a01:59e0:ffff:ffff:ffff:ffff:ffff:ffff,GB
2a01:5a00::,2a01:5a00:ffff:ffff:ffff:ffff:ffff:ffff,BE
-2a01:5a20::,2a01:5a20:ffff:ffff:ffff:ffff:ffff:ffff,PL
2a01:5a40::,2a01:5a40:ffff:ffff:ffff:ffff:ffff:ffff,RU
-2a01:5a60::,2a01:5a60:ffff:ffff:ffff:ffff:ffff:ffff,RU
2a01:5a80::,2a01:5a80:ffff:ffff:ffff:ffff:ffff:ffff,US
2a01:5aa0::,2a01:5aa0:ffff:ffff:ffff:ffff:ffff:ffff,GB
2a01:5ac0::,2a01:5ac0:ffff:ffff:ffff:ffff:ffff:ffff,GB
@@ -15676,7 +17058,7 @@
2a01:63e0::,2a01:63e0:ffff:ffff:ffff:ffff:ffff:ffff,NL
2a01:6400::,2a01:6400:ffff:ffff:ffff:ffff:ffff:ffff,CZ
2a01:6420::,2a01:6420:ffff:ffff:ffff:ffff:ffff:ffff,DE
-2a01:6440::,2a01:6440:ffff:ffff:ffff:ffff:ffff:ffff,RS
+2a01:6440::,2a01:6447:ffff:ffff:ffff:ffff:ffff:ffff,RS
2a01:6460::,2a01:6460:ffff:ffff:ffff:ffff:ffff:ffff,FR
2a01:6480::,2a01:6480:ffff:ffff:ffff:ffff:ffff:ffff,AZ
2a01:64a0::,2a01:64a0:ffff:ffff:ffff:ffff:ffff:ffff,RU
@@ -15738,7 +17120,12 @@
2a01:6c00::,2a01:6c00:ffff:ffff:ffff:ffff:ffff:ffff,PL
2a01:6c20::,2a01:6c20:ffff:ffff:ffff:ffff:ffff:ffff,RU
2a01:6c40::,2a01:6c40:ffff:ffff:ffff:ffff:ffff:ffff,CH
-2a01:6c60::,2a01:6c60:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a01:6c60::,2a01:6c60:2:ffff:ffff:ffff:ffff:ffff,GB
+2a01:6c60:3::,2a01:6c60:3:ffff:ffff:ffff:ffff:ffff,ZA
+2a01:6c60:4::,2a01:6c60:4:ffff:ffff:ffff:ffff:ffff,NZ
+2a01:6c60:5::,2a01:6c60:fff:ffff:ffff:ffff:ffff:ffff,GB
+2a01:6c60:1000::,2a01:6c60:1fff:ffff:ffff:ffff:ffff:ffff,US
+2a01:6c60:2000::,2a01:6c60:ffff:ffff:ffff:ffff:ffff:ffff,GB
2a01:6c80::,2a01:6c80:ffff:ffff:ffff:ffff:ffff:ffff,SE
2a01:6ca0::,2a01:6ca0:ffff:ffff:ffff:ffff:ffff:ffff,GB
2a01:6cc0::,2a01:6cc0:ffff:ffff:ffff:ffff:ffff:ffff,FR
@@ -15836,14 +17223,14 @@
2a01:78c0::,2a01:78c0:ffff:ffff:ffff:ffff:ffff:ffff,GB
2a01:78e0::,2a01:78e0:ffff:ffff:ffff:ffff:ffff:ffff,GB
2a01:7900::,2a01:7900:ffff:ffff:ffff:ffff:ffff:ffff,SE
-2a01:7920::,2a01:7920:ffff:ffff:ffff:ffff:ffff:ffff,DK
+2a01:7920::,2a01:7927:ffff:ffff:ffff:ffff:ffff:ffff,DK
2a01:7940::,2a01:7940:ffff:ffff:ffff:ffff:ffff:ffff,GB
2a01:7960::,2a01:7960:ffff:ffff:ffff:ffff:ffff:ffff,DE
2a01:7980::,2a01:7980:ffff:ffff:ffff:ffff:ffff:ffff,GB
2a01:79a0::,2a01:79a0:ffff:ffff:ffff:ffff:ffff:ffff,DK
2a01:79c0::,2a01:79c0:ffff:ffff:ffff:ffff:ffff:ffff,CY
2a01:79e0::,2a01:79e0:ffff:ffff:ffff:ffff:ffff:ffff,NO
-2a01:7a00::,2a01:7a00:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a01:7a00::,2a01:7a07:ffff:ffff:ffff:ffff:ffff:ffff,SE
2a01:7a20::,2a01:7a20:ffff:ffff:ffff:ffff:ffff:ffff,SA
2a01:7a40::,2a01:7a40:ffff:ffff:ffff:ffff:ffff:ffff,DE
2a01:7a60::,2a01:7a60:ffff:ffff:ffff:ffff:ffff:ffff,SM
@@ -15882,7 +17269,6 @@
2a01:7ec0::,2a01:7ec0:ffff:ffff:ffff:ffff:ffff:ffff,CZ
2a01:7ee0::,2a01:7ee0:ffff:ffff:ffff:ffff:ffff:ffff,SE
2a01:7f00::,2a01:7f00:ffff:ffff:ffff:ffff:ffff:ffff,IT
-2a01:7f20::,2a01:7f20:ffff:ffff:ffff:ffff:ffff:ffff,NL
2a01:7f40::,2a01:7f40:ffff:ffff:ffff:ffff:ffff:ffff,KW
2a01:7f60::,2a01:7f60:ffff:ffff:ffff:ffff:ffff:ffff,GB
2a01:7f80::,2a01:7f80:ffff:ffff:ffff:ffff:ffff:ffff,PS
@@ -15951,7 +17337,6 @@
2a01:87c0::,2a01:87c0:ffff:ffff:ffff:ffff:ffff:ffff,GB
2a01:87e0::,2a01:87e0:ffff:ffff:ffff:ffff:ffff:ffff,NL
2a01:8800::,2a01:8807:ffff:ffff:ffff:ffff:ffff:ffff,NL
-2a01:8820::,2a01:8820:ffff:ffff:ffff:ffff:ffff:ffff,NL
2a01:8840::,2a01:8840:ffff:ffff:ffff:ffff:ffff:ffff,IE
2a01:8860::,2a01:8860:ffff:ffff:ffff:ffff:ffff:ffff,CH
2a01:8880::,2a01:8880:ffff:ffff:ffff:ffff:ffff:ffff,BG
@@ -15982,7 +17367,9 @@
2a01:8ba0::,2a01:8ba7:ffff:ffff:ffff:ffff:ffff:ffff,PL
2a01:8bc0::,2a01:8bc0:ffff:ffff:ffff:ffff:ffff:ffff,GB
2a01:8be0::,2a01:8be0:ffff:ffff:ffff:ffff:ffff:ffff,NL
-2a01:8c00::,2a01:8c00:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a01:8c00::,2a01:8c00:ff00:82b0:ffff:ffff:ffff:ffff,CZ
+2a01:8c00:ff00:82b1::,2a01:8c00:ff00:82b1:ffff:ffff:ffff:ffff,US
+2a01:8c00:ff00:82b2::,2a01:8c00:ffff:ffff:ffff:ffff:ffff:ffff,CZ
2a01:8c20::,2a01:8c20:ffff:ffff:ffff:ffff:ffff:ffff,NL
2a01:8c40::,2a01:8c40:ffff:ffff:ffff:ffff:ffff:ffff,GI
2a01:8c60::,2a01:8c60:ffff:ffff:ffff:ffff:ffff:ffff,AZ
@@ -16036,11 +17423,9 @@
2a01:92c0::,2a01:92c0:ffff:ffff:ffff:ffff:ffff:ffff,FR
2a01:92e0::,2a01:92e0:ffff:ffff:ffff:ffff:ffff:ffff,IL
2a01:9300::,2a01:9300:ffff:ffff:ffff:ffff:ffff:ffff,IT
-2a01:9320::,2a01:9320:ffff:ffff:ffff:ffff:ffff:ffff,HU
2a01:9340::,2a01:9340:ffff:ffff:ffff:ffff:ffff:ffff,ES
2a01:9360::,2a01:9360:ffff:ffff:ffff:ffff:ffff:ffff,PL
2a01:9380::,2a01:9380:ffff:ffff:ffff:ffff:ffff:ffff,PL
-2a01:93a0::,2a01:93a0:ffff:ffff:ffff:ffff:ffff:ffff,GB
2a01:93c0::,2a01:93c0:ffff:ffff:ffff:ffff:ffff:ffff,GB
2a01:93e0::,2a01:93e0:ffff:ffff:ffff:ffff:ffff:ffff,BE
2a01:9400::,2a01:9400:ffff:ffff:ffff:ffff:ffff:ffff,NL
@@ -16209,7 +17594,7 @@
2a01:a920::,2a01:a920:ffff:ffff:ffff:ffff:ffff:ffff,NL
2a01:a940::,2a01:a940:ffff:ffff:ffff:ffff:ffff:ffff,ES
2a01:a960::,2a01:a960:ffff:ffff:ffff:ffff:ffff:ffff,AL
-2a01:a980::,2a01:a980:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a01:a980::,2a01:a987:ffff:ffff:ffff:ffff:ffff:ffff,DE
2a01:a9a0::,2a01:a9a0:ffff:ffff:ffff:ffff:ffff:ffff,NL
2a01:a9c0::,2a01:a9c0:ffff:ffff:ffff:ffff:ffff:ffff,RU
2a01:a9e0::,2a01:a9e0:ffff:ffff:ffff:ffff:ffff:ffff,US
@@ -16314,7 +17699,6 @@
2a01:b700::,2a01:b700:ffff:ffff:ffff:ffff:ffff:ffff,SE
2a01:b720::,2a01:b720:ffff:ffff:ffff:ffff:ffff:ffff,GB
2a01:b740::,2a01:b740:ffff:ffff:ffff:ffff:ffff:ffff,IE
-2a01:b760::,2a01:b760:ffff:ffff:ffff:ffff:ffff:ffff,GB
2a01:b780::,2a01:b780:ffff:ffff:ffff:ffff:ffff:ffff,MK
2a01:b7a0::,2a01:b7a0:ffff:ffff:ffff:ffff:ffff:ffff,IT
2a01:b7c0::,2a01:b7c0:ffff:ffff:ffff:ffff:ffff:ffff,CH
@@ -16342,7 +17726,6 @@
2a01:ba80::,2a01:ba80:ffff:ffff:ffff:ffff:ffff:ffff,RU
2a01:baa0::,2a01:baa0:ffff:ffff:ffff:ffff:ffff:ffff,NL
2a01:bac0::,2a01:bac0:ffff:ffff:ffff:ffff:ffff:ffff,HU
-2a01:bae0::,2a01:bae0:ffff:ffff:ffff:ffff:ffff:ffff,CZ
2a01:bb20::,2a01:bb20:ffff:ffff:ffff:ffff:ffff:ffff,DE
2a01:bb40::,2a01:bb40:ffff:ffff:ffff:ffff:ffff:ffff,NO
2a01:bb60::,2a01:bb60:ffff:ffff:ffff:ffff:ffff:ffff,NL
@@ -16414,7 +17797,11 @@
2a02:110::,2a02:110:ffff:ffff:ffff:ffff:ffff:ffff,CH
2a02:118::,2a02:118:ffff:ffff:ffff:ffff:ffff:ffff,LT
2a02:120::,2a02:120:ffff:ffff:ffff:ffff:ffff:ffff,NL
-2a02:128::,2a02:128:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a02:128::,2a02:128:3:ffff:ffff:ffff:ffff:ffff,CZ
+2a02:128:4::,2a02:128:4:ffff:ffff:ffff:ffff:ffff,NL
+2a02:128:5::,2a02:128:5:ffff:ffff:ffff:ffff:ffff,CZ
+2a02:128:6::,2a02:128:6:ffff:ffff:ffff:ffff:ffff,RU
+2a02:128:7::,2a02:128:ffff:ffff:ffff:ffff:ffff:ffff,CZ
2a02:130::,2a02:130:ffff:ffff:ffff:ffff:ffff:ffff,SK
2a02:138::,2a02:138:ffff:ffff:ffff:ffff:ffff:ffff,PT
2a02:140::,2a02:140:ffff:ffff:ffff:ffff:ffff:ffff,FI
@@ -16466,7 +17853,7 @@
2a02:2c8::,2a02:2c8:ffff:ffff:ffff:ffff:ffff:ffff,NO
2a02:2d0::,2a02:2d0:ffff:ffff:ffff:ffff:ffff:ffff,FI
2a02:2d8::,2a02:2d8:ffff:ffff:ffff:ffff:ffff:ffff,GB
-2a02:2e0::,2a02:2e0:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:2e0::,2a02:2e7:ffff:ffff:ffff:ffff:ffff:ffff,DE
2a02:2e8::,2a02:2e8:ffff:ffff:ffff:ffff:ffff:ffff,IT
2a02:2f0::,2a02:2f7:ffff:ffff:ffff:ffff:ffff:ffff,DE
2a02:2f8::,2a02:2f8:ffff:ffff:ffff:ffff:ffff:ffff,RU
@@ -16524,7 +17911,7 @@
2a02:4a0::,2a02:4a0:ffff:ffff:ffff:ffff:ffff:ffff,BE
2a02:4a8::,2a02:4a8:ffff:ffff:ffff:ffff:ffff:ffff,CZ
2a02:4b0::,2a02:4b0:ffff:ffff:ffff:ffff:ffff:ffff,BE
-2a02:4b8::,2a02:4c0:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a02:4b8::,2a02:4bf:ffff:ffff:ffff:ffff:ffff:ffff,FR
2a02:4c8::,2a02:4c8:ffff:ffff:ffff:ffff:ffff:ffff,BG
2a02:4d0::,2a02:4d0:ffff:ffff:ffff:ffff:ffff:ffff,IT
2a02:4d8::,2a02:4d8:ffff:ffff:ffff:ffff:ffff:ffff,LU
@@ -16545,11 +17932,20 @@
2a02:560::,2a02:560:ffff:ffff:ffff:ffff:ffff:ffff,DE
2a02:568::,2a02:568:ffff:ffff:ffff:ffff:ffff:ffff,DE
2a02:570::,2a02:570:ffff:ffff:ffff:ffff:ffff:ffff,CZ
-2a02:578::,2a02:578:ffff:ffff:ffff:ffff:ffff:ffff,BE
-2a02:580::,2a02:587:ffff:ffff:ffff:ffff:ffff:ffff,GR
+2a02:578::,2a02:578:5001:ffff:ffff:ffff:ffff:ffff,BE
+2a02:578:5002::,2a02:578:5002:7fff:ffff:ffff:ffff:ffff,UA
+2a02:578:5002:8000::,2a02:578:5002:ffff:ffff:ffff:ffff:ffff,RU
+2a02:578:5003::,2a02:578:5411:ffff:ffff:ffff:ffff:ffff,BE
+2a02:578:5412::,2a02:578:5412:ffff:ffff:ffff:ffff:ffff,RU
+2a02:578:5413::,2a02:578:ffff:ffff:ffff:ffff:ffff:ffff,BE
+2a02:580::,2a02:580:d3ab:ffff:ffff:ffff:ffff:ffff,GR
+2a02:580:d3ac::,2a02:580:d3ac:ffff:ffff:ffff:ffff:ffff,FR
+2a02:580:d3ad::,2a02:587:ffff:ffff:ffff:ffff:ffff:ffff,GR
2a02:588::,2a02:588:ffff:ffff:ffff:ffff:ffff:ffff,DE
-2a02:590::,2a02:590:ffff:ffff:ffff:ffff:ffff:ffff,DE
-2a02:598::,2a02:598:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a02:590::,2a02:597:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:598::,2a02:598:1:ffff:ffff:ffff:ffff:ffff,CZ
+2a02:598:2::,2a02:598:2:ffff:ffff:ffff:ffff:ffff,GB
+2a02:598:3::,2a02:598:ffff:ffff:ffff:ffff:ffff:ffff,CZ
2a02:5a0::,2a02:5a0:ffff:ffff:ffff:ffff:ffff:ffff,DE
2a02:5b0::,2a02:5b0:ffff:ffff:ffff:ffff:ffff:ffff,NL
2a02:5b8::,2a02:5b8:ffff:ffff:ffff:ffff:ffff:ffff,GB
@@ -16565,7 +17961,6 @@
2a02:610::,2a02:610:ffff:ffff:ffff:ffff:ffff:ffff,LV
2a02:618::,2a02:618:ffff:ffff:ffff:ffff:ffff:ffff,RU
2a02:620::,2a02:620:ffff:ffff:ffff:ffff:ffff:ffff,CH
-2a02:628::,2a02:628:ffff:ffff:ffff:ffff:ffff:ffff,PT
2a02:630::,2a02:630:ffff:ffff:ffff:ffff:ffff:ffff,DK
2a02:638::,2a02:638:ffff:ffff:ffff:ffff:ffff:ffff,GI
2a02:640::,2a02:640:ffff:ffff:ffff:ffff:ffff:ffff,CY
@@ -16638,7 +18033,7 @@
2a02:858::,2a02:85f:ffff:ffff:ffff:ffff:ffff:ffff,GR
2a02:860::,2a02:860:ffff:ffff:ffff:ffff:ffff:ffff,NL
2a02:868::,2a02:868:ffff:ffff:ffff:ffff:ffff:ffff,DE
-2a02:870::,2a02:870:ffff:ffff:ffff:ffff:ffff:ffff,PT
+2a02:870::,2a02:877:ffff:ffff:ffff:ffff:ffff:ffff,PT
2a02:878::,2a02:878:ffff:ffff:ffff:ffff:ffff:ffff,RU
2a02:880::,2a02:880:ffff:ffff:ffff:ffff:ffff:ffff,DE
2a02:888::,2a02:888:ffff:ffff:ffff:ffff:ffff:ffff,SA
@@ -16657,9 +18052,7 @@
2a02:8f0::,2a02:8f0:ffff:ffff:ffff:ffff:ffff:ffff,PT
2a02:8f8::,2a02:8f8:ffff:ffff:ffff:ffff:ffff:ffff,PL
2a02:900::,2a02:900:ffff:ffff:ffff:ffff:ffff:ffff,BG
-2a02:908::,2a02:908:f460:ffff:ffff:ffff:ffff:ffff,DE
-2a02:908:f461::,2a02:908:f461:ffff:ffff:ffff:ffff:ffff,CA
-2a02:908:f462::,2a02:908:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:908::,2a02:908:ffff:ffff:ffff:ffff:ffff:ffff,DE
2a02:910::,2a02:910:ffff:ffff:ffff:ffff:ffff:ffff,CZ
2a02:918::,2a02:918:ffff:ffff:ffff:ffff:ffff:ffff,FR
2a02:920::,2a02:920:ffff:ffff:ffff:ffff:ffff:ffff,SE
@@ -16710,7 +18103,7 @@
2a02:a90::,2a02:a90:ffff:ffff:ffff:ffff:ffff:ffff,CH
2a02:a98::,2a02:a98:ffff:ffff:ffff:ffff:ffff:ffff,UZ
2a02:aa0::,2a02:aa0:ffff:ffff:ffff:ffff:ffff:ffff,SE
-2a02:aa8::,2a02:aa9:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a02:aa8::,2a02:aaf:ffff:ffff:ffff:ffff:ffff:ffff,ES
2a02:ab0::,2a02:ab0:ffff:ffff:ffff:ffff:ffff:ffff,CH
2a02:ab8::,2a02:ab8:ffff:ffff:ffff:ffff:ffff:ffff,AT
2a02:ac0::,2a02:ac0:ffff:ffff:ffff:ffff:ffff:ffff,SE
@@ -16756,7 +18149,6 @@
2a02:c18::,2a02:c18:ffff:ffff:ffff:ffff:ffff:ffff,FR
2a02:c20::,2a02:c20:ffff:ffff:ffff:ffff:ffff:ffff,CZ
2a02:c28::,2a02:c2f:ffff:ffff:ffff:ffff:ffff:ffff,JE
-2a02:c30::,2a02:c30:ffff:ffff:ffff:ffff:ffff:ffff,GB
2a02:c38::,2a02:c38:ffff:ffff:ffff:ffff:ffff:ffff,CZ
2a02:c40::,2a02:c47:ffff:ffff:ffff:ffff:ffff:ffff,PL
2a02:c48::,2a02:c48:ffff:ffff:ffff:ffff:ffff:ffff,DE
@@ -16864,30 +18256,15 @@
2a02:fa8::,2a02:fa8:ffff:ffff:ffff:ffff:ffff:ffff,SE
2a02:fb0::,2a02:fb0:ffff:ffff:ffff:ffff:ffff:ffff,GB
2a02:fb8::,2a02:fb8:ffff:ffff:ffff:ffff:ffff:ffff,GB
-2a02:fc0::,2a02:fc0:ffff:ffff:ffff:ffff:ffff:ffff,SA
+2a02:fc0::,2a02:fc7:ffff:ffff:ffff:ffff:ffff:ffff,SA
2a02:fc8::,2a02:fc8:ffff:ffff:ffff:ffff:ffff:ffff,AT
2a02:fd0::,2a02:fd0:ffff:ffff:ffff:ffff:ffff:ffff,MD
2a02:fd8::,2a02:fd8:ffff:ffff:ffff:ffff:ffff:ffff,DE
2a02:fe0::,2a02:fe7:ffff:ffff:ffff:ffff:ffff:ffff,NO
-2a02:fe8::,2a02:fe8:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a02:fe8::,2a02:fe9:ffff:ffff:ffff:ffff:ffff:ffff,NL
2a02:ff0::,2a02:ff0:ffff:ffff:ffff:ffff:ffff:ffff,TR
-2a02:ff8::,2a02:ff8:ffff:ffff:ffff:ffff:ffff:ffff,IR
2a02:1000::,2a02:103f:ffff:ffff:ffff:ffff:ffff:ffff,DE
-2a02:1200::,2a02:1205:503f:ffff:ffff:ffff:ffff:ffff,CH
-2a02:1205:5040::,2a02:1205:5040:ffff:ffff:ffff:ffff:ffff,GB
-2a02:1205:5041::,2a02:1205:504b:ffff:ffff:ffff:ffff:ffff,CH
-2a02:1205:504c::,2a02:1205:504c:ffff:ffff:ffff:ffff:ffff,DE
-2a02:1205:504d::,2a02:1205:c6aa:ffff:ffff:ffff:ffff:ffff,CH
-2a02:1205:c6ab::,2a02:1205:c6ab:ffff:ffff:ffff:ffff:ffff,DE
-2a02:1205:c6ac::,2a02:120b:7fb:ffff:ffff:ffff:ffff:ffff,CH
-2a02:120b:7fc::,2a02:120b:7fc:ffff:ffff:ffff:ffff:ffff,DE
-2a02:120b:7fd::,2a02:120b:2c68:ffff:ffff:ffff:ffff:ffff,CH
-2a02:120b:2c69::,2a02:120b:2c69:ffff:ffff:ffff:ffff:ffff,DE
-2a02:120b:2c6a::,2a02:120b:c3c7:ffff:ffff:ffff:ffff:ffff,CH
-2a02:120b:c3c8::,2a02:120b:c3c8:ffff:ffff:ffff:ffff:ffff,DE
-2a02:120b:c3c9::,2a02:120b:c3e3:ffff:ffff:ffff:ffff:ffff,CH
-2a02:120b:c3e4::,2a02:120b:c3e4:ffff:ffff:ffff:ffff:ffff,DE
-2a02:120b:c3e5::,2a02:121f:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a02:1200::,2a02:121f:ffff:ffff:ffff:ffff:ffff:ffff,CH
2a02:1300::,2a02:1300:ffff:ffff:ffff:ffff:ffff:ffff,IS
2a02:1308::,2a02:1308:ffff:ffff:ffff:ffff:ffff:ffff,DE
2a02:1310::,2a02:1310:ffff:ffff:ffff:ffff:ffff:ffff,GB
@@ -16934,7 +18311,7 @@
2a02:1650::,2a02:1650:ffff:ffff:ffff:ffff:ffff:ffff,SA
2a02:1658::,2a02:1658:ffff:ffff:ffff:ffff:ffff:ffff,GB
2a02:1660::,2a02:1660:ffff:ffff:ffff:ffff:ffff:ffff,NO
-2a02:1668::,2a02:1668:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a02:1668::,2a02:166f:ffff:ffff:ffff:ffff:ffff:ffff,NL
2a02:1670::,2a02:1670:ffff:ffff:ffff:ffff:ffff:ffff,DE
2a02:1678::,2a02:1678:ffff:ffff:ffff:ffff:ffff:ffff,IT
2a02:1680::,2a02:1680:ffff:ffff:ffff:ffff:ffff:ffff,NL
@@ -16944,7 +18321,7 @@
2a02:16a8::,2a02:16a8:ffff:ffff:ffff:ffff:ffff:ffff,AT
2a02:16b0::,2a02:16b0:ffff:ffff:ffff:ffff:ffff:ffff,KW
2a02:16b8::,2a02:16b8:ffff:ffff:ffff:ffff:ffff:ffff,UA
-2a02:16c0::,2a02:16c0:ffff:ffff:ffff:ffff:ffff:ffff,IR
+2a02:16c0::,2a02:16c7:ffff:ffff:ffff:ffff:ffff:ffff,IR
2a02:16c8::,2a02:16c8:ffff:ffff:ffff:ffff:ffff:ffff,GB
2a02:16d0::,2a02:16d0:ffff:ffff:ffff:ffff:ffff:ffff,DE
2a02:16d8::,2a02:16d8:ffff:ffff:ffff:ffff:ffff:ffff,LV
@@ -16967,7 +18344,9 @@
2a02:1770::,2a02:1770:ffff:ffff:ffff:ffff:ffff:ffff,PL
2a02:1778::,2a02:1778:ffff:ffff:ffff:ffff:ffff:ffff,PL
2a02:1780::,2a02:1780:ffff:ffff:ffff:ffff:ffff:ffff,SE
-2a02:1788::,2a02:1788:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a02:1788::,2a02:1788:4ff:83ff:ffff:ffff:ffff:ffff,GB
+2a02:1788:4ff:8400::,2a02:1788:4ff:84ff:ffff:ffff:ffff:ffff,US
+2a02:1788:4ff:8500::,2a02:1788:ffff:ffff:ffff:ffff:ffff:ffff,GB
2a02:1790::,2a02:1790:ffff:ffff:ffff:ffff:ffff:ffff,FI
2a02:1798::,2a02:179f:ffff:ffff:ffff:ffff:ffff:ffff,DE
2a02:17a0::,2a02:17a0:ffff:ffff:ffff:ffff:ffff:ffff,CZ
@@ -16982,11 +18361,7 @@
2a02:17e8::,2a02:17e8:ffff:ffff:ffff:ffff:ffff:ffff,RU
2a02:17f0::,2a02:17f0:ffff:ffff:ffff:ffff:ffff:ffff,GB
2a02:17f8::,2a02:17f8:ffff:ffff:ffff:ffff:ffff:ffff,DE
-2a02:1800::,2a02:1811:111:ffff:ffff:ffff:ffff:ffff,BE
-2a02:1811:112::,2a02:1811:112:ffff:ffff:ffff:ffff:ffff,FR
-2a02:1811:113::,2a02:1811:3101:ffff:ffff:ffff:ffff:ffff,BE
-2a02:1811:3102::,2a02:1811:3102:ffff:ffff:ffff:ffff:ffff,FR
-2a02:1811:3103::,2a02:18ff:ffff:ffff:ffff:ffff:ffff:ffff,BE
+2a02:1800::,2a02:18ff:ffff:ffff:ffff:ffff:ffff:ffff,BE
2a02:2000::,2a02:2000:ffff:ffff:ffff:ffff:ffff:ffff,UA
2a02:2008::,2a02:2008:ffff:ffff:ffff:ffff:ffff:ffff,GB
2a02:2010::,2a02:2010:ffff:ffff:ffff:ffff:ffff:ffff,TR
@@ -17024,10 +18399,8 @@
2a02:2110::,2a02:2110:ffff:ffff:ffff:ffff:ffff:ffff,GB
2a02:2118::,2a02:211f:ffff:ffff:ffff:ffff:ffff:ffff,DK
2a02:2120::,2a02:2123:ffff:ffff:ffff:ffff:ffff:ffff,NO
-2a02:2140::,2a02:2140:ffff:ffff:ffff:ffff:ffff:ffff,FR
-2a02:2148::,2a02:2149:82ff:ffff:ffff:ffff:ffff:ffff,GR
-2a02:2149:8300::,2a02:2149:8300:ffff:ffff:ffff:ffff:ffff,AF
-2a02:2149:8301::,2a02:214f:ffff:ffff:ffff:ffff:ffff:ffff,GR
+2a02:2140::,2a02:2147:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a02:2148::,2a02:214f:ffff:ffff:ffff:ffff:ffff:ffff,GR
2a02:2150::,2a02:2150:ffff:ffff:ffff:ffff:ffff:ffff,IT
2a02:2158::,2a02:2158:ffff:ffff:ffff:ffff:ffff:ffff,IE
2a02:2160::,2a02:2160:ffff:ffff:ffff:ffff:ffff:ffff,RO
@@ -17067,7 +18440,7 @@
2a02:2278::,2a02:2278:ffff:ffff:ffff:ffff:ffff:ffff,UA
2a02:2280::,2a02:2280:ffff:ffff:ffff:ffff:ffff:ffff,ES
2a02:2288::,2a02:2288:ffff:ffff:ffff:ffff:ffff:ffff,FR
-2a02:2290::,2a02:2290:ffff:ffff:ffff:ffff:ffff:ffff,LU
+2a02:2290::,2a02:2297:ffff:ffff:ffff:ffff:ffff:ffff,LU
2a02:2298::,2a02:2298:ffff:ffff:ffff:ffff:ffff:ffff,GR
2a02:22a0::,2a02:22a0:ffff:ffff:ffff:ffff:ffff:ffff,NL
2a02:22a8::,2a02:22a8:ffff:ffff:ffff:ffff:ffff:ffff,RU
@@ -17080,13 +18453,15 @@
2a02:22e0::,2a02:22e0:ffff:ffff:ffff:ffff:ffff:ffff,PL
2a02:22e8::,2a02:22e8:ffff:ffff:ffff:ffff:ffff:ffff,DE
2a02:22f0::,2a02:22f0:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:22f8:1046::,2a02:22f8:1046:ffff:ffff:ffff:ffff:ffff,SE
2a02:2300::,2a02:2300:ffff:ffff:ffff:ffff:ffff:ffff,GB
2a02:2308::,2a02:2308:ffff:ffff:ffff:ffff:ffff:ffff,NL
2a02:2310::,2a02:2310:ffff:ffff:ffff:ffff:ffff:ffff,CZ
-2a02:2318::,2a02:2318:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a02:2318::,2a02:2318::ffff:ffff:ffff:ffff:ffff,IM
+2a02:2318:1::,2a02:2318:ffff:ffff:ffff:ffff:ffff:ffff,GB
2a02:2320::,2a02:2320:ffff:ffff:ffff:ffff:ffff:ffff,UA
2a02:2328::,2a02:2328:ffff:ffff:ffff:ffff:ffff:ffff,FR
-2a02:2330::,2a02:2330:ffff:ffff:ffff:ffff:ffff:ffff,LV
+2a02:2330::,2a02:2337:ffff:ffff:ffff:ffff:ffff:ffff,LV
2a02:2338::,2a02:233f:ffff:ffff:ffff:ffff:ffff:ffff,DK
2a02:2340::,2a02:2340:ffff:ffff:ffff:ffff:ffff:ffff,FI
2a02:2348::,2a02:2348:ffff:ffff:ffff:ffff:ffff:ffff,SE
@@ -17098,7 +18473,7 @@
2a02:2380::,2a02:2380:ffff:ffff:ffff:ffff:ffff:ffff,FI
2a02:2388::,2a02:2388:ffff:ffff:ffff:ffff:ffff:ffff,NL
2a02:2390::,2a02:2390:ffff:ffff:ffff:ffff:ffff:ffff,GE
-2a02:2398::,2a02:2398:ffff:ffff:ffff:ffff:ffff:ffff,BE
+2a02:2398::,2a02:239f:ffff:ffff:ffff:ffff:ffff:ffff,BE
2a02:23a0::,2a02:23a0:ffff:ffff:ffff:ffff:ffff:ffff,ES
2a02:23a8::,2a02:23a8:ffff:ffff:ffff:ffff:ffff:ffff,GB
2a02:23b0::,2a02:23b0:ffff:ffff:ffff:ffff:ffff:ffff,FR
@@ -17136,7 +18511,7 @@
2a02:24b8::,2a02:24bf:ffff:ffff:ffff:ffff:ffff:ffff,IT
2a02:24c0::,2a02:24c0:ffff:ffff:ffff:ffff:ffff:ffff,CZ
2a02:24c8::,2a02:24c8:ffff:ffff:ffff:ffff:ffff:ffff,SA
-2a02:24d0::,2a02:24d0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a02:24d0::,2a02:24d7:ffff:ffff:ffff:ffff:ffff:ffff,GB
2a02:24d8::,2a02:24d8:ffff:ffff:ffff:ffff:ffff:ffff,DE
2a02:24e0::,2a02:24e0:ffff:ffff:ffff:ffff:ffff:ffff,GB
2a02:24e8::,2a02:24e8:ffff:ffff:ffff:ffff:ffff:ffff,CH
@@ -17215,21 +18590,14 @@
2a02:2750::,2a02:2750:ffff:ffff:ffff:ffff:ffff:ffff,AT
2a02:2760::,2a02:2760:ffff:ffff:ffff:ffff:ffff:ffff,DE
2a02:2768::,2a02:2768:ffff:ffff:ffff:ffff:ffff:ffff,RU
-2a02:2770::,2a02:2770:11:ffff:ffff:ffff:ffff:ffff,NL
-2a02:2770:12::,2a02:2770:12:ffff:ffff:ffff:ffff:ffff,RU
-2a02:2770:13::,2a02:2770:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a02:2770::,2a02:2770:ffff:ffff:ffff:ffff:ffff:ffff,NL
2a02:2778::,2a02:2778:ffff:ffff:ffff:ffff:ffff:ffff,FR
2a02:2780::,2a02:2780:ffff:ffff:ffff:ffff:ffff:ffff,PL
-2a02:2788::,2a02:2788:143:ffff:ffff:ffff:ffff:ffff,BE
-2a02:2788:144::,2a02:2788:144:ffff:ffff:ffff:ffff:ffff,MA
-2a02:2788:145::,2a02:2788:613:ffff:ffff:ffff:ffff:ffff,BE
-2a02:2788:614::,2a02:2788:614:ffff:ffff:ffff:ffff:ffff,FR
-2a02:2788:615::,2a02:2788:ffff:ffff:ffff:ffff:ffff:ffff,BE
+2a02:2788::,2a02:2788:ffff:ffff:ffff:ffff:ffff:ffff,BE
2a02:2790::,2a02:2790:ffff:ffff:ffff:ffff:ffff:ffff,BE
2a02:2798::,2a02:2798:ffff:ffff:ffff:ffff:ffff:ffff,RU
2a02:27a0::,2a02:27a0:ffff:ffff:ffff:ffff:ffff:ffff,RU
-2a02:27a8::,2a02:27a8::ffff:ffff:ffff:ffff:ffff,FR
-2a02:27a8:1::,2a02:27af:ffff:ffff:ffff:ffff:ffff:ffff,UA
+2a02:27a8::,2a02:27af:ffff:ffff:ffff:ffff:ffff:ffff,UA
2a02:27b0::,2a02:27b0:ffff:ffff:ffff:ffff:ffff:ffff,BA
2a02:27b8::,2a02:27b8:ffff:ffff:ffff:ffff:ffff:ffff,NO
2a02:27c0::,2a02:27c0:ffff:ffff:ffff:ffff:ffff:ffff,GB
@@ -17241,7 +18609,15 @@
2a02:27f0::,2a02:27f0:ffff:ffff:ffff:ffff:ffff:ffff,GB
2a02:27f8::,2a02:27f8:ffff:ffff:ffff:ffff:ffff:ffff,NL
2a02:2800::,2a02:2800:ffff:ffff:ffff:ffff:ffff:ffff,DE
-2a02:2808::,2a02:2808:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a02:2808::,2a02:2808:1005:ffff:ffff:ffff:ffff:ffff,CZ
+2a02:2808:1006::,2a02:2808:1006:ffff:ffff:ffff:ffff:ffff,RU
+2a02:2808:1007::,2a02:2808:2800:ffff:ffff:ffff:ffff:ffff,CZ
+2a02:2808:2801::,2a02:2808:2801:ffff:ffff:ffff:ffff:ffff,RU
+2a02:2808:2802::,2a02:2808:3000:ffff:ffff:ffff:ffff:ffff,CZ
+2a02:2808:3001::,2a02:2808:3001:ffff:ffff:ffff:ffff:ffff,RU
+2a02:2808:3002::,2a02:2808:5300:ffff:ffff:ffff:ffff:ffff,CZ
+2a02:2808:5301::,2a02:2808:5301:ffff:ffff:ffff:ffff:ffff,RU
+2a02:2808:5302::,2a02:2808:ffff:ffff:ffff:ffff:ffff:ffff,CZ
2a02:2810::,2a02:2810:ffff:ffff:ffff:ffff:ffff:ffff,ES
2a02:2818::,2a02:2818:ffff:ffff:ffff:ffff:ffff:ffff,UA
2a02:2820::,2a02:2820:ffff:ffff:ffff:ffff:ffff:ffff,CH
@@ -17285,7 +18661,7 @@
2a02:2958::,2a02:2958:ffff:ffff:ffff:ffff:ffff:ffff,DE
2a02:2960::,2a02:2960:ffff:ffff:ffff:ffff:ffff:ffff,IR
2a02:2968::,2a02:2968:ffff:ffff:ffff:ffff:ffff:ffff,NL
-2a02:2970::,2a02:2970:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:2970::,2a02:2977:ffff:ffff:ffff:ffff:ffff:ffff,DE
2a02:2978::,2a02:2978:ffff:ffff:ffff:ffff:ffff:ffff,PL
2a02:2980::,2a02:2980:ffff:ffff:ffff:ffff:ffff:ffff,DE
2a02:2988::,2a02:2988:ffff:ffff:ffff:ffff:ffff:ffff,GB
@@ -17360,7 +18736,6 @@
2a02:2c40::,2a02:2c40:ffff:ffff:ffff:ffff:ffff:ffff,BE
2a02:2c60::,2a02:2c60:ffff:ffff:ffff:ffff:ffff:ffff,DE
2a02:2c80::,2a02:2c80:ffff:ffff:ffff:ffff:ffff:ffff,IT
-2a02:2ca0::,2a02:2ca0:ffff:ffff:ffff:ffff:ffff:ffff,NL
2a02:2cc0::,2a02:2cc0:ffff:ffff:ffff:ffff:ffff:ffff,ES
2a02:2ce0::,2a02:2ce0:ffff:ffff:ffff:ffff:ffff:ffff,IT
2a02:2d00::,2a02:2d00:ffff:ffff:ffff:ffff:ffff:ffff,BE
@@ -17372,9 +18747,7 @@
2a02:2dc0::,2a02:2dc0:ffff:ffff:ffff:ffff:ffff:ffff,DE
2a02:2de0::,2a02:2de0:ffff:ffff:ffff:ffff:ffff:ffff,PL
2a02:2e00::,2a02:2e1f:ffff:ffff:ffff:ffff:ffff:ffff,ES
-2a02:2f00::,2a02:2f0e:d31e:ffff:ffff:ffff:ffff:ffff,RO
-2a02:2f0e:d31f::,2a02:2f0e:d31f:ffff:ffff:ffff:ffff:ffff,HK
-2a02:2f0e:d320::,2a02:2f0f:ffff:ffff:ffff:ffff:ffff:ffff,RO
+2a02:2f00::,2a02:2f0f:ffff:ffff:ffff:ffff:ffff:ffff,RO
2a02:2f80::,2a02:2f80:ffff:ffff:ffff:ffff:ffff:ffff,ES
2a02:2fa0::,2a02:2fa0:ffff:ffff:ffff:ffff:ffff:ffff,NL
2a02:2fc0::,2a02:2fc7:ffff:ffff:ffff:ffff:ffff:ffff,DE
@@ -17440,7 +18813,7 @@
2a02:4780::,2a02:4780:ffff:ffff:ffff:ffff:ffff:ffff,LT
2a02:47a0::,2a02:47a0:ffff:ffff:ffff:ffff:ffff:ffff,RU
2a02:47c0::,2a02:47c0:ffff:ffff:ffff:ffff:ffff:ffff,NL
-2a02:47e0::,2a02:47e0:ffff:ffff:ffff:ffff:ffff:ffff,BE
+2a02:47e0::,2a02:47e7:ffff:ffff:ffff:ffff:ffff:ffff,BE
2a02:4800::,2a02:4800:ffff:ffff:ffff:ffff:ffff:ffff,RO
2a02:4820::,2a02:4820:ffff:ffff:ffff:ffff:ffff:ffff,FI
2a02:4840::,2a02:4840:ffff:ffff:ffff:ffff:ffff:ffff,LV
@@ -17600,7 +18973,7 @@
2a02:5d20::,2a02:5d20:ffff:ffff:ffff:ffff:ffff:ffff,PL
2a02:5d40::,2a02:5d47:ffff:ffff:ffff:ffff:ffff:ffff,ES
2a02:5d60::,2a02:5d60:ffff:ffff:ffff:ffff:ffff:ffff,RU
-2a02:5d80::,2a02:5d80:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a02:5d80::,2a02:5d87:ffff:ffff:ffff:ffff:ffff:ffff,GB
2a02:5da0::,2a02:5da0:ffff:ffff:ffff:ffff:ffff:ffff,NO
2a02:5dc0::,2a02:5dc0:ffff:ffff:ffff:ffff:ffff:ffff,ES
2a02:5de0::,2a02:5de0:ffff:ffff:ffff:ffff:ffff:ffff,FI
@@ -17618,7 +18991,6 @@
2a02:5f80::,2a02:5f80:ffff:ffff:ffff:ffff:ffff:ffff,RU
2a02:5fa0::,2a02:5fa0:ffff:ffff:ffff:ffff:ffff:ffff,FR
2a02:5fc0::,2a02:5fc0:ffff:ffff:ffff:ffff:ffff:ffff,ES
-2a02:5fe0::,2a02:5fe0:ffff:ffff:ffff:ffff:ffff:ffff,CZ
2a02:6000::,2a02:6000:ffff:ffff:ffff:ffff:ffff:ffff,IT
2a02:6020::,2a02:6020:ffff:ffff:ffff:ffff:ffff:ffff,BA
2a02:6040::,2a02:6040:ffff:ffff:ffff:ffff:ffff:ffff,IR
@@ -17661,7 +19033,7 @@
2a02:6520::,2a02:6520:ffff:ffff:ffff:ffff:ffff:ffff,ES
2a02:6540::,2a02:6540:ffff:ffff:ffff:ffff:ffff:ffff,GB
2a02:6560::,2a02:6560:ffff:ffff:ffff:ffff:ffff:ffff,FR
-2a02:6580::,2a02:6580:ffff:ffff:ffff:ffff:ffff:ffff,IE
+2a02:6580::,2a02:6580:ffff:ffff:ffff:ffff:ffff:ffff,US
2a02:65a0::,2a02:65a0:ffff:ffff:ffff:ffff:ffff:ffff,RU
2a02:65c0::,2a02:65c0:ffff:ffff:ffff:ffff:ffff:ffff,LB
2a02:65e0::,2a02:65e0:ffff:ffff:ffff:ffff:ffff:ffff,FR
@@ -17676,15 +19048,12 @@
2a02:6700::,2a02:6700:ffff:ffff:ffff:ffff:ffff:ffff,TR
2a02:6720::,2a02:6720:ffff:ffff:ffff:ffff:ffff:ffff,SK
2a02:6740::,2a02:6740:ffff:ffff:ffff:ffff:ffff:ffff,CH
-2a02:6760::,2a02:6760:ffff:ffff:ffff:ffff:ffff:ffff,RU
2a02:6780::,2a02:6780:ffff:ffff:ffff:ffff:ffff:ffff,FR
2a02:67a0::,2a02:67a0:ffff:ffff:ffff:ffff:ffff:ffff,AZ
2a02:67c0::,2a02:67c0:ffff:ffff:ffff:ffff:ffff:ffff,SY
2a02:67e0::,2a02:67e0:ffff:ffff:ffff:ffff:ffff:ffff,BE
2a02:6800::,2a02:6800:ffff:ffff:ffff:ffff:ffff:ffff,BG
-2a02:6820::,2a02:6820:ffff:ffff:ffff:ffff:ffff:ffff,IT
2a02:6840::,2a02:6840:ffff:ffff:ffff:ffff:ffff:ffff,FR
-2a02:6860::,2a02:6860:ffff:ffff:ffff:ffff:ffff:ffff,TR
2a02:6880::,2a02:6880:ffff:ffff:ffff:ffff:ffff:ffff,IE
2a02:68a0::,2a02:68a0:ffff:ffff:ffff:ffff:ffff:ffff,EE
2a02:68c0::,2a02:68c0:ffff:ffff:ffff:ffff:ffff:ffff,FR
@@ -17729,7 +19098,7 @@
2a02:6da0::,2a02:6da0:ffff:ffff:ffff:ffff:ffff:ffff,GB
2a02:6dc0::,2a02:6dc0:ffff:ffff:ffff:ffff:ffff:ffff,PL
2a02:6de0::,2a02:6de0:ffff:ffff:ffff:ffff:ffff:ffff,DE
-2a02:6e00::,2a02:6e00:ffff:ffff:ffff:ffff:ffff:ffff,RO
+2a02:6e00:1::,2a02:6e00:1:ffff:ffff:ffff:ffff:ffff,RO
2a02:6e20::,2a02:6e20:ffff:ffff:ffff:ffff:ffff:ffff,DE
2a02:6e60::,2a02:6e60:ffff:ffff:ffff:ffff:ffff:ffff,RU
2a02:6ea0::,2a02:6ea0:ffff:ffff:ffff:ffff:ffff:ffff,GB
@@ -17754,7 +19123,6 @@
2a02:7120::,2a02:7120:ffff:ffff:ffff:ffff:ffff:ffff,FR
2a02:7140::,2a02:7140:ffff:ffff:ffff:ffff:ffff:ffff,GB
2a02:7160::,2a02:7160:ffff:ffff:ffff:ffff:ffff:ffff,ES
-2a02:7180::,2a02:7180:ffff:ffff:ffff:ffff:ffff:ffff,BE
2a02:71a0::,2a02:71a0:ffff:ffff:ffff:ffff:ffff:ffff,DE
2a02:71c0::,2a02:71c0:ffff:ffff:ffff:ffff:ffff:ffff,GB
2a02:71e0::,2a02:71e0:ffff:ffff:ffff:ffff:ffff:ffff,SI
@@ -17777,9 +19145,6 @@
2a02:7420::,2a02:7420:ffff:ffff:ffff:ffff:ffff:ffff,CH
2a02:7440::,2a02:7440:ffff:ffff:ffff:ffff:ffff:ffff,DE
2a02:7460::,2a02:7460:ffff:ffff:ffff:ffff:ffff:ffff,MQ
-2a02:7480::,2a02:7480:ffff:ffff:ffff:ffff:ffff:ffff,RU
-2a02:74a0::,2a02:74a0:ffff:ffff:ffff:ffff:ffff:ffff,GB
-2a02:74c0::,2a02:74c0:ffff:ffff:ffff:ffff:ffff:ffff,CH
2a02:74e0::,2a02:74e0:ffff:ffff:ffff:ffff:ffff:ffff,GB
2a02:7500::,2a02:7500:ffff:ffff:ffff:ffff:ffff:ffff,KW
2a02:7520::,2a02:7520:ffff:ffff:ffff:ffff:ffff:ffff,DE
@@ -17807,8 +19172,7 @@
2a02:77e0::,2a02:77e0:ffff:ffff:ffff:ffff:ffff:ffff,GB
2a02:7800::,2a02:7800:ffff:ffff:ffff:ffff:ffff:ffff,RU
2a02:7820::,2a02:7820:ffff:ffff:ffff:ffff:ffff:ffff,NL
-2a02:7840::,2a02:7840:ffff:ffff:ffff:ffff:ffff:ffff,NL
-2a02:7860::,2a02:7860:ffff:ffff:ffff:ffff:ffff:ffff,BE
+2a02:7860::,2a02:7867:ffff:ffff:ffff:ffff:ffff:ffff,BE
2a02:7880::,2a02:7880:ffff:ffff:ffff:ffff:ffff:ffff,RU
2a02:78a0::,2a02:78a0:ffff:ffff:ffff:ffff:ffff:ffff,CZ
2a02:78c0::,2a02:78c0:ffff:ffff:ffff:ffff:ffff:ffff,DE
@@ -17870,21 +19234,19 @@
2a02:8020::,2a02:8023:ffff:ffff:ffff:ffff:ffff:ffff,DE
2a02:8040::,2a02:8043:ffff:ffff:ffff:ffff:ffff:ffff,RU
2a02:8060::,2a02:8061:ffff:ffff:ffff:ffff:ffff:ffff,AD
-2a02:8070::,2a02:8070:e280:ffff:ffff:ffff:ffff:ffff,DE
-2a02:8070:e281::,2a02:8070:e281:ffff:ffff:ffff:ffff:ffff,CH
-2a02:8070:e282::,2a02:8071:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:8070::,2a02:8071:ffff:ffff:ffff:ffff:ffff:ffff,DE
2a02:8080::,2a02:8087:ffff:ffff:ffff:ffff:ffff:ffff,IE
2a02:80c0::,2a02:80c3:ffff:ffff:ffff:ffff:ffff:ffff,NL
2a02:80e0::,2a02:80e3:ffff:ffff:ffff:ffff:ffff:ffff,BG
-2a02:8100::,2a02:810b:85ff:ffff:ffff:ffff:ffff:ffff,DE
-2a02:810b:8600::,2a02:810b:8600:ffff:ffff:ffff:ffff:ffff,GB
-2a02:810b:8601::,2a02:810b:863f:ffff:ffff:ffff:ffff:ffff,DE
-2a02:810b:8640::,2a02:810b:8640:ffff:ffff:ffff:ffff:ffff,GB
-2a02:810b:8641::,2a02:811f:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:8100::,2a02:8108:11bf:ffff:ffff:ffff:ffff:ffff,DE
+2a02:8108:11c0::,2a02:8108:11c0:ffff:ffff:ffff:ffff:ffff,TR
+2a02:8108:11c1::,2a02:811f:ffff:ffff:ffff:ffff:ffff:ffff,DE
2a02:8200::,2a02:821f:ffff:ffff:ffff:ffff:ffff:ffff,DE
2a02:8300::,2a02:830f:ffff:ffff:ffff:ffff:ffff:ffff,CZ
2a02:8380::,2a02:838f:ffff:ffff:ffff:ffff:ffff:ffff,AT
-2a02:8400::,2a02:847f:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a02:8400::,2a02:8434:2543:ffff:ffff:ffff:ffff:ffff,FR
+2a02:8434:2544::,2a02:8434:2544:ffff:ffff:ffff:ffff:ffff,ES
+2a02:8434:2545::,2a02:847f:ffff:ffff:ffff:ffff:ffff:ffff,FR
2a02:8800::,2a02:88ff:ffff:ffff:ffff:ffff:ffff:ffff,GB
2a02:9000::,2a02:91ff:ffff:ffff:ffff:ffff:ffff:ffff,ES
2a02:a000::,2a02:a03f:ffff:ffff:ffff:ffff:ffff:ffff,BE
@@ -17900,6 +19262,7 @@
2a02:ac40::,2a02:ac47:ffff:ffff:ffff:ffff:ffff:ffff,NL
2a02:ac80::,2a02:ac87:ffff:ffff:ffff:ffff:ffff:ffff,TR
2a02:acc0::,2a02:acc7:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:ad00::,2a02:ad07:ffff:ffff:ffff:ffff:ffff:ffff,GB
2a02:ad40::,2a02:ad47:ffff:ffff:ffff:ffff:ffff:ffff,DE
2a02:ad80::,2a02:ad87:ffff:ffff:ffff:ffff:ffff:ffff,ES
2a02:adc0::,2a02:adc7:ffff:ffff:ffff:ffff:ffff:ffff,DE
@@ -17913,6 +19276,7 @@
2a02:afc0::,2a02:afc7:ffff:ffff:ffff:ffff:ffff:ffff,DE
2a02:b000::,2a02:b1ff:ffff:ffff:ffff:ffff:ffff:ffff,IT
2a02:c000::,2a02:c007:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a02:c040::,2a02:c047:ffff:ffff:ffff:ffff:ffff:ffff,JO
2a02:c080::,2a02:c087:ffff:ffff:ffff:ffff:ffff:ffff,UA
2a02:c0c0::,2a02:c0c7:ffff:ffff:ffff:ffff:ffff:ffff,RU
2a02:c100::,2a02:c107:ffff:ffff:ffff:ffff:ffff:ffff,DE
@@ -17930,10 +19294,8 @@
2a02:c3c0::,2a02:c3c7:ffff:ffff:ffff:ffff:ffff:ffff,BH
2a02:c400::,2a02:c407:ffff:ffff:ffff:ffff:ffff:ffff,BH
2a02:c440::,2a02:c447:ffff:ffff:ffff:ffff:ffff:ffff,FR
-2a02:c480::,2a02:c487:ffff:ffff:ffff:ffff:ffff:ffff,RU
2a02:c4c0::,2a02:c4c7:ffff:ffff:ffff:ffff:ffff:ffff,CH
2a02:c500::,2a02:c507:ffff:ffff:ffff:ffff:ffff:ffff,GR
-2a02:c540::,2a02:c547:ffff:ffff:ffff:ffff:ffff:ffff,NL
2a02:c580::,2a02:c587:ffff:ffff:ffff:ffff:ffff:ffff,IR
2a02:c5c0::,2a02:c5c7:ffff:ffff:ffff:ffff:ffff:ffff,FI
2a02:c600::,2a02:c607:ffff:ffff:ffff:ffff:ffff:ffff,CH
@@ -17945,7 +19307,6 @@
2a02:c740::,2a02:c747:ffff:ffff:ffff:ffff:ffff:ffff,DE
2a02:c780::,2a02:c787:ffff:ffff:ffff:ffff:ffff:ffff,LV
2a02:c7c0::,2a02:c7c7:ffff:ffff:ffff:ffff:ffff:ffff,IT
-2a02:c800::,2a02:c807:ffff:ffff:ffff:ffff:ffff:ffff,GB
2a02:c840::,2a02:c847:ffff:ffff:ffff:ffff:ffff:ffff,GB
2a02:c880::,2a02:c887:ffff:ffff:ffff:ffff:ffff:ffff,NL
2a02:c8c0::,2a02:c8c7:ffff:ffff:ffff:ffff:ffff:ffff,UZ
@@ -17977,6 +19338,7 @@
2a02:cec0::,2a02:cec3:ffff:ffff:ffff:ffff:ffff:ffff,NL
2a02:cee0::,2a02:cee3:ffff:ffff:ffff:ffff:ffff:ffff,IE
2a02:cf00::,2a02:cf07:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a02:cf40::,2a02:cf47:ffff:ffff:ffff:ffff:ffff:ffff,DK
2a02:cf80::,2a02:cf87:ffff:ffff:ffff:ffff:ffff:ffff,IL
2a02:cfc0::,2a02:cfc7:ffff:ffff:ffff:ffff:ffff:ffff,FR
2a02:d000::,2a02:d007:ffff:ffff:ffff:ffff:ffff:ffff,CH
@@ -18054,9 +19416,8 @@
2a02:e180::,2a02:e187:ffff:ffff:ffff:ffff:ffff:ffff,GB
2a02:e1c0::,2a02:e1c7:ffff:ffff:ffff:ffff:ffff:ffff,NL
2a02:e200::,2a02:e203:ffff:ffff:ffff:ffff:ffff:ffff,AT
-2a02:e220::,2a02:e223:ffff:ffff:ffff:ffff:ffff:ffff,SA
2a02:e240::,2a02:e247:ffff:ffff:ffff:ffff:ffff:ffff,DE
-2a02:e280::,2a02:e287:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:e280::,2a02:e287:ffff:ffff:ffff:ffff:ffff:ffff,YE
2a02:e2c0::,2a02:e2c7:ffff:ffff:ffff:ffff:ffff:ffff,IT
2a02:e300::,2a02:e307:ffff:ffff:ffff:ffff:ffff:ffff,BY
2a02:e340::,2a02:e347:ffff:ffff:ffff:ffff:ffff:ffff,NO
@@ -18065,15 +19426,14 @@
2a02:e400::,2a02:e407:ffff:ffff:ffff:ffff:ffff:ffff,SE
2a02:e440::,2a02:e447:ffff:ffff:ffff:ffff:ffff:ffff,DE
2a02:e480::,2a02:e487:ffff:ffff:ffff:ffff:ffff:ffff,RU
-2a02:e4c0::,2a02:e4c7:ffff:ffff:ffff:ffff:ffff:ffff,NL
2a02:e500::,2a02:e507:ffff:ffff:ffff:ffff:ffff:ffff,FR
2a02:e540::,2a02:e547:ffff:ffff:ffff:ffff:ffff:ffff,RS
2a02:e580::,2a02:e587:ffff:ffff:ffff:ffff:ffff:ffff,NO
2a02:e5c0::,2a02:e5c7:ffff:ffff:ffff:ffff:ffff:ffff,RU
-2a02:e600::,2a02:e603:ffff:ffff:ffff:ffff:ffff:ffff,FR
2a02:e620::,2a02:e623:ffff:ffff:ffff:ffff:ffff:ffff,RU
2a02:e640::,2a02:e647:ffff:ffff:ffff:ffff:ffff:ffff,FR
2a02:e680::,2a02:e687:ffff:ffff:ffff:ffff:ffff:ffff,JO
+2a02:e6c0::,2a02:e6c7:ffff:ffff:ffff:ffff:ffff:ffff,GB
2a02:e700::,2a02:e707:ffff:ffff:ffff:ffff:ffff:ffff,LY
2a02:e740::,2a02:e747:ffff:ffff:ffff:ffff:ffff:ffff,DE
2a02:e780::,2a02:e787:ffff:ffff:ffff:ffff:ffff:ffff,TR
@@ -18081,10 +19441,11 @@
2a02:e800::,2a02:e807:ffff:ffff:ffff:ffff:ffff:ffff,DE
2a02:e840::,2a02:e847:ffff:ffff:ffff:ffff:ffff:ffff,RU
2a02:e880::,2a02:e887:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a02:e8c0::,2a02:e8c7:ffff:ffff:ffff:ffff:ffff:ffff,GB
2a02:e900::,2a02:e907:ffff:ffff:ffff:ffff:ffff:ffff,IE
-2a02:e940::,2a02:e947:ffff:ffff:ffff:ffff:ffff:ffff,RO
2a02:e980::,2a02:e987:ffff:ffff:ffff:ffff:ffff:ffff,IL
2a02:e9c0::,2a02:e9c7:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a02:ea00::,2a02:ea07:ffff:ffff:ffff:ffff:ffff:ffff,AE
2a02:ea40::,2a02:ea47:ffff:ffff:ffff:ffff:ffff:ffff,GB
2a02:ea80::,2a02:ea87:ffff:ffff:ffff:ffff:ffff:ffff,PL
2a02:eac0::,2a02:eac7:ffff:ffff:ffff:ffff:ffff:ffff,PL
@@ -18115,7 +19476,9 @@
2a02:f0c0::,2a02:f0c7:ffff:ffff:ffff:ffff:ffff:ffff,JO
2a02:f100::,2a02:f107:ffff:ffff:ffff:ffff:ffff:ffff,GB
2a02:f140::,2a02:f147:ffff:ffff:ffff:ffff:ffff:ffff,DE
-2a02:f180::,2a02:f187:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a02:f180::,2a02:f181:2fff:ffff:ffff:ffff:ffff:ffff,FR
+2a02:f181:3000::,2a02:f181:3000:ffff:ffff:ffff:ffff:ffff,RO
+2a02:f181:3001::,2a02:f187:ffff:ffff:ffff:ffff:ffff:ffff,FR
2a02:f1c0::,2a02:f1c7:ffff:ffff:ffff:ffff:ffff:ffff,UA
2a02:f200::,2a02:f207:ffff:ffff:ffff:ffff:ffff:ffff,DE
2a02:f240::,2a02:f247:ffff:ffff:ffff:ffff:ffff:ffff,IR
@@ -18168,6 +19531,7 @@
2a02:fdc0::,2a02:fdc7:ffff:ffff:ffff:ffff:ffff:ffff,AT
2a02:fe00::,2a02:fe07:ffff:ffff:ffff:ffff:ffff:ffff,NL
2a02:fe40::,2a02:fe47:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a02:fe80::,2a02:fe87:ffff:ffff:ffff:ffff:ffff:ffff,GB
2a02:fec0::,2a02:fec7:ffff:ffff:ffff:ffff:ffff:ffff,GB
2a02:ff00::,2a02:ff07:ffff:ffff:ffff:ffff:ffff:ffff,IT
2a02:ff40::,2a02:ff47:ffff:ffff:ffff:ffff:ffff:ffff,IM
@@ -18180,7 +19544,6 @@
2a03:a0::,2a03:a0:ffff:ffff:ffff:ffff:ffff:ffff,HR
2a03:c0::,2a03:c0:ffff:ffff:ffff:ffff:ffff:ffff,DK
2a03:e0::,2a03:e0:ffff:ffff:ffff:ffff:ffff:ffff,SK
-2a03:100::,2a03:100:ffff:ffff:ffff:ffff:ffff:ffff,LV
2a03:120::,2a03:120:ffff:ffff:ffff:ffff:ffff:ffff,NL
2a03:140::,2a03:140:ffff:ffff:ffff:ffff:ffff:ffff,NL
2a03:160::,2a03:160:ffff:ffff:ffff:ffff:ffff:ffff,CH
@@ -18291,7 +19654,17 @@
2a03:f00::,2a03:f07:ffff:ffff:ffff:ffff:ffff:ffff,DE
2a03:f40::,2a03:f40:ffff:ffff:ffff:ffff:ffff:ffff,CH
2a03:f60::,2a03:f60:ffff:ffff:ffff:ffff:ffff:ffff,NO
-2a03:f80::,2a03:f87:ffff:ffff:ffff:ffff:ffff:ffff,AT
+2a03:f80::,2a03:f80:43:ffff:ffff:ffff:ffff:ffff,AT
+2a03:f80:44::,2a03:f80:44:ffff:ffff:ffff:ffff:ffff,IM
+2a03:f80:45::,2a03:f80:47:ffff:ffff:ffff:ffff:ffff,AT
+2a03:f80:48::,2a03:f80:48:ffff:ffff:ffff:ffff:ffff,PL
+2a03:f80:49::,2a03:f80:55:ffff:ffff:ffff:ffff:ffff,AT
+2a03:f80:56::,2a03:f80:56:ffff:ffff:ffff:ffff:ffff,CL
+2a03:f80:57::,2a03:f80:353:ffff:ffff:ffff:ffff:ffff,AT
+2a03:f80:354::,2a03:f80:354:ffff:ffff:ffff:ffff:ffff,IS
+2a03:f80:355::,2a03:f87:7:ffff:ffff:ffff:ffff:ffff,AT
+2a03:f87:8::,2a03:f87:8:ffff:ffff:ffff:ffff:ffff,SG
+2a03:f87:9::,2a03:f87:ffff:ffff:ffff:ffff:ffff:ffff,AT
2a03:fc0::,2a03:fc0:ffff:ffff:ffff:ffff:ffff:ffff,DE
2a03:fe0::,2a03:fe0:ffff:ffff:ffff:ffff:ffff:ffff,BG
2a03:1000::,2a03:1000:ffff:ffff:ffff:ffff:ffff:ffff,AT
@@ -18315,7 +19688,6 @@
2a03:1240::,2a03:1240:ffff:ffff:ffff:ffff:ffff:ffff,UA
2a03:1260::,2a03:1260:ffff:ffff:ffff:ffff:ffff:ffff,RU
2a03:1280::,2a03:1280:ffff:ffff:ffff:ffff:ffff:ffff,PL
-2a03:12a0::,2a03:12a0:ffff:ffff:ffff:ffff:ffff:ffff,BE
2a03:12c0::,2a03:12c0:ffff:ffff:ffff:ffff:ffff:ffff,NO
2a03:12e0::,2a03:12e0:ffff:ffff:ffff:ffff:ffff:ffff,AE
2a03:1300::,2a03:1300:ffff:ffff:ffff:ffff:ffff:ffff,CY
@@ -18330,7 +19702,6 @@
2a03:1420::,2a03:1420:ffff:ffff:ffff:ffff:ffff:ffff,AT
2a03:1440::,2a03:1440:ffff:ffff:ffff:ffff:ffff:ffff,DE
2a03:1460::,2a03:1460:ffff:ffff:ffff:ffff:ffff:ffff,NL
-2a03:1480::,2a03:1480:ffff:ffff:ffff:ffff:ffff:ffff,DE
2a03:14a0::,2a03:14a0:ffff:ffff:ffff:ffff:ffff:ffff,FR
2a03:14c0::,2a03:14c0:ffff:ffff:ffff:ffff:ffff:ffff,RU
2a03:14e0::,2a03:14e0:ffff:ffff:ffff:ffff:ffff:ffff,GB
@@ -18369,7 +19740,7 @@
2a03:1920::,2a03:1920:ffff:ffff:ffff:ffff:ffff:ffff,IT
2a03:1940::,2a03:1940:ffff:ffff:ffff:ffff:ffff:ffff,GB
2a03:1960::,2a03:1960:ffff:ffff:ffff:ffff:ffff:ffff,LT
-2a03:1980::,2a03:1980:ffff:ffff:ffff:ffff:ffff:ffff,BE
+2a03:1980::,2a03:1987:ffff:ffff:ffff:ffff:ffff:ffff,BE
2a03:19a0::,2a03:19a0:ffff:ffff:ffff:ffff:ffff:ffff,CH
2a03:19e0::,2a03:19e0:ffff:ffff:ffff:ffff:ffff:ffff,ES
2a03:1a00::,2a03:1a00:ffff:ffff:ffff:ffff:ffff:ffff,NL
@@ -18384,7 +19755,7 @@
2a03:1b20::,2a03:1b20:ffff:ffff:ffff:ffff:ffff:ffff,SE
2a03:1b40::,2a03:1b40:ffff:ffff:ffff:ffff:ffff:ffff,RS
2a03:1b60::,2a03:1b60:ffff:ffff:ffff:ffff:ffff:ffff,GB
-2a03:1b80::,2a03:1b80:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a03:1b80::,2a03:1b87:ffff:ffff:ffff:ffff:ffff:ffff,GB
2a03:1ba0::,2a03:1ba0:ffff:ffff:ffff:ffff:ffff:ffff,GB
2a03:1bc0::,2a03:1bc0:ffff:ffff:ffff:ffff:ffff:ffff,FR
2a03:1be0::,2a03:1be0:ffff:ffff:ffff:ffff:ffff:ffff,GB
@@ -18404,10 +19775,9 @@
2a03:1da0::,2a03:1da0:ffff:ffff:ffff:ffff:ffff:ffff,DE
2a03:1dc0::,2a03:1dc0:ffff:ffff:ffff:ffff:ffff:ffff,FR
2a03:1de0::,2a03:1de0:ffff:ffff:ffff:ffff:ffff:ffff,RU
-2a03:1e00::,2a03:1e00:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a03:1e00::,2a03:1e03:ffff:ffff:ffff:ffff:ffff:ffff,DE
2a03:1e20::,2a03:1e20:ffff:ffff:ffff:ffff:ffff:ffff,CZ
2a03:1e40::,2a03:1e40:ffff:ffff:ffff:ffff:ffff:ffff,SE
-2a03:1e60::,2a03:1e60:ffff:ffff:ffff:ffff:ffff:ffff,GB
2a03:1e80::,2a03:1e87:ffff:ffff:ffff:ffff:ffff:ffff,DE
2a03:1ea0::,2a03:1ea0:ffff:ffff:ffff:ffff:ffff:ffff,GB
2a03:1ec0::,2a03:1ec0:ffff:ffff:ffff:ffff:ffff:ffff,BG
@@ -18420,7 +19790,7 @@
2a03:1fa0::,2a03:1fa0:ffff:ffff:ffff:ffff:ffff:ffff,GB
2a03:2000::,2a03:2000:ffff:ffff:ffff:ffff:ffff:ffff,GB
2a03:2020::,2a03:2020:ffff:ffff:ffff:ffff:ffff:ffff,NL
-2a03:2040::,2a03:2040:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a03:2040::,2a03:2047:ffff:ffff:ffff:ffff:ffff:ffff,CH
2a03:2060::,2a03:2060:ffff:ffff:ffff:ffff:ffff:ffff,CH
2a03:2080::,2a03:2080:ffff:ffff:ffff:ffff:ffff:ffff,NL
2a03:20a0::,2a03:20a0:ffff:ffff:ffff:ffff:ffff:ffff,GB
@@ -18437,7 +19807,9 @@
2a03:2200::,2a03:2200:ffff:ffff:ffff:ffff:ffff:ffff,BE
2a03:2220::,2a03:2220:ffff:ffff:ffff:ffff:ffff:ffff,DK
2a03:2240::,2a03:2240:ffff:ffff:ffff:ffff:ffff:ffff,IE
-2a03:2260::,2a03:2263:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a03:2260::,2a03:2266:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a03:2267::,2a03:2267::ffff:ffff:ffff:ffff:ffff,NL
+2a03:2267:1::,2a03:2267:ffff:ffff:ffff:ffff:ffff:ffff,DE
2a03:2280::,2a03:2280:ffff:ffff:ffff:ffff:ffff:ffff,NL
2a03:22a0::,2a03:22a0:ffff:ffff:ffff:ffff:ffff:ffff,DE
2a03:22c0::,2a03:22c0:ffff:ffff:ffff:ffff:ffff:ffff,PL
@@ -18486,7 +19858,21 @@
2a03:2820::,2a03:2820:ffff:ffff:ffff:ffff:ffff:ffff,GE
2a03:2840::,2a03:2840:ffff:ffff:ffff:ffff:ffff:ffff,US
2a03:2860::,2a03:2860:ffff:ffff:ffff:ffff:ffff:ffff,RU
-2a03:2880::,2a03:2880:ffff:ffff:ffff:ffff:ffff:ffff,IE
+2a03:2880::,2a03:2880:10:ffff:ffff:ffff:ffff:ffff,IE
+2a03:2880:11::,2a03:2880:11:ffff:ffff:ffff:ffff:ffff,US
+2a03:2880:12::,2a03:2880:1f:ffff:ffff:ffff:ffff:ffff,IE
+2a03:2880:20::,2a03:2880:20:ffff:ffff:ffff:ffff:ffff,US
+2a03:2880:21::,2a03:2880:201f:ffff:ffff:ffff:ffff:ffff,IE
+2a03:2880:2020::,2a03:2880:2020:ffff:ffff:ffff:ffff:ffff,GB
+2a03:2880:2021::,2a03:2880:202f:ffff:ffff:ffff:ffff:ffff,IE
+2a03:2880:2030::,2a03:2880:2030:ffff:ffff:ffff:ffff:ffff,GB
+2a03:2880:2031::,2a03:2880:204f:ffff:ffff:ffff:ffff:ffff,IE
+2a03:2880:2050::,2a03:2880:2050:ffff:ffff:ffff:ffff:ffff,GB
+2a03:2880:2051::,2a03:2880:212f:ffff:ffff:ffff:ffff:ffff,IE
+2a03:2880:2130::,2a03:2880:2130:ffff:ffff:ffff:ffff:ffff,GB
+2a03:2880:2131::,2a03:2880:300f:ffff:ffff:ffff:ffff:ffff,IE
+2a03:2880:3010::,2a03:2880:3010:ffff:ffff:ffff:ffff:ffff,GB
+2a03:2880:3011::,2a03:2880:ffff:ffff:ffff:ffff:ffff:ffff,IE
2a03:28a0::,2a03:28a0:ffff:ffff:ffff:ffff:ffff:ffff,NL
2a03:28c0::,2a03:28c0:ffff:ffff:ffff:ffff:ffff:ffff,TR
2a03:28e0::,2a03:28e0:ffff:ffff:ffff:ffff:ffff:ffff,SE
@@ -18557,7 +19943,6 @@
2a03:3180::,2a03:3180:ffff:ffff:ffff:ffff:ffff:ffff,AT
2a03:31a0::,2a03:31a0:ffff:ffff:ffff:ffff:ffff:ffff,GB
2a03:31c0::,2a03:31c0:ffff:ffff:ffff:ffff:ffff:ffff,BE
-2a03:31e0::,2a03:31e0:ffff:ffff:ffff:ffff:ffff:ffff,RU
2a03:3200::,2a03:3200:ffff:ffff:ffff:ffff:ffff:ffff,RU
2a03:3220::,2a03:3220:ffff:ffff:ffff:ffff:ffff:ffff,FI
2a03:3240::,2a03:3240:ffff:ffff:ffff:ffff:ffff:ffff,UZ
@@ -18709,8 +20094,7 @@
2a03:4600::,2a03:4600:ffff:ffff:ffff:ffff:ffff:ffff,FR
2a03:4620::,2a03:4620:ffff:ffff:ffff:ffff:ffff:ffff,PL
2a03:4640::,2a03:4640:ffff:ffff:ffff:ffff:ffff:ffff,GB
-2a03:4660::,2a03:4660:ffff:ffff:ffff:ffff:ffff:ffff,FR
-2a03:4680::,2a03:4680:ffff:ffff:ffff:ffff:ffff:ffff,IR
+2a03:4680::,2a03:4687:ffff:ffff:ffff:ffff:ffff:ffff,IR
2a03:46a0::,2a03:46a0:ffff:ffff:ffff:ffff:ffff:ffff,BG
2a03:46c0::,2a03:46c0:ffff:ffff:ffff:ffff:ffff:ffff,DK
2a03:46e0::,2a03:46e0:ffff:ffff:ffff:ffff:ffff:ffff,UZ
@@ -18746,11 +20130,8 @@
2a03:4b00::,2a03:4b00:ffff:ffff:ffff:ffff:ffff:ffff,PL
2a03:4b20::,2a03:4b20:ffff:ffff:ffff:ffff:ffff:ffff,DE
2a03:4b40::,2a03:4b40:ffff:ffff:ffff:ffff:ffff:ffff,IQ
-2a03:4b60::,2a03:4b60:ffff:ffff:ffff:ffff:ffff:ffff,RU
2a03:4b80::,2a03:4b80:ffff:ffff:ffff:ffff:ffff:ffff,AL
-2a03:4ba0::,2a03:4ba0:ffff:ffff:ffff:ffff:ffff:ffff,RU
2a03:4bc0::,2a03:4bc0:ffff:ffff:ffff:ffff:ffff:ffff,SE
-2a03:4be0::,2a03:4be0:ffff:ffff:ffff:ffff:ffff:ffff,RU
2a03:4c00::,2a03:4c07:ffff:ffff:ffff:ffff:ffff:ffff,FR
2a03:4c40::,2a03:4c40:ffff:ffff:ffff:ffff:ffff:ffff,AT
2a03:4c60::,2a03:4c60:ffff:ffff:ffff:ffff:ffff:ffff,GB
@@ -18763,256 +20144,491 @@
2a03:4d40::,2a03:4d40:ffff:ffff:ffff:ffff:ffff:ffff,DE
2a03:4d60::,2a03:4d60:ffff:ffff:ffff:ffff:ffff:ffff,NL
2a03:4d80::,2a03:4d80:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a03:4da0::,2a03:4da0:ffff:ffff:ffff:ffff:ffff:ffff,RU
2a03:4dc0::,2a03:4dc0:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a03:4de0::,2a03:4de0:ffff:ffff:ffff:ffff:ffff:ffff,FR
2a03:4e00::,2a03:4e00:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a03:4e20::,2a03:4e20:ffff:ffff:ffff:ffff:ffff:ffff,NL
2a03:4e40::,2a03:4e40:ffff:ffff:ffff:ffff:ffff:ffff,AT
+2a03:4e60::,2a03:4e60:ffff:ffff:ffff:ffff:ffff:ffff,CZ
2a03:4e80::,2a03:4e80:ffff:ffff:ffff:ffff:ffff:ffff,GE
+2a03:4ea0::,2a03:4ea0:ffff:ffff:ffff:ffff:ffff:ffff,GB
2a03:4ec0::,2a03:4ec0:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a03:4ee0::,2a03:4ee0:ffff:ffff:ffff:ffff:ffff:ffff,IT
2a03:4f00::,2a03:4f00:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a03:4f20::,2a03:4f20:ffff:ffff:ffff:ffff:ffff:ffff,SE
2a03:4f40::,2a03:4f40:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a03:4f60::,2a03:4f60:ffff:ffff:ffff:ffff:ffff:ffff,NL
2a03:4f80::,2a03:4f80:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a03:4fa0::,2a03:4fa0:ffff:ffff:ffff:ffff:ffff:ffff,TR
2a03:5000::,2a03:5000:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a03:5020::,2a03:5020:ffff:ffff:ffff:ffff:ffff:ffff,DE
2a03:5040::,2a03:5040:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a03:5060::,2a03:5060:ffff:ffff:ffff:ffff:ffff:ffff,RU
2a03:5080::,2a03:5080:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a03:50a0::,2a03:50a0:ffff:ffff:ffff:ffff:ffff:ffff,FI
2a03:50c0::,2a03:50c0:ffff:ffff:ffff:ffff:ffff:ffff,GI
+2a03:50e0::,2a03:50e0:ffff:ffff:ffff:ffff:ffff:ffff,MT
2a03:5100::,2a03:5100:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a03:5120::,2a03:5120:ffff:ffff:ffff:ffff:ffff:ffff,CH
2a03:5140::,2a03:5140:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a03:5160::,2a03:5160:ffff:ffff:ffff:ffff:ffff:ffff,TR
2a03:5180::,2a03:5180:ffff:ffff:ffff:ffff:ffff:ffff,RO
+2a03:51a0::,2a03:51a0:ffff:ffff:ffff:ffff:ffff:ffff,RU
2a03:51c0::,2a03:51c0:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a03:51e0::,2a03:51e0:ffff:ffff:ffff:ffff:ffff:ffff,RU
2a03:5200::,2a03:5200:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a03:5220::,2a03:5220:ffff:ffff:ffff:ffff:ffff:ffff,GR
2a03:5240::,2a03:5240:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a03:5260::,2a03:5260:ffff:ffff:ffff:ffff:ffff:ffff,LI
2a03:5280::,2a03:5280:ffff:ffff:ffff:ffff:ffff:ffff,AT
2a03:52c0::,2a03:52c0:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a03:52e0::,2a03:52e0:ffff:ffff:ffff:ffff:ffff:ffff,IT
2a03:5300::,2a03:5307:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a03:5360::,2a03:5360:ffff:ffff:ffff:ffff:ffff:ffff,LI
2a03:5380::,2a03:5380:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a03:53a0::,2a03:53a0:ffff:ffff:ffff:ffff:ffff:ffff,CH
2a03:53c0::,2a03:53c0:ffff:ffff:ffff:ffff:ffff:ffff,DK
+2a03:53e0::,2a03:53e0:ffff:ffff:ffff:ffff:ffff:ffff,UA
2a03:5400::,2a03:5400:ffff:ffff:ffff:ffff:ffff:ffff,BE
+2a03:5420::,2a03:5420:ffff:ffff:ffff:ffff:ffff:ffff,GB
2a03:5440::,2a03:5440:ffff:ffff:ffff:ffff:ffff:ffff,DK
+2a03:5460::,2a03:5460:ffff:ffff:ffff:ffff:ffff:ffff,GB
2a03:5480::,2a03:5480:ffff:ffff:ffff:ffff:ffff:ffff,LI
2a03:54c0::,2a03:54c0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a03:54e0::,2a03:54e0:ffff:ffff:ffff:ffff:ffff:ffff,AT
2a03:5500::,2a03:5501:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a03:5520::,2a03:5520:ffff:ffff:ffff:ffff:ffff:ffff,CH
2a03:5540::,2a03:5540:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a03:5560::,2a03:5560:ffff:ffff:ffff:ffff:ffff:ffff,ES
2a03:5580::,2a03:5587:ffff:ffff:ffff:ffff:ffff:ffff,NO
-2a03:55c0::,2a03:55c0:ffff:ffff:ffff:ffff:ffff:ffff,BE
2a03:5600::,2a03:5600:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a03:5620::,2a03:5620:ffff:ffff:ffff:ffff:ffff:ffff,AM
2a03:5640::,2a03:5640:ffff:ffff:ffff:ffff:ffff:ffff,LU
2a03:5680::,2a03:5680:ffff:ffff:ffff:ffff:ffff:ffff,DE
2a03:56c0::,2a03:56c0:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a03:56e0::,2a03:56e0:ffff:ffff:ffff:ffff:ffff:ffff,BG
2a03:5700::,2a03:5700:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a03:5720::,2a03:5720:ffff:ffff:ffff:ffff:ffff:ffff,GB
2a03:5740::,2a03:5740:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a03:5760::,2a03:5760:ffff:ffff:ffff:ffff:ffff:ffff,FR
2a03:5780::,2a03:5780:ffff:ffff:ffff:ffff:ffff:ffff,KW
+2a03:57a0::,2a03:57a0:ffff:ffff:ffff:ffff:ffff:ffff,RU
2a03:57c0::,2a03:57c0:ffff:ffff:ffff:ffff:ffff:ffff,IR
+2a03:57e0::,2a03:57e0:ffff:ffff:ffff:ffff:ffff:ffff,DE
2a03:5800::,2a03:5800:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a03:5820::,2a03:5820:ffff:ffff:ffff:ffff:ffff:ffff,EE
2a03:5840::,2a03:5840:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a03:5860::,2a03:5860:ffff:ffff:ffff:ffff:ffff:ffff,PL
2a03:5880::,2a03:5880:ffff:ffff:ffff:ffff:ffff:ffff,EE
+2a03:58a0::,2a03:58a0:ffff:ffff:ffff:ffff:ffff:ffff,NL
2a03:58c0::,2a03:58c0:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a03:58e0::,2a03:58e0:ffff:ffff:ffff:ffff:ffff:ffff,PL
2a03:5900::,2a03:5907:ffff:ffff:ffff:ffff:ffff:ffff,LB
2a03:5940::,2a03:5940:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a03:5960::,2a03:5960:ffff:ffff:ffff:ffff:ffff:ffff,FR
2a03:5980::,2a03:5980:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a03:59a0::,2a03:59a0:ffff:ffff:ffff:ffff:ffff:ffff,SE
2a03:59c0::,2a03:59c0:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a03:59e0::,2a03:59e0:ffff:ffff:ffff:ffff:ffff:ffff,CH
2a03:5a00::,2a03:5a07:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a03:5a60::,2a03:5a60:ffff:ffff:ffff:ffff:ffff:ffff,RU
2a03:5a80::,2a03:5a80:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a03:5aa0::,2a03:5aa0:ffff:ffff:ffff:ffff:ffff:ffff,ES
2a03:5ac0::,2a03:5ac0:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a03:5ae0::,2a03:5ae0:ffff:ffff:ffff:ffff:ffff:ffff,HU
2a03:5b00::,2a03:5b00:ffff:ffff:ffff:ffff:ffff:ffff,TR
+2a03:5b20::,2a03:5b20:ffff:ffff:ffff:ffff:ffff:ffff,RE
2a03:5b40::,2a03:5b40:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a03:5b60::,2a03:5b60:ffff:ffff:ffff:ffff:ffff:ffff,NL
2a03:5b80::,2a03:5b80:ffff:ffff:ffff:ffff:ffff:ffff,RU
2a03:5bc0::,2a03:5bc0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a03:5be0::,2a03:5be0:ffff:ffff:ffff:ffff:ffff:ffff,BY
2a03:5c00::,2a03:5c00:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a03:5c20::,2a03:5c20:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a03:5c60::,2a03:5c60:ffff:ffff:ffff:ffff:ffff:ffff,DE
2a03:5c80::,2a03:5c80:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a03:5ca0::,2a03:5ca0:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a03:5ce0::,2a03:5ce0:ffff:ffff:ffff:ffff:ffff:ffff,BG
2a03:5d00::,2a03:5d07:ffff:ffff:ffff:ffff:ffff:ffff,TR
2a03:5d40::,2a03:5d40:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a03:5d60::,2a03:5d60:ffff:ffff:ffff:ffff:ffff:ffff,GB
2a03:5d80::,2a03:5d80:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a03:5da0::,2a03:5da0:ffff:ffff:ffff:ffff:ffff:ffff,GR
2a03:5dc0::,2a03:5dc0:ffff:ffff:ffff:ffff:ffff:ffff,UA
+2a03:5de0::,2a03:5de0:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a03:5e20::,2a03:5e20:ffff:ffff:ffff:ffff:ffff:ffff,CH
2a03:5e40::,2a03:5e40:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a03:5e60::,2a03:5e60:ffff:ffff:ffff:ffff:ffff:ffff,ES
2a03:5e80::,2a03:5e80:ffff:ffff:ffff:ffff:ffff:ffff,RO
+2a03:5ea0::,2a03:5ea0:ffff:ffff:ffff:ffff:ffff:ffff,RU
2a03:5ec0::,2a03:5ec0:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a03:5ee0::,2a03:5ee0:ffff:ffff:ffff:ffff:ffff:ffff,DE
2a03:5f00::,2a03:5f00:ffff:ffff:ffff:ffff:ffff:ffff,IE
+2a03:5f20::,2a03:5f20:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a03:5f60::,2a03:5f60:ffff:ffff:ffff:ffff:ffff:ffff,HU
2a03:5f80::,2a03:5f80:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a03:5fa0::,2a03:5fa0:ffff:ffff:ffff:ffff:ffff:ffff,NL
2a03:5fc0::,2a03:5fc0:ffff:ffff:ffff:ffff:ffff:ffff,FI
+2a03:5fe0::,2a03:5fe0:ffff:ffff:ffff:ffff:ffff:ffff,RS
2a03:6000::,2a03:6000:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a03:6020::,2a03:6020:ffff:ffff:ffff:ffff:ffff:ffff,AZ
2a03:6040::,2a03:6040:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a03:6060::,2a03:6060:ffff:ffff:ffff:ffff:ffff:ffff,GB
2a03:6080::,2a03:6087:ffff:ffff:ffff:ffff:ffff:ffff,RU
2a03:60c0::,2a03:60c0:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a03:60e0::,2a03:60e0:ffff:ffff:ffff:ffff:ffff:ffff,RU
2a03:6100::,2a03:6100:ffff:ffff:ffff:ffff:ffff:ffff,HR
+2a03:6120::,2a03:6120:ffff:ffff:ffff:ffff:ffff:ffff,UA
2a03:6140::,2a03:6140:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a03:6160::,2a03:6160:ffff:ffff:ffff:ffff:ffff:ffff,AZ
2a03:6180::,2a03:6180:ffff:ffff:ffff:ffff:ffff:ffff,NO
+2a03:61a0::,2a03:61a0:ffff:ffff:ffff:ffff:ffff:ffff,RU
2a03:61c0::,2a03:61c0:ffff:ffff:ffff:ffff:ffff:ffff,GB
2a03:6200::,2a03:6200:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a03:6220::,2a03:6220:ffff:ffff:ffff:ffff:ffff:ffff,HR
2a03:6240::,2a03:6240:ffff:ffff:ffff:ffff:ffff:ffff,NO
+2a03:6260::,2a03:6260:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a03:62a0::,2a03:62a0:ffff:ffff:ffff:ffff:ffff:ffff,AU
2a03:62c0::,2a03:62c0:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a03:62e0::,2a03:62e0:ffff:ffff:ffff:ffff:ffff:ffff,DE
2a03:6300::,2a03:6300:ffff:ffff:ffff:ffff:ffff:ffff,UA
2a03:6340::,2a03:6340:ffff:ffff:ffff:ffff:ffff:ffff,KZ
2a03:6380::,2a03:6380:ffff:ffff:ffff:ffff:ffff:ffff,SK
+2a03:63a0::,2a03:63a7:ffff:ffff:ffff:ffff:ffff:ffff,SE
2a03:63c0::,2a03:63c0:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a03:63e0::,2a03:63e0:ffff:ffff:ffff:ffff:ffff:ffff,PL
2a03:6400::,2a03:6400:ffff:ffff:ffff:ffff:ffff:ffff,GB
2a03:6440::,2a03:6440:ffff:ffff:ffff:ffff:ffff:ffff,GB
2a03:6480::,2a03:6480:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a03:64a0::,2a03:64a0:ffff:ffff:ffff:ffff:ffff:ffff,ES
2a03:64c0::,2a03:64c0:ffff:ffff:ffff:ffff:ffff:ffff,UA
2a03:6500::,2a03:6500:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a03:6520::,2a03:6520:ffff:ffff:ffff:ffff:ffff:ffff,ES
2a03:6540::,2a03:6540:ffff:ffff:ffff:ffff:ffff:ffff,UA
+2a03:6560::,2a03:6560:ffff:ffff:ffff:ffff:ffff:ffff,FR
2a03:6580::,2a03:6580:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a03:65a0::,2a03:65a0:ffff:ffff:ffff:ffff:ffff:ffff,ES
2a03:65c0::,2a03:65c0:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a03:65e0::,2a03:65e0:ffff:ffff:ffff:ffff:ffff:ffff,AT
2a03:6600::,2a03:6600:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a03:6620::,2a03:6620:ffff:ffff:ffff:ffff:ffff:ffff,IT
2a03:6640::,2a03:6640:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a03:6660::,2a03:6660:ffff:ffff:ffff:ffff:ffff:ffff,RU
2a03:6680::,2a03:6680:ffff:ffff:ffff:ffff:ffff:ffff,IR
+2a03:66a0::,2a03:66a0:ffff:ffff:ffff:ffff:ffff:ffff,DE
2a03:66c0::,2a03:66c0:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a03:66e0::,2a03:66e0:ffff:ffff:ffff:ffff:ffff:ffff,DK
2a03:6700::,2a03:6707:ffff:ffff:ffff:ffff:ffff:ffff,KW
2a03:6740::,2a03:6740:ffff:ffff:ffff:ffff:ffff:ffff,LV
+2a03:6760::,2a03:6760:ffff:ffff:ffff:ffff:ffff:ffff,DE
2a03:6780::,2a03:6780:ffff:ffff:ffff:ffff:ffff:ffff,NO
+2a03:67a0::,2a03:67a0:ffff:ffff:ffff:ffff:ffff:ffff,ES
2a03:67c0::,2a03:67c0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a03:67e0::,2a03:67e0:ffff:ffff:ffff:ffff:ffff:ffff,LT
2a03:6800::,2a03:6800:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a03:6820::,2a03:6820:ffff:ffff:ffff:ffff:ffff:ffff,NL
2a03:6840::,2a03:6840:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a03:6860::,2a03:6860:ffff:ffff:ffff:ffff:ffff:ffff,BE
2a03:6880::,2a03:6880:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a03:68a0::,2a03:68a0:ffff:ffff:ffff:ffff:ffff:ffff,BE
2a03:68c0::,2a03:68c0:ffff:ffff:ffff:ffff:ffff:ffff,CY
+2a03:68e0::,2a03:68e0:ffff:ffff:ffff:ffff:ffff:ffff,FR
2a03:6900::,2a03:6900:ffff:ffff:ffff:ffff:ffff:ffff,LB
+2a03:6920::,2a03:6920:ffff:ffff:ffff:ffff:ffff:ffff,CZ
2a03:6940::,2a03:6940:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a03:6960::,2a03:6960:ffff:ffff:ffff:ffff:ffff:ffff,DK
2a03:6980::,2a03:6980:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a03:69a0::,2a03:69a0:ffff:ffff:ffff:ffff:ffff:ffff,RU
2a03:69c0::,2a03:69c0:ffff:ffff:ffff:ffff:ffff:ffff,FR
-2a03:6a00::,2a03:6a00:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a03:69e0::,2a03:69e0:ffff:ffff:ffff:ffff:ffff:ffff,UA
+2a03:6a00::,2a03:6a07:ffff:ffff:ffff:ffff:ffff:ffff,GB
2a03:6a40::,2a03:6a40:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a03:6a60::,2a03:6a60:ffff:ffff:ffff:ffff:ffff:ffff,GB
2a03:6a80::,2a03:6a80:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a03:6aa0::,2a03:6aa0:ffff:ffff:ffff:ffff:ffff:ffff,NO
2a03:6ac0::,2a03:6ac0:ffff:ffff:ffff:ffff:ffff:ffff,IQ
+2a03:6ae0::,2a03:6ae0:ffff:ffff:ffff:ffff:ffff:ffff,IR
2a03:6b00::,2a03:6b00:ffff:ffff:ffff:ffff:ffff:ffff,JO
+2a03:6b20::,2a03:6b20:ffff:ffff:ffff:ffff:ffff:ffff,DE
2a03:6b40::,2a03:6b40:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a03:6b60::,2a03:6b60:ffff:ffff:ffff:ffff:ffff:ffff,PL
2a03:6b80::,2a03:6b80:ffff:ffff:ffff:ffff:ffff:ffff,SE
-2a03:6bc0::,2a03:6bc7:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a03:6ba0::,2a03:6ba0:ffff:ffff:ffff:ffff:ffff:ffff,DE
2a03:6c00::,2a03:6c00:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a03:6c20::,2a03:6c20:ffff:ffff:ffff:ffff:ffff:ffff,DE
2a03:6c40::,2a03:6c40:ffff:ffff:ffff:ffff:ffff:ffff,TR
+2a03:6c60::,2a03:6c60:ffff:ffff:ffff:ffff:ffff:ffff,GB
2a03:6c80::,2a03:6c80:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a03:6ca0::,2a03:6ca0:ffff:ffff:ffff:ffff:ffff:ffff,ES
2a03:6cc0::,2a03:6cc0:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a03:6ce0::,2a03:6ce0:ffff:ffff:ffff:ffff:ffff:ffff,GB
2a03:6d00::,2a03:6d00:ffff:ffff:ffff:ffff:ffff:ffff,JO
+2a03:6d20::,2a03:6d20:ffff:ffff:ffff:ffff:ffff:ffff,FR
2a03:6d40::,2a03:6d40:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a03:6d60::,2a03:6d60:ffff:ffff:ffff:ffff:ffff:ffff,IR
2a03:6d80::,2a03:6d80:ffff:ffff:ffff:ffff:ffff:ffff,BE
+2a03:6da0::,2a03:6da0:ffff:ffff:ffff:ffff:ffff:ffff,IR
2a03:6dc0::,2a03:6dc0:ffff:ffff:ffff:ffff:ffff:ffff,IQ
+2a03:6de0::,2a03:6de0:ffff:ffff:ffff:ffff:ffff:ffff,FR
2a03:6e00::,2a03:6e00:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a03:6e20::,2a03:6e20:ffff:ffff:ffff:ffff:ffff:ffff,ES
2a03:6e40::,2a03:6e40:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a03:6e60::,2a03:6e60:ffff:ffff:ffff:ffff:ffff:ffff,IE
2a03:6e80::,2a03:6e80:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a03:6ea0::,2a03:6ea0:ffff:ffff:ffff:ffff:ffff:ffff,CZ
2a03:6ec0::,2a03:6ec0:ffff:ffff:ffff:ffff:ffff:ffff,HU
+2a03:6ee0::,2a03:6ee0:ffff:ffff:ffff:ffff:ffff:ffff,DE
2a03:6f00::,2a03:6f00:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a03:6f20::,2a03:6f20:ffff:ffff:ffff:ffff:ffff:ffff,SE
2a03:6f40::,2a03:6f40:ffff:ffff:ffff:ffff:ffff:ffff,FI
+2a03:6f60::,2a03:6f60:ffff:ffff:ffff:ffff:ffff:ffff,BE
2a03:6f80::,2a03:6f87:ffff:ffff:ffff:ffff:ffff:ffff,FR
2a03:6fc0::,2a03:6fc0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a03:6fe0::,2a03:6fe0:ffff:ffff:ffff:ffff:ffff:ffff,RO
2a03:7000::,2a03:7000:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a03:7020::,2a03:7020:ffff:ffff:ffff:ffff:ffff:ffff,IQ
2a03:7040::,2a03:7040:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a03:7060::,2a03:7060:ffff:ffff:ffff:ffff:ffff:ffff,LB
2a03:7080::,2a03:7080:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a03:70a0::,2a03:70a0:ffff:ffff:ffff:ffff:ffff:ffff,FI
2a03:70c0::,2a03:70c0:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a03:70e0::,2a03:70e0:ffff:ffff:ffff:ffff:ffff:ffff,DE
2a03:7100::,2a03:7100:ffff:ffff:ffff:ffff:ffff:ffff,IE
+2a03:7120::,2a03:7120:ffff:ffff:ffff:ffff:ffff:ffff,ES
2a03:7140::,2a03:7140:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a03:7160::,2a03:7160:ffff:ffff:ffff:ffff:ffff:ffff,BA
2a03:7180::,2a03:7180:ffff:ffff:ffff:ffff:ffff:ffff,GR
+2a03:71a0::,2a03:71a0:ffff:ffff:ffff:ffff:ffff:ffff,UA
2a03:71c0::,2a03:71c0:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a03:71e0::,2a03:71e0:ffff:ffff:ffff:ffff:ffff:ffff,NL
2a03:7200::,2a03:7200:ffff:ffff:ffff:ffff:ffff:ffff,RU
2a03:7240::,2a03:7240:ffff:ffff:ffff:ffff:ffff:ffff,CZ
2a03:7280::,2a03:7280:ffff:ffff:ffff:ffff:ffff:ffff,FR
2a03:72c0::,2a03:72c0:ffff:ffff:ffff:ffff:ffff:ffff,GB
2a03:7300::,2a03:7300:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a03:7320::,2a03:7320:ffff:ffff:ffff:ffff:ffff:ffff,RU
2a03:7340::,2a03:7340:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a03:7360::,2a03:7367:ffff:ffff:ffff:ffff:ffff:ffff,SE
2a03:7380::,2a03:7380:ffff:ffff:ffff:ffff:ffff:ffff,UA
+2a03:73a0::,2a03:73a0:ffff:ffff:ffff:ffff:ffff:ffff,NL
2a03:73c0::,2a03:73c0:ffff:ffff:ffff:ffff:ffff:ffff,PT
+2a03:73e0::,2a03:73e0:ffff:ffff:ffff:ffff:ffff:ffff,RU
2a03:7400::,2a03:7400:ffff:ffff:ffff:ffff:ffff:ffff,DK
+2a03:7420::,2a03:7420:ffff:ffff:ffff:ffff:ffff:ffff,RO
2a03:7440::,2a03:7440:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a03:7460::,2a03:7460:ffff:ffff:ffff:ffff:ffff:ffff,CZ
2a03:7480::,2a03:7480:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a03:74a0::,2a03:74a0:ffff:ffff:ffff:ffff:ffff:ffff,IR
2a03:74c0::,2a03:74c0:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a03:74e0::,2a03:74e0:ffff:ffff:ffff:ffff:ffff:ffff,IS
2a03:7500::,2a03:7500:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a03:7520::,2a03:7520:ffff:ffff:ffff:ffff:ffff:ffff,CH
2a03:7540::,2a03:7540:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a03:7560::,2a03:7560:ffff:ffff:ffff:ffff:ffff:ffff,PS
2a03:7580::,2a03:7580:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a03:75a0::,2a03:75a0:ffff:ffff:ffff:ffff:ffff:ffff,CH
2a03:75c0::,2a03:75c0:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a03:75e0::,2a03:75e0:ffff:ffff:ffff:ffff:ffff:ffff,MT
+2a03:7620::,2a03:7620:ffff:ffff:ffff:ffff:ffff:ffff,RU
2a03:7640::,2a03:7640:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a03:7660::,2a03:7660:ffff:ffff:ffff:ffff:ffff:ffff,AT
2a03:7680::,2a03:7680:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a03:76a0::,2a03:76a0:ffff:ffff:ffff:ffff:ffff:ffff,GB
2a03:76c0::,2a03:76c0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a03:76e0::,2a03:76e0:ffff:ffff:ffff:ffff:ffff:ffff,CZ
2a03:7700::,2a03:7700:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a03:7720::,2a03:7720:ffff:ffff:ffff:ffff:ffff:ffff,UA
2a03:7740::,2a03:7740:ffff:ffff:ffff:ffff:ffff:ffff,AZ
+2a03:7760::,2a03:7760:ffff:ffff:ffff:ffff:ffff:ffff,TR
2a03:7780::,2a03:7780:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a03:77a0::,2a03:77a0:ffff:ffff:ffff:ffff:ffff:ffff,FR
2a03:77c0::,2a03:77c0:ffff:ffff:ffff:ffff:ffff:ffff,SA
+2a03:77e0::,2a03:77e0:ffff:ffff:ffff:ffff:ffff:ffff,GB
2a03:7800::,2a03:7800:ffff:ffff:ffff:ffff:ffff:ffff,FI
+2a03:7820::,2a03:7820:ffff:ffff:ffff:ffff:ffff:ffff,LV
2a03:7840::,2a03:7840:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a03:7860::,2a03:7860:ffff:ffff:ffff:ffff:ffff:ffff,BE
2a03:7880::,2a03:7880:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a03:78a0::,2a03:78a0:ffff:ffff:ffff:ffff:ffff:ffff,AT
+2a03:78e0::,2a03:78e0:ffff:ffff:ffff:ffff:ffff:ffff,FR
2a03:7900::,2a03:7900:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a03:7920::,2a03:7920:ffff:ffff:ffff:ffff:ffff:ffff,LB
2a03:7940::,2a03:7940:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a03:7960::,2a03:7960:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a03:79a0::,2a03:79a0:ffff:ffff:ffff:ffff:ffff:ffff,RU
2a03:79c0::,2a03:79c0:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a03:79e0::,2a03:79e0:ffff:ffff:ffff:ffff:ffff:ffff,NL
2a03:7a00::,2a03:7a00:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a03:7a20::,2a03:7a20:ffff:ffff:ffff:ffff:ffff:ffff,NL
2a03:7a40::,2a03:7a40:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a03:7a60::,2a03:7a60:ffff:ffff:ffff:ffff:ffff:ffff,NL
2a03:7a80::,2a03:7a80:ffff:ffff:ffff:ffff:ffff:ffff,LV
+2a03:7aa0::,2a03:7aa0:ffff:ffff:ffff:ffff:ffff:ffff,IM
+2a03:7ae0::,2a03:7ae0:ffff:ffff:ffff:ffff:ffff:ffff,DE
2a03:7b00::,2a03:7b00:ffff:ffff:ffff:ffff:ffff:ffff,TR
+2a03:7b20::,2a03:7b20:ffff:ffff:ffff:ffff:ffff:ffff,KZ
2a03:7b40::,2a03:7b40:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a03:7b60::,2a03:7b60:ffff:ffff:ffff:ffff:ffff:ffff,IL
2a03:7b80::,2a03:7b80:ffff:ffff:ffff:ffff:ffff:ffff,FI
+2a03:7ba0::,2a03:7ba0:ffff:ffff:ffff:ffff:ffff:ffff,CZ
2a03:7bc0::,2a03:7bc0:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a03:7be0::,2a03:7be0:ffff:ffff:ffff:ffff:ffff:ffff,PL
2a03:7c00::,2a03:7c00:ffff:ffff:ffff:ffff:ffff:ffff,FI
+2a03:7c20::,2a03:7c20:ffff:ffff:ffff:ffff:ffff:ffff,RU
2a03:7c40::,2a03:7c40:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a03:7c60::,2a03:7c60:ffff:ffff:ffff:ffff:ffff:ffff,EE
2a03:7c80::,2a03:7c80:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a03:7ca0::,2a03:7ca0:ffff:ffff:ffff:ffff:ffff:ffff,RU
2a03:7cc0::,2a03:7cc0:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a03:7ce0::,2a03:7ce0:ffff:ffff:ffff:ffff:ffff:ffff,ES
2a03:7d00::,2a03:7d00:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a03:7d20::,2a03:7d20:ffff:ffff:ffff:ffff:ffff:ffff,TR
2a03:7d40::,2a03:7d40:ffff:ffff:ffff:ffff:ffff:ffff,IE
+2a03:7d60::,2a03:7d60:ffff:ffff:ffff:ffff:ffff:ffff,IQ
+2a03:7da0::,2a03:7da0:ffff:ffff:ffff:ffff:ffff:ffff,RU
2a03:7dc0::,2a03:7dc0:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a03:7de0::,2a03:7de0:ffff:ffff:ffff:ffff:ffff:ffff,BE
2a03:7e00::,2a03:7e00:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a03:7e20::,2a03:7e20:ffff:ffff:ffff:ffff:ffff:ffff,NL
2a03:7e40::,2a03:7e40:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a03:7e60::,2a03:7e60:ffff:ffff:ffff:ffff:ffff:ffff,PS
2a03:7e80::,2a03:7e80:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a03:7ea0::,2a03:7ea0:ffff:ffff:ffff:ffff:ffff:ffff,CH
2a03:7ec0::,2a03:7ec0:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a03:7ee0::,2a03:7ee0:ffff:ffff:ffff:ffff:ffff:ffff,IR
2a03:7f00::,2a03:7f00:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a03:7f20::,2a03:7f20:ffff:ffff:ffff:ffff:ffff:ffff,SE
2a03:7f40::,2a03:7f40:ffff:ffff:ffff:ffff:ffff:ffff,BG
+2a03:7f60::,2a03:7f60:ffff:ffff:ffff:ffff:ffff:ffff,RU
2a03:7f80::,2a03:7f80:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a03:7fa0::,2a03:7fa0:ffff:ffff:ffff:ffff:ffff:ffff,FR
2a03:7fc0::,2a03:7fc0:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a03:7fe0::,2a03:7fe0:ffff:ffff:ffff:ffff:ffff:ffff,IT
2a03:8000::,2a03:8000:ffff:ffff:ffff:ffff:ffff:ffff,NO
+2a03:8020::,2a03:8020:ffff:ffff:ffff:ffff:ffff:ffff,IT
2a03:8040::,2a03:8040:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a03:8060::,2a03:8060:ffff:ffff:ffff:ffff:ffff:ffff,RU
2a03:8080::,2a03:8080:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a03:80a0::,2a03:80a0:ffff:ffff:ffff:ffff:ffff:ffff,NL
2a03:80c0::,2a03:80c0:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a03:80e0::,2a03:80e0:ffff:ffff:ffff:ffff:ffff:ffff,GB
2a03:8100::,2a03:8100:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a03:8120::,2a03:8120:ffff:ffff:ffff:ffff:ffff:ffff,NO
2a03:8140::,2a03:8140:ffff:ffff:ffff:ffff:ffff:ffff,GB
-2a03:8180::,2a03:8180:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a03:8160::,2a03:8160:ffff:ffff:ffff:ffff:ffff:ffff,US
+2a03:8180::,2a03:8180:1100:ffff:ffff:ffff:ffff:ffff,NL
+2a03:8180:1101::,2a03:8180:1101:ffff:ffff:ffff:ffff:ffff,GB
+2a03:8180:1102::,2a03:8180:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a03:81a0::,2a03:81a0:ffff:ffff:ffff:ffff:ffff:ffff,ES
2a03:81c0::,2a03:81c0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a03:81e0::,2a03:81e0:ffff:ffff:ffff:ffff:ffff:ffff,TR
2a03:8200::,2a03:8200:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a03:8220::,2a03:8220:ffff:ffff:ffff:ffff:ffff:ffff,NO
2a03:8240::,2a03:8240:ffff:ffff:ffff:ffff:ffff:ffff,TR
+2a03:8260::,2a03:8260:ffff:ffff:ffff:ffff:ffff:ffff,IE
2a03:8280::,2a03:8280:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a03:82a0::,2a03:82a0:ffff:ffff:ffff:ffff:ffff:ffff,AT
2a03:82c0::,2a03:82c0:ffff:ffff:ffff:ffff:ffff:ffff,BG
-2a03:8300::,2a03:8300:ffff:ffff:ffff:ffff:ffff:ffff,TR
+2a03:82e0::,2a03:82e0:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a03:8320::,2a03:8320:ffff:ffff:ffff:ffff:ffff:ffff,CZ
2a03:8340::,2a03:8340:ffff:ffff:ffff:ffff:ffff:ffff,BG
+2a03:8360::,2a03:8360:ffff:ffff:ffff:ffff:ffff:ffff,FR
2a03:8380::,2a03:8380:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a03:83a0::,2a03:83a0:ffff:ffff:ffff:ffff:ffff:ffff,GB
2a03:83c0::,2a03:83c0:ffff:ffff:ffff:ffff:ffff:ffff,BG
+2a03:83e0::,2a03:83e0:ffff:ffff:ffff:ffff:ffff:ffff,GB
2a03:8400::,2a03:8400:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a03:8420::,2a03:8420:ffff:ffff:ffff:ffff:ffff:ffff,FR
2a03:8440::,2a03:8440:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a03:8460::,2a03:8460:ffff:ffff:ffff:ffff:ffff:ffff,DE
2a03:8480::,2a03:8480:ffff:ffff:ffff:ffff:ffff:ffff,AL
+2a03:84a0::,2a03:84a0:ffff:ffff:ffff:ffff:ffff:ffff,DE
2a03:84c0::,2a03:84c0:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a03:84e0::,2a03:84e0:ffff:ffff:ffff:ffff:ffff:ffff,PT
2a03:8500::,2a03:8500:ffff:ffff:ffff:ffff:ffff:ffff,UA
+2a03:8520::,2a03:8520:ffff:ffff:ffff:ffff:ffff:ffff,GB
2a03:8540::,2a03:8540:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a03:8560::,2a03:8560:ffff:ffff:ffff:ffff:ffff:ffff,BE
2a03:8580::,2a03:8580:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a03:85a0::,2a03:85a0:ffff:ffff:ffff:ffff:ffff:ffff,TR
2a03:85c0::,2a03:85c7:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a03:85e0::,2a03:85e0:ffff:ffff:ffff:ffff:ffff:ffff,ES
2a03:8600::,2a03:8600:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a03:8620::,2a03:8620:ffff:ffff:ffff:ffff:ffff:ffff,CH
2a03:8640::,2a03:8640:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a03:8660::,2a03:8660:ffff:ffff:ffff:ffff:ffff:ffff,IT
2a03:8680::,2a03:8680:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a03:86a0::,2a03:86a0:ffff:ffff:ffff:ffff:ffff:ffff,GB
2a03:86c0::,2a03:86c0:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a03:86e0::,2a03:86e0:ffff:ffff:ffff:ffff:ffff:ffff,IT
2a03:8700::,2a03:8700:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a03:8720::,2a03:8720:ffff:ffff:ffff:ffff:ffff:ffff,DK
2a03:8740::,2a03:8740:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a03:8760::,2a03:8760:ffff:ffff:ffff:ffff:ffff:ffff,LB
2a03:8780::,2a03:8780:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a03:87a0::,2a03:87a0:ffff:ffff:ffff:ffff:ffff:ffff,PS
2a03:87c0::,2a03:87c0:ffff:ffff:ffff:ffff:ffff:ffff,RS
+2a03:87e0::,2a03:87e0:ffff:ffff:ffff:ffff:ffff:ffff,GB
2a03:8800::,2a03:8800:ffff:ffff:ffff:ffff:ffff:ffff,RO
+2a03:8820::,2a03:8820:ffff:ffff:ffff:ffff:ffff:ffff,MT
2a03:8840::,2a03:8840:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a03:8860::,2a03:8860:ffff:ffff:ffff:ffff:ffff:ffff,DE
2a03:8880::,2a03:8880:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a03:88a0::,2a03:88a0:ffff:ffff:ffff:ffff:ffff:ffff,GB
2a03:88c0::,2a03:88c0:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a03:88e0::,2a03:88e0:ffff:ffff:ffff:ffff:ffff:ffff,GB
2a03:8900::,2a03:8900:ffff:ffff:ffff:ffff:ffff:ffff,IE
+2a03:8920::,2a03:8920:ffff:ffff:ffff:ffff:ffff:ffff,GB
2a03:8940::,2a03:8940:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a03:8960::,2a03:8960:ffff:ffff:ffff:ffff:ffff:ffff,BA
2a03:8980::,2a03:8980:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a03:89a0::,2a03:89a0:ffff:ffff:ffff:ffff:ffff:ffff,SK
2a03:89c0::,2a03:89c0:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a03:89e0::,2a03:89e0:ffff:ffff:ffff:ffff:ffff:ffff,FR
2a03:8a00::,2a03:8a00:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a03:8a20::,2a03:8a20:ffff:ffff:ffff:ffff:ffff:ffff,GB
2a03:8a40::,2a03:8a40:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a03:8a60::,2a03:8a60:ffff:ffff:ffff:ffff:ffff:ffff,NL
2a03:8a80::,2a03:8a80:ffff:ffff:ffff:ffff:ffff:ffff,AT
+2a03:8aa0::,2a03:8aa0:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a03:8ae0::,2a03:8ae0:ffff:ffff:ffff:ffff:ffff:ffff,DE
2a03:8b00::,2a03:8b00:ffff:ffff:ffff:ffff:ffff:ffff,SM
+2a03:8b20::,2a03:8b20:ffff:ffff:ffff:ffff:ffff:ffff,GB
2a03:8b40::,2a03:8b40:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a03:8b60::,2a03:8b60:ffff:ffff:ffff:ffff:ffff:ffff,SY
2a03:8b80::,2a03:8b80:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a03:8ba0::,2a03:8ba0:ffff:ffff:ffff:ffff:ffff:ffff,IT
2a03:8bc0::,2a03:8bc0:ffff:ffff:ffff:ffff:ffff:ffff,PT
+2a03:8be0::,2a03:8be0:ffff:ffff:ffff:ffff:ffff:ffff,IT
2a03:8c00::,2a03:8c00:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a03:8c20::,2a03:8c20:ffff:ffff:ffff:ffff:ffff:ffff,FI
2a03:8c40::,2a03:8c40:ffff:ffff:ffff:ffff:ffff:ffff,TR
+2a03:8c60::,2a03:8c60:ffff:ffff:ffff:ffff:ffff:ffff,HU
2a03:8c80::,2a03:8c87:ffff:ffff:ffff:ffff:ffff:ffff,IT
2a03:8cc0::,2a03:8cc0:ffff:ffff:ffff:ffff:ffff:ffff,GB
-2a03:8d00::,2a03:8d00:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a03:8ce0::,2a03:8ce0:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a03:8d20::,2a03:8d20:ffff:ffff:ffff:ffff:ffff:ffff,AT
2a03:8d40::,2a03:8d40:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a03:8d60::,2a03:8d60:ffff:ffff:ffff:ffff:ffff:ffff,SI
+2a03:8da0::,2a03:8da0:ffff:ffff:ffff:ffff:ffff:ffff,CZ
2a03:8dc0::,2a03:8dc0:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a03:8de0::,2a03:8de0:ffff:ffff:ffff:ffff:ffff:ffff,NL
2a03:8e00::,2a03:8e00:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a03:8e20::,2a03:8e20:ffff:ffff:ffff:ffff:ffff:ffff,NL
2a03:8e40::,2a03:8e40:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a03:8e60::,2a03:8e60:ffff:ffff:ffff:ffff:ffff:ffff,DK
2a03:8e80::,2a03:8e80:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a03:8ea0::,2a03:8ea0:ffff:ffff:ffff:ffff:ffff:ffff,PL
2a03:8ec0::,2a03:8ec0:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a03:8ee0::,2a03:8ee0:ffff:ffff:ffff:ffff:ffff:ffff,UZ
2a03:8f00::,2a03:8f07:ffff:ffff:ffff:ffff:ffff:ffff,BE
2a03:8f40::,2a03:8f40:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a03:8f60::,2a03:8f60:ffff:ffff:ffff:ffff:ffff:ffff,BG
2a03:8f80::,2a03:8f80:ffff:ffff:ffff:ffff:ffff:ffff,RO
+2a03:8fa0::,2a03:8fa0:ffff:ffff:ffff:ffff:ffff:ffff,DE
2a03:8fc0::,2a03:8fc0:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a03:8fe0::,2a03:8fe0:ffff:ffff:ffff:ffff:ffff:ffff,GB
2a03:9000::,2a03:9000:ffff:ffff:ffff:ffff:ffff:ffff,RU
2a03:9040::,2a03:9040:ffff:ffff:ffff:ffff:ffff:ffff,GB
2a03:9080::,2a03:9080:ffff:ffff:ffff:ffff:ffff:ffff,IR
@@ -19021,10 +20637,12 @@
2a03:9140::,2a03:9140:ffff:ffff:ffff:ffff:ffff:ffff,PL
2a03:9180::,2a03:9180:ffff:ffff:ffff:ffff:ffff:ffff,FR
2a03:91c0::,2a03:91c0:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a03:9200::,2a03:9200:ffff:ffff:ffff:ffff:ffff:ffff,CZ
2a03:9240::,2a03:9240:ffff:ffff:ffff:ffff:ffff:ffff,BA
2a03:9280::,2a03:9280:ffff:ffff:ffff:ffff:ffff:ffff,GB
2a03:92c0::,2a03:92c0:ffff:ffff:ffff:ffff:ffff:ffff,FR
2a03:9300::,2a03:9300:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a03:9340::,2a03:9340:ffff:ffff:ffff:ffff:ffff:ffff,ES
2a03:9380::,2a03:9380:ffff:ffff:ffff:ffff:ffff:ffff,GB
2a03:93c0::,2a03:93c0:ffff:ffff:ffff:ffff:ffff:ffff,RU
2a03:9400::,2a03:9400:ffff:ffff:ffff:ffff:ffff:ffff,RU
@@ -19037,6 +20655,7 @@
2a03:95c0::,2a03:95c0:ffff:ffff:ffff:ffff:ffff:ffff,EE
2a03:9600::,2a03:9600:ffff:ffff:ffff:ffff:ffff:ffff,GB
2a03:9640::,2a03:9640:ffff:ffff:ffff:ffff:ffff:ffff,PS
+2a03:9680::,2a03:9680:ffff:ffff:ffff:ffff:ffff:ffff,ES
2a03:96c0::,2a03:96c0:ffff:ffff:ffff:ffff:ffff:ffff,RU
2a03:9700::,2a03:9700:ffff:ffff:ffff:ffff:ffff:ffff,NL
2a03:9740::,2a03:9740:ffff:ffff:ffff:ffff:ffff:ffff,RU
@@ -19073,6 +20692,7 @@
2a03:9f00::,2a03:9f00:ffff:ffff:ffff:ffff:ffff:ffff,GB
2a03:9f40::,2a03:9f40:ffff:ffff:ffff:ffff:ffff:ffff,FR
2a03:9f80::,2a03:9f80:ffff:ffff:ffff:ffff:ffff:ffff,FI
+2a03:9fc0::,2a03:9fc0:ffff:ffff:ffff:ffff:ffff:ffff,SE
2a03:a000::,2a03:a000:ffff:ffff:ffff:ffff:ffff:ffff,GB
2a03:a040::,2a03:a040:ffff:ffff:ffff:ffff:ffff:ffff,RU
2a03:a080::,2a03:a080:ffff:ffff:ffff:ffff:ffff:ffff,DE
@@ -19101,11 +20721,13 @@
2a03:a640::,2a03:a640:ffff:ffff:ffff:ffff:ffff:ffff,FR
2a03:a680::,2a03:a680:ffff:ffff:ffff:ffff:ffff:ffff,ES
2a03:a6c0::,2a03:a6c0:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a03:a700::,2a03:a700:ffff:ffff:ffff:ffff:ffff:ffff,IT
2a03:a740::,2a03:a740:ffff:ffff:ffff:ffff:ffff:ffff,ES
2a03:a780::,2a03:a780:ffff:ffff:ffff:ffff:ffff:ffff,CZ
2a03:a7c0::,2a03:a7c0:ffff:ffff:ffff:ffff:ffff:ffff,RU
2a03:a800::,2a03:a800:ffff:ffff:ffff:ffff:ffff:ffff,BE
2a03:a840::,2a03:a840:ffff:ffff:ffff:ffff:ffff:ffff,UA
+2a03:a880::,2a03:a880:ffff:ffff:ffff:ffff:ffff:ffff,SE
2a03:a8c0::,2a03:a8c0:ffff:ffff:ffff:ffff:ffff:ffff,FR
2a03:a900::,2a03:a900:ffff:ffff:ffff:ffff:ffff:ffff,CZ
2a03:a940::,2a03:a940:ffff:ffff:ffff:ffff:ffff:ffff,ES
@@ -19138,7 +20760,9 @@
2a03:b000::,2a03:b000:ffff:ffff:ffff:ffff:ffff:ffff,SE
2a03:b040::,2a03:b040:ffff:ffff:ffff:ffff:ffff:ffff,GB
2a03:b080::,2a03:b080:ffff:ffff:ffff:ffff:ffff:ffff,RS
-2a03:b0c0::,2a03:b0c0:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a03:b0c0::,2a03:b0c0::ffff:ffff:ffff:ffff:ffff,NL
+2a03:b0c0:1::,2a03:b0c0:1:ffff:ffff:ffff:ffff:ffff,GB
+2a03:b0c0:2::,2a03:b0c0:ffff:ffff:ffff:ffff:ffff:ffff,NL
2a03:b100::,2a03:b100:ffff:ffff:ffff:ffff:ffff:ffff,SE
2a03:b140::,2a03:b140:ffff:ffff:ffff:ffff:ffff:ffff,IT
2a03:b180::,2a03:b180:ffff:ffff:ffff:ffff:ffff:ffff,AE
@@ -19146,7 +20770,9 @@
2a03:b200::,2a03:b207:ffff:ffff:ffff:ffff:ffff:ffff,GB
2a03:b240::,2a03:b240:ffff:ffff:ffff:ffff:ffff:ffff,CH
2a03:b280::,2a03:b280:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a03:b2c0::,2a03:b2c0:ffff:ffff:ffff:ffff:ffff:ffff,CH
2a03:b300::,2a03:b300:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a03:b340::,2a03:b340:ffff:ffff:ffff:ffff:ffff:ffff,IT
2a03:b380::,2a03:b380:ffff:ffff:ffff:ffff:ffff:ffff,DE
2a03:b3c0::,2a03:b3c0:ffff:ffff:ffff:ffff:ffff:ffff,TR
2a03:b400::,2a03:b400:ffff:ffff:ffff:ffff:ffff:ffff,DE
@@ -19246,6 +20872,7 @@
2a03:cb80::,2a03:cb80:ffff:ffff:ffff:ffff:ffff:ffff,BA
2a03:cbc0::,2a03:cbc7:ffff:ffff:ffff:ffff:ffff:ffff,NL
2a03:cc00::,2a03:cc00:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a03:cc40::,2a03:cc40:ffff:ffff:ffff:ffff:ffff:ffff,NL
2a03:cc80::,2a03:cc80:ffff:ffff:ffff:ffff:ffff:ffff,BA
2a03:ccc0::,2a03:ccc0:ffff:ffff:ffff:ffff:ffff:ffff,RU
2a03:cd00::,2a03:cd00:ffff:ffff:ffff:ffff:ffff:ffff,US
@@ -19266,7 +20893,7 @@
2a03:d100::,2a03:d100:ffff:ffff:ffff:ffff:ffff:ffff,IT
2a03:d140::,2a03:d140:ffff:ffff:ffff:ffff:ffff:ffff,PL
2a03:d180::,2a03:d180:ffff:ffff:ffff:ffff:ffff:ffff,BG
-2a03:d1c0::,2a03:d1c0:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a03:d1c0::,2a03:d1c7:ffff:ffff:ffff:ffff:ffff:ffff,FR
2a03:d200::,2a03:d200:ffff:ffff:ffff:ffff:ffff:ffff,IT
2a03:d280::,2a03:d280:ffff:ffff:ffff:ffff:ffff:ffff,FR
2a03:d2c0::,2a03:d2c0:ffff:ffff:ffff:ffff:ffff:ffff,IT
@@ -19295,7 +20922,6 @@
2a03:d800::,2a03:d800:ffff:ffff:ffff:ffff:ffff:ffff,NL
2a03:d840::,2a03:d840:ffff:ffff:ffff:ffff:ffff:ffff,CZ
2a03:d880::,2a03:d880:ffff:ffff:ffff:ffff:ffff:ffff,GB
-2a03:d8c0::,2a03:d8c0:ffff:ffff:ffff:ffff:ffff:ffff,RU
2a03:d900::,2a03:d900:ffff:ffff:ffff:ffff:ffff:ffff,SE
2a03:d940::,2a03:d940:ffff:ffff:ffff:ffff:ffff:ffff,FR
2a03:d980::,2a03:d980:ffff:ffff:ffff:ffff:ffff:ffff,DE
@@ -19484,7 +21110,6 @@
2a04:940::,2a04:947:ffff:ffff:ffff:ffff:ffff:ffff,PS
2a04:980::,2a04:987:ffff:ffff:ffff:ffff:ffff:ffff,NO
2a04:9c0::,2a04:9c7:ffff:ffff:ffff:ffff:ffff:ffff,DE
-2a04:a00::,2a04:a07:ffff:ffff:ffff:ffff:ffff:ffff,SK
2a04:a40::,2a04:a47:ffff:ffff:ffff:ffff:ffff:ffff,DE
2a04:a80::,2a04:a87:ffff:ffff:ffff:ffff:ffff:ffff,FR
2a04:ac0::,2a04:ac7:ffff:ffff:ffff:ffff:ffff:ffff,RU
@@ -19530,6 +21155,7 @@
2a04:1400::,2a04:1407:ffff:ffff:ffff:ffff:ffff:ffff,GB
2a04:1440::,2a04:1447:ffff:ffff:ffff:ffff:ffff:ffff,DE
2a04:1480::,2a04:1487:ffff:ffff:ffff:ffff:ffff:ffff,CY
+2a04:14c0::,2a04:14c7:ffff:ffff:ffff:ffff:ffff:ffff,PL
2a04:1500::,2a04:1507:ffff:ffff:ffff:ffff:ffff:ffff,FR
2a04:1540::,2a04:1547:ffff:ffff:ffff:ffff:ffff:ffff,IT
2a04:1580::,2a04:1587:ffff:ffff:ffff:ffff:ffff:ffff,CZ
@@ -19578,18 +21204,17 @@
2a04:2000::,2a04:2007:ffff:ffff:ffff:ffff:ffff:ffff,FR
2a04:2040::,2a04:2047:ffff:ffff:ffff:ffff:ffff:ffff,RO
2a04:2080::,2a04:2087:ffff:ffff:ffff:ffff:ffff:ffff,IT
-2a04:20c0::,2a04:20c7:ffff:ffff:ffff:ffff:ffff:ffff,TR
2a04:2100::,2a04:2107:ffff:ffff:ffff:ffff:ffff:ffff,DE
2a04:2140::,2a04:2147:ffff:ffff:ffff:ffff:ffff:ffff,GB
2a04:2180::,2a04:2187:ffff:ffff:ffff:ffff:ffff:ffff,LT
2a04:21c0::,2a04:21c7:ffff:ffff:ffff:ffff:ffff:ffff,GB
2a04:2200::,2a04:2207:ffff:ffff:ffff:ffff:ffff:ffff,DE
-2a04:2240::,2a04:2247:ffff:ffff:ffff:ffff:ffff:ffff,BH
2a04:2280::,2a04:2287:ffff:ffff:ffff:ffff:ffff:ffff,NL
2a04:22c0::,2a04:22c7:ffff:ffff:ffff:ffff:ffff:ffff,IT
2a04:2300::,2a04:2307:ffff:ffff:ffff:ffff:ffff:ffff,SE
2a04:2340::,2a04:2347:ffff:ffff:ffff:ffff:ffff:ffff,GB
2a04:2380::,2a04:2387:ffff:ffff:ffff:ffff:ffff:ffff,HU
+2a04:23c0::,2a04:23c7:ffff:ffff:ffff:ffff:ffff:ffff,AE
2a04:2400::,2a04:241f:ffff:ffff:ffff:ffff:ffff:ffff,RO
2a04:2500::,2a04:2507:ffff:ffff:ffff:ffff:ffff:ffff,FR
2a04:2540::,2a04:2547:ffff:ffff:ffff:ffff:ffff:ffff,PL
@@ -19614,6 +21239,7 @@
2a04:2980::,2a04:2987:ffff:ffff:ffff:ffff:ffff:ffff,AE
2a04:29c0::,2a04:29c7:ffff:ffff:ffff:ffff:ffff:ffff,DE
2a04:2a00::,2a04:2a07:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a04:2a40::,2a04:2a47:ffff:ffff:ffff:ffff:ffff:ffff,CH
2a04:2a80::,2a04:2a87:ffff:ffff:ffff:ffff:ffff:ffff,FR
2a04:2ac0::,2a04:2ac7:ffff:ffff:ffff:ffff:ffff:ffff,GB
2a04:2b00::,2a04:2b07:ffff:ffff:ffff:ffff:ffff:ffff,GB
@@ -19621,8 +21247,10 @@
2a04:2b80::,2a04:2b87:ffff:ffff:ffff:ffff:ffff:ffff,RO
2a04:2bc0::,2a04:2bc7:ffff:ffff:ffff:ffff:ffff:ffff,FR
2a04:2c00::,2a04:2c07:ffff:ffff:ffff:ffff:ffff:ffff,UA
+2a04:2c40:7::,2a04:2c40:7:ffff:ffff:ffff:ffff:ffff,FR
2a04:2c80::,2a04:2c87:ffff:ffff:ffff:ffff:ffff:ffff,UA
2a04:2cc0::,2a04:2cc7:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a04:2d00::,2a04:2d07:ffff:ffff:ffff:ffff:ffff:ffff,NL
2a04:2d40::,2a04:2d47:ffff:ffff:ffff:ffff:ffff:ffff,IR
2a04:2d80::,2a04:2d87:ffff:ffff:ffff:ffff:ffff:ffff,IR
2a04:2dc0::,2a04:2dc7:ffff:ffff:ffff:ffff:ffff:ffff,IQ
@@ -19660,16 +21288,19 @@
2a04:35c0::,2a04:35c7:ffff:ffff:ffff:ffff:ffff:ffff,IE
2a04:3600::,2a04:3607:ffff:ffff:ffff:ffff:ffff:ffff,RU
2a04:3640::,2a04:3647:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a04:3680::,2a04:3687:ffff:ffff:ffff:ffff:ffff:ffff,CH
2a04:36c0::,2a04:36c7:ffff:ffff:ffff:ffff:ffff:ffff,GB
2a04:3700::,2a04:3707:ffff:ffff:ffff:ffff:ffff:ffff,BE
2a04:3740::,2a04:3747:ffff:ffff:ffff:ffff:ffff:ffff,FR
2a04:3780::,2a04:3787:ffff:ffff:ffff:ffff:ffff:ffff,DE
2a04:3800::,2a04:3807:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a04:3840::,2a04:3847:ffff:ffff:ffff:ffff:ffff:ffff,RU
2a04:3880::,2a04:3883:ffff:ffff:ffff:ffff:ffff:ffff,TR
2a04:38a0::,2a04:38a3:ffff:ffff:ffff:ffff:ffff:ffff,IR
2a04:38c0::,2a04:38c7:ffff:ffff:ffff:ffff:ffff:ffff,JE
2a04:3900::,2a04:3907:ffff:ffff:ffff:ffff:ffff:ffff,DE
2a04:3940::,2a04:3947:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a04:3980::,2a04:3987:ffff:ffff:ffff:ffff:ffff:ffff,FR
2a04:39c0::,2a04:39c7:ffff:ffff:ffff:ffff:ffff:ffff,IT
2a04:3a00::,2a04:3a07:ffff:ffff:ffff:ffff:ffff:ffff,FR
2a04:3a40::,2a04:3a40:ffff:ffff:ffff:ffff:ffff:ffff,ES
@@ -19741,6 +21372,7 @@
2a04:4a00::,2a04:4a07:ffff:ffff:ffff:ffff:ffff:ffff,RU
2a04:4a40::,2a04:4a47:ffff:ffff:ffff:ffff:ffff:ffff,GB
2a04:4a80::,2a04:4a87:ffff:ffff:ffff:ffff:ffff:ffff,FI
+2a04:4ac0::,2a04:4ac7:ffff:ffff:ffff:ffff:ffff:ffff,CZ
2a04:4b00::,2a04:4b07:ffff:ffff:ffff:ffff:ffff:ffff,DE
2a04:4b40::,2a04:4b47:ffff:ffff:ffff:ffff:ffff:ffff,NL
2a04:4b80::,2a04:4b87:ffff:ffff:ffff:ffff:ffff:ffff,AZ
@@ -19815,12 +21447,15 @@
2a04:5f00::,2a04:5f07:ffff:ffff:ffff:ffff:ffff:ffff,DE
2a04:5f40::,2a04:5f47:ffff:ffff:ffff:ffff:ffff:ffff,LV
2a04:5f80::,2a04:5f87:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a04:5fc0::,2a04:5fc7:ffff:ffff:ffff:ffff:ffff:ffff,ES
2a04:6000::,2a04:6007:ffff:ffff:ffff:ffff:ffff:ffff,RU
2a04:6040::,2a04:6047:ffff:ffff:ffff:ffff:ffff:ffff,GB
2a04:6080::,2a04:6087:ffff:ffff:ffff:ffff:ffff:ffff,FR
2a04:60c0::,2a04:60c7:ffff:ffff:ffff:ffff:ffff:ffff,SE
2a04:6100::,2a04:6107:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a04:6140::,2a04:6147:ffff:ffff:ffff:ffff:ffff:ffff,SE
2a04:6180::,2a04:6187:ffff:ffff:ffff:ffff:ffff:ffff,BE
+2a04:61c0::,2a04:61c7:ffff:ffff:ffff:ffff:ffff:ffff,RU
2a04:6200::,2a04:6207:ffff:ffff:ffff:ffff:ffff:ffff,JO
2a04:6240::,2a04:6247:ffff:ffff:ffff:ffff:ffff:ffff,GB
2a04:6280::,2a04:6287:ffff:ffff:ffff:ffff:ffff:ffff,NL
@@ -19837,7 +21472,6 @@
2a04:6540::,2a04:6547:ffff:ffff:ffff:ffff:ffff:ffff,NO
2a04:6580::,2a04:6587:ffff:ffff:ffff:ffff:ffff:ffff,IT
2a04:65c0::,2a04:65c7:ffff:ffff:ffff:ffff:ffff:ffff,DE
-2a04:6600::,2a04:6607:ffff:ffff:ffff:ffff:ffff:ffff,NO
2a04:6640::,2a04:6647:ffff:ffff:ffff:ffff:ffff:ffff,NL
2a04:6650::,2a04:6651:ffff:ffff:ffff:ffff:ffff:ffff,FR
2a04:6680::,2a04:6687:ffff:ffff:ffff:ffff:ffff:ffff,TR
@@ -19852,6 +21486,7 @@
2a04:68c0::,2a04:68c7:ffff:ffff:ffff:ffff:ffff:ffff,IT
2a04:6900::,2a04:6907:ffff:ffff:ffff:ffff:ffff:ffff,UA
2a04:6940::,2a04:6947:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a04:6980::,2a04:6987:ffff:ffff:ffff:ffff:ffff:ffff,RO
2a04:69c0::,2a04:69c7:ffff:ffff:ffff:ffff:ffff:ffff,MK
2a04:6a00::,2a04:6a07:ffff:ffff:ffff:ffff:ffff:ffff,FR
2a04:6a40::,2a04:6a47:ffff:ffff:ffff:ffff:ffff:ffff,RU
@@ -19865,7 +21500,6 @@
2a04:6c40::,2a04:6c47:ffff:ffff:ffff:ffff:ffff:ffff,BE
2a04:6c80::,2a04:6c87:ffff:ffff:ffff:ffff:ffff:ffff,RO
2a04:6cc0::,2a04:6cc7:ffff:ffff:ffff:ffff:ffff:ffff,SE
-2a04:6d00::,2a04:6d07:ffff:ffff:ffff:ffff:ffff:ffff,SE
2a04:6d40::,2a04:6d47:ffff:ffff:ffff:ffff:ffff:ffff,CH
2a04:6d80::,2a04:6d87:ffff:ffff:ffff:ffff:ffff:ffff,PT
2a04:6dc0::,2a04:6dc7:ffff:ffff:ffff:ffff:ffff:ffff,NL
@@ -19906,11 +21540,11 @@
2a04:7600::,2a04:7607:ffff:ffff:ffff:ffff:ffff:ffff,NO
2a04:7640::,2a04:7647:ffff:ffff:ffff:ffff:ffff:ffff,CH
2a04:7680::,2a04:7687:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a04:76c0::,2a04:76c7:ffff:ffff:ffff:ffff:ffff:ffff,NL
2a04:7700::,2a04:7707:ffff:ffff:ffff:ffff:ffff:ffff,AT
2a04:7740::,2a04:7747:ffff:ffff:ffff:ffff:ffff:ffff,IQ
2a04:7780::,2a04:7787:ffff:ffff:ffff:ffff:ffff:ffff,RU
2a04:77c0::,2a04:77c7:ffff:ffff:ffff:ffff:ffff:ffff,CZ
-2a04:7800::,2a04:7807:ffff:ffff:ffff:ffff:ffff:ffff,DK
2a04:7840::,2a04:7847:ffff:ffff:ffff:ffff:ffff:ffff,PL
2a04:7880::,2a04:7887:ffff:ffff:ffff:ffff:ffff:ffff,NO
2a04:78c0::,2a04:78c3:ffff:ffff:ffff:ffff:ffff:ffff,DE
@@ -19923,6 +21557,7 @@
2a04:7a40::,2a04:7a47:ffff:ffff:ffff:ffff:ffff:ffff,CH
2a04:7a80::,2a04:7a87:ffff:ffff:ffff:ffff:ffff:ffff,NL
2a04:7ac0::,2a04:7ac7:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a04:7b00::,2a04:7b07:ffff:ffff:ffff:ffff:ffff:ffff,IT
2a04:7b40::,2a04:7b47:ffff:ffff:ffff:ffff:ffff:ffff,DE
2a04:7b80::,2a04:7b87:ffff:ffff:ffff:ffff:ffff:ffff,UA
2a04:7bc0::,2a04:7bc7:ffff:ffff:ffff:ffff:ffff:ffff,SA
@@ -19976,7 +21611,6 @@
2a04:8740::,2a04:8747:ffff:ffff:ffff:ffff:ffff:ffff,GB
2a04:8780::,2a04:8787:ffff:ffff:ffff:ffff:ffff:ffff,DE
2a04:87c0::,2a04:87c7:ffff:ffff:ffff:ffff:ffff:ffff,IR
-2a04:8800::,2a04:8807:ffff:ffff:ffff:ffff:ffff:ffff,GB
2a04:8840::,2a04:8847:ffff:ffff:ffff:ffff:ffff:ffff,PL
2a04:8880::,2a04:8887:ffff:ffff:ffff:ffff:ffff:ffff,NL
2a04:88c0::,2a04:88c7:ffff:ffff:ffff:ffff:ffff:ffff,RU
@@ -20071,6 +21705,7 @@
2a04:9f00::,2a04:9f07:ffff:ffff:ffff:ffff:ffff:ffff,IT
2a04:9f40::,2a04:9f47:ffff:ffff:ffff:ffff:ffff:ffff,ES
2a04:9f80::,2a04:9f87:ffff:ffff:ffff:ffff:ffff:ffff,BE
+2a04:9fc0::,2a04:9fc7:ffff:ffff:ffff:ffff:ffff:ffff,NL
2a04:a000::,2a04:a007:ffff:ffff:ffff:ffff:ffff:ffff,NL
2a04:a040::,2a04:a047:ffff:ffff:ffff:ffff:ffff:ffff,IQ
2a04:a080::,2a04:a087:ffff:ffff:ffff:ffff:ffff:ffff,DE
@@ -20089,7 +21724,6 @@
2a04:a3c0::,2a04:a3c7:ffff:ffff:ffff:ffff:ffff:ffff,DK
2a04:a400::,2a04:a407:ffff:ffff:ffff:ffff:ffff:ffff,DE
2a04:a440::,2a04:a440:ffff:ffff:ffff:ffff:ffff:ffff,GB
-2a04:a450::,2a04:a451:ffff:ffff:ffff:ffff:ffff:ffff,PL
2a04:a460::,2a04:a461:ffff:ffff:ffff:ffff:ffff:ffff,PL
2a04:a470::,2a04:a471:ffff:ffff:ffff:ffff:ffff:ffff,DK
2a04:a480::,2a04:a487:ffff:ffff:ffff:ffff:ffff:ffff,FR
@@ -20111,10 +21745,10 @@
2a04:a880::,2a04:a887:ffff:ffff:ffff:ffff:ffff:ffff,DK
2a04:a8c0::,2a04:a8c7:ffff:ffff:ffff:ffff:ffff:ffff,US
2a04:a900::,2a04:a907:ffff:ffff:ffff:ffff:ffff:ffff,UA
-2a04:a940::,2a04:a947:ffff:ffff:ffff:ffff:ffff:ffff,DE
2a04:a980::,2a04:a987:ffff:ffff:ffff:ffff:ffff:ffff,GB
2a04:a9c0::,2a04:a9c7:ffff:ffff:ffff:ffff:ffff:ffff,IT
2a04:aa00::,2a04:aa07:ffff:ffff:ffff:ffff:ffff:ffff,UA
+2a04:aa40::,2a04:aa47:ffff:ffff:ffff:ffff:ffff:ffff,CH
2a04:aa80::,2a04:aa87:ffff:ffff:ffff:ffff:ffff:ffff,SA
2a04:aac0::,2a04:aac7:ffff:ffff:ffff:ffff:ffff:ffff,PL
2a04:ab00::,2a04:ab07:ffff:ffff:ffff:ffff:ffff:ffff,GB
@@ -20147,7 +21781,6 @@
2a04:b380::,2a04:b387:ffff:ffff:ffff:ffff:ffff:ffff,ES
2a04:b3c0::,2a04:b3c7:ffff:ffff:ffff:ffff:ffff:ffff,GB
2a04:b400::,2a04:b407:ffff:ffff:ffff:ffff:ffff:ffff,SE
-2a04:b440::,2a04:b447:ffff:ffff:ffff:ffff:ffff:ffff,GB
2a04:b480::,2a04:b487:ffff:ffff:ffff:ffff:ffff:ffff,IE
2a04:b4c0::,2a04:b4c7:ffff:ffff:ffff:ffff:ffff:ffff,PL
2a04:b500::,2a04:b507:ffff:ffff:ffff:ffff:ffff:ffff,CH
@@ -20192,6 +21825,7 @@
2a04:be80::,2a04:be87:ffff:ffff:ffff:ffff:ffff:ffff,NL
2a04:bec0::,2a04:bec7:ffff:ffff:ffff:ffff:ffff:ffff,IT
2a04:bf00::,2a04:bf07:ffff:ffff:ffff:ffff:ffff:ffff,AT
+2a04:bf40::,2a04:bf47:ffff:ffff:ffff:ffff:ffff:ffff,RS
2a04:bf80::,2a04:bf87:ffff:ffff:ffff:ffff:ffff:ffff,CZ
2a04:bfc0::,2a04:bfc7:ffff:ffff:ffff:ffff:ffff:ffff,CH
2a04:c000::,2a04:c007:ffff:ffff:ffff:ffff:ffff:ffff,CH
@@ -20204,6 +21838,7 @@
2a04:c1c0::,2a04:c1c7:ffff:ffff:ffff:ffff:ffff:ffff,IT
2a04:c200::,2a04:c207:ffff:ffff:ffff:ffff:ffff:ffff,GE
2a04:c240::,2a04:c247:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a04:c280::,2a04:c287:ffff:ffff:ffff:ffff:ffff:ffff,EE
2a04:c2c0::,2a04:c2c7:ffff:ffff:ffff:ffff:ffff:ffff,SA
2a04:c300::,2a04:c307:ffff:ffff:ffff:ffff:ffff:ffff,ES
2a04:c340::,2a04:c347:ffff:ffff:ffff:ffff:ffff:ffff,RU
@@ -20221,12 +21856,13 @@
2a04:c640::,2a04:c647:ffff:ffff:ffff:ffff:ffff:ffff,IT
2a04:c680::,2a04:c687:ffff:ffff:ffff:ffff:ffff:ffff,GB
2a04:c6c0::,2a04:c6c7:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a04:c700::,2a04:c707:ffff:ffff:ffff:ffff:ffff:ffff,GB
2a04:c740::,2a04:c747:ffff:ffff:ffff:ffff:ffff:ffff,CZ
2a04:c780::,2a04:c787:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a04:c7c0::,2a04:c7c7:ffff:ffff:ffff:ffff:ffff:ffff,AT
2a04:c800::,2a04:c807:ffff:ffff:ffff:ffff:ffff:ffff,NL
2a04:c840::,2a04:c847:ffff:ffff:ffff:ffff:ffff:ffff,AZ
2a04:c880::,2a04:c887:ffff:ffff:ffff:ffff:ffff:ffff,GB
-2a04:c8c0::,2a04:c8c7:ffff:ffff:ffff:ffff:ffff:ffff,PL
2a04:c900::,2a04:c907:ffff:ffff:ffff:ffff:ffff:ffff,RU
2a04:c940::,2a04:c947:ffff:ffff:ffff:ffff:ffff:ffff,DE
2a04:c980::,2a04:c987:ffff:ffff:ffff:ffff:ffff:ffff,GB
@@ -20251,13 +21887,13 @@
2a04:ce40::,2a04:ce47:ffff:ffff:ffff:ffff:ffff:ffff,DE
2a04:ce80::,2a04:ce87:ffff:ffff:ffff:ffff:ffff:ffff,GB
2a04:cec0::,2a04:cec7:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a04:cf00::,2a04:cf07:ffff:ffff:ffff:ffff:ffff:ffff,GB
2a04:cf40::,2a04:cf47:ffff:ffff:ffff:ffff:ffff:ffff,DE
2a04:cf80::,2a04:cf87:ffff:ffff:ffff:ffff:ffff:ffff,SA
2a04:cfc0::,2a04:cfc7:ffff:ffff:ffff:ffff:ffff:ffff,RU
2a04:d000::,2a04:d007:ffff:ffff:ffff:ffff:ffff:ffff,DE
2a04:d040::,2a04:d047:ffff:ffff:ffff:ffff:ffff:ffff,GE
2a04:d080::,2a04:d087:ffff:ffff:ffff:ffff:ffff:ffff,RS
-2a04:d0c0::,2a04:d0c7:ffff:ffff:ffff:ffff:ffff:ffff,IT
2a04:d100::,2a04:d107:ffff:ffff:ffff:ffff:ffff:ffff,IQ
2a04:d140::,2a04:d147:ffff:ffff:ffff:ffff:ffff:ffff,DE
2a04:d180::,2a04:d187:ffff:ffff:ffff:ffff:ffff:ffff,GB
@@ -20293,7 +21929,6 @@
2a04:d900::,2a04:d907:ffff:ffff:ffff:ffff:ffff:ffff,RU
2a04:d940::,2a04:d947:ffff:ffff:ffff:ffff:ffff:ffff,NL
2a04:d980::,2a04:d987:ffff:ffff:ffff:ffff:ffff:ffff,IL
-2a04:d9c0::,2a04:d9c7:ffff:ffff:ffff:ffff:ffff:ffff,RO
2a04:da00::,2a04:da07:ffff:ffff:ffff:ffff:ffff:ffff,AE
2a04:da40::,2a04:da47:ffff:ffff:ffff:ffff:ffff:ffff,IR
2a04:da80::,2a04:da87:ffff:ffff:ffff:ffff:ffff:ffff,GB
@@ -20337,8 +21972,18 @@
2a04:e400::,2a04:e407:ffff:ffff:ffff:ffff:ffff:ffff,BG
2a04:e440::,2a04:e447:ffff:ffff:ffff:ffff:ffff:ffff,RU
2a04:e480::,2a04:e487:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a04:e4c0:10::,2a04:e4c0:10:ffff:ffff:ffff:ffff:ffff,GB
+2a04:e4c0:11::,2a04:e4c0:11:ffff:ffff:ffff:ffff:ffff,DE
+2a04:e4c0:12::,2a04:e4c0:12:ffff:ffff:ffff:ffff:ffff,FR
+2a04:e4c0:13::,2a04:e4c0:13:ffff:ffff:ffff:ffff:ffff,DK
+2a04:e4c0:14::,2a04:e4c0:14:ffff:ffff:ffff:ffff:ffff,RO
+2a04:e4c0:15::,2a04:e4c0:15:ffff:ffff:ffff:ffff:ffff,CZ
+2a04:e4c0:16::,2a04:e4c0:16:ffff:ffff:ffff:ffff:ffff,PL
+2a04:e4c0:20::,2a04:e4c0:20:ffff:ffff:ffff:ffff:ffff,JP
+2a04:e4c0:30::,2a04:e4c0:30:ffff:ffff:ffff:ffff:ffff,ZA
2a04:e500::,2a04:e507:ffff:ffff:ffff:ffff:ffff:ffff,RU
2a04:e540::,2a04:e547:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a04:e580::,2a04:e587:ffff:ffff:ffff:ffff:ffff:ffff,NL
2a04:e5c0::,2a04:e5c7:ffff:ffff:ffff:ffff:ffff:ffff,FR
2a04:e600::,2a04:e607:ffff:ffff:ffff:ffff:ffff:ffff,PL
2a04:e640::,2a04:e647:ffff:ffff:ffff:ffff:ffff:ffff,RU
@@ -20355,8 +22000,8 @@
2a04:e900::,2a04:e907:ffff:ffff:ffff:ffff:ffff:ffff,FR
2a04:e940::,2a04:e947:ffff:ffff:ffff:ffff:ffff:ffff,RU
2a04:e980::,2a04:e987:ffff:ffff:ffff:ffff:ffff:ffff,IL
+2a04:e9c0::,2a04:e9c7:ffff:ffff:ffff:ffff:ffff:ffff,GB
2a04:ea00::,2a04:ea07:ffff:ffff:ffff:ffff:ffff:ffff,AE
-2a04:ea40::,2a04:ea47:ffff:ffff:ffff:ffff:ffff:ffff,PL
2a04:ea80::,2a04:ea87:ffff:ffff:ffff:ffff:ffff:ffff,LB
2a04:eac0::,2a04:eac7:ffff:ffff:ffff:ffff:ffff:ffff,DE
2a04:eb00::,2a04:eb07:ffff:ffff:ffff:ffff:ffff:ffff,LT
@@ -20364,7 +22009,6 @@
2a04:eb80::,2a04:eb87:ffff:ffff:ffff:ffff:ffff:ffff,ES
2a04:ebc0::,2a04:ebc7:ffff:ffff:ffff:ffff:ffff:ffff,GB
2a04:ec00::,2a04:ec01:ffff:ffff:ffff:ffff:ffff:ffff,NL
-2a04:ec10::,2a04:ec11:ffff:ffff:ffff:ffff:ffff:ffff,GB
2a04:ec20::,2a04:ec23:ffff:ffff:ffff:ffff:ffff:ffff,RS
2a04:ec40::,2a04:ec47:ffff:ffff:ffff:ffff:ffff:ffff,GB
2a04:ec80::,2a04:ec87:ffff:ffff:ffff:ffff:ffff:ffff,DE
@@ -20377,6 +22021,7 @@
2a04:ee40::,2a04:ee47:ffff:ffff:ffff:ffff:ffff:ffff,CH
2a04:ee80::,2a04:ee87:ffff:ffff:ffff:ffff:ffff:ffff,IT
2a04:eec0::,2a04:eec7:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a04:ef00::,2a04:ef07:ffff:ffff:ffff:ffff:ffff:ffff,RU
2a04:ef40::,2a04:ef47:ffff:ffff:ffff:ffff:ffff:ffff,IT
2a04:ef80::,2a04:ef87:ffff:ffff:ffff:ffff:ffff:ffff,GB
2a04:efc0::,2a04:efc7:ffff:ffff:ffff:ffff:ffff:ffff,IT
@@ -20393,14 +22038,11 @@
2a04:f280::,2a04:f287:ffff:ffff:ffff:ffff:ffff:ffff,BG
2a04:f2c0::,2a04:f2c7:ffff:ffff:ffff:ffff:ffff:ffff,BA
2a04:f300::,2a04:f300:ffff:ffff:ffff:ffff:ffff:ffff,NL
-2a04:f310::,2a04:f311:ffff:ffff:ffff:ffff:ffff:ffff,RU
-2a04:f320::,2a04:f323:ffff:ffff:ffff:ffff:ffff:ffff,RU
2a04:f340::,2a04:f347:ffff:ffff:ffff:ffff:ffff:ffff,CH
2a04:f380::,2a04:f387:ffff:ffff:ffff:ffff:ffff:ffff,NL
2a04:f3c0::,2a04:f3c7:ffff:ffff:ffff:ffff:ffff:ffff,FR
2a04:f440::,2a04:f447:ffff:ffff:ffff:ffff:ffff:ffff,PL
2a04:f480::,2a04:f487:ffff:ffff:ffff:ffff:ffff:ffff,SK
-2a04:f4c0::,2a04:f4c7:ffff:ffff:ffff:ffff:ffff:ffff,RO
2a04:f500::,2a04:f507:ffff:ffff:ffff:ffff:ffff:ffff,DE
2a04:f540::,2a04:f547:ffff:ffff:ffff:ffff:ffff:ffff,US
2a04:f580::,2a04:f587:ffff:ffff:ffff:ffff:ffff:ffff,GB
@@ -20423,6 +22065,8 @@
2a04:fa00::,2a04:fa07:ffff:ffff:ffff:ffff:ffff:ffff,NL
2a04:fa40::,2a04:fa47:ffff:ffff:ffff:ffff:ffff:ffff,IR
2a04:fa80::,2a04:fa87:ffff:ffff:ffff:ffff:ffff:ffff,IE
+2a04:fac0::,2a04:fac7:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a04:fb00::,2a04:fb07:ffff:ffff:ffff:ffff:ffff:ffff,UA
2a04:fb40::,2a04:fb47:ffff:ffff:ffff:ffff:ffff:ffff,IR
2a04:fb80::,2a04:fb87:ffff:ffff:ffff:ffff:ffff:ffff,GB
2a04:fbc0::,2a04:fbc7:ffff:ffff:ffff:ffff:ffff:ffff,NL
@@ -20469,7 +22113,6 @@
2a05:840::,2a05:843:ffff:ffff:ffff:ffff:ffff:ffff,NL
2a05:860::,2a05:863:ffff:ffff:ffff:ffff:ffff:ffff,RU
2a05:880::,2a05:887:ffff:ffff:ffff:ffff:ffff:ffff,DE
-2a05:8c0::,2a05:8c7:ffff:ffff:ffff:ffff:ffff:ffff,ES
2a05:900::,2a05:907:ffff:ffff:ffff:ffff:ffff:ffff,DE
2a05:940::,2a05:947:ffff:ffff:ffff:ffff:ffff:ffff,GB
2a05:980::,2a05:987:ffff:ffff:ffff:ffff:ffff:ffff,SK
@@ -20572,7 +22215,6 @@
2a05:23c0::,2a05:23c7:ffff:ffff:ffff:ffff:ffff:ffff,IT
2a05:2400::,2a05:2407:ffff:ffff:ffff:ffff:ffff:ffff,PL
2a05:2440::,2a05:2447:ffff:ffff:ffff:ffff:ffff:ffff,RO
-2a05:2480::,2a05:2487:ffff:ffff:ffff:ffff:ffff:ffff,RU
2a05:24c0::,2a05:24c7:ffff:ffff:ffff:ffff:ffff:ffff,NL
2a05:2500::,2a05:2507:ffff:ffff:ffff:ffff:ffff:ffff,NL
2a05:2540::,2a05:2547:ffff:ffff:ffff:ffff:ffff:ffff,IE
@@ -20615,7 +22257,6 @@
2a05:2e80::,2a05:2e87:ffff:ffff:ffff:ffff:ffff:ffff,DE
2a05:2ec0::,2a05:2ec7:ffff:ffff:ffff:ffff:ffff:ffff,RU
2a05:2f00::,2a05:2f07:ffff:ffff:ffff:ffff:ffff:ffff,DE
-2a05:2f40::,2a05:2f47:ffff:ffff:ffff:ffff:ffff:ffff,CH
2a05:2f80::,2a05:2f87:ffff:ffff:ffff:ffff:ffff:ffff,IT
2a05:2fc0::,2a05:2fc7:ffff:ffff:ffff:ffff:ffff:ffff,DE
2a05:3000::,2a05:3007:ffff:ffff:ffff:ffff:ffff:ffff,TR
@@ -20626,7 +22267,6 @@
2a05:3140::,2a05:3147:ffff:ffff:ffff:ffff:ffff:ffff,GB
2a05:3180::,2a05:3187:ffff:ffff:ffff:ffff:ffff:ffff,RU
2a05:31c0::,2a05:31c7:ffff:ffff:ffff:ffff:ffff:ffff,GB
-2a05:3200::,2a05:3207:ffff:ffff:ffff:ffff:ffff:ffff,CH
2a05:3240::,2a05:3247:ffff:ffff:ffff:ffff:ffff:ffff,DE
2a05:3280::,2a05:3287:ffff:ffff:ffff:ffff:ffff:ffff,SA
2a05:32c0::,2a05:32c7:ffff:ffff:ffff:ffff:ffff:ffff,PS
@@ -20642,7 +22282,6 @@
2a05:3540::,2a05:3547:ffff:ffff:ffff:ffff:ffff:ffff,GB
2a05:3580::,2a05:3587:ffff:ffff:ffff:ffff:ffff:ffff,RU
2a05:35c0::,2a05:35c7:ffff:ffff:ffff:ffff:ffff:ffff,NL
-2a05:3600::,2a05:3607:ffff:ffff:ffff:ffff:ffff:ffff,LV
2a05:3640::,2a05:3647:ffff:ffff:ffff:ffff:ffff:ffff,PL
2a05:3680::,2a05:3687:ffff:ffff:ffff:ffff:ffff:ffff,IT
2a05:36c0::,2a05:36c7:ffff:ffff:ffff:ffff:ffff:ffff,CH
@@ -20688,7 +22327,6 @@
2a05:4040::,2a05:4047:ffff:ffff:ffff:ffff:ffff:ffff,GB
2a05:4080::,2a05:4087:ffff:ffff:ffff:ffff:ffff:ffff,EE
2a05:40c0::,2a05:40c7:ffff:ffff:ffff:ffff:ffff:ffff,PL
-2a05:4100::,2a05:4107:ffff:ffff:ffff:ffff:ffff:ffff,ES
2a05:4140::,2a05:4147:ffff:ffff:ffff:ffff:ffff:ffff,GB
2a05:4180::,2a05:4187:ffff:ffff:ffff:ffff:ffff:ffff,CH
2a05:41c0::,2a05:41c7:ffff:ffff:ffff:ffff:ffff:ffff,CH
@@ -20705,7 +22343,6 @@
2a05:4480::,2a05:4487:ffff:ffff:ffff:ffff:ffff:ffff,PL
2a05:44c0::,2a05:44c7:ffff:ffff:ffff:ffff:ffff:ffff,NL
2a05:4500::,2a05:4507:ffff:ffff:ffff:ffff:ffff:ffff,CZ
-2a05:4540::,2a05:4547:ffff:ffff:ffff:ffff:ffff:ffff,GB
2a05:4580::,2a05:4587:ffff:ffff:ffff:ffff:ffff:ffff,GB
2a05:45c0::,2a05:45c7:ffff:ffff:ffff:ffff:ffff:ffff,UZ
2a05:4600::,2a05:4607:ffff:ffff:ffff:ffff:ffff:ffff,DK
@@ -20737,14 +22374,11 @@
2a05:4c80::,2a05:4c87:ffff:ffff:ffff:ffff:ffff:ffff,MD
2a05:4cc0::,2a05:4cc7:ffff:ffff:ffff:ffff:ffff:ffff,RU
2a05:4d00::,2a05:4d07:ffff:ffff:ffff:ffff:ffff:ffff,CZ
-2a05:4d40::,2a05:4d47:ffff:ffff:ffff:ffff:ffff:ffff,RU
2a05:4d80::,2a05:4d87:ffff:ffff:ffff:ffff:ffff:ffff,ES
2a05:4dc0::,2a05:4dc7:ffff:ffff:ffff:ffff:ffff:ffff,AT
2a05:4e00::,2a05:4e07:ffff:ffff:ffff:ffff:ffff:ffff,PL
2a05:4e40::,2a05:4e47:ffff:ffff:ffff:ffff:ffff:ffff,AT
-2a05:4e80::,2a05:4e87:ffff:ffff:ffff:ffff:ffff:ffff,RU
2a05:4ec0::,2a05:4ec7:ffff:ffff:ffff:ffff:ffff:ffff,RU
-2a05:4f00::,2a05:4f07:ffff:ffff:ffff:ffff:ffff:ffff,GB
2a05:4f40::,2a05:4f47:ffff:ffff:ffff:ffff:ffff:ffff,HR
2a05:4f80::,2a05:4f87:ffff:ffff:ffff:ffff:ffff:ffff,RS
2a05:4fc0::,2a05:4fc7:ffff:ffff:ffff:ffff:ffff:ffff,RU
@@ -20759,12 +22393,658 @@
2a05:5200::,2a05:5207:ffff:ffff:ffff:ffff:ffff:ffff,GB
2a05:5240::,2a05:5247:ffff:ffff:ffff:ffff:ffff:ffff,GB
2a05:5280::,2a05:5283:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a05:52a0::,2a05:52a3:ffff:ffff:ffff:ffff:ffff:ffff,NL
2a05:52c0::,2a05:52c7:ffff:ffff:ffff:ffff:ffff:ffff,RU
2a05:5300::,2a05:5307:ffff:ffff:ffff:ffff:ffff:ffff,IE
2a05:5340::,2a05:5347:ffff:ffff:ffff:ffff:ffff:ffff,NL
2a05:5380::,2a05:5387:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a05:53c0::,2a05:53c7:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a05:5400::,2a05:5407:ffff:ffff:ffff:ffff:ffff:ffff,IR
+2a05:5440::,2a05:5447:ffff:ffff:ffff:ffff:ffff:ffff,IR
+2a05:5480::,2a05:5487:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a05:54c0::,2a05:54c7:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a05:5500::,2a05:5507:ffff:ffff:ffff:ffff:ffff:ffff,AT
+2a05:5540::,2a05:5547:ffff:ffff:ffff:ffff:ffff:ffff,LV
+2a05:5580::,2a05:5587:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a05:55c0::,2a05:55c7:ffff:ffff:ffff:ffff:ffff:ffff,IQ
+2a05:5600::,2a05:5607:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a05:5640::,2a05:5647:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a05:5680::,2a05:5687:ffff:ffff:ffff:ffff:ffff:ffff,RO
+2a05:56c0::,2a05:56c7:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a05:5740::,2a05:5747:ffff:ffff:ffff:ffff:ffff:ffff,UA
+2a05:5780::,2a05:5787:ffff:ffff:ffff:ffff:ffff:ffff,TR
+2a05:57c0::,2a05:57c7:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a05:5800::,2a05:5807:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a05:5840::,2a05:5847:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a05:5880::,2a05:5887:ffff:ffff:ffff:ffff:ffff:ffff,NO
+2a05:58c0::,2a05:58c7:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a05:5900::,2a05:5907:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a05:5940::,2a05:5947:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a05:5980::,2a05:5987:ffff:ffff:ffff:ffff:ffff:ffff,IR
+2a05:59c0::,2a05:59c7:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a05:5a00::,2a05:5a07:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a05:5a40::,2a05:5a47:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a05:5a80::,2a05:5a87:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a05:5b00::,2a05:5b07:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a05:5b40::,2a05:5b47:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a05:5b80::,2a05:5b87:ffff:ffff:ffff:ffff:ffff:ffff,LB
+2a05:5bc0::,2a05:5bc7:ffff:ffff:ffff:ffff:ffff:ffff,MK
+2a05:5c00::,2a05:5c07:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a05:5c40::,2a05:5c47:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a05:5c80::,2a05:5c87:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a05:5cc0::,2a05:5cc7:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a05:5d00::,2a05:5d07:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a05:5d40::,2a05:5d47:ffff:ffff:ffff:ffff:ffff:ffff,IR
+2a05:5d80::,2a05:5d87:ffff:ffff:ffff:ffff:ffff:ffff,MK
+2a05:5dc0::,2a05:5dc7:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a05:5e00::,2a05:5e07:ffff:ffff:ffff:ffff:ffff:ffff,AE
+2a05:5e40::,2a05:5e47:ffff:ffff:ffff:ffff:ffff:ffff,BG
+2a05:5e80::,2a05:5e87:ffff:ffff:ffff:ffff:ffff:ffff,IE
+2a05:5ec0::,2a05:5ec7:ffff:ffff:ffff:ffff:ffff:ffff,TR
+2a05:5f00::,2a05:5f07:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a05:5f40::,2a05:5f47:ffff:ffff:ffff:ffff:ffff:ffff,BE
+2a05:5f80::,2a05:5f87:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a05:5fc0::,2a05:5fc7:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a05:6000::,2a05:6007:ffff:ffff:ffff:ffff:ffff:ffff,GE
+2a05:6040::,2a05:6047:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a05:6080::,2a05:6087:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a05:60c0::,2a05:60c7:ffff:ffff:ffff:ffff:ffff:ffff,TR
+2a05:6100::,2a05:6107:ffff:ffff:ffff:ffff:ffff:ffff,TR
+2a05:6140::,2a05:6147:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a05:6180::,2a05:6187:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a05:61c0::,2a05:61c7:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a05:6200::,2a05:6207:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a05:6240::,2a05:6247:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a05:6280::,2a05:6287:ffff:ffff:ffff:ffff:ffff:ffff,LT
+2a05:62c0::,2a05:62c7:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a05:6300::,2a05:6307:ffff:ffff:ffff:ffff:ffff:ffff,LT
+2a05:6340::,2a05:6347:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a05:6380::,2a05:6387:ffff:ffff:ffff:ffff:ffff:ffff,NO
+2a05:63c0::,2a05:63c7:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a05:6400::,2a05:6407:ffff:ffff:ffff:ffff:ffff:ffff,BE
+2a05:6440::,2a05:6447:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a05:64c0::,2a05:64c7:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a05:6500::,2a05:6507:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a05:6540::,2a05:6547:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a05:6580::,2a05:6587:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a05:65c0::,2a05:65c7:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a05:6600::,2a05:6607:ffff:ffff:ffff:ffff:ffff:ffff,IR
+2a05:6640::,2a05:6647:ffff:ffff:ffff:ffff:ffff:ffff,VA
+2a05:6680::,2a05:6687:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a05:66c0::,2a05:66c7:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a05:6700::,2a05:6707:ffff:ffff:ffff:ffff:ffff:ffff,RO
+2a05:6740::,2a05:6747:ffff:ffff:ffff:ffff:ffff:ffff,AT
+2a05:6800::,2a05:6807:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a05:6840::,2a05:6847:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a05:6880::,2a05:6887:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a05:68c0::,2a05:68c7:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a05:6900::,2a05:6907:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a05:6940::,2a05:6947:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a05:6980::,2a05:6987:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a05:69c0::,2a05:69c7:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a05:6a00::,2a05:6a07:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a05:6a40::,2a05:6a47:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a05:6a80::,2a05:6a87:ffff:ffff:ffff:ffff:ffff:ffff,BE
+2a05:6ac0::,2a05:6ac7:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a05:6b00::,2a05:6b07:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a05:6b80::,2a05:6b87:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a05:6bc0::,2a05:6bc7:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a05:6c00::,2a05:6c07:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a05:6c40::,2a05:6c47:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a05:6c80::,2a05:6c87:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a05:6cc0::,2a05:6cc7:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a05:6d00::,2a05:6d07:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a05:6d40::,2a05:6d47:ffff:ffff:ffff:ffff:ffff:ffff,NO
+2a05:6d80::,2a05:6d87:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a05:6dc0::,2a05:6dc7:ffff:ffff:ffff:ffff:ffff:ffff,NO
+2a05:6e00::,2a05:6e07:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a05:6e80::,2a05:6e87:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a05:6ec0::,2a05:6ec7:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a05:6f00::,2a05:6f07:ffff:ffff:ffff:ffff:ffff:ffff,IS
+2a05:6f40::,2a05:6f47:ffff:ffff:ffff:ffff:ffff:ffff,AE
+2a05:6f80::,2a05:6f87:ffff:ffff:ffff:ffff:ffff:ffff,TR
+2a05:6fc0::,2a05:6fc7:ffff:ffff:ffff:ffff:ffff:ffff,TR
+2a05:7000::,2a05:7007:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a05:7040::,2a05:7047:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a05:7080::,2a05:7087:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a05:70c0::,2a05:70c7:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a05:7100::,2a05:7107:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a05:7140::,2a05:7147:ffff:ffff:ffff:ffff:ffff:ffff,MD
+2a05:7180::,2a05:7187:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a05:71c0::,2a05:71c7:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a05:7200::,2a05:7207:ffff:ffff:ffff:ffff:ffff:ffff,IR
+2a05:7240::,2a05:7247:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a05:7280::,2a05:7287:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a05:72c0::,2a05:72c7:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a05:7300::,2a05:7307:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a05:7380::,2a05:7387:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a05:73c0::,2a05:73c7:ffff:ffff:ffff:ffff:ffff:ffff,BG
+2a05:7400::,2a05:7407:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a05:7440::,2a05:7447:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a05:7480::,2a05:7487:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a05:74c0::,2a05:74c7:ffff:ffff:ffff:ffff:ffff:ffff,JO
+2a05:7500::,2a05:7507:ffff:ffff:ffff:ffff:ffff:ffff,JO
+2a05:7540::,2a05:7547:ffff:ffff:ffff:ffff:ffff:ffff,PT
+2a05:7580::,2a05:7587:ffff:ffff:ffff:ffff:ffff:ffff,IR
+2a05:75c0::,2a05:75c7:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a05:7600::,2a05:7607:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a05:7640::,2a05:7647:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a05:7680::,2a05:7687:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a05:76c0::,2a05:76c7:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a05:7700::,2a05:7707:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a05:7740::,2a05:7747:ffff:ffff:ffff:ffff:ffff:ffff,SI
+2a05:7780::,2a05:7787:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a05:77c0::,2a05:77c7:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a05:7800::,2a05:7807:ffff:ffff:ffff:ffff:ffff:ffff,PT
+2a05:7840::,2a05:7847:ffff:ffff:ffff:ffff:ffff:ffff,RS
+2a05:7880::,2a05:7887:ffff:ffff:ffff:ffff:ffff:ffff,TR
+2a05:78c0::,2a05:78c7:ffff:ffff:ffff:ffff:ffff:ffff,SA
+2a05:7900::,2a05:7907:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a05:7940::,2a05:7947:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a05:7980::,2a05:7987:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a05:79c0::,2a05:79c7:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a05:7a00::,2a05:7a07:ffff:ffff:ffff:ffff:ffff:ffff,IQ
+2a05:7a40::,2a05:7a47:ffff:ffff:ffff:ffff:ffff:ffff,YE
+2a05:7b00::,2a05:7b07:ffff:ffff:ffff:ffff:ffff:ffff,NO
+2a05:7b40::,2a05:7b47:ffff:ffff:ffff:ffff:ffff:ffff,ME
+2a05:7b80::,2a05:7b87:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a05:7bc0::,2a05:7bc7:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a05:7c00::,2a05:7c07:ffff:ffff:ffff:ffff:ffff:ffff,RS
+2a05:7c40::,2a05:7c47:ffff:ffff:ffff:ffff:ffff:ffff,LU
+2a05:7c80::,2a05:7c87:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a05:7cc0::,2a05:7cc7:ffff:ffff:ffff:ffff:ffff:ffff,LT
+2a05:7d00::,2a05:7d07:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a05:7d40::,2a05:7d47:ffff:ffff:ffff:ffff:ffff:ffff,TR
+2a05:7d80::,2a05:7d87:ffff:ffff:ffff:ffff:ffff:ffff,YE
+2a05:7dc0::,2a05:7dc1:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a05:7de0::,2a05:7de3:ffff:ffff:ffff:ffff:ffff:ffff,IR
+2a05:7e00::,2a05:7e07:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a05:7e40::,2a05:7e47:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a05:7e80::,2a05:7e87:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a05:7ec0::,2a05:7ec7:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a05:7f00::,2a05:7f07:ffff:ffff:ffff:ffff:ffff:ffff,AT
+2a05:7f40::,2a05:7f47:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a05:7f80::,2a05:7f87:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a05:7fc0::,2a05:7fc7:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a05:8000::,2a05:8007:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a05:8040::,2a05:8047:ffff:ffff:ffff:ffff:ffff:ffff,IR
+2a05:8080::,2a05:8087:ffff:ffff:ffff:ffff:ffff:ffff,IE
+2a05:80c0::,2a05:80c7:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a05:8100::,2a05:8107:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a05:8140::,2a05:8147:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a05:8180::,2a05:8187:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a05:81c0::,2a05:81c7:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a05:8280::,2a05:8287:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a05:82c0::,2a05:82c7:ffff:ffff:ffff:ffff:ffff:ffff,AZ
+2a05:8300::,2a05:8307:ffff:ffff:ffff:ffff:ffff:ffff,AL
+2a05:8340::,2a05:8347:ffff:ffff:ffff:ffff:ffff:ffff,AZ
+2a05:8380::,2a05:8387:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a05:83c0::,2a05:83c7:ffff:ffff:ffff:ffff:ffff:ffff,AT
+2a05:8400::,2a05:8407:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a05:8440::,2a05:8447:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a05:8480::,2a05:8487:ffff:ffff:ffff:ffff:ffff:ffff,HU
+2a05:8500::,2a05:8507:ffff:ffff:ffff:ffff:ffff:ffff,CY
+2a05:8540::,2a05:8547:ffff:ffff:ffff:ffff:ffff:ffff,IR
+2a05:8580::,2a05:8587:ffff:ffff:ffff:ffff:ffff:ffff,FI
+2a05:85c0::,2a05:85c7:ffff:ffff:ffff:ffff:ffff:ffff,IE
+2a05:8600::,2a05:8607:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a05:8640::,2a05:8647:ffff:ffff:ffff:ffff:ffff:ffff,IR
+2a05:8680::,2a05:8687:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a05:86c0::,2a05:86c7:ffff:ffff:ffff:ffff:ffff:ffff,GE
+2a05:8700::,2a05:8707:ffff:ffff:ffff:ffff:ffff:ffff,LV
+2a05:8740::,2a05:8747:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a05:8780::,2a05:8787:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a05:87c0::,2a05:87c7:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a05:8800::,2a05:8807:ffff:ffff:ffff:ffff:ffff:ffff,LB
+2a05:8840::,2a05:8847:ffff:ffff:ffff:ffff:ffff:ffff,DK
+2a05:8880::,2a05:8883:ffff:ffff:ffff:ffff:ffff:ffff,RO
+2a05:88a0::,2a05:88a3:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a05:88c0::,2a05:88c7:ffff:ffff:ffff:ffff:ffff:ffff,TR
+2a05:8900::,2a05:8907:ffff:ffff:ffff:ffff:ffff:ffff,AT
+2a05:8940::,2a05:8947:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a05:8980::,2a05:8987:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a05:89c0::,2a05:89c7:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a05:8a00::,2a05:8a07:ffff:ffff:ffff:ffff:ffff:ffff,TR
+2a05:8a40::,2a05:8a47:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a05:8a80::,2a05:8a87:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a05:8ac0::,2a05:8ac7:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a05:8b00::,2a05:8b07:ffff:ffff:ffff:ffff:ffff:ffff,LB
+2a05:8b40::,2a05:8b47:ffff:ffff:ffff:ffff:ffff:ffff,IL
+2a05:8b80::,2a05:8b87:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a05:8bc0::,2a05:8bc7:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a05:8c00::,2a05:8c07:ffff:ffff:ffff:ffff:ffff:ffff,GI
+2a05:8c40::,2a05:8c47:ffff:ffff:ffff:ffff:ffff:ffff,FI
+2a05:8c80::,2a05:8c87:ffff:ffff:ffff:ffff:ffff:ffff,IE
+2a05:8cc0::,2a05:8cc7:ffff:ffff:ffff:ffff:ffff:ffff,BG
+2a05:8d00::,2a05:8d07:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a05:8d40::,2a05:8d47:ffff:ffff:ffff:ffff:ffff:ffff,IL
+2a05:8d80::,2a05:8d87:ffff:ffff:ffff:ffff:ffff:ffff,IE
+2a05:8dc0::,2a05:8dc7:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a05:8e00::,2a05:8e07:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a05:8e40::,2a05:8e47:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a05:8e80::,2a05:8e87:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a05:8ec0::,2a05:8ec7:ffff:ffff:ffff:ffff:ffff:ffff,LB
+2a05:8f00::,2a05:8f07:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a05:8f40::,2a05:8f47:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a05:8f80::,2a05:8f87:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a05:8fc0::,2a05:8fc7:ffff:ffff:ffff:ffff:ffff:ffff,RS
+2a05:9000::,2a05:9007:ffff:ffff:ffff:ffff:ffff:ffff,SA
+2a05:9040::,2a05:9047:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a05:9080::,2a05:9087:ffff:ffff:ffff:ffff:ffff:ffff,IR
+2a05:90c0::,2a05:90c7:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a05:9100::,2a05:9107:ffff:ffff:ffff:ffff:ffff:ffff,FI
+2a05:9140::,2a05:9147:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a05:9180::,2a05:9187:ffff:ffff:ffff:ffff:ffff:ffff,IR
+2a05:91c0::,2a05:91c7:ffff:ffff:ffff:ffff:ffff:ffff,RO
+2a05:9200::,2a05:9207:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a05:9240::,2a05:9247:ffff:ffff:ffff:ffff:ffff:ffff,IR
+2a05:9280::,2a05:9287:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a05:92c0::,2a05:92c7:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a05:9300::,2a05:9307:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a05:9340::,2a05:9347:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a05:9380::,2a05:9387:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a05:93c0::,2a05:93c7:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a05:9400::,2a05:9407:ffff:ffff:ffff:ffff:ffff:ffff,BG
+2a05:9440::,2a05:9447:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a05:9480::,2a05:9487:ffff:ffff:ffff:ffff:ffff:ffff,IQ
+2a05:94c0::,2a05:94c7:ffff:ffff:ffff:ffff:ffff:ffff,IR
+2a05:9500::,2a05:9507:ffff:ffff:ffff:ffff:ffff:ffff,TR
+2a05:9540::,2a05:9547:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a05:9580::,2a05:9587:ffff:ffff:ffff:ffff:ffff:ffff,HU
+2a05:95c0::,2a05:95c7:ffff:ffff:ffff:ffff:ffff:ffff,TR
+2a05:9600::,2a05:9607:ffff:ffff:ffff:ffff:ffff:ffff,IE
+2a05:9640::,2a05:9647:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a05:9680::,2a05:9687:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a05:96c0::,2a05:96c7:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a05:9700::,2a05:9707:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a05:9740::,2a05:9747:ffff:ffff:ffff:ffff:ffff:ffff,LB
+2a05:9780::,2a05:9787:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a05:97c0::,2a05:97c7:ffff:ffff:ffff:ffff:ffff:ffff,GE
+2a05:9800::,2a05:9807:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a05:9840::,2a05:9847:ffff:ffff:ffff:ffff:ffff:ffff,BE
+2a05:9880::,2a05:9887:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a05:98c0::,2a05:98c7:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a05:9900::,2a05:9907:ffff:ffff:ffff:ffff:ffff:ffff,LT
+2a05:9940::,2a05:9947:ffff:ffff:ffff:ffff:ffff:ffff,IR
+2a05:9980::,2a05:9987:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a05:99c0::,2a05:99c7:ffff:ffff:ffff:ffff:ffff:ffff,IR
+2a05:9a00::,2a05:9a07:ffff:ffff:ffff:ffff:ffff:ffff,IR
+2a05:9a40::,2a05:9a47:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a05:9a80::,2a05:9a87:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a05:9ac0::,2a05:9ac7:ffff:ffff:ffff:ffff:ffff:ffff,NO
+2a05:9b00::,2a05:9b07:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a05:9b40::,2a05:9b47:ffff:ffff:ffff:ffff:ffff:ffff,AZ
+2a05:9b80::,2a05:9b87:ffff:ffff:ffff:ffff:ffff:ffff,BE
+2a05:9bc0::,2a05:9bc7:ffff:ffff:ffff:ffff:ffff:ffff,TR
+2a05:9c00::,2a05:9c07:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a05:9c40::,2a05:9c47:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a05:9c80::,2a05:9c87:ffff:ffff:ffff:ffff:ffff:ffff,US
+2a05:9cc0::,2a05:9cc7:ffff:ffff:ffff:ffff:ffff:ffff,NO
+2a05:9d00::,2a05:9d07:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a05:9d40::,2a05:9d47:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a05:9d80::,2a05:9d87:ffff:ffff:ffff:ffff:ffff:ffff,IR
+2a05:9dc0::,2a05:9dc7:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a05:9e00::,2a05:9e07:ffff:ffff:ffff:ffff:ffff:ffff,IL
+2a05:9e40::,2a05:9e47:ffff:ffff:ffff:ffff:ffff:ffff,IR
+2a05:9e80::,2a05:9e87:ffff:ffff:ffff:ffff:ffff:ffff,FI
+2a05:9ec0::,2a05:9ec7:ffff:ffff:ffff:ffff:ffff:ffff,TR
+2a05:9f00::,2a05:9f07:ffff:ffff:ffff:ffff:ffff:ffff,PT
+2a05:9f80::,2a05:9f87:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a05:9fc0::,2a05:9fc7:ffff:ffff:ffff:ffff:ffff:ffff,IR
+2a05:a000::,2a05:a007:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a05:a040::,2a05:a047:ffff:ffff:ffff:ffff:ffff:ffff,PT
+2a05:a080::,2a05:a087:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a05:a0c0::,2a05:a0c7:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a05:a100::,2a05:a107:ffff:ffff:ffff:ffff:ffff:ffff,MK
+2a05:a140::,2a05:a147:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a05:a180::,2a05:a187:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a05:a1c0::,2a05:a1c7:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a05:a200::,2a05:a207:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a05:a240::,2a05:a247:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a05:a280::,2a05:a287:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a05:a2c0::,2a05:a2c7:ffff:ffff:ffff:ffff:ffff:ffff,SA
+2a05:a300::,2a05:a307:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a05:a340::,2a05:a347:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a05:a380::,2a05:a387:ffff:ffff:ffff:ffff:ffff:ffff,IR
+2a05:a3c0::,2a05:a3c7:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a05:a440::,2a05:a447:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a05:a480::,2a05:a487:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a05:a4c0::,2a05:a4c7:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a05:a500::,2a05:a507:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a05:a540::,2a05:a547:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a05:a580::,2a05:a587:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a05:a5c0::,2a05:a5c7:ffff:ffff:ffff:ffff:ffff:ffff,GR
+2a05:a600::,2a05:a607:ffff:ffff:ffff:ffff:ffff:ffff,DK
+2a05:a640::,2a05:a647:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a05:a680::,2a05:a687:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a05:a6c0::,2a05:a6c7:ffff:ffff:ffff:ffff:ffff:ffff,IR
+2a05:a700::,2a05:a707:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a05:a740::,2a05:a747:ffff:ffff:ffff:ffff:ffff:ffff,TR
+2a05:a780::,2a05:a787:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a05:a7c0::,2a05:a7c7:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a05:a800::,2a05:a807:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a05:a840::,2a05:a847:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a05:a880::,2a05:a887:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a05:a8c0::,2a05:a8c7:ffff:ffff:ffff:ffff:ffff:ffff,SY
+2a05:a900::,2a05:a907:ffff:ffff:ffff:ffff:ffff:ffff,DK
+2a05:a940::,2a05:a947:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a05:a980::,2a05:a987:ffff:ffff:ffff:ffff:ffff:ffff,IE
+2a05:a9c0::,2a05:a9c7:ffff:ffff:ffff:ffff:ffff:ffff,AT
+2a05:aa00::,2a05:aa07:ffff:ffff:ffff:ffff:ffff:ffff,SK
+2a05:aa40::,2a05:aa47:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a05:aa80::,2a05:aa87:ffff:ffff:ffff:ffff:ffff:ffff,FI
+2a05:aac0::,2a05:aac7:ffff:ffff:ffff:ffff:ffff:ffff,NO
+2a05:ab00::,2a05:ab07:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a05:ab40::,2a05:ab47:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a05:ab80::,2a05:ab87:ffff:ffff:ffff:ffff:ffff:ffff,IR
+2a05:abc0::,2a05:abc7:ffff:ffff:ffff:ffff:ffff:ffff,TR
+2a05:ac00::,2a05:ac07:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a05:ac40::,2a05:ac47:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a05:ac80::,2a05:ac87:ffff:ffff:ffff:ffff:ffff:ffff,TR
+2a05:acc0::,2a05:acc7:ffff:ffff:ffff:ffff:ffff:ffff,SI
+2a05:ad00::,2a05:ad07:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a05:ad40::,2a05:ad47:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a05:ad80::,2a05:ad87:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a05:adc0::,2a05:adc7:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a05:ae00::,2a05:ae07:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a05:ae40::,2a05:ae47:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a05:ae80::,2a05:ae87:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a05:aec0::,2a05:aec7:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a05:af00::,2a05:af07:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a05:af40::,2a05:af47:ffff:ffff:ffff:ffff:ffff:ffff,TR
+2a05:af80::,2a05:af87:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a05:afc0::,2a05:afc7:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a05:b000::,2a05:b007:ffff:ffff:ffff:ffff:ffff:ffff,BE
+2a05:b040::,2a05:b047:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a05:b080::,2a05:b087:ffff:ffff:ffff:ffff:ffff:ffff,RO
+2a05:b0c0::,2a05:b0c7:ffff:ffff:ffff:ffff:ffff:ffff,RO
+2a05:b100::,2a05:b107:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a05:b140::,2a05:b147:ffff:ffff:ffff:ffff:ffff:ffff,TR
+2a05:b180::,2a05:b187:ffff:ffff:ffff:ffff:ffff:ffff,UA
+2a05:b1c0::,2a05:b1c7:ffff:ffff:ffff:ffff:ffff:ffff,IR
+2a05:b200::,2a05:b207:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a05:b240::,2a05:b247:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a05:b280::,2a05:b287:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a05:b2c0::,2a05:b2c7:ffff:ffff:ffff:ffff:ffff:ffff,TR
+2a05:b300::,2a05:b307:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a05:b340::,2a05:b347:ffff:ffff:ffff:ffff:ffff:ffff,UA
+2a05:b380::,2a05:b387:ffff:ffff:ffff:ffff:ffff:ffff,TR
+2a05:b3c0::,2a05:b3c7:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a05:b400::,2a05:b407:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a05:b440::,2a05:b447:ffff:ffff:ffff:ffff:ffff:ffff,TR
+2a05:b480::,2a05:b487:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a05:b4c0::,2a05:b4c7:ffff:ffff:ffff:ffff:ffff:ffff,IL
+2a05:b500::,2a05:b507:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a05:b540::,2a05:b547:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a05:b580::,2a05:b587:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a05:b5c0::,2a05:b5c7:ffff:ffff:ffff:ffff:ffff:ffff,UA
+2a05:b600::,2a05:b607:ffff:ffff:ffff:ffff:ffff:ffff,SM
+2a05:b640::,2a05:b647:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a05:b680::,2a05:b687:ffff:ffff:ffff:ffff:ffff:ffff,RO
+2a05:b6c0::,2a05:b6c7:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a05:b700::,2a05:b707:ffff:ffff:ffff:ffff:ffff:ffff,TR
+2a05:b740::,2a05:b747:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a05:b780::,2a05:b787:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a05:b7c0::,2a05:b7c7:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a05:b800::,2a05:b807:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a05:b840::,2a05:b847:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a05:b880::,2a05:b887:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a05:b8c0::,2a05:b8c7:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a05:b900::,2a05:b907:ffff:ffff:ffff:ffff:ffff:ffff,TR
+2a05:b940::,2a05:b947:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a05:b980::,2a05:b987:ffff:ffff:ffff:ffff:ffff:ffff,LB
+2a05:b9c0::,2a05:b9c7:ffff:ffff:ffff:ffff:ffff:ffff,FI
+2a05:ba00::,2a05:ba07:ffff:ffff:ffff:ffff:ffff:ffff,TR
+2a05:ba40::,2a05:ba47:ffff:ffff:ffff:ffff:ffff:ffff,IR
+2a05:ba80::,2a05:ba87:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a05:bac0::,2a05:bac7:ffff:ffff:ffff:ffff:ffff:ffff,TR
+2a05:bb00::,2a05:bb07:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a05:bb40::,2a05:bb47:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a05:bb80::,2a05:bb87:ffff:ffff:ffff:ffff:ffff:ffff,IL
+2a05:bbc0::,2a05:bbc7:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a05:bc00::,2a05:bc07:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a05:bc40::,2a05:bc47:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a05:bc80::,2a05:bc87:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a05:bcc0::,2a05:bcc7:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a05:bd00::,2a05:bd07:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a05:bd40::,2a05:bd47:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a05:bd80::,2a05:bd87:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a05:bdc0::,2a05:bdc7:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a05:be00::,2a05:be07:ffff:ffff:ffff:ffff:ffff:ffff,BE
+2a05:be40::,2a05:be47:ffff:ffff:ffff:ffff:ffff:ffff,NO
+2a05:be80::,2a05:be87:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a05:bec0::,2a05:bec7:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a05:bf00::,2a05:bf07:ffff:ffff:ffff:ffff:ffff:ffff,TR
+2a05:bf40::,2a05:bf47:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a05:bf80::,2a05:bf87:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a05:bfc0::,2a05:bfc7:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a05:c000::,2a05:c007:ffff:ffff:ffff:ffff:ffff:ffff,IR
+2a05:c040::,2a05:c047:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a05:c080::,2a05:c087:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a05:c0c0::,2a05:c0c7:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a05:c100::,2a05:c107:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a05:c140::,2a05:c147:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a05:c180::,2a05:c187:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a05:c1c0::,2a05:c1c7:ffff:ffff:ffff:ffff:ffff:ffff,TR
+2a05:c200::,2a05:c207:ffff:ffff:ffff:ffff:ffff:ffff,BE
+2a05:c240::,2a05:c247:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a05:c280::,2a05:c287:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a05:c2c0::,2a05:c2c7:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a05:c300::,2a05:c307:ffff:ffff:ffff:ffff:ffff:ffff,LB
+2a05:c340::,2a05:c347:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a05:c380::,2a05:c387:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a05:c3c0::,2a05:c3c7:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a05:c400::,2a05:c407:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a05:c440::,2a05:c447:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a05:c480::,2a05:c487:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a05:c4c0::,2a05:c4c7:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a05:c500::,2a05:c507:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a05:c540::,2a05:c547:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a05:c580::,2a05:c587:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a05:c5c0::,2a05:c5c7:ffff:ffff:ffff:ffff:ffff:ffff,RO
+2a05:c600::,2a05:c607:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a05:c640::,2a05:c647:ffff:ffff:ffff:ffff:ffff:ffff,TR
+2a05:c680::,2a05:c687:ffff:ffff:ffff:ffff:ffff:ffff,AT
+2a05:c6c0::,2a05:c6c7:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a05:c700::,2a05:c707:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a05:c740::,2a05:c747:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a05:c780::,2a05:c787:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a05:c7c0::,2a05:c7c7:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a05:c800::,2a05:c807:ffff:ffff:ffff:ffff:ffff:ffff,PT
+2a05:c840::,2a05:c847:ffff:ffff:ffff:ffff:ffff:ffff,GR
+2a05:c880::,2a05:c887:ffff:ffff:ffff:ffff:ffff:ffff,KG
+2a05:c8c0::,2a05:c8c7:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a05:c900::,2a05:c907:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a05:c940::,2a05:c947:ffff:ffff:ffff:ffff:ffff:ffff,NO
+2a05:c980::,2a05:c987:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a05:c9c0::,2a05:c9c7:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a05:ca00::,2a05:ca07:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a05:ca40::,2a05:ca47:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a05:ca80::,2a05:ca87:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a05:cac0::,2a05:cac7:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a05:cb00::,2a05:cb07:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a05:cb40::,2a05:cb47:ffff:ffff:ffff:ffff:ffff:ffff,RO
+2a05:cb80::,2a05:cb87:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a05:cbc0::,2a05:cbc7:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a05:cc00::,2a05:cc07:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a05:cc40::,2a05:cc47:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a05:cc80::,2a05:cc87:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a05:ccc0::,2a05:ccc7:ffff:ffff:ffff:ffff:ffff:ffff,TR
+2a05:cd00::,2a05:cd07:ffff:ffff:ffff:ffff:ffff:ffff,IR
+2a05:cd40::,2a05:cd47:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a05:cd80::,2a05:cd87:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a05:cdc0::,2a05:cdc7:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a05:ce00::,2a05:ce07:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a05:ce40::,2a05:ce47:ffff:ffff:ffff:ffff:ffff:ffff,FI
+2a05:ce80::,2a05:ce87:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a05:cec0::,2a05:cec7:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a05:cf00::,2a05:cf07:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a05:cf40::,2a05:cf47:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a05:cf80::,2a05:cf87:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a05:cfc0::,2a05:cfc7:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a05:d000::,2a05:d07f:ffff:ffff:ffff:ffff:ffff:ffff,IE
+2a05:d400::,2a05:d407:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a05:d440::,2a05:d447:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a05:d480::,2a05:d487:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a05:d4c0::,2a05:d4c7:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a05:d500::,2a05:d507:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a05:d540::,2a05:d547:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a05:d580::,2a05:d587:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a05:d5c0::,2a05:d5c7:ffff:ffff:ffff:ffff:ffff:ffff,GE
+2a05:d600::,2a05:d607:ffff:ffff:ffff:ffff:ffff:ffff,LB
+2a05:d640::,2a05:d647:ffff:ffff:ffff:ffff:ffff:ffff,IQ
+2a05:d680::,2a05:d687:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a05:d6c0::,2a05:d6c7:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a05:d700::,2a05:d707:ffff:ffff:ffff:ffff:ffff:ffff,US
+2a05:d740::,2a05:d747:ffff:ffff:ffff:ffff:ffff:ffff,IR
+2a05:d780::,2a05:d787:ffff:ffff:ffff:ffff:ffff:ffff,UA
+2a05:d7c0::,2a05:d7c7:ffff:ffff:ffff:ffff:ffff:ffff,SA
+2a05:d800::,2a05:d807:ffff:ffff:ffff:ffff:ffff:ffff,MK
+2a05:d840::,2a05:d847:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a05:d880::,2a05:d887:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a05:d8c0::,2a05:d8c7:ffff:ffff:ffff:ffff:ffff:ffff,IQ
+2a05:d900::,2a05:d907:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a05:d940::,2a05:d947:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a05:d980::,2a05:d987:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a05:d9c0::,2a05:d9c7:ffff:ffff:ffff:ffff:ffff:ffff,AT
+2a05:da00::,2a05:da07:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a05:da40::,2a05:da47:ffff:ffff:ffff:ffff:ffff:ffff,AT
+2a05:da80::,2a05:da87:ffff:ffff:ffff:ffff:ffff:ffff,RO
+2a05:dac0::,2a05:dac7:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a05:db00::,2a05:db07:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a05:db40::,2a05:db47:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a05:db80::,2a05:db87:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a05:dbc0::,2a05:dbc7:ffff:ffff:ffff:ffff:ffff:ffff,HR
+2a05:dc00::,2a05:dc07:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a05:dc40::,2a05:dc47:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a05:dc80::,2a05:dc87:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a05:dcc0::,2a05:dcc7:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a05:dd00::,2a05:dd07:ffff:ffff:ffff:ffff:ffff:ffff,TR
+2a05:dd40::,2a05:dd47:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a05:dd80::,2a05:dd87:ffff:ffff:ffff:ffff:ffff:ffff,AT
+2a05:ddc0::,2a05:ddc7:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a05:de00::,2a05:de07:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a05:de40::,2a05:de47:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a05:de80::,2a05:de87:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a05:dec0::,2a05:dec7:ffff:ffff:ffff:ffff:ffff:ffff,CY
+2a05:df00::,2a05:df07:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a05:df40::,2a05:df47:ffff:ffff:ffff:ffff:ffff:ffff,PT
+2a05:df80::,2a05:df87:ffff:ffff:ffff:ffff:ffff:ffff,HU
+2a05:dfc0::,2a05:dfc7:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a05:e000::,2a05:e007:ffff:ffff:ffff:ffff:ffff:ffff,DK
+2a05:e040::,2a05:e047:ffff:ffff:ffff:ffff:ffff:ffff,KZ
+2a05:e080::,2a05:e087:ffff:ffff:ffff:ffff:ffff:ffff,IE
+2a05:e0c0::,2a05:e0c7:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a05:e100::,2a05:e107:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a05:e140::,2a05:e147:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a05:e180::,2a05:e187:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a05:e1c0::,2a05:e1c7:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a05:e200::,2a05:e207:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a05:e240::,2a05:e247:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a05:e280::,2a05:e287:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a05:e2c0::,2a05:e2c7:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a05:e300::,2a05:e307:ffff:ffff:ffff:ffff:ffff:ffff,SK
+2a05:e340::,2a05:e347:ffff:ffff:ffff:ffff:ffff:ffff,NO
+2a05:e380::,2a05:e387:ffff:ffff:ffff:ffff:ffff:ffff,LB
+2a05:e3c0::,2a05:e3c7:ffff:ffff:ffff:ffff:ffff:ffff,AT
+2a05:e400::,2a05:e407:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a05:e440::,2a05:e447:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a05:e480::,2a05:e487:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a05:e4c0::,2a05:e4c7:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a05:e500::,2a05:e507:ffff:ffff:ffff:ffff:ffff:ffff,IQ
+2a05:e540::,2a05:e547:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a05:e580::,2a05:e587:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a05:e5c0::,2a05:e5c7:ffff:ffff:ffff:ffff:ffff:ffff,TR
+2a05:e600::,2a05:e607:ffff:ffff:ffff:ffff:ffff:ffff,AZ
+2a05:e640::,2a05:e647:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a05:e680::,2a05:e687:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a05:e6c0::,2a05:e6c7:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a05:e700::,2a05:e707:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a05:e740::,2a05:e747:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a05:e780::,2a05:e787:ffff:ffff:ffff:ffff:ffff:ffff,IR
+2a05:e7c0::,2a05:e7c7:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a05:e800::,2a05:e807:ffff:ffff:ffff:ffff:ffff:ffff,SK
+2a05:e840::,2a05:e847:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a05:e880::,2a05:e887:ffff:ffff:ffff:ffff:ffff:ffff,NO
+2a05:e8c0::,2a05:e8c7:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a05:e900::,2a05:e907:ffff:ffff:ffff:ffff:ffff:ffff,UA
+2a05:e940::,2a05:e947:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a05:e980::,2a05:e987:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a05:e9c0::,2a05:e9c7:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a05:ea00::,2a05:ea07:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a05:ea40::,2a05:ea47:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a05:ea80::,2a05:ea87:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a05:eac0::,2a05:eac7:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a05:eb00::,2a05:eb01:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a05:eb20::,2a05:eb23:ffff:ffff:ffff:ffff:ffff:ffff,BE
+2a05:eb40::,2a05:eb47:ffff:ffff:ffff:ffff:ffff:ffff,NO
+2a05:eb80::,2a05:eb87:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a05:ebc0::,2a05:ebc7:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a05:ec00::,2a05:ec07:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a05:ec40::,2a05:ec47:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a05:ec80::,2a05:ec87:ffff:ffff:ffff:ffff:ffff:ffff,AE
+2a05:ecc0::,2a05:ecc7:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a05:ed00::,2a05:ed07:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a05:ed40::,2a05:ed47:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a05:ed80::,2a05:ed87:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a05:edc0::,2a05:edc7:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a05:ee00::,2a05:ee07:ffff:ffff:ffff:ffff:ffff:ffff,GE
+2a05:ee40::,2a05:ee47:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a05:ee80::,2a05:ee87:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a05:eec0::,2a05:eec7:ffff:ffff:ffff:ffff:ffff:ffff,NO
+2a05:ef00::,2a05:ef07:ffff:ffff:ffff:ffff:ffff:ffff,TR
+2a05:ef40::,2a05:ef47:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a05:ef80::,2a05:ef87:ffff:ffff:ffff:ffff:ffff:ffff,IR
+2a05:efc0::,2a05:efc7:ffff:ffff:ffff:ffff:ffff:ffff,IR
+2a05:f000::,2a05:f007:ffff:ffff:ffff:ffff:ffff:ffff,TR
+2a05:f040::,2a05:f047:ffff:ffff:ffff:ffff:ffff:ffff,KZ
+2a05:f080::,2a05:f087:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a05:f0c0::,2a05:f0c7:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a05:f100::,2a05:f107:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a05:f140::,2a05:f147:ffff:ffff:ffff:ffff:ffff:ffff,AM
+2a05:f180::,2a05:f187:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a05:f1c0::,2a05:f1c7:ffff:ffff:ffff:ffff:ffff:ffff,IE
+2a05:f200::,2a05:f207:ffff:ffff:ffff:ffff:ffff:ffff,AZ
+2a05:f240::,2a05:f247:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a05:f280::,2a05:f287:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a05:f2c0::,2a05:f2c7:ffff:ffff:ffff:ffff:ffff:ffff,RO
+2a05:f300::,2a05:f307:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a05:f340::,2a05:f347:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a05:f380::,2a05:f387:ffff:ffff:ffff:ffff:ffff:ffff,BE
+2a05:f3c0::,2a05:f3c7:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a05:f400::,2a05:f407:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a05:f440::,2a05:f447:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a05:f480::,2a05:f487:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a05:f4c0::,2a05:f4c7:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a05:f500::,2a05:f507:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a05:f540::,2a05:f547:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a05:f580::,2a05:f587:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a05:f5c0::,2a05:f5c7:ffff:ffff:ffff:ffff:ffff:ffff,HU
+2a05:f600::,2a05:f607:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a05:f640::,2a05:f647:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a05:f680::,2a05:f687:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a05:f700::,2a05:f707:ffff:ffff:ffff:ffff:ffff:ffff,DK
+2a05:f740::,2a05:f747:ffff:ffff:ffff:ffff:ffff:ffff,TR
+2a05:f780::,2a05:f787:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a05:f7c0::,2a05:f7c7:ffff:ffff:ffff:ffff:ffff:ffff,TR
+2a05:f800::,2a05:f807:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a05:f840::,2a05:f847:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a05:f880::,2a05:f887:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a05:f8c0::,2a05:f8c7:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a05:f900::,2a05:f907:ffff:ffff:ffff:ffff:ffff:ffff,RO
+2a05:f940::,2a05:f947:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a05:f980::,2a05:f987:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a05:f9c0::,2a05:f9c7:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a05:fa00::,2a05:fa07:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a05:fa40::,2a05:fa47:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a05:fa80::,2a05:fa87:ffff:ffff:ffff:ffff:ffff:ffff,ES
2c0e::,2c0e:fff:ffff:ffff:ffff:ffff:ffff:ffff,EG
-2c0e:2000::,2c0e:200f:ffff:ffff:ffff:ffff:ffff:ffff,ZA
+2c0e:2000::,2c0e:2fff:ffff:ffff:ffff:ffff:ffff:ffff,ZA
+2c0f:f400::,2c0f:f400:ffff:ffff:ffff:ffff:ffff:ffff,ZA
+2c0f:f408::,2c0f:f408:ffff:ffff:ffff:ffff:ffff:ffff,KE
+2c0f:f410::,2c0f:f410:ffff:ffff:ffff:ffff:ffff:ffff,NG
+2c0f:f418::,2c0f:f418:ffff:ffff:ffff:ffff:ffff:ffff,NG
+2c0f:f420::,2c0f:f420:ffff:ffff:ffff:ffff:ffff:ffff,CV
2c0f:f600::,2c0f:f600:ffff:ffff:ffff:ffff:ffff:ffff,GN
2c0f:f608::,2c0f:f608:ffff:ffff:ffff:ffff:ffff:ffff,RE
2c0f:f610::,2c0f:f610:ffff:ffff:ffff:ffff:ffff:ffff,ZA
@@ -20818,6 +23098,16 @@
2c0f:f798::,2c0f:f798:ffff:ffff:ffff:ffff:ffff:ffff,ZA
2c0f:f7a0::,2c0f:f7a0:ffff:ffff:ffff:ffff:ffff:ffff,ZW
2c0f:f7a8::,2c0f:f7af:ffff:ffff:ffff:ffff:ffff:ffff,ZA
+2c0f:f7b0::,2c0f:f7b0:ffff:ffff:ffff:ffff:ffff:ffff,TZ
+2c0f:f7b8::,2c0f:f7b8:ffff:ffff:ffff:ffff:ffff:ffff,ZA
+2c0f:f7c0::,2c0f:f7c0:ffff:ffff:ffff:ffff:ffff:ffff,GH
+2c0f:f7c8::,2c0f:f7c8:ffff:ffff:ffff:ffff:ffff:ffff,TN
+2c0f:f7d0::,2c0f:f7d0:ffff:ffff:ffff:ffff:ffff:ffff,CM
+2c0f:f7d8::,2c0f:f7d8:ffff:ffff:ffff:ffff:ffff:ffff,TZ
+2c0f:f7e0::,2c0f:f7e0:ffff:ffff:ffff:ffff:ffff:ffff,TN
+2c0f:f7e8::,2c0f:f7e8:ffff:ffff:ffff:ffff:ffff:ffff,ZA
+2c0f:f7f0::,2c0f:f7f0:ffff:ffff:ffff:ffff:ffff:ffff,KE
+2c0f:f7f8::,2c0f:f7f8:ffff:ffff:ffff:ffff:ffff:ffff,ZA
2c0f:f800::,2c0f:f80f:ffff:ffff:ffff:ffff:ffff:ffff,ZA
2c0f:f810::,2c0f:f810:ffff:ffff:ffff:ffff:ffff:ffff,AO
2c0f:f818::,2c0f:f818:ffff:ffff:ffff:ffff:ffff:ffff,BJ
@@ -20836,7 +23126,6 @@
2c0f:f890::,2c0f:f890:ffff:ffff:ffff:ffff:ffff:ffff,GM
2c0f:f898::,2c0f:f898:ffff:ffff:ffff:ffff:ffff:ffff,MU
2c0f:f8a0::,2c0f:f8a0:ffff:ffff:ffff:ffff:ffff:ffff,UG
-2c0f:f8a8::,2c0f:f8a8:ffff:ffff:ffff:ffff:ffff:ffff,ZA
2c0f:f8b0::,2c0f:f8b0:ffff:ffff:ffff:ffff:ffff:ffff,BF
2c0f:f8b8::,2c0f:f8b8:ffff:ffff:ffff:ffff:ffff:ffff,ZA
2c0f:f8c0::,2c0f:f8c0:ffff:ffff:ffff:ffff:ffff:ffff,GQ
@@ -20935,7 +23224,6 @@
2c0f:fbe0::,2c0f:fc1f:ffff:ffff:ffff:ffff:ffff:ffff,ZA
2c0f:fc40::,2c0f:fc40:ffff:ffff:ffff:ffff:ffff:ffff,EG
2c0f:fc48::,2c0f:fc48:ffff:ffff:ffff:ffff:ffff:ffff,MW
-2c0f:fc50::,2c0f:fc50:ffff:ffff:ffff:ffff:ffff:ffff,ZW
2c0f:fc58::,2c0f:fc58:ffff:ffff:ffff:ffff:ffff:ffff,MW
2c0f:fc60::,2c0f:fc61:ffff:ffff:ffff:ffff:ffff:ffff,NG
2c0f:fc68::,2c0f:fc68:ffff:ffff:ffff:ffff:ffff:ffff,ZA
@@ -20983,7 +23271,6 @@
2c0f:fdc8::,2c0f:fdc8:ffff:ffff:ffff:ffff:ffff:ffff,ZA
2c0f:fdd0::,2c0f:fdd0:ffff:ffff:ffff:ffff:ffff:ffff,ZA
2c0f:fdd8::,2c0f:fdd8:ffff:ffff:ffff:ffff:ffff:ffff,ZA
-2c0f:fde0::,2c0f:fde0:ffff:ffff:ffff:ffff:ffff:ffff,MW
2c0f:fde8::,2c0f:fde8:ffff:ffff:ffff:ffff:ffff:ffff,MW
2c0f:fdf0::,2c0f:fdf0:ffff:ffff:ffff:ffff:ffff:ffff,ZA
2c0f:fdf8::,2c0f:fdf8:ffff:ffff:ffff:ffff:ffff:ffff,ZA
diff --git a/src/ext/csiphash.c b/src/ext/csiphash.c
index faca9ef362..27c5358ebe 100644
--- a/src/ext/csiphash.c
+++ b/src/ext/csiphash.c
@@ -100,10 +100,18 @@ uint64_t siphash24(const void *src, unsigned long src_sz, const struct sipkey *k
uint64_t k0 = key->k0;
uint64_t k1 = key->k1;
uint64_t b = (uint64_t)src_sz << 56;
+#ifdef UNALIGNED_OK
const uint64_t *in = (uint64_t*)src;
+#else
+ /* On platforms where alignment matters, if 'in' is a pointer to a
+ * datatype that must be aligned, the compiler is allowed to
+ * generate code that assumes that it is aligned as such.
+ */
+ const uint8_t *in = (uint8_t *)src;
+#endif
- uint64_t t;
- uint8_t *pt, *m;
+ uint64_t t;
+ uint8_t *pt, *m;
uint64_t v0 = k0 ^ 0x736f6d6570736575ULL;
uint64_t v1 = k1 ^ 0x646f72616e646f6dULL;
@@ -113,12 +121,14 @@ uint64_t siphash24(const void *src, unsigned long src_sz, const struct sipkey *k
while (src_sz >= 8) {
#ifdef UNALIGNED_OK
uint64_t mi = _le64toh(*in);
+ in += 1;
#else
uint64_t mi;
memcpy(&mi, in, 8);
mi = _le64toh(mi);
+ in += 8;
#endif
- in += 1; src_sz -= 8;
+ src_sz -= 8;
v3 ^= mi;
DOUBLE_ROUND(v0,v1,v2,v3);
v0 ^= mi;
diff --git a/src/ext/eventdns.c b/src/ext/eventdns.c
index 2b2988f1ec..a0c7ff29fa 100644
--- a/src/ext/eventdns.c
+++ b/src/ext/eventdns.c
@@ -37,7 +37,7 @@
*/
#include "eventdns_tor.h"
-#include "../common/util.h"
+#include "util.h"
#include <sys/types.h>
/* #define NDEBUG */
diff --git a/src/ext/ht.h b/src/ext/ht.h
index e7a76196f5..19a67a6a41 100644
--- a/src/ext/ht.h
+++ b/src/ext/ht.h
@@ -121,16 +121,24 @@ ht_string_hash(const char *s)
((void)0)
#endif
+#define HT_BUCKET_NUM_(head, field, elm, hashfn) \
+ (HT_ELT_HASH_(elm,field,hashfn) % head->hth_table_length)
+
/* Helper: alias for the bucket containing 'elm'. */
#define HT_BUCKET_(head, field, elm, hashfn) \
- ((head)->hth_table[HT_ELT_HASH_(elm,field,hashfn) \
- % head->hth_table_length])
+ ((head)->hth_table[HT_BUCKET_NUM_(head, field, elm, hashfn)])
#define HT_FOREACH(x, name, head) \
for ((x) = HT_START(name, head); \
(x) != NULL; \
(x) = HT_NEXT(name, head, x))
+#ifndef HT_NDEBUG
+#define HT_ASSERT_(x) tor_assert(x)
+#else
+#define HT_ASSERT_(x) (void)0
+#endif
+
#define HT_PROTOTYPE(name, type, field, hashfn, eqfn) \
int name##_HT_GROW(struct name *ht, unsigned min_capacity); \
void name##_HT_CLEAR(struct name *ht); \
@@ -257,8 +265,11 @@ ht_string_hash(const char *s)
{ \
unsigned b = 0; \
while (b < head->hth_table_length) { \
- if (head->hth_table[b]) \
+ if (head->hth_table[b]) { \
+ HT_ASSERT_(b == \
+ HT_BUCKET_NUM_(head,field,head->hth_table[b],hashfn)); \
return &head->hth_table[b]; \
+ } \
++b; \
} \
return NULL; \
@@ -272,13 +283,17 @@ ht_string_hash(const char *s)
name##_HT_NEXT(struct name *head, struct type **elm) \
{ \
if ((*elm)->field.hte_next) { \
+ HT_ASSERT_(HT_BUCKET_NUM_(head,field,*elm,hashfn) == \
+ HT_BUCKET_NUM_(head,field,(*elm)->field.hte_next,hashfn)); \
return &(*elm)->field.hte_next; \
} else { \
- unsigned b = (HT_ELT_HASH_(*elm, field, hashfn) \
- % head->hth_table_length)+1; \
+ unsigned b = HT_BUCKET_NUM_(head,field,*elm,hashfn)+1; \
while (b < head->hth_table_length) { \
- if (head->hth_table[b]) \
+ if (head->hth_table[b]) { \
+ HT_ASSERT_(b == \
+ HT_BUCKET_NUM_(head,field,head->hth_table[b],hashfn)); \
return &head->hth_table[b]; \
+ } \
++b; \
} \
return NULL; \
@@ -418,7 +433,7 @@ ht_string_hash(const char *s)
for (elm = head->hth_table[i]; elm; elm = elm->field.hte_next) { \
if (HT_ELT_HASH_(elm, field, hashfn) != hashfn(elm)) \
return 1000 + i; \
- if ((HT_ELT_HASH_(elm, field, hashfn) % head->hth_table_length) != i) \
+ if (HT_BUCKET_NUM_(head,field,elm,hashfn) != i) \
return 10000 + i; \
++n; \
} \
diff --git a/src/ext/tinytest.c b/src/ext/tinytest.c
index cc054ad340..f6baeeb9a5 100644
--- a/src/ext/tinytest.c
+++ b/src/ext/tinytest.c
@@ -490,7 +490,7 @@ tinytest_format_hex_(const void *val_, unsigned long len)
return strdup("<allocation failure>");
cp = result;
for (i=0;i<len;++i) {
- *cp++ = "0123456789ABCDEF"[val[i] >> 4];
+ *cp++ = "0123456789ABCDEF"[(val[i] >> 4)&0x0f];
*cp++ = "0123456789ABCDEF"[val[i] & 0x0f];
}
while (ellipses--)
diff --git a/src/or/addressmap.c b/src/or/addressmap.c
index 64654218ef..9c29fb2acb 100644
--- a/src/or/addressmap.c
+++ b/src/or/addressmap.c
@@ -390,13 +390,35 @@ addressmap_rewrite(char *address, size_t maxlen,
goto done;
}
- if (ent && ent->source == ADDRMAPSRC_DNS) {
- sa_family_t f;
- tor_addr_t tmp;
- f = tor_addr_parse(&tmp, ent->new_address);
- if (f == AF_INET && !(flags & AMR_FLAG_USE_IPV4_DNS))
- goto done;
- else if (f == AF_INET6 && !(flags & AMR_FLAG_USE_IPV6_DNS))
+ switch (ent->source) {
+ case ADDRMAPSRC_DNS:
+ {
+ sa_family_t f;
+ tor_addr_t tmp;
+ f = tor_addr_parse(&tmp, ent->new_address);
+ if (f == AF_INET && !(flags & AMR_FLAG_USE_IPV4_DNS))
+ goto done;
+ else if (f == AF_INET6 && !(flags & AMR_FLAG_USE_IPV6_DNS))
+ goto done;
+ }
+ break;
+ case ADDRMAPSRC_CONTROLLER:
+ case ADDRMAPSRC_TORRC:
+ if (!(flags & AMR_FLAG_USE_MAPADDRESS))
+ goto done;
+ break;
+ case ADDRMAPSRC_AUTOMAP:
+ if (!(flags & AMR_FLAG_USE_AUTOMAP))
+ goto done;
+ break;
+ case ADDRMAPSRC_TRACKEXIT:
+ if (!(flags & AMR_FLAG_USE_TRACKEXIT))
+ goto done;
+ break;
+ case ADDRMAPSRC_NONE:
+ default:
+ log_warn(LD_BUG, "Unknown addrmap source value %d. Ignoring it.",
+ (int) ent->source);
goto done;
}
@@ -431,7 +453,7 @@ addressmap_rewrite(char *address, size_t maxlen,
if (exit_source_out)
*exit_source_out = exit_source;
if (expires_out)
- *expires_out = TIME_MAX;
+ *expires_out = expires;
return (rewrites > 0);
}
@@ -455,6 +477,8 @@ addressmap_rewrite_reverse(char *address, size_t maxlen, unsigned flags,
return 0;
else if (f == AF_INET6 && !(flags & AMR_FLAG_USE_IPV6_DNS))
return 0;
+ /* FFFF we should reverse-map virtual addresses even if we haven't
+ * enabled DNS cacheing. */
}
tor_asprintf(&s, "REVERSE[%s]", address);
@@ -676,10 +700,10 @@ client_dns_set_addressmap(entry_connection_t *for_conn,
return; /* If address was an IP address already, don't add a mapping. */
if (tor_addr_family(val) == AF_INET) {
- if (! for_conn->cache_ipv4_answers)
+ if (! for_conn->entry_cfg.cache_ipv4_answers)
return;
} else if (tor_addr_family(val) == AF_INET6) {
- if (! for_conn->cache_ipv6_answers)
+ if (! for_conn->entry_cfg.cache_ipv6_answers)
return;
}
@@ -708,8 +732,8 @@ client_dns_set_reverse_addressmap(entry_connection_t *for_conn,
{
tor_addr_t tmp_addr;
sa_family_t f = tor_addr_parse(&tmp_addr, address);
- if ((f == AF_INET && ! for_conn->cache_ipv4_answers) ||
- (f == AF_INET6 && ! for_conn->cache_ipv6_answers))
+ if ((f == AF_INET && ! for_conn->entry_cfg.cache_ipv4_answers) ||
+ (f == AF_INET6 && ! for_conn->entry_cfg.cache_ipv6_answers))
return;
}
tor_asprintf(&s, "REVERSE[%s]", address);
@@ -981,6 +1005,8 @@ addressmap_register_virtual_address(int type, char *new_address)
strmap_set(virtaddress_reversemap, new_address, vent);
addressmap_register(*addrp, new_address, 2, ADDRMAPSRC_AUTOMAP, 0, 0);
+ /* FFFF register corresponding reverse mapping. */
+
#if 0
{
/* Try to catch possible bugs */
diff --git a/src/or/addressmap.h b/src/or/addressmap.h
index bb737e47f4..ff108df024 100644
--- a/src/or/addressmap.h
+++ b/src/or/addressmap.h
@@ -16,8 +16,11 @@ void addressmap_clean(time_t now);
void addressmap_clear_configured(void);
void addressmap_clear_transient(void);
void addressmap_free_all(void);
-#define AMR_FLAG_USE_IPV4_DNS (1u<<0)
-#define AMR_FLAG_USE_IPV6_DNS (1u<<1)
+#define AMR_FLAG_USE_IPV4_DNS (1u<<0)
+#define AMR_FLAG_USE_IPV6_DNS (1u<<1)
+#define AMR_FLAG_USE_MAPADDRESS (1u<<2)
+#define AMR_FLAG_USE_AUTOMAP (1u<<3)
+#define AMR_FLAG_USE_TRACKEXIT (1u<<4)
int addressmap_rewrite(char *address, size_t maxlen, unsigned flags,
time_t *expires_out,
addressmap_entry_source_t *exit_source_out);
diff --git a/src/or/buffers.c b/src/or/buffers.c
index 6d1333844d..2d7dd937d8 100644
--- a/src/or/buffers.c
+++ b/src/or/buffers.c
@@ -20,8 +20,8 @@
#include "control.h"
#include "reasons.h"
#include "ext_orport.h"
-#include "../common/util.h"
-#include "../common/torlog.h"
+#include "util.h"
+#include "torlog.h"
#ifdef HAVE_UNISTD_H
#include <unistd.h>
#endif
@@ -105,114 +105,6 @@ chunk_repack(chunk_t *chunk)
/** Keep track of total size of allocated chunks for consistency asserts */
static size_t total_bytes_allocated_in_chunks = 0;
-
-#if defined(ENABLE_BUF_FREELISTS) || defined(RUNNING_DOXYGEN)
-/** A freelist of chunks. */
-typedef struct chunk_freelist_t {
- size_t alloc_size; /**< What size chunks does this freelist hold? */
- int max_length; /**< Never allow more than this number of chunks in the
- * freelist. */
- int slack; /**< When trimming the freelist, leave this number of extra
- * chunks beyond lowest_length.*/
- int cur_length; /**< How many chunks on the freelist now? */
- int lowest_length; /**< What's the smallest value of cur_length since the
- * last time we cleaned this freelist? */
- uint64_t n_alloc;
- uint64_t n_free;
- uint64_t n_hit;
- chunk_t *head; /**< First chunk on the freelist. */
-} chunk_freelist_t;
-
-/** Macro to help define freelists. */
-#define FL(a,m,s) { a, m, s, 0, 0, 0, 0, 0, NULL }
-
-/** Static array of freelists, sorted by alloc_len, terminated by an entry
- * with alloc_size of 0. */
-static chunk_freelist_t freelists[] = {
- FL(4096, 256, 8), FL(8192, 128, 4), FL(16384, 64, 4), FL(32768, 32, 2),
- FL(0, 0, 0)
-};
-#undef FL
-/** How many times have we looked for a chunk of a size that no freelist
- * could help with? */
-static uint64_t n_freelist_miss = 0;
-
-static void assert_freelist_ok(chunk_freelist_t *fl);
-
-/** Return the freelist to hold chunks of size <b>alloc</b>, or NULL if
- * no freelist exists for that size. */
-static INLINE chunk_freelist_t *
-get_freelist(size_t alloc)
-{
- int i;
- for (i=0; (freelists[i].alloc_size <= alloc &&
- freelists[i].alloc_size); ++i ) {
- if (freelists[i].alloc_size == alloc) {
- return &freelists[i];
- }
- }
- return NULL;
-}
-
-/** Deallocate a chunk or put it on a freelist */
-static void
-chunk_free_unchecked(chunk_t *chunk)
-{
- size_t alloc;
- chunk_freelist_t *freelist;
-
- alloc = CHUNK_ALLOC_SIZE(chunk->memlen);
- freelist = get_freelist(alloc);
- if (freelist && freelist->cur_length < freelist->max_length) {
- chunk->next = freelist->head;
- freelist->head = chunk;
- ++freelist->cur_length;
- } else {
- if (freelist)
- ++freelist->n_free;
-#ifdef DEBUG_CHUNK_ALLOC
- tor_assert(alloc == chunk->DBG_alloc);
-#endif
- tor_assert(total_bytes_allocated_in_chunks >= alloc);
- total_bytes_allocated_in_chunks -= alloc;
- tor_free(chunk);
- }
-}
-
-/** Allocate a new chunk with a given allocation size, or get one from the
- * freelist. Note that a chunk with allocation size A can actually hold only
- * CHUNK_SIZE_WITH_ALLOC(A) bytes in its mem field. */
-static INLINE chunk_t *
-chunk_new_with_alloc_size(size_t alloc)
-{
- chunk_t *ch;
- chunk_freelist_t *freelist;
- tor_assert(alloc >= sizeof(chunk_t));
- freelist = get_freelist(alloc);
- if (freelist && freelist->head) {
- ch = freelist->head;
- freelist->head = ch->next;
- if (--freelist->cur_length < freelist->lowest_length)
- freelist->lowest_length = freelist->cur_length;
- ++freelist->n_hit;
- } else {
- if (freelist)
- ++freelist->n_alloc;
- else
- ++n_freelist_miss;
- ch = tor_malloc(alloc);
-#ifdef DEBUG_CHUNK_ALLOC
- ch->DBG_alloc = alloc;
-#endif
- total_bytes_allocated_in_chunks += alloc;
- }
- ch->next = NULL;
- ch->datalen = 0;
- ch->memlen = CHUNK_SIZE_WITH_ALLOC(alloc);
- ch->data = &ch->mem[0];
- return ch;
-}
-#else
static void
chunk_free_unchecked(chunk_t *chunk)
{
@@ -241,7 +133,6 @@ chunk_new_with_alloc_size(size_t alloc)
ch->data = &ch->mem[0];
return ch;
}
-#endif
/** Expand <b>chunk</b> until it can hold <b>sz</b> bytes, and return a
* new pointer to <b>chunk</b>. Old pointers are no longer valid. */
@@ -284,115 +175,6 @@ preferred_chunk_size(size_t target)
return sz;
}
-/** Remove from the freelists most chunks that have not been used since the
- * last call to buf_shrink_freelists(). Return the amount of memory
- * freed. */
-size_t
-buf_shrink_freelists(int free_all)
-{
-#ifdef ENABLE_BUF_FREELISTS
- int i;
- size_t total_freed = 0;
- disable_control_logging();
- for (i = 0; freelists[i].alloc_size; ++i) {
- int slack = freelists[i].slack;
- assert_freelist_ok(&freelists[i]);
- if (free_all || freelists[i].lowest_length > slack) {
- int n_to_free = free_all ? freelists[i].cur_length :
- (freelists[i].lowest_length - slack);
- int n_to_skip = freelists[i].cur_length - n_to_free;
- int orig_length = freelists[i].cur_length;
- int orig_n_to_free = n_to_free, n_freed=0;
- int orig_n_to_skip = n_to_skip;
- int new_length = n_to_skip;
- chunk_t **chp = &freelists[i].head;
- chunk_t *chunk;
- while (n_to_skip) {
- if (!(*chp) || ! (*chp)->next) {
- log_warn(LD_BUG, "I wanted to skip %d chunks in the freelist for "
- "%d-byte chunks, but only found %d. (Length %d)",
- orig_n_to_skip, (int)freelists[i].alloc_size,
- orig_n_to_skip-n_to_skip, freelists[i].cur_length);
- assert_freelist_ok(&freelists[i]);
- goto done;
- }
- // tor_assert((*chp)->next);
- chp = &(*chp)->next;
- --n_to_skip;
- }
- chunk = *chp;
- *chp = NULL;
- while (chunk) {
- chunk_t *next = chunk->next;
-#ifdef DEBUG_CHUNK_ALLOC
- tor_assert(chunk->DBG_alloc == CHUNK_ALLOC_SIZE(chunk->memlen));
-#endif
- tor_assert(total_bytes_allocated_in_chunks >=
- CHUNK_ALLOC_SIZE(chunk->memlen));
- total_bytes_allocated_in_chunks -= CHUNK_ALLOC_SIZE(chunk->memlen);
- total_freed += CHUNK_ALLOC_SIZE(chunk->memlen);
- tor_free(chunk);
- chunk = next;
- --n_to_free;
- ++n_freed;
- ++freelists[i].n_free;
- }
- if (n_to_free) {
- log_warn(LD_BUG, "Freelist length for %d-byte chunks may have been "
- "messed up somehow.", (int)freelists[i].alloc_size);
- log_warn(LD_BUG, "There were %d chunks at the start. I decided to "
- "keep %d. I wanted to free %d. I freed %d. I somehow think "
- "I have %d left to free.",
- freelists[i].cur_length, n_to_skip, orig_n_to_free,
- n_freed, n_to_free);
- }
- // tor_assert(!n_to_free);
- freelists[i].cur_length = new_length;
- tor_assert(orig_n_to_skip == new_length);
- log_info(LD_MM, "Cleaned freelist for %d-byte chunks: original "
- "length %d, kept %d, dropped %d. New length is %d",
- (int)freelists[i].alloc_size, orig_length,
- orig_n_to_skip, orig_n_to_free, new_length);
- }
- freelists[i].lowest_length = freelists[i].cur_length;
- assert_freelist_ok(&freelists[i]);
- }
- done:
- enable_control_logging();
- return total_freed;
-#else
- (void) free_all;
- return 0;
-#endif
-}
-
-/** Describe the current status of the freelists at log level <b>severity</b>.
- */
-void
-buf_dump_freelist_sizes(int severity)
-{
-#ifdef ENABLE_BUF_FREELISTS
- int i;
- tor_log(severity, LD_MM, "====== Buffer freelists:");
- for (i = 0; freelists[i].alloc_size; ++i) {
- uint64_t total = ((uint64_t)freelists[i].cur_length) *
- freelists[i].alloc_size;
- tor_log(severity, LD_MM,
- U64_FORMAT" bytes in %d %d-byte chunks ["U64_FORMAT
- " misses; "U64_FORMAT" frees; "U64_FORMAT" hits]",
- U64_PRINTF_ARG(total),
- freelists[i].cur_length, (int)freelists[i].alloc_size,
- U64_PRINTF_ARG(freelists[i].n_alloc),
- U64_PRINTF_ARG(freelists[i].n_free),
- U64_PRINTF_ARG(freelists[i].n_hit));
- }
- tor_log(severity, LD_MM, U64_FORMAT" allocations in non-freelist sizes",
- U64_PRINTF_ARG(n_freelist_miss));
-#else
- (void)severity;
-#endif
-}
-
/** Collapse data from the first N chunks from <b>buf</b> into buf->head,
* growing it as necessary, until buf->head has the first <b>bytes</b> bytes
* of data from the buffer, or until buf->head has all the data in <b>buf</b>.
@@ -450,7 +232,7 @@ buf_pullup(buf_t *buf, size_t bytes, int nulterminate)
size_t n = bytes - dest->datalen;
src = dest->next;
tor_assert(src);
- if (n > src->datalen) {
+ if (n >= src->datalen) {
memcpy(CHUNK_WRITE_PTR(dest), src->data, src->datalen);
dest->datalen += src->datalen;
dest->next = src->next;
@@ -488,15 +270,6 @@ buf_get_first_chunk_data(const buf_t *buf, const char **cp, size_t *sz)
}
#endif
-/** Resize buf so it won't hold extra memory that we haven't been
- * using lately.
- */
-void
-buf_shrink(buf_t *buf)
-{
- (void)buf;
-}
-
/** Remove the first <b>n</b> bytes from buf. */
static INLINE void
buf_remove_from_front(buf_t *buf, size_t n)
@@ -2663,7 +2436,14 @@ assert_buf_ok(buf_t *buf)
total += ch->datalen;
tor_assert(ch->datalen <= ch->memlen);
tor_assert(ch->data >= &ch->mem[0]);
- tor_assert(ch->data < &ch->mem[0]+ch->memlen);
+ tor_assert(ch->data <= &ch->mem[0]+ch->memlen);
+ if (ch->data == &ch->mem[0]+ch->memlen) {
+ static int warned = 0;
+ if (! warned) {
+ log_warn(LD_BUG, "Invariant violation in buf.c related to #15083");
+ warned = 1;
+ }
+ }
tor_assert(ch->data+ch->datalen <= &ch->mem[0] + ch->memlen);
if (!ch->next)
tor_assert(ch == buf->tail);
@@ -2672,23 +2452,3 @@ assert_buf_ok(buf_t *buf)
}
}
-#ifdef ENABLE_BUF_FREELISTS
-/** Log an error and exit if <b>fl</b> is corrupted.
- */
-static void
-assert_freelist_ok(chunk_freelist_t *fl)
-{
- chunk_t *ch;
- int n;
- tor_assert(fl->alloc_size > 0);
- n = 0;
- for (ch = fl->head; ch; ch = ch->next) {
- tor_assert(CHUNK_ALLOC_SIZE(ch->memlen) == fl->alloc_size);
- ++n;
- }
- tor_assert(n == fl->cur_length);
- tor_assert(n >= fl->lowest_length);
- tor_assert(n <= fl->max_length);
-}
-#endif
-
diff --git a/src/or/buffers.h b/src/or/buffers.h
index 6dd3d1762b..6d0c68500b 100644
--- a/src/or/buffers.h
+++ b/src/or/buffers.h
@@ -20,9 +20,6 @@ size_t buf_get_default_chunk_size(const buf_t *buf);
void buf_free(buf_t *buf);
void buf_clear(buf_t *buf);
buf_t *buf_copy(const buf_t *buf);
-void buf_shrink(buf_t *buf);
-size_t buf_shrink_freelists(int free_all);
-void buf_dump_freelist_sizes(int severity);
MOCK_DECL(size_t, buf_datalen, (const buf_t *buf));
size_t buf_allocation(const buf_t *buf);
@@ -108,9 +105,9 @@ STATIC void buf_pullup(buf_t *buf, size_t bytes, int nulterminate);
void buf_get_first_chunk_data(const buf_t *buf, const char **cp, size_t *sz);
#define DEBUG_CHUNK_ALLOC
-/** A single chunk on a buffer or in a freelist. */
+/** A single chunk on a buffer. */
typedef struct chunk_t {
- struct chunk_t *next; /**< The next chunk on the buffer or freelist. */
+ struct chunk_t *next; /**< The next chunk on the buffer. */
size_t datalen; /**< The number of bytes stored in this chunk */
size_t memlen; /**< The number of usable bytes of storage in <b>mem</b>. */
#ifdef DEBUG_CHUNK_ALLOC
diff --git a/src/or/channel.c b/src/or/channel.c
index 062ae3370e..bf0387f10e 100644
--- a/src/or/channel.c
+++ b/src/or/channel.c
@@ -56,7 +56,6 @@ static smartlist_t *finished_listeners = NULL;
/* Counter for ID numbers */
static uint64_t n_channels_allocated = 0;
-
/*
* Channel global byte/cell counters, for statistics and for scheduler high
* /low-water marks.
@@ -1329,7 +1328,7 @@ channel_closed(channel_t *chan)
/* Inform any pending (not attached) circs that they should
* give up. */
if (! chan->has_been_open)
- circuit_n_chan_done(chan, 0);
+ circuit_n_chan_done(chan, 0, 0);
/* Now close all the attached circuits on it. */
circuit_unlink_all_from_channel(chan, END_CIRC_REASON_CHANNEL_CLOSED);
@@ -2527,8 +2526,9 @@ void
channel_do_open_actions(channel_t *chan)
{
tor_addr_t remote_addr;
- int started_here, not_using = 0;
+ int started_here;
time_t now = time(NULL);
+ int close_origin_circuits = 0;
tor_assert(chan);
@@ -2545,8 +2545,7 @@ channel_do_open_actions(channel_t *chan)
log_debug(LD_OR,
"New entry guard was reachable, but closing this "
"connection so we can retry the earlier entry guards.");
- circuit_n_chan_done(chan, 0);
- not_using = 1;
+ close_origin_circuits = 1;
}
router_set_status(chan->identity_digest, 1);
} else {
@@ -2566,7 +2565,7 @@ channel_do_open_actions(channel_t *chan)
}
}
- if (!not_using) circuit_n_chan_done(chan, 1);
+ circuit_n_chan_done(chan, 1, close_origin_circuits);
}
/**
diff --git a/src/or/channeltls.c b/src/or/channeltls.c
index e194c1c4df..1cf697ccc5 100644
--- a/src/or/channeltls.c
+++ b/src/or/channeltls.c
@@ -23,6 +23,7 @@
#include "connection_or.h"
#include "control.h"
#include "relay.h"
+#include "rephist.h"
#include "router.h"
#include "routerlist.h"
#include "scheduler.h"
@@ -1463,6 +1464,8 @@ channel_tls_process_versions_cell(var_cell_t *cell, channel_tls_t *chan)
return;
}
+ rep_hist_note_negotiated_link_proto(highest_supported_version, started_here);
+
chan->conn->link_proto = highest_supported_version;
chan->conn->handshake_state->received_versions = 1;
diff --git a/src/or/circuitbuild.c b/src/or/circuitbuild.c
index 9620a23655..0688398f6d 100644
--- a/src/or/circuitbuild.c
+++ b/src/or/circuitbuild.c
@@ -551,9 +551,13 @@ circuit_handle_first_hop(origin_circuit_t *circ)
* open and get them to send their create cells forward.
*
* Status is 1 if connect succeeded, or 0 if connect failed.
+ *
+ * Close_origin_circuits is 1 if we should close all the origin circuits
+ * through this channel, or 0 otherwise. (This happens when we want to retry
+ * an older guard.)
*/
void
-circuit_n_chan_done(channel_t *chan, int status)
+circuit_n_chan_done(channel_t *chan, int status, int close_origin_circuits)
{
smartlist_t *pending_circs;
int err_reason = 0;
@@ -591,6 +595,11 @@ circuit_n_chan_done(channel_t *chan, int status)
circuit_mark_for_close(circ, END_CIRC_REASON_CHANNEL_CLOSED);
continue;
}
+ if (close_origin_circuits && CIRCUIT_IS_ORIGIN(circ)) {
+ log_info(LD_CIRC,"Channel deprecated for origin circs; closing circ.");
+ circuit_mark_for_close(circ, END_CIRC_REASON_CHANNEL_CLOSED);
+ continue;
+ }
log_debug(LD_CIRC, "Found circ, sending create cell.");
/* circuit_deliver_create_cell will set n_circ_id and add us to
* chan_circuid_circuit_map, so we don't need to call
@@ -951,7 +960,11 @@ circuit_send_next_onion_skin(origin_circuit_t *circ)
log_notice(LD_GENERAL,
"Tor has successfully opened a circuit. "
"Looks like client functionality is working.");
- control_event_bootstrap(BOOTSTRAP_STATUS_DONE, 0);
+ if (control_event_bootstrap(BOOTSTRAP_STATUS_DONE, 0) == 0) {
+ log_notice(LD_GENERAL,
+ "Tor has successfully opened a circuit. "
+ "Looks like client functionality is working.");
+ }
control_event_client_status(LOG_NOTICE, "CIRCUIT_ESTABLISHED");
clear_broken_connection_map(1);
if (server_mode(options) && !check_whether_orport_reachable()) {
@@ -1040,6 +1053,10 @@ circuit_note_clock_jumped(int seconds_elapsed)
"CLOCK_JUMPED");
circuit_mark_all_unused_circs();
circuit_mark_all_dirty_circs_as_unusable();
+ if (seconds_elapsed < 0) {
+ /* Restart all the timers in case we jumped a long way into the past. */
+ reset_all_main_loop_timers();
+ }
}
/** Take the 'extend' <b>cell</b>, pull out addr/port plus the onion
@@ -1242,8 +1259,10 @@ circuit_finish_handshake(origin_circuit_t *circ,
crypt_path_t *hop;
int rv;
- if ((rv = pathbias_count_build_attempt(circ)) < 0)
+ if ((rv = pathbias_count_build_attempt(circ)) < 0) {
+ log_warn(LD_CIRC, "pathbias_count_build_attempt failed: %d", rv);
return rv;
+ }
if (circ->cpath->state == CPATH_STATE_AWAITING_KEYS) {
hop = circ->cpath;
@@ -1257,12 +1276,15 @@ circuit_finish_handshake(origin_circuit_t *circ,
tor_assert(hop->state == CPATH_STATE_AWAITING_KEYS);
{
+ const char *msg = NULL;
if (onion_skin_client_handshake(hop->handshake_state.tag,
&hop->handshake_state,
reply->reply, reply->handshake_len,
(uint8_t*)keys, sizeof(keys),
- (uint8_t*)hop->rend_circ_nonce) < 0) {
- log_warn(LD_CIRC,"onion_skin_client_handshake failed.");
+ (uint8_t*)hop->rend_circ_nonce,
+ &msg) < 0) {
+ if (msg)
+ log_warn(LD_CIRC,"onion_skin_client_handshake failed: %s", msg);
return -END_CIRC_REASON_TORPROTOCOL;
}
}
@@ -1378,9 +1400,12 @@ onionskin_answer(or_circuit_t *circ,
log_debug(LD_CIRC,"Finished sending '%s' cell.",
circ->is_first_hop ? "created_fast" : "created");
- /* Ignore the local bit when testing - many test networks run on local
- * addresses */
- if ((!channel_is_local(circ->p_chan) || get_options()->TestingTorNetwork)
+ /* Ignore the local bit when ExtendAllowPrivateAddresses is set:
+ * it violates the assumption that private addresses are local.
+ * Also, many test networks run on local addresses, and
+ * TestingTorNetwork sets ExtendAllowPrivateAddresses. */
+ if ((!channel_is_local(circ->p_chan)
+ || get_options()->ExtendAllowPrivateAddresses)
&& !channel_is_outgoing(circ->p_chan)) {
/* record that we could process create cells from a non-local conn
* that we didn't initiate; presumably this means that create cells
@@ -1723,6 +1748,83 @@ choose_good_exit_server_general(int need_uptime, int need_capacity)
return NULL;
}
+#if defined(ENABLE_TOR2WEB_MODE) || defined(TOR_UNIT_TESTS)
+/* The config option Tor2webRendezvousPoints has been set and we need
+ * to pick an RP out of that set. Make sure that the RP we choose is
+ * alive, and return it. Return NULL if no usable RP could be found in
+ * Tor2webRendezvousPoints. */
+STATIC const node_t *
+pick_tor2web_rendezvous_node(router_crn_flags_t flags,
+ const or_options_t *options)
+{
+ const node_t *rp_node = NULL;
+ const int allow_invalid = (flags & CRN_ALLOW_INVALID) != 0;
+ const int need_desc = (flags & CRN_NEED_DESC) != 0;
+
+ smartlist_t *whitelisted_live_rps = smartlist_new();
+ smartlist_t *all_live_nodes = smartlist_new();
+
+ tor_assert(options->Tor2webRendezvousPoints);
+
+ /* Add all running nodes to all_live_nodes */
+ router_add_running_nodes_to_smartlist(all_live_nodes,
+ allow_invalid,
+ 0, 0, 0,
+ need_desc);
+
+ /* Filter all_live_nodes to only add live *and* whitelisted RPs to
+ * the list whitelisted_live_rps. */
+ SMARTLIST_FOREACH_BEGIN(all_live_nodes, node_t *, live_node) {
+ if (routerset_contains_node(options->Tor2webRendezvousPoints, live_node)) {
+ smartlist_add(whitelisted_live_rps, live_node);
+ }
+ } SMARTLIST_FOREACH_END(live_node);
+
+ /* Honor ExcludeNodes */
+ if (options->ExcludeNodes) {
+ routerset_subtract_nodes(whitelisted_live_rps, options->ExcludeNodes);
+ }
+
+ /* Now pick randomly amongst the whitelisted RPs. No need to waste time
+ doing bandwidth load balancing, for most use cases
+ 'whitelisted_live_rps' contains a single OR anyway. */
+ rp_node = smartlist_choose(whitelisted_live_rps);
+
+ if (!rp_node) {
+ log_warn(LD_REND, "Could not find a Rendezvous Point that suits "
+ "the purposes of Tor2webRendezvousPoints. Choosing random one.");
+ }
+
+ smartlist_free(whitelisted_live_rps);
+ smartlist_free(all_live_nodes);
+
+ return rp_node;
+}
+#endif
+
+/* Pick a Rendezvous Point for our HS circuits according to <b>flags</b>. */
+static const node_t *
+pick_rendezvous_node(router_crn_flags_t flags)
+{
+ const or_options_t *options = get_options();
+
+ if (options->AllowInvalid_ & ALLOW_INVALID_RENDEZVOUS)
+ flags |= CRN_ALLOW_INVALID;
+
+#ifdef ENABLE_TOR2WEB_MODE
+ /* The user wants us to pick specific RPs. */
+ if (options->Tor2webRendezvousPoints) {
+ const node_t *tor2web_rp = pick_tor2web_rendezvous_node(flags, options);
+ if (tor2web_rp) {
+ return tor2web_rp;
+ }
+ /* Else, if no tor2web RP was found, fall back to choosing a random node */
+ }
+#endif
+
+ return router_choose_random_node(NULL, options->ExcludeNodes, flags);
+}
+
/** Return a pointer to a suitable router to be the exit node for the
* circuit of purpose <b>purpose</b> that we're about to build (or NULL
* if no router is suitable).
@@ -1753,9 +1855,13 @@ choose_good_exit_server(uint8_t purpose,
else
return choose_good_exit_server_general(need_uptime,need_capacity);
case CIRCUIT_PURPOSE_C_ESTABLISH_REND:
- if (options->AllowInvalid_ & ALLOW_INVALID_RENDEZVOUS)
- flags |= CRN_ALLOW_INVALID;
- return router_choose_random_node(NULL, options->ExcludeNodes, flags);
+ {
+ /* Pick a new RP */
+ const node_t *rendezvous_node = pick_rendezvous_node(flags);
+ log_info(LD_REND, "Picked new RP: %s",
+ safe_str_client(node_describe(rendezvous_node)));
+ return rendezvous_node;
+ }
}
log_warn(LD_BUG,"Unhandled purpose %d", purpose);
tor_fragile_assert();
diff --git a/src/or/circuitbuild.h b/src/or/circuitbuild.h
index 442afe8451..01563791b7 100644
--- a/src/or/circuitbuild.h
+++ b/src/or/circuitbuild.h
@@ -22,7 +22,8 @@ origin_circuit_t *circuit_establish_circuit(uint8_t purpose,
extend_info_t *exit,
int flags);
int circuit_handle_first_hop(origin_circuit_t *circ);
-void circuit_n_chan_done(channel_t *chan, int status);
+void circuit_n_chan_done(channel_t *chan, int status,
+ int close_origin_circuits);
int inform_testing_reachability(void);
int circuit_timeout_want_to_count_circ(origin_circuit_t *circ);
int circuit_send_next_onion_skin(origin_circuit_t *circ);
@@ -60,6 +61,11 @@ const node_t *choose_good_entry_server(uint8_t purpose,
#ifdef CIRCUITBUILD_PRIVATE
STATIC circid_t get_unique_circ_id_by_chan(channel_t *chan);
+#if defined(ENABLE_TOR2WEB_MODE) || defined(TOR_UNIT_TESTS)
+STATIC const node_t *pick_tor2web_rendezvous_node(router_crn_flags_t flags,
+ const or_options_t *options);
+#endif
+
#endif
#endif
diff --git a/src/or/circuitlist.c b/src/or/circuitlist.c
index 36ba3bffb7..bf7f8daca7 100644
--- a/src/or/circuitlist.c
+++ b/src/or/circuitlist.c
@@ -745,6 +745,7 @@ circuit_free(circuit_t *circ)
{
void *mem;
size_t memlen;
+ int should_free = 1;
if (!circ)
return;
@@ -784,6 +785,8 @@ circuit_free(circuit_t *circ)
memlen = sizeof(or_circuit_t);
tor_assert(circ->magic == OR_CIRCUIT_MAGIC);
+ should_free = (ocirc->workqueue_entry == NULL);
+
crypto_cipher_free(ocirc->p_crypto);
crypto_digest_free(ocirc->p_digest);
crypto_cipher_free(ocirc->n_crypto);
@@ -826,8 +829,18 @@ circuit_free(circuit_t *circ)
* "active" checks will be violated. */
cell_queue_clear(&circ->n_chan_cells);
- memwipe(mem, 0xAA, memlen); /* poison memory */
- tor_free(mem);
+ if (should_free) {
+ memwipe(mem, 0xAA, memlen); /* poison memory */
+ tor_free(mem);
+ } else {
+ /* If we made it here, this is an or_circuit_t that still has a pending
+ * cpuworker request which we weren't able to cancel. Instead, set up
+ * the magic value so that when the reply comes back, we'll know to discard
+ * the reply and free this structure.
+ */
+ memwipe(mem, 0xAA, memlen);
+ circ->magic = DEAD_CIRCUIT_MAGIC;
+ }
}
/** Deallocate the linked list circ-><b>cpath</b>, and remove the cpath from
@@ -1532,7 +1545,7 @@ circuit_find_to_cannibalize(uint8_t purpose, extend_info_t *info,
do {
const node_t *ri2;
if (tor_memeq(hop->extend_info->identity_digest,
- info->identity_digest, DIGEST_LEN))
+ info->identity_digest, DIGEST_LEN))
goto next;
if (ri1 &&
(ri2 = node_get_by_id(hop->extend_info->identity_digest))
@@ -2050,17 +2063,6 @@ circuits_handle_oom(size_t current_allocation)
"MaxMemInQueues.)");
{
- const size_t recovered = buf_shrink_freelists(1);
- if (recovered >= current_allocation) {
- log_warn(LD_BUG, "We somehow recovered more memory from freelists "
- "than we thought we had allocated");
- current_allocation = 0;
- } else {
- current_allocation -= recovered;
- }
- }
-
- {
size_t mem_target = (size_t)(get_options()->MaxMemInQueues *
FRACTION_OF_DATA_TO_RETAIN_ON_OOM);
if (current_allocation <= mem_target)
@@ -2143,12 +2145,6 @@ circuits_handle_oom(size_t current_allocation)
done_recovering_mem:
-#ifdef ENABLE_MEMPOOLS
- clean_cell_pool(); /* In case this helps. */
-#endif /* ENABLE_MEMPOOLS */
- buf_shrink_freelists(1); /* This is necessary to actually release buffer
- chunks. */
-
log_notice(LD_GENERAL, "Removed "U64_FORMAT" bytes by killing %d circuits; "
"%d circuits remain alive. Also killed %d non-linked directory "
"connections.",
diff --git a/src/or/circuitstats.c b/src/or/circuitstats.c
index 18cb1c8484..7b3ad56537 100644
--- a/src/or/circuitstats.c
+++ b/src/or/circuitstats.c
@@ -1074,7 +1074,7 @@ circuit_build_times_update_alpha(circuit_build_times_t *cbt)
* random_sample_from_Pareto_distribution
* That's right. I'll cite wikipedia all day long.
*
- * Return value is in milliseconds.
+ * Return value is in milliseconds, clamped to INT32_MAX.
*/
STATIC double
circuit_build_times_calculate_timeout(circuit_build_times_t *cbt,
diff --git a/src/or/circuituse.c b/src/or/circuituse.c
index 612b536bad..b54a4d2a7f 100644
--- a/src/or/circuituse.c
+++ b/src/or/circuituse.c
@@ -845,12 +845,14 @@ circuit_log_ancient_one_hop_circuits(int age)
}
log_notice(LD_HEARTBEAT, " #%d created at %s. %s, %s. %s for close. "
+ "Package window: %d. "
"%s for new conns. %s.",
ocirc_sl_idx,
created,
circuit_state_to_string(circ->state),
circuit_purpose_to_string(circ->purpose),
circ->marked_for_close ? "Marked" : "Not marked",
+ circ->package_window,
ocirc->unusable_for_new_conns ? "Not usable" : "usable",
dirty);
tor_free(dirty);
@@ -866,12 +868,18 @@ circuit_log_ancient_one_hop_circuits(int age)
log_notice(LD_HEARTBEAT, " Stream#%d created at %s. "
"%s conn in state %s. "
+ "It is %slinked and %sreading from a linked connection %p. "
+ "Package window %d. "
"%s for close (%s:%d). Hold-open is %sset. "
"Has %ssent RELAY_END. %s on circuit.",
stream_num,
stream_created,
conn_type_to_string(c->type),
conn_state_to_string(c->type, c->state),
+ c->linked ? "" : "not ",
+ c->reading_from_linked_conn ? "": "not",
+ c->linked_conn,
+ conn->package_window,
c->marked_for_close ? "Marked" : "Not marked",
c->marked_for_close_file ? c->marked_for_close_file : "--",
c->marked_for_close,
@@ -1677,6 +1685,7 @@ circuit_launch_by_extend_info(uint8_t purpose,
origin_circuit_t *circ;
int onehop_tunnel = (flags & CIRCLAUNCH_ONEHOP_TUNNEL) != 0;
int have_path = have_enough_path_info(! (flags & CIRCLAUNCH_IS_INTERNAL) );
+ int need_specific_rp = 0;
if (!onehop_tunnel && (!router_have_minimum_dir_info() || !have_path)) {
log_debug(LD_CIRC,"Haven't %s yet; canceling "
@@ -1687,8 +1696,17 @@ circuit_launch_by_extend_info(uint8_t purpose,
return NULL;
}
+ /* If Tor2webRendezvousPoints is enabled and we are dealing with an
+ RP circuit, we want a specific RP node so we shouldn't canibalize
+ an already existing circuit. */
+ if (get_options()->Tor2webRendezvousPoints &&
+ purpose == CIRCUIT_PURPOSE_C_ESTABLISH_REND) {
+ need_specific_rp = 1;
+ }
+
if ((extend_info || purpose != CIRCUIT_PURPOSE_C_GENERAL) &&
- purpose != CIRCUIT_PURPOSE_TESTING && !onehop_tunnel) {
+ purpose != CIRCUIT_PURPOSE_TESTING &&
+ !onehop_tunnel && !need_specific_rp) {
/* see if there are appropriate circs available to cannibalize. */
/* XXX if we're planning to add a hop, perhaps we want to look for
* internal circs rather than exit circs? -RD */
@@ -2018,11 +2036,13 @@ circuit_get_open_circ_or_launch(entry_connection_t *conn,
else
new_circ_purpose = desired_circuit_purpose;
+#ifdef ENABLE_TOR2WEB_MODE
if (options->Tor2webMode &&
(new_circ_purpose == CIRCUIT_PURPOSE_C_ESTABLISH_REND ||
new_circ_purpose == CIRCUIT_PURPOSE_C_INTRODUCING)) {
want_onehop = 1;
}
+#endif
{
int flags = CIRCLAUNCH_NEED_CAPACITY;
@@ -2129,7 +2149,7 @@ link_apconn_to_circ(entry_connection_t *apconn, origin_circuit_t *circ,
* that an attempt to connect to a hidden service just
* succeeded. Tell rendclient.c. */
rend_client_note_connection_attempt_ended(
- ENTRY_TO_EDGE_CONN(apconn)->rend_data->onion_address);
+ ENTRY_TO_EDGE_CONN(apconn)->rend_data);
}
if (cpath) { /* we were given one; use it */
diff --git a/src/or/command.c b/src/or/command.c
index 6dde2a9b7e..719b10736b 100644
--- a/src/or/command.c
+++ b/src/or/command.c
@@ -310,7 +310,7 @@ command_process_create_cell(cell_t *cell, channel_t *chan)
/* hand it off to the cpuworkers, and then return. */
if (connection_or_digest_is_known_relay(chan->identity_digest))
rep_hist_note_circuit_handshake_requested(create_cell->handshake_type);
- if (assign_onionskin_to_cpuworker(NULL, circ, create_cell) < 0) {
+ if (assign_onionskin_to_cpuworker(circ, create_cell) < 0) {
log_debug(LD_GENERAL,"Failed to hand off onionskin. Closing.");
circuit_mark_for_close(TO_CIRCUIT(circ), END_CIRC_REASON_RESOURCELIMIT);
return;
@@ -398,7 +398,6 @@ command_process_created_cell(cell_t *cell, channel_t *chan)
log_debug(LD_OR,"at OP. Finishing handshake.");
if ((err_reason = circuit_finish_handshake(origin_circ,
&extended_cell.created_cell)) < 0) {
- log_warn(LD_OR,"circuit_finish_handshake failed.");
circuit_mark_for_close(circ, -err_reason);
return;
}
diff --git a/src/or/config.c b/src/or/config.c
index 982cb2e9e5..10304482e8 100644
--- a/src/or/config.c
+++ b/src/or/config.c
@@ -68,6 +68,9 @@
/* From main.c */
extern int quiet_level;
+/* Prefix used to indicate a Unix socket in a FooPort configuration. */
+static const char unix_socket_prefix[] = "unix:";
+
/** A list of abbreviations and aliases to map command-line options, obsolete
* option names, or alternative option names, to their current values. */
static config_abbrev_t option_abbrevs_[] = {
@@ -77,12 +80,14 @@ static config_abbrev_t option_abbrevs_[] = {
PLURAL(AuthDirRejectCC),
PLURAL(EntryNode),
PLURAL(ExcludeNode),
+ PLURAL(Tor2webRendezvousPoint),
PLURAL(FirewallPort),
PLURAL(LongLivedPort),
PLURAL(HiddenServiceNode),
PLURAL(HiddenServiceExcludeNode),
PLURAL(NumCPU),
PLURAL(RendNode),
+ PLURAL(RecommendedPackage),
PLURAL(RendExcludeNode),
PLURAL(StrictEntryNode),
PLURAL(StrictExitNode),
@@ -200,7 +205,6 @@ static config_var_t option_vars_[] = {
V(ControlPortWriteToFile, FILENAME, NULL),
V(ControlSocket, LINELIST, NULL),
V(ControlSocketsGroupWritable, BOOL, "0"),
- V(SocksSocket, LINELIST, NULL),
V(SocksSocketsGroupWritable, BOOL, "0"),
V(CookieAuthentication, BOOL, "0"),
V(CookieAuthFileGroupReadable, BOOL, "0"),
@@ -221,7 +225,7 @@ static config_var_t option_vars_[] = {
V(DisableDebuggerAttachment, BOOL, "1"),
V(DisableIOCP, BOOL, "1"),
OBSOLETE("DisableV2DirectoryInfo_"),
- V(DynamicDHGroups, BOOL, "0"),
+ OBSOLETE("DynamicDHGroups"),
VPORT(DNSPort, LINELIST, NULL),
V(DNSListenAddress, LINELIST, NULL),
V(DownloadExtraInfo, BOOL, "0"),
@@ -281,6 +285,7 @@ static config_var_t option_vars_[] = {
VAR("HiddenServicePort", LINELIST_S, RendConfigLines, NULL),
VAR("HiddenServiceVersion",LINELIST_S, RendConfigLines, NULL),
VAR("HiddenServiceAuthorizeClient",LINELIST_S,RendConfigLines, NULL),
+ VAR("HiddenServiceAllowUnknownPorts",LINELIST_S, RendConfigLines, NULL),
V(HiddenServiceStatistics, BOOL, "0"),
V(HidServAuth, LINELIST, NULL),
V(CloseHSClientCircuitsImmediatelyOnTimeout, BOOL, "0"),
@@ -364,6 +369,7 @@ static config_var_t option_vars_[] = {
V(RecommendedVersions, LINELIST, NULL),
V(RecommendedClientVersions, LINELIST, NULL),
V(RecommendedServerVersions, LINELIST, NULL),
+ V(RecommendedPackages, LINELIST, NULL),
V(RefuseUnknownExits, AUTOBOOL, "auto"),
V(RejectPlaintextPorts, CSV, ""),
V(RelayBandwidthBurst, MEMUNIT, "0"),
@@ -399,6 +405,7 @@ static config_var_t option_vars_[] = {
V(TestSocks, BOOL, "0"),
V(TokenBucketRefillInterval, MSEC_INTERVAL, "100 msec"),
V(Tor2webMode, BOOL, "0"),
+ V(Tor2webRendezvousPoints, ROUTERSET, NULL),
V(TLSECGroup, STRING, NULL),
V(TrackHostExits, CSV, NULL),
V(TrackHostExitsExpire, INTERVAL, "30 minutes"),
@@ -410,6 +417,7 @@ static config_var_t option_vars_[] = {
V(UseBridges, BOOL, "0"),
V(UseEntryGuards, BOOL, "1"),
V(UseEntryGuardsAsDirGuards, BOOL, "1"),
+ V(UseGuardFraction, AUTOBOOL, "auto"),
V(UseMicrodescriptors, AUTOBOOL, "auto"),
V(UseNTorHandshake, AUTOBOOL, "1"),
V(User, STRING, NULL),
@@ -427,6 +435,7 @@ static config_var_t option_vars_[] = {
V(V3AuthNIntervalsValid, UINT, "3"),
V(V3AuthUseLegacyKey, BOOL, "0"),
V(V3BandwidthsFile, FILENAME, NULL),
+ V(GuardfractionFile, FILENAME, NULL),
VAR("VersioningAuthoritativeDirectory",BOOL,VersioningAuthoritativeDir, "0"),
V(VirtualAddrNetworkIPv4, STRING, "127.192.0.0/10"),
V(VirtualAddrNetworkIPv6, STRING, "[FE80::]/10"),
@@ -536,8 +545,6 @@ static char *get_bindaddr_from_transport_listen_line(const char *line,
static int parse_dir_authority_line(const char *line,
dirinfo_type_t required_type,
int validate_only);
-static int parse_dir_fallback_line(const char *line,
- int validate_only);
static void port_cfg_free(port_cfg_t *port);
static int parse_ports(or_options_t *options, int validate_only,
char **msg_out, int *n_ports_out);
@@ -832,6 +839,41 @@ escaped_safe_str(const char *address)
return escaped(address);
}
+/** List of default directory authorities */
+
+static const char *default_authorities[] = {
+ "moria1 orport=9101 "
+ "v3ident=D586D18309DED4CD6D57C18FDB97EFA96D330566 "
+ "128.31.0.39:9131 9695 DFC3 5FFE B861 329B 9F1A B04C 4639 7020 CE31",
+ "tor26 orport=443 "
+ "v3ident=14C131DFC5C6F93646BE72FA1401C02A8DF2E8B4 "
+ "86.59.21.38:80 847B 1F85 0344 D787 6491 A548 92F9 0493 4E4E B85D",
+ "dizum orport=443 "
+ "v3ident=E8A9C45EDE6D711294FADF8E7951F4DE6CA56B58 "
+ "194.109.206.212:80 7EA6 EAD6 FD83 083C 538F 4403 8BBF A077 587D D755",
+ "Tonga orport=443 bridge "
+ "82.94.251.203:80 4A0C CD2D DC79 9508 3D73 F5D6 6710 0C8A 5831 F16D",
+ "gabelmoo orport=443 "
+ "v3ident=ED03BB616EB2F60BEC80151114BB25CEF515B226 "
+ "131.188.40.189:80 F204 4413 DAC2 E02E 3D6B CF47 35A1 9BCA 1DE9 7281",
+ "dannenberg orport=443 "
+ "v3ident=585769C78764D58426B8B52B6651A5A71137189A "
+ "193.23.244.244:80 7BE6 83E6 5D48 1413 21C5 ED92 F075 C553 64AC 7123",
+ "urras orport=80 "
+ "v3ident=80550987E1D626E3EBA5E5E75A458DE0626D088C "
+ "208.83.223.34:443 0AD3 FA88 4D18 F89E EA2D 89C0 1937 9E0E 7FD9 4417",
+ "maatuska orport=80 "
+ "v3ident=49015F787433103580E3B66A1707A00E60F2D15B "
+ "171.25.193.9:443 BD6A 8292 55CB 08E6 6FBE 7D37 4836 3586 E46B 3810",
+ "Faravahar orport=443 "
+ "v3ident=EFCBE720AB3A82B99F9E953CD5BF50F7EEFC7B97 "
+ "154.35.175.225:80 CF6D 0AAF B385 BE71 B8E1 11FC 5CFF 4B47 9237 33BC",
+ "longclaw orport=443 "
+ "v3ident=23D15D965BC35114467363C165C4F724B64B4F66 "
+ "199.254.238.52:80 74A9 1064 6BCE EFBC D2E8 74FC 1DC9 9743 0F96 8145",
+ NULL
+};
+
/** Add the default directory authorities directly into the trusted dir list,
* but only add them insofar as they share bits with <b>type</b>.
* Each authority's bits are restricted to the bits shared with <b>type</b>.
@@ -840,50 +882,18 @@ static void
add_default_trusted_dir_authorities(dirinfo_type_t type)
{
int i;
- const char *authorities[] = {
- "moria1 orport=9101 "
- "v3ident=D586D18309DED4CD6D57C18FDB97EFA96D330566 "
- "128.31.0.39:9131 9695 DFC3 5FFE B861 329B 9F1A B04C 4639 7020 CE31",
- "tor26 orport=443 "
- "v3ident=14C131DFC5C6F93646BE72FA1401C02A8DF2E8B4 "
- "86.59.21.38:80 847B 1F85 0344 D787 6491 A548 92F9 0493 4E4E B85D",
- "dizum orport=443 "
- "v3ident=E8A9C45EDE6D711294FADF8E7951F4DE6CA56B58 "
- "194.109.206.212:80 7EA6 EAD6 FD83 083C 538F 4403 8BBF A077 587D D755",
- "Tonga orport=443 bridge "
- "82.94.251.203:80 4A0C CD2D DC79 9508 3D73 F5D6 6710 0C8A 5831 F16D",
- "gabelmoo orport=443 "
- "v3ident=ED03BB616EB2F60BEC80151114BB25CEF515B226 "
- "131.188.40.189:80 F204 4413 DAC2 E02E 3D6B CF47 35A1 9BCA 1DE9 7281",
- "dannenberg orport=443 "
- "v3ident=585769C78764D58426B8B52B6651A5A71137189A "
- "193.23.244.244:80 7BE6 83E6 5D48 1413 21C5 ED92 F075 C553 64AC 7123",
- "urras orport=80 "
- "v3ident=80550987E1D626E3EBA5E5E75A458DE0626D088C "
- "208.83.223.34:443 0AD3 FA88 4D18 F89E EA2D 89C0 1937 9E0E 7FD9 4417",
- "maatuska orport=80 "
- "v3ident=49015F787433103580E3B66A1707A00E60F2D15B "
- "171.25.193.9:443 BD6A 8292 55CB 08E6 6FBE 7D37 4836 3586 E46B 3810",
- "Faravahar orport=443 "
- "v3ident=EFCBE720AB3A82B99F9E953CD5BF50F7EEFC7B97 "
- "154.35.32.5:80 CF6D 0AAF B385 BE71 B8E1 11FC 5CFF 4B47 9237 33BC",
- "longclaw orport=443 "
- "v3ident=23D15D965BC35114467363C165C4F724B64B4F66 "
- "199.254.238.52:80 74A9 1064 6BCE EFBC D2E8 74FC 1DC9 9743 0F96 8145",
- NULL
- };
- for (i=0; authorities[i]; i++) {
- if (parse_dir_authority_line(authorities[i], type, 0)<0) {
+ for (i=0; default_authorities[i]; i++) {
+ if (parse_dir_authority_line(default_authorities[i], type, 0)<0) {
log_err(LD_BUG, "Couldn't parse internal DirAuthority line %s",
- authorities[i]);
+ default_authorities[i]);
}
}
}
/** Add the default fallback directory servers into the fallback directory
* server list. */
-static void
-add_default_fallback_dir_servers(void)
+MOCK_IMPL(void,
+add_default_fallback_dir_servers,(void))
{
int i;
const char *fallback[] = {
@@ -952,7 +962,7 @@ validate_dir_servers(or_options_t *options, or_options_t *old_options)
/** Look at all the config options and assign new dir authorities
* as appropriate.
*/
-static int
+int
consider_adding_dir_servers(const or_options_t *options,
const or_options_t *old_options)
{
@@ -970,23 +980,36 @@ consider_adding_dir_servers(const or_options_t *options,
if (!need_to_update)
return 0; /* all done */
+ /* "You cannot set both DirAuthority and Alternate*Authority."
+ * Checking that this restriction holds allows us to simplify
+ * the unit tests. */
+ tor_assert(!(options->DirAuthorities &&
+ (options->AlternateDirAuthority
+ || options->AlternateBridgeAuthority)));
+
/* Start from a clean slate. */
clear_dir_servers();
if (!options->DirAuthorities) {
/* then we may want some of the defaults */
dirinfo_type_t type = NO_DIRINFO;
- if (!options->AlternateBridgeAuthority)
+ if (!options->AlternateBridgeAuthority) {
type |= BRIDGE_DIRINFO;
- if (!options->AlternateDirAuthority)
+ }
+ if (!options->AlternateDirAuthority) {
type |= V3_DIRINFO | EXTRAINFO_DIRINFO | MICRODESC_DIRINFO;
+ /* Only add the default fallback directories when the DirAuthorities,
+ * AlternateDirAuthority, and FallbackDir directory config options
+ * are set to their defaults. */
+ if (!options->FallbackDir) {
+ add_default_fallback_dir_servers();
+ }
+ }
/* if type == NO_DIRINFO, we don't want to add any of the
* default authorities, because we've replaced them all */
if (type != NO_DIRINFO)
add_default_trusted_dir_authorities(type);
}
- if (!options->FallbackDir)
- add_default_fallback_dir_servers();
for (cl = options->DirAuthorities; cl; cl = cl->next)
if (parse_dir_authority_line(cl->value, NO_DIRINFO, 0)<0)
@@ -1049,20 +1072,6 @@ options_act_reversible(const or_options_t *old_options, char **msg)
}
#endif
-#ifndef HAVE_SYS_UN_H
- if (options->SocksSocket || options->SocksSocketsGroupWritable) {
- *msg = tor_strdup("Unix domain sockets (SocksSocket) not supported "
- "on this OS/with this build.");
- goto rollback;
- }
-#else
- if (options->SocksSocketsGroupWritable && !options->SocksSocket) {
- *msg = tor_strdup("Setting SocksSocketGroupWritable without setting"
- "a SocksSocket makes no sense.");
- goto rollback;
- }
-#endif
-
if (running_tor) {
int n_ports=0;
/* We need to set the connection limit before we can open the listeners. */
@@ -1271,7 +1280,8 @@ options_need_geoip_info(const or_options_t *options, const char **reason_out)
routerset_needs_geoip(options->EntryNodes) ||
routerset_needs_geoip(options->ExitNodes) ||
routerset_needs_geoip(options->ExcludeExitNodes) ||
- routerset_needs_geoip(options->ExcludeNodes);
+ routerset_needs_geoip(options->ExcludeNodes) ||
+ routerset_needs_geoip(options->Tor2webRendezvousPoints);
if (routerset_usage && reason_out) {
*reason_out = "We've been configured to use (or avoid) nodes in certain "
@@ -1322,10 +1332,6 @@ options_transition_requires_fresh_tls_context(const or_options_t *old_options,
if (!old_options)
return 0;
- if ((old_options->DynamicDHGroups != new_options->DynamicDHGroups)) {
- return 1;
- }
-
if (!opt_streq(old_options->TLSECGroup, new_options->TLSECGroup))
return 1;
@@ -1404,7 +1410,7 @@ options_act(const or_options_t *old_options)
log_err(LD_CONFIG, "This copy of Tor was not compiled to run in "
"'tor2web mode'. It cannot be run with the Tor2webMode torrc "
"option enabled. To enable Tor2webMode recompile with the "
- "--enable-tor2webmode option.");
+ "--enable-tor2web-mode option.");
return -1;
}
#endif
@@ -1455,6 +1461,13 @@ options_act(const or_options_t *old_options)
rep_hist_load_mtbf_data(time(NULL));
}
+ /* If we have an ExtORPort, initialize its auth cookie. */
+ if (running_tor &&
+ init_ext_or_cookie_authentication(!!options->ExtORPort_lines) < 0) {
+ log_warn(LD_CONFIG,"Error creating Extended ORPort cookie file.");
+ return -1;
+ }
+
mark_transport_list();
pt_prepare_proxy_list_for_config_read();
if (!options->DisableNetwork) {
@@ -1500,24 +1513,6 @@ options_act(const or_options_t *old_options)
finish_daemon(options->DataDirectory);
}
- /* If needed, generate a new TLS DH prime according to the current torrc. */
- if (server_mode(options) && options->DynamicDHGroups) {
- char *keydir = get_datadir_fname("keys");
- if (check_private_dir(keydir, CPD_CREATE, options->User)) {
- tor_free(keydir);
- return -1;
- }
- tor_free(keydir);
-
- if (!old_options || !old_options->DynamicDHGroups) {
- char *fname = get_datadir_fname2("keys", "dynamic_dh_params");
- crypto_set_tls_dh_prime(fname);
- tor_free(fname);
- }
- } else { /* clients don't need a dynamic DH prime. */
- crypto_set_tls_dh_prime(NULL);
- }
-
/* We want to reinit keys as needed before we do much of anything else:
keys are important, and other things can depend on them. */
if (transition_affects_workers ||
@@ -1559,12 +1554,6 @@ options_act(const or_options_t *old_options)
return -1;
}
- /* If we have an ExtORPort, initialize its auth cookie. */
- if (init_ext_or_cookie_authentication(!!options->ExtORPort_lines) < 0) {
- log_warn(LD_CONFIG,"Error creating Extended ORPort cookie file.");
- return -1;
- }
-
monitor_owning_controller_process(options->OwningControllerProcess);
/* reload keys as needed for rendezvous services. */
@@ -1628,7 +1617,7 @@ options_act(const or_options_t *old_options)
}
if (parse_outbound_addresses(options, 0, &msg) < 0) {
- log_warn(LD_BUG, "Failed parsing oubound bind addresses: %s", msg);
+ log_warn(LD_BUG, "Failed parsing outbound bind addresses: %s", msg);
tor_free(msg);
return -1;
}
@@ -1660,6 +1649,8 @@ options_act(const or_options_t *old_options)
options->ExcludeExitNodes) ||
!routerset_equal(old_options->EntryNodes, options->EntryNodes) ||
!routerset_equal(old_options->ExitNodes, options->ExitNodes) ||
+ !routerset_equal(old_options->Tor2webRendezvousPoints,
+ options->Tor2webRendezvousPoints) ||
options->StrictNodes != old_options->StrictNodes) {
log_info(LD_CIRC,
"Changed to using entry guards or bridges, or changed "
@@ -1725,11 +1716,12 @@ options_act(const or_options_t *old_options)
"Worker-related options changed. Rotating workers.");
if (server_mode(options) && !server_mode(old_options)) {
+ cpu_init();
ip_address_changed(0);
if (have_completed_a_circuit() || !any_predicted_circuits(time(NULL)))
inform_testing_reachability();
}
- cpuworkers_rotate();
+ cpuworkers_rotate_keyinfo();
if (dns_reset())
return -1;
} else {
@@ -1758,6 +1750,7 @@ options_act(const or_options_t *old_options)
if (!public_server_mode(options)) {
options->CellStatistics = 0;
options->EntryStatistics = 0;
+ options->ConnDirectionStatistics = 0;
options->HiddenServiceStatistics = 0;
options->ExitPortStatistics = 0;
}
@@ -1890,28 +1883,33 @@ options_act(const or_options_t *old_options)
return 0;
}
+typedef enum {
+ TAKES_NO_ARGUMENT = 0,
+ ARGUMENT_NECESSARY = 1,
+ ARGUMENT_OPTIONAL = 2
+} takes_argument_t;
+
static const struct {
const char *name;
- int takes_argument;
+ takes_argument_t takes_argument;
} CMDLINE_ONLY_OPTIONS[] = {
- { "-f", 1 },
- { "--allow-missing-torrc", 0 },
- { "--defaults-torrc", 1 },
- { "--hash-password", 1 },
- { "--dump-config", 1 },
- { "--list-fingerprint", 0 },
- { "--verify-config", 0 },
- { "--ignore-missing-torrc", 0 },
- { "--quiet", 0 },
- { "--hush", 0 },
- { "--version", 0 },
- { "--library-versions", 0 },
- { "-h", 0 },
- { "--help", 0 },
- { "--list-torrc-options", 0 },
- { "--digests", 0 },
- { "--nt-service", 0 },
- { "-nt-service", 0 },
+ { "-f", ARGUMENT_NECESSARY },
+ { "--allow-missing-torrc", TAKES_NO_ARGUMENT },
+ { "--defaults-torrc", ARGUMENT_NECESSARY },
+ { "--hash-password", ARGUMENT_NECESSARY },
+ { "--dump-config", ARGUMENT_OPTIONAL },
+ { "--list-fingerprint", TAKES_NO_ARGUMENT },
+ { "--verify-config", TAKES_NO_ARGUMENT },
+ { "--ignore-missing-torrc", TAKES_NO_ARGUMENT },
+ { "--quiet", TAKES_NO_ARGUMENT },
+ { "--hush", TAKES_NO_ARGUMENT },
+ { "--version", TAKES_NO_ARGUMENT },
+ { "--library-versions", TAKES_NO_ARGUMENT },
+ { "-h", TAKES_NO_ARGUMENT },
+ { "--help", TAKES_NO_ARGUMENT },
+ { "--list-torrc-options", TAKES_NO_ARGUMENT },
+ { "--nt-service", TAKES_NO_ARGUMENT },
+ { "-nt-service", TAKES_NO_ARGUMENT },
{ NULL, 0 },
};
@@ -1938,7 +1936,7 @@ config_parse_commandline(int argc, char **argv, int ignore_errors,
while (i < argc) {
unsigned command = CONFIG_LINE_NORMAL;
- int want_arg = 1;
+ takes_argument_t want_arg = ARGUMENT_NECESSARY;
int is_cmdline = 0;
int j;
@@ -1968,7 +1966,9 @@ config_parse_commandline(int argc, char **argv, int ignore_errors,
want_arg = 0;
}
- if (want_arg && i == argc-1) {
+ const int is_last = (i == argc-1);
+
+ if (want_arg == ARGUMENT_NECESSARY && is_last) {
if (ignore_errors) {
arg = strdup("");
} else {
@@ -1978,8 +1978,11 @@ config_parse_commandline(int argc, char **argv, int ignore_errors,
config_free_lines(front_cmdline);
return -1;
}
+ } else if (want_arg == ARGUMENT_OPTIONAL && is_last) {
+ arg = tor_strdup("");
} else {
- arg = want_arg ? tor_strdup(argv[i+1]) : strdup("");
+ arg = (want_arg != TAKES_NO_ARGUMENT) ? tor_strdup(argv[i+1]) :
+ tor_strdup("");
}
param = tor_malloc_zero(sizeof(config_line_t));
@@ -2566,6 +2569,61 @@ options_validate_cb(void *old_options, void *options, void *default_options,
from_setconf, msg);
}
+#define REJECT(arg) \
+ STMT_BEGIN *msg = tor_strdup(arg); return -1; STMT_END
+#define COMPLAIN(args...) \
+ STMT_BEGIN log_warn(LD_CONFIG, args); STMT_END
+
+/** Log a warning message iff <b>filepath</b> is not absolute.
+ * Warning message must contain option name <b>option</b> and
+ * an absolute path that <b>filepath<b> will resolve to.
+ *
+ * In case <b>filepath</b> is absolute, do nothing.
+ */
+static void
+warn_if_option_path_is_relative(const char *option,
+ char *filepath)
+{
+ if (filepath && path_is_relative(filepath)) {
+ char *abs_path = make_path_absolute(filepath);
+ COMPLAIN("Path for %s (%s) is relative and will resolve to %s."
+ " Is this what you wanted?", option, filepath, abs_path);
+ tor_free(abs_path);
+ }
+}
+
+/** Scan <b>options</b> for occurances of relative file/directory
+ * path and log a warning whenever it is found.
+ */
+static void
+warn_about_relative_paths(or_options_t *options)
+{
+ tor_assert(options);
+
+ warn_if_option_path_is_relative("CookieAuthFile",
+ options->CookieAuthFile);
+ warn_if_option_path_is_relative("ExtORPortCookieAuthFile",
+ options->ExtORPortCookieAuthFile);
+ warn_if_option_path_is_relative("DirPortFrontPage",
+ options->DirPortFrontPage);
+ warn_if_option_path_is_relative("V3BandwidthsFile",
+ options->V3BandwidthsFile);
+ warn_if_option_path_is_relative("ControlPortWriteToFile",
+ options->ControlPortWriteToFile);
+ warn_if_option_path_is_relative("GeoIPFile",options->GeoIPFile);
+ warn_if_option_path_is_relative("GeoIPv6File",options->GeoIPv6File);
+ warn_if_option_path_is_relative("Log",options->DebugLogFile);
+ warn_if_option_path_is_relative("AccelDir",options->AccelDir);
+ warn_if_option_path_is_relative("DataDirectory",options->DataDirectory);
+ warn_if_option_path_is_relative("PidFile",options->PidFile);
+
+ for (config_line_t *hs_line = options->RendConfigLines; hs_line;
+ hs_line = hs_line->next) {
+ if (!strcasecmp(hs_line->key, "HiddenServiceDir"))
+ warn_if_option_path_is_relative("HiddenServiceDir",hs_line->value);
+ }
+}
+
/** Return 0 if every setting in <b>options</b> is reasonable, is a
* permissible transition from <b>old_options</b>, and none of the
* testing-only settings differ from <b>default_options</b> unless in
@@ -2587,13 +2645,12 @@ options_validate(or_options_t *old_options, or_options_t *options,
config_line_t *cl;
const char *uname = get_uname();
int n_ports=0;
-#define REJECT(arg) \
- STMT_BEGIN *msg = tor_strdup(arg); return -1; STMT_END
-#define COMPLAIN(arg) STMT_BEGIN log_warn(LD_CONFIG, arg); STMT_END
tor_assert(msg);
*msg = NULL;
+ warn_about_relative_paths(options);
+
if (server_mode(options) &&
(!strcmpstart(uname, "Windows 95") ||
!strcmpstart(uname, "Windows 98") ||
@@ -2754,6 +2811,13 @@ options_validate(or_options_t *old_options, or_options_t *options,
"features to be broken in unpredictable ways.");
}
+ for (cl = options->RecommendedPackages; cl; cl = cl->next) {
+ if (! validate_recommended_package_line(cl->value)) {
+ log_warn(LD_CONFIG, "Invalid RecommendedPackage line %s will be ignored",
+ escaped(cl->value));
+ }
+ }
+
if (options->AuthoritativeDir) {
if (!options->ContactInfo && !options->TestingTorNetwork)
REJECT("Authoritative directory servers must set ContactInfo");
@@ -2786,6 +2850,10 @@ options_validate(or_options_t *old_options, or_options_t *options,
if (options->V3BandwidthsFile && !old_options) {
dirserv_read_measured_bandwidths(options->V3BandwidthsFile, NULL);
}
+ /* same for guardfraction file */
+ if (options->GuardfractionFile && !old_options) {
+ dirserv_read_guardfraction_file(options->GuardfractionFile, NULL);
+ }
}
if (options->AuthoritativeDir && !options->DirPort_set)
@@ -3027,6 +3095,7 @@ options_validate(or_options_t *old_options, or_options_t *options,
options->PredictedPortsRelevanceTime = MAX_PREDICTED_CIRCS_RELEVANCE;
}
+#ifdef ENABLE_TOR2WEB_MODE
if (options->Tor2webMode && options->LearnCircuitBuildTimeout) {
/* LearnCircuitBuildTimeout and Tor2webMode are incompatible in
* two ways:
@@ -3058,6 +3127,11 @@ options_validate(or_options_t *old_options, or_options_t *options,
"Tor2WebMode is enabled; disabling UseEntryGuards.");
options->UseEntryGuards = 0;
}
+#endif
+
+ if (options->Tor2webRendezvousPoints && !options->Tor2webMode) {
+ REJECT("Tor2webRendezvousPoints cannot be set without Tor2webMode.");
+ }
if (!(options->UseEntryGuards) &&
(options->RendConfigLines != NULL)) {
@@ -3182,29 +3256,34 @@ options_validate(or_options_t *old_options, or_options_t *options,
options->RelayBandwidthRate = options->RelayBandwidthBurst;
if (server_mode(options)) {
- if (options->BandwidthRate < ROUTER_REQUIRED_MIN_BANDWIDTH) {
+ const unsigned required_min_bw =
+ public_server_mode(options) ?
+ RELAY_REQUIRED_MIN_BANDWIDTH : BRIDGE_REQUIRED_MIN_BANDWIDTH;
+ const char * const optbridge =
+ public_server_mode(options) ? "" : "bridge ";
+ if (options->BandwidthRate < required_min_bw) {
tor_asprintf(msg,
"BandwidthRate is set to %d bytes/second. "
- "For servers, it must be at least %d.",
- (int)options->BandwidthRate,
- ROUTER_REQUIRED_MIN_BANDWIDTH);
+ "For %sservers, it must be at least %u.",
+ (int)options->BandwidthRate, optbridge,
+ required_min_bw);
return -1;
} else if (options->MaxAdvertisedBandwidth <
- ROUTER_REQUIRED_MIN_BANDWIDTH/2) {
+ required_min_bw/2) {
tor_asprintf(msg,
"MaxAdvertisedBandwidth is set to %d bytes/second. "
- "For servers, it must be at least %d.",
- (int)options->MaxAdvertisedBandwidth,
- ROUTER_REQUIRED_MIN_BANDWIDTH/2);
+ "For %sservers, it must be at least %u.",
+ (int)options->MaxAdvertisedBandwidth, optbridge,
+ required_min_bw/2);
return -1;
}
if (options->RelayBandwidthRate &&
- options->RelayBandwidthRate < ROUTER_REQUIRED_MIN_BANDWIDTH) {
+ options->RelayBandwidthRate < required_min_bw) {
tor_asprintf(msg,
"RelayBandwidthRate is set to %d bytes/second. "
- "For servers, it must be at least %d.",
- (int)options->RelayBandwidthRate,
- ROUTER_REQUIRED_MIN_BANDWIDTH);
+ "For %sservers, it must be at least %u.",
+ (int)options->RelayBandwidthRate, optbridge,
+ required_min_bw);
return -1;
}
}
@@ -3733,9 +3812,10 @@ options_validate(or_options_t *old_options, or_options_t *options,
"combination.");
return 0;
+}
+
#undef REJECT
#undef COMPLAIN
-}
/* Given the value that the user has set for MaxMemInQueues, compute the
* actual maximum value. We clip this value if it's too low, and autodetect
@@ -4045,7 +4125,10 @@ get_windows_conf_root(void)
static const char *
get_default_conf_file(int defaults_file)
{
-#ifdef _WIN32
+#ifdef DISABLE_SYSTEM_TORRC
+ (void) defaults_file;
+ return NULL;
+#elif defined(_WIN32)
if (defaults_file) {
static char defaults_path[MAX_PATH+1];
tor_snprintf(defaults_path, MAX_PATH, "%s\\torrc-defaults",
@@ -4183,23 +4266,34 @@ find_torrc_filename(config_line_t *cmd_arg,
}
if (fn) {
file_status_t hmst = file_status(fn);
- if (hmst == FN_FILE || hmst == FN_EMPTY) {
+ if (hmst == FN_FILE || hmst == FN_EMPTY || dflt == NULL) {
fname = fn;
} else {
tor_free(fn);
fname = tor_strdup(dflt);
}
} else {
- fname = tor_strdup(dflt);
+ fname = dflt ? tor_strdup(dflt) : NULL;
}
#else
- fname = tor_strdup(dflt);
+ fname = dflt ? tor_strdup(dflt) : NULL;
#endif
}
}
return fname;
}
+/** Read the torrc from standard input and return it as a string.
+ * Upon failure, return NULL.
+ */
+static char *
+load_torrc_from_stdin(void)
+{
+ size_t sz_out;
+
+ return read_file_to_str_until_eof(STDIN_FILENO,SIZE_MAX,&sz_out);
+}
+
/** Load a configuration file from disk, setting torrc_fname or
* torrc_defaults_fname if successful.
*
@@ -4219,17 +4313,17 @@ load_torrc_from_disk(config_line_t *cmd_arg, int defaults_file)
if (*fname_var == NULL) {
fname = find_torrc_filename(cmd_arg, defaults_file,
&using_default_torrc, &ignore_missing_torrc);
- tor_assert(fname);
tor_free(*fname_var);
*fname_var = fname;
} else {
fname = *fname_var;
}
- log_debug(LD_CONFIG, "Opening config file \"%s\"", fname);
+ log_debug(LD_CONFIG, "Opening config file \"%s\"", fname?fname:"<NULL>");
/* Open config file */
- file_status_t st = file_status(fname);
- if (!(st == FN_FILE || st == FN_EMPTY) ||
+ file_status_t st = fname ? file_status(fname) : FN_EMPTY;
+ if (fname == NULL ||
+ !(st == FN_FILE || st == FN_EMPTY) ||
!(cf = read_file_to_str(fname,0,NULL))) {
if (using_default_torrc == 1 || ignore_missing_torrc) {
if (!defaults_file)
@@ -4297,13 +4391,6 @@ options_init_from_torrc(int argc, char **argv)
exit(0);
}
- if (config_line_find(cmdline_only_options, "--digests")) {
- printf("Tor version %s.\n",get_version());
- printf("%s", libor_get_digests());
- printf("%s", tor_get_digests());
- exit(0);
- }
-
if (config_line_find(cmdline_only_options, "--library-versions")) {
printf("Tor version %s. \n", get_version());
printf("Library versions\tCompiled\t\tRuntime\n");
@@ -4340,7 +4427,19 @@ options_init_from_torrc(int argc, char **argv)
cf = tor_strdup("");
} else {
cf_defaults = load_torrc_from_disk(cmdline_only_options, 1);
- cf = load_torrc_from_disk(cmdline_only_options, 0);
+
+ const config_line_t *f_line = config_line_find(cmdline_only_options,
+ "-f");
+
+ const int read_torrc_from_stdin =
+ (f_line != NULL && strcmp(f_line->value, "-") == 0);
+
+ if (read_torrc_from_stdin) {
+ cf = load_torrc_from_stdin();
+ } else {
+ cf = load_torrc_from_disk(cmdline_only_options, 0);
+ }
+
if (!cf) {
if (config_line_find(cmdline_only_options, "--allow-missing-torrc")) {
cf = tor_strdup("");
@@ -4518,7 +4617,7 @@ options_init_from_string(const char *cf_defaults, const char *cf,
return err;
}
-/** Return the location for our configuration file.
+/** Return the location for our configuration file. May return NULL.
*/
const char *
get_torrc_fname(int defaults_fname)
@@ -5372,14 +5471,6 @@ parse_dir_authority_line(const char *line, dirinfo_type_t required_type,
fingerprint, (int)strlen(fingerprint));
goto err;
}
- if (!strcmp(fingerprint, "E623F7625FBE0C87820F11EC5F6D5377ED816294")) {
- /* a known bad fingerprint. refuse to use it. We can remove this
- * clause once Tor 0.1.2.17 is obsolete. */
- log_warn(LD_CONFIG, "Dangerous dirserver line. To correct, erase your "
- "torrc file (%s), or reinstall Tor and use the default torrc.",
- get_torrc_fname(0));
- goto err;
- }
if (base16_decode(digest, DIGEST_LEN, fingerprint, HEX_DIGEST_LEN)<0) {
log_warn(LD_CONFIG, "Unable to decode DirAuthority key digest.");
goto err;
@@ -5418,7 +5509,7 @@ parse_dir_authority_line(const char *line, dirinfo_type_t required_type,
* <b>validate_only</b> is 0, and the line is well-formed, then add the
* dirserver described in the line as a fallback directory. Return 0 on
* success, or -1 if the line isn't well-formed or if we can't add it. */
-static int
+int
parse_dir_fallback_line(const char *line,
int validate_only)
{
@@ -5509,12 +5600,13 @@ parse_dir_fallback_line(const char *line,
/** Allocate and return a new port_cfg_t with reasonable defaults. */
static port_cfg_t *
-port_cfg_new(void)
+port_cfg_new(size_t namelen)
{
- port_cfg_t *cfg = tor_malloc_zero(sizeof(port_cfg_t));
- cfg->ipv4_traffic = 1;
- cfg->cache_ipv4_answers = 1;
- cfg->prefer_ipv6_virtaddr = 1;
+ tor_assert(namelen <= SIZE_T_CEILING - sizeof(port_cfg_t) - 1);
+ port_cfg_t *cfg = tor_malloc_zero(sizeof(port_cfg_t) + namelen + 1);
+ cfg->entry_cfg.ipv4_traffic = 1;
+ cfg->entry_cfg.cache_ipv4_answers = 1;
+ cfg->entry_cfg.prefer_ipv6_virtaddr = 1;
return cfg;
}
@@ -5621,6 +5713,56 @@ warn_nonlocal_controller_ports(smartlist_t *ports, unsigned forbid)
#define CL_PORT_SERVER_OPTIONS (1u<<3)
#define CL_PORT_FORBID_NONLOCAL (1u<<4)
#define CL_PORT_TAKES_HOSTNAMES (1u<<5)
+#define CL_PORT_IS_UNIXSOCKET (1u<<6)
+
+#ifdef HAVE_SYS_UN_H
+
+/** Parse the given <b>addrport</b> and set <b>path_out</b> if a Unix socket
+ * path is found. Return 0 on success. On error, a negative value is
+ * returned, -ENOENT if no Unix statement found, -EINVAL if the socket path
+ * is empty and -ENOSYS if AF_UNIX is not supported (see function in the
+ * #else statement below). */
+
+int
+config_parse_unix_port(const char *addrport, char **path_out)
+{
+ tor_assert(path_out);
+ tor_assert(addrport);
+
+ if (strcmpstart(addrport, unix_socket_prefix)) {
+ /* Not a Unix socket path. */
+ return -ENOENT;
+ }
+
+ if (strlen(addrport + strlen(unix_socket_prefix)) == 0) {
+ /* Empty socket path, not very usable. */
+ return -EINVAL;
+ }
+
+ *path_out = tor_strdup(addrport + strlen(unix_socket_prefix));
+ return 0;
+}
+
+#else /* defined(HAVE_SYS_UN_H) */
+
+int
+config_parse_unix_port(const char *addrport, char **path_out)
+{
+ tor_assert(path_out);
+ tor_assert(addrport);
+
+ if (strcmpstart(addrport, unix_socket_prefix)) {
+ /* Not a Unix socket path. */
+ return -ENOENT;
+ }
+
+ log_warn(LD_CONFIG,
+ "Port configuration %s is for an AF_UNIX socket, but we have no"
+ "support available on this platform",
+ escaped(addrport));
+ return -ENOSYS;
+}
+#endif /* defined(HAVE_SYS_UN_H) */
/**
* Parse port configuration for a single port type.
@@ -5668,7 +5810,7 @@ parse_port_config(smartlist_t *out,
int listener_type,
const char *defaultaddr,
int defaultport,
- unsigned flags)
+ const unsigned flags)
{
smartlist_t *elts;
int retval = -1;
@@ -5681,7 +5823,9 @@ parse_port_config(smartlist_t *out,
const unsigned allow_spurious_listenaddr =
flags & CL_PORT_ALLOW_EXTRA_LISTENADDR;
const unsigned takes_hostnames = flags & CL_PORT_TAKES_HOSTNAMES;
+ const unsigned is_unix_socket = flags & CL_PORT_IS_UNIXSOCKET;
int got_zero_port=0, got_nonzero_port=0;
+ char *unix_socket_path = NULL;
/* FooListenAddress is deprecated; let's make it work like it used to work,
* though. */
@@ -5717,14 +5861,14 @@ parse_port_config(smartlist_t *out,
if (use_server_options && out) {
/* Add a no_listen port. */
- port_cfg_t *cfg = port_cfg_new();
+ port_cfg_t *cfg = port_cfg_new(0);
cfg->type = listener_type;
cfg->port = mainport;
tor_addr_make_unspec(&cfg->addr); /* Server ports default to 0.0.0.0 */
- cfg->no_listen = 1;
- cfg->bind_ipv4_only = 1;
- cfg->ipv4_traffic = 1;
- cfg->prefer_ipv6_virtaddr = 1;
+ cfg->server_cfg.no_listen = 1;
+ cfg->server_cfg.bind_ipv4_only = 1;
+ cfg->entry_cfg.ipv4_traffic = 1;
+ cfg->entry_cfg.prefer_ipv6_virtaddr = 1;
smartlist_add(out, cfg);
}
@@ -5737,13 +5881,13 @@ parse_port_config(smartlist_t *out,
return -1;
}
if (out) {
- port_cfg_t *cfg = port_cfg_new();
+ port_cfg_t *cfg = port_cfg_new(0);
cfg->type = listener_type;
cfg->port = port ? port : mainport;
tor_addr_copy(&cfg->addr, &addr);
- cfg->session_group = SESSION_GROUP_UNSET;
- cfg->isolation_flags = ISO_DEFAULT;
- cfg->no_advertise = 1;
+ cfg->entry_cfg.session_group = SESSION_GROUP_UNSET;
+ cfg->entry_cfg.isolation_flags = ISO_DEFAULT;
+ cfg->server_cfg.no_advertise = 1;
smartlist_add(out, cfg);
}
}
@@ -5762,13 +5906,19 @@ parse_port_config(smartlist_t *out,
/* No ListenAddress lines. If there's no FooPort, then maybe make a default
* one. */
if (! ports) {
- if (defaultport && out) {
- port_cfg_t *cfg = port_cfg_new();
+ if (defaultport && defaultaddr && out) {
+ port_cfg_t *cfg = port_cfg_new(is_unix_socket ? strlen(defaultaddr) : 0);
cfg->type = listener_type;
- cfg->port = defaultport;
- tor_addr_parse(&cfg->addr, defaultaddr);
- cfg->session_group = SESSION_GROUP_UNSET;
- cfg->isolation_flags = ISO_DEFAULT;
+ if (is_unix_socket) {
+ tor_addr_make_unspec(&cfg->addr);
+ memcpy(cfg->unix_addr, defaultaddr, strlen(defaultaddr) + 1);
+ cfg->is_unix_addr = 1;
+ } else {
+ cfg->port = defaultport;
+ tor_addr_parse(&cfg->addr, defaultaddr);
+ }
+ cfg->entry_cfg.session_group = SESSION_GROUP_UNSET;
+ cfg->entry_cfg.isolation_flags = ISO_DEFAULT;
smartlist_add(out, cfg);
}
return 0;
@@ -5780,7 +5930,7 @@ parse_port_config(smartlist_t *out,
for (; ports; ports = ports->next) {
tor_addr_t addr;
- int port;
+ int port, ret;
int sessiongroup = SESSION_GROUP_UNSET;
unsigned isolation = ISO_DEFAULT;
int prefer_no_auth = 0;
@@ -5809,9 +5959,34 @@ parse_port_config(smartlist_t *out,
/* Now parse the addr/port value */
addrport = smartlist_get(elts, 0);
- if (!strcmp(addrport, "auto")) {
+
+ /* Let's start to check if it's a Unix socket path. */
+ ret = config_parse_unix_port(addrport, &unix_socket_path);
+ if (ret < 0 && ret != -ENOENT) {
+ if (ret == -EINVAL) {
+ log_warn(LD_CONFIG, "Empty Unix socket path.");
+ }
+ goto err;
+ }
+
+ if (unix_socket_path &&
+ ! conn_listener_type_supports_af_unix(listener_type)) {
+ log_warn(LD_CONFIG, "%sPort does not support unix sockets", portname);
+ goto err;
+ }
+
+ if (unix_socket_path) {
+ port = 1;
+ } else if (is_unix_socket) {
+ unix_socket_path = tor_strdup(addrport);
+ if (!strcmp(addrport, "0"))
+ port = 0;
+ else
+ port = 1;
+ } else if (!strcmp(addrport, "auto")) {
port = CFG_AUTO_PORT;
- tor_addr_parse(&addr, defaultaddr);
+ int af = tor_addr_parse(&addr, defaultaddr);
+ tor_assert(af >= 0);
} else if (!strcasecmpend(addrport, ":auto")) {
char *addrtmp = tor_strndup(addrport, strlen(addrport)-5);
port = CFG_AUTO_PORT;
@@ -5826,7 +6001,8 @@ parse_port_config(smartlist_t *out,
"9050" might be a valid address. */
port = (int) tor_parse_long(addrport, 10, 0, 65535, &ok, NULL);
if (ok) {
- tor_addr_parse(&addr, defaultaddr);
+ int af = tor_addr_parse(&addr, defaultaddr);
+ tor_assert(af >= 0);
} else if (tor_addr_port_lookup(addrport, &addr, &ptmp) == 0) {
if (ptmp == 0) {
log_warn(LD_CONFIG, "%sPort line has address but no port", portname);
@@ -5994,28 +6170,36 @@ parse_port_config(smartlist_t *out,
}
if (out && port) {
- port_cfg_t *cfg = port_cfg_new();
- tor_addr_copy(&cfg->addr, &addr);
- cfg->port = port;
+ size_t namelen = unix_socket_path ? strlen(unix_socket_path) : 0;
+ port_cfg_t *cfg = port_cfg_new(namelen);
+ if (unix_socket_path) {
+ tor_addr_make_unspec(&cfg->addr);
+ memcpy(cfg->unix_addr, unix_socket_path, namelen + 1);
+ cfg->is_unix_addr = 1;
+ tor_free(unix_socket_path);
+ } else {
+ tor_addr_copy(&cfg->addr, &addr);
+ cfg->port = port;
+ }
cfg->type = listener_type;
- cfg->isolation_flags = isolation;
- cfg->session_group = sessiongroup;
- cfg->no_advertise = no_advertise;
- cfg->no_listen = no_listen;
- cfg->all_addrs = all_addrs;
- cfg->bind_ipv4_only = bind_ipv4_only;
- cfg->bind_ipv6_only = bind_ipv6_only;
- cfg->ipv4_traffic = ipv4_traffic;
- cfg->ipv6_traffic = ipv6_traffic;
- cfg->prefer_ipv6 = prefer_ipv6;
- cfg->cache_ipv4_answers = cache_ipv4;
- cfg->cache_ipv6_answers = cache_ipv6;
- cfg->use_cached_ipv4_answers = use_cached_ipv4;
- cfg->use_cached_ipv6_answers = use_cached_ipv6;
- cfg->prefer_ipv6_virtaddr = prefer_ipv6_automap;
- cfg->socks_prefer_no_auth = prefer_no_auth;
+ cfg->entry_cfg.isolation_flags = isolation;
+ cfg->entry_cfg.session_group = sessiongroup;
+ cfg->server_cfg.no_advertise = no_advertise;
+ cfg->server_cfg.no_listen = no_listen;
+ cfg->server_cfg.all_addrs = all_addrs;
+ cfg->server_cfg.bind_ipv4_only = bind_ipv4_only;
+ cfg->server_cfg.bind_ipv6_only = bind_ipv6_only;
+ cfg->entry_cfg.ipv4_traffic = ipv4_traffic;
+ cfg->entry_cfg.ipv6_traffic = ipv6_traffic;
+ cfg->entry_cfg.prefer_ipv6 = prefer_ipv6;
+ cfg->entry_cfg.cache_ipv4_answers = cache_ipv4;
+ cfg->entry_cfg.cache_ipv6_answers = cache_ipv6;
+ cfg->entry_cfg.use_cached_ipv4_answers = use_cached_ipv4;
+ cfg->entry_cfg.use_cached_ipv6_answers = use_cached_ipv6;
+ cfg->entry_cfg.prefer_ipv6_virtaddr = prefer_ipv6_automap;
+ cfg->entry_cfg.socks_prefer_no_auth = prefer_no_auth;
if (! (isolation & ISO_SOCKSAUTH))
- cfg->socks_prefer_no_auth = 1;
+ cfg->entry_cfg.socks_prefer_no_auth = 1;
smartlist_add(out, cfg);
}
@@ -6043,97 +6227,10 @@ parse_port_config(smartlist_t *out,
err:
SMARTLIST_FOREACH(elts, char *, cp, tor_free(cp));
smartlist_free(elts);
+ tor_free(unix_socket_path);
return retval;
}
-/** Parse a list of config_line_t for an AF_UNIX unix socket listener option
- * from <b>cfg</b> and add them to <b>out</b>. No fancy options are
- * supported: the line contains nothing but the path to the AF_UNIX socket.
- * We support a *Socket 0 syntax to explicitly disable if we enable by
- * default. To use this, pass a non-NULL list containing the default
- * paths into this function as the 2nd parameter, and if no config lines at all
- * are present they will be added to the output list. If the only config line
- * present is '0' the input list will be unmodified.
- */
-static int
-parse_unix_socket_config(smartlist_t *out, smartlist_t *defaults,
- const config_line_t *cfg, int listener_type)
-{
- /* We can say things like SocksSocket 0 or ControlSocket 0 to explicitly
- * disable this feature; use this to track if we've seen a disable line
- */
-
- int unix_socket_disable = 0;
- size_t len;
- smartlist_t *ports_to_add = NULL;
-
- if (!out)
- return 0;
-
- ports_to_add = smartlist_new();
-
- for ( ; cfg; cfg = cfg->next) {
- if (strcmp(cfg->value, "0") != 0) {
- /* We have a non-disable; add it */
- len = strlen(cfg->value);
- port_cfg_t *port = tor_malloc_zero(sizeof(port_cfg_t) + len + 1);
- port->is_unix_addr = 1;
- memcpy(port->unix_addr, cfg->value, len+1);
- port->type = listener_type;
- if (listener_type == CONN_TYPE_AP_LISTENER) {
- /* Some more bits to twiddle for this case
- *
- * XXX this should support parsing the same options
- * parse_port_config() does, and probably that code should be
- * factored out into a function we can call from here. For
- * now, some reasonable defaults.
- */
-
- port->ipv4_traffic = 1;
- port->ipv6_traffic = 1;
- port->cache_ipv4_answers = 1;
- port->cache_ipv6_answers = 1;
- }
- smartlist_add(ports_to_add, port);
- } else {
- /* Keep track that we've seen a disable */
- unix_socket_disable = 1;
- }
- }
-
- if (unix_socket_disable) {
- if (smartlist_len(ports_to_add) > 0) {
- /* We saw a disable line and a path; bad news */
- SMARTLIST_FOREACH(ports_to_add, port_cfg_t *, port, tor_free(port));
- smartlist_free(ports_to_add);
- return -1;
- }
- /* else we have a disable and nothing else, so add nothing to out */
- } else {
- /* No disable; do we have any ports to add that we parsed? */
- if (smartlist_len(ports_to_add) > 0) {
- SMARTLIST_FOREACH_BEGIN(ports_to_add, port_cfg_t *, port) {
- smartlist_add(out, port);
- } SMARTLIST_FOREACH_END(port);
- } else if (defaults != NULL && smartlist_len(defaults) > 0) {
- /* No, but we have some defaults to copy */
- SMARTLIST_FOREACH_BEGIN(defaults, const port_cfg_t *, defport) {
- tor_assert(defport->is_unix_addr);
- tor_assert(defport->unix_addr);
- len = sizeof(port_cfg_t) + strlen(defport->unix_addr) + 1;
- port_cfg_t *port = tor_malloc_zero(len);
- memcpy(port, defport, len);
- smartlist_add(out, port);
- } SMARTLIST_FOREACH_END(defport);
- }
-
- /* Free the temporary smartlist we used */
- smartlist_free(ports_to_add);
- }
-
- return 0;
-}
-
/** Return the number of ports which are actually going to listen with type
* <b>listenertype</b>. Do not count no_listen ports. Do not count unix
* sockets. */
@@ -6142,7 +6239,7 @@ count_real_listeners(const smartlist_t *ports, int listenertype)
{
int n = 0;
SMARTLIST_FOREACH_BEGIN(ports, port_cfg_t *, port) {
- if (port->no_listen || port->is_unix_addr)
+ if (port->server_cfg.no_listen || port->is_unix_addr)
continue;
if (port->type != listenertype)
continue;
@@ -6223,18 +6320,13 @@ parse_ports(or_options_t *options, int validate_only,
goto err;
}
- if (parse_unix_socket_config(ports, NULL,
- options->ControlSocket,
- CONN_TYPE_CONTROL_LISTENER) < 0) {
+ if (parse_port_config(ports, options->ControlSocket, NULL,
+ "ControlSocket",
+ CONN_TYPE_CONTROL_LISTENER, NULL, 0,
+ control_port_flags | CL_PORT_IS_UNIXSOCKET) < 0) {
*msg = tor_strdup("Invalid ControlSocket configuration");
goto err;
}
- if (parse_unix_socket_config(ports, NULL,
- options->SocksSocket,
- CONN_TYPE_AP_LISTENER) < 0) {
- *msg = tor_strdup("Invalid SocksSocket configuration");
- goto err;
- }
}
if (! options->ClientOnly) {
if (parse_port_config(ports,
@@ -6278,8 +6370,6 @@ parse_ports(or_options_t *options, int validate_only,
!! count_real_listeners(ports, CONN_TYPE_OR_LISTENER);
options->SocksPort_set =
!! count_real_listeners(ports, CONN_TYPE_AP_LISTENER);
- options->SocksSocket_set =
- !! count_real_listeners(ports, CONN_TYPE_AP_LISTENER);
options->TransPort_set =
!! count_real_listeners(ports, CONN_TYPE_AP_TRANS_LISTENER);
options->NATDPort_set =
@@ -6327,25 +6417,25 @@ check_server_ports(const smartlist_t *ports,
SMARTLIST_FOREACH_BEGIN(ports, const port_cfg_t *, port) {
if (port->type == CONN_TYPE_DIR_LISTENER) {
- if (! port->no_advertise)
+ if (! port->server_cfg.no_advertise)
++n_dirport_advertised;
- if (! port->no_listen)
+ if (! port->server_cfg.no_listen)
++n_dirport_listeners;
} else if (port->type == CONN_TYPE_OR_LISTENER) {
- if (! port->no_advertise) {
+ if (! port->server_cfg.no_advertise) {
++n_orport_advertised;
if (tor_addr_family(&port->addr) == AF_INET ||
(tor_addr_family(&port->addr) == AF_UNSPEC &&
- !port->bind_ipv6_only))
+ !port->server_cfg.bind_ipv6_only))
++n_orport_advertised_ipv4;
}
- if (! port->no_listen)
+ if (! port->server_cfg.no_listen)
++n_orport_listeners;
} else {
continue;
}
#ifndef _WIN32
- if (!port->no_listen && port->port < 1024)
+ if (!port->server_cfg.no_listen && port->port < 1024)
++n_low_port;
#endif
} SMARTLIST_FOREACH_END(port);
@@ -6423,7 +6513,7 @@ get_first_listener_addrport_string(int listener_type)
return NULL;
SMARTLIST_FOREACH_BEGIN(configured_ports, const port_cfg_t *, cfg) {
- if (cfg->no_listen)
+ if (cfg->server_cfg.no_listen)
continue;
if (cfg->type == listener_type &&
@@ -6470,12 +6560,12 @@ get_first_advertised_port_by_type_af(int listener_type, int address_family)
return 0;
SMARTLIST_FOREACH_BEGIN(configured_ports, const port_cfg_t *, cfg) {
if (cfg->type == listener_type &&
- !cfg->no_advertise &&
+ !cfg->server_cfg.no_advertise &&
(tor_addr_family(&cfg->addr) == address_family ||
tor_addr_family(&cfg->addr) == AF_UNSPEC)) {
if (tor_addr_family(&cfg->addr) != AF_UNSPEC ||
- (address_family == AF_INET && !cfg->bind_ipv6_only) ||
- (address_family == AF_INET6 && !cfg->bind_ipv4_only)) {
+ (address_family == AF_INET && !cfg->server_cfg.bind_ipv6_only) ||
+ (address_family == AF_INET6 && !cfg->server_cfg.bind_ipv4_only)) {
return cfg->port;
}
}
@@ -6559,7 +6649,8 @@ write_configuration_file(const char *fname, const or_options_t *options)
char *old_val=NULL, *new_val=NULL, *new_conf=NULL;
int rename_old = 0, r;
- tor_assert(fname);
+ if (!fname)
+ return -1;
switch (file_status(fname)) {
/* create backups of old config files, even if they're empty */
@@ -6657,7 +6748,6 @@ get_num_cpus(const or_options_t *options)
static void
init_libevent(const or_options_t *options)
{
- const char *badness=NULL;
tor_libevent_cfg cfg;
tor_assert(options);
@@ -6678,17 +6768,6 @@ init_libevent(const or_options_t *options)
tor_libevent_initialize(&cfg);
suppress_libevent_log_msg(NULL);
-
- tor_check_libevent_version(tor_libevent_get_method(),
- server_mode(get_options()),
- &badness);
- if (badness) {
- const char *v = tor_libevent_get_version_str();
- const char *m = tor_libevent_get_method();
- control_event_general_status(LOG_WARN,
- "BAD_LIBEVENT VERSION=%s METHOD=%s BADNESS=%s RECOVERED=NO",
- v, m, badness);
- }
}
/** Return a newly allocated string holding a filename relative to the data
@@ -6889,15 +6968,42 @@ getinfo_helper_config(control_connection_t *conn,
smartlist_free(sl);
} else if (!strcmp(question, "config/defaults")) {
smartlist_t *sl = smartlist_new();
- int i;
+ int i, dirauth_lines_seen = 0;
for (i = 0; option_vars_[i].name; ++i) {
const config_var_t *var = &option_vars_[i];
if (var->initvalue != NULL) {
- char *val = esc_for_log(var->initvalue);
- smartlist_add_asprintf(sl, "%s %s\n",var->name,val);
- tor_free(val);
+ if (strcmp(option_vars_[i].name, "DirAuthority") == 0) {
+ /*
+ * Count dirauth lines we have a default for; we'll use the
+ * count later to decide whether to add the defaults manually
+ */
+ ++dirauth_lines_seen;
+ }
+ char *val = esc_for_log(var->initvalue);
+ smartlist_add_asprintf(sl, "%s %s\n",var->name,val);
+ tor_free(val);
+ }
+ }
+
+ if (dirauth_lines_seen == 0) {
+ /*
+ * We didn't see any directory authorities with default values,
+ * so add the list of default authorities manually.
+ */
+ const char **i;
+
+ /*
+ * default_authorities is defined earlier in this file and
+ * is a const char ** NULL-terminated array of dirauth config
+ * lines.
+ */
+ for (i = default_authorities; *i != NULL; ++i) {
+ char *val = esc_for_log(*i);
+ smartlist_add_asprintf(sl, "DirAuthority %s\n", val);
+ tor_free(val);
}
}
+
*answer = smartlist_join_strings(sl, "", 0, NULL);
SMARTLIST_FOREACH(sl, char *, c, tor_free(c));
smartlist_free(sl);
diff --git a/src/or/config.h b/src/or/config.h
index 6bd3eb5734..74b28f45ca 100644
--- a/src/or/config.h
+++ b/src/or/config.h
@@ -91,7 +91,6 @@ int getinfo_helper_config(control_connection_t *conn,
const char *question, char **answer,
const char **errmsg);
-const char *tor_get_digests(void);
uint32_t get_effective_bwrate(const or_options_t *options);
uint32_t get_effective_bwburst(const or_options_t *options);
@@ -113,6 +112,7 @@ int addressmap_register_auto(const char *from, const char *to,
time_t expires,
addressmap_entry_source_t addrmap_source,
const char **msg);
+int config_parse_unix_port(const char *addrport, char **path_out);
/** Represents the information stored in a torrc Bridge line. */
typedef struct bridge_line_t {
@@ -144,6 +144,12 @@ STATIC int options_validate(or_options_t *old_options,
STATIC int parse_transport_line(const or_options_t *options,
const char *line, int validate_only,
int server);
+STATIC int consider_adding_dir_servers(const or_options_t *options,
+ const or_options_t *old_options);
+MOCK_DECL(STATIC void, add_default_fallback_dir_servers, (void));
+STATIC int
+parse_dir_fallback_line(const char *line,
+ int validate_only);
#endif
#endif
diff --git a/src/or/config_codedigest.c b/src/or/config_codedigest.c
deleted file mode 100644
index 86d14bacef..0000000000
--- a/src/or/config_codedigest.c
+++ /dev/null
@@ -1,13 +0,0 @@
-
-const char *tor_get_digests(void);
-
-/** Return a string describing the digest of the source files in src/or/
- */
-const char *
-tor_get_digests(void)
-{
- return ""
-#include "or_sha1.i"
- ;
-}
-
diff --git a/src/or/connection.c b/src/or/connection.c
index 11ff224e67..24d47ccd18 100644
--- a/src/or/connection.c
+++ b/src/or/connection.c
@@ -29,7 +29,6 @@
#include "connection_edge.h"
#include "connection_or.h"
#include "control.h"
-#include "cpuworker.h"
#include "directory.h"
#include "dirserv.h"
#include "dns.h"
@@ -57,6 +56,11 @@
#include <pwd.h>
#endif
+#ifdef HAVE_SYS_UN_H
+#include <sys/socket.h>
+#include <sys/un.h>
+#endif
+
static connection_t *connection_listener_new(
const struct sockaddr *listensockaddr,
socklen_t listensocklen, int type,
@@ -130,7 +134,6 @@ conn_type_to_string(int type)
case CONN_TYPE_AP: return "Socks";
case CONN_TYPE_DIR_LISTENER: return "Directory listener";
case CONN_TYPE_DIR: return "Directory";
- case CONN_TYPE_CPUWORKER: return "CPU worker";
case CONN_TYPE_CONTROL_LISTENER: return "Control listener";
case CONN_TYPE_CONTROL: return "Control";
case CONN_TYPE_EXT_OR: return "Extended OR";
@@ -213,12 +216,6 @@ conn_state_to_string(int type, int state)
case DIR_CONN_STATE_SERVER_WRITING: return "writing";
}
break;
- case CONN_TYPE_CPUWORKER:
- switch (state) {
- case CPUWORKER_STATE_IDLE: return "idle";
- case CPUWORKER_STATE_BUSY_ONION: return "busy with onion";
- }
- break;
case CONN_TYPE_CONTROL:
switch (state) {
case CONTROL_CONN_STATE_OPEN: return "open (protocol v1)";
@@ -248,7 +245,6 @@ connection_type_uses_bufferevent(connection_t *conn)
case CONN_TYPE_CONTROL:
case CONN_TYPE_OR:
case CONN_TYPE_EXT_OR:
- case CONN_TYPE_CPUWORKER:
return 1;
default:
return 0;
@@ -305,9 +301,9 @@ entry_connection_new(int type, int socket_family)
* in a little while. Otherwise, we're doing this as a linked connection
* of some kind, and we should set it up here based on the socket family */
if (socket_family == AF_INET)
- entry_conn->ipv4_traffic_ok = 1;
+ entry_conn->entry_cfg.ipv4_traffic = 1;
else if (socket_family == AF_INET6)
- entry_conn->ipv6_traffic_ok = 1;
+ entry_conn->entry_cfg.ipv6_traffic = 1;
else if (socket_family == AF_UNIX)
entry_conn->is_socks_socket = 1;
return entry_conn;
@@ -453,6 +449,22 @@ connection_link_connections(connection_t *conn_a, connection_t *conn_b)
conn_b->linked_conn = conn_a;
}
+/** Return true iff the provided connection listener type supports AF_UNIX
+ * sockets. */
+int
+conn_listener_type_supports_af_unix(int type)
+{
+ /* For now only control ports or SOCKS ports can be Unix domain sockets
+ * and listeners at the same time */
+ switch (type) {
+ case CONN_TYPE_CONTROL_LISTENER:
+ case CONN_TYPE_AP_LISTENER:
+ return 1;
+ default:
+ return 0;
+ }
+}
+
/** Deallocate memory used by <b>conn</b>. Deallocate its buffers if
* necessary, close its socket if necessary, and mark the directory as dirty
* if <b>conn</b> is an OR or OP connection.
@@ -520,8 +532,7 @@ connection_free_(connection_t *conn)
if (conn->socket_family == AF_UNIX) {
/* For now only control and SOCKS ports can be Unix domain sockets
* and listeners at the same time */
- tor_assert(conn->type == CONN_TYPE_CONTROL_LISTENER ||
- conn->type == CONN_TYPE_AP_LISTENER);
+ tor_assert(conn_listener_type_supports_af_unix(conn->type));
if (unlink(conn->address) < 0 && errno != ENOENT) {
log_warn(LD_NET, "Could not unlink %s: %s", conn->address,
@@ -575,6 +586,13 @@ connection_free_(connection_t *conn)
control_connection_t *control_conn = TO_CONTROL_CONN(conn);
tor_free(control_conn->safecookie_client_hash);
tor_free(control_conn->incoming_cmd);
+ if (control_conn->ephemeral_onion_services) {
+ SMARTLIST_FOREACH(control_conn->ephemeral_onion_services, char *, cp, {
+ memwipe(cp, 0, strlen(cp));
+ tor_free(cp);
+ });
+ smartlist_free(control_conn->ephemeral_onion_services);
+ }
}
/* Probably already freed by connection_free. */
@@ -1176,17 +1194,13 @@ connection_listener_new(const struct sockaddr *listensockaddr,
}
#ifdef HAVE_SYS_UN_H
/*
- * AF_UNIX generic setup stuff (this covers both CONN_TYPE_CONTROL_LISTENER
- * and CONN_TYPE_AP_LISTENER cases)
+ * AF_UNIX generic setup stuff
*/
} else if (listensockaddr->sa_family == AF_UNIX) {
/* We want to start reading for both AF_UNIX cases */
start_reading = 1;
- /* For now only control ports or SOCKS ports can be Unix domain sockets
- * and listeners at the same time */
- tor_assert(type == CONN_TYPE_CONTROL_LISTENER ||
- type == CONN_TYPE_AP_LISTENER);
+ tor_assert(conn_listener_type_supports_af_unix(type));
if (check_location_for_unix_socket(options, address,
(type == CONN_TYPE_CONTROL_LISTENER) ?
@@ -1277,10 +1291,10 @@ connection_listener_new(const struct sockaddr *listensockaddr,
conn->port = gotPort;
tor_addr_copy(&conn->addr, &addr);
- if (port_cfg->isolation_flags) {
- lis_conn->isolation_flags = port_cfg->isolation_flags;
- if (port_cfg->session_group >= 0) {
- lis_conn->session_group = port_cfg->session_group;
+ if (port_cfg->entry_cfg.isolation_flags) {
+ lis_conn->entry_cfg.isolation_flags = port_cfg->entry_cfg.isolation_flags;
+ if (port_cfg->entry_cfg.session_group >= 0) {
+ lis_conn->entry_cfg.session_group = port_cfg->entry_cfg.session_group;
} else {
/* This can wrap after around INT_MAX listeners are opened. But I don't
* believe that matters, since you would need to open a ridiculous
@@ -1288,23 +1302,17 @@ connection_listener_new(const struct sockaddr *listensockaddr,
* hit this. An OR with a dozen ports open, for example, would have to
* close and re-open its listeners every second for 4 years nonstop.
*/
- lis_conn->session_group = global_next_session_group--;
+ lis_conn->entry_cfg.session_group = global_next_session_group--;
}
}
- if (type == CONN_TYPE_AP_LISTENER) {
- lis_conn->socks_ipv4_traffic = port_cfg->ipv4_traffic;
- lis_conn->socks_ipv6_traffic = port_cfg->ipv6_traffic;
- lis_conn->socks_prefer_ipv6 = port_cfg->prefer_ipv6;
- } else {
- lis_conn->socks_ipv4_traffic = 1;
- lis_conn->socks_ipv6_traffic = 1;
+
+ memcpy(&lis_conn->entry_cfg, &port_cfg->entry_cfg, sizeof(entry_port_cfg_t));
+
+ if (type != CONN_TYPE_AP_LISTENER) {
+ lis_conn->entry_cfg.ipv4_traffic = 1;
+ lis_conn->entry_cfg.ipv6_traffic = 1;
+ lis_conn->entry_cfg.prefer_ipv6 = 0;
}
- lis_conn->cache_ipv4_answers = port_cfg->cache_ipv4_answers;
- lis_conn->cache_ipv6_answers = port_cfg->cache_ipv6_answers;
- lis_conn->use_cached_ipv4_answers = port_cfg->use_cached_ipv4_answers;
- lis_conn->use_cached_ipv6_answers = port_cfg->use_cached_ipv6_answers;
- lis_conn->prefer_ipv6_virtaddr = port_cfg->prefer_ipv6_virtaddr;
- lis_conn->socks_prefer_no_auth = port_cfg->socks_prefer_no_auth;
if (connection_add(conn) < 0) { /* no space, forget it */
log_warn(LD_NET,"connection_add for listener failed. Giving up.");
@@ -1406,7 +1414,7 @@ static int
connection_handle_listener_read(connection_t *conn, int new_type)
{
tor_socket_t news; /* the new socket */
- connection_t *newconn;
+ connection_t *newconn = 0;
/* information about the remote peer when connecting to other routers */
struct sockaddr_storage addrbuf;
struct sockaddr *remote = (struct sockaddr*)&addrbuf;
@@ -1502,15 +1510,11 @@ connection_handle_listener_read(connection_t *conn, int new_type)
if (new_type == CONN_TYPE_AP && conn->socket_family != AF_UNIX) {
log_info(LD_NET, "New SOCKS connection opened from %s.",
fmt_and_decorate_addr(&addr));
- TO_ENTRY_CONN(newconn)->socks_request->socks_prefer_no_auth =
- TO_LISTENER_CONN(conn)->socks_prefer_no_auth;
}
if (new_type == CONN_TYPE_AP && conn->socket_family == AF_UNIX) {
newconn->port = 0;
newconn->address = tor_strdup(conn->address);
- log_info(LD_NET, "New SOCKS SocksSocket connection opened");
- TO_ENTRY_CONN(newconn)->socks_request->socks_prefer_no_auth =
- TO_LISTENER_CONN(conn)->socks_prefer_no_auth;
+ log_info(LD_NET, "New SOCKS AF_UNIX connection opened");
}
if (new_type == CONN_TYPE_CONTROL) {
log_notice(LD_CONTROL, "New control connection opened from %s.",
@@ -1572,25 +1576,16 @@ connection_init_accepted_conn(connection_t *conn,
return rv;
break;
case CONN_TYPE_AP:
- TO_ENTRY_CONN(conn)->isolation_flags = listener->isolation_flags;
- TO_ENTRY_CONN(conn)->session_group = listener->session_group;
+ memcpy(&TO_ENTRY_CONN(conn)->entry_cfg, &listener->entry_cfg,
+ sizeof(entry_port_cfg_t));
TO_ENTRY_CONN(conn)->nym_epoch = get_signewnym_epoch();
TO_ENTRY_CONN(conn)->socks_request->listener_type = listener->base_.type;
- TO_ENTRY_CONN(conn)->ipv4_traffic_ok = listener->socks_ipv4_traffic;
- TO_ENTRY_CONN(conn)->ipv6_traffic_ok = listener->socks_ipv6_traffic;
- TO_ENTRY_CONN(conn)->prefer_ipv6_traffic = listener->socks_prefer_ipv6;
- TO_ENTRY_CONN(conn)->cache_ipv4_answers = listener->cache_ipv4_answers;
- TO_ENTRY_CONN(conn)->cache_ipv6_answers = listener->cache_ipv6_answers;
- TO_ENTRY_CONN(conn)->use_cached_ipv4_answers =
- listener->use_cached_ipv4_answers;
- TO_ENTRY_CONN(conn)->use_cached_ipv6_answers =
- listener->use_cached_ipv6_answers;
- TO_ENTRY_CONN(conn)->prefer_ipv6_virtaddr =
- listener->prefer_ipv6_virtaddr;
switch (TO_CONN(listener)->type) {
case CONN_TYPE_AP_LISTENER:
conn->state = AP_CONN_STATE_SOCKS_WAIT;
+ TO_ENTRY_CONN(conn)->socks_request->socks_prefer_no_auth =
+ listener->entry_cfg.socks_prefer_no_auth;
break;
case CONN_TYPE_AP_TRANS_LISTENER:
TO_ENTRY_CONN(conn)->is_transparent_ap = 1;
@@ -1613,26 +1608,21 @@ connection_init_accepted_conn(connection_t *conn,
return 0;
}
-/** Take conn, make a nonblocking socket; try to connect to
- * addr:port (they arrive in *host order*). If fail, return -1 and if
- * applicable put your best guess about errno into *<b>socket_error</b>.
- * Else assign s to conn-\>s: if connected return 1, if EAGAIN return 0.
- *
- * address is used to make the logs useful.
- *
- * On success, add conn to the list of polled connections.
- */
-int
-connection_connect(connection_t *conn, const char *address,
- const tor_addr_t *addr, uint16_t port, int *socket_error)
+static int
+connection_connect_sockaddr(connection_t *conn,
+ const struct sockaddr *sa,
+ socklen_t sa_len,
+ const struct sockaddr *bindaddr,
+ socklen_t bindaddr_len,
+ int *socket_error)
{
tor_socket_t s;
int inprogress = 0;
- struct sockaddr_storage addrbuf;
- struct sockaddr *dest_addr;
- int dest_addr_len;
const or_options_t *options = get_options();
- int protocol_family;
+
+ tor_assert(conn);
+ tor_assert(sa);
+ tor_assert(socket_error);
if (get_n_open_sockets() >= get_options()->ConnLimit_-1) {
warn_too_many_conns();
@@ -1640,11 +1630,6 @@ connection_connect(connection_t *conn, const char *address,
return -1;
}
- if (tor_addr_family(addr) == AF_INET6)
- protocol_family = PF_INET6;
- else
- protocol_family = PF_INET;
-
if (get_options()->DisableNetwork) {
/* We should never even try to connect anyplace if DisableNetwork is set.
* Warn if we do, and refuse to make the connection. */
@@ -1656,7 +1641,11 @@ connection_connect(connection_t *conn, const char *address,
return -1;
}
- s = tor_open_socket_nonblocking(protocol_family,SOCK_STREAM,IPPROTO_TCP);
+ const int protocol_family = sa->sa_family;
+ const int proto = (sa->sa_family == AF_INET6 ||
+ sa->sa_family == AF_INET) ? IPPROTO_TCP : 0;
+
+ s = tor_open_socket_nonblocking(protocol_family, SOCK_STREAM, proto);
if (! SOCKET_OK(s)) {
*socket_error = tor_socket_errno(-1);
log_warn(LD_NET,"Error creating network socket: %s",
@@ -1669,6 +1658,73 @@ connection_connect(connection_t *conn, const char *address,
tor_socket_strerror(errno));
}
+ if (bindaddr && bind(s, bindaddr, bindaddr_len) < 0) {
+ *socket_error = tor_socket_errno(s);
+ log_warn(LD_NET,"Error binding network socket: %s",
+ tor_socket_strerror(*socket_error));
+ tor_close_socket(s);
+ return -1;
+ }
+
+ tor_assert(options);
+ if (options->ConstrainedSockets)
+ set_constrained_socket_buffers(s, (int)options->ConstrainedSockSize);
+
+ if (connect(s, sa, sa_len) < 0) {
+ int e = tor_socket_errno(s);
+ if (!ERRNO_IS_CONN_EINPROGRESS(e)) {
+ /* yuck. kill it. */
+ *socket_error = e;
+ log_info(LD_NET,
+ "connect() to socket failed: %s",
+ tor_socket_strerror(e));
+ tor_close_socket(s);
+ return -1;
+ } else {
+ inprogress = 1;
+ }
+ }
+
+ /* it succeeded. we're connected. */
+ log_fn(inprogress ? LOG_DEBUG : LOG_INFO, LD_NET,
+ "Connection to socket %s (sock "TOR_SOCKET_T_FORMAT").",
+ inprogress ? "in progress" : "established", s);
+ conn->s = s;
+ if (connection_add_connecting(conn) < 0) {
+ /* no space, forget it */
+ *socket_error = SOCK_ERRNO(ENOBUFS);
+ return -1;
+ }
+
+ return inprogress ? 0 : 1;
+}
+
+/** Take conn, make a nonblocking socket; try to connect to
+ * addr:port (they arrive in *host order*). If fail, return -1 and if
+ * applicable put your best guess about errno into *<b>socket_error</b>.
+ * Else assign s to conn-\>s: if connected return 1, if EAGAIN return 0.
+ *
+ * address is used to make the logs useful.
+ *
+ * On success, add conn to the list of polled connections.
+ */
+int
+connection_connect(connection_t *conn, const char *address,
+ const tor_addr_t *addr, uint16_t port, int *socket_error)
+{
+ struct sockaddr_storage addrbuf;
+ struct sockaddr_storage bind_addr_ss;
+ struct sockaddr *bind_addr = NULL;
+ struct sockaddr *dest_addr;
+ int dest_addr_len, bind_addr_len = 0;
+ const or_options_t *options = get_options();
+ int protocol_family;
+
+ if (tor_addr_family(addr) == AF_INET6)
+ protocol_family = PF_INET6;
+ else
+ protocol_family = PF_INET;
+
if (!tor_addr_is_loopback(addr)) {
const tor_addr_t *ext_addr = NULL;
if (protocol_family == AF_INET &&
@@ -1678,33 +1734,20 @@ connection_connect(connection_t *conn, const char *address,
!tor_addr_is_null(&options->OutboundBindAddressIPv6_))
ext_addr = &options->OutboundBindAddressIPv6_;
if (ext_addr) {
- struct sockaddr_storage ext_addr_sa;
- socklen_t ext_addr_len = 0;
- memset(&ext_addr_sa, 0, sizeof(ext_addr_sa));
- ext_addr_len = tor_addr_to_sockaddr(ext_addr, 0,
- (struct sockaddr *) &ext_addr_sa,
- sizeof(ext_addr_sa));
- if (ext_addr_len == 0) {
+ memset(&bind_addr_ss, 0, sizeof(bind_addr_ss));
+ bind_addr_len = tor_addr_to_sockaddr(ext_addr, 0,
+ (struct sockaddr *) &bind_addr_ss,
+ sizeof(bind_addr_ss));
+ if (bind_addr_len == 0) {
log_warn(LD_NET,
"Error converting OutboundBindAddress %s into sockaddr. "
"Ignoring.", fmt_and_decorate_addr(ext_addr));
} else {
- if (bind(s, (struct sockaddr *) &ext_addr_sa, ext_addr_len) < 0) {
- *socket_error = tor_socket_errno(s);
- log_warn(LD_NET,"Error binding network socket to %s: %s",
- fmt_and_decorate_addr(ext_addr),
- tor_socket_strerror(*socket_error));
- tor_close_socket(s);
- return -1;
- }
+ bind_addr = (struct sockaddr *)&bind_addr_ss;
}
}
}
- tor_assert(options);
- if (options->ConstrainedSockets)
- set_constrained_socket_buffers(s, (int)options->ConstrainedSockSize);
-
memset(&addrbuf,0,sizeof(addrbuf));
dest_addr = (struct sockaddr*) &addrbuf;
dest_addr_len = tor_addr_to_sockaddr(addr, port, dest_addr, sizeof(addrbuf));
@@ -1713,36 +1756,51 @@ connection_connect(connection_t *conn, const char *address,
log_debug(LD_NET, "Connecting to %s:%u.",
escaped_safe_str_client(address), port);
- if (connect(s, dest_addr, (socklen_t)dest_addr_len) < 0) {
- int e = tor_socket_errno(s);
- if (!ERRNO_IS_CONN_EINPROGRESS(e)) {
- /* yuck. kill it. */
- *socket_error = e;
- log_info(LD_NET,
- "connect() to %s:%u failed: %s",
- escaped_safe_str_client(address),
- port, tor_socket_strerror(e));
- tor_close_socket(s);
- return -1;
- } else {
- inprogress = 1;
- }
- }
+ return connection_connect_sockaddr(conn, dest_addr, dest_addr_len,
+ bind_addr, bind_addr_len, socket_error);
+}
- /* it succeeded. we're connected. */
- log_fn(inprogress?LOG_DEBUG:LOG_INFO, LD_NET,
- "Connection to %s:%u %s (sock "TOR_SOCKET_T_FORMAT").",
- escaped_safe_str_client(address),
- port, inprogress?"in progress":"established", s);
- conn->s = s;
- if (connection_add_connecting(conn) < 0) {
- /* no space, forget it */
- *socket_error = SOCK_ERRNO(ENOBUFS);
+#ifdef HAVE_SYS_UN_H
+
+/** Take conn, make a nonblocking socket; try to connect to
+ * an AF_UNIX socket at socket_path. If fail, return -1 and if applicable
+ * put your best guess about errno into *<b>socket_error</b>. Else assign s
+ * to conn-\>s: if connected return 1, if EAGAIN return 0.
+ *
+ * On success, add conn to the list of polled connections.
+ */
+int
+connection_connect_unix(connection_t *conn, const char *socket_path,
+ int *socket_error)
+{
+ struct sockaddr_un dest_addr;
+
+ tor_assert(socket_path);
+
+ /* Check that we'll be able to fit it into dest_addr later */
+ if (strlen(socket_path) + 1 > sizeof(dest_addr.sun_path)) {
+ log_warn(LD_NET,
+ "Path %s is too long for an AF_UNIX socket\n",
+ escaped_safe_str_client(socket_path));
+ *socket_error = SOCK_ERRNO(ENAMETOOLONG);
return -1;
}
- return inprogress ? 0 : 1;
+
+ memset(&dest_addr, 0, sizeof(dest_addr));
+ dest_addr.sun_family = AF_UNIX;
+ strlcpy(dest_addr.sun_path, socket_path, sizeof(dest_addr.sun_path));
+
+ log_debug(LD_NET,
+ "Connecting to AF_UNIX socket at %s.",
+ escaped_safe_str_client(socket_path));
+
+ return connection_connect_sockaddr(conn,
+ (struct sockaddr *)&dest_addr, sizeof(dest_addr),
+ NULL, 0, socket_error);
}
+#endif /* defined(HAVE_SYS_UN_H) */
+
/** Convert state number to string representation for logging purposes.
*/
static const char *
@@ -2273,7 +2331,7 @@ retry_listener_ports(smartlist_t *old_conns,
(conn->socket_family == AF_UNIX && ! wanted->is_unix_addr))
continue;
- if (wanted->no_listen)
+ if (wanted->server_cfg.no_listen)
continue; /* We don't want to open a listener for this one */
if (wanted->is_unix_addr) {
@@ -2314,7 +2372,7 @@ retry_listener_ports(smartlist_t *old_conns,
connection_t *conn;
int real_port = port->port == CFG_AUTO_PORT ? 0 : port->port;
tor_assert(real_port <= UINT16_MAX);
- if (port->no_listen)
+ if (port->server_cfg.no_listen)
continue;
if (port->is_unix_addr) {
@@ -2436,7 +2494,6 @@ connection_mark_all_noncontrol_connections(void)
if (conn->marked_for_close)
continue;
switch (conn->type) {
- case CONN_TYPE_CPUWORKER:
case CONN_TYPE_CONTROL_LISTENER:
case CONN_TYPE_CONTROL:
break;
@@ -3724,7 +3781,7 @@ connection_fetch_from_buf_line(connection_t *conn, char *data,
}
}
-/** As fetch_from_buf_http, but fetches from a conncetion's input buffer_t or
+/** As fetch_from_buf_http, but fetches from a connection's input buffer_t or
* its bufferevent as appropriate. */
int
connection_fetch_from_buf_http(connection_t *conn,
@@ -4390,25 +4447,12 @@ alloc_http_authenticator(const char *authenticator)
/* an authenticator in Basic authentication
* is just the string "username:password" */
const size_t authenticator_length = strlen(authenticator);
- /* The base64_encode function needs a minimum buffer length
- * of 66 bytes. */
- const size_t base64_authenticator_length = (authenticator_length/48+1)*66;
+ const size_t base64_authenticator_length =
+ base64_encode_size(authenticator_length, 0) + 1;
char *base64_authenticator = tor_malloc(base64_authenticator_length);
if (base64_encode(base64_authenticator, base64_authenticator_length,
- authenticator, authenticator_length) < 0) {
+ authenticator, authenticator_length, 0) < 0) {
tor_free(base64_authenticator); /* free and set to null */
- } else {
- int i = 0, j = 0;
- ssize_t len = strlen(base64_authenticator);
-
- /* remove all newline occurrences within the string */
- for (i=0; i < len; ++i) {
- if ('\n' != base64_authenticator[i]) {
- base64_authenticator[j] = base64_authenticator[i];
- ++j;
- }
- }
- base64_authenticator[j]='\0';
}
return base64_authenticator;
}
@@ -4530,8 +4574,6 @@ connection_process_inbuf(connection_t *conn, int package_partial)
package_partial);
case CONN_TYPE_DIR:
return connection_dir_process_inbuf(TO_DIR_CONN(conn));
- case CONN_TYPE_CPUWORKER:
- return connection_cpu_process_inbuf(conn);
case CONN_TYPE_CONTROL:
return connection_control_process_inbuf(TO_CONTROL_CONN(conn));
default:
@@ -4591,8 +4633,6 @@ connection_finished_flushing(connection_t *conn)
return connection_edge_finished_flushing(TO_EDGE_CONN(conn));
case CONN_TYPE_DIR:
return connection_dir_finished_flushing(TO_DIR_CONN(conn));
- case CONN_TYPE_CPUWORKER:
- return connection_cpu_finished_flushing(conn);
case CONN_TYPE_CONTROL:
return connection_control_finished_flushing(TO_CONTROL_CONN(conn));
default:
@@ -4648,8 +4688,6 @@ connection_reached_eof(connection_t *conn)
return connection_edge_reached_eof(TO_EDGE_CONN(conn));
case CONN_TYPE_DIR:
return connection_dir_reached_eof(TO_DIR_CONN(conn));
- case CONN_TYPE_CPUWORKER:
- return connection_cpu_reached_eof(conn);
case CONN_TYPE_CONTROL:
return connection_control_reached_eof(TO_CONTROL_CONN(conn));
default:
@@ -4855,10 +4893,6 @@ assert_connection_ok(connection_t *conn, time_t now)
tor_assert(conn->purpose >= DIR_PURPOSE_MIN_);
tor_assert(conn->purpose <= DIR_PURPOSE_MAX_);
break;
- case CONN_TYPE_CPUWORKER:
- tor_assert(conn->state >= CPUWORKER_STATE_MIN_);
- tor_assert(conn->state <= CPUWORKER_STATE_MAX_);
- break;
case CONN_TYPE_CONTROL:
tor_assert(conn->state >= CONTROL_CONN_STATE_MIN_);
tor_assert(conn->state <= CONTROL_CONN_STATE_MAX_);
@@ -4959,9 +4993,7 @@ proxy_type_to_string(int proxy_type)
}
/** Call connection_free_() on every connection in our array, and release all
- * storage held by connection.c. This is used by cpuworkers and dnsworkers
- * when they fork, so they don't keep resources held open (especially
- * sockets).
+ * storage held by connection.c.
*
* Don't do the checks in connection_free(), because they will
* fail.
diff --git a/src/or/connection.h b/src/or/connection.h
index ce6ed284c1..d0a34ece5c 100644
--- a/src/or/connection.h
+++ b/src/or/connection.h
@@ -17,6 +17,7 @@
const char *conn_type_to_string(int type);
const char *conn_state_to_string(int type, int state);
+int conn_listener_type_supports_af_unix(int type);
dir_connection_t *dir_connection_new(int socket_family);
or_connection_t *or_connection_new(int type, int socket_family);
@@ -89,6 +90,13 @@ int connection_connect(connection_t *conn, const char *address,
const tor_addr_t *addr,
uint16_t port, int *socket_error);
+#ifdef HAVE_SYS_UN_H
+
+int connection_connect_unix(connection_t *conn, const char *socket_path,
+ int *socket_error);
+
+#endif /* defined(HAVE_SYS_UN_H) */
+
/** Maximum size of information that we can fit into SOCKS5 username
or password fields. */
#define MAX_SOCKS5_AUTH_FIELD_SIZE 255
diff --git a/src/or/connection_edge.c b/src/or/connection_edge.c
index d8f397bd90..cc6e3d7c58 100644
--- a/src/or/connection_edge.c
+++ b/src/or/connection_edge.c
@@ -67,6 +67,10 @@
#define TRANS_PF
#endif
+#ifdef IP_TRANSPARENT
+#define TRANS_TPROXY
+#endif
+
#define SOCKS4_GRANTED 90
#define SOCKS4_REJECT 91
@@ -98,8 +102,7 @@ connection_mark_unattached_ap_,(entry_connection_t *conn, int endreason,
* but we should fix it someday anyway. */
if ((edge_conn->on_circuit != NULL || edge_conn->edge_has_sent_end) &&
connection_edge_is_rendezvous_stream(edge_conn)) {
- rend_client_note_connection_attempt_ended(
- edge_conn->rend_data->onion_address);
+ rend_client_note_connection_attempt_ended(edge_conn->rend_data);
}
if (base_conn->marked_for_close) {
@@ -908,78 +911,102 @@ connection_ap_rewrite_and_attach_if_allowed(entry_connection_t *conn,
return connection_ap_handshake_rewrite_and_attach(conn, circ, cpath);
}
-/** Connection <b>conn</b> just finished its socks handshake, or the
- * controller asked us to take care of it. If <b>circ</b> is defined,
- * then that's where we'll want to attach it. Otherwise we have to
- * figure it out ourselves.
- *
- * First, parse whether it's a .exit address, remap it, and so on. Then
- * if it's for a general circuit, try to attach it to a circuit (or launch
- * one as needed), else if it's for a rendezvous circuit, fetch a
- * rendezvous descriptor first (or attach/launch a circuit if the
- * rendezvous descriptor is already here and fresh enough).
- *
- * The stream will exit from the hop
- * indicated by <b>cpath</b>, or from the last hop in circ's cpath if
- * <b>cpath</b> is NULL.
+/* Try to perform any map-based rewriting of the target address in
+ * <b>conn</b>, filling in the fields of <b>out</b> as we go, and modifying
+ * conn->socks_request.address as appropriate.
*/
-int
-connection_ap_handshake_rewrite_and_attach(entry_connection_t *conn,
- origin_circuit_t *circ,
- crypt_path_t *cpath)
+STATIC void
+connection_ap_handshake_rewrite(entry_connection_t *conn,
+ rewrite_result_t *out)
{
socks_request_t *socks = conn->socks_request;
- hostname_type_t addresstype;
const or_options_t *options = get_options();
tor_addr_t addr_tmp;
- /* We set this to true if this is an address we should automatically
- * remap to a local address in VirtualAddrNetwork */
- int automap = 0;
- char orig_address[MAX_SOCKS_ADDR_LEN];
- time_t map_expires = TIME_MAX;
- time_t now = time(NULL);
- connection_t *base_conn = ENTRY_TO_CONN(conn);
- addressmap_entry_source_t exit_source = ADDRMAPSRC_NONE;
- tor_strlower(socks->address); /* normalize it */
- strlcpy(orig_address, socks->address, sizeof(orig_address));
+ /* Initialize all the fields of 'out' to reasonable defaults */
+ out->automap = 0;
+ out->exit_source = ADDRMAPSRC_NONE;
+ out->map_expires = TIME_MAX;
+ out->end_reason = 0;
+ out->should_close = 0;
+ out->orig_address[0] = 0;
+
+ /* We convert all incoming addresses to lowercase. */
+ tor_strlower(socks->address);
+ /* Remember the original address. */
+ strlcpy(out->orig_address, socks->address, sizeof(out->orig_address));
log_debug(LD_APP,"Client asked for %s:%d",
safe_str_client(socks->address),
socks->port);
+ /* Check for whether this is a .exit address. By default, those are
+ * disallowed when they're coming straight from the client, but you're
+ * allowed to have them in MapAddress commands and so forth. */
if (!strcmpend(socks->address, ".exit") && !options->AllowDotExit) {
log_warn(LD_APP, "The \".exit\" notation is disabled in Tor due to "
"security risks. Set AllowDotExit in your torrc to enable "
"it (at your own risk).");
control_event_client_status(LOG_WARN, "SOCKS_BAD_HOSTNAME HOSTNAME=%s",
escaped(socks->address));
- connection_mark_unattached_ap(conn, END_STREAM_REASON_TORPROTOCOL);
- return -1;
+ out->end_reason = END_STREAM_REASON_TORPROTOCOL;
+ out->should_close = 1;
+ return;
}
- if (! conn->original_dest_address)
+ /* Remember the original address so we can tell the user about what
+ * they actually said, not just what it turned into. */
+ if (! conn->original_dest_address) {
+ /* Is the 'if' necessary here? XXXX */
conn->original_dest_address = tor_strdup(conn->socks_request->address);
+ }
+ /* First, apply MapAddress and MAPADDRESS mappings. We need to do
+ * these only for non-reverse lookups, since they don't exist for those.
+ * We need to do this before we consider automapping, since we might
+ * e.g. resolve irc.oftc.net into irconionaddress.onion, at which point
+ * we'd need to automap it. */
+ if (socks->command != SOCKS_COMMAND_RESOLVE_PTR) {
+ const unsigned rewrite_flags = AMR_FLAG_USE_MAPADDRESS;
+ if (addressmap_rewrite(socks->address, sizeof(socks->address),
+ rewrite_flags, &out->map_expires, &out->exit_source)) {
+ control_event_stream_status(conn, STREAM_EVENT_REMAP,
+ REMAP_STREAM_SOURCE_CACHE);
+ }
+ }
+
+ /* Now, handle automapping. Automapping happens when we're asked to
+ * resolve a hostname, and AutomapHostsOnResolve is set, and
+ * the hostname has a suffix listed in AutomapHostsSuffixes.
+ */
if (socks->command == SOCKS_COMMAND_RESOLVE &&
tor_addr_parse(&addr_tmp, socks->address)<0 &&
options->AutomapHostsOnResolve) {
- automap = addressmap_address_should_automap(socks->address, options);
- if (automap) {
+ /* Check the suffix... */
+ out->automap = addressmap_address_should_automap(socks->address, options);
+ if (out->automap) {
+ /* If we get here, then we should apply an automapping for this. */
const char *new_addr;
+ /* We return an IPv4 address by default, or an IPv6 address if we
+ * are allowed to do so. */
int addr_type = RESOLVED_TYPE_IPV4;
if (conn->socks_request->socks_version != 4) {
- if (!conn->ipv4_traffic_ok ||
- (conn->ipv6_traffic_ok && conn->prefer_ipv6_traffic) ||
- conn->prefer_ipv6_virtaddr)
+ if (!conn->entry_cfg.ipv4_traffic ||
+ (conn->entry_cfg.ipv6_traffic && conn->entry_cfg.prefer_ipv6) ||
+ conn->entry_cfg.prefer_ipv6_virtaddr)
addr_type = RESOLVED_TYPE_IPV6;
}
+ /* Okay, register the target address as automapped, and find the new
+ * address we're supposed to give as a resolve answer. (Return a cached
+ * value if we've looked up this address before.
+ */
new_addr = addressmap_register_virtual_address(
addr_type, tor_strdup(socks->address));
if (! new_addr) {
log_warn(LD_APP, "Unable to automap address %s",
escaped_safe_str(socks->address));
- connection_mark_unattached_ap(conn, END_STREAM_REASON_INTERNAL);
- return -1;
+ out->end_reason = END_STREAM_REASON_INTERNAL;
+ out->should_close = 1;
+ return;
}
log_info(LD_APP, "Automapping %s to %s",
escaped_safe_str_client(socks->address),
@@ -988,28 +1015,35 @@ connection_ap_handshake_rewrite_and_attach(entry_connection_t *conn,
}
}
+ /* Now handle reverse lookups, if they're in the cache. This doesn't
+ * happen too often, since client-side DNS caching is off by default. */
if (socks->command == SOCKS_COMMAND_RESOLVE_PTR) {
unsigned rewrite_flags = 0;
- if (conn->use_cached_ipv4_answers)
+ if (conn->entry_cfg.use_cached_ipv4_answers)
rewrite_flags |= AMR_FLAG_USE_IPV4_DNS;
- if (conn->use_cached_ipv6_answers)
+ if (conn->entry_cfg.use_cached_ipv6_answers)
rewrite_flags |= AMR_FLAG_USE_IPV6_DNS;
if (addressmap_rewrite_reverse(socks->address, sizeof(socks->address),
- rewrite_flags, &map_expires)) {
+ rewrite_flags, &out->map_expires)) {
char *result = tor_strdup(socks->address);
/* remember _what_ is supposed to have been resolved. */
tor_snprintf(socks->address, sizeof(socks->address), "REVERSE[%s]",
- orig_address);
+ out->orig_address);
connection_ap_handshake_socks_resolved(conn, RESOLVED_TYPE_HOSTNAME,
strlen(result), (uint8_t*)result,
-1,
- map_expires);
- connection_mark_unattached_ap(conn,
- END_STREAM_REASON_DONE |
- END_STREAM_REASON_FLAG_ALREADY_SOCKS_REPLIED);
- return 0;
+ out->map_expires);
+ tor_free(result);
+ out->end_reason = END_STREAM_REASON_DONE |
+ END_STREAM_REASON_FLAG_ALREADY_SOCKS_REPLIED;
+ out->should_close = 1;
+ return;
}
+
+ /* Hang on, did we find an answer saying that this is a reverse lookup for
+ * an internal address? If so, we should reject it if we're condigured to
+ * do so. */
if (options->ClientDNSRejectInternalAddresses) {
/* Don't let people try to do a reverse lookup on 10.0.0.1. */
tor_addr_t addr;
@@ -1019,43 +1053,108 @@ connection_ap_handshake_rewrite_and_attach(entry_connection_t *conn,
if (ok == 1 && tor_addr_is_internal(&addr, 0)) {
connection_ap_handshake_socks_resolved(conn, RESOLVED_TYPE_ERROR,
0, NULL, -1, TIME_MAX);
- connection_mark_unattached_ap(conn,
- END_STREAM_REASON_SOCKSPROTOCOL |
- END_STREAM_REASON_FLAG_ALREADY_SOCKS_REPLIED);
- return -1;
+ out->end_reason = END_STREAM_REASON_SOCKSPROTOCOL |
+ END_STREAM_REASON_FLAG_ALREADY_SOCKS_REPLIED;
+ out->should_close = 1;
+ return;
}
}
- } else if (!automap) {
- /* For address map controls, remap the address. */
- unsigned rewrite_flags = 0;
- if (conn->use_cached_ipv4_answers)
+ }
+
+ /* If we didn't automap it before, then this is still the address
+ * that came straight from the user, mapped according to any
+ * MapAddress/MAPADDRESS commands. Now other mappings, including
+ * previously registered Automap entries, TrackHostExits entries,
+ * and client-side DNS cache entries (not recommended).
+ */
+ if (socks->command != SOCKS_COMMAND_RESOLVE_PTR &&
+ !out->automap) {
+ unsigned rewrite_flags = AMR_FLAG_USE_AUTOMAP | AMR_FLAG_USE_TRACKEXIT;
+ addressmap_entry_source_t exit_source2;
+ if (conn->entry_cfg.use_cached_ipv4_answers)
rewrite_flags |= AMR_FLAG_USE_IPV4_DNS;
- if (conn->use_cached_ipv6_answers)
+ if (conn->entry_cfg.use_cached_ipv6_answers)
rewrite_flags |= AMR_FLAG_USE_IPV6_DNS;
if (addressmap_rewrite(socks->address, sizeof(socks->address),
- rewrite_flags, &map_expires, &exit_source)) {
+ rewrite_flags, &out->map_expires, &exit_source2)) {
control_event_stream_status(conn, STREAM_EVENT_REMAP,
REMAP_STREAM_SOURCE_CACHE);
}
+ if (out->exit_source == ADDRMAPSRC_NONE) {
+ /* If it wasn't a .exit before, maybe it turned into a .exit. Remember
+ * the original source of a .exit. */
+ out->exit_source = exit_source2;
+ }
}
- if (!automap && address_is_in_virtual_range(socks->address)) {
- /* This address was probably handed out by client_dns_get_unmapped_address,
- * but the mapping was discarded for some reason. We *don't* want to send
- * the address through Tor; that's likely to fail, and may leak
- * information.
+ /* Check to see whether we're about to use an address in the virtual
+ * range without actually having gotten it from an Automap. */
+ if (!out->automap && address_is_in_virtual_range(socks->address)) {
+ /* This address was probably handed out by
+ * client_dns_get_unmapped_address, but the mapping was discarded for some
+ * reason. Or the user typed in a virtual address range manually. We
+ * *don't* want to send the address through Tor; that's likely to fail,
+ * and may leak information.
*/
log_warn(LD_APP,"Missing mapping for virtual address '%s'. Refusing.",
safe_str_client(socks->address));
- connection_mark_unattached_ap(conn, END_STREAM_REASON_INTERNAL);
- return -1;
+ out->end_reason = END_STREAM_REASON_INTERNAL;
+ out->should_close = 1;
+ return;
}
+}
+
+/** Connection <b>conn</b> just finished its socks handshake, or the
+ * controller asked us to take care of it. If <b>circ</b> is defined,
+ * then that's where we'll want to attach it. Otherwise we have to
+ * figure it out ourselves.
+ *
+ * First, parse whether it's a .exit address, remap it, and so on. Then
+ * if it's for a general circuit, try to attach it to a circuit (or launch
+ * one as needed), else if it's for a rendezvous circuit, fetch a
+ * rendezvous descriptor first (or attach/launch a circuit if the
+ * rendezvous descriptor is already here and fresh enough).
+ *
+ * The stream will exit from the hop
+ * indicated by <b>cpath</b>, or from the last hop in circ's cpath if
+ * <b>cpath</b> is NULL.
+ */
+int
+connection_ap_handshake_rewrite_and_attach(entry_connection_t *conn,
+ origin_circuit_t *circ,
+ crypt_path_t *cpath)
+{
+ socks_request_t *socks = conn->socks_request;
+ const or_options_t *options = get_options();
+ connection_t *base_conn = ENTRY_TO_CONN(conn);
+ time_t now = time(NULL);
+ rewrite_result_t rr;
+
+ memset(&rr, 0, sizeof(rr));
+ connection_ap_handshake_rewrite(conn,&rr);
+
+ if (rr.should_close) {
+ /* connection_ap_handshake_rewrite told us to close the connection,
+ * either because it sent back an answer, or because it sent back an
+ * error */
+ connection_mark_unattached_ap(conn, rr.end_reason);
+ if (END_STREAM_REASON_DONE == (rr.end_reason & END_STREAM_REASON_MASK))
+ return 0;
+ else
+ return -1;
+ }
+
+ const time_t map_expires = rr.map_expires;
+ const int automap = rr.automap;
+ const addressmap_entry_source_t exit_source = rr.exit_source;
/* Parse the address provided by SOCKS. Modify it in-place if it
* specifies a hidden-service (.onion) or particular exit node (.exit).
*/
- addresstype = parse_extended_hostname(socks->address);
+ const hostname_type_t addresstype = parse_extended_hostname(socks->address);
+ /* Now see whether the hostname is bogus. This could happen because of an
+ * onion hostname whose format we don't recognize. */
if (addresstype == BAD_HOSTNAME) {
control_event_client_status(LOG_WARN, "SOCKS_BAD_HOSTNAME HOSTNAME=%s",
escaped(socks->address));
@@ -1063,16 +1162,21 @@ connection_ap_handshake_rewrite_and_attach(entry_connection_t *conn,
return -1;
}
+ /* If this is a .exit hostname, strip off the .name.exit part, and
+ * see whether we're going to connect there, and otherwise handle it.
+ * (The ".exit" part got stripped off by "parse_extended_hostname").
+ *
+ * We'll set chosen_exit_name and/or close the connection as appropriate.
+ */
if (addresstype == EXIT_HOSTNAME) {
- /* foo.exit -- modify conn->chosen_exit_node to specify the exit
- * node, and conn->address to hold only the address portion. */
- char *s = strrchr(socks->address,'.');
-
- /* If StrictNodes is not set, then .exit overrides ExcludeNodes. */
+ /* If StrictNodes is not set, then .exit overrides ExcludeNodes but
+ * not ExcludeExitNodes. */
routerset_t *excludeset = options->StrictNodes ?
options->ExcludeExitNodesUnion_ : options->ExcludeExitNodes;
- const node_t *node;
+ const node_t *node = NULL;
+ /* If this .exit was added by an AUTOMAP, then it came straight from
+ * a user. Make sure that options->AllowDotExit permits that. */
if (exit_source == ADDRMAPSRC_AUTOMAP && !options->AllowDotExit) {
/* Whoops; this one is stale. It must have gotten added earlier,
* when AllowDotExit was on. */
@@ -1085,6 +1189,8 @@ connection_ap_handshake_rewrite_and_attach(entry_connection_t *conn,
return -1;
}
+ /* Double-check to make sure there are no .exits coming from
+ * impossible/weird sources. */
if (exit_source == ADDRMAPSRC_DNS ||
(exit_source == ADDRMAPSRC_NONE && !options->AllowDotExit)) {
/* It shouldn't be possible to get a .exit address from any of these
@@ -1099,9 +1205,12 @@ connection_ap_handshake_rewrite_and_attach(entry_connection_t *conn,
}
tor_assert(!automap);
+ /* Now, find the character before the .(name) part. */
+ char *s = strrchr(socks->address,'.');
if (s) {
/* The address was of the form "(stuff).(name).exit */
if (s[1] != '\0') {
+ /* Looks like a real .exit one. */
conn->chosen_exit_name = tor_strdup(s+1);
node = node_get_by_nickname(conn->chosen_exit_name, 1);
@@ -1120,7 +1229,8 @@ connection_ap_handshake_rewrite_and_attach(entry_connection_t *conn,
return -1;
}
} else {
- /* It looks like they just asked for "foo.exit". */
+ /* It looks like they just asked for "foo.exit". That's a special
+ * form that means (foo's address).foo.exit. */
conn->chosen_exit_name = tor_strdup(socks->address);
node = node_get_by_nickname(conn->chosen_exit_name, 1);
@@ -1129,6 +1239,7 @@ connection_ap_handshake_rewrite_and_attach(entry_connection_t *conn,
node_get_address_string(node, socks->address, sizeof(socks->address));
}
}
+
/* Now make sure that the chosen exit exists... */
if (!node) {
log_warn(LD_APP,
@@ -1150,8 +1261,12 @@ connection_ap_handshake_rewrite_and_attach(entry_connection_t *conn,
implies no. */
}
+ /* Now, handle everything that isn't a .onion address. */
if (addresstype != ONION_HOSTNAME) {
- /* not a hidden-service request (i.e. normal or .exit) */
+ /* Not a hidden-service request. It's either a hostname or an IP,
+ * possibly with a .exit that we stripped off. */
+
+ /* Check for funny characters in the address. */
if (address_is_invalid_destination(socks->address, 1)) {
control_event_client_status(LOG_WARN, "SOCKS_BAD_HOSTNAME HOSTNAME=%s",
escaped(socks->address));
@@ -1162,6 +1277,9 @@ connection_ap_handshake_rewrite_and_attach(entry_connection_t *conn,
return -1;
}
+#ifdef ENABLE_TOR2WEB_MODE
+ /* If we're running in Tor2webMode, we don't allow anything BUT .onion
+ * addresses. */
if (options->Tor2webMode) {
log_warn(LD_APP, "Refusing to connect to non-hidden-service hostname %s "
"because tor2web mode is enabled.",
@@ -1169,13 +1287,17 @@ connection_ap_handshake_rewrite_and_attach(entry_connection_t *conn,
connection_mark_unattached_ap(conn, END_STREAM_REASON_ENTRYPOLICY);
return -1;
}
+#endif
+ /* See if this is a hostname lookup that we can answer immediately.
+ * (For example, an attempt to look up the IP address for an IP address.)
+ */
if (socks->command == SOCKS_COMMAND_RESOLVE) {
tor_addr_t answer;
/* Reply to resolves immediately if we can. */
if (tor_addr_parse(&answer, socks->address) >= 0) {/* is it an IP? */
/* remember _what_ is supposed to have been resolved. */
- strlcpy(socks->address, orig_address, sizeof(socks->address));
+ strlcpy(socks->address, rr.orig_address, sizeof(socks->address));
connection_ap_handshake_socks_resolved_addr(conn, &answer, -1,
map_expires);
connection_mark_unattached_ap(conn,
@@ -1186,14 +1308,22 @@ connection_ap_handshake_rewrite_and_attach(entry_connection_t *conn,
tor_assert(!automap);
rep_hist_note_used_resolve(now); /* help predict this next time */
} else if (socks->command == SOCKS_COMMAND_CONNECT) {
+ /* Special handling for attempts to connect */
tor_assert(!automap);
+ /* Don't allow connections to port 0. */
if (socks->port == 0) {
log_notice(LD_APP,"Application asked to connect to port 0. Refusing.");
connection_mark_unattached_ap(conn, END_STREAM_REASON_TORPROTOCOL);
return -1;
}
+ /* You can't make connections to internal addresses, by default.
+ * Exceptions are begindir requests (where the address is meaningless,
+ * or cases where you've hand-configured a particular exit, thereby
+ * making the local address meaningful. */
if (options->ClientRejectInternalAddresses &&
!conn->use_begindir && !conn->chosen_exit_name && !circ) {
+ /* If we reach this point then we don't want to allow internal
+ * addresses. Check if we got one. */
tor_addr_t addr;
if (tor_addr_hostname_is_local(socks->address) ||
(tor_addr_parse(&addr, socks->address) >= 0 &&
@@ -1228,39 +1358,58 @@ connection_ap_handshake_rewrite_and_attach(entry_connection_t *conn,
connection_mark_unattached_ap(conn, END_STREAM_REASON_PRIVATE_ADDR);
return -1;
}
- }
+ } /* end "if we should check for internal addresses" */
+ /* Okay. We're still doing a CONNECT, and it wasn't a private
+ * address. Do special handling for literal IP addresses */
{
tor_addr_t addr;
/* XXX Duplicate call to tor_addr_parse. */
if (tor_addr_parse(&addr, socks->address) >= 0) {
+ /* If we reach this point, it's an IPv4 or an IPv6 address. */
sa_family_t family = tor_addr_family(&addr);
- if ((family == AF_INET && ! conn->ipv4_traffic_ok) ||
- (family == AF_INET6 && ! conn->ipv4_traffic_ok)) {
+
+ if ((family == AF_INET && ! conn->entry_cfg.ipv4_traffic) ||
+ (family == AF_INET6 && ! conn->entry_cfg.ipv6_traffic)) {
+ /* You can't do an IPv4 address on a v6-only socks listener,
+ * or vice versa. */
log_warn(LD_NET, "Rejecting SOCKS request for an IP address "
"family that this listener does not support.");
connection_mark_unattached_ap(conn, END_STREAM_REASON_ENTRYPOLICY);
return -1;
} else if (family == AF_INET6 && socks->socks_version == 4) {
+ /* You can't make a socks4 request to an IPv6 address. Socks4
+ * doesn't support that. */
log_warn(LD_NET, "Rejecting SOCKS4 request for an IPv6 address.");
connection_mark_unattached_ap(conn, END_STREAM_REASON_ENTRYPOLICY);
return -1;
- } else if (socks->socks_version == 4 && !conn->ipv4_traffic_ok) {
+ } else if (socks->socks_version == 4 &&
+ !conn->entry_cfg.ipv4_traffic) {
+ /* You can't do any kind of Socks4 request when IPv4 is forbidden.
+ *
+ * XXX raise this check outside the enclosing block? */
log_warn(LD_NET, "Rejecting SOCKS4 request on a listener with "
"no IPv4 traffic supported.");
connection_mark_unattached_ap(conn, END_STREAM_REASON_ENTRYPOLICY);
return -1;
} else if (family == AF_INET6) {
- conn->ipv4_traffic_ok = 0;
+ /* Tell the exit: we won't accept any ipv4 connection to an IPv6
+ * address. */
+ conn->entry_cfg.ipv4_traffic = 0;
} else if (family == AF_INET) {
- conn->ipv6_traffic_ok = 0;
+ /* Tell the exit: we won't accept any ipv6 connection to an IPv4
+ * address. */
+ conn->entry_cfg.ipv6_traffic = 0;
}
}
}
if (socks->socks_version == 4)
- conn->ipv6_traffic_ok = 0;
+ conn->entry_cfg.ipv6_traffic = 0;
+ /* Still handling CONNECT. Now, check for exit enclaves. (Which we
+ * don't do on BEGINDIR, or there is a chosen exit.)
+ */
if (!conn->use_begindir && !conn->chosen_exit_name && !circ) {
/* see if we can find a suitable enclave exit */
const node_t *r =
@@ -1277,11 +1426,13 @@ connection_ap_handshake_rewrite_and_attach(entry_connection_t *conn,
}
}
- /* warn or reject if it's using a dangerous port */
+ /* Still handling CONNECT: warn or reject if it's using a dangerous
+ * port. */
if (!conn->use_begindir && !conn->chosen_exit_name && !circ)
if (consider_plaintext_ports(conn, socks->port) < 0)
return -1;
+ /* Remember the port so that we do predicted requests there. */
if (!conn->use_begindir) {
/* help predict this next time */
rep_hist_note_used_port(now, socks->port);
@@ -1290,25 +1441,41 @@ connection_ap_handshake_rewrite_and_attach(entry_connection_t *conn,
rep_hist_note_used_resolve(now); /* help predict this next time */
/* no extra processing needed */
} else {
+ /* We should only be doing CONNECT or RESOLVE! */
tor_fragile_assert();
}
+
+ /* Okay. At this point we've set chosen_exit_name if needed, rewritten the
+ * address, and decided not to reject it for any number of reasons. Now
+ * mark the connection as waiting for a circuit, and try to attach it!
+ */
base_conn->state = AP_CONN_STATE_CIRCUIT_WAIT;
- if ((circ && connection_ap_handshake_attach_chosen_circuit(
- conn, circ, cpath) < 0) ||
- (!circ &&
- connection_ap_handshake_attach_circuit(conn) < 0)) {
+
+ /* If we were given a circuit to attach to, try to attach. Otherwise,
+ * try to find a good one and attach to that. */
+ int rv;
+ if (circ)
+ rv = connection_ap_handshake_attach_chosen_circuit(conn, circ, cpath);
+ else
+ rv = connection_ap_handshake_attach_circuit(conn);
+
+ /* If the above function returned 0 then we're waiting for a circuit.
+ * if it returned 1, we're attached. Both are okay. But if it returned
+ * -1, there was an error, so make sure the connection is marked, and
+ * return -1. */
+ if (rv < 0) {
if (!base_conn->marked_for_close)
connection_mark_unattached_ap(conn, END_STREAM_REASON_CANT_ATTACH);
return -1;
}
+
return 0;
} else {
- /* it's a hidden-service request */
- rend_cache_entry_t *entry;
- int r;
- rend_service_authorization_t *client_auth;
- rend_data_t *rend_data;
+ /* If we get here, it's a request for a .onion address! */
tor_assert(!automap);
+
+ /* Check whether it's RESOLVE or RESOLVE_PTR. We don't handle those
+ * for hidden service addresses. */
if (SOCKS_COMMAND_IS_RESOLVE(socks->command)) {
/* if it's a resolve request, fail it right now, rather than
* building all the circuits and then realizing it won't work. */
@@ -1322,6 +1489,8 @@ connection_ap_handshake_rewrite_and_attach(entry_connection_t *conn,
return -1;
}
+ /* If we were passed a circuit, then we need to fail. .onion addresses
+ * only work when we launch our own circuits for now. */
if (circ) {
log_warn(LD_CONTROL, "Attachstream to a circuit is not "
"supported for .onion addresses currently. Failing.");
@@ -1329,51 +1498,80 @@ connection_ap_handshake_rewrite_and_attach(entry_connection_t *conn,
return -1;
}
- ENTRY_TO_EDGE_CONN(conn)->rend_data = rend_data =
- tor_malloc_zero(sizeof(rend_data_t));
- strlcpy(rend_data->onion_address, socks->address,
- sizeof(rend_data->onion_address));
+ /* Look up if we have client authorization configured for this hidden
+ * service. If we do, associate it with the rend_data. */
+ rend_service_authorization_t *client_auth =
+ rend_client_lookup_service_authorization(socks->address);
+
+ const char *cookie = NULL;
+ rend_auth_type_t auth_type = REND_NO_AUTH;
+ if (client_auth) {
+ log_info(LD_REND, "Using previously configured client authorization "
+ "for hidden service request.");
+ auth_type = client_auth->auth_type;
+ cookie = client_auth->descriptor_cookie;
+ }
+
+ /* Fill in the rend_data field so we can start doing a connection to
+ * a hidden service. */
+ rend_data_t *rend_data = ENTRY_TO_EDGE_CONN(conn)->rend_data =
+ rend_data_client_create(socks->address, NULL, cookie, auth_type);
+ if (rend_data == NULL) {
+ return -1;
+ }
log_info(LD_REND,"Got a hidden service request for ID '%s'",
safe_str_client(rend_data->onion_address));
- /* see if we already have it cached */
- r = rend_cache_lookup_entry(rend_data->onion_address, -1, &entry);
- if (r<0) {
- log_warn(LD_BUG,"Invalid service name '%s'",
- safe_str_client(rend_data->onion_address));
- connection_mark_unattached_ap(conn, END_STREAM_REASON_TORPROTOCOL);
- return -1;
+
+ /* Lookup the given onion address. If invalid, stop right now else we
+ * might have it in the cache or not, it will be tested later on. */
+ unsigned int refetch_desc = 0;
+ rend_cache_entry_t *entry = NULL;
+ const int rend_cache_lookup_result =
+ rend_cache_lookup_entry(rend_data->onion_address, -1, &entry);
+ if (rend_cache_lookup_result < 0) {
+ switch (-rend_cache_lookup_result) {
+ case EINVAL:
+ /* We should already have rejected this address! */
+ log_warn(LD_BUG,"Invalid service name '%s'",
+ safe_str_client(rend_data->onion_address));
+ connection_mark_unattached_ap(conn, END_STREAM_REASON_TORPROTOCOL);
+ return -1;
+ case ENOENT:
+ refetch_desc = 1;
+ break;
+ default:
+ log_warn(LD_BUG, "Unknown cache lookup error %d",
+ rend_cache_lookup_result);
+ return -1;
+ }
}
/* Help predict this next time. We're not sure if it will need
* a stable circuit yet, but we know we'll need *something*. */
rep_hist_note_used_internal(now, 0, 1);
- /* Look up if we have client authorization for it. */
- client_auth = rend_client_lookup_service_authorization(
- rend_data->onion_address);
- if (client_auth) {
- log_info(LD_REND, "Using previously configured client authorization "
- "for hidden service request.");
- memcpy(rend_data->descriptor_cookie,
- client_auth->descriptor_cookie, REND_DESC_COOKIE_LEN);
- rend_data->auth_type = client_auth->auth_type;
- }
- if (r==0) {
+ /* Now we have a descriptor but is it usable or not? If not, refetch.
+ * Also, a fetch could have been requested if the onion address was not
+ * found in the cache previously. */
+ if (refetch_desc || !rend_client_any_intro_points_usable(entry)) {
base_conn->state = AP_CONN_STATE_RENDDESC_WAIT;
log_info(LD_REND, "Unknown descriptor %s. Fetching.",
- safe_str_client(rend_data->onion_address));
+ safe_str_client(rend_data->onion_address));
rend_client_refetch_v2_renddesc(rend_data);
- } else { /* r > 0 */
- base_conn->state = AP_CONN_STATE_CIRCUIT_WAIT;
- log_info(LD_REND, "Descriptor is here. Great.");
- if (connection_ap_handshake_attach_circuit(conn) < 0) {
- if (!base_conn->marked_for_close)
- connection_mark_unattached_ap(conn, END_STREAM_REASON_CANT_ATTACH);
- return -1;
- }
+ return 0;
+ }
+
+ /* We have the descriptor so launch a connection to the HS. */
+ base_conn->state = AP_CONN_STATE_CIRCUIT_WAIT;
+ log_info(LD_REND, "Descriptor is here. Great.");
+ if (connection_ap_handshake_attach_circuit(conn) < 0) {
+ if (!base_conn->marked_for_close)
+ connection_mark_unattached_ap(conn, END_STREAM_REASON_CANT_ATTACH);
+ return -1;
}
return 0;
}
+
return 0; /* unreached but keeps the compiler happy */
}
@@ -1405,7 +1603,7 @@ get_pf_socket(void)
}
#endif
-#if defined(TRANS_NETFILTER) || defined(TRANS_PF)
+#if defined(TRANS_NETFILTER) || defined(TRANS_PF) || defined(TRANS_TPROXY)
/** Try fill in the address of <b>req</b> from the socket configured
* with <b>conn</b>. */
static int
@@ -1414,9 +1612,21 @@ destination_from_socket(entry_connection_t *conn, socks_request_t *req)
struct sockaddr_storage orig_dst;
socklen_t orig_dst_len = sizeof(orig_dst);
tor_addr_t addr;
- int rv;
+
+#ifdef TRANS_TRPOXY
+ if (options->TransProxyType_parsed == TPT_TPROXY) {
+ if (getsockname(ENTRY_TO_CONN(conn)->s, (struct sockaddr*)&orig_dst,
+ &orig_dst_len) < 0) {
+ int e = tor_socket_errno(ENTRY_TO_CONN(conn)->s);
+ log_warn(LD_NET, "getsockname() failed: %s", tor_socket_strerror(e));
+ return -1;
+ }
+ goto done;
+ }
+#endif
#ifdef TRANS_NETFILTER
+ int rv = -1;
switch (ENTRY_TO_CONN(conn)->socket_family) {
#ifdef TRANS_NETFILTER_IPV4
case AF_INET:
@@ -1441,6 +1651,7 @@ destination_from_socket(entry_connection_t *conn, socks_request_t *req)
log_warn(LD_NET, "getsockopt() failed: %s", tor_socket_strerror(e));
return -1;
}
+ goto done;
#elif defined(TRANS_PF)
if (getsockname(ENTRY_TO_CONN(conn)->s, (struct sockaddr*)&orig_dst,
&orig_dst_len) < 0) {
@@ -1448,6 +1659,7 @@ destination_from_socket(entry_connection_t *conn, socks_request_t *req)
log_warn(LD_NET, "getsockname() failed: %s", tor_socket_strerror(e));
return -1;
}
+ goto done;
#else
(void)conn;
(void)req;
@@ -1455,6 +1667,7 @@ destination_from_socket(entry_connection_t *conn, socks_request_t *req)
return -1;
#endif
+ done:
tor_addr_from_sockaddr(&addr, (struct sockaddr*)&orig_dst, &req->port);
tor_addr_to_str(req->address, &addr, sizeof(req->address), 1);
@@ -1564,7 +1777,8 @@ connection_ap_get_original_destination(entry_connection_t *conn,
if (options->TransProxyType_parsed == TPT_PF_DIVERT)
return destination_from_socket(conn, req);
- if (options->TransProxyType_parsed == TPT_DEFAULT)
+ if (options->TransProxyType_parsed == TPT_DEFAULT ||
+ options->TransProxyType_parsed == TPT_IPFW)
return destination_from_pf(conn, req);
(void)conn;
@@ -1826,19 +2040,19 @@ connection_ap_get_begincell_flags(entry_connection_t *ap_conn)
return 0;
/* If only IPv4 is supported, no flags */
- if (ap_conn->ipv4_traffic_ok && !ap_conn->ipv6_traffic_ok)
+ if (ap_conn->entry_cfg.ipv4_traffic && !ap_conn->entry_cfg.ipv6_traffic)
return 0;
if (! cpath_layer ||
! cpath_layer->extend_info)
return 0;
- if (!ap_conn->ipv4_traffic_ok)
+ if (!ap_conn->entry_cfg.ipv4_traffic)
flags |= BEGIN_FLAG_IPV4_NOT_OK;
exitnode = node_get_by_id(cpath_layer->extend_info->identity_digest);
- if (ap_conn->ipv6_traffic_ok && exitnode) {
+ if (ap_conn->entry_cfg.ipv6_traffic && exitnode) {
tor_addr_t a;
tor_addr_make_null(&a, AF_INET6);
if (compare_tor_addr_to_node_policy(&a, ap_conn->socks_request->port,
@@ -1853,7 +2067,7 @@ connection_ap_get_begincell_flags(entry_connection_t *ap_conn)
if (flags == BEGIN_FLAG_IPV6_OK) {
/* When IPv4 and IPv6 are both allowed, consider whether to say we
* prefer IPv6. Otherwise there's no point in declaring a preference */
- if (ap_conn->prefer_ipv6_traffic)
+ if (ap_conn->entry_cfg.prefer_ipv6)
flags |= BEGIN_FLAG_IPV6_PREFERRED;
}
@@ -2090,8 +2304,8 @@ connection_ap_make_link(connection_t *partner,
/* Populate isolation fields. */
conn->socks_request->listener_type = CONN_TYPE_DIR_LISTENER;
conn->original_dest_address = tor_strdup(address);
- conn->session_group = session_group;
- conn->isolation_flags = isolation_flags;
+ conn->entry_cfg.session_group = session_group;
+ conn->entry_cfg.isolation_flags = isolation_flags;
base_conn->address = tor_strdup("(Tor_internal)");
tor_addr_make_unspec(&base_conn->addr);
@@ -2610,7 +2824,9 @@ connection_exit_begin_conn(cell_t *cell, circuit_t *circ)
n_stream->rend_data = rend_data_dup(origin_circ->rend_data);
tor_assert(connection_edge_is_rendezvous_stream(n_stream));
assert_circuit_ok(circ);
- if (rend_service_set_connection_addr_port(n_stream, origin_circ) < 0) {
+
+ const int r = rend_service_set_connection_addr_port(n_stream, origin_circ);
+ if (r < 0) {
log_info(LD_REND,"Didn't find rendezvous service (port %d)",
n_stream->base_.port);
/* Send back reason DONE because we want to make hidden service port
@@ -2629,7 +2845,10 @@ connection_exit_begin_conn(cell_t *cell, circuit_t *circ)
* scanning the hidden service ports. Note that this mitigates port
* scanning by adding more work on the attacker side to successfully
* scan but does not fully solve it. */
- return END_CIRC_AT_ORIGIN;
+ if (r < -1)
+ return END_CIRC_AT_ORIGIN;
+ else
+ return 0;
}
assert_circuit_ok(circ);
log_debug(LD_REND,"Finished assigning addr/port");
@@ -2757,7 +2976,7 @@ connection_exit_connect(edge_connection_t *edge_conn)
const tor_addr_t *addr;
uint16_t port;
connection_t *conn = TO_CONN(edge_conn);
- int socket_error = 0;
+ int socket_error = 0, result;
if ( (!connection_edge_is_rendezvous_stream(edge_conn) &&
router_compare_to_my_exit_policy(&edge_conn->base_.addr,
@@ -2772,14 +2991,36 @@ connection_exit_connect(edge_connection_t *edge_conn)
return;
}
- addr = &conn->addr;
- port = conn->port;
+#ifdef HAVE_SYS_UN_H
+ if (conn->socket_family != AF_UNIX) {
+#else
+ {
+#endif /* defined(HAVE_SYS_UN_H) */
+ addr = &conn->addr;
+ port = conn->port;
+
+ if (tor_addr_family(addr) == AF_INET6)
+ conn->socket_family = AF_INET6;
+
+ log_debug(LD_EXIT, "about to try connecting");
+ result = connection_connect(conn, conn->address,
+ addr, port, &socket_error);
+#ifdef HAVE_SYS_UN_H
+ } else {
+ /*
+ * In the AF_UNIX case, we expect to have already had conn->port = 1,
+ * tor_addr_make_unspec(conn->addr) (cf. the way we mark in the incoming
+ * case in connection_handle_listener_read()), and conn->address should
+ * have the socket path to connect to.
+ */
+ tor_assert(conn->address && strlen(conn->address) > 0);
- if (tor_addr_family(addr) == AF_INET6)
- conn->socket_family = AF_INET6;
+ log_debug(LD_EXIT, "about to try connecting");
+ result = connection_connect_unix(conn, conn->address, &socket_error);
+#endif /* defined(HAVE_SYS_UN_H) */
+ }
- log_debug(LD_EXIT,"about to try connecting");
- switch (connection_connect(conn, conn->address, addr, port, &socket_error)) {
+ switch (result) {
case -1: {
int reason = errno_to_stream_end_reason(socket_error);
connection_edge_end(edge_conn, reason);
@@ -2947,10 +3188,10 @@ connection_ap_can_use_exit(const entry_connection_t *conn, const node_t *exit)
addr_policy_result_t r;
if (0 == tor_addr_parse(&addr, conn->socks_request->address)) {
addrp = &addr;
- } else if (!conn->ipv4_traffic_ok && conn->ipv6_traffic_ok) {
+ } else if (!conn->entry_cfg.ipv4_traffic && conn->entry_cfg.ipv6_traffic) {
tor_addr_make_null(&addr, AF_INET6);
addrp = &addr;
- } else if (conn->ipv4_traffic_ok && !conn->ipv6_traffic_ok) {
+ } else if (conn->entry_cfg.ipv4_traffic && !conn->entry_cfg.ipv6_traffic) {
tor_addr_make_null(&addr, AF_INET);
addrp = &addr;
}
@@ -3056,7 +3297,7 @@ int
connection_edge_compatible_with_circuit(const entry_connection_t *conn,
const origin_circuit_t *circ)
{
- const uint8_t iso = conn->isolation_flags;
+ const uint8_t iso = conn->entry_cfg.isolation_flags;
const socks_request_t *sr = conn->socks_request;
/* If circ has never been used for an isolated connection, we can
@@ -3105,7 +3346,8 @@ connection_edge_compatible_with_circuit(const entry_connection_t *conn,
if ((iso & ISO_CLIENTADDR) &&
!tor_addr_eq(&ENTRY_TO_CONN(conn)->addr, &circ->client_addr))
return 0;
- if ((iso & ISO_SESSIONGRP) && conn->session_group != circ->session_group)
+ if ((iso & ISO_SESSIONGRP) &&
+ conn->entry_cfg.session_group != circ->session_group)
return 0;
if ((iso & ISO_NYM_EPOCH) && conn->nym_epoch != circ->nym_epoch)
return 0;
@@ -3144,7 +3386,7 @@ connection_edge_update_circuit_isolation(const entry_connection_t *conn,
circ->client_proto_type = conn->socks_request->listener_type;
circ->client_proto_socksver = conn->socks_request->socks_version;
tor_addr_copy(&circ->client_addr, &ENTRY_TO_CONN(conn)->addr);
- circ->session_group = conn->session_group;
+ circ->session_group = conn->entry_cfg.session_group;
circ->nym_epoch = conn->nym_epoch;
circ->socks_username = sr->username ?
tor_memdup(sr->username, sr->usernamelen) : NULL;
@@ -3171,7 +3413,7 @@ connection_edge_update_circuit_isolation(const entry_connection_t *conn,
mixed |= ISO_CLIENTPROTO;
if (!tor_addr_eq(&ENTRY_TO_CONN(conn)->addr, &circ->client_addr))
mixed |= ISO_CLIENTADDR;
- if (conn->session_group != circ->session_group)
+ if (conn->entry_cfg.session_group != circ->session_group)
mixed |= ISO_SESSIONGRP;
if (conn->nym_epoch != circ->nym_epoch)
mixed |= ISO_NYM_EPOCH;
@@ -3179,7 +3421,7 @@ connection_edge_update_circuit_isolation(const entry_connection_t *conn,
if (dry_run)
return mixed;
- if ((mixed & conn->isolation_flags) != 0) {
+ if ((mixed & conn->entry_cfg.isolation_flags) != 0) {
log_warn(LD_BUG, "Updating a circuit with seemingly incompatible "
"isolation flags.");
}
diff --git a/src/or/connection_edge.h b/src/or/connection_edge.h
index e6adad91d8..7c0b9c0767 100644
--- a/src/or/connection_edge.h
+++ b/src/or/connection_edge.h
@@ -143,6 +143,30 @@ STATIC int begin_cell_parse(const cell_t *cell, begin_cell_t *bcell,
STATIC int connected_cell_format_payload(uint8_t *payload_out,
const tor_addr_t *addr,
uint32_t ttl);
+
+typedef struct {
+ /** Original address, after we lowercased it but before we started
+ * mapping it.
+ */
+ char orig_address[MAX_SOCKS_ADDR_LEN];
+ /** True iff the address has been automatically remapped to a local
+ * address in VirtualAddrNetwork. (Only set true when we do a resolve
+ * and get a virtual address; not when we connect to the address.) */
+ int automap;
+ /** If this connection has a .exit address, who put it there? */
+ addressmap_entry_source_t exit_source;
+ /** If we've rewritten the address, when does this map expire? */
+ time_t map_expires;
+ /** If we should close the connection, this is the end_reason to pass
+ * to connection_mark_unattached_ap */
+ int end_reason;
+ /** True iff we should close the connection, either because of error or
+ * because of successful early RESOLVED reply. */
+ int should_close;
+} rewrite_result_t;
+
+STATIC void connection_ap_handshake_rewrite(entry_connection_t *conn,
+ rewrite_result_t *out);
#endif
#endif
diff --git a/src/or/connection_or.c b/src/or/connection_or.c
index 85462d899d..e0dff1c915 100644
--- a/src/or/connection_or.c
+++ b/src/or/connection_or.c
@@ -1819,6 +1819,7 @@ connection_tls_finish_handshake(or_connection_t *conn)
conn->base_.port, digest_rcvd, 0);
}
tor_tls_block_renegotiation(conn->tls);
+ rep_hist_note_negotiated_link_proto(1, started_here);
return connection_or_set_state_open(conn);
} else {
connection_or_change_state(conn, OR_CONN_STATE_OR_HANDSHAKING_V2);
diff --git a/src/or/control.c b/src/or/control.c
index 9ff71c9541..780dea58e0 100644
--- a/src/or/control.c
+++ b/src/or/control.c
@@ -37,6 +37,9 @@
#include "nodelist.h"
#include "policies.h"
#include "reasons.h"
+#include "rendclient.h"
+#include "rendcommon.h"
+#include "rendservice.h"
#include "rephist.h"
#include "router.h"
#include "routerlist.h"
@@ -72,7 +75,7 @@ static int disable_log_messages = 0;
/** Macro: true if any control connection is interested in events of type
* <b>e</b>. */
#define EVENT_IS_INTERESTING(e) \
- (!! (global_event_mask & (((uint64_t)1)<<(e))))
+ (!! (global_event_mask & EVENT_MASK_(e)))
/** If we're using cookie-type authentication, how long should our cookies be?
*/
@@ -92,6 +95,11 @@ static uint8_t *authentication_cookie = NULL;
"Tor safe cookie authentication controller-to-server hash"
#define SAFECOOKIE_SERVER_NONCE_LEN DIGEST256_LEN
+/** The list of onion services that have been added via ADD_ONION that do not
+ * belong to any particular control connection.
+ */
+static smartlist_t *detached_onion_services = NULL;
+
/** A sufficiently large size to record the last bootstrap phase string. */
#define BOOTSTRAP_MSG_LEN 1024
@@ -157,6 +165,14 @@ static int handle_control_resolve(control_connection_t *conn, uint32_t len,
static int handle_control_usefeature(control_connection_t *conn,
uint32_t len,
const char *body);
+static int handle_control_hsfetch(control_connection_t *conn, uint32_t len,
+ const char *body);
+static int handle_control_hspost(control_connection_t *conn, uint32_t len,
+ const char *body);
+static int handle_control_add_onion(control_connection_t *conn, uint32_t len,
+ const char *body);
+static int handle_control_del_onion(control_connection_t *conn, uint32_t len,
+ const char *body);
static int write_stream_target_to_buf(entry_connection_t *conn, char *buf,
size_t len);
static void orconn_target_get_name(char *buf, size_t len,
@@ -941,6 +957,7 @@ static const struct control_event_t control_event_table[] = {
{ EVENT_CIRC_BANDWIDTH_USED, "CIRC_BW" },
{ EVENT_TRANSPORT_LAUNCHED, "TRANSPORT_LAUNCHED" },
{ EVENT_HS_DESC, "HS_DESC" },
+ { EVENT_HS_DESC_CONTENT, "HS_DESC_CONTENT" },
{ 0, NULL },
};
@@ -1441,9 +1458,13 @@ getinfo_helper_misc(control_connection_t *conn, const char *question,
} else if (!strcmp(question, "bw-event-cache")) {
*answer = get_bw_samples();
} else if (!strcmp(question, "config-file")) {
- *answer = tor_strdup(get_torrc_fname(0));
+ const char *a = get_torrc_fname(0);
+ if (a)
+ *answer = tor_strdup(a);
} else if (!strcmp(question, "config-defaults-file")) {
- *answer = tor_strdup(get_torrc_fname(1));
+ const char *a = get_torrc_fname(1);
+ if (a)
+ *answer = tor_strdup(a);
} else if (!strcmp(question, "config-text")) {
*answer = options_dump(get_options(), OPTIONS_DUMP_MINIMAL);
} else if (!strcmp(question, "info/names")) {
@@ -1709,6 +1730,22 @@ getinfo_helper_dir(control_connection_t *control_conn,
*answer = smartlist_join_strings(sl, "", 0, NULL);
SMARTLIST_FOREACH(sl, char *, c, tor_free(c));
smartlist_free(sl);
+ } else if (!strcmpstart(question, "hs/client/desc/id/")) {
+ rend_cache_entry_t *e = NULL;
+
+ question += strlen("hs/client/desc/id/");
+ if (strlen(question) != REND_SERVICE_ID_LEN_BASE32) {
+ *errmsg = "Invalid address";
+ return -1;
+ }
+
+ if (!rend_cache_lookup_entry(question, -1, &e)) {
+ /* Descriptor found in cache */
+ *answer = tor_strdup(e->desc);
+ } else {
+ *errmsg = "Not found in cache";
+ return -1;
+ }
} else if (!strcmpstart(question, "md/id/")) {
const node_t *node = node_get_by_hex_id(question+strlen("md/id/"));
const microdesc_t *md = NULL;
@@ -1878,6 +1915,22 @@ circuit_describe_status_for_controller(origin_circuit_t *circ)
smartlist_add_asprintf(descparts, "TIME_CREATED=%s", tbuf);
}
+ // Show username and/or password if available.
+ if (circ->socks_username_len > 0) {
+ char* socks_username_escaped = esc_for_log_len(circ->socks_username,
+ (size_t) circ->socks_username_len);
+ smartlist_add_asprintf(descparts, "SOCKS_USERNAME=%s",
+ socks_username_escaped);
+ tor_free(socks_username_escaped);
+ }
+ if (circ->socks_password_len > 0) {
+ char* socks_password_escaped = esc_for_log_len(circ->socks_password,
+ (size_t) circ->socks_password_len);
+ smartlist_add_asprintf(descparts, "SOCKS_PASSWORD=%s",
+ socks_password_escaped);
+ tor_free(socks_password_escaped);
+ }
+
rv = smartlist_join_strings(descparts, " ", 0, NULL);
SMARTLIST_FOREACH(descparts, char *, cp, tor_free(cp));
@@ -2080,6 +2133,46 @@ getinfo_helper_events(control_connection_t *control_conn,
return -1;
}
*answer = bridge_stats;
+ } else if (!strcmp(question, "status/fresh-relay-descs")) {
+ if (!server_mode(get_options())) {
+ *errmsg = "Only relays have descriptors";
+ return -1;
+ }
+ routerinfo_t *r;
+ extrainfo_t *e;
+ if (router_build_fresh_descriptor(&r, &e) < 0) {
+ *errmsg = "Error generating descriptor";
+ return -1;
+ }
+ size_t size = r->cache_info.signed_descriptor_len + 1;
+ if (e) {
+ size += e->cache_info.signed_descriptor_len + 1;
+ }
+ tor_assert(r->cache_info.signed_descriptor_len);
+ char *descs = tor_malloc(size);
+ char *cp = descs;
+ memcpy(cp, signed_descriptor_get_body(&r->cache_info),
+ r->cache_info.signed_descriptor_len);
+ cp += r->cache_info.signed_descriptor_len - 1;
+ if (e) {
+ if (cp[0] == '\0') {
+ cp[0] = '\n';
+ } else if (cp[0] != '\n') {
+ cp[1] = '\n';
+ cp++;
+ }
+ memcpy(cp, signed_descriptor_get_body(&e->cache_info),
+ e->cache_info.signed_descriptor_len);
+ cp += e->cache_info.signed_descriptor_len - 1;
+ }
+ if (cp[0] == '\n') {
+ cp[0] = '\0';
+ } else if (cp[0] != '\0') {
+ cp[1] = '\0';
+ }
+ *answer = descs;
+ routerinfo_free(r);
+ extrainfo_free(e);
} else {
return 0;
}
@@ -2087,6 +2180,31 @@ getinfo_helper_events(control_connection_t *control_conn,
return 0;
}
+/** Implementation helper for GETINFO: knows how to enumerate hidden services
+ * created via the control port. */
+static int
+getinfo_helper_onions(control_connection_t *control_conn,
+ const char *question, char **answer,
+ const char **errmsg)
+{
+ smartlist_t *onion_list = NULL;
+
+ if (!strcmp(question, "onions/current")) {
+ onion_list = control_conn->ephemeral_onion_services;
+ } else if (!strcmp(question, "onions/detached")) {
+ onion_list = detached_onion_services;
+ } else {
+ return 0;
+ }
+ if (!onion_list || smartlist_len(onion_list) == 0) {
+ *errmsg = "No onion services of the specified type.";
+ return -1;
+ }
+ *answer = smartlist_join_strings(onion_list, "\r\n", 0, NULL);
+
+ return 0;
+}
+
/** Callback function for GETINFO: on a given control connection, try to
* answer the question <b>q</b> and store the newly-allocated answer in
* *<b>a</b>. If an internal error occurs, return -1 and optionally set
@@ -2156,6 +2274,8 @@ static const getinfo_item_t getinfo_items[] = {
PREFIX("md/id/", dir, "Microdescriptors by ID"),
PREFIX("md/name/", dir, "Microdescriptors by name"),
PREFIX("extra-info/digest/", dir, "Extra-info documents by digest."),
+ PREFIX("hs/client/desc/id", dir,
+ "Hidden Service descriptor in client's cache by onion."),
PREFIX("net/listeners/", listeners, "Bound addresses by type"),
ITEM("ns/all", networkstatus,
"Brief summary of router status (v2 directory format)"),
@@ -2165,6 +2285,8 @@ static const getinfo_item_t getinfo_items[] = {
"Brief summary of router status by nickname (v2 directory format)."),
PREFIX("ns/purpose/", networkstatus,
"Brief summary of router status by purpose (v2 directory format)."),
+ PREFIX("consensus/", networkstatus,
+ "Information about and from the ns consensus."),
ITEM("network-status", dir,
"Brief summary of router status (v1 directory format)"),
ITEM("circuit-status", events, "List of current circuits originating here."),
@@ -2188,6 +2310,8 @@ static const getinfo_item_t getinfo_items[] = {
"The last bootstrap phase status event that Tor sent."),
DOC("status/clients-seen",
"Breakdown of client countries seen by a bridge."),
+ DOC("status/fresh-relay-descs",
+ "A fresh relay/ei descriptor pair for Tor's current state. Not stored."),
DOC("status/version/recommended", "List of currently recommended versions."),
DOC("status/version/current", "Status of the current version."),
DOC("status/version/num-versioning", "Number of versioning authorities."),
@@ -2217,6 +2341,10 @@ static const getinfo_item_t getinfo_items[] = {
ITEM("exit-policy/ipv4", policies, "IPv4 parts of exit policy"),
ITEM("exit-policy/ipv6", policies, "IPv6 parts of exit policy"),
PREFIX("ip-to-country/", geoip, "Perform a GEOIP lookup"),
+ ITEM("onions/current", onions,
+ "Onion services owned by the current control connection."),
+ ITEM("onions/detached", onions,
+ "Onion services detached from the control connection."),
{ NULL, NULL, NULL, 0 }
};
@@ -2711,12 +2839,14 @@ handle_control_postdescriptor(control_connection_t *conn, uint32_t len,
uint8_t purpose = ROUTER_PURPOSE_GENERAL;
int cache = 0; /* eventually, we may switch this to 1 */
- char *cp = memchr(body, '\n', len);
+ const char *cp = memchr(body, '\n', len);
smartlist_t *args = smartlist_new();
tor_assert(cp);
- *cp++ = '\0';
+ ++cp;
- smartlist_split_string(args, body, " ",
+ char *cmdline = tor_memdup_nulterm(body, cp-body);
+
+ smartlist_split_string(args, cmdline, " ",
SPLIT_SKIP_SPACE|SPLIT_IGNORE_BLANK, 0);
SMARTLIST_FOREACH_BEGIN(args, char *, option) {
if (!strcasecmpstart(option, "purpose=")) {
@@ -2765,6 +2895,7 @@ handle_control_postdescriptor(control_connection_t *conn, uint32_t len,
done:
SMARTLIST_FOREACH(args, char *, arg, tor_free(arg));
smartlist_free(args);
+ tor_free(cmdline);
return 0;
}
@@ -3080,8 +3211,8 @@ handle_control_authchallenge(control_connection_t *conn, uint32_t len,
tor_free(client_nonce);
return -1;
}
-
- tor_assert(!crypto_rand(server_nonce, SAFECOOKIE_SERVER_NONCE_LEN));
+ const int fail = crypto_rand(server_nonce, SAFECOOKIE_SERVER_NONCE_LEN);
+ tor_assert(!fail);
/* Now compute and send the server-to-controller response, and the
* server's nonce. */
@@ -3189,6 +3320,551 @@ handle_control_dropguards(control_connection_t *conn,
return 0;
}
+/** Implementation for the HSFETCH command. */
+static int
+handle_control_hsfetch(control_connection_t *conn, uint32_t len,
+ const char *body)
+{
+ int i;
+ char digest[DIGEST_LEN], *hsaddress = NULL, *arg1 = NULL, *desc_id = NULL;
+ smartlist_t *args = NULL, *hsdirs = NULL;
+ (void) len; /* body is nul-terminated; it's safe to ignore the length */
+ static const char *hsfetch_command = "HSFETCH";
+ static const char *v2_str = "v2-";
+ const size_t v2_str_len = strlen(v2_str);
+ rend_data_t *rend_query = NULL;
+
+ /* Make sure we have at least one argument, the HSAddress. */
+ args = getargs_helper(hsfetch_command, conn, body, 1, -1);
+ if (!args) {
+ goto exit;
+ }
+
+ /* Extract the first argument (either HSAddress or DescID). */
+ arg1 = smartlist_get(args, 0);
+ /* Test if it's an HS address without the .onion part. */
+ if (rend_valid_service_id(arg1)) {
+ hsaddress = arg1;
+ } else if (strcmpstart(arg1, v2_str) == 0 &&
+ rend_valid_descriptor_id(arg1 + v2_str_len) &&
+ base32_decode(digest, sizeof(digest), arg1 + v2_str_len,
+ REND_DESC_ID_V2_LEN_BASE32) == 0) {
+ /* We have a well formed version 2 descriptor ID. Keep the decoded value
+ * of the id. */
+ desc_id = digest;
+ } else {
+ connection_printf_to_buf(conn, "513 Unrecognized \"%s\"\r\n",
+ arg1);
+ goto done;
+ }
+
+ static const char *opt_server = "SERVER=";
+
+ /* Skip first argument because it's the HSAddress or DescID. */
+ for (i = 1; i < smartlist_len(args); ++i) {
+ const char *arg = smartlist_get(args, i);
+ const node_t *node;
+
+ if (!strcasecmpstart(arg, opt_server)) {
+ const char *server;
+
+ server = arg + strlen(opt_server);
+ node = node_get_by_hex_id(server);
+ if (!node) {
+ connection_printf_to_buf(conn, "552 Server \"%s\" not found\r\n",
+ server);
+ goto done;
+ }
+ if (!hsdirs) {
+ /* Stores routerstatus_t object for each specified server. */
+ hsdirs = smartlist_new();
+ }
+ /* Valid server, add it to our local list. */
+ smartlist_add(hsdirs, node->rs);
+ } else {
+ connection_printf_to_buf(conn, "513 Unexpected argument \"%s\"\r\n",
+ arg);
+ goto done;
+ }
+ }
+
+ rend_query = rend_data_client_create(hsaddress, desc_id, NULL,
+ REND_NO_AUTH);
+ if (rend_query == NULL) {
+ connection_printf_to_buf(conn, "551 Error creating the HS query\r\n");
+ goto done;
+ }
+
+ /* Using a descriptor ID, we force the user to provide at least one
+ * hsdir server using the SERVER= option. */
+ if (desc_id && (!hsdirs || !smartlist_len(hsdirs))) {
+ connection_printf_to_buf(conn, "512 %s option is required\r\n",
+ opt_server);
+ goto done;
+ }
+
+ /* We are about to trigger HSDir fetch so send the OK now because after
+ * that 650 event(s) are possible so better to have the 250 OK before them
+ * to avoid out of order replies. */
+ send_control_done(conn);
+
+ /* Trigger the fetch using the built rend query and possibly a list of HS
+ * directory to use. This function ignores the client cache thus this will
+ * always send a fetch command. */
+ rend_client_fetch_v2_desc(rend_query, hsdirs);
+
+ done:
+ SMARTLIST_FOREACH(args, char *, cp, tor_free(cp));
+ smartlist_free(args);
+ /* Contains data pointer that we don't own thus no cleanup. */
+ smartlist_free(hsdirs);
+ rend_data_free(rend_query);
+ exit:
+ return 0;
+}
+
+/** Implementation for the HSPOST command. */
+static int
+handle_control_hspost(control_connection_t *conn,
+ uint32_t len,
+ const char *body)
+{
+ static const char *opt_server = "SERVER=";
+ smartlist_t *args = smartlist_new();
+ smartlist_t *hs_dirs = NULL;
+ const char *encoded_desc = body;
+ size_t encoded_desc_len = len;
+
+ char *cp = memchr(body, '\n', len);
+ char *argline = tor_strndup(body, cp-body);
+
+ /* If any SERVER= options were specified, try parse the options line */
+ if (!strcasecmpstart(argline, opt_server)) {
+ /* encoded_desc begins after a newline character */
+ cp = cp + 1;
+ encoded_desc = cp;
+ encoded_desc_len = len-(cp-body);
+
+ smartlist_split_string(args, argline, " ",
+ SPLIT_SKIP_SPACE|SPLIT_IGNORE_BLANK, 0);
+ SMARTLIST_FOREACH_BEGIN(args, const char *, arg) {
+ if (!strcasecmpstart(arg, opt_server)) {
+ const char *server = arg + strlen(opt_server);
+ const node_t *node = node_get_by_hex_id(server);
+
+ if (!node) {
+ connection_printf_to_buf(conn, "552 Server \"%s\" not found\r\n",
+ server);
+ goto done;
+ }
+ if (!node->rs->is_hs_dir) {
+ connection_printf_to_buf(conn, "552 Server \"%s\" is not a HSDir"
+ "\r\n", server);
+ goto done;
+ }
+ /* Valid server, add it to our local list. */
+ if (!hs_dirs)
+ hs_dirs = smartlist_new();
+ smartlist_add(hs_dirs, node->rs);
+ } else {
+ connection_printf_to_buf(conn, "512 Unexpected argument \"%s\"\r\n",
+ arg);
+ goto done;
+ }
+ } SMARTLIST_FOREACH_END(arg);
+ }
+
+ /* Read the dot encoded descriptor, and parse it. */
+ rend_encoded_v2_service_descriptor_t *desc =
+ tor_malloc_zero(sizeof(rend_encoded_v2_service_descriptor_t));
+ read_escaped_data(encoded_desc, encoded_desc_len, &desc->desc_str);
+
+ rend_service_descriptor_t *parsed = NULL;
+ char *intro_content = NULL;
+ size_t intro_size;
+ size_t encoded_size;
+ const char *next_desc;
+ if (!rend_parse_v2_service_descriptor(&parsed, desc->desc_id, &intro_content,
+ &intro_size, &encoded_size,
+ &next_desc, desc->desc_str, 1)) {
+ /* Post the descriptor. */
+ char serviceid[REND_SERVICE_ID_LEN_BASE32+1];
+ if (!rend_get_service_id(parsed->pk, serviceid)) {
+ smartlist_t *descs = smartlist_new();
+ smartlist_add(descs, desc);
+
+ /* We are about to trigger HS descriptor upload so send the OK now
+ * because after that 650 event(s) are possible so better to have the
+ * 250 OK before them to avoid out of order replies. */
+ send_control_done(conn);
+
+ /* Trigger the descriptor upload */
+ directory_post_to_hs_dir(parsed, descs, hs_dirs, serviceid, 0);
+ smartlist_free(descs);
+ }
+
+ rend_service_descriptor_free(parsed);
+ } else {
+ connection_printf_to_buf(conn, "554 Invalid descriptor\r\n");
+ }
+
+ tor_free(intro_content);
+ rend_encoded_v2_service_descriptor_free(desc);
+ done:
+ tor_free(argline);
+ smartlist_free(hs_dirs); /* Contents belong to the rend service code. */
+ SMARTLIST_FOREACH(args, char *, arg, tor_free(arg));
+ smartlist_free(args);
+ return 0;
+}
+
+/** Called when we get a ADD_ONION command; parse the body, and set up
+ * the new ephemeral Onion Service. */
+static int
+handle_control_add_onion(control_connection_t *conn,
+ uint32_t len,
+ const char *body)
+{
+ smartlist_t *args;
+ size_t arg_len;
+ (void) len; /* body is nul-terminated; it's safe to ignore the length */
+ args = getargs_helper("ADD_ONION", conn, body, 2, -1);
+ if (!args)
+ return 0;
+ arg_len = smartlist_len(args);
+
+ /* Parse all of the arguments that do not involve handling cryptographic
+ * material first, since there's no reason to touch that at all if any of
+ * the other arguments are malformed.
+ */
+ smartlist_t *port_cfgs = smartlist_new();
+ int discard_pk = 0;
+ int detach = 0;
+ for (size_t i = 1; i < arg_len; i++) {
+ static const char *port_prefix = "Port=";
+ static const char *flags_prefix = "Flags=";
+
+ const char *arg = smartlist_get(args, i);
+ if (!strcasecmpstart(arg, port_prefix)) {
+ /* "Port=VIRTPORT[,TARGET]". */
+ const char *port_str = arg + strlen(port_prefix);
+
+ rend_service_port_config_t *cfg =
+ rend_service_parse_port_config(port_str, ",", NULL);
+ if (!cfg) {
+ connection_printf_to_buf(conn, "512 Invalid VIRTPORT/TARGET\r\n");
+ goto out;
+ }
+ smartlist_add(port_cfgs, cfg);
+ } else if (!strcasecmpstart(arg, flags_prefix)) {
+ /* "Flags=Flag[,Flag]", where Flag can be:
+ * * 'DiscardPK' - If tor generates the keypair, do not include it in
+ * the response.
+ * * 'Detach' - Do not tie this onion service to any particular control
+ * connection.
+ */
+ static const char *discard_flag = "DiscardPK";
+ static const char *detach_flag = "Detach";
+
+ smartlist_t *flags = smartlist_new();
+ int bad = 0;
+
+ smartlist_split_string(flags, arg + strlen(flags_prefix), ",",
+ SPLIT_IGNORE_BLANK, 0);
+ if (smartlist_len(flags) < 1) {
+ connection_printf_to_buf(conn, "512 Invalid 'Flags' argument\r\n");
+ bad = 1;
+ }
+ SMARTLIST_FOREACH_BEGIN(flags, const char *, flag)
+ {
+ if (!strcasecmp(flag, discard_flag)) {
+ discard_pk = 1;
+ } else if (!strcasecmp(flag, detach_flag)) {
+ detach = 1;
+ } else {
+ connection_printf_to_buf(conn,
+ "512 Invalid 'Flags' argument: %s\r\n",
+ escaped(flag));
+ bad = 1;
+ break;
+ }
+ } SMARTLIST_FOREACH_END(flag);
+ SMARTLIST_FOREACH(flags, char *, cp, tor_free(cp));
+ smartlist_free(flags);
+ if (bad)
+ goto out;
+ } else {
+ connection_printf_to_buf(conn, "513 Invalid argument\r\n");
+ goto out;
+ }
+ }
+ if (smartlist_len(port_cfgs) == 0) {
+ connection_printf_to_buf(conn, "512 Missing 'Port' argument\r\n");
+ goto out;
+ }
+
+ /* Parse the "keytype:keyblob" argument. */
+ crypto_pk_t *pk = NULL;
+ const char *key_new_alg = NULL;
+ char *key_new_blob = NULL;
+ char *err_msg = NULL;
+
+ pk = add_onion_helper_keyarg(smartlist_get(args, 0), discard_pk,
+ &key_new_alg, &key_new_blob,
+ &err_msg);
+ if (!pk) {
+ if (err_msg) {
+ connection_write_str_to_buf(err_msg, conn);
+ tor_free(err_msg);
+ }
+ goto out;
+ }
+ tor_assert(!err_msg);
+
+ /* Create the HS, using private key pk, and port config port_cfg.
+ * rend_service_add_ephemeral() will take ownership of pk and port_cfg,
+ * regardless of success/failure.
+ */
+ char *service_id = NULL;
+ int ret = rend_service_add_ephemeral(pk, port_cfgs, &service_id);
+ port_cfgs = NULL; /* port_cfgs is now owned by the rendservice code. */
+ switch (ret) {
+ case RSAE_OKAY:
+ {
+ char *buf = NULL;
+ tor_assert(service_id);
+ if (key_new_alg) {
+ tor_assert(key_new_blob);
+ tor_asprintf(&buf,
+ "250-ServiceID=%s\r\n"
+ "250-PrivateKey=%s:%s\r\n"
+ "250 OK\r\n",
+ service_id,
+ key_new_alg,
+ key_new_blob);
+ } else {
+ tor_asprintf(&buf,
+ "250-ServiceID=%s\r\n"
+ "250 OK\r\n",
+ service_id);
+ }
+ if (detach) {
+ if (!detached_onion_services)
+ detached_onion_services = smartlist_new();
+ smartlist_add(detached_onion_services, service_id);
+ } else {
+ if (!conn->ephemeral_onion_services)
+ conn->ephemeral_onion_services = smartlist_new();
+ smartlist_add(conn->ephemeral_onion_services, service_id);
+ }
+
+ connection_write_str_to_buf(buf, conn);
+ memwipe(buf, 0, strlen(buf));
+ tor_free(buf);
+ break;
+ }
+ case RSAE_BADPRIVKEY:
+ connection_printf_to_buf(conn, "551 Failed to generate onion address\r\n");
+ break;
+ case RSAE_ADDREXISTS:
+ connection_printf_to_buf(conn, "550 Onion address collision\r\n");
+ break;
+ case RSAE_BADVIRTPORT:
+ connection_printf_to_buf(conn, "512 Invalid VIRTPORT/TARGET\r\n");
+ break;
+ case RSAE_INTERNAL: /* FALLSTHROUGH */
+ default:
+ connection_printf_to_buf(conn, "551 Failed to add Onion Service\r\n");
+ }
+ if (key_new_blob) {
+ memwipe(key_new_blob, 0, strlen(key_new_blob));
+ tor_free(key_new_blob);
+ }
+
+ out:
+ if (port_cfgs) {
+ SMARTLIST_FOREACH(port_cfgs, rend_service_port_config_t*, p,
+ rend_service_port_config_free(p));
+ smartlist_free(port_cfgs);
+ }
+
+ SMARTLIST_FOREACH(args, char *, cp, {
+ memwipe(cp, 0, strlen(cp));
+ tor_free(cp);
+ });
+ smartlist_free(args);
+ return 0;
+}
+
+/** Helper function to handle parsing the KeyType:KeyBlob argument to the
+ * ADD_ONION command. Return a new crypto_pk_t and if a new key was generated
+ * and the private key not discarded, the algorithm and serialized private key,
+ * or NULL and an optional control protocol error message on failure. The
+ * caller is responsible for freeing the returned key_new_blob and err_msg.
+ *
+ * Note: The error messages returned are deliberately vague to avoid echoing
+ * key material.
+ */
+STATIC crypto_pk_t *
+add_onion_helper_keyarg(const char *arg, int discard_pk,
+ const char **key_new_alg_out, char **key_new_blob_out,
+ char **err_msg_out)
+{
+ smartlist_t *key_args = smartlist_new();
+ crypto_pk_t *pk = NULL;
+ const char *key_new_alg = NULL;
+ char *key_new_blob = NULL;
+ char *err_msg = NULL;
+ int ok = 0;
+
+ smartlist_split_string(key_args, arg, ":", SPLIT_IGNORE_BLANK, 0);
+ if (smartlist_len(key_args) != 2) {
+ err_msg = tor_strdup("512 Invalid key type/blob\r\n");
+ goto err;
+ }
+
+ /* The format is "KeyType:KeyBlob". */
+ static const char *key_type_new = "NEW";
+ static const char *key_type_best = "BEST";
+ static const char *key_type_rsa1024 = "RSA1024";
+
+ const char *key_type = smartlist_get(key_args, 0);
+ const char *key_blob = smartlist_get(key_args, 1);
+
+ if (!strcasecmp(key_type_rsa1024, key_type)) {
+ /* "RSA:<Base64 Blob>" - Loading a pre-existing RSA1024 key. */
+ pk = crypto_pk_base64_decode(key_blob, strlen(key_blob));
+ if (!pk) {
+ err_msg = tor_strdup("512 Failed to decode RSA key\r\n");
+ goto err;
+ }
+ if (crypto_pk_num_bits(pk) != PK_BYTES*8) {
+ err_msg = tor_strdup("512 Invalid RSA key size\r\n");
+ goto err;
+ }
+ } else if (!strcasecmp(key_type_new, key_type)) {
+ /* "NEW:<Algorithm>" - Generating a new key, blob as algorithm. */
+ if (!strcasecmp(key_type_rsa1024, key_blob) ||
+ !strcasecmp(key_type_best, key_blob)) {
+ /* "RSA1024", RSA 1024 bit, also currently "BEST" by default. */
+ pk = crypto_pk_new();
+ if (crypto_pk_generate_key(pk)) {
+ tor_asprintf(&err_msg, "551 Failed to generate %s key\r\n",
+ key_type_rsa1024);
+ goto err;
+ }
+ if (!discard_pk) {
+ if (crypto_pk_base64_encode(pk, &key_new_blob)) {
+ tor_asprintf(&err_msg, "551 Failed to encode %s key\r\n",
+ key_type_rsa1024);
+ goto err;
+ }
+ key_new_alg = key_type_rsa1024;
+ }
+ } else {
+ err_msg = tor_strdup("513 Invalid key type\r\n");
+ goto err;
+ }
+ } else {
+ err_msg = tor_strdup("513 Invalid key type\r\n");
+ goto err;
+ }
+
+ /* Succeded in loading or generating a private key. */
+ tor_assert(pk);
+ ok = 1;
+
+ err:
+ SMARTLIST_FOREACH(key_args, char *, cp, {
+ memwipe(cp, 0, strlen(cp));
+ tor_free(cp);
+ });
+ smartlist_free(key_args);
+
+ if (!ok) {
+ crypto_pk_free(pk);
+ pk = NULL;
+ }
+ if (err_msg_out) {
+ *err_msg_out = err_msg;
+ } else {
+ tor_free(err_msg);
+ }
+ *key_new_alg_out = key_new_alg;
+ *key_new_blob_out = key_new_blob;
+
+ return pk;
+}
+
+/** Called when we get a DEL_ONION command; parse the body, and remove
+ * the existing ephemeral Onion Service. */
+static int
+handle_control_del_onion(control_connection_t *conn,
+ uint32_t len,
+ const char *body)
+{
+ smartlist_t *args;
+ (void) len; /* body is nul-terminated; it's safe to ignore the length */
+ args = getargs_helper("DEL_ONION", conn, body, 1, 1);
+ if (!args)
+ return 0;
+
+ const char *service_id = smartlist_get(args, 0);
+ if (!rend_valid_service_id(service_id)) {
+ connection_printf_to_buf(conn, "512 Malformed Onion Service id\r\n");
+ goto out;
+ }
+
+ /* Determine if the onion service belongs to this particular control
+ * connection, or if it is in the global list of detached services. If it
+ * is in neither, either the service ID is invalid in some way, or it
+ * explicitly belongs to a different control connection, and an error
+ * should be returned.
+ */
+ smartlist_t *services[2] = {
+ conn->ephemeral_onion_services,
+ detached_onion_services
+ };
+ smartlist_t *onion_services = NULL;
+ int idx = -1;
+ for (size_t i = 0; i < ARRAY_LENGTH(services); i++) {
+ idx = smartlist_string_pos(services[i], service_id);
+ if (idx != -1) {
+ onion_services = services[i];
+ break;
+ }
+ }
+ if (onion_services == NULL) {
+ connection_printf_to_buf(conn, "552 Unknown Onion Service id\r\n");
+ } else {
+ int ret = rend_service_del_ephemeral(service_id);
+ if (ret) {
+ /* This should *NEVER* fail, since the service is on either the
+ * per-control connection list, or the global one.
+ */
+ log_warn(LD_BUG, "Failed to remove Onion Service %s.",
+ escaped(service_id));
+ tor_fragile_assert();
+ }
+
+ /* Remove/scrub the service_id from the appropriate list. */
+ char *cp = smartlist_get(onion_services, idx);
+ smartlist_del(onion_services, idx);
+ memwipe(cp, 0, strlen(cp));
+ tor_free(cp);
+
+ send_control_done(conn);
+ }
+
+ out:
+ SMARTLIST_FOREACH(args, char *, cp, {
+ memwipe(cp, 0, strlen(cp));
+ tor_free(cp);
+ });
+ smartlist_free(args);
+ return 0;
+}
+
/** Called when <b>conn</b> has no more bytes left on its outbuf. */
int
connection_control_finished_flushing(control_connection_t *conn)
@@ -3235,6 +3911,15 @@ connection_control_closed(control_connection_t *conn)
conn->event_mask = 0;
control_update_global_event_mask();
+ /* Close all ephemeral Onion Services if any.
+ * The list and it's contents are scrubbed/freed in connection_free_.
+ */
+ if (conn->ephemeral_onion_services) {
+ SMARTLIST_FOREACH(conn->ephemeral_onion_services, char *, cp, {
+ rend_service_del_ephemeral(cp);
+ });
+ }
+
if (conn->is_owning_control_connection) {
lost_owning_controller("connection", "closed");
}
@@ -3486,6 +4171,22 @@ connection_control_process_inbuf(control_connection_t *conn)
} else if (!strcasecmp(conn->incoming_cmd, "DROPGUARDS")) {
if (handle_control_dropguards(conn, cmd_data_len, args))
return -1;
+ } else if (!strcasecmp(conn->incoming_cmd, "HSFETCH")) {
+ if (handle_control_hsfetch(conn, cmd_data_len, args))
+ return -1;
+ } else if (!strcasecmp(conn->incoming_cmd, "+HSPOST")) {
+ if (handle_control_hspost(conn, cmd_data_len, args))
+ return -1;
+ } else if (!strcasecmp(conn->incoming_cmd, "ADD_ONION")) {
+ int ret = handle_control_add_onion(conn, cmd_data_len, args);
+ memwipe(args, 0, cmd_data_len); /* Scrub the private key. */
+ if (ret)
+ return -1;
+ } else if (!strcasecmp(conn->incoming_cmd, "DEL_ONION")) {
+ int ret = handle_control_del_onion(conn, cmd_data_len, args);
+ memwipe(args, 0, cmd_data_len); /* Scrub the service id/pk. */
+ if (ret)
+ return -1;
} else {
connection_printf_to_buf(conn, "510 Unrecognized command \"%s\"\r\n",
conn->incoming_cmd);
@@ -4949,15 +5650,18 @@ static int bootstrap_problems = 0;
*
* <b>status</b> is the new status, that is, what task we will be doing
* next. <b>progress</b> is zero if we just started this task, else it
- * represents progress on the task. */
-void
+ * represents progress on the task.
+ *
+ * Return true if we logged a message at level NOTICE, and false otherwise.
+ */
+int
control_event_bootstrap(bootstrap_status_t status, int progress)
{
const char *tag, *summary;
char buf[BOOTSTRAP_MSG_LEN];
if (bootstrap_percent == BOOTSTRAP_STATUS_DONE)
- return; /* already bootstrapped; nothing to be done here. */
+ return 0; /* already bootstrapped; nothing to be done here. */
/* special case for handshaking status, since our TLS handshaking code
* can't distinguish what the connection is going to be for. */
@@ -5004,7 +5708,10 @@ control_event_bootstrap(bootstrap_status_t status, int progress)
/* Remember that we gave a notice at this level. */
notice_bootstrap_percent = bootstrap_percent;
}
+ return loglevel == LOG_NOTICE;
}
+
+ return 0;
}
/** Called when Tor has failed to make bootstrapping progress in a way
@@ -5058,19 +5765,26 @@ MOCK_IMPL(void,
log_fn(severity,
LD_CONTROL, "Problem bootstrapping. Stuck at %d%%: %s. (%s; %s; "
- "count %d; recommendation %s)",
+ "count %d; recommendation %s; host %s at %s:%d)",
status, summary, warn,
orconn_end_reason_to_control_string(reason),
- bootstrap_problems, recommendation);
+ bootstrap_problems, recommendation,
+ hex_str(or_conn->identity_digest, DIGEST_LEN),
+ or_conn->base_.address,
+ or_conn->base_.port);
connection_or_report_broken_states(severity, LD_HANDSHAKE);
tor_snprintf(buf, sizeof(buf),
"BOOTSTRAP PROGRESS=%d TAG=%s SUMMARY=\"%s\" WARNING=\"%s\" REASON=%s "
- "COUNT=%d RECOMMENDATION=%s",
+ "COUNT=%d RECOMMENDATION=%s HOSTID=\"%s\" HOSTADDR=\"%s:%d\"",
bootstrap_percent, tag, summary, warn,
orconn_end_reason_to_control_string(reason), bootstrap_problems,
- recommendation);
+ recommendation,
+ hex_str(or_conn->identity_digest, DIGEST_LEN),
+ or_conn->base_.address,
+ (int)or_conn->base_.port);
+
tor_snprintf(last_sent_bootstrap_message,
sizeof(last_sent_bootstrap_message),
"WARN %s", buf);
@@ -5141,6 +5855,29 @@ node_describe_longname_by_id,(const char *id_digest))
return longname;
}
+/** Return either the onion address if the given pointer is a non empty
+ * string else the unknown string. */
+static const char *
+rend_hsaddress_str_or_unknown(const char *onion_address)
+{
+ static const char *str_unknown = "UNKNOWN";
+ const char *str_ret = str_unknown;
+
+ /* No valid pointer, unknown it is. */
+ if (!onion_address) {
+ goto end;
+ }
+ /* Empty onion address thus we don't know, unknown it is. */
+ if (onion_address[0] == '\0') {
+ goto end;
+ }
+ /* All checks are good so return the given onion address. */
+ str_ret = onion_address;
+
+ end:
+ return str_ret;
+}
+
/** send HS_DESC requested event.
*
* <b>rend_query</b> is used to fetch requested onion address and auth type.
@@ -5161,12 +5898,37 @@ control_event_hs_descriptor_requested(const rend_data_t *rend_query,
send_control_event(EVENT_HS_DESC, ALL_FORMATS,
"650 HS_DESC REQUESTED %s %s %s %s\r\n",
- rend_query->onion_address,
+ rend_hsaddress_str_or_unknown(rend_query->onion_address),
rend_auth_type_to_string(rend_query->auth_type),
node_describe_longname_by_id(id_digest),
desc_id_base32);
}
+/** send HS_DESC upload event.
+ *
+ * <b>service_id</b> is the descriptor onion address.
+ * <b>hs_dir</b> is the description of contacting hs directory.
+ * <b>desc_id_base32</b> is the ID of requested hs descriptor.
+ */
+void
+control_event_hs_descriptor_upload(const char *service_id,
+ const char *id_digest,
+ const char *desc_id_base32)
+{
+ if (!service_id || !id_digest || !desc_id_base32) {
+ log_warn(LD_BUG, "Called with service_digest==%p, "
+ "desc_id_base32==%p, id_digest==%p", service_id,
+ desc_id_base32, id_digest);
+ return;
+ }
+
+ send_control_event(EVENT_HS_DESC, ALL_FORMATS,
+ "650 HS_DESC UPLOAD %s UNKNOWN %s %s\r\n",
+ service_id,
+ node_describe_longname_by_id(id_digest),
+ desc_id_base32);
+}
+
/** send HS_DESC event after got response from hs directory.
*
* NOTE: this is an internal function used by following functions:
@@ -5177,15 +5939,16 @@ control_event_hs_descriptor_requested(const rend_data_t *rend_query,
*/
void
control_event_hs_descriptor_receive_end(const char *action,
- const rend_data_t *rend_query,
+ const char *onion_address,
+ rend_auth_type_t auth_type,
const char *id_digest,
const char *reason)
{
char *reason_field = NULL;
- if (!action || !rend_query || !id_digest) {
- log_warn(LD_BUG, "Called with action==%p, rend_query==%p, "
- "id_digest==%p", action, rend_query, id_digest);
+ if (!action || !id_digest || !onion_address) {
+ log_warn(LD_BUG, "Called with action==%p, id_digest==%p "
+ "onion_address==%p", action, id_digest, onion_address);
return;
}
@@ -5196,8 +5959,42 @@ control_event_hs_descriptor_receive_end(const char *action,
send_control_event(EVENT_HS_DESC, ALL_FORMATS,
"650 HS_DESC %s %s %s %s%s\r\n",
action,
- rend_query->onion_address,
- rend_auth_type_to_string(rend_query->auth_type),
+ rend_hsaddress_str_or_unknown(onion_address),
+ rend_auth_type_to_string(auth_type),
+ node_describe_longname_by_id(id_digest),
+ reason_field ? reason_field : "");
+
+ tor_free(reason_field);
+}
+
+/** send HS_DESC event after got response from hs directory.
+ *
+ * NOTE: this is an internal function used by following functions:
+ * control_event_hs_descriptor_uploaded
+ * control_event_hs_descriptor_upload_failed
+ *
+ * So do not call this function directly.
+ */
+void
+control_event_hs_descriptor_upload_end(const char *action,
+ const char *id_digest,
+ const char *reason)
+{
+ char *reason_field = NULL;
+
+ if (!action || !id_digest) {
+ log_warn(LD_BUG, "Called with action==%p, id_digest==%p", action,
+ id_digest);
+ return;
+ }
+
+ if (reason) {
+ tor_asprintf(&reason_field, " REASON=%s", reason);
+ }
+
+ send_control_event(EVENT_HS_DESC, ALL_FORMATS,
+ "650 HS_DESC %s UNKNOWN UNKNOWN %s%s\r\n",
+ action,
node_describe_longname_by_id(id_digest),
reason_field ? reason_field : "");
@@ -5206,19 +6003,34 @@ control_event_hs_descriptor_receive_end(const char *action,
/** send HS_DESC RECEIVED event
*
- * called when a we successfully received a hidden service descriptor.
+ * called when we successfully received a hidden service descriptor.
*/
void
-control_event_hs_descriptor_received(const rend_data_t *rend_query,
+control_event_hs_descriptor_received(const char *onion_address,
+ rend_auth_type_t auth_type,
const char *id_digest)
{
- if (!rend_query || !id_digest) {
- log_warn(LD_BUG, "Called with rend_query==%p, id_digest==%p",
- rend_query, id_digest);
+ if (!id_digest) {
+ log_warn(LD_BUG, "Called with id_digest==%p", id_digest);
+ return;
+ }
+ control_event_hs_descriptor_receive_end("RECEIVED", onion_address,
+ auth_type, id_digest, NULL);
+}
+
+/** send HS_DESC UPLOADED event
+ *
+ * called when we successfully uploaded a hidden service descriptor.
+ */
+void
+control_event_hs_descriptor_uploaded(const char *id_digest)
+{
+ if (!id_digest) {
+ log_warn(LD_BUG, "Called with id_digest==%p",
+ id_digest);
return;
}
- control_event_hs_descriptor_receive_end("RECEIVED", rend_query,
- id_digest, NULL);
+ control_event_hs_descriptor_upload_end("UPLOADED", id_digest, NULL);
}
/** Send HS_DESC event to inform controller that query <b>rend_query</b>
@@ -5227,25 +6039,79 @@ control_event_hs_descriptor_received(const rend_data_t *rend_query,
* field.
*/
void
-control_event_hs_descriptor_failed(const rend_data_t *rend_query,
+control_event_hs_descriptor_failed(const char *onion_address,
+ rend_auth_type_t auth_type,
const char *id_digest,
const char *reason)
{
- if (!rend_query || !id_digest) {
- log_warn(LD_BUG, "Called with rend_query==%p, id_digest==%p",
- rend_query, id_digest);
+ if (!id_digest) {
+ log_warn(LD_BUG, "Called with id_digest==%p", id_digest);
return;
}
- control_event_hs_descriptor_receive_end("FAILED", rend_query,
+ control_event_hs_descriptor_receive_end("FAILED", onion_address, auth_type,
id_digest, reason);
}
+/** send HS_DESC_CONTENT event after completion of a successful fetch from
+ * hs directory. */
+void
+control_event_hs_descriptor_content(const char *onion_address,
+ const char *desc_id,
+ const char *hsdir_id_digest,
+ const char *content)
+{
+ static const char *event_name = "HS_DESC_CONTENT";
+ char *esc_content = NULL;
+
+ if (!onion_address || !desc_id || !hsdir_id_digest) {
+ log_warn(LD_BUG, "Called with onion_address==%p, desc_id==%p, "
+ "hsdir_id_digest==%p", onion_address, desc_id, hsdir_id_digest);
+ return;
+ }
+
+ if (content == NULL) {
+ /* Point it to empty content so it can still be escaped. */
+ content = "";
+ }
+ write_escaped_data(content, strlen(content), &esc_content);
+
+ send_control_event(EVENT_HS_DESC_CONTENT, ALL_FORMATS,
+ "650+%s %s %s %s\r\n%s650 OK\r\n",
+ event_name,
+ rend_hsaddress_str_or_unknown(onion_address),
+ desc_id,
+ node_describe_longname_by_id(hsdir_id_digest),
+ esc_content);
+ tor_free(esc_content);
+}
+
+/** Send HS_DESC event to inform controller upload of hidden service
+ * descriptor identified by <b>id_digest</b> failed. If <b>reason</b>
+ * is not NULL, add it to REASON= field.
+ */
+void
+control_event_hs_descriptor_upload_failed(const char *id_digest,
+ const char *reason)
+{
+ if (!id_digest) {
+ log_warn(LD_BUG, "Called with id_digest==%p",
+ id_digest);
+ return;
+ }
+ control_event_hs_descriptor_upload_end("UPLOAD_FAILED",
+ id_digest, reason);
+}
+
/** Free any leftover allocated memory of the control.c subsystem. */
void
control_free_all(void)
{
if (authentication_cookie) /* Free the auth cookie */
tor_free(authentication_cookie);
+ if (detached_onion_services) { /* Free the detached onion services */
+ SMARTLIST_FOREACH(detached_onion_services, char *, cp, tor_free(cp));
+ smartlist_free(detached_onion_services);
+ }
}
#ifdef TOR_UNIT_TESTS
diff --git a/src/or/control.h b/src/or/control.h
index 8c9f7bbdc9..644caf8c66 100644
--- a/src/or/control.h
+++ b/src/or/control.h
@@ -92,7 +92,7 @@ void enable_control_logging(void);
void monitor_owning_controller_process(const char *process_spec);
-void control_event_bootstrap(bootstrap_status_t status, int progress);
+int control_event_bootstrap(bootstrap_status_t status, int progress);
MOCK_DECL(void, control_event_bootstrap_problem,(const char *warn,
int reason,
or_connection_t *or_conn));
@@ -106,15 +106,31 @@ MOCK_DECL(const char *, node_describe_longname_by_id,(const char *id_digest));
void control_event_hs_descriptor_requested(const rend_data_t *rend_query,
const char *desc_id_base32,
const char *hs_dir);
+void control_event_hs_descriptor_upload(const char *service_id,
+ const char *desc_id_base32,
+ const char *hs_dir);
void control_event_hs_descriptor_receive_end(const char *action,
- const rend_data_t *rend_query,
- const char *hs_dir,
- const char *reason);
-void control_event_hs_descriptor_received(const rend_data_t *rend_query,
- const char *hs_dir);
-void control_event_hs_descriptor_failed(const rend_data_t *rend_query,
- const char *hs_dir,
+ const char *onion_address,
+ rend_auth_type_t auth_type,
+ const char *id_digest,
+ const char *reason);
+void control_event_hs_descriptor_upload_end(const char *action,
+ const char *hs_dir,
+ const char *reason);
+void control_event_hs_descriptor_received(const char *onion_address,
+ rend_auth_type_t auth_type,
+ const char *id_digest);
+void control_event_hs_descriptor_uploaded(const char *hs_dir);
+void control_event_hs_descriptor_failed(const char *onion_address,
+ rend_auth_type_t auth_type,
+ const char *id_digest,
const char *reason);
+void control_event_hs_descriptor_upload_failed(const char *hs_dir,
+ const char *reason);
+void control_event_hs_descriptor_content(const char *onion_address,
+ const char *desc_id,
+ const char *hsdir_fp,
+ const char *content);
void control_free_all(void);
@@ -123,6 +139,7 @@ void control_free_all(void);
* because it is used both as a list of v0 event types, and as indices
* into the bitfield to determine which controllers want which events.
*/
+/* This bitfield has no event zero 0x0000 */
#define EVENT_MIN_ 0x0001
#define EVENT_CIRCUIT_STATUS 0x0001
#define EVENT_STREAM_STATUS 0x0002
@@ -157,10 +174,31 @@ void control_free_all(void);
#define EVENT_CIRC_BANDWIDTH_USED 0x001D
#define EVENT_TRANSPORT_LAUNCHED 0x0020
#define EVENT_HS_DESC 0x0021
-#define EVENT_MAX_ 0x0021
-/* If EVENT_MAX_ ever hits 0x003F, we need to make the mask into a
+#define EVENT_HS_DESC_CONTENT 0x0022
+#define EVENT_MAX_ 0x0022
+
+/* sizeof(control_connection_t.event_mask) in bits, currently a uint64_t */
+#define EVENT_CAPACITY_ 0x0040
+
+/* If EVENT_MAX_ ever hits 0x0040, we need to make the mask into a
* different structure, as it can only handle a maximum left shift of 1<<63. */
+#if EVENT_MAX_ >= EVENT_CAPACITY_
+#error control_connection_t.event_mask has an event greater than its capacity
+#endif
+
+#define EVENT_MASK_(e) (((uint64_t)1)<<(e))
+
+#define EVENT_MASK_NONE_ ((uint64_t)0x0)
+
+#define EVENT_MASK_ABOVE_MIN_ ((~((uint64_t)0x0)) << EVENT_MIN_)
+#define EVENT_MASK_BELOW_MAX_ ((~((uint64_t)0x0)) \
+ >> (EVENT_CAPACITY_ - EVENT_MAX_ \
+ - EVENT_MIN_))
+
+#define EVENT_MASK_ALL_ (EVENT_MASK_ABOVE_MIN_ \
+ & EVENT_MASK_BELOW_MAX_)
+
/* Used only by control.c and test.c */
STATIC size_t write_escaped_data(const char *data, size_t len, char **out);
STATIC size_t read_escaped_data(const char *data, size_t len, char **out);
@@ -204,6 +242,11 @@ void append_cell_stats_by_command(smartlist_t *event_parts,
void format_cell_stats(char **event_string, circuit_t *circ,
cell_stats_t *cell_stats);
STATIC char *get_bw_samples(void);
+
+STATIC crypto_pk_t *add_onion_helper_keyarg(const char *arg, int discard_pk,
+ const char **key_new_alg_out,
+ char **key_new_blob_out,
+ char **err_msg_out);
#endif
#endif
diff --git a/src/or/cpuworker.c b/src/or/cpuworker.c
index 340fbec620..d511ecf84c 100644
--- a/src/or/cpuworker.c
+++ b/src/or/cpuworker.c
@@ -5,84 +5,99 @@
/**
* \file cpuworker.c
- * \brief Implements a farm of 'CPU worker' processes to perform
- * CPU-intensive tasks in another thread or process, to not
- * interrupt the main thread.
+ * \brief Uses the workqueue/threadpool code to farm CPU-intensive activities
+ * out to subprocesses.
*
* Right now, we only use this for processing onionskins.
**/
#include "or.h"
-#include "buffers.h"
#include "channel.h"
-#include "channeltls.h"
#include "circuitbuild.h"
#include "circuitlist.h"
-#include "config.h"
-#include "connection.h"
#include "connection_or.h"
+#include "config.h"
#include "cpuworker.h"
#include "main.h"
#include "onion.h"
#include "rephist.h"
#include "router.h"
+#include "workqueue.h"
-/** The maximum number of cpuworker processes we will keep around. */
-#define MAX_CPUWORKERS 16
-/** The minimum number of cpuworker processes we will keep around. */
-#define MIN_CPUWORKERS 1
-
-/** The tag specifies which circuit this onionskin was from. */
-#define TAG_LEN 12
-
-/** How many cpuworkers we have running right now. */
-static int num_cpuworkers=0;
-/** How many of the running cpuworkers have an assigned task right now. */
-static int num_cpuworkers_busy=0;
-/** We need to spawn new cpuworkers whenever we rotate the onion keys
- * on platforms where execution contexts==processes. This variable stores
- * the last time we got a key rotation event. */
-static time_t last_rotation_time=0;
-
-static void cpuworker_main(void *data) ATTR_NORETURN;
-static int spawn_cpuworker(void);
-static void spawn_enough_cpuworkers(void);
-static void process_pending_task(connection_t *cpuworker);
-
-/** Initialize the cpuworker subsystem.
- */
-void
-cpu_init(void)
+#ifdef HAVE_EVENT2_EVENT_H
+#include <event2/event.h>
+#else
+#include <event.h>
+#endif
+
+static void queue_pending_tasks(void);
+
+typedef struct worker_state_s {
+ int generation;
+ server_onion_keys_t *onion_keys;
+} worker_state_t;
+
+static void *
+worker_state_new(void *arg)
{
- cpuworkers_rotate();
+ worker_state_t *ws;
+ (void)arg;
+ ws = tor_malloc_zero(sizeof(worker_state_t));
+ ws->onion_keys = server_onion_keys_new();
+ return ws;
}
-
-/** Called when we're done sending a request to a cpuworker. */
-int
-connection_cpu_finished_flushing(connection_t *conn)
+static void
+worker_state_free(void *arg)
{
- tor_assert(conn);
- tor_assert(conn->type == CONN_TYPE_CPUWORKER);
- return 0;
+ worker_state_t *ws = arg;
+ server_onion_keys_free(ws->onion_keys);
+ tor_free(ws);
}
-/** Pack global_id and circ_id; set *tag to the result. (See note on
- * cpuworker_main for wire format.) */
+static replyqueue_t *replyqueue = NULL;
+static threadpool_t *threadpool = NULL;
+static struct event *reply_event = NULL;
+
+static tor_weak_rng_t request_sample_rng = TOR_WEAK_RNG_INIT;
+
+static int total_pending_tasks = 0;
+static int max_pending_tasks = 128;
+
static void
-tag_pack(uint8_t *tag, uint64_t chan_id, circid_t circ_id)
+replyqueue_process_cb(evutil_socket_t sock, short events, void *arg)
{
- /*XXXX RETHINK THIS WHOLE MESS !!!! !NM NM NM NM*/
- /*XXXX DOUBLEPLUSTHIS!!!! AS AS AS AS*/
- set_uint64(tag, chan_id);
- set_uint32(tag+8, circ_id);
+ replyqueue_t *rq = arg;
+ (void) sock;
+ (void) events;
+ replyqueue_process(rq);
}
-/** Unpack <b>tag</b> into addr, port, and circ_id.
+/** Initialize the cpuworker subsystem. It is OK to call this more than once
+ * during Tor's lifetime.
*/
-static void
-tag_unpack(const uint8_t *tag, uint64_t *chan_id, circid_t *circ_id)
+void
+cpu_init(void)
{
- *chan_id = get_uint64(tag);
- *circ_id = get_uint32(tag+8);
+ if (!replyqueue) {
+ replyqueue = replyqueue_new(0);
+ }
+ if (!reply_event) {
+ reply_event = tor_event_new(tor_libevent_get_base(),
+ replyqueue_get_socket(replyqueue),
+ EV_READ|EV_PERSIST,
+ replyqueue_process_cb,
+ replyqueue);
+ event_add(reply_event, NULL);
+ }
+ if (!threadpool) {
+ threadpool = threadpool_new(get_num_cpus(get_options()),
+ replyqueue,
+ worker_state_new,
+ worker_state_free,
+ NULL);
+ }
+ /* Total voodoo. Can we make this more sensible? */
+ max_pending_tasks = get_num_cpus(get_options()) * 64;
+ crypto_seed_weak_rng(&request_sample_rng);
}
/** Magic numbers to make sure our cpuworker_requests don't grow any
@@ -94,10 +109,6 @@ tag_unpack(const uint8_t *tag, uint64_t *chan_id, circid_t *circ_id)
typedef struct cpuworker_request_t {
/** Magic number; must be CPUWORKER_REQUEST_MAGIC. */
uint32_t magic;
- /** Opaque tag to identify the job */
- uint8_t tag[TAG_LEN];
- /** Task code. Must be one of CPUWORKER_TASK_* */
- uint8_t task;
/** Flag: Are we timing this request? */
unsigned timed : 1;
@@ -114,8 +125,7 @@ typedef struct cpuworker_request_t {
typedef struct cpuworker_reply_t {
/** Magic number; must be CPUWORKER_REPLY_MAGIC. */
uint32_t magic;
- /** Opaque tag to identify the job; matches the request's tag.*/
- uint8_t tag[TAG_LEN];
+
/** True iff we got a successful request. */
uint8_t success;
@@ -142,42 +152,45 @@ typedef struct cpuworker_reply_t {
uint8_t rend_auth_material[DIGEST_LEN];
} cpuworker_reply_t;
-/** Called when the onion key has changed and we need to spawn new
- * cpuworkers. Close all currently idle cpuworkers, and mark the last
- * rotation time as now.
- */
-void
-cpuworkers_rotate(void)
+typedef struct cpuworker_job_u {
+ or_circuit_t *circ;
+ union {
+ cpuworker_request_t request;
+ cpuworker_reply_t reply;
+ } u;
+} cpuworker_job_t;
+
+static int
+update_state_threadfn(void *state_, void *work_)
{
- connection_t *cpuworker;
- while ((cpuworker = connection_get_by_type_state(CONN_TYPE_CPUWORKER,
- CPUWORKER_STATE_IDLE))) {
- connection_mark_for_close(cpuworker);
- --num_cpuworkers;
- }
- last_rotation_time = time(NULL);
- if (server_mode(get_options()))
- spawn_enough_cpuworkers();
+ worker_state_t *state = state_;
+ worker_state_t *update = work_;
+ server_onion_keys_free(state->onion_keys);
+ state->onion_keys = update->onion_keys;
+ update->onion_keys = NULL;
+ ++state->generation;
+ return WQ_RPL_REPLY;
}
-/** If the cpuworker closes the connection,
- * mark it as closed and spawn a new one as needed. */
-int
-connection_cpu_reached_eof(connection_t *conn)
+/** Called when the onion key has changed so update all CPU worker(s) with
+ * new function pointers with which a new state will be generated.
+ */
+void
+cpuworkers_rotate_keyinfo(void)
{
- log_warn(LD_GENERAL,"Read eof. CPU worker died unexpectedly.");
- if (conn->state != CPUWORKER_STATE_IDLE) {
- /* the circ associated with this cpuworker will have to wait until
- * it gets culled in run_connection_housekeeping(), since we have
- * no way to find out which circ it was. */
- log_warn(LD_GENERAL,"...and it left a circuit queued; abandoning circ.");
- num_cpuworkers_busy--;
+ if (!threadpool) {
+ /* If we're a client, then we won't have cpuworkers, and we won't need
+ * to tell them to rotate their state.
+ */
+ return;
+ }
+ if (threadpool_queue_update(threadpool,
+ worker_state_new,
+ update_state_threadfn,
+ worker_state_free,
+ NULL)) {
+ log_warn(LD_OR, "Failed to queue key update for worker threads.");
}
- num_cpuworkers--;
- spawn_enough_cpuworkers(); /* try to regrow. hope we don't end up
- spinning. */
- connection_mark_for_close(conn);
- return 0;
}
/** Indexed by handshake type: how many onionskins have we processed and
@@ -197,8 +210,6 @@ static uint64_t onionskins_usec_roundtrip[MAX_ONION_HANDSHAKE_TYPE+1];
* time. (microseconds) */
#define MAX_BELIEVABLE_ONIONSKIN_DELAY (2*1000*1000)
-static tor_weak_rng_t request_sample_rng = TOR_WEAK_RNG_INIT;
-
/** Return true iff we'd like to measure a handshake of type
* <b>onionskin_type</b>. Call only from the main thread. */
static int
@@ -286,428 +297,275 @@ cpuworker_log_onionskin_overhead(int severity, int onionskin_type,
onionskin_type_name, (unsigned)overhead, relative_overhead*100);
}
-/** Called when we get data from a cpuworker. If the answer is not complete,
- * wait for a complete answer. If the answer is complete,
- * process it as appropriate.
- */
-int
-connection_cpu_process_inbuf(connection_t *conn)
-{
- uint64_t chan_id;
- circid_t circ_id;
- channel_t *p_chan = NULL;
- circuit_t *circ;
-
- tor_assert(conn);
- tor_assert(conn->type == CONN_TYPE_CPUWORKER);
-
- if (!connection_get_inbuf_len(conn))
- return 0;
-
- if (conn->state == CPUWORKER_STATE_BUSY_ONION) {
- cpuworker_reply_t rpl;
- if (connection_get_inbuf_len(conn) < sizeof(cpuworker_reply_t))
- return 0; /* not yet */
- tor_assert(connection_get_inbuf_len(conn) == sizeof(cpuworker_reply_t));
-
- connection_fetch_from_buf((void*)&rpl,sizeof(cpuworker_reply_t),conn);
-
- tor_assert(rpl.magic == CPUWORKER_REPLY_MAGIC);
-
- if (rpl.timed && rpl.success &&
- rpl.handshake_type <= MAX_ONION_HANDSHAKE_TYPE) {
- /* Time how long this request took. The handshake_type check should be
- needless, but let's leave it in to be safe. */
- struct timeval tv_end, tv_diff;
- int64_t usec_roundtrip;
- tor_gettimeofday(&tv_end);
- timersub(&tv_end, &rpl.started_at, &tv_diff);
- usec_roundtrip = ((int64_t)tv_diff.tv_sec)*1000000 + tv_diff.tv_usec;
- if (usec_roundtrip >= 0 &&
- usec_roundtrip < MAX_BELIEVABLE_ONIONSKIN_DELAY) {
- ++onionskins_n_processed[rpl.handshake_type];
- onionskins_usec_internal[rpl.handshake_type] += rpl.n_usec;
- onionskins_usec_roundtrip[rpl.handshake_type] += usec_roundtrip;
- if (onionskins_n_processed[rpl.handshake_type] >= 500000) {
- /* Scale down every 500000 handshakes. On a busy server, that's
- * less impressive than it sounds. */
- onionskins_n_processed[rpl.handshake_type] /= 2;
- onionskins_usec_internal[rpl.handshake_type] /= 2;
- onionskins_usec_roundtrip[rpl.handshake_type] /= 2;
- }
- }
- }
- /* parse out the circ it was talking about */
- tag_unpack(rpl.tag, &chan_id, &circ_id);
- circ = NULL;
- log_debug(LD_OR,
- "Unpacking cpuworker reply, chan_id is " U64_FORMAT
- ", circ_id is %u",
- U64_PRINTF_ARG(chan_id), (unsigned)circ_id);
- p_chan = channel_find_by_global_id(chan_id);
-
- if (p_chan)
- circ = circuit_get_by_circid_channel(circ_id, p_chan);
-
- if (rpl.success == 0) {
- log_debug(LD_OR,
- "decoding onionskin failed. "
- "(Old key or bad software.) Closing.");
- if (circ)
- circuit_mark_for_close(circ, END_CIRC_REASON_TORPROTOCOL);
- goto done_processing;
- }
- if (!circ) {
- /* This happens because somebody sends us a destroy cell and the
- * circuit goes away, while the cpuworker is working. This is also
- * why our tag doesn't include a pointer to the circ, because we'd
- * never know if it's still valid.
- */
- log_debug(LD_OR,"processed onion for a circ that's gone. Dropping.");
- goto done_processing;
- }
- tor_assert(! CIRCUIT_IS_ORIGIN(circ));
- if (onionskin_answer(TO_OR_CIRCUIT(circ),
- &rpl.created_cell,
- (const char*)rpl.keys,
- rpl.rend_auth_material) < 0) {
- log_warn(LD_OR,"onionskin_answer failed. Closing.");
- circuit_mark_for_close(circ, END_CIRC_REASON_INTERNAL);
- goto done_processing;
- }
- log_debug(LD_OR,"onionskin_answer succeeded. Yay.");
- } else {
- tor_assert(0); /* don't ask me to do handshakes yet */
- }
-
- done_processing:
- conn->state = CPUWORKER_STATE_IDLE;
- num_cpuworkers_busy--;
- if (conn->timestamp_created < last_rotation_time) {
- connection_mark_for_close(conn);
- num_cpuworkers--;
- spawn_enough_cpuworkers();
- } else {
- process_pending_task(conn);
- }
- return 0;
-}
-
-/** Implement a cpuworker. 'data' is an fdarray as returned by socketpair.
- * Read and writes from fdarray[1]. Reads requests, writes answers.
- *
- * Request format:
- * cpuworker_request_t.
- * Response format:
- * cpuworker_reply_t
- */
+/** Handle a reply from the worker threads. */
static void
-cpuworker_main(void *data)
+cpuworker_onion_handshake_replyfn(void *work_)
{
- /* For talking to the parent thread/process */
- tor_socket_t *fdarray = data;
- tor_socket_t fd;
-
- /* variables for onion processing */
- server_onion_keys_t onion_keys;
- cpuworker_request_t req;
+ cpuworker_job_t *job = work_;
cpuworker_reply_t rpl;
-
- fd = fdarray[1]; /* this side is ours */
- tor_free(data);
-
- setup_server_onion_keys(&onion_keys);
-
- for (;;) {
- if (read_all(fd, (void *)&req, sizeof(req), 1) != sizeof(req)) {
- log_info(LD_OR, "read request failed. Exiting.");
- goto end;
- }
- tor_assert(req.magic == CPUWORKER_REQUEST_MAGIC);
-
- memset(&rpl, 0, sizeof(rpl));
-
- if (req.task == CPUWORKER_TASK_ONION) {
- const create_cell_t *cc = &req.create_cell;
- created_cell_t *cell_out = &rpl.created_cell;
- struct timeval tv_start = {0,0}, tv_end;
- int n;
- rpl.timed = req.timed;
- rpl.started_at = req.started_at;
- rpl.handshake_type = cc->handshake_type;
- if (req.timed)
- tor_gettimeofday(&tv_start);
- n = onion_skin_server_handshake(cc->handshake_type,
- cc->onionskin, cc->handshake_len,
- &onion_keys,
- cell_out->reply,
- rpl.keys, CPATH_KEY_MATERIAL_LEN,
- rpl.rend_auth_material);
- if (n < 0) {
- /* failure */
- log_debug(LD_OR,"onion_skin_server_handshake failed.");
- memset(&rpl, 0, sizeof(rpl));
- memcpy(rpl.tag, req.tag, TAG_LEN);
- rpl.success = 0;
- } else {
- /* success */
- log_debug(LD_OR,"onion_skin_server_handshake succeeded.");
- memcpy(rpl.tag, req.tag, TAG_LEN);
- cell_out->handshake_len = n;
- switch (cc->cell_type) {
- case CELL_CREATE:
- cell_out->cell_type = CELL_CREATED; break;
- case CELL_CREATE2:
- cell_out->cell_type = CELL_CREATED2; break;
- case CELL_CREATE_FAST:
- cell_out->cell_type = CELL_CREATED_FAST; break;
- default:
- tor_assert(0);
- goto end;
- }
- rpl.success = 1;
- }
- rpl.magic = CPUWORKER_REPLY_MAGIC;
- if (req.timed) {
- struct timeval tv_diff;
- int64_t usec;
- tor_gettimeofday(&tv_end);
- timersub(&tv_end, &tv_start, &tv_diff);
- usec = ((int64_t)tv_diff.tv_sec)*1000000 + tv_diff.tv_usec;
- if (usec < 0 || usec > MAX_BELIEVABLE_ONIONSKIN_DELAY)
- rpl.n_usec = MAX_BELIEVABLE_ONIONSKIN_DELAY;
- else
- rpl.n_usec = (uint32_t) usec;
+ or_circuit_t *circ = NULL;
+
+ tor_assert(total_pending_tasks > 0);
+ --total_pending_tasks;
+
+ /* Could avoid this, but doesn't matter. */
+ memcpy(&rpl, &job->u.reply, sizeof(rpl));
+
+ tor_assert(rpl.magic == CPUWORKER_REPLY_MAGIC);
+
+ if (rpl.timed && rpl.success &&
+ rpl.handshake_type <= MAX_ONION_HANDSHAKE_TYPE) {
+ /* Time how long this request took. The handshake_type check should be
+ needless, but let's leave it in to be safe. */
+ struct timeval tv_end, tv_diff;
+ int64_t usec_roundtrip;
+ tor_gettimeofday(&tv_end);
+ timersub(&tv_end, &rpl.started_at, &tv_diff);
+ usec_roundtrip = ((int64_t)tv_diff.tv_sec)*1000000 + tv_diff.tv_usec;
+ if (usec_roundtrip >= 0 &&
+ usec_roundtrip < MAX_BELIEVABLE_ONIONSKIN_DELAY) {
+ ++onionskins_n_processed[rpl.handshake_type];
+ onionskins_usec_internal[rpl.handshake_type] += rpl.n_usec;
+ onionskins_usec_roundtrip[rpl.handshake_type] += usec_roundtrip;
+ if (onionskins_n_processed[rpl.handshake_type] >= 500000) {
+ /* Scale down every 500000 handshakes. On a busy server, that's
+ * less impressive than it sounds. */
+ onionskins_n_processed[rpl.handshake_type] /= 2;
+ onionskins_usec_internal[rpl.handshake_type] /= 2;
+ onionskins_usec_roundtrip[rpl.handshake_type] /= 2;
}
- if (write_all(fd, (void*)&rpl, sizeof(rpl), 1) != sizeof(rpl)) {
- log_err(LD_BUG,"writing response buf failed. Exiting.");
- goto end;
- }
- log_debug(LD_OR,"finished writing response.");
- } else if (req.task == CPUWORKER_TASK_SHUTDOWN) {
- log_info(LD_OR,"Clean shutdown: exiting");
- goto end;
}
- memwipe(&req, 0, sizeof(req));
- memwipe(&rpl, 0, sizeof(req));
}
- end:
- memwipe(&req, 0, sizeof(req));
- memwipe(&rpl, 0, sizeof(req));
- release_server_onion_keys(&onion_keys);
- tor_close_socket(fd);
- crypto_thread_cleanup();
- spawn_exit();
-}
-/** Launch a new cpuworker. Return 0 if we're happy, -1 if we failed.
- */
-static int
-spawn_cpuworker(void)
-{
- tor_socket_t *fdarray;
- tor_socket_t fd;
- connection_t *conn;
- int err;
-
- fdarray = tor_calloc(2, sizeof(tor_socket_t));
- if ((err = tor_socketpair(AF_UNIX, SOCK_STREAM, 0, fdarray)) < 0) {
- log_warn(LD_NET, "Couldn't construct socketpair for cpuworker: %s",
- tor_socket_strerror(-err));
- tor_free(fdarray);
- return -1;
- }
+ circ = job->circ;
- tor_assert(SOCKET_OK(fdarray[0]));
- tor_assert(SOCKET_OK(fdarray[1]));
+ log_debug(LD_OR,
+ "Unpacking cpuworker reply %p, circ=%p, success=%d",
+ job, circ, rpl.success);
- fd = fdarray[0];
- if (spawn_func(cpuworker_main, (void*)fdarray) < 0) {
- tor_close_socket(fdarray[0]);
- tor_close_socket(fdarray[1]);
- tor_free(fdarray);
- return -1;
+ if (circ->base_.magic == DEAD_CIRCUIT_MAGIC) {
+ /* The circuit was supposed to get freed while the reply was
+ * pending. Instead, it got left for us to free so that we wouldn't freak
+ * out when the job->circ field wound up pointing to nothing. */
+ log_debug(LD_OR, "Circuit died while reply was pending. Freeing memory.");
+ circ->base_.magic = 0;
+ tor_free(circ);
+ goto done_processing;
}
- log_debug(LD_OR,"just spawned a cpu worker.");
- conn = connection_new(CONN_TYPE_CPUWORKER, AF_UNIX);
+ circ->workqueue_entry = NULL;
- /* set up conn so it's got all the data we need to remember */
- conn->s = fd;
- conn->address = tor_strdup("localhost");
- tor_addr_make_unspec(&conn->addr);
-
- if (set_socket_nonblocking(fd) == -1) {
- connection_free(conn); /* this closes fd */
- return -1;
+ if (TO_CIRCUIT(circ)->marked_for_close) {
+ /* We already marked this circuit; we can't call it open. */
+ log_debug(LD_OR,"circuit is already marked.");
+ goto done_processing;
}
- if (connection_add(conn) < 0) { /* no space, forget it */
- log_warn(LD_NET,"connection_add for cpuworker failed. Giving up.");
- connection_free(conn); /* this closes fd */
- return -1;
+ if (rpl.success == 0) {
+ log_debug(LD_OR,
+ "decoding onionskin failed. "
+ "(Old key or bad software.) Closing.");
+ circuit_mark_for_close(TO_CIRCUIT(circ), END_CIRC_REASON_TORPROTOCOL);
+ goto done_processing;
}
- conn->state = CPUWORKER_STATE_IDLE;
- connection_start_reading(conn);
+ if (onionskin_answer(circ,
+ &rpl.created_cell,
+ (const char*)rpl.keys,
+ rpl.rend_auth_material) < 0) {
+ log_warn(LD_OR,"onionskin_answer failed. Closing.");
+ circuit_mark_for_close(TO_CIRCUIT(circ), END_CIRC_REASON_INTERNAL);
+ goto done_processing;
+ }
+ log_debug(LD_OR,"onionskin_answer succeeded. Yay.");
- return 0; /* success */
+ done_processing:
+ memwipe(&rpl, 0, sizeof(rpl));
+ memwipe(job, 0, sizeof(*job));
+ tor_free(job);
+ queue_pending_tasks();
}
-/** If we have too few or too many active cpuworkers, try to spawn new ones
- * or kill idle ones.
- */
-static void
-spawn_enough_cpuworkers(void)
+/** Implementation function for onion handshake requests. */
+static int
+cpuworker_onion_handshake_threadfn(void *state_, void *work_)
{
- int num_cpuworkers_needed = get_num_cpus(get_options());
- int reseed = 0;
+ worker_state_t *state = state_;
+ cpuworker_job_t *job = work_;
- if (num_cpuworkers_needed < MIN_CPUWORKERS)
- num_cpuworkers_needed = MIN_CPUWORKERS;
- if (num_cpuworkers_needed > MAX_CPUWORKERS)
- num_cpuworkers_needed = MAX_CPUWORKERS;
+ /* variables for onion processing */
+ server_onion_keys_t *onion_keys = state->onion_keys;
+ cpuworker_request_t req;
+ cpuworker_reply_t rpl;
- while (num_cpuworkers < num_cpuworkers_needed) {
- if (spawn_cpuworker() < 0) {
- log_warn(LD_GENERAL,"Cpuworker spawn failed. Will try again later.");
- return;
+ memcpy(&req, &job->u.request, sizeof(req));
+
+ tor_assert(req.magic == CPUWORKER_REQUEST_MAGIC);
+ memset(&rpl, 0, sizeof(rpl));
+
+ const create_cell_t *cc = &req.create_cell;
+ created_cell_t *cell_out = &rpl.created_cell;
+ struct timeval tv_start = {0,0}, tv_end;
+ int n;
+ rpl.timed = req.timed;
+ rpl.started_at = req.started_at;
+ rpl.handshake_type = cc->handshake_type;
+ if (req.timed)
+ tor_gettimeofday(&tv_start);
+ n = onion_skin_server_handshake(cc->handshake_type,
+ cc->onionskin, cc->handshake_len,
+ onion_keys,
+ cell_out->reply,
+ rpl.keys, CPATH_KEY_MATERIAL_LEN,
+ rpl.rend_auth_material);
+ if (n < 0) {
+ /* failure */
+ log_debug(LD_OR,"onion_skin_server_handshake failed.");
+ memset(&rpl, 0, sizeof(rpl));
+ rpl.success = 0;
+ } else {
+ /* success */
+ log_debug(LD_OR,"onion_skin_server_handshake succeeded.");
+ cell_out->handshake_len = n;
+ switch (cc->cell_type) {
+ case CELL_CREATE:
+ cell_out->cell_type = CELL_CREATED; break;
+ case CELL_CREATE2:
+ cell_out->cell_type = CELL_CREATED2; break;
+ case CELL_CREATE_FAST:
+ cell_out->cell_type = CELL_CREATED_FAST; break;
+ default:
+ tor_assert(0);
+ return WQ_RPL_SHUTDOWN;
}
- num_cpuworkers++;
- reseed++;
+ rpl.success = 1;
}
+ rpl.magic = CPUWORKER_REPLY_MAGIC;
+ if (req.timed) {
+ struct timeval tv_diff;
+ int64_t usec;
+ tor_gettimeofday(&tv_end);
+ timersub(&tv_end, &tv_start, &tv_diff);
+ usec = ((int64_t)tv_diff.tv_sec)*1000000 + tv_diff.tv_usec;
+ if (usec < 0 || usec > MAX_BELIEVABLE_ONIONSKIN_DELAY)
+ rpl.n_usec = MAX_BELIEVABLE_ONIONSKIN_DELAY;
+ else
+ rpl.n_usec = (uint32_t) usec;
+ }
+
+ memcpy(&job->u.reply, &rpl, sizeof(rpl));
- if (reseed)
- crypto_seed_weak_rng(&request_sample_rng);
+ memwipe(&req, 0, sizeof(req));
+ memwipe(&rpl, 0, sizeof(req));
+ return WQ_RPL_REPLY;
}
-/** Take a pending task from the queue and assign it to 'cpuworker'. */
+/** Take pending tasks from the queue and assign them to cpuworkers. */
static void
-process_pending_task(connection_t *cpuworker)
+queue_pending_tasks(void)
{
or_circuit_t *circ;
create_cell_t *onionskin = NULL;
- tor_assert(cpuworker);
+ while (total_pending_tasks < max_pending_tasks) {
+ circ = onion_next_task(&onionskin);
- /* for now only process onion tasks */
-
- circ = onion_next_task(&onionskin);
- if (!circ)
- return;
- if (assign_onionskin_to_cpuworker(cpuworker, circ, onionskin))
- log_warn(LD_OR,"assign_to_cpuworker failed. Ignoring.");
-}
-
-/** How long should we let a cpuworker stay busy before we give
- * up on it and decide that we have a bug or infinite loop?
- * This value is high because some servers with low memory/cpu
- * sometimes spend an hour or more swapping, and Tor starves. */
-#define CPUWORKER_BUSY_TIMEOUT (60*60*12)
+ if (!circ)
+ return;
-/** We have a bug that I can't find. Sometimes, very rarely, cpuworkers get
- * stuck in the 'busy' state, even though the cpuworker process thinks of
- * itself as idle. I don't know why. But here's a workaround to kill any
- * cpuworker that's been busy for more than CPUWORKER_BUSY_TIMEOUT.
- */
-static void
-cull_wedged_cpuworkers(void)
-{
- time_t now = time(NULL);
- smartlist_t *conns = get_connection_array();
- SMARTLIST_FOREACH_BEGIN(conns, connection_t *, conn) {
- if (!conn->marked_for_close &&
- conn->type == CONN_TYPE_CPUWORKER &&
- conn->state == CPUWORKER_STATE_BUSY_ONION &&
- conn->timestamp_lastwritten + CPUWORKER_BUSY_TIMEOUT < now) {
- log_notice(LD_BUG,
- "closing wedged cpuworker. Can somebody find the bug?");
- num_cpuworkers_busy--;
- num_cpuworkers--;
- connection_mark_for_close(conn);
- }
- } SMARTLIST_FOREACH_END(conn);
+ if (assign_onionskin_to_cpuworker(circ, onionskin))
+ log_warn(LD_OR,"assign_to_cpuworker failed. Ignoring.");
+ }
}
/** Try to tell a cpuworker to perform the public key operations necessary to
* respond to <b>onionskin</b> for the circuit <b>circ</b>.
*
- * If <b>cpuworker</b> is defined, assert that he's idle, and use him. Else,
- * look for an idle cpuworker and use him. If none idle, queue task onto the
- * pending onion list and return. Return 0 if we successfully assign the
- * task, or -1 on failure.
+ * Return 0 if we successfully assign the task, or -1 on failure.
*/
int
-assign_onionskin_to_cpuworker(connection_t *cpuworker,
- or_circuit_t *circ,
+assign_onionskin_to_cpuworker(or_circuit_t *circ,
create_cell_t *onionskin)
{
+ workqueue_entry_t *queue_entry;
+ cpuworker_job_t *job;
cpuworker_request_t req;
- time_t now = approx_time();
- static time_t last_culled_cpuworkers = 0;
int should_time;
- /* Checking for wedged cpuworkers requires a linear search over all
- * connections, so let's do it only once a minute.
- */
-#define CULL_CPUWORKERS_INTERVAL 60
+ tor_assert(threadpool);
- if (last_culled_cpuworkers + CULL_CPUWORKERS_INTERVAL <= now) {
- cull_wedged_cpuworkers();
- spawn_enough_cpuworkers();
- last_culled_cpuworkers = now;
+ if (!circ->p_chan) {
+ log_info(LD_OR,"circ->p_chan gone. Failing circ.");
+ tor_free(onionskin);
+ return -1;
}
- if (1) {
- if (num_cpuworkers_busy == num_cpuworkers) {
- log_debug(LD_OR,"No idle cpuworkers. Queuing.");
- if (onion_pending_add(circ, onionskin) < 0) {
- tor_free(onionskin);
- return -1;
- }
- return 0;
- }
-
- if (!cpuworker)
- cpuworker = connection_get_by_type_state(CONN_TYPE_CPUWORKER,
- CPUWORKER_STATE_IDLE);
-
- tor_assert(cpuworker);
-
- if (!circ->p_chan) {
- log_info(LD_OR,"circ->p_chan gone. Failing circ.");
+ if (total_pending_tasks >= max_pending_tasks) {
+ log_debug(LD_OR,"No idle cpuworkers. Queuing.");
+ if (onion_pending_add(circ, onionskin) < 0) {
tor_free(onionskin);
return -1;
}
+ return 0;
+ }
- if (connection_or_digest_is_known_relay(circ->p_chan->identity_digest))
- rep_hist_note_circuit_handshake_assigned(onionskin->handshake_type);
+ if (connection_or_digest_is_known_relay(circ->p_chan->identity_digest))
+ rep_hist_note_circuit_handshake_assigned(onionskin->handshake_type);
- should_time = should_time_request(onionskin->handshake_type);
- memset(&req, 0, sizeof(req));
- req.magic = CPUWORKER_REQUEST_MAGIC;
- tag_pack(req.tag, circ->p_chan->global_identifier,
- circ->p_circ_id);
- req.timed = should_time;
+ should_time = should_time_request(onionskin->handshake_type);
+ memset(&req, 0, sizeof(req));
+ req.magic = CPUWORKER_REQUEST_MAGIC;
+ req.timed = should_time;
- cpuworker->state = CPUWORKER_STATE_BUSY_ONION;
- /* touch the lastwritten timestamp, since that's how we check to
- * see how long it's been since we asked the question, and sometimes
- * we check before the first call to connection_handle_write(). */
- cpuworker->timestamp_lastwritten = now;
- num_cpuworkers_busy++;
+ memcpy(&req.create_cell, onionskin, sizeof(create_cell_t));
- req.task = CPUWORKER_TASK_ONION;
- memcpy(&req.create_cell, onionskin, sizeof(create_cell_t));
+ tor_free(onionskin);
- tor_free(onionskin);
+ if (should_time)
+ tor_gettimeofday(&req.started_at);
- if (should_time)
- tor_gettimeofday(&req.started_at);
+ job = tor_malloc_zero(sizeof(cpuworker_job_t));
+ job->circ = circ;
+ memcpy(&job->u.request, &req, sizeof(req));
+ memwipe(&req, 0, sizeof(req));
- connection_write_to_buf((void*)&req, sizeof(req), cpuworker);
- memwipe(&req, 0, sizeof(req));
+ ++total_pending_tasks;
+ queue_entry = threadpool_queue_work(threadpool,
+ cpuworker_onion_handshake_threadfn,
+ cpuworker_onion_handshake_replyfn,
+ job);
+ if (!queue_entry) {
+ log_warn(LD_BUG, "Couldn't queue work on threadpool");
+ tor_free(job);
+ return -1;
}
+
+ log_debug(LD_OR, "Queued task %p (qe=%p, circ=%p)",
+ job, queue_entry, job->circ);
+
+ circ->workqueue_entry = queue_entry;
+
return 0;
}
+/** If <b>circ</b> has a pending handshake that hasn't been processed yet,
+ * remove it from the worker queue. */
+void
+cpuworker_cancel_circ_handshake(or_circuit_t *circ)
+{
+ cpuworker_job_t *job;
+ if (circ->workqueue_entry == NULL)
+ return;
+
+ job = workqueue_entry_cancel(circ->workqueue_entry);
+ if (job) {
+ /* It successfully cancelled. */
+ memwipe(job, 0xe0, sizeof(*job));
+ tor_free(job);
+ tor_assert(total_pending_tasks > 0);
+ --total_pending_tasks;
+ /* if (!job), this is done in cpuworker_onion_handshake_replyfn. */
+ circ->workqueue_entry = NULL;
+ }
+}
+
diff --git a/src/or/cpuworker.h b/src/or/cpuworker.h
index 2a2b37a975..70a595e472 100644
--- a/src/or/cpuworker.h
+++ b/src/or/cpuworker.h
@@ -13,19 +13,17 @@
#define TOR_CPUWORKER_H
void cpu_init(void);
-void cpuworkers_rotate(void);
-int connection_cpu_finished_flushing(connection_t *conn);
-int connection_cpu_reached_eof(connection_t *conn);
-int connection_cpu_process_inbuf(connection_t *conn);
+void cpuworkers_rotate_keyinfo(void);
+
struct create_cell_t;
-int assign_onionskin_to_cpuworker(connection_t *cpuworker,
- or_circuit_t *circ,
+int assign_onionskin_to_cpuworker(or_circuit_t *circ,
struct create_cell_t *onionskin);
uint64_t estimated_usec_for_onionskins(uint32_t n_requests,
uint16_t onionskin_type);
void cpuworker_log_onionskin_overhead(int severity, int onionskin_type,
const char *onionskin_type_name);
+void cpuworker_cancel_circ_handshake(or_circuit_t *circ);
#endif
diff --git a/src/or/directory.c b/src/or/directory.c
index 7b4020080c..85da97fce1 100644
--- a/src/or/directory.c
+++ b/src/or/directory.c
@@ -64,8 +64,6 @@ static void directory_send_command(dir_connection_t *conn,
time_t if_modified_since);
static int directory_handle_command(dir_connection_t *conn);
static int body_is_plausible(const char *body, size_t body_len, int purpose);
-static int purpose_needs_anonymity(uint8_t dir_purpose,
- uint8_t router_purpose);
static char *http_get_header(const char *headers, const char *which);
static void http_set_address_origin(const char *headers, connection_t *conn);
static void connection_dir_download_routerdesc_failed(dir_connection_t *conn);
@@ -120,7 +118,7 @@ static void directory_initiate_command_rend(const tor_addr_t *addr,
/** Return true iff the directory purpose <b>dir_purpose</b> (and if it's
* fetching descriptors, it's fetching them for <b>router_purpose</b>)
* must use an anonymous connection to a directory. */
-static int
+STATIC int
purpose_needs_anonymity(uint8_t dir_purpose, uint8_t router_purpose)
{
if (get_options()->AllDirActionsPrivate)
@@ -198,6 +196,46 @@ dir_conn_purpose_to_string(int purpose)
return "(unknown)";
}
+/** Return the requisite directory information types. */
+STATIC dirinfo_type_t
+dir_fetch_type(int dir_purpose, int router_purpose, const char *resource)
+{
+ dirinfo_type_t type;
+ switch (dir_purpose) {
+ case DIR_PURPOSE_FETCH_EXTRAINFO:
+ type = EXTRAINFO_DIRINFO;
+ if (router_purpose == ROUTER_PURPOSE_BRIDGE)
+ type |= BRIDGE_DIRINFO;
+ else
+ type |= V3_DIRINFO;
+ break;
+ case DIR_PURPOSE_FETCH_SERVERDESC:
+ if (router_purpose == ROUTER_PURPOSE_BRIDGE)
+ type = BRIDGE_DIRINFO;
+ else
+ type = V3_DIRINFO;
+ break;
+ case DIR_PURPOSE_FETCH_STATUS_VOTE:
+ case DIR_PURPOSE_FETCH_DETACHED_SIGNATURES:
+ case DIR_PURPOSE_FETCH_CERTIFICATE:
+ type = V3_DIRINFO;
+ break;
+ case DIR_PURPOSE_FETCH_CONSENSUS:
+ type = V3_DIRINFO;
+ if (resource && !strcmp(resource, "microdesc"))
+ type |= MICRODESC_DIRINFO;
+ break;
+ case DIR_PURPOSE_FETCH_MICRODESC:
+ type = MICRODESC_DIRINFO;
+ break;
+ default:
+ log_warn(LD_BUG, "Unexpected purpose %d", (int)dir_purpose);
+ type = NO_DIRINFO;
+ break;
+ }
+ return type;
+}
+
/** Return true iff <b>identity_digest</b> is the digest of a router which
* says that it caches extrainfos. (If <b>is_authority</b> we always
* believe that to be true.) */
@@ -386,47 +424,21 @@ directory_pick_generic_dirserver(dirinfo_type_t type, int pds_flags,
* Use <b>pds_flags</b> as arguments to router_pick_directory_server()
* or router_pick_trusteddirserver().
*/
-void
-directory_get_from_dirserver(uint8_t dir_purpose, uint8_t router_purpose,
- const char *resource, int pds_flags)
+MOCK_IMPL(void, directory_get_from_dirserver, (uint8_t dir_purpose,
+ uint8_t router_purpose,
+ const char *resource,
+ int pds_flags))
{
const routerstatus_t *rs = NULL;
const or_options_t *options = get_options();
int prefer_authority = directory_fetches_from_authorities(options);
int require_authority = 0;
int get_via_tor = purpose_needs_anonymity(dir_purpose, router_purpose);
- dirinfo_type_t type;
+ dirinfo_type_t type = dir_fetch_type(dir_purpose, router_purpose, resource);
time_t if_modified_since = 0;
- /* FFFF we could break this switch into its own function, and call
- * it elsewhere in directory.c. -RD */
- switch (dir_purpose) {
- case DIR_PURPOSE_FETCH_EXTRAINFO:
- type = EXTRAINFO_DIRINFO |
- (router_purpose == ROUTER_PURPOSE_BRIDGE ? BRIDGE_DIRINFO :
- V3_DIRINFO);
- break;
- case DIR_PURPOSE_FETCH_SERVERDESC:
- type = (router_purpose == ROUTER_PURPOSE_BRIDGE ? BRIDGE_DIRINFO :
- V3_DIRINFO);
- break;
- case DIR_PURPOSE_FETCH_STATUS_VOTE:
- case DIR_PURPOSE_FETCH_DETACHED_SIGNATURES:
- case DIR_PURPOSE_FETCH_CERTIFICATE:
- type = V3_DIRINFO;
- break;
- case DIR_PURPOSE_FETCH_CONSENSUS:
- type = V3_DIRINFO;
- if (resource && !strcmp(resource,"microdesc"))
- type |= MICRODESC_DIRINFO;
- break;
- case DIR_PURPOSE_FETCH_MICRODESC:
- type = MICRODESC_DIRINFO;
- break;
- default:
- log_warn(LD_BUG, "Unexpected purpose %d", (int)dir_purpose);
- return;
- }
+ if (type == NO_DIRINFO)
+ return;
if (dir_purpose == DIR_PURPOSE_FETCH_CONSENSUS) {
int flav = FLAV_NS;
@@ -526,20 +538,16 @@ directory_get_from_dirserver(uint8_t dir_purpose, uint8_t router_purpose,
/* */
rs = directory_pick_generic_dirserver(type, pds_flags,
dir_purpose);
- if (!rs) {
- /*XXXX024 I'm pretty sure this can never do any good, since
- * rs isn't set. */
+ if (!rs)
get_via_tor = 1; /* last resort: try routing it via Tor */
- }
}
}
- } else { /* get_via_tor */
+ }
+
+ if (get_via_tor) {
/* Never use fascistfirewall; we're going via Tor. */
- if (1) {
- /* anybody with a non-zero dirport will do. Disregard firewalls. */
- pds_flags |= PDS_IGNORE_FASCISTFIREWALL;
- rs = router_pick_directory_server(type, pds_flags);
- }
+ pds_flags |= PDS_IGNORE_FASCISTFIREWALL;
+ rs = router_pick_directory_server(type, pds_flags);
}
/* If we have any hope of building an indirect conn, we know some router
@@ -1271,7 +1279,8 @@ directory_send_command(dir_connection_t *conn,
return;
}
- if (strlen(proxystring) + strlen(url) >= 4096) {
+ /* warn in the non-tunneled case */
+ if (direct && (strlen(proxystring) + strlen(url) >= 4096)) {
log_warn(LD_BUG,
"Squid does not like URLs longer than 4095 bytes, and this "
"one is %d bytes long: %s%s",
@@ -2090,17 +2099,27 @@ connection_dir_client_reached_eof(dir_connection_t *conn)
if (conn->base_.purpose == DIR_PURPOSE_FETCH_RENDDESC_V2) {
#define SEND_HS_DESC_FAILED_EVENT(reason) ( \
- control_event_hs_descriptor_failed(conn->rend_data, \
+ control_event_hs_descriptor_failed(conn->rend_data->onion_address, \
+ conn->rend_data->auth_type, \
conn->identity_digest, \
reason) )
+ #define SEND_HS_DESC_FAILED_CONTENT() ( \
+ control_event_hs_descriptor_content(conn->rend_data->onion_address, \
+ conn->requested_resource, \
+ conn->identity_digest, \
+ NULL) )
tor_assert(conn->rend_data);
log_info(LD_REND,"Received rendezvous descriptor (size %d, status %d "
"(%s))",
(int)body_len, status_code, escaped(reason));
switch (status_code) {
case 200:
+ {
+ rend_cache_entry_t *entry = NULL;
+
switch (rend_cache_store_v2_desc_as_client(body,
- conn->requested_resource, conn->rend_data)) {
+ conn->requested_resource, conn->rend_data,
+ &entry)) {
case RCS_BADDESC:
case RCS_NOTDIR: /* Impossible */
log_warn(LD_REND,"Fetching v2 rendezvous descriptor failed. "
@@ -2108,25 +2127,41 @@ connection_dir_client_reached_eof(dir_connection_t *conn)
/* We'll retry when connection_about_to_close_connection()
* cleans this dir conn up. */
SEND_HS_DESC_FAILED_EVENT("BAD_DESC");
+ SEND_HS_DESC_FAILED_CONTENT();
break;
case RCS_OKAY:
default:
+ {
+ char service_id[REND_SERVICE_ID_LEN_BASE32 + 1];
+ /* Should never be NULL here for an OKAY returned code. */
+ tor_assert(entry);
+ rend_get_service_id(entry->parsed->pk, service_id);
+
/* success. notify pending connections about this. */
log_info(LD_REND, "Successfully fetched v2 rendezvous "
"descriptor.");
- control_event_hs_descriptor_received(conn->rend_data,
+ control_event_hs_descriptor_received(service_id,
+ conn->rend_data->auth_type,
conn->identity_digest);
+ control_event_hs_descriptor_content(service_id,
+ conn->requested_resource,
+ conn->identity_digest,
+ body);
conn->base_.purpose = DIR_PURPOSE_HAS_FETCHED_RENDDESC_V2;
- rend_client_desc_trynow(conn->rend_data->onion_address);
+ rend_client_desc_trynow(service_id);
+ memwipe(service_id, 0, sizeof(service_id));
break;
+ }
}
break;
+ }
case 404:
/* Not there. We'll retry when
* connection_about_to_close_connection() cleans this conn up. */
log_info(LD_REND,"Fetching v2 rendezvous descriptor failed: "
"Retrying at another directory.");
SEND_HS_DESC_FAILED_EVENT("NOT_FOUND");
+ SEND_HS_DESC_FAILED_CONTENT();
break;
case 400:
log_warn(LD_REND, "Fetching v2 rendezvous descriptor failed: "
@@ -2134,6 +2169,7 @@ connection_dir_client_reached_eof(dir_connection_t *conn)
"v2 rendezvous query? Retrying at another directory.",
escaped(reason));
SEND_HS_DESC_FAILED_EVENT("QUERY_REJECTED");
+ SEND_HS_DESC_FAILED_CONTENT();
break;
default:
log_warn(LD_REND, "Fetching v2 rendezvous descriptor failed: "
@@ -2143,11 +2179,15 @@ connection_dir_client_reached_eof(dir_connection_t *conn)
status_code, escaped(reason), conn->base_.address,
conn->base_.port);
SEND_HS_DESC_FAILED_EVENT("UNEXPECTED");
+ SEND_HS_DESC_FAILED_CONTENT();
break;
}
}
if (conn->base_.purpose == DIR_PURPOSE_UPLOAD_RENDDESC_V2) {
+ #define SEND_HS_DESC_UPLOAD_FAILED_EVENT(reason) ( \
+ control_event_hs_descriptor_upload_failed(conn->identity_digest, \
+ reason) )
log_info(LD_REND,"Uploaded rendezvous descriptor (status %d "
"(%s))",
status_code, escaped(reason));
@@ -2156,17 +2196,20 @@ connection_dir_client_reached_eof(dir_connection_t *conn)
log_info(LD_REND,
"Uploading rendezvous descriptor: finished with status "
"200 (%s)", escaped(reason));
+ control_event_hs_descriptor_uploaded(conn->identity_digest);
break;
case 400:
log_warn(LD_REND,"http status 400 (%s) response from dirserver "
"'%s:%d'. Malformed rendezvous descriptor?",
escaped(reason), conn->base_.address, conn->base_.port);
+ SEND_HS_DESC_UPLOAD_FAILED_EVENT("UPLOAD_REJECTED");
break;
default:
log_warn(LD_REND,"http status %d (%s) response unexpected (server "
"'%s:%d').",
status_code, escaped(reason), conn->base_.address,
conn->base_.port);
+ SEND_HS_DESC_UPLOAD_FAILED_EVENT("UNEXPECTED");
break;
}
}
@@ -2201,12 +2244,15 @@ connection_dir_reached_eof(dir_connection_t *conn)
*/
#define MAX_DIRECTORY_OBJECT_SIZE (10*(1<<20))
+#define MAX_VOTE_DL_SIZE (MAX_DIRECTORY_OBJECT_SIZE * 5)
+
/** Read handler for directory connections. (That's connections <em>to</em>
* directory servers and connections <em>at</em> directory servers.)
*/
int
connection_dir_process_inbuf(dir_connection_t *conn)
{
+ size_t max_size;
tor_assert(conn);
tor_assert(conn->base_.type == CONN_TYPE_DIR);
@@ -2225,7 +2271,11 @@ connection_dir_process_inbuf(dir_connection_t *conn)
return 0;
}
- if (connection_get_inbuf_len(TO_CONN(conn)) > MAX_DIRECTORY_OBJECT_SIZE) {
+ max_size =
+ (TO_CONN(conn)->purpose == DIR_PURPOSE_FETCH_STATUS_VOTE) ?
+ MAX_VOTE_DL_SIZE : MAX_DIRECTORY_OBJECT_SIZE;
+
+ if (connection_get_inbuf_len(TO_CONN(conn)) > max_size) {
log_warn(LD_HTTP,
"Too much data received from directory connection (%s): "
"denial of service attempt, or you need to upgrade?",
@@ -3050,7 +3100,7 @@ directory_handle_command_get(dir_connection_t *conn, const char *headers,
/* Handle v2 rendezvous descriptor fetch request. */
const char *descp;
const char *query = url + strlen("/tor/rendezvous2/");
- if (strlen(query) == REND_DESC_ID_V2_LEN_BASE32) {
+ if (rend_valid_descriptor_id(query)) {
log_info(LD_REND, "Got a v2 rendezvous descriptor request for ID '%s'",
safe_str(escaped(query)));
switch (rend_cache_lookup_v2_desc_as_dir(query, &descp)) {
diff --git a/src/or/directory.h b/src/or/directory.h
index 1458ad2cc7..4899eb5c8c 100644
--- a/src/or/directory.h
+++ b/src/or/directory.h
@@ -16,9 +16,10 @@ int directories_have_accepted_server_descriptor(void);
void directory_post_to_dirservers(uint8_t dir_purpose, uint8_t router_purpose,
dirinfo_type_t type, const char *payload,
size_t payload_len, size_t extrainfo_len);
-void directory_get_from_dirserver(uint8_t dir_purpose, uint8_t router_purpose,
- const char *resource,
- int pds_flags);
+MOCK_DECL(void, directory_get_from_dirserver, (uint8_t dir_purpose,
+ uint8_t router_purpose,
+ const char *resource,
+ int pds_flags));
void directory_get_from_all_authorities(uint8_t dir_purpose,
uint8_t router_purpose,
const char *resource);
@@ -120,7 +121,12 @@ int download_status_get_n_failures(const download_status_t *dls);
#ifdef TOR_UNIT_TESTS
/* Used only by directory.c and test_dir.c */
+
STATIC int parse_http_url(const char *headers, char **url);
+STATIC int purpose_needs_anonymity(uint8_t dir_purpose,
+ uint8_t router_purpose);
+STATIC dirinfo_type_t dir_fetch_type(int dir_purpose, int router_purpose,
+ const char *resource);
#endif
#endif
diff --git a/src/or/dirserv.c b/src/or/dirserv.c
index b694f8af77..a024be8342 100644
--- a/src/or/dirserv.c
+++ b/src/or/dirserv.c
@@ -285,9 +285,9 @@ dirserv_get_status_impl(const char *id_digest, const char *nickname,
strmap_size(fingerprint_list->fp_by_name),
digestmap_size(fingerprint_list->status_by_digest));
- /* Versions before Tor 0.2.3.16-alpha are too old to support, and are
+ /* Versions before Tor 0.2.4.18-rc are too old to support, and are
* missing some important security fixes too. Disable them. */
- if (platform && !tor_version_as_new_as(platform,"0.2.3.16-alpha")) {
+ if (platform && !tor_version_as_new_as(platform,"0.2.4.18-rc")) {
if (msg)
*msg = "Tor version is insecure or unsupported. Please upgrade!";
return FP_REJECT;
@@ -537,7 +537,8 @@ dirserv_add_descriptor(routerinfo_t *ri, const char **msg, const char *source)
was_router_added_t r;
routerinfo_t *ri_old;
char *desc, *nickname;
- size_t desclen = 0;
+ const size_t desclen = ri->cache_info.signed_descriptor_len +
+ ri->cache_info.annotations_len;
*msg = NULL;
/* If it's too big, refuse it now. Otherwise we'll cache it all over the
@@ -551,7 +552,7 @@ dirserv_add_descriptor(routerinfo_t *ri, const char **msg, const char *source)
*msg = "Router descriptor was too large.";
control_event_or_authdir_new_descriptor("REJECTED",
ri->cache_info.signed_descriptor_body,
- ri->cache_info.signed_descriptor_len, *msg);
+ desclen, *msg);
routerinfo_free(ri);
return ROUTER_AUTHDIR_REJECTS;
}
@@ -572,14 +573,13 @@ dirserv_add_descriptor(routerinfo_t *ri, const char **msg, const char *source)
"the last one with this identity.";
control_event_or_authdir_new_descriptor("DROPPED",
ri->cache_info.signed_descriptor_body,
- ri->cache_info.signed_descriptor_len, *msg);
+ desclen, *msg);
routerinfo_free(ri);
return ROUTER_IS_ALREADY_KNOWN;
}
/* Make a copy of desc, since router_add_to_routerlist might free
* ri and its associated signed_descriptor_t. */
- desclen = ri->cache_info.signed_descriptor_len;
desc = tor_strndup(ri->cache_info.signed_descriptor_body, desclen);
nickname = tor_strdup(ri->nickname);
@@ -1305,13 +1305,6 @@ dirserv_thinks_router_is_hs_dir(const routerinfo_t *router,
else
uptime = real_uptime(router, now);
- /* XXX We shouldn't need to check dir_port, but we do because of
- * bug 1693. In the future, once relays set wants_to_be_hs_dir
- * correctly, we can revert to only checking dir_port if router's
- * version is too old. */
- /* XXX Unfortunately, we need to keep checking dir_port until all
- * *clients* suffering from bug 2722 are obsolete. The first version
- * to fix the bug was 0.2.2.25-alpha. */
return (router->wants_to_be_hs_dir && router->dir_port &&
uptime >= get_options()->MinUptimeHidServDirectoryV2 &&
router_is_active(router, node, now));
@@ -1434,7 +1427,7 @@ dirserv_compute_performance_thresholds(routerlist_t *rl,
/* The 12.5th percentile bandwidth is fast. */
fast_bandwidth_kb = find_nth_uint32(bandwidths_kb, n_active, n_active/8);
/* (Now bandwidths is sorted.) */
- if (fast_bandwidth_kb < ROUTER_REQUIRED_MIN_BANDWIDTH/(2 * 1000))
+ if (fast_bandwidth_kb < RELAY_REQUIRED_MIN_BANDWIDTH/(2 * 1000))
fast_bandwidth_kb = bandwidths_kb[n_active/4];
guard_bandwidth_including_exits_kb =
third_quartile_uint32(bandwidths_kb, n_active);
@@ -1922,6 +1915,13 @@ routerstatus_format_entry(const routerstatus_t *rs, const char *version,
smartlist_add_asprintf(chunks,
" Measured=%d", vrs->measured_bw_kb);
}
+ /* Write down guardfraction information if we have it. */
+ if (format == NS_V3_VOTE && vrs && vrs->status.has_guardfraction) {
+ smartlist_add_asprintf(chunks,
+ " GuardFraction=%d",
+ vrs->status.guardfraction_percentage);
+ }
+
smartlist_add(chunks, tor_strdup("\n"));
if (desc) {
@@ -2151,6 +2151,319 @@ clear_status_flags_on_sybil(routerstatus_t *rs)
* forget to add it to this clause. */
}
+/** The guardfraction of the guard with identity fingerprint <b>guard_id</b>
+ * is <b>guardfraction_percentage</b>. See if we have a vote routerstatus for
+ * this guard in <b>vote_routerstatuses</b>, and if we do, register the
+ * information to it.
+ *
+ * Return 1 if we applied the information and 0 if we couldn't find a
+ * matching guard.
+ *
+ * Requires that <b>vote_routerstatuses</b> be sorted.
+ */
+static int
+guardfraction_line_apply(const char *guard_id,
+ uint32_t guardfraction_percentage,
+ smartlist_t *vote_routerstatuses)
+{
+ vote_routerstatus_t *vrs = NULL;
+
+ tor_assert(vote_routerstatuses);
+
+ vrs = smartlist_bsearch(vote_routerstatuses, guard_id,
+ compare_digest_to_vote_routerstatus_entry);
+
+ if (!vrs) {
+ return 0;
+ }
+
+ vrs->status.has_guardfraction = 1;
+ vrs->status.guardfraction_percentage = guardfraction_percentage;
+
+ return 1;
+}
+
+/* Given a guard line from a guardfraction file, parse it and register
+ * its information to <b>vote_routerstatuses</b>.
+ *
+ * Return:
+ * * 1 if the line was proper and its information got registered.
+ * * 0 if the line was proper but no currently active guard was found
+ * to register the guardfraction information to.
+ * * -1 if the line could not be parsed and set <b>err_msg</b> to a
+ newly allocated string containing the error message.
+ */
+static int
+guardfraction_file_parse_guard_line(const char *guard_line,
+ smartlist_t *vote_routerstatuses,
+ char **err_msg)
+{
+ char guard_id[DIGEST_LEN];
+ uint32_t guardfraction;
+ char *inputs_tmp = NULL;
+ int num_ok = 1;
+
+ smartlist_t *sl = smartlist_new();
+ int retval = -1;
+
+ tor_assert(err_msg);
+
+ /* guard_line should contain something like this:
+ <hex digest> <guardfraction> <appearances> */
+ smartlist_split_string(sl, guard_line, " ",
+ SPLIT_SKIP_SPACE|SPLIT_IGNORE_BLANK, 3);
+ if (smartlist_len(sl) < 3) {
+ tor_asprintf(err_msg, "bad line '%s'", guard_line);
+ goto done;
+ }
+
+ inputs_tmp = smartlist_get(sl, 0);
+ if (strlen(inputs_tmp) != HEX_DIGEST_LEN ||
+ base16_decode(guard_id, DIGEST_LEN, inputs_tmp, HEX_DIGEST_LEN)) {
+ tor_asprintf(err_msg, "bad digest '%s'", inputs_tmp);
+ goto done;
+ }
+
+ inputs_tmp = smartlist_get(sl, 1);
+ /* Guardfraction is an integer in [0, 100]. */
+ guardfraction =
+ (uint32_t) tor_parse_long(inputs_tmp, 10, 0, 100, &num_ok, NULL);
+ if (!num_ok) {
+ tor_asprintf(err_msg, "wrong percentage '%s'", inputs_tmp);
+ goto done;
+ }
+
+ /* If routerstatuses were provided, apply this info to actual routers. */
+ if (vote_routerstatuses) {
+ retval = guardfraction_line_apply(guard_id, guardfraction,
+ vote_routerstatuses);
+ } else {
+ retval = 0; /* If we got this far, line was correctly formatted. */
+ }
+
+ done:
+
+ SMARTLIST_FOREACH(sl, char *, cp, tor_free(cp));
+ smartlist_free(sl);
+
+ return retval;
+}
+
+/** Given an inputs line from a guardfraction file, parse it and
+ * register its information to <b>total_consensuses</b> and
+ * <b>total_days</b>.
+ *
+ * Return 0 if it parsed well. Return -1 if there was an error, and
+ * set <b>err_msg</b> to a newly allocated string containing the
+ * error message.
+ */
+static int
+guardfraction_file_parse_inputs_line(const char *inputs_line,
+ int *total_consensuses,
+ int *total_days,
+ char **err_msg)
+{
+ int retval = -1;
+ char *inputs_tmp = NULL;
+ int num_ok = 1;
+ smartlist_t *sl = smartlist_new();
+
+ tor_assert(err_msg);
+
+ /* Second line is inputs information:
+ * n-inputs <total_consensuses> <total_days>. */
+ smartlist_split_string(sl, inputs_line, " ",
+ SPLIT_SKIP_SPACE|SPLIT_IGNORE_BLANK, 3);
+ if (smartlist_len(sl) < 2) {
+ tor_asprintf(err_msg, "incomplete line '%s'", inputs_line);
+ goto done;
+ }
+
+ inputs_tmp = smartlist_get(sl, 0);
+ *total_consensuses =
+ (int) tor_parse_long(inputs_tmp, 10, 0, INT_MAX, &num_ok, NULL);
+ if (!num_ok) {
+ tor_asprintf(err_msg, "unparseable consensus '%s'", inputs_tmp);
+ goto done;
+ }
+
+ inputs_tmp = smartlist_get(sl, 1);
+ *total_days =
+ (int) tor_parse_long(inputs_tmp, 10, 0, INT_MAX, &num_ok, NULL);
+ if (!num_ok) {
+ tor_asprintf(err_msg, "unparseable days '%s'", inputs_tmp);
+ goto done;
+ }
+
+ retval = 0;
+
+ done:
+ SMARTLIST_FOREACH(sl, char *, cp, tor_free(cp));
+ smartlist_free(sl);
+
+ return retval;
+}
+
+/* Maximum age of a guardfraction file that we are willing to accept. */
+#define MAX_GUARDFRACTION_FILE_AGE (7*24*60*60) /* approx a week */
+
+/** Static strings of guardfraction files. */
+#define GUARDFRACTION_DATE_STR "written-at"
+#define GUARDFRACTION_INPUTS "n-inputs"
+#define GUARDFRACTION_GUARD "guard-seen"
+#define GUARDFRACTION_VERSION "guardfraction-file-version"
+
+/** Given a guardfraction file in a string, parse it and register the
+ * guardfraction information to the provided vote routerstatuses.
+ *
+ * This is the rough format of the guardfraction file:
+ *
+ * guardfraction-file-version 1
+ * written-at <date and time>
+ * n-inputs <number of consesuses parsed> <number of days considered>
+ *
+ * guard-seen <fpr 1> <guardfraction percentage> <consensus appearances>
+ * guard-seen <fpr 2> <guardfraction percentage> <consensus appearances>
+ * guard-seen <fpr 3> <guardfraction percentage> <consensus appearances>
+ * guard-seen <fpr 4> <guardfraction percentage> <consensus appearances>
+ * guard-seen <fpr 5> <guardfraction percentage> <consensus appearances>
+ * ...
+ *
+ * Return -1 if the parsing failed and 0 if it went smoothly. Parsing
+ * should tolerate errors in all lines but the written-at header.
+ */
+STATIC int
+dirserv_read_guardfraction_file_from_str(const char *guardfraction_file_str,
+ smartlist_t *vote_routerstatuses)
+{
+ config_line_t *front=NULL, *line;
+ int ret_tmp;
+ int retval = -1;
+ int current_line_n = 0; /* line counter for better log messages */
+
+ /* Guardfraction info to be parsed */
+ int total_consensuses = 0;
+ int total_days = 0;
+
+ /* Stats */
+ int guards_read_n = 0;
+ int guards_applied_n = 0;
+
+ /* Parse file and split it in lines */
+ ret_tmp = config_get_lines(guardfraction_file_str, &front, 0);
+ if (ret_tmp < 0) {
+ log_warn(LD_CONFIG, "Error reading from guardfraction file");
+ goto done;
+ }
+
+ /* Sort routerstatuses (needed later when applying guardfraction info) */
+ if (vote_routerstatuses)
+ smartlist_sort(vote_routerstatuses, compare_vote_routerstatus_entries);
+
+ for (line = front; line; line=line->next) {
+ current_line_n++;
+
+ if (!strcmp(line->key, GUARDFRACTION_VERSION)) {
+ int num_ok = 1;
+ unsigned int version;
+
+ version =
+ (unsigned int) tor_parse_long(line->value,
+ 10, 0, INT_MAX, &num_ok, NULL);
+
+ if (!num_ok || version != 1) {
+ log_warn(LD_GENERAL, "Got unknown guardfraction version %d.", version);
+ goto done;
+ }
+ } else if (!strcmp(line->key, GUARDFRACTION_DATE_STR)) {
+ time_t file_written_at;
+ time_t now = time(NULL);
+
+ /* First line is 'written-at <date>' */
+ if (parse_iso_time(line->value, &file_written_at) < 0) {
+ log_warn(LD_CONFIG, "Guardfraction:%d: Bad date '%s'. Ignoring",
+ current_line_n, line->value);
+ goto done; /* don't tolerate failure here. */
+ }
+ if (file_written_at < now - MAX_GUARDFRACTION_FILE_AGE) {
+ log_warn(LD_CONFIG, "Guardfraction:%d: was written very long ago '%s'",
+ current_line_n, line->value);
+ goto done; /* don't tolerate failure here. */
+ }
+ } else if (!strcmp(line->key, GUARDFRACTION_INPUTS)) {
+ char *err_msg = NULL;
+
+ if (guardfraction_file_parse_inputs_line(line->value,
+ &total_consensuses,
+ &total_days,
+ &err_msg) < 0) {
+ log_warn(LD_CONFIG, "Guardfraction:%d: %s",
+ current_line_n, err_msg);
+ tor_free(err_msg);
+ continue;
+ }
+
+ } else if (!strcmp(line->key, GUARDFRACTION_GUARD)) {
+ char *err_msg = NULL;
+
+ ret_tmp = guardfraction_file_parse_guard_line(line->value,
+ vote_routerstatuses,
+ &err_msg);
+ if (ret_tmp < 0) { /* failed while parsing the guard line */
+ log_warn(LD_CONFIG, "Guardfraction:%d: %s",
+ current_line_n, err_msg);
+ tor_free(err_msg);
+ continue;
+ }
+
+ /* Successfully parsed guard line. Check if it was applied properly. */
+ guards_read_n++;
+ if (ret_tmp > 0) {
+ guards_applied_n++;
+ }
+ } else {
+ log_warn(LD_CONFIG, "Unknown guardfraction line %d (%s %s)",
+ current_line_n, line->key, line->value);
+ }
+ }
+
+ retval = 0;
+
+ log_info(LD_CONFIG,
+ "Successfully parsed guardfraction file with %d consensuses over "
+ "%d days. Parsed %d nodes and applied %d of them%s.",
+ total_consensuses, total_days, guards_read_n, guards_applied_n,
+ vote_routerstatuses ? "" : " (no routerstatus provided)" );
+
+ done:
+ config_free_lines(front);
+
+ if (retval < 0) {
+ return retval;
+ } else {
+ return guards_read_n;
+ }
+}
+
+/** Read a guardfraction file at <b>fname</b> and load all its
+ * information to <b>vote_routerstatuses</b>. */
+int
+dirserv_read_guardfraction_file(const char *fname,
+ smartlist_t *vote_routerstatuses)
+{
+ char *guardfraction_file_str;
+
+ /* Read file to a string */
+ guardfraction_file_str = read_file_to_str(fname, RFTS_IGNORE_MISSING, NULL);
+ if (!guardfraction_file_str) {
+ log_warn(LD_FS, "Cannot open guardfraction file '%s'. Failing.", fname);
+ return -1;
+ }
+
+ return dirserv_read_guardfraction_file_from_str(guardfraction_file_str,
+ vote_routerstatuses);
+}
+
/**
* Helper function to parse out a line in the measured bandwidth file
* into a measured_bw_line_t output structure. Returns -1 on failure
@@ -2463,6 +2776,12 @@ dirserv_generate_networkstatus_vote_obj(crypto_pk_t *private_key,
smartlist_free(routers);
digestmap_free(omit_as_sybil, NULL);
+ /* Apply guardfraction information to routerstatuses. */
+ if (options->GuardfractionFile) {
+ dirserv_read_guardfraction_file(options->GuardfractionFile,
+ routerstatuses);
+ }
+
/* This pass through applies the measured bw lines to the routerstatuses */
if (options->V3BandwidthsFile) {
dirserv_read_measured_bandwidths(options->V3BandwidthsFile,
@@ -2511,6 +2830,15 @@ dirserv_generate_networkstatus_vote_obj(crypto_pk_t *private_key,
v3_out->client_versions = client_versions;
v3_out->server_versions = server_versions;
+ v3_out->package_lines = smartlist_new();
+ {
+ config_line_t *cl;
+ for (cl = get_options()->RecommendedPackages; cl; cl = cl->next) {
+ if (validate_recommended_package_line(cl->value))
+ smartlist_add(v3_out->package_lines, tor_strdup(cl->value));
+ }
+ }
+
v3_out->known_flags = smartlist_new();
smartlist_split_string(v3_out->known_flags,
"Authority Exit Fast Guard Stable V2Dir Valid",
@@ -3256,6 +3584,80 @@ connection_dirserv_flushed_some(dir_connection_t *conn)
}
}
+/** Return true iff <b>line</b> is a valid RecommendedPackages line.
+ */
+/*
+ The grammar is:
+
+ "package" SP PACKAGENAME SP VERSION SP URL SP DIGESTS NL
+
+ PACKAGENAME = NONSPACE
+ VERSION = NONSPACE
+ URL = NONSPACE
+ DIGESTS = DIGEST | DIGESTS SP DIGEST
+ DIGEST = DIGESTTYPE "=" DIGESTVAL
+
+ NONSPACE = one or more non-space printing characters
+
+ DIGESTVAL = DIGESTTYPE = one or more non-=, non-" " characters.
+
+ SP = " "
+ NL = a newline
+
+ */
+int
+validate_recommended_package_line(const char *line)
+{
+ const char *cp = line;
+
+#define WORD() \
+ do { \
+ if (*cp == ' ') \
+ return 0; \
+ cp = strchr(cp, ' '); \
+ if (!cp) \
+ return 0; \
+ } while (0)
+
+ WORD(); /* skip packagename */
+ ++cp;
+ WORD(); /* skip version */
+ ++cp;
+ WORD(); /* Skip URL */
+ ++cp;
+
+ /* Skip digesttype=digestval + */
+ int n_entries = 0;
+ while (1) {
+ const char *start_of_word = cp;
+ const char *end_of_word = strchr(cp, ' ');
+ if (! end_of_word)
+ end_of_word = cp + strlen(cp);
+
+ if (start_of_word == end_of_word)
+ return 0;
+
+ const char *eq = memchr(start_of_word, '=', end_of_word - start_of_word);
+
+ if (!eq)
+ return 0;
+ if (eq == start_of_word)
+ return 0;
+ if (eq == end_of_word - 1)
+ return 0;
+ if (memchr(eq+1, '=', end_of_word - (eq+1)))
+ return 0;
+
+ ++n_entries;
+ if (0 == *end_of_word)
+ break;
+
+ cp = end_of_word + 1;
+ }
+
+ return (n_entries == 0) ? 0 : 1;
+}
+
/** Release all storage used by the directory server. */
void
dirserv_free_all(void)
diff --git a/src/or/dirserv.h b/src/or/dirserv.h
index d4ce54260c..311a513dbe 100644
--- a/src/or/dirserv.h
+++ b/src/or/dirserv.h
@@ -104,6 +104,8 @@ void dirserv_free_all(void);
void cached_dir_decref(cached_dir_t *d);
cached_dir_t *new_cached_dir(char *s, time_t published);
+int validate_recommended_package_line(const char *line);
+
#ifdef DIRSERV_PRIVATE
/* Put the MAX_MEASUREMENT_AGE #define here so unit tests can see it */
@@ -123,10 +125,17 @@ STATIC int dirserv_query_measured_bw_cache_kb(const char *node_id,
long *bw_out,
time_t *as_of_out);
STATIC int dirserv_has_measured_bw(const char *node_id);
+
+STATIC int
+dirserv_read_guardfraction_file_from_str(const char *guardfraction_file_str,
+ smartlist_t *vote_routerstatuses);
#endif
int dirserv_read_measured_bandwidths(const char *from_file,
smartlist_t *routerstatuses);
+int dirserv_read_guardfraction_file(const char *fname,
+ smartlist_t *vote_routerstatuses);
+
#endif
diff --git a/src/or/dirvote.c b/src/or/dirvote.c
index f0dcc88070..3009026ee7 100644
--- a/src/or/dirvote.c
+++ b/src/or/dirvote.c
@@ -16,6 +16,7 @@
#include "router.h"
#include "routerlist.h"
#include "routerparse.h"
+#include "entrynodes.h" /* needed for guardfraction methods */
/**
* \file dirvote.c
@@ -66,6 +67,7 @@ format_networkstatus_vote(crypto_pk_t *private_signing_key,
{
smartlist_t *chunks = smartlist_new();
const char *client_versions = NULL, *server_versions = NULL;
+ char *packages = NULL;
char fingerprint[FINGERPRINT_LEN+1];
char digest[DIGEST_LEN];
uint32_t addr;
@@ -98,6 +100,18 @@ format_networkstatus_vote(crypto_pk_t *private_signing_key,
server_versions_line = tor_strdup("");
}
+ if (v3_ns->package_lines) {
+ smartlist_t *tmp = smartlist_new();
+ SMARTLIST_FOREACH(v3_ns->package_lines, const char *, p,
+ if (validate_recommended_package_line(p))
+ smartlist_add_asprintf(tmp, "package %s\n", p));
+ packages = smartlist_join_strings(tmp, "", 0, NULL);
+ SMARTLIST_FOREACH(tmp, char *, cp, tor_free(cp));
+ smartlist_free(tmp);
+ } else {
+ packages = tor_strdup("");
+ }
+
{
char published[ISO_TIME_LEN+1];
char va[ISO_TIME_LEN+1];
@@ -132,6 +146,7 @@ format_networkstatus_vote(crypto_pk_t *private_signing_key,
"valid-until %s\n"
"voting-delay %d %d\n"
"%s%s" /* versions */
+ "%s" /* packages */
"known-flags %s\n"
"flag-thresholds %s\n"
"params %s\n"
@@ -143,6 +158,7 @@ format_networkstatus_vote(crypto_pk_t *private_signing_key,
v3_ns->vote_seconds, v3_ns->dist_seconds,
client_versions_line,
server_versions_line,
+ packages,
flags,
flag_thresholds,
params,
@@ -230,6 +246,7 @@ format_networkstatus_vote(crypto_pk_t *private_signing_key,
done:
tor_free(client_versions_line);
tor_free(server_versions_line);
+ tor_free(packages);
SMARTLIST_FOREACH(chunks, char *, cp, tor_free(cp));
smartlist_free(chunks);
@@ -1007,6 +1024,88 @@ networkstatus_compute_bw_weights_v10(smartlist_t *chunks, int64_t G,
return 1;
}
+/** Update total bandwidth weights (G/M/E/D/T) with the bandwidth of
+ * the router in <b>rs</b>. */
+static void
+update_total_bandwidth_weights(const routerstatus_t *rs,
+ int is_exit, int is_guard,
+ int64_t *G, int64_t *M, int64_t *E, int64_t *D,
+ int64_t *T)
+{
+ int default_bandwidth = rs->bandwidth_kb;
+ int guardfraction_bandwidth = 0;
+
+ if (!rs->has_bandwidth) {
+ log_info(LD_BUG, "Missing consensus bandwidth for router %s",
+ rs->nickname);
+ return;
+ }
+
+ /* If this routerstatus represents a guard that we have
+ * guardfraction information on, use it to calculate its actual
+ * bandwidth. From proposal236:
+ *
+ * Similarly, when calculating the bandwidth-weights line as in
+ * section 3.8.3 of dir-spec.txt, directory authorities should treat N
+ * as if fraction F of its bandwidth has the guard flag and (1-F) does
+ * not. So when computing the totals G,M,E,D, each relay N with guard
+ * visibility fraction F and bandwidth B should be added as follows:
+ *
+ * G' = G + F*B, if N does not have the exit flag
+ * M' = M + (1-F)*B, if N does not have the exit flag
+ *
+ * or
+ *
+ * D' = D + F*B, if N has the exit flag
+ * E' = E + (1-F)*B, if N has the exit flag
+ *
+ * In this block of code, we prepare the bandwidth values by setting
+ * the default_bandwidth to F*B and guardfraction_bandwidth to (1-F)*B.
+ */
+ if (rs->has_guardfraction) {
+ guardfraction_bandwidth_t guardfraction_bw;
+
+ tor_assert(is_guard);
+
+ guard_get_guardfraction_bandwidth(&guardfraction_bw,
+ rs->bandwidth_kb,
+ rs->guardfraction_percentage);
+
+ default_bandwidth = guardfraction_bw.guard_bw;
+ guardfraction_bandwidth = guardfraction_bw.non_guard_bw;
+ }
+
+ /* Now calculate the total bandwidth weights with or without
+ * guardfraction. Depending on the flags of the relay, add its
+ * bandwidth to the appropriate weight pool. If it's a guard and
+ * guardfraction is enabled, add its bandwidth to both pools as
+ * indicated by the previous comment.
+ */
+ *T += default_bandwidth;
+ if (is_exit && is_guard) {
+
+ *D += default_bandwidth;
+ if (rs->has_guardfraction) {
+ *E += guardfraction_bandwidth;
+ }
+
+ } else if (is_exit) {
+
+ *E += default_bandwidth;
+
+ } else if (is_guard) {
+
+ *G += default_bandwidth;
+ if (rs->has_guardfraction) {
+ *M += guardfraction_bandwidth;
+ }
+
+ } else {
+
+ *M += default_bandwidth;
+ }
+}
+
/** Given a list of vote networkstatus_t in <b>votes</b>, our public
* authority <b>identity_key</b>, our private authority <b>signing_key</b>,
* and the number of <b>total_authorities</b> that we believe exist in our
@@ -1037,6 +1136,7 @@ networkstatus_compute_consensus(smartlist_t *votes,
const routerstatus_format_type_t rs_format =
flavor == FLAV_NS ? NS_V3_CONSENSUS : NS_V3_CONSENSUS_MICRODESC;
char *params = NULL;
+ char *packages = NULL;
int added_weights = 0;
tor_assert(flavor == FLAV_NS || flavor == FLAV_MICRODESC);
tor_assert(total_authorities >= smartlist_len(votes));
@@ -1120,6 +1220,11 @@ networkstatus_compute_consensus(smartlist_t *votes,
n_versioning_servers);
client_versions = compute_consensus_versions_list(combined_client_versions,
n_versioning_clients);
+ if (consensus_method >= MIN_METHOD_FOR_PACKAGE_LINES) {
+ packages = compute_consensus_package_lines(votes);
+ } else {
+ packages = tor_strdup("");
+ }
SMARTLIST_FOREACH(combined_server_versions, char *, cp, tor_free(cp));
SMARTLIST_FOREACH(combined_client_versions, char *, cp, tor_free(cp));
@@ -1162,10 +1267,13 @@ networkstatus_compute_consensus(smartlist_t *votes,
"voting-delay %d %d\n"
"client-versions %s\n"
"server-versions %s\n"
+ "%s" /* packages */
"known-flags %s\n",
va_buf, fu_buf, vu_buf,
vote_seconds, dist_seconds,
- client_versions, server_versions, flaglist);
+ client_versions, server_versions,
+ packages,
+ flaglist);
tor_free(flaglist);
}
@@ -1266,8 +1374,11 @@ networkstatus_compute_consensus(smartlist_t *votes,
sizeof(uint32_t));
uint32_t *measured_bws_kb = tor_calloc(smartlist_len(votes),
sizeof(uint32_t));
+ uint32_t *measured_guardfraction = tor_calloc(smartlist_len(votes),
+ sizeof(uint32_t));
int num_bandwidths;
int num_mbws;
+ int num_guardfraction_inputs;
int *n_voter_flags; /* n_voter_flags[j] is the number of flags that
* votes[j] knows about. */
@@ -1376,7 +1487,7 @@ networkstatus_compute_consensus(smartlist_t *votes,
/* We need to know how many votes measure bandwidth. */
n_authorities_measuring_bandwidth = 0;
- SMARTLIST_FOREACH(votes, networkstatus_t *, v,
+ SMARTLIST_FOREACH(votes, const networkstatus_t *, v,
if (v->has_measured_bws) {
++n_authorities_measuring_bandwidth;
}
@@ -1418,6 +1529,7 @@ networkstatus_compute_consensus(smartlist_t *votes,
smartlist_clear(versions);
num_bandwidths = 0;
num_mbws = 0;
+ num_guardfraction_inputs = 0;
/* Okay, go through all the entries for this digest. */
SMARTLIST_FOREACH_BEGIN(votes, networkstatus_t *, v) {
@@ -1451,6 +1563,12 @@ networkstatus_compute_consensus(smartlist_t *votes,
chosen_name = rs->status.nickname;
}
+ /* Count guardfraction votes and note down the values. */
+ if (rs->status.has_guardfraction) {
+ measured_guardfraction[num_guardfraction_inputs++] =
+ rs->status.guardfraction_percentage;
+ }
+
/* count bandwidths */
if (rs->has_measured_bw)
measured_bws_kb[num_mbws++] = rs->measured_bw_kb;
@@ -1540,6 +1658,17 @@ networkstatus_compute_consensus(smartlist_t *votes,
chosen_version = NULL;
}
+ /* If it's a guard and we have enough guardfraction votes,
+ calculate its consensus guardfraction value. */
+ if (is_guard && num_guardfraction_inputs > 2 &&
+ consensus_method >= MIN_METHOD_FOR_GUARDFRACTION) {
+ rs_out.has_guardfraction = 1;
+ rs_out.guardfraction_percentage = median_uint32(measured_guardfraction,
+ num_guardfraction_inputs);
+ /* final value should be an integer percentage! */
+ tor_assert(rs_out.guardfraction_percentage <= 100);
+ }
+
/* Pick a bandwidth */
if (num_mbws > 2) {
rs_out.has_bandwidth = 1;
@@ -1561,21 +1690,11 @@ networkstatus_compute_consensus(smartlist_t *votes,
/* Fix bug 2203: Do not count BadExit nodes as Exits for bw weights */
is_exit = is_exit && !is_bad_exit;
+ /* Update total bandwidth weights with the bandwidths of this router. */
{
- if (rs_out.has_bandwidth) {
- T += rs_out.bandwidth_kb;
- if (is_exit && is_guard)
- D += rs_out.bandwidth_kb;
- else if (is_exit)
- E += rs_out.bandwidth_kb;
- else if (is_guard)
- G += rs_out.bandwidth_kb;
- else
- M += rs_out.bandwidth_kb;
- } else {
- log_warn(LD_BUG, "Missing consensus bandwidth for router %s",
- rs_out.nickname);
- }
+ update_total_bandwidth_weights(&rs_out,
+ is_exit, is_guard,
+ &G, &M, &E, &D, &T);
}
/* Ok, we already picked a descriptor digest we want to list
@@ -1694,11 +1813,21 @@ networkstatus_compute_consensus(smartlist_t *votes,
smartlist_add(chunks, tor_strdup("\n"));
/* Now the weight line. */
if (rs_out.has_bandwidth) {
+ char *guardfraction_str = NULL;
int unmeasured = rs_out.bw_is_unmeasured &&
consensus_method >= MIN_METHOD_TO_CLIP_UNMEASURED_BW;
- smartlist_add_asprintf(chunks, "w Bandwidth=%d%s\n",
+
+ /* If we have guardfraction info, include it in the 'w' line. */
+ if (rs_out.has_guardfraction) {
+ tor_asprintf(&guardfraction_str,
+ " GuardFraction=%u", rs_out.guardfraction_percentage);
+ }
+ smartlist_add_asprintf(chunks, "w Bandwidth=%d%s%s\n",
rs_out.bandwidth_kb,
- unmeasured?" Unmeasured=1":"");
+ unmeasured?" Unmeasured=1":"",
+ guardfraction_str ? guardfraction_str : "");
+
+ tor_free(guardfraction_str);
}
/* Now the exitpolicy summary line. */
@@ -1726,6 +1855,7 @@ networkstatus_compute_consensus(smartlist_t *votes,
smartlist_free(exitsummaries);
tor_free(bandwidths_kb);
tor_free(measured_bws_kb);
+ tor_free(measured_guardfraction);
}
/* Mark the directory footer region */
@@ -1852,6 +1982,7 @@ networkstatus_compute_consensus(smartlist_t *votes,
tor_free(client_versions);
tor_free(server_versions);
+ tor_free(packages);
SMARTLIST_FOREACH(flags, char *, cp, tor_free(cp));
smartlist_free(flags);
SMARTLIST_FOREACH(chunks, char *, cp, tor_free(cp));
@@ -1860,6 +1991,78 @@ networkstatus_compute_consensus(smartlist_t *votes,
return result;
}
+/** Given a list of networkstatus_t for each vote, return a newly allocated
+ * string containing the "package" lines for the vote. */
+STATIC char *
+compute_consensus_package_lines(smartlist_t *votes)
+{
+ const int n_votes = smartlist_len(votes);
+
+ /* This will be a map from "packagename version" strings to arrays
+ * of const char *, with the i'th member of the array corresponding to the
+ * package line from the i'th vote.
+ */
+ strmap_t *package_status = strmap_new();
+
+ SMARTLIST_FOREACH_BEGIN(votes, networkstatus_t *, v) {
+ if (! v->package_lines)
+ continue;
+ SMARTLIST_FOREACH_BEGIN(v->package_lines, const char *, line) {
+ if (! validate_recommended_package_line(line))
+ continue;
+
+ /* Skip 'cp' to the second space in the line. */
+ const char *cp = strchr(line, ' ');
+ if (!cp) continue;
+ ++cp;
+ cp = strchr(cp, ' ');
+ if (!cp) continue;
+
+ char *key = tor_strndup(line, cp - line);
+
+ const char **status = strmap_get(package_status, key);
+ if (!status) {
+ status = tor_calloc(n_votes, sizeof(const char *));
+ strmap_set(package_status, key, status);
+ }
+ status[v_sl_idx] = line; /* overwrite old value */
+ tor_free(key);
+ } SMARTLIST_FOREACH_END(line);
+ } SMARTLIST_FOREACH_END(v);
+
+ smartlist_t *entries = smartlist_new(); /* temporary */
+ smartlist_t *result_list = smartlist_new(); /* output */
+ STRMAP_FOREACH(package_status, key, const char **, values) {
+ int i, count=-1;
+ for (i = 0; i < n_votes; ++i) {
+ if (values[i])
+ smartlist_add(entries, (void*) values[i]);
+ }
+ smartlist_sort_strings(entries);
+ int n_voting_for_entry = smartlist_len(entries);
+ const char *most_frequent =
+ smartlist_get_most_frequent_string_(entries, &count);
+
+ if (n_voting_for_entry >= 3 && count > n_voting_for_entry / 2) {
+ smartlist_add_asprintf(result_list, "package %s\n", most_frequent);
+ }
+
+ smartlist_clear(entries);
+
+ } STRMAP_FOREACH_END;
+
+ smartlist_sort_strings(result_list);
+
+ char *result = smartlist_join_strings(result_list, "", 0, NULL);
+
+ SMARTLIST_FOREACH(result_list, char *, cp, tor_free(cp));
+ smartlist_free(result_list);
+ smartlist_free(entries);
+ strmap_free(package_status, tor_free_);
+
+ return result;
+}
+
/** Given a consensus vote <b>target</b> and a set of detached signatures in
* <b>sigs</b> that correspond to the same consensus, check whether there are
* any new signatures in <b>src_voter_list</b> that should be added to
@@ -2041,7 +2244,8 @@ networkstatus_format_signatures(networkstatus_t *consensus,
for_detached_signatures ? flavor_name : "",
digest_name, id, sk);
}
- base64_encode(buf, sizeof(buf), sig->signature, sig->signature_len);
+ base64_encode(buf, sizeof(buf), sig->signature, sig->signature_len,
+ BASE64_ENCODE_MULTILINE);
strlcat(buf, "-----END SIGNATURE-----\n", sizeof(buf));
smartlist_add(elements, tor_strdup(buf));
} SMARTLIST_FOREACH_END(sig);
@@ -3256,7 +3460,7 @@ dirvote_create_microdescriptor(const routerinfo_t *ri, int consensus_method)
char kbuf[128];
base64_encode(kbuf, sizeof(kbuf),
(const char*)ri->onion_curve25519_pkey->public_key,
- CURVE25519_PUBKEY_LEN);
+ CURVE25519_PUBKEY_LEN, BASE64_ENCODE_MULTILINE);
smartlist_add_asprintf(chunks, "ntor-onion-key %s", kbuf);
}
diff --git a/src/or/dirvote.h b/src/or/dirvote.h
index 8908336fa1..542563b708 100644
--- a/src/or/dirvote.h
+++ b/src/or/dirvote.h
@@ -55,7 +55,7 @@
#define MIN_SUPPORTED_CONSENSUS_METHOD 13
/** The highest consensus method that we currently support. */
-#define MAX_SUPPORTED_CONSENSUS_METHOD 18
+#define MAX_SUPPORTED_CONSENSUS_METHOD 20
/** Lowest consensus method where microdesc consensuses omit any entry
* with no microdesc. */
@@ -79,8 +79,16 @@
* microdescriptors. */
#define MIN_METHOD_FOR_ID_HASH_IN_MD 18
+/** Lowest consensus method where we include "package" lines*/
+#define MIN_METHOD_FOR_PACKAGE_LINES 19
+
+/** Lowest consensus method where authorities may include
+ * GuardFraction information in microdescriptors. */
+#define MIN_METHOD_FOR_GUARDFRACTION 20
+
/** Default bandwidth to clip unmeasured bandwidths to using method >=
- * MIN_METHOD_TO_CLIP_UNMEASURED_BW */
+ * MIN_METHOD_TO_CLIP_UNMEASURED_BW. (This is not a consensus method; do not
+ * get confused with the above macros.) */
#define DEFAULT_MAX_UNMEASURED_BW_KB 20
void dirvote_free_all(void);
@@ -160,6 +168,7 @@ STATIC char *format_networkstatus_vote(crypto_pk_t *private_key,
networkstatus_t *v3_ns);
STATIC char *dirvote_compute_params(smartlist_t *votes, int method,
int total_authorities);
+STATIC char *compute_consensus_package_lines(smartlist_t *votes);
#endif
#endif
diff --git a/src/or/dns.c b/src/or/dns.c
index cc4a169422..db77d20783 100644
--- a/src/or/dns.c
+++ b/src/or/dns.c
@@ -24,7 +24,7 @@
#include "relay.h"
#include "router.h"
#include "ht.h"
-#include "../common/sandbox.h"
+#include "sandbox.h"
#ifdef HAVE_EVENT2_DNS_H
#include <event2/event.h>
#include <event2/dns.h>
diff --git a/src/or/dnsserv.c b/src/or/dnsserv.c
index 7b5068199b..f7710908bd 100644
--- a/src/or/dnsserv.c
+++ b/src/or/dnsserv.c
@@ -141,13 +141,13 @@ evdns_server_callback(struct evdns_server_request *req, void *data_)
}
if (q->type == EVDNS_TYPE_A || q->type == EVDNS_QTYPE_ALL) {
- entry_conn->ipv4_traffic_ok = 1;
- entry_conn->ipv6_traffic_ok = 0;
- entry_conn->prefer_ipv6_traffic = 0;
+ entry_conn->entry_cfg.ipv4_traffic = 1;
+ entry_conn->entry_cfg.ipv6_traffic = 0;
+ entry_conn->entry_cfg.prefer_ipv6 = 0;
} else if (q->type == EVDNS_TYPE_AAAA) {
- entry_conn->ipv4_traffic_ok = 0;
- entry_conn->ipv6_traffic_ok = 1;
- entry_conn->prefer_ipv6_traffic = 1;
+ entry_conn->entry_cfg.ipv4_traffic = 0;
+ entry_conn->entry_cfg.ipv6_traffic = 1;
+ entry_conn->entry_cfg.prefer_ipv6 = 1;
}
strlcpy(entry_conn->socks_request->address, q->name,
@@ -155,8 +155,8 @@ evdns_server_callback(struct evdns_server_request *req, void *data_)
entry_conn->socks_request->listener_type = listener->base_.type;
entry_conn->dns_server_request = req;
- entry_conn->isolation_flags = listener->isolation_flags;
- entry_conn->session_group = listener->session_group;
+ entry_conn->entry_cfg.isolation_flags = listener->entry_cfg.isolation_flags;
+ entry_conn->entry_cfg.session_group = listener->entry_cfg.session_group;
entry_conn->nym_epoch = get_signewnym_epoch();
if (connection_add(ENTRY_TO_CONN(entry_conn)) < 0) {
@@ -232,9 +232,9 @@ dnsserv_launch_request(const char *name, int reverse,
entry_conn->socks_request->listener_type = CONN_TYPE_CONTROL_LISTENER;
entry_conn->original_dest_address = tor_strdup(name);
- entry_conn->session_group = SESSION_GROUP_CONTROL_RESOLVE;
+ entry_conn->entry_cfg.session_group = SESSION_GROUP_CONTROL_RESOLVE;
entry_conn->nym_epoch = get_signewnym_epoch();
- entry_conn->isolation_flags = ISO_DEFAULT;
+ entry_conn->entry_cfg.isolation_flags = ISO_DEFAULT;
if (connection_add(TO_CONN(conn))<0) {
log_warn(LD_APP, "Couldn't register dummy connection for RESOLVE request");
diff --git a/src/or/entrynodes.c b/src/or/entrynodes.c
index 968a993999..ebf675166b 100644
--- a/src/or/entrynodes.c
+++ b/src/or/entrynodes.c
@@ -141,8 +141,7 @@ entry_guard_set_status(entry_guard_t *e, const node_t *node,
}
if (node) {
- int is_dir = node_is_dir(node) && node->rs &&
- node->rs->version_supports_microdesc_cache;
+ int is_dir = node_is_dir(node);
if (options->UseBridges && node_is_a_configured_bridge(node))
is_dir = 1;
if (e->is_dir_cache != is_dir) {
@@ -398,10 +397,10 @@ add_an_entry_guard(const node_t *chosen, int reset_status, int prepend,
entry->bad_since = 0;
entry->can_retry = 1;
}
- entry->is_dir_cache = node->rs &&
- node->rs->version_supports_microdesc_cache;
+ entry->is_dir_cache = node_is_dir(node);
if (get_options()->UseBridges && node_is_a_configured_bridge(node))
entry->is_dir_cache = 1;
+
return NULL;
}
} else if (!for_directory) {
@@ -432,8 +431,7 @@ add_an_entry_guard(const node_t *chosen, int reset_status, int prepend,
node_describe(node));
strlcpy(entry->nickname, node_get_nickname(node), sizeof(entry->nickname));
memcpy(entry->identity, node->identity, DIGEST_LEN);
- entry->is_dir_cache = node_is_dir(node) && node->rs &&
- node->rs->version_supports_microdesc_cache;
+ entry->is_dir_cache = node_is_dir(node);
if (get_options()->UseBridges && node_is_a_configured_bridge(node))
entry->is_dir_cache = 1;
@@ -442,7 +440,8 @@ add_an_entry_guard(const node_t *chosen, int reset_status, int prepend,
* don't all select them on the same day, and b) avoid leaving a
* precise timestamp in the state file about when we first picked
* this guard. For details, see the Jan 2010 or-dev thread. */
- entry->chosen_on_date = time(NULL) - crypto_rand_int(3600*24*30);
+ time_t now = time(NULL);
+ entry->chosen_on_date = crypto_rand_time_range(now - 3600*24*30, now);
entry->chosen_by_version = tor_strdup(VERSION);
/* Are we picking this guard because all of our current guards are
@@ -571,22 +570,6 @@ remove_obsolete_entry_guards(time_t now)
} else if (tor_version_parse(ver, &v)) {
msg = "does not seem to be from any recognized version of Tor";
version_is_bad = 1;
- } else {
- char *tor_ver = NULL;
- tor_asprintf(&tor_ver, "Tor %s", ver);
- if ((tor_version_as_new_as(tor_ver, "0.1.0.10-alpha") &&
- !tor_version_as_new_as(tor_ver, "0.1.2.16-dev")) ||
- (tor_version_as_new_as(tor_ver, "0.2.0.0-alpha") &&
- !tor_version_as_new_as(tor_ver, "0.2.0.6-alpha")) ||
- /* above are bug 440; below are bug 1217 */
- (tor_version_as_new_as(tor_ver, "0.2.1.3-alpha") &&
- !tor_version_as_new_as(tor_ver, "0.2.1.23")) ||
- (tor_version_as_new_as(tor_ver, "0.2.2.0-alpha") &&
- !tor_version_as_new_as(tor_ver, "0.2.2.7-alpha"))) {
- msg = "was selected without regard for guard bandwidth";
- version_is_bad = 1;
- }
- tor_free(tor_ver);
}
if (!version_is_bad && entry->chosen_on_date + guard_lifetime < now) {
/* It's been too long since the date listed in our state file. */
@@ -989,39 +972,6 @@ entry_list_is_constrained(const or_options_t *options)
return 0;
}
-/** Return true iff this node can answer directory questions about
- * microdescriptors. */
-static int
-node_understands_microdescriptors(const node_t *node)
-{
- tor_assert(node);
- if (node->rs && node->rs->version_supports_microdesc_cache)
- return 1;
- if (node->ri && tor_version_supports_microdescriptors(node->ri->platform))
- return 1;
- return 0;
-}
-
-/** Return true iff <b>node</b> is able to answer directory questions
- * of type <b>dirinfo</b>. Always returns true if <b>dirinfo</b> is
- * NO_DIRINFO (zero). */
-static int
-node_can_handle_dirinfo(const node_t *node, dirinfo_type_t dirinfo)
-{
- /* Checking dirinfo for any type other than microdescriptors isn't required
- yet, since we only choose directory guards that can support microdescs,
- routerinfos, and networkstatuses, AND we don't use directory guards if
- we're configured to do direct downloads of anything else. The only case
- where we might have a guard that doesn't know about a type of directory
- information is when we're retrieving directory information from a
- bridge. */
-
- if ((dirinfo & MICRODESC_DIRINFO) &&
- !node_understands_microdescriptors(node))
- return 0;
- return 1;
-}
-
/** Pick a live (up and listed) entry guard from entry_guards. If
* <b>state</b> is non-NULL, this is for a specific circuit --
* make sure not to pick this circuit's exit or any node in the
@@ -1077,6 +1027,8 @@ populate_live_entry_guards(smartlist_t *live_entry_guards,
int retval = 0;
entry_is_live_flags_t entry_flags = 0;
+ (void) dirinfo_type;
+
{ /* Set the flags we want our entry node to have */
if (need_uptime) {
entry_flags |= ENTRY_NEED_UPTIME;
@@ -1108,9 +1060,6 @@ populate_live_entry_guards(smartlist_t *live_entry_guards,
continue; /* don't pick the same node for entry and exit */
if (smartlist_contains(exit_family, node))
continue; /* avoid relays that are family members of our exit */
- if (dirinfo_type != NO_DIRINFO &&
- !node_can_handle_dirinfo(node, dirinfo_type))
- continue; /* this node won't be able to answer our dir questions */
smartlist_add(live_entry_guards, (void*)node);
if (!entry->made_contact) {
/* Always start with the first not-yet-contacted entry
@@ -1491,8 +1440,9 @@ entry_guards_parse_state(or_state_t *state, int set, char **msg)
}
} else {
if (state_version) {
+ time_t now = time(NULL);
+ e->chosen_on_date = crypto_rand_time_range(now - 3600*24*30, now);
e->chosen_by_version = tor_strdup(state_version);
- e->chosen_on_date = time(NULL) - crypto_rand_int(3600*24*30);
}
}
if (e->path_bias_disabled && !e->bad_since)
@@ -1523,6 +1473,13 @@ entry_guards_parse_state(or_state_t *state, int set, char **msg)
return *msg ? -1 : 0;
}
+/** How long will we let a change in our guard nodes stay un-saved
+ * when we are trying to avoid disk writes? */
+#define SLOW_GUARD_STATE_FLUSH_TIME 600
+/** How long will we let a change in our guard nodes stay un-saved
+ * when we are not trying to avoid disk writes? */
+#define FAST_GUARD_STATE_FLUSH_TIME 30
+
/** Our list of entry guards has changed, or some element of one
* of our entry guards has changed. Write the changes to disk within
* the next few minutes.
@@ -1533,8 +1490,12 @@ entry_guards_changed(void)
time_t when;
entry_guards_dirty = 1;
+ if (get_options()->AvoidDiskWrites)
+ when = time(NULL) + SLOW_GUARD_STATE_FLUSH_TIME;
+ else
+ when = time(NULL) + FAST_GUARD_STATE_FLUSH_TIME;
+
/* or_state_save() will call entry_guards_update_state(). */
- when = get_options()->AvoidDiskWrites ? time(NULL) + 3600 : time(NULL)+600;
or_state_mark_dirty(get_or_state(), when);
}
@@ -1655,6 +1616,9 @@ getinfo_helper_entry_guards(control_connection_t *conn,
} else if (e->bad_since) {
when = e->bad_since;
status = "unusable";
+ } else if (e->unreachable_since) {
+ when = e->unreachable_since;
+ status = "down";
} else {
status = "up";
}
@@ -1683,6 +1647,63 @@ getinfo_helper_entry_guards(control_connection_t *conn,
return 0;
}
+/** Return 0 if we should apply guardfraction information found in the
+ * consensus. A specific consensus can be specified with the
+ * <b>ns</b> argument, if NULL the most recent one will be picked.*/
+int
+should_apply_guardfraction(const networkstatus_t *ns)
+{
+ /* We need to check the corresponding torrc option and the consensus
+ * parameter if we need to. */
+ const or_options_t *options = get_options();
+
+ /* If UseGuardFraction is 'auto' then check the same-named consensus
+ * parameter. If the consensus parameter is not present, default to
+ * "off". */
+ if (options->UseGuardFraction == -1) {
+ return networkstatus_get_param(ns, "UseGuardFraction",
+ 0, /* default to "off" */
+ 0, 1);
+ }
+
+ return options->UseGuardFraction;
+}
+
+/* Given the original bandwidth of a guard and its guardfraction,
+ * calculate how much bandwidth the guard should have as a guard and
+ * as a non-guard.
+ *
+ * Quoting from proposal236:
+ *
+ * Let Wpf denote the weight from the 'bandwidth-weights' line a
+ * client would apply to N for position p if it had the guard
+ * flag, Wpn the weight if it did not have the guard flag, and B the
+ * measured bandwidth of N in the consensus. Then instead of choosing
+ * N for position p proportionally to Wpf*B or Wpn*B, clients should
+ * choose N proportionally to F*Wpf*B + (1-F)*Wpn*B.
+ *
+ * This function fills the <b>guardfraction_bw</b> structure. It sets
+ * <b>guard_bw</b> to F*B and <b>non_guard_bw</b> to (1-F)*B.
+ */
+void
+guard_get_guardfraction_bandwidth(guardfraction_bandwidth_t *guardfraction_bw,
+ int orig_bandwidth,
+ uint32_t guardfraction_percentage)
+{
+ double guardfraction_fraction;
+
+ /* Turn the percentage into a fraction. */
+ tor_assert(guardfraction_percentage <= 100);
+ guardfraction_fraction = guardfraction_percentage / 100.0;
+
+ long guard_bw = tor_lround(guardfraction_fraction * orig_bandwidth);
+ tor_assert(guard_bw <= INT_MAX);
+
+ guardfraction_bw->guard_bw = (int) guard_bw;
+
+ guardfraction_bw->non_guard_bw = orig_bandwidth - (int) guard_bw;
+}
+
/** A list of configured bridges. Whenever we actually get a descriptor
* for one, we add it as an entry guard. Note that the order of bridges
* in this list does not necessarily correspond to the order of bridges
@@ -2357,7 +2378,9 @@ entries_retry_helper(const or_options_t *options, int act)
SMARTLIST_FOREACH_BEGIN(entry_guards, entry_guard_t *, e) {
node = node_get_by_id(e->identity);
if (node && node_has_descriptor(node) &&
- node_is_bridge(node) == need_bridges) {
+ node_is_bridge(node) == need_bridges &&
+ (!need_bridges || (!e->bad_since &&
+ node_is_a_configured_bridge(node)))) {
any_known = 1;
if (node->is_running)
any_running = 1; /* some entry is both known and running */
@@ -2411,11 +2434,9 @@ any_bridge_supports_microdescriptors(void)
SMARTLIST_FOREACH_BEGIN(entry_guards, entry_guard_t *, e) {
node = node_get_by_id(e->identity);
if (node && node->is_running &&
- node_is_bridge(node) && node_is_a_configured_bridge(node) &&
- node_understands_microdescriptors(node)) {
+ node_is_bridge(node) && node_is_a_configured_bridge(node)) {
/* This is one of our current bridges, and we know enough about
- * it to know that it will be able to answer our microdescriptor
- * questions. */
+ * it to know that it will be able to answer our questions. */
return 1;
}
} SMARTLIST_FOREACH_END(e);
diff --git a/src/or/entrynodes.h b/src/or/entrynodes.h
index 7f3a4fb29c..107a562506 100644
--- a/src/or/entrynodes.h
+++ b/src/or/entrynodes.h
@@ -160,5 +160,21 @@ int validate_pluggable_transports_config(void);
double pathbias_get_close_success_count(entry_guard_t *guard);
double pathbias_get_use_success_count(entry_guard_t *guard);
+/** Contains the bandwidth of a relay as a guard and as a non-guard
+ * after the guardfraction has been considered. */
+typedef struct guardfraction_bandwidth_t {
+ /** Bandwidth as a guard after guardfraction has been considered. */
+ int guard_bw;
+ /** Bandwidth as a non-guard after guardfraction has been considered. */
+ int non_guard_bw;
+} guardfraction_bandwidth_t;
+
+int should_apply_guardfraction(const networkstatus_t *ns);
+
+void
+guard_get_guardfraction_bandwidth(guardfraction_bandwidth_t *guardfraction_bw,
+ int orig_bandwidth,
+ uint32_t guardfraction_percentage);
+
#endif
diff --git a/src/or/geoip.c b/src/or/geoip.c
index 5564b72a04..120ce479cc 100644
--- a/src/or/geoip.c
+++ b/src/or/geoip.c
@@ -1436,6 +1436,39 @@ format_bridge_stats_controller(time_t now)
return out;
}
+/** Return a newly allocated string holding our bridge usage stats by
+ * country in a format suitable for inclusion in our heartbeat
+ * message. Return NULL on failure. */
+char *
+format_client_stats_heartbeat(time_t now)
+{
+ const int n_hours = 6;
+ char *out = NULL;
+ int n_clients = 0;
+ clientmap_entry_t **ent;
+ unsigned cutoff = (unsigned)( (now-n_hours*3600)/60 );
+
+ if (!start_of_bridge_stats_interval)
+ return NULL; /* Not initialized. */
+
+ /* count unique IPs */
+ HT_FOREACH(ent, clientmap, &client_history) {
+ /* only count directly connecting clients */
+ if ((*ent)->action != GEOIP_CLIENT_CONNECT)
+ continue;
+ if ((*ent)->last_seen_in_minutes < cutoff)
+ continue;
+ n_clients++;
+ }
+
+ tor_asprintf(&out, "Heartbeat: "
+ "In the last %d hours, I have seen %d unique clients.",
+ n_hours,
+ n_clients);
+
+ return out;
+}
+
/** Write bridge statistics to $DATADIR/stats/bridge-stats and return
* when we should next try to write statistics. */
time_t
diff --git a/src/or/geoip.h b/src/or/geoip.h
index 683ec073b2..8a3486c7ac 100644
--- a/src/or/geoip.h
+++ b/src/or/geoip.h
@@ -64,6 +64,7 @@ time_t geoip_bridge_stats_write(time_t now);
void geoip_bridge_stats_term(void);
const char *geoip_get_bridge_stats_extrainfo(time_t);
char *geoip_get_bridge_stats_controller(time_t);
+char *format_client_stats_heartbeat(time_t now);
#endif
diff --git a/src/or/include.am b/src/or/include.am
index b44e1099dc..e315caebeb 100644
--- a/src/or/include.am
+++ b/src/or/include.am
@@ -15,7 +15,7 @@ else
tor_platform_source=
endif
-EXTRA_DIST+= src/or/ntmain.c src/or/or_sha1.i src/or/Makefile.nmake
+EXTRA_DIST+= src/or/ntmain.c src/or/Makefile.nmake
if USE_EXTERNAL_EVDNS
evdns_source=
@@ -79,14 +79,14 @@ LIBTOR_A_SOURCES = \
src/or/status.c \
src/or/onion_ntor.c \
$(evdns_source) \
- $(tor_platform_source) \
- src/or/config_codedigest.c
+ $(tor_platform_source)
src_or_libtor_a_SOURCES = $(LIBTOR_A_SOURCES)
src_or_libtor_testing_a_SOURCES = $(LIBTOR_A_SOURCES)
-#libtor_a_LIBADD = ../common/libor.a ../common/libor-crypto.a \
-# ../common/libor-event.a
+#libtor_a_LIBADD = $(top_builddir)/common/libor.a \
+# $(top_builddir)/common/libor-crypto.a \
+# $(top_builddir)/common/libor-event.a
src_or_tor_SOURCES = src/or/tor_main.c
@@ -98,7 +98,7 @@ AM_CPPFLAGS += -DSHARE_DATADIR="\"$(datadir)\"" \
-DLOCALSTATEDIR="\"$(localstatedir)\"" \
-DBINDIR="\"$(bindir)\""
-src_or_libtor_testing_a_CPPFLAGS = -DTOR_UNIT_TESTS $(AM_CPPFLAGS)
+src_or_libtor_testing_a_CPPFLAGS = $(AM_CPPFLAGS) $(TEST_CPPFLAGS)
src_or_libtor_testing_a_CFLAGS = $(AM_CFLAGS) $(TEST_CFLAGS)
# -L flags need to go in LDFLAGS. -l flags need to go in LDADD.
@@ -115,7 +115,7 @@ src_or_tor_LDADD = src/or/libtor.a src/common/libor.a \
if COVERAGE_ENABLED
src_or_tor_cov_SOURCES = src/or/tor_main.c
-src_or_tor_cov_CPPFLAGS = -DTOR_UNIT_TESTS $(AM_CPPFLAGS)
+src_or_tor_cov_CPPFLAGS = $(AM_CPPFLAGS) $(TEST_CPPFLAGS)
src_or_tor_cov_CFLAGS = $(AM_CFLAGS) $(TEST_CFLAGS)
src_or_tor_cov_LDFLAGS = @TOR_LDFLAGS_zlib@ @TOR_LDFLAGS_openssl@ @TOR_LDFLAGS_libevent@
src_or_tor_cov_LDADD = src/or/libtor-testing.a src/common/libor-testing.a \
@@ -123,9 +123,9 @@ src_or_tor_cov_LDADD = src/or/libtor-testing.a src/common/libor-testing.a \
src/common/libor-event-testing.a \
@TOR_ZLIB_LIBS@ @TOR_LIB_MATH@ @TOR_LIBEVENT_LIBS@ @TOR_OPENSSL_LIBS@ \
@TOR_LIB_WS32@ @TOR_LIB_GDI@ @CURVE25519_LIBS@ @TOR_SYSTEMD_LIBS@
-TESTING_TOR_BINARY = ./src/or/tor-cov
+TESTING_TOR_BINARY = $(top_builddir)/src/or/tor-cov
else
-TESTING_TOR_BINARY = ./src/or/tor
+TESTING_TOR_BINARY = $(top_builddir)/src/or/tor
endif
ORHEADERS = \
@@ -189,36 +189,24 @@ ORHEADERS = \
noinst_HEADERS+= $(ORHEADERS) micro-revision.i
-src/or/config_codedigest.o: src/or/or_sha1.i
-
micro-revision.i: FORCE
- @rm -f micro-revision.tmp; \
- if test -d "$(top_srcdir)/.git" && \
- test -x "`which git 2>&1;true`"; then \
- HASH="`cd "$(top_srcdir)" && git rev-parse --short=16 HEAD`"; \
- echo \"$$HASH\" > micro-revision.tmp; \
- fi; \
- if test ! -f micro-revision.tmp ; then \
- if test ! -f micro-revision.i ; then \
- echo '""' > micro-revision.i; \
- fi; \
- elif test ! -f micro-revision.i || \
- test x"`cat micro-revision.tmp`" != x"`cat micro-revision.i`"; then \
- mv micro-revision.tmp micro-revision.i; \
- fi; true
-
-src/or/or_sha1.i: $(src_or_tor_SOURCES) $(src_or_libtor_a_SOURCES) $(ORHEADERS)
- $(AM_V_GEN)if test "@SHA1SUM@" != none; then \
- (cd "$(srcdir)" && "@SHA1SUM@" $(src_or_tor_SOURCES) $(src_or_libtor_a_SOURCES) $(ORHEADERS) ) | \
- "@SED@" -n 's/^\(.*\)$$/"\1\\n"/p' > src/or/or_sha1.i; \
- elif test "@OPENSSL@" != none; then \
- (cd "$(srcdir)" && "@OPENSSL@" sha1 $(src_or_tor_SOURCES) $(src_or_libtor_a_SOURCES) $(ORHEADERS)) | \
- "@SED@" -n 's/SHA1(\(.*\))= \(.*\)/"\2 \1\\n"/p' > src/or/or_sha1.i; \
- else \
- rm src/or/or_sha1.i; \
- touch src/or/or_sha1.i; \
- fi
-
-CLEANFILES+= micro-revision.i src/or/micro-revision.i
+ $(AM_V_GEN)rm -f micro-revision.tmp; \
+ if test -d "$(top_srcdir)/.git" && \
+ test -x "`which git 2>&1;true`"; then \
+ HASH="`cd "$(top_srcdir)" && git rev-parse --short=16 HEAD`"; \
+ echo \"$$HASH\" > micro-revision.tmp; \
+ fi; \
+ if test ! -f micro-revision.tmp; then \
+ if test ! -f micro-revision.i; then \
+ echo '""' > micro-revision.i; \
+ fi; \
+ elif test ! -f micro-revision.i || \
+ test x"`cat micro-revision.tmp`" != x"`cat micro-revision.i`"; then \
+ mv micro-revision.tmp micro-revision.i; \
+ fi; \
+ rm -f micro-revision.tmp; \
+ true
+
+CLEANFILES+= micro-revision.i src/or/micro-revision.i micro-revision.tmp
FORCE:
diff --git a/src/or/main.c b/src/or/main.c
index abf3230c4c..3fb7de6f6c 100644
--- a/src/or/main.c
+++ b/src/or/main.c
@@ -63,7 +63,7 @@
#include <openssl/crypto.h>
#endif
#include "memarea.h"
-#include "../common/sandbox.h"
+#include "sandbox.h"
#ifdef HAVE_EVENT2_EVENT_H
#include <event2/event.h>
@@ -97,6 +97,7 @@ static void second_elapsed_callback(periodic_timer_t *timer, void *args);
static int conn_close_if_marked(int i);
static void connection_start_reading_from_linked_conn(connection_t *conn);
static int connection_should_read_from_linked_conn(connection_t *conn);
+static int run_main_loop_until_done(void);
/********* START VARIABLES **********/
@@ -130,8 +131,6 @@ static uint64_t stats_n_bytes_written = 0;
time_t time_of_process_start = 0;
/** How many seconds have we been running? */
long stats_n_seconds_working = 0;
-/** When do we next launch DNS wildcarding checks? */
-static time_t time_to_check_for_correct_dns = 0;
/** How often will we honor SIGNEWNYM requests? */
#define MAX_SIGNEWNYM_RATE 10
@@ -1201,7 +1200,46 @@ get_signewnym_epoch(void)
return newnym_epoch;
}
-static time_t time_to_check_descriptor = 0;
+typedef struct {
+ time_t last_rotated_x509_certificate;
+ time_t check_v3_certificate;
+ time_t check_listeners;
+ time_t download_networkstatus;
+ time_t try_getting_descriptors;
+ time_t reset_descriptor_failures;
+ time_t add_entropy;
+ time_t write_bridge_status_file;
+ time_t downrate_stability;
+ time_t save_stability;
+ time_t clean_caches;
+ time_t recheck_bandwidth;
+ time_t check_for_expired_networkstatus;
+ time_t write_stats_files;
+ time_t write_bridge_stats;
+ time_t check_port_forwarding;
+ time_t launch_reachability_tests;
+ time_t retry_dns_init;
+ time_t next_heartbeat;
+ time_t check_descriptor;
+ /** When do we next launch DNS wildcarding checks? */
+ time_t check_for_correct_dns;
+} time_to_t;
+
+static time_to_t time_to = {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
+};
+
+/** Reset all the time_to's so we'll do all our actions again as if we
+ * just started up.
+ * Useful if our clock just moved back a long time from the future,
+ * so we don't wait until that future arrives again before acting.
+ */
+void
+reset_all_main_loop_timers(void)
+{
+ memset(&time_to, 0, sizeof(time_to));
+}
+
/**
* Update our schedule so that we'll check whether we need to update our
* descriptor immediately, rather than after up to CHECK_DESCRIPTOR_INTERVAL
@@ -1210,7 +1248,7 @@ static time_t time_to_check_descriptor = 0;
void
reschedule_descriptor_update_check(void)
{
- time_to_check_descriptor = 0;
+ time_to.check_descriptor = 0;
}
/** Perform regular maintenance tasks. This function gets run once per
@@ -1219,27 +1257,7 @@ reschedule_descriptor_update_check(void)
static void
run_scheduled_events(time_t now)
{
- static time_t last_rotated_x509_certificate = 0;
- static time_t time_to_check_v3_certificate = 0;
- static time_t time_to_check_listeners = 0;
- static time_t time_to_download_networkstatus = 0;
- static time_t time_to_shrink_memory = 0;
- static time_t time_to_try_getting_descriptors = 0;
- static time_t time_to_reset_descriptor_failures = 0;
- static time_t time_to_add_entropy = 0;
- static time_t time_to_write_bridge_status_file = 0;
- static time_t time_to_downrate_stability = 0;
- static time_t time_to_save_stability = 0;
- static time_t time_to_clean_caches = 0;
- static time_t time_to_recheck_bandwidth = 0;
- static time_t time_to_check_for_expired_networkstatus = 0;
- static time_t time_to_write_stats_files = 0;
- static time_t time_to_write_bridge_stats = 0;
- static time_t time_to_check_port_forwarding = 0;
- static time_t time_to_launch_reachability_tests = 0;
static int should_init_bridge_stats = 1;
- static time_t time_to_retry_dns_init = 0;
- static time_t time_to_next_heartbeat = 0;
const or_options_t *options = get_options();
int is_server = server_mode(options);
@@ -1271,7 +1289,7 @@ run_scheduled_events(time_t now)
get_onion_key_set_at()+MIN_ONION_KEY_LIFETIME < now) {
log_info(LD_GENERAL,"Rotating onion key.");
rotate_onion_key();
- cpuworkers_rotate();
+ cpuworkers_rotate_keyinfo();
if (router_rebuild_descriptor(1)<0) {
log_info(LD_CONFIG, "Couldn't rebuild router descriptor");
}
@@ -1280,18 +1298,18 @@ run_scheduled_events(time_t now)
}
if (!should_delay_dir_fetches(options, NULL) &&
- time_to_try_getting_descriptors < now) {
+ time_to.try_getting_descriptors < now) {
update_all_descriptor_downloads(now);
update_extrainfo_downloads(now);
if (router_have_minimum_dir_info())
- time_to_try_getting_descriptors = now + LAZY_DESCRIPTOR_RETRY_INTERVAL;
+ time_to.try_getting_descriptors = now + LAZY_DESCRIPTOR_RETRY_INTERVAL;
else
- time_to_try_getting_descriptors = now + GREEDY_DESCRIPTOR_RETRY_INTERVAL;
+ time_to.try_getting_descriptors = now + GREEDY_DESCRIPTOR_RETRY_INTERVAL;
}
- if (time_to_reset_descriptor_failures < now) {
+ if (time_to.reset_descriptor_failures < now) {
router_reset_descriptor_download_failures();
- time_to_reset_descriptor_failures =
+ time_to.reset_descriptor_failures =
now + DESCRIPTOR_FAILURE_RESET_INTERVAL;
}
@@ -1300,28 +1318,29 @@ run_scheduled_events(time_t now)
/* 1b. Every MAX_SSL_KEY_LIFETIME_INTERNAL seconds, we change our
* TLS context. */
- if (!last_rotated_x509_certificate)
- last_rotated_x509_certificate = now;
- if (last_rotated_x509_certificate+MAX_SSL_KEY_LIFETIME_INTERNAL < now) {
+ if (!time_to.last_rotated_x509_certificate)
+ time_to.last_rotated_x509_certificate = now;
+ if (time_to.last_rotated_x509_certificate +
+ MAX_SSL_KEY_LIFETIME_INTERNAL < now) {
log_info(LD_GENERAL,"Rotating tls context.");
if (router_initialize_tls_context() < 0) {
log_warn(LD_BUG, "Error reinitializing TLS context");
/* XXX is it a bug here, that we just keep going? -RD */
}
- last_rotated_x509_certificate = now;
+ time_to.last_rotated_x509_certificate = now;
/* We also make sure to rotate the TLS connections themselves if they've
* been up for too long -- but that's done via is_bad_for_new_circs in
* connection_run_housekeeping() above. */
}
- if (time_to_add_entropy < now) {
- if (time_to_add_entropy) {
+ if (time_to.add_entropy < now) {
+ if (time_to.add_entropy) {
/* We already seeded once, so don't die on failure. */
crypto_seed_rng(0);
}
/** How often do we add more entropy to OpenSSL's RNG pool? */
#define ENTROPY_INTERVAL (60*60)
- time_to_add_entropy = now + ENTROPY_INTERVAL;
+ time_to.add_entropy = now + ENTROPY_INTERVAL;
}
/* 1c. If we have to change the accounting interval or record
@@ -1329,10 +1348,10 @@ run_scheduled_events(time_t now)
if (accounting_is_enabled(options))
accounting_run_housekeeping(now);
- if (time_to_launch_reachability_tests < now &&
+ if (time_to.launch_reachability_tests < now &&
(authdir_mode_tests_reachability(options)) &&
!net_is_disabled()) {
- time_to_launch_reachability_tests = now + REACHABILITY_TEST_INTERVAL;
+ time_to.launch_reachability_tests = now + REACHABILITY_TEST_INTERVAL;
/* try to determine reachability of the other Tor relays */
dirserv_test_reachability(now);
}
@@ -1340,29 +1359,29 @@ run_scheduled_events(time_t now)
/* 1d. Periodically, we discount older stability information so that new
* stability info counts more, and save the stability information to disk as
* appropriate. */
- if (time_to_downrate_stability < now)
- time_to_downrate_stability = rep_hist_downrate_old_runs(now);
+ if (time_to.downrate_stability < now)
+ time_to.downrate_stability = rep_hist_downrate_old_runs(now);
if (authdir_mode_tests_reachability(options)) {
- if (time_to_save_stability < now) {
- if (time_to_save_stability && rep_hist_record_mtbf_data(now, 1)<0) {
+ if (time_to.save_stability < now) {
+ if (time_to.save_stability && rep_hist_record_mtbf_data(now, 1)<0) {
log_warn(LD_GENERAL, "Couldn't store mtbf data.");
}
#define SAVE_STABILITY_INTERVAL (30*60)
- time_to_save_stability = now + SAVE_STABILITY_INTERVAL;
+ time_to.save_stability = now + SAVE_STABILITY_INTERVAL;
}
}
/* 1e. Periodically, if we're a v3 authority, we check whether our cert is
* close to expiring and warn the admin if it is. */
- if (time_to_check_v3_certificate < now) {
+ if (time_to.check_v3_certificate < now) {
v3_authority_check_key_expiry();
#define CHECK_V3_CERTIFICATE_INTERVAL (5*60)
- time_to_check_v3_certificate = now + CHECK_V3_CERTIFICATE_INTERVAL;
+ time_to.check_v3_certificate = now + CHECK_V3_CERTIFICATE_INTERVAL;
}
/* 1f. Check whether our networkstatus has expired.
*/
- if (time_to_check_for_expired_networkstatus < now) {
+ if (time_to.check_for_expired_networkstatus < now) {
networkstatus_t *ns = networkstatus_get_latest_consensus();
/*XXXX RD: This value needs to be the same as REASONABLY_LIVE_TIME in
* networkstatus_get_reasonably_live_consensus(), but that value is way
@@ -1373,68 +1392,68 @@ run_scheduled_events(time_t now)
router_dir_info_changed();
}
#define CHECK_EXPIRED_NS_INTERVAL (2*60)
- time_to_check_for_expired_networkstatus = now + CHECK_EXPIRED_NS_INTERVAL;
+ time_to.check_for_expired_networkstatus = now + CHECK_EXPIRED_NS_INTERVAL;
}
/* 1g. Check whether we should write statistics to disk.
*/
- if (time_to_write_stats_files < now) {
+ if (time_to.write_stats_files < now) {
#define CHECK_WRITE_STATS_INTERVAL (60*60)
- time_t next_time_to_write_stats_files = (time_to_write_stats_files > 0 ?
- time_to_write_stats_files : now) + CHECK_WRITE_STATS_INTERVAL;
+ time_t next_time_to_write_stats_files = (time_to.write_stats_files > 0 ?
+ time_to.write_stats_files : now) + CHECK_WRITE_STATS_INTERVAL;
if (options->CellStatistics) {
time_t next_write =
- rep_hist_buffer_stats_write(time_to_write_stats_files);
+ rep_hist_buffer_stats_write(time_to.write_stats_files);
if (next_write && next_write < next_time_to_write_stats_files)
next_time_to_write_stats_files = next_write;
}
if (options->DirReqStatistics) {
- time_t next_write = geoip_dirreq_stats_write(time_to_write_stats_files);
+ time_t next_write = geoip_dirreq_stats_write(time_to.write_stats_files);
if (next_write && next_write < next_time_to_write_stats_files)
next_time_to_write_stats_files = next_write;
}
if (options->EntryStatistics) {
- time_t next_write = geoip_entry_stats_write(time_to_write_stats_files);
+ time_t next_write = geoip_entry_stats_write(time_to.write_stats_files);
if (next_write && next_write < next_time_to_write_stats_files)
next_time_to_write_stats_files = next_write;
}
if (options->HiddenServiceStatistics) {
- time_t next_write = rep_hist_hs_stats_write(time_to_write_stats_files);
+ time_t next_write = rep_hist_hs_stats_write(time_to.write_stats_files);
if (next_write && next_write < next_time_to_write_stats_files)
next_time_to_write_stats_files = next_write;
}
if (options->ExitPortStatistics) {
- time_t next_write = rep_hist_exit_stats_write(time_to_write_stats_files);
+ time_t next_write = rep_hist_exit_stats_write(time_to.write_stats_files);
if (next_write && next_write < next_time_to_write_stats_files)
next_time_to_write_stats_files = next_write;
}
if (options->ConnDirectionStatistics) {
- time_t next_write = rep_hist_conn_stats_write(time_to_write_stats_files);
+ time_t next_write = rep_hist_conn_stats_write(time_to.write_stats_files);
if (next_write && next_write < next_time_to_write_stats_files)
next_time_to_write_stats_files = next_write;
}
if (options->BridgeAuthoritativeDir) {
- time_t next_write = rep_hist_desc_stats_write(time_to_write_stats_files);
+ time_t next_write = rep_hist_desc_stats_write(time_to.write_stats_files);
if (next_write && next_write < next_time_to_write_stats_files)
next_time_to_write_stats_files = next_write;
}
- time_to_write_stats_files = next_time_to_write_stats_files;
+ time_to.write_stats_files = next_time_to_write_stats_files;
}
/* 1h. Check whether we should write bridge statistics to disk.
*/
if (should_record_bridge_info(options)) {
- if (time_to_write_bridge_stats < now) {
+ if (time_to.write_bridge_stats < now) {
if (should_init_bridge_stats) {
/* (Re-)initialize bridge statistics. */
geoip_bridge_stats_init(now);
- time_to_write_bridge_stats = now + WRITE_STATS_INTERVAL;
+ time_to.write_bridge_stats = now + WRITE_STATS_INTERVAL;
should_init_bridge_stats = 0;
} else {
/* Possibly write bridge statistics to disk and ask when to write
* them next time. */
- time_to_write_bridge_stats = geoip_bridge_stats_write(
- time_to_write_bridge_stats);
+ time_to.write_bridge_stats = geoip_bridge_stats_write(
+ time_to.write_bridge_stats);
}
}
} else if (!should_init_bridge_stats) {
@@ -1444,19 +1463,19 @@ run_scheduled_events(time_t now)
}
/* Remove old information from rephist and the rend cache. */
- if (time_to_clean_caches < now) {
+ if (time_to.clean_caches < now) {
rep_history_clean(now - options->RephistTrackTime);
rend_cache_clean(now);
rend_cache_clean_v2_descs_as_dir(now, 0);
microdesc_cache_rebuild(NULL, 0);
#define CLEAN_CACHES_INTERVAL (30*60)
- time_to_clean_caches = now + CLEAN_CACHES_INTERVAL;
+ time_to.clean_caches = now + CLEAN_CACHES_INTERVAL;
}
#define RETRY_DNS_INTERVAL (10*60)
/* If we're a server and initializing dns failed, retry periodically. */
- if (time_to_retry_dns_init < now) {
- time_to_retry_dns_init = now + RETRY_DNS_INTERVAL;
+ if (time_to.retry_dns_init < now) {
+ time_to.retry_dns_init = now + RETRY_DNS_INTERVAL;
if (is_server && has_dns_init_failed())
dns_init();
}
@@ -1471,9 +1490,9 @@ run_scheduled_events(time_t now)
/* 2b. Once per minute, regenerate and upload the descriptor if the old
* one is inaccurate. */
- if (time_to_check_descriptor < now && !options->DisableNetwork) {
+ if (time_to.check_descriptor < now && !options->DisableNetwork) {
static int dirport_reachability_count = 0;
- time_to_check_descriptor = now + CHECK_DESCRIPTOR_INTERVAL;
+ time_to.check_descriptor = now + CHECK_DESCRIPTOR_INTERVAL;
check_descriptor_bandwidth_changed(now);
check_descriptor_ipaddress_changed(now);
mark_my_descriptor_dirty_if_too_old(now);
@@ -1487,18 +1506,18 @@ run_scheduled_events(time_t now)
consider_testing_reachability(1, dirport_reachability_count==0);
if (++dirport_reachability_count > 5)
dirport_reachability_count = 0;
- } else if (time_to_recheck_bandwidth < now) {
+ } else if (time_to.recheck_bandwidth < now) {
/* If we haven't checked for 12 hours and our bandwidth estimate is
* low, do another bandwidth test. This is especially important for
* bridges, since they might go long periods without much use. */
const routerinfo_t *me = router_get_my_routerinfo();
- if (time_to_recheck_bandwidth && me &&
+ if (time_to.recheck_bandwidth && me &&
me->bandwidthcapacity < me->bandwidthrate &&
me->bandwidthcapacity < 51200) {
reset_bandwidth_test();
}
#define BANDWIDTH_RECHECK_INTERVAL (12*60*60)
- time_to_recheck_bandwidth = now + BANDWIDTH_RECHECK_INTERVAL;
+ time_to.recheck_bandwidth = now + BANDWIDTH_RECHECK_INTERVAL;
}
}
@@ -1516,8 +1535,8 @@ run_scheduled_events(time_t now)
#define networkstatus_dl_check_interval(o) ((o)->TestingTorNetwork ? 1 : 60)
if (!should_delay_dir_fetches(options, NULL) &&
- time_to_download_networkstatus < now) {
- time_to_download_networkstatus =
+ time_to.download_networkstatus < now) {
+ time_to.download_networkstatus =
now + networkstatus_dl_check_interval(options);
update_networkstatus_downloads(now);
}
@@ -1547,9 +1566,9 @@ run_scheduled_events(time_t now)
connection_expire_held_open();
/* 3d. And every 60 seconds, we relaunch listeners if any died. */
- if (!net_is_disabled() && time_to_check_listeners < now) {
+ if (!net_is_disabled() && time_to.check_listeners < now) {
retry_all_listeners(NULL, NULL, 0);
- time_to_check_listeners = now+60;
+ time_to.check_listeners = now+60;
}
/* 4. Every second, we try a new circuit if there are no valid
@@ -1573,22 +1592,6 @@ run_scheduled_events(time_t now)
for (i=0;i<smartlist_len(connection_array);i++) {
run_connection_housekeeping(i, now);
}
- if (time_to_shrink_memory < now) {
- SMARTLIST_FOREACH(connection_array, connection_t *, conn, {
- if (conn->outbuf)
- buf_shrink(conn->outbuf);
- if (conn->inbuf)
- buf_shrink(conn->inbuf);
- });
-#ifdef ENABLE_MEMPOOL
- clean_cell_pool();
-#endif /* ENABLE_MEMPOOL */
- buf_shrink_freelists(0);
-/** How often do we check buffers and pools for empty space that can be
- * deallocated? */
-#define MEM_SHRINK_INTERVAL (60)
- time_to_shrink_memory = now + MEM_SHRINK_INTERVAL;
- }
/* 6. And remove any marked circuits... */
circuit_close_all_marked();
@@ -1617,28 +1620,29 @@ run_scheduled_events(time_t now)
* to us. */
if (!net_is_disabled() &&
public_server_mode(options) &&
- time_to_check_for_correct_dns < now &&
+ time_to.check_for_correct_dns < now &&
! router_my_exit_policy_is_reject_star()) {
- if (!time_to_check_for_correct_dns) {
- time_to_check_for_correct_dns = now + 60 + crypto_rand_int(120);
+ if (!time_to.check_for_correct_dns) {
+ time_to.check_for_correct_dns =
+ crypto_rand_time_range(now + 60, now + 180);
} else {
dns_launch_correctness_checks();
- time_to_check_for_correct_dns = now + 12*3600 +
+ time_to.check_for_correct_dns = now + 12*3600 +
crypto_rand_int(12*3600);
}
}
/* 10. write bridge networkstatus file to disk */
if (options->BridgeAuthoritativeDir &&
- time_to_write_bridge_status_file < now) {
+ time_to.write_bridge_status_file < now) {
networkstatus_dump_bridge_status_to_file(now);
#define BRIDGE_STATUSFILE_INTERVAL (30*60)
- time_to_write_bridge_status_file = now+BRIDGE_STATUSFILE_INTERVAL;
+ time_to.write_bridge_status_file = now+BRIDGE_STATUSFILE_INTERVAL;
}
/* 11. check the port forwarding app */
if (!net_is_disabled() &&
- time_to_check_port_forwarding < now &&
+ time_to.check_port_forwarding < now &&
options->PortForwarding &&
is_server) {
#define PORT_FORWARDING_CHECK_INTERVAL 5
@@ -1651,7 +1655,7 @@ run_scheduled_events(time_t now)
SMARTLIST_FOREACH(ports_to_forward, char *, cp, tor_free(cp));
smartlist_free(ports_to_forward);
}
- time_to_check_port_forwarding = now+PORT_FORWARDING_CHECK_INTERVAL;
+ time_to.check_port_forwarding = now+PORT_FORWARDING_CHECK_INTERVAL;
}
/* 11b. check pending unconfigured managed proxies */
@@ -1660,10 +1664,10 @@ run_scheduled_events(time_t now)
/* 12. write the heartbeat message */
if (options->HeartbeatPeriod &&
- time_to_next_heartbeat <= now) {
- if (time_to_next_heartbeat) /* don't log the first heartbeat */
+ time_to.next_heartbeat <= now) {
+ if (time_to.next_heartbeat) /* don't log the first heartbeat */
log_heartbeat(now);
- time_to_next_heartbeat = now+options->HeartbeatPeriod;
+ time_to.next_heartbeat = now+options->HeartbeatPeriod;
}
}
@@ -1763,8 +1767,6 @@ second_elapsed_callback(periodic_timer_t *timer, void *arg)
if (seconds_elapsed < -NUM_JUMPED_SECONDS_BEFORE_WARN ||
seconds_elapsed >= NUM_JUMPED_SECONDS_BEFORE_WARN) {
circuit_note_clock_jumped(seconds_elapsed);
- /* XXX if the time jumps *back* many months, do our events in
- * run_scheduled_events() recover? I don't think they do. -RD */
} else if (seconds_elapsed > 0)
stats_n_seconds_working += seconds_elapsed;
@@ -1888,7 +1890,7 @@ dns_servers_relaunch_checks(void)
{
if (server_mode(get_options())) {
dns_reset_correctness_checks();
- time_to_check_for_correct_dns = 0;
+ time_to.check_for_correct_dns = 0;
}
}
@@ -1960,9 +1962,9 @@ do_hup(void)
* force a retry there. */
if (server_mode(options)) {
- /* Restart cpuworker and dnsworker processes, so they get up-to-date
+ /* Update cpuworker and dnsworker processes, so they get up-to-date
* configuration options. */
- cpuworkers_rotate();
+ cpuworkers_rotate_keyinfo();
dns_reset();
}
return 0;
@@ -1972,7 +1974,6 @@ do_hup(void)
int
do_main_loop(void)
{
- int loop_result;
time_t now;
/* initialize dns resolve map, spawn workers if needed */
@@ -2004,11 +2005,6 @@ do_main_loop(void)
}
}
-#ifdef ENABLE_MEMPOOLS
- /* Set up the packed_cell_t memory pool. */
- init_cell_pool();
-#endif /* ENABLE_MEMPOOLS */
-
/* Set up our buckets */
connection_bucket_init();
#ifndef USE_BUFFEREVENTS
@@ -2093,55 +2089,91 @@ do_main_loop(void)
#endif
#ifdef HAVE_SYSTEMD
- log_notice(LD_GENERAL, "Signaling readiness to systemd");
- sd_notify(0, "READY=1");
+ {
+ const int r = sd_notify(0, "READY=1");
+ if (r < 0) {
+ log_warn(LD_GENERAL, "Unable to send readiness to systemd: %s",
+ strerror(r));
+ } else if (r > 0) {
+ log_notice(LD_GENERAL, "Signaled readiness to systemd");
+ } else {
+ log_info(LD_GENERAL, "Systemd NOTIFY_SOCKET not present.");
+ }
+ }
#endif
- for (;;) {
- if (nt_service_is_stopping())
- return 0;
+ return run_main_loop_until_done();
+}
+
+/**
+ * Run the main loop a single time. Return 0 for "exit"; -1 for "exit with
+ * error", and 1 for "run this again."
+ */
+static int
+run_main_loop_once(void)
+{
+ int loop_result;
+
+ if (nt_service_is_stopping())
+ return 0;
#ifndef _WIN32
- /* Make it easier to tell whether libevent failure is our fault or not. */
- errno = 0;
+ /* Make it easier to tell whether libevent failure is our fault or not. */
+ errno = 0;
#endif
- /* All active linked conns should get their read events activated. */
- SMARTLIST_FOREACH(active_linked_connection_lst, connection_t *, conn,
- event_active(conn->read_event, EV_READ, 1));
- called_loop_once = smartlist_len(active_linked_connection_lst) ? 1 : 0;
-
- update_approx_time(time(NULL));
-
- /* poll until we have an event, or the second ends, or until we have
- * some active linked connections to trigger events for. */
- loop_result = event_base_loop(tor_libevent_get_base(),
- called_loop_once ? EVLOOP_ONCE : 0);
-
- /* let catch() handle things like ^c, and otherwise don't worry about it */
- if (loop_result < 0) {
- int e = tor_socket_errno(-1);
- /* let the program survive things like ^z */
- if (e != EINTR && !ERRNO_IS_EINPROGRESS(e)) {
- log_err(LD_NET,"libevent call with %s failed: %s [%d]",
- tor_libevent_get_method(), tor_socket_strerror(e), e);
- return -1;
+ /* All active linked conns should get their read events activated. */
+ SMARTLIST_FOREACH(active_linked_connection_lst, connection_t *, conn,
+ event_active(conn->read_event, EV_READ, 1));
+ called_loop_once = smartlist_len(active_linked_connection_lst) ? 1 : 0;
+
+ update_approx_time(time(NULL));
+
+ /* poll until we have an event, or the second ends, or until we have
+ * some active linked connections to trigger events for. */
+ loop_result = event_base_loop(tor_libevent_get_base(),
+ called_loop_once ? EVLOOP_ONCE : 0);
+
+ /* let catch() handle things like ^c, and otherwise don't worry about it */
+ if (loop_result < 0) {
+ int e = tor_socket_errno(-1);
+ /* let the program survive things like ^z */
+ if (e != EINTR && !ERRNO_IS_EINPROGRESS(e)) {
+ log_err(LD_NET,"libevent call with %s failed: %s [%d]",
+ tor_libevent_get_method(), tor_socket_strerror(e), e);
+ return -1;
#ifndef _WIN32
- } else if (e == EINVAL) {
- log_warn(LD_NET, "EINVAL from libevent: should you upgrade libevent?");
- if (got_libevent_error())
- return -1;
+ } else if (e == EINVAL) {
+ log_warn(LD_NET, "EINVAL from libevent: should you upgrade libevent?");
+ if (got_libevent_error())
+ return -1;
#endif
- } else {
- if (ERRNO_IS_EINPROGRESS(e))
- log_warn(LD_BUG,
- "libevent call returned EINPROGRESS? Please report.");
- log_debug(LD_NET,"libevent call interrupted.");
- /* You can't trust the results of this poll(). Go back to the
- * top of the big for loop. */
- continue;
- }
+ } else {
+ if (ERRNO_IS_EINPROGRESS(e))
+ log_warn(LD_BUG,
+ "libevent call returned EINPROGRESS? Please report.");
+ log_debug(LD_NET,"libevent call interrupted.");
+ /* You can't trust the results of this poll(). Go back to the
+ * top of the big for loop. */
+ return 1;
}
}
+
+ return 1;
+}
+
+/** Run the run_main_loop_once() function until it declares itself done,
+ * and return its final return value.
+ *
+ * Shadow won't invoke this function, so don't fill it up with things.
+ */
+static int
+run_main_loop_until_done(void)
+{
+ int loop_result = 1;
+ do {
+ loop_result = run_main_loop_once();
+ } while (loop_result == 1);
+ return loop_result;
}
#ifndef _WIN32 /* Only called when we're willing to use signals */
@@ -2260,7 +2292,6 @@ dumpmemusage(int severity)
dump_routerlist_mem_usage(severity);
dump_cell_pool_usage(severity);
dump_dns_mem_usage(severity);
- buf_dump_freelist_sizes(severity);
tor_log_mallinfo(severity);
}
@@ -2471,10 +2502,11 @@ tor_init(int argc, char *argv[])
if (!strcmp(cl->key, "--quiet") ||
!strcmp(cl->key, "--dump-config"))
quiet = 2;
- /* --version, --digests, and --help imply --hush */
+ /* The following options imply --hush */
if (!strcmp(cl->key, "--version") || !strcmp(cl->key, "--digests") ||
!strcmp(cl->key, "--list-torrc-options") ||
!strcmp(cl->key, "--library-versions") ||
+ !strcmp(cl->key, "--hash-password") ||
!strcmp(cl->key, "-h") || !strcmp(cl->key, "--help")) {
if (quiet < 1)
quiet = 1;
@@ -2652,7 +2684,6 @@ tor_free_all(int postfork)
channel_free_all();
connection_free_all();
scheduler_free_all();
- buf_shrink_freelists(1);
memarea_clear_freelist();
nodelist_free_all();
microdesc_free_all();
@@ -2665,9 +2696,6 @@ tor_free_all(int postfork)
router_free_all();
policies_free_all();
}
-#ifdef ENABLE_MEMPOOLS
- free_cell_pool();
-#endif /* ENABLE_MEMPOOLS */
if (!postfork) {
tor_tls_free_all();
#ifndef _WIN32
@@ -2794,6 +2822,7 @@ do_dump_config(void)
const char *arg = options->command_arg;
int how;
char *opts;
+
if (!strcmp(arg, "short")) {
how = OPTIONS_DUMP_MINIMAL;
} else if (!strcmp(arg, "non-builtin")) {
@@ -2801,8 +2830,9 @@ do_dump_config(void)
} else if (!strcmp(arg, "full")) {
how = OPTIONS_DUMP_ALL;
} else {
- printf("%s is not a recognized argument to --dump-config. "
- "Please select 'short', 'non-builtin', or 'full'", arg);
+ fprintf(stderr, "No valid argument to --dump-config found!\n");
+ fprintf(stderr, "Please select 'short', 'non-builtin', or 'full'.\n");
+
return -1;
}
@@ -3103,7 +3133,8 @@ tor_main(int argc, char *argv[])
result = 0;
break;
case CMD_VERIFY_CONFIG:
- printf("Configuration was valid\n");
+ if (quiet_level == 0)
+ printf("Configuration was valid\n");
result = 0;
break;
case CMD_DUMP_CONFIG:
diff --git a/src/or/main.h b/src/or/main.h
index f77b4711c5..542eab6565 100644
--- a/src/or/main.h
+++ b/src/or/main.h
@@ -52,6 +52,7 @@ void directory_info_has_arrived(time_t now, int from_cache);
void ip_address_changed(int at_interface);
void dns_servers_relaunch_checks(void);
+void reset_all_main_loop_timers(void);
void reschedule_descriptor_update_check(void);
MOCK_DECL(long,get_uptime,(void));
diff --git a/src/or/networkstatus.c b/src/or/networkstatus.c
index 59ba1e6cb7..da110fdff6 100644
--- a/src/or/networkstatus.c
+++ b/src/or/networkstatus.c
@@ -257,6 +257,10 @@ networkstatus_vote_free(networkstatus_t *ns)
SMARTLIST_FOREACH(ns->supported_methods, char *, c, tor_free(c));
smartlist_free(ns->supported_methods);
}
+ if (ns->package_lines) {
+ SMARTLIST_FOREACH(ns->package_lines, char *, c, tor_free(c));
+ smartlist_free(ns->package_lines);
+ }
if (ns->voters) {
SMARTLIST_FOREACH_BEGIN(ns->voters, networkstatus_voter_info_t *, voter) {
tor_free(voter->nickname);
@@ -1909,6 +1913,33 @@ getinfo_helper_networkstatus(control_connection_t *conn,
} else if (!strcmpstart(question, "ns/purpose/")) {
*answer = networkstatus_getinfo_by_purpose(question+11, time(NULL));
return *answer ? 0 : -1;
+ } else if (!strcmp(question, "consensus/packages")) {
+ const networkstatus_t *ns = networkstatus_get_latest_consensus();
+ if (ns && ns->package_lines)
+ *answer = smartlist_join_strings(ns->package_lines, "\n", 0, NULL);
+ else
+ *errmsg = "No consensus available";
+ return *answer ? 0 : -1;
+ } else if (!strcmp(question, "consensus/valid-after") ||
+ !strcmp(question, "consensus/fresh-until") ||
+ !strcmp(question, "consensus/valid-until")) {
+ const networkstatus_t *ns = networkstatus_get_latest_consensus();
+ if (ns) {
+ time_t t;
+ if (!strcmp(question, "consensus/valid-after"))
+ t = ns->valid_after;
+ else if (!strcmp(question, "consensus/fresh-until"))
+ t = ns->fresh_until;
+ else
+ t = ns->valid_until;
+
+ char tbuf[ISO_TIME_LEN+1];
+ format_iso_time(tbuf, t);
+ *answer = tor_strdup(tbuf);
+ } else {
+ *errmsg = "No consensus available";
+ }
+ return *answer ? 0 : -1;
} else {
return 0;
}
diff --git a/src/or/nodelist.c b/src/or/nodelist.c
index 249c198214..8f8adb42b5 100644
--- a/src/or/nodelist.c
+++ b/src/or/nodelist.c
@@ -1354,9 +1354,10 @@ get_dir_info_status_string(void)
}
/** Iterate over the servers listed in <b>consensus</b>, and count how many of
- * them seem like ones we'd use, and how many of <em>those</em> we have
- * descriptors for. Store the former in *<b>num_usable</b> and the latter in
- * *<b>num_present</b>.
+ * them seem like ones we'd use (store this in *<b>num_usable</b>), and how
+ * many of <em>those</em> we have descriptors for (store this in
+ * *<b>num_present</b>).
+ *
* If <b>in_set</b> is non-NULL, only consider those routers in <b>in_set</b>.
* If <b>exit_only</b> is USABLE_DESCRIPTOR_EXIT_ONLY, only consider nodes
* with the Exit flag.
@@ -1409,10 +1410,11 @@ count_usable_descriptors(int *num_present, int *num_usable,
}
/** Return an estimate of which fraction of usable paths through the Tor
- * network we have available for use.
- * Count how many routers seem like ones we'd use, and how many of
- * <em>those</em> we have descriptors for. Store the former in
- * *<b>num_usable_out</b> and the latter in *<b>num_present_out</b>.
+ * network we have available for use. Count how many routers seem like ones
+ * we'd use (store this in *<b>num_usable_out</b>), and how many of
+ * <em>those</em> we have descriptors for (store this in
+ * *<b>num_present_out</b>.)
+ *
* If **<b>status_out</b> is present, allocate a new string and print the
* available percentages of guard, middle, and exit nodes to it, noting
* whether there are exits in the consensus.
@@ -1428,9 +1430,7 @@ compute_frac_paths_available(const networkstatus_t *consensus,
smartlist_t *guards = smartlist_new();
smartlist_t *mid = smartlist_new();
smartlist_t *exits = smartlist_new();
- smartlist_t *myexits= smartlist_new();
- smartlist_t *myexits_unflagged = smartlist_new();
- double f_guard, f_mid, f_exit, f_myexit, f_myexit_unflagged;
+ double f_guard, f_mid, f_exit;
double f_path = 0.0;
/* Used to determine whether there are any exits in the consensus */
int np = 0;
@@ -1475,7 +1475,7 @@ compute_frac_paths_available(const networkstatus_t *consensus,
* building exit paths */
/* Update our understanding of whether the consensus has exits */
consensus_path_type_t old_have_consensus_path = have_consensus_path;
- have_consensus_path = ((np > 0) ?
+ have_consensus_path = ((nu > 0) ?
CONSENSUS_PATH_EXIT :
CONSENSUS_PATH_INTERNAL);
@@ -1492,75 +1492,89 @@ compute_frac_paths_available(const networkstatus_t *consensus,
* browsing (as distinct from hidden service web browsing). */
}
- /* All nodes with exit flag in ExitNodes option */
- count_usable_descriptors(&np, &nu, myexits, consensus, options, now,
- options->ExitNodes, USABLE_DESCRIPTOR_EXIT_ONLY);
- log_debug(LD_NET,
- "%s: %d present, %d usable",
- "myexits",
- np,
- nu);
-
- /* Now compute the nodes in the ExitNodes option where which we don't know
- * what their exit policy is, or we know it permits something. */
- count_usable_descriptors(&np, &nu, myexits_unflagged,
- consensus, options, now,
- options->ExitNodes, USABLE_DESCRIPTOR_ALL);
- log_debug(LD_NET,
- "%s: %d present, %d usable",
- "myexits_unflagged (initial)",
- np,
- nu);
-
- SMARTLIST_FOREACH_BEGIN(myexits_unflagged, const node_t *, node) {
- if (node_has_descriptor(node) && node_exit_policy_rejects_all(node)) {
- SMARTLIST_DEL_CURRENT(myexits_unflagged, node);
- /* this node is not actually an exit */
- np--;
- /* this node is unusable as an exit */
- nu--;
- }
- } SMARTLIST_FOREACH_END(node);
-
- log_debug(LD_NET,
- "%s: %d present, %d usable",
- "myexits_unflagged (final)",
- np,
- nu);
-
f_guard = frac_nodes_with_descriptors(guards, WEIGHT_FOR_GUARD);
f_mid = frac_nodes_with_descriptors(mid, WEIGHT_FOR_MID);
f_exit = frac_nodes_with_descriptors(exits, WEIGHT_FOR_EXIT);
- f_myexit= frac_nodes_with_descriptors(myexits,WEIGHT_FOR_EXIT);
- f_myexit_unflagged=
- frac_nodes_with_descriptors(myexits_unflagged,WEIGHT_FOR_EXIT);
log_debug(LD_NET,
- "f_exit: %.2f, f_myexit: %.2f, f_myexit_unflagged: %.2f",
- f_exit,
- f_myexit,
- f_myexit_unflagged);
-
- /* If our ExitNodes list has eliminated every possible Exit node, and there
- * were some possible Exit nodes, then instead consider nodes that permit
- * exiting to some ports. */
- if (smartlist_len(myexits) == 0 &&
- smartlist_len(myexits_unflagged)) {
- f_myexit = f_myexit_unflagged;
- }
+ "f_guard: %.2f, f_mid: %.2f, f_exit: %.2f",
+ f_guard,
+ f_mid,
+ f_exit);
smartlist_free(guards);
smartlist_free(mid);
smartlist_free(exits);
- smartlist_free(myexits);
- smartlist_free(myexits_unflagged);
- /* This is a tricky point here: we don't want to make it easy for a
- * directory to trickle exits to us until it learns which exits we have
- * configured, so require that we have a threshold both of total exits
- * and usable exits. */
- if (f_myexit < f_exit)
- f_exit = f_myexit;
+ if (options->ExitNodes) {
+ double f_myexit, f_myexit_unflagged;
+ smartlist_t *myexits= smartlist_new();
+ smartlist_t *myexits_unflagged = smartlist_new();
+
+ /* All nodes with exit flag in ExitNodes option */
+ count_usable_descriptors(&np, &nu, myexits, consensus, options, now,
+ options->ExitNodes, USABLE_DESCRIPTOR_EXIT_ONLY);
+ log_debug(LD_NET,
+ "%s: %d present, %d usable",
+ "myexits",
+ np,
+ nu);
+
+ /* Now compute the nodes in the ExitNodes option where which we don't know
+ * what their exit policy is, or we know it permits something. */
+ count_usable_descriptors(&np, &nu, myexits_unflagged,
+ consensus, options, now,
+ options->ExitNodes, USABLE_DESCRIPTOR_ALL);
+ log_debug(LD_NET,
+ "%s: %d present, %d usable",
+ "myexits_unflagged (initial)",
+ np,
+ nu);
+
+ SMARTLIST_FOREACH_BEGIN(myexits_unflagged, const node_t *, node) {
+ if (node_has_descriptor(node) && node_exit_policy_rejects_all(node)) {
+ SMARTLIST_DEL_CURRENT(myexits_unflagged, node);
+ /* this node is not actually an exit */
+ np--;
+ /* this node is unusable as an exit */
+ nu--;
+ }
+ } SMARTLIST_FOREACH_END(node);
+
+ log_debug(LD_NET,
+ "%s: %d present, %d usable",
+ "myexits_unflagged (final)",
+ np,
+ nu);
+
+ f_myexit= frac_nodes_with_descriptors(myexits,WEIGHT_FOR_EXIT);
+ f_myexit_unflagged=
+ frac_nodes_with_descriptors(myexits_unflagged,WEIGHT_FOR_EXIT);
+
+ log_debug(LD_NET,
+ "f_exit: %.2f, f_myexit: %.2f, f_myexit_unflagged: %.2f",
+ f_exit,
+ f_myexit,
+ f_myexit_unflagged);
+
+ /* If our ExitNodes list has eliminated every possible Exit node, and there
+ * were some possible Exit nodes, then instead consider nodes that permit
+ * exiting to some ports. */
+ if (smartlist_len(myexits) == 0 &&
+ smartlist_len(myexits_unflagged)) {
+ f_myexit = f_myexit_unflagged;
+ }
+
+ smartlist_free(myexits);
+ smartlist_free(myexits_unflagged);
+
+ /* This is a tricky point here: we don't want to make it easy for a
+ * directory to trickle exits to us until it learns which exits we have
+ * configured, so require that we have a threshold both of total exits
+ * and usable exits. */
+ if (f_myexit < f_exit)
+ f_exit = f_myexit;
+ }
/* if the consensus has no exits, treat the exit fraction as 100% */
if (router_have_consensus_path() != CONSENSUS_PATH_EXIT) {
@@ -1656,8 +1670,6 @@ update_router_have_minimum_dir_info(void)
using_md = consensus->flavor == FLAV_MICRODESC;
-#define NOTICE_DIR_INFO_STATUS_INTERVAL (60)
-
/* Check fraction of available paths */
{
char *status = NULL;
@@ -1667,37 +1679,15 @@ update_router_have_minimum_dir_info(void)
&status);
if (paths < get_frac_paths_needed_for_circs(options,consensus)) {
- /* these messages can be excessive in testing networks */
- static ratelim_t last_warned =
- RATELIM_INIT(NOTICE_DIR_INFO_STATUS_INTERVAL);
- char *suppression_msg = NULL;
- if ((suppression_msg = rate_limit_log(&last_warned, time(NULL)))) {
- tor_snprintf(dir_info_status, sizeof(dir_info_status),
- "We need more %sdescriptors: we have %d/%d, and "
- "can only build %d%% of likely paths. (We have %s.)",
- using_md?"micro":"", num_present, num_usable,
- (int)(paths*100), status);
- log_warn(LD_NET, "%s%s", dir_info_status, suppression_msg);
- tor_free(suppression_msg);
- }
+ tor_snprintf(dir_info_status, sizeof(dir_info_status),
+ "We need more %sdescriptors: we have %d/%d, and "
+ "can only build %d%% of likely paths. (We have %s.)",
+ using_md?"micro":"", num_present, num_usable,
+ (int)(paths*100), status);
tor_free(status);
res = 0;
control_event_bootstrap(BOOTSTRAP_STATUS_REQUESTING_DESCRIPTORS, 0);
goto done;
- } else {
- /* these messages can be excessive in testing networks */
- static ratelim_t last_warned =
- RATELIM_INIT(NOTICE_DIR_INFO_STATUS_INTERVAL);
- char *suppression_msg = NULL;
- if ((suppression_msg = rate_limit_log(&last_warned, time(NULL)))) {
- tor_snprintf(dir_info_status, sizeof(dir_info_status),
- "We have enough %sdescriptors: we have %d/%d, and "
- "can build %d%% of likely paths. (We have %s.)",
- using_md?"micro":"", num_present, num_usable,
- (int)(paths*100), status);
- log_info(LD_NET, "%s%s", dir_info_status, suppression_msg);
- tor_free(suppression_msg);
- }
}
tor_free(status);
@@ -1708,10 +1698,11 @@ update_router_have_minimum_dir_info(void)
/* If paths have just become available in this update. */
if (res && !have_min_dir_info) {
- log_notice(LD_DIR,
- "We now have enough directory information to build circuits.");
control_event_client_status(LOG_NOTICE, "ENOUGH_DIR_INFO");
- control_event_bootstrap(BOOTSTRAP_STATUS_CONN_OR, 0);
+ if (control_event_bootstrap(BOOTSTRAP_STATUS_CONN_OR, 0) == 0) {
+ log_notice(LD_DIR,
+ "We now have enough directory information to build circuits.");
+ }
}
/* If paths have just become unavailable in this update. */
diff --git a/src/or/onion.c b/src/or/onion.c
index 3723a3e11e..4864792511 100644
--- a/src/or/onion.c
+++ b/src/or/onion.c
@@ -295,6 +295,8 @@ onion_pending_remove(or_circuit_t *circ)
victim = circ->onionqueue_entry;
if (victim)
onion_queue_entry_remove(victim);
+
+ cpuworker_cancel_circ_handshake(circ);
}
/** Remove a queue entry <b>victim</b> from the queue, unlinking it from
@@ -339,25 +341,25 @@ clear_pending_onions(void)
/* ============================================================ */
-/** Fill in a server_onion_keys_t object at <b>keys</b> with all of the keys
+/** Return a new server_onion_keys_t object with all of the keys
* and other info we might need to do onion handshakes. (We make a copy of
* our keys for each cpuworker to avoid race conditions with the main thread,
* and to avoid locking) */
-void
-setup_server_onion_keys(server_onion_keys_t *keys)
+server_onion_keys_t *
+server_onion_keys_new(void)
{
- memset(keys, 0, sizeof(server_onion_keys_t));
+ server_onion_keys_t *keys = tor_malloc_zero(sizeof(server_onion_keys_t));
memcpy(keys->my_identity, router_get_my_id_digest(), DIGEST_LEN);
dup_onion_keys(&keys->onion_key, &keys->last_onion_key);
keys->curve25519_key_map = construct_ntor_key_map();
keys->junk_keypair = tor_malloc_zero(sizeof(curve25519_keypair_t));
curve25519_keypair_generate(keys->junk_keypair, 0);
+ return keys;
}
-/** Release all storage held in <b>keys</b>, but do not free <b>keys</b>
- * itself (as it's likely to be stack-allocated.) */
+/** Release all storage held in <b>keys</b>. */
void
-release_server_onion_keys(server_onion_keys_t *keys)
+server_onion_keys_free(server_onion_keys_t *keys)
{
if (! keys)
return;
@@ -366,7 +368,8 @@ release_server_onion_keys(server_onion_keys_t *keys)
crypto_pk_free(keys->last_onion_key);
ntor_key_map_free(keys->curve25519_key_map);
tor_free(keys->junk_keypair);
- memset(keys, 0, sizeof(server_onion_keys_t));
+ memwipe(keys, 0, sizeof(server_onion_keys_t));
+ tor_free(keys);
}
/** Release whatever storage is held in <b>state</b>, depending on its
@@ -523,13 +526,15 @@ onion_skin_server_handshake(int type,
* bytes worth of key material in <b>keys_out_len</b>, set
* <b>rend_authenticator_out</b> to the "KH" field that can be used to
* establish introduction points at this hop, and return 0. On failure,
- * return -1. */
+ * return -1, and set *msg_out to an error message if this is worth
+ * complaining to the usre about. */
int
onion_skin_client_handshake(int type,
const onion_handshake_state_t *handshake_state,
const uint8_t *reply, size_t reply_len,
uint8_t *keys_out, size_t keys_out_len,
- uint8_t *rend_authenticator_out)
+ uint8_t *rend_authenticator_out,
+ const char **msg_out)
{
if (handshake_state->tag != type)
return -1;
@@ -537,12 +542,14 @@ onion_skin_client_handshake(int type,
switch (type) {
case ONION_HANDSHAKE_TYPE_TAP:
if (reply_len != TAP_ONIONSKIN_REPLY_LEN) {
- log_warn(LD_CIRC, "TAP reply was not of the correct length.");
+ if (msg_out)
+ *msg_out = "TAP reply was not of the correct length.";
return -1;
}
if (onion_skin_TAP_client_handshake(handshake_state->u.tap,
(const char*)reply,
- (char *)keys_out, keys_out_len) < 0)
+ (char *)keys_out, keys_out_len,
+ msg_out) < 0)
return -1;
memcpy(rend_authenticator_out, reply+DH_KEY_LEN, DIGEST_LEN);
@@ -550,26 +557,28 @@ onion_skin_client_handshake(int type,
return 0;
case ONION_HANDSHAKE_TYPE_FAST:
if (reply_len != CREATED_FAST_LEN) {
- log_warn(LD_CIRC, "CREATED_FAST reply was not of the correct length.");
+ if (msg_out)
+ *msg_out = "TAP reply was not of the correct length.";
return -1;
}
if (fast_client_handshake(handshake_state->u.fast, reply,
- keys_out, keys_out_len) < 0)
+ keys_out, keys_out_len, msg_out) < 0)
return -1;
memcpy(rend_authenticator_out, reply+DIGEST_LEN, DIGEST_LEN);
return 0;
case ONION_HANDSHAKE_TYPE_NTOR:
if (reply_len < NTOR_REPLY_LEN) {
- log_warn(LD_CIRC, "ntor reply was not of the correct length.");
+ if (msg_out)
+ *msg_out = "ntor reply was not of the correct length.";
return -1;
}
{
size_t keys_tmp_len = keys_out_len + DIGEST_LEN;
uint8_t *keys_tmp = tor_malloc(keys_tmp_len);
if (onion_skin_ntor_client_handshake(handshake_state->u.ntor,
- reply,
- keys_tmp, keys_tmp_len) < 0) {
+ reply,
+ keys_tmp, keys_tmp_len, msg_out) < 0) {
tor_free(keys_tmp);
return -1;
}
diff --git a/src/or/onion.h b/src/or/onion.h
index 35619879e4..45454f480d 100644
--- a/src/or/onion.h
+++ b/src/or/onion.h
@@ -30,8 +30,8 @@ typedef struct server_onion_keys_t {
#define MAX_ONIONSKIN_CHALLENGE_LEN 255
#define MAX_ONIONSKIN_REPLY_LEN 255
-void setup_server_onion_keys(server_onion_keys_t *keys);
-void release_server_onion_keys(server_onion_keys_t *keys);
+server_onion_keys_t *server_onion_keys_new(void);
+void server_onion_keys_free(server_onion_keys_t *keys);
void onion_handshake_state_release(onion_handshake_state_t *state);
@@ -49,7 +49,8 @@ int onion_skin_client_handshake(int type,
const onion_handshake_state_t *handshake_state,
const uint8_t *reply, size_t reply_len,
uint8_t *keys_out, size_t key_out_len,
- uint8_t *rend_authenticator_out);
+ uint8_t *rend_authenticator_out,
+ const char **msg_out);
/** A parsed CREATE, CREATE_FAST, or CREATE2 cell. */
typedef struct create_cell_t {
diff --git a/src/or/onion_fast.c b/src/or/onion_fast.c
index a52a11357c..7584112570 100644
--- a/src/or/onion_fast.c
+++ b/src/or/onion_fast.c
@@ -92,7 +92,8 @@ int
fast_client_handshake(const fast_handshake_state_t *handshake_state,
const uint8_t *handshake_reply_out,/*DIGEST_LEN*2 bytes*/
uint8_t *key_out,
- size_t key_out_len)
+ size_t key_out_len,
+ const char **msg_out)
{
uint8_t tmp[DIGEST_LEN+DIGEST_LEN];
uint8_t *out;
@@ -104,13 +105,14 @@ fast_client_handshake(const fast_handshake_state_t *handshake_state,
out_len = key_out_len+DIGEST_LEN;
out = tor_malloc(out_len);
if (crypto_expand_key_material_TAP(tmp, sizeof(tmp), out, out_len)) {
- log_warn(LD_CIRC, "Failed to expand key material");
+ if (msg_out)
+ *msg_out = "Failed to expand key material";
goto done;
}
if (tor_memneq(out, handshake_reply_out+DIGEST_LEN, DIGEST_LEN)) {
/* H(K) does *not* match. Something fishy. */
- log_warn(LD_PROTOCOL,"Digest DOES NOT MATCH on fast handshake. "
- "Bug or attack.");
+ if (msg_out)
+ *msg_out = "Digest DOES NOT MATCH on fast handshake. Bug or attack.";
goto done;
}
memcpy(key_out, out+DIGEST_LEN, key_out_len);
diff --git a/src/or/onion_fast.h b/src/or/onion_fast.h
index da3c217ae9..d50d503a73 100644
--- a/src/or/onion_fast.h
+++ b/src/or/onion_fast.h
@@ -32,7 +32,8 @@ int fast_server_handshake(const uint8_t *message_in,
int fast_client_handshake(const fast_handshake_state_t *handshake_state,
const uint8_t *handshake_reply_out,
uint8_t *key_out,
- size_t key_out_len);
+ size_t key_out_len,
+ const char **msg_out);
#endif
diff --git a/src/or/onion_ntor.c b/src/or/onion_ntor.c
index 7f58f4d758..539f06f61f 100644
--- a/src/or/onion_ntor.c
+++ b/src/or/onion_ntor.c
@@ -3,8 +3,8 @@
#include "orconfig.h"
-#include "crypto.h"
#define ONION_NTOR_PRIVATE
+#include "crypto.h"
#include "onion_ntor.h"
#include "torlog.h"
#include "util.h"
@@ -226,7 +226,8 @@ onion_skin_ntor_client_handshake(
const ntor_handshake_state_t *handshake_state,
const uint8_t *handshake_reply,
uint8_t *key_out,
- size_t key_out_len)
+ size_t key_out_len,
+ const char **msg_out)
{
const tweakset_t *T = &proto1_tweaks;
/* Sensitive stack-allocated material. Kept in an anonymous struct to make
@@ -292,7 +293,19 @@ onion_skin_ntor_client_handshake(
memwipe(&s, 0, sizeof(s));
if (bad) {
- log_warn(LD_PROTOCOL, "Invalid result from curve25519 handshake: %d", bad);
+ if (bad & 4) {
+ if (msg_out)
+ *msg_out = NULL; /* Don't report this one; we probably just had the
+ * wrong onion key.*/
+ log_fn(LOG_INFO, LD_PROTOCOL,
+ "Invalid result from curve25519 handshake: %d", bad);
+ }
+ if (bad & 3) {
+ if (msg_out)
+ *msg_out = "Zero output from curve25519 handshake";
+ log_fn(LOG_WARN, LD_PROTOCOL,
+ "Invalid result from curve25519 handshake: %d", bad);
+ }
}
return bad ? -1 : 0;
diff --git a/src/or/onion_ntor.h b/src/or/onion_ntor.h
index 230941c3c5..0a39c1de16 100644
--- a/src/or/onion_ntor.h
+++ b/src/or/onion_ntor.h
@@ -36,7 +36,8 @@ int onion_skin_ntor_client_handshake(
const ntor_handshake_state_t *handshake_state,
const uint8_t *handshake_reply,
uint8_t *key_out,
- size_t key_out_len);
+ size_t key_out_len,
+ const char **msg_out);
#ifdef ONION_NTOR_PRIVATE
diff --git a/src/or/onion_tap.c b/src/or/onion_tap.c
index 8879a22ca2..487cbeec04 100644
--- a/src/or/onion_tap.c
+++ b/src/or/onion_tap.c
@@ -183,7 +183,8 @@ int
onion_skin_TAP_client_handshake(crypto_dh_t *handshake_state,
const char *handshake_reply, /* TAP_ONIONSKIN_REPLY_LEN bytes */
char *key_out,
- size_t key_out_len)
+ size_t key_out_len,
+ const char **msg_out)
{
ssize_t len;
char *key_material=NULL;
@@ -196,14 +197,15 @@ onion_skin_TAP_client_handshake(crypto_dh_t *handshake_state,
handshake_reply, DH_KEY_LEN, key_material,
key_material_len);
if (len < 0) {
- log_warn(LD_PROTOCOL,"DH computation failed.");
+ if (msg_out)
+ *msg_out = "DH computation failed.";
goto err;
}
if (tor_memneq(key_material, handshake_reply+DH_KEY_LEN, DIGEST_LEN)) {
/* H(K) does *not* match. Something fishy. */
- log_warn(LD_PROTOCOL,"Digest DOES NOT MATCH on onion handshake. "
- "Bug or attack.");
+ if (msg_out)
+ *msg_out = "Digest DOES NOT MATCH on onion handshake. Bug or attack.";
goto err;
}
diff --git a/src/or/onion_tap.h b/src/or/onion_tap.h
index f02a4f6f51..c548b3d99f 100644
--- a/src/or/onion_tap.h
+++ b/src/or/onion_tap.h
@@ -31,7 +31,8 @@ int onion_skin_TAP_server_handshake(const char *onion_skin,
int onion_skin_TAP_client_handshake(crypto_dh_t *handshake_state,
const char *handshake_reply,
char *key_out,
- size_t key_out_len);
+ size_t key_out_len,
+ const char **msg_out);
#endif
diff --git a/src/or/or.h b/src/or/or.h
index 8a15529336..d9be1be37d 100644
--- a/src/or/or.h
+++ b/src/or/or.h
@@ -88,7 +88,7 @@
#include "crypto.h"
#include "tortls.h"
-#include "../common/torlog.h"
+#include "torlog.h"
#include "container.h"
#include "torgzip.h"
#include "address.h"
@@ -213,8 +213,7 @@ typedef enum {
#define CONN_TYPE_DIR_LISTENER 8
/** Type for HTTP connections to the directory server. */
#define CONN_TYPE_DIR 9
-/** Connection from the main process to a CPU worker process. */
-#define CONN_TYPE_CPUWORKER 10
+/* Type 10 is unused. */
/** Type for listening for connections from user interface process. */
#define CONN_TYPE_CONTROL_LISTENER 11
/** Type for connections from user interface process. */
@@ -276,17 +275,6 @@ typedef enum {
/** State for any listener connection. */
#define LISTENER_STATE_READY 0
-#define CPUWORKER_STATE_MIN_ 1
-/** State for a connection to a cpuworker process that's idle. */
-#define CPUWORKER_STATE_IDLE 1
-/** State for a connection to a cpuworker process that's processing a
- * handshake. */
-#define CPUWORKER_STATE_BUSY_ONION 2
-#define CPUWORKER_STATE_MAX_ 2
-
-#define CPUWORKER_TASK_ONION CPUWORKER_STATE_BUSY_ONION
-#define CPUWORKER_TASK_SHUTDOWN 255
-
#define OR_CONN_STATE_MIN_ 1
/** State for a connection to an OR: waiting for connect() to finish. */
#define OR_CONN_STATE_CONNECTING 1
@@ -805,12 +793,22 @@ typedef struct rend_data_t {
/** Onion address (without the .onion part) that a client requests. */
char onion_address[REND_SERVICE_ID_LEN_BASE32+1];
+ /** Descriptor ID for each replicas computed from the onion address. If
+ * the onion address is empty, this array MUST be empty. We keep them so
+ * we know when to purge our entry in the last hsdir request table. */
+ char descriptor_id[REND_NUMBER_OF_NON_CONSECUTIVE_REPLICAS][DIGEST_LEN];
+
/** (Optional) descriptor cookie that is used by a client. */
char descriptor_cookie[REND_DESC_COOKIE_LEN];
/** Authorization type for accessing a service used by a client. */
rend_auth_type_t auth_type;
+ /** Descriptor ID for a client request. The control port command HSFETCH
+ * uses this. It's set if the descriptor query should only use this
+ * descriptor ID. */
+ char desc_id_fetch[DIGEST_LEN];
+
/** Hash of the hidden service's PK used by a service. */
char rend_pk_digest[DIGEST_LEN];
@@ -1143,6 +1141,51 @@ typedef struct socks_request_t socks_request_t;
#define generic_buffer_t buf_t
#endif
+typedef struct entry_port_cfg_t {
+ /* Client port types (socks, dns, trans, natd) only: */
+ uint8_t isolation_flags; /**< Zero or more isolation flags */
+ int session_group; /**< A session group, or -1 if this port is not in a
+ * session group. */
+
+ /* Socks only: */
+ /** When both no-auth and user/pass are advertised by a SOCKS client, select
+ * no-auth. */
+ unsigned int socks_prefer_no_auth : 1;
+
+ /* Client port types only: */
+ unsigned int ipv4_traffic : 1;
+ unsigned int ipv6_traffic : 1;
+ unsigned int prefer_ipv6 : 1;
+
+ /** For a socks listener: should we cache IPv4/IPv6 DNS information that
+ * exit nodes tell us?
+ *
+ * @{ */
+ unsigned int cache_ipv4_answers : 1;
+ unsigned int cache_ipv6_answers : 1;
+ /** @} */
+ /** For a socks listeners: if we find an answer in our client-side DNS cache,
+ * should we use it?
+ *
+ * @{ */
+ unsigned int use_cached_ipv4_answers : 1;
+ unsigned int use_cached_ipv6_answers : 1;
+ /** @} */
+ /** For socks listeners: When we can automap an address to IPv4 or IPv6,
+ * do we prefer IPv6? */
+ unsigned int prefer_ipv6_virtaddr : 1;
+
+} entry_port_cfg_t;
+
+typedef struct server_port_cfg_t {
+ /* Server port types (or, dir) only: */
+ unsigned int no_advertise : 1;
+ unsigned int no_listen : 1;
+ unsigned int all_addrs : 1;
+ unsigned int bind_ipv4_only : 1;
+ unsigned int bind_ipv6_only : 1;
+} server_port_cfg_t;
+
/* Values for connection_t.magic: used to make sure that downcasts (casts from
* connection_t to foo_connection_t) are safe. */
#define BASE_CONNECTION_MAGIC 0x7C3C304Eu
@@ -1278,52 +1321,7 @@ typedef struct listener_connection_t {
* to the evdns_server_port it uses to listen to and answer connections. */
struct evdns_server_port *dns_server_port;
- /** @name Isolation parameters
- *
- * For an AP listener, these fields describe how to isolate streams that
- * arrive on the listener.
- *
- * @{
- */
- /** The session group for this listener. */
- int session_group;
- /** One or more ISO_ flags to describe how to isolate streams. */
- uint8_t isolation_flags;
- /**@}*/
- /** For SOCKS connections only: If this is set, we will choose "no
- * authentication" instead of "username/password" authentication if both
- * are offered. Used as input to parse_socks. */
- unsigned int socks_prefer_no_auth : 1;
-
- /** For a SOCKS listeners, these fields describe whether we should
- * allow IPv4 and IPv6 addresses from our exit nodes, respectively.
- *
- * @{
- */
- unsigned int socks_ipv4_traffic : 1;
- unsigned int socks_ipv6_traffic : 1;
- /** @} */
- /** For a socks listener: should we tell the exit that we prefer IPv6
- * addresses? */
- unsigned int socks_prefer_ipv6 : 1;
-
- /** For a socks listener: should we cache IPv4/IPv6 DNS information that
- * exit nodes tell us?
- *
- * @{ */
- unsigned int cache_ipv4_answers : 1;
- unsigned int cache_ipv6_answers : 1;
- /** @} */
- /** For a socks listeners: if we find an answer in our client-side DNS cache,
- * should we use it?
- *
- * @{ */
- unsigned int use_cached_ipv4_answers : 1;
- unsigned int use_cached_ipv6_answers : 1;
- /** @} */
- /** For socks listeners: When we can automap an address to IPv4 or IPv6,
- * do we prefer IPv6? */
- unsigned int prefer_ipv6_virtaddr : 1;
+ entry_port_cfg_t entry_cfg;
} listener_connection_t;
@@ -1611,12 +1609,10 @@ typedef struct entry_connection_t {
* only.) */
/* === Isolation related, AP only. === */
- /** AP only: based on which factors do we isolate this stream? */
- uint8_t isolation_flags;
- /** AP only: what session group is this stream in? */
- int session_group;
+ entry_port_cfg_t entry_cfg;
/** AP only: The newnym epoch in which we created this connection. */
unsigned nym_epoch;
+
/** AP only: The original requested address before we rewrote it. */
char *original_dest_address;
/* Other fields to isolate on already exist. The ClientAddr is addr. The
@@ -1675,36 +1671,8 @@ typedef struct entry_connection_t {
*/
unsigned int may_use_optimistic_data : 1;
- /** Should we permit IPv4 and IPv6 traffic to use this connection?
- *
- * @{ */
- unsigned int ipv4_traffic_ok : 1;
- unsigned int ipv6_traffic_ok : 1;
- /** @} */
- /** Should we say we prefer IPv6 traffic? */
- unsigned int prefer_ipv6_traffic : 1;
-
- /** For a socks listener: should we cache IPv4/IPv6 DNS information that
- * exit nodes tell us?
- *
- * @{ */
- unsigned int cache_ipv4_answers : 1;
- unsigned int cache_ipv6_answers : 1;
- /** @} */
- /** For a socks listeners: if we find an answer in our client-side DNS cache,
- * should we use it?
- *
- * @{ */
- unsigned int use_cached_ipv4_answers : 1;
- unsigned int use_cached_ipv6_answers : 1;
- /** @} */
- /** For socks listeners: When we can automap an address to IPv4 or IPv6,
- * do we prefer IPv6? */
- unsigned int prefer_ipv6_virtaddr : 1;
-
/** Are we a socks SocksSocket listener? */
unsigned int is_socks_socket:1;
-
} entry_connection_t;
typedef enum {
@@ -1773,6 +1741,9 @@ typedef struct control_connection_t {
* connection. */
unsigned int is_owning_control_connection:1;
+ /** List of ephemeral onion services belonging to this connection. */
+ smartlist_t *ephemeral_onion_services;
+
/** If we have sent an AUTHCHALLENGE reply on this connection and
* have not received a successful AUTHENTICATE command, points to
* the value which the client must send to authenticate itself;
@@ -2173,9 +2144,6 @@ typedef struct routerstatus_t {
* if the number of traits we care about ever becomes incredibly big. */
unsigned int version_known:1;
- /** True iff this router is a version that, if it caches directory info,
- * we can get microdescriptors from. */
- unsigned int version_supports_microdesc_cache:1;
/** True iff this router has a version that allows it to accept EXTEND2
* cells */
unsigned int version_supports_extend2_cells:1;
@@ -2187,6 +2155,12 @@ typedef struct routerstatus_t {
uint32_t bandwidth_kb; /**< Bandwidth (capacity) of the router as reported in
* the vote/consensus, in kilobytes/sec. */
+
+ /** The consensus has guardfraction information for this router. */
+ unsigned int has_guardfraction:1;
+ /** The guardfraction value of this router. */
+ uint32_t guardfraction_percentage;
+
char *exitsummary; /**< exit policy summary -
* XXX weasel: this probably should not stay a string. */
@@ -2459,6 +2433,9 @@ typedef struct networkstatus_t {
/** Vote only: what methods is this voter willing to use? */
smartlist_t *supported_methods;
+ /** List of 'package' lines describing hashes of downloadable packages */
+ smartlist_t *package_lines;
+
/** How long does this vote/consensus claim that authorities take to
* distribute their votes to one another? */
int vote_seconds;
@@ -2737,8 +2714,14 @@ typedef struct {
time_t expiry_time;
} cpath_build_state_t;
+/** "magic" value for an origin_circuit_t */
#define ORIGIN_CIRCUIT_MAGIC 0x35315243u
+/** "magic" value for an or_circuit_t */
#define OR_CIRCUIT_MAGIC 0x98ABC04Fu
+/** "magic" value for a circuit that would have been freed by circuit_free,
+ * but which we're keeping around until a cpuworker reply arrives. See
+ * circuit_free() for more documentation. */
+#define DEAD_CIRCUIT_MAGIC 0xdeadc14c
struct create_cell_t;
@@ -3158,6 +3141,10 @@ typedef struct or_circuit_t {
/** Pointer to an entry on the onion queue, if this circuit is waiting for a
* chance to give an onionskin to a cpuworker. Used only in onion.c */
struct onion_queue_t *onionqueue_entry;
+ /** Pointer to a workqueue entry, if this circuit has given an onionskin to
+ * a cpuworker and is waiting for a response. Used to decide whether it is
+ * safe to free a circuit or if it is still in use by a cpuworker. */
+ struct workqueue_entry_s *workqueue_entry;
/** The circuit_id used in the previous (backward) hop of this circuit. */
circid_t p_circ_id;
@@ -3204,6 +3191,9 @@ typedef struct or_circuit_t {
* to the specification? */
unsigned int remaining_relay_early_cells : 4;
+ /* We have already received an INTRODUCE1 cell on this circuit. */
+ unsigned int already_received_introduce1 : 1;
+
/** True iff this circuit was made with a CREATE_FAST cell. */
unsigned int is_first_hop : 1;
@@ -3345,44 +3335,9 @@ typedef struct port_cfg_t {
uint8_t type; /**< One of CONN_TYPE_*_LISTENER */
unsigned is_unix_addr : 1; /**< True iff this is an AF_UNIX address. */
- /* Client port types (socks, dns, trans, natd) only: */
- uint8_t isolation_flags; /**< Zero or more isolation flags */
- int session_group; /**< A session group, or -1 if this port is not in a
- * session group. */
- /* Socks only: */
- /** When both no-auth and user/pass are advertised by a SOCKS client, select
- * no-auth. */
- unsigned int socks_prefer_no_auth : 1;
-
- /* Server port types (or, dir) only: */
- unsigned int no_advertise : 1;
- unsigned int no_listen : 1;
- unsigned int all_addrs : 1;
- unsigned int bind_ipv4_only : 1;
- unsigned int bind_ipv6_only : 1;
-
- /* Client port types only: */
- unsigned int ipv4_traffic : 1;
- unsigned int ipv6_traffic : 1;
- unsigned int prefer_ipv6 : 1;
+ entry_port_cfg_t entry_cfg;
- /** For a socks listener: should we cache IPv4/IPv6 DNS information that
- * exit nodes tell us?
- *
- * @{ */
- unsigned int cache_ipv4_answers : 1;
- unsigned int cache_ipv6_answers : 1;
- /** @} */
- /** For a socks listeners: if we find an answer in our client-side DNS cache,
- * should we use it?
- *
- * @{ */
- unsigned int use_cached_ipv4_answers : 1;
- unsigned int use_cached_ipv6_answers : 1;
- /** @} */
- /** For socks listeners: When we can automap an address to IPv4 or IPv6,
- * do we prefer IPv6? */
- unsigned int prefer_ipv6_virtaddr : 1;
+ server_port_cfg_t server_cfg;
/* Unix sockets only: */
/** Path for an AF_UNIX address */
@@ -3442,8 +3397,6 @@ typedef struct {
char *Address; /**< OR only: configured address for this onion router. */
char *PidFile; /**< Where to store PID of Tor process. */
- int DynamicDHGroups; /**< Dynamic generation of prime moduli for use in DH.*/
-
routerset_t *ExitNodes; /**< Structure containing nicknames, digests,
* country codes and IP address patterns of ORs to
* consider as exits. */
@@ -3501,6 +3454,7 @@ typedef struct {
config_line_t *RecommendedVersions;
config_line_t *RecommendedClientVersions;
config_line_t *RecommendedServerVersions;
+ config_line_t *RecommendedPackages;
/** Whether dirservers allow router descriptors with private IPs. */
int DirAllowPrivateAddresses;
/** Whether routers accept EXTEND cells to routers with private IPs. */
@@ -3531,9 +3485,6 @@ typedef struct {
* for control connections. */
int ControlSocketsGroupWritable; /**< Boolean: Are control sockets g+rw? */
- config_line_t *SocksSocket; /**< List of Unix Domain Sockets to listen on
- * for SOCKS connections. */
-
int SocksSocketsGroupWritable; /**< Boolean: Are SOCKS sockets g+rw? */
/** Ports to listen on for directory connections. */
config_line_t *DirPort_lines;
@@ -3557,7 +3508,6 @@ typedef struct {
*/
unsigned int ORPort_set : 1;
unsigned int SocksPort_set : 1;
- unsigned int SocksSocket_set : 1;
unsigned int TransPort_set : 1;
unsigned int NATDPort_set : 1;
unsigned int ControlPort_set : 1;
@@ -3634,6 +3584,9 @@ typedef struct {
* circuits.) */
int Tor2webMode;
+ /** A routerset that should be used when picking RPs for HS circuits. */
+ routerset_t *Tor2webRendezvousPoints;
+
/** Close hidden service client circuits immediately when they reach
* the normal circuit-build timeout, even if they have already sent
* an INTRODUCE1 cell on its way to the service. */
@@ -3880,6 +3833,12 @@ typedef struct {
int NumEntryGuards; /**< How many entry guards do we try to establish? */
int UseEntryGuardsAsDirGuards; /** Boolean: Do we try to get directory info
* from a smallish number of fixed nodes? */
+
+ /** If 1, we use any guardfraction information we see in the
+ * consensus. If 0, we don't. If -1, let the consensus parameter
+ * decide. */
+ int UseGuardFraction;
+
int NumDirectoryGuards; /**< How many dir guards do we try to establish?
* If 0, use value from NumEntryGuards. */
int RephistTrackTime; /**< How many seconds do we keep rephist info? */
@@ -4015,6 +3974,9 @@ typedef struct {
/** Location of bandwidth measurement file */
char *V3BandwidthsFile;
+ /** Location of guardfraction file */
+ char *GuardfractionFile;
+
/** Authority only: key=value pairs that we add to our networkstatus
* consensus vote on the 'params' line. */
char *ConsensusParams;
@@ -4856,12 +4818,13 @@ typedef struct rend_encoded_v2_service_descriptor_t {
* introduction point. See also rend_intro_point_t.unreachable_count. */
#define MAX_INTRO_POINT_REACHABILITY_FAILURES 5
-/** The maximum number of distinct INTRODUCE2 cells which a hidden
- * service's introduction point will receive before it begins to
- * expire.
- *
- * XXX023 Is this number at all sane? */
-#define INTRO_POINT_LIFETIME_INTRODUCTIONS 16384
+/** The minimum and maximum number of distinct INTRODUCE2 cells which a
+ * hidden service's introduction point will receive before it begins to
+ * expire. */
+#define INTRO_POINT_MIN_LIFETIME_INTRODUCTIONS 16384
+/* Double the minimum value so the interval is [min, min * 2]. */
+#define INTRO_POINT_MAX_LIFETIME_INTRODUCTIONS \
+ (INTRO_POINT_MIN_LIFETIME_INTRODUCTIONS * 2)
/** The minimum number of seconds that an introduction point will last
* before expiring due to old age. (If it receives
@@ -4915,6 +4878,12 @@ typedef struct rend_intro_point_t {
*/
int accepted_introduce2_count;
+ /** (Service side only) Number of maximum INTRODUCE2 cells that this IP
+ * will accept. This is a random value between
+ * INTRO_POINT_MIN_LIFETIME_INTRODUCTIONS and
+ * INTRO_POINT_MAX_LIFETIME_INTRODUCTIONS. */
+ int max_introductions;
+
/** (Service side only) The time at which this intro point was first
* published, or -1 if this intro point has not yet been
* published. */
@@ -4962,7 +4931,6 @@ typedef struct rend_service_descriptor_t {
/** A cached rendezvous descriptor. */
typedef struct rend_cache_entry_t {
size_t len; /**< Length of <b>desc</b> */
- time_t received; /**< When was the descriptor received? */
time_t last_served; /**< When did we last write this one to somebody?
* (HSDir only) */
char *desc; /**< Service descriptor */
@@ -5006,7 +4974,8 @@ typedef struct dir_server_t {
**/
} dir_server_t;
-#define ROUTER_REQUIRED_MIN_BANDWIDTH (20*1024)
+#define RELAY_REQUIRED_MIN_BANDWIDTH (75*1024)
+#define BRIDGE_REQUIRED_MIN_BANDWIDTH (50*1024)
#define ROUTER_MAX_DECLARED_BANDWIDTH INT32_MAX
@@ -5030,14 +4999,13 @@ typedef struct dir_server_t {
* or extrainfo documents.
*
* Passed to router_pick_directory_server (et al)
- *
- * [XXXX NOTE: This option is only implemented for pick_trusteddirserver,
- * not pick_directory_server. If we make it work on pick_directory_server
- * too, we could conservatively make it only prevent multiple fetches to
- * the same authority, or we could aggressively make it prevent multiple
- * fetches to _any_ single directory server.]
*/
#define PDS_NO_EXISTING_SERVERDESC_FETCH (1<<3)
+/** Flag to indicate that we should not use any directory authority to which
+ * we have an existing directory connection for downloading microdescs.
+ *
+ * Passed to router_pick_directory_server (et al)
+ */
#define PDS_NO_EXISTING_MICRODESC_FETCH (1<<4)
/** This node is to be chosen as a directory guard, so don't choose any
diff --git a/src/or/reasons.c b/src/or/reasons.c
index c65acb54ae..23ab6041a6 100644
--- a/src/or/reasons.c
+++ b/src/or/reasons.c
@@ -350,6 +350,8 @@ circuit_end_reason_to_control_string(int reason)
return "NOSUCHSERVICE";
case END_CIRC_REASON_MEASUREMENT_EXPIRED:
return "MEASUREMENT_EXPIRED";
+ case END_CIRC_REASON_IP_NOW_REDUNDANT:
+ return "IP_NOW_REDUNDANT";
default:
if (is_remote) {
/*
diff --git a/src/or/relay.c b/src/or/relay.c
index d491e37024..50eaab83c8 100644
--- a/src/or/relay.c
+++ b/src/or/relay.c
@@ -26,9 +26,6 @@
#include "control.h"
#include "geoip.h"
#include "main.h"
-#ifdef ENABLE_MEMPOOLS
-#include "mempool.h"
-#endif
#include "networkstatus.h"
#include "nodelist.h"
#include "onion.h"
@@ -804,8 +801,10 @@ connection_ap_process_end_not_open(
return 0;
}
- if ((tor_addr_family(&addr) == AF_INET && !conn->ipv4_traffic_ok) ||
- (tor_addr_family(&addr) == AF_INET6 && !conn->ipv6_traffic_ok)) {
+ if ((tor_addr_family(&addr) == AF_INET &&
+ !conn->entry_cfg.ipv4_traffic) ||
+ (tor_addr_family(&addr) == AF_INET6 &&
+ !conn->entry_cfg.ipv6_traffic)) {
log_fn(LOG_PROTOCOL_WARN, LD_APP,
"Got an EXITPOLICY failure on a connection with a "
"mismatched family. Closing.");
@@ -1156,11 +1155,11 @@ connection_ap_handshake_socks_got_resolved_cell(entry_connection_t *conn,
addr_hostname = addr;
}
} else if (tor_addr_family(&addr->addr) == AF_INET) {
- if (!addr_ipv4 && conn->ipv4_traffic_ok) {
+ if (!addr_ipv4 && conn->entry_cfg.ipv4_traffic) {
addr_ipv4 = addr;
}
} else if (tor_addr_family(&addr->addr) == AF_INET6) {
- if (!addr_ipv6 && conn->ipv6_traffic_ok) {
+ if (!addr_ipv6 && conn->entry_cfg.ipv6_traffic) {
addr_ipv6 = addr;
}
}
@@ -1181,7 +1180,7 @@ connection_ap_handshake_socks_got_resolved_cell(entry_connection_t *conn,
return;
}
- if (conn->prefer_ipv6_traffic) {
+ if (conn->entry_cfg.prefer_ipv6) {
addr_best = addr_ipv6 ? addr_ipv6 : addr_ipv4;
} else {
addr_best = addr_ipv4 ? addr_ipv4 : addr_ipv6;
@@ -1327,8 +1326,8 @@ connection_edge_process_relay_cell_not_open(
return 0;
}
- if (((family == AF_INET && ! entry_conn->ipv4_traffic_ok) ||
- (family == AF_INET6 && ! entry_conn->ipv6_traffic_ok))) {
+ if ((family == AF_INET && ! entry_conn->entry_cfg.ipv4_traffic) ||
+ (family == AF_INET6 && ! entry_conn->entry_cfg.ipv6_traffic)) {
log_fn(LOG_PROTOCOL_WARN, LD_APP,
"Got a connected cell to %s with unsupported address family."
" Closing.", fmt_addr(&addr));
@@ -1644,8 +1643,9 @@ connection_edge_process_relay_cell(cell_t *cell, circuit_t *circ,
}
if ((reason = circuit_finish_handshake(TO_ORIGIN_CIRCUIT(circ),
&extended_cell.created_cell)) < 0) {
- log_warn(domain,"circuit_finish_handshake failed.");
- return reason;
+ circuit_mark_for_close(circ, -reason);
+ return 0; /* We don't want to cause a warning, so we mark the circuit
+ * here. */
}
}
if ((reason=circuit_send_next_onion_skin(TO_ORIGIN_CIRCUIT(circ)))<0) {
@@ -2249,62 +2249,12 @@ circuit_consider_sending_sendme(circuit_t *circ, crypt_path_t *layer_hint)
/** The total number of cells we have allocated. */
static size_t total_cells_allocated = 0;
-#ifdef ENABLE_MEMPOOLS
-/** A memory pool to allocate packed_cell_t objects. */
-static mp_pool_t *cell_pool = NULL;
-
-/** Allocate structures to hold cells. */
-void
-init_cell_pool(void)
-{
- tor_assert(!cell_pool);
- cell_pool = mp_pool_new(sizeof(packed_cell_t), 128*1024);
-}
-
-/** Free all storage used to hold cells (and insertion times/commands if we
- * measure cell statistics and/or if CELL_STATS events are enabled). */
-void
-free_cell_pool(void)
-{
- /* Maybe we haven't called init_cell_pool yet; need to check for it. */
- if (cell_pool) {
- mp_pool_destroy(cell_pool);
- cell_pool = NULL;
- }
-}
-
-/** Free excess storage in cell pool. */
-void
-clean_cell_pool(void)
-{
- tor_assert(cell_pool);
- mp_pool_clean(cell_pool, 0, 1);
-}
-
-#define relay_alloc_cell() \
- mp_pool_get(cell_pool)
-#define relay_free_cell(cell) \
- mp_pool_release(cell)
-
-#define RELAY_CELL_MEM_COST (sizeof(packed_cell_t) + MP_POOL_ITEM_OVERHEAD)
-
-#else /* !ENABLE_MEMPOOLS case */
-
-#define relay_alloc_cell() \
- tor_malloc_zero(sizeof(packed_cell_t))
-#define relay_free_cell(cell) \
- tor_free(cell)
-
-#define RELAY_CELL_MEM_COST (sizeof(packed_cell_t))
-
-#endif /* ENABLE_MEMPOOLS */
-
/** Release storage held by <b>cell</b>. */
static INLINE void
packed_cell_free_unchecked(packed_cell_t *cell)
{
--total_cells_allocated;
- relay_free_cell(cell);
+ tor_free(cell);
}
/** Allocate and return a new packed_cell_t. */
@@ -2312,7 +2262,7 @@ STATIC packed_cell_t *
packed_cell_new(void)
{
++total_cells_allocated;
- return relay_alloc_cell();
+ return tor_malloc_zero(sizeof(packed_cell_t));
}
/** Return a packed cell used outside by channel_t lower layer */
@@ -2341,9 +2291,6 @@ dump_cell_pool_usage(int severity)
tor_log(severity, LD_MM,
"%d cells allocated on %d circuits. %d cells leaked.",
n_cells, n_circs, (int)total_cells_allocated - n_cells);
-#ifdef ENABLE_MEMPOOLS
- mp_pool_log_status(cell_pool, severity);
-#endif
}
/** Allocate a new copy of packed <b>cell</b>. */
@@ -2423,7 +2370,7 @@ cell_queue_pop(cell_queue_t *queue)
size_t
packed_cell_mem_cost(void)
{
- return RELAY_CELL_MEM_COST;
+ return sizeof(packed_cell_t);
}
/** DOCDOC */
diff --git a/src/or/relay.h b/src/or/relay.h
index cdc2a9ae19..a4f583d11e 100644
--- a/src/or/relay.h
+++ b/src/or/relay.h
@@ -42,11 +42,6 @@ extern uint64_t stats_n_data_bytes_packaged;
extern uint64_t stats_n_data_cells_received;
extern uint64_t stats_n_data_bytes_received;
-#ifdef ENABLE_MEMPOOLS
-void init_cell_pool(void);
-void free_cell_pool(void);
-void clean_cell_pool(void);
-#endif /* ENABLE_MEMPOOLS */
void dump_cell_pool_usage(int severity);
size_t packed_cell_mem_cost(void);
diff --git a/src/or/rendclient.c b/src/or/rendclient.c
index 8cace92b2c..d0c4b87010 100644
--- a/src/or/rendclient.c
+++ b/src/or/rendclient.c
@@ -141,7 +141,7 @@ rend_client_send_introduction(origin_circuit_t *introcirc,
int r, v3_shift = 0;
char payload[RELAY_PAYLOAD_SIZE];
char tmp[RELAY_PAYLOAD_SIZE];
- rend_cache_entry_t *entry;
+ rend_cache_entry_t *entry = NULL;
crypt_path_t *cpath;
off_t dh_offset;
crypto_pk_t *intro_key = NULL;
@@ -158,8 +158,13 @@ rend_client_send_introduction(origin_circuit_t *introcirc,
tor_assert(!(rendcirc->build_state->onehop_tunnel));
#endif
- if (rend_cache_lookup_entry(introcirc->rend_data->onion_address, -1,
- &entry) < 1) {
+ r = rend_cache_lookup_entry(introcirc->rend_data->onion_address, -1,
+ &entry);
+ /* An invalid onion address is not possible else we have a big issue. */
+ tor_assert(r != -EINVAL);
+ if (r < 0 || !rend_client_any_intro_points_usable(entry)) {
+ /* If the descriptor is not found or the intro points are not usable
+ * anymore, trigger a fetch. */
log_info(LD_REND,
"query %s didn't have valid rend desc in cache. "
"Refetching descriptor.",
@@ -451,6 +456,13 @@ rend_client_introduction_acked(origin_circuit_t *circ,
/* XXXX If that call failed, should we close the rend circuit,
* too? */
return result;
+ } else {
+ /* Close circuit because no more intro points are usable thus not
+ * useful anymore. Change it's purpose before so we don't report an
+ * intro point failure again triggering an extra descriptor fetch. */
+ circuit_change_purpose(TO_CIRCUIT(circ),
+ CIRCUIT_PURPOSE_C_INTRODUCE_ACKED);
+ circuit_mark_for_close(TO_CIRCUIT(circ), END_CIRC_REASON_FINISHED);
}
}
return 0;
@@ -462,9 +474,8 @@ rend_client_introduction_acked(origin_circuit_t *circ,
/** Contains the last request times to hidden service directories for
* certain queries; each key is a string consisting of the
- * concatenation of a base32-encoded HS directory identity digest, a
- * base32-encoded HS descriptor ID, and a hidden service address
- * (without the ".onion" part); each value is a pointer to a time_t
+ * concatenation of a base32-encoded HS directory identity digest and
+ * base32-encoded HS descriptor ID; each value is a pointer to a time_t
* holding the time of the last request for that descriptor ID to that
* HS directory. */
static strmap_t *last_hid_serv_requests_ = NULL;
@@ -480,19 +491,16 @@ get_last_hid_serv_requests(void)
}
#define LAST_HID_SERV_REQUEST_KEY_LEN (REND_DESC_ID_V2_LEN_BASE32 + \
- REND_DESC_ID_V2_LEN_BASE32 + \
- REND_SERVICE_ID_LEN_BASE32)
+ REND_DESC_ID_V2_LEN_BASE32)
/** Look up the last request time to hidden service directory <b>hs_dir</b>
- * for descriptor ID <b>desc_id_base32</b> for the service specified in
- * <b>rend_query</b>. If <b>set</b> is non-zero,
- * assign the current time <b>now</b> and return that. Otherwise, return
- * the most recent request time, or 0 if no such request has been sent
- * before. */
+ * for descriptor ID <b>desc_id_base32</b>. If <b>set</b> is non-zero,
+ * assign the current time <b>now</b> and return that. Otherwise, return the
+ * most recent request time, or 0 if no such request has been sent before.
+ */
static time_t
lookup_last_hid_serv_request(routerstatus_t *hs_dir,
const char *desc_id_base32,
- const rend_data_t *rend_query,
time_t now, int set)
{
char hsdir_id_base32[REND_DESC_ID_V2_LEN_BASE32 + 1];
@@ -501,10 +509,9 @@ lookup_last_hid_serv_request(routerstatus_t *hs_dir,
strmap_t *last_hid_serv_requests = get_last_hid_serv_requests();
base32_encode(hsdir_id_base32, sizeof(hsdir_id_base32),
hs_dir->identity_digest, DIGEST_LEN);
- tor_snprintf(hsdir_desc_comb_id, sizeof(hsdir_desc_comb_id), "%s%s%s",
+ tor_snprintf(hsdir_desc_comb_id, sizeof(hsdir_desc_comb_id), "%s%s",
hsdir_id_base32,
- desc_id_base32,
- rend_query->onion_address);
+ desc_id_base32);
/* XXX023 tor_assert(strlen(hsdir_desc_comb_id) ==
LAST_HID_SERV_REQUEST_KEY_LEN); */
if (set) {
@@ -545,15 +552,23 @@ directory_clean_last_hid_serv_requests(time_t now)
}
}
-/** Remove all requests related to the hidden service named
- * <b>onion_address</b> from the history of times of requests to
- * hidden service directories. */
+/** Remove all requests related to the descriptor ID <b>desc_id</b> from the
+ * history of times of requests to hidden service directories.
+ * <b>desc_id</b> is an unencoded descriptor ID of size DIGEST_LEN.
+ *
+ * This is called from rend_client_note_connection_attempt_ended(), which
+ * must be idempotent, so any future changes to this function must leave it
+ * idempotent too. */
static void
-purge_hid_serv_from_last_hid_serv_requests(const char *onion_address)
+purge_hid_serv_from_last_hid_serv_requests(const char *desc_id)
{
strmap_iter_t *iter;
strmap_t *last_hid_serv_requests = get_last_hid_serv_requests();
- /* XXX023 tor_assert(strlen(onion_address) == REND_SERVICE_ID_LEN_BASE32); */
+ char desc_id_base32[REND_DESC_ID_V2_LEN_BASE32 + 1];
+
+ /* Key is stored with the base32 encoded desc_id. */
+ base32_encode(desc_id_base32, sizeof(desc_id_base32), desc_id,
+ DIGEST_LEN);
for (iter = strmap_iter_init(last_hid_serv_requests);
!strmap_iter_done(iter); ) {
const char *key;
@@ -561,9 +576,9 @@ purge_hid_serv_from_last_hid_serv_requests(const char *onion_address)
strmap_iter_get(iter, &key, &val);
/* XXX023 tor_assert(strlen(key) == LAST_HID_SERV_REQUEST_KEY_LEN); */
if (tor_memeq(key + LAST_HID_SERV_REQUEST_KEY_LEN -
- REND_SERVICE_ID_LEN_BASE32,
- onion_address,
- REND_SERVICE_ID_LEN_BASE32)) {
+ REND_DESC_ID_V2_LEN_BASE32,
+ desc_id_base32,
+ REND_DESC_ID_V2_LEN_BASE32)) {
iter = strmap_iter_next_rmv(last_hid_serv_requests, iter);
tor_free(val);
} else {
@@ -592,59 +607,53 @@ rend_client_purge_last_hid_serv_requests(void)
}
}
-/** Determine the responsible hidden service directories for <b>desc_id</b>
- * and fetch the descriptor with that ID from one of them. Only
- * send a request to a hidden service directory that we have not yet tried
- * during this attempt to connect to this hidden service; on success, return 1,
- * in the case that no hidden service directory is left to ask for the
- * descriptor, return 0, and in case of a failure -1. */
-static int
-directory_get_from_hs_dir(const char *desc_id, const rend_data_t *rend_query)
+/** This returns a good valid hs dir that should be used for the given
+ * descriptor id.
+ *
+ * Return NULL on error else the hsdir node pointer. */
+static routerstatus_t *
+pick_hsdir(const char *desc_id, const char *desc_id_base32)
{
smartlist_t *responsible_dirs = smartlist_new();
smartlist_t *usable_responsible_dirs = smartlist_new();
const or_options_t *options = get_options();
routerstatus_t *hs_dir;
- char desc_id_base32[REND_DESC_ID_V2_LEN_BASE32 + 1];
time_t now = time(NULL);
- char descriptor_cookie_base64[3*REND_DESC_COOKIE_LEN_BASE64];
- const int tor2web_mode = options->Tor2webMode;
int excluded_some;
- tor_assert(desc_id);
- tor_assert(rend_query);
- /* Determine responsible dirs. Even if we can't get all we want,
- * work with the ones we have. If it's empty, we'll notice below. */
- hid_serv_get_responsible_directories(responsible_dirs, desc_id);
- base32_encode(desc_id_base32, sizeof(desc_id_base32),
- desc_id, DIGEST_LEN);
+ tor_assert(desc_id);
+ tor_assert(desc_id_base32);
- /* Only select those hidden service directories to which we did not send
- * a request recently and for which we have a router descriptor here. */
+ /* Determine responsible dirs. Even if we can't get all we want, work with
+ * the ones we have. If it's empty, we'll notice below. */
+ hid_serv_get_responsible_directories(responsible_dirs, desc_id);
/* Clean request history first. */
directory_clean_last_hid_serv_requests(now);
- SMARTLIST_FOREACH(responsible_dirs, routerstatus_t *, dir, {
- time_t last = lookup_last_hid_serv_request(
- dir, desc_id_base32, rend_query, 0, 0);
- const node_t *node = node_get_by_id(dir->identity_digest);
- if (last + REND_HID_SERV_DIR_REQUERY_PERIOD >= now ||
- !node || !node_has_descriptor(node)) {
- SMARTLIST_DEL_CURRENT(responsible_dirs, dir);
- continue;
- }
- if (! routerset_contains_node(options->ExcludeNodes, node)) {
- smartlist_add(usable_responsible_dirs, dir);
- }
- });
+ /* Only select those hidden service directories to which we did not send a
+ * request recently and for which we have a router descriptor here. */
+ SMARTLIST_FOREACH_BEGIN(responsible_dirs, routerstatus_t *, dir) {
+ time_t last = lookup_last_hid_serv_request(dir, desc_id_base32,
+ 0, 0);
+ const node_t *node = node_get_by_id(dir->identity_digest);
+ if (last + REND_HID_SERV_DIR_REQUERY_PERIOD >= now ||
+ !node || !node_has_descriptor(node)) {
+ SMARTLIST_DEL_CURRENT(responsible_dirs, dir);
+ continue;
+ }
+ if (!routerset_contains_node(options->ExcludeNodes, node)) {
+ smartlist_add(usable_responsible_dirs, dir);
+ }
+ } SMARTLIST_FOREACH_END(dir);
excluded_some =
smartlist_len(usable_responsible_dirs) < smartlist_len(responsible_dirs);
hs_dir = smartlist_choose(usable_responsible_dirs);
- if (! hs_dir && ! options->StrictNodes)
+ if (!hs_dir && !options->StrictNodes) {
hs_dir = smartlist_choose(responsible_dirs);
+ }
smartlist_free(responsible_dirs);
smartlist_free(usable_responsible_dirs);
@@ -657,23 +666,62 @@ directory_get_from_hs_dir(const char *desc_id, const rend_data_t *rend_query)
"requested hidden service: they are all either down or "
"excluded, and StrictNodes is set.");
}
- return 0;
+ } else {
+ /* Remember that we are requesting a descriptor from this hidden service
+ * directory now. */
+ lookup_last_hid_serv_request(hs_dir, desc_id_base32, now, 1);
}
- /* Remember that we are requesting a descriptor from this hidden service
- * directory now. */
- lookup_last_hid_serv_request(hs_dir, desc_id_base32, rend_query, now, 1);
+ return hs_dir;
+}
- /* Encode descriptor cookie for logging purposes. */
+/** Determine the responsible hidden service directories for <b>desc_id</b>
+ * and fetch the descriptor with that ID from one of them. Only
+ * send a request to a hidden service directory that we have not yet tried
+ * during this attempt to connect to this hidden service; on success, return 1,
+ * in the case that no hidden service directory is left to ask for the
+ * descriptor, return 0, and in case of a failure -1. */
+static int
+directory_get_from_hs_dir(const char *desc_id, const rend_data_t *rend_query,
+ routerstatus_t *rs_hsdir)
+{
+ routerstatus_t *hs_dir = rs_hsdir;
+ char desc_id_base32[REND_DESC_ID_V2_LEN_BASE32 + 1];
+ char descriptor_cookie_base64[3*REND_DESC_COOKIE_LEN_BASE64];
+#ifdef ENABLE_TOR2WEB_MODE
+ const int tor2web_mode = get_options()->Tor2webMode;
+ const int how_to_fetch = tor2web_mode ? DIRIND_ONEHOP : DIRIND_ANONYMOUS;
+#else
+ const int how_to_fetch = DIRIND_ANONYMOUS;
+#endif
+
+ tor_assert(desc_id);
+
+ base32_encode(desc_id_base32, sizeof(desc_id_base32),
+ desc_id, DIGEST_LEN);
+
+ /* Automatically pick an hs dir if none given. */
+ if (!rs_hsdir) {
+ hs_dir = pick_hsdir(desc_id, desc_id_base32);
+ if (!hs_dir) {
+ /* No suitable hs dir can be found, stop right now. */
+ return 0;
+ }
+ }
+
+ /* Encode descriptor cookie for logging purposes. Also, if the cookie is
+ * malformed, no fetch is triggered thus this needs to be done before the
+ * fetch request. */
if (rend_query->auth_type != REND_NO_AUTH) {
if (base64_encode(descriptor_cookie_base64,
sizeof(descriptor_cookie_base64),
- rend_query->descriptor_cookie, REND_DESC_COOKIE_LEN)<0) {
+ rend_query->descriptor_cookie, REND_DESC_COOKIE_LEN,
+ 0)<0) {
log_warn(LD_BUG, "Could not base64-encode descriptor cookie.");
return 0;
}
- /* Remove == signs and newline. */
- descriptor_cookie_base64[strlen(descriptor_cookie_base64)-3] = '\0';
+ /* Remove == signs. */
+ descriptor_cookie_base64[strlen(descriptor_cookie_base64)-2] = '\0';
} else {
strlcpy(descriptor_cookie_base64, "(none)",
sizeof(descriptor_cookie_base64));
@@ -685,7 +733,7 @@ directory_get_from_hs_dir(const char *desc_id, const rend_data_t *rend_query)
directory_initiate_command_routerstatus_rend(hs_dir,
DIR_PURPOSE_FETCH_RENDDESC_V2,
ROUTER_PURPOSE_GENERAL,
- tor2web_mode?DIRIND_ONEHOP:DIRIND_ANONYMOUS,
+ how_to_fetch,
desc_id_base32,
NULL, 0, 0,
rend_query);
@@ -704,16 +752,144 @@ directory_get_from_hs_dir(const char *desc_id, const rend_data_t *rend_query)
return 1;
}
+/** Fetch a v2 descriptor using the given descriptor id. If any hsdir(s) are
+ * given, they will be used instead.
+ *
+ * On success, 1 is returned. If no hidden service is left to ask, return 0.
+ * On error, -1 is returned. */
+static int
+fetch_v2_desc_by_descid(const char *desc_id, const rend_data_t *rend_query,
+ smartlist_t *hsdirs)
+{
+ int ret;
+
+ tor_assert(rend_query);
+
+ if (!hsdirs) {
+ ret = directory_get_from_hs_dir(desc_id, rend_query, NULL);
+ goto end; /* either success or failure, but we're done */
+ }
+
+ /* Using the given hsdir list, trigger a fetch on each of them. */
+ SMARTLIST_FOREACH_BEGIN(hsdirs, routerstatus_t *, hs_dir) {
+ /* This should always be a success. */
+ ret = directory_get_from_hs_dir(desc_id, rend_query, hs_dir);
+ tor_assert(ret);
+ } SMARTLIST_FOREACH_END(hs_dir);
+
+ /* Everything went well. */
+ ret = 0;
+
+ end:
+ return ret;
+}
+
+/** Fetch a v2 descriptor using the onion address in the given query object.
+ * This will compute the descriptor id for each replicas and fetch it on the
+ * given hsdir(s) if any or the responsible ones that are choosen
+ * automatically.
+ *
+ * On success, 1 is returned. If no hidden service is left to ask, return 0.
+ * On error, -1 is returned. */
+static int
+fetch_v2_desc_by_addr(rend_data_t *query, smartlist_t *hsdirs)
+{
+ char descriptor_id[DIGEST_LEN];
+ int replicas_left_to_try[REND_NUMBER_OF_NON_CONSECUTIVE_REPLICAS];
+ int i, tries_left, ret;
+
+ tor_assert(query);
+
+ /* Randomly iterate over the replicas until a descriptor can be fetched
+ * from one of the consecutive nodes, or no options are left. */
+ for (i = 0; i < REND_NUMBER_OF_NON_CONSECUTIVE_REPLICAS; i++) {
+ replicas_left_to_try[i] = i;
+ }
+
+ tries_left = REND_NUMBER_OF_NON_CONSECUTIVE_REPLICAS;
+ while (tries_left > 0) {
+ int rand = crypto_rand_int(tries_left);
+ int chosen_replica = replicas_left_to_try[rand];
+ replicas_left_to_try[rand] = replicas_left_to_try[--tries_left];
+
+ ret = rend_compute_v2_desc_id(descriptor_id, query->onion_address,
+ query->auth_type == REND_STEALTH_AUTH ?
+ query->descriptor_cookie : NULL,
+ time(NULL), chosen_replica);
+ if (ret < 0) {
+ /* Normally, on failure the descriptor_id is untouched but let's be
+ * safe in general in case the function changes at some point. */
+ goto end;
+ }
+
+ if (tor_memcmp(descriptor_id, query->descriptor_id[chosen_replica],
+ sizeof(descriptor_id)) != 0) {
+ /* Not equal from what we currently have so purge the last hid serv
+ * request cache and update the descriptor ID with the new value. */
+ purge_hid_serv_from_last_hid_serv_requests(
+ query->descriptor_id[chosen_replica]);
+ memcpy(query->descriptor_id[chosen_replica], descriptor_id,
+ sizeof(query->descriptor_id[chosen_replica]));
+ }
+
+ /* Trigger the fetch with the computed descriptor ID. */
+ ret = fetch_v2_desc_by_descid(descriptor_id, query, hsdirs);
+ if (ret != 0) {
+ /* Either on success or failure, as long as we tried a fetch we are
+ * done here. */
+ goto end;
+ }
+ }
+
+ /* If we come here, there are no hidden service directories left. */
+ log_info(LD_REND, "Could not pick one of the responsible hidden "
+ "service directories to fetch descriptors, because "
+ "we already tried them all unsuccessfully.");
+ ret = 0;
+
+ end:
+ memwipe(descriptor_id, 0, sizeof(descriptor_id));
+ return ret;
+}
+
+/** Fetch a v2 descriptor using the given query. If any hsdir are specified,
+ * use them for the fetch.
+ *
+ * On success, 1 is returned. If no hidden service is left to ask, return 0.
+ * On error, -1 is returned. */
+int
+rend_client_fetch_v2_desc(rend_data_t *query, smartlist_t *hsdirs)
+{
+ int ret;
+
+ tor_assert(query);
+
+ /* Depending on what's available in the rend data query object, we will
+ * trigger a fetch by HS address or using a descriptor ID. */
+
+ if (query->onion_address[0] != '\0') {
+ ret = fetch_v2_desc_by_addr(query, hsdirs);
+ } else if (!tor_digest_is_zero(query->desc_id_fetch)) {
+ ret = fetch_v2_desc_by_descid(query->desc_id_fetch, query, hsdirs);
+ } else {
+ /* Query data is invalid. */
+ ret = -1;
+ goto error;
+ }
+
+ error:
+ return ret;
+}
+
/** Unless we already have a descriptor for <b>rend_query</b> with at least
* one (possibly) working introduction point in it, start a connection to a
* hidden service directory to fetch a v2 rendezvous service descriptor. */
void
-rend_client_refetch_v2_renddesc(const rend_data_t *rend_query)
+rend_client_refetch_v2_renddesc(rend_data_t *rend_query)
{
- char descriptor_id[DIGEST_LEN];
- int replicas_left_to_try[REND_NUMBER_OF_NON_CONSECUTIVE_REPLICAS];
- int i, tries_left;
+ int ret;
rend_cache_entry_t *e = NULL;
+
tor_assert(rend_query);
/* Are we configured to fetch descriptors? */
if (!get_options()->FetchHidServDescriptors) {
@@ -722,7 +898,7 @@ rend_client_refetch_v2_renddesc(const rend_data_t *rend_query)
return;
}
/* Before fetching, check if we already have a usable descriptor here. */
- if (rend_cache_lookup_entry(rend_query->onion_address, -1, &e) > 0 &&
+ if (rend_cache_lookup_entry(rend_query->onion_address, -1, &e) == 0 &&
rend_client_any_intro_points_usable(e)) {
log_info(LD_REND, "We would fetch a v2 rendezvous descriptor, but we "
"already have a usable descriptor here. Not fetching.");
@@ -730,44 +906,12 @@ rend_client_refetch_v2_renddesc(const rend_data_t *rend_query)
}
log_debug(LD_REND, "Fetching v2 rendezvous descriptor for service %s",
safe_str_client(rend_query->onion_address));
- /* Randomly iterate over the replicas until a descriptor can be fetched
- * from one of the consecutive nodes, or no options are left. */
- tries_left = REND_NUMBER_OF_NON_CONSECUTIVE_REPLICAS;
- for (i = 0; i < REND_NUMBER_OF_NON_CONSECUTIVE_REPLICAS; i++)
- replicas_left_to_try[i] = i;
- while (tries_left > 0) {
- int rand = crypto_rand_int(tries_left);
- int chosen_replica = replicas_left_to_try[rand];
- replicas_left_to_try[rand] = replicas_left_to_try[--tries_left];
- if (rend_compute_v2_desc_id(descriptor_id, rend_query->onion_address,
- rend_query->auth_type == REND_STEALTH_AUTH ?
- rend_query->descriptor_cookie : NULL,
- time(NULL), chosen_replica) < 0) {
- log_warn(LD_REND, "Internal error: Computing v2 rendezvous "
- "descriptor ID did not succeed.");
- /*
- * Hmm, can this write anything to descriptor_id and still fail?
- * Let's clear it just to be safe.
- *
- * From here on, any returns should goto done which clears
- * descriptor_id so we don't leave key-derived material on the stack.
- */
- goto done;
- }
- if (directory_get_from_hs_dir(descriptor_id, rend_query) != 0)
- goto done; /* either success or failure, but we're done */
+ ret = rend_client_fetch_v2_desc(rend_query, NULL);
+ if (ret <= 0) {
+ /* Close pending connections on error or if no hsdir can be found. */
+ rend_client_desc_trynow(rend_query->onion_address);
}
- /* If we come here, there are no hidden service directories left. */
- log_info(LD_REND, "Could not pick one of the responsible hidden "
- "service directories to fetch descriptors, because "
- "we already tried them all unsuccessfully.");
- /* Close pending connections. */
- rend_client_desc_trynow(rend_query->onion_address);
-
- done:
- memwipe(descriptor_id, 0, sizeof(descriptor_id));
-
return;
}
@@ -828,7 +972,7 @@ rend_client_cancel_descriptor_fetches(void)
*/
int
rend_client_report_intro_point_failure(extend_info_t *failed_intro,
- const rend_data_t *rend_query,
+ rend_data_t *rend_query,
unsigned int failure_type)
{
int i, r;
@@ -836,17 +980,26 @@ rend_client_report_intro_point_failure(extend_info_t *failed_intro,
connection_t *conn;
r = rend_cache_lookup_entry(rend_query->onion_address, -1, &ent);
- if (r<0) {
- log_warn(LD_BUG, "Malformed service ID %s.",
- escaped_safe_str_client(rend_query->onion_address));
- return -1;
- }
- if (r==0) {
- log_info(LD_REND, "Unknown service %s. Re-fetching descriptor.",
- escaped_safe_str_client(rend_query->onion_address));
- rend_client_refetch_v2_renddesc(rend_query);
- return 0;
+ if (r < 0) {
+ /* Either invalid onion address or cache entry not found. */
+ switch (-r) {
+ case EINVAL:
+ log_warn(LD_BUG, "Malformed service ID %s.",
+ escaped_safe_str_client(rend_query->onion_address));
+ return -1;
+ case ENOENT:
+ log_info(LD_REND, "Unknown service %s. Re-fetching descriptor.",
+ escaped_safe_str_client(rend_query->onion_address));
+ rend_client_refetch_v2_renddesc(rend_query);
+ return 0;
+ default:
+ log_warn(LD_BUG, "Unknown cache lookup returned code: %d", r);
+ return -1;
+ }
}
+ /* The intro points are not checked here if they are usable or not because
+ * this is called when an intro point circuit is closed thus there must be
+ * at least one intro point that is usable and is about to be flagged. */
for (i = 0; i < smartlist_len(ent->parsed->intro_nodes); i++) {
rend_intro_point_t *intro = smartlist_get(ent->parsed->intro_nodes, i);
@@ -1045,7 +1198,7 @@ rend_client_desc_trynow(const char *query)
continue;
assert_connection_ok(base_conn, now);
if (rend_cache_lookup_entry(rend_data->onion_address, -1,
- &entry) == 1 &&
+ &entry) == 0 &&
rend_client_any_intro_points_usable(entry)) {
/* either this fetch worked, or it failed but there was a
* valid entry from before which we should reuse */
@@ -1069,24 +1222,28 @@ rend_client_desc_trynow(const char *query)
"unavailable (try again later).",
safe_str_client(query));
connection_mark_unattached_ap(conn, END_STREAM_REASON_RESOLVEFAILED);
- rend_client_note_connection_attempt_ended(query);
+ rend_client_note_connection_attempt_ended(rend_data);
}
} SMARTLIST_FOREACH_END(base_conn);
}
-/** Clear temporary state used only during an attempt to connect to
- * the hidden service named <b>onion_address</b>. Called when a
- * connection attempt has ended; may be called occasionally at other
- * times, and should be reasonably harmless. */
+/** Clear temporary state used only during an attempt to connect to the
+ * hidden service with <b>rend_data</b>. Called when a connection attempt
+ * has ended; it is possible for this to be called multiple times while
+ * handling an ended connection attempt, and any future changes to this
+ * function must ensure it remains idempotent. */
void
-rend_client_note_connection_attempt_ended(const char *onion_address)
+rend_client_note_connection_attempt_ended(const rend_data_t *rend_data)
{
+ unsigned int have_onion = 0;
rend_cache_entry_t *cache_entry = NULL;
- rend_cache_lookup_entry(onion_address, -1, &cache_entry);
- log_info(LD_REND, "Connection attempt for %s has ended; "
- "cleaning up temporary state.",
- safe_str_client(onion_address));
+ if (*rend_data->onion_address != '\0') {
+ /* Ignore return value; we find an entry, or we don't. */
+ (void) rend_cache_lookup_entry(rend_data->onion_address, -1,
+ &cache_entry);
+ have_onion = 1;
+ }
/* Clear the timed_out flag on all remaining intro points for this HS. */
if (cache_entry != NULL) {
@@ -1096,7 +1253,20 @@ rend_client_note_connection_attempt_ended(const char *onion_address)
}
/* Remove the HS's entries in last_hid_serv_requests. */
- purge_hid_serv_from_last_hid_serv_requests(onion_address);
+ if (have_onion) {
+ unsigned int replica;
+ for (replica = 0; replica < ARRAY_LENGTH(rend_data->descriptor_id);
+ replica++) {
+ const char *desc_id = rend_data->descriptor_id[replica];
+ purge_hid_serv_from_last_hid_serv_requests(desc_id);
+ }
+ log_info(LD_REND, "Connection attempt for %s has ended; "
+ "cleaning up temporary state.",
+ safe_str_client(rend_data->onion_address));
+ } else {
+ /* We only have an ID for a fetch. Probably used by HSFETCH. */
+ purge_hid_serv_from_last_hid_serv_requests(rend_data->desc_id_fetch);
+ }
}
/** Return a newly allocated extend_info_t* for a randomly chosen introduction
@@ -1106,13 +1276,17 @@ rend_client_note_connection_attempt_ended(const char *onion_address)
extend_info_t *
rend_client_get_random_intro(const rend_data_t *rend_query)
{
+ int ret;
extend_info_t *result;
rend_cache_entry_t *entry;
- if (rend_cache_lookup_entry(rend_query->onion_address, -1, &entry) < 1) {
- log_warn(LD_REND,
- "Query '%s' didn't have valid rend desc in cache. Failing.",
- safe_str_client(rend_query->onion_address));
+ ret = rend_cache_lookup_entry(rend_query->onion_address, -1, &entry);
+ if (ret < 0 || !rend_client_any_intro_points_usable(entry)) {
+ log_warn(LD_REND,
+ "Query '%s' didn't have valid rend desc in cache. Failing.",
+ safe_str_client(rend_query->onion_address));
+ /* XXX: Should we refetch the descriptor here if the IPs are not usable
+ * anymore ?. */
return NULL;
}
diff --git a/src/or/rendclient.h b/src/or/rendclient.h
index 098c61d0a1..639ec1eff4 100644
--- a/src/or/rendclient.h
+++ b/src/or/rendclient.h
@@ -19,7 +19,8 @@ void rend_client_rendcirc_has_opened(origin_circuit_t *circ);
int rend_client_introduction_acked(origin_circuit_t *circ,
const uint8_t *request,
size_t request_len);
-void rend_client_refetch_v2_renddesc(const rend_data_t *rend_query);
+void rend_client_refetch_v2_renddesc(rend_data_t *rend_query);
+int rend_client_fetch_v2_desc(rend_data_t *query, smartlist_t *hsdirs);
void rend_client_cancel_descriptor_fetches(void);
void rend_client_purge_last_hid_serv_requests(void);
@@ -28,7 +29,7 @@ void rend_client_purge_last_hid_serv_requests(void);
#define INTRO_POINT_FAILURE_UNREACHABLE 2
int rend_client_report_intro_point_failure(extend_info_t *failed_intro,
- const rend_data_t *rend_query,
+ rend_data_t *rend_query,
unsigned int failure_type);
int rend_client_rendezvous_acked(origin_circuit_t *circ,
@@ -39,7 +40,7 @@ int rend_client_receive_rendezvous(origin_circuit_t *circ,
size_t request_len);
void rend_client_desc_trynow(const char *query);
-void rend_client_note_connection_attempt_ended(const char *onion_address);
+void rend_client_note_connection_attempt_ended(const rend_data_t *rend_data);
extend_info_t *rend_client_get_random_intro(const rend_data_t *rend_query);
int rend_client_any_intro_points_usable(const rend_cache_entry_t *entry);
diff --git a/src/or/rendcommon.c b/src/or/rendcommon.c
index 88d9aaba48..9384220226 100644
--- a/src/or/rendcommon.c
+++ b/src/or/rendcommon.c
@@ -529,7 +529,8 @@ rend_encode_v2_descriptors(smartlist_t *descs_out,
}
/* Base64-encode introduction points. */
ipos_base64 = tor_calloc(ipos_len, 2);
- if (base64_encode(ipos_base64, ipos_len * 2, ipos, ipos_len)<0) {
+ if (base64_encode(ipos_base64, ipos_len * 2, ipos, ipos_len,
+ BASE64_ENCODE_MULTILINE)<0) {
log_warn(LD_REND, "Could not encode introduction point string to "
"base64. length=%d", (int)ipos_len);
tor_free(ipos_base64);
@@ -646,7 +647,6 @@ rend_encode_v2_descriptors(smartlist_t *descs_out,
rend_encoded_v2_service_descriptor_free(enc);
goto err;
}
- desc_str[written++] = '\n';
desc_str[written++] = 0;
/* Check if we can parse our own descriptor. */
if (!rend_desc_v2_is_parsable(enc)) {
@@ -920,36 +920,70 @@ rend_valid_service_id(const char *query)
return 1;
}
-/** If we have a cached rend_cache_entry_t for the service ID <b>query</b>
- * with <b>version</b>, set *<b>e</b> to that entry and return 1.
- * Else return 0. If <b>version</b> is nonnegative, only return an entry
- * in that descriptor format version. Otherwise (if <b>version</b> is
- * negative), return the most recent format we have.
- */
+/** Return true iff <b>query</b> is a syntactically valid descriptor ID.
+ * (as generated by rend_get_descriptor_id_bytes). */
+int
+rend_valid_descriptor_id(const char *query)
+{
+ if (strlen(query) != REND_DESC_ID_V2_LEN_BASE32) {
+ goto invalid;
+ }
+ if (strspn(query, BASE32_CHARS) != REND_DESC_ID_V2_LEN_BASE32) {
+ goto invalid;
+ }
+
+ return 1;
+
+ invalid:
+ return 0;
+}
+
+/** Lookup in the client cache the given service ID <b>query</b> for
+ * <b>version</b>.
+ *
+ * Return 0 if found and if <b>e</b> is non NULL, set it with the entry
+ * found. Else, a negative value is returned and <b>e</b> is untouched.
+ * -EINVAL means that <b>query</b> is not a valid service id.
+ * -ENOENT means that no entry in the cache was found. */
int
rend_cache_lookup_entry(const char *query, int version, rend_cache_entry_t **e)
{
- char key[REND_SERVICE_ID_LEN_BASE32+2]; /* <version><query>\0 */
+ int ret = 0;
+ char key[REND_SERVICE_ID_LEN_BASE32 + 2]; /* <version><query>\0 */
+ rend_cache_entry_t *entry = NULL;
+ static const int default_version = 2;
+
tor_assert(rend_cache);
- if (!rend_valid_service_id(query))
- return -1;
- *e = NULL;
- if (version != 0) {
- tor_snprintf(key, sizeof(key), "2%s", query);
- *e = strmap_get_lc(rend_cache, key);
+ tor_assert(query);
+
+ if (!rend_valid_service_id(query)) {
+ ret = -EINVAL;
+ goto end;
}
- if (!*e && version != 2) {
- tor_snprintf(key, sizeof(key), "0%s", query);
- *e = strmap_get_lc(rend_cache, key);
+
+ switch (version) {
+ case 0:
+ log_warn(LD_REND, "Cache lookup of a v0 renddesc is deprecated.");
+ break;
+ case 2:
+ /* Default is version 2. */
+ default:
+ tor_snprintf(key, sizeof(key), "%d%s", default_version, query);
+ entry = strmap_get_lc(rend_cache, key);
+ break;
}
- if (!*e)
- return 0;
- tor_assert((*e)->parsed && (*e)->parsed->intro_nodes);
- /* XXX023 hack for now, to return "not found" if there are no intro
- * points remaining. See bug 997. */
- if (! rend_client_any_intro_points_usable(*e))
- return 0;
- return 1;
+ if (!entry) {
+ ret = -ENOENT;
+ goto end;
+ }
+ tor_assert(entry->parsed && entry->parsed->intro_nodes);
+
+ if (e) {
+ *e = entry;
+ }
+
+ end:
+ return ret;
}
/** Lookup the v2 service descriptor with base32-encoded <b>desc_id</b> and
@@ -1058,7 +1092,6 @@ rend_cache_store_v2_desc_as_dir(const char *desc)
if (e && !strcmp(desc, e->desc)) {
log_info(LD_REND, "We already have this service descriptor with desc "
"ID %s.", safe_str(desc_id_base32));
- e->received = time(NULL);
goto skip;
}
/* Store received descriptor. */
@@ -1075,7 +1108,6 @@ rend_cache_store_v2_desc_as_dir(const char *desc)
rend_service_descriptor_free(e->parsed);
tor_free(e->desc);
}
- e->received = time(NULL);
e->parsed = parsed;
e->desc = tor_strndup(current_desc, encoded_size);
e->len = encoded_size;
@@ -1123,12 +1155,14 @@ rend_cache_store_v2_desc_as_dir(const char *desc)
* If the descriptor's descriptor ID doesn't match <b>desc_id_base32</b>,
* reject it.
*
- * Return an appropriate rend_cache_store_status_t.
+ * Return an appropriate rend_cache_store_status_t. If entry is not NULL,
+ * set it with the cache entry pointer of the descriptor.
*/
rend_cache_store_status_t
rend_cache_store_v2_desc_as_client(const char *desc,
const char *desc_id_base32,
- const rend_data_t *rend_query)
+ const rend_data_t *rend_query,
+ rend_cache_entry_t **entry)
{
/*XXXX this seems to have a bit of duplicate code with
* rend_cache_store_v2_desc_as_dir(). Fix that. */
@@ -1161,6 +1195,9 @@ rend_cache_store_v2_desc_as_client(const char *desc,
tor_assert(desc);
tor_assert(desc_id_base32);
memset(want_desc_id, 0, sizeof(want_desc_id));
+ if (entry) {
+ *entry = NULL;
+ }
if (base32_decode(want_desc_id, sizeof(want_desc_id),
desc_id_base32, strlen(desc_id_base32)) != 0) {
log_warn(LD_BUG, "Couldn't decode base32 %s for descriptor id.",
@@ -1179,7 +1216,8 @@ rend_cache_store_v2_desc_as_client(const char *desc,
log_warn(LD_REND, "Couldn't compute service ID.");
goto err;
}
- if (strcmp(rend_query->onion_address, service_id)) {
+ if (rend_query->onion_address[0] != '\0' &&
+ strcmp(rend_query->onion_address, service_id)) {
log_warn(LD_REND, "Received service descriptor for service ID %s; "
"expected descriptor for service ID %s.",
service_id, safe_str(rend_query->onion_address));
@@ -1192,7 +1230,7 @@ rend_cache_store_v2_desc_as_client(const char *desc,
}
/* Decode/decrypt introduction points. */
- if (intro_content) {
+ if (intro_content && intro_size > 0) {
int n_intro_points;
if (rend_query->auth_type != REND_NO_AUTH &&
!tor_mem_is_zero(rend_query->descriptor_cookie,
@@ -1226,7 +1264,7 @@ rend_cache_store_v2_desc_as_client(const char *desc,
"service descriptor for %s. This is probably a (misguided) "
"attempt to improve reliability, but it could also be an "
"attempt to do a guard enumeration attack. Rejecting.",
- safe_str_client(rend_query->onion_address));
+ safe_str_client(service_id));
goto err;
}
@@ -1251,19 +1289,12 @@ rend_cache_store_v2_desc_as_client(const char *desc,
/* Do we already have a newer descriptor? */
tor_snprintf(key, sizeof(key), "2%s", service_id);
e = (rend_cache_entry_t*) strmap_get_lc(rend_cache, key);
- if (e && e->parsed->timestamp > parsed->timestamp) {
- log_info(LD_REND, "We already have a newer service descriptor for "
+ if (e && e->parsed->timestamp >= parsed->timestamp) {
+ log_info(LD_REND, "We already have a new enough service descriptor for "
"service ID %s with the same desc ID and version.",
safe_str_client(service_id));
goto okay;
}
- /* Do we already have this descriptor? */
- if (e && !strcmp(desc, e->desc)) {
- log_info(LD_REND,"We already have this service descriptor %s.",
- safe_str_client(service_id));
- e->received = time(NULL);
- goto okay;
- }
if (!e) {
e = tor_malloc_zero(sizeof(rend_cache_entry_t));
strmap_set_lc(rend_cache, key, e);
@@ -1272,7 +1303,6 @@ rend_cache_store_v2_desc_as_client(const char *desc,
rend_service_descriptor_free(e->parsed);
tor_free(e->desc);
}
- e->received = time(NULL);
e->parsed = parsed;
e->desc = tor_malloc_zero(encoded_size + 1);
strlcpy(e->desc, desc, encoded_size + 1);
@@ -1280,9 +1310,15 @@ rend_cache_store_v2_desc_as_client(const char *desc,
rend_cache_increment_allocation(rend_cache_entry_allocation(e));
log_debug(LD_REND,"Successfully stored rend desc '%s', len %d.",
safe_str_client(service_id), (int)encoded_size);
+ if (entry) {
+ *entry = e;
+ }
return RCS_OKAY;
okay:
+ if (entry) {
+ *entry = e;
+ }
retval = RCS_OKAY;
err:
@@ -1368,3 +1404,102 @@ rend_data_dup(const rend_data_t *data)
return tor_memdup(data, sizeof(rend_data_t));
}
+/** Compute descriptor ID for each replicas and save them. A valid onion
+ * address must be present in the <b>rend_data</b>.
+ *
+ * Return 0 on success else -1. */
+static int
+compute_desc_id(rend_data_t *rend_data)
+{
+ int ret;
+ unsigned replica;
+ time_t now = time(NULL);
+
+ tor_assert(rend_data);
+
+ /* Compute descriptor ID for each replicas. */
+ for (replica = 0; replica < ARRAY_LENGTH(rend_data->descriptor_id);
+ replica++) {
+ ret = rend_compute_v2_desc_id(rend_data->descriptor_id[replica],
+ rend_data->onion_address,
+ rend_data->descriptor_cookie,
+ now, replica);
+ if (ret < 0) {
+ goto end;
+ }
+ }
+
+ end:
+ return ret;
+}
+
+/** Allocate and initialize a rend_data_t object for a service using the
+ * given arguments. Only the <b>onion_address</b> is not optional.
+ *
+ * Return a valid rend_data_t pointer. */
+rend_data_t *
+rend_data_service_create(const char *onion_address, const char *pk_digest,
+ const uint8_t *cookie, rend_auth_type_t auth_type)
+{
+ rend_data_t *rend_data = tor_malloc_zero(sizeof(*rend_data));
+
+ /* We need at least one else the call is wrong. */
+ tor_assert(onion_address != NULL);
+
+ if (pk_digest) {
+ memcpy(rend_data->rend_pk_digest, pk_digest,
+ sizeof(rend_data->rend_pk_digest));
+ }
+ if (cookie) {
+ memcpy(rend_data->rend_cookie, cookie,
+ sizeof(rend_data->rend_cookie));
+ }
+
+ strlcpy(rend_data->onion_address, onion_address,
+ sizeof(rend_data->onion_address));
+ rend_data->auth_type = auth_type;
+
+ return rend_data;
+}
+
+/** Allocate and initialize a rend_data_t object for a client request using
+ * the given arguments. Either an onion address or a descriptor ID is
+ * needed. Both can be given but only the onion address will be used to make
+ * the descriptor fetch.
+ *
+ * Return a valid rend_data_t pointer or NULL on error meaning the
+ * descriptor IDs couldn't be computed from the given data. */
+rend_data_t *
+rend_data_client_create(const char *onion_address, const char *desc_id,
+ const char *cookie, rend_auth_type_t auth_type)
+{
+ rend_data_t *rend_data = tor_malloc_zero(sizeof(*rend_data));
+
+ /* We need at least one else the call is wrong. */
+ tor_assert(onion_address != NULL || desc_id != NULL);
+
+ if (cookie) {
+ memcpy(rend_data->descriptor_cookie, cookie,
+ sizeof(rend_data->descriptor_cookie));
+ }
+ if (desc_id) {
+ memcpy(rend_data->desc_id_fetch, desc_id,
+ sizeof(rend_data->desc_id_fetch));
+ }
+ if (onion_address) {
+ strlcpy(rend_data->onion_address, onion_address,
+ sizeof(rend_data->onion_address));
+ if (compute_desc_id(rend_data) < 0) {
+ goto error;
+ }
+ }
+
+ rend_data->auth_type = auth_type;
+
+ return rend_data;
+
+ error:
+ rend_data_free(rend_data);
+ return NULL;
+}
+
diff --git a/src/or/rendcommon.h b/src/or/rendcommon.h
index 8396cc3551..a4d55d21d0 100644
--- a/src/or/rendcommon.h
+++ b/src/or/rendcommon.h
@@ -37,6 +37,7 @@ void rend_cache_clean_v2_descs_as_dir(time_t now, size_t min_to_remove);
void rend_cache_purge(void);
void rend_cache_free_all(void);
int rend_valid_service_id(const char *query);
+int rend_valid_descriptor_id(const char *query);
int rend_cache_lookup_entry(const char *query, int version,
rend_cache_entry_t **entry_out);
int rend_cache_lookup_v2_desc_as_dir(const char *query, const char **desc);
@@ -50,7 +51,8 @@ typedef enum {
rend_cache_store_status_t rend_cache_store_v2_desc_as_dir(const char *desc);
rend_cache_store_status_t rend_cache_store_v2_desc_as_client(const char *desc,
const char *desc_id_base32,
- const rend_data_t *rend_query);
+ const rend_data_t *rend_query,
+ rend_cache_entry_t **entry);
int rend_encode_v2_descriptors(smartlist_t *descs_out,
rend_service_descriptor_t *desc, time_t now,
uint8_t period, rend_auth_type_t auth_type,
@@ -65,5 +67,13 @@ void rend_get_descriptor_id_bytes(char *descriptor_id_out,
const char *secret_id_part);
size_t rend_cache_get_total_allocation(void);
+rend_data_t *rend_data_client_create(const char *onion_address,
+ const char *desc_id,
+ const char *cookie,
+ rend_auth_type_t auth_type);
+rend_data_t *rend_data_service_create(const char *onion_address,
+ const char *pk_digest,
+ const uint8_t *cookie,
+ rend_auth_type_t auth_type);
#endif
diff --git a/src/or/rendmid.c b/src/or/rendmid.c
index 9f6ff86c47..2451acb514 100644
--- a/src/or/rendmid.c
+++ b/src/or/rendmid.c
@@ -149,6 +149,20 @@ rend_mid_introduce(or_circuit_t *circ, const uint8_t *request,
goto err;
}
+ /* We have already done an introduction on this circuit but we just
+ received a request for another one. We block it since this might
+ be an attempt to DoS a hidden service (#15515). */
+ if (circ->already_received_introduce1) {
+ log_fn(LOG_PROTOCOL_WARN, LD_REND,
+ "Blocking multiple introductions on the same circuit. "
+ "Someone might be trying to attack a hidden service through "
+ "this relay.");
+ circuit_mark_for_close(TO_CIRCUIT(circ), END_CIRC_REASON_TORPROTOCOL);
+ return -1;
+ }
+
+ circ->already_received_introduce1 = 1;
+
/* We could change this to MAX_HEX_NICKNAME_LEN now that 0.0.9.x is
* obsolete; however, there isn't much reason to do so, and we're going
* to revise this protocol anyway.
diff --git a/src/or/rendservice.c b/src/or/rendservice.c
index ca9b380d7d..0a984f1447 100644
--- a/src/or/rendservice.c
+++ b/src/or/rendservice.c
@@ -15,6 +15,7 @@
#include "circuitlist.h"
#include "circuituse.h"
#include "config.h"
+#include "control.h"
#include "directory.h"
#include "main.h"
#include "networkstatus.h"
@@ -42,9 +43,15 @@ static int intro_point_accepted_intro_count(rend_intro_point_t *intro);
static int intro_point_should_expire_now(rend_intro_point_t *intro,
time_t now);
struct rend_service_t;
+static int rend_service_derive_key_digests(struct rend_service_t *s);
static int rend_service_load_keys(struct rend_service_t *s);
static int rend_service_load_auth_keys(struct rend_service_t *s,
const char *hfname);
+static struct rend_service_t *rend_service_get_by_pk_digest(
+ const char* digest);
+static struct rend_service_t *rend_service_get_by_service_id(const char *id);
+static const char *rend_service_escaped_dir(
+ const struct rend_service_t *s);
static ssize_t rend_service_parse_intro_for_v0_or_v1(
rend_intro_cell_t *intro,
@@ -65,11 +72,18 @@ static ssize_t rend_service_parse_intro_for_v3(
/** Represents the mapping from a virtual port of a rendezvous service to
* a real port on some IP.
*/
-typedef struct rend_service_port_config_t {
+struct rend_service_port_config_s {
+ /* The incoming HS virtual port we're mapping */
uint16_t virtual_port;
+ /* Is this an AF_UNIX port? */
+ unsigned int is_unix_addr:1;
+ /* The outgoing TCP port to use, if !is_unix_addr */
uint16_t real_port;
+ /* The outgoing IPv4 or IPv6 address to use, if !is_unix_addr */
tor_addr_t real_addr;
-} rend_service_port_config_t;
+ /* The socket path to connect to, if is_unix_addr */
+ char unix_addr[FLEXIBLE_ARRAY_MEMBER];
+};
/** Try to maintain this many intro points per service by default. */
#define NUM_INTRO_POINTS_DEFAULT 3
@@ -83,7 +97,7 @@ typedef struct rend_service_port_config_t {
#define MAX_INTRO_CIRCS_PER_PERIOD 10
/** How many times will a hidden service operator attempt to connect to
* a requested rendezvous point before giving up? */
-#define MAX_REND_FAILURES 8
+#define MAX_REND_FAILURES 1
/** How many seconds should we spend trying to connect to a requested
* rendezvous point before giving up? */
#define MAX_REND_TIMEOUT 30
@@ -95,7 +109,8 @@ typedef struct rend_service_port_config_t {
/** Represents a single hidden service running at this OP. */
typedef struct rend_service_t {
/* Fields specified in config file */
- char *directory; /**< where in the filesystem it stores it */
+ char *directory; /**< where in the filesystem it stores it. Will be NULL if
+ * this service is ephemeral. */
int dir_group_readable; /**< if 1, allow group read
permissions on directory */
smartlist_t *ports; /**< List of rend_service_port_config_t */
@@ -129,8 +144,19 @@ typedef struct rend_service_t {
* when they do, this keeps us from launching multiple simultaneous attempts
* to connect to the same rend point. */
replaycache_t *accepted_intro_dh_parts;
+ /** If true, we don't close circuits for making requests to unsupported
+ * ports. */
+ int allow_unknown_ports;
} rend_service_t;
+/** Returns a escaped string representation of the service, <b>s</b>.
+ */
+static const char *
+rend_service_escaped_dir(const struct rend_service_t *s)
+{
+ return (s->directory) ? escaped(s->directory) : "[EPHEMERAL]";
+}
+
/** A list of rend_service_t's for services run on this OP.
*/
static smartlist_t *rend_service_list = NULL;
@@ -163,7 +189,7 @@ rend_authorized_client_free(rend_authorized_client_t *client)
return;
if (client->client_key)
crypto_pk_free(client->client_key);
- tor_strclear(client->client_name);
+ memwipe(client->client_name, 0, strlen(client->client_name));
tor_free(client->client_name);
memwipe(client->descriptor_cookie, 0, sizeof(client->descriptor_cookie));
tor_free(client);
@@ -185,7 +211,8 @@ rend_service_free(rend_service_t *service)
return;
tor_free(service->directory);
- SMARTLIST_FOREACH(service->ports, void*, p, tor_free(p));
+ SMARTLIST_FOREACH(service->ports, rend_service_port_config_t*, p,
+ rend_service_port_config_free(p));
smartlist_free(service->ports);
if (service->private_key)
crypto_pk_free(service->private_key);
@@ -222,8 +249,9 @@ rend_service_free_all(void)
}
/** Validate <b>service</b> and add it to rend_service_list if possible.
+ * Return 0 on success and -1 on failure.
*/
-static void
+static int
rend_add_service(rend_service_t *service)
{
int i;
@@ -235,16 +263,17 @@ rend_add_service(rend_service_t *service)
smartlist_len(service->clients) == 0) {
log_warn(LD_CONFIG, "Hidden service (%s) with client authorization but no "
"clients; ignoring.",
- escaped(service->directory));
+ rend_service_escaped_dir(service));
rend_service_free(service);
- return;
+ return -1;
}
if (!smartlist_len(service->ports)) {
log_warn(LD_CONFIG, "Hidden service (%s) with no ports configured; "
"ignoring.",
- escaped(service->directory));
+ rend_service_escaped_dir(service));
rend_service_free(service);
+ return -1;
} else {
int dupe = 0;
/* XXX This duplicate check has two problems:
@@ -262,56 +291,102 @@ rend_add_service(rend_service_t *service)
* lock file. But this is enough to detect a simple mistake that
* at least one person has actually made.
*/
- SMARTLIST_FOREACH(rend_service_list, rend_service_t*, ptr,
- dupe = dupe ||
- !strcmp(ptr->directory, service->directory));
- if (dupe) {
- log_warn(LD_REND, "Another hidden service is already configured for "
- "directory %s, ignoring.", service->directory);
- rend_service_free(service);
- return;
+ if (service->directory != NULL) { /* Skip dupe for ephemeral services. */
+ SMARTLIST_FOREACH(rend_service_list, rend_service_t*, ptr,
+ dupe = dupe ||
+ !strcmp(ptr->directory, service->directory));
+ if (dupe) {
+ log_warn(LD_REND, "Another hidden service is already configured for "
+ "directory %s, ignoring.",
+ rend_service_escaped_dir(service));
+ rend_service_free(service);
+ return -1;
+ }
}
smartlist_add(rend_service_list, service);
log_debug(LD_REND,"Configuring service with directory \"%s\"",
service->directory);
for (i = 0; i < smartlist_len(service->ports); ++i) {
p = smartlist_get(service->ports, i);
- log_debug(LD_REND,"Service maps port %d to %s",
- p->virtual_port, fmt_addrport(&p->real_addr, p->real_port));
+ if (!(p->is_unix_addr)) {
+ log_debug(LD_REND,
+ "Service maps port %d to %s",
+ p->virtual_port,
+ fmt_addrport(&p->real_addr, p->real_port));
+ } else {
+#ifdef HAVE_SYS_UN_H
+ log_debug(LD_REND,
+ "Service maps port %d to socket at \"%s\"",
+ p->virtual_port, p->unix_addr);
+#else
+ log_debug(LD_REND,
+ "Service maps port %d to an AF_UNIX socket, but we "
+ "have no AF_UNIX support on this platform. This is "
+ "probably a bug.",
+ p->virtual_port);
+#endif /* defined(HAVE_SYS_UN_H) */
+ }
}
+ return 0;
}
+ /* NOTREACHED */
}
-/** Parses a real-port to virtual-port mapping and returns a new
- * rend_service_port_config_t.
+/** Return a new rend_service_port_config_t with its path set to
+ * <b>socket_path</b> or empty if <b>socket_path</b> is NULL */
+static rend_service_port_config_t *
+rend_service_port_config_new(const char *socket_path)
+{
+ if (!socket_path)
+ return tor_malloc_zero(sizeof(rend_service_port_config_t) + 1);
+
+ const size_t pathlen = strlen(socket_path) + 1;
+ rend_service_port_config_t *conf =
+ tor_malloc_zero(sizeof(rend_service_port_config_t) + pathlen);
+ memcpy(conf->unix_addr, socket_path, pathlen);
+ conf->is_unix_addr = 1;
+ return conf;
+}
+
+/** Parses a real-port to virtual-port mapping separated by the provided
+ * separator and returns a new rend_service_port_config_t, or NULL and an
+ * optional error string on failure.
*
- * The format is: VirtualPort (IP|RealPort|IP:RealPort)?
+ * The format is: VirtualPort SEP (IP|RealPort|IP:RealPort|'socket':path)?
*
* IP defaults to 127.0.0.1; RealPort defaults to VirtualPort.
*/
-static rend_service_port_config_t *
-parse_port_config(const char *string)
+rend_service_port_config_t *
+rend_service_parse_port_config(const char *string, const char *sep,
+ char **err_msg_out)
{
smartlist_t *sl;
int virtport;
- int realport;
+ int realport = 0;
uint16_t p;
tor_addr_t addr;
const char *addrport;
rend_service_port_config_t *result = NULL;
+ unsigned int is_unix_addr = 0;
+ char *socket_path = NULL;
+ char *err_msg = NULL;
sl = smartlist_new();
- smartlist_split_string(sl, string, " ",
+ smartlist_split_string(sl, string, sep,
SPLIT_SKIP_SPACE|SPLIT_IGNORE_BLANK, 0);
if (smartlist_len(sl) < 1 || smartlist_len(sl) > 2) {
- log_warn(LD_CONFIG, "Bad syntax in hidden service port configuration.");
+ if (err_msg_out)
+ err_msg = tor_strdup("Bad syntax in hidden service port configuration.");
+
goto err;
}
virtport = (int)tor_parse_long(smartlist_get(sl,0), 10, 1, 65535, NULL,NULL);
if (!virtport) {
- log_warn(LD_CONFIG, "Missing or invalid port %s in hidden service port "
- "configuration", escaped(smartlist_get(sl,0)));
+ if (err_msg_out)
+ tor_asprintf(&err_msg, "Missing or invalid port %s in hidden service "
+ "port configuration", escaped(smartlist_get(sl,0)));
+
goto err;
}
@@ -320,11 +395,27 @@ parse_port_config(const char *string)
realport = virtport;
tor_addr_from_ipv4h(&addr, 0x7F000001u); /* 127.0.0.1 */
} else {
+ int ret;
+
addrport = smartlist_get(sl,1);
- if (strchr(addrport, ':') || strchr(addrport, '.')) {
+ ret = config_parse_unix_port(addrport, &socket_path);
+ if (ret < 0 && ret != -ENOENT) {
+ if (ret == -EINVAL)
+ if (err_msg_out)
+ err_msg = tor_strdup("Empty socket path in hidden service port "
+ "configuration.");
+
+ goto err;
+ }
+ if (socket_path) {
+ is_unix_addr = 1;
+ } else if (strchr(addrport, ':') || strchr(addrport, '.')) {
+ /* else try it as an IP:port pair if it has a : or . in it */
if (tor_addr_port_lookup(addrport, &addr, &p)<0) {
- log_warn(LD_CONFIG,"Unparseable address in hidden service port "
- "configuration.");
+ if (err_msg_out)
+ err_msg = tor_strdup("Unparseable address in hidden service port "
+ "configuration.");
+
goto err;
}
realport = p?p:virtport;
@@ -332,24 +423,43 @@ parse_port_config(const char *string)
/* No addr:port, no addr -- must be port. */
realport = (int)tor_parse_long(addrport, 10, 1, 65535, NULL, NULL);
if (!realport) {
- log_warn(LD_CONFIG,"Unparseable or out-of-range port %s in hidden "
- "service port configuration.", escaped(addrport));
+ if (err_msg_out)
+ tor_asprintf(&err_msg, "Unparseable or out-of-range port %s in "
+ "hidden service port configuration.",
+ escaped(addrport));
+
goto err;
}
tor_addr_from_ipv4h(&addr, 0x7F000001u); /* Default to 127.0.0.1 */
}
}
- result = tor_malloc(sizeof(rend_service_port_config_t));
+ /* Allow room for unix_addr */
+ result = rend_service_port_config_new(socket_path);
result->virtual_port = virtport;
- result->real_port = realport;
- tor_addr_copy(&result->real_addr, &addr);
+ result->is_unix_addr = is_unix_addr;
+ if (!is_unix_addr) {
+ result->real_port = realport;
+ tor_addr_copy(&result->real_addr, &addr);
+ result->unix_addr[0] = '\0';
+ }
+
err:
+ if (err_msg_out) *err_msg_out = err_msg;
SMARTLIST_FOREACH(sl, char *, c, tor_free(c));
smartlist_free(sl);
+ if (socket_path) tor_free(socket_path);
+
return result;
}
+/** Release all storage held in a rend_service_port_config_t. */
+void
+rend_service_port_config_free(rend_service_port_config_t *p)
+{
+ tor_free(p);
+}
+
/** Set up rend_service_list, based on the values of HiddenServiceDir and
* HiddenServicePort in <b>options</b>. Return 0 on success and -1 on
* failure. (If <b>validate_only</b> is set, parse, warn and return as
@@ -391,12 +501,30 @@ rend_config_services(const or_options_t *options, int validate_only)
return -1;
}
if (!strcasecmp(line->key, "HiddenServicePort")) {
- portcfg = parse_port_config(line->value);
+ char *err_msg = NULL;
+ portcfg = rend_service_parse_port_config(line->value, " ", &err_msg);
if (!portcfg) {
+ if (err_msg)
+ log_warn(LD_CONFIG, "%s", err_msg);
+ tor_free(err_msg);
rend_service_free(service);
return -1;
}
+ tor_assert(!err_msg);
smartlist_add(service->ports, portcfg);
+ } else if (!strcasecmp(line->key, "HiddenServiceAllowUnknownPorts")) {
+ service->allow_unknown_ports = (int)tor_parse_long(line->value,
+ 10, 0, 1, &ok, NULL);
+ if (!ok) {
+ log_warn(LD_CONFIG,
+ "HiddenServiceAllowUnknownPorts should be 0 or 1, not %s",
+ line->value);
+ rend_service_free(service);
+ return -1;
+ }
+ log_info(LD_CONFIG,
+ "HiddenServiceAllowUnknownPorts=%d for %s",
+ (int)service->allow_unknown_ports, service->directory);
} else if (!strcasecmp(line->key,
"HiddenServiceDirGroupReadable")) {
service->dir_group_readable = (int)tor_parse_long(line->value,
@@ -554,6 +682,28 @@ rend_config_services(const or_options_t *options, int validate_only)
if (old_service_list && !validate_only) {
smartlist_t *surviving_services = smartlist_new();
+ /* Preserve the existing ephemeral services.
+ *
+ * This is the ephemeral service equivalent of the "Copy introduction
+ * points to new services" block, except there's no copy required since
+ * the service structure isn't regenerated.
+ *
+ * After this is done, all ephemeral services will be:
+ * * Removed from old_service_list, so the equivalent non-ephemeral code
+ * will not attempt to preserve them.
+ * * Added to the new rend_service_list (that previously only had the
+ * services listed in the configuration).
+ * * Added to surviving_services, which is the list of services that
+ * will NOT have their intro point closed.
+ */
+ SMARTLIST_FOREACH(old_service_list, rend_service_t *, old, {
+ if (!old->directory) {
+ SMARTLIST_DEL_CURRENT(old_service_list, old);
+ smartlist_add(surviving_services, old);
+ smartlist_add(rend_service_list, old);
+ }
+ });
+
/* Copy introduction points to new services. */
/* XXXX This is O(n^2), but it's only called on reconfigure, so it's
* probably ok? */
@@ -607,6 +757,118 @@ rend_config_services(const or_options_t *options, int validate_only)
return 0;
}
+/** Add the ephemeral service <b>pk</b>/<b>ports</b> if possible.
+ *
+ * Regardless of sucess/failure, callers should not touch pk/ports after
+ * calling this routine, and may assume that correct cleanup has been done
+ * on failure.
+ *
+ * Return an appropriate rend_service_add_ephemeral_status_t.
+ */
+rend_service_add_ephemeral_status_t
+rend_service_add_ephemeral(crypto_pk_t *pk,
+ smartlist_t *ports,
+ char **service_id_out)
+{
+ *service_id_out = NULL;
+ /* Allocate the service structure, and initialize the key, and key derived
+ * parameters.
+ */
+ rend_service_t *s = tor_malloc_zero(sizeof(rend_service_t));
+ s->directory = NULL; /* This indicates the service is ephemeral. */
+ s->private_key = pk;
+ s->auth_type = REND_NO_AUTH;
+ s->ports = ports;
+ s->intro_period_started = time(NULL);
+ s->n_intro_points_wanted = NUM_INTRO_POINTS_DEFAULT;
+ if (rend_service_derive_key_digests(s) < 0) {
+ rend_service_free(s);
+ return RSAE_BADPRIVKEY;
+ }
+
+ if (!s->ports || smartlist_len(s->ports) == 0) {
+ log_warn(LD_CONFIG, "At least one VIRTPORT/TARGET must be specified.");
+ rend_service_free(s);
+ return RSAE_BADVIRTPORT;
+ }
+
+ /* Enforcing pk/id uniqueness should be done by rend_service_load_keys(), but
+ * it's not, see #14828.
+ */
+ if (rend_service_get_by_pk_digest(s->pk_digest)) {
+ log_warn(LD_CONFIG, "Onion Service private key collides with an "
+ "existing service.");
+ rend_service_free(s);
+ return RSAE_ADDREXISTS;
+ }
+ if (rend_service_get_by_service_id(s->service_id)) {
+ log_warn(LD_CONFIG, "Onion Service id collides with an existing service.");
+ rend_service_free(s);
+ return RSAE_ADDREXISTS;
+ }
+
+ /* Initialize the service. */
+ if (rend_add_service(s)) {
+ rend_service_free(s);
+ return RSAE_INTERNAL;
+ }
+ *service_id_out = tor_strdup(s->service_id);
+
+ log_debug(LD_CONFIG, "Added ephemeral Onion Service: %s", s->service_id);
+ return RSAE_OKAY;
+}
+
+/** Remove the ephemeral service <b>service_id</b> if possible. Returns 0 on
+ * success, and -1 on failure.
+ */
+int
+rend_service_del_ephemeral(const char *service_id)
+{
+ rend_service_t *s;
+ if (!rend_valid_service_id(service_id)) {
+ log_warn(LD_CONFIG, "Requested malformed Onion Service id for removal.");
+ return -1;
+ }
+ if ((s = rend_service_get_by_service_id(service_id)) == NULL) {
+ log_warn(LD_CONFIG, "Requested non-existent Onion Service id for "
+ "removal.");
+ return -1;
+ }
+ if (s->directory) {
+ log_warn(LD_CONFIG, "Requested non-ephemeral Onion Service for removal.");
+ return -1;
+ }
+
+ /* Kill the intro point circuit for the Onion Service, and remove it from
+ * the list. Closing existing connections is the application's problem.
+ *
+ * XXX: As with the comment in rend_config_services(), a nice abstraction
+ * would be ideal here, but for now just duplicate the code.
+ */
+ SMARTLIST_FOREACH_BEGIN(circuit_get_global_list(), circuit_t *, circ) {
+ if (!circ->marked_for_close &&
+ circ->state == CIRCUIT_STATE_OPEN &&
+ (circ->purpose == CIRCUIT_PURPOSE_S_ESTABLISH_INTRO ||
+ circ->purpose == CIRCUIT_PURPOSE_S_INTRO)) {
+ origin_circuit_t *oc = TO_ORIGIN_CIRCUIT(circ);
+ tor_assert(oc->rend_data);
+ if (!tor_memeq(s->pk_digest, oc->rend_data->rend_pk_digest, DIGEST_LEN))
+ continue;
+ log_debug(LD_REND, "Closing intro point %s for service %s.",
+ safe_str_client(extend_info_describe(
+ oc->build_state->chosen_exit)),
+ oc->rend_data->onion_address);
+ circuit_mark_for_close(circ, END_CIRC_REASON_FINISHED);
+ }
+ } SMARTLIST_FOREACH_END(circ);
+ smartlist_remove(rend_service_list, s);
+ rend_service_free(s);
+
+ log_debug(LD_CONFIG, "Removed ephemeral Onion Service: %s", service_id);
+
+ return 0;
+}
+
/** Replace the old value of <b>service</b>-\>desc with one that reflects
* the other fields in service.
*/
@@ -691,6 +953,7 @@ rend_service_add_filenames_to_list(smartlist_t *lst, const rend_service_t *s)
{
tor_assert(lst);
tor_assert(s);
+ tor_assert(s->directory);
smartlist_add_asprintf(lst, "%s"PATH_SEPARATOR"private_key",
s->directory);
smartlist_add_asprintf(lst, "%s"PATH_SEPARATOR"hostname",
@@ -709,11 +972,31 @@ rend_services_add_filenames_to_lists(smartlist_t *open_lst,
if (!rend_service_list)
return;
SMARTLIST_FOREACH_BEGIN(rend_service_list, rend_service_t *, s) {
- rend_service_add_filenames_to_list(open_lst, s);
- smartlist_add(stat_lst, tor_strdup(s->directory));
+ if (s->directory) {
+ rend_service_add_filenames_to_list(open_lst, s);
+ smartlist_add(stat_lst, tor_strdup(s->directory));
+ }
} SMARTLIST_FOREACH_END(s);
}
+/** Derive all rend_service_t internal material based on the service's key.
+ * Returns 0 on sucess, -1 on failure.
+ */
+static int
+rend_service_derive_key_digests(struct rend_service_t *s)
+{
+ if (rend_get_service_id(s->private_key, s->service_id)<0) {
+ log_warn(LD_BUG, "Internal error: couldn't encode service ID.");
+ return -1;
+ }
+ if (crypto_pk_get_digest(s->private_key, s->pk_digest)<0) {
+ log_warn(LD_BUG, "Couldn't compute hash of public key.");
+ return -1;
+ }
+
+ return 0;
+}
+
/** Load and/or generate private keys for the hidden service <b>s</b>,
* possibly including keys for client authorization. Return 0 on success, -1
* on failure. */
@@ -752,15 +1035,10 @@ rend_service_load_keys(rend_service_t *s)
if (!s->private_key)
return -1;
- /* Create service file */
- if (rend_get_service_id(s->private_key, s->service_id)<0) {
- log_warn(LD_BUG, "Internal error: couldn't encode service ID.");
+ if (rend_service_derive_key_digests(s) < 0)
return -1;
- }
- if (crypto_pk_get_digest(s->private_key, s->pk_digest)<0) {
- log_warn(LD_BUG, "Couldn't compute hash of public key.");
- return -1;
- }
+
+ /* Create service file */
if (strlcpy(fname,s->directory,sizeof(fname)) >= sizeof(fname) ||
strlcat(fname,PATH_SEPARATOR"hostname",sizeof(fname))
>= sizeof(fname)) {
@@ -863,7 +1141,7 @@ rend_service_load_auth_keys(rend_service_t *s, const char *hfname)
}
if (base64_encode(desc_cook_out, 3*REND_DESC_COOKIE_LEN_BASE64+1,
client->descriptor_cookie,
- REND_DESC_COOKIE_LEN) < 0) {
+ REND_DESC_COOKIE_LEN, 0) < 0) {
log_warn(LD_BUG, "Could not base64-encode descriptor cookie.");
goto err;
}
@@ -890,7 +1168,6 @@ rend_service_load_auth_keys(rend_service_t *s, const char *hfname)
client->client_key = prkey;
}
/* Add entry to client_keys file. */
- desc_cook_out[strlen(desc_cook_out)-1] = '\0'; /* Remove newline. */
written = tor_snprintf(buf, sizeof(buf),
"client-name %s\ndescriptor-cookie %s\n",
client->client_name, desc_cook_out);
@@ -945,12 +1222,11 @@ rend_service_load_auth_keys(rend_service_t *s, const char *hfname)
((int)s->auth_type - 1) << 4;
if (base64_encode(desc_cook_out, 3*REND_DESC_COOKIE_LEN_BASE64+1,
extended_desc_cookie,
- REND_DESC_COOKIE_LEN+1) < 0) {
+ REND_DESC_COOKIE_LEN+1, 0) < 0) {
log_warn(LD_BUG, "Could not base64-encode descriptor cookie.");
goto err;
}
- desc_cook_out[strlen(desc_cook_out)-3] = '\0'; /* Remove A= and
- newline. */
+ desc_cook_out[strlen(desc_cook_out)-2] = '\0'; /* Remove A=. */
tor_snprintf(buf, sizeof(buf),"%s.onion %s # client: %s\n",
service_id, desc_cook_out, client->client_name);
}
@@ -974,7 +1250,7 @@ rend_service_load_auth_keys(rend_service_t *s, const char *hfname)
abort_writing_to_file(open_hfile);
done:
if (client_keys_str) {
- tor_strclear(client_keys_str);
+ memwipe(client_keys_str, 0, strlen(client_keys_str));
tor_free(client_keys_str);
}
strmap_free(parsed_clients, rend_authorized_client_strmap_item_free);
@@ -1002,6 +1278,20 @@ rend_service_get_by_pk_digest(const char* digest)
return NULL;
}
+/** Return the service whose service id is <b>id</b>, or NULL if no such
+ * service exists.
+ */
+static struct rend_service_t *
+rend_service_get_by_service_id(const char *id)
+{
+ tor_assert(strlen(id) == REND_SERVICE_ID_LEN_BASE32);
+ SMARTLIST_FOREACH(rend_service_list, rend_service_t*, s, {
+ if (tor_memeq(s->service_id, id, REND_SERVICE_ID_LEN_BASE32))
+ return s;
+ });
+ return NULL;
+}
+
/** Return 1 if any virtual port in <b>service</b> wants a circuit
* to have good uptime. Else return 0.
*/
@@ -1020,11 +1310,13 @@ rend_service_requires_uptime(rend_service_t *service)
return 0;
}
-/** Check client authorization of a given <b>descriptor_cookie</b> for
- * <b>service</b>. Return 1 for success and 0 for failure. */
+/** Check client authorization of a given <b>descriptor_cookie</b> of
+ * length <b>cookie_len</b> for <b>service</b>. Return 1 for success
+ * and 0 for failure. */
static int
rend_check_authorization(rend_service_t *service,
- const char *descriptor_cookie)
+ const char *descriptor_cookie,
+ size_t cookie_len)
{
rend_authorized_client_t *auth_client = NULL;
tor_assert(service);
@@ -1035,6 +1327,13 @@ rend_check_authorization(rend_service_t *service,
return 0;
}
+ if (cookie_len != REND_DESC_COOKIE_LEN) {
+ log_info(LD_REND, "Descriptor cookie is %lu bytes, but we expected "
+ "%lu bytes. Dropping cell.",
+ (unsigned long)cookie_len, (unsigned long)REND_DESC_COOKIE_LEN);
+ return 0;
+ }
+
/* Look up client authorization by descriptor cookie. */
SMARTLIST_FOREACH(service->clients, rend_authorized_client_t *, client, {
if (tor_memeq(client->descriptor_cookie, descriptor_cookie,
@@ -1046,7 +1345,7 @@ rend_check_authorization(rend_service_t *service,
if (!auth_client) {
char descriptor_cookie_base64[3*REND_DESC_COOKIE_LEN_BASE64];
base64_encode(descriptor_cookie_base64, sizeof(descriptor_cookie_base64),
- descriptor_cookie, REND_DESC_COOKIE_LEN);
+ descriptor_cookie, REND_DESC_COOKIE_LEN, 0);
log_info(LD_REND, "No authorization found for descriptor cookie '%s'! "
"Dropping cell!",
descriptor_cookie_base64);
@@ -1054,8 +1353,8 @@ rend_check_authorization(rend_service_t *service,
}
/* Allow the request. */
- log_debug(LD_REND, "Client %s authorized for service %s.",
- auth_client->client_name, service->service_id);
+ log_info(LD_REND, "Client %s authorized for service %s.",
+ auth_client->client_name, service->service_id);
return 1;
}
@@ -1080,16 +1379,17 @@ rend_service_note_removing_intro_point(rend_service_t *service,
/* This intro point was never used. Don't change
* n_intro_points_wanted. */
} else {
+
/* We want to increase the number of introduction points service
* operates if intro was heavily used, or decrease the number of
* intro points if intro was lightly used.
*
* We consider an intro point's target 'usage' to be
- * INTRO_POINT_LIFETIME_INTRODUCTIONS introductions in
+ * maximum of INTRODUCE2 cells divided by
* INTRO_POINT_LIFETIME_MIN_SECONDS seconds. To calculate intro's
- * fraction of target usage, we divide the fraction of
- * _LIFETIME_INTRODUCTIONS introductions that it has handled by
- * the fraction of _LIFETIME_MIN_SECONDS for which it existed.
+ * fraction of target usage, we divide the amount of INTRODUCE2 cells
+ * that it has handled by the fraction of _LIFETIME_MIN_SECONDS for
+ * which it existed.
*
* Then we multiply that fraction of desired usage by a fudge
* factor of 1.5, to decide how many new introduction points
@@ -1111,7 +1411,7 @@ rend_service_note_removing_intro_point(rend_service_t *service,
intro_point_accepted_intro_count(intro) /
(double)(now - intro->time_published);
const double intro_point_target_usage =
- INTRO_POINT_LIFETIME_INTRODUCTIONS /
+ intro->max_introductions /
(double)INTRO_POINT_LIFETIME_MIN_SECONDS;
const double fractional_n_intro_points_wanted_to_replace_this_one =
(1.5 * (intro_point_usage / intro_point_target_usage));
@@ -1381,7 +1681,8 @@ rend_service_introduce(origin_circuit_t *circuit, const uint8_t *request,
if (service->clients) {
if (parsed_req->version == 3 && parsed_req->u.v3.auth_len > 0) {
if (rend_check_authorization(service,
- (const char*)parsed_req->u.v3.auth_data)) {
+ (const char*)parsed_req->u.v3.auth_data,
+ parsed_req->u.v3.auth_len)) {
log_info(LD_REND, "Authorization data in INTRODUCE2 cell are valid.");
} else {
log_info(LD_REND, "The authorization data that are contained in "
@@ -1445,13 +1746,11 @@ rend_service_introduce(origin_circuit_t *circuit, const uint8_t *request,
hexcookie, serviceid);
tor_assert(launched->build_state);
/* Fill in the circuit's state. */
- launched->rend_data = tor_malloc_zero(sizeof(rend_data_t));
- memcpy(launched->rend_data->rend_pk_digest,
- circuit->rend_data->rend_pk_digest,
- DIGEST_LEN);
- memcpy(launched->rend_data->rend_cookie, parsed_req->rc, REND_COOKIE_LEN);
- strlcpy(launched->rend_data->onion_address, service->service_id,
- sizeof(launched->rend_data->onion_address));
+
+ launched->rend_data =
+ rend_data_service_create(service->service_id,
+ circuit->rend_data->rend_pk_digest,
+ parsed_req->rc, service->auth_type);
launched->build_state->service_pending_final_cpath_ref =
tor_malloc_zero(sizeof(crypt_path_reference_t));
@@ -1862,6 +2161,16 @@ rend_service_parse_intro_for_v2(
goto err;
}
+ if (128 != crypto_pk_keysize(extend_info->onion_key)) {
+ if (err_msg_out) {
+ tor_asprintf(err_msg_out,
+ "invalid onion key size in version %d INTRODUCE%d cell",
+ intro->version,
+ (intro->type));
+ }
+
+ goto err;
+ }
ver_specific_len = 7+DIGEST_LEN+2+klen;
@@ -2413,10 +2722,9 @@ rend_service_launch_establish_intro(rend_service_t *service,
intro->extend_info = extend_info_dup(launched->build_state->chosen_exit);
}
- launched->rend_data = tor_malloc_zero(sizeof(rend_data_t));
- strlcpy(launched->rend_data->onion_address, service->service_id,
- sizeof(launched->rend_data->onion_address));
- memcpy(launched->rend_data->rend_pk_digest, service->pk_digest, DIGEST_LEN);
+ launched->rend_data = rend_data_service_create(service->service_id,
+ service->pk_digest, NULL,
+ service->auth_type);
launched->intro_key = crypto_pk_dup_key(intro->intro_key);
if (launched->base_.state == CIRCUIT_STATE_OPEN)
rend_service_intro_has_opened(launched);
@@ -2801,14 +3109,16 @@ find_intro_point(origin_circuit_t *circ)
return NULL;
}
-/** Determine the responsible hidden service directories for the
- * rend_encoded_v2_service_descriptor_t's in <b>descs</b> and upload them;
- * <b>service_id</b> and <b>seconds_valid</b> are only passed for logging
- * purposes. */
-static void
+/** Upload the rend_encoded_v2_service_descriptor_t's in <b>descs</b>
+ * associated with the rend_service_descriptor_t <b>renddesc</b> to
+ * the responsible hidden service directories OR the hidden service
+ * directories specified by <b>hs_dirs</b>; <b>service_id</b> and
+ * <b>seconds_valid</b> are only passed for logging purposes.
+ */
+void
directory_post_to_hs_dir(rend_service_descriptor_t *renddesc,
- smartlist_t *descs, const char *service_id,
- int seconds_valid)
+ smartlist_t *descs, smartlist_t *hs_dirs,
+ const char *service_id, int seconds_valid)
{
int i, j, failed_upload = 0;
smartlist_t *responsible_dirs = smartlist_new();
@@ -2816,14 +3126,21 @@ directory_post_to_hs_dir(rend_service_descriptor_t *renddesc,
routerstatus_t *hs_dir;
for (i = 0; i < smartlist_len(descs); i++) {
rend_encoded_v2_service_descriptor_t *desc = smartlist_get(descs, i);
- /* Determine responsible dirs. */
- if (hid_serv_get_responsible_directories(responsible_dirs,
- desc->desc_id) < 0) {
- log_warn(LD_REND, "Could not determine the responsible hidden service "
- "directories to post descriptors to.");
- smartlist_free(responsible_dirs);
- smartlist_free(successful_uploads);
- return;
+ /** If any HSDirs are specified, they should be used instead of
+ * the responsible directories */
+ if (hs_dirs && smartlist_len(hs_dirs) > 0) {
+ smartlist_add_all(responsible_dirs, hs_dirs);
+ } else {
+ /* Determine responsible dirs. */
+ if (hid_serv_get_responsible_directories(responsible_dirs,
+ desc->desc_id) < 0) {
+ log_warn(LD_REND, "Could not determine the responsible hidden service "
+ "directories to post descriptors to.");
+ control_event_hs_descriptor_upload(service_id,
+ "UNKNOWN",
+ "UNKNOWN");
+ goto done;
+ }
}
for (j = 0; j < smartlist_len(responsible_dirs); j++) {
char desc_id_base32[REND_DESC_ID_V2_LEN_BASE32 + 1];
@@ -2863,6 +3180,9 @@ directory_post_to_hs_dir(rend_service_descriptor_t *renddesc,
hs_dir->nickname,
hs_dir_ip,
hs_dir->or_port);
+ control_event_hs_descriptor_upload(service_id,
+ hs_dir->identity_digest,
+ desc_id_base32);
tor_free(hs_dir_ip);
/* Remember successful upload to this router for next time. */
if (!smartlist_contains_digest(successful_uploads,
@@ -2890,6 +3210,7 @@ directory_post_to_hs_dir(rend_service_descriptor_t *renddesc,
}
});
}
+ done:
smartlist_free(responsible_dirs);
smartlist_free(successful_uploads);
}
@@ -2954,7 +3275,7 @@ upload_service_descriptor(rend_service_t *service)
rend_get_service_id(service->desc->pk, serviceid);
log_info(LD_REND, "Launching upload for hidden service %s",
serviceid);
- directory_post_to_hs_dir(service->desc, descs, serviceid,
+ directory_post_to_hs_dir(service->desc, descs, NULL, serviceid,
seconds_valid);
/* Free memory for descriptors. */
for (i = 0; i < smartlist_len(descs); i++)
@@ -2983,7 +3304,7 @@ upload_service_descriptor(rend_service_t *service)
smartlist_free(client_cookies);
return;
}
- directory_post_to_hs_dir(service->desc, descs, serviceid,
+ directory_post_to_hs_dir(service->desc, descs, NULL, serviceid,
seconds_valid);
/* Free memory for descriptors. */
for (i = 0; i < smartlist_len(descs); i++)
@@ -3035,7 +3356,7 @@ intro_point_should_expire_now(rend_intro_point_t *intro,
}
if (intro_point_accepted_intro_count(intro) >=
- INTRO_POINT_LIFETIME_INTRODUCTIONS) {
+ intro->max_introductions) {
/* This intro point has been used too many times. Expire it now. */
return 1;
}
@@ -3044,9 +3365,8 @@ intro_point_should_expire_now(rend_intro_point_t *intro,
/* This intro point has been published, but we haven't picked an
* expiration time for it. Pick one now. */
int intro_point_lifetime_seconds =
- INTRO_POINT_LIFETIME_MIN_SECONDS +
- crypto_rand_int(INTRO_POINT_LIFETIME_MAX_SECONDS -
- INTRO_POINT_LIFETIME_MIN_SECONDS);
+ crypto_rand_int_range(INTRO_POINT_LIFETIME_MIN_SECONDS,
+ INTRO_POINT_LIFETIME_MAX_SECONDS);
/* Start the expiration timer now, rather than when the intro
* point was first published. There shouldn't be much of a time
@@ -3242,10 +3562,14 @@ rend_services_introduce(void)
intro = tor_malloc_zero(sizeof(rend_intro_point_t));
intro->extend_info = extend_info_from_node(node, 0);
intro->intro_key = crypto_pk_new();
- tor_assert(!crypto_pk_generate_key(intro->intro_key));
+ const int fail = crypto_pk_generate_key(intro->intro_key);
+ tor_assert(!fail);
intro->time_published = -1;
intro->time_to_expire = -1;
intro->time_expiring = -1;
+ intro->max_introductions =
+ crypto_rand_int_range(INTRO_POINT_MIN_LIFETIME_INTRODUCTIONS,
+ INTRO_POINT_MAX_LIFETIME_INTRODUCTIONS);
smartlist_add(service->intro_nodes, intro);
log_info(LD_REND, "Picked router %s as an intro point for %s.",
safe_str_client(node_describe(node)),
@@ -3386,9 +3710,64 @@ rend_service_dump_stats(int severity)
}
}
+#ifdef HAVE_SYS_UN_H
+
+/** Given <b>ports</b>, a smarlist containing rend_service_port_config_t,
+ * add the given <b>p</b>, a AF_UNIX port to the list. Return 0 on success
+ * else return -ENOSYS if AF_UNIX is not supported (see function in the
+ * #else statement below). */
+static int
+add_unix_port(smartlist_t *ports, rend_service_port_config_t *p)
+{
+ tor_assert(ports);
+ tor_assert(p);
+ tor_assert(p->is_unix_addr);
+
+ smartlist_add(ports, p);
+ return 0;
+}
+
+/** Given <b>conn</b> set it to use the given port <b>p</b> values. Return 0
+ * on success else return -ENOSYS if AF_UNIX is not supported (see function
+ * in the #else statement below). */
+static int
+set_unix_port(edge_connection_t *conn, rend_service_port_config_t *p)
+{
+ tor_assert(conn);
+ tor_assert(p);
+ tor_assert(p->is_unix_addr);
+
+ conn->base_.socket_family = AF_UNIX;
+ tor_addr_make_unspec(&conn->base_.addr);
+ conn->base_.port = 1;
+ conn->base_.address = tor_strdup(p->unix_addr);
+ return 0;
+}
+
+#else /* defined(HAVE_SYS_UN_H) */
+
+static int
+set_unix_port(edge_connection_t *conn, rend_service_port_config_t *p)
+{
+ (void) conn;
+ (void) p;
+ return -ENOSYS;
+}
+
+static int
+add_unix_port(smartlist_t *ports, rend_service_port_config_t *p)
+{
+ (void) ports;
+ (void) p;
+ return -ENOSYS;
+}
+
+#endif /* HAVE_SYS_UN_H */
+
/** Given <b>conn</b>, a rendezvous exit stream, look up the hidden service for
* 'circ', and look up the port and address based on conn-\>port.
- * Assign the actual conn-\>addr and conn-\>port. Return -1 if failure,
+ * Assign the actual conn-\>addr and conn-\>port. Return -2 on failure
+ * for which the circuit should be closed, -1 on other failure,
* or 0 for success.
*/
int
@@ -3399,6 +3778,7 @@ rend_service_set_connection_addr_port(edge_connection_t *conn,
char serviceid[REND_SERVICE_ID_LEN_BASE32+1];
smartlist_t *matching_ports;
rend_service_port_config_t *chosen_port;
+ unsigned int warn_once = 0;
tor_assert(circ->base_.purpose == CIRCUIT_PURPOSE_S_REND_JOINED);
tor_assert(circ->rend_data);
@@ -3411,24 +3791,53 @@ rend_service_set_connection_addr_port(edge_connection_t *conn,
log_warn(LD_REND, "Couldn't find any service associated with pk %s on "
"rendezvous circuit %u; closing.",
serviceid, (unsigned)circ->base_.n_circ_id);
- return -1;
+ return -2;
}
matching_ports = smartlist_new();
SMARTLIST_FOREACH(service->ports, rend_service_port_config_t *, p,
{
- if (conn->base_.port == p->virtual_port) {
+ if (conn->base_.port != p->virtual_port) {
+ continue;
+ }
+ if (!(p->is_unix_addr)) {
smartlist_add(matching_ports, p);
+ } else {
+ if (add_unix_port(matching_ports, p)) {
+ if (!warn_once) {
+ /* Unix port not supported so warn only once. */
+ log_warn(LD_REND,
+ "Saw AF_UNIX virtual port mapping for port %d on service "
+ "%s, which is unsupported on this platform. Ignoring it.",
+ conn->base_.port, serviceid);
+ }
+ warn_once++;
+ }
}
});
chosen_port = smartlist_choose(matching_ports);
smartlist_free(matching_ports);
if (chosen_port) {
- tor_addr_copy(&conn->base_.addr, &chosen_port->real_addr);
- conn->base_.port = chosen_port->real_port;
+ if (!(chosen_port->is_unix_addr)) {
+ /* Get a non-AF_UNIX connection ready for connection_exit_connect() */
+ tor_addr_copy(&conn->base_.addr, &chosen_port->real_addr);
+ conn->base_.port = chosen_port->real_port;
+ } else {
+ if (set_unix_port(conn, chosen_port)) {
+ /* Simply impossible to end up here else we were able to add a Unix
+ * port without AF_UNIX support... ? */
+ tor_assert(0);
+ }
+ }
return 0;
}
- log_info(LD_REND, "No virtual port mapping exists for port %d on service %s",
- conn->base_.port,serviceid);
- return -1;
+
+ log_info(LD_REND,
+ "No virtual port mapping exists for port %d on service %s",
+ conn->base_.port, serviceid);
+
+ if (service->allow_unknown_ports)
+ return -1;
+ else
+ return -2;
}
diff --git a/src/or/rendservice.h b/src/or/rendservice.h
index 754f7c358c..ec783d53c9 100644
--- a/src/or/rendservice.h
+++ b/src/or/rendservice.h
@@ -15,6 +15,7 @@
#include "or.h"
typedef struct rend_intro_cell_s rend_intro_cell_t;
+typedef struct rend_service_port_config_s rend_service_port_config_t;
#ifdef RENDSERVICE_PRIVATE
@@ -101,5 +102,27 @@ int rend_service_set_connection_addr_port(edge_connection_t *conn,
void rend_service_dump_stats(int severity);
void rend_service_free_all(void);
+rend_service_port_config_t *rend_service_parse_port_config(const char *string,
+ const char *sep,
+ char **err_msg_out);
+void rend_service_port_config_free(rend_service_port_config_t *p);
+
+/** Return value from rend_service_add_ephemeral. */
+typedef enum {
+ RSAE_BADVIRTPORT = -4, /**< Invalid VIRTPORT/TARGET(s) */
+ RSAE_ADDREXISTS = -3, /**< Onion address collision */
+ RSAE_BADPRIVKEY = -2, /**< Invalid public key */
+ RSAE_INTERNAL = -1, /**< Internal error */
+ RSAE_OKAY = 0 /**< Service added as expected */
+} rend_service_add_ephemeral_status_t;
+rend_service_add_ephemeral_status_t rend_service_add_ephemeral(crypto_pk_t *pk,
+ smartlist_t *ports,
+ char **service_id_out);
+int rend_service_del_ephemeral(const char *service_id);
+
+void directory_post_to_hs_dir(rend_service_descriptor_t *renddesc,
+ smartlist_t *descs, smartlist_t *hs_dirs,
+ const char *service_id, int seconds_valid);
+
#endif
diff --git a/src/or/rephist.c b/src/or/rephist.c
index 34908828a5..fe0997c891 100644
--- a/src/or/rephist.c
+++ b/src/or/rephist.c
@@ -3121,6 +3121,50 @@ rep_hist_hs_stats_write(time_t now)
return start_of_hs_stats_interval + WRITE_STATS_INTERVAL;
}
+#define MAX_LINK_PROTO_TO_LOG 4
+static uint64_t link_proto_count[MAX_LINK_PROTO_TO_LOG+1][2];
+
+/** Note that we negotiated link protocol version <b>link_proto</b>, on
+ * a connection that started here iff <b>started_here</b> is true.
+ */
+void
+rep_hist_note_negotiated_link_proto(unsigned link_proto, int started_here)
+{
+ started_here = !!started_here; /* force to 0 or 1 */
+ if (link_proto > MAX_LINK_PROTO_TO_LOG) {
+ log_warn(LD_BUG, "Can't log link protocol %u", link_proto);
+ return;
+ }
+
+ link_proto_count[link_proto][started_here]++;
+}
+
+/** Log a heartbeat message explaining how many connections of each link
+ * protocol version we have used.
+ */
+void
+rep_hist_log_link_protocol_counts(void)
+{
+ log_notice(LD_HEARTBEAT,
+ "Since startup, we have initiated "
+ U64_FORMAT" v1 connections, "
+ U64_FORMAT" v2 connections, "
+ U64_FORMAT" v3 connections, and "
+ U64_FORMAT" v4 connections; and received "
+ U64_FORMAT" v1 connections, "
+ U64_FORMAT" v2 connections, "
+ U64_FORMAT" v3 connections, and "
+ U64_FORMAT" v4 connections.",
+ U64_PRINTF_ARG(link_proto_count[1][1]),
+ U64_PRINTF_ARG(link_proto_count[2][1]),
+ U64_PRINTF_ARG(link_proto_count[3][1]),
+ U64_PRINTF_ARG(link_proto_count[4][1]),
+ U64_PRINTF_ARG(link_proto_count[1][0]),
+ U64_PRINTF_ARG(link_proto_count[2][0]),
+ U64_PRINTF_ARG(link_proto_count[3][0]),
+ U64_PRINTF_ARG(link_proto_count[4][0]));
+}
+
/** Free all storage held by the OR/link history caches, by the
* bandwidth history arrays, by the port history, or by statistics . */
void
diff --git a/src/or/rephist.h b/src/or/rephist.h
index 42710c4ed6..f94b4e8ff1 100644
--- a/src/or/rephist.h
+++ b/src/or/rephist.h
@@ -108,5 +108,9 @@ void rep_hist_stored_maybe_new_hs(const crypto_pk_t *pubkey);
void rep_hist_free_all(void);
+void rep_hist_note_negotiated_link_proto(unsigned link_proto,
+ int started_here);
+void rep_hist_log_link_protocol_counts(void);
+
#endif
diff --git a/src/or/router.c b/src/or/router.c
index a1feda3497..24b7c750f6 100644
--- a/src/or/router.c
+++ b/src/or/router.c
@@ -683,7 +683,9 @@ router_initialize_tls_context(void)
if (!lifetime) { /* we should guess a good ssl cert lifetime */
/* choose between 5 and 365 days, and round to the day */
- lifetime = 5*24*3600 + crypto_rand_int(361*24*3600);
+ unsigned int five_days = 5*24*3600;
+ unsigned int one_year = 365*24*3600;
+ lifetime = crypto_rand_int_range(five_days, one_year);
lifetime -= lifetime % (24*3600);
if (crypto_rand_int(2)) {
@@ -1802,12 +1804,15 @@ router_pick_published_address(const or_options_t *options, uint32_t *addr)
return 0;
}
-/** If <b>force</b> is true, or our descriptor is out-of-date, rebuild a fresh
- * routerinfo, signed server descriptor, and extra-info document for this OR.
- * Return 0 on success, -1 on temporary error.
+/** Build a fresh routerinfo, signed server descriptor, and extra-info document
+ * for this OR. Set r to the generated routerinfo, e to the generated
+ * extra-info document. Return 0 on success, -1 on temporary error. Failure to
+ * generate an extra-info document is not an error and is indicated by setting
+ * e to NULL. Caller is responsible for freeing generated documents if 0 is
+ * returned.
*/
int
-router_rebuild_descriptor(int force)
+router_build_fresh_descriptor(routerinfo_t **r, extrainfo_t **e)
{
routerinfo_t *ri;
extrainfo_t *ei;
@@ -1816,20 +1821,11 @@ router_rebuild_descriptor(int force)
int hibernating = we_are_hibernating();
const or_options_t *options = get_options();
- if (desc_clean_since && !force)
- return 0;
-
- if (router_pick_published_address(options, &addr) < 0 ||
- router_get_advertised_or_port(options) == 0) {
- /* Stop trying to rebuild our descriptor every second. We'll
- * learn that it's time to try again when ip_address_changed()
- * marks it dirty. */
- desc_clean_since = time(NULL);
+ if (router_pick_published_address(options, &addr) < 0) {
+ log_warn(LD_CONFIG, "Don't know my address while generating descriptor");
return -1;
}
- log_info(LD_OR, "Rebuilding relay descriptor%s", force ? " (forced)" : "");
-
ri = tor_malloc_zero(sizeof(routerinfo_t));
ri->cache_info.routerlist_index = -1;
ri->nickname = tor_strdup(options->Nickname);
@@ -1848,8 +1844,8 @@ router_rebuild_descriptor(int force)
const port_cfg_t *ipv6_orport = NULL;
SMARTLIST_FOREACH_BEGIN(get_configured_ports(), const port_cfg_t *, p) {
if (p->type == CONN_TYPE_OR_LISTENER &&
- ! p->no_advertise &&
- ! p->bind_ipv4_only &&
+ ! p->server_cfg.no_advertise &&
+ ! p->server_cfg.bind_ipv4_only &&
tor_addr_family(&p->addr) == AF_INET6) {
if (! tor_addr_is_internal(&p->addr, 0)) {
ipv6_orport = p;
@@ -2024,6 +2020,41 @@ router_rebuild_descriptor(int force)
tor_assert(! routerinfo_incompatible_with_extrainfo(ri, ei, NULL, NULL));
}
+ *r = ri;
+ *e = ei;
+ return 0;
+}
+
+/** If <b>force</b> is true, or our descriptor is out-of-date, rebuild a fresh
+ * routerinfo, signed server descriptor, and extra-info document for this OR.
+ * Return 0 on success, -1 on temporary error.
+ */
+int
+router_rebuild_descriptor(int force)
+{
+ routerinfo_t *ri;
+ extrainfo_t *ei;
+ uint32_t addr;
+ const or_options_t *options = get_options();
+
+ if (desc_clean_since && !force)
+ return 0;
+
+ if (router_pick_published_address(options, &addr) < 0 ||
+ router_get_advertised_or_port(options) == 0) {
+ /* Stop trying to rebuild our descriptor every second. We'll
+ * learn that it's time to try again when ip_address_changed()
+ * marks it dirty. */
+ desc_clean_since = time(NULL);
+ return -1;
+ }
+
+ log_info(LD_OR, "Rebuilding relay descriptor%s", force ? " (forced)" : "");
+
+ if (router_build_fresh_descriptor(&ri, &ei) < 0) {
+ return -1;
+ }
+
routerinfo_free(desc_routerinfo);
desc_routerinfo = ri;
extrainfo_free(desc_extrainfo);
@@ -2424,7 +2455,7 @@ router_dump_router_to_string(routerinfo_t *router,
char kbuf[128];
base64_encode(kbuf, sizeof(kbuf),
(const char *)router->onion_curve25519_pkey->public_key,
- CURVE25519_PUBKEY_LEN);
+ CURVE25519_PUBKEY_LEN, BASE64_ENCODE_MULTILINE);
smartlist_add_asprintf(chunks, "ntor-onion-key %s", kbuf);
}
diff --git a/src/or/router.h b/src/or/router.h
index 8108ffb22f..73b43bc751 100644
--- a/src/or/router.h
+++ b/src/or/router.h
@@ -89,6 +89,7 @@ const uint8_t *router_get_my_id_digest(void);
int router_extrainfo_digest_is_me(const char *digest);
int router_is_me(const routerinfo_t *router);
int router_pick_published_address(const or_options_t *options, uint32_t *addr);
+int router_build_fresh_descriptor(routerinfo_t **r, extrainfo_t **e);
int router_rebuild_descriptor(int force);
char *router_dump_router_to_string(routerinfo_t *router,
crypto_pk_t *ident_key);
diff --git a/src/or/routerlist.c b/src/or/routerlist.c
index d3734238eb..fd096799de 100644
--- a/src/or/routerlist.c
+++ b/src/or/routerlist.c
@@ -37,7 +37,7 @@
#include "routerlist.h"
#include "routerparse.h"
#include "routerset.h"
-#include "../common/sandbox.h"
+#include "sandbox.h"
// #define DEBUG_ROUTERLIST
/****************************************************************************/
@@ -65,7 +65,7 @@ static int compute_weighted_bandwidths(const smartlist_t *sl,
bandwidth_weight_rule_t rule,
u64_dbl_t **bandwidths_out);
static const routerstatus_t *router_pick_directory_server_impl(
- dirinfo_type_t auth, int flags);
+ dirinfo_type_t auth, int flags, int *n_busy_out);
static const routerstatus_t *router_pick_trusteddirserver_impl(
const smartlist_t *sourcelist, dirinfo_type_t auth,
int flags, int *n_busy_out);
@@ -449,6 +449,19 @@ trusted_dirs_flush_certs_to_disk(void)
trusted_dir_servers_certs_changed = 0;
}
+static int
+compare_certs_by_pubdates(const void **_a, const void **_b)
+{
+ const authority_cert_t *cert1 = *_a, *cert2=*_b;
+
+ if (cert1->cache_info.published_on < cert2->cache_info.published_on)
+ return -1;
+ else if (cert1->cache_info.published_on > cert2->cache_info.published_on)
+ return 1;
+ else
+ return 0;
+}
+
/** Remove all expired v3 authority certificates that have been superseded for
* more than 48 hours or, if not expired, that were published more than 7 days
* before being superseded. (If the most recent cert was published more than 48
@@ -459,38 +472,44 @@ trusted_dirs_remove_old_certs(void)
{
time_t now = time(NULL);
#define DEAD_CERT_LIFETIME (2*24*60*60)
-#define OLD_CERT_LIFETIME (7*24*60*60)
+#define SUPERSEDED_CERT_LIFETIME (2*24*60*60)
if (!trusted_dir_certs)
return;
DIGESTMAP_FOREACH(trusted_dir_certs, key, cert_list_t *, cl) {
- authority_cert_t *newest = NULL;
- SMARTLIST_FOREACH(cl->certs, authority_cert_t *, cert,
- if (!newest || (cert->cache_info.published_on >
- newest->cache_info.published_on))
- newest = cert);
- if (newest) {
- const time_t newest_published = newest->cache_info.published_on;
- SMARTLIST_FOREACH_BEGIN(cl->certs, authority_cert_t *, cert) {
- int expired;
- time_t cert_published;
- if (newest == cert)
- continue;
- /* resolve spurious clang shallow analysis null pointer errors */
- tor_assert(cert);
- expired = now > cert->expires;
- cert_published = cert->cache_info.published_on;
- /* Store expired certs for 48 hours after a newer arrives;
+ /* Sort the list from first-published to last-published */
+ smartlist_sort(cl->certs, compare_certs_by_pubdates);
+
+ SMARTLIST_FOREACH_BEGIN(cl->certs, authority_cert_t *, cert) {
+ if (cert_sl_idx == smartlist_len(cl->certs) - 1) {
+ /* This is the most recently published cert. Keep it. */
+ continue;
+ }
+ authority_cert_t *next_cert = smartlist_get(cl->certs, cert_sl_idx+1);
+ const time_t next_cert_published = next_cert->cache_info.published_on;
+ if (next_cert_published > now) {
+ /* All later certs are published in the future. Keep everything
+ * we didn't discard. */
+ break;
+ }
+ int should_remove = 0;
+ if (cert->expires + DEAD_CERT_LIFETIME < now) {
+ /* Certificate has been expired for at least DEAD_CERT_LIFETIME.
+ * Remove it. */
+ should_remove = 1;
+ } else if (next_cert_published + SUPERSEDED_CERT_LIFETIME < now) {
+ /* Certificate has been superseded for OLD_CERT_LIFETIME.
+ * Remove it.
*/
- if (expired ?
- (newest_published + DEAD_CERT_LIFETIME < now) :
- (cert_published + OLD_CERT_LIFETIME < newest_published)) {
- SMARTLIST_DEL_CURRENT(cl->certs, cert);
- authority_cert_free(cert);
- trusted_dir_servers_certs_changed = 1;
- }
- } SMARTLIST_FOREACH_END(cert);
- }
+ should_remove = 1;
+ }
+ if (should_remove) {
+ SMARTLIST_DEL_CURRENT_KEEPORDER(cl->certs, cert);
+ authority_cert_free(cert);
+ trusted_dir_servers_certs_changed = 1;
+ }
+ } SMARTLIST_FOREACH_END(cert);
+
} DIGESTMAP_FOREACH_END;
#undef DEAD_CERT_LIFETIME
#undef OLD_CERT_LIFETIME
@@ -1288,22 +1307,32 @@ router_get_fallback_dir_servers(void)
const routerstatus_t *
router_pick_directory_server(dirinfo_type_t type, int flags)
{
+ int busy = 0;
const routerstatus_t *choice;
if (!routerlist)
return NULL;
- choice = router_pick_directory_server_impl(type, flags);
+ choice = router_pick_directory_server_impl(type, flags, &busy);
if (choice || !(flags & PDS_RETRY_IF_NO_SERVERS))
return choice;
+ if (busy) {
+ /* If the reason that we got no server is that servers are "busy",
+ * we must be excluding good servers because we already have serverdesc
+ * fetches with them. Do not mark down servers up because of this. */
+ tor_assert((flags & (PDS_NO_EXISTING_SERVERDESC_FETCH|
+ PDS_NO_EXISTING_MICRODESC_FETCH)));
+ return NULL;
+ }
+
log_info(LD_DIR,
"No reachable router entries for dirservers. "
"Trying them all again.");
/* mark all authdirservers as up again */
mark_all_dirservers_up(fallback_dir_servers);
/* try again */
- choice = router_pick_directory_server_impl(type, flags);
+ choice = router_pick_directory_server_impl(type, flags, NULL);
return choice;
}
@@ -1413,11 +1442,15 @@ router_pick_dirserver_generic(smartlist_t *sourcelist,
#define DIR_503_TIMEOUT (60*60)
/** Pick a random running valid directory server/mirror from our
- * routerlist. Arguments are as for router_pick_directory_server(), except
- * that RETRY_IF_NO_SERVERS is ignored.
+ * routerlist. Arguments are as for router_pick_directory_server(), except:
+ *
+ * If <b>n_busy_out</b> is provided, set *<b>n_busy_out</b> to the number of
+ * directories that we excluded for no other reason than
+ * PDS_NO_EXISTING_SERVERDESC_FETCH or PDS_NO_EXISTING_MICRODESC_FETCH.
*/
static const routerstatus_t *
-router_pick_directory_server_impl(dirinfo_type_t type, int flags)
+router_pick_directory_server_impl(dirinfo_type_t type, int flags,
+ int *n_busy_out)
{
const or_options_t *options = get_options();
const node_t *result;
@@ -1426,10 +1459,12 @@ router_pick_directory_server_impl(dirinfo_type_t type, int flags)
smartlist_t *overloaded_direct, *overloaded_tunnel;
time_t now = time(NULL);
const networkstatus_t *consensus = networkstatus_get_latest_consensus();
- int requireother = ! (flags & PDS_ALLOW_SELF);
- int fascistfirewall = ! (flags & PDS_IGNORE_FASCISTFIREWALL);
- int for_guard = (flags & PDS_FOR_GUARD);
- int try_excluding = 1, n_excluded = 0;
+ const int requireother = ! (flags & PDS_ALLOW_SELF);
+ const int fascistfirewall = ! (flags & PDS_IGNORE_FASCISTFIREWALL);
+ const int no_serverdesc_fetching =(flags & PDS_NO_EXISTING_SERVERDESC_FETCH);
+ const int no_microdesc_fetching = (flags & PDS_NO_EXISTING_MICRODESC_FETCH);
+ const int for_guard = (flags & PDS_FOR_GUARD);
+ int try_excluding = 1, n_excluded = 0, n_busy = 0;
if (!consensus)
return NULL;
@@ -1463,9 +1498,6 @@ router_pick_directory_server_impl(dirinfo_type_t type, int flags)
if ((type & EXTRAINFO_DIRINFO) &&
!router_supports_extrainfo(node->identity, is_trusted_extrainfo))
continue;
- if ((type & MICRODESC_DIRINFO) && !is_trusted &&
- !node->rs->version_supports_microdesc_cache)
- continue;
if (for_guard && node->using_as_guard)
continue; /* Don't make the same node a guard twice. */
if (try_excluding &&
@@ -1476,7 +1508,24 @@ router_pick_directory_server_impl(dirinfo_type_t type, int flags)
}
/* XXXX IP6 proposal 118 */
- tor_addr_from_ipv4h(&addr, node->rs->addr);
+ tor_addr_from_ipv4h(&addr, status->addr);
+
+ if (no_serverdesc_fetching && (
+ connection_get_by_type_addr_port_purpose(
+ CONN_TYPE_DIR, &addr, status->dir_port, DIR_PURPOSE_FETCH_SERVERDESC)
+ || connection_get_by_type_addr_port_purpose(
+ CONN_TYPE_DIR, &addr, status->dir_port, DIR_PURPOSE_FETCH_EXTRAINFO)
+ )) {
+ ++n_busy;
+ continue;
+ }
+
+ if (no_microdesc_fetching && connection_get_by_type_addr_port_purpose(
+ CONN_TYPE_DIR, &addr, status->dir_port, DIR_PURPOSE_FETCH_MICRODESC)
+ ) {
+ ++n_busy;
+ continue;
+ }
is_overloaded = status->last_dir_503_at + DIR_503_TIMEOUT > now;
@@ -1516,14 +1565,19 @@ router_pick_directory_server_impl(dirinfo_type_t type, int flags)
smartlist_free(overloaded_direct);
smartlist_free(overloaded_tunnel);
- if (result == NULL && try_excluding && !options->StrictNodes && n_excluded) {
+ if (result == NULL && try_excluding && !options->StrictNodes && n_excluded
+ && !n_busy) {
/* If we got no result, and we are excluding nodes, and StrictNodes is
* not set, try again without excluding nodes. */
try_excluding = 0;
n_excluded = 0;
+ n_busy = 0;
goto retry_without_exclude;
}
+ if (n_busy_out)
+ *n_busy_out = n_busy;
+
return result ? result->rs : NULL;
}
@@ -1737,7 +1791,7 @@ routerlist_add_node_and_family(smartlist_t *sl, const routerinfo_t *router)
/** Add every suitable node from our nodelist to <b>sl</b>, so that
* we can pick a node for a circuit.
*/
-static void
+void
router_add_running_nodes_to_smartlist(smartlist_t *sl, int allow_invalid,
int need_uptime, int need_capacity,
int need_guard, int need_desc)
@@ -1965,6 +2019,7 @@ compute_weighted_bandwidths(const smartlist_t *sl,
double Wg = -1, Wm = -1, We = -1, Wd = -1;
double Wgb = -1, Wmb = -1, Web = -1, Wdb = -1;
uint64_t weighted_bw = 0;
+ guardfraction_bandwidth_t guardfraction_bw;
u64_dbl_t *bandwidths;
/* Can't choose exit and guard at same time */
@@ -2054,6 +2109,8 @@ compute_weighted_bandwidths(const smartlist_t *sl,
SMARTLIST_FOREACH_BEGIN(sl, const node_t *, node) {
int is_exit = 0, is_guard = 0, is_dir = 0, this_bw = 0;
double weight = 1;
+ double weight_without_guard_flag = 0; /* Used for guardfraction */
+ double final_weight = 0;
is_exit = node->is_exit && ! node->is_bad_exit;
is_guard = node->is_possible_guard;
is_dir = node_is_dir(node);
@@ -2081,8 +2138,10 @@ compute_weighted_bandwidths(const smartlist_t *sl,
if (is_guard && is_exit) {
weight = (is_dir ? Wdb*Wd : Wd);
+ weight_without_guard_flag = (is_dir ? Web*We : We);
} else if (is_guard) {
weight = (is_dir ? Wgb*Wg : Wg);
+ weight_without_guard_flag = (is_dir ? Wmb*Wm : Wm);
} else if (is_exit) {
weight = (is_dir ? Web*We : We);
} else { // middle
@@ -2094,8 +2153,43 @@ compute_weighted_bandwidths(const smartlist_t *sl,
this_bw = 0;
if (weight < 0.0)
weight = 0.0;
+ if (weight_without_guard_flag < 0.0)
+ weight_without_guard_flag = 0.0;
+
+ /* If guardfraction information is available in the consensus, we
+ * want to calculate this router's bandwidth according to its
+ * guardfraction. Quoting from proposal236:
+ *
+ * Let Wpf denote the weight from the 'bandwidth-weights' line a
+ * client would apply to N for position p if it had the guard
+ * flag, Wpn the weight if it did not have the guard flag, and B the
+ * measured bandwidth of N in the consensus. Then instead of choosing
+ * N for position p proportionally to Wpf*B or Wpn*B, clients should
+ * choose N proportionally to F*Wpf*B + (1-F)*Wpn*B.
+ */
+ if (node->rs && node->rs->has_guardfraction && rule != WEIGHT_FOR_GUARD) {
+ /* XXX The assert should actually check for is_guard. However,
+ * that crashes dirauths because of #13297. This should be
+ * equivalent: */
+ tor_assert(node->rs->is_possible_guard);
+
+ guard_get_guardfraction_bandwidth(&guardfraction_bw,
+ this_bw,
+ node->rs->guardfraction_percentage);
+
+ /* Calculate final_weight = F*Wpf*B + (1-F)*Wpn*B */
+ final_weight =
+ guardfraction_bw.guard_bw * weight +
+ guardfraction_bw.non_guard_bw * weight_without_guard_flag;
+
+ log_debug(LD_GENERAL, "%s: Guardfraction weight %f instead of %f (%s)",
+ node->rs->nickname, final_weight, weight*this_bw,
+ bandwidth_weight_rule_to_string(rule));
+ } else { /* no guardfraction information. calculate the weight normally. */
+ final_weight = weight*this_bw;
+ }
- bandwidths[node_sl_idx].dbl = weight*this_bw + 0.5;
+ bandwidths[node_sl_idx].dbl = final_weight + 0.5;
} SMARTLIST_FOREACH_END(node);
log_debug(LD_CIRC, "Generated weighted bandwidths for rule %s based "
@@ -2753,7 +2847,7 @@ routerlist_insert(routerlist_t *rl, routerinfo_t *ri)
* corresponding router in rl-\>routers or rl-\>old_routers. Return the status
* of inserting <b>ei</b>. Free <b>ei</b> if it isn't inserted. */
MOCK_IMPL(STATIC was_router_added_t,
-extrainfo_insert,(routerlist_t *rl, extrainfo_t *ei))
+extrainfo_insert,(routerlist_t *rl, extrainfo_t *ei, int warn_if_incompatible))
{
was_router_added_t r;
const char *compatibility_error_msg;
@@ -2762,6 +2856,7 @@ extrainfo_insert,(routerlist_t *rl, extrainfo_t *ei))
signed_descriptor_t *sd =
sdmap_get(rl->desc_by_eid_map, ei->cache_info.signed_descriptor_digest);
extrainfo_t *ei_tmp;
+ const int severity = warn_if_incompatible ? LOG_WARN : LOG_INFO;
{
extrainfo_t *ei_generated = router_get_my_extrainfo();
@@ -2773,13 +2868,37 @@ extrainfo_insert,(routerlist_t *rl, extrainfo_t *ei))
r = ROUTER_NOT_IN_CONSENSUS;
goto done;
}
+ if (! sd) {
+ /* The extrainfo router doesn't have a known routerdesc to attach it to.
+ * This just won't work. */;
+ static ratelim_t no_sd_ratelim = RATELIM_INIT(1800);
+ r = ROUTER_BAD_EI;
+ log_fn_ratelim(&no_sd_ratelim, severity, LD_BUG,
+ "No entry found in extrainfo map.");
+ goto done;
+ }
+ if (tor_memneq(ei->cache_info.signed_descriptor_digest,
+ sd->extra_info_digest, DIGEST_LEN)) {
+ static ratelim_t digest_mismatch_ratelim = RATELIM_INIT(1800);
+ /* The sd we got from the map doesn't match the digest we used to look
+ * it up. This makes no sense. */
+ r = ROUTER_BAD_EI;
+ log_fn_ratelim(&digest_mismatch_ratelim, severity, LD_BUG,
+ "Mismatch in digest in extrainfo map.");
+ goto done;
+ }
if (routerinfo_incompatible_with_extrainfo(ri, ei, sd,
&compatibility_error_msg)) {
+ char d1[HEX_DIGEST_LEN+1], d2[HEX_DIGEST_LEN+1];
r = (ri->cache_info.extrainfo_is_bogus) ?
ROUTER_BAD_EI : ROUTER_NOT_IN_CONSENSUS;
- log_warn(LD_DIR,"router info incompatible with extra info (reason: %s)",
- compatibility_error_msg);
+ base16_encode(d1, sizeof(d1), ri->cache_info.identity_digest, DIGEST_LEN);
+ base16_encode(d2, sizeof(d2), ei->cache_info.identity_digest, DIGEST_LEN);
+
+ log_fn(severity,LD_DIR,
+ "router info incompatible with extra info (ri id: %s, ei id %s, "
+ "reason: %s)", d1, d2, compatibility_error_msg);
goto done;
}
@@ -3325,7 +3444,7 @@ router_add_extrainfo_to_routerlist(extrainfo_t *ei, const char **msg,
if (msg) *msg = NULL;
/*XXXX023 Do something with msg */
- inserted = extrainfo_insert(router_get_routerlist(), ei);
+ inserted = extrainfo_insert(router_get_routerlist(), ei, !from_cache);
if (WRA_WAS_ADDED(inserted) && !from_cache)
signed_desc_append_to_journal(&ei->cache_info,
@@ -4186,51 +4305,57 @@ list_pending_fpsk_downloads(fp_pair_map_t *result)
* range.) If <b>source</b> is given, download from <b>source</b>;
* otherwise, download from an appropriate random directory server.
*/
-static void
-initiate_descriptor_downloads(const routerstatus_t *source,
- int purpose,
- smartlist_t *digests,
- int lo, int hi, int pds_flags)
+MOCK_IMPL(STATIC void, initiate_descriptor_downloads,
+ (const routerstatus_t *source, int purpose, smartlist_t *digests,
+ int lo, int hi, int pds_flags))
{
- int i, n = hi-lo;
char *resource, *cp;
- size_t r_len;
-
- int digest_len = DIGEST_LEN, enc_digest_len = HEX_DIGEST_LEN;
- char sep = '+';
- int b64_256 = 0;
+ int digest_len, enc_digest_len;
+ const char *sep;
+ int b64_256;
+ smartlist_t *tmp;
if (purpose == DIR_PURPOSE_FETCH_MICRODESC) {
/* Microdescriptors are downloaded by "-"-separated base64-encoded
* 256-bit digests. */
digest_len = DIGEST256_LEN;
- enc_digest_len = BASE64_DIGEST256_LEN;
- sep = '-';
+ enc_digest_len = BASE64_DIGEST256_LEN + 1;
+ sep = "-";
b64_256 = 1;
+ } else {
+ digest_len = DIGEST_LEN;
+ enc_digest_len = HEX_DIGEST_LEN + 1;
+ sep = "+";
+ b64_256 = 0;
}
- if (n <= 0)
- return;
if (lo < 0)
lo = 0;
if (hi > smartlist_len(digests))
hi = smartlist_len(digests);
- r_len = 8 + (enc_digest_len+1)*n;
- cp = resource = tor_malloc(r_len);
- memcpy(cp, "d/", 2);
- cp += 2;
- for (i = lo; i < hi; ++i) {
+ if (hi-lo <= 0)
+ return;
+
+ tmp = smartlist_new();
+
+ for (; lo < hi; ++lo) {
+ cp = tor_malloc(enc_digest_len);
if (b64_256) {
- digest256_to_base64(cp, smartlist_get(digests, i));
+ digest256_to_base64(cp, smartlist_get(digests, lo));
} else {
- base16_encode(cp, r_len-(cp-resource),
- smartlist_get(digests,i), digest_len);
+ base16_encode(cp, enc_digest_len, smartlist_get(digests, lo),
+ digest_len);
}
- cp += enc_digest_len;
- *cp++ = sep;
+ smartlist_add(tmp, cp);
}
- memcpy(cp-1, ".z", 3);
+
+ cp = smartlist_join_strings(tmp, sep, 0, NULL);
+ tor_asprintf(&resource, "d/%s.z", cp);
+
+ SMARTLIST_FOREACH(tmp, char *, cp1, tor_free(cp1));
+ smartlist_free(tmp);
+ tor_free(cp);
if (source) {
/* We know which authority we want. */
@@ -4245,14 +4370,28 @@ initiate_descriptor_downloads(const routerstatus_t *source,
tor_free(resource);
}
-/** Max amount of hashes to download per request.
- * Since squid does not like URLs >= 4096 bytes we limit it to 96.
- * 4096 - strlen(http://255.255.255.255/tor/server/d/.z) == 4058
- * 4058/41 (40 for the hash and 1 for the + that separates them) => 98
- * So use 96 because it's a nice number.
+/** Return the max number of hashes to put in a URL for a given request.
*/
-#define MAX_DL_PER_REQUEST 96
-#define MAX_MICRODESC_DL_PER_REQUEST 92
+static int
+max_dl_per_request(const or_options_t *options, int purpose)
+{
+ /* Since squid does not like URLs >= 4096 bytes we limit it to 96.
+ * 4096 - strlen(http://255.255.255.255/tor/server/d/.z) == 4058
+ * 4058/41 (40 for the hash and 1 for the + that separates them) => 98
+ * So use 96 because it's a nice number.
+ */
+ int max = 96;
+ if (purpose == DIR_PURPOSE_FETCH_MICRODESC) {
+ max = 92;
+ }
+ /* If we're going to tunnel our connections, we can ask for a lot more
+ * in a request. */
+ if (!directory_fetches_from_authorities(options)) {
+ max = 500;
+ }
+ return max;
+}
+
/** Don't split our requests so finely that we are requesting fewer than
* this number per server. */
#define MIN_DL_PER_REQUEST 4
@@ -4274,92 +4413,89 @@ launch_descriptor_downloads(int purpose,
smartlist_t *downloadable,
const routerstatus_t *source, time_t now)
{
- int should_delay = 0, n_downloadable;
const or_options_t *options = get_options();
const char *descname;
+ const int fetch_microdesc = (purpose == DIR_PURPOSE_FETCH_MICRODESC);
+ int n_downloadable = smartlist_len(downloadable);
- tor_assert(purpose == DIR_PURPOSE_FETCH_SERVERDESC ||
- purpose == DIR_PURPOSE_FETCH_MICRODESC);
+ int i, n_per_request, max_dl_per_req;
+ const char *req_plural = "", *rtr_plural = "";
+ int pds_flags = PDS_RETRY_IF_NO_SERVERS;
- descname = (purpose == DIR_PURPOSE_FETCH_SERVERDESC) ?
- "routerdesc" : "microdesc";
+ tor_assert(fetch_microdesc || purpose == DIR_PURPOSE_FETCH_SERVERDESC);
+ descname = fetch_microdesc ? "microdesc" : "routerdesc";
+
+ if (!n_downloadable)
+ return;
- n_downloadable = smartlist_len(downloadable);
if (!directory_fetches_dir_info_early(options)) {
if (n_downloadable >= MAX_DL_TO_DELAY) {
log_debug(LD_DIR,
"There are enough downloadable %ss to launch requests.",
descname);
- should_delay = 0;
} else {
- should_delay = (last_descriptor_download_attempted +
- options->TestingClientMaxIntervalWithoutRequest) > now;
- if (!should_delay && n_downloadable) {
- if (last_descriptor_download_attempted) {
- log_info(LD_DIR,
- "There are not many downloadable %ss, but we've "
- "been waiting long enough (%d seconds). Downloading.",
- descname,
- (int)(now-last_descriptor_download_attempted));
- } else {
- log_info(LD_DIR,
- "There are not many downloadable %ss, but we haven't "
- "tried downloading descriptors recently. Downloading.",
- descname);
- }
+
+ /* should delay */
+ if ((last_descriptor_download_attempted +
+ options->TestingClientMaxIntervalWithoutRequest) > now)
+ return;
+
+ if (last_descriptor_download_attempted) {
+ log_info(LD_DIR,
+ "There are not many downloadable %ss, but we've "
+ "been waiting long enough (%d seconds). Downloading.",
+ descname,
+ (int)(now-last_descriptor_download_attempted));
+ } else {
+ log_info(LD_DIR,
+ "There are not many downloadable %ss, but we haven't "
+ "tried downloading descriptors recently. Downloading.",
+ descname);
}
}
}
- if (! should_delay && n_downloadable) {
- int i, n_per_request;
- const char *req_plural = "", *rtr_plural = "";
- int pds_flags = PDS_RETRY_IF_NO_SERVERS;
- if (! authdir_mode_any_nonhidserv(options)) {
- /* If we wind up going to the authorities, we want to only open one
- * connection to each authority at a time, so that we don't overload
- * them. We do this by setting PDS_NO_EXISTING_SERVERDESC_FETCH
- * regardless of whether we're a cache or not; it gets ignored if we're
- * not calling router_pick_trusteddirserver.
- *
- * Setting this flag can make initiate_descriptor_downloads() ignore
- * requests. We need to make sure that we do in fact call
- * update_router_descriptor_downloads() later on, once the connections
- * have succeeded or failed.
- */
- pds_flags |= (purpose == DIR_PURPOSE_FETCH_MICRODESC) ?
- PDS_NO_EXISTING_MICRODESC_FETCH :
- PDS_NO_EXISTING_SERVERDESC_FETCH;
- }
+ if (!authdir_mode_any_nonhidserv(options)) {
+ /* If we wind up going to the authorities, we want to only open one
+ * connection to each authority at a time, so that we don't overload
+ * them. We do this by setting PDS_NO_EXISTING_SERVERDESC_FETCH
+ * regardless of whether we're a cache or not.
+ *
+ * Setting this flag can make initiate_descriptor_downloads() ignore
+ * requests. We need to make sure that we do in fact call
+ * update_router_descriptor_downloads() later on, once the connections
+ * have succeeded or failed.
+ */
+ pds_flags |= fetch_microdesc ?
+ PDS_NO_EXISTING_MICRODESC_FETCH :
+ PDS_NO_EXISTING_SERVERDESC_FETCH;
+ }
- n_per_request = CEIL_DIV(n_downloadable, MIN_REQUESTS);
- if (purpose == DIR_PURPOSE_FETCH_MICRODESC) {
- if (n_per_request > MAX_MICRODESC_DL_PER_REQUEST)
- n_per_request = MAX_MICRODESC_DL_PER_REQUEST;
- } else {
- if (n_per_request > MAX_DL_PER_REQUEST)
- n_per_request = MAX_DL_PER_REQUEST;
- }
- if (n_per_request < MIN_DL_PER_REQUEST)
- n_per_request = MIN_DL_PER_REQUEST;
-
- if (n_downloadable > n_per_request)
- req_plural = rtr_plural = "s";
- else if (n_downloadable > 1)
- rtr_plural = "s";
-
- log_info(LD_DIR,
- "Launching %d request%s for %d %s%s, %d at a time",
- CEIL_DIV(n_downloadable, n_per_request), req_plural,
- n_downloadable, descname, rtr_plural, n_per_request);
- smartlist_sort_digests(downloadable);
- for (i=0; i < n_downloadable; i += n_per_request) {
- initiate_descriptor_downloads(source, purpose,
- downloadable, i, i+n_per_request,
- pds_flags);
- }
- last_descriptor_download_attempted = now;
+ n_per_request = CEIL_DIV(n_downloadable, MIN_REQUESTS);
+ max_dl_per_req = max_dl_per_request(options, purpose);
+
+ if (n_per_request > max_dl_per_req)
+ n_per_request = max_dl_per_req;
+
+ if (n_per_request < MIN_DL_PER_REQUEST)
+ n_per_request = MIN_DL_PER_REQUEST;
+
+ if (n_downloadable > n_per_request)
+ req_plural = rtr_plural = "s";
+ else if (n_downloadable > 1)
+ rtr_plural = "s";
+
+ log_info(LD_DIR,
+ "Launching %d request%s for %d %s%s, %d at a time",
+ CEIL_DIV(n_downloadable, n_per_request), req_plural,
+ n_downloadable, descname, rtr_plural, n_per_request);
+ smartlist_sort_digests(downloadable);
+ for (i=0; i < n_downloadable; i += n_per_request) {
+ initiate_descriptor_downloads(source, purpose,
+ downloadable, i, i+n_per_request,
+ pds_flags);
}
+ last_descriptor_download_attempted = now;
}
/** For any descriptor that we want that's currently listed in
@@ -4539,8 +4675,8 @@ update_extrainfo_downloads(time_t now)
routerlist_t *rl;
smartlist_t *wanted;
digestmap_t *pending;
- int old_routers, i;
- int n_no_ei = 0, n_pending = 0, n_have = 0, n_delay = 0;
+ int old_routers, i, max_dl_per_req;
+ int n_no_ei = 0, n_pending = 0, n_have = 0, n_delay = 0, n_bogus[2] = {0,0};
if (! options->DownloadExtraInfo)
return;
if (should_delay_dir_fetches(options, NULL))
@@ -4585,19 +4721,54 @@ update_extrainfo_downloads(time_t now)
++n_pending;
continue;
}
+
+ const signed_descriptor_t *sd2 = router_get_by_extrainfo_digest(d);
+ if (sd2 != sd) {
+ if (sd2 != NULL) {
+ char d1[HEX_DIGEST_LEN+1], d2[HEX_DIGEST_LEN+1];
+ char d3[HEX_DIGEST_LEN+1], d4[HEX_DIGEST_LEN+1];
+ base16_encode(d1, sizeof(d1), sd->identity_digest, DIGEST_LEN);
+ base16_encode(d2, sizeof(d2), sd2->identity_digest, DIGEST_LEN);
+ base16_encode(d3, sizeof(d3), d, DIGEST_LEN);
+ base16_encode(d4, sizeof(d3), sd2->extra_info_digest, DIGEST_LEN);
+
+ log_info(LD_DIR, "Found an entry in %s with mismatched "
+ "router_get_by_extrainfo_digest() value. This has ID %s "
+ "but the entry in the map has ID %s. This has EI digest "
+ "%s and the entry in the map has EI digest %s.",
+ old_routers?"old_routers":"routers",
+ d1, d2, d3, d4);
+ } else {
+ char d1[HEX_DIGEST_LEN+1], d2[HEX_DIGEST_LEN+1];
+ base16_encode(d1, sizeof(d1), sd->identity_digest, DIGEST_LEN);
+ base16_encode(d2, sizeof(d2), d, DIGEST_LEN);
+
+ log_info(LD_DIR, "Found an entry in %s with NULL "
+ "router_get_by_extrainfo_digest() value. This has ID %s "
+ "and EI digest %s.",
+ old_routers?"old_routers":"routers",
+ d1, d2);
+ }
+ ++n_bogus[old_routers];
+ continue;
+ }
smartlist_add(wanted, d);
}
}
digestmap_free(pending, NULL);
log_info(LD_DIR, "Extrainfo download status: %d router with no ei, %d "
- "with present ei, %d delaying, %d pending, %d downloadable.",
- n_no_ei, n_have, n_delay, n_pending, smartlist_len(wanted));
+ "with present ei, %d delaying, %d pending, %d downloadable, %d "
+ "bogus in routers, %d bogus in old_routers",
+ n_no_ei, n_have, n_delay, n_pending, smartlist_len(wanted),
+ n_bogus[0], n_bogus[1]);
smartlist_shuffle(wanted);
- for (i = 0; i < smartlist_len(wanted); i += MAX_DL_PER_REQUEST) {
+
+ max_dl_per_req = max_dl_per_request(options, DIR_PURPOSE_FETCH_EXTRAINFO);
+ for (i = 0; i < smartlist_len(wanted); i += max_dl_per_req) {
initiate_descriptor_downloads(NULL, DIR_PURPOSE_FETCH_EXTRAINFO,
- wanted, i, i + MAX_DL_PER_REQUEST,
+ wanted, i, i+max_dl_per_req,
PDS_RETRY_IF_NO_SERVERS|PDS_NO_EXISTING_SERVERDESC_FETCH);
}
diff --git a/src/or/routerlist.h b/src/or/routerlist.h
index d7e15db87e..78c3fbb880 100644
--- a/src/or/routerlist.h
+++ b/src/or/routerlist.h
@@ -58,6 +58,10 @@ const routerstatus_t *router_pick_fallback_dirserver(dirinfo_type_t type,
int router_get_my_share_of_directory_requests(double *v3_share_out);
void router_reset_status_download_failures(void);
int routers_have_same_or_addrs(const routerinfo_t *r1, const routerinfo_t *r2);
+void router_add_running_nodes_to_smartlist(smartlist_t *sl, int allow_invalid,
+ int need_uptime, int need_capacity,
+ int need_guard, int need_desc);
+
const routerinfo_t *routerlist_find_my_routerinfo(void);
uint32_t router_get_advertised_bandwidth(const routerinfo_t *router);
uint32_t router_get_advertised_bandwidth_capped(const routerinfo_t *router);
@@ -227,7 +231,11 @@ STATIC void scale_array_elements_to_u64(u64_dbl_t *entries, int n_entries,
MOCK_DECL(int, router_descriptor_is_older_than, (const routerinfo_t *router,
int seconds));
MOCK_DECL(STATIC was_router_added_t, extrainfo_insert,
- (routerlist_t *rl, extrainfo_t *ei));
+ (routerlist_t *rl, extrainfo_t *ei, int warn_if_incompatible));
+
+MOCK_DECL(STATIC void, initiate_descriptor_downloads,
+ (const routerstatus_t *source, int purpose, smartlist_t *digests,
+ int lo, int hi, int pds_flags));
#endif
diff --git a/src/or/routerparse.c b/src/or/routerparse.c
index a2bc8fbb93..f15aeeb0cf 100644
--- a/src/or/routerparse.c
+++ b/src/or/routerparse.c
@@ -9,6 +9,8 @@
* \brief Code to parse and validate router descriptors and directories.
**/
+#define ROUTERPARSE_PRIVATE
+
#include "or.h"
#include "config.h"
#include "circuitstats.h"
@@ -23,6 +25,7 @@
#include "networkstatus.h"
#include "rephist.h"
#include "routerparse.h"
+#include "entrynodes.h"
#undef log
#include <math.h>
@@ -131,6 +134,7 @@ typedef enum {
K_CONSENSUS_METHOD,
K_LEGACY_DIR_KEY,
K_DIRECTORY_FOOTER,
+ K_PACKAGE,
A_PURPOSE,
A_LAST_LISTED,
@@ -420,6 +424,7 @@ static token_rule_t networkstatus_token_table[] = {
T1("known-flags", K_KNOWN_FLAGS, ARGS, NO_OBJ ),
T01("params", K_PARAMS, ARGS, NO_OBJ ),
T( "fingerprint", K_FINGERPRINT, CONCAT_ARGS, NO_OBJ ),
+ T0N("package", K_PACKAGE, CONCAT_ARGS, NO_OBJ ),
CERTIFICATE_MEMBERS
@@ -659,7 +664,8 @@ router_get_dirobj_signature(const char *digest,
goto truncated;
i = strlen(buf);
- if (base64_encode(buf+i, buf_len-i, signature, siglen) < 0) {
+ if (base64_encode(buf+i, buf_len-i, signature, siglen,
+ BASE64_ENCODE_MULTILINE) < 0) {
log_warn(LD_BUG,"couldn't base64-encode signature");
goto err;
}
@@ -1792,6 +1798,63 @@ find_start_of_next_routerstatus(const char *s)
return eos;
}
+/** Parse the GuardFraction string from a consensus or vote.
+ *
+ * If <b>vote</b> or <b>vote_rs</b> are set the document getting
+ * parsed is a vote routerstatus. Otherwise it's a consensus. This is
+ * the same semantic as in routerstatus_parse_entry_from_string(). */
+STATIC int
+routerstatus_parse_guardfraction(const char *guardfraction_str,
+ networkstatus_t *vote,
+ vote_routerstatus_t *vote_rs,
+ routerstatus_t *rs)
+{
+ int ok;
+ const char *end_of_header = NULL;
+ int is_consensus = !vote_rs;
+ uint32_t guardfraction;
+
+ tor_assert(bool_eq(vote, vote_rs));
+
+ /* If this info comes from a consensus, but we should't apply
+ guardfraction, just exit. */
+ if (is_consensus && !should_apply_guardfraction(NULL)) {
+ return 0;
+ }
+
+ end_of_header = strchr(guardfraction_str, '=');
+ if (!end_of_header) {
+ return -1;
+ }
+
+ guardfraction = (uint32_t)tor_parse_ulong(end_of_header+1,
+ 10, 0, 100, &ok, NULL);
+ if (!ok) {
+ log_warn(LD_DIR, "Invalid GuardFraction %s", escaped(guardfraction_str));
+ return -1;
+ }
+
+ log_debug(LD_GENERAL, "[*] Parsed %s guardfraction '%s' for '%s'.",
+ is_consensus ? "consensus" : "vote",
+ guardfraction_str, rs->nickname);
+
+ if (!is_consensus) { /* We are parsing a vote */
+ vote_rs->status.guardfraction_percentage = guardfraction;
+ vote_rs->status.has_guardfraction = 1;
+ } else {
+ /* We are parsing a consensus. Only apply guardfraction to guards. */
+ if (rs->is_possible_guard) {
+ rs->guardfraction_percentage = guardfraction;
+ rs->has_guardfraction = 1;
+ } else {
+ log_warn(LD_BUG, "Got GuardFraction for non-guard %s. "
+ "This is not supposed to happen. Not applying. ", rs->nickname);
+ }
+ }
+
+ return 0;
+}
+
/** Given a string at *<b>s</b>, containing a routerstatus object, and an
* empty smartlist at <b>tokens</b>, parse and return the first router status
* object in the string, and advance *<b>s</b> to just after the end of the
@@ -1953,10 +2016,7 @@ routerstatus_parse_entry_from_string(memarea_t *area,
tor_assert(tok->n_args == 1);
rs->version_known = 1;
if (strcmpstart(tok->args[0], "Tor ")) {
- rs->version_supports_microdesc_cache = 1;
} else {
- rs->version_supports_microdesc_cache =
- tor_version_supports_microdescriptors(tok->args[0]);
rs->version_supports_extend2_cells =
tor_version_as_new_as(tok->args[0], "0.2.4.8-alpha");
}
@@ -1994,6 +2054,11 @@ routerstatus_parse_entry_from_string(memarea_t *area,
vote->has_measured_bws = 1;
} else if (!strcmpstart(tok->args[i], "Unmeasured=1")) {
rs->bw_is_unmeasured = 1;
+ } else if (!strcmpstart(tok->args[i], "GuardFraction=")) {
+ if (routerstatus_parse_guardfraction(tok->args[i],
+ vote, vote_rs, rs) < 0) {
+ goto err;
+ }
}
}
}
@@ -2626,6 +2691,16 @@ networkstatus_parse_vote_from_string(const char *s, const char **eos_out,
ns->server_versions = tor_strdup(tok->args[0]);
}
+ {
+ smartlist_t *package_lst = find_all_by_keyword(tokens, K_PACKAGE);
+ ns->package_lines = smartlist_new();
+ if (package_lst) {
+ SMARTLIST_FOREACH(package_lst, directory_token_t *, t,
+ smartlist_add(ns->package_lines, tor_strdup(t->args[0])));
+ }
+ smartlist_free(package_lst);
+ }
+
tok = find_by_keyword(tokens, K_KNOWN_FLAGS);
ns->known_flags = smartlist_new();
inorder = 1;
@@ -3286,7 +3361,9 @@ router_parse_addr_policy_item_from_string,(const char *s, int assume_action))
{
directory_token_t *tok = NULL;
const char *cp, *eos;
- /* Longest possible policy is "accept ffff:ffff:..255/ffff:...255:0-65535".
+ /* Longest possible policy is
+ * "accept6 ffff:ffff:..255/ffff:...255:10000-65535",
+ * which contains 2 max-length IPv6 addresses, plus 21 characters.
* But note that there can be an arbitrary amount of space between the
* accept and the address:mask/port element. */
char line[TOR_ADDR_BUF_LEN*2 + 32];
@@ -4186,14 +4263,6 @@ microdescs_parse_from_string(const char *s, const char *eos,
return result;
}
-/** Return true iff this Tor version can answer directory questions
- * about microdescriptors. */
-int
-tor_version_supports_microdescriptors(const char *platform)
-{
- return tor_version_as_new_as(platform, "0.2.3.1-alpha");
-}
-
/** Parse the Tor version of the platform string <b>platform</b>,
* and compare it to the version in <b>cutoff</b>. Return 1 if
* the router is at least as new as the cutoff, else return 0.
@@ -4506,8 +4575,7 @@ rend_parse_v2_service_descriptor(rend_service_descriptor_t **parsed_out,
tok = find_by_keyword(tokens, R_RENDEZVOUS_SERVICE_DESCRIPTOR);
tor_assert(tok == smartlist_get(tokens, 0));
tor_assert(tok->n_args == 1);
- if (strlen(tok->args[0]) != REND_DESC_ID_V2_LEN_BASE32 ||
- strspn(tok->args[0], BASE32_CHARS) != REND_DESC_ID_V2_LEN_BASE32) {
+ if (!rend_valid_descriptor_id(tok->args[0])) {
log_warn(LD_REND, "Invalid descriptor ID: '%s'", tok->args[0]);
goto err;
}
@@ -4743,7 +4811,7 @@ rend_parse_introduction_points(rend_service_descriptor_t *parsed,
size_t intro_points_encoded_size)
{
const char *current_ipo, *end_of_intro_points;
- smartlist_t *tokens;
+ smartlist_t *tokens = NULL;
directory_token_t *tok;
rend_intro_point_t *intro;
extend_info_t *info;
@@ -4752,8 +4820,10 @@ rend_parse_introduction_points(rend_service_descriptor_t *parsed,
tor_assert(parsed);
/** Function may only be invoked once. */
tor_assert(!parsed->intro_nodes);
- tor_assert(intro_points_encoded);
- tor_assert(intro_points_encoded_size > 0);
+ if (!intro_points_encoded || intro_points_encoded_size == 0) {
+ log_warn(LD_REND, "Empty or zero size introduction point list");
+ goto err;
+ }
/* Consider one intro point after the other. */
current_ipo = intro_points_encoded;
end_of_intro_points = intro_points_encoded + intro_points_encoded_size;
@@ -4857,8 +4927,10 @@ rend_parse_introduction_points(rend_service_descriptor_t *parsed,
done:
/* Free tokens and clear token list. */
- SMARTLIST_FOREACH(tokens, directory_token_t *, t, token_clear(t));
- smartlist_free(tokens);
+ if (tokens) {
+ SMARTLIST_FOREACH(tokens, directory_token_t *, t, token_clear(t));
+ smartlist_free(tokens);
+ }
if (area)
memarea_drop_all(area);
diff --git a/src/or/routerparse.h b/src/or/routerparse.h
index 18a7d2563c..e294d95391 100644
--- a/src/or/routerparse.h
+++ b/src/or/routerparse.h
@@ -44,7 +44,6 @@ MOCK_DECL(addr_policy_t *, router_parse_addr_policy_item_from_string,
(const char *s, int assume_action));
version_status_t tor_version_is_obsolete(const char *myversion,
const char *versionlist);
-int tor_version_supports_microdescriptors(const char *platform);
int tor_version_as_new_as(const char *platform, const char *cutoff);
int tor_version_parse(const char *s, tor_version_t *out);
int tor_version_compare(tor_version_t *a, tor_version_t *b);
@@ -85,5 +84,12 @@ int rend_parse_introduction_points(rend_service_descriptor_t *parsed,
size_t intro_points_encoded_size);
int rend_parse_client_keys(strmap_t *parsed_clients, const char *str);
+#ifdef ROUTERPARSE_PRIVATE
+STATIC int routerstatus_parse_guardfraction(const char *guardfraction_str,
+ networkstatus_t *vote,
+ vote_routerstatus_t *vote_rs,
+ routerstatus_t *rs);
+#endif
+
#endif
diff --git a/src/or/scheduler.c b/src/or/scheduler.c
index f3fbc4ad4e..931bb6b744 100644
--- a/src/or/scheduler.c
+++ b/src/or/scheduler.c
@@ -613,7 +613,7 @@ scheduler_touch_channel(channel_t *chan)
*/
void
-scheduler_adjust_queue_size(channel_t *chan, char dir, uint64_t adj)
+scheduler_adjust_queue_size(channel_t *chan, int dir, uint64_t adj)
{
time_t now = approx_time();
diff --git a/src/or/scheduler.h b/src/or/scheduler.h
index 70f6a39d4c..27dd2d8388 100644
--- a/src/or/scheduler.h
+++ b/src/or/scheduler.h
@@ -29,7 +29,7 @@ void scheduler_channel_wants_writes(channel_t *chan);
MOCK_DECL(void,scheduler_release_channel,(channel_t *chan));
/* Notify scheduler of queue size adjustments */
-void scheduler_adjust_queue_size(channel_t *chan, char dir, uint64_t adj);
+void scheduler_adjust_queue_size(channel_t *chan, int dir, uint64_t adj);
/* Notify scheduler that a channel's queue position may have changed */
void scheduler_touch_channel(channel_t *chan);
diff --git a/src/or/status.c b/src/or/status.c
index 0717070a05..8f7be0aa3c 100644
--- a/src/or/status.c
+++ b/src/or/status.c
@@ -23,6 +23,7 @@
#include "statefile.h"
static void log_accounting(const time_t now, const or_options_t *options);
+#include "geoip.h"
/** Return the total number of circuits. */
STATIC int
@@ -92,7 +93,6 @@ log_heartbeat(time_t now)
const int hibernating = we_are_hibernating();
const or_options_t *options = get_options();
- (void)now;
if (public_server_mode(options) && !hibernating) {
/* Let's check if we are in the current cached consensus. */
@@ -110,28 +110,47 @@ log_heartbeat(time_t now)
log_fn(LOG_NOTICE, LD_HEARTBEAT, "Heartbeat: Tor's uptime is %s, with %d "
"circuits open. I've sent %s and received %s.%s",
- uptime, count_circuits(),bw_sent,bw_rcvd,
+ uptime, count_circuits(), bw_sent, bw_rcvd,
hibernating?" We are currently hibernating.":"");
if (server_mode(options) && accounting_is_enabled(options) && !hibernating) {
log_accounting(now, options);
}
- if (stats_n_data_cells_packaged && !hibernating)
- log_notice(LD_HEARTBEAT, "Average packaged cell fullness: %2.3f%%",
- 100*(U64_TO_DBL(stats_n_data_bytes_packaged) /
- U64_TO_DBL(stats_n_data_cells_packaged*RELAY_PAYLOAD_SIZE)) );
-
- if (r > 1.0) {
- double overhead = ( r - 1.0 ) * 100.0;
- log_notice(LD_HEARTBEAT, "TLS write overhead: %.f%%", overhead);
+ double fullness_pct = 100;
+ if (stats_n_data_cells_packaged && !hibernating) {
+ fullness_pct =
+ 100*(U64_TO_DBL(stats_n_data_bytes_packaged) /
+ U64_TO_DBL(stats_n_data_cells_packaged*RELAY_PAYLOAD_SIZE));
}
+ const double overhead_pct = ( r - 1.0 ) * 100.0;
+
+#define FULLNESS_PCT_THRESHOLD 80
+#define TLS_OVERHEAD_THRESHOLD 15
+
+ const int severity = (fullness_pct < FULLNESS_PCT_THRESHOLD ||
+ overhead_pct > TLS_OVERHEAD_THRESHOLD)
+ ? LOG_NOTICE : LOG_INFO;
+
+ log_fn(severity, LD_HEARTBEAT,
+ "Average packaged cell fullness: %2.3f%%. "
+ "TLS write overhead: %.f%%", fullness_pct, overhead_pct);
- if (public_server_mode(options))
+ if (public_server_mode(options)) {
rep_hist_log_circuit_handshake_stats(now);
+ rep_hist_log_link_protocol_counts();
+ }
circuit_log_ancient_one_hop_circuits(1800);
+ if (options->BridgeRelay) {
+ char *msg = NULL;
+ msg = format_client_stats_heartbeat(now);
+ if (msg)
+ log_notice(LD_HEARTBEAT, "%s", msg);
+ tor_free(msg);
+ }
+
tor_free(uptime);
tor_free(bw_sent);
tor_free(bw_rcvd);
diff --git a/src/or/transports.c b/src/or/transports.c
index 6f07054ea8..ba2c784c2c 100644
--- a/src/or/transports.c
+++ b/src/or/transports.c
@@ -1388,6 +1388,11 @@ create_managed_proxy_environment(const managed_proxy_t *mp)
} else {
smartlist_add_asprintf(envs, "TOR_PT_EXTENDED_SERVER_PORT=");
}
+
+ /* All new versions of tor will keep stdin open, so PTs can use it
+ * as a reliable termination detection mechanism.
+ */
+ smartlist_add_asprintf(envs, "TOR_PT_EXIT_ON_STDIN_CLOSE=1");
} else {
/* If ClientTransportPlugin has a HTTPS/SOCKS proxy configured, set the
* TOR_PT_PROXY line.
diff --git a/src/test/bench.c b/src/test/bench.c
index 68870f8657..5cbc072700 100644
--- a/src/test/bench.c
+++ b/src/test/bench.c
@@ -164,7 +164,8 @@ bench_onion_TAP(void)
char key_out[CPATH_KEY_MATERIAL_LEN];
int s;
dh = crypto_dh_dup(dh_out);
- s = onion_skin_TAP_client_handshake(dh, or, key_out, sizeof(key_out));
+ s = onion_skin_TAP_client_handshake(dh, or, key_out, sizeof(key_out),
+ NULL);
crypto_dh_free(dh);
tor_assert(s == 0);
}
@@ -223,7 +224,8 @@ bench_onion_ntor(void)
for (i = 0; i < iters; ++i) {
uint8_t key_out[CPATH_KEY_MATERIAL_LEN];
int s;
- s = onion_skin_ntor_client_handshake(state, or, key_out, sizeof(key_out));
+ s = onion_skin_ntor_client_handshake(state, or, key_out, sizeof(key_out),
+ NULL);
tor_assert(s == 0);
}
end = perftime();
diff --git a/src/test/bt_test.py b/src/test/bt_test.py
index 0afe797a6d..e694361703 100755
--- a/src/test/bt_test.py
+++ b/src/test/bt_test.py
@@ -36,7 +36,7 @@ LINES = sys.stdin.readlines()
for I in range(len(LINES)):
if matches(LINES[I:], FUNCNAMES):
print("OK")
- break
+ sys.exit(0)
else:
print("BAD")
-
+ sys.exit(1)
diff --git a/src/test/include.am b/src/test/include.am
index b9b381fdae..cfdfc40bd3 100644
--- a/src/test/include.am
+++ b/src/test/include.am
@@ -1,8 +1,34 @@
-TESTS += src/test/test
+
+TESTSCRIPTS = src/test/test_zero_length_keys.sh
+
+if USEPYTHON
+TESTSCRIPTS += src/test/test_ntor.sh src/test/test_bt.sh
+endif
+
+TESTS += src/test/test src/test/test-slow src/test/test-memwipe \
+ $(TESTSCRIPTS)
+
+### This is a lovely feature, but it requires automake >= 1.12, and Tor
+### doesn't require that yet. Below is a kludge to work around.
+###
+# TEST_EXTENSIONS = .sh
+# SH_LOG_COMPILER = $(SHELL)
+
+check-am: set-test-permissions
+
+.PHONY: set-test-permissions
+set-test-permissions: $(TESTSCRIPTS)
+ chmod u+x $(TESTSCRIPTS)
+
noinst_PROGRAMS+= src/test/bench
if UNITTESTS_ENABLED
-noinst_PROGRAMS+= src/test/test src/test/test-child
+noinst_PROGRAMS+= \
+ src/test/test \
+ src/test/test-slow \
+ src/test/test-memwipe \
+ src/test/test-child \
+ src/test/test_workqueue
endif
src_test_AM_CPPFLAGS = -DSHARE_DATADIR="\"$(datadir)\"" \
@@ -17,60 +43,94 @@ src_test_AM_CPPFLAGS = -DSHARE_DATADIR="\"$(datadir)\"" \
src_test_test_SOURCES = \
src/test/test.c \
+ src/test/test_accounting.c \
src/test/test_addr.c \
+ src/test/test_address.c \
src/test/test_buffers.c \
src/test/test_cell_formats.c \
+ src/test/test_cell_queue.c \
src/test/test_channel.c \
src/test/test_channeltls.c \
+ src/test/test_checkdir.c \
src/test/test_circuitlist.c \
src/test/test_circuitmux.c \
+ src/test/test_config.c \
src/test/test_containers.c \
+ src/test/test_controller.c \
src/test/test_controller_events.c \
src/test/test_crypto.c \
- src/test/test_cell_queue.c \
src/test/test_data.c \
src/test/test_dir.c \
- src/test/test_checkdir.c \
+ src/test/test_entryconn.c \
src/test/test_entrynodes.c \
+ src/test/test_guardfraction.c \
src/test/test_extorport.c \
+ src/test/test_hs.c \
src/test/test_introduce.c \
src/test/test_logging.c \
src/test/test_microdesc.c \
+ src/test/test_nodelist.c \
src/test/test_oom.c \
- src/test/test_accounting.c \
src/test/test_options.c \
+ src/test/test_policy.c \
src/test/test_pt.c \
- src/test/test_relaycell.c \
src/test/test_relay.c \
+ src/test/test_relaycell.c \
src/test/test_replay.c \
src/test/test_routerkeys.c \
+ src/test/test_routerlist.c \
+ src/test/test_routerset.c \
src/test/test_scheduler.c \
src/test/test_socks.c \
- src/test/test_util.c \
- src/test/test_config.c \
- src/test/test_hs.c \
- src/test/test_nodelist.c \
- src/test/test_policy.c \
src/test/test_status.c \
- src/test/test_routerset.c \
+ src/test/test_threads.c \
+ src/test/test_util.c \
+ src/test/test_helpers.c \
+ src/test/testing_common.c \
+ src/ext/tinytest.c
+
+src_test_test_slow_SOURCES = \
+ src/test/test_slow.c \
+ src/test/test_crypto_slow.c \
+ src/test/test_util_slow.c \
+ src/test/testing_common.c \
src/ext/tinytest.c
+src_test_test_memwipe_SOURCES = \
+ src/test/test-memwipe.c
+
+
src_test_test_CFLAGS = $(AM_CFLAGS) $(TEST_CFLAGS)
-src_test_test_CPPFLAGS= $(src_test_AM_CPPFLAGS)
+src_test_test_CPPFLAGS= $(src_test_AM_CPPFLAGS) $(TEST_CPPFLAGS)
src_test_bench_SOURCES = \
src/test/bench.c
+src_test_test_workqueue_SOURCES = \
+ src/test/test_workqueue.c
+src_test_test_workqueue_CPPFLAGS= $(src_test_AM_CPPFLAGS)
+src_test_test_workqueue_CFLAGS = $(AM_CFLAGS) $(TEST_CFLAGS)
+
src_test_test_LDFLAGS = @TOR_LDFLAGS_zlib@ @TOR_LDFLAGS_openssl@ \
@TOR_LDFLAGS_libevent@
src_test_test_LDADD = src/or/libtor-testing.a src/common/libor-testing.a \
- src/common/libor-crypto-testing.a $(LIBDONNA) \
+ src/common/libor-crypto-testing.a $(LIBDONNA) src/common/libor.a \
src/common/libor-event-testing.a src/trunnel/libor-trunnel-testing.a \
@TOR_ZLIB_LIBS@ @TOR_LIB_MATH@ @TOR_LIBEVENT_LIBS@ \
@TOR_OPENSSL_LIBS@ @TOR_LIB_WS32@ @TOR_LIB_GDI@ @CURVE25519_LIBS@ \
@TOR_SYSTEMD_LIBS@
+src_test_test_slow_CPPFLAGS = $(src_test_test_CPPFLAGS)
+src_test_test_slow_CFLAGS = $(src_test_test_CFLAGS)
+src_test_test_slow_LDADD = $(src_test_test_LDADD)
+src_test_test_slow_LDFLAGS = $(src_test_test_LDFLAGS)
+
+src_test_test_memwipe_CPPFLAGS = $(src_test_test_CPPFLAGS)
+src_test_test_memwipe_CFLAGS = $(src_test_test_CFLAGS)
+src_test_test_memwipe_LDADD = $(src_test_test_LDADD)
+src_test_test_memwipe_LDFLAGS = $(src_test_test_LDFLAGS)
+
src_test_bench_LDFLAGS = @TOR_LDFLAGS_zlib@ @TOR_LDFLAGS_openssl@ \
@TOR_LDFLAGS_libevent@
src_test_bench_LDADD = src/or/libtor.a src/common/libor.a \
@@ -80,13 +140,24 @@ src_test_bench_LDADD = src/or/libtor.a src/common/libor.a \
@TOR_OPENSSL_LIBS@ @TOR_LIB_WS32@ @TOR_LIB_GDI@ @CURVE25519_LIBS@ \
@TOR_SYSTEMD_LIBS@
+src_test_test_workqueue_LDFLAGS = @TOR_LDFLAGS_zlib@ @TOR_LDFLAGS_openssl@ \
+ @TOR_LDFLAGS_libevent@
+src_test_test_workqueue_LDADD = src/or/libtor-testing.a \
+ src/common/libor-testing.a \
+ src/common/libor-crypto-testing.a $(LIBDONNA) \
+ src/common/libor-event-testing.a \
+ @TOR_ZLIB_LIBS@ @TOR_LIB_MATH@ @TOR_LIBEVENT_LIBS@ \
+ @TOR_OPENSSL_LIBS@ @TOR_LIB_WS32@ @TOR_LIB_GDI@ @CURVE25519_LIBS@
+
noinst_HEADERS+= \
src/test/fakechans.h \
src/test/test.h \
+ src/test/test_helpers.h \
src/test/test_descriptors.inc \
src/test/example_extrainfo.inc \
src/test/failing_routerdescs.inc \
- src/test/ed25519_vectors.inc
+ src/test/ed25519_vectors.inc \
+ src/test/test_descriptors.inc
noinst_PROGRAMS+= src/test/test-ntor-cl
src_test_test_ntor_cl_SOURCES = src/test/test_ntor_cl.c
@@ -97,13 +168,6 @@ src_test_test_ntor_cl_LDADD = src/or/libtor.a src/common/libor.a \
@TOR_OPENSSL_LIBS@ @TOR_LIB_WS32@ @TOR_LIB_GDI@ @CURVE25519_LIBS@
src_test_test_ntor_cl_AM_CPPFLAGS = \
-I"$(top_srcdir)/src/or"
-NTOR_TEST_DEPS=src/test/test-ntor-cl
-
-if COVERAGE_ENABLED
-CMDLINE_TEST_TOR = ./src/or/tor-cov
-else
-CMDLINE_TEST_TOR = ./src/or/tor
-endif
noinst_PROGRAMS += src/test/test-bt-cl
src_test_test_bt_cl_SOURCES = src/test/test_bt_cl.c
@@ -111,22 +175,10 @@ src_test_test_bt_cl_LDADD = src/common/libor-testing.a \
@TOR_LIB_MATH@ \
@TOR_LIB_WS32@ @TOR_LIB_GDI@
src_test_test_bt_cl_CFLAGS = $(AM_CFLAGS) $(TEST_CFLAGS)
-src_test_test_bt_cl_CPPFLAGS= $(src_test_AM_CPPFLAGS)
-
-
-check-local: $(NTOR_TEST_DEPS) $(CMDLINE_TEST_TOR)
-if USEPYTHON
- $(PYTHON) $(top_srcdir)/src/test/test_cmdline_args.py $(CMDLINE_TEST_TOR) "${top_srcdir}"
- $(PYTHON) $(top_srcdir)/src/test/ntor_ref.py test-tor
- $(PYTHON) $(top_srcdir)/src/test/ntor_ref.py self-test
- ./src/test/test-bt-cl assert | $(PYTHON) $(top_srcdir)/src/test/bt_test.py
- ./src/test/test-bt-cl crash | $(PYTHON) $(top_srcdir)/src/test/bt_test.py
-endif
- $(top_srcdir)/src/test/zero_length_keys.sh
+src_test_test_bt_cl_CPPFLAGS= $(src_test_AM_CPPFLAGS) $(TEST_CPPFLAGS)
EXTRA_DIST += \
src/test/bt_test.py \
src/test/ntor_ref.py \
src/test/slownacl_curve25519.py \
- src/test/test_cmdline_args.py \
src/test/zero_length_keys.sh
diff --git a/src/test/ntor_ref.py b/src/test/ntor_ref.py
index e37637d92a..767da57a9c 100755
--- a/src/test/ntor_ref.py
+++ b/src/test/ntor_ref.py
@@ -283,7 +283,7 @@ def client_part2(seckey_x, msg, node_id, pubkey_B, keyBytes=72):
my_auth = H_mac(auth_input)
badness = my_auth != their_auth
- badness = bad_result(yx) + bad_result(bx)
+ badness |= bad_result(yx) + bad_result(bx)
if badness:
return None
diff --git a/src/test/test-memwipe.c b/src/test/test-memwipe.c
new file mode 100644
index 0000000000..cd3900e277
--- /dev/null
+++ b/src/test/test-memwipe.c
@@ -0,0 +1,207 @@
+#include <string.h>
+#include <stdio.h>
+#include <sys/types.h>
+#include <stdlib.h>
+
+#include "crypto.h"
+#include "compat.h"
+
+#undef MIN
+#define MIN(a,b) ( ((a)<(b)) ? (a) : (b) )
+
+static unsigned fill_a_buffer_memset(void) __attribute__((noinline));
+static unsigned fill_a_buffer_memwipe(void) __attribute__((noinline));
+static unsigned fill_a_buffer_nothing(void) __attribute__((noinline));
+static unsigned fill_heap_buffer_memset(void) __attribute__((noinline));
+static unsigned fill_heap_buffer_memwipe(void) __attribute__((noinline));
+static unsigned fill_heap_buffer_nothing(void) __attribute__((noinline));
+static unsigned check_a_buffer(void) __attribute__((noinline));
+
+const char *s = NULL;
+
+#define FILL_BUFFER_IMPL() \
+ unsigned int i; \
+ unsigned sum = 0; \
+ \
+ /* Fill up a 1k buffer with a recognizable pattern. */ \
+ for (i = 0; i < 2048; i += strlen(s)) { \
+ memcpy(buf+i, s, MIN(strlen(s), 2048-i)); \
+ } \
+ \
+ /* Use the buffer as input to a computation so the above can't get */ \
+ /* optimized away. */ \
+ for (i = 0; i < 2048; ++i) { \
+ sum += (unsigned char)buf[i]; \
+ }
+
+static unsigned
+fill_a_buffer_memset(void)
+{
+ char buf[2048];
+ FILL_BUFFER_IMPL()
+ memset(buf, 0, sizeof(buf));
+ return sum;
+}
+
+static unsigned
+fill_a_buffer_memwipe(void)
+{
+ char buf[2048];
+ FILL_BUFFER_IMPL()
+ memwipe(buf, 0, sizeof(buf));
+ return sum;
+}
+
+static unsigned
+fill_a_buffer_nothing(void)
+{
+ char buf[2048];
+ FILL_BUFFER_IMPL()
+ return sum;
+}
+
+static INLINE int
+vmemeq(volatile char *a, const char *b, size_t n)
+{
+ while (n--) {
+ if (*a++ != *b++)
+ return 0;
+ }
+ return 1;
+}
+
+static unsigned
+check_a_buffer(void)
+{
+ unsigned int i;
+ volatile char buf[1024];
+ unsigned sum = 0;
+
+ /* See if this buffer has the string in it.
+
+ YES, THIS DOES INVOKE UNDEFINED BEHAVIOR BY READING FROM AN UNINITIALIZED
+ BUFFER.
+
+ If you know a better way to figure out whether the compiler eliminated
+ the memset/memwipe calls or not, please let me know.
+ */
+ for (i = 0; i < sizeof(buf); ++i) {
+ if (vmemeq(buf+i, s, strlen(s)))
+ ++sum;
+ }
+
+ return sum;
+}
+
+static char *heap_buf = NULL;
+
+static unsigned
+fill_heap_buffer_memset(void)
+{
+ char *buf = heap_buf = malloc(2048);
+ FILL_BUFFER_IMPL()
+ memset(buf, 0, 2048);
+ free(buf);
+ return sum;
+}
+
+static unsigned
+fill_heap_buffer_memwipe(void)
+{
+ char *buf = heap_buf = malloc(2048);
+ FILL_BUFFER_IMPL()
+ memwipe(buf, 0, 2048);
+ free(buf);
+ return sum;
+}
+
+static unsigned
+fill_heap_buffer_nothing(void)
+{
+ char *buf = heap_buf = malloc(2048);
+ FILL_BUFFER_IMPL()
+ free(buf);
+ return sum;
+}
+
+static unsigned
+check_heap_buffer(void)
+{
+ unsigned int i;
+ unsigned sum = 0;
+ volatile char *buf = heap_buf;
+
+ /* See if this buffer has the string in it.
+
+ YES, THIS DOES INVOKE UNDEFINED BEHAVIOR BY READING FROM A FREED BUFFER.
+
+ If you know a better way to figure out whether the compiler eliminated
+ the memset/memwipe calls or not, please let me know.
+ */
+ for (i = 0; i < sizeof(buf); ++i) {
+ if (vmemeq(buf+i, s, strlen(s)))
+ ++sum;
+ }
+
+ return sum;
+}
+
+static struct testcase {
+ const char *name;
+ /* this spacing satisfies make check-spaces */
+ unsigned
+ (*fill_fn)(void);
+ unsigned
+ (*check_fn)(void);
+} testcases[] = {
+ { "nil", fill_a_buffer_nothing, check_a_buffer },
+ { "nil-heap", fill_heap_buffer_nothing, check_heap_buffer },
+ { "memset", fill_a_buffer_memset, check_a_buffer },
+ { "memset-heap", fill_heap_buffer_memset, check_heap_buffer },
+ { "memwipe", fill_a_buffer_memwipe, check_a_buffer },
+ { "memwipe-heap", fill_heap_buffer_memwipe, check_heap_buffer },
+ { NULL, NULL, NULL }
+};
+
+int
+main(int argc, char **argv)
+{
+ unsigned x, x2;
+ int i;
+ int working = 1;
+ unsigned found[6];
+ (void) argc; (void) argv;
+
+ s = "squamous haberdasher gallimaufry";
+
+ memset(found, 0, sizeof(found));
+
+ for (i = 0; testcases[i].name; ++i) {
+ x = testcases[i].fill_fn();
+ found[i] = testcases[i].check_fn();
+
+ x2 = fill_a_buffer_nothing();
+
+ if (x != x2) {
+ working = 0;
+ }
+ }
+
+ if (!working || !found[0] || !found[1]) {
+ printf("It appears that this test case may not give you reliable "
+ "information. Sorry.\n");
+ }
+
+ if (!found[2] && !found[3]) {
+ printf("It appears that memset is good enough on this platform. Good.\n");
+ }
+
+ if (found[4] || found[5]) {
+ printf("ERROR: memwipe does not wipe data!\n");
+ return 1;
+ } else {
+ printf("OKAY: memwipe seems to work.\n");
+ return 0;
+ }
+}
+
diff --git a/src/test/test-network.sh b/src/test/test-network.sh
index be57cafb7f..ccfb5df424 100755
--- a/src/test/test-network.sh
+++ b/src/test/test-network.sh
@@ -13,7 +13,7 @@ do
export TOR_DIR="$2"
shift
;;
- --flavo?r|--network-flavo?r)
+ --flavor|--flavour|--network-flavor|--network-flavour)
export NETWORK_FLAVOUR="$2"
shift
;;
diff --git a/src/test/test.c b/src/test/test.c
index de6efaf873..f30b8ae1af 100644
--- a/src/test/test.c
+++ b/src/test/test.c
@@ -3,10 +3,6 @@
* Copyright (c) 2007-2015, The Tor Project, Inc. */
/* See LICENSE for licensing information */
-/* Ordinarily defined in tor_main.c; this bit is just here to provide one
- * since we're not linking to tor_main.c */
-const char tor_git_revision[] = "";
-
/**
* \file test.c
* \brief Unit tests for many pieces of the lower level Tor modules.
@@ -53,9 +49,6 @@ double fabs(double x);
#include "rendcommon.h"
#include "test.h"
#include "torgzip.h"
-#ifdef ENABLE_MEMPOOLS
-#include "mempool.h"
-#endif
#include "memarea.h"
#include "onion.h"
#include "onion_ntor.h"
@@ -67,171 +60,6 @@ double fabs(double x);
#include "crypto_curve25519.h"
#include "onion_ntor.h"
-#ifdef USE_DMALLOC
-#include <dmalloc.h>
-#include <openssl/crypto.h>
-#include "main.h"
-#endif
-
-/** Set to true if any unit test has failed. Mostly, this is set by the macros
- * in test.h */
-int have_failed = 0;
-
-/** Temporary directory (set up by setup_directory) under which we store all
- * our files during testing. */
-static char temp_dir[256];
-#ifdef _WIN32
-#define pid_t int
-#endif
-static pid_t temp_dir_setup_in_pid = 0;
-
-/** Select and create the temporary directory we'll use to run our unit tests.
- * Store it in <b>temp_dir</b>. Exit immediately if we can't create it.
- * idempotent. */
-static void
-setup_directory(void)
-{
- static int is_setup = 0;
- int r;
- char rnd[256], rnd32[256];
- if (is_setup) return;
-
-/* Due to base32 limitation needs to be a multiple of 5. */
-#define RAND_PATH_BYTES 5
- crypto_rand(rnd, RAND_PATH_BYTES);
- base32_encode(rnd32, sizeof(rnd32), rnd, RAND_PATH_BYTES);
-
-#ifdef _WIN32
- {
- char buf[MAX_PATH];
- const char *tmp = buf;
- const char *extra_backslash = "";
- /* If this fails, we're probably screwed anyway */
- if (!GetTempPathA(sizeof(buf),buf))
- tmp = "c:\\windows\\temp\\";
- if (strcmpend(tmp, "\\")) {
- /* According to MSDN, it should be impossible for GetTempPath to give us
- * an answer that doesn't end with \. But let's make sure. */
- extra_backslash = "\\";
- }
- tor_snprintf(temp_dir, sizeof(temp_dir),
- "%s%stor_test_%d_%s", tmp, extra_backslash,
- (int)getpid(), rnd32);
- r = mkdir(temp_dir);
- }
-#else
- tor_snprintf(temp_dir, sizeof(temp_dir), "/tmp/tor_test_%d_%s",
- (int) getpid(), rnd32);
- r = mkdir(temp_dir, 0700);
- if (!r) {
- /* undo sticky bit so tests don't get confused. */
- r = chown(temp_dir, getuid(), getgid());
- }
-#endif
- if (r) {
- fprintf(stderr, "Can't create directory %s:", temp_dir);
- perror("");
- exit(1);
- }
- is_setup = 1;
- temp_dir_setup_in_pid = getpid();
-}
-
-/** Return a filename relative to our testing temporary directory */
-const char *
-get_fname(const char *name)
-{
- static char buf[1024];
- setup_directory();
- if (!name)
- return temp_dir;
- tor_snprintf(buf,sizeof(buf),"%s/%s",temp_dir,name);
- return buf;
-}
-
-/* Remove a directory and all of its subdirectories */
-static void
-rm_rf(const char *dir)
-{
- struct stat st;
- smartlist_t *elements;
-
- elements = tor_listdir(dir);
- if (elements) {
- SMARTLIST_FOREACH_BEGIN(elements, const char *, cp) {
- char *tmp = NULL;
- tor_asprintf(&tmp, "%s"PATH_SEPARATOR"%s", dir, cp);
- if (0 == stat(tmp,&st) && (st.st_mode & S_IFDIR)) {
- rm_rf(tmp);
- } else {
- if (unlink(tmp)) {
- fprintf(stderr, "Error removing %s: %s\n", tmp, strerror(errno));
- }
- }
- tor_free(tmp);
- } SMARTLIST_FOREACH_END(cp);
- SMARTLIST_FOREACH(elements, char *, cp, tor_free(cp));
- smartlist_free(elements);
- }
- if (rmdir(dir))
- fprintf(stderr, "Error removing directory %s: %s\n", dir, strerror(errno));
-}
-
-/** Remove all files stored under the temporary directory, and the directory
- * itself. Called by atexit(). */
-static void
-remove_directory(void)
-{
- if (getpid() != temp_dir_setup_in_pid) {
- /* Only clean out the tempdir when the main process is exiting. */
- return;
- }
-
- rm_rf(temp_dir);
-}
-
-/** Define this if unit tests spend too much time generating public keys*/
-#undef CACHE_GENERATED_KEYS
-
-static crypto_pk_t *pregen_keys[5] = {NULL, NULL, NULL, NULL, NULL};
-#define N_PREGEN_KEYS ARRAY_LENGTH(pregen_keys)
-
-/** Generate and return a new keypair for use in unit tests. If we're using
- * the key cache optimization, we might reuse keys: we only guarantee that
- * keys made with distinct values for <b>idx</b> are different. The value of
- * <b>idx</b> must be at least 0, and less than N_PREGEN_KEYS. */
-crypto_pk_t *
-pk_generate(int idx)
-{
-#ifdef CACHE_GENERATED_KEYS
- tor_assert(idx < N_PREGEN_KEYS);
- if (! pregen_keys[idx]) {
- pregen_keys[idx] = crypto_pk_new();
- tor_assert(!crypto_pk_generate_key(pregen_keys[idx]));
- }
- return crypto_pk_dup_key(pregen_keys[idx]);
-#else
- crypto_pk_t *result;
- (void) idx;
- result = crypto_pk_new();
- tor_assert(!crypto_pk_generate_key(result));
- return result;
-#endif
-}
-
-/** Free all storage used for the cached key optimization. */
-static void
-free_pregenerated_keys(void)
-{
- unsigned idx;
- for (idx = 0; idx < N_PREGEN_KEYS; ++idx) {
- if (pregen_keys[idx]) {
- crypto_pk_free(pregen_keys[idx]);
- pregen_keys[idx] = NULL;
- }
- }
-}
-
/** Run unit tests for the onion handshake code. */
static void
test_onion_handshake(void *arg)
@@ -275,7 +103,8 @@ test_onion_handshake(void *arg)
/* client handshake 2 */
memset(c_keys, 0, 40);
- tt_assert(! onion_skin_TAP_client_handshake(c_dh, s_buf, c_keys, 40));
+ tt_assert(! onion_skin_TAP_client_handshake(c_dh, s_buf, c_keys,
+ 40, NULL));
tt_mem_op(c_keys,OP_EQ, s_keys, 40);
memset(s_buf, 0, 40);
@@ -348,18 +177,18 @@ test_bad_onion_handshake(void *arg)
/* Client: Case 1: The server sent back junk. */
s_buf[64] ^= 33;
tt_int_op(-1, OP_EQ,
- onion_skin_TAP_client_handshake(c_dh, s_buf, c_keys, 40));
+ onion_skin_TAP_client_handshake(c_dh, s_buf, c_keys, 40, NULL));
s_buf[64] ^= 33;
/* Let the client finish; make sure it can. */
tt_int_op(0, OP_EQ,
- onion_skin_TAP_client_handshake(c_dh, s_buf, c_keys, 40));
+ onion_skin_TAP_client_handshake(c_dh, s_buf, c_keys, 40, NULL));
tt_mem_op(s_keys,OP_EQ, c_keys, 40);
/* Client: Case 2: The server sent back a degenerate DH. */
memset(s_buf, 0, sizeof(s_buf));
tt_int_op(-1, OP_EQ,
- onion_skin_TAP_client_handshake(c_dh, s_buf, c_keys, 40));
+ onion_skin_TAP_client_handshake(c_dh, s_buf, c_keys, 40, NULL));
done:
crypto_dh_free(c_dh);
@@ -408,7 +237,7 @@ test_ntor_handshake(void *arg)
/* client handshake 2 */
memset(c_keys, 0, 40);
tt_int_op(0, OP_EQ, onion_skin_ntor_client_handshake(c_state, s_buf,
- c_keys, 400));
+ c_keys, 400, NULL));
tt_mem_op(c_keys,OP_EQ, s_keys, 400);
memset(s_buf, 0, 40);
@@ -611,6 +440,14 @@ test_circuit_timeout(void *arg)
tt_assert(circuit_build_times_network_check_live(&final));
circuit_build_times_count_timeout(&final, 1);
+
+ /* Ensure return value for degenerate cases are clamped correctly */
+ initial.alpha = INT32_MAX;
+ tt_assert(circuit_build_times_calculate_timeout(&initial, .99999999) <=
+ INT32_MAX);
+ initial.alpha = 0;
+ tt_assert(circuit_build_times_calculate_timeout(&initial, .5) <=
+ INT32_MAX);
}
done:
@@ -1277,163 +1114,92 @@ static struct testcase_t test_array[] = {
END_OF_TESTCASES
};
+extern struct testcase_t accounting_tests[];
extern struct testcase_t addr_tests[];
+extern struct testcase_t address_tests[];
extern struct testcase_t buffer_tests[];
-extern struct testcase_t crypto_tests[];
-extern struct testcase_t container_tests[];
-extern struct testcase_t util_tests[];
-extern struct testcase_t dir_tests[];
-extern struct testcase_t checkdir_tests[];
-extern struct testcase_t microdesc_tests[];
-extern struct testcase_t pt_tests[];
-extern struct testcase_t config_tests[];
-extern struct testcase_t introduce_tests[];
-extern struct testcase_t replaycache_tests[];
-extern struct testcase_t relaycell_tests[];
extern struct testcase_t cell_format_tests[];
+extern struct testcase_t cell_queue_tests[];
+extern struct testcase_t channel_tests[];
+extern struct testcase_t channeltls_tests[];
+extern struct testcase_t checkdir_tests[];
extern struct testcase_t circuitlist_tests[];
extern struct testcase_t circuitmux_tests[];
-extern struct testcase_t cell_queue_tests[];
-extern struct testcase_t options_tests[];
-extern struct testcase_t socks_tests[];
+extern struct testcase_t config_tests[];
+extern struct testcase_t container_tests[];
+extern struct testcase_t controller_tests[];
+extern struct testcase_t controller_event_tests[];
+extern struct testcase_t crypto_tests[];
+extern struct testcase_t dir_tests[];
+extern struct testcase_t entryconn_tests[];
extern struct testcase_t entrynodes_tests[];
+extern struct testcase_t guardfraction_tests[];
extern struct testcase_t extorport_tests[];
-extern struct testcase_t controller_event_tests[];
-extern struct testcase_t logging_tests[];
extern struct testcase_t hs_tests[];
+extern struct testcase_t introduce_tests[];
+extern struct testcase_t logging_tests[];
+extern struct testcase_t microdesc_tests[];
extern struct testcase_t nodelist_tests[];
-extern struct testcase_t routerkeys_tests[];
extern struct testcase_t oom_tests[];
-extern struct testcase_t accounting_tests[];
+extern struct testcase_t options_tests[];
extern struct testcase_t policy_tests[];
-extern struct testcase_t status_tests[];
-extern struct testcase_t routerset_tests[];
-extern struct testcase_t router_tests[];
-extern struct testcase_t channel_tests[];
-extern struct testcase_t channeltls_tests[];
+extern struct testcase_t pt_tests[];
extern struct testcase_t relay_tests[];
+extern struct testcase_t relaycell_tests[];
+extern struct testcase_t replaycache_tests[];
+extern struct testcase_t router_tests[];
+extern struct testcase_t routerkeys_tests[];
+extern struct testcase_t routerlist_tests[];
+extern struct testcase_t routerset_tests[];
extern struct testcase_t scheduler_tests[];
+extern struct testcase_t socks_tests[];
+extern struct testcase_t status_tests[];
+extern struct testcase_t thread_tests[];
+extern struct testcase_t util_tests[];
-static struct testgroup_t testgroups[] = {
+struct testgroup_t testgroups[] = {
{ "", test_array },
- { "buffer/", buffer_tests },
- { "socks/", socks_tests },
+ { "accounting/", accounting_tests },
{ "addr/", addr_tests },
- { "crypto/", crypto_tests },
- { "container/", container_tests },
- { "util/", util_tests },
- { "util/logging/", logging_tests },
+ { "address/", address_tests },
+ { "buffer/", buffer_tests },
{ "cellfmt/", cell_format_tests },
{ "cellqueue/", cell_queue_tests },
- { "dir/", dir_tests },
+ { "channel/", channel_tests },
+ { "channeltls/", channeltls_tests },
{ "checkdir/", checkdir_tests },
- { "dir/md/", microdesc_tests },
- { "pt/", pt_tests },
- { "config/", config_tests },
- { "replaycache/", replaycache_tests },
- { "relaycell/", relaycell_tests },
- { "introduce/", introduce_tests },
{ "circuitlist/", circuitlist_tests },
{ "circuitmux/", circuitmux_tests },
- { "options/", options_tests },
+ { "config/", config_tests },
+ { "container/", container_tests },
+ { "control/", controller_tests },
+ { "control/event/", controller_event_tests },
+ { "crypto/", crypto_tests },
+ { "dir/", dir_tests },
+ { "dir/md/", microdesc_tests },
+ { "entryconn/", entryconn_tests },
{ "entrynodes/", entrynodes_tests },
+ { "guardfraction/", guardfraction_tests },
{ "extorport/", extorport_tests },
- { "control/", controller_event_tests },
{ "hs/", hs_tests },
+ { "introduce/", introduce_tests },
{ "nodelist/", nodelist_tests },
- { "routerkeys/", routerkeys_tests },
{ "oom/", oom_tests },
- { "accounting/", accounting_tests },
+ { "options/", options_tests },
{ "policy/" , policy_tests },
- { "status/" , status_tests },
- { "routerset/" , routerset_tests },
- { "channel/", channel_tests },
- { "channeltls/", channeltls_tests },
+ { "pt/", pt_tests },
{ "relay/" , relay_tests },
+ { "relaycell/", relaycell_tests },
+ { "replaycache/", replaycache_tests },
+ { "routerkeys/", routerkeys_tests },
+ { "routerlist/", routerlist_tests },
+ { "routerset/" , routerset_tests },
{ "scheduler/", scheduler_tests },
+ { "socks/", socks_tests },
+ { "status/" , status_tests },
+ { "util/", util_tests },
+ { "util/logging/", logging_tests },
+ { "util/thread/", thread_tests },
END_OF_GROUPS
};
-/** Main entry point for unit test code: parse the command line, and run
- * some unit tests. */
-int
-main(int c, const char **v)
-{
- or_options_t *options;
- char *errmsg = NULL;
- int i, i_out;
- int loglevel = LOG_ERR;
- int accel_crypto = 0;
-
-#ifdef USE_DMALLOC
- {
- int r = CRYPTO_set_mem_ex_functions(tor_malloc_, tor_realloc_, tor_free_);
- tor_assert(r);
- }
-#endif
-
- update_approx_time(time(NULL));
- options = options_new();
- tor_threads_init();
- init_logging(1);
- configure_backtrace_handler(get_version());
-
- for (i_out = i = 1; i < c; ++i) {
- if (!strcmp(v[i], "--warn")) {
- loglevel = LOG_WARN;
- } else if (!strcmp(v[i], "--notice")) {
- loglevel = LOG_NOTICE;
- } else if (!strcmp(v[i], "--info")) {
- loglevel = LOG_INFO;
- } else if (!strcmp(v[i], "--debug")) {
- loglevel = LOG_DEBUG;
- } else if (!strcmp(v[i], "--accel")) {
- accel_crypto = 1;
- } else {
- v[i_out++] = v[i];
- }
- }
- c = i_out;
-
- {
- log_severity_list_t s;
- memset(&s, 0, sizeof(s));
- set_log_severity_config(loglevel, LOG_ERR, &s);
- add_stream_log(&s, "", fileno(stdout));
- }
-
- options->command = CMD_RUN_UNITTESTS;
- if (crypto_global_init(accel_crypto, NULL, NULL)) {
- printf("Can't initialize crypto subsystem; exiting.\n");
- return 1;
- }
- crypto_set_tls_dh_prime(NULL);
- crypto_seed_rng(1);
- rep_hist_init();
- network_init();
- setup_directory();
- options_init(options);
- options->DataDirectory = tor_strdup(temp_dir);
- options->EntryStatistics = 1;
- if (set_options(options, &errmsg) < 0) {
- printf("Failed to set initial options: %s\n", errmsg);
- tor_free(errmsg);
- return 1;
- }
-
- atexit(remove_directory);
-
- have_failed = (tinytest_main(c, v, testgroups) != 0);
-
- free_pregenerated_keys();
-#ifdef USE_DMALLOC
- tor_free_all(0);
- dmalloc_log_unfreed();
-#endif
-
- if (have_failed)
- return 1;
- else
- return 0;
-}
-
diff --git a/src/test/test.h b/src/test/test.h
index 48037a5ba3..b0c0946ac4 100644
--- a/src/test/test.h
+++ b/src/test/test.h
@@ -37,7 +37,7 @@
#define test_memeq_hex(expr1, hex) test_mem_op_hex(expr1, OP_EQ, hex)
#define tt_double_op(a,op,b) \
- tt_assert_test_type(a,b,#a" "#op" "#b,double,(val1_ op val2_),"%f", \
+ tt_assert_test_type(a,b,#a" "#op" "#b,double,(val1_ op val2_),"%g", \
TT_EXIT_TEST_FUNCTION)
#ifdef _MSC_VER
@@ -158,5 +158,7 @@ crypto_pk_t *pk_generate(int idx);
#define NS_MOCK(name) MOCK(name, NS(name))
#define NS_UNMOCK(name) UNMOCK(name)
+extern const struct testcase_setup_t passthrough_setup;
+
#endif
diff --git a/src/test/test_address.c b/src/test/test_address.c
new file mode 100644
index 0000000000..d13d678f3d
--- /dev/null
+++ b/src/test/test_address.c
@@ -0,0 +1,657 @@
+/* Copyright (c) 2014-2015, The Tor Project, Inc. */
+/* See LICENSE for licensing information */
+
+#define ADDRESS_PRIVATE
+
+#ifdef _WIN32
+#include <winsock2.h>
+/* For access to structs needed by GetAdaptersAddresses */
+#undef _WIN32_WINNT
+#define _WIN32_WINNT 0x0501
+#include <iphlpapi.h>
+#endif
+
+#ifdef HAVE_IFADDRS_TO_SMARTLIST
+#include <net/if.h>
+#include <ifaddrs.h>
+#endif
+
+#ifdef HAVE_IFCONF_TO_SMARTLIST
+#ifdef HAVE_SYS_IOCTL_H
+#include <sys/ioctl.h>
+#endif
+#include <net/if.h>
+#endif
+
+#include "or.h"
+#include "address.h"
+#include "test.h"
+
+/** Return 1 iff <b>sockaddr1</b> and <b>sockaddr2</b> represent
+ * the same IP address and port combination. Otherwise, return 0.
+ */
+static uint8_t
+sockaddr_in_are_equal(struct sockaddr_in *sockaddr1,
+ struct sockaddr_in *sockaddr2)
+{
+ return ((sockaddr1->sin_family == sockaddr2->sin_family) &&
+ (sockaddr1->sin_port == sockaddr2->sin_port) &&
+ (sockaddr1->sin_addr.s_addr == sockaddr2->sin_addr.s_addr));
+}
+
+/** Return 1 iff <b>sockaddr1</b> and <b>sockaddr2</b> represent
+ * the same IP address and port combination. Otherwise, return 0.
+ */
+static uint8_t
+sockaddr_in6_are_equal(struct sockaddr_in6 *sockaddr1,
+ struct sockaddr_in6 *sockaddr2)
+{
+ return ((sockaddr1->sin6_family == sockaddr2->sin6_family) &&
+ (sockaddr1->sin6_port == sockaddr2->sin6_port) &&
+ (tor_memeq(sockaddr1->sin6_addr.s6_addr,
+ sockaddr2->sin6_addr.s6_addr,16)));
+}
+
+/** Create a sockaddr_in structure from IP address string <b>ip_str</b>.
+ *
+ * If <b>out</b> is not NULL, write the result
+ * to the memory address in <b>out</b>. Otherwise, allocate the memory
+ * for result. On success, return pointer to result. Otherwise, return
+ * NULL.
+ */
+static struct sockaddr_in *
+sockaddr_in_from_string(const char *ip_str, struct sockaddr_in *out)
+{
+ // [FIXME: add some error checking?]
+ if (!out)
+ out = tor_malloc_zero(sizeof(struct sockaddr_in));
+
+ out->sin_family = AF_INET;
+ out->sin_port = 0;
+ tor_inet_pton(AF_INET,ip_str,&(out->sin_addr));
+
+ return out;
+}
+
+/** Return 1 iff <b>smartlist</b> contains a tor_addr_t structure
+ * that points to 127.0.0.1. Otherwise, return 0.
+ */
+static int
+smartlist_contains_localhost_tor_addr(smartlist_t *smartlist)
+{
+ int found_localhost = 0;
+
+ struct sockaddr_in *sockaddr_localhost;
+ struct sockaddr_storage *sockaddr_to_check;
+
+ sockaddr_localhost = sockaddr_in_from_string("127.0.0.1",NULL);
+
+ sockaddr_to_check = tor_malloc(sizeof(struct sockaddr_in));
+
+ SMARTLIST_FOREACH_BEGIN(smartlist, tor_addr_t *, tor_addr) {
+ tor_addr_to_sockaddr(tor_addr,0,(struct sockaddr *)sockaddr_to_check,
+ sizeof(struct sockaddr_in));
+
+ if (sockaddr_in_are_equal((struct sockaddr_in *)sockaddr_to_check,
+ sockaddr_localhost)) {
+ found_localhost = 1;
+ break;
+ }
+ } SMARTLIST_FOREACH_END(tor_addr);
+
+ tor_free(sockaddr_localhost);
+ tor_free(sockaddr_to_check);
+
+ return found_localhost;
+}
+
+#ifdef HAVE_IFADDRS_TO_SMARTLIST
+static void
+test_address_ifaddrs_to_smartlist(void *arg)
+{
+ struct ifaddrs *ifa = NULL;
+ struct ifaddrs *ifa_ipv4 = NULL;
+ struct ifaddrs *ifa_ipv6 = NULL;
+ struct sockaddr_in *ipv4_sockaddr_local = NULL;
+ struct sockaddr_in *netmask_slash8 = NULL;
+ struct sockaddr_in *ipv4_sockaddr_remote = NULL;
+ struct sockaddr_in6 *ipv6_sockaddr = NULL;
+ smartlist_t *smartlist = NULL;
+ tor_addr_t *tor_addr = NULL;
+ struct sockaddr *sockaddr_to_check = NULL;
+ socklen_t addr_len;
+
+ (void)arg;
+
+ netmask_slash8 = sockaddr_in_from_string("255.0.0.0",NULL);
+ ipv4_sockaddr_local = sockaddr_in_from_string("127.0.0.1",NULL);
+ ipv4_sockaddr_remote = sockaddr_in_from_string("128.52.160.20",NULL);
+
+ ipv6_sockaddr = tor_malloc(sizeof(struct sockaddr_in6));
+ ipv6_sockaddr->sin6_family = AF_INET6;
+ ipv6_sockaddr->sin6_port = 0;
+ tor_inet_pton(AF_INET6, "2001:db8:8714:3a90::12",
+ &(ipv6_sockaddr->sin6_addr));
+
+ ifa = tor_malloc(sizeof(struct ifaddrs));
+ ifa_ipv4 = tor_malloc(sizeof(struct ifaddrs));
+ ifa_ipv6 = tor_malloc(sizeof(struct ifaddrs));
+
+ ifa->ifa_next = ifa_ipv4;
+ ifa->ifa_name = tor_strdup("eth0");
+ ifa->ifa_flags = IFF_UP | IFF_RUNNING;
+ ifa->ifa_addr = (struct sockaddr *)ipv4_sockaddr_local;
+ ifa->ifa_netmask = (struct sockaddr *)netmask_slash8;
+ ifa->ifa_dstaddr = NULL;
+ ifa->ifa_data = NULL;
+
+ ifa_ipv4->ifa_next = ifa_ipv6;
+ ifa_ipv4->ifa_name = tor_strdup("eth1");
+ ifa_ipv4->ifa_flags = IFF_UP | IFF_RUNNING;
+ ifa_ipv4->ifa_addr = (struct sockaddr *)ipv4_sockaddr_remote;
+ ifa_ipv4->ifa_netmask = (struct sockaddr *)netmask_slash8;
+ ifa_ipv4->ifa_dstaddr = NULL;
+ ifa_ipv4->ifa_data = NULL;
+
+ ifa_ipv6->ifa_next = NULL;
+ ifa_ipv6->ifa_name = tor_strdup("eth2");
+ ifa_ipv6->ifa_flags = IFF_UP | IFF_RUNNING;
+ ifa_ipv6->ifa_addr = (struct sockaddr *)ipv6_sockaddr;
+ ifa_ipv6->ifa_netmask = NULL;
+ ifa_ipv6->ifa_dstaddr = NULL;
+ ifa_ipv6->ifa_data = NULL;
+
+ smartlist = ifaddrs_to_smartlist(ifa);
+
+ tt_assert(smartlist);
+ tt_assert(smartlist_len(smartlist) == 3);
+
+ sockaddr_to_check = tor_malloc(sizeof(struct sockaddr_in6));
+
+ tor_addr = smartlist_get(smartlist,0);
+ addr_len =
+ tor_addr_to_sockaddr(tor_addr,0,sockaddr_to_check,
+ sizeof(struct sockaddr_in));
+
+ tt_int_op(addr_len,==,sizeof(struct sockaddr_in));
+ tt_assert(sockaddr_in_are_equal((struct sockaddr_in *)sockaddr_to_check,
+ ipv4_sockaddr_local));
+
+ tor_addr = smartlist_get(smartlist,1);
+ addr_len =
+ tor_addr_to_sockaddr(tor_addr,0,sockaddr_to_check,
+ sizeof(struct sockaddr_in));
+
+ tt_int_op(addr_len,==,sizeof(struct sockaddr_in));
+ tt_assert(sockaddr_in_are_equal((struct sockaddr_in *)sockaddr_to_check,
+ ipv4_sockaddr_remote));
+
+ tor_addr = smartlist_get(smartlist,2);
+ addr_len =
+ tor_addr_to_sockaddr(tor_addr,0,sockaddr_to_check,
+ sizeof(struct sockaddr_in6));
+
+ tt_int_op(addr_len,==,sizeof(struct sockaddr_in6));
+ tt_assert(sockaddr_in6_are_equal((struct sockaddr_in6*)sockaddr_to_check,
+ ipv6_sockaddr));
+
+ done:
+ tor_free(netmask_slash8);
+ tor_free(ipv4_sockaddr_local);
+ tor_free(ipv4_sockaddr_remote);
+ tor_free(ipv6_sockaddr);
+ tor_free(ifa->ifa_name);
+ tor_free(ifa_ipv4->ifa_name);
+ tor_free(ifa_ipv6->ifa_name);
+ tor_free(ifa);
+ tor_free(ifa_ipv4);
+ tor_free(ifa_ipv6);
+ tor_free(sockaddr_to_check);
+ if (smartlist) {
+ SMARTLIST_FOREACH(smartlist, tor_addr_t *, t, tor_free(t));
+ smartlist_free(smartlist);
+ }
+ return;
+}
+
+static void
+test_address_get_if_addrs_ifaddrs(void *arg)
+{
+
+ smartlist_t *results = NULL;
+
+ (void)arg;
+
+ results = get_interface_addresses_ifaddrs(LOG_ERR);
+
+ tt_int_op(smartlist_len(results),>=,1);
+ tt_assert(smartlist_contains_localhost_tor_addr(results));
+
+ done:
+ SMARTLIST_FOREACH(results, tor_addr_t *, t, tor_free(t));
+ smartlist_free(results);
+ return;
+}
+
+#endif
+
+#ifdef HAVE_IP_ADAPTER_TO_SMARTLIST
+
+static void
+test_address_get_if_addrs_win32(void *arg)
+{
+
+ smartlist_t *results = NULL;
+
+ (void)arg;
+
+ results = get_interface_addresses_win32(LOG_ERR);
+
+ tt_int_op(smartlist_len(results),>=,1);
+ tt_assert(smartlist_contains_localhost_tor_addr(results));
+
+ done:
+ SMARTLIST_FOREACH(results, tor_addr_t *, t, tor_free(t));
+ tor_free(results);
+ return;
+}
+
+static void
+test_address_ip_adapter_addresses_to_smartlist(void *arg)
+{
+
+ IP_ADAPTER_ADDRESSES *addrs1;
+ IP_ADAPTER_ADDRESSES *addrs2;
+
+ IP_ADAPTER_UNICAST_ADDRESS *unicast11;
+ IP_ADAPTER_UNICAST_ADDRESS *unicast12;
+ IP_ADAPTER_UNICAST_ADDRESS *unicast21;
+
+ smartlist_t *result = NULL;
+
+ struct sockaddr_in *sockaddr_test1;
+ struct sockaddr_in *sockaddr_test2;
+ struct sockaddr_in *sockaddr_localhost;
+ struct sockaddr_in *sockaddr_to_check;
+
+ tor_addr_t *tor_addr;
+
+ (void)arg;
+ (void)sockaddr_in6_are_equal;
+
+ sockaddr_to_check = tor_malloc_zero(sizeof(struct sockaddr_in));
+
+ addrs1 =
+ tor_malloc_zero(sizeof(IP_ADAPTER_ADDRESSES));
+
+ addrs1->FirstUnicastAddress =
+ unicast11 = tor_malloc_zero(sizeof(IP_ADAPTER_UNICAST_ADDRESS));
+ sockaddr_test1 = sockaddr_in_from_string("86.59.30.40",NULL);
+ unicast11->Address.lpSockaddr = (LPSOCKADDR)sockaddr_test1;
+
+ unicast11->Next = unicast12 =
+ tor_malloc_zero(sizeof(IP_ADAPTER_UNICAST_ADDRESS));
+ sockaddr_test2 = sockaddr_in_from_string("93.95.227.222", NULL);
+ unicast12->Address.lpSockaddr = (LPSOCKADDR)sockaddr_test2;
+
+ addrs1->Next = addrs2 =
+ tor_malloc_zero(sizeof(IP_ADAPTER_ADDRESSES));
+
+ addrs2->FirstUnicastAddress =
+ unicast21 = tor_malloc_zero(sizeof(IP_ADAPTER_UNICAST_ADDRESS));
+ sockaddr_localhost = sockaddr_in_from_string("127.0.0.1", NULL);
+ unicast21->Address.lpSockaddr = (LPSOCKADDR)sockaddr_localhost;
+
+ result = ip_adapter_addresses_to_smartlist(addrs1);
+
+ tt_assert(result);
+ tt_assert(smartlist_len(result) == 3);
+
+ tor_addr = smartlist_get(result,0);
+
+ tor_addr_to_sockaddr(tor_addr,0,(struct sockaddr *)sockaddr_to_check,
+ sizeof(struct sockaddr_in));
+
+ tt_assert(sockaddr_in_are_equal(sockaddr_test1,sockaddr_to_check));
+
+ tor_addr = smartlist_get(result,1);
+
+ tor_addr_to_sockaddr(tor_addr,0,(struct sockaddr *)sockaddr_to_check,
+ sizeof(struct sockaddr_in));
+
+ tt_assert(sockaddr_in_are_equal(sockaddr_test2,sockaddr_to_check));
+
+ tor_addr = smartlist_get(result,2);
+
+ tor_addr_to_sockaddr(tor_addr,0,(struct sockaddr *)sockaddr_to_check,
+ sizeof(struct sockaddr_in));
+
+ tt_assert(sockaddr_in_are_equal(sockaddr_localhost,sockaddr_to_check));
+
+ done:
+ SMARTLIST_FOREACH(result, tor_addr_t *, t, tor_free(t));
+ smartlist_free(result);
+ tor_free(addrs1);
+ tor_free(addrs2);
+ tor_free(unicast11->Address.lpSockaddr);
+ tor_free(unicast11);
+ tor_free(unicast12->Address.lpSockaddr);
+ tor_free(unicast12);
+ tor_free(unicast21->Address.lpSockaddr);
+ tor_free(unicast21);
+ tor_free(sockaddr_to_check);
+ return;
+}
+#endif
+
+#ifdef HAVE_IFCONF_TO_SMARTLIST
+
+static void
+test_address_ifreq_to_smartlist(void *arg)
+{
+ smartlist_t *results = NULL;
+ const tor_addr_t *tor_addr = NULL;
+ struct sockaddr_in *sockaddr = NULL;
+ struct sockaddr_in *sockaddr_eth1 = NULL;
+ struct sockaddr_in *sockaddr_to_check = NULL;
+
+ struct ifconf *ifc;
+ struct ifreq *ifr;
+ struct ifreq *ifr_next;
+
+ socklen_t addr_len;
+
+ (void)arg;
+
+ sockaddr_to_check = tor_malloc(sizeof(struct sockaddr_in));
+
+ ifr = tor_malloc(sizeof(struct ifreq));
+ memset(ifr,0,sizeof(struct ifreq));
+ strlcpy(ifr->ifr_name,"lo",3);
+ sockaddr = (struct sockaddr_in *) &(ifr->ifr_ifru.ifru_addr);
+ sockaddr_in_from_string("127.0.0.1",sockaddr);
+
+ ifc = tor_malloc(sizeof(struct ifconf));
+ memset(ifc,0,sizeof(struct ifconf));
+ ifc->ifc_len = sizeof(struct ifreq);
+ ifc->ifc_ifcu.ifcu_req = ifr;
+
+ results = ifreq_to_smartlist(ifc->ifc_buf,ifc->ifc_len);
+ tt_int_op(smartlist_len(results),==,1);
+
+ tor_addr = smartlist_get(results, 0);
+ addr_len =
+ tor_addr_to_sockaddr(tor_addr,0,(struct sockaddr *)sockaddr_to_check,
+ sizeof(struct sockaddr_in));
+
+ tt_int_op(addr_len,==,sizeof(struct sockaddr_in));
+ tt_assert(sockaddr_in_are_equal(sockaddr,sockaddr_to_check));
+
+ ifr = tor_realloc(ifr,2*sizeof(struct ifreq));
+ ifr_next = ifr+1;
+ strlcpy(ifr_next->ifr_name,"eth1",5);
+ ifc->ifc_len = 2*sizeof(struct ifreq);
+ ifc->ifc_ifcu.ifcu_req = ifr;
+ sockaddr = (struct sockaddr_in *) &(ifr->ifr_ifru.ifru_addr);
+
+ sockaddr_eth1 = (struct sockaddr_in *) &(ifr_next->ifr_ifru.ifru_addr);
+ sockaddr_in_from_string("192.168.10.55",sockaddr_eth1);
+ SMARTLIST_FOREACH(results, tor_addr_t *, t, tor_free(t));
+ smartlist_free(results);
+
+ results = ifreq_to_smartlist(ifc->ifc_buf,ifc->ifc_len);
+ tt_int_op(smartlist_len(results),==,2);
+
+ tor_addr = smartlist_get(results, 0);
+ addr_len =
+ tor_addr_to_sockaddr(tor_addr,0,(struct sockaddr *)sockaddr_to_check,
+ sizeof(struct sockaddr_in));
+
+ tt_int_op(addr_len,==,sizeof(struct sockaddr_in));
+ tt_assert(sockaddr_in_are_equal(sockaddr,sockaddr_to_check));
+
+ tor_addr = smartlist_get(results, 1);
+ addr_len =
+ tor_addr_to_sockaddr(tor_addr,0,(struct sockaddr *)sockaddr_to_check,
+ sizeof(struct sockaddr_in));
+
+ tt_int_op(addr_len,==,sizeof(struct sockaddr_in));
+ tt_assert(sockaddr_in_are_equal(sockaddr_eth1,sockaddr_to_check));
+
+ done:
+ tor_free(sockaddr_to_check);
+ SMARTLIST_FOREACH(results, tor_addr_t *, t, tor_free(t));
+ smartlist_free(results);
+ tor_free(ifc);
+ tor_free(ifr);
+ return;
+}
+
+static void
+test_address_get_if_addrs_ioctl(void *arg)
+{
+
+ smartlist_t *result = NULL;
+
+ (void)arg;
+
+ result = get_interface_addresses_ioctl(LOG_ERR);
+
+ tt_assert(result);
+ tt_int_op(smartlist_len(result),>=,1);
+
+ tt_assert(smartlist_contains_localhost_tor_addr(result));
+
+ done:
+ if (result) {
+ SMARTLIST_FOREACH(result, tor_addr_t *, t, tor_free(t));
+ smartlist_free(result);
+ }
+ return;
+}
+
+#endif
+
+#define FAKE_SOCKET_FD (42)
+
+static tor_socket_t
+fake_open_socket(int domain, int type, int protocol)
+{
+ (void)domain;
+ (void)type;
+ (void)protocol;
+
+ return FAKE_SOCKET_FD;
+}
+
+static int last_connected_socket_fd = 0;
+
+static int connect_retval = 0;
+
+static tor_socket_t
+pretend_to_connect(tor_socket_t socket, const struct sockaddr *address,
+ socklen_t address_len)
+{
+ (void)address;
+ (void)address_len;
+
+ last_connected_socket_fd = socket;
+
+ return connect_retval;
+}
+
+static struct sockaddr *mock_addr = NULL;
+
+static int
+fake_getsockname(tor_socket_t socket, struct sockaddr *address,
+ socklen_t *address_len)
+{
+ socklen_t bytes_to_copy = 0;
+ (void) socket;
+
+ if (!mock_addr)
+ return -1;
+
+ if (mock_addr->sa_family == AF_INET) {
+ bytes_to_copy = sizeof(struct sockaddr_in);
+ } else if (mock_addr->sa_family == AF_INET6) {
+ bytes_to_copy = sizeof(struct sockaddr_in6);
+ } else {
+ return -1;
+ }
+
+ if (*address_len < bytes_to_copy) {
+ return -1;
+ }
+
+ memcpy(address,mock_addr,bytes_to_copy);
+ *address_len = bytes_to_copy;
+
+ return 0;
+}
+
+static void
+test_address_udp_socket_trick_whitebox(void *arg)
+{
+ int hack_retval;
+ tor_addr_t *addr_from_hack = tor_malloc_zero(sizeof(tor_addr_t));
+ struct sockaddr_in6 *mock_addr6;
+ struct sockaddr_in6 *ipv6_to_check =
+ tor_malloc_zero(sizeof(struct sockaddr_in6));
+
+ (void)arg;
+
+ MOCK(tor_open_socket,fake_open_socket);
+ MOCK(tor_connect_socket,pretend_to_connect);
+ MOCK(tor_getsockname,fake_getsockname);
+
+ mock_addr = tor_malloc_zero(sizeof(struct sockaddr_storage));
+ sockaddr_in_from_string("23.32.246.118",(struct sockaddr_in *)mock_addr);
+
+ hack_retval =
+ get_interface_address6_via_udp_socket_hack(LOG_DEBUG,
+ AF_INET, addr_from_hack);
+
+ tt_int_op(hack_retval,==,0);
+ tt_assert(tor_addr_eq_ipv4h(addr_from_hack, 0x1720f676));
+
+ /* Now, lets do an IPv6 case. */
+ memset(mock_addr,0,sizeof(struct sockaddr_storage));
+
+ mock_addr6 = (struct sockaddr_in6 *)mock_addr;
+ mock_addr6->sin6_family = AF_INET6;
+ mock_addr6->sin6_port = 0;
+ tor_inet_pton(AF_INET6,"2001:cdba::3257:9652",&(mock_addr6->sin6_addr));
+
+ hack_retval =
+ get_interface_address6_via_udp_socket_hack(LOG_DEBUG,
+ AF_INET6, addr_from_hack);
+
+ tt_int_op(hack_retval,==,0);
+
+ tor_addr_to_sockaddr(addr_from_hack,0,(struct sockaddr *)ipv6_to_check,
+ sizeof(struct sockaddr_in6));
+
+ tt_assert(sockaddr_in6_are_equal(mock_addr6,ipv6_to_check));
+
+ UNMOCK(tor_open_socket);
+ UNMOCK(tor_connect_socket);
+ UNMOCK(tor_getsockname);
+
+ done:
+ tor_free(ipv6_to_check);
+ tor_free(mock_addr);
+ tor_free(addr_from_hack);
+ return;
+}
+
+static void
+test_address_udp_socket_trick_blackbox(void *arg)
+{
+ /* We want get_interface_address6_via_udp_socket_hack() to yield
+ * the same valid address that get_interface_address6() returns.
+ * If the latter is unable to find a valid address, we want
+ * _hack() to fail and return-1.
+ *
+ * Furthermore, we want _hack() never to crash, even if
+ * get_interface_addresses_raw() is returning NULL.
+ */
+
+ tor_addr_t addr4;
+ tor_addr_t addr4_to_check;
+ tor_addr_t addr6;
+ tor_addr_t addr6_to_check;
+ int retval, retval_reference;
+
+ (void)arg;
+
+#if 0
+ retval_reference = get_interface_address6(LOG_DEBUG,AF_INET,&addr4);
+ retval = get_interface_address6_via_udp_socket_hack(LOG_DEBUG,
+ AF_INET,
+ &addr4_to_check);
+
+ tt_int_op(retval,==,retval_reference);
+ tt_assert( (retval == -1 && retval_reference == -1) ||
+ (tor_addr_compare(&addr4,&addr4_to_check,CMP_EXACT) == 0) );
+
+ retval_reference = get_interface_address6(LOG_DEBUG,AF_INET6,&addr6);
+ retval = get_interface_address6_via_udp_socket_hack(LOG_DEBUG,
+ AF_INET6,
+ &addr6_to_check);
+
+ tt_int_op(retval,==,retval_reference);
+ tt_assert( (retval == -1 && retval_reference == -1) ||
+ (tor_addr_compare(&addr6,&addr6_to_check,CMP_EXACT) == 0) );
+
+#else
+ /* Both of the blackbox test cases fail horribly if:
+ * * The host has no external addreses.
+ * * There are multiple interfaces with either AF_INET or AF_INET6.
+ * * The last address isn't the one associated with the default route.
+ *
+ * The tests SHOULD be re-enabled when #12377 is fixed correctly, but till
+ * then this fails a lot, in situations we expect failures due to knowing
+ * about the code being broken.
+ */
+
+ (void)addr4_to_check;
+ (void)addr6_to_check;
+ (void)addr6;
+ (void) retval_reference;
+#endif
+
+ /* When family is neither AF_INET nor AF_INET6, we want _hack to
+ * fail and return -1.
+ */
+
+ retval = get_interface_address6_via_udp_socket_hack(LOG_DEBUG,
+ AF_INET+AF_INET6,&addr4);
+
+ tt_assert(retval == -1);
+
+ done:
+ return;
+}
+
+#define ADDRESS_TEST(name, flags) \
+ { #name, test_address_ ## name, flags, NULL, NULL }
+
+struct testcase_t address_tests[] = {
+ ADDRESS_TEST(udp_socket_trick_whitebox, TT_FORK),
+ ADDRESS_TEST(udp_socket_trick_blackbox, TT_FORK),
+#ifdef HAVE_IFADDRS_TO_SMARTLIST
+ ADDRESS_TEST(get_if_addrs_ifaddrs, TT_FORK),
+ ADDRESS_TEST(ifaddrs_to_smartlist, 0),
+#endif
+#ifdef HAVE_IP_ADAPTER_TO_SMARTLIST
+ ADDRESS_TEST(get_if_addrs_win32, TT_FORK),
+ ADDRESS_TEST(ip_adapter_addresses_to_smartlist, 0),
+#endif
+#ifdef HAVE_IFCONF_TO_SMARTLIST
+ ADDRESS_TEST(get_if_addrs_ioctl, TT_FORK),
+ ADDRESS_TEST(ifreq_to_smartlist, 0),
+#endif
+ END_OF_TESTCASES
+};
+
diff --git a/src/test/test_bt.sh.in b/src/test/test_bt.sh.in
new file mode 100644
index 0000000000..ca8be965d4
--- /dev/null
+++ b/src/test/test_bt.sh.in
@@ -0,0 +1,9 @@
+#!@SHELL@
+# Test backtrace functionality.
+
+exitcode=0
+
+@builddir@/src/test/test-bt-cl assert | @PYTHON@ @abs_top_srcdir@/src/test/bt_test.py || exitcode=1
+@builddir@/src/test/test-bt-cl crash | @PYTHON@ @abs_top_srcdir@/src/test/bt_test.py || exitcode=1
+
+exit ${exitcode}
diff --git a/src/test/test_bt_cl.c b/src/test/test_bt_cl.c
index 0fa0cd5c0a..01c621eb0e 100644
--- a/src/test/test_bt_cl.c
+++ b/src/test/test_bt_cl.c
@@ -5,6 +5,8 @@
#include <stdio.h>
#include <stdlib.h>
+/* To prevent 'assert' from going away. */
+#undef TOR_COVERAGE
#include "or.h"
#include "util.h"
#include "backtrace.h"
diff --git a/src/test/test_buffers.c b/src/test/test_buffers.c
index 8ca8be567f..22ee6aa8e3 100644
--- a/src/test/test_buffers.c
+++ b/src/test/test_buffers.c
@@ -193,7 +193,6 @@ test_buffers_basic(void *arg)
buf_free(buf);
if (buf2)
buf_free(buf2);
- buf_shrink_freelists(1);
}
static void
@@ -297,12 +296,9 @@ test_buffer_pullup(void *arg)
buf_free(buf);
buf = NULL;
- buf_shrink_freelists(1);
-
tt_int_op(buf_get_total_allocation(), OP_EQ, 0);
done:
buf_free(buf);
- buf_shrink_freelists(1);
tor_free(stuff);
tor_free(tmp);
}
@@ -370,7 +366,6 @@ test_buffer_copy(void *arg)
generic_buffer_free(buf);
if (buf2)
generic_buffer_free(buf2);
- buf_shrink_freelists(1);
}
static void
@@ -445,7 +440,6 @@ test_buffer_ext_or_cmd(void *arg)
ext_or_cmd_free(cmd);
generic_buffer_free(buf);
tor_free(tmp);
- buf_shrink_freelists(1);
}
static void
@@ -481,20 +475,13 @@ test_buffer_allocation_tracking(void *arg)
fetch_from_buf(junk, 4096, buf1); /* drop a 1k chunk... */
tt_int_op(buf_allocation(buf1), OP_EQ, 3*4096); /* now 3 4k chunks */
-#ifdef ENABLE_BUF_FREELISTS
- tt_int_op(buf_get_total_allocation(), OP_EQ, 16384); /* that chunk went onto
- the freelist. */
-#else
tt_int_op(buf_get_total_allocation(), OP_EQ, 12288); /* that chunk was really
freed. */
-#endif
write_to_buf(junk, 4000, buf2);
tt_int_op(buf_allocation(buf2), OP_EQ, 4096); /* another 4k chunk. */
/*
- * If we're using freelists, size stays at 16384 because we just pulled a
- * chunk from the freelist. If we aren't, we bounce back up to 16384 by
- * allocating a new chunk.
+ * We bounce back up to 16384 by allocating a new chunk.
*/
tt_int_op(buf_get_total_allocation(), OP_EQ, 16384);
write_to_buf(junk, 4000, buf2);
@@ -512,17 +499,14 @@ test_buffer_allocation_tracking(void *arg)
buf2 = NULL;
tt_int_op(buf_get_total_allocation(), OP_LT, 4008000);
- buf_shrink_freelists(1);
tt_int_op(buf_get_total_allocation(), OP_EQ, buf_allocation(buf1));
buf_free(buf1);
buf1 = NULL;
- buf_shrink_freelists(1);
tt_int_op(buf_get_total_allocation(), OP_EQ, 0);
done:
buf_free(buf1);
buf_free(buf2);
- buf_shrink_freelists(1);
tor_free(junk);
}
diff --git a/src/test/test_cell_queue.c b/src/test/test_cell_queue.c
index effd316f34..ed34df2ea2 100644
--- a/src/test/test_cell_queue.c
+++ b/src/test/test_cell_queue.c
@@ -16,10 +16,6 @@ test_cq_manip(void *arg)
cell_t cell;
(void) arg;
-#ifdef ENABLE_MEMPOOLS
- init_cell_pool();
-#endif /* ENABLE_MEMPOOLS */
-
cell_queue_init(&cq);
tt_int_op(cq.n, OP_EQ, 0);
@@ -99,10 +95,6 @@ test_cq_manip(void *arg)
packed_cell_free(pc_tmp);
cell_queue_clear(&cq);
-
-#ifdef ENABLE_MEMPOOLS
- free_cell_pool();
-#endif /* ENABLE_MEMPOOLS */
}
static void
@@ -114,10 +106,6 @@ test_circuit_n_cells(void *arg)
(void)arg;
-#ifdef ENABLE_MEMPOOLS
- init_cell_pool();
-#endif /* ENABLE_MEMPOOLS */
-
pc1 = packed_cell_new();
pc2 = packed_cell_new();
pc3 = packed_cell_new();
@@ -144,10 +132,6 @@ test_circuit_n_cells(void *arg)
done:
circuit_free(TO_CIRCUIT(or_c));
circuit_free(TO_CIRCUIT(origin_c));
-
-#ifdef ENABLE_MEMPOOLS
- free_cell_pool();
-#endif /* ENABLE_MEMPOOLS */
}
struct testcase_t cell_queue_tests[] = {
diff --git a/src/test/test_channel.c b/src/test/test_channel.c
index 99633a4026..6cf66493a8 100644
--- a/src/test/test_channel.c
+++ b/src/test/test_channel.c
@@ -650,10 +650,6 @@ test_channel_flush(void *arg)
(void)arg;
-#ifdef ENABLE_MEMPOOLS
- init_cell_pool();
-#endif /* ENABLE_MEMPOOLS */
-
ch = new_fake_channel();
tt_assert(ch);
@@ -695,9 +691,6 @@ test_channel_flush(void *arg)
done:
tor_free(ch);
-#ifdef ENABLE_MEMPOOLS
- free_cell_pool();
-#endif /* ENABLE_MEMPOOLS */
return;
}
@@ -715,10 +708,6 @@ test_channel_flushmux(void *arg)
(void)arg;
-#ifdef ENABLE_MEMPOOLS
- init_cell_pool();
-#endif /* ENABLE_MEMPOOLS */
-
/* Install mocks we need for this test */
MOCK(channel_flush_from_first_active_circuit,
chan_test_channel_flush_from_first_active_circuit_mock);
@@ -778,10 +767,6 @@ test_channel_flushmux(void *arg)
test_chan_accept_cells = 0;
-#ifdef ENABLE_MEMPOOLS
- free_cell_pool();
-#endif /* ENABLE_MEMPOOLS */
-
return;
}
@@ -1300,10 +1285,6 @@ test_channel_queue_impossible(void *arg)
(void)arg;
-#ifdef ENABLE_MEMPOOLS
- init_cell_pool();
-#endif /* ENABLE_MEMPOOLS */
-
ch = new_fake_channel();
tt_assert(ch);
@@ -1430,9 +1411,6 @@ test_channel_queue_impossible(void *arg)
done:
free_fake_channel(ch);
-#ifdef ENABLE_MEMPOOLS
- free_cell_pool();
-#endif /* ENABLE_MEMPOOLS */
/*
* Doing that meant that we couldn't correctly adjust the queue size
@@ -1575,10 +1553,6 @@ test_channel_write(void *arg)
(void)arg;
-#ifdef ENABLE_MEMPOOLS
- init_cell_pool();
-#endif /* ENABLE_MEMPOOLS */
-
packed_cell = packed_cell_new();
tt_assert(packed_cell);
@@ -1675,10 +1649,6 @@ test_channel_write(void *arg)
packed_cell = NULL;
tt_assert(test_cells_written == old_count);
-#ifdef ENABLE_MEMPOOLS
- free_cell_pool();
-#endif /* ENABLE_MEMPOOLS */
-
done:
free_fake_channel(ch);
tor_free(var_cell);
diff --git a/src/test/test_checkdir.c b/src/test/test_checkdir.c
index 882e3b3a61..ae859449cb 100644
--- a/src/test/test_checkdir.c
+++ b/src/test/test_checkdir.c
@@ -11,6 +11,7 @@
#ifdef _WIN32
#define mkdir(a,b) mkdir(a)
#define tt_int_op_nowin(a,op,b) do { (void)(a); (void)(b); } while (0)
+#define umask(mask) ((void)0)
#else
#define tt_int_op_nowin(a,op,b) tt_int_op((a),op,(b))
#endif
@@ -28,6 +29,8 @@ test_checkdir_perms(void *testdata)
cpd_check_t unix_verify_optsmask;
struct stat st;
+ umask(022);
+
/* setup data directory before tests. */
tor_free(options->DataDirectory);
options->DataDirectory = tor_strdup(get_fname(subdir));
@@ -134,7 +137,7 @@ test_checkdir_perms(void *testdata)
{ #name, test_checkdir_##name, (flags), NULL, NULL }
struct testcase_t checkdir_tests[] = {
- CHECKDIR(perms, 0),
+ CHECKDIR(perms, TT_FORK),
END_OF_TESTCASES
};
diff --git a/src/test/test_circuitmux.c b/src/test/test_circuitmux.c
index 2a2a7ba145..6d93731eea 100644
--- a/src/test/test_circuitmux.c
+++ b/src/test/test_circuitmux.c
@@ -43,9 +43,6 @@ test_cmux_destroy_cell_queue(void *arg)
tor_libevent_initialize(&cfg);
scheduler_init();
-#ifdef ENABLE_MEMPOOLS
- init_cell_pool();
-#endif /* ENABLE_MEMPOOLS */
(void) arg;
cmux = circuitmux_alloc();
@@ -82,10 +79,6 @@ test_cmux_destroy_cell_queue(void *arg)
circuitmux_free(cmux);
channel_free(ch);
packed_cell_free(pc);
-
-#ifdef ENABLE_MEMPOOLS
- free_cell_pool();
-#endif /* ENABLE_MEMPOOLS */
}
struct testcase_t circuitmux_tests[] = {
diff --git a/src/test/test_cmdline_args.py b/src/test/test_cmdline_args.py
deleted file mode 100755
index c8e68e8240..0000000000
--- a/src/test/test_cmdline_args.py
+++ /dev/null
@@ -1,292 +0,0 @@
-#!/usr/bin/python
-
-import binascii
-import hashlib
-import os
-import re
-import shutil
-import subprocess
-import sys
-import tempfile
-import unittest
-
-TOR = "./src/or/tor"
-TOP_SRCDIR = "."
-
-if len(sys.argv) > 1:
- TOR = sys.argv[1]
- del sys.argv[1]
-
-if len(sys.argv) > 1:
- TOP_SRCDIR = sys.argv[1]
- del sys.argv[1]
-
-class UnexpectedSuccess(Exception):
- pass
-
-class UnexpectedFailure(Exception):
- pass
-
-if sys.version < '3':
- def b2s(b):
- return b
- def s2b(s):
- return s
- def NamedTemporaryFile():
- return tempfile.NamedTemporaryFile(delete=False)
-else:
- def b2s(b):
- return str(b, 'ascii')
- def s2b(s):
- return s.encode('ascii')
- def NamedTemporaryFile():
- return tempfile.NamedTemporaryFile(mode="w",delete=False,encoding="ascii")
-
-def contents(fn):
- f = open(fn)
- try:
- return f.read()
- finally:
- f.close()
-
-def run_tor(args, failure=False):
- p = subprocess.Popen([TOR] + args, stdout=subprocess.PIPE)
- output, _ = p.communicate()
- result = p.poll()
- if result and not failure:
- raise UnexpectedFailure()
- elif not result and failure:
- raise UnexpectedSuccess()
- return b2s(output.replace('\r\n','\n'))
-
-def spaceify_fp(fp):
- for i in range(0, len(fp), 4):
- yield fp[i:i+4]
-
-def lines(s):
- out = s.splitlines()
- if out and out[-1] == '':
- del out[-1]
- return out
-
-def strip_log_junk(line):
- m = re.match(r'([^\[]+\[[a-z]*\] *)(.*)', line)
- if not m:
- return ""+line
- return m.group(2).strip()
-
-def randstring(entropy_bytes):
- s = os.urandom(entropy_bytes)
- return b2s(binascii.b2a_hex(s))
-
-def findLineContaining(lines, s):
- for ln in lines:
- if s in ln:
- return True
- return False
-
-class CmdlineTests(unittest.TestCase):
-
- def test_version(self):
- out = run_tor(["--version"])
- self.assertTrue(out.startswith("Tor version "))
- self.assertEqual(len(lines(out)), 1)
-
- def test_quiet(self):
- out = run_tor(["--quiet", "--quumblebluffin", "1"], failure=True)
- self.assertEqual(out, "")
-
- def test_help(self):
- out = run_tor(["--help"], failure=False)
- out2 = run_tor(["-h"], failure=False)
- self.assertTrue(out.startswith("Copyright (c) 2001"))
- self.assertTrue(out.endswith(
- "tor -f <torrc> [args]\n"
- "See man page for options, or https://www.torproject.org/ for documentation.\n"))
- self.assertTrue(out == out2)
-
- def test_hush(self):
- torrc = NamedTemporaryFile()
- torrc.close()
- try:
- out = run_tor(["--hush", "-f", torrc.name,
- "--quumblebluffin", "1"], failure=True)
- finally:
- os.unlink(torrc.name)
- self.assertEqual(len(lines(out)), 2)
- ln = [ strip_log_junk(l) for l in lines(out) ]
- self.assertEqual(ln[0], "Failed to parse/validate config: Unknown option 'quumblebluffin'. Failing.")
- self.assertEqual(ln[1], "Reading config failed--see warnings above.")
-
- def test_missing_argument(self):
- out = run_tor(["--hush", "--hash-password"], failure=True)
- self.assertEqual(len(lines(out)), 2)
- ln = [ strip_log_junk(l) for l in lines(out) ]
- self.assertEqual(ln[0], "Command-line option '--hash-password' with no value. Failing.")
-
- def test_hash_password(self):
- out = run_tor(["--hash-password", "woodwose"])
- result = lines(out)[-1]
- self.assertEqual(result[:3], "16:")
- self.assertEqual(len(result), 61)
- r = binascii.a2b_hex(result[3:])
- self.assertEqual(len(r), 29)
-
- salt, how, hashed = r[:8], r[8], r[9:]
- self.assertEqual(len(hashed), 20)
- if type(how) == type("A"):
- how = ord(how)
-
- count = (16 + (how & 15)) << ((how >> 4) + 6)
- stuff = salt + s2b("woodwose")
- repetitions = count // len(stuff) + 1
- inp = stuff * repetitions
- inp = inp[:count]
-
- self.assertEqual(hashlib.sha1(inp).digest(), hashed)
-
- def test_digests(self):
- main_c = os.path.join(TOP_SRCDIR, "src", "or", "main.c")
-
- if os.stat(TOR).st_mtime < os.stat(main_c).st_mtime:
- self.skipTest(TOR+" not up to date")
- out = run_tor(["--digests"])
- main_line = [ l for l in lines(out) if l.endswith("/main.c") or l.endswith(" main.c") ]
- digest, name = main_line[0].split()
- f = open(main_c, 'rb')
- actual = hashlib.sha1(f.read()).hexdigest()
- f.close()
- self.assertEqual(digest, actual)
-
- def test_dump_options(self):
- default_torrc = NamedTemporaryFile()
- torrc = NamedTemporaryFile()
- torrc.write("SocksPort 9999")
- torrc.close()
- default_torrc.write("SafeLogging 0")
- default_torrc.close()
- out_sh = out_nb = out_fl = None
- opts = [ "-f", torrc.name,
- "--defaults-torrc", default_torrc.name ]
- try:
- out_sh = run_tor(["--dump-config", "short"]+opts)
- out_nb = run_tor(["--dump-config", "non-builtin"]+opts)
- out_fl = run_tor(["--dump-config", "full"]+opts)
- out_nr = run_tor(["--dump-config", "bliznert"]+opts,
- failure=True)
-
- out_verif = run_tor(["--verify-config"]+opts)
- finally:
- os.unlink(torrc.name)
- os.unlink(default_torrc.name)
-
- self.assertEqual(len(lines(out_sh)), 2)
- self.assertTrue(lines(out_sh)[0].startswith("DataDirectory "))
- self.assertEqual(lines(out_sh)[1:],
- [ "SocksPort 9999" ])
-
- self.assertEqual(len(lines(out_nb)), 2)
- self.assertEqual(lines(out_nb),
- [ "SafeLogging 0",
- "SocksPort 9999" ])
-
- out_fl = lines(out_fl)
- self.assertTrue(len(out_fl) > 100)
- self.assertTrue("SocksPort 9999" in out_fl)
- self.assertTrue("SafeLogging 0" in out_fl)
- self.assertTrue("ClientOnly 0" in out_fl)
-
- self.assertTrue(out_verif.endswith("Configuration was valid\n"))
-
- def test_list_fingerprint(self):
- tmpdir = tempfile.mkdtemp(prefix='ttca_')
- torrc = NamedTemporaryFile()
- torrc.write("ORPort 9999\n")
- torrc.write("DataDirectory %s\n"%tmpdir)
- torrc.write("Nickname tippi")
- torrc.close()
- opts = ["-f", torrc.name]
- try:
- out = run_tor(["--list-fingerprint"]+opts)
- fp = contents(os.path.join(tmpdir, "fingerprint"))
- finally:
- os.unlink(torrc.name)
- shutil.rmtree(tmpdir)
-
- out = lines(out)
- lastlog = strip_log_junk(out[-2])
- lastline = out[-1]
- fp = fp.strip()
- nn_fp = fp.split()[0]
- space_fp = " ".join(spaceify_fp(fp.split()[1]))
- self.assertEqual(lastlog,
- "Your Tor server's identity key fingerprint is '%s'"%fp)
- self.assertEqual(lastline, "tippi %s"%space_fp)
- self.assertEqual(nn_fp, "tippi")
-
- def test_list_options(self):
- out = lines(run_tor(["--list-torrc-options"]))
- self.assertTrue(len(out)>100)
- self.assertTrue(out[0] <= 'AccountingMax')
- self.assertTrue("UseBridges" in out)
- self.assertTrue("SocksPort" in out)
-
- def test_cmdline_args(self):
- default_torrc = NamedTemporaryFile()
- torrc = NamedTemporaryFile()
- torrc.write("SocksPort 9999\n")
- torrc.write("SocksPort 9998\n")
- torrc.write("ORPort 9000\n")
- torrc.write("ORPort 9001\n")
- torrc.write("Nickname eleventeen\n")
- torrc.write("ControlPort 9500\n")
- torrc.close()
- default_torrc.write("")
- default_torrc.close()
- out_sh = out_nb = out_fl = None
- opts = [ "-f", torrc.name,
- "--defaults-torrc", default_torrc.name,
- "--dump-config", "short" ]
- try:
- out_1 = run_tor(opts)
- out_2 = run_tor(opts+["+ORPort", "9003",
- "SocksPort", "9090",
- "/ControlPort",
- "/TransPort",
- "+ExtORPort", "9005"])
- finally:
- os.unlink(torrc.name)
- os.unlink(default_torrc.name)
-
- out_1 = [ l for l in lines(out_1) if not l.startswith("DataDir") ]
- out_2 = [ l for l in lines(out_2) if not l.startswith("DataDir") ]
-
- self.assertEqual(out_1,
- ["ControlPort 9500",
- "Nickname eleventeen",
- "ORPort 9000",
- "ORPort 9001",
- "SocksPort 9999",
- "SocksPort 9998"])
- self.assertEqual(out_2,
- ["ExtORPort 9005",
- "Nickname eleventeen",
- "ORPort 9000",
- "ORPort 9001",
- "ORPort 9003",
- "SocksPort 9090"])
-
- def test_missing_torrc(self):
- fname = "nonexistent_file_"+randstring(8)
- out = run_tor(["-f", fname, "--verify-config"], failure=True)
- ln = [ strip_log_junk(l) for l in lines(out) ]
- self.assertTrue("Unable to open configuration file" in ln[-2])
- self.assertTrue("Reading config failed" in ln[-1])
-
- out = run_tor(["-f", fname, "--verify-config", "--ignore-missing-torrc"])
- ln = [ strip_log_junk(l) for l in lines(out) ]
- self.assertTrue(findLineContaining(ln, ", using reasonable defaults"))
- self.assertTrue("Configuration was valid" in ln[-1])
-
-if __name__ == '__main__':
- unittest.main()
diff --git a/src/test/test_config.c b/src/test/test_config.c
index fb8e4020dc..28e9fa0f32 100644
--- a/src/test/test_config.c
+++ b/src/test/test_config.c
@@ -17,6 +17,7 @@
#include "address.h"
#include "entrynodes.h"
#include "transports.h"
+#include "routerlist.h"
static void
test_config_addressmap(void *arg)
@@ -51,8 +52,7 @@ test_config_addressmap(void *arg)
/* Use old interface for now, so we don't need to rewrite the unit tests */
#define addressmap_rewrite(a,s,eo,ao) \
- addressmap_rewrite((a),(s),AMR_FLAG_USE_IPV4_DNS|AMR_FLAG_USE_IPV6_DNS, \
- (eo),(ao))
+ addressmap_rewrite((a),(s), ~0, (eo),(ao))
/* MapAddress .invalidwildcard.com .torserver.exit - no match */
strlcpy(address, "www.invalidwildcard.com", sizeof(address));
@@ -177,6 +177,7 @@ test_config_addressmap(void *arg)
done:
config_free_lines(get_options_mutable()->AddressMap);
get_options_mutable()->AddressMap = NULL;
+ addressmap_free_all();
}
static int
@@ -1036,7 +1037,7 @@ static int n_get_interface_address6_failure = 0;
/**
* This mock function is meant to replace get_interface_addres6().
- * It will pretent to fail by return -1.
+ * It will pretend to fail by return -1.
* <b>n_get_interface_address6_failure</b> is incremented by one
* every time this function is called and <b>last_address6_family</b>
* is assigned the value of <b>family</b> argument.
@@ -1092,7 +1093,7 @@ test_config_resolve_my_address(void *arg)
tt_want(retval == 0);
tt_want_str_op(method_used,==,"CONFIGURED");
tt_want(hostname_out == NULL);
- tt_assert(htonl(resolved_addr) == 0x69803480);
+ tt_assert(resolved_addr == 0x80348069);
tor_free(options->Address);
@@ -1117,7 +1118,7 @@ test_config_resolve_my_address(void *arg)
tt_want(n_hostname_01010101 == prev_n_hostname_01010101 + 1);
tt_want_str_op(method_used,==,"RESOLVED");
tt_want_str_op(hostname_out,==,"www.torproject.org");
- tt_assert(htonl(resolved_addr) == 0x01010101);
+ tt_assert(resolved_addr == 0x01010101);
UNMOCK(tor_lookup_hostname);
@@ -1149,7 +1150,7 @@ test_config_resolve_my_address(void *arg)
tt_want(n_hostname_01010101 == prev_n_hostname_01010101 + 1);
tt_want_str_op(method_used,==,"GETHOSTNAME");
tt_want_str_op(hostname_out,==,"onionrouter!");
- tt_assert(htonl(resolved_addr) == 0x01010101);
+ tt_assert(resolved_addr == 0x01010101);
UNMOCK(tor_gethostname);
UNMOCK(tor_lookup_hostname);
@@ -1242,7 +1243,7 @@ test_config_resolve_my_address(void *arg)
prev_n_get_interface_address + 1);
tt_want_str_op(method_used,==,"INTERFACE");
tt_want(hostname_out == NULL);
- tt_assert(resolved_addr == ntohl(0x08080808));
+ tt_assert(resolved_addr == 0x08080808);
UNMOCK(get_interface_address);
tor_free(hostname_out);
@@ -1297,7 +1298,7 @@ test_config_resolve_my_address(void *arg)
tt_want(n_gethostname_replacement == prev_n_gethostname_replacement + 1);
tt_want(retval == 0);
tt_want_str_op(method_used,==,"INTERFACE");
- tt_assert(htonl(resolved_addr) == 0x09090909);
+ tt_assert(resolved_addr == 0x09090909);
UNMOCK(tor_lookup_hostname);
UNMOCK(tor_gethostname);
@@ -1405,7 +1406,7 @@ test_config_resolve_my_address(void *arg)
/* CASE 12:
* Suppose the following happens:
- * 1. options->Address is NULL AND options->DirAuthorities is 1.
+ * 1. options->Address is NULL AND options->DirAuthorities is non-NULL
* 2. tor_gethostname() succeeds in getting hostname of a machine ...
* 3. ... which is successfully parsed by tor_inet_aton() ...
* 4. into IPv4 address that tor_addr_is_inernal() considers to be
@@ -1443,10 +1444,1776 @@ test_config_resolve_my_address(void *arg)
UNMOCK(tor_gethostname);
}
+static int n_add_default_fallback_dir_servers_known_default = 0;
+
+/**
+ * This mock function is meant to replace add_default_fallback_dir_servers().
+ * It will parse and add one known default fallback dir server,
+ * which has a dir_port of 99.
+ * <b>n_add_default_fallback_dir_servers_known_default</b> is incremented by
+ * one every time this function is called.
+ */
+static void
+add_default_fallback_dir_servers_known_default(void)
+{
+ int i;
+ const char *fallback[] = {
+ "127.0.0.1:60099 orport=9009 "
+ "id=0923456789012345678901234567890123456789",
+ NULL
+ };
+ for (i=0; fallback[i]; i++) {
+ if (parse_dir_fallback_line(fallback[i], 0)<0) {
+ log_err(LD_BUG, "Couldn't parse internal FallbackDir line %s",
+ fallback[i]);
+ }
+ }
+ n_add_default_fallback_dir_servers_known_default++;
+}
+
+static void
+test_config_adding_dir_servers(void *arg)
+{
+ (void)arg;
+
+ /* allocate options */
+ or_options_t *options = tor_malloc(sizeof(or_options_t));
+
+ /* Allocate and populate configuration lines:
+ *
+ * Use the same format as the hard-coded directories in
+ * add_default_trusted_dir_authorities().
+ * Zeroing the structure has the same effect as initialising to:
+ * { NULL, NULL, NULL, CONFIG_LINE_NORMAL, 0};
+ */
+ config_line_t *test_dir_authority = tor_malloc(sizeof(config_line_t));
+ memset(test_dir_authority, 0, sizeof(config_line_t));
+ test_dir_authority->key = tor_strdup("DirAuthority");
+ test_dir_authority->value = tor_strdup(
+ "D0 orport=9000 "
+ "v3ident=0023456789012345678901234567890123456789 "
+ "127.0.0.1:60090 0123 4567 8901 2345 6789 0123 4567 8901 2345 6789"
+ );
+
+ config_line_t *test_alt_bridge_authority = tor_malloc(sizeof(config_line_t));
+ memset(test_alt_bridge_authority, 0, sizeof(config_line_t));
+ test_alt_bridge_authority->key = tor_strdup("AlternateBridgeAuthority");
+ test_alt_bridge_authority->value = tor_strdup(
+ "B1 orport=9001 bridge "
+ "127.0.0.1:60091 1123 4567 8901 2345 6789 0123 4567 8901 2345 6789"
+ );
+
+ config_line_t *test_alt_dir_authority = tor_malloc(sizeof(config_line_t));
+ memset(test_alt_dir_authority, 0, sizeof(config_line_t));
+ test_alt_dir_authority->key = tor_strdup("AlternateDirAuthority");
+ test_alt_dir_authority->value = tor_strdup(
+ "A2 orport=9002 "
+ "v3ident=0223456789012345678901234567890123456789 "
+ "127.0.0.1:60092 2123 4567 8901 2345 6789 0123 4567 8901 2345 6789"
+ );
+
+ /* Use the format specified in the manual page */
+ config_line_t *test_fallback_directory = tor_malloc(sizeof(config_line_t));
+ memset(test_fallback_directory, 0, sizeof(config_line_t));
+ test_fallback_directory->key = tor_strdup("FallbackDir");
+ test_fallback_directory->value = tor_strdup(
+ "127.0.0.1:60093 orport=9003 id=0323456789012345678901234567890123456789"
+ );
+
+ /* We need to know if add_default_fallback_dir_servers is called,
+ * so we use a version of add_default_fallback_dir_servers that adds
+ * one known default fallback directory.
+ * There doesn't appear to be any need to test it unmocked. */
+ MOCK(add_default_fallback_dir_servers,
+ add_default_fallback_dir_servers_known_default);
+
+ /* There are 16 different cases, covering each combination of set/NULL for:
+ * DirAuthorities, AlternateBridgeAuthority, AlternateDirAuthority &
+ * FallbackDir.
+ * But validate_dir_servers() ensures that:
+ * "You cannot set both DirAuthority and Alternate*Authority."
+ * This reduces the number of cases to 10.
+ *
+ * Let's count these cases using binary, with 1 meaning set & 0 meaning NULL
+ * So 1001 or case 9 is:
+ * DirAuthorities set,
+ * AlternateBridgeAuthority NULL,
+ * AlternateDirAuthority NULL
+ * FallbackDir set
+ * The valid cases are cases 0-9 counting using this method, as every case
+ * greater than or equal to 10 = 1010 is invalid.
+ *
+ * After #15642 - Disable default fallback dirs when any custom dirs set
+ *
+ * 1. Outcome: Use Set Directory Authorities
+ * - No Default Authorities
+ * - Use AlternateBridgeAuthority, AlternateDirAuthority, and FallbackDir
+ * if they are set
+ * Cases expected to yield this outcome:
+ * 8 & 9 (the 2 valid cases where DirAuthorities is set)
+ * 6 & 7 (the 2 cases where DirAuthorities is NULL, and
+ * AlternateBridgeAuthority and AlternateDirAuthority are both set)
+ *
+ * 2. Outcome: Use Set Bridge Authority
+ * - Use Default Non-Bridge Directory Authorities
+ * - Use FallbackDir if it is set, otherwise use default FallbackDir
+ * Cases expected to yield this outcome:
+ * 4 & 5 (the 2 cases where DirAuthorities is NULL,
+ * AlternateBridgeAuthority is set, and
+ * AlternateDirAuthority is NULL)
+ *
+ * 3. Outcome: Use Set Alternate Directory Authority
+ * - Use Default Bridge Authorities
+ * - Use FallbackDir if it is set, otherwise No Default Fallback Directories
+ * Cases expected to yield this outcome:
+ * 2 & 3 (the 2 cases where DirAuthorities and AlternateBridgeAuthority
+ * are both NULL, but AlternateDirAuthority is set)
+ *
+ * 4. Outcome: Use Set Custom Fallback Directory
+ * - Use Default Bridge & Directory Authorities
+ * Cases expected to yield this outcome:
+ * 1 (DirAuthorities, AlternateBridgeAuthority and AlternateDirAuthority
+ * are all NULL, but FallbackDir is set)
+ *
+ * 5. Outcome: Use All Defaults
+ * - Use Default Bridge & Directory Authorities, and
+ * Default Fallback Directories
+ * Cases expected to yield this outcome:
+ * 0 (DirAuthorities, AlternateBridgeAuthority, AlternateDirAuthority
+ * and FallbackDir are all NULL)
+ *
+ * Before #15642 but after #13163 - Stop using default authorities when both
+ * Alternate Dir and Bridge Authority are set
+ * (#13163 was committed in 0.2.6 as c1dd43d823c7)
+ *
+ * The behaviour is different in the following cases
+ * where FallbackDir is NULL:
+ * 2, 6, 8
+ *
+ * In these cases, the Default Fallback Directories are applied, even when
+ * DirAuthorities or AlternateDirAuthority are set.
+ *
+ * However, as the list of default fallback directories is currently empty,
+ * this change doesn't modify any user-visible behaviour.
+ */
+
+ /*
+ * Find out how many default Bridge, Non-Bridge and Fallback Directories
+ * are hard-coded into this build.
+ * This code makes some assumptions about the implementation.
+ * If they are wrong, one or more of cases 0-5 could fail.
+ */
+ int n_default_alt_bridge_authority = 0;
+ int n_default_alt_dir_authority = 0;
+ int n_default_fallback_dir = 0;
+#define n_default_authorities ((n_default_alt_bridge_authority) \
+ + (n_default_alt_dir_authority))
+
+ /* Pre-Count Number of Authorities of Each Type
+ * Use 0000: No Directory Authorities or Fallback Directories Set
+ */
+ {
+ /* clear fallback dirs counter */
+ n_add_default_fallback_dir_servers_known_default = 0;
+
+ /* clear options*/
+ memset(options, 0, sizeof(or_options_t));
+
+ /* clear any previous dir servers:
+ consider_adding_dir_servers() should do this anyway */
+ clear_dir_servers();
+
+ /* assign options: 0000 */
+ options->DirAuthorities = NULL;
+ options->AlternateBridgeAuthority = NULL;
+ options->AlternateDirAuthority = NULL;
+ options->FallbackDir = NULL;
+
+ /* parse options - ensure we always update by passing NULL old_options */
+ consider_adding_dir_servers(options, NULL);
+
+ /* check outcome */
+
+ /* we must have added the default fallback dirs */
+ tt_assert(n_add_default_fallback_dir_servers_known_default == 1);
+
+ {
+ /* fallback_dir_servers */
+ const smartlist_t *fallback_servers = router_get_fallback_dir_servers();
+
+ /* Count Bridge Authorities */
+ SMARTLIST_FOREACH(fallback_servers,
+ dir_server_t *,
+ ds,
+ /* increment the found counter if it's a bridge auth */
+ n_default_alt_bridge_authority +=
+ ((ds->is_authority && (ds->type & BRIDGE_DIRINFO)) ?
+ 1 : 0)
+ );
+ /* If we have no default bridge authority, something has gone wrong */
+ tt_assert(n_default_alt_bridge_authority >= 1);
+
+ /* Count v3 Authorities */
+ SMARTLIST_FOREACH(fallback_servers,
+ dir_server_t *,
+ ds,
+ /* increment found counter if it's a v3 auth */
+ n_default_alt_dir_authority +=
+ ((ds->is_authority && (ds->type & V3_DIRINFO)) ?
+ 1 : 0)
+ );
+ /* If we have no default authorities, something has gone really wrong */
+ tt_assert(n_default_alt_dir_authority >= 1);
+
+ /* Calculate Fallback Directory Count */
+ n_default_fallback_dir = (smartlist_len(fallback_servers) -
+ n_default_alt_bridge_authority -
+ n_default_alt_dir_authority);
+ /* If we have a negative count, something has gone really wrong */
+ tt_assert(n_default_fallback_dir >= 0);
+ }
+ }
+
+ /*
+ * 1. Outcome: Use Set Directory Authorities
+ * - No Default Authorities
+ * - Use AlternateBridgeAuthority, AlternateDirAuthority, and FallbackDir
+ * if they are set
+ * Cases expected to yield this outcome:
+ * 8 & 9 (the 2 valid cases where DirAuthorities is set)
+ * 6 & 7 (the 2 cases where DirAuthorities is NULL, and
+ * AlternateBridgeAuthority and AlternateDirAuthority are both set)
+ */
+
+ /* Case 9: 1001 - DirAuthorities Set, AlternateBridgeAuthority Not Set,
+ AlternateDirAuthority Not Set, FallbackDir Set */
+ {
+ /* clear fallback dirs counter */
+ n_add_default_fallback_dir_servers_known_default = 0;
+
+ /* clear options*/
+ memset(options, 0, sizeof(or_options_t));
+
+ /* clear any previous dir servers:
+ consider_adding_dir_servers() should do this anyway */
+ clear_dir_servers();
+
+ /* assign options: 1001 */
+ options->DirAuthorities = test_dir_authority;
+ options->AlternateBridgeAuthority = NULL;
+ options->AlternateDirAuthority = NULL;
+ options->FallbackDir = test_fallback_directory;
+
+ /* parse options - ensure we always update by passing NULL old_options */
+ consider_adding_dir_servers(options, NULL);
+
+ /* check outcome */
+
+ /* we must not have added the default fallback dirs */
+ tt_assert(n_add_default_fallback_dir_servers_known_default == 0);
+
+ {
+ /* trusted_dir_servers */
+ const smartlist_t *dir_servers = router_get_trusted_dir_servers();
+ /* D0, (No B1), (No A2) */
+ tt_assert(smartlist_len(dir_servers) == 1);
+
+ /* DirAuthority - D0 - dir_port: 60090 */
+ int found_D0 = 0;
+ SMARTLIST_FOREACH(dir_servers,
+ dir_server_t *,
+ ds,
+ /* increment the found counter if dir_port matches */
+ found_D0 +=
+ (ds->dir_port == 60090 ?
+ 1 : 0)
+ );
+ tt_assert(found_D0 == 1);
+
+ /* (No AlternateBridgeAuthority) - B1 - dir_port: 60091 */
+ int found_B1 = 0;
+ SMARTLIST_FOREACH(dir_servers,
+ dir_server_t *,
+ ds,
+ /* increment the found counter if dir_port matches */
+ found_B1 +=
+ (ds->dir_port == 60091 ?
+ 1 : 0)
+ );
+ tt_assert(found_B1 == 0);
+
+ /* (No AlternateDirAuthority) - A2 - dir_port: 60092 */
+ int found_A2 = 0;
+ SMARTLIST_FOREACH(dir_servers,
+ dir_server_t *,
+ ds,
+ /* increment the found counter if dir_port matches */
+ found_A2 +=
+ (ds->dir_port == 60092 ?
+ 1 : 0)
+ );
+ tt_assert(found_A2 == 0);
+ }
+
+ {
+ /* fallback_dir_servers */
+ const smartlist_t *fallback_servers = router_get_fallback_dir_servers();
+ /* D0, (No B1), (No A2), Custom Fallback */
+ tt_assert(smartlist_len(fallback_servers) == 2);
+
+ /* DirAuthority - D0 - dir_port: 60090 */
+ int found_D0 = 0;
+ SMARTLIST_FOREACH(fallback_servers,
+ dir_server_t *,
+ ds,
+ /* increment the found counter if dir_port matches */
+ found_D0 +=
+ (ds->dir_port == 60090 ?
+ 1 : 0)
+ );
+ tt_assert(found_D0 == 1);
+
+ /* (No AlternateBridgeAuthority) - B1 - dir_port: 60091 */
+ int found_B1 = 0;
+ SMARTLIST_FOREACH(fallback_servers,
+ dir_server_t *,
+ ds,
+ /* increment the found counter if dir_port matches */
+ found_B1 +=
+ (ds->dir_port == 60091 ?
+ 1 : 0)
+ );
+ tt_assert(found_B1 == 0);
+
+ /* (No AlternateDirAuthority) - A2 - dir_port: 60092 */
+ int found_A2 = 0;
+ SMARTLIST_FOREACH(fallback_servers,
+ dir_server_t *,
+ ds,
+ /* increment the found counter if dir_port matches */
+ found_A2 +=
+ (ds->dir_port == 60092 ?
+ 1 : 0)
+ );
+ tt_assert(found_A2 == 0);
+
+ /* Custom FallbackDir - No Nickname - dir_port: 60093 */
+ int found_non_default_fallback = 0;
+ SMARTLIST_FOREACH(fallback_servers,
+ dir_server_t *,
+ ds,
+ /* increment the found counter if dir_port matches */
+ found_non_default_fallback +=
+ (ds->dir_port == 60093 ?
+ 1 : 0)
+ );
+ tt_assert(found_non_default_fallback == 1);
+
+ /* (No Default FallbackDir) - No Nickname - dir_port: 60099 */
+ int found_default_fallback = 0;
+ SMARTLIST_FOREACH(fallback_servers,
+ dir_server_t *,
+ ds,
+ /* increment the found counter if dir_port matches */
+ found_default_fallback +=
+ (ds->dir_port == 60099 ?
+ 1 : 0)
+ );
+ tt_assert(found_default_fallback == 0);
+ }
+ }
+
+ /* Case 8: 1000 - DirAuthorities Set, Others Not Set */
+ {
+ /* clear fallback dirs counter */
+ n_add_default_fallback_dir_servers_known_default = 0;
+
+ /* clear options*/
+ memset(options, 0, sizeof(or_options_t));
+
+ /* clear any previous dir servers:
+ consider_adding_dir_servers() should do this anyway */
+ clear_dir_servers();
+
+ /* assign options: 1000 */
+ options->DirAuthorities = test_dir_authority;
+ options->AlternateBridgeAuthority = NULL;
+ options->AlternateDirAuthority = NULL;
+ options->FallbackDir = NULL;
+
+ /* parse options - ensure we always update by passing NULL old_options */
+ consider_adding_dir_servers(options, NULL);
+
+ /* check outcome */
+
+ /* we must not have added the default fallback dirs */
+ tt_assert(n_add_default_fallback_dir_servers_known_default == 0);
+
+ {
+ /* trusted_dir_servers */
+ const smartlist_t *dir_servers = router_get_trusted_dir_servers();
+ /* D0, (No B1), (No A2) */
+ tt_assert(smartlist_len(dir_servers) == 1);
+
+ /* DirAuthority - D0 - dir_port: 60090 */
+ int found_D0 = 0;
+ SMARTLIST_FOREACH(dir_servers,
+ dir_server_t *,
+ ds,
+ /* increment the found counter if dir_port matches */
+ found_D0 +=
+ (ds->dir_port == 60090 ?
+ 1 : 0)
+ );
+ tt_assert(found_D0 == 1);
+
+ /* (No AlternateBridgeAuthority) - B1 - dir_port: 60091 */
+ int found_B1 = 0;
+ SMARTLIST_FOREACH(dir_servers,
+ dir_server_t *,
+ ds,
+ /* increment the found counter if dir_port matches */
+ found_B1 +=
+ (ds->dir_port == 60091 ?
+ 1 : 0)
+ );
+ tt_assert(found_B1 == 0);
+
+ /* (No AlternateDirAuthority) - A2 - dir_port: 60092 */
+ int found_A2 = 0;
+ SMARTLIST_FOREACH(dir_servers,
+ dir_server_t *,
+ ds,
+ /* increment the found counter if dir_port matches */
+ found_A2 +=
+ (ds->dir_port == 60092 ?
+ 1 : 0)
+ );
+ tt_assert(found_A2 == 0);
+ }
+
+ {
+ /* fallback_dir_servers */
+ const smartlist_t *fallback_servers = router_get_fallback_dir_servers();
+ /* D0, (No B1), (No A2), (No Fallback) */
+ tt_assert(smartlist_len(fallback_servers) == 1);
+
+ /* DirAuthority - D0 - dir_port: 60090 */
+ int found_D0 = 0;
+ SMARTLIST_FOREACH(fallback_servers,
+ dir_server_t *,
+ ds,
+ /* increment the found counter if dir_port matches */
+ found_D0 +=
+ (ds->dir_port == 60090 ?
+ 1 : 0)
+ );
+ tt_assert(found_D0 == 1);
+
+ /* (No AlternateBridgeAuthority) - B1 - dir_port: 60091 */
+ int found_B1 = 0;
+ SMARTLIST_FOREACH(fallback_servers,
+ dir_server_t *,
+ ds,
+ /* increment the found counter if dir_port matches */
+ found_B1 +=
+ (ds->dir_port == 60091 ?
+ 1 : 0)
+ );
+ tt_assert(found_B1 == 0);
+
+ /* (No AlternateDirAuthority) - A2 - dir_port: 60092 */
+ int found_A2 = 0;
+ SMARTLIST_FOREACH(fallback_servers,
+ dir_server_t *,
+ ds,
+ /* increment the found counter if dir_port matches */
+ found_A2 +=
+ (ds->dir_port == 60092 ?
+ 1 : 0)
+ );
+ tt_assert(found_A2 == 0);
+
+ /* (No Custom FallbackDir) - No Nickname - dir_port: 60093 */
+ int found_non_default_fallback = 0;
+ SMARTLIST_FOREACH(fallback_servers,
+ dir_server_t *,
+ ds,
+ /* increment the found counter if dir_port matches */
+ found_non_default_fallback +=
+ (ds->dir_port == 60093 ?
+ 1 : 0)
+ );
+ tt_assert(found_non_default_fallback == 0);
+
+ /* (No Default FallbackDir) - No Nickname - dir_port: 60099 */
+ int found_default_fallback = 0;
+ SMARTLIST_FOREACH(fallback_servers,
+ dir_server_t *,
+ ds,
+ /* increment the found counter if dir_port matches */
+ found_default_fallback +=
+ (ds->dir_port == 60099 ?
+ 1 : 0)
+ );
+ tt_assert(found_default_fallback == 0);
+ }
+ }
+
+ /* Case 7: 0111 - DirAuthorities Not Set, Others Set */
+ {
+ /* clear fallback dirs counter */
+ n_add_default_fallback_dir_servers_known_default = 0;
+
+ /* clear options*/
+ memset(options, 0, sizeof(or_options_t));
+
+ /* clear any previous dir servers:
+ consider_adding_dir_servers() should do this anyway */
+ clear_dir_servers();
+
+ /* assign options: 0111 */
+ options->DirAuthorities = NULL;
+ options->AlternateBridgeAuthority = test_alt_bridge_authority;
+ options->AlternateDirAuthority = test_alt_dir_authority;
+ options->FallbackDir = test_fallback_directory;
+
+ /* parse options - ensure we always update by passing NULL old_options */
+ consider_adding_dir_servers(options, NULL);
+
+ /* check outcome */
+
+ /* we must not have added the default fallback dirs */
+ tt_assert(n_add_default_fallback_dir_servers_known_default == 0);
+
+ {
+ /* trusted_dir_servers */
+ const smartlist_t *dir_servers = router_get_trusted_dir_servers();
+ /* (No D0), B1, A2 */
+ tt_assert(smartlist_len(dir_servers) == 2);
+
+ /* (No DirAuthority) - D0 - dir_port: 60090 */
+ int found_D0 = 0;
+ SMARTLIST_FOREACH(dir_servers,
+ dir_server_t *,
+ ds,
+ /* increment the found counter if dir_port matches */
+ found_D0 +=
+ (ds->dir_port == 60090 ?
+ 1 : 0)
+ );
+ tt_assert(found_D0 == 0);
+
+ /* AlternateBridgeAuthority - B1 - dir_port: 60091 */
+ int found_B1 = 0;
+ SMARTLIST_FOREACH(dir_servers,
+ dir_server_t *,
+ ds,
+ /* increment the found counter if dir_port matches */
+ found_B1 +=
+ (ds->dir_port == 60091 ?
+ 1 : 0)
+ );
+ tt_assert(found_B1 == 1);
+
+ /* AlternateDirAuthority - A2 - dir_port: 60092 */
+ int found_A2 = 0;
+ SMARTLIST_FOREACH(dir_servers,
+ dir_server_t *,
+ ds,
+ /* increment the found counter if dir_port matches */
+ found_A2 +=
+ (ds->dir_port == 60092 ?
+ 1 : 0)
+ );
+ tt_assert(found_A2 == 1);
+ }
+
+ {
+ /* fallback_dir_servers */
+ const smartlist_t *fallback_servers = router_get_fallback_dir_servers();
+ /* (No D0), B1, A2, Custom Fallback */
+ tt_assert(smartlist_len(fallback_servers) == 3);
+
+ /* (No DirAuthority) - D0 - dir_port: 60090 */
+ int found_D0 = 0;
+ SMARTLIST_FOREACH(fallback_servers,
+ dir_server_t *,
+ ds,
+ /* increment the found counter if dir_port matches */
+ found_D0 +=
+ (ds->dir_port == 60090 ?
+ 1 : 0)
+ );
+ tt_assert(found_D0 == 0);
+
+ /* AlternateBridgeAuthority - B1 - dir_port: 60091 */
+ int found_B1 = 0;
+ SMARTLIST_FOREACH(fallback_servers,
+ dir_server_t *,
+ ds,
+ /* increment the found counter if dir_port matches */
+ found_B1 +=
+ (ds->dir_port == 60091 ?
+ 1 : 0)
+ );
+ tt_assert(found_B1 == 1);
+
+ /* AlternateDirAuthority - A2 - dir_port: 60092 */
+ int found_A2 = 0;
+ SMARTLIST_FOREACH(fallback_servers,
+ dir_server_t *,
+ ds,
+ /* increment the found counter if dir_port matches */
+ found_A2 +=
+ (ds->dir_port == 60092 ?
+ 1 : 0)
+ );
+ tt_assert(found_A2 == 1);
+
+ /* Custom FallbackDir - No Nickname - dir_port: 60093 */
+ int found_non_default_fallback = 0;
+ SMARTLIST_FOREACH(fallback_servers,
+ dir_server_t *,
+ ds,
+ /* increment the found counter if dir_port matches */
+ found_non_default_fallback +=
+ (ds->dir_port == 60093 ?
+ 1 : 0)
+ );
+ tt_assert(found_non_default_fallback == 1);
+
+ /* (No Default FallbackDir) - No Nickname - dir_port: 60099 */
+ int found_default_fallback = 0;
+ SMARTLIST_FOREACH(fallback_servers,
+ dir_server_t *,
+ ds,
+ /* increment the found counter if dir_port matches */
+ found_default_fallback +=
+ (ds->dir_port == 60099 ?
+ 1 : 0)
+ );
+ tt_assert(found_default_fallback == 0);
+ }
+ }
+
+ /* Case 6: 0110 - DirAuthorities Not Set, AlternateBridgeAuthority &
+ AlternateDirAuthority Set, FallbackDir Not Set */
+ {
+ /* clear fallback dirs counter */
+ n_add_default_fallback_dir_servers_known_default = 0;
+
+ /* clear options*/
+ memset(options, 0, sizeof(or_options_t));
+
+ /* clear any previous dir servers:
+ consider_adding_dir_servers() should do this anyway */
+ clear_dir_servers();
+
+ /* assign options: 0110 */
+ options->DirAuthorities = NULL;
+ options->AlternateBridgeAuthority = test_alt_bridge_authority;
+ options->AlternateDirAuthority = test_alt_dir_authority;
+ options->FallbackDir = NULL;
+
+ /* parse options - ensure we always update by passing NULL old_options */
+ consider_adding_dir_servers(options, NULL);
+
+ /* check outcome */
+
+ /* we must not have added the default fallback dirs */
+ tt_assert(n_add_default_fallback_dir_servers_known_default == 0);
+
+ {
+ /* trusted_dir_servers */
+ const smartlist_t *dir_servers = router_get_trusted_dir_servers();
+ /* (No D0), B1, A2 */
+ tt_assert(smartlist_len(dir_servers) == 2);
+
+ /* (No DirAuthority) - D0 - dir_port: 60090 */
+ int found_D0 = 0;
+ SMARTLIST_FOREACH(dir_servers,
+ dir_server_t *,
+ ds,
+ /* increment the found counter if dir_port matches */
+ found_D0 +=
+ (ds->dir_port == 60090 ?
+ 1 : 0)
+ );
+ tt_assert(found_D0 == 0);
+
+ /* AlternateBridgeAuthority - B1 - dir_port: 60091 */
+ int found_B1 = 0;
+ SMARTLIST_FOREACH(dir_servers,
+ dir_server_t *,
+ ds,
+ /* increment the found counter if dir_port matches */
+ found_B1 +=
+ (ds->dir_port == 60091 ?
+ 1 : 0)
+ );
+ tt_assert(found_B1 == 1);
+
+ /* AlternateDirAuthority - A2 - dir_port: 60092 */
+ int found_A2 = 0;
+ SMARTLIST_FOREACH(dir_servers,
+ dir_server_t *,
+ ds,
+ /* increment the found counter if dir_port matches */
+ found_A2 +=
+ (ds->dir_port == 60092 ?
+ 1 : 0)
+ );
+ tt_assert(found_A2 == 1);
+ }
+
+ {
+ /* fallback_dir_servers */
+ const smartlist_t *fallback_servers = router_get_fallback_dir_servers();
+ /* (No D0), B1, A2, (No Fallback) */
+ tt_assert(smartlist_len(fallback_servers) == 2);
+
+ /* (No DirAuthority) - D0 - dir_port: 60090 */
+ int found_D0 = 0;
+ SMARTLIST_FOREACH(fallback_servers,
+ dir_server_t *,
+ ds,
+ /* increment the found counter if dir_port matches */
+ found_D0 +=
+ (ds->dir_port == 60090 ?
+ 1 : 0)
+ );
+ tt_assert(found_D0 == 0);
+
+ /* AlternateBridgeAuthority - B1 - dir_port: 60091 */
+ int found_B1 = 0;
+ SMARTLIST_FOREACH(fallback_servers,
+ dir_server_t *,
+ ds,
+ /* increment the found counter if dir_port matches */
+ found_B1 +=
+ (ds->dir_port == 60091 ?
+ 1 : 0)
+ );
+ tt_assert(found_B1 == 1);
+
+ /* AlternateDirAuthority - A2 - dir_port: 60092 */
+ int found_A2 = 0;
+ SMARTLIST_FOREACH(fallback_servers,
+ dir_server_t *,
+ ds,
+ /* increment the found counter if dir_port matches */
+ found_A2 +=
+ (ds->dir_port == 60092 ?
+ 1 : 0)
+ );
+ tt_assert(found_A2 == 1);
+
+ /* (No Custom FallbackDir) - No Nickname - dir_port: 60093 */
+ int found_non_default_fallback = 0;
+ SMARTLIST_FOREACH(fallback_servers,
+ dir_server_t *,
+ ds,
+ /* increment the found counter if dir_port matches */
+ found_non_default_fallback +=
+ (ds->dir_port == 60093 ?
+ 1 : 0)
+ );
+ tt_assert(found_non_default_fallback == 0);
+
+ /* (No Default FallbackDir) - No Nickname - dir_port: 60099 */
+ int found_default_fallback = 0;
+ SMARTLIST_FOREACH(fallback_servers,
+ dir_server_t *,
+ ds,
+ /* increment the found counter if dir_port matches */
+ found_default_fallback +=
+ (ds->dir_port == 60099 ?
+ 1 : 0)
+ );
+ tt_assert(found_default_fallback == 0);
+ }
+ }
+
+ /*
+ 2. Outcome: Use Set Bridge Authority
+ - Use Default Non-Bridge Directory Authorities
+ - Use FallbackDir if it is set, otherwise use default FallbackDir
+ Cases expected to yield this outcome:
+ 4 & 5 (the 2 cases where DirAuthorities is NULL,
+ AlternateBridgeAuthority is set, and
+ AlternateDirAuthority is NULL)
+ */
+
+ /* Case 5: 0101 - DirAuthorities Not Set, AlternateBridgeAuthority Set,
+ AlternateDirAuthority Not Set, FallbackDir Set */
+ {
+ /* clear fallback dirs counter */
+ n_add_default_fallback_dir_servers_known_default = 0;
+
+ /* clear options*/
+ memset(options, 0, sizeof(or_options_t));
+
+ /* clear any previous dir servers:
+ consider_adding_dir_servers() should do this anyway */
+ clear_dir_servers();
+
+ /* assign options: 0101 */
+ options->DirAuthorities = NULL;
+ options->AlternateBridgeAuthority = test_alt_bridge_authority;
+ options->AlternateDirAuthority = NULL;
+ options->FallbackDir = test_fallback_directory;
+
+ /* parse options - ensure we always update by passing NULL old_options */
+ consider_adding_dir_servers(options, NULL);
+
+ /* check outcome */
+
+ /* we must not have added the default fallback dirs */
+ tt_assert(n_add_default_fallback_dir_servers_known_default == 0);
+
+ {
+ /* trusted_dir_servers */
+ const smartlist_t *dir_servers = router_get_trusted_dir_servers();
+ /* (No D0), B1, (No A2), Default v3 Non-Bridge Authorities */
+ tt_assert(smartlist_len(dir_servers) == 1 + n_default_alt_dir_authority);
+
+ /* (No DirAuthorities) - D0 - dir_port: 60090 */
+ int found_D0 = 0;
+ SMARTLIST_FOREACH(dir_servers,
+ dir_server_t *,
+ ds,
+ /* increment the found counter if dir_port matches */
+ found_D0 +=
+ (ds->dir_port == 60090 ?
+ 1 : 0)
+ );
+ tt_assert(found_D0 == 0);
+
+ /* AlternateBridgeAuthority - B1 - dir_port: 60091 */
+ int found_B1 = 0;
+ SMARTLIST_FOREACH(dir_servers,
+ dir_server_t *,
+ ds,
+ /* increment the found counter if dir_port matches */
+ found_B1 +=
+ (ds->dir_port == 60091 ?
+ 1 : 0)
+ );
+ tt_assert(found_B1 == 1);
+
+ /* (No AlternateDirAuthority) - A2 - dir_port: 60092 */
+ int found_A2 = 0;
+ SMARTLIST_FOREACH(dir_servers,
+ dir_server_t *,
+ ds,
+ /* increment the found counter if dir_port matches */
+ found_A2 +=
+ (ds->dir_port == 60092 ?
+ 1 : 0)
+ );
+ tt_assert(found_A2 == 0);
+
+ /* There's no easy way of checking that we have included all the
+ * default v3 non-Bridge directory authorities, so let's assume that
+ * if the total count above is correct, we have the right ones.
+ */
+ }
+
+ {
+ /* fallback_dir_servers */
+ const smartlist_t *fallback_servers = router_get_fallback_dir_servers();
+ /* (No D0), B1, (No A2), Default v3 Non-Bridge Authorities,
+ * Custom Fallback */
+ tt_assert(smartlist_len(fallback_servers) ==
+ 2 + n_default_alt_dir_authority);
+
+ /* (No DirAuthorities) - D0 - dir_port: 60090 */
+ int found_D0 = 0;
+ SMARTLIST_FOREACH(fallback_servers,
+ dir_server_t *,
+ ds,
+ /* increment the found counter if dir_port matches */
+ found_D0 +=
+ (ds->dir_port == 60090 ?
+ 1 : 0)
+ );
+ tt_assert(found_D0 == 0);
+
+ /* AlternateBridgeAuthority - B1 - dir_port: 60091 */
+ int found_B1 = 0;
+ SMARTLIST_FOREACH(fallback_servers,
+ dir_server_t *,
+ ds,
+ /* increment the found counter if dir_port matches */
+ found_B1 +=
+ (ds->dir_port == 60091 ?
+ 1 : 0)
+ );
+ tt_assert(found_B1 == 1);
+
+ /* (No AlternateDirAuthority) - A2 - dir_port: 60092 */
+ int found_A2 = 0;
+ SMARTLIST_FOREACH(fallback_servers,
+ dir_server_t *,
+ ds,
+ /* increment the found counter if dir_port matches */
+ found_A2 +=
+ (ds->dir_port == 60092 ?
+ 1 : 0)
+ );
+ tt_assert(found_A2 == 0);
+
+ /* Custom FallbackDir - No Nickname - dir_port: 60093 */
+ int found_non_default_fallback = 0;
+ SMARTLIST_FOREACH(fallback_servers,
+ dir_server_t *,
+ ds,
+ /* increment the found counter if dir_port matches */
+ found_non_default_fallback +=
+ (ds->dir_port == 60093 ?
+ 1 : 0)
+ );
+ tt_assert(found_non_default_fallback == 1);
+
+ /* (No Default FallbackDir) - No Nickname - dir_port: 60099 */
+ int found_default_fallback = 0;
+ SMARTLIST_FOREACH(fallback_servers,
+ dir_server_t *,
+ ds,
+ /* increment the found counter if dir_port matches */
+ found_default_fallback +=
+ (ds->dir_port == 60099 ?
+ 1 : 0)
+ );
+ tt_assert(found_default_fallback == 0);
+
+ /* There's no easy way of checking that we have included all the
+ * default v3 non-Bridge directory authorities, so let's assume that
+ * if the total count above is correct, we have the right ones.
+ */
+ }
+ }
+
+ /* Case 4: 0100 - DirAuthorities Not Set, AlternateBridgeAuthority Set,
+ AlternateDirAuthority & FallbackDir Not Set */
+ {
+ /* clear fallback dirs counter */
+ n_add_default_fallback_dir_servers_known_default = 0;
+
+ /* clear options*/
+ memset(options, 0, sizeof(or_options_t));
+
+ /* clear any previous dir servers:
+ consider_adding_dir_servers() should do this anyway */
+ clear_dir_servers();
+
+ /* assign options: 0100 */
+ options->DirAuthorities = NULL;
+ options->AlternateBridgeAuthority = test_alt_bridge_authority;
+ options->AlternateDirAuthority = NULL;
+ options->FallbackDir = NULL;
+
+ /* parse options - ensure we always update by passing NULL old_options */
+ consider_adding_dir_servers(options, NULL);
+
+ /* check outcome */
+
+ /* we must have added the default fallback dirs */
+ tt_assert(n_add_default_fallback_dir_servers_known_default == 1);
+
+ {
+ /* trusted_dir_servers */
+ const smartlist_t *dir_servers = router_get_trusted_dir_servers();
+ /* (No D0), B1, (No A2), Default v3 Non-Bridge Authorities */
+ tt_assert(smartlist_len(dir_servers) == 1 + n_default_alt_dir_authority);
+
+ /* (No DirAuthorities) - D0 - dir_port: 60090 */
+ int found_D0 = 0;
+ SMARTLIST_FOREACH(dir_servers,
+ dir_server_t *,
+ ds,
+ /* increment the found counter if dir_port matches */
+ found_D0 +=
+ (ds->dir_port == 60090 ?
+ 1 : 0)
+ );
+ tt_assert(found_D0 == 0);
+
+ /* AlternateBridgeAuthority - B1 - dir_port: 60091 */
+ int found_B1 = 0;
+ SMARTLIST_FOREACH(dir_servers,
+ dir_server_t *,
+ ds,
+ /* increment the found counter if dir_port matches */
+ found_B1 +=
+ (ds->dir_port == 60091 ?
+ 1 : 0)
+ );
+ tt_assert(found_B1 == 1);
+
+ /* (No AlternateDirAuthority) - A2 - dir_port: 60092 */
+ int found_A2 = 0;
+ SMARTLIST_FOREACH(dir_servers,
+ dir_server_t *,
+ ds,
+ /* increment the found counter if dir_port matches */
+ found_A2 +=
+ (ds->dir_port == 60092 ?
+ 1 : 0)
+ );
+ tt_assert(found_A2 == 0);
+
+ /* There's no easy way of checking that we have included all the
+ * default v3 non-Bridge directory authorities, so let's assume that
+ * if the total count above is correct, we have the right ones.
+ */
+ }
+
+ {
+ /* fallback_dir_servers */
+ const smartlist_t *fallback_servers = router_get_fallback_dir_servers();
+ /* (No D0), B1, (No A2), Default v3 Non-Bridge Authorities,
+ * Default Fallback */
+ tt_assert(smartlist_len(fallback_servers) ==
+ 2 + n_default_alt_dir_authority);
+
+ /* (No DirAuthorities) - D0 - dir_port: 60090 */
+ int found_D0 = 0;
+ SMARTLIST_FOREACH(fallback_servers,
+ dir_server_t *,
+ ds,
+ /* increment the found counter if dir_port matches */
+ found_D0 +=
+ (ds->dir_port == 60090 ?
+ 1 : 0)
+ );
+ tt_assert(found_D0 == 0);
+
+ /* AlternateBridgeAuthority - B1 - dir_port: 60091 */
+ int found_B1 = 0;
+ SMARTLIST_FOREACH(fallback_servers,
+ dir_server_t *,
+ ds,
+ /* increment the found counter if dir_port matches */
+ found_B1 +=
+ (ds->dir_port == 60091 ?
+ 1 : 0)
+ );
+ tt_assert(found_B1 == 1);
+
+ /* (No AlternateDirAuthority) - A2 - dir_port: 60092 */
+ int found_A2 = 0;
+ SMARTLIST_FOREACH(fallback_servers,
+ dir_server_t *,
+ ds,
+ /* increment the found counter if dir_port matches */
+ found_A2 +=
+ (ds->dir_port == 60092 ?
+ 1 : 0)
+ );
+ tt_assert(found_A2 == 0);
+
+ /* (No Custom FallbackDir) - No Nickname - dir_port: 60093 */
+ int found_non_default_fallback = 0;
+ SMARTLIST_FOREACH(fallback_servers,
+ dir_server_t *,
+ ds,
+ /* increment the found counter if dir_port matches */
+ found_non_default_fallback +=
+ (ds->dir_port == 60093 ?
+ 1 : 0)
+ );
+ tt_assert(found_non_default_fallback == 0);
+
+ /* Default FallbackDir - No Nickname - dir_port: 60099 */
+ int found_default_fallback = 0;
+ SMARTLIST_FOREACH(fallback_servers,
+ dir_server_t *,
+ ds,
+ /* increment the found counter if dir_port matches */
+ found_default_fallback +=
+ (ds->dir_port == 60099 ?
+ 1 : 0)
+ );
+ tt_assert(found_default_fallback == 1);
+
+ /* There's no easy way of checking that we have included all the
+ * default v3 non-Bridge directory authorities, so let's assume that
+ * if the total count above is correct, we have the right ones.
+ */
+ }
+ }
+
+ /*
+ 3. Outcome: Use Set Alternate Directory Authority
+ - Use Default Bridge Authorities
+ - Use FallbackDir if it is set, otherwise No Default Fallback Directories
+ Cases expected to yield this outcome:
+ 2 & 3 (the 2 cases where DirAuthorities and AlternateBridgeAuthority
+ are both NULL, but AlternateDirAuthority is set)
+ */
+
+ /* Case 3: 0011 - DirAuthorities & AlternateBridgeAuthority Not Set,
+ AlternateDirAuthority & FallbackDir Set */
+ {
+ /* clear fallback dirs counter */
+ n_add_default_fallback_dir_servers_known_default = 0;
+
+ /* clear options*/
+ memset(options, 0, sizeof(or_options_t));
+
+ /* clear any previous dir servers:
+ consider_adding_dir_servers() should do this anyway */
+ clear_dir_servers();
+
+ /* assign options: 0011 */
+ options->DirAuthorities = NULL;
+ options->AlternateBridgeAuthority = NULL;
+ options->AlternateDirAuthority = test_alt_dir_authority;
+ options->FallbackDir = test_fallback_directory;
+
+ /* parse options - ensure we always update by passing NULL old_options */
+ consider_adding_dir_servers(options, NULL);
+
+ /* check outcome */
+
+ /* we must not have added the default fallback dirs */
+ tt_assert(n_add_default_fallback_dir_servers_known_default == 0);
+
+ {
+ /* trusted_dir_servers */
+ const smartlist_t *dir_servers = router_get_trusted_dir_servers();
+ /* (No D0), (No B1), Default Bridge Authorities, A2 */
+ tt_assert(smartlist_len(dir_servers) ==
+ 1 + n_default_alt_bridge_authority);
+
+ /* (No DirAuthorities) - D0 - dir_port: 60090 */
+ int found_D0 = 0;
+ SMARTLIST_FOREACH(dir_servers,
+ dir_server_t *,
+ ds,
+ /* increment the found counter if dir_port matches */
+ found_D0 +=
+ (ds->dir_port == 60090 ?
+ 1 : 0)
+ );
+ tt_assert(found_D0 == 0);
+
+ /* (No AlternateBridgeAuthority) - B1 - dir_port: 60091 */
+ int found_B1 = 0;
+ SMARTLIST_FOREACH(dir_servers,
+ dir_server_t *,
+ ds,
+ /* increment the found counter if dir_port matches */
+ found_B1 +=
+ (ds->dir_port == 60091 ?
+ 1 : 0)
+ );
+ tt_assert(found_B1 == 0);
+
+ /* AlternateDirAuthority - A2 - dir_port: 60092 */
+ int found_A2 = 0;
+ SMARTLIST_FOREACH(dir_servers,
+ dir_server_t *,
+ ds,
+ /* increment the found counter if dir_port matches */
+ found_A2 +=
+ (ds->dir_port == 60092 ?
+ 1 : 0)
+ );
+ tt_assert(found_A2 == 1);
+
+ /* There's no easy way of checking that we have included all the
+ * default Bridge authorities (except for hard-coding tonga's details),
+ * so let's assume that if the total count above is correct,
+ * we have the right ones.
+ */
+ }
+
+ {
+ /* fallback_dir_servers */
+ const smartlist_t *fallback_servers = router_get_fallback_dir_servers();
+ /* (No D0), (No B1), Default Bridge Authorities, A2,
+ * Custom Fallback Directory, (No Default Fallback Directories) */
+ tt_assert(smartlist_len(fallback_servers) ==
+ 2 + n_default_alt_bridge_authority);
+
+ /* (No DirAuthorities) - D0 - dir_port: 60090 */
+ int found_D0 = 0;
+ SMARTLIST_FOREACH(fallback_servers,
+ dir_server_t *,
+ ds,
+ /* increment the found counter if dir_port matches */
+ found_D0 +=
+ (ds->dir_port == 60090 ?
+ 1 : 0)
+ );
+ tt_assert(found_D0 == 0);
+
+ /* (No AlternateBridgeAuthority) - B1 - dir_port: 60091 */
+ int found_B1 = 0;
+ SMARTLIST_FOREACH(fallback_servers,
+ dir_server_t *,
+ ds,
+ /* increment the found counter if dir_port matches */
+ found_B1 +=
+ (ds->dir_port == 60091 ?
+ 1 : 0)
+ );
+ tt_assert(found_B1 == 0);
+
+ /* AlternateDirAuthority - A2 - dir_port: 60092 */
+ int found_A2 = 0;
+ SMARTLIST_FOREACH(fallback_servers,
+ dir_server_t *,
+ ds,
+ /* increment the found counter if dir_port matches */
+ found_A2 +=
+ (ds->dir_port == 60092 ?
+ 1 : 0)
+ );
+ tt_assert(found_A2 == 1);
+
+ /* Custom FallbackDir - No Nickname - dir_port: 60093 */
+ int found_non_default_fallback = 0;
+ SMARTLIST_FOREACH(fallback_servers,
+ dir_server_t *,
+ ds,
+ /* increment the found counter if dir_port matches */
+ found_non_default_fallback +=
+ (ds->dir_port == 60093 ?
+ 1 : 0)
+ );
+ tt_assert(found_non_default_fallback == 1);
+
+ /* (No Default FallbackDir) - No Nickname - dir_port: 60099 */
+ int found_default_fallback = 0;
+ SMARTLIST_FOREACH(fallback_servers,
+ dir_server_t *,
+ ds,
+ /* increment the found counter if dir_port matches */
+ found_default_fallback +=
+ (ds->dir_port == 60099 ?
+ 1 : 0)
+ );
+ tt_assert(found_default_fallback == 0);
+
+ /* There's no easy way of checking that we have included all the
+ * default Bridge authorities (except for hard-coding tonga's details),
+ * so let's assume that if the total count above is correct,
+ * we have the right ones.
+ */
+ }
+ }
+
+ /* Case 2: 0010 - DirAuthorities & AlternateBridgeAuthority Not Set,
+ AlternateDirAuthority Set, FallbackDir Not Set */
+ {
+ /* clear fallback dirs counter */
+ n_add_default_fallback_dir_servers_known_default = 0;
+
+ /* clear options*/
+ memset(options, 0, sizeof(or_options_t));
+
+ /* clear any previous dir servers:
+ consider_adding_dir_servers() should do this anyway */
+ clear_dir_servers();
+
+ /* assign options: 0010 */
+ options->DirAuthorities = NULL;
+ options->AlternateBridgeAuthority = NULL;
+ options->AlternateDirAuthority = test_alt_dir_authority;
+ options->FallbackDir = NULL;
+
+ /* parse options - ensure we always update by passing NULL old_options */
+ consider_adding_dir_servers(options, NULL);
+
+ /* check outcome */
+
+ /* we must not have added the default fallback dirs */
+ tt_assert(n_add_default_fallback_dir_servers_known_default == 0);
+
+ {
+ /* trusted_dir_servers */
+ const smartlist_t *dir_servers = router_get_trusted_dir_servers();
+ /* (No D0), (No B1), Default Bridge Authorities, A2,
+ * No Default or Custom Fallback Directories */
+ tt_assert(smartlist_len(dir_servers) ==
+ 1 + n_default_alt_bridge_authority);
+
+ /* (No DirAuthorities) - D0 - dir_port: 60090 */
+ int found_D0 = 0;
+ SMARTLIST_FOREACH(dir_servers,
+ dir_server_t *,
+ ds,
+ /* increment the found counter if dir_port matches */
+ found_D0 +=
+ (ds->dir_port == 60090 ?
+ 1 : 0)
+ );
+ tt_assert(found_D0 == 0);
+
+ /* (No AlternateBridgeAuthority) - B1 - dir_port: 60091 */
+ int found_B1 = 0;
+ SMARTLIST_FOREACH(dir_servers,
+ dir_server_t *,
+ ds,
+ /* increment the found counter if dir_port matches */
+ found_B1 +=
+ (ds->dir_port == 60091 ?
+ 1 : 0)
+ );
+ tt_assert(found_B1 == 0);
+
+ /* AlternateDirAuthority - A2 - dir_port: 60092 */
+ int found_A2 = 0;
+ SMARTLIST_FOREACH(dir_servers,
+ dir_server_t *,
+ ds,
+ /* increment the found counter if dir_port matches */
+ found_A2 +=
+ (ds->dir_port == 60092 ?
+ 1 : 0)
+ );
+ tt_assert(found_A2 == 1);
+
+ /* There's no easy way of checking that we have included all the
+ * default Bridge authorities (except for hard-coding tonga's details),
+ * so let's assume that if the total count above is correct,
+ * we have the right ones.
+ */
+ }
+
+ {
+ /* fallback_dir_servers */
+ const smartlist_t *fallback_servers = router_get_fallback_dir_servers();
+ /* (No D0), (No B1), Default Bridge Authorities, A2,
+ * No Custom or Default Fallback Directories */
+ tt_assert(smartlist_len(fallback_servers) ==
+ 1 + n_default_alt_bridge_authority);
+
+ /* (No DirAuthorities) - D0 - dir_port: 60090 */
+ int found_D0 = 0;
+ SMARTLIST_FOREACH(fallback_servers,
+ dir_server_t *,
+ ds,
+ /* increment the found counter if dir_port matches */
+ found_D0 +=
+ (ds->dir_port == 60090 ?
+ 1 : 0)
+ );
+ tt_assert(found_D0 == 0);
+
+ /* (No AlternateBridgeAuthority) - B1 - dir_port: 60091 */
+ int found_B1 = 0;
+ SMARTLIST_FOREACH(fallback_servers,
+ dir_server_t *,
+ ds,
+ /* increment the found counter if dir_port matches */
+ found_B1 +=
+ (ds->dir_port == 60091 ?
+ 1 : 0)
+ );
+ tt_assert(found_B1 == 0);
+
+ /* AlternateDirAuthority - A2 - dir_port: 60092 */
+ int found_A2 = 0;
+ SMARTLIST_FOREACH(fallback_servers,
+ dir_server_t *,
+ ds,
+ /* increment the found counter if dir_port matches */
+ found_A2 +=
+ (ds->dir_port == 60092 ?
+ 1 : 0)
+ );
+ tt_assert(found_A2 == 1);
+
+ /* (No Custom FallbackDir) - No Nickname - dir_port: 60093 */
+ int found_non_default_fallback = 0;
+ SMARTLIST_FOREACH(fallback_servers,
+ dir_server_t *,
+ ds,
+ /* increment the found counter if dir_port matches */
+ found_non_default_fallback +=
+ (ds->dir_port == 60093 ?
+ 1 : 0)
+ );
+ tt_assert(found_non_default_fallback == 0);
+
+ /* (No Default FallbackDir) - No Nickname - dir_port: 60099 */
+ int found_default_fallback = 0;
+ SMARTLIST_FOREACH(fallback_servers,
+ dir_server_t *,
+ ds,
+ /* increment the found counter if dir_port matches */
+ found_default_fallback +=
+ (ds->dir_port == 60099 ?
+ 1 : 0)
+ );
+ tt_assert(found_default_fallback == 0);
+
+ /* There's no easy way of checking that we have included all the
+ * default Bridge authorities (except for hard-coding tonga's details),
+ * so let's assume that if the total count above is correct,
+ * we have the right ones.
+ */
+ }
+ }
+
+ /*
+ 4. Outcome: Use Set Custom Fallback Directory
+ - Use Default Bridge & Directory Authorities
+ Cases expected to yield this outcome:
+ 1 (DirAuthorities, AlternateBridgeAuthority and AlternateDirAuthority
+ are all NULL, but FallbackDir is set)
+ */
+
+ /* Case 1: 0001 - DirAuthorities, AlternateBridgeAuthority
+ & AlternateDirAuthority Not Set, FallbackDir Set */
+ {
+ /* clear fallback dirs counter */
+ n_add_default_fallback_dir_servers_known_default = 0;
+
+ /* clear options*/
+ memset(options, 0, sizeof(or_options_t));
+
+ /* clear any previous dir servers:
+ consider_adding_dir_servers() should do this anyway */
+ clear_dir_servers();
+
+ /* assign options: 0001 */
+ options->DirAuthorities = NULL;
+ options->AlternateBridgeAuthority = NULL;
+ options->AlternateDirAuthority = NULL;
+ options->FallbackDir = test_fallback_directory;
+
+ /* parse options - ensure we always update by passing NULL old_options */
+ consider_adding_dir_servers(options, NULL);
+
+ /* check outcome */
+
+ /* we must not have added the default fallback dirs */
+ tt_assert(n_add_default_fallback_dir_servers_known_default == 0);
+
+ {
+ /* trusted_dir_servers */
+ const smartlist_t *dir_servers = router_get_trusted_dir_servers();
+ /* (No D0), (No B1), Default Bridge Authorities,
+ * (No A2), Default v3 Directory Authorities */
+ tt_assert(smartlist_len(dir_servers) == n_default_authorities);
+
+ /* (No DirAuthorities) - D0 - dir_port: 60090 */
+ int found_D0 = 0;
+ SMARTLIST_FOREACH(dir_servers,
+ dir_server_t *,
+ ds,
+ /* increment the found counter if dir_port matches */
+ found_D0 +=
+ (ds->dir_port == 60090 ?
+ 1 : 0)
+ );
+ tt_assert(found_D0 == 0);
+
+ /* (No AlternateBridgeAuthority) - B1 - dir_port: 60091 */
+ int found_B1 = 0;
+ SMARTLIST_FOREACH(dir_servers,
+ dir_server_t *,
+ ds,
+ /* increment the found counter if dir_port matches */
+ found_B1 +=
+ (ds->dir_port == 60091 ?
+ 1 : 0)
+ );
+ tt_assert(found_B1 == 0);
+
+ /* (No AlternateDirAuthority) - A2 - dir_port: 60092 */
+ int found_A2 = 0;
+ SMARTLIST_FOREACH(dir_servers,
+ dir_server_t *,
+ ds,
+ /* increment the found counter if dir_port matches */
+ found_A2 +=
+ (ds->dir_port == 60092 ?
+ 1 : 0)
+ );
+ tt_assert(found_A2 == 0);
+
+ /* There's no easy way of checking that we have included all the
+ * default Bridge & V3 Directory authorities, so let's assume that
+ * if the total count above is correct, we have the right ones.
+ */
+ }
+
+ {
+ /* fallback_dir_servers */
+ const smartlist_t *fallback_servers = router_get_fallback_dir_servers();
+ /* (No D0), (No B1), Default Bridge Authorities,
+ * (No A2), Default v3 Directory Authorities,
+ * Custom Fallback Directory, (No Default Fallback Directories) */
+ tt_assert(smartlist_len(fallback_servers) ==
+ 1 + n_default_authorities);
+
+ /* (No DirAuthorities) - D0 - dir_port: 60090 */
+ int found_D0 = 0;
+ SMARTLIST_FOREACH(fallback_servers,
+ dir_server_t *,
+ ds,
+ /* increment the found counter if dir_port matches */
+ found_D0 +=
+ (ds->dir_port == 60090 ?
+ 1 : 0)
+ );
+ tt_assert(found_D0 == 0);
+
+ /* (No AlternateBridgeAuthority) - B1 - dir_port: 60091 */
+ int found_B1 = 0;
+ SMARTLIST_FOREACH(fallback_servers,
+ dir_server_t *,
+ ds,
+ /* increment the found counter if dir_port matches */
+ found_B1 +=
+ (ds->dir_port == 60091 ?
+ 1 : 0)
+ );
+ tt_assert(found_B1 == 0);
+
+ /* (No AlternateDirAuthority) - A2 - dir_port: 60092 */
+ int found_A2 = 0;
+ SMARTLIST_FOREACH(fallback_servers,
+ dir_server_t *,
+ ds,
+ /* increment the found counter if dir_port matches */
+ found_A2 +=
+ (ds->dir_port == 60092 ?
+ 1 : 0)
+ );
+ tt_assert(found_A2 == 0);
+
+ /* Custom FallbackDir - No Nickname - dir_port: 60093 */
+ int found_non_default_fallback = 0;
+ SMARTLIST_FOREACH(fallback_servers,
+ dir_server_t *,
+ ds,
+ /* increment the found counter if dir_port matches */
+ found_non_default_fallback +=
+ (ds->dir_port == 60093 ?
+ 1 : 0)
+ );
+ tt_assert(found_non_default_fallback == 1);
+
+ /* (No Default FallbackDir) - No Nickname - dir_port: 60099 */
+ int found_default_fallback = 0;
+ SMARTLIST_FOREACH(fallback_servers,
+ dir_server_t *,
+ ds,
+ /* increment the found counter if dir_port matches */
+ found_default_fallback +=
+ (ds->dir_port == 60099 ?
+ 1 : 0)
+ );
+ tt_assert(found_default_fallback == 0);
+
+ /* There's no easy way of checking that we have included all the
+ * default Bridge & V3 Directory authorities, so let's assume that
+ * if the total count above is correct, we have the right ones.
+ */
+ }
+ }
+
+ /*
+ 5. Outcome: Use All Defaults
+ - Use Default Bridge & Directory Authorities, Default Fallback Directories
+ Cases expected to yield this outcome:
+ 0 (DirAuthorities, AlternateBridgeAuthority, AlternateDirAuthority
+ and FallbackDir are all NULL)
+ */
+
+ /* Case 0: 0000 - All Not Set */
+ {
+ /* clear fallback dirs counter */
+ n_add_default_fallback_dir_servers_known_default = 0;
+
+ /* clear options*/
+ memset(options, 0, sizeof(or_options_t));
+
+ /* clear any previous dir servers:
+ consider_adding_dir_servers() should do this anyway */
+ clear_dir_servers();
+
+ /* assign options: 0001 */
+ options->DirAuthorities = NULL;
+ options->AlternateBridgeAuthority = NULL;
+ options->AlternateDirAuthority = NULL;
+ options->FallbackDir = NULL;
+
+ /* parse options - ensure we always update by passing NULL old_options */
+ consider_adding_dir_servers(options, NULL);
+
+ /* check outcome */
+
+ /* we must have added the default fallback dirs */
+ tt_assert(n_add_default_fallback_dir_servers_known_default == 1);
+
+ {
+ /* trusted_dir_servers */
+ const smartlist_t *dir_servers = router_get_trusted_dir_servers();
+ /* (No D0), (No B1), Default Bridge Authorities,
+ * (No A2), Default v3 Directory Authorities */
+ tt_assert(smartlist_len(dir_servers) == n_default_authorities);
+
+ /* (No DirAuthorities) - D0 - dir_port: 60090 */
+ int found_D0 = 0;
+ SMARTLIST_FOREACH(dir_servers,
+ dir_server_t *,
+ ds,
+ /* increment the found counter if dir_port matches */
+ found_D0 +=
+ (ds->dir_port == 60090 ?
+ 1 : 0)
+ );
+ tt_assert(found_D0 == 0);
+
+ /* (No AlternateBridgeAuthority) - B1 - dir_port: 60091 */
+ int found_B1 = 0;
+ SMARTLIST_FOREACH(dir_servers,
+ dir_server_t *,
+ ds,
+ /* increment the found counter if dir_port matches */
+ found_B1 +=
+ (ds->dir_port == 60091 ?
+ 1 : 0)
+ );
+ tt_assert(found_B1 == 0);
+
+ /* (No AlternateDirAuthority) - A2 - dir_port: 60092 */
+ int found_A2 = 0;
+ SMARTLIST_FOREACH(dir_servers,
+ dir_server_t *,
+ ds,
+ /* increment the found counter if dir_port matches */
+ found_A2 +=
+ (ds->dir_port == 60092 ?
+ 1 : 0)
+ );
+ tt_assert(found_A2 == 0);
+
+ /* There's no easy way of checking that we have included all the
+ * default Bridge & V3 Directory authorities, so let's assume that
+ * if the total count above is correct, we have the right ones.
+ */
+ }
+
+ {
+ /* fallback_dir_servers */
+ const smartlist_t *fallback_servers = router_get_fallback_dir_servers();
+ /* (No D0), (No B1), Default Bridge Authorities,
+ * (No A2), Default v3 Directory Authorities,
+ * (No Custom Fallback Directory), Default Fallback Directories */
+ tt_assert(smartlist_len(fallback_servers) ==
+ n_default_authorities + n_default_fallback_dir);
+
+ /* (No DirAuthorities) - D0 - dir_port: 60090 */
+ int found_D0 = 0;
+ SMARTLIST_FOREACH(fallback_servers,
+ dir_server_t *,
+ ds,
+ /* increment the found counter if dir_port matches */
+ found_D0 +=
+ (ds->dir_port == 60090 ?
+ 1 : 0)
+ );
+ tt_assert(found_D0 == 0);
+
+ /* (No AlternateBridgeAuthority) - B1 - dir_port: 60091 */
+ int found_B1 = 0;
+ SMARTLIST_FOREACH(fallback_servers,
+ dir_server_t *,
+ ds,
+ /* increment the found counter if dir_port matches */
+ found_B1 +=
+ (ds->dir_port == 60091 ?
+ 1 : 0)
+ );
+ tt_assert(found_B1 == 0);
+
+ /* (No AlternateDirAuthority) - A2 - dir_port: 60092 */
+ int found_A2 = 0;
+ SMARTLIST_FOREACH(fallback_servers,
+ dir_server_t *,
+ ds,
+ /* increment the found counter if dir_port matches */
+ found_A2 +=
+ (ds->dir_port == 60092 ?
+ 1 : 0)
+ );
+ tt_assert(found_A2 == 0);
+
+ /* Custom FallbackDir - No Nickname - dir_port: 60093 */
+ int found_non_default_fallback = 0;
+ SMARTLIST_FOREACH(fallback_servers,
+ dir_server_t *,
+ ds,
+ /* increment the found counter if dir_port matches */
+ found_non_default_fallback +=
+ (ds->dir_port == 60093 ?
+ 1 : 0)
+ );
+ tt_assert(found_non_default_fallback == 0);
+
+ /* (No Default FallbackDir) - No Nickname - dir_port: 60099 */
+ int found_default_fallback = 0;
+ SMARTLIST_FOREACH(fallback_servers,
+ dir_server_t *,
+ ds,
+ /* increment the found counter if dir_port matches */
+ found_default_fallback +=
+ (ds->dir_port == 60099 ?
+ 1 : 0)
+ );
+ tt_assert(found_default_fallback == 1);
+
+ /* There's no easy way of checking that we have included all the
+ * default Bridge & V3 Directory authorities, and the default
+ * Fallback Directories, so let's assume that if the total count
+ * above is correct, we have the right ones.
+ */
+ }
+ }
+
+ done:
+ clear_dir_servers();
+
+ tor_free(test_dir_authority->key);
+ tor_free(test_dir_authority->value);
+ tor_free(test_dir_authority);
+
+ tor_free(test_alt_dir_authority->key);
+ tor_free(test_alt_dir_authority->value);
+ tor_free(test_alt_dir_authority);
+
+ tor_free(test_alt_bridge_authority->key);
+ tor_free(test_alt_bridge_authority->value);
+ tor_free(test_alt_bridge_authority);
+
+ tor_free(test_fallback_directory->key);
+ tor_free(test_fallback_directory->value);
+ tor_free(test_fallback_directory);
+
+ options->DirAuthorities = NULL;
+ options->AlternateBridgeAuthority = NULL;
+ options->AlternateDirAuthority = NULL;
+ options->FallbackDir = NULL;
+ or_options_free(options);
+
+ UNMOCK(add_default_fallback_dir_servers);
+}
+
#define CONFIG_TEST(name, flags) \
{ #name, test_config_ ## name, flags, NULL, NULL }
struct testcase_t config_tests[] = {
+ CONFIG_TEST(adding_dir_servers, TT_FORK),
CONFIG_TEST(resolve_my_address, TT_FORK),
CONFIG_TEST(addressmap, 0),
CONFIG_TEST(parse_bridge_line, 0),
diff --git a/src/test/test_controller.c b/src/test/test_controller.c
new file mode 100644
index 0000000000..b40825bb5d
--- /dev/null
+++ b/src/test/test_controller.c
@@ -0,0 +1,163 @@
+/* Copyright (c) 2015, The Tor Project, Inc. */
+/* See LICENSE for licensing information */
+
+#define CONTROL_PRIVATE
+#include "or.h"
+#include "control.h"
+#include "rendservice.h"
+#include "test.h"
+
+static void
+test_add_onion_helper_keyarg(void *arg)
+{
+ crypto_pk_t *pk = NULL;
+ crypto_pk_t *pk2 = NULL;
+ const char *key_new_alg = NULL;
+ char *key_new_blob = NULL;
+ char *err_msg = NULL;
+ char *encoded = NULL;
+ char *arg_str = NULL;
+
+ (void) arg;
+
+ /* Test explicit RSA1024 key generation. */
+ pk = add_onion_helper_keyarg("NEW:RSA1024", 0, &key_new_alg, &key_new_blob,
+ &err_msg);
+ tt_assert(pk);
+ tt_str_op(key_new_alg, OP_EQ, "RSA1024");
+ tt_assert(key_new_blob);
+ tt_assert(!err_msg);
+
+ /* Test "BEST" key generation (Assumes BEST = RSA1024). */
+ crypto_pk_free(pk);
+ tor_free(key_new_blob);
+ pk = add_onion_helper_keyarg("NEW:BEST", 0, &key_new_alg, &key_new_blob,
+ &err_msg);
+ tt_assert(pk);
+ tt_str_op(key_new_alg, OP_EQ, "RSA1024");
+ tt_assert(key_new_blob);
+ tt_assert(!err_msg);
+
+ /* Test discarding the private key. */
+ crypto_pk_free(pk);
+ tor_free(key_new_blob);
+ pk = add_onion_helper_keyarg("NEW:BEST", 1, &key_new_alg, &key_new_blob,
+ &err_msg);
+ tt_assert(pk);
+ tt_assert(!key_new_alg);
+ tt_assert(!key_new_blob);
+ tt_assert(!err_msg);
+
+ /* Test generating a invalid key type. */
+ crypto_pk_free(pk);
+ pk = add_onion_helper_keyarg("NEW:RSA512", 0, &key_new_alg, &key_new_blob,
+ &err_msg);
+ tt_assert(!pk);
+ tt_assert(!key_new_alg);
+ tt_assert(!key_new_blob);
+ tt_assert(err_msg);
+
+ /* Test loading a RSA1024 key. */
+ tor_free(err_msg);
+ pk = pk_generate(0);
+ tt_int_op(0, OP_EQ, crypto_pk_base64_encode(pk, &encoded));
+ tor_asprintf(&arg_str, "RSA1024:%s", encoded);
+ pk2 = add_onion_helper_keyarg(arg_str, 0, &key_new_alg, &key_new_blob,
+ &err_msg);
+ tt_assert(pk2);
+ tt_assert(!key_new_alg);
+ tt_assert(!key_new_blob);
+ tt_assert(!err_msg);
+ tt_assert(crypto_pk_cmp_keys(pk, pk2) == 0);
+
+ /* Test loading a invalid key type. */
+ tor_free(arg_str);
+ crypto_pk_free(pk); pk = NULL;
+ tor_asprintf(&arg_str, "RSA512:%s", encoded);
+ pk = add_onion_helper_keyarg(arg_str, 0, &key_new_alg, &key_new_blob,
+ &err_msg);
+ tt_assert(!pk);
+ tt_assert(!key_new_alg);
+ tt_assert(!key_new_blob);
+ tt_assert(err_msg);
+
+ /* Test loading a invalid key. */
+ tor_free(arg_str);
+ crypto_pk_free(pk); pk = NULL;
+ tor_free(err_msg);
+ encoded[strlen(encoded)/2] = '\0';
+ tor_asprintf(&arg_str, "RSA1024:%s", encoded);
+ pk = add_onion_helper_keyarg(arg_str, 0, &key_new_alg, &key_new_blob,
+ &err_msg);
+ tt_assert(!pk);
+ tt_assert(!key_new_alg);
+ tt_assert(!key_new_blob);
+ tt_assert(err_msg);
+
+ done:
+ crypto_pk_free(pk);
+ crypto_pk_free(pk2);
+ tor_free(key_new_blob);
+ tor_free(err_msg);
+ tor_free(encoded);
+ tor_free(arg_str);
+}
+
+static void
+test_rend_service_parse_port_config(void *arg)
+{
+ const char *sep = ",";
+ rend_service_port_config_t *cfg = NULL;
+ char *err_msg = NULL;
+
+ (void)arg;
+
+ /* Test "VIRTPORT" only. */
+ cfg = rend_service_parse_port_config("80", sep, &err_msg);
+ tt_assert(cfg);
+ tt_assert(!err_msg);
+
+ /* Test "VIRTPORT,TARGET" (Target is port). */
+ rend_service_port_config_free(cfg);
+ cfg = rend_service_parse_port_config("80,8080", sep, &err_msg);
+ tt_assert(cfg);
+ tt_assert(!err_msg);
+
+ /* Test "VIRTPORT,TARGET" (Target is IPv4:port). */
+ rend_service_port_config_free(cfg);
+ cfg = rend_service_parse_port_config("80,192.0.2.1:8080", sep, &err_msg);
+ tt_assert(cfg);
+ tt_assert(!err_msg);
+
+ /* Test "VIRTPORT,TARGET" (Target is IPv6:port). */
+ rend_service_port_config_free(cfg);
+ cfg = rend_service_parse_port_config("80,[2001:db8::1]:8080", sep, &err_msg);
+ tt_assert(cfg);
+ tt_assert(!err_msg);
+
+ /* XXX: Someone should add tests for AF_UNIX targets if supported. */
+
+ /* Test empty config. */
+ rend_service_port_config_free(cfg);
+ cfg = rend_service_parse_port_config("", sep, &err_msg);
+ tt_assert(!cfg);
+ tt_assert(err_msg);
+
+ /* Test invalid port. */
+ tor_free(err_msg);
+ cfg = rend_service_parse_port_config("90001", sep, &err_msg);
+ tt_assert(!cfg);
+ tt_assert(err_msg);
+
+ done:
+ rend_service_port_config_free(cfg);
+ tor_free(err_msg);
+}
+
+struct testcase_t controller_tests[] = {
+ { "add_onion_helper_keyarg", test_add_onion_helper_keyarg, 0, NULL, NULL },
+ { "rend_service_parse_port_config", test_rend_service_parse_port_config, 0,
+ NULL, NULL },
+ END_OF_TESTCASES
+};
+
diff --git a/src/test/test_controller_events.c b/src/test/test_controller_events.c
index e36314da45..bd91aecd94 100644
--- a/src/test/test_controller_events.c
+++ b/src/test/test_controller_events.c
@@ -293,6 +293,104 @@ test_cntev_format_cell_stats(void *arg)
tor_free(n_chan);
}
+static void
+test_cntev_event_mask(void *arg)
+{
+ unsigned int test_event, selected_event;
+ (void)arg;
+
+ /* Check that nothing is interesting when no events are set */
+ control_testing_set_global_event_mask(EVENT_MASK_NONE_);
+
+ /* Check that nothing is interesting between EVENT_MIN_ and EVENT_MAX_ */
+ for (test_event = EVENT_MIN_; test_event <= EVENT_MAX_; test_event++)
+ tt_assert(!control_event_is_interesting(test_event));
+
+ /* Check that nothing is interesting outside EVENT_MIN_ to EVENT_MAX_
+ * This will break if control_event_is_interesting() checks its arguments */
+ for (test_event = 0; test_event < EVENT_MIN_; test_event++)
+ tt_assert(!control_event_is_interesting(test_event));
+ for (test_event = EVENT_MAX_ + 1;
+ test_event < EVENT_CAPACITY_;
+ test_event++)
+ tt_assert(!control_event_is_interesting(test_event));
+
+ /* Check that all valid events are interesting when all events are set */
+ control_testing_set_global_event_mask(EVENT_MASK_ALL_);
+
+ /* Check that everything is interesting between EVENT_MIN_ and EVENT_MAX_ */
+ for (test_event = EVENT_MIN_; test_event <= EVENT_MAX_; test_event++)
+ tt_assert(control_event_is_interesting(test_event));
+
+ /* Check that nothing is interesting outside EVENT_MIN_ to EVENT_MAX_
+ * This will break if control_event_is_interesting() checks its arguments */
+ for (test_event = 0; test_event < EVENT_MIN_; test_event++)
+ tt_assert(!control_event_is_interesting(test_event));
+ for (test_event = EVENT_MAX_ + 1;
+ test_event < EVENT_CAPACITY_;
+ test_event++)
+ tt_assert(!control_event_is_interesting(test_event));
+
+ /* Check that only that event is interesting when a single event is set */
+ for (selected_event = EVENT_MIN_;
+ selected_event <= EVENT_MAX_;
+ selected_event++) {
+ control_testing_set_global_event_mask(EVENT_MASK_(selected_event));
+
+ /* Check that only this event is interesting
+ * between EVENT_MIN_ and EVENT_MAX_ */
+ for (test_event = EVENT_MIN_; test_event <= EVENT_MAX_; test_event++) {
+ if (test_event == selected_event) {
+ tt_assert(control_event_is_interesting(test_event));
+ } else {
+ tt_assert(!control_event_is_interesting(test_event));
+ }
+ }
+
+ /* Check that nothing is interesting outside EVENT_MIN_ to EVENT_MAX_
+ * This will break if control_event_is_interesting checks its arguments */
+ for (test_event = 0; test_event < EVENT_MIN_; test_event++)
+ tt_assert(!control_event_is_interesting(test_event));
+ for (test_event = EVENT_MAX_ + 1;
+ test_event < EVENT_CAPACITY_;
+ test_event++)
+ tt_assert(!control_event_is_interesting(test_event));
+ }
+
+ /* Check that only that event is not-interesting
+ * when a single event is un-set */
+ for (selected_event = EVENT_MIN_;
+ selected_event <= EVENT_MAX_;
+ selected_event++) {
+ control_testing_set_global_event_mask(
+ EVENT_MASK_ALL_
+ & ~(EVENT_MASK_(selected_event))
+ );
+
+ /* Check that only this event is not-interesting
+ * between EVENT_MIN_ and EVENT_MAX_ */
+ for (test_event = EVENT_MIN_; test_event <= EVENT_MAX_; test_event++) {
+ if (test_event == selected_event) {
+ tt_assert(!control_event_is_interesting(test_event));
+ } else {
+ tt_assert(control_event_is_interesting(test_event));
+ }
+ }
+
+ /* Check that nothing is interesting outside EVENT_MIN_ to EVENT_MAX_
+ * This will break if control_event_is_interesting checks its arguments */
+ for (test_event = 0; test_event < EVENT_MIN_; test_event++)
+ tt_assert(!control_event_is_interesting(test_event));
+ for (test_event = EVENT_MAX_ + 1;
+ test_event < EVENT_CAPACITY_;
+ test_event++)
+ tt_assert(!control_event_is_interesting(test_event));
+ }
+
+ done:
+ ;
+}
+
#define TEST(name, flags) \
{ #name, test_cntev_ ## name, flags, 0, NULL }
@@ -302,6 +400,7 @@ struct testcase_t controller_event_tests[] = {
TEST(sum_up_cell_stats, 0),
TEST(append_cell_stats, 0),
TEST(format_cell_stats, 0),
+ TEST(event_mask, 0),
END_OF_TESTCASES
};
diff --git a/src/test/test_crypto.c b/src/test/test_crypto.c
index 4a5a12c50a..84a90da7f8 100644
--- a/src/test/test_crypto.c
+++ b/src/test/test_crypto.c
@@ -5,7 +5,6 @@
#include "orconfig.h"
#define CRYPTO_CURVE25519_PRIVATE
-#define CRYPTO_S2K_PRIVATE
#include "or.h"
#include "test.h"
#include "aes.h"
@@ -14,8 +13,8 @@
#include "crypto_curve25519.h"
#include "crypto_ed25519.h"
#include "ed25519_vectors.inc"
-#include "crypto_s2k.h"
-#include "crypto_pwbox.h"
+
+#include <openssl/evp.h>
extern const char AUTHORITY_SIGNKEY_3[];
extern const char AUTHORITY_SIGNKEY_A_DIGEST[];
@@ -108,6 +107,30 @@ test_crypto_rng(void *arg)
;
}
+static void
+test_crypto_rng_range(void *arg)
+{
+ int got_smallest = 0, got_largest = 0;
+ int i;
+
+ (void)arg;
+ for (i = 0; i < 1000; ++i) {
+ int x = crypto_rand_int_range(5,9);
+ tt_int_op(x, OP_GE, 5);
+ tt_int_op(x, OP_LT, 9);
+ if (x == 5)
+ got_smallest = 1;
+ if (x == 8)
+ got_largest = 1;
+ }
+
+ /* These fail with probability 1/10^603. */
+ tt_assert(got_smallest);
+ tt_assert(got_largest);
+ done:
+ ;
+}
+
/** Run unit tests for our AES functionality */
static void
test_crypto_aes(void *arg)
@@ -574,6 +597,42 @@ test_crypto_pk_fingerprints(void *arg)
tor_free(mem_op_hex_tmp);
}
+static void
+test_crypto_pk_base64(void *arg)
+{
+ crypto_pk_t *pk1 = NULL;
+ crypto_pk_t *pk2 = NULL;
+ char *encoded = NULL;
+
+ (void)arg;
+
+ /* Test Base64 encoding a key. */
+ pk1 = pk_generate(0);
+ tt_assert(pk1);
+ tt_int_op(0, OP_EQ, crypto_pk_base64_encode(pk1, &encoded));
+ tt_assert(encoded);
+
+ /* Test decoding a valid key. */
+ pk2 = crypto_pk_base64_decode(encoded, strlen(encoded));
+ tt_assert(pk2);
+ tt_assert(crypto_pk_cmp_keys(pk1,pk2) == 0);
+ crypto_pk_free(pk2);
+
+ /* Test decoding a invalid key (not Base64). */
+ static const char *invalid_b64 = "The key is in another castle!";
+ pk2 = crypto_pk_base64_decode(invalid_b64, strlen(invalid_b64));
+ tt_assert(!pk2);
+
+ /* Test decoding a truncated Base64 blob. */
+ pk2 = crypto_pk_base64_decode(encoded, strlen(encoded)/2);
+ tt_assert(!pk2);
+
+ done:
+ crypto_pk_free(pk1);
+ crypto_pk_free(pk2);
+ tor_free(encoded);
+}
+
/** Sanity check for crypto pk digests */
static void
test_crypto_digests(void *arg)
@@ -604,6 +663,22 @@ test_crypto_digests(void *arg)
crypto_pk_free(k);
}
+/** Encode src into dest with OpenSSL's EVP Encode interface, returning the
+ * length of the encoded data in bytes.
+ */
+static int
+base64_encode_evp(char *dest, char *src, size_t srclen)
+{
+ const unsigned char *s = (unsigned char*)src;
+ EVP_ENCODE_CTX ctx;
+ int len, ret;
+
+ EVP_EncodeInit(&ctx);
+ EVP_EncodeUpdate(&ctx, (unsigned char *)dest, &len, s, (int)srclen);
+ EVP_EncodeFinal(&ctx, (unsigned char *)(dest + len), &ret);
+ return ret+ len;
+}
+
/** Run unit tests for misc crypto formatting functionality (base64, base32,
* fingerprints, etc) */
static void
@@ -621,7 +696,7 @@ test_crypto_formats(void *arg)
/* Base64 tests */
memset(data1, 6, 1024);
for (idx = 0; idx < 10; ++idx) {
- i = base64_encode(data2, 1024, data1, idx);
+ i = base64_encode(data2, 1024, data1, idx, 0);
tt_int_op(i, OP_GE, 0);
j = base64_decode(data3, 1024, data2, i);
tt_int_op(j,OP_EQ, idx);
@@ -631,7 +706,7 @@ test_crypto_formats(void *arg)
strlcpy(data1, "Test string that contains 35 chars.", 1024);
strlcat(data1, " 2nd string that contains 35 chars.", 1024);
- i = base64_encode(data2, 1024, data1, 71);
+ i = base64_encode(data2, 1024, data1, 71, 0);
tt_int_op(i, OP_GE, 0);
j = base64_decode(data3, 1024, data2, i);
tt_int_op(j,OP_EQ, 71);
@@ -650,6 +725,20 @@ test_crypto_formats(void *arg)
tt_assert(digest_from_base64(data3, "###") < 0);
+ for (i = 0; i < 256; i++) {
+ /* Test the multiline format Base64 encoder with 0 .. 256 bytes of
+ * output against OpenSSL.
+ */
+ const size_t enclen = base64_encode_size(i, BASE64_ENCODE_MULTILINE);
+ data1[i] = i;
+ j = base64_encode(data2, 1024, data1, i, BASE64_ENCODE_MULTILINE);
+ tt_int_op(j, OP_EQ, enclen);
+ j = base64_encode_evp(data3, data1, i);
+ tt_int_op(j, OP_EQ, enclen);
+ tt_mem_op(data2, OP_EQ, data3, enclen);
+ tt_int_op(j, OP_EQ, strlen(data2));
+ }
+
/* Encoding SHA256 */
crypto_rand(data2, DIGEST256_LEN);
memset(data2, 100, 1024);
@@ -712,379 +801,6 @@ test_crypto_formats(void *arg)
tor_free(data3);
}
-/** Run unit tests for our secret-to-key passphrase hashing functionality. */
-static void
-test_crypto_s2k_rfc2440(void *arg)
-{
- char buf[29];
- char buf2[29];
- char *buf3 = NULL;
- int i;
-
- (void)arg;
- memset(buf, 0, sizeof(buf));
- memset(buf2, 0, sizeof(buf2));
- buf3 = tor_malloc(65536);
- memset(buf3, 0, 65536);
-
- secret_to_key_rfc2440(buf+9, 20, "", 0, buf);
- crypto_digest(buf2+9, buf3, 1024);
- tt_mem_op(buf,OP_EQ, buf2, 29);
-
- memcpy(buf,"vrbacrda",8);
- memcpy(buf2,"vrbacrda",8);
- buf[8] = 96;
- buf2[8] = 96;
- secret_to_key_rfc2440(buf+9, 20, "12345678", 8, buf);
- for (i = 0; i < 65536; i += 16) {
- memcpy(buf3+i, "vrbacrda12345678", 16);
- }
- crypto_digest(buf2+9, buf3, 65536);
- tt_mem_op(buf,OP_EQ, buf2, 29);
-
- done:
- tor_free(buf3);
-}
-
-static void
-run_s2k_tests(const unsigned flags, const unsigned type,
- int speclen, const int keylen, int legacy)
-{
- uint8_t buf[S2K_MAXLEN], buf2[S2K_MAXLEN], buf3[S2K_MAXLEN];
- int r;
- size_t sz;
- const char pw1[] = "You can't come in here unless you say swordfish!";
- const char pw2[] = "Now, I give you one more guess.";
-
- r = secret_to_key_new(buf, sizeof(buf), &sz,
- pw1, strlen(pw1), flags);
- tt_int_op(r, OP_EQ, S2K_OKAY);
- tt_int_op(buf[0], OP_EQ, type);
-
- tt_int_op(sz, OP_EQ, keylen + speclen);
-
- if (legacy) {
- memmove(buf, buf+1, sz-1);
- --sz;
- --speclen;
- }
-
- tt_int_op(S2K_OKAY, OP_EQ,
- secret_to_key_check(buf, sz, pw1, strlen(pw1)));
-
- tt_int_op(S2K_BAD_SECRET, OP_EQ,
- secret_to_key_check(buf, sz, pw2, strlen(pw2)));
-
- /* Move key to buf2, and clear it. */
- memset(buf3, 0, sizeof(buf3));
- memcpy(buf2, buf+speclen, keylen);
- memset(buf+speclen, 0, sz - speclen);
-
- /* Derivekey should produce the same results. */
- tt_int_op(S2K_OKAY, OP_EQ,
- secret_to_key_derivekey(buf3, keylen, buf, speclen, pw1, strlen(pw1)));
-
- tt_mem_op(buf2, OP_EQ, buf3, keylen);
-
- /* Derivekey with a longer output should fill the output. */
- memset(buf2, 0, sizeof(buf2));
- tt_int_op(S2K_OKAY, OP_EQ,
- secret_to_key_derivekey(buf2, sizeof(buf2), buf, speclen,
- pw1, strlen(pw1)));
-
- tt_mem_op(buf2, OP_NE, buf3, sizeof(buf2));
-
- memset(buf3, 0, sizeof(buf3));
- tt_int_op(S2K_OKAY, OP_EQ,
- secret_to_key_derivekey(buf3, sizeof(buf3), buf, speclen,
- pw1, strlen(pw1)));
- tt_mem_op(buf2, OP_EQ, buf3, sizeof(buf3));
- tt_assert(!tor_mem_is_zero((char*)buf2+keylen, sizeof(buf2)-keylen));
-
- done:
- ;
-}
-
-static void
-test_crypto_s2k_general(void *arg)
-{
- const char *which = arg;
-
- if (!strcmp(which, "scrypt")) {
- run_s2k_tests(0, 2, 19, 32, 0);
- } else if (!strcmp(which, "scrypt-low")) {
- run_s2k_tests(S2K_FLAG_LOW_MEM, 2, 19, 32, 0);
- } else if (!strcmp(which, "pbkdf2")) {
- run_s2k_tests(S2K_FLAG_USE_PBKDF2, 1, 18, 20, 0);
- } else if (!strcmp(which, "rfc2440")) {
- run_s2k_tests(S2K_FLAG_NO_SCRYPT, 0, 10, 20, 0);
- } else if (!strcmp(which, "rfc2440-legacy")) {
- run_s2k_tests(S2K_FLAG_NO_SCRYPT, 0, 10, 20, 1);
- } else {
- tt_fail();
- }
-}
-
-static void
-test_crypto_s2k_errors(void *arg)
-{
- uint8_t buf[S2K_MAXLEN], buf2[S2K_MAXLEN];
- size_t sz;
-
- (void)arg;
-
- /* Bogus specifiers: simple */
- tt_int_op(S2K_BAD_LEN, OP_EQ,
- secret_to_key_derivekey(buf, sizeof(buf),
- (const uint8_t*)"", 0, "ABC", 3));
- tt_int_op(S2K_BAD_ALGORITHM, OP_EQ,
- secret_to_key_derivekey(buf, sizeof(buf),
- (const uint8_t*)"\x10", 1, "ABC", 3));
- tt_int_op(S2K_BAD_LEN, OP_EQ,
- secret_to_key_derivekey(buf, sizeof(buf),
- (const uint8_t*)"\x01\x02", 2, "ABC", 3));
-
- tt_int_op(S2K_BAD_LEN, OP_EQ,
- secret_to_key_check((const uint8_t*)"", 0, "ABC", 3));
- tt_int_op(S2K_BAD_ALGORITHM, OP_EQ,
- secret_to_key_check((const uint8_t*)"\x10", 1, "ABC", 3));
- tt_int_op(S2K_BAD_LEN, OP_EQ,
- secret_to_key_check((const uint8_t*)"\x01\x02", 2, "ABC", 3));
-
- /* too long gets "BAD_LEN" too */
- memset(buf, 0, sizeof(buf));
- buf[0] = 2;
- tt_int_op(S2K_BAD_LEN, OP_EQ,
- secret_to_key_derivekey(buf2, sizeof(buf2),
- buf, sizeof(buf), "ABC", 3));
-
- /* Truncated output */
-#ifdef HAVE_LIBSCRYPT_H
- tt_int_op(S2K_TRUNCATED, OP_EQ, secret_to_key_new(buf, 50, &sz,
- "ABC", 3, 0));
- tt_int_op(S2K_TRUNCATED, OP_EQ, secret_to_key_new(buf, 50, &sz,
- "ABC", 3, S2K_FLAG_LOW_MEM));
-#endif
- tt_int_op(S2K_TRUNCATED, OP_EQ, secret_to_key_new(buf, 37, &sz,
- "ABC", 3, S2K_FLAG_USE_PBKDF2));
- tt_int_op(S2K_TRUNCATED, OP_EQ, secret_to_key_new(buf, 29, &sz,
- "ABC", 3, S2K_FLAG_NO_SCRYPT));
-
-#ifdef HAVE_LIBSCRYPT_H
- tt_int_op(S2K_TRUNCATED, OP_EQ, secret_to_key_make_specifier(buf, 18, 0));
- tt_int_op(S2K_TRUNCATED, OP_EQ, secret_to_key_make_specifier(buf, 18,
- S2K_FLAG_LOW_MEM));
-#endif
- tt_int_op(S2K_TRUNCATED, OP_EQ, secret_to_key_make_specifier(buf, 17,
- S2K_FLAG_USE_PBKDF2));
- tt_int_op(S2K_TRUNCATED, OP_EQ, secret_to_key_make_specifier(buf, 9,
- S2K_FLAG_NO_SCRYPT));
-
- /* Now try using type-specific bogus specifiers. */
-
- /* It's a bad pbkdf2 buffer if it has an iteration count that would overflow
- * int32_t. */
- memset(buf, 0, sizeof(buf));
- buf[0] = 1; /* pbkdf2 */
- buf[17] = 100; /* 1<<100 is much bigger than INT32_MAX */
- tt_int_op(S2K_BAD_PARAMS, OP_EQ,
- secret_to_key_derivekey(buf2, sizeof(buf2),
- buf, 18, "ABC", 3));
-
-#ifdef HAVE_LIBSCRYPT_H
- /* It's a bad scrypt buffer if N would overflow uint64 */
- memset(buf, 0, sizeof(buf));
- buf[0] = 2; /* scrypt */
- buf[17] = 100; /* 1<<100 is much bigger than UINT64_MAX */
- tt_int_op(S2K_BAD_PARAMS, OP_EQ,
- secret_to_key_derivekey(buf2, sizeof(buf2),
- buf, 19, "ABC", 3));
-#endif
-
- done:
- ;
-}
-
-static void
-test_crypto_scrypt_vectors(void *arg)
-{
- char *mem_op_hex_tmp = NULL;
- uint8_t spec[64], out[64];
-
- (void)arg;
-#ifndef HAVE_LIBSCRYPT_H
- if (1)
- tt_skip();
-#endif
-
- /* Test vectors from
- http://tools.ietf.org/html/draft-josefsson-scrypt-kdf-00 section 11.
-
- Note that the names of 'r' and 'N' are switched in that section. Or
- possibly in libscrypt.
- */
-
- base16_decode((char*)spec, sizeof(spec),
- "0400", 4);
- memset(out, 0x00, sizeof(out));
- tt_int_op(64, OP_EQ,
- secret_to_key_compute_key(out, 64, spec, 2, "", 0, 2));
- test_memeq_hex(out,
- "77d6576238657b203b19ca42c18a0497"
- "f16b4844e3074ae8dfdffa3fede21442"
- "fcd0069ded0948f8326a753a0fc81f17"
- "e8d3e0fb2e0d3628cf35e20c38d18906");
-
- base16_decode((char*)spec, sizeof(spec),
- "4e61436c" "0A34", 12);
- memset(out, 0x00, sizeof(out));
- tt_int_op(64, OP_EQ,
- secret_to_key_compute_key(out, 64, spec, 6, "password", 8, 2));
- test_memeq_hex(out,
- "fdbabe1c9d3472007856e7190d01e9fe"
- "7c6ad7cbc8237830e77376634b373162"
- "2eaf30d92e22a3886ff109279d9830da"
- "c727afb94a83ee6d8360cbdfa2cc0640");
-
- base16_decode((char*)spec, sizeof(spec),
- "536f6469756d43686c6f72696465" "0e30", 32);
- memset(out, 0x00, sizeof(out));
- tt_int_op(64, OP_EQ,
- secret_to_key_compute_key(out, 64, spec, 16,
- "pleaseletmein", 13, 2));
- test_memeq_hex(out,
- "7023bdcb3afd7348461c06cd81fd38eb"
- "fda8fbba904f8e3ea9b543f6545da1f2"
- "d5432955613f0fcf62d49705242a9af9"
- "e61e85dc0d651e40dfcf017b45575887");
-
- base16_decode((char*)spec, sizeof(spec),
- "536f6469756d43686c6f72696465" "1430", 32);
- memset(out, 0x00, sizeof(out));
- tt_int_op(64, OP_EQ,
- secret_to_key_compute_key(out, 64, spec, 16,
- "pleaseletmein", 13, 2));
- test_memeq_hex(out,
- "2101cb9b6a511aaeaddbbe09cf70f881"
- "ec568d574a2ffd4dabe5ee9820adaa47"
- "8e56fd8f4ba5d09ffa1c6d927c40f4c3"
- "37304049e8a952fbcbf45c6fa77a41a4");
-
- done:
- tor_free(mem_op_hex_tmp);
-}
-
-static void
-test_crypto_pbkdf2_vectors(void *arg)
-{
- char *mem_op_hex_tmp = NULL;
- uint8_t spec[64], out[64];
- (void)arg;
-
- /* Test vectors from RFC6070, section 2 */
- base16_decode((char*)spec, sizeof(spec),
- "73616c74" "00" , 10);
- memset(out, 0x00, sizeof(out));
- tt_int_op(20, OP_EQ,
- secret_to_key_compute_key(out, 20, spec, 5, "password", 8, 1));
- test_memeq_hex(out, "0c60c80f961f0e71f3a9b524af6012062fe037a6");
-
- base16_decode((char*)spec, sizeof(spec),
- "73616c74" "01" , 10);
- memset(out, 0x00, sizeof(out));
- tt_int_op(20, OP_EQ,
- secret_to_key_compute_key(out, 20, spec, 5, "password", 8, 1));
- test_memeq_hex(out, "ea6c014dc72d6f8ccd1ed92ace1d41f0d8de8957");
-
- base16_decode((char*)spec, sizeof(spec),
- "73616c74" "0C" , 10);
- memset(out, 0x00, sizeof(out));
- tt_int_op(20, OP_EQ,
- secret_to_key_compute_key(out, 20, spec, 5, "password", 8, 1));
- test_memeq_hex(out, "4b007901b765489abead49d926f721d065a429c1");
-
- base16_decode((char*)spec, sizeof(spec),
- "73616c74" "18" , 10);
- memset(out, 0x00, sizeof(out));
- tt_int_op(20, OP_EQ,
- secret_to_key_compute_key(out, 20, spec, 5, "password", 8, 1));
- test_memeq_hex(out, "eefe3d61cd4da4e4e9945b3d6ba2158c2634e984");
-
- base16_decode((char*)spec, sizeof(spec),
- "73616c7453414c5473616c7453414c5473616c745"
- "3414c5473616c7453414c5473616c74" "0C" , 74);
- memset(out, 0x00, sizeof(out));
- tt_int_op(25, OP_EQ,
- secret_to_key_compute_key(out, 25, spec, 37,
- "passwordPASSWORDpassword", 24, 1));
- test_memeq_hex(out, "3d2eec4fe41c849b80c8d83662c0e44a8b291a964cf2f07038");
-
- base16_decode((char*)spec, sizeof(spec),
- "7361006c74" "0c" , 12);
- memset(out, 0x00, sizeof(out));
- tt_int_op(16, OP_EQ,
- secret_to_key_compute_key(out, 16, spec, 6, "pass\0word", 9, 1));
- test_memeq_hex(out, "56fa6aa75548099dcc37d7f03425e0c3");
-
- done:
- tor_free(mem_op_hex_tmp);
-}
-
-static void
-test_crypto_pwbox(void *arg)
-{
- uint8_t *boxed=NULL, *decoded=NULL;
- size_t len, dlen;
- unsigned i;
- const char msg[] = "This bunny reminds you that you still have a "
- "salamander in your sylladex. She is holding the bunny Dave got you. "
- "It’s sort of uncanny how similar they are, aside from the knitted "
- "enhancements. Seriously, what are the odds?? So weird.";
- const char pw[] = "I'm a night owl and a wise bird too";
-
- const unsigned flags[] = { 0,
- S2K_FLAG_NO_SCRYPT,
- S2K_FLAG_LOW_MEM,
- S2K_FLAG_NO_SCRYPT|S2K_FLAG_LOW_MEM,
- S2K_FLAG_USE_PBKDF2 };
- (void)arg;
-
- for (i = 0; i < ARRAY_LENGTH(flags); ++i) {
- tt_int_op(0, OP_EQ, crypto_pwbox(&boxed, &len,
- (const uint8_t*)msg, strlen(msg),
- pw, strlen(pw), flags[i]));
- tt_assert(boxed);
- tt_assert(len > 128+32);
-
- tt_int_op(0, OP_EQ, crypto_unpwbox(&decoded, &dlen, boxed, len,
- pw, strlen(pw)));
-
- tt_assert(decoded);
- tt_uint_op(dlen, OP_EQ, strlen(msg));
- tt_mem_op(decoded, OP_EQ, msg, dlen);
-
- tor_free(decoded);
-
- tt_int_op(UNPWBOX_BAD_SECRET, OP_EQ, crypto_unpwbox(&decoded, &dlen,
- boxed, len,
- pw, strlen(pw)-1));
- boxed[len-1] ^= 1;
- tt_int_op(UNPWBOX_BAD_SECRET, OP_EQ, crypto_unpwbox(&decoded, &dlen,
- boxed, len,
- pw, strlen(pw)));
- boxed[0] = 255;
- tt_int_op(UNPWBOX_CORRUPTED, OP_EQ, crypto_unpwbox(&decoded, &dlen,
- boxed, len,
- pw, strlen(pw)));
-
- tor_free(boxed);
- }
-
- done:
- tor_free(boxed);
- tor_free(decoded);
-}
-
/** Test AES-CTR encryption and decryption with IV. */
static void
test_crypto_aes_iv(void *arg)
@@ -1975,54 +1691,25 @@ test_crypto_siphash(void *arg)
;
}
-static void *
-pass_data_setup_fn(const struct testcase_t *testcase)
-{
- return testcase->setup_data;
-}
-static int
-pass_data_cleanup_fn(const struct testcase_t *testcase, void *ptr)
-{
- (void)ptr;
- (void)testcase;
- return 1;
-}
-static const struct testcase_setup_t pass_data = {
- pass_data_setup_fn, pass_data_cleanup_fn
-};
-
#define CRYPTO_LEGACY(name) \
{ #name, test_crypto_ ## name , 0, NULL, NULL }
struct testcase_t crypto_tests[] = {
CRYPTO_LEGACY(formats),
CRYPTO_LEGACY(rng),
- { "aes_AES", test_crypto_aes, TT_FORK, &pass_data, (void*)"aes" },
- { "aes_EVP", test_crypto_aes, TT_FORK, &pass_data, (void*)"evp" },
+ { "rng_range", test_crypto_rng_range, 0, NULL, NULL },
+ { "aes_AES", test_crypto_aes, TT_FORK, &passthrough_setup, (void*)"aes" },
+ { "aes_EVP", test_crypto_aes, TT_FORK, &passthrough_setup, (void*)"evp" },
CRYPTO_LEGACY(sha),
CRYPTO_LEGACY(pk),
{ "pk_fingerprints", test_crypto_pk_fingerprints, TT_FORK, NULL, NULL },
+ { "pk_base64", test_crypto_pk_base64, TT_FORK, NULL, NULL },
CRYPTO_LEGACY(digests),
CRYPTO_LEGACY(dh),
- CRYPTO_LEGACY(s2k_rfc2440),
-#ifdef HAVE_LIBSCRYPT_H
- { "s2k_scrypt", test_crypto_s2k_general, 0, &pass_data,
- (void*)"scrypt" },
- { "s2k_scrypt_low", test_crypto_s2k_general, 0, &pass_data,
- (void*)"scrypt-low" },
-#endif
- { "s2k_pbkdf2", test_crypto_s2k_general, 0, &pass_data,
- (void*)"pbkdf2" },
- { "s2k_rfc2440_general", test_crypto_s2k_general, 0, &pass_data,
- (void*)"rfc2440" },
- { "s2k_rfc2440_legacy", test_crypto_s2k_general, 0, &pass_data,
- (void*)"rfc2440-legacy" },
- { "s2k_errors", test_crypto_s2k_errors, 0, NULL, NULL },
- { "scrypt_vectors", test_crypto_scrypt_vectors, 0, NULL, NULL },
- { "pbkdf2_vectors", test_crypto_pbkdf2_vectors, 0, NULL, NULL },
- { "pwbox", test_crypto_pwbox, 0, NULL, NULL },
- { "aes_iv_AES", test_crypto_aes_iv, TT_FORK, &pass_data, (void*)"aes" },
- { "aes_iv_EVP", test_crypto_aes_iv, TT_FORK, &pass_data, (void*)"evp" },
+ { "aes_iv_AES", test_crypto_aes_iv, TT_FORK, &passthrough_setup,
+ (void*)"aes" },
+ { "aes_iv_EVP", test_crypto_aes_iv, TT_FORK, &passthrough_setup,
+ (void*)"evp" },
CRYPTO_LEGACY(base32_decode),
{ "kdf_TAP", test_crypto_kdf_TAP, 0, NULL, NULL },
{ "hkdf_sha256", test_crypto_hkdf_sha256, 0, NULL, NULL },
diff --git a/src/test/test_crypto_slow.c b/src/test/test_crypto_slow.c
new file mode 100644
index 0000000000..a0f6cdc116
--- /dev/null
+++ b/src/test/test_crypto_slow.c
@@ -0,0 +1,409 @@
+/* Copyright (c) 2001-2004, Roger Dingledine.
+ * Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
+ * Copyright (c) 2007-2015, The Tor Project, Inc. */
+/* See LICENSE for licensing information */
+
+#include "orconfig.h"
+#define CRYPTO_S2K_PRIVATE
+#include "or.h"
+#include "test.h"
+#include "crypto_s2k.h"
+#include "crypto_pwbox.h"
+
+/** Run unit tests for our secret-to-key passphrase hashing functionality. */
+static void
+test_crypto_s2k_rfc2440(void *arg)
+{
+ char buf[29];
+ char buf2[29];
+ char *buf3 = NULL;
+ int i;
+
+ (void)arg;
+ memset(buf, 0, sizeof(buf));
+ memset(buf2, 0, sizeof(buf2));
+ buf3 = tor_malloc(65536);
+ memset(buf3, 0, 65536);
+
+ secret_to_key_rfc2440(buf+9, 20, "", 0, buf);
+ crypto_digest(buf2+9, buf3, 1024);
+ tt_mem_op(buf,OP_EQ, buf2, 29);
+
+ memcpy(buf,"vrbacrda",8);
+ memcpy(buf2,"vrbacrda",8);
+ buf[8] = 96;
+ buf2[8] = 96;
+ secret_to_key_rfc2440(buf+9, 20, "12345678", 8, buf);
+ for (i = 0; i < 65536; i += 16) {
+ memcpy(buf3+i, "vrbacrda12345678", 16);
+ }
+ crypto_digest(buf2+9, buf3, 65536);
+ tt_mem_op(buf,OP_EQ, buf2, 29);
+
+ done:
+ tor_free(buf3);
+}
+
+static void
+run_s2k_tests(const unsigned flags, const unsigned type,
+ int speclen, const int keylen, int legacy)
+{
+ uint8_t buf[S2K_MAXLEN], buf2[S2K_MAXLEN], buf3[S2K_MAXLEN];
+ int r;
+ size_t sz;
+ const char pw1[] = "You can't come in here unless you say swordfish!";
+ const char pw2[] = "Now, I give you one more guess.";
+
+ r = secret_to_key_new(buf, sizeof(buf), &sz,
+ pw1, strlen(pw1), flags);
+ tt_int_op(r, OP_EQ, S2K_OKAY);
+ tt_int_op(buf[0], OP_EQ, type);
+
+ tt_int_op(sz, OP_EQ, keylen + speclen);
+
+ if (legacy) {
+ memmove(buf, buf+1, sz-1);
+ --sz;
+ --speclen;
+ }
+
+ tt_int_op(S2K_OKAY, OP_EQ,
+ secret_to_key_check(buf, sz, pw1, strlen(pw1)));
+
+ tt_int_op(S2K_BAD_SECRET, OP_EQ,
+ secret_to_key_check(buf, sz, pw2, strlen(pw2)));
+
+ /* Move key to buf2, and clear it. */
+ memset(buf3, 0, sizeof(buf3));
+ memcpy(buf2, buf+speclen, keylen);
+ memset(buf+speclen, 0, sz - speclen);
+
+ /* Derivekey should produce the same results. */
+ tt_int_op(S2K_OKAY, OP_EQ,
+ secret_to_key_derivekey(buf3, keylen, buf, speclen, pw1, strlen(pw1)));
+
+ tt_mem_op(buf2, OP_EQ, buf3, keylen);
+
+ /* Derivekey with a longer output should fill the output. */
+ memset(buf2, 0, sizeof(buf2));
+ tt_int_op(S2K_OKAY, OP_EQ,
+ secret_to_key_derivekey(buf2, sizeof(buf2), buf, speclen,
+ pw1, strlen(pw1)));
+
+ tt_mem_op(buf2, OP_NE, buf3, sizeof(buf2));
+
+ memset(buf3, 0, sizeof(buf3));
+ tt_int_op(S2K_OKAY, OP_EQ,
+ secret_to_key_derivekey(buf3, sizeof(buf3), buf, speclen,
+ pw1, strlen(pw1)));
+ tt_mem_op(buf2, OP_EQ, buf3, sizeof(buf3));
+ tt_assert(!tor_mem_is_zero((char*)buf2+keylen, sizeof(buf2)-keylen));
+
+ done:
+ ;
+}
+
+static void
+test_crypto_s2k_general(void *arg)
+{
+ const char *which = arg;
+
+ if (!strcmp(which, "scrypt")) {
+ run_s2k_tests(0, 2, 19, 32, 0);
+ } else if (!strcmp(which, "scrypt-low")) {
+ run_s2k_tests(S2K_FLAG_LOW_MEM, 2, 19, 32, 0);
+ } else if (!strcmp(which, "pbkdf2")) {
+ run_s2k_tests(S2K_FLAG_USE_PBKDF2, 1, 18, 20, 0);
+ } else if (!strcmp(which, "rfc2440")) {
+ run_s2k_tests(S2K_FLAG_NO_SCRYPT, 0, 10, 20, 0);
+ } else if (!strcmp(which, "rfc2440-legacy")) {
+ run_s2k_tests(S2K_FLAG_NO_SCRYPT, 0, 10, 20, 1);
+ } else {
+ tt_fail();
+ }
+}
+
+static void
+test_crypto_s2k_errors(void *arg)
+{
+ uint8_t buf[S2K_MAXLEN], buf2[S2K_MAXLEN];
+ size_t sz;
+
+ (void)arg;
+
+ /* Bogus specifiers: simple */
+ tt_int_op(S2K_BAD_LEN, OP_EQ,
+ secret_to_key_derivekey(buf, sizeof(buf),
+ (const uint8_t*)"", 0, "ABC", 3));
+ tt_int_op(S2K_BAD_ALGORITHM, OP_EQ,
+ secret_to_key_derivekey(buf, sizeof(buf),
+ (const uint8_t*)"\x10", 1, "ABC", 3));
+ tt_int_op(S2K_BAD_LEN, OP_EQ,
+ secret_to_key_derivekey(buf, sizeof(buf),
+ (const uint8_t*)"\x01\x02", 2, "ABC", 3));
+
+ tt_int_op(S2K_BAD_LEN, OP_EQ,
+ secret_to_key_check((const uint8_t*)"", 0, "ABC", 3));
+ tt_int_op(S2K_BAD_ALGORITHM, OP_EQ,
+ secret_to_key_check((const uint8_t*)"\x10", 1, "ABC", 3));
+ tt_int_op(S2K_BAD_LEN, OP_EQ,
+ secret_to_key_check((const uint8_t*)"\x01\x02", 2, "ABC", 3));
+
+ /* too long gets "BAD_LEN" too */
+ memset(buf, 0, sizeof(buf));
+ buf[0] = 2;
+ tt_int_op(S2K_BAD_LEN, OP_EQ,
+ secret_to_key_derivekey(buf2, sizeof(buf2),
+ buf, sizeof(buf), "ABC", 3));
+
+ /* Truncated output */
+#ifdef HAVE_LIBSCRYPT_H
+ tt_int_op(S2K_TRUNCATED, OP_EQ, secret_to_key_new(buf, 50, &sz,
+ "ABC", 3, 0));
+ tt_int_op(S2K_TRUNCATED, OP_EQ, secret_to_key_new(buf, 50, &sz,
+ "ABC", 3, S2K_FLAG_LOW_MEM));
+#endif
+ tt_int_op(S2K_TRUNCATED, OP_EQ, secret_to_key_new(buf, 37, &sz,
+ "ABC", 3, S2K_FLAG_USE_PBKDF2));
+ tt_int_op(S2K_TRUNCATED, OP_EQ, secret_to_key_new(buf, 29, &sz,
+ "ABC", 3, S2K_FLAG_NO_SCRYPT));
+
+#ifdef HAVE_LIBSCRYPT_H
+ tt_int_op(S2K_TRUNCATED, OP_EQ, secret_to_key_make_specifier(buf, 18, 0));
+ tt_int_op(S2K_TRUNCATED, OP_EQ, secret_to_key_make_specifier(buf, 18,
+ S2K_FLAG_LOW_MEM));
+#endif
+ tt_int_op(S2K_TRUNCATED, OP_EQ, secret_to_key_make_specifier(buf, 17,
+ S2K_FLAG_USE_PBKDF2));
+ tt_int_op(S2K_TRUNCATED, OP_EQ, secret_to_key_make_specifier(buf, 9,
+ S2K_FLAG_NO_SCRYPT));
+
+ /* Now try using type-specific bogus specifiers. */
+
+ /* It's a bad pbkdf2 buffer if it has an iteration count that would overflow
+ * int32_t. */
+ memset(buf, 0, sizeof(buf));
+ buf[0] = 1; /* pbkdf2 */
+ buf[17] = 100; /* 1<<100 is much bigger than INT32_MAX */
+ tt_int_op(S2K_BAD_PARAMS, OP_EQ,
+ secret_to_key_derivekey(buf2, sizeof(buf2),
+ buf, 18, "ABC", 3));
+
+#ifdef HAVE_LIBSCRYPT_H
+ /* It's a bad scrypt buffer if N would overflow uint64 */
+ memset(buf, 0, sizeof(buf));
+ buf[0] = 2; /* scrypt */
+ buf[17] = 100; /* 1<<100 is much bigger than UINT64_MAX */
+ tt_int_op(S2K_BAD_PARAMS, OP_EQ,
+ secret_to_key_derivekey(buf2, sizeof(buf2),
+ buf, 19, "ABC", 3));
+#endif
+
+ done:
+ ;
+}
+
+static void
+test_crypto_scrypt_vectors(void *arg)
+{
+ char *mem_op_hex_tmp = NULL;
+ uint8_t spec[64], out[64];
+
+ (void)arg;
+#ifndef HAVE_LIBSCRYPT_H
+ if (1)
+ tt_skip();
+#endif
+
+ /* Test vectors from
+ http://tools.ietf.org/html/draft-josefsson-scrypt-kdf-00 section 11.
+
+ Note that the names of 'r' and 'N' are switched in that section. Or
+ possibly in libscrypt.
+ */
+
+ base16_decode((char*)spec, sizeof(spec),
+ "0400", 4);
+ memset(out, 0x00, sizeof(out));
+ tt_int_op(64, OP_EQ,
+ secret_to_key_compute_key(out, 64, spec, 2, "", 0, 2));
+ test_memeq_hex(out,
+ "77d6576238657b203b19ca42c18a0497"
+ "f16b4844e3074ae8dfdffa3fede21442"
+ "fcd0069ded0948f8326a753a0fc81f17"
+ "e8d3e0fb2e0d3628cf35e20c38d18906");
+
+ base16_decode((char*)spec, sizeof(spec),
+ "4e61436c" "0A34", 12);
+ memset(out, 0x00, sizeof(out));
+ tt_int_op(64, OP_EQ,
+ secret_to_key_compute_key(out, 64, spec, 6, "password", 8, 2));
+ test_memeq_hex(out,
+ "fdbabe1c9d3472007856e7190d01e9fe"
+ "7c6ad7cbc8237830e77376634b373162"
+ "2eaf30d92e22a3886ff109279d9830da"
+ "c727afb94a83ee6d8360cbdfa2cc0640");
+
+ base16_decode((char*)spec, sizeof(spec),
+ "536f6469756d43686c6f72696465" "0e30", 32);
+ memset(out, 0x00, sizeof(out));
+ tt_int_op(64, OP_EQ,
+ secret_to_key_compute_key(out, 64, spec, 16,
+ "pleaseletmein", 13, 2));
+ test_memeq_hex(out,
+ "7023bdcb3afd7348461c06cd81fd38eb"
+ "fda8fbba904f8e3ea9b543f6545da1f2"
+ "d5432955613f0fcf62d49705242a9af9"
+ "e61e85dc0d651e40dfcf017b45575887");
+
+ base16_decode((char*)spec, sizeof(spec),
+ "536f6469756d43686c6f72696465" "1430", 32);
+ memset(out, 0x00, sizeof(out));
+ tt_int_op(64, OP_EQ,
+ secret_to_key_compute_key(out, 64, spec, 16,
+ "pleaseletmein", 13, 2));
+ test_memeq_hex(out,
+ "2101cb9b6a511aaeaddbbe09cf70f881"
+ "ec568d574a2ffd4dabe5ee9820adaa47"
+ "8e56fd8f4ba5d09ffa1c6d927c40f4c3"
+ "37304049e8a952fbcbf45c6fa77a41a4");
+
+ done:
+ tor_free(mem_op_hex_tmp);
+}
+
+static void
+test_crypto_pbkdf2_vectors(void *arg)
+{
+ char *mem_op_hex_tmp = NULL;
+ uint8_t spec[64], out[64];
+ (void)arg;
+
+ /* Test vectors from RFC6070, section 2 */
+ base16_decode((char*)spec, sizeof(spec),
+ "73616c74" "00" , 10);
+ memset(out, 0x00, sizeof(out));
+ tt_int_op(20, OP_EQ,
+ secret_to_key_compute_key(out, 20, spec, 5, "password", 8, 1));
+ test_memeq_hex(out, "0c60c80f961f0e71f3a9b524af6012062fe037a6");
+
+ base16_decode((char*)spec, sizeof(spec),
+ "73616c74" "01" , 10);
+ memset(out, 0x00, sizeof(out));
+ tt_int_op(20, OP_EQ,
+ secret_to_key_compute_key(out, 20, spec, 5, "password", 8, 1));
+ test_memeq_hex(out, "ea6c014dc72d6f8ccd1ed92ace1d41f0d8de8957");
+
+ base16_decode((char*)spec, sizeof(spec),
+ "73616c74" "0C" , 10);
+ memset(out, 0x00, sizeof(out));
+ tt_int_op(20, OP_EQ,
+ secret_to_key_compute_key(out, 20, spec, 5, "password", 8, 1));
+ test_memeq_hex(out, "4b007901b765489abead49d926f721d065a429c1");
+
+ base16_decode((char*)spec, sizeof(spec),
+ "73616c74" "18" , 10);
+ memset(out, 0x00, sizeof(out));
+ tt_int_op(20, OP_EQ,
+ secret_to_key_compute_key(out, 20, spec, 5, "password", 8, 1));
+ test_memeq_hex(out, "eefe3d61cd4da4e4e9945b3d6ba2158c2634e984");
+
+ base16_decode((char*)spec, sizeof(spec),
+ "73616c7453414c5473616c7453414c5473616c745"
+ "3414c5473616c7453414c5473616c74" "0C" , 74);
+ memset(out, 0x00, sizeof(out));
+ tt_int_op(25, OP_EQ,
+ secret_to_key_compute_key(out, 25, spec, 37,
+ "passwordPASSWORDpassword", 24, 1));
+ test_memeq_hex(out, "3d2eec4fe41c849b80c8d83662c0e44a8b291a964cf2f07038");
+
+ base16_decode((char*)spec, sizeof(spec),
+ "7361006c74" "0c" , 12);
+ memset(out, 0x00, sizeof(out));
+ tt_int_op(16, OP_EQ,
+ secret_to_key_compute_key(out, 16, spec, 6, "pass\0word", 9, 1));
+ test_memeq_hex(out, "56fa6aa75548099dcc37d7f03425e0c3");
+
+ done:
+ tor_free(mem_op_hex_tmp);
+}
+
+static void
+test_crypto_pwbox(void *arg)
+{
+ uint8_t *boxed=NULL, *decoded=NULL;
+ size_t len, dlen;
+ unsigned i;
+ const char msg[] = "This bunny reminds you that you still have a "
+ "salamander in your sylladex. She is holding the bunny Dave got you. "
+ "It’s sort of uncanny how similar they are, aside from the knitted "
+ "enhancements. Seriously, what are the odds?? So weird.";
+ const char pw[] = "I'm a night owl and a wise bird too";
+
+ const unsigned flags[] = { 0,
+ S2K_FLAG_NO_SCRYPT,
+ S2K_FLAG_LOW_MEM,
+ S2K_FLAG_NO_SCRYPT|S2K_FLAG_LOW_MEM,
+ S2K_FLAG_USE_PBKDF2 };
+ (void)arg;
+
+ for (i = 0; i < ARRAY_LENGTH(flags); ++i) {
+ tt_int_op(0, OP_EQ, crypto_pwbox(&boxed, &len,
+ (const uint8_t*)msg, strlen(msg),
+ pw, strlen(pw), flags[i]));
+ tt_assert(boxed);
+ tt_assert(len > 128+32);
+
+ tt_int_op(0, OP_EQ, crypto_unpwbox(&decoded, &dlen, boxed, len,
+ pw, strlen(pw)));
+
+ tt_assert(decoded);
+ tt_uint_op(dlen, OP_EQ, strlen(msg));
+ tt_mem_op(decoded, OP_EQ, msg, dlen);
+
+ tor_free(decoded);
+
+ tt_int_op(UNPWBOX_BAD_SECRET, OP_EQ, crypto_unpwbox(&decoded, &dlen,
+ boxed, len,
+ pw, strlen(pw)-1));
+ boxed[len-1] ^= 1;
+ tt_int_op(UNPWBOX_BAD_SECRET, OP_EQ, crypto_unpwbox(&decoded, &dlen,
+ boxed, len,
+ pw, strlen(pw)));
+ boxed[0] = 255;
+ tt_int_op(UNPWBOX_CORRUPTED, OP_EQ, crypto_unpwbox(&decoded, &dlen,
+ boxed, len,
+ pw, strlen(pw)));
+
+ tor_free(boxed);
+ }
+
+ done:
+ tor_free(boxed);
+ tor_free(decoded);
+}
+
+#define CRYPTO_LEGACY(name) \
+ { #name, test_crypto_ ## name , 0, NULL, NULL }
+
+struct testcase_t slow_crypto_tests[] = {
+ CRYPTO_LEGACY(s2k_rfc2440),
+#ifdef HAVE_LIBSCRYPT_H
+ { "s2k_scrypt", test_crypto_s2k_general, 0, &passthrough_setup,
+ (void*)"scrypt" },
+ { "s2k_scrypt_low", test_crypto_s2k_general, 0, &passthrough_setup,
+ (void*)"scrypt-low" },
+#endif
+ { "s2k_pbkdf2", test_crypto_s2k_general, 0, &passthrough_setup,
+ (void*)"pbkdf2" },
+ { "s2k_rfc2440_general", test_crypto_s2k_general, 0, &passthrough_setup,
+ (void*)"rfc2440" },
+ { "s2k_rfc2440_legacy", test_crypto_s2k_general, 0, &passthrough_setup,
+ (void*)"rfc2440-legacy" },
+ { "s2k_errors", test_crypto_s2k_errors, 0, NULL, NULL },
+ { "scrypt_vectors", test_crypto_scrypt_vectors, 0, NULL, NULL },
+ { "pbkdf2_vectors", test_crypto_pbkdf2_vectors, 0, NULL, NULL },
+ { "pwbox", test_crypto_pwbox, 0, NULL, NULL },
+ END_OF_TESTCASES
+};
+
diff --git a/src/test/test_dir.c b/src/test/test_dir.c
index c6594f8359..a949f5de73 100644
--- a/src/test/test_dir.c
+++ b/src/test/test_dir.c
@@ -714,9 +714,10 @@ mock_get_by_ei_desc_digest(const char *d)
static smartlist_t *mock_ei_insert_list = NULL;
static was_router_added_t
-mock_ei_insert(routerlist_t *rl, extrainfo_t *ei)
+mock_ei_insert(routerlist_t *rl, extrainfo_t *ei, int warn_if_incompatible)
{
(void) rl;
+ (void) warn_if_incompatible;
smartlist_add(mock_ei_insert_list, ei);
return ROUTER_ADDED_SUCCESSFULLY;
}
@@ -2929,6 +2930,175 @@ test_dir_http_handling(void *args)
tor_free(url);
}
+static void
+test_dir_purpose_needs_anonymity(void *arg)
+{
+ (void)arg;
+ tt_int_op(1, ==, purpose_needs_anonymity(0, ROUTER_PURPOSE_BRIDGE));
+ tt_int_op(1, ==, purpose_needs_anonymity(0, ROUTER_PURPOSE_GENERAL));
+ tt_int_op(0, ==, purpose_needs_anonymity(DIR_PURPOSE_FETCH_MICRODESC,
+ ROUTER_PURPOSE_GENERAL));
+ done: ;
+}
+
+static void
+test_dir_fetch_type(void *arg)
+{
+ (void)arg;
+ tt_assert(dir_fetch_type(DIR_PURPOSE_FETCH_MICRODESC, ROUTER_PURPOSE_GENERAL,
+ NULL) == MICRODESC_DIRINFO);
+ tt_assert(dir_fetch_type(DIR_PURPOSE_FETCH_SERVERDESC, ROUTER_PURPOSE_BRIDGE,
+ NULL) == BRIDGE_DIRINFO);
+ tt_assert(dir_fetch_type(DIR_PURPOSE_FETCH_CONSENSUS, ROUTER_PURPOSE_GENERAL,
+ "microdesc") == (V3_DIRINFO | MICRODESC_DIRINFO));
+ done: ;
+}
+
+static void
+test_dir_packages(void *arg)
+{
+ smartlist_t *votes = smartlist_new();
+ char *res = NULL;
+ (void)arg;
+
+#define BAD(s) \
+ tt_int_op(0, ==, validate_recommended_package_line(s));
+#define GOOD(s) \
+ tt_int_op(1, ==, validate_recommended_package_line(s));
+ GOOD("tor 0.2.6.3-alpha "
+ "http://torproject.example.com/dist/tor-0.2.6.3-alpha.tar.gz "
+ "sha256=sssdlkfjdsklfjdskfljasdklfj");
+ GOOD("tor 0.2.6.3-alpha "
+ "http://torproject.example.com/dist/tor-0.2.6.3-alpha.tar.gz "
+ "sha256=sssdlkfjdsklfjdskfljasdklfj blake2b=fred");
+ BAD("tor 0.2.6.3-alpha "
+ "http://torproject.example.com/dist/tor-0.2.6.3-alpha.tar.gz "
+ "sha256=sssdlkfjdsklfjdskfljasdklfj=");
+ BAD("tor 0.2.6.3-alpha "
+ "http://torproject.example.com/dist/tor-0.2.6.3-alpha.tar.gz "
+ "sha256=sssdlkfjdsklfjdskfljasdklfj blake2b");
+ BAD("tor 0.2.6.3-alpha "
+ "http://torproject.example.com/dist/tor-0.2.6.3-alpha.tar.gz ");
+ BAD("tor 0.2.6.3-alpha "
+ "http://torproject.example.com/dist/tor-0.2.6.3-alpha.tar.gz");
+ BAD("tor 0.2.6.3-alpha ");
+ BAD("tor 0.2.6.3-alpha");
+ BAD("tor ");
+ BAD("tor");
+ BAD("");
+ BAD("=foobar sha256="
+ "3c179f46ca77069a6a0bac70212a9b3b838b2f66129cb52d568837fc79d8fcc7");
+ BAD("= = sha256="
+ "3c179f46ca77069a6a0bac70212a9b3b838b2f66129cb52d568837fc79d8fcc7");
+
+ BAD("sha512= sha256="
+ "3c179f46ca77069a6a0bac70212a9b3b838b2f66129cb52d568837fc79d8fcc7");
+
+ smartlist_add(votes, tor_malloc_zero(sizeof(networkstatus_t)));
+ smartlist_add(votes, tor_malloc_zero(sizeof(networkstatus_t)));
+ smartlist_add(votes, tor_malloc_zero(sizeof(networkstatus_t)));
+ smartlist_add(votes, tor_malloc_zero(sizeof(networkstatus_t)));
+ smartlist_add(votes, tor_malloc_zero(sizeof(networkstatus_t)));
+ smartlist_add(votes, tor_malloc_zero(sizeof(networkstatus_t)));
+ SMARTLIST_FOREACH(votes, networkstatus_t *, ns,
+ ns->package_lines = smartlist_new());
+
+#define ADD(i, s) \
+ smartlist_add(((networkstatus_t*)smartlist_get(votes, (i)))->package_lines, \
+ (void*)(s));
+
+ /* Only one vote for this one. */
+ ADD(4, "cisco 99z http://foobar.example.com/ sha256=blahblah");
+
+ /* Only two matching entries for this one, but 3 voters */
+ ADD(1, "mystic 99y http://barfoo.example.com/ sha256=blahblah");
+ ADD(3, "mystic 99y http://foobar.example.com/ sha256=blahblah");
+ ADD(4, "mystic 99y http://foobar.example.com/ sha256=blahblah");
+
+ /* Only two matching entries for this one, but at least 4 voters */
+ ADD(1, "mystic 99p http://barfoo.example.com/ sha256=ggggggg");
+ ADD(3, "mystic 99p http://foobar.example.com/ sha256=blahblah");
+ ADD(4, "mystic 99p http://foobar.example.com/ sha256=blahblah");
+ ADD(5, "mystic 99p http://foobar.example.com/ sha256=ggggggg");
+
+ /* This one has only invalid votes. */
+ ADD(0, "haffenreffer 1.2 http://foobar.example.com/ sha256");
+ ADD(1, "haffenreffer 1.2 http://foobar.example.com/ ");
+ ADD(2, "haffenreffer 1.2 ");
+ ADD(3, "haffenreffer ");
+ ADD(4, "haffenreffer");
+
+ /* Three matching votes for this; it should actually go in! */
+ ADD(2, "element 0.66.1 http://quux.example.com/ sha256=abcdef");
+ ADD(3, "element 0.66.1 http://quux.example.com/ sha256=abcdef");
+ ADD(4, "element 0.66.1 http://quux.example.com/ sha256=abcdef");
+ ADD(1, "element 0.66.1 http://quum.example.com/ sha256=abcdef");
+ ADD(0, "element 0.66.1 http://quux.example.com/ sha256=abcde");
+
+ /* Three votes for A, three votes for B */
+ ADD(0, "clownshoes 22alpha1 http://quumble.example.com/ blake2=foob");
+ ADD(1, "clownshoes 22alpha1 http://quumble.example.com/ blake2=foob");
+ ADD(2, "clownshoes 22alpha1 http://quumble.example.com/ blake2=foob");
+ ADD(3, "clownshoes 22alpha1 http://quumble.example.com/ blake2=fooz");
+ ADD(4, "clownshoes 22alpha1 http://quumble.example.com/ blake2=fooz");
+ ADD(5, "clownshoes 22alpha1 http://quumble.example.com/ blake2=fooz");
+
+ /* Three votes for A, two votes for B */
+ ADD(1, "clownshoes 22alpha3 http://quumble.example.com/ blake2=foob");
+ ADD(2, "clownshoes 22alpha3 http://quumble.example.com/ blake2=foob");
+ ADD(3, "clownshoes 22alpha3 http://quumble.example.com/ blake2=fooz");
+ ADD(4, "clownshoes 22alpha3 http://quumble.example.com/ blake2=fooz");
+ ADD(5, "clownshoes 22alpha3 http://quumble.example.com/ blake2=fooz");
+
+ /* Four votes for A, two for B. */
+ ADD(0, "clownshoes 22alpha4 http://quumble.example.com/ blake2=foob");
+ ADD(1, "clownshoes 22alpha4 http://quumble.example.com/ blake2=foob");
+ ADD(2, "clownshoes 22alpha4 http://quumble.example.cam/ blake2=fooa");
+ ADD(3, "clownshoes 22alpha4 http://quumble.example.cam/ blake2=fooa");
+ ADD(4, "clownshoes 22alpha4 http://quumble.example.cam/ blake2=fooa");
+ ADD(5, "clownshoes 22alpha4 http://quumble.example.cam/ blake2=fooa");
+
+ /* Five votes for A ... all from the same guy. Three for B. */
+ ADD(0, "cbc 99.1.11.1.1 http://example.com/cbc/ cubehash=ahooy sha512=m");
+ ADD(1, "cbc 99.1.11.1.1 http://example.com/cbc/ cubehash=ahooy sha512=m");
+ ADD(3, "cbc 99.1.11.1.1 http://example.com/cbc/ cubehash=ahooy sha512=m");
+ ADD(2, "cbc 99.1.11.1.1 http://example.com/ cubehash=ahooy");
+ ADD(2, "cbc 99.1.11.1.1 http://example.com/ cubehash=ahooy");
+ ADD(2, "cbc 99.1.11.1.1 http://example.com/ cubehash=ahooy");
+ ADD(2, "cbc 99.1.11.1.1 http://example.com/ cubehash=ahooy");
+ ADD(2, "cbc 99.1.11.1.1 http://example.com/ cubehash=ahooy");
+
+ /* As above but new replaces old: no two match. */
+ ADD(0, "cbc 99.1.11.1.2 http://example.com/cbc/ cubehash=ahooy sha512=m");
+ ADD(1, "cbc 99.1.11.1.2 http://example.com/cbc/ cubehash=ahooy sha512=m");
+ ADD(1, "cbc 99.1.11.1.2 http://example.com/cbc/x cubehash=ahooy sha512=m");
+ ADD(2, "cbc 99.1.11.1.2 http://example.com/cbc/ cubehash=ahooy sha512=m");
+ ADD(2, "cbc 99.1.11.1.2 http://example.com/ cubehash=ahooy");
+ ADD(2, "cbc 99.1.11.1.2 http://example.com/ cubehash=ahooy");
+ ADD(2, "cbc 99.1.11.1.2 http://example.com/ cubehash=ahooy");
+ ADD(2, "cbc 99.1.11.1.2 http://example.com/ cubehash=ahooy");
+ ADD(2, "cbc 99.1.11.1.2 http://example.com/ cubehash=ahooy");
+
+ res = compute_consensus_package_lines(votes);
+ tt_assert(res);
+ tt_str_op(res, ==,
+ "package cbc 99.1.11.1.1 http://example.com/cbc/ cubehash=ahooy sha512=m\n"
+ "package clownshoes 22alpha3 http://quumble.example.com/ blake2=fooz\n"
+ "package clownshoes 22alpha4 http://quumble.example.cam/ blake2=fooa\n"
+ "package element 0.66.1 http://quux.example.com/ sha256=abcdef\n"
+ "package mystic 99y http://foobar.example.com/ sha256=blahblah\n"
+ );
+
+#undef ADD
+#undef BAD
+#undef GOOD
+ done:
+ SMARTLIST_FOREACH(votes, networkstatus_t *, ns,
+ { smartlist_free(ns->package_lines); tor_free(ns); });
+ smartlist_free(votes);
+ tor_free(res);
+}
+
#define DIR_LEGACY(name) \
{ #name, test_dir_ ## name , TT_FORK, NULL, NULL }
@@ -2956,6 +3126,9 @@ struct testcase_t dir_tests[] = {
DIR_LEGACY(clip_unmeasured_bw_kb_alt),
DIR(fmt_control_ns, 0),
DIR(http_handling, 0),
+ DIR(purpose_needs_anonymity, 0),
+ DIR(fetch_type, 0),
+ DIR(packages, 0),
END_OF_TESTCASES
};
diff --git a/src/test/test_entryconn.c b/src/test/test_entryconn.c
new file mode 100644
index 0000000000..6edc166743
--- /dev/null
+++ b/src/test/test_entryconn.c
@@ -0,0 +1,769 @@
+/* Copyright (c) 2014-2015, The Tor Project, Inc. */
+/* See LICENSE for licensing information */
+
+#include "orconfig.h"
+
+#define CONNECTION_PRIVATE
+#define CONNECTION_EDGE_PRIVATE
+
+#include "or.h"
+#include "test.h"
+
+#include "addressmap.h"
+#include "config.h"
+#include "confparse.h"
+#include "connection.h"
+#include "connection_edge.h"
+
+static void *
+entryconn_rewrite_setup(const struct testcase_t *tc)
+{
+ (void)tc;
+ entry_connection_t *ec = entry_connection_new(CONN_TYPE_AP, AF_INET);
+ addressmap_init();
+ return ec;
+}
+
+static int
+entryconn_rewrite_teardown(const struct testcase_t *tc, void *arg)
+{
+ (void)tc;
+ entry_connection_t *ec = arg;
+ if (ec)
+ connection_free_(ENTRY_TO_CONN(ec));
+ addressmap_free_all();
+ return 1;
+}
+
+static struct testcase_setup_t test_rewrite_setup = {
+ entryconn_rewrite_setup, entryconn_rewrite_teardown
+};
+
+/* Simple rewrite: no changes needed */
+static void
+test_entryconn_rewrite_basic(void *arg)
+{
+ entry_connection_t *ec = arg;
+ rewrite_result_t rr;
+
+ tt_assert(ec->socks_request);
+ strlcpy(ec->socks_request->address, "www.TORproject.org",
+ sizeof(ec->socks_request->address));
+ ec->socks_request->command = SOCKS_COMMAND_CONNECT;
+ connection_ap_handshake_rewrite(ec, &rr);
+
+ tt_int_op(rr.should_close, OP_EQ, 0);
+ tt_int_op(rr.end_reason, OP_EQ, 0);
+ tt_int_op(rr.automap, OP_EQ, 0);
+ tt_i64_op(rr.map_expires, OP_EQ, TIME_MAX);
+ tt_int_op(rr.exit_source, OP_EQ, ADDRMAPSRC_NONE);
+ tt_str_op(rr.orig_address, OP_EQ, "www.torproject.org");
+ tt_str_op(ec->socks_request->address, OP_EQ, "www.torproject.org");
+ tt_str_op(ec->original_dest_address, OP_EQ, "www.torproject.org");
+
+ done:
+ ;
+}
+
+/* Rewrite but reject because of disallowed .exit */
+static void
+test_entryconn_rewrite_bad_dotexit(void *arg)
+{
+ entry_connection_t *ec = arg;
+ rewrite_result_t rr;
+
+ get_options_mutable()->AllowDotExit = 0;
+ tt_assert(ec->socks_request);
+ strlcpy(ec->socks_request->address, "www.TORproject.org.foo.exit",
+ sizeof(ec->socks_request->address));
+ ec->socks_request->command = SOCKS_COMMAND_CONNECT;
+ connection_ap_handshake_rewrite(ec, &rr);
+
+ tt_int_op(rr.should_close, OP_EQ, 1);
+ tt_int_op(rr.end_reason, OP_EQ, END_STREAM_REASON_TORPROTOCOL);
+
+ done:
+ ;
+}
+
+/* Automap on resolve, connect to automapped address, resolve again and get
+ * same answer. (IPv4) */
+static void
+test_entryconn_rewrite_automap_ipv4(void *arg)
+{
+ entry_connection_t *ec = arg;
+ entry_connection_t *ec2=NULL, *ec3=NULL;
+ rewrite_result_t rr;
+ char *msg = NULL;
+
+ ec2 = entry_connection_new(CONN_TYPE_AP, AF_INET);
+ ec3 = entry_connection_new(CONN_TYPE_AP, AF_INET);
+
+ get_options_mutable()->AutomapHostsOnResolve = 1;
+ smartlist_add(get_options_mutable()->AutomapHostsSuffixes, tor_strdup("."));
+ parse_virtual_addr_network("127.202.0.0/16", AF_INET, 0, &msg);
+
+ /* Automap this on resolve. */
+ strlcpy(ec->socks_request->address, "WWW.MIT.EDU",
+ sizeof(ec->socks_request->address));
+ ec->socks_request->command = SOCKS_COMMAND_RESOLVE;
+ connection_ap_handshake_rewrite(ec, &rr);
+
+ tt_int_op(rr.automap, OP_EQ, 1);
+ tt_int_op(rr.should_close, OP_EQ, 0);
+ tt_int_op(rr.end_reason, OP_EQ, 0);
+ tt_i64_op(rr.map_expires, OP_EQ, TIME_MAX);
+ tt_int_op(rr.exit_source, OP_EQ, ADDRMAPSRC_NONE);
+ tt_str_op(rr.orig_address, OP_EQ, "www.mit.edu");
+ tt_str_op(ec->original_dest_address, OP_EQ, "www.mit.edu");
+
+ tt_assert(!strcmpstart(ec->socks_request->address,"127.202."));
+
+ /* Connect to it and make sure we get the original address back. */
+ strlcpy(ec2->socks_request->address, ec->socks_request->address,
+ sizeof(ec2->socks_request->address));
+
+ ec2->socks_request->command = SOCKS_COMMAND_CONNECT;
+ connection_ap_handshake_rewrite(ec2, &rr);
+
+ tt_int_op(rr.automap, OP_EQ, 0);
+ tt_int_op(rr.should_close, OP_EQ, 0);
+ tt_int_op(rr.end_reason, OP_EQ, 0);
+ tt_i64_op(rr.map_expires, OP_EQ, TIME_MAX);
+ tt_int_op(rr.exit_source, OP_EQ, ADDRMAPSRC_NONE);
+ tt_str_op(rr.orig_address, OP_EQ, ec->socks_request->address);
+ tt_str_op(ec2->original_dest_address, OP_EQ, ec->socks_request->address);
+ tt_str_op(ec2->socks_request->address, OP_EQ, "www.mit.edu");
+
+ /* Resolve it again, make sure the answer is the same. */
+ strlcpy(ec3->socks_request->address, "www.MIT.EDU",
+ sizeof(ec3->socks_request->address));
+ ec3->socks_request->command = SOCKS_COMMAND_RESOLVE;
+ connection_ap_handshake_rewrite(ec3, &rr);
+
+ tt_int_op(rr.automap, OP_EQ, 1);
+ tt_int_op(rr.should_close, OP_EQ, 0);
+ tt_int_op(rr.end_reason, OP_EQ, 0);
+ tt_i64_op(rr.map_expires, OP_EQ, TIME_MAX);
+ tt_int_op(rr.exit_source, OP_EQ, ADDRMAPSRC_NONE);
+ tt_str_op(rr.orig_address, OP_EQ, "www.mit.edu");
+ tt_str_op(ec3->original_dest_address, OP_EQ, "www.mit.edu");
+
+ tt_str_op(ec3->socks_request->address, OP_EQ,
+ ec->socks_request->address);
+
+ done:
+ connection_free_(ENTRY_TO_CONN(ec2));
+ connection_free_(ENTRY_TO_CONN(ec3));
+}
+
+/* Automap on resolve, connect to automapped address, resolve again and get
+ * same answer. (IPv6) */
+static void
+test_entryconn_rewrite_automap_ipv6(void *arg)
+{
+ (void)arg;
+ entry_connection_t *ec =NULL;
+ entry_connection_t *ec2=NULL, *ec3=NULL;
+ rewrite_result_t rr;
+ char *msg = NULL;
+
+ ec = entry_connection_new(CONN_TYPE_AP, AF_INET6);
+ ec2 = entry_connection_new(CONN_TYPE_AP, AF_INET6);
+ ec3 = entry_connection_new(CONN_TYPE_AP, AF_INET6);
+
+ get_options_mutable()->AutomapHostsOnResolve = 1;
+ smartlist_add(get_options_mutable()->AutomapHostsSuffixes, tor_strdup("."));
+ parse_virtual_addr_network("FE80::/32", AF_INET6, 0, &msg);
+
+ /* Automap this on resolve. */
+ strlcpy(ec->socks_request->address, "WWW.MIT.EDU",
+ sizeof(ec->socks_request->address));
+ ec->socks_request->command = SOCKS_COMMAND_RESOLVE;
+ connection_ap_handshake_rewrite(ec, &rr);
+
+ tt_int_op(rr.automap, OP_EQ, 1);
+ tt_int_op(rr.should_close, OP_EQ, 0);
+ tt_int_op(rr.end_reason, OP_EQ, 0);
+ tt_i64_op(rr.map_expires, OP_EQ, TIME_MAX);
+ tt_int_op(rr.exit_source, OP_EQ, ADDRMAPSRC_NONE);
+ tt_str_op(rr.orig_address, OP_EQ, "www.mit.edu");
+ tt_str_op(ec->original_dest_address, OP_EQ, "www.mit.edu");
+
+ /* Yes, this [ should be here. */
+ tt_assert(!strcmpstart(ec->socks_request->address,"[fe80:"));
+
+ /* Connect to it and make sure we get the original address back. */
+ strlcpy(ec2->socks_request->address, ec->socks_request->address,
+ sizeof(ec2->socks_request->address));
+
+ ec2->socks_request->command = SOCKS_COMMAND_CONNECT;
+ connection_ap_handshake_rewrite(ec2, &rr);
+
+ tt_int_op(rr.automap, OP_EQ, 0);
+ tt_int_op(rr.should_close, OP_EQ, 0);
+ tt_int_op(rr.end_reason, OP_EQ, 0);
+ tt_i64_op(rr.map_expires, OP_EQ, TIME_MAX);
+ tt_int_op(rr.exit_source, OP_EQ, ADDRMAPSRC_NONE);
+ tt_str_op(rr.orig_address, OP_EQ, ec->socks_request->address);
+ tt_str_op(ec2->original_dest_address, OP_EQ, ec->socks_request->address);
+ tt_str_op(ec2->socks_request->address, OP_EQ, "www.mit.edu");
+
+ /* Resolve it again, make sure the answer is the same. */
+ strlcpy(ec3->socks_request->address, "www.MIT.EDU",
+ sizeof(ec3->socks_request->address));
+ ec3->socks_request->command = SOCKS_COMMAND_RESOLVE;
+ connection_ap_handshake_rewrite(ec3, &rr);
+
+ tt_int_op(rr.automap, OP_EQ, 1);
+ tt_int_op(rr.should_close, OP_EQ, 0);
+ tt_int_op(rr.end_reason, OP_EQ, 0);
+ tt_i64_op(rr.map_expires, OP_EQ, TIME_MAX);
+ tt_int_op(rr.exit_source, OP_EQ, ADDRMAPSRC_NONE);
+ tt_str_op(rr.orig_address, OP_EQ, "www.mit.edu");
+ tt_str_op(ec3->original_dest_address, OP_EQ, "www.mit.edu");
+
+ tt_str_op(ec3->socks_request->address, OP_EQ,
+ ec->socks_request->address);
+
+ done:
+ connection_free_(ENTRY_TO_CONN(ec));
+ connection_free_(ENTRY_TO_CONN(ec2));
+ connection_free_(ENTRY_TO_CONN(ec3));
+}
+
+#if 0
+/* FFFF not actually supported. */
+/* automap on resolve, reverse lookup. */
+static void
+test_entryconn_rewrite_automap_reverse(void *arg)
+{
+ entry_connection_t *ec = arg;
+ entry_connection_t *ec2=NULL;
+ rewrite_result_t rr;
+ char *msg = NULL;
+
+ ec2 = entry_connection_new(CONN_TYPE_AP, AF_INET);
+
+ get_options_mutable()->AutomapHostsOnResolve = 1;
+ get_options_mutable()->SafeLogging_ = SAFELOG_SCRUB_NONE;
+ smartlist_add(get_options_mutable()->AutomapHostsSuffixes,
+ tor_strdup(".bloom"));
+ parse_virtual_addr_network("127.80.0.0/16", AF_INET, 0, &msg);
+
+ /* Automap this on resolve. */
+ strlcpy(ec->socks_request->address, "www.poldy.BLOOM",
+ sizeof(ec->socks_request->address));
+ ec->socks_request->command = SOCKS_COMMAND_RESOLVE;
+ connection_ap_handshake_rewrite(ec, &rr);
+
+ tt_int_op(rr.automap, OP_EQ, 1);
+ tt_int_op(rr.should_close, OP_EQ, 0);
+ tt_int_op(rr.end_reason, OP_EQ, 0);
+ tt_i64_op(rr.map_expires, OP_EQ, TIME_MAX);
+ tt_int_op(rr.exit_source, OP_EQ, ADDRMAPSRC_NONE);
+ tt_str_op(rr.orig_address, OP_EQ, "www.poldy.bloom");
+ tt_str_op(ec->original_dest_address, OP_EQ, "www.poldy.bloom");
+
+ tt_assert(!strcmpstart(ec->socks_request->address,"127.80."));
+
+ strlcpy(ec2->socks_request->address, ec->socks_request->address,
+ sizeof(ec2->socks_request->address));
+ ec2->socks_request->command = SOCKS_COMMAND_RESOLVE_PTR;
+ connection_ap_handshake_rewrite(ec2, &rr);
+
+ tt_int_op(rr.automap, OP_EQ, 0);
+ tt_int_op(rr.should_close, OP_EQ, 1);
+ tt_int_op(rr.end_reason, OP_EQ,
+ END_STREAM_REASON_DONE|END_STREAM_REASON_FLAG_ALREADY_SOCKS_REPLIED);
+ tt_i64_op(rr.map_expires, OP_EQ, TIME_MAX);
+ tt_int_op(rr.exit_source, OP_EQ, ADDRMAPSRC_NONE);
+
+ done:
+ connection_free_(ENTRY_TO_CONN(ec2));
+}
+#endif
+
+/* Rewrite because of cached DNS entry. */
+static void
+test_entryconn_rewrite_cached_dns_ipv4(void *arg)
+{
+ entry_connection_t *ec = arg;
+ rewrite_result_t rr;
+ time_t expires = time(NULL) + 3600;
+ entry_connection_t *ec2=NULL;
+
+ ec2 = entry_connection_new(CONN_TYPE_AP, AF_INET);
+
+ addressmap_register("www.friendly.example.com",
+ tor_strdup("240.240.241.241"),
+ expires,
+ ADDRMAPSRC_DNS,
+ 0, 0);
+
+ strlcpy(ec->socks_request->address, "www.friendly.example.com",
+ sizeof(ec->socks_request->address));
+ strlcpy(ec2->socks_request->address, "www.friendly.example.com",
+ sizeof(ec2->socks_request->address));
+
+ ec->socks_request->command = SOCKS_COMMAND_CONNECT;
+ ec2->socks_request->command = SOCKS_COMMAND_CONNECT;
+
+ ec2->entry_cfg.use_cached_ipv4_answers = 1; /* only ec2 gets this flag */
+ connection_ap_handshake_rewrite(ec, &rr);
+
+ tt_int_op(rr.automap, OP_EQ, 0);
+ tt_int_op(rr.should_close, OP_EQ, 0);
+ tt_int_op(rr.end_reason, OP_EQ, 0);
+ tt_i64_op(rr.map_expires, OP_EQ, TIME_MAX);
+ tt_int_op(rr.exit_source, OP_EQ, ADDRMAPSRC_NONE);
+ tt_str_op(rr.orig_address, OP_EQ, "www.friendly.example.com");
+ tt_str_op(ec->socks_request->address, OP_EQ, "www.friendly.example.com");
+
+ connection_ap_handshake_rewrite(ec2, &rr);
+ tt_int_op(rr.automap, OP_EQ, 0);
+ tt_int_op(rr.should_close, OP_EQ, 0);
+ tt_int_op(rr.end_reason, OP_EQ, 0);
+ tt_i64_op(rr.map_expires, OP_EQ, expires);
+ tt_int_op(rr.exit_source, OP_EQ, ADDRMAPSRC_NONE);
+ tt_str_op(rr.orig_address, OP_EQ, "www.friendly.example.com");
+ tt_str_op(ec2->socks_request->address, OP_EQ, "240.240.241.241");
+
+ done:
+ connection_free_(ENTRY_TO_CONN(ec2));
+}
+
+/* Rewrite because of cached DNS entry. */
+static void
+test_entryconn_rewrite_cached_dns_ipv6(void *arg)
+{
+ entry_connection_t *ec = NULL;
+ rewrite_result_t rr;
+ time_t expires = time(NULL) + 3600;
+ entry_connection_t *ec2=NULL;
+
+ (void)arg;
+
+ ec = entry_connection_new(CONN_TYPE_AP, AF_INET6);
+ ec2 = entry_connection_new(CONN_TYPE_AP, AF_INET6);
+
+ addressmap_register("www.friendly.example.com",
+ tor_strdup("[::f00f]"),
+ expires,
+ ADDRMAPSRC_DNS,
+ 0, 0);
+
+ strlcpy(ec->socks_request->address, "www.friendly.example.com",
+ sizeof(ec->socks_request->address));
+ strlcpy(ec2->socks_request->address, "www.friendly.example.com",
+ sizeof(ec2->socks_request->address));
+
+ ec->socks_request->command = SOCKS_COMMAND_CONNECT;
+ ec2->socks_request->command = SOCKS_COMMAND_CONNECT;
+
+ ec2->entry_cfg.use_cached_ipv6_answers = 1; /* only ec2 gets this flag */
+ connection_ap_handshake_rewrite(ec, &rr);
+
+ tt_int_op(rr.automap, OP_EQ, 0);
+ tt_int_op(rr.should_close, OP_EQ, 0);
+ tt_int_op(rr.end_reason, OP_EQ, 0);
+ tt_i64_op(rr.map_expires, OP_EQ, TIME_MAX);
+ tt_int_op(rr.exit_source, OP_EQ, ADDRMAPSRC_NONE);
+ tt_str_op(rr.orig_address, OP_EQ, "www.friendly.example.com");
+ tt_str_op(ec->socks_request->address, OP_EQ, "www.friendly.example.com");
+
+ connection_ap_handshake_rewrite(ec2, &rr);
+ tt_int_op(rr.automap, OP_EQ, 0);
+ tt_int_op(rr.should_close, OP_EQ, 0);
+ tt_int_op(rr.end_reason, OP_EQ, 0);
+ tt_i64_op(rr.map_expires, OP_EQ, expires);
+ tt_int_op(rr.exit_source, OP_EQ, ADDRMAPSRC_NONE);
+ tt_str_op(rr.orig_address, OP_EQ, "www.friendly.example.com");
+ tt_str_op(ec2->socks_request->address, OP_EQ, "[::f00f]");
+
+ done:
+ connection_free_(ENTRY_TO_CONN(ec));
+ connection_free_(ENTRY_TO_CONN(ec2));
+}
+
+/* Fail to connect to unmapped address in virtual range. */
+static void
+test_entryconn_rewrite_unmapped_virtual(void *arg)
+{
+ entry_connection_t *ec = arg;
+ rewrite_result_t rr;
+ entry_connection_t *ec2 = NULL;
+ char *msg = NULL;
+
+ ec2 = entry_connection_new(CONN_TYPE_AP, AF_INET6);
+
+ parse_virtual_addr_network("18.202.0.0/16", AF_INET, 0, &msg);
+ parse_virtual_addr_network("[ABCD::]/16", AF_INET6, 0, &msg);
+
+ strlcpy(ec->socks_request->address, "18.202.5.5",
+ sizeof(ec->socks_request->address));
+ ec->socks_request->command = SOCKS_COMMAND_CONNECT;
+ connection_ap_handshake_rewrite(ec, &rr);
+
+ tt_int_op(rr.should_close, OP_EQ, 1);
+ tt_int_op(rr.end_reason, OP_EQ, END_STREAM_REASON_INTERNAL);
+ tt_int_op(rr.automap, OP_EQ, 0);
+ tt_i64_op(rr.map_expires, OP_EQ, TIME_MAX);
+ tt_int_op(rr.exit_source, OP_EQ, ADDRMAPSRC_NONE);
+
+ strlcpy(ec2->socks_request->address, "[ABCD:9::5314:9543]",
+ sizeof(ec2->socks_request->address));
+ ec2->socks_request->command = SOCKS_COMMAND_CONNECT;
+ connection_ap_handshake_rewrite(ec2, &rr);
+
+ tt_int_op(rr.should_close, OP_EQ, 1);
+ tt_int_op(rr.end_reason, OP_EQ, END_STREAM_REASON_INTERNAL);
+ tt_int_op(rr.automap, OP_EQ, 0);
+ tt_i64_op(rr.map_expires, OP_EQ, TIME_MAX);
+ tt_int_op(rr.exit_source, OP_EQ, ADDRMAPSRC_NONE);
+
+ done:
+ connection_free_(ENTRY_TO_CONN(ec2));
+}
+
+/* Rewrite because of mapaddress option */
+static void
+test_entryconn_rewrite_mapaddress(void *arg)
+{
+ entry_connection_t *ec = arg;
+ rewrite_result_t rr;
+
+ config_line_append(&get_options_mutable()->AddressMap,
+ "MapAddress", "meta metaobjects.example");
+ config_register_addressmaps(get_options());
+
+ strlcpy(ec->socks_request->address, "meta",
+ sizeof(ec->socks_request->address));
+ ec->socks_request->command = SOCKS_COMMAND_CONNECT;
+ connection_ap_handshake_rewrite(ec, &rr);
+
+ tt_int_op(rr.should_close, OP_EQ, 0);
+ tt_int_op(rr.end_reason, OP_EQ, 0);
+ tt_int_op(rr.automap, OP_EQ, 0);
+ tt_i64_op(rr.map_expires, OP_EQ, TIME_MAX);
+ tt_int_op(rr.exit_source, OP_EQ, ADDRMAPSRC_NONE);
+ tt_str_op(ec->socks_request->address, OP_EQ, "metaobjects.example");
+
+ done:
+ ;
+}
+
+/* Reject reverse lookups of internal address. */
+static void
+test_entryconn_rewrite_reject_internal_reverse(void *arg)
+{
+ entry_connection_t *ec = arg;
+ rewrite_result_t rr;
+
+ strlcpy(ec->socks_request->address, "10.0.0.1",
+ sizeof(ec->socks_request->address));
+ ec->socks_request->command = SOCKS_COMMAND_RESOLVE_PTR;
+ connection_ap_handshake_rewrite(ec, &rr);
+
+ tt_int_op(rr.should_close, OP_EQ, 1);
+ tt_int_op(rr.end_reason, OP_EQ, END_STREAM_REASON_SOCKSPROTOCOL |
+ END_STREAM_REASON_FLAG_ALREADY_SOCKS_REPLIED);
+ tt_int_op(rr.automap, OP_EQ, 0);
+ tt_i64_op(rr.map_expires, OP_EQ, TIME_MAX);
+ tt_int_op(rr.exit_source, OP_EQ, ADDRMAPSRC_NONE);
+
+ done:
+ ;
+}
+
+/* Rewrite into .exit because of virtual address mapping */
+static void
+test_entryconn_rewrite_automap_exit(void *arg)
+{
+ entry_connection_t *ec = arg;
+ entry_connection_t *ec2=NULL;
+ rewrite_result_t rr;
+ char *msg = NULL;
+
+ ec2 = entry_connection_new(CONN_TYPE_AP, AF_INET);
+
+ get_options_mutable()->AutomapHostsOnResolve = 1;
+ get_options_mutable()->AllowDotExit = 1;
+ smartlist_add(get_options_mutable()->AutomapHostsSuffixes,
+ tor_strdup(".EXIT"));
+ parse_virtual_addr_network("127.1.0.0/16", AF_INET, 0, &msg);
+
+ /* Automap this on resolve. */
+ strlcpy(ec->socks_request->address, "website.example.exit",
+ sizeof(ec->socks_request->address));
+ ec->socks_request->command = SOCKS_COMMAND_RESOLVE;
+ connection_ap_handshake_rewrite(ec, &rr);
+
+ tt_int_op(rr.automap, OP_EQ, 1);
+ tt_int_op(rr.should_close, OP_EQ, 0);
+ tt_int_op(rr.end_reason, OP_EQ, 0);
+ tt_i64_op(rr.map_expires, OP_EQ, TIME_MAX);
+ tt_int_op(rr.exit_source, OP_EQ, ADDRMAPSRC_NONE);
+ tt_str_op(rr.orig_address, OP_EQ, "website.example.exit");
+ tt_str_op(ec->original_dest_address, OP_EQ, "website.example.exit");
+
+ tt_assert(!strcmpstart(ec->socks_request->address,"127.1."));
+
+ /* Connect to it and make sure we get the original address back. */
+ strlcpy(ec2->socks_request->address, ec->socks_request->address,
+ sizeof(ec2->socks_request->address));
+
+ ec2->socks_request->command = SOCKS_COMMAND_CONNECT;
+ connection_ap_handshake_rewrite(ec2, &rr);
+
+ tt_int_op(rr.automap, OP_EQ, 0);
+ tt_int_op(rr.should_close, OP_EQ, 0);
+ tt_int_op(rr.end_reason, OP_EQ, 0);
+ tt_i64_op(rr.map_expires, OP_EQ, TIME_MAX);
+ tt_int_op(rr.exit_source, OP_EQ, ADDRMAPSRC_AUTOMAP);
+ tt_str_op(rr.orig_address, OP_EQ, ec->socks_request->address);
+ tt_str_op(ec2->original_dest_address, OP_EQ, ec->socks_request->address);
+ tt_str_op(ec2->socks_request->address, OP_EQ, "website.example.exit");
+
+ done:
+ connection_free_(ENTRY_TO_CONN(ec2));
+}
+
+/* Rewrite into .exit because of mapaddress */
+static void
+test_entryconn_rewrite_mapaddress_exit(void *arg)
+{
+ entry_connection_t *ec = arg;
+ rewrite_result_t rr;
+
+ config_line_append(&get_options_mutable()->AddressMap,
+ "MapAddress", "*.example.com *.example.com.abc.exit");
+ config_register_addressmaps(get_options());
+
+ /* Automap this on resolve. */
+ strlcpy(ec->socks_request->address, "abc.example.com",
+ sizeof(ec->socks_request->address));
+ ec->socks_request->command = SOCKS_COMMAND_CONNECT;
+ connection_ap_handshake_rewrite(ec, &rr);
+
+ tt_int_op(rr.automap, OP_EQ, 0);
+ tt_int_op(rr.should_close, OP_EQ, 0);
+ tt_int_op(rr.end_reason, OP_EQ, 0);
+ tt_i64_op(rr.map_expires, OP_EQ, TIME_MAX);
+ tt_int_op(rr.exit_source, OP_EQ, ADDRMAPSRC_TORRC);
+ tt_str_op(rr.orig_address, OP_EQ, "abc.example.com");
+ tt_str_op(ec->socks_request->address, OP_EQ, "abc.example.com.abc.exit");
+ done:
+ ;
+}
+
+/* Map foo.onion to longthing.onion, and also automap. */
+static void
+test_entryconn_rewrite_mapaddress_automap_onion(void *arg)
+{
+ entry_connection_t *ec = arg;
+ entry_connection_t *ec2 = NULL;
+ entry_connection_t *ec3 = NULL;
+ entry_connection_t *ec4 = NULL;
+ rewrite_result_t rr;
+ char *msg = NULL;
+
+ ec2 = entry_connection_new(CONN_TYPE_AP, AF_INET);
+ ec3 = entry_connection_new(CONN_TYPE_AP, AF_INET);
+ ec4 = entry_connection_new(CONN_TYPE_AP, AF_INET);
+
+ get_options_mutable()->AutomapHostsOnResolve = 1;
+ get_options_mutable()->AllowDotExit = 1;
+ smartlist_add(get_options_mutable()->AutomapHostsSuffixes,
+ tor_strdup(".onion"));
+ parse_virtual_addr_network("192.168.0.0/16", AF_INET, 0, &msg);
+ config_line_append(&get_options_mutable()->AddressMap,
+ "MapAddress", "foo.onion abcdefghijklmnop.onion");
+ config_register_addressmaps(get_options());
+
+ /* Connect to foo.onion. */
+ strlcpy(ec->socks_request->address, "foo.onion",
+ sizeof(ec->socks_request->address));
+ ec->socks_request->command = SOCKS_COMMAND_CONNECT;
+ connection_ap_handshake_rewrite(ec, &rr);
+
+ tt_int_op(rr.automap, OP_EQ, 0);
+ tt_int_op(rr.should_close, OP_EQ, 0);
+ tt_int_op(rr.end_reason, OP_EQ, 0);
+ tt_i64_op(rr.map_expires, OP_EQ, TIME_MAX);
+ tt_int_op(rr.exit_source, OP_EQ, ADDRMAPSRC_NONE);
+ tt_str_op(rr.orig_address, OP_EQ, "foo.onion");
+ tt_str_op(ec->socks_request->address, OP_EQ, "abcdefghijklmnop.onion");
+
+ /* Okay, resolve foo.onion */
+ strlcpy(ec2->socks_request->address, "foo.onion",
+ sizeof(ec2->socks_request->address));
+ ec2->socks_request->command = SOCKS_COMMAND_RESOLVE;
+ connection_ap_handshake_rewrite(ec2, &rr);
+
+ tt_int_op(rr.automap, OP_EQ, 1);
+ tt_int_op(rr.should_close, OP_EQ, 0);
+ tt_int_op(rr.end_reason, OP_EQ, 0);
+ tt_i64_op(rr.map_expires, OP_EQ, TIME_MAX);
+ tt_int_op(rr.exit_source, OP_EQ, ADDRMAPSRC_NONE);
+ tt_str_op(rr.orig_address, OP_EQ, "foo.onion");
+ tt_assert(!strcmpstart(ec2->socks_request->address, "192.168."));
+
+ /* Now connect */
+ strlcpy(ec3->socks_request->address, ec2->socks_request->address,
+ sizeof(ec3->socks_request->address));
+ ec3->socks_request->command = SOCKS_COMMAND_CONNECT;
+ connection_ap_handshake_rewrite(ec3, &rr);
+ tt_int_op(rr.automap, OP_EQ, 0);
+ tt_int_op(rr.should_close, OP_EQ, 0);
+ tt_int_op(rr.end_reason, OP_EQ, 0);
+ tt_assert(!strcmpstart(ec3->socks_request->address,
+ "abcdefghijklmnop.onion"));
+
+ /* Now resolve abcefghijklmnop.onion. */
+ strlcpy(ec4->socks_request->address, "abcdefghijklmnop.onion",
+ sizeof(ec4->socks_request->address));
+ ec4->socks_request->command = SOCKS_COMMAND_RESOLVE;
+ connection_ap_handshake_rewrite(ec4, &rr);
+
+ tt_int_op(rr.automap, OP_EQ, 1);
+ tt_int_op(rr.should_close, OP_EQ, 0);
+ tt_int_op(rr.end_reason, OP_EQ, 0);
+ tt_i64_op(rr.map_expires, OP_EQ, TIME_MAX);
+ tt_int_op(rr.exit_source, OP_EQ, ADDRMAPSRC_NONE);
+ tt_str_op(rr.orig_address, OP_EQ, "abcdefghijklmnop.onion");
+ tt_assert(!strcmpstart(ec4->socks_request->address, "192.168."));
+ /* XXXX doesn't work
+ tt_str_op(ec4->socks_request->address, OP_EQ, ec2->socks_request->address);
+ */
+
+ done:
+ connection_free_(ENTRY_TO_CONN(ec2));
+ connection_free_(ENTRY_TO_CONN(ec3));
+ connection_free_(ENTRY_TO_CONN(ec4));
+}
+
+static void
+test_entryconn_rewrite_mapaddress_automap_onion_common(entry_connection_t *ec,
+ int map_to_onion,
+ int map_to_address)
+{
+ entry_connection_t *ec2 = NULL;
+ entry_connection_t *ec3 = NULL;
+ rewrite_result_t rr;
+
+ ec2 = entry_connection_new(CONN_TYPE_AP, AF_INET);
+ ec3 = entry_connection_new(CONN_TYPE_AP, AF_INET);
+
+ /* Connect to irc.example.com */
+ strlcpy(ec->socks_request->address, "irc.example.com",
+ sizeof(ec->socks_request->address));
+ ec->socks_request->command = SOCKS_COMMAND_CONNECT;
+ connection_ap_handshake_rewrite(ec, &rr);
+
+ tt_int_op(rr.automap, OP_EQ, 0);
+ tt_int_op(rr.should_close, OP_EQ, 0);
+ tt_int_op(rr.end_reason, OP_EQ, 0);
+ tt_i64_op(rr.map_expires, OP_EQ, TIME_MAX);
+ tt_int_op(rr.exit_source, OP_EQ, ADDRMAPSRC_NONE);
+ tt_str_op(rr.orig_address, OP_EQ, "irc.example.com");
+ tt_str_op(ec->socks_request->address, OP_EQ,
+ map_to_onion ? "abcdefghijklmnop.onion" : "irc.example.com");
+
+ /* Okay, resolve irc.example.com */
+ strlcpy(ec2->socks_request->address, "irc.example.com",
+ sizeof(ec2->socks_request->address));
+ ec2->socks_request->command = SOCKS_COMMAND_RESOLVE;
+ connection_ap_handshake_rewrite(ec2, &rr);
+
+ tt_int_op(rr.automap, OP_EQ, map_to_onion && map_to_address);
+ tt_int_op(rr.should_close, OP_EQ, 0);
+ tt_int_op(rr.end_reason, OP_EQ, 0);
+ tt_i64_op(rr.map_expires, OP_EQ, TIME_MAX);
+ tt_int_op(rr.exit_source, OP_EQ, ADDRMAPSRC_NONE);
+ tt_str_op(rr.orig_address, OP_EQ, "irc.example.com");
+ if (map_to_onion && map_to_address)
+ tt_assert(!strcmpstart(ec2->socks_request->address, "192.168."));
+
+ /* Now connect */
+ strlcpy(ec3->socks_request->address, ec2->socks_request->address,
+ sizeof(ec3->socks_request->address));
+ ec3->socks_request->command = SOCKS_COMMAND_CONNECT;
+ connection_ap_handshake_rewrite(ec3, &rr);
+ tt_int_op(rr.automap, OP_EQ, 0);
+ tt_int_op(rr.should_close, OP_EQ, 0);
+ tt_int_op(rr.end_reason, OP_EQ, 0);
+ if (map_to_onion)
+ tt_assert(!strcmpstart(ec3->socks_request->address,
+ "abcdefghijklmnop.onion"));
+
+ done:
+ connection_free_(ENTRY_TO_CONN(ec2));
+ connection_free_(ENTRY_TO_CONN(ec3));
+}
+
+/* This time is the same, but we start with a mapping from a non-onion
+ * address. */
+static void
+test_entryconn_rewrite_mapaddress_automap_onion2(void *arg)
+{
+ char *msg = NULL;
+ get_options_mutable()->AutomapHostsOnResolve = 1;
+ smartlist_add(get_options_mutable()->AutomapHostsSuffixes,
+ tor_strdup(".onion"));
+ parse_virtual_addr_network("192.168.0.0/16", AF_INET, 0, &msg);
+ config_line_append(&get_options_mutable()->AddressMap,
+ "MapAddress", "irc.example.com abcdefghijklmnop.onion");
+ config_register_addressmaps(get_options());
+
+ test_entryconn_rewrite_mapaddress_automap_onion_common(arg, 1, 1);
+}
+
+/* Same as above, with automapped turned off */
+static void
+test_entryconn_rewrite_mapaddress_automap_onion3(void *arg)
+{
+ config_line_append(&get_options_mutable()->AddressMap,
+ "MapAddress", "irc.example.com abcdefghijklmnop.onion");
+ config_register_addressmaps(get_options());
+
+ test_entryconn_rewrite_mapaddress_automap_onion_common(arg, 1, 0);
+}
+
+/* As above, with no mapping. */
+static void
+test_entryconn_rewrite_mapaddress_automap_onion4(void *arg)
+{
+ char *msg = NULL;
+ get_options_mutable()->AutomapHostsOnResolve = 1;
+ smartlist_add(get_options_mutable()->AutomapHostsSuffixes,
+ tor_strdup(".onion"));
+ parse_virtual_addr_network("192.168.0.0/16", AF_INET, 0, &msg);
+
+ test_entryconn_rewrite_mapaddress_automap_onion_common(arg, 0, 1);
+}
+
+#define REWRITE(name) \
+ { #name, test_entryconn_##name, TT_FORK, &test_rewrite_setup, NULL }
+
+struct testcase_t entryconn_tests[] = {
+ REWRITE(rewrite_basic),
+ REWRITE(rewrite_bad_dotexit),
+ REWRITE(rewrite_automap_ipv4),
+ REWRITE(rewrite_automap_ipv6),
+ // REWRITE(rewrite_automap_reverse),
+ REWRITE(rewrite_cached_dns_ipv4),
+ REWRITE(rewrite_cached_dns_ipv6),
+ REWRITE(rewrite_unmapped_virtual),
+ REWRITE(rewrite_mapaddress),
+ REWRITE(rewrite_reject_internal_reverse),
+ REWRITE(rewrite_automap_exit),
+ REWRITE(rewrite_mapaddress_exit),
+ REWRITE(rewrite_mapaddress_automap_onion),
+ REWRITE(rewrite_mapaddress_automap_onion2),
+ REWRITE(rewrite_mapaddress_automap_onion3),
+ REWRITE(rewrite_mapaddress_automap_onion4),
+
+ END_OF_TESTCASES
+};
+
diff --git a/src/test/test_entrynodes.c b/src/test/test_entrynodes.c
index 19071a1550..0011d3698a 100644
--- a/src/test/test_entrynodes.c
+++ b/src/test/test_entrynodes.c
@@ -18,7 +18,7 @@
#include "statefile.h"
#include "config.h"
-#include "test_descriptors.inc"
+#include "test_helpers.h"
/* TODO:
* choose_random_entry() test with state set.
@@ -37,62 +37,6 @@ get_or_state_replacement(void)
return dummy_state;
}
-/* NOP replacement for router_descriptor_is_older_than() */
-static int
-router_descriptor_is_older_than_replacement(const routerinfo_t *router,
- int seconds)
-{
- (void) router;
- (void) seconds;
- return 0;
-}
-
-/* Number of descriptors contained in test_descriptors.txt. */
-#define NUMBER_OF_DESCRIPTORS 8
-
-/** Parse a file containing router descriptors and load them to our
- routerlist. This function is used to setup an artificial network
- so that we can conduct entry guard tests. */
-static void
-setup_fake_routerlist(void)
-{
- int retval;
- routerlist_t *our_routerlist = NULL;
- smartlist_t *our_nodelist = NULL;
-
- /* Read the file that contains our test descriptors. */
-
- /* We need to mock this function otherwise the descriptors will not
- accepted as they are too old. */
- MOCK(router_descriptor_is_older_than,
- router_descriptor_is_older_than_replacement);
-
- /* Load all the test descriptors to the routerlist. */
- retval = router_load_routers_from_string(TEST_DESCRIPTORS,
- NULL, SAVED_IN_JOURNAL,
- NULL, 0, NULL);
- tt_int_op(retval, OP_EQ, NUMBER_OF_DESCRIPTORS);
-
- /* Sanity checking of routerlist and nodelist. */
- our_routerlist = router_get_routerlist();
- tt_int_op(smartlist_len(our_routerlist->routers), OP_EQ,
- NUMBER_OF_DESCRIPTORS);
- routerlist_assert_ok(our_routerlist);
-
- our_nodelist = nodelist_get_list();
- tt_int_op(smartlist_len(our_nodelist), OP_EQ, NUMBER_OF_DESCRIPTORS);
-
- /* Mark all routers as non-guards but up and running! */
- SMARTLIST_FOREACH_BEGIN(our_nodelist, node_t *, node) {
- node->is_running = 1;
- node->is_valid = 1;
- node->is_possible_guard = 0;
- } SMARTLIST_FOREACH_END(node);
-
- done:
- UNMOCK(router_descriptor_is_older_than);
-}
-
/* Unittest cleanup function: Cleanup the fake network. */
static int
fake_network_cleanup(const struct testcase_t *testcase, void *ptr)
@@ -120,7 +64,7 @@ fake_network_setup(const struct testcase_t *testcase)
get_or_state_replacement);
/* Setup fake routerlist. */
- setup_fake_routerlist();
+ helper_setup_fake_routerlist();
/* Return anything but NULL (it's interpreted as test fail) */
return dummy_state;
@@ -197,7 +141,7 @@ populate_live_entry_guards_test_helper(int num_needed)
/* Walk the nodelist and add all nodes as entry guards. */
our_nodelist = nodelist_get_list();
- tt_int_op(smartlist_len(our_nodelist), OP_EQ, NUMBER_OF_DESCRIPTORS);
+ tt_int_op(smartlist_len(our_nodelist), OP_EQ, HELPER_NUMBER_OF_DESCRIPTORS);
SMARTLIST_FOREACH_BEGIN(our_nodelist, const node_t *, node) {
const node_t *node_tmp;
@@ -206,7 +150,8 @@ populate_live_entry_guards_test_helper(int num_needed)
} SMARTLIST_FOREACH_END(node);
/* Make sure the nodes were added as entry guards. */
- tt_int_op(smartlist_len(all_entry_guards), OP_EQ, NUMBER_OF_DESCRIPTORS);
+ tt_int_op(smartlist_len(all_entry_guards), OP_EQ,
+ HELPER_NUMBER_OF_DESCRIPTORS);
/* Ensure that all the possible entry guards are enough to satisfy us. */
tt_int_op(smartlist_len(all_entry_guards), OP_GE, num_needed);
@@ -217,9 +162,6 @@ populate_live_entry_guards_test_helper(int num_needed)
False, all guards should have made_contact enabled. */
tt_int_op(entry->made_contact, OP_EQ, 1);
- /* Since we don't have a routerstatus, all of the entry guards are
- not directory servers. */
- tt_int_op(entry->is_dir_cache, OP_EQ, 0);
} SMARTLIST_FOREACH_END(entry);
/* First, try to get some fast guards. This should fail. */
@@ -326,19 +268,6 @@ state_lines_free(smartlist_t *entry_guard_lines)
smartlist_free(entry_guard_lines);
}
-/* Return a statically allocated string representing yesterday's date
- * in ISO format. We use it so that state file items are not found to
- * be outdated. */
-static const char *
-get_yesterday_date_str(void)
-{
- static char buf[ISO_TIME_LEN+1];
-
- time_t yesterday = time(NULL) - 24*60*60;
- format_iso_time(buf, yesterday);
- return buf;
-}
-
/* Tests entry_guards_parse_state(). It creates a fake Tor state with
a saved entry guard and makes sure that Tor can parse it and
creates the right entry node out of it.
@@ -647,7 +576,7 @@ test_entry_is_live(void *arg)
/* Walk the nodelist and add all nodes as entry guards. */
our_nodelist = nodelist_get_list();
- tt_int_op(smartlist_len(our_nodelist), OP_EQ, NUMBER_OF_DESCRIPTORS);
+ tt_int_op(smartlist_len(our_nodelist), OP_EQ, HELPER_NUMBER_OF_DESCRIPTORS);
SMARTLIST_FOREACH_BEGIN(our_nodelist, const node_t *, node) {
const node_t *node_tmp;
@@ -659,7 +588,8 @@ test_entry_is_live(void *arg)
} SMARTLIST_FOREACH_END(node);
/* Make sure the nodes were added as entry guards. */
- tt_int_op(smartlist_len(all_entry_guards), OP_EQ, NUMBER_OF_DESCRIPTORS);
+ tt_int_op(smartlist_len(all_entry_guards), OP_EQ,
+ HELPER_NUMBER_OF_DESCRIPTORS);
/* Now get a random test entry that we will use for this unit test. */
which_node = 3; /* (chosen by fair dice roll) */
diff --git a/src/test/test_guardfraction.c b/src/test/test_guardfraction.c
new file mode 100644
index 0000000000..57063c9085
--- /dev/null
+++ b/src/test/test_guardfraction.c
@@ -0,0 +1,418 @@
+/* Copyright (c) 2014, The Tor Project, Inc. */
+/* See LICENSE for licensing information */
+
+#define DIRSERV_PRIVATE
+#define ROUTERPARSE_PRIVATE
+#define NETWORKSTATUS_PRIVATE
+
+#include "orconfig.h"
+#include "or.h"
+#include "config.h"
+#include "dirserv.h"
+#include "container.h"
+#include "entrynodes.h"
+#include "util.h"
+#include "routerparse.h"
+#include "networkstatus.h"
+
+#include "test.h"
+#include "test_helpers.h"
+
+/** Generate a vote_routerstatus_t for a router with identity digest
+ * <b>digest_in_hex</b>. */
+static vote_routerstatus_t *
+gen_vote_routerstatus_for_tests(const char *digest_in_hex, int is_guard)
+{
+ int retval;
+ vote_routerstatus_t *vrs = NULL;
+ routerstatus_t *rs;
+
+ vrs = tor_malloc_zero(sizeof(vote_routerstatus_t));
+ rs = &vrs->status;
+
+ { /* Useful information for tests */
+ char digest_tmp[DIGEST_LEN];
+
+ /* Guard or not? */
+ rs->is_possible_guard = is_guard;
+
+ /* Fill in the fpr */
+ tt_int_op(strlen(digest_in_hex), ==, HEX_DIGEST_LEN);
+ retval = base16_decode(digest_tmp, sizeof(digest_tmp),
+ digest_in_hex, HEX_DIGEST_LEN);
+ tt_int_op(retval, ==, 0);
+ memcpy(rs->identity_digest, digest_tmp, DIGEST_LEN);
+ }
+
+ { /* Misc info (maybe not used in tests) */
+ vrs->version = tor_strdup("0.1.2.14");
+ strlcpy(rs->nickname, "router2", sizeof(rs->nickname));
+ memset(rs->descriptor_digest, 78, DIGEST_LEN);
+ rs->addr = 0x99008801;
+ rs->or_port = 443;
+ rs->dir_port = 8000;
+ /* all flags but running cleared */
+ rs->is_flagged_running = 1;
+ vrs->has_measured_bw = 1;
+ rs->has_bandwidth = 1;
+ }
+
+ return vrs;
+
+ done:
+ vote_routerstatus_free(vrs);
+
+ return NULL;
+}
+
+/** Make sure our parsers reject corrupted guardfraction files. */
+static void
+test_parse_guardfraction_file_bad(void *arg)
+{
+ int retval;
+ char *guardfraction_bad = NULL;
+ const char *yesterday_date_str = get_yesterday_date_str();
+
+ (void) arg;
+
+ /* Start parsing all those corrupted guardfraction files! */
+
+ /* Guardfraction file version is not a number! */
+ tor_asprintf(&guardfraction_bad,
+ "guardfraction-file-version nan\n"
+ "written-at %s\n"
+ "n-inputs 420 3\n"
+ "guard-seen D0EDB47BEAD32D26D0A837F7D5357EC3AD3B8777 100 420\n"
+ "guard-seen 07B5547026DF3E229806E135CFA8552D56AFBABC 5 420\n",
+ yesterday_date_str);
+
+ retval = dirserv_read_guardfraction_file_from_str(guardfraction_bad, NULL);
+ tt_int_op(retval, ==, -1);
+ tor_free(guardfraction_bad);
+
+ /* This one does not have a date! Parsing should fail. */
+ tor_asprintf(&guardfraction_bad,
+ "guardfraction-file-version 1\n"
+ "written-at not_date\n"
+ "n-inputs 420 3\n"
+ "guard-seen D0EDB47BEAD32D26D0A837F7D5357EC3AD3B8777 100 420\n"
+ "guard-seen 07B5547026DF3E229806E135CFA8552D56AFBABC 5 420\n");
+
+ retval = dirserv_read_guardfraction_file_from_str(guardfraction_bad, NULL);
+ tt_int_op(retval, ==, -1);
+ tor_free(guardfraction_bad);
+
+ /* This one has an incomplete n-inputs line, but parsing should
+ still continue. */
+ tor_asprintf(&guardfraction_bad,
+ "guardfraction-file-version 1\n"
+ "written-at %s\n"
+ "n-inputs biggie\n"
+ "guard-seen D0EDB47BEAD32D26D0A837F7D5357EC3AD3B8777 100 420\n"
+ "guard-seen 07B5547026DF3E229806E135CFA8552D56AFBABC 5 420\n",
+ yesterday_date_str);
+
+ retval = dirserv_read_guardfraction_file_from_str(guardfraction_bad, NULL);
+ tt_int_op(retval, ==, 2);
+ tor_free(guardfraction_bad);
+
+ /* This one does not have a fingerprint in the guard line! */
+ tor_asprintf(&guardfraction_bad,
+ "guardfraction-file-version 1\n"
+ "written-at %s\n"
+ "n-inputs 420 3\n"
+ "guard-seen not_a_fingerprint 100 420\n",
+ yesterday_date_str);
+
+ retval = dirserv_read_guardfraction_file_from_str(guardfraction_bad, NULL);
+ tt_int_op(retval, ==, 0);
+ tor_free(guardfraction_bad);
+
+ /* This one does not even have an integer guardfraction value. */
+ tor_asprintf(&guardfraction_bad,
+ "guardfraction-file-version 1\n"
+ "written-at %s\n"
+ "n-inputs 420 3\n"
+ "guard-seen D0EDB47BEAD32D26D0A837F7D5357EC3AD3B8777 NaN 420\n"
+ "guard-seen 07B5547026DF3E229806E135CFA8552D56AFBABC 5 420\n",
+ yesterday_date_str);
+
+ retval = dirserv_read_guardfraction_file_from_str(guardfraction_bad, NULL);
+ tt_int_op(retval, ==, 1);
+ tor_free(guardfraction_bad);
+
+ /* This one is not a percentage (not in [0, 100]) */
+ tor_asprintf(&guardfraction_bad,
+ "guardfraction-file-version 1\n"
+ "written-at %s\n"
+ "n-inputs 420 3\n"
+ "guard-seen D0EDB47BEAD32D26D0A837F7D5357EC3AD3B8777 666 420\n"
+ "guard-seen 07B5547026DF3E229806E135CFA8552D56AFBABC 5 420\n",
+ yesterday_date_str);
+
+ retval = dirserv_read_guardfraction_file_from_str(guardfraction_bad, NULL);
+ tt_int_op(retval, ==, 1);
+ tor_free(guardfraction_bad);
+
+ /* This one is not a percentage either (not in [0, 100]) */
+ tor_asprintf(&guardfraction_bad,
+ "guardfraction-file-version 1\n"
+ "written-at %s\n"
+ "n-inputs 420 3\n"
+ "guard-seen D0EDB47BEAD32D26D0A837F7D5357EC3AD3B8777 -3 420\n",
+ yesterday_date_str);
+
+ retval = dirserv_read_guardfraction_file_from_str(guardfraction_bad, NULL);
+ tt_int_op(retval, ==, 0);
+
+ done:
+ tor_free(guardfraction_bad);
+}
+
+/** Make sure that our test guardfraction file gets parsed properly, and
+ * its information are applied properly to our routerstatuses. */
+static void
+test_parse_guardfraction_file_good(void *arg)
+{
+ int retval;
+ vote_routerstatus_t *vrs_guard = NULL;
+ vote_routerstatus_t *vrs_dummy = NULL;
+ char *guardfraction_good = NULL;
+ const char *yesterday_date_str = get_yesterday_date_str();
+ smartlist_t *routerstatuses = smartlist_new();
+
+ /* Some test values that we need to validate later */
+ const char fpr_guard[] = "D0EDB47BEAD32D26D0A837F7D5357EC3AD3B8777";
+ const char fpr_unlisted[] = "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA";
+ const int guardfraction_value = 42;
+
+ (void) arg;
+
+ {
+ /* Populate the smartlist with some fake routerstatuses, so that
+ after parsing the guardfraction file we can check that their
+ elements got filled properly. */
+
+ /* This one is a guard */
+ vrs_guard = gen_vote_routerstatus_for_tests(fpr_guard, 1);
+ tt_assert(vrs_guard);
+ smartlist_add(routerstatuses, vrs_guard);
+
+ /* This one is a guard but it's not in the guardfraction file */
+ vrs_dummy = gen_vote_routerstatus_for_tests(fpr_unlisted, 1);
+ tt_assert(vrs_dummy);
+ smartlist_add(routerstatuses, vrs_dummy);
+ }
+
+ tor_asprintf(&guardfraction_good,
+ "guardfraction-file-version 1\n"
+ "written-at %s\n"
+ "n-inputs 420 3\n"
+ "guard-seen %s %d 420\n",
+ yesterday_date_str,
+ fpr_guard, guardfraction_value);
+
+ /* Read the guardfraction file */
+ retval = dirserv_read_guardfraction_file_from_str(guardfraction_good,
+ routerstatuses);
+ tt_int_op(retval, ==, 1);
+
+ { /* Test that routerstatus fields got filled properly */
+
+ /* The guardfraction fields of the guard should be filled. */
+ tt_assert(vrs_guard->status.has_guardfraction);
+ tt_int_op(vrs_guard->status.guardfraction_percentage,
+ ==,
+ guardfraction_value);
+
+ /* The guard that was not in the guardfraction file should not have
+ been touched either. */
+ tt_assert(!vrs_dummy->status.has_guardfraction);
+ }
+
+ done:
+ vote_routerstatus_free(vrs_guard);
+ vote_routerstatus_free(vrs_dummy);
+ smartlist_free(routerstatuses);
+ tor_free(guardfraction_good);
+}
+
+/** Make sure that the guardfraction bandwidths get calculated properly. */
+static void
+test_get_guardfraction_bandwidth(void *arg)
+{
+ guardfraction_bandwidth_t gf_bw;
+ const int orig_bw = 1000;
+
+ (void) arg;
+
+ /* A guard with bandwidth 1000 and GuardFraction 0.25, should have
+ bandwidth 250 as a guard and bandwidth 750 as a non-guard. */
+ guard_get_guardfraction_bandwidth(&gf_bw,
+ orig_bw, 25);
+
+ tt_int_op(gf_bw.guard_bw, ==, 250);
+ tt_int_op(gf_bw.non_guard_bw, ==, 750);
+
+ /* Also check the 'guard_bw + non_guard_bw == original_bw'
+ * invariant. */
+ tt_int_op(gf_bw.non_guard_bw + gf_bw.guard_bw, ==, orig_bw);
+
+ done:
+ ;
+}
+
+/** Parse the GuardFraction element of the consensus, and make sure it
+ * gets parsed correctly. */
+static void
+test_parse_guardfraction_consensus(void *arg)
+{
+ int retval;
+ or_options_t *options = get_options_mutable();
+
+ const char *guardfraction_str_good = "GuardFraction=66";
+ routerstatus_t rs_good;
+ routerstatus_t rs_no_guard;
+
+ const char *guardfraction_str_bad1 = "GuardFraction="; /* no value */
+ routerstatus_t rs_bad1;
+
+ const char *guardfraction_str_bad2 = "GuardFraction=166"; /* no percentage */
+ routerstatus_t rs_bad2;
+
+ (void) arg;
+
+ /* GuardFraction use is currently disabled by default. So we need to
+ manually enable it. */
+ options->UseGuardFraction = 1;
+
+ { /* Properly formatted GuardFraction. Check that it gets applied
+ correctly. */
+ memset(&rs_good, 0, sizeof(routerstatus_t));
+ rs_good.is_possible_guard = 1;
+
+ retval = routerstatus_parse_guardfraction(guardfraction_str_good,
+ NULL, NULL,
+ &rs_good);
+ tt_int_op(retval, ==, 0);
+ tt_assert(rs_good.has_guardfraction);
+ tt_int_op(rs_good.guardfraction_percentage, ==, 66);
+ }
+
+ { /* Properly formatted GuardFraction but router is not a
+ guard. GuardFraction should not get applied. */
+ memset(&rs_no_guard, 0, sizeof(routerstatus_t));
+ tt_assert(!rs_no_guard.is_possible_guard);
+
+ retval = routerstatus_parse_guardfraction(guardfraction_str_good,
+ NULL, NULL,
+ &rs_no_guard);
+ tt_int_op(retval, ==, 0);
+ tt_assert(!rs_no_guard.has_guardfraction);
+ }
+
+ { /* Bad GuardFraction. Function should fail and not apply. */
+ memset(&rs_bad1, 0, sizeof(routerstatus_t));
+ rs_bad1.is_possible_guard = 1;
+
+ retval = routerstatus_parse_guardfraction(guardfraction_str_bad1,
+ NULL, NULL,
+ &rs_bad1);
+ tt_int_op(retval, ==, -1);
+ tt_assert(!rs_bad1.has_guardfraction);
+ }
+
+ { /* Bad GuardFraction. Function should fail and not apply. */
+ memset(&rs_bad2, 0, sizeof(routerstatus_t));
+ rs_bad2.is_possible_guard = 1;
+
+ retval = routerstatus_parse_guardfraction(guardfraction_str_bad2,
+ NULL, NULL,
+ &rs_bad2);
+ tt_int_op(retval, ==, -1);
+ tt_assert(!rs_bad2.has_guardfraction);
+ }
+
+ done:
+ ;
+}
+
+/** Make sure that we use GuardFraction information when we should,
+ * according to the torrc option and consensus parameter. */
+static void
+test_should_apply_guardfraction(void *arg)
+{
+ networkstatus_t vote_enabled, vote_disabled, vote_missing;
+ or_options_t *options = get_options_mutable();
+
+ (void) arg;
+
+ { /* Fill the votes for later */
+ /* This one suggests enabled GuardFraction. */
+ memset(&vote_enabled, 0, sizeof(vote_enabled));
+ vote_enabled.net_params = smartlist_new();
+ smartlist_split_string(vote_enabled.net_params,
+ "UseGuardFraction=1", NULL, 0, 0);
+
+ /* This one suggests disabled GuardFraction. */
+ memset(&vote_disabled, 0, sizeof(vote_disabled));
+ vote_disabled.net_params = smartlist_new();
+ smartlist_split_string(vote_disabled.net_params,
+ "UseGuardFraction=0", NULL, 0, 0);
+
+ /* This one doesn't have GuardFraction at all. */
+ memset(&vote_missing, 0, sizeof(vote_missing));
+ vote_missing.net_params = smartlist_new();
+ smartlist_split_string(vote_missing.net_params,
+ "leon=trout", NULL, 0, 0);
+ }
+
+ /* If torrc option is set to yes, we should always use
+ * guardfraction.*/
+ options->UseGuardFraction = 1;
+ tt_int_op(should_apply_guardfraction(&vote_disabled), ==, 1);
+
+ /* If torrc option is set to no, we should never use
+ * guardfraction.*/
+ options->UseGuardFraction = 0;
+ tt_int_op(should_apply_guardfraction(&vote_enabled), ==, 0);
+
+ /* Now let's test torrc option set to auto. */
+ options->UseGuardFraction = -1;
+
+ /* If torrc option is set to auto, and consensus parameter is set to
+ * yes, we should use guardfraction. */
+ tt_int_op(should_apply_guardfraction(&vote_enabled), ==, 1);
+
+ /* If torrc option is set to auto, and consensus parameter is set to
+ * no, we should use guardfraction. */
+ tt_int_op(should_apply_guardfraction(&vote_disabled), ==, 0);
+
+ /* If torrc option is set to auto, and consensus parameter is not
+ * set, we should fallback to "no". */
+ tt_int_op(should_apply_guardfraction(&vote_missing), ==, 0);
+
+ done:
+ SMARTLIST_FOREACH(vote_enabled.net_params, char *, cp, tor_free(cp));
+ SMARTLIST_FOREACH(vote_disabled.net_params, char *, cp, tor_free(cp));
+ SMARTLIST_FOREACH(vote_missing.net_params, char *, cp, tor_free(cp));
+ smartlist_free(vote_enabled.net_params);
+ smartlist_free(vote_disabled.net_params);
+ smartlist_free(vote_missing.net_params);
+}
+
+struct testcase_t guardfraction_tests[] = {
+ { "parse_guardfraction_file_bad", test_parse_guardfraction_file_bad,
+ TT_FORK, NULL, NULL },
+ { "parse_guardfraction_file_good", test_parse_guardfraction_file_good,
+ TT_FORK, NULL, NULL },
+ { "parse_guardfraction_consensus", test_parse_guardfraction_consensus,
+ TT_FORK, NULL, NULL },
+ { "get_guardfraction_bandwidth", test_get_guardfraction_bandwidth,
+ TT_FORK, NULL, NULL },
+ { "should_apply_guardfraction", test_should_apply_guardfraction,
+ TT_FORK, NULL, NULL },
+
+ END_OF_TESTCASES
+};
+
diff --git a/src/test/test_helpers.c b/src/test/test_helpers.c
new file mode 100644
index 0000000000..c3ca0c3554
--- /dev/null
+++ b/src/test/test_helpers.c
@@ -0,0 +1,86 @@
+/* Copyright (c) 2014, The Tor Project, Inc. */
+/* See LICENSE for licensing information */
+
+/**
+ * \file test_helpers.c
+ * \brief Some helper functions to avoid code duplication in unit tests.
+ */
+
+#define ROUTERLIST_PRIVATE
+#include "orconfig.h"
+#include "or.h"
+
+#include "routerlist.h"
+#include "nodelist.h"
+
+#include "test.h"
+#include "test_helpers.h"
+
+#include "test_descriptors.inc"
+
+/* Return a statically allocated string representing yesterday's date
+ * in ISO format. We use it so that state file items are not found to
+ * be outdated. */
+const char *
+get_yesterday_date_str(void)
+{
+ static char buf[ISO_TIME_LEN+1];
+
+ time_t yesterday = time(NULL) - 24*60*60;
+ format_iso_time(buf, yesterday);
+ return buf;
+}
+
+/* NOP replacement for router_descriptor_is_older_than() */
+static int
+router_descriptor_is_older_than_replacement(const routerinfo_t *router,
+ int seconds)
+{
+ (void) router;
+ (void) seconds;
+ return 0;
+}
+
+/** Parse a file containing router descriptors and load them to our
+ routerlist. This function is used to setup an artificial network
+ so that we can conduct tests on it. */
+void
+helper_setup_fake_routerlist(void)
+{
+ int retval;
+ routerlist_t *our_routerlist = NULL;
+ smartlist_t *our_nodelist = NULL;
+
+ /* Read the file that contains our test descriptors. */
+
+ /* We need to mock this function otherwise the descriptors will not
+ accepted as they are too old. */
+ MOCK(router_descriptor_is_older_than,
+ router_descriptor_is_older_than_replacement);
+
+ /* Load all the test descriptors to the routerlist. */
+ retval = router_load_routers_from_string(TEST_DESCRIPTORS,
+ NULL, SAVED_IN_JOURNAL,
+ NULL, 0, NULL);
+ tt_int_op(retval, ==, HELPER_NUMBER_OF_DESCRIPTORS);
+
+ /* Sanity checking of routerlist and nodelist. */
+ our_routerlist = router_get_routerlist();
+ tt_int_op(smartlist_len(our_routerlist->routers), ==,
+ HELPER_NUMBER_OF_DESCRIPTORS);
+ routerlist_assert_ok(our_routerlist);
+
+ our_nodelist = nodelist_get_list();
+ tt_int_op(smartlist_len(our_nodelist), ==, HELPER_NUMBER_OF_DESCRIPTORS);
+
+ /* Mark all routers as non-guards but up and running! */
+ SMARTLIST_FOREACH_BEGIN(our_nodelist, node_t *, node) {
+ node->is_running = 1;
+ node->is_valid = 1;
+ node->is_possible_guard = 0;
+ } SMARTLIST_FOREACH_END(node);
+
+ done:
+ UNMOCK(router_descriptor_is_older_than);
+}
+
diff --git a/src/test/test_helpers.h b/src/test/test_helpers.h
new file mode 100644
index 0000000000..369243b459
--- /dev/null
+++ b/src/test/test_helpers.h
@@ -0,0 +1,17 @@
+/* Copyright (c) 2014-2015, The Tor Project, Inc. */
+/* See LICENSE for licensing information */
+
+#ifndef TOR_TEST_HELPERS_H
+#define TOR_TEST_HELPERS_H
+
+const char *get_yesterday_date_str(void);
+
+/* Number of descriptors contained in test_descriptors.txt. */
+#define HELPER_NUMBER_OF_DESCRIPTORS 8
+
+void helper_setup_fake_routerlist(void);
+
+extern const char TEST_DESCRIPTORS[];
+
+#endif
+
diff --git a/src/test/test_hs.c b/src/test/test_hs.c
index 0246eaf648..4c43ebd604 100644
--- a/src/test/test_hs.c
+++ b/src/test/test_hs.c
@@ -7,9 +7,15 @@
**/
#define CONTROL_PRIVATE
+#define CIRCUITBUILD_PRIVATE
+
#include "or.h"
#include "test.h"
#include "control.h"
+#include "config.h"
+#include "routerset.h"
+#include "circuitbuild.h"
+#include "test_helpers.h"
/* mock ID digest and longname for node that's in nodelist */
#define HSDIR_EXIST_ID "\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA" \
@@ -22,6 +28,68 @@
#define STR_HSDIR_NONE_EXIST_LONGNAME \
"$BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB"
+/* DuckDuckGo descriptor as an example. */
+static const char *hs_desc_content = "\
+rendezvous-service-descriptor g5ojobzupf275beh5ra72uyhb3dkpxwg\r\n\
+version 2\r\n\
+permanent-key\r\n\
+-----BEGIN RSA PUBLIC KEY-----\r\n\
+MIGJAoGBAJ/SzzgrXPxTlFrKVhXh3buCWv2QfcNgncUpDpKouLn3AtPH5Ocys0jE\r\n\
+aZSKdvaiQ62md2gOwj4x61cFNdi05tdQjS+2thHKEm/KsB9BGLSLBNJYY356bupg\r\n\
+I5gQozM65ENelfxYlysBjJ52xSDBd8C4f/p9umdzaaaCmzXG/nhzAgMBAAE=\r\n\
+-----END RSA PUBLIC KEY-----\r\n\
+secret-id-part anmjoxxwiupreyajjt5yasimfmwcnxlf\r\n\
+publication-time 2015-03-11 19:00:00\r\n\
+protocol-versions 2,3\r\n\
+introduction-points\r\n\
+-----BEGIN MESSAGE-----\r\n\
+aW50cm9kdWN0aW9uLXBvaW50IDd1bnd4cmg2dG5kNGh6eWt1Z3EzaGZzdHduc2ll\r\n\
+cmhyCmlwLWFkZHJlc3MgMTg4LjEzOC4xMjEuMTE4Cm9uaW9uLXBvcnQgOTAwMQpv\r\n\
+bmlvbi1rZXkKLS0tLS1CRUdJTiBSU0EgUFVCTElDIEtFWS0tLS0tCk1JR0pBb0dC\r\n\
+QUxGRVVyeVpDbk9ROEhURmV5cDVjMTRObWVqL1BhekFLTTBxRENTNElKUWh0Y3g1\r\n\
+NXpRSFdOVWIKQ2hHZ0JqR1RjV3ZGRnA0N3FkdGF6WUZhVXE2c0lQKzVqeWZ5b0Q4\r\n\
+UmJ1bzBwQmFWclJjMmNhYUptWWM0RDh6Vgpuby9sZnhzOVVaQnZ1cWY4eHIrMDB2\r\n\
+S0JJNmFSMlA2OE1WeDhrMExqcUpUU2RKOE9idm9yQWdNQkFBRT0KLS0tLS1FTkQg\r\n\
+UlNBIFBVQkxJQyBLRVktLS0tLQpzZXJ2aWNlLWtleQotLS0tLUJFR0lOIFJTQSBQ\r\n\
+VUJMSUMgS0VZLS0tLS0KTUlHSkFvR0JBTnJHb0ozeTlHNXQzN2F2ekI1cTlwN1hG\r\n\
+VUplRUVYMUNOaExnWmJXWGJhVk5OcXpoZFhyL0xTUQppM1Z6dW5OaUs3cndUVnE2\r\n\
+K2QyZ1lRckhMMmIvMXBBY3ZKWjJiNSs0bTRRc0NibFpjRENXTktRbHJnRWN5WXRJ\r\n\
+CkdscXJTbFFEaXA0ZnNrUFMvNDVkWTI0QmJsQ3NGU1k3RzVLVkxJck4zZFpGbmJr\r\n\
+NEZIS1hBZ01CQUFFPQotLS0tLUVORCBSU0EgUFVCTElDIEtFWS0tLS0tCmludHJv\r\n\
+ZHVjdGlvbi1wb2ludCBiNGM3enlxNXNheGZzN2prNXFibG1wN3I1b3pwdHRvagpp\r\n\
+cC1hZGRyZXNzIDEwOS4xNjkuNDUuMjI2Cm9uaW9uLXBvcnQgOTAwMQpvbmlvbi1r\r\n\
+ZXkKLS0tLS1CRUdJTiBSU0EgUFVCTElDIEtFWS0tLS0tCk1JR0pBb0dCQU8xSXpw\r\n\
+WFFUTUY3RXZUb1NEUXpzVnZiRVFRQUQrcGZ6NzczMVRXZzVaUEJZY1EyUkRaeVp4\r\n\
+OEQKNUVQSU1FeUE1RE83cGd0ak5LaXJvYXJGMC8yempjMkRXTUlSaXZyU29YUWVZ\r\n\
+ZXlMM1pzKzFIajJhMDlCdkYxZAp6MEswblRFdVhoNVR5V3lyMHdsbGI1SFBnTlI0\r\n\
+MS9oYkprZzkwZitPVCtIeGhKL1duUml2QWdNQkFBRT0KLS0tLS1FTkQgUlNBIFBV\r\n\
+QkxJQyBLRVktLS0tLQpzZXJ2aWNlLWtleQotLS0tLUJFR0lOIFJTQSBQVUJMSUMg\r\n\
+S0VZLS0tLS0KTUlHSkFvR0JBSzNWZEJ2ajFtQllLL3JrcHNwcm9Ub0llNUtHVmth\r\n\
+QkxvMW1tK1I2YUVJek1VZFE1SjkwNGtyRwpCd3k5NC8rV0lGNFpGYXh5Z2phejl1\r\n\
+N2pKY1k3ZGJhd1pFeG1hYXFCRlRwL2h2ZG9rcHQ4a1ByRVk4OTJPRHJ1CmJORUox\r\n\
+N1FPSmVMTVZZZk5Kcjl4TWZCQ3JQai8zOGh2RUdrbWVRNmRVWElvbVFNaUJGOVRB\r\n\
+Z01CQUFFPQotLS0tLUVORCBSU0EgUFVCTElDIEtFWS0tLS0tCmludHJvZHVjdGlv\r\n\
+bi1wb2ludCBhdjVtcWl0Y2Q3cjJkandsYmN0c2Jlc2R3eGt0ZWtvegppcC1hZGRy\r\n\
+ZXNzIDE0NC43Ni44LjczCm9uaW9uLXBvcnQgNDQzCm9uaW9uLWtleQotLS0tLUJF\r\n\
+R0lOIFJTQSBQVUJMSUMgS0VZLS0tLS0KTUlHSkFvR0JBTzVweVZzQmpZQmNmMXBE\r\n\
+dklHUlpmWXUzQ05nNldka0ZLMGlvdTBXTGZtejZRVDN0NWhzd3cyVwpjejlHMXhx\r\n\
+MmN0Nkd6VWkrNnVkTDlITTRVOUdHTi9BbW8wRG9GV1hKWHpBQkFXd2YyMVdsd1lW\r\n\
+eFJQMHRydi9WCkN6UDkzcHc5OG5vSmdGUGRUZ05iMjdKYmVUZENLVFBrTEtscXFt\r\n\
+b3NveUN2RitRa25vUS9BZ01CQUFFPQotLS0tLUVORCBSU0EgUFVCTElDIEtFWS0t\r\n\
+LS0tCnNlcnZpY2Uta2V5Ci0tLS0tQkVHSU4gUlNBIFBVQkxJQyBLRVktLS0tLQpN\r\n\
+SUdKQW9HQkFMVjNKSmtWN3lTNU9jc1lHMHNFYzFQOTVRclFRR3ZzbGJ6Wi9zRGxl\r\n\
+RlpKYXFSOUYvYjRUVERNClNGcFMxcU1GbldkZDgxVmRGMEdYRmN2WVpLamRJdHU2\r\n\
+SndBaTRJeEhxeXZtdTRKdUxrcXNaTEFLaXRLVkx4eGsKeERlMjlDNzRWMmJrOTRJ\r\n\
+MEgybTNKS2tzTHVwc3VxWWRVUmhOVXN0SElKZmgyZmNIalF0bEFnTUJBQUU9Ci0t\r\n\
+LS0tRU5EIFJTQSBQVUJMSUMgS0VZLS0tLS0KCg==\r\n\
+-----END MESSAGE-----\r\n\
+signature\r\n\
+-----BEGIN SIGNATURE-----\r\n\
+d4OuCE5OLAOnRB6cQN6WyMEmg/BHem144Vec+eYgeWoKwx3MxXFplUjFxgnMlmwN\r\n\
+PcftsZf2ztN0sbNCtPgDL3d0PqvxY3iHTQAI8EbaGq/IAJUZ8U4y963dD5+Bn6JQ\r\n\
+myE3ctmh0vy5+QxSiRjmQBkuEpCyks7LvWvHYrhnmcg=\r\n\
+-----END SIGNATURE-----";
+
/* Helper global variable for hidden service descriptor event test.
* It's used as a pointer to dynamically created message buffer in
* send_control_event_string_replacement function, which mocks
@@ -64,6 +132,7 @@ test_hs_desc_event(void *arg)
{
#define STR_HS_ADDR "ajhb7kljbiru65qo"
#define STR_HS_ID "b3oeducbhjmbqmgw2i3jtz4fekkrinwj"
+ #define STR_DESC_ID "g5ojobzupf275beh5ra72uyhb3dkpxwg"
rend_data_t rend_query;
const char *expected_msg;
@@ -90,7 +159,8 @@ test_hs_desc_event(void *arg)
/* test received event */
rend_query.auth_type = 1;
- control_event_hs_descriptor_received(&rend_query, HSDIR_EXIST_ID);
+ control_event_hs_descriptor_received(rend_query.onion_address,
+ rend_query.auth_type, HSDIR_EXIST_ID);
expected_msg = "650 HS_DESC RECEIVED "STR_HS_ADDR" BASIC_AUTH "\
STR_HSDIR_EXIST_LONGNAME"\r\n";
tt_assert(received_msg);
@@ -99,7 +169,8 @@ test_hs_desc_event(void *arg)
/* test failed event */
rend_query.auth_type = 2;
- control_event_hs_descriptor_failed(&rend_query, HSDIR_NONE_EXIST_ID,
+ control_event_hs_descriptor_failed(rend_query.onion_address,
+ rend_query.auth_type, HSDIR_NONE_EXIST_ID,
"QUERY_REJECTED");
expected_msg = "650 HS_DESC FAILED "STR_HS_ADDR" STEALTH_AUTH "\
STR_HSDIR_NONE_EXIST_LONGNAME" REASON=QUERY_REJECTED\r\n";
@@ -109,7 +180,8 @@ test_hs_desc_event(void *arg)
/* test invalid auth type */
rend_query.auth_type = 999;
- control_event_hs_descriptor_failed(&rend_query, HSDIR_EXIST_ID,
+ control_event_hs_descriptor_failed(rend_query.onion_address,
+ rend_query.auth_type, HSDIR_EXIST_ID,
"QUERY_REJECTED");
expected_msg = "650 HS_DESC FAILED "STR_HS_ADDR" UNKNOWN "\
STR_HSDIR_EXIST_LONGNAME" REASON=QUERY_REJECTED\r\n";
@@ -117,15 +189,101 @@ test_hs_desc_event(void *arg)
tt_str_op(received_msg,OP_EQ, expected_msg);
tor_free(received_msg);
+ /* test valid content. */
+ char *exp_msg;
+ control_event_hs_descriptor_content(rend_query.onion_address, STR_DESC_ID,
+ HSDIR_EXIST_ID, hs_desc_content);
+ tor_asprintf(&exp_msg, "650+HS_DESC_CONTENT " STR_HS_ADDR " " STR_DESC_ID \
+ " " STR_HSDIR_EXIST_LONGNAME "\r\n%s\r\n.\r\n650 OK\r\n",
+ hs_desc_content);
+ tt_assert(received_msg);
+ tt_str_op(received_msg, OP_EQ, exp_msg);
+ tor_free(received_msg);
+ tor_free(exp_msg);
+
done:
UNMOCK(send_control_event_string);
UNMOCK(node_describe_longname_by_id);
tor_free(received_msg);
}
+/* Make sure we always pick the right RP, given a well formatted
+ * Tor2webRendezvousPoints value. */
+static void
+test_pick_tor2web_rendezvous_node(void *arg)
+{
+ or_options_t *options = get_options_mutable();
+ const node_t *chosen_rp = NULL;
+ router_crn_flags_t flags = CRN_NEED_DESC;
+ int retval, i;
+ const char *tor2web_rendezvous_str = "test003r";
+
+ (void) arg;
+
+ /* Setup fake routerlist. */
+ helper_setup_fake_routerlist();
+
+ /* Parse Tor2webRendezvousPoints as a routerset. */
+ options->Tor2webRendezvousPoints = routerset_new();
+ retval = routerset_parse(options->Tor2webRendezvousPoints,
+ tor2web_rendezvous_str,
+ "test_tor2web_rp");
+ tt_int_op(retval, >=, 0);
+
+ /* Pick rendezvous point. Make sure the correct one is
+ picked. Repeat many times to make sure it works properly. */
+ for (i = 0; i < 50 ; i++) {
+ chosen_rp = pick_tor2web_rendezvous_node(flags, options);
+ tt_assert(chosen_rp);
+ tt_str_op(chosen_rp->ri->nickname, ==, tor2web_rendezvous_str);
+ }
+
+ done:
+ routerset_free(options->Tor2webRendezvousPoints);
+}
+
+/* Make sure we never pick an RP if Tor2webRendezvousPoints doesn't
+ * correspond to an actual node. */
+static void
+test_pick_bad_tor2web_rendezvous_node(void *arg)
+{
+ or_options_t *options = get_options_mutable();
+ const node_t *chosen_rp = NULL;
+ router_crn_flags_t flags = CRN_NEED_DESC;
+ int retval, i;
+ const char *tor2web_rendezvous_str = "dummy";
+
+ (void) arg;
+
+ /* Setup fake routerlist. */
+ helper_setup_fake_routerlist();
+
+ /* Parse Tor2webRendezvousPoints as a routerset. */
+ options->Tor2webRendezvousPoints = routerset_new();
+ retval = routerset_parse(options->Tor2webRendezvousPoints,
+ tor2web_rendezvous_str,
+ "test_tor2web_rp");
+ tt_int_op(retval, >=, 0);
+
+ /* Pick rendezvous point. Since Tor2webRendezvousPoints was set to a
+ dummy value, we shouldn't find any eligible RPs. */
+ for (i = 0; i < 50 ; i++) {
+ chosen_rp = pick_tor2web_rendezvous_node(flags, options);
+ tt_assert(!chosen_rp);
+ }
+
+ done:
+ routerset_free(options->Tor2webRendezvousPoints);
+}
+
struct testcase_t hs_tests[] = {
{ "hs_desc_event", test_hs_desc_event, TT_FORK,
NULL, NULL },
+ { "pick_tor2web_rendezvous_node", test_pick_tor2web_rendezvous_node, TT_FORK,
+ NULL, NULL },
+ { "pick_bad_tor2web_rendezvous_node",
+ test_pick_bad_tor2web_rendezvous_node, TT_FORK,
+ NULL, NULL },
END_OF_TESTCASES
};
diff --git a/src/test/test_nodelist.c b/src/test/test_nodelist.c
index 9bd8b4a7ea..a8693ec9b5 100644
--- a/src/test/test_nodelist.c
+++ b/src/test/test_nodelist.c
@@ -10,7 +10,7 @@
#include "nodelist.h"
#include "test.h"
-/** Tese the case when node_get_by_id() returns NULL,
+/** Test the case when node_get_by_id() returns NULL,
* node_get_verbose_nickname_by_id should return the base 16 encoding
* of the id.
*/
diff --git a/src/test/test_ntor.sh.in b/src/test/test_ntor.sh.in
new file mode 100644
index 0000000000..be35384ddf
--- /dev/null
+++ b/src/test/test_ntor.sh.in
@@ -0,0 +1,9 @@
+#!@SHELL@
+# Validate Tor's ntor implementation.
+
+exitcode=0
+
+@PYTHON@ @abs_top_srcdir@/src/test/ntor_ref.py test-tor || exitcode=1
+@PYTHON@ @abs_top_srcdir@/src/test/ntor_ref.py self-test || exitcode=1
+
+exit ${exitcode}
diff --git a/src/test/test_ntor_cl.c b/src/test/test_ntor_cl.c
index 955b508ef0..bfbf13a476 100644
--- a/src/test/test_ntor_cl.c
+++ b/src/test/test_ntor_cl.c
@@ -126,7 +126,7 @@ client2(int argc, char **argv)
keys = tor_malloc(keybytes);
hexkeys = tor_malloc(keybytes*2+1);
- if (onion_skin_ntor_client_handshake(&state, msg, keys, keybytes)<0) {
+ if (onion_skin_ntor_client_handshake(&state, msg, keys, keybytes, NULL)<0) {
fprintf(stderr, "handshake failed");
result = 2;
goto done;
diff --git a/src/test/test_oom.c b/src/test/test_oom.c
index 28b4c0435a..41cfcdbd81 100644
--- a/src/test/test_oom.c
+++ b/src/test/test_oom.c
@@ -13,9 +13,6 @@
#include "compat_libevent.h"
#include "connection.h"
#include "config.h"
-#ifdef ENABLE_MEMPOOLS
-#include "mempool.h"
-#endif
#include "relay.h"
#include "test.h"
@@ -143,10 +140,6 @@ test_oom_circbuf(void *arg)
MOCK(circuit_mark_for_close_, circuit_mark_for_close_dummy_);
-#ifdef ENABLE_MEMPOOLS
- init_cell_pool();
-#endif /* ENABLE_MEMPOOLS */
-
/* Far too low for real life. */
options->MaxMemInQueues = 256*packed_cell_mem_cost();
options->CellStatistics = 0;
@@ -164,13 +157,8 @@ test_oom_circbuf(void *arg)
tor_gettimeofday_cache_set(&tv);
c2 = dummy_or_circuit_new(20, 20);
-#ifdef ENABLE_MEMPOOLS
- tt_int_op(packed_cell_mem_cost(), OP_EQ,
- sizeof(packed_cell_t) + MP_POOL_ITEM_OVERHEAD);
-#else
tt_int_op(packed_cell_mem_cost(), OP_EQ,
sizeof(packed_cell_t));
-#endif /* ENABLE_MEMPOOLS */
tt_int_op(cell_queues_get_total_allocation(), OP_EQ,
packed_cell_mem_cost() * 70);
tt_int_op(cell_queues_check_size(), OP_EQ, 0); /* We are still not OOM */
@@ -242,10 +230,6 @@ test_oom_streambuf(void *arg)
MOCK(circuit_mark_for_close_, circuit_mark_for_close_dummy_);
-#ifdef ENABLE_MEMPOOLS
- init_cell_pool();
-#endif /* ENABLE_MEMPOOLS */
-
/* Far too low for real life. */
options->MaxMemInQueues = 81*packed_cell_mem_cost() + 4096 * 34;
options->CellStatistics = 0;
diff --git a/src/test/test_relay.c b/src/test/test_relay.c
index 2144ef335e..6081956d46 100644
--- a/src/test/test_relay.c
+++ b/src/test/test_relay.c
@@ -60,11 +60,6 @@ test_relay_append_cell_to_circuit_queue(void *arg)
(void)arg;
- /* We'll need the cell pool for append_cell_to_circuit_queue() to work */
-#ifdef ENABLE_MEMPOOLS
- init_cell_pool();
-#endif /* ENABLE_MEMPOOLS */
-
/* Make fake channels to be nchan and pchan for the circuit */
nchan = new_fake_channel();
tt_assert(nchan);
@@ -119,9 +114,6 @@ test_relay_append_cell_to_circuit_queue(void *arg)
tor_free(orcirc);
free_fake_channel(nchan);
free_fake_channel(pchan);
-#ifdef ENABLE_MEMPOOLS
- free_cell_pool();
-#endif /* ENABLE_MEMPOOLS */
return;
}
diff --git a/src/test/test_relaycell.c b/src/test/test_relaycell.c
index 28c8f4e8ef..0a6fef729c 100644
--- a/src/test/test_relaycell.c
+++ b/src/test/test_relaycell.c
@@ -137,9 +137,9 @@ test_relaycell_resolved(void *arg)
/* Now put it in the right state. */
ENTRY_TO_CONN(entryconn)->state = AP_CONN_STATE_RESOLVE_WAIT;
entryconn->socks_request->command = SOCKS_COMMAND_RESOLVE;
- entryconn->ipv4_traffic_ok = 1;
- entryconn->ipv6_traffic_ok = 1;
- entryconn->prefer_ipv6_traffic = 0;
+ entryconn->entry_cfg.ipv4_traffic = 1;
+ entryconn->entry_cfg.ipv6_traffic = 1;
+ entryconn->entry_cfg.prefer_ipv6 = 0;
/* We prefer ipv4, so we should get the first ipv4 answer */
MOCK_RESET();
@@ -159,7 +159,7 @@ test_relaycell_resolved(void *arg)
ASSERT_RESOLVED_CALLED(RESOLVED_TYPE_IPV4, "\x12\x00\x00\x01", 512, -1);
/* now prefer ipv6, and get the first ipv6 answer */
- entryconn->prefer_ipv6_traffic = 1;
+ entryconn->entry_cfg.prefer_ipv6 = 1;
MOCK_RESET();
r = connection_edge_process_resolved_cell(edgeconn, &cell, &rh);
tt_int_op(r, OP_EQ, 0);
@@ -182,7 +182,7 @@ test_relaycell_resolved(void *arg)
/* But if we don't allow IPv4, we report nothing if the cell contains only
* ipv4 */
MOCK_RESET();
- entryconn->ipv4_traffic_ok = 0;
+ entryconn->entry_cfg.ipv4_traffic = 0;
r = connection_edge_process_resolved_cell(edgeconn, &cell, &rh);
tt_int_op(r, OP_EQ, 0);
ASSERT_MARK_CALLED(END_STREAM_REASON_DONE|
@@ -191,7 +191,7 @@ test_relaycell_resolved(void *arg)
/* If we wanted hostnames, we report nothing, since we only had IPs. */
MOCK_RESET();
- entryconn->ipv4_traffic_ok = 1;
+ entryconn->entry_cfg.ipv4_traffic = 1;
entryconn->socks_request->command = SOCKS_COMMAND_RESOLVE_PTR;
r = connection_edge_process_resolved_cell(edgeconn, &cell, &rh);
tt_int_op(r, OP_EQ, 0);
diff --git a/src/test/test_routerlist.c b/src/test/test_routerlist.c
new file mode 100644
index 0000000000..381a592c5b
--- /dev/null
+++ b/src/test/test_routerlist.c
@@ -0,0 +1,103 @@
+/* Copyright (c) 2014, The Tor Project, Inc. */
+/* See LICENSE for licensing information */
+
+#define ROUTERLIST_PRIVATE
+#include "or.h"
+#include "routerlist.h"
+#include "directory.h"
+#include "test.h"
+
+/* 4 digests + 3 sep + pre + post + NULL */
+static char output[4*BASE64_DIGEST256_LEN+3+2+2+1];
+
+static void
+mock_get_from_dirserver(uint8_t dir_purpose, uint8_t router_purpose,
+ const char *resource, int pds_flags)
+{
+ (void)dir_purpose;
+ (void)router_purpose;
+ (void)pds_flags;
+ tt_assert(resource);
+ strlcpy(output, resource, sizeof(output));
+ done:
+ ;
+}
+
+static void
+test_routerlist_initiate_descriptor_downloads(void *arg)
+{
+ const char *prose = "unhurried and wise, we perceive.";
+ smartlist_t *digests = smartlist_new();
+ (void)arg;
+
+ for (int i = 0; i < 20; i++) {
+ smartlist_add(digests, (char*)prose);
+ }
+
+ MOCK(directory_get_from_dirserver, mock_get_from_dirserver);
+ initiate_descriptor_downloads(NULL, DIR_PURPOSE_FETCH_MICRODESC,
+ digests, 3, 7, 0);
+ UNMOCK(directory_get_from_dirserver);
+
+ tt_str_op(output, OP_EQ, "d/"
+ "dW5odXJyaWVkIGFuZCB3aXNlLCB3ZSBwZXJjZWl2ZS4-"
+ "dW5odXJyaWVkIGFuZCB3aXNlLCB3ZSBwZXJjZWl2ZS4-"
+ "dW5odXJyaWVkIGFuZCB3aXNlLCB3ZSBwZXJjZWl2ZS4-"
+ "dW5odXJyaWVkIGFuZCB3aXNlLCB3ZSBwZXJjZWl2ZS4"
+ ".z");
+
+ done:
+ smartlist_free(digests);
+}
+
+static int count = 0;
+
+static void
+mock_initiate_descriptor_downloads(const routerstatus_t *source,
+ int purpose, smartlist_t *digests,
+ int lo, int hi, int pds_flags)
+{
+ (void)source;
+ (void)purpose;
+ (void)digests;
+ (void)pds_flags;
+ (void)hi;
+ (void)lo;
+ count += 1;
+}
+
+static void
+test_routerlist_launch_descriptor_downloads(void *arg)
+{
+ smartlist_t *downloadable = smartlist_new();
+ time_t now = time(NULL);
+ char *cp;
+ (void)arg;
+
+ for (int i = 0; i < 100; i++) {
+ cp = tor_malloc(DIGEST256_LEN);
+ tt_assert(cp);
+ crypto_rand(cp, DIGEST256_LEN);
+ smartlist_add(downloadable, cp);
+ }
+
+ MOCK(initiate_descriptor_downloads, mock_initiate_descriptor_downloads);
+ launch_descriptor_downloads(DIR_PURPOSE_FETCH_MICRODESC, downloadable,
+ NULL, now);
+ tt_int_op(3, ==, count);
+ UNMOCK(initiate_descriptor_downloads);
+
+ done:
+ SMARTLIST_FOREACH(downloadable, char *, cp1, tor_free(cp1));
+ smartlist_free(downloadable);
+}
+
+#define NODE(name, flags) \
+ { #name, test_routerlist_##name, (flags), NULL, NULL }
+
+struct testcase_t routerlist_tests[] = {
+ NODE(initiate_descriptor_downloads, 0),
+ NODE(launch_descriptor_downloads, 0),
+ END_OF_TESTCASES
+};
+
diff --git a/src/test/test_slow.c b/src/test/test_slow.c
new file mode 100644
index 0000000000..32386b485e
--- /dev/null
+++ b/src/test/test_slow.c
@@ -0,0 +1,29 @@
+/* Copyright (c) 2001-2004, Roger Dingledine.
+ * Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
+ * Copyright (c) 2007-2015, The Tor Project, Inc. */
+/* See LICENSE for licensing information */
+
+/**
+ * \file test_slow.c
+ * \brief Slower unit tests for many pieces of the lower level Tor modules.
+ **/
+
+#include "orconfig.h"
+
+#include <stdio.h>
+#ifdef HAVE_FCNTL_H
+#include <fcntl.h>
+#endif
+
+#include "or.h"
+#include "test.h"
+
+extern struct testcase_t slow_crypto_tests[];
+extern struct testcase_t slow_util_tests[];
+
+struct testgroup_t testgroups[] = {
+ { "slow/crypto/", slow_crypto_tests },
+ { "slow/util/", slow_util_tests },
+ END_OF_GROUPS
+};
+
diff --git a/src/test/test_status.c b/src/test/test_status.c
index aa71aa6a9b..cbc8af188c 100644
--- a/src/test/test_status.c
+++ b/src/test/test_status.c
@@ -240,7 +240,6 @@ NS(test_main)(void *arg)
NS_DECL(double, tls_get_write_overhead_ratio, (void));
NS_DECL(int, we_are_hibernating, (void));
-NS_DECL(const or_options_t *, get_options, (void));
NS_DECL(int, public_server_mode, (const or_options_t *options));
NS_DECL(const routerinfo_t *, router_get_my_routerinfo, (void));
@@ -252,7 +251,6 @@ NS(test_main)(void *arg)
NS_MOCK(tls_get_write_overhead_ratio);
NS_MOCK(we_are_hibernating);
- NS_MOCK(get_options);
NS_MOCK(public_server_mode);
NS_MOCK(router_get_my_routerinfo);
@@ -264,7 +262,6 @@ NS(test_main)(void *arg)
done:
NS_UNMOCK(tls_get_write_overhead_ratio);
NS_UNMOCK(we_are_hibernating);
- NS_UNMOCK(get_options);
NS_UNMOCK(public_server_mode);
NS_UNMOCK(router_get_my_routerinfo);
}
@@ -281,12 +278,6 @@ NS(we_are_hibernating)(void)
return 0;
}
-static const or_options_t *
-NS(get_options)(void)
-{
- return NULL;
-}
-
static int
NS(public_server_mode)(const or_options_t *options)
{
@@ -311,7 +302,6 @@ NS(router_get_my_routerinfo)(void)
NS_DECL(double, tls_get_write_overhead_ratio, (void));
NS_DECL(int, we_are_hibernating, (void));
-NS_DECL(const or_options_t *, get_options, (void));
NS_DECL(int, public_server_mode, (const or_options_t *options));
NS_DECL(const routerinfo_t *, router_get_my_routerinfo, (void));
NS_DECL(const node_t *, node_get_by_id, (const char *identity_digest));
@@ -331,7 +321,6 @@ NS(test_main)(void *arg)
NS_MOCK(tls_get_write_overhead_ratio);
NS_MOCK(we_are_hibernating);
- NS_MOCK(get_options);
NS_MOCK(public_server_mode);
NS_MOCK(router_get_my_routerinfo);
NS_MOCK(node_get_by_id);
@@ -348,12 +337,11 @@ NS(test_main)(void *arg)
actual = log_heartbeat(0);
tt_int_op(actual, OP_EQ, expected);
- tt_int_op(CALLED(logv), OP_EQ, 3);
+ tt_int_op(CALLED(logv), OP_EQ, 5);
done:
NS_UNMOCK(tls_get_write_overhead_ratio);
NS_UNMOCK(we_are_hibernating);
- NS_UNMOCK(get_options);
NS_UNMOCK(public_server_mode);
NS_UNMOCK(router_get_my_routerinfo);
NS_UNMOCK(node_get_by_id);
@@ -374,12 +362,6 @@ NS(we_are_hibernating)(void)
return 0;
}
-static const or_options_t *
-NS(get_options)(void)
-{
- return NULL;
-}
-
static int
NS(public_server_mode)(const or_options_t *options)
{
@@ -433,6 +415,9 @@ NS(logv)(int severity, log_domain_mask_t domain,
tt_str_op(va_arg(ap, char *), OP_EQ, ""); /* hibernating */
break;
case 2:
+ tt_int_op(severity, OP_EQ, LOG_INFO);
+ break;
+ case 3:
tt_int_op(severity, OP_EQ, LOG_NOTICE);
tt_int_op(domain, OP_EQ, LD_HEARTBEAT);
tt_ptr_op(strstr(funcname, "rep_hist_log_circuit_handshake_stats"),
@@ -445,6 +430,12 @@ NS(logv)(int severity, log_domain_mask_t domain,
tt_int_op(va_arg(ap, int), OP_EQ, 1); /* handshakes assigned (NTOR) */
tt_int_op(va_arg(ap, int), OP_EQ, 1); /* handshakes requested (NTOR) */
break;
+ case 4:
+ tt_int_op(severity, OP_EQ, LOG_NOTICE);
+ tt_int_op(domain, OP_EQ, LD_HEARTBEAT);
+ tt_ptr_op(strstr(funcname, "rep_hist_log_link_protocol_counts"),
+ OP_NE, NULL);
+ break;
default:
tt_abort_msg("unexpected call to logv()"); // TODO: prettyprint args
break;
@@ -472,7 +463,6 @@ NS(server_mode)(const or_options_t *options)
NS_DECL(double, tls_get_write_overhead_ratio, (void));
NS_DECL(int, we_are_hibernating, (void));
-NS_DECL(const or_options_t *, get_options, (void));
NS_DECL(int, public_server_mode, (const or_options_t *options));
NS_DECL(long, get_uptime, (void));
NS_DECL(uint64_t, get_bytes_read, (void));
@@ -481,6 +471,8 @@ NS_DECL(void, logv, (int severity, log_domain_mask_t domain,
const char *funcname, const char *suffix, const char *format, va_list ap));
NS_DECL(int, server_mode, (const or_options_t *options));
+static int NS(n_msgs) = 0;
+
static void
NS(test_main)(void *arg)
{
@@ -489,7 +481,6 @@ NS(test_main)(void *arg)
NS_MOCK(tls_get_write_overhead_ratio);
NS_MOCK(we_are_hibernating);
- NS_MOCK(get_options);
NS_MOCK(public_server_mode);
NS_MOCK(get_uptime);
NS_MOCK(get_bytes_read);
@@ -503,11 +494,11 @@ NS(test_main)(void *arg)
actual = log_heartbeat(0);
tt_int_op(actual, OP_EQ, expected);
+ tt_int_op(NS(n_msgs), OP_EQ, 1);
done:
NS_UNMOCK(tls_get_write_overhead_ratio);
NS_UNMOCK(we_are_hibernating);
- NS_UNMOCK(get_options);
NS_UNMOCK(public_server_mode);
NS_UNMOCK(get_uptime);
NS_UNMOCK(get_bytes_read);
@@ -528,12 +519,6 @@ NS(we_are_hibernating)(void)
return 1;
}
-static const or_options_t *
-NS(get_options)(void)
-{
- return NULL;
-}
-
static int
NS(public_server_mode)(const or_options_t *options)
{
@@ -564,6 +549,10 @@ static void
NS(logv)(int severity, log_domain_mask_t domain, const char *funcname,
const char *suffix, const char *format, va_list ap)
{
+ if (severity == LOG_INFO)
+ return;
+ ++NS(n_msgs);
+
tt_int_op(severity, OP_EQ, LOG_NOTICE);
tt_int_op(domain, OP_EQ, LD_HEARTBEAT);
tt_ptr_op(strstr(funcname, "log_heartbeat"), OP_NE, NULL);
@@ -599,7 +588,6 @@ NS(server_mode)(const or_options_t *options)
NS_DECL(double, tls_get_write_overhead_ratio, (void));
NS_DECL(int, we_are_hibernating, (void));
-NS_DECL(const or_options_t *, get_options, (void));
NS_DECL(int, public_server_mode, (const or_options_t *options));
NS_DECL(long, get_uptime, (void));
NS_DECL(uint64_t, get_bytes_read, (void));
@@ -622,7 +610,6 @@ NS(test_main)(void *arg)
NS_MOCK(tls_get_write_overhead_ratio);
NS_MOCK(we_are_hibernating);
- NS_MOCK(get_options);
NS_MOCK(public_server_mode);
NS_MOCK(get_uptime);
NS_MOCK(get_bytes_read);
@@ -639,12 +626,11 @@ NS(test_main)(void *arg)
actual = log_heartbeat(0);
tt_int_op(actual, OP_EQ, expected);
- tt_int_op(CALLED(logv), OP_EQ, 2);
+ tt_int_op(CALLED(logv), OP_EQ, 3);
done:
NS_UNMOCK(tls_get_write_overhead_ratio);
NS_UNMOCK(we_are_hibernating);
- NS_UNMOCK(get_options);
NS_UNMOCK(public_server_mode);
NS_UNMOCK(get_uptime);
NS_UNMOCK(get_bytes_read);
@@ -669,15 +655,6 @@ NS(we_are_hibernating)(void)
return 0;
}
-static const or_options_t *
-NS(get_options)(void)
-{
- NS(mock_options) = tor_malloc_zero(sizeof(or_options_t));
- NS(mock_options)->AccountingMax = 0;
-
- return NS(mock_options);
-}
-
static int
NS(public_server_mode)(const or_options_t *options)
{
@@ -741,6 +718,9 @@ NS(logv)(int severity, log_domain_mask_t domain,
OP_NE, NULL); /* end_buf */
tt_str_op(va_arg(ap, char *), OP_EQ, "0:01 hours"); /* remaining */
break;
+ case 2:
+ tt_int_op(severity, OP_EQ, LOG_INFO);
+ break;
default:
tt_abort_msg("unexpected call to logv()"); // TODO: prettyprint args
break;
@@ -792,7 +772,6 @@ NS(get_or_state)(void)
NS_DECL(double, tls_get_write_overhead_ratio, (void));
NS_DECL(int, we_are_hibernating, (void));
-NS_DECL(const or_options_t *, get_options, (void));
NS_DECL(int, public_server_mode, (const or_options_t *options));
NS_DECL(long, get_uptime, (void));
NS_DECL(uint64_t, get_bytes_read, (void));
@@ -810,7 +789,6 @@ NS(test_main)(void *arg)
NS_MOCK(tls_get_write_overhead_ratio);
NS_MOCK(we_are_hibernating);
- NS_MOCK(get_options);
NS_MOCK(public_server_mode);
NS_MOCK(get_uptime);
NS_MOCK(get_bytes_read);
@@ -821,7 +799,7 @@ NS(test_main)(void *arg)
log_global_min_severity_ = LOG_DEBUG;
stats_n_data_bytes_packaged = RELAY_PAYLOAD_SIZE;
- stats_n_data_cells_packaged = 1;
+ stats_n_data_cells_packaged = 2;
expected = 0;
actual = log_heartbeat(0);
@@ -833,7 +811,6 @@ NS(test_main)(void *arg)
stats_n_data_cells_packaged = 0;
NS_UNMOCK(tls_get_write_overhead_ratio);
NS_UNMOCK(we_are_hibernating);
- NS_UNMOCK(get_options);
NS_UNMOCK(public_server_mode);
NS_UNMOCK(get_uptime);
NS_UNMOCK(get_bytes_read);
@@ -855,12 +832,6 @@ NS(we_are_hibernating)(void)
return 0;
}
-static const or_options_t *
-NS(get_options)(void)
-{
- return NULL;
-}
-
static int
NS(public_server_mode)(const or_options_t *options)
{
@@ -913,8 +884,10 @@ NS(logv)(int severity, log_domain_mask_t domain, const char *funcname,
tt_ptr_op(strstr(funcname, "log_heartbeat"), OP_NE, NULL);
tt_ptr_op(suffix, OP_EQ, NULL);
tt_str_op(format, OP_EQ,
- "Average packaged cell fullness: %2.3f%%");
- tt_int_op(fabs(va_arg(ap, double) - 100.0) <= DBL_EPSILON, OP_EQ, 1);
+ "Average packaged cell fullness: %2.3f%%. "
+ "TLS write overhead: %.f%%");
+ tt_double_op(fabs(va_arg(ap, double) - 50.0), <=, DBL_EPSILON);
+ tt_double_op(fabs(va_arg(ap, double) - 0.0), <=, DBL_EPSILON);
break;
default:
tt_abort_msg("unexpected call to logv()"); // TODO: prettyprint args
@@ -951,7 +924,6 @@ NS(accounting_is_enabled)(const or_options_t *options)
NS_DECL(double, tls_get_write_overhead_ratio, (void));
NS_DECL(int, we_are_hibernating, (void));
-NS_DECL(const or_options_t *, get_options, (void));
NS_DECL(int, public_server_mode, (const or_options_t *options));
NS_DECL(long, get_uptime, (void));
NS_DECL(uint64_t, get_bytes_read, (void));
@@ -969,7 +941,6 @@ NS(test_main)(void *arg)
NS_MOCK(tls_get_write_overhead_ratio);
NS_MOCK(we_are_hibernating);
- NS_MOCK(get_options);
NS_MOCK(public_server_mode);
NS_MOCK(get_uptime);
NS_MOCK(get_bytes_read);
@@ -989,7 +960,6 @@ NS(test_main)(void *arg)
done:
NS_UNMOCK(tls_get_write_overhead_ratio);
NS_UNMOCK(we_are_hibernating);
- NS_UNMOCK(get_options);
NS_UNMOCK(public_server_mode);
NS_UNMOCK(get_uptime);
NS_UNMOCK(get_bytes_read);
@@ -1011,12 +981,6 @@ NS(we_are_hibernating)(void)
return 0;
}
-static const or_options_t *
-NS(get_options)(void)
-{
- return NULL;
-}
-
static int
NS(public_server_mode)(const or_options_t *options)
{
@@ -1068,8 +1032,11 @@ NS(logv)(int severity, log_domain_mask_t domain,
tt_int_op(domain, OP_EQ, LD_HEARTBEAT);
tt_ptr_op(strstr(funcname, "log_heartbeat"), OP_NE, NULL);
tt_ptr_op(suffix, OP_EQ, NULL);
- tt_str_op(format, OP_EQ, "TLS write overhead: %.f%%");
+ tt_str_op(format, OP_EQ,
+ "Average packaged cell fullness: %2.3f%%. "
+ "TLS write overhead: %.f%%");
tt_int_op(fabs(va_arg(ap, double) - 100.0) <= DBL_EPSILON, OP_EQ, 1);
+ tt_double_op(fabs(va_arg(ap, double) - 100.0), <=, DBL_EPSILON);
break;
default:
tt_abort_msg("unexpected call to logv()"); // TODO: prettyprint args
diff --git a/src/test/test_threads.c b/src/test/test_threads.c
new file mode 100644
index 0000000000..2ac08d4d28
--- /dev/null
+++ b/src/test/test_threads.c
@@ -0,0 +1,316 @@
+/* Copyright (c) 2001-2004, Roger Dingledine.
+ * Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
+ * Copyright (c) 2007-2015, The Tor Project, Inc. */
+/* See LICENSE for licensing information */
+
+#include "orconfig.h"
+#include "or.h"
+#include "compat_threads.h"
+#include "test.h"
+
+/** mutex for thread test to stop the threads hitting data at the same time. */
+static tor_mutex_t *thread_test_mutex_ = NULL;
+/** mutexes for the thread test to make sure that the threads have to
+ * interleave somewhat. */
+static tor_mutex_t *thread_test_start1_ = NULL,
+ *thread_test_start2_ = NULL;
+/** Shared strmap for the thread test. */
+static strmap_t *thread_test_strmap_ = NULL;
+/** The name of thread1 for the thread test */
+static char *thread1_name_ = NULL;
+/** The name of thread2 for the thread test */
+static char *thread2_name_ = NULL;
+
+static int thread_fns_failed = 0;
+
+static unsigned long thread_fn_tid1, thread_fn_tid2;
+
+static void thread_test_func_(void* _s) ATTR_NORETURN;
+
+/** How many iterations have the threads in the unit test run? */
+static int t1_count = 0, t2_count = 0;
+
+/** Helper function for threading unit tests: This function runs in a
+ * subthread. It grabs its own mutex (start1 or start2) to make sure that it
+ * should start, then it repeatedly alters _test_thread_strmap protected by
+ * thread_test_mutex_. */
+static void
+thread_test_func_(void* _s)
+{
+ char *s = _s;
+ int i, *count;
+ tor_mutex_t *m;
+ char buf[64];
+ char **cp;
+ if (!strcmp(s, "thread 1")) {
+ m = thread_test_start1_;
+ cp = &thread1_name_;
+ count = &t1_count;
+ thread_fn_tid1 = tor_get_thread_id();
+ } else {
+ m = thread_test_start2_;
+ cp = &thread2_name_;
+ count = &t2_count;
+ thread_fn_tid2 = tor_get_thread_id();
+ }
+
+ tor_snprintf(buf, sizeof(buf), "%lu", tor_get_thread_id());
+ *cp = tor_strdup(buf);
+
+ tor_mutex_acquire(m);
+
+ for (i=0; i<10000; ++i) {
+ tor_mutex_acquire(thread_test_mutex_);
+ strmap_set(thread_test_strmap_, "last to run", *cp);
+ ++*count;
+ tor_mutex_release(thread_test_mutex_);
+ }
+ tor_mutex_acquire(thread_test_mutex_);
+ strmap_set(thread_test_strmap_, s, *cp);
+ if (in_main_thread())
+ ++thread_fns_failed;
+ tor_mutex_release(thread_test_mutex_);
+
+ tor_mutex_release(m);
+
+ spawn_exit();
+}
+
+/** Run unit tests for threading logic. */
+static void
+test_threads_basic(void *arg)
+{
+ char *s1 = NULL, *s2 = NULL;
+ int done = 0, timedout = 0;
+ time_t started;
+#ifndef _WIN32
+ struct timeval tv;
+ tv.tv_sec=0;
+ tv.tv_usec=100*1000;
+#endif
+ (void) arg;
+
+ set_main_thread();
+
+ thread_test_mutex_ = tor_mutex_new();
+ thread_test_start1_ = tor_mutex_new();
+ thread_test_start2_ = tor_mutex_new();
+ thread_test_strmap_ = strmap_new();
+ s1 = tor_strdup("thread 1");
+ s2 = tor_strdup("thread 2");
+ tor_mutex_acquire(thread_test_start1_);
+ tor_mutex_acquire(thread_test_start2_);
+ spawn_func(thread_test_func_, s1);
+ spawn_func(thread_test_func_, s2);
+ tor_mutex_release(thread_test_start2_);
+ tor_mutex_release(thread_test_start1_);
+ started = time(NULL);
+ while (!done) {
+ tor_mutex_acquire(thread_test_mutex_);
+ strmap_assert_ok(thread_test_strmap_);
+ if (strmap_get(thread_test_strmap_, "thread 1") &&
+ strmap_get(thread_test_strmap_, "thread 2")) {
+ done = 1;
+ } else if (time(NULL) > started + 150) {
+ timedout = done = 1;
+ }
+ tor_mutex_release(thread_test_mutex_);
+#ifndef _WIN32
+ /* Prevent the main thread from starving the worker threads. */
+ select(0, NULL, NULL, NULL, &tv);
+#endif
+ }
+ tor_mutex_acquire(thread_test_start1_);
+ tor_mutex_release(thread_test_start1_);
+ tor_mutex_acquire(thread_test_start2_);
+ tor_mutex_release(thread_test_start2_);
+
+ tor_mutex_free(thread_test_mutex_);
+
+ if (timedout) {
+ printf("\nTimed out: %d %d", t1_count, t2_count);
+ tt_assert(strmap_get(thread_test_strmap_, "thread 1"));
+ tt_assert(strmap_get(thread_test_strmap_, "thread 2"));
+ tt_assert(!timedout);
+ }
+
+ /* different thread IDs. */
+ tt_assert(strcmp(strmap_get(thread_test_strmap_, "thread 1"),
+ strmap_get(thread_test_strmap_, "thread 2")));
+ tt_assert(!strcmp(strmap_get(thread_test_strmap_, "thread 1"),
+ strmap_get(thread_test_strmap_, "last to run")) ||
+ !strcmp(strmap_get(thread_test_strmap_, "thread 2"),
+ strmap_get(thread_test_strmap_, "last to run")));
+
+ tt_int_op(thread_fns_failed, ==, 0);
+ tt_int_op(thread_fn_tid1, !=, thread_fn_tid2);
+
+ done:
+ tor_free(s1);
+ tor_free(s2);
+ tor_free(thread1_name_);
+ tor_free(thread2_name_);
+ if (thread_test_strmap_)
+ strmap_free(thread_test_strmap_, NULL);
+ if (thread_test_start1_)
+ tor_mutex_free(thread_test_start1_);
+ if (thread_test_start2_)
+ tor_mutex_free(thread_test_start2_);
+}
+
+typedef struct cv_testinfo_s {
+ tor_cond_t *cond;
+ tor_mutex_t *mutex;
+ int value;
+ int addend;
+ int shutdown;
+ int n_shutdown;
+ int n_wakeups;
+ int n_timeouts;
+ int n_threads;
+ const struct timeval *tv;
+} cv_testinfo_t;
+
+static cv_testinfo_t *
+cv_testinfo_new(void)
+{
+ cv_testinfo_t *i = tor_malloc_zero(sizeof(*i));
+ i->cond = tor_cond_new();
+ i->mutex = tor_mutex_new_nonrecursive();
+ return i;
+}
+
+static void
+cv_testinfo_free(cv_testinfo_t *i)
+{
+ if (!i)
+ return;
+ tor_cond_free(i->cond);
+ tor_mutex_free(i->mutex);
+ tor_free(i);
+}
+
+static void cv_test_thr_fn_(void *arg) ATTR_NORETURN;
+
+static void
+cv_test_thr_fn_(void *arg)
+{
+ cv_testinfo_t *i = arg;
+ int tid, r;
+
+ tor_mutex_acquire(i->mutex);
+ tid = i->n_threads++;
+ tor_mutex_release(i->mutex);
+ (void) tid;
+
+ tor_mutex_acquire(i->mutex);
+ while (1) {
+ if (i->addend) {
+ i->value += i->addend;
+ i->addend = 0;
+ }
+
+ if (i->shutdown) {
+ ++i->n_shutdown;
+ i->shutdown = 0;
+ tor_mutex_release(i->mutex);
+ spawn_exit();
+ }
+ r = tor_cond_wait(i->cond, i->mutex, i->tv);
+ ++i->n_wakeups;
+ if (r == 1) {
+ ++i->n_timeouts;
+ tor_mutex_release(i->mutex);
+ spawn_exit();
+ }
+ }
+}
+
+static void
+test_threads_conditionvar(void *arg)
+{
+ cv_testinfo_t *ti=NULL;
+ const struct timeval msec100 = { 0, 100*1000 };
+ const int timeout = !strcmp(arg, "tv");
+
+ ti = cv_testinfo_new();
+ if (timeout) {
+ ti->tv = &msec100;
+ }
+ spawn_func(cv_test_thr_fn_, ti);
+ spawn_func(cv_test_thr_fn_, ti);
+ spawn_func(cv_test_thr_fn_, ti);
+ spawn_func(cv_test_thr_fn_, ti);
+
+ tor_mutex_acquire(ti->mutex);
+ ti->addend = 7;
+ ti->shutdown = 1;
+ tor_cond_signal_one(ti->cond);
+ tor_mutex_release(ti->mutex);
+
+#define SPIN() \
+ while (1) { \
+ tor_mutex_acquire(ti->mutex); \
+ if (ti->addend == 0) { \
+ break; \
+ } \
+ tor_mutex_release(ti->mutex); \
+ }
+
+ SPIN();
+
+ ti->addend = 30;
+ ti->shutdown = 1;
+ tor_cond_signal_all(ti->cond);
+ tor_mutex_release(ti->mutex);
+ SPIN();
+
+ ti->addend = 1000;
+ if (! timeout) ti->shutdown = 1;
+ tor_cond_signal_one(ti->cond);
+ tor_mutex_release(ti->mutex);
+ SPIN();
+ ti->addend = 300;
+ if (! timeout) ti->shutdown = 1;
+ tor_cond_signal_all(ti->cond);
+ tor_mutex_release(ti->mutex);
+
+ SPIN();
+ tor_mutex_release(ti->mutex);
+
+ tt_int_op(ti->value, ==, 1337);
+ if (!timeout) {
+ tt_int_op(ti->n_shutdown, ==, 4);
+ } else {
+#ifdef _WIN32
+ Sleep(500); /* msec */
+#elif defined(HAVE_USLEEP)
+ usleep(500*1000); /* usec */
+#else
+ {
+ struct tv = { 0, 500*1000 };
+ select(0, NULL, NULL, NULL, &tv);
+ }
+#endif
+ tor_mutex_acquire(ti->mutex);
+ tt_int_op(ti->n_shutdown, ==, 2);
+ tt_int_op(ti->n_timeouts, ==, 2);
+ tor_mutex_release(ti->mutex);
+ }
+
+ done:
+ cv_testinfo_free(ti);
+}
+
+#define THREAD_TEST(name) \
+ { #name, test_threads_##name, TT_FORK, NULL, NULL }
+
+struct testcase_t thread_tests[] = {
+ THREAD_TEST(basic),
+ { "conditionvar", test_threads_conditionvar, TT_FORK,
+ &passthrough_setup, (void*)"no-tv" },
+ { "conditionvar_timeout", test_threads_conditionvar, TT_FORK,
+ &passthrough_setup, (void*)"tv" },
+ END_OF_TESTCASES
+};
+
diff --git a/src/test/test_util.c b/src/test/test_util.c
index 3bebe60490..30dc59844a 100644
--- a/src/test/test_util.c
+++ b/src/test/test_util.c
@@ -6,15 +6,11 @@
#include "orconfig.h"
#define COMPAT_PRIVATE
#define CONTROL_PRIVATE
-#define MEMPOOL_PRIVATE
#define UTIL_PRIVATE
#include "or.h"
#include "config.h"
#include "control.h"
#include "test.h"
-#ifdef ENABLE_MEMPOOLS
-#include "mempool.h"
-#endif /* ENABLE_MEMPOOLS */
#include "memarea.h"
#include "util_process.h"
@@ -1607,142 +1603,6 @@ test_util_pow2(void *arg)
;
}
-/** mutex for thread test to stop the threads hitting data at the same time. */
-static tor_mutex_t *thread_test_mutex_ = NULL;
-/** mutexes for the thread test to make sure that the threads have to
- * interleave somewhat. */
-static tor_mutex_t *thread_test_start1_ = NULL,
- *thread_test_start2_ = NULL;
-/** Shared strmap for the thread test. */
-static strmap_t *thread_test_strmap_ = NULL;
-/** The name of thread1 for the thread test */
-static char *thread1_name_ = NULL;
-/** The name of thread2 for the thread test */
-static char *thread2_name_ = NULL;
-
-static void thread_test_func_(void* _s) ATTR_NORETURN;
-
-/** How many iterations have the threads in the unit test run? */
-static int t1_count = 0, t2_count = 0;
-
-/** Helper function for threading unit tests: This function runs in a
- * subthread. It grabs its own mutex (start1 or start2) to make sure that it
- * should start, then it repeatedly alters _test_thread_strmap protected by
- * thread_test_mutex_. */
-static void
-thread_test_func_(void* _s)
-{
- char *s = _s;
- int i, *count;
- tor_mutex_t *m;
- char buf[64];
- char **cp;
- if (!strcmp(s, "thread 1")) {
- m = thread_test_start1_;
- cp = &thread1_name_;
- count = &t1_count;
- } else {
- m = thread_test_start2_;
- cp = &thread2_name_;
- count = &t2_count;
- }
-
- tor_snprintf(buf, sizeof(buf), "%lu", tor_get_thread_id());
- *cp = tor_strdup(buf);
-
- tor_mutex_acquire(m);
-
- for (i=0; i<10000; ++i) {
- tor_mutex_acquire(thread_test_mutex_);
- strmap_set(thread_test_strmap_, "last to run", *cp);
- ++*count;
- tor_mutex_release(thread_test_mutex_);
- }
- tor_mutex_acquire(thread_test_mutex_);
- strmap_set(thread_test_strmap_, s, *cp);
- tor_mutex_release(thread_test_mutex_);
-
- tor_mutex_release(m);
-
- spawn_exit();
-}
-
-/** Run unit tests for threading logic. */
-static void
-test_util_threads(void *arg)
-{
- char *s1 = NULL, *s2 = NULL;
- int done = 0, timedout = 0;
- time_t started;
-#ifndef _WIN32
- struct timeval tv;
- tv.tv_sec=0;
- tv.tv_usec=100*1000;
-#endif
- (void)arg;
- thread_test_mutex_ = tor_mutex_new();
- thread_test_start1_ = tor_mutex_new();
- thread_test_start2_ = tor_mutex_new();
- thread_test_strmap_ = strmap_new();
- s1 = tor_strdup("thread 1");
- s2 = tor_strdup("thread 2");
- tor_mutex_acquire(thread_test_start1_);
- tor_mutex_acquire(thread_test_start2_);
- spawn_func(thread_test_func_, s1);
- spawn_func(thread_test_func_, s2);
- tor_mutex_release(thread_test_start2_);
- tor_mutex_release(thread_test_start1_);
- started = time(NULL);
- while (!done) {
- tor_mutex_acquire(thread_test_mutex_);
- strmap_assert_ok(thread_test_strmap_);
- if (strmap_get(thread_test_strmap_, "thread 1") &&
- strmap_get(thread_test_strmap_, "thread 2")) {
- done = 1;
- } else if (time(NULL) > started + 150) {
- timedout = done = 1;
- }
- tor_mutex_release(thread_test_mutex_);
-#ifndef _WIN32
- /* Prevent the main thread from starving the worker threads. */
- select(0, NULL, NULL, NULL, &tv);
-#endif
- }
- tor_mutex_acquire(thread_test_start1_);
- tor_mutex_release(thread_test_start1_);
- tor_mutex_acquire(thread_test_start2_);
- tor_mutex_release(thread_test_start2_);
-
- tor_mutex_free(thread_test_mutex_);
-
- if (timedout) {
- printf("\nTimed out: %d %d", t1_count, t2_count);
- tt_assert(strmap_get(thread_test_strmap_, "thread 1"));
- tt_assert(strmap_get(thread_test_strmap_, "thread 2"));
- tt_assert(!timedout);
- }
-
- /* different thread IDs. */
- tt_assert(strcmp(strmap_get(thread_test_strmap_, "thread 1"),
- strmap_get(thread_test_strmap_, "thread 2")));
- tt_assert(!strcmp(strmap_get(thread_test_strmap_, "thread 1"),
- strmap_get(thread_test_strmap_, "last to run")) ||
- !strcmp(strmap_get(thread_test_strmap_, "thread 2"),
- strmap_get(thread_test_strmap_, "last to run")));
-
- done:
- tor_free(s1);
- tor_free(s2);
- tor_free(thread1_name_);
- tor_free(thread2_name_);
- if (thread_test_strmap_)
- strmap_free(thread_test_strmap_, NULL);
- if (thread_test_start1_)
- tor_mutex_free(thread_test_start1_);
- if (thread_test_start2_)
- tor_mutex_free(thread_test_start2_);
-}
-
/** Run unit tests for compression functions */
static void
test_util_gzip(void *arg)
@@ -2780,69 +2640,6 @@ test_util_path_is_relative(void *arg)
;
}
-#ifdef ENABLE_MEMPOOLS
-
-/** Run unittests for memory pool allocator */
-static void
-test_util_mempool(void *arg)
-{
- mp_pool_t *pool = NULL;
- smartlist_t *allocated = NULL;
- int i;
-
- (void)arg;
- pool = mp_pool_new(1, 100);
- tt_assert(pool);
- tt_assert(pool->new_chunk_capacity >= 100);
- tt_assert(pool->item_alloc_size >= sizeof(void*)+1);
- mp_pool_destroy(pool);
- pool = NULL;
-
- pool = mp_pool_new(241, 2500);
- tt_assert(pool);
- tt_assert(pool->new_chunk_capacity >= 10);
- tt_assert(pool->item_alloc_size >= sizeof(void*)+241);
- tt_int_op(pool->item_alloc_size & 0x03,OP_EQ, 0);
- tt_assert(pool->new_chunk_capacity < 60);
-
- allocated = smartlist_new();
- for (i = 0; i < 20000; ++i) {
- if (smartlist_len(allocated) < 20 || crypto_rand_int(2)) {
- void *m = mp_pool_get(pool);
- memset(m, 0x09, 241);
- smartlist_add(allocated, m);
- //printf("%d: %p\n", i, m);
- //mp_pool_assert_ok(pool);
- } else {
- int idx = crypto_rand_int(smartlist_len(allocated));
- void *m = smartlist_get(allocated, idx);
- //printf("%d: free %p\n", i, m);
- smartlist_del(allocated, idx);
- mp_pool_release(m);
- //mp_pool_assert_ok(pool);
- }
- if (crypto_rand_int(777)==0)
- mp_pool_clean(pool, 1, 1);
-
- if (i % 777)
- mp_pool_assert_ok(pool);
- }
-
- done:
- if (allocated) {
- SMARTLIST_FOREACH(allocated, void *, m, mp_pool_release(m));
- mp_pool_assert_ok(pool);
- mp_pool_clean(pool, 0, 0);
- mp_pool_assert_ok(pool);
- smartlist_free(allocated);
- }
-
- if (pool)
- mp_pool_destroy(pool);
-}
-
-#endif /* ENABLE_MEMPOOLS */
-
/** Run unittests for memory area allocator */
static void
test_util_memarea(void *arg)
@@ -3516,370 +3313,6 @@ test_util_fgets_eagain(void *ptr)
}
#endif
-#ifndef BUILDDIR
-#define BUILDDIR "."
-#endif
-
-#ifdef _WIN32
-#define notify_pending_waitpid_callbacks() STMT_NIL
-#define TEST_CHILD "test-child.exe"
-#define EOL "\r\n"
-#else
-#define TEST_CHILD (BUILDDIR "/src/test/test-child")
-#define EOL "\n"
-#endif
-
-#ifdef _WIN32
-/* I've assumed Windows doesn't have the gap between fork and exec
- * that causes the race condition on unix-like platforms */
-#define MATCH_PROCESS_STATUS(s1,s2) ((s1) == (s2))
-
-#else
-/* work around a race condition of the timing of SIGCHLD handler updates
- * to the process_handle's fields, and checks of those fields
- *
- * TODO: Once we can signal failure to exec, change PROCESS_STATUS_RUNNING to
- * PROCESS_STATUS_ERROR (and similarly with *_OR_NOTRUNNING) */
-#define PROCESS_STATUS_RUNNING_OR_NOTRUNNING (PROCESS_STATUS_RUNNING+1)
-#define IS_RUNNING_OR_NOTRUNNING(s) \
- ((s) == PROCESS_STATUS_RUNNING || (s) == PROCESS_STATUS_NOTRUNNING)
-/* well, this is ugly */
-#define MATCH_PROCESS_STATUS(s1,s2) \
- ( (s1) == (s2) \
- ||((s1) == PROCESS_STATUS_RUNNING_OR_NOTRUNNING \
- && IS_RUNNING_OR_NOTRUNNING(s2)) \
- ||((s2) == PROCESS_STATUS_RUNNING_OR_NOTRUNNING \
- && IS_RUNNING_OR_NOTRUNNING(s1)))
-
-#endif // _WIN32
-
-/** Helper function for testing tor_spawn_background */
-static void
-run_util_spawn_background(const char *argv[], const char *expected_out,
- const char *expected_err, int expected_exit,
- int expected_status)
-{
- int retval, exit_code;
- ssize_t pos;
- process_handle_t *process_handle=NULL;
- char stdout_buf[100], stderr_buf[100];
- int status;
-
- /* Start the program */
-#ifdef _WIN32
- status = tor_spawn_background(NULL, argv, NULL, &process_handle);
-#else
- status = tor_spawn_background(argv[0], argv, NULL, &process_handle);
-#endif
-
- notify_pending_waitpid_callbacks();
-
- /* the race condition doesn't affect status,
- * because status isn't updated by the SIGCHLD handler,
- * but we still need to handle PROCESS_STATUS_RUNNING_OR_NOTRUNNING */
- tt_assert(MATCH_PROCESS_STATUS(expected_status, status));
- if (status == PROCESS_STATUS_ERROR) {
- tt_ptr_op(process_handle, OP_EQ, NULL);
- return;
- }
-
- tt_assert(process_handle != NULL);
-
- /* When a spawned process forks, fails, then exits very quickly,
- * (this typically occurs when exec fails)
- * there is a race condition between the SIGCHLD handler
- * updating the process_handle's fields, and this test
- * checking the process status in those fields.
- * The SIGCHLD update can occur before or after the code below executes.
- * This causes intermittent failures in spawn_background_fail(),
- * typically when the machine is under load.
- * We use PROCESS_STATUS_RUNNING_OR_NOTRUNNING to avoid this issue. */
-
- /* the race condition affects the change in
- * process_handle->status from RUNNING to NOTRUNNING */
- tt_assert(MATCH_PROCESS_STATUS(expected_status, process_handle->status));
-
-#ifndef _WIN32
- notify_pending_waitpid_callbacks();
- /* the race condition affects the change in
- * process_handle->waitpid_cb to NULL,
- * so we skip the check if expected_status is ambiguous,
- * that is, PROCESS_STATUS_RUNNING_OR_NOTRUNNING */
- tt_assert(process_handle->waitpid_cb != NULL
- || expected_status == PROCESS_STATUS_RUNNING_OR_NOTRUNNING);
-#endif
-
-#ifdef _WIN32
- tt_assert(process_handle->stdout_pipe != INVALID_HANDLE_VALUE);
- tt_assert(process_handle->stderr_pipe != INVALID_HANDLE_VALUE);
-#else
- tt_assert(process_handle->stdout_pipe >= 0);
- tt_assert(process_handle->stderr_pipe >= 0);
-#endif
-
- /* Check stdout */
- pos = tor_read_all_from_process_stdout(process_handle, stdout_buf,
- sizeof(stdout_buf) - 1);
- tt_assert(pos >= 0);
- stdout_buf[pos] = '\0';
- tt_int_op(strlen(expected_out),OP_EQ, pos);
- tt_str_op(expected_out,OP_EQ, stdout_buf);
-
- notify_pending_waitpid_callbacks();
-
- /* Check it terminated correctly */
- retval = tor_get_exit_code(process_handle, 1, &exit_code);
- tt_int_op(PROCESS_EXIT_EXITED,OP_EQ, retval);
- tt_int_op(expected_exit,OP_EQ, exit_code);
- // TODO: Make test-child exit with something other than 0
-
-#ifndef _WIN32
- notify_pending_waitpid_callbacks();
- tt_ptr_op(process_handle->waitpid_cb, OP_EQ, NULL);
-#endif
-
- /* Check stderr */
- pos = tor_read_all_from_process_stderr(process_handle, stderr_buf,
- sizeof(stderr_buf) - 1);
- tt_assert(pos >= 0);
- stderr_buf[pos] = '\0';
- tt_str_op(expected_err,OP_EQ, stderr_buf);
- tt_int_op(strlen(expected_err),OP_EQ, pos);
-
- notify_pending_waitpid_callbacks();
-
- done:
- if (process_handle)
- tor_process_handle_destroy(process_handle, 1);
-}
-
-/** Check that we can launch a process and read the output */
-static void
-test_util_spawn_background_ok(void *ptr)
-{
- const char *argv[] = {TEST_CHILD, "--test", NULL};
- const char *expected_out = "OUT"EOL "--test"EOL "SLEEPING"EOL "DONE" EOL;
- const char *expected_err = "ERR"EOL;
-
- (void)ptr;
-
- run_util_spawn_background(argv, expected_out, expected_err, 0,
- PROCESS_STATUS_RUNNING);
-}
-
-/** Check that failing to find the executable works as expected */
-static void
-test_util_spawn_background_fail(void *ptr)
-{
- const char *argv[] = {BUILDDIR "/src/test/no-such-file", "--test", NULL};
- const char *expected_err = "";
- char expected_out[1024];
- char code[32];
-#ifdef _WIN32
- const int expected_status = PROCESS_STATUS_ERROR;
-#else
- /* TODO: Once we can signal failure to exec, set this to be
- * PROCESS_STATUS_RUNNING_OR_ERROR */
- const int expected_status = PROCESS_STATUS_RUNNING_OR_NOTRUNNING;
-#endif
-
- memset(expected_out, 0xf0, sizeof(expected_out));
- memset(code, 0xf0, sizeof(code));
-
- (void)ptr;
-
- tor_snprintf(code, sizeof(code), "%x/%x",
- 9 /* CHILD_STATE_FAILEXEC */ , ENOENT);
- tor_snprintf(expected_out, sizeof(expected_out),
- "ERR: Failed to spawn background process - code %s\n", code);
-
- run_util_spawn_background(argv, expected_out, expected_err, 255,
- expected_status);
-}
-
-/** Test that reading from a handle returns a partial read rather than
- * blocking */
-static void
-test_util_spawn_background_partial_read_impl(int exit_early)
-{
- const int expected_exit = 0;
- const int expected_status = PROCESS_STATUS_RUNNING;
-
- int retval, exit_code;
- ssize_t pos = -1;
- process_handle_t *process_handle=NULL;
- int status;
- char stdout_buf[100], stderr_buf[100];
-
- const char *argv[] = {TEST_CHILD, "--test", NULL};
- const char *expected_out[] = { "OUT" EOL "--test" EOL "SLEEPING" EOL,
- "DONE" EOL,
- NULL };
- const char *expected_err = "ERR" EOL;
-
-#ifndef _WIN32
- int eof = 0;
-#endif
- int expected_out_ctr;
-
- if (exit_early) {
- argv[1] = "--hang";
- expected_out[0] = "OUT"EOL "--hang"EOL "SLEEPING" EOL;
- }
-
- /* Start the program */
-#ifdef _WIN32
- status = tor_spawn_background(NULL, argv, NULL, &process_handle);
-#else
- status = tor_spawn_background(argv[0], argv, NULL, &process_handle);
-#endif
- tt_int_op(expected_status,OP_EQ, status);
- tt_assert(process_handle);
- tt_int_op(expected_status,OP_EQ, process_handle->status);
-
- /* Check stdout */
- for (expected_out_ctr = 0; expected_out[expected_out_ctr] != NULL;) {
-#ifdef _WIN32
- pos = tor_read_all_handle(process_handle->stdout_pipe, stdout_buf,
- sizeof(stdout_buf) - 1, NULL);
-#else
- /* Check that we didn't read the end of file last time */
- tt_assert(!eof);
- pos = tor_read_all_handle(process_handle->stdout_handle, stdout_buf,
- sizeof(stdout_buf) - 1, NULL, &eof);
-#endif
- log_info(LD_GENERAL, "tor_read_all_handle() returned %d", (int)pos);
-
- /* We would have blocked, keep on trying */
- if (0 == pos)
- continue;
-
- tt_assert(pos > 0);
- stdout_buf[pos] = '\0';
- tt_str_op(expected_out[expected_out_ctr],OP_EQ, stdout_buf);
- tt_int_op(strlen(expected_out[expected_out_ctr]),OP_EQ, pos);
- expected_out_ctr++;
- }
-
- if (exit_early) {
- tor_process_handle_destroy(process_handle, 1);
- process_handle = NULL;
- goto done;
- }
-
- /* The process should have exited without writing more */
-#ifdef _WIN32
- pos = tor_read_all_handle(process_handle->stdout_pipe, stdout_buf,
- sizeof(stdout_buf) - 1,
- process_handle);
- tt_int_op(0,OP_EQ, pos);
-#else
- if (!eof) {
- /* We should have got all the data, but maybe not the EOF flag */
- pos = tor_read_all_handle(process_handle->stdout_handle, stdout_buf,
- sizeof(stdout_buf) - 1,
- process_handle, &eof);
- tt_int_op(0,OP_EQ, pos);
- tt_assert(eof);
- }
- /* Otherwise, we got the EOF on the last read */
-#endif
-
- /* Check it terminated correctly */
- retval = tor_get_exit_code(process_handle, 1, &exit_code);
- tt_int_op(PROCESS_EXIT_EXITED,OP_EQ, retval);
- tt_int_op(expected_exit,OP_EQ, exit_code);
-
- // TODO: Make test-child exit with something other than 0
-
- /* Check stderr */
- pos = tor_read_all_from_process_stderr(process_handle, stderr_buf,
- sizeof(stderr_buf) - 1);
- tt_assert(pos >= 0);
- stderr_buf[pos] = '\0';
- tt_str_op(expected_err,OP_EQ, stderr_buf);
- tt_int_op(strlen(expected_err),OP_EQ, pos);
-
- done:
- tor_process_handle_destroy(process_handle, 1);
-}
-
-static void
-test_util_spawn_background_partial_read(void *arg)
-{
- (void)arg;
- test_util_spawn_background_partial_read_impl(0);
-}
-
-static void
-test_util_spawn_background_exit_early(void *arg)
-{
- (void)arg;
- test_util_spawn_background_partial_read_impl(1);
-}
-
-static void
-test_util_spawn_background_waitpid_notify(void *arg)
-{
- int retval, exit_code;
- process_handle_t *process_handle=NULL;
- int status;
- int ms_timer;
-
- const char *argv[] = {TEST_CHILD, "--fast", NULL};
-
- (void) arg;
-
-#ifdef _WIN32
- status = tor_spawn_background(NULL, argv, NULL, &process_handle);
-#else
- status = tor_spawn_background(argv[0], argv, NULL, &process_handle);
-#endif
-
- tt_int_op(status, OP_EQ, PROCESS_STATUS_RUNNING);
- tt_ptr_op(process_handle, OP_NE, NULL);
-
- /* We're not going to look at the stdout/stderr output this time. Instead,
- * we're testing whether notify_pending_waitpid_calbacks() can report the
- * process exit (on unix) and/or whether tor_get_exit_code() can notice it
- * (on windows) */
-
-#ifndef _WIN32
- ms_timer = 30*1000;
- tt_ptr_op(process_handle->waitpid_cb, OP_NE, NULL);
- while (process_handle->waitpid_cb && ms_timer > 0) {
- tor_sleep_msec(100);
- ms_timer -= 100;
- notify_pending_waitpid_callbacks();
- }
- tt_int_op(ms_timer, OP_GT, 0);
- tt_ptr_op(process_handle->waitpid_cb, OP_EQ, NULL);
-#endif
-
- ms_timer = 30*1000;
- while (((retval = tor_get_exit_code(process_handle, 0, &exit_code))
- == PROCESS_EXIT_RUNNING) && ms_timer > 0) {
- tor_sleep_msec(100);
- ms_timer -= 100;
- }
- tt_int_op(ms_timer, OP_GT, 0);
-
- tt_int_op(retval, OP_EQ, PROCESS_EXIT_EXITED);
-
- done:
- tor_process_handle_destroy(process_handle, 1);
-}
-
-#undef TEST_CHILD
-#undef EOL
-
-#undef MATCH_PROCESS_STATUS
-
-#ifndef _WIN32
-#undef PROCESS_STATUS_RUNNING_OR_NOTRUNNING
-#undef IS_RUNNING_OR_NOTRUNNING
-#endif
-
/**
* Test for format_hex_number_sigsafe()
*/
@@ -4614,26 +4047,26 @@ test_util_round_to_next_multiple_of(void *arg)
{
(void)arg;
- tt_assert(round_uint64_to_next_multiple_of(0,1) == 0);
- tt_assert(round_uint64_to_next_multiple_of(0,7) == 0);
+ tt_u64_op(round_uint64_to_next_multiple_of(0,1), ==, 0);
+ tt_u64_op(round_uint64_to_next_multiple_of(0,7), ==, 0);
- tt_assert(round_uint64_to_next_multiple_of(99,1) == 99);
- tt_assert(round_uint64_to_next_multiple_of(99,7) == 105);
- tt_assert(round_uint64_to_next_multiple_of(99,9) == 99);
+ tt_u64_op(round_uint64_to_next_multiple_of(99,1), ==, 99);
+ tt_u64_op(round_uint64_to_next_multiple_of(99,7), ==, 105);
+ tt_u64_op(round_uint64_to_next_multiple_of(99,9), ==, 99);
- tt_assert(round_int64_to_next_multiple_of(0,1) == 0);
- tt_assert(round_int64_to_next_multiple_of(0,7) == 0);
+ tt_i64_op(round_int64_to_next_multiple_of(0,1), ==, 0);
+ tt_i64_op(round_int64_to_next_multiple_of(0,7), ==, 0);
- tt_assert(round_int64_to_next_multiple_of(99,1) == 99);
- tt_assert(round_int64_to_next_multiple_of(99,7) == 105);
- tt_assert(round_int64_to_next_multiple_of(99,9) == 99);
+ tt_i64_op(round_int64_to_next_multiple_of(99,1), ==, 99);
+ tt_i64_op(round_int64_to_next_multiple_of(99,7), ==, 105);
+ tt_i64_op(round_int64_to_next_multiple_of(99,9), ==, 99);
- tt_assert(round_int64_to_next_multiple_of(-99,1) == -99);
- tt_assert(round_int64_to_next_multiple_of(-99,7) == -98);
- tt_assert(round_int64_to_next_multiple_of(-99,9) == -99);
+ tt_i64_op(round_int64_to_next_multiple_of(-99,1), ==, -99);
+ tt_i64_op(round_int64_to_next_multiple_of(-99,7), ==, -98);
+ tt_i64_op(round_int64_to_next_multiple_of(-99,9), ==, -99);
- tt_assert(round_int64_to_next_multiple_of(INT64_MIN,2) == INT64_MIN);
- tt_assert(round_int64_to_next_multiple_of(INT64_MAX,2) ==
+ tt_i64_op(round_int64_to_next_multiple_of(INT64_MIN,2), ==, INT64_MIN);
+ tt_i64_op(round_int64_to_next_multiple_of(INT64_MAX,2), ==,
INT64_MAX-INT64_MAX%2);
done:
;
@@ -4654,47 +4087,28 @@ test_util_laplace(void *arg)
const double delta_f = 15.0, epsilon = 0.3; /* b = 15.0 / 0.3 = 50.0 */
(void)arg;
- tt_assert(isinf(sample_laplace_distribution(mu, b, 0.0)));
- test_feq(-69.88855213, sample_laplace_distribution(mu, b, 0.01));
- test_feq(24.0, sample_laplace_distribution(mu, b, 0.5));
- test_feq(24.48486498, sample_laplace_distribution(mu, b, 0.51));
- test_feq(117.88855213, sample_laplace_distribution(mu, b, 0.99));
+ tt_i64_op(INT64_MIN, ==, sample_laplace_distribution(mu, b, 0.0));
+ tt_i64_op(-69, ==, sample_laplace_distribution(mu, b, 0.01));
+ tt_i64_op(24, ==, sample_laplace_distribution(mu, b, 0.5));
+ tt_i64_op(24, ==, sample_laplace_distribution(mu, b, 0.51));
+ tt_i64_op(117, ==, sample_laplace_distribution(mu, b, 0.99));
/* >>> laplace.ppf([0.0, 0.1, 0.25, 0.5, 0.75, 0.9, 0.99],
* ... loc = 0, scale = 50)
* array([ -inf, -80.47189562, -34.65735903, 0. ,
* 34.65735903, 80.47189562, 195.60115027])
*/
- tt_assert(INT64_MIN + 20 ==
+ tt_i64_op(INT64_MIN + 20, ==,
add_laplace_noise(20, 0.0, delta_f, epsilon));
- tt_assert(-60 == add_laplace_noise(20, 0.1, delta_f, epsilon));
- tt_assert(-14 == add_laplace_noise(20, 0.25, delta_f, epsilon));
- tt_assert(20 == add_laplace_noise(20, 0.5, delta_f, epsilon));
- tt_assert(54 == add_laplace_noise(20, 0.75, delta_f, epsilon));
- tt_assert(100 == add_laplace_noise(20, 0.9, delta_f, epsilon));
- tt_assert(215 == add_laplace_noise(20, 0.99, delta_f, epsilon));
- done:
- ;
-}
+ tt_i64_op(-60, ==, add_laplace_noise(20, 0.1, delta_f, epsilon));
+ tt_i64_op(-14, ==, add_laplace_noise(20, 0.25, delta_f, epsilon));
+ tt_i64_op(20, ==, add_laplace_noise(20, 0.5, delta_f, epsilon));
+ tt_i64_op(54, ==, add_laplace_noise(20, 0.75, delta_f, epsilon));
+ tt_i64_op(100, ==, add_laplace_noise(20, 0.9, delta_f, epsilon));
+ tt_i64_op(215, ==, add_laplace_noise(20, 0.99, delta_f, epsilon));
-static void
-test_util_strclear(void *arg)
-{
- static const char *vals[] = { "", "a", "abcdef", "abcdefgh", NULL };
- int i;
- char *v = NULL;
- (void)arg;
-
- for (i = 0; vals[i]; ++i) {
- size_t n;
- v = tor_strdup(vals[i]);
- n = strlen(v);
- tor_strclear(v);
- tt_assert(tor_mem_is_zero(v, n+1));
- tor_free(v);
- }
done:
- tor_free(v);
+ ;
}
#define UTIL_LEGACY(name) \
@@ -4782,23 +4196,6 @@ test_util_socket(void *arg)
tor_close_socket(fd4);
}
-static void *
-socketpair_test_setup(const struct testcase_t *testcase)
-{
- return testcase->setup_data;
-}
-static int
-socketpair_test_cleanup(const struct testcase_t *testcase, void *ptr)
-{
- (void)testcase;
- (void)ptr;
- return 1;
-}
-
-static const struct testcase_setup_t socketpair_setup = {
- socketpair_test_setup, socketpair_test_cleanup
-};
-
/* Test for socketpair and ersatz_socketpair(). We test them both, since
* the latter is a tolerably good way to exersize tor_accept_socket(). */
static void
@@ -4950,13 +4347,9 @@ struct testcase_t util_tests[] = {
UTIL_LEGACY(pow2),
UTIL_LEGACY(gzip),
UTIL_LEGACY(datadir),
-#ifdef ENABLE_MEMPOOLS
- UTIL_LEGACY(mempool),
-#endif
UTIL_LEGACY(memarea),
UTIL_LEGACY(control_formats),
UTIL_LEGACY(mmap),
- UTIL_LEGACY(threads),
UTIL_LEGACY(sscanf),
UTIL_LEGACY(format_time_interval),
UTIL_LEGACY(path_is_relative),
@@ -4964,7 +4357,6 @@ struct testcase_t util_tests[] = {
UTIL_LEGACY(di_ops),
UTIL_TEST(round_to_next_multiple_of, 0),
UTIL_TEST(laplace, 0),
- UTIL_TEST(strclear, 0),
UTIL_TEST(find_str_at_start_of_line, 0),
UTIL_TEST(string_is_C_identifier, 0),
UTIL_TEST(asprintf, 0),
@@ -4978,11 +4370,6 @@ struct testcase_t util_tests[] = {
UTIL_TEST(exit_status, 0),
UTIL_TEST(fgets_eagain, 0),
#endif
- UTIL_TEST(spawn_background_ok, 0),
- UTIL_TEST(spawn_background_fail, 0),
- UTIL_TEST(spawn_background_partial_read, 0),
- UTIL_TEST(spawn_background_exit_early, 0),
- UTIL_TEST(spawn_background_waitpid_notify, 0),
UTIL_TEST(format_hex_number, 0),
UTIL_TEST(format_dec_number, 0),
UTIL_TEST(join_win_cmdline, 0),
@@ -5003,10 +4390,10 @@ struct testcase_t util_tests[] = {
UTIL_TEST(mathlog, 0),
UTIL_TEST(weak_random, 0),
UTIL_TEST(socket, TT_FORK),
- { "socketpair", test_util_socketpair, TT_FORK, &socketpair_setup,
+ { "socketpair", test_util_socketpair, TT_FORK, &passthrough_setup,
(void*)"0" },
{ "socketpair_ersatz", test_util_socketpair, TT_FORK,
- &socketpair_setup, (void*)"1" },
+ &passthrough_setup, (void*)"1" },
UTIL_TEST(max_mem, 0),
UTIL_TEST(hostname_validation, 0),
UTIL_TEST(ipv4_validation, 0),
diff --git a/src/test/test_util_slow.c b/src/test/test_util_slow.c
new file mode 100644
index 0000000000..dcd0c9af36
--- /dev/null
+++ b/src/test/test_util_slow.c
@@ -0,0 +1,391 @@
+/* Copyright (c) 2001-2004, Roger Dingledine.
+ * Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
+ * Copyright (c) 2007-2015, The Tor Project, Inc. */
+/* See LICENSE for licensing information */
+
+#include "orconfig.h"
+#define UTIL_PRIVATE
+#include "util.h"
+#include "util_process.h"
+#include "crypto.h"
+#include "torlog.h"
+#include "test.h"
+
+#ifndef BUILDDIR
+#define BUILDDIR "."
+#endif
+
+#ifdef _WIN32
+#define notify_pending_waitpid_callbacks() STMT_NIL
+#define TEST_CHILD "test-child.exe"
+#define EOL "\r\n"
+#else
+#define TEST_CHILD (BUILDDIR "/src/test/test-child")
+#define EOL "\n"
+#endif
+
+#ifdef _WIN32
+/* I've assumed Windows doesn't have the gap between fork and exec
+ * that causes the race condition on unix-like platforms */
+#define MATCH_PROCESS_STATUS(s1,s2) ((s1) == (s2))
+
+#else
+/* work around a race condition of the timing of SIGCHLD handler updates
+ * to the process_handle's fields, and checks of those fields
+ *
+ * TODO: Once we can signal failure to exec, change PROCESS_STATUS_RUNNING to
+ * PROCESS_STATUS_ERROR (and similarly with *_OR_NOTRUNNING) */
+#define PROCESS_STATUS_RUNNING_OR_NOTRUNNING (PROCESS_STATUS_RUNNING+1)
+#define IS_RUNNING_OR_NOTRUNNING(s) \
+ ((s) == PROCESS_STATUS_RUNNING || (s) == PROCESS_STATUS_NOTRUNNING)
+/* well, this is ugly */
+#define MATCH_PROCESS_STATUS(s1,s2) \
+ ( (s1) == (s2) \
+ ||((s1) == PROCESS_STATUS_RUNNING_OR_NOTRUNNING \
+ && IS_RUNNING_OR_NOTRUNNING(s2)) \
+ ||((s2) == PROCESS_STATUS_RUNNING_OR_NOTRUNNING \
+ && IS_RUNNING_OR_NOTRUNNING(s1)))
+
+#endif // _WIN32
+
+/** Helper function for testing tor_spawn_background */
+static void
+run_util_spawn_background(const char *argv[], const char *expected_out,
+ const char *expected_err, int expected_exit,
+ int expected_status)
+{
+ int retval, exit_code;
+ ssize_t pos;
+ process_handle_t *process_handle=NULL;
+ char stdout_buf[100], stderr_buf[100];
+ int status;
+
+ /* Start the program */
+#ifdef _WIN32
+ status = tor_spawn_background(NULL, argv, NULL, &process_handle);
+#else
+ status = tor_spawn_background(argv[0], argv, NULL, &process_handle);
+#endif
+
+ notify_pending_waitpid_callbacks();
+
+ /* the race condition doesn't affect status,
+ * because status isn't updated by the SIGCHLD handler,
+ * but we still need to handle PROCESS_STATUS_RUNNING_OR_NOTRUNNING */
+ tt_assert(MATCH_PROCESS_STATUS(expected_status, status));
+ if (status == PROCESS_STATUS_ERROR) {
+ tt_ptr_op(process_handle, OP_EQ, NULL);
+ return;
+ }
+
+ tt_assert(process_handle != NULL);
+
+ /* When a spawned process forks, fails, then exits very quickly,
+ * (this typically occurs when exec fails)
+ * there is a race condition between the SIGCHLD handler
+ * updating the process_handle's fields, and this test
+ * checking the process status in those fields.
+ * The SIGCHLD update can occur before or after the code below executes.
+ * This causes intermittent failures in spawn_background_fail(),
+ * typically when the machine is under load.
+ * We use PROCESS_STATUS_RUNNING_OR_NOTRUNNING to avoid this issue. */
+
+ /* the race condition affects the change in
+ * process_handle->status from RUNNING to NOTRUNNING */
+ tt_assert(MATCH_PROCESS_STATUS(expected_status, process_handle->status));
+
+#ifndef _WIN32
+ notify_pending_waitpid_callbacks();
+ /* the race condition affects the change in
+ * process_handle->waitpid_cb to NULL,
+ * so we skip the check if expected_status is ambiguous,
+ * that is, PROCESS_STATUS_RUNNING_OR_NOTRUNNING */
+ tt_assert(process_handle->waitpid_cb != NULL
+ || expected_status == PROCESS_STATUS_RUNNING_OR_NOTRUNNING);
+#endif
+
+#ifdef _WIN32
+ tt_assert(process_handle->stdout_pipe != INVALID_HANDLE_VALUE);
+ tt_assert(process_handle->stderr_pipe != INVALID_HANDLE_VALUE);
+ tt_assert(process_handle->stdin_pipe != INVALID_HANDLE_VALUE);
+#else
+ tt_assert(process_handle->stdout_pipe >= 0);
+ tt_assert(process_handle->stderr_pipe >= 0);
+ tt_assert(process_handle->stdin_pipe >= 0);
+#endif
+
+ /* Check stdout */
+ pos = tor_read_all_from_process_stdout(process_handle, stdout_buf,
+ sizeof(stdout_buf) - 1);
+ tt_assert(pos >= 0);
+ stdout_buf[pos] = '\0';
+ tt_int_op(strlen(expected_out),OP_EQ, pos);
+ tt_str_op(expected_out,OP_EQ, stdout_buf);
+
+ notify_pending_waitpid_callbacks();
+
+ /* Check it terminated correctly */
+ retval = tor_get_exit_code(process_handle, 1, &exit_code);
+ tt_int_op(PROCESS_EXIT_EXITED,OP_EQ, retval);
+ tt_int_op(expected_exit,OP_EQ, exit_code);
+ // TODO: Make test-child exit with something other than 0
+
+#ifndef _WIN32
+ notify_pending_waitpid_callbacks();
+ tt_ptr_op(process_handle->waitpid_cb, OP_EQ, NULL);
+#endif
+
+ /* Check stderr */
+ pos = tor_read_all_from_process_stderr(process_handle, stderr_buf,
+ sizeof(stderr_buf) - 1);
+ tt_assert(pos >= 0);
+ stderr_buf[pos] = '\0';
+ tt_str_op(expected_err,OP_EQ, stderr_buf);
+ tt_int_op(strlen(expected_err),OP_EQ, pos);
+
+ notify_pending_waitpid_callbacks();
+
+ done:
+ if (process_handle)
+ tor_process_handle_destroy(process_handle, 1);
+}
+
+/** Check that we can launch a process and read the output */
+static void
+test_util_spawn_background_ok(void *ptr)
+{
+ const char *argv[] = {TEST_CHILD, "--test", NULL};
+ const char *expected_out = "OUT"EOL "--test"EOL "SLEEPING"EOL "DONE" EOL;
+ const char *expected_err = "ERR"EOL;
+
+ (void)ptr;
+
+ run_util_spawn_background(argv, expected_out, expected_err, 0,
+ PROCESS_STATUS_RUNNING);
+}
+
+/** Check that failing to find the executable works as expected */
+static void
+test_util_spawn_background_fail(void *ptr)
+{
+ const char *argv[] = {BUILDDIR "/src/test/no-such-file", "--test", NULL};
+ const char *expected_err = "";
+ char expected_out[1024];
+ char code[32];
+#ifdef _WIN32
+ const int expected_status = PROCESS_STATUS_ERROR;
+#else
+ /* TODO: Once we can signal failure to exec, set this to be
+ * PROCESS_STATUS_RUNNING_OR_ERROR */
+ const int expected_status = PROCESS_STATUS_RUNNING_OR_NOTRUNNING;
+#endif
+
+ memset(expected_out, 0xf0, sizeof(expected_out));
+ memset(code, 0xf0, sizeof(code));
+
+ (void)ptr;
+
+ tor_snprintf(code, sizeof(code), "%x/%x",
+ 9 /* CHILD_STATE_FAILEXEC */ , ENOENT);
+ tor_snprintf(expected_out, sizeof(expected_out),
+ "ERR: Failed to spawn background process - code %s\n", code);
+
+ run_util_spawn_background(argv, expected_out, expected_err, 255,
+ expected_status);
+}
+
+/** Test that reading from a handle returns a partial read rather than
+ * blocking */
+static void
+test_util_spawn_background_partial_read_impl(int exit_early)
+{
+ const int expected_exit = 0;
+ const int expected_status = PROCESS_STATUS_RUNNING;
+
+ int retval, exit_code;
+ ssize_t pos = -1;
+ process_handle_t *process_handle=NULL;
+ int status;
+ char stdout_buf[100], stderr_buf[100];
+
+ const char *argv[] = {TEST_CHILD, "--test", NULL};
+ const char *expected_out[] = { "OUT" EOL "--test" EOL "SLEEPING" EOL,
+ "DONE" EOL,
+ NULL };
+ const char *expected_err = "ERR" EOL;
+
+#ifndef _WIN32
+ int eof = 0;
+#endif
+ int expected_out_ctr;
+
+ if (exit_early) {
+ argv[1] = "--hang";
+ expected_out[0] = "OUT"EOL "--hang"EOL "SLEEPING" EOL;
+ }
+
+ /* Start the program */
+#ifdef _WIN32
+ status = tor_spawn_background(NULL, argv, NULL, &process_handle);
+#else
+ status = tor_spawn_background(argv[0], argv, NULL, &process_handle);
+#endif
+ tt_int_op(expected_status,OP_EQ, status);
+ tt_assert(process_handle);
+ tt_int_op(expected_status,OP_EQ, process_handle->status);
+
+ /* Check stdout */
+ for (expected_out_ctr = 0; expected_out[expected_out_ctr] != NULL;) {
+#ifdef _WIN32
+ pos = tor_read_all_handle(process_handle->stdout_pipe, stdout_buf,
+ sizeof(stdout_buf) - 1, NULL);
+#else
+ /* Check that we didn't read the end of file last time */
+ tt_assert(!eof);
+ pos = tor_read_all_handle(process_handle->stdout_handle, stdout_buf,
+ sizeof(stdout_buf) - 1, NULL, &eof);
+#endif
+ log_info(LD_GENERAL, "tor_read_all_handle() returned %d", (int)pos);
+
+ /* We would have blocked, keep on trying */
+ if (0 == pos)
+ continue;
+
+ tt_assert(pos > 0);
+ stdout_buf[pos] = '\0';
+ tt_str_op(expected_out[expected_out_ctr],OP_EQ, stdout_buf);
+ tt_int_op(strlen(expected_out[expected_out_ctr]),OP_EQ, pos);
+ expected_out_ctr++;
+ }
+
+ if (exit_early) {
+ tor_process_handle_destroy(process_handle, 1);
+ process_handle = NULL;
+ goto done;
+ }
+
+ /* The process should have exited without writing more */
+#ifdef _WIN32
+ pos = tor_read_all_handle(process_handle->stdout_pipe, stdout_buf,
+ sizeof(stdout_buf) - 1,
+ process_handle);
+ tt_int_op(0,OP_EQ, pos);
+#else
+ if (!eof) {
+ /* We should have got all the data, but maybe not the EOF flag */
+ pos = tor_read_all_handle(process_handle->stdout_handle, stdout_buf,
+ sizeof(stdout_buf) - 1,
+ process_handle, &eof);
+ tt_int_op(0,OP_EQ, pos);
+ tt_assert(eof);
+ }
+ /* Otherwise, we got the EOF on the last read */
+#endif
+
+ /* Check it terminated correctly */
+ retval = tor_get_exit_code(process_handle, 1, &exit_code);
+ tt_int_op(PROCESS_EXIT_EXITED,OP_EQ, retval);
+ tt_int_op(expected_exit,OP_EQ, exit_code);
+
+ // TODO: Make test-child exit with something other than 0
+
+ /* Check stderr */
+ pos = tor_read_all_from_process_stderr(process_handle, stderr_buf,
+ sizeof(stderr_buf) - 1);
+ tt_assert(pos >= 0);
+ stderr_buf[pos] = '\0';
+ tt_str_op(expected_err,OP_EQ, stderr_buf);
+ tt_int_op(strlen(expected_err),OP_EQ, pos);
+
+ done:
+ tor_process_handle_destroy(process_handle, 1);
+}
+
+static void
+test_util_spawn_background_partial_read(void *arg)
+{
+ (void)arg;
+ test_util_spawn_background_partial_read_impl(0);
+}
+
+static void
+test_util_spawn_background_exit_early(void *arg)
+{
+ (void)arg;
+ test_util_spawn_background_partial_read_impl(1);
+}
+
+static void
+test_util_spawn_background_waitpid_notify(void *arg)
+{
+ int retval, exit_code;
+ process_handle_t *process_handle=NULL;
+ int status;
+ int ms_timer;
+
+ const char *argv[] = {TEST_CHILD, "--fast", NULL};
+
+ (void) arg;
+
+#ifdef _WIN32
+ status = tor_spawn_background(NULL, argv, NULL, &process_handle);
+#else
+ status = tor_spawn_background(argv[0], argv, NULL, &process_handle);
+#endif
+
+ tt_int_op(status, OP_EQ, PROCESS_STATUS_RUNNING);
+ tt_ptr_op(process_handle, OP_NE, NULL);
+
+ /* We're not going to look at the stdout/stderr output this time. Instead,
+ * we're testing whether notify_pending_waitpid_calbacks() can report the
+ * process exit (on unix) and/or whether tor_get_exit_code() can notice it
+ * (on windows) */
+
+#ifndef _WIN32
+ ms_timer = 30*1000;
+ tt_ptr_op(process_handle->waitpid_cb, OP_NE, NULL);
+ while (process_handle->waitpid_cb && ms_timer > 0) {
+ tor_sleep_msec(100);
+ ms_timer -= 100;
+ notify_pending_waitpid_callbacks();
+ }
+ tt_int_op(ms_timer, OP_GT, 0);
+ tt_ptr_op(process_handle->waitpid_cb, OP_EQ, NULL);
+#endif
+
+ ms_timer = 30*1000;
+ while (((retval = tor_get_exit_code(process_handle, 0, &exit_code))
+ == PROCESS_EXIT_RUNNING) && ms_timer > 0) {
+ tor_sleep_msec(100);
+ ms_timer -= 100;
+ }
+ tt_int_op(ms_timer, OP_GT, 0);
+
+ tt_int_op(retval, OP_EQ, PROCESS_EXIT_EXITED);
+
+ done:
+ tor_process_handle_destroy(process_handle, 1);
+}
+
+#undef TEST_CHILD
+#undef EOL
+
+#undef MATCH_PROCESS_STATUS
+
+#ifndef _WIN32
+#undef PROCESS_STATUS_RUNNING_OR_NOTRUNNING
+#undef IS_RUNNING_OR_NOTRUNNING
+#endif
+
+#define UTIL_TEST(name, flags) \
+ { #name, test_util_ ## name, flags, NULL, NULL }
+
+struct testcase_t slow_util_tests[] = {
+ UTIL_TEST(spawn_background_ok, 0),
+ UTIL_TEST(spawn_background_fail, 0),
+ UTIL_TEST(spawn_background_partial_read, 0),
+ UTIL_TEST(spawn_background_exit_early, 0),
+ UTIL_TEST(spawn_background_waitpid_notify, 0),
+ END_OF_TESTCASES
+};
+
diff --git a/src/test/test_workqueue.c b/src/test/test_workqueue.c
new file mode 100644
index 0000000000..83f6f3e215
--- /dev/null
+++ b/src/test/test_workqueue.c
@@ -0,0 +1,411 @@
+/* Copyright (c) 2001-2004, Roger Dingledine.
+ * Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
+ * Copyright (c) 2007-2015, The Tor Project, Inc. */
+/* See LICENSE for licensing information */
+
+#include "or.h"
+#include "compat_threads.h"
+#include "onion.h"
+#include "workqueue.h"
+#include "crypto.h"
+#include "crypto_curve25519.h"
+#include "compat_libevent.h"
+
+#include <stdio.h>
+#ifdef HAVE_EVENT2_EVENT_H
+#include <event2/event.h>
+#else
+#include <event.h>
+#endif
+
+#define MAX_INFLIGHT (1<<16)
+
+static int opt_verbose = 0;
+static int opt_n_threads = 8;
+static int opt_n_items = 10000;
+static int opt_n_inflight = 1000;
+static int opt_n_lowwater = 250;
+static int opt_n_cancel = 0;
+static int opt_ratio_rsa = 5;
+
+#ifdef TRACK_RESPONSES
+tor_mutex_t bitmap_mutex;
+int handled_len;
+bitarray_t *handled;
+#endif
+
+typedef struct state_s {
+ int magic;
+ int n_handled;
+ crypto_pk_t *rsa;
+ curve25519_secret_key_t ecdh;
+ int is_shutdown;
+} state_t;
+
+typedef struct rsa_work_s {
+ int serial;
+ uint8_t msg[128];
+ uint8_t msglen;
+} rsa_work_t;
+
+typedef struct ecdh_work_s {
+ int serial;
+ union {
+ curve25519_public_key_t pk;
+ uint8_t msg[32];
+ } u;
+} ecdh_work_t;
+
+static void
+mark_handled(int serial)
+{
+#ifdef TRACK_RESPONSES
+ tor_mutex_acquire(&bitmap_mutex);
+ tor_assert(serial < handled_len);
+ tor_assert(! bitarray_is_set(handled, serial));
+ bitarray_set(handled, serial);
+ tor_mutex_release(&bitmap_mutex);
+#else
+ (void)serial;
+#endif
+}
+
+static int
+workqueue_do_rsa(void *state, void *work)
+{
+ rsa_work_t *rw = work;
+ state_t *st = state;
+ crypto_pk_t *rsa = st->rsa;
+ uint8_t sig[256];
+ int len;
+
+ tor_assert(st->magic == 13371337);
+
+ len = crypto_pk_private_sign(rsa, (char*)sig, 256,
+ (char*)rw->msg, rw->msglen);
+ if (len < 0) {
+ rw->msglen = 0;
+ return WQ_RPL_ERROR;
+ }
+
+ memset(rw->msg, 0, sizeof(rw->msg));
+ rw->msglen = len;
+ memcpy(rw->msg, sig, len);
+ ++st->n_handled;
+
+ mark_handled(rw->serial);
+
+ return WQ_RPL_REPLY;
+}
+
+static int
+workqueue_do_shutdown(void *state, void *work)
+{
+ (void)state;
+ (void)work;
+ crypto_pk_free(((state_t*)state)->rsa);
+ tor_free(state);
+ return WQ_RPL_SHUTDOWN;
+}
+
+static int
+workqueue_do_ecdh(void *state, void *work)
+{
+ ecdh_work_t *ew = work;
+ uint8_t output[CURVE25519_OUTPUT_LEN];
+ state_t *st = state;
+
+ tor_assert(st->magic == 13371337);
+
+ curve25519_handshake(output, &st->ecdh, &ew->u.pk);
+ memcpy(ew->u.msg, output, CURVE25519_OUTPUT_LEN);
+ ++st->n_handled;
+ mark_handled(ew->serial);
+ return WQ_RPL_REPLY;
+}
+
+static void *
+new_state(void *arg)
+{
+ state_t *st;
+ (void)arg;
+
+ st = tor_malloc(sizeof(*st));
+ /* Every thread gets its own keys. not a problem for benchmarking */
+ st->rsa = crypto_pk_new();
+ if (crypto_pk_generate_key_with_bits(st->rsa, 1024) < 0) {
+ crypto_pk_free(st->rsa);
+ tor_free(st);
+ return NULL;
+ }
+ curve25519_secret_key_generate(&st->ecdh, 0);
+ st->magic = 13371337;
+ return st;
+}
+
+static void
+free_state(void *arg)
+{
+ state_t *st = arg;
+ crypto_pk_free(st->rsa);
+ tor_free(st);
+}
+
+static tor_weak_rng_t weak_rng;
+static int n_sent = 0;
+static int rsa_sent = 0;
+static int ecdh_sent = 0;
+static int n_received = 0;
+
+#ifdef TRACK_RESPONSES
+bitarray_t *received;
+#endif
+
+static void
+handle_reply(void *arg)
+{
+#ifdef TRACK_RESPONSES
+ rsa_work_t *rw = arg; /* Naughty cast, but only looking at serial. */
+ tor_assert(! bitarray_is_set(received, rw->serial));
+ bitarray_set(received,rw->serial);
+#endif
+
+ tor_free(arg);
+ ++n_received;
+}
+
+static workqueue_entry_t *
+add_work(threadpool_t *tp)
+{
+ int add_rsa =
+ opt_ratio_rsa == 0 ||
+ tor_weak_random_range(&weak_rng, opt_ratio_rsa) == 0;
+
+ if (add_rsa) {
+ rsa_work_t *w = tor_malloc_zero(sizeof(*w));
+ w->serial = n_sent++;
+ crypto_rand((char*)w->msg, 20);
+ w->msglen = 20;
+ ++rsa_sent;
+ return threadpool_queue_work(tp, workqueue_do_rsa, handle_reply, w);
+ } else {
+ ecdh_work_t *w = tor_malloc_zero(sizeof(*w));
+ w->serial = n_sent++;
+ /* Not strictly right, but this is just for benchmarks. */
+ crypto_rand((char*)w->u.pk.public_key, 32);
+ ++ecdh_sent;
+ return threadpool_queue_work(tp, workqueue_do_ecdh, handle_reply, w);
+ }
+}
+
+static int n_failed_cancel = 0;
+static int n_successful_cancel = 0;
+
+static int
+add_n_work_items(threadpool_t *tp, int n)
+{
+ int n_queued = 0;
+ int n_try_cancel = 0, i;
+ workqueue_entry_t **to_cancel;
+ workqueue_entry_t *ent;
+
+ to_cancel = tor_malloc(sizeof(workqueue_entry_t*) * opt_n_cancel);
+
+ while (n_queued++ < n) {
+ ent = add_work(tp);
+ if (! ent) {
+ tor_event_base_loopexit(tor_libevent_get_base(), NULL);
+ return -1;
+ }
+ if (n_try_cancel < opt_n_cancel &&
+ tor_weak_random_range(&weak_rng, n) < opt_n_cancel) {
+ to_cancel[n_try_cancel++] = ent;
+ }
+ }
+
+ for (i = 0; i < n_try_cancel; ++i) {
+ void *work = workqueue_entry_cancel(to_cancel[i]);
+ if (! work) {
+ n_failed_cancel++;
+ } else {
+ n_successful_cancel++;
+ tor_free(work);
+ }
+ }
+
+ tor_free(to_cancel);
+ return 0;
+}
+
+static int shutting_down = 0;
+
+static void
+replysock_readable_cb(tor_socket_t sock, short what, void *arg)
+{
+ threadpool_t *tp = arg;
+ replyqueue_t *rq = threadpool_get_replyqueue(tp);
+
+ int old_r = n_received;
+ (void) sock;
+ (void) what;
+
+ replyqueue_process(rq);
+ if (old_r == n_received)
+ return;
+
+ if (opt_verbose) {
+ printf("%d / %d", n_received, n_sent);
+ if (opt_n_cancel)
+ printf(" (%d cancelled, %d uncancellable)",
+ n_successful_cancel, n_failed_cancel);
+ puts("");
+ }
+#ifdef TRACK_RESPONSES
+ tor_mutex_acquire(&bitmap_mutex);
+ for (i = 0; i < opt_n_items; ++i) {
+ if (bitarray_is_set(received, i))
+ putc('o', stdout);
+ else if (bitarray_is_set(handled, i))
+ putc('!', stdout);
+ else
+ putc('.', stdout);
+ }
+ puts("");
+ tor_mutex_release(&bitmap_mutex);
+#endif
+
+ if (n_sent - (n_received+n_successful_cancel) < opt_n_lowwater) {
+ int n_to_send = n_received + opt_n_inflight - n_sent;
+ if (n_to_send > opt_n_items - n_sent)
+ n_to_send = opt_n_items - n_sent;
+ add_n_work_items(tp, n_to_send);
+ }
+
+ if (shutting_down == 0 &&
+ n_received+n_successful_cancel == n_sent &&
+ n_sent >= opt_n_items) {
+ shutting_down = 1;
+ threadpool_queue_update(tp, NULL,
+ workqueue_do_shutdown, NULL, NULL);
+ }
+}
+
+static void
+help(void)
+{
+ puts(
+ "Options:\n"
+ " -N <items> Run this many items of work\n"
+ " -T <threads> Use this many threads\n"
+ " -I <inflight> Have no more than this many requests queued at once\n"
+ " -L <lowwater> Add items whenever fewer than this many are pending\n"
+ " -C <cancel> Try to cancel N items of every batch that we add\n"
+ " -R <ratio> Make one out of this many items be a slow (RSA) one\n"
+ " --no-{eventfd2,eventfd,pipe2,pipe,socketpair}\n"
+ " Disable one of the alert_socket backends.");
+}
+
+int
+main(int argc, char **argv)
+{
+ replyqueue_t *rq;
+ threadpool_t *tp;
+ int i;
+ tor_libevent_cfg evcfg;
+ struct event *ev;
+ uint32_t as_flags = 0;
+
+ for (i = 1; i < argc; ++i) {
+ if (!strcmp(argv[i], "-v")) {
+ opt_verbose = 1;
+ } else if (!strcmp(argv[i], "-T") && i+1<argc) {
+ opt_n_threads = atoi(argv[++i]);
+ } else if (!strcmp(argv[i], "-N") && i+1<argc) {
+ opt_n_items = atoi(argv[++i]);
+ } else if (!strcmp(argv[i], "-I") && i+1<argc) {
+ opt_n_inflight = atoi(argv[++i]);
+ } else if (!strcmp(argv[i], "-L") && i+1<argc) {
+ opt_n_lowwater = atoi(argv[++i]);
+ } else if (!strcmp(argv[i], "-R") && i+1<argc) {
+ opt_ratio_rsa = atoi(argv[++i]);
+ } else if (!strcmp(argv[i], "-C") && i+1<argc) {
+ opt_n_cancel = atoi(argv[++i]);
+ } else if (!strcmp(argv[i], "--no-eventfd2")) {
+ as_flags |= ASOCKS_NOEVENTFD2;
+ } else if (!strcmp(argv[i], "--no-eventfd")) {
+ as_flags |= ASOCKS_NOEVENTFD;
+ } else if (!strcmp(argv[i], "--no-pipe2")) {
+ as_flags |= ASOCKS_NOPIPE2;
+ } else if (!strcmp(argv[i], "--no-pipe")) {
+ as_flags |= ASOCKS_NOPIPE;
+ } else if (!strcmp(argv[i], "--no-socketpair")) {
+ as_flags |= ASOCKS_NOSOCKETPAIR;
+ } else if (!strcmp(argv[i], "-h")) {
+ help();
+ return 0;
+ } else {
+ help();
+ return 1;
+ }
+ }
+ if (opt_n_threads < 1 ||
+ opt_n_items < 1 || opt_n_inflight < 1 || opt_n_lowwater < 0 ||
+ opt_n_cancel > opt_n_inflight || opt_n_inflight > MAX_INFLIGHT ||
+ opt_ratio_rsa < 0) {
+ help();
+ return 1;
+ }
+
+ init_logging(1);
+ crypto_global_init(1, NULL, NULL);
+ crypto_seed_rng(1);
+
+ rq = replyqueue_new(as_flags);
+ tor_assert(rq);
+ tp = threadpool_new(opt_n_threads,
+ rq, new_state, free_state, NULL);
+ tor_assert(tp);
+
+ crypto_seed_weak_rng(&weak_rng);
+
+ memset(&evcfg, 0, sizeof(evcfg));
+ tor_libevent_initialize(&evcfg);
+
+ ev = tor_event_new(tor_libevent_get_base(),
+ replyqueue_get_socket(rq), EV_READ|EV_PERSIST,
+ replysock_readable_cb, tp);
+
+ event_add(ev, NULL);
+
+#ifdef TRACK_RESPONSES
+ handled = bitarray_init_zero(opt_n_items);
+ received = bitarray_init_zero(opt_n_items);
+ tor_mutex_init(&bitmap_mutex);
+ handled_len = opt_n_items;
+#endif
+
+ for (i = 0; i < opt_n_inflight; ++i) {
+ if (! add_work(tp)) {
+ puts("Couldn't add work.");
+ return 1;
+ }
+ }
+
+ {
+ struct timeval limit = { 30, 0 };
+ tor_event_base_loopexit(tor_libevent_get_base(), &limit);
+ }
+
+ event_base_loop(tor_libevent_get_base(), 0);
+
+ if (n_sent != opt_n_items || n_received+n_successful_cancel != n_sent) {
+ printf("%d vs %d\n", n_sent, opt_n_items);
+ printf("%d+%d vs %d\n", n_received, n_successful_cancel, n_sent);
+ puts("FAIL");
+ return 1;
+ } else {
+ puts("OK");
+ return 0;
+ }
+}
+
diff --git a/src/test/test_zero_length_keys.sh.in b/src/test/test_zero_length_keys.sh.in
new file mode 100644
index 0000000000..d1492d5e20
--- /dev/null
+++ b/src/test/test_zero_length_keys.sh.in
@@ -0,0 +1,10 @@
+#!@SHELL@
+# Check that tor regenerates keys when key files are zero-length
+
+exitcode=0
+
+@SHELL@ @abs_top_srcdir@/src/test/zero_length_keys.sh "@builddir@/src/or/tor" -z || exitcode=1
+@SHELL@ @abs_top_srcdir@/src/test/zero_length_keys.sh "@builddir@/src/or/tor" -d || exitcode=1
+@SHELL@ @abs_top_srcdir@/src/test/zero_length_keys.sh "@builddir@/src/or/tor" -e || exitcode=1
+
+exit ${exitcode}
diff --git a/src/test/testing_common.c b/src/test/testing_common.c
new file mode 100644
index 0000000000..60be460660
--- /dev/null
+++ b/src/test/testing_common.c
@@ -0,0 +1,301 @@
+/* Copyright (c) 2001-2004, Roger Dingledine.
+ * Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
+ * Copyright (c) 2007-2015, The Tor Project, Inc. */
+/* See LICENSE for licensing information */
+
+/* Ordinarily defined in tor_main.c; this bit is just here to provide one
+ * since we're not linking to tor_main.c */
+const char tor_git_revision[] = "";
+
+/**
+ * \file test_common.c
+ * \brief Common pieces to implement unit tests.
+ **/
+
+#include "orconfig.h"
+#include "or.h"
+#include "config.h"
+#include "rephist.h"
+#include "backtrace.h"
+#include "test.h"
+
+#include <stdio.h>
+#ifdef HAVE_FCNTL_H
+#include <fcntl.h>
+#endif
+
+#ifdef _WIN32
+/* For mkdir() */
+#include <direct.h>
+#else
+#include <dirent.h>
+#endif
+
+#include "or.h"
+
+#ifdef USE_DMALLOC
+#include <dmalloc.h>
+#include <openssl/crypto.h>
+#include "main.h"
+#endif
+
+/** Temporary directory (set up by setup_directory) under which we store all
+ * our files during testing. */
+static char temp_dir[256];
+#ifdef _WIN32
+#define pid_t int
+#endif
+static pid_t temp_dir_setup_in_pid = 0;
+
+/** Select and create the temporary directory we'll use to run our unit tests.
+ * Store it in <b>temp_dir</b>. Exit immediately if we can't create it.
+ * idempotent. */
+static void
+setup_directory(void)
+{
+ static int is_setup = 0;
+ int r;
+ char rnd[256], rnd32[256];
+ if (is_setup) return;
+
+/* Due to base32 limitation needs to be a multiple of 5. */
+#define RAND_PATH_BYTES 5
+ crypto_rand(rnd, RAND_PATH_BYTES);
+ base32_encode(rnd32, sizeof(rnd32), rnd, RAND_PATH_BYTES);
+
+#ifdef _WIN32
+ {
+ char buf[MAX_PATH];
+ const char *tmp = buf;
+ const char *extra_backslash = "";
+ /* If this fails, we're probably screwed anyway */
+ if (!GetTempPathA(sizeof(buf),buf))
+ tmp = "c:\\windows\\temp\\";
+ if (strcmpend(tmp, "\\")) {
+ /* According to MSDN, it should be impossible for GetTempPath to give us
+ * an answer that doesn't end with \. But let's make sure. */
+ extra_backslash = "\\";
+ }
+ tor_snprintf(temp_dir, sizeof(temp_dir),
+ "%s%stor_test_%d_%s", tmp, extra_backslash,
+ (int)getpid(), rnd32);
+ r = mkdir(temp_dir);
+ }
+#else
+ tor_snprintf(temp_dir, sizeof(temp_dir), "/tmp/tor_test_%d_%s",
+ (int) getpid(), rnd32);
+ r = mkdir(temp_dir, 0700);
+ if (!r) {
+ /* undo sticky bit so tests don't get confused. */
+ r = chown(temp_dir, getuid(), getgid());
+ }
+#endif
+ if (r) {
+ fprintf(stderr, "Can't create directory %s:", temp_dir);
+ perror("");
+ exit(1);
+ }
+ is_setup = 1;
+ temp_dir_setup_in_pid = getpid();
+}
+
+/** Return a filename relative to our testing temporary directory */
+const char *
+get_fname(const char *name)
+{
+ static char buf[1024];
+ setup_directory();
+ if (!name)
+ return temp_dir;
+ tor_snprintf(buf,sizeof(buf),"%s/%s",temp_dir,name);
+ return buf;
+}
+
+/* Remove a directory and all of its subdirectories */
+static void
+rm_rf(const char *dir)
+{
+ struct stat st;
+ smartlist_t *elements;
+
+ elements = tor_listdir(dir);
+ if (elements) {
+ SMARTLIST_FOREACH_BEGIN(elements, const char *, cp) {
+ char *tmp = NULL;
+ tor_asprintf(&tmp, "%s"PATH_SEPARATOR"%s", dir, cp);
+ if (0 == stat(tmp,&st) && (st.st_mode & S_IFDIR)) {
+ rm_rf(tmp);
+ } else {
+ if (unlink(tmp)) {
+ fprintf(stderr, "Error removing %s: %s\n", tmp, strerror(errno));
+ }
+ }
+ tor_free(tmp);
+ } SMARTLIST_FOREACH_END(cp);
+ SMARTLIST_FOREACH(elements, char *, cp, tor_free(cp));
+ smartlist_free(elements);
+ }
+ if (rmdir(dir))
+ fprintf(stderr, "Error removing directory %s: %s\n", dir, strerror(errno));
+}
+
+/** Remove all files stored under the temporary directory, and the directory
+ * itself. Called by atexit(). */
+static void
+remove_directory(void)
+{
+ if (getpid() != temp_dir_setup_in_pid) {
+ /* Only clean out the tempdir when the main process is exiting. */
+ return;
+ }
+
+ rm_rf(temp_dir);
+}
+
+/** Define this if unit tests spend too much time generating public keys*/
+#undef CACHE_GENERATED_KEYS
+
+static crypto_pk_t *pregen_keys[5] = {NULL, NULL, NULL, NULL, NULL};
+#define N_PREGEN_KEYS ARRAY_LENGTH(pregen_keys)
+
+/** Generate and return a new keypair for use in unit tests. If we're using
+ * the key cache optimization, we might reuse keys: we only guarantee that
+ * keys made with distinct values for <b>idx</b> are different. The value of
+ * <b>idx</b> must be at least 0, and less than N_PREGEN_KEYS. */
+crypto_pk_t *
+pk_generate(int idx)
+{
+ int res;
+#ifdef CACHE_GENERATED_KEYS
+ tor_assert(idx < N_PREGEN_KEYS);
+ if (! pregen_keys[idx]) {
+ pregen_keys[idx] = crypto_pk_new();
+ res = crypto_pk_generate_key(pregen_keys[idx]);
+ tor_assert(!res);
+ }
+ return crypto_pk_dup_key(pregen_keys[idx]);
+#else
+ crypto_pk_t *result;
+ (void) idx;
+ result = crypto_pk_new();
+ res = crypto_pk_generate_key(result);
+ tor_assert(!res);
+ return result;
+#endif
+}
+
+/** Free all storage used for the cached key optimization. */
+static void
+free_pregenerated_keys(void)
+{
+ unsigned idx;
+ for (idx = 0; idx < N_PREGEN_KEYS; ++idx) {
+ if (pregen_keys[idx]) {
+ crypto_pk_free(pregen_keys[idx]);
+ pregen_keys[idx] = NULL;
+ }
+ }
+}
+
+static void *
+passthrough_test_setup(const struct testcase_t *testcase)
+{
+ return testcase->setup_data;
+}
+static int
+passthrough_test_cleanup(const struct testcase_t *testcase, void *ptr)
+{
+ (void)testcase;
+ (void)ptr;
+ return 1;
+}
+
+const struct testcase_setup_t passthrough_setup = {
+ passthrough_test_setup, passthrough_test_cleanup
+};
+
+extern struct testgroup_t testgroups[];
+
+/** Main entry point for unit test code: parse the command line, and run
+ * some unit tests. */
+int
+main(int c, const char **v)
+{
+ or_options_t *options;
+ char *errmsg = NULL;
+ int i, i_out;
+ int loglevel = LOG_ERR;
+ int accel_crypto = 0;
+
+#ifdef USE_DMALLOC
+ {
+ int r = CRYPTO_set_mem_ex_functions(tor_malloc_, tor_realloc_, tor_free_);
+ tor_assert(r);
+ }
+#endif
+
+ update_approx_time(time(NULL));
+ options = options_new();
+ tor_threads_init();
+ init_logging(1);
+ configure_backtrace_handler(get_version());
+
+ for (i_out = i = 1; i < c; ++i) {
+ if (!strcmp(v[i], "--warn")) {
+ loglevel = LOG_WARN;
+ } else if (!strcmp(v[i], "--notice")) {
+ loglevel = LOG_NOTICE;
+ } else if (!strcmp(v[i], "--info")) {
+ loglevel = LOG_INFO;
+ } else if (!strcmp(v[i], "--debug")) {
+ loglevel = LOG_DEBUG;
+ } else if (!strcmp(v[i], "--accel")) {
+ accel_crypto = 1;
+ } else {
+ v[i_out++] = v[i];
+ }
+ }
+ c = i_out;
+
+ {
+ log_severity_list_t s;
+ memset(&s, 0, sizeof(s));
+ set_log_severity_config(loglevel, LOG_ERR, &s);
+ add_stream_log(&s, "", fileno(stdout));
+ }
+
+ options->command = CMD_RUN_UNITTESTS;
+ if (crypto_global_init(accel_crypto, NULL, NULL)) {
+ printf("Can't initialize crypto subsystem; exiting.\n");
+ return 1;
+ }
+ crypto_set_tls_dh_prime();
+ crypto_seed_rng(1);
+ rep_hist_init();
+ network_init();
+ setup_directory();
+ options_init(options);
+ options->DataDirectory = tor_strdup(temp_dir);
+ options->EntryStatistics = 1;
+ if (set_options(options, &errmsg) < 0) {
+ printf("Failed to set initial options: %s\n", errmsg);
+ tor_free(errmsg);
+ return 1;
+ }
+
+ atexit(remove_directory);
+
+ int have_failed = (tinytest_main(c, v, testgroups) != 0);
+
+ free_pregenerated_keys();
+#ifdef USE_DMALLOC
+ tor_free_all(0);
+ dmalloc_log_unfreed();
+#endif
+
+ if (have_failed)
+ return 1;
+ else
+ return 0;
+}
+
diff --git a/src/test/zero_length_keys.sh b/src/test/zero_length_keys.sh
index 3a99ca1f1d..3c61f8d465 100755
--- a/src/test/zero_length_keys.sh
+++ b/src/test/zero_length_keys.sh
@@ -3,55 +3,70 @@
# Test for bug #13111 - Tor fails to start if onion keys are zero length
#
# Usage:
-# ./zero_length_keys.sh
+# ./zero_length_keys.sh PATH_TO_TOR
# Run all the tests below
-# ./zero_length_keys.sh -z
+# ./zero_length_keys.sh PATH_TO_TOR -z
# Check tor will launch and regenerate zero-length keys
-# ./zero_length_keys.sh -d
+# ./zero_length_keys.sh PATH_TO_TOR -d
# Check tor regenerates deleted keys (existing behaviour)
-# ./zero_length_keys.sh -e
+# ./zero_length_keys.sh PATH_TO_TOR -e
# Check tor does not overwrite existing keys (existing behaviour)
#
# Exit Statuses:
-# -2: test failed - tor did not generate the key files on first run
-# -1: a command failed - the test could not be completed
# 0: test succeeded - tor regenerated/kept the files
# 1: test failed - tor did not regenerate/keep the files
+# 2: test failed - tor did not generate the key files on first run
+# 3: a command failed - the test could not be completed
#
-if [ $# -lt 1 ]; then
+if [ $# -eq 0 ] || [ ! -f ${1} ] || [ ! -x ${1} ]; then
+ echo "Usage: ${0} PATH_TO_TOR [-z|-d|-e]"
+ exit 1
+elif [ $# -eq 1 ]; then
echo "Testing that tor correctly handles zero-length keys"
- "$0" -z && "$0" -d && "$0" -e
+ "$0" "${1}" -z && "$0" "${1}" -d && "$0" "${1}" -e
exit $?
+else #[$# -gt 1 ]; then
+ TOR_BINARY="${1}"
+ shift
+fi
+
+DATA_DIR=`mktemp -d -t tor_zero_length_keys.XXXXXX`
+if [ -z "$DATA_DIR" ]; then
+ echo "Failure: mktemp invocation returned empty string" >&2
+ exit 3
fi
+if [ ! -d "$DATA_DIR" ]; then
+ echo "Failure: mktemp invocation result doesn't point to directory" >&2
+ exit 3
+fi
+trap "rm -rf '$DATA_DIR'" 0
+
+touch "$DATA_DIR"/empty_torrc
-export DATA_DIR=`mktemp -d -t tor_zero_length_keys.XXXXXX`
# DisableNetwork means that the ORPort won't actually be opened.
# 'ExitRelay 0' suppresses a warning.
-TOR="./src/or/tor --hush --DisableNetwork 1 --ShutdownWaitLength 0 --ORPort 12345 --ExitRelay 0"
+TOR="${TOR_BINARY} --hush --DisableNetwork 1 --ShutdownWaitLength 0 --ORPort 12345 --ExitRelay 0 -f $DATA_DIR/empty_torrc"
-if [ -s "$DATA_DIR"/keys/secret_id_key -a -s "$DATA_DIR"/keys/secret_onion_key -a -s "$DATA_DIR"/keys/secret_onion_key_ntor ]; then
- echo "Failure: Previous tor keys present in tor data directory"
- exit -1
+if [ -s "$DATA_DIR"/keys/secret_id_key ] && [ -s "$DATA_DIR"/keys/secret_onion_key ] &&
+ [ -s "$DATA_DIR"/keys/secret_onion_key_ntor ]; then
+ echo "Failure: Previous tor keys present in tor data directory" >&2
+ exit 3
else
echo "Generating initial tor keys"
- $TOR --DataDirectory "$DATA_DIR" --PidFile "$DATA_DIR"/pid &
- TOR_PID=$!
- # generate SIGTERM, hopefully after the keys have been regenerated
- sleep 5
- kill $TOR_PID
- wait $TOR_PID
+ $TOR --DataDirectory "$DATA_DIR" --list-fingerprint
# tor must successfully generate non-zero-length key files
- if [ -s "$DATA_DIR"/keys/secret_id_key -a -s "$DATA_DIR"/keys/secret_onion_key -a -s "$DATA_DIR"/keys/secret_onion_key_ntor ]; then
+ if [ -s "$DATA_DIR"/keys/secret_id_key ] && [ -s "$DATA_DIR"/keys/secret_onion_key ] &&
+ [ -s "$DATA_DIR"/keys/secret_onion_key_ntor ]; then
true #echo "tor generated the initial key files"
else
echo "Failure: tor failed to generate the initial key files"
- exit -2
+ exit 2
fi
fi
-#ls -lh "$DATA_DIR"/keys/ || exit -1
+#ls -lh "$DATA_DIR"/keys/ || exit 3
# backup and keep/delete/create zero-length files for the keys
@@ -62,31 +77,27 @@ cp -r "$DATA_DIR"/keys "$DATA_DIR"/keys.old
# delete keys for -d or -z
if [ "$1" != "-e" ]; then
FILE_DESC="regenerates deleted"
- rm "$DATA_DIR"/keys/secret_id_key || exit -1
- rm "$DATA_DIR"/keys/secret_onion_key || exit -1
- rm "$DATA_DIR"/keys/secret_onion_key_ntor || exit -1
+ rm "$DATA_DIR"/keys/secret_id_key || exit 3
+ rm "$DATA_DIR"/keys/secret_onion_key || exit 3
+ rm "$DATA_DIR"/keys/secret_onion_key_ntor || exit 3
fi
# create empty files for -z
if [ "$1" = "-z" ]; then
FILE_DESC="regenerates zero-length"
- touch "$DATA_DIR"/keys/secret_id_key || exit -1
- touch "$DATA_DIR"/keys/secret_onion_key || exit -1
- touch "$DATA_DIR"/keys/secret_onion_key_ntor || exit -1
+ touch "$DATA_DIR"/keys/secret_id_key || exit 3
+ touch "$DATA_DIR"/keys/secret_onion_key || exit 3
+ touch "$DATA_DIR"/keys/secret_onion_key_ntor || exit 3
fi
echo "Running tor again to check if it $FILE_DESC keys"
-$TOR --DataDirectory "$DATA_DIR" --PidFile "$DATA_DIR"/pid &
-TOR_PID=$!
-# generate SIGTERM, hopefully after the keys have been regenerated
-sleep 5
-kill $TOR_PID
-wait $TOR_PID
+$TOR --DataDirectory "$DATA_DIR" --list-fingerprint
-#ls -lh "$DATA_DIR"/keys/ || exit -1
+#ls -lh "$DATA_DIR"/keys/ || exit 3
# tor must always have non-zero-length key files
-if [ -s "$DATA_DIR"/keys/secret_id_key -a -s "$DATA_DIR"/keys/secret_onion_key -a -s "$DATA_DIR"/keys/secret_onion_key_ntor ]; then
+if [ -s "$DATA_DIR"/keys/secret_id_key ] && [ -s "$DATA_DIR"/keys/secret_onion_key ] &&
+ [ -s "$DATA_DIR"/keys/secret_onion_key_ntor ]; then
# check if the keys are different to the old ones
diff -q -r "$DATA_DIR"/keys "$DATA_DIR"/keys.old > /dev/null
SAME_KEYS=$?
diff --git a/src/tools/include.am b/src/tools/include.am
index 54b150a80c..5d778c1143 100644
--- a/src/tools/include.am
+++ b/src/tools/include.am
@@ -1,21 +1,45 @@
bin_PROGRAMS+= src/tools/tor-resolve src/tools/tor-gencert
noinst_PROGRAMS+= src/tools/tor-checkkey
+if COVERAGE_ENABLED
+noinst_PROGRAMS+= src/tools/tor-cov-resolve src/tools/tor-cov-gencert
+endif
+
src_tools_tor_resolve_SOURCES = src/tools/tor-resolve.c
src_tools_tor_resolve_LDFLAGS =
src_tools_tor_resolve_LDADD = src/common/libor.a @TOR_LIB_MATH@ @TOR_LIB_WS32@
+if COVERAGE_ENABLED
+src_tools_tor_cov_resolve_SOURCES = src/tools/tor-resolve.c
+src_tools_tor_cov_resolve_CPPFLAGS = $(AM_CPPFLAGS) $(TEST_CPPFLAGS)
+src_tools_tor_cov_resolve_CFLAGS = $(AM_CFLAGS) $(TEST_CFLAGS)
+src_tools_tor_cov_resolve_LDADD = src/common/libor-testing.a \
+ @TOR_LIB_MATH@ @TOR_LIB_WS32@
+endif
+
src_tools_tor_gencert_SOURCES = src/tools/tor-gencert.c
src_tools_tor_gencert_LDFLAGS = @TOR_LDFLAGS_zlib@ @TOR_LDFLAGS_openssl@
src_tools_tor_gencert_LDADD = src/common/libor.a src/common/libor-crypto.a \
- $(LIBDONNA) \
+ $(LIBDONNA) \
+ @TOR_LIB_MATH@ @TOR_ZLIB_LIBS@ @TOR_OPENSSL_LIBS@ \
+ @TOR_LIB_WS32@ @TOR_LIB_GDI@ @CURVE25519_LIBS@
+
+if COVERAGE_ENABLED
+src_tools_tor_cov_gencert_SOURCES = src/tools/tor-gencert.c
+src_tools_tor_cov_gencert_CPPFLAGS = $(AM_CPPFLAGS) $(TEST_CPPFLAGS)
+src_tools_tor_cov_gencert_CFLAGS = $(AM_CFLAGS) $(TEST_CFLAGS)
+src_tools_tor_cov_gencert_LDFLAGS = @TOR_LDFLAGS_zlib@ @TOR_LDFLAGS_openssl@
+src_tools_tor_cov_gencert_LDADD = src/common/libor-testing.a \
+ src/common/libor-crypto-testing.a \
+ $(LIBDONNA) \
@TOR_LIB_MATH@ @TOR_ZLIB_LIBS@ @TOR_OPENSSL_LIBS@ \
@TOR_LIB_WS32@ @TOR_LIB_GDI@ @CURVE25519_LIBS@
+endif
src_tools_tor_checkkey_SOURCES = src/tools/tor-checkkey.c
src_tools_tor_checkkey_LDFLAGS = @TOR_LDFLAGS_zlib@ @TOR_LDFLAGS_openssl@
src_tools_tor_checkkey_LDADD = src/common/libor.a src/common/libor-crypto.a \
- $(LIBDONNA) \
+ $(LIBDONNA) \
@TOR_LIB_MATH@ @TOR_ZLIB_LIBS@ @TOR_OPENSSL_LIBS@ \
@TOR_LIB_WS32@ @TOR_LIB_GDI@ @CURVE25519_LIBS@
diff --git a/src/tools/tor-checkkey.c b/src/tools/tor-checkkey.c
index e404b682cf..ed68bdf52c 100644
--- a/src/tools/tor-checkkey.c
+++ b/src/tools/tor-checkkey.c
@@ -7,7 +7,7 @@
#include <stdlib.h>
#include "crypto.h"
#include "torlog.h"
-#include "../common/util.h"
+#include "util.h"
#include "compat.h"
#include <openssl/bn.h>
#include <openssl/rsa.h>
diff --git a/src/tools/tor-gencert.c b/src/tools/tor-gencert.c
index c599822e07..28b1a58d52 100644
--- a/src/tools/tor-gencert.c
+++ b/src/tools/tor-gencert.c
@@ -28,8 +28,8 @@
#endif
#include "compat.h"
-#include "../common/util.h"
-#include "../common/torlog.h"
+#include "util.h"
+#include "torlog.h"
#include "crypto.h"
#include "address.h"
@@ -186,8 +186,7 @@ parse_commandline(int argc, char **argv)
return 1;
in.s_addr = htonl(addr);
tor_inet_ntoa(&in, b, sizeof(b));
- address = tor_malloc(INET_NTOA_BUF_LEN+32);
- tor_snprintf(address, INET_NTOA_BUF_LEN+32, "%s:%d", b, (int)port);
+ tor_asprintf(&address, "%s:%d", b, (int)port);
} else if (!strcmp(argv[i], "--create-identity-key")) {
make_new_id = 1;
} else if (!strcmp(argv[i], "--passphrase-fd")) {
@@ -486,7 +485,8 @@ generate_certificate(void)
EVP_PKEY_get1_RSA(signing_key),
RSA_PKCS1_PADDING);
signed_len = strlen(buf);
- base64_encode(buf+signed_len, sizeof(buf)-signed_len, signature, r);
+ base64_encode(buf+signed_len, sizeof(buf)-signed_len, signature, r,
+ BASE64_ENCODE_MULTILINE);
strlcat(buf,
"-----END ID SIGNATURE-----\n"
@@ -501,7 +501,8 @@ generate_certificate(void)
RSA_PKCS1_PADDING);
strlcat(buf, "-----BEGIN SIGNATURE-----\n", sizeof(buf));
signed_len = strlen(buf);
- base64_encode(buf+signed_len, sizeof(buf)-signed_len, signature, r);
+ base64_encode(buf+signed_len, sizeof(buf)-signed_len, signature, r,
+ BASE64_ENCODE_MULTILINE);
strlcat(buf, "-----END SIGNATURE-----\n", sizeof(buf));
if (!(f = fopen(certificate_file, "w"))) {
@@ -564,6 +565,7 @@ main(int argc, char **argv)
tor_free(identity_key_file);
tor_free(signing_key_file);
tor_free(certificate_file);
+ tor_free(address);
crypto_global_cleanup();
return r;
diff --git a/src/tools/tor-resolve.c b/src/tools/tor-resolve.c
index e6eadf1dd3..19e3a554fa 100644
--- a/src/tools/tor-resolve.c
+++ b/src/tools/tor-resolve.c
@@ -5,9 +5,9 @@
#include "orconfig.h"
#include "compat.h"
-#include "../common/util.h"
+#include "util.h"
#include "address.h"
-#include "../common/torlog.h"
+#include "torlog.h"
#include "sandbox.h"
#include <stdio.h>
@@ -108,6 +108,18 @@ build_socks_resolve_request(char **out,
return len;
}
+static void
+onion_warning(const char *hostname)
+{
+ log_warn(LD_NET,
+ "%s is a hidden service; those don't have IP addresses. "
+ "You can use the AutomapHostsOnResolve option to have Tor return a "
+ "fake address for hidden services. Or you can have your "
+ "application send the address to Tor directly; we recommend an "
+ "application that uses SOCKS 5 with hostnames.",
+ hostname);
+}
+
/** Given a <b>len</b>-byte SOCKS4a response in <b>response</b>, set
* *<b>addr_out</b> to the address it contains (in host order).
* Return 0 on success, -1 on error.
@@ -137,10 +149,7 @@ parse_socks4a_resolve_response(const char *hostname,
if (status != 90) {
log_warn(LD_NET,"Got status response '%d': socks request failed.", status);
if (!strcasecmpend(hostname, ".onion")) {
- log_warn(LD_NET,
- "%s is a hidden service; those don't have IP addresses. "
- "To connect to a hidden service, you need to send the hostname "
- "to Tor; we suggest an application that uses SOCKS 4a.",hostname);
+ onion_warning(hostname);
return -1;
}
return -1;
@@ -276,11 +285,7 @@ do_resolve(const char *hostname, uint32_t sockshost, uint16_t socksport,
(unsigned)reply_buf[1],
socks5_reason_to_string(reply_buf[1]));
if (reply_buf[1] == 4 && !strcasecmpend(hostname, ".onion")) {
- log_warn(LD_NET,
- "%s is a hidden service; those don't have IP addresses. "
- "To connect to a hidden service, you need to send the hostname "
- "to Tor; we suggest an application that uses SOCKS 4a.",
- hostname);
+ onion_warning(hostname);
}
goto err;
}
@@ -326,8 +331,8 @@ do_resolve(const char *hostname, uint32_t sockshost, uint16_t socksport,
static void
usage(void)
{
- puts("Syntax: tor-resolve [-4] [-v] [-x] [-F] [-p port] "
- "hostname [sockshost:socksport]");
+ puts("Syntax: tor-resolve [-4] [-5] [-v] [-x] [-F] [-p port] "
+ "hostname [sockshost[:socksport]]");
exit(1);
}
diff --git a/src/trunnel/include.am b/src/trunnel/include.am
index c7ac1679d0..54e3db287e 100644
--- a/src/trunnel/include.am
+++ b/src/trunnel/include.am
@@ -23,7 +23,7 @@ src_trunnel_libor_trunnel_a_SOURCES = $(TRUNNELSOURCES)
src_trunnel_libor_trunnel_a_CPPFLAGS = -DTRUNNEL_LOCAL_H $(AM_CPPFLAGS)
src_trunnel_libor_trunnel_testing_a_SOURCES = $(TRUNNELSOURCES)
-src_trunnel_libor_trunnel_testing_a_CPPFLAGS = -DTOR_UNIT_TESTS -DTRUNNEL_LOCAL_H $(AM_CPPFLAGS)
+src_trunnel_libor_trunnel_testing_a_CPPFLAGS = -DTRUNNEL_LOCAL_H $(AM_CPPFLAGS) $(TEST_CPPFLAGS)
src_trunnel_libor_trunnel_testing_a_CFLAGS = $(AM_CFLAGS) $(TEST_CFLAGS)
noinst_HEADERS+= $(TRUNNELHEADERS)
diff --git a/src/win32/orconfig.h b/src/win32/orconfig.h
index d1a5b4b3e2..6745bcc9f5 100644
--- a/src/win32/orconfig.h
+++ b/src/win32/orconfig.h
@@ -232,7 +232,7 @@
#define USING_TWOS_COMPLEMENT
/* Version number of package */
-#define VERSION "0.2.6.2-alpha-dev"
+#define VERSION "0.2.7.0-alpha-dev"