#include <folly/MacAddress.h>
#include <folly/detail/IPAddressSource.h>
+#if !_WIN32
+#include <net/if.h>
+#else
+// Because of the massive pain that is libnl, this can't go into the socket
+// portability header as you can't include <linux/if.h> and <net/if.h> in
+// the same translation unit without getting errors -_-...
+#include <iphlpapi.h>
+#include <ntddndis.h>
+
+// Alias the max size of an interface name to what posix expects.
+#define IFNAMSIZ IF_NAMESIZE
+#endif
+
using std::ostream;
using std::string;
// public
string IPAddressV6::str() const {
- char buffer[INET6_ADDRSTRLEN] = {0};
- sockaddr_in6 sock = toSockAddr();
- if (!getnameinfo(
- (sockaddr*)&sock, sizeof(sock),
- buffer, INET6_ADDRSTRLEN,
- nullptr, 0, NI_NUMERICHOST)) {
- string ip(buffer);
- return ip;
- } else {
+ char buffer[INET6_ADDRSTRLEN + IFNAMSIZ + 1];
+
+ if (!inet_ntop(AF_INET6, toAddr().s6_addr, buffer, INET6_ADDRSTRLEN)) {
throw IPAddressFormatException(to<std::string>(
"Invalid address with hex ",
"'",
detail::Bytes::toHex(bytes(), 16),
- "'"));
+ "'",
+ " with error ",
+ strerror(errno)));
}
+
+ auto scopeId = getScopeId();
+ if (scopeId != 0) {
+ auto len = strlen(buffer);
+ buffer[len] = '%';
+ if (!if_indextoname(scopeId, buffer + len + 1)) {
+ throw IPAddressFormatException(to<std::string>(
+ "Invalid scope for address with hex ",
+ "'",
+ detail::Bytes::toHex(bytes(), 16),
+ "%",
+ scopeId,
+ "'",
+ " with error ",
+ strerror(errno)));
+ }
+ }
+
+ return string(buffer);
}
// public
if (numBits > bits) {
throw IPAddressFormatException("IPv6 addresses are 128 bits.");
}
- // masks_ is backed by an array so is zero indexed
- return masks_[numBits];
+ if (numBits == 0) {
+ return {{0}};
+ }
+ constexpr auto _0s = uint64_t(0);
+ constexpr auto _1s = ~_0s;
+ auto const fragment = Endian::big(_1s << ((128 - numBits) % 64));
+ auto const hi = numBits <= 64 ? fragment : _1s;
+ auto const lo = numBits <= 64 ? _0s : fragment;
+ uint64_t const parts[] = {hi, lo};
+ ByteArray16 arr;
+ std::memcpy(arr.data(), parts, sizeof(parts));
+ return arr;
}
// public static
auto masked = mask(numBits);
return (std::memcmp(addr.data(), masked.bytes(), 2) == 0);
}
-
-// static private
-const std::array<ByteArray16, 129> IPAddressV6::masks_ = {{
-/* /0 */ {{ 0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00 }},
-/* /1 */ {{ 0x80,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00 }},
-/* /2 */ {{ 0xc0,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00 }},
-/* /3 */ {{ 0xe0,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00 }},
-/* /4 */ {{ 0xf0,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00 }},
-/* /5 */ {{ 0xf8,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00 }},
-/* /6 */ {{ 0xfc,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00 }},
-/* /7 */ {{ 0xfe,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00 }},
-/* /8 */ {{ 0xff,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00 }},
-/* /9 */ {{ 0xff,0x80,0x00,0x00,
- 0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00 }},
-/* /10 */ {{ 0xff,0xc0,0x00,0x00,
- 0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00 }},
-/* /11 */ {{ 0xff,0xe0,0x00,0x00,
- 0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00 }},
-/* /12 */ {{ 0xff,0xf0,0x00,0x00,
- 0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00 }},
-/* /13 */ {{ 0xff,0xf8,0x00,0x00,
- 0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00 }},
-/* /14 */ {{ 0xff,0xfc,0x00,0x00,
- 0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00 }},
-/* /15 */ {{ 0xff,0xfe,0x00,0x00,
- 0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00 }},
-/* /16 */ {{ 0xff,0xff,0x00,0x00,
- 0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00 }},
-/* /17 */ {{ 0xff,0xff,0x80,0x00,
- 0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00 }},
-/* /18 */ {{ 0xff,0xff,0xc0,0x00,
- 0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00 }},
-/* /19 */ {{ 0xff,0xff,0xe0,0x00,
- 0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00 }},
-/* /20 */ {{ 0xff,0xff,0xf0,0x00,
- 0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00 }},
-/* /21 */ {{ 0xff,0xff,0xf8,0x00,
- 0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00 }},
-/* /22 */ {{ 0xff,0xff,0xfc,0x00,
- 0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00 }},
-/* /23 */ {{ 0xff,0xff,0xfe,0x00,
- 0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00 }},
-/* /24 */ {{ 0xff,0xff,0xff,0x00,
- 0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00 }},
-/* /25 */ {{ 0xff,0xff,0xff,0x80,
- 0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00 }},
-/* /26 */ {{ 0xff,0xff,0xff,0xc0,
- 0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00 }},
-/* /27 */ {{ 0xff,0xff,0xff,0xe0,
- 0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00 }},
-/* /28 */ {{ 0xff,0xff,0xff,0xf0,
- 0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00 }},
-/* /29 */ {{ 0xff,0xff,0xff,0xf8,
- 0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00 }},
-/* /30 */ {{ 0xff,0xff,0xff,0xfc,
- 0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00 }},
-/* /31 */ {{ 0xff,0xff,0xff,0xfe,
- 0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00 }},
-/* /32 */ {{ 0xff,0xff,0xff,0xff,
- 0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00 }},
-/* /33 */ {{ 0xff,0xff,0xff,0xff,
- 0x80,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00 }},
-/* /34 */ {{ 0xff,0xff,0xff,0xff,
- 0xc0,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00 }},
-/* /35 */ {{ 0xff,0xff,0xff,0xff,
- 0xe0,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00 }},
-/* /36 */ {{ 0xff,0xff,0xff,0xff,
- 0xf0,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00 }},
-/* /37 */ {{ 0xff,0xff,0xff,0xff,
- 0xf8,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00 }},
-/* /38 */ {{ 0xff,0xff,0xff,0xff,
- 0xfc,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00 }},
-/* /39 */ {{ 0xff,0xff,0xff,0xff,
- 0xfe,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00 }},
-/* /40 */ {{ 0xff,0xff,0xff,0xff,
- 0xff,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00 }},
-/* /41 */ {{ 0xff,0xff,0xff,0xff,
- 0xff,0x80,0x00,0x00,
- 0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00 }},
-/* /42 */ {{ 0xff,0xff,0xff,0xff,
- 0xff,0xc0,0x00,0x00,
- 0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00 }},
-/* /43 */ {{ 0xff,0xff,0xff,0xff,
- 0xff,0xe0,0x00,0x00,
- 0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00 }},
-/* /44 */ {{ 0xff,0xff,0xff,0xff,
- 0xff,0xf0,0x00,0x00,
- 0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00 }},
-/* /45 */ {{ 0xff,0xff,0xff,0xff,
- 0xff,0xf8,0x00,0x00,
- 0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00 }},
-/* /46 */ {{ 0xff,0xff,0xff,0xff,
- 0xff,0xfc,0x00,0x00,
- 0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00 }},
-/* /47 */ {{ 0xff,0xff,0xff,0xff,
- 0xff,0xfe,0x00,0x00,
- 0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00 }},
-/* /48 */ {{ 0xff,0xff,0xff,0xff,
- 0xff,0xff,0x00,0x00,
- 0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00 }},
-/* /49 */ {{ 0xff,0xff,0xff,0xff,
- 0xff,0xff,0x80,0x00,
- 0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00 }},
-/* /50 */ {{ 0xff,0xff,0xff,0xff,
- 0xff,0xff,0xc0,0x00,
- 0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00 }},
-/* /51 */ {{ 0xff,0xff,0xff,0xff,
- 0xff,0xff,0xe0,0x00,
- 0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00 }},
-/* /52 */ {{ 0xff,0xff,0xff,0xff,
- 0xff,0xff,0xf0,0x00,
- 0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00 }},
-/* /53 */ {{ 0xff,0xff,0xff,0xff,
- 0xff,0xff,0xf8,0x00,
- 0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00 }},
-/* /54 */ {{ 0xff,0xff,0xff,0xff,
- 0xff,0xff,0xfc,0x00,
- 0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00 }},
-/* /55 */ {{ 0xff,0xff,0xff,0xff,
- 0xff,0xff,0xfe,0x00,
- 0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00 }},
-/* /56 */ {{ 0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0x00,
- 0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00 }},
-/* /57 */ {{ 0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0x80,
- 0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00 }},
-/* /58 */ {{ 0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xc0,
- 0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00 }},
-/* /59 */ {{ 0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xe0,
- 0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00 }},
-/* /60 */ {{ 0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xf0,
- 0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00 }},
-/* /61 */ {{ 0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xf8,
- 0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00 }},
-/* /62 */ {{ 0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xfc,
- 0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00 }},
-/* /63 */ {{ 0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xfe,
- 0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00 }},
-/* /64 */ {{ 0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,
- 0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00 }},
-/* /65 */ {{ 0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,
- 0x80,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00 }},
-/* /66 */ {{ 0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,
- 0xc0,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00 }},
-/* /67 */ {{ 0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,
- 0xe0,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00 }},
-/* /68 */ {{ 0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,
- 0xf0,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00 }},
-/* /69 */ {{ 0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,
- 0xf8,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00 }},
-/* /70 */ {{ 0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,
- 0xfc,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00 }},
-/* /71 */ {{ 0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,
- 0xfe,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00 }},
-/* /72 */ {{ 0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,
- 0xff,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00 }},
-/* /73 */ {{ 0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,
- 0xff,0x80,0x00,0x00,
- 0x00,0x00,0x00,0x00 }},
-/* /74 */ {{ 0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,
- 0xff,0xc0,0x00,0x00,
- 0x00,0x00,0x00,0x00 }},
-/* /75 */ {{ 0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,
- 0xff,0xe0,0x00,0x00,
- 0x00,0x00,0x00,0x00 }},
-/* /76 */ {{ 0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,
- 0xff,0xf0,0x00,0x00,
- 0x00,0x00,0x00,0x00 }},
-/* /77 */ {{ 0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,
- 0xff,0xf8,0x00,0x00,
- 0x00,0x00,0x00,0x00 }},
-/* /78 */ {{ 0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,
- 0xff,0xfc,0x00,0x00,
- 0x00,0x00,0x00,0x00 }},
-/* /79 */ {{ 0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,
- 0xff,0xfe,0x00,0x00,
- 0x00,0x00,0x00,0x00 }},
-/* /80 */ {{ 0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,
- 0xff,0xff,0x00,0x00,
- 0x00,0x00,0x00,0x00 }},
-/* /81 */ {{ 0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,
- 0xff,0xff,0x80,0x00,
- 0x00,0x00,0x00,0x00 }},
-/* /82 */ {{ 0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,
- 0xff,0xff,0xc0,0x00,
- 0x00,0x00,0x00,0x00 }},
-/* /83 */ {{ 0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,
- 0xff,0xff,0xe0,0x00,
- 0x00,0x00,0x00,0x00 }},
-/* /84 */ {{ 0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,
- 0xff,0xff,0xf0,0x00,
- 0x00,0x00,0x00,0x00 }},
-/* /85 */ {{ 0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,
- 0xff,0xff,0xf8,0x00,
- 0x00,0x00,0x00,0x00 }},
-/* /86 */ {{ 0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,
- 0xff,0xff,0xfc,0x00,
- 0x00,0x00,0x00,0x00 }},
-/* /87 */ {{ 0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,
- 0xff,0xff,0xfe,0x00,
- 0x00,0x00,0x00,0x00 }},
-/* /88 */ {{ 0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0x00,
- 0x00,0x00,0x00,0x00 }},
-/* /89 */ {{ 0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0x80,
- 0x00,0x00,0x00,0x00 }},
-/* /90 */ {{ 0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xc0,
- 0x00,0x00,0x00,0x00 }},
-/* /91 */ {{ 0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xe0,
- 0x00,0x00,0x00,0x00 }},
-/* /92 */ {{ 0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xf0,
- 0x00,0x00,0x00,0x00 }},
-/* /93 */ {{ 0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xf8,
- 0x00,0x00,0x00,0x00 }},
-/* /94 */ {{ 0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xfc,
- 0x00,0x00,0x00,0x00 }},
-/* /95 */ {{ 0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xfe,
- 0x00,0x00,0x00,0x00 }},
-/* /96 */ {{ 0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,
- 0x00,0x00,0x00,0x00 }},
-/* /97 */ {{ 0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,
- 0x80,0x00,0x00,0x00 }},
-/* /98 */ {{ 0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,
- 0xc0,0x00,0x00,0x00 }},
-/* /99 */ {{ 0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,
- 0xe0,0x00,0x00,0x00 }},
-/* /100 */ {{ 0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,
- 0xf0,0x00,0x00,0x00 }},
-/* /101 */ {{ 0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,
- 0xf8,0x00,0x00,0x00 }},
-/* /102 */ {{ 0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,
- 0xfc,0x00,0x00,0x00 }},
-/* /103 */ {{ 0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,
- 0xfe,0x00,0x00,0x00 }},
-/* /104 */ {{ 0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,
- 0xff,0x00,0x00,0x00 }},
-/* /105 */ {{ 0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,
- 0xff,0x80,0x00,0x00 }},
-/* /106 */ {{ 0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,
- 0xff,0xc0,0x00,0x00 }},
-/* /107 */ {{ 0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,
- 0xff,0xe0,0x00,0x00 }},
-/* /108 */ {{ 0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,
- 0xff,0xf0,0x00,0x00 }},
-/* /109 */ {{ 0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,
- 0xff,0xf8,0x00,0x00 }},
-/* /110 */ {{ 0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,
- 0xff,0xfc,0x00,0x00 }},
-/* /111 */ {{ 0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,
- 0xff,0xfe,0x00,0x00 }},
-/* /112 */ {{ 0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,
- 0xff,0xff,0x00,0x00 }},
-/* /113 */ {{ 0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,
- 0xff,0xff,0x80,0x00 }},
-/* /114 */ {{ 0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,
- 0xff,0xff,0xc0,0x00 }},
-/* /115 */ {{ 0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,
- 0xff,0xff,0xe0,0x00 }},
-/* /116 */ {{ 0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,
- 0xff,0xff,0xf0,0x00 }},
-/* /117 */ {{ 0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,
- 0xff,0xff,0xf8,0x00 }},
-/* /118 */ {{ 0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,
- 0xff,0xff,0xfc,0x00 }},
-/* /119 */ {{ 0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,
- 0xff,0xff,0xfe,0x00 }},
-/* /120 */ {{ 0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0x00 }},
-/* /121 */ {{ 0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0x80 }},
-/* /122 */ {{ 0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xc0 }},
-/* /123 */ {{ 0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xe0 }},
-/* /124 */ {{ 0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xf0 }},
-/* /125 */ {{ 0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xf8 }},
-/* /126 */ {{ 0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xfc }},
-/* /127 */ {{ 0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xfe }},
-/* /128 */ {{ 0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff }},
-}};
-
} // folly