Subversion Repositories vgwhois

Compare Revisions

No changes between revisions

Regard whitespace Rev 1 → Rev 2

/trunk/_todo/INFO
0,0 → 1,3
 
Fork of gwhois 20120626-1.2
 
/trunk/_todo/INSTALL
0,0 → 1,29
 
Manual installation:
 
1. Copy etc/* into /etc/gwhois/
2. Copy bin/* into /usr/bin/
3. Copy man/* into /usr/share/man/
4. Copy share/* into /usr/share/gwhois/
5. Create directories:
- /var/cache/gwhois/
- /var/cache/gwhois/maintenance/
- /var/cache/gwhois/maintenance/pattern-generator/
- /var/cache/gwhois/maintenance/qa-monitor/
- /var/cache/gwhois/maintenance/whois-server-ping/
 
 
gwhois needs:
 
- perl (used by gwhois main program. used by 6to4 and Teredo subprogram)
- libwww-perl (cpan LWP::Simple; used by gwhois main program)
- libnet-libidn-perl (cpan Net::LibIDN; used by gwhois main program)
commented out: - libencode-detect-perl (cpan Encode::Detect; used by gwhois main program)
- curl (used by some parts of the gwhois main program. used by pattern generator and subprograms)
- lynx-cur (used by some parts of the gwhois main program)
- libnet-ip-perl (cpan Net::IP; used for IPv6 interpretation by Teredo subprogram and gwhois main program)
- libnet-dns-perl (cpan Net::DNS; used by Teredo subprogram)
- libmath-bigint-gmp-perl (cpan Math::BigInt; used for IPv6 masking by gwhois main program)
- php5-cli (used by subprograms and pattern-generator)
- php5-gmp (used by IPv6 pattern generator)
- netcat (used by the whois-ping maintainance program)
/trunk/_todo/TODO_HOLZT
0,0 → 1,16
- make a Perl module (CPAN)
 
- replace lynx -dump with CTAN::LWP::http and selfwritten descambler
 
- do not collect the result first but (optionally) print it in time
to give a better response on low connections.
 
- caching the results in an external SQL database
 
- Adding $confdir/config for all those pathnames
 
- extended options of the ripe whoisd
 
- introduce a comprehensive documentation
 
- whois.ripe.net and option -k considered dangerous
/trunk/_todo/TODO_VTS
0,0 → 1,52
*.po files noch aktuell?
 
alle TODOS in /usr/bin/gwhois abarbeiten
 
packages aufsplitten
-- eigenes fork: "globalwhois"
paket: client
paket: maintainance tools (automatisches updaten der DB)
paket: developer tools (+QA)
achtung: maintainance ist abhängig von viathinksoft IANA watcher...
-- debian kontaktieren bzgl. möglichkeiten eines forks oder maintainer übernehmen
wenn als eigenständiges package: dann gwhois als konflikt-paket kennzeichnen
 
testcases system aufbauen
... alle patterns systematisch testen und bewerten.
... es gibt teilweise probleme beim highlighting
 
herausfinden, welche GPL-Version verwendet werden soll
 
lintian anwenden. im taeglichen QA.
 
_debian_check_rules: pruefen ob es dateien doppelt gibt
 
vts oids publiziern
 
RIR bugreports
 
dpkg-gencontrol: warning: File::FcntlLock not available; using flock which is not NFS-safe
> https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=677865
> libfile-fcntllock-perl
--> nur beim builder oder auch beim client benötigt?
 
beim update von einem alten gwhois würde der benutzer möglicherweisdie pattern file beibehalten. das wäre kontraproduktiv
 
was mache ich mit dem "INSTALL" file? ich will doch auch dass leute die .tar.gz für andere betriebssysteme nutzen können
 
maschinenlesbares copyright: Welchen Pfad soll ich bei "files:" verwenden? debian/ oder usr/ ?
 
fut: ganz von php wegkommen?
 
alle dateien: gpl-2-only im header eintragen... das ist wahrscheinlich, was Michael Holzt wollte
 
(nn) Core: automatsich "\n\n" nach jeder ausgabe von www oder einem subprogramm einfügen?
 
fehler alle in stderr printen
 
benötigtes paket: netcat-traditional, netcat oder netcat-openbsd, netcat6
ich brauche den befehl "nc"
 
pattern-generator
bei existierenden domains: wenn whois server sich ändert, die alten einträge auskommentieren und den neuen eintrag einfügen
 
/trunk/_todo/changelog
0,0 → 1,677
gwhois (20120626.1.2+viathinksoft2017XXXX) unstable; urgency=medium
 
* Non-maintainer upload. / Fork
* Changed previous version numbers: Replaced minus (-) with dot (.),
because minus is used to separate Upstream and Debian versions
* (TODO: list all changes of ViaThinkSoft here)
 
-- Daniel Marschall <info@daniel-marschall.de> Wed, 26 Jul 2017 06:00:00 +0200
 
gwhois (20120626-1.2) unstable; urgency=medium
 
* Non-maintainer upload.
* Fix "please switch Depends from lynx-cur to lynx":
do as the bug report requests.
(Closes: #881058)
 
-- gregor herrmann <gregoa@debian.org> Wed, 15 Nov 2017 16:44:51 +0100
 
gwhois (20120626-1.1) unstable; urgency=medium
 
* Non-maintainer upload.
* Fix "fails with perl 5.26: The encoding pragma is no longer
supported at /usr/bin/gwhois line 80.":
drop 'use encoding' statement.
(Closes: #867046)
 
-- gregor herrmann <gregoa@debian.org> Sat, 15 Jul 2017 01:12:47 +0200
 
gwhois (20120626-1) unstable; urgency=medium
 
* Documentation fixes.
 
-- Juliane Holzt <debian@julijane.de> Fri, 17 Apr 2015 23:32:01 +0200
 
gwhois (20120626) unstable; urgency=low
 
* Fixed .je and .gg lookups (closes Ubuntu Bug 339912)
* Fixed .gl lookups (closes Bug#626339)
* Fixed .co lookups (closes Bug#642228)
* Updated IPv4 'final' RIR allocations (closes Bug#628554, closes: Bug#603518)
* Acknowledgment: Changed package as before was actually prepared by Peter Schwindt. Tnx.
* Updated to Standard-Version 3.9.3
* Added build-arch and build-indep targets in rules
 
-- Juliane Holzt <debian@julijane.de> Tue, 26 Jun 2012 17:33:58 +0200
 
gwhois (20100728+nmu1) unstable; urgency=low
 
* Non-maintainer upload.
* Fix pending l10n issues. Debconf translations:
- Brazilian Portuguese (Flamarion Jorge). Closes: #594644
- Vietnamese (Clytie Siddall). Closes: #598563
- Dutch; (Jeroen Schot). Closes: #629386
- Slovak (Slavko). Closes: #636799
- Italian (Francesca Ciceri). Closes: #658193
- Polish (Michał Kułach). Closes: #663688
 
-- Christian Perrier <bubulle@debian.org> Mon, 25 Jun 2012 19:07:39 +0200
 
gwhois (20100728) unstable; urgency=low
 
* add "last update of whois database" line to output from verisign-grs
* updated/fixed ipv4 netblock lists
 
-- Juliane Holzt <debian@julijane.de> Wed, 28 Jul 2010 16:35:23 +0200
 
gwhois (20100727) unstable; urgency=low
 
* Updated debconf template translations: ru (closes: Bug#581866),
pt (closes: Bug#581958), cs (closes: Bug#581993),
ja (closes: Bug#582303), es (closes: Bug#583342),
fr (closes: Bug#583786), sv (closes: Bug#586820),
sv (closes: Bug#589857)
* 2a00:: is ripe, also fixed ipv6 pattern in whole (closes: Bug#585072)
* fixed ARIN lookups
 
-- Juliane Holzt <debian@julijane.de> Tue, 27 Jul 2010 16:47:01 +0200
 
gwhois (20100515) unstable; urgency=low
 
* Various debian related fixes (policy etc.)
* Moved "openbsd-inetd | inet-superserver" from Recommends to
Suggests, report missing in postinst if necessary (closes: Bug#513304)
* Removed charset parameter from DENIC queries, convert parameter
charset, use libidn for punycode encoding of queried multilingual
domains (closes: Bug#567834)
* Applied manpage fixes (closes: Bug#551758)
* Added russian debconf template (closes: Bug#546344)
 
-- Juliane Holzt <debian@julijane.de> Sat, 15 May 2010 23:23:41 +0200
 
gwhois (20090717.1) unstable; urgency=low
 
* Added .tel whois (closes: Bug#524675)
 
-- Juliane Holzt <debian@julijane.de> Fri, 17 Jul 2009 15:30:58 +0200
 
gwhois (20081227) unstable; urgency=low
 
* Corrected lynx dependency to lynx-cur (closes: Bug#509928)
 
-- Juliane Holzt <debian@julijane.de> Sat, 27 Dec 2008 21:18:22 +0100
 
gwhois (20081019) unstable; urgency=low
 
* Throw error on empty query string.
 
-- Juliane Holzt <debian@julijane.de> Sun, 19 Oct 2008 20:49:48 +0200
 
gwhois (20080925) unstable; urgency=low
 
* Changed .by URL, same unhelpful output as before (closes: Bug#500042)
 
-- Juliane Holzt <debian@julijane.de> Thu, 25 Sep 2008 13:26:13 +0200
 
gwhois (20080716) unstable; urgency=low
 
* Verbose output for .name, tnx John McGowan
 
-- Juliane Holzt <debian@julijane.de> Wed, 16 Jul 2008 21:54:48 +0200
 
gwhois (20080626) unstable; urgency=low
 
* Fixed .ms, tnx Uwe Sinha (closes: Bug#488093)
 
-- Juliane Holzt <debian@julijane.de> Thu, 26 Jun 2008 20:52:18 +0200
 
gwhois (20080219.1) unstable; urgency=low
 
* Ignore .orig and .dpkg-new pattern files
 
-- Juliane Holzt <debian@julijane.de> Tue, 19 Feb 2008 14:06:36 +0100
 
gwhois (20080219) unstable; urgency=low
 
* Added SIXXS-handles, tnx Christian Seitz (closes: Bug#458470)
* Modified/Fixed .af, .ai, .an, .az, .bi, .cf, .ci, .cl, .dk, .ec, .eg, .fj,
.gd, .ge, .gi, .gm, .gn, .gp, .gs, .gy, .hn, .hr, .ir, .ki, .kz, .la, .lc,
.lk, .ly, .ma, .mc, .mg, .mm, .mn, .mr, .ms, .mt, .mu, .nc, .nf, .pl, .pm,
.pw, .py, .sc, .sd, .sm, .sn, .sr, .sv, .tc, .tg, .tl, .tm, .uy, .uz, .vc,
.ve, .vn, .ws, .jobs, .mil, .travel
* Added .arpa, .asia (yet defunct), .tel (no whois) and Subdomain-Whois
of Centralnic for certain subdomains under .com., .net and .org (e.g.
gb.net).
* Removed .cs
 
-- Juliane Holzt <debian@julijane.de> Tue, 19 Feb 2008 11:42:29 +0100
 
gwhois (20071030) unstable; urgency=low
 
* Fixed .im (closes: Bug#448661)
* Added brasilian portuguese translation (closes: Bug#447874)
 
-- Juliane Holzt <debian@julijane.de> Tue, 30 Oct 2007 23:19:37 +0100
 
gwhois (20070926) unstable; urgency=low
 
* Added .me (closes: Bug#444198), added .kp, changed .rs
 
-- Juliane Holzt <debian@julijane.de> Wed, 26 Sep 2007 21:28:39 +0200
 
gwhois (20070906) unstable; urgency=low
 
* Changed dependency on netbase/update-inetd to inet-superserver/
openbsd-inetd
 
-- Juliane Holzt <debian@julijane.de> Wed, 5 Sep 2007 23:59:41 +0200
 
gwhois (20070905) unstable; urgency=low
 
* TLD .va is now included in the ripe database, tnx Mark Thomas
* included portuguese translation, tnx Americo Monteiro (closes: Bug#435729)
* included spanish translation, tnx Rudy Godoy Guillen (closes: Bug#426174)
 
-- Juliane Holzt <debian@julijane.de> Wed, 5 Sep 2007 18:09:50 +0200
 
gwhois (20070903) unstable; urgency=low
 
* made output from verisign-grs more verbose
 
-- Juliane Holzt <debian@julijane.de> Mon, 3 Sep 2007 21:15:28 +0200
 
gwhois (20070822) unstable; urgency=low
 
* Fixed .de (AGAIN due to a subtile change of the whois service)
 
-- Juliane Holzt <debian@julijane.de> Wed, 22 Aug 2007 23:28:32 +0200
 
gwhois (20070403) unstable; urgency=low
 
* Fixed .de
 
-- Juliane Holzt <debian@julijane.de> Tue, 3 Apr 2007 18:30:56 +0200
 
gwhois (20070222) unstable; urgency=low
 
* Fixed/Updated .as
 
-- Juliane Holzt <debian@julijane.de> Thu, 22 Feb 2007 11:30:04 +0100
 
gwhois (20070218) unstable; urgency=low
 
* Fixed .co and .pk
 
-- Juliane Holzt <debian@julijane.de> Sun, 18 Feb 2007 13:22:56 +0100
 
gwhois (20070217.1) unstable; urgency=low
 
* Handles ending on '-ap' are APNIC (closes: Bug#411248)
 
-- Juliane Holzt <debian@julijane.de> Sat, 17 Feb 2007 14:29:35 +0100
 
gwhois (20070217) unstable; urgency=low
 
* 116/6, 120/8 new to APNIC
* added redirect modifier feature (see readme.ripe) (closed: Bug#404622)
 
-- Juliane Holzt <debian@julijane.de> Sat, 17 Feb 2007 00:09:08 +0100
 
gwhois (20070112) unstable; urgency=low
 
* Added lookup for four byte AS numbers (e.g. AS3.1) (closes: Bug#406070)
 
-- Juliane Holzt <debian@julijane.de> Fri, 12 Jan 2007 14:25:07 +0100
 
gwhois (20061206) unstable; urgency=low
 
* Broadened regex for lim- (RIPE), added poem- (RIPE) (closes: Bug#401542)
 
-- Juliane Holzt <debian@julijane.de> Wed, 6 Dec 2006 22:47:42 +0100
 
gwhois (20061202) unstable; urgency=low
 
* Added a new query method 'multiple' for doing multiple lookups for
one query. This is used for .vg which provides complementing data
via CGI _and_ via WHOIS.
* Also fixed CGI-URL for .vg, tnx VT100 (closes: Bug#401339)
 
-- Juliane Holzt <debian@julijane.de> Sat, 2 Dec 2006 19:48:48 +0100
 
gwhois (20061113) unstable; urgency=low
 
* Fixed .info, tnx Stefan Schmidt (closes: Bug#397899)
 
-- Juliane Holzt <debian@julijane.de> Fri, 10 Nov 2006 12:18:51 +0100
 
gwhois (20061002) unstable; urgency=low
 
* .mobi now has a whois server
 
-- Juliane Holzt <debian@julijane.de> Mon, 2 Oct 2006 22:54:53 +0200
 
gwhois (20060928) unstable; urgency=low
 
* Removed debconf notice (considered debconf abuse) about ERX-list
removal, was described in README.upgrade anyway (closes: Bug#388901)
* Changed README.upgrade into NEWS.Debian
* 196/8 now complete Afrinoc (tnx MarcL)
* 77/8, 78/8, 79/8 RIPE (new)
* 201/8, 189/8, 190/8 LACNIC (not new, shame on me)
* Fixed 122/6 -> 122/7, 124/7
* Moved call to update-inetd from postrm to prerm, modified script
to only call update-inetd when inetd-installation was selected
through debconf (closes: Bug#388654)
* Changed dependency on "netbase" to "update-inetd | netbase"
* Changed build-depends-indep to build-depends, thanks to Arjan Oosting
for pointing this out
* Fixed debconf translation handling
 
-- Juliane Holzt <debian@julijane.de> Thu, 28 Sep 2006 17:46:41 +0200
 
gwhois (20060419) unstable; urgency=low
 
* The "i-should-have-done-this-much-earlier" Release. Sorry folks.
* Added .eu (closes: Bug#351793)
* Fixed .il (closes: Bug#355039)
* Added extensive list of ip networks transfered to AFRINIC, many tnx to Axel Rau
* Added .cat, .mobi
* Added 89/8, 90/8, 91/8 to RIPE
* Added 58/7, 121/8, 122/6, 126/8, 169.208/12, 196.192/13 to APNIC
* Added swedish translation. Thanks Daniel Nylander. (closes: Bug#339762)
 
-- Juliane Holzt <debian@julijane.de> Wed, 19 Apr 2006 19:12:23 +0200
 
gwhois (20050925.1) unstable; urgency=low
 
* fixup, also added README.RIPE
* pattern file does no longer use 'ipprefix' and 'noipprefix' but only 'prefix'
 
-- Juliane Holzt <debian@julijane.de> Sun, 25 Sep 2005 21:22:00 +0200
 
gwhois (20050925) unstable; urgency=low
 
* fixed/updated .com, .net, .org, .ae, .az, .ly, .pr, .jp (closes: Bug#323569)
* added .jobs, .travel, .eu, 2a01::/23 (closes: Bug#318382)
* added lookup 'tld xx' (shows information from iana about a tld)
* added debconf translations
- Vietnamese. Thanks Clytie Siddall. (closes: Bug#309335)
- Czech. Thanks Miroslav Kure. (closes: Bug#310260)
- French. Thanks Jean-Christophe Champarnaud. (closes: Bug#238087)
- Danish. Thanks Morten Brix Pedersen. (closes: Bug#288294)
- German. Finally done it myself. (closes: Bug#253193, Bug#288206)
* query string is no longer forced lower case (closed: Bug#324669)
 
-- Juliane Holzt <debian@julijane.de> Sun, 25 Sep 2005 20:26:49 +0200
 
gwhois (20050115) unstable; urgency=low
 
* Added -q parameter to curl invocation, following a suggestion by
John McGowan (problem is, that --insecure is a toggle, and might
have been toggled already to on by ~/.curlrc)
* Added output of version
 
-- Juliane Holzt <debian@julijane.de> Sat, 15 Jan 2005 10:48:49 +0100
 
gwhois (20050114) unstable; urgency=low
 
* Explicit rule for .com and .net
* added gandi handles, fixed .cr (closes: Bug#239259)
* added irt handles (closes: Bug#239768)
* added pgpkey objects (closes: Bug#239780)
* 80/6,84/8 -> 80/5,88/8 ripe (close: Bug#243149)
* fltr objects (closes: Bug#249312)
* edu added (closes: Bug#255576)
* fixed .pe (closes: Bug#264794)
* fixed .tv (again, suckers!) (closes: Bug#267745)
* get rid of erx tables (closes: Bug#243148)
* Added debconf translations (tnx to bubulle for help)
- Japanese. Thanks Hideki Yamane. (closes: Bug#271112)
- Dutch. Thanks Luk Claes. (closes: Bug#263595)
* Replaced POTFILES.in by the correct file pointing to the templates
master file
* Removed 200.10.4/22, 210.17/16, 210.18/15 and 210.20/16
from registro.br, now at apnic and twnic
* Changed .tj
* Added IPv6 assignments
* A lot of changes and additions (took me 15 hours):
- fixed/updated
.ac, .ar, .cd, .co, .cu, .ee, .fi, .ge,
.gs, .gt, .ht, .in, .im, .io, .ir, .lk,
.lv, .mn, .ms, .mw, .my, .nu, .nz, .pa,
.pk, .rw, .se, .sh, .tf, .tm, .tr, .tt,
.tw, .ua, .ug, .uk, .uz
- added
.ai, .ao, .bb, .bd, .bg, .bh, .bi, .bj,
.bm, .bo, .bs, .bt, .by, .bz, .cg, .cv,
.cy, .dm, .do, .dz, .fj, .fm, .fo, .gg,
.gi, .gl, .gm, .gr, .id, .il, .it, .je,
.jo, .ke, .kg, .ki, .kw, .ky, .kz, .la,
.lt, .md, .mt, .mu, .na, .nf, .nr, .om,
.ph, .pn, .py, .re, .ro, .sa, .sb, .si,
.sk, .sr, .tg, .th, .tn, .ve, .wf, .yt,
.yu, .zw, .int, .pro
- added notice
.ad, .ae, .an, .aq, .aw, .ax, .az, .ba,
.bf, .bv, .bw, .cf, .ci, .cm, .cs, .dj,
.eg, .eh, .er, .et, .fk, .ga, .gf, .gh,
.gn, .gp, .gq, .gu, .gw, .gy, .hn, .hr,
.iq, .jm, .kh, .km, .kn, .lr, .ls, .ly,
.ma, .mc, .mg, .mh, .mk, .ml, .mo, .mp,
.mq, .mr, .mv, .mz, .nc, .ne, .ni, .pf,
.pg, .pm, .pr, .qa, .sc, .sd, .sj, .sl,
.sm, .sn, .so, .sv, .sy, .sz, .td, .tm,
.tp, .va, .vc, .ye, .za, .zm
- removed
ml.org
 
-- Juliane Holzt <debian@julijane.de> Fri, 14 Jan 2005 22:38:20 +0100
 
gwhois (20040308.2) unstable; urgency=low
 
* -mnt and lim- are queried at ripe
 
-- Juliane Holzt <debian@julijane.de> Mon, 8 Mar 2004 00:42:38 +0100
 
gwhois (20040308.1) unstable; urgency=low
 
* stupid mistake (193/7 => 193/8,194/8)
 
-- Juliane Holzt <debian@julijane.de> Mon, 8 Mar 2004 00:31:46 +0100
 
gwhois (20040307.2) unstable; urgency=low
 
* Unclear problem
 
-- Juliane Holzt <debian@julijane.de> Sun, 7 Mar 2004 02:32:05 +0100
 
gwhois (20040307.1) unstable; urgency=low
 
* changed IP address handling code totally, will now use CIDR blocks
* autoconverted ERX listings by ARIN (20040305)
* fixed bad sentence by rephrasing (closes: Bug#236121)
* added suggested fix for helping backporters (closes: Bug#236120)
* query 'ipas a.b.c.d' will ask team cymru whois (closed: Bug#212806)
 
-- Juliane Holzt <debian@julijane.de> Sun, 7 Mar 2004 01:34:46 +0100
 
gwhois (20040303.4) unstable; urgency=low
 
* Fixed output of handle query arguments (closes: Bug#236003)
 
-- Juliane Holzt <debian@julijane.de> Wed, 3 Mar 2004 20:40:30 +0100
 
gwhois (20040303.3) unstable; urgency=low
 
* Fixed 80 - 84/8 (closes: Bug#235979)
 
-- Juliane Holzt <debian@julijane.de> Wed, 3 Mar 2004 17:53:40 +0100
 
gwhois (20040303.2) unstable; urgency=low
 
* Now can handle server referral by ARIN for ERX-IPs (closes: Bug#176504)
 
-- Juliane Holzt <debian@julijane.de> Wed, 3 Mar 2004 15:23:45 +0100
 
gwhois (20040303.1) unstable; urgency=low
 
* Integrated smaller fixes and changes done by lutz.
* Removed special code for publicinterestregistry, as
* transition is over, and referrers are nolonger used.
* Changed handling code for generic whois, can now take
* some parameters, removing need for special cases.
* publicinterestregistry (.org) now back to normal whois
* pattern changes for new generic whois handling code
* added idn-parameters for denic (closes: Bug#235086)
* added whois-servers.net as last resort (tnx lutz)
* changed corenic handle (closes: Bug#208866)
* .va fixed (closes: Bug#225032)
* added some blocks to RIPE (closes: Bug#225037)
* added some more blocks to RIPE (closes: Bug#226178)
* added dependency on netbase (closes: Bug#223334)
* changed copyright file as suggestes by aba
 
-- Juliane Holzt <debian@julijane.de> Wed, 3 Mar 2004 13:40:51 +0100
 
gwhois (20030729.1) unstable; urgency=low
 
* Changes to .org-Registry
 
-- Juliane Holzt <debian@julijane.de> Tue, 29 Jul 2003 16:24:39 +0200
 
gwhois (20030625.2) unstable; urgency=low
 
* .cc now REAL fixed :-)
* whois.nic-se.se has incomplete data, changed for cgi
 
-- Juliane Holzt <debian@julijane.de> Wed, 25 Jun 2003 13:20:29 +0200
 
gwhois (20030625.1) unstable; urgency=low
 
* 192.109/16 now queried at ripe (arin has totally outdated data!)
* added 60/8 and removed 223/8 (apnic) [provided by lutz]
* fixed .as (closes: Bug#195065) and .cc (closes: Bug#196991)
* fixed handling of dpkg-old pattern files (closes: Bug#179040)
* Moved /etc/gwhois/debconf.inc to /etc/default/gwhois
 
-- Juliane Holzt <debian@julijane.de> Wed, 25 Jun 2003 02:14:46 +0200
 
gwhois (20030127.2) unstable; urgency=low
 
* Minor fixes.
 
-- Juliane Holzt <debian@julijane.de> Mon, 27 Jan 2003 18:27:28 +0100
 
gwhois (20030127.1) unstable; urgency=low
 
* Special treatment for severe broken .org registry (closes: Bug#178603)
* Once again: Depends on Lynx. (closes: Bug#154161)
 
-- Juliane Holzt <debian@julijane.de> Mon, 27 Jan 2003 18:17:15 +0100
 
gwhois (20030126.1) unstable; urgency=low
 
* Many thanks for contributions by f2u and cord.
*
* Add "+" for IP address queries to ARIN whois. Support multiple
* pattern files.
* Small workaround for whois-servers that return ^M.
* added .coop-whois
* added 192.114.0.0 - 192.118.255.255 (RIPE)
* added 147.233.0.0 - 147.237.255.255 (RIPE)
* added 156.35.0.0 - 156.35.255.255 (RIPE)
* Mark ARIN WHOIS.
* added 82.0.0.0 - 82.255.255.255 to RIPE
* fixed .lu (closes: Bug#170816)
* (closes: Bug#164375) (cord)
* 203.0.0.0 - 203.63.255.255 moved from aunic to apnic.
* (closes: Bug#166748)
* 210.8.0.0 - 210.11.255.255 is at whois.connect.com.au.
* JAPANESE IPs:
* added 61.192.0.0 - 61.215.255.255 (closes: Bug#148534,
* closes: Bug#165104)
* added 202.208.0.0 - 202.255.255.255 (closes: Bug#165406)
* added 203.136.0.0 - 203.141.255.255
* added 210.136.0.0 - 210.159.255.255
* added 210.188.0.0 - 210.191.255.255
* added 210.196.0.0 - 210.199.255.255
* added 210.224.0.0 - 210.239.255.255 (closes: Bug#138881)
* added 211.8.0.0 - 211.19.255.255 (closes: Bug#165587)
* added 211.120.0.0 - 211.135.255.255
* added 218.40.0.0 - 218.47.255.255
* added 218.216.0.0 - 218.231.255.255
* KOREAN IPs:
* added 61.248.0.0 - 61.255.255.255 (closes: Bug#164376)
* added 203.245.0.0 - 203.255.255.255 (closes: Bug#138718)
* added 210.90.0.0 - 210.91.255.255
* added 210.97.192.0 - 210.135.255.255
* added 210.220.0.0 - 210.223.255.255 (closes: Bug#141594)
* added 211.32.0.0 - 211.63.255.255 (closes: Bug#138717,
* closes: Bug#150750, closes: Bug#165587)
* added 211.168.0.0 - 211.171.255.255
* added 211.226.0.0 - 211.231.255.255 (closes: Bug#138953)
* added 218.36.0.0 - 218.39.255.255
* added 218.48.0.0 - 218.55.255.255
* added 218.144.0.0 - 218.159.255.255
* added 218.232.0.0 - 218.239.255.255
* added 220.72.0.0 - 220.87.255.255
* TAIWAN IPs:
* added 61.216.0.0 - 61.231.255.255 (closes: Bug#165105)
* added 210.17.0.0 - 210.17.127.255
* added 210.59.0.0 - 210.63.255.255
* added 210.65.0.0 - 210.67.255.255
* added 210.70.0.0 - 210.71.255.255
* added 211.20.0.0 - 211.23.255.255 (closes: Bug#165587)
* added 211.72.0.0 - 211.72.255.255
* added 211.75.0.0 - 211.75.255.255 (closes: Bug#165587)
* added 218.32.0.0 - 218.32.255.255
* added 218.160.0.0 - 218.165.255.255
* APNIC
* added 219.0.0.0 - 221.255.255.255
* NIC for Latin American and Caribbean
* added 200.0.0.0 - 200.255.255.255 (closes: Bug#158859)
* RIPE (closes: Bug#152090)
* added 129.11.0.0 - 129.13.255.255
* added 129.16.0.0 - 129.16.255.255
* added 129.20.0.0 - 129.20.255.255
* added 129.26.0.0 - 129.27.255.255
* added 129.31.0.0 - 129.31.255.255
* added 129.35.0.0 - 129.35.255.255
* added 129.67.0.0 - 129.67.255.255
* added 129.69.0.0- 129.70.255.255
* added 129.73.0.0 - 129.73.255.255
* added 129.88.0.0 - 129.88.255.255
* added 129.102.0.0 - 129.104.255.255
* added 129.125.0.0 - 129.125.255.255
* added 129.129.0.0 - 129.129.255.255
* added 129.132.0.0 - 129.132.255.255
* added 129.142.0.0 - 129.143.255.255
* added 129.159.0.0 - 129.159.3.255
* added 129.169.0.0 - 129.169.255.255
* added 129.175.0.0 - 129.175.255.255
* added 129.177.0.0 - 129.178.255.255
* added 129.181.0.0 - 129.185.255.255
* added 129.187.0.0 - 129.187.255.255
* added 129.194.0.0 - 129.195.255.255
* added 129.199.0.0 - 129.199.255.255
* added 129.206.0.0 - 129.206.255.255
* added 129.214.0.0 - 129.215.255.255
* added 129.217.0.0 - 129.217.255.255
* added 129.226.0.0 - 129.227.255.255
* added 129.233.0.0 - 129.234.255.255
* added 129.240.0.0 - 129.242.255.255
* added 129.247.0.0 - 129.247.255.255
* whois-server for .ac.uk and .gov.uk added. (closes: Bug#166785)
* whois-server for .pl added. (closes: Bug#164737)
* RIPE is also responsible for Gambia .gm
* .ar switched urls for requests. (closes: Bug#163210)
* .cl now has a real whois-server.
* .dk has a real whois-server again. (closes: Bug#163181)
* .ec is available through a web interface.
* .es switched urls for requests.
* .kr new address for whois-server.
* .name has also an whois-server.
* .pk switched urls for requests.
* .su has a whois-server. (closes: Bug#165610)
* .tw has a whois-server. (closes: Bug#163296)
* .co.za has a whois-server. (closes: Bug#149182)
* .tk has a whois-server. (closes: Bug#165614)
* .ag is now handled by a real whois server
 
-- Juliane Holzt <debian@julijane.de> Sun, 26 Jan 2003 00:33:07 +0100
 
gwhois (20020314.4) unstable; urgency=low
 
* fixed trailing spaces after some $-signs
* KOREAN IPs:
* added 210.100.0.0 - 210.103.255.255 (closes: Bug#135341)
* added 210.204.0.0 - 210.207.255.255 (closes: Bug#135399)
* added 210.116.0.0 - 210.213.255.255 (closes: Bug#135470)
* added 61.78.0.0 - 61.85.255.255 (closes: Bug#136303)
* added 211.32.0.0 - 211.39.255.255 (closes: Bug#136333)
* added 210.96.0.0 - 210.97.191.255 (closes: Bug#136631)
* added 210.178.0.0 - 210.183.255.255 (closes: Bug#137599)
* added 211.212.0.0 - 211.215.255.255 (closes: Bug#137724)
* APNIC:
* added 218.0.0.0 - 218.255.255.255 (closes: Bug#137386)
 
-- Juliane Holzt <debian@julijane.de> Thu, 14 Mar 2002 22:44:02 +0100
 
gwhois (20020217.3) unstable; urgency=low
 
* added 203.224 - 203.244 to KRNIC (close: Bug#130307)
* added 211.104 - 211.119 to KRNIC
* added 210.92 - 210.95 to KRNIC
* added 211.232 - 211.255 to KRNIC
* added 61.96 - 61.112 to KRNIC
 
-- Juliane Holzt <debian@julijane.de> Sun, 17 Feb 2002 23:26:03 +0100
 
gwhois (20020217.2) unstable; urgency=low
 
* added .hk (closes: Bug#131390)
* added 211.0/13 to JPNIC (closes: Bug#134148)
* added 211.21/16 to TWNIC (closes: Bug#132727)
* added .to (closes: Bug#132634)
* added 211.172 - 211.199 to KRNIC (closes: Bug#130307)
 
-- Juliane Holzt <debian@julijane.de> Sat, 17 Feb 2002 15:34:39 +0100
 
gwhois (20020120.1) unstable; urgency=low
 
* Added .biz and .info
 
-- Juliane Holzt <debian@julijane.de> Sun, 20 Jan 2002 00:16:39 +0100
 
gwhois (20020117.2) unstable; urgency=low
 
* Added debconf question regarding addition to inetd.conf
* Added debconf question regarding sending mail (closes: Bug#129870)
 
-- Juliane Holzt <debian@julijane.de> Fri, 18 Jan 2002 23:20:46 +0100
 
gwhois (20020117.1) unstable; urgency=low
* Added 210.248/13 = jpnic (closes: Bug#129489)
* Added 211.216/13 = krnic (closes: Bug#126637)
* Added 61.72 - 77 = krnic (closes: Bug#119200)
* Updated query to dknic (closes: Bug#129026)
* added ripe blocks 80/81
* Reports when query failed (closes: Bug#122535)
 
-- Juliane Holzt <debian@julijane.de> Thu, 17 Jan 2002 13:49:17 +0100
 
gwhois (20010312.2) unstable; urgency=low
 
* Depends on lynx changed to suggests. (closes: Bug#85595, Bug#99424)
 
-- Juliane Holzt <debian@julijane.de> Sun, 10 Jun 2001 21:27:46 +0200
 
gwhois (20010312.1) unstable; urgency=low
 
* Updated pattern
* Added depends for lynx (closed #85595)
 
-- Juliane Holzt <debian@julijane.de> Sun, 27 May 2001 15:39:10 +0200
 
gwhois (20001208.3) unstable; urgency=low
 
* Fixed a typo (closes #81340)
 
-- Juliane Holzt <debian@julijane.de> Fri, 5 Jan 2001 21:42:10 +0100
 
gwhois (20001208.2) unstable; urgency=low
 
* Fixed a bug in the rules script (closes #80962)
 
-- Juliane Holzt <debian@julijane.de> Sun, 31 Dec 2000 17:15:50 +0100
 
gwhois (20001208.1) unstable; urgency=low
 
* Initial Release.
 
-- Juliane Holzt <debian@julijane.de> Sun, 10 Dec 2000 21:04:44 +0100
 
Local variables:
mode: debian-changelog
End:
/trunk/_todo/changelog_patterns
0,0 → 1,356
 
#
# generic Whois pattern table
#
# (c) 1998-2010 by Juliane Holzt
# includes contributions by Lutz Donnerhacke, Cord Beermann,
# Florian Weimer and other people. Many thanks.
#
# GWhois 2 is a fork of GWhois by ViaThinkSoft <info@viathinksoft.de>
#
#
# Distribution, usage etc. pp. regulated by the current version of GPL.
# Idea: Erik.Heinz@Jena.Thur.De
#
# Please drop me (debian@julijane.de) any additional records...
# (or file a bug against the debian gwhois package).
#
# History:
#
# 2014-11-27 mar LARGE REVISION OF THE WHOLE PATTERN FILE
# Fixed many, many entries
# Split up the pattern file into multiple pattern files.
# RIPE now shows e-mail-addresses using "-B" (but they are protected in the newest GWhoIs version!)
# Added TEREDO and 6to4 parser
# Added ERX records for IPv6 for APNIC
# Added ERX records for IPv4 according to the RIR's stats
# Added OID records (requires change in the gwhois binary)
# Changed all IPv4 and IPv6 allocations to the correct RIR using the pattern generator
# Instead of regular expressions for IPv6 addresses, a CIDR is now used (requires change in the gwhois binary)
# Added AS-Numbers in a new notation (requires change in the gwhois binary)
# Added support to enter IANA TLDs directly without "tld" prefix
# 2012-06-26 jule Fixed .je and .gg lookups (closes Ubuntu Bug 339912)
# Fixed .gl lookups (closes Bug#626339)
# Fixed .co lookups (closes Bug#642228)
# Updated IPv4 'final' RIR allocations (closes Bug#628554, closes: Bug#603518)
# 2010-07-28 jule updated ipv4 netblocks, added/fixed several
# 2010-07-27 jule fix arin queries, check and fix ipv6 queries
# (Debian Bug#585072)
# 2010-05-15 jule remove charset parameter from DENIC queries
# .pl now has a real whois server again
# 2009-09-01 jule .es has no longer a usable WHOIS (captcha needed)
# 2009-07-17 jule Added .tel whois (Debian Bug#524675)
# 2008-09-25 jule Changed .by URL, same unhelpful output as before
# (Debian Bug#500042)
# 2008-07-16 jule Verbose output for .name, tnx John McGowan
# 2008-06-26 jule Fixed .ms, tnx Uwe Sinha (Debian Bug#488093)
# 2008-02-19 jule Updates based on information by Bernd Hohmann and
# Rick Moen: modified/fixed .af, .ai, .an, .az, .bi,
# .cf, .ci, .cl, .dk, .ec, .eg, .fj, .gd, .ge, .gi,
# .gm, .gn, .gp, .gs, .gy, .hn, .hr, .ir, .ki, .kz,
# .la, .lc, .lk, .ly, .ma, .mc, .mg, .mm, .mn, .mr,
# .ms, .mt, .mu, .nc, .nf, .pl, .pm, .pw, .py, .sc,
# .sd, .sm, .sn, .sr, .sv, .tc, .tg, .tl, .tm, .uy,
# .uz, .vc, .ve, .vn, .ws, .jobs, .mil, .travel
# Added .arpa, .asia (yet defunct), .tel (no whois),
# Subdomain-Whois of Centralnic for certain subdomains
# under .com, .net and .org (e.g. gb.net), Removed .cs
# 2008-02-18 jule Added -sixxs (Debian Bug#458470, tnx Christian Seitz),
# 2007-10-30 jule Fixed .im, tnx VT100 (Debian Bug#448661)
# 2007-09-26 jule added .me (Debian Bug#444198), added .kp, changed .rs
# 2007-09-05 jule TLD .va is now included in RIPE database, tnx Mark
# Thomas
# 2007-08-22 jule Fixed .de again :-(
# 2007-04-03 jule Fixed .de :-(
# 2007-02-22 jule Modified/Fixed .as
# 2007-02-18 jule Fixed .co and .pk, tnx John McGowan for hints
# 2007-02-17 jule Handles ending on '-ap' at apnic
# 2007-02-16 jule 116/6, 120/8 new to APNIC, added redirect default
# 2007-01-12 jule Added lookup for four byte AS numbers (e.g. AS3.1)
# (Debian Bug#406070)
# 2006-12-06 jule Broadened regex for lim- (RIPE), added poem- (RIPE).
# (Debian Bug#401542)
# 2006-12-02 jule Fixed web lookup for .vg, also added additional query
# of .vg whois server which gives some more information
# (see also new method 'multiple'). Tnx to VT100 for
# hint about changed URL. (Debian Bug#401339)
# 2006-11-13 jule Fixed .info, tnx Stefan Schmidt (Debian Bug#397889)
# 2006-10-02 jule .mobi now has a whois server (tnx MarcL for hint)
# 2006-09-20 jule 196/8 now complete Afrinoc (tnx MarcL)
# 77/8, 78/8, 79/8 RIPE (new)
# 201/8, 189/8, 190/8 LACNIC (not new, shame on me)
# Fixed 122/6 -> 122/7, 124/7 (me = Idiot)
# 2006-04-19 jule Added .eu (Debian Bug#351793)
# Fixed .il (Debian Bug#355039)
# Added extensive list of ip networks transfered
# to AFRINIC, many tnx to Axel Rau
# Added .cat, .mobi
# Added 89/8, 90/8, 91/8 to RIPE
# Added 58/7, 121/8, 122/6, 126/8, 169.208/12, 196.192/13 to APNIC
# Added 202.123/19 to AFRINIC
# 2005-09-25 jule Fixed/Update .com, .net, .org, .ae, .az, .ly,
# .pr, .jp (Debian Bug#323569)
# Added .jobs, .travel, .eu, 2a01::/23 (Debian Bug#318382)
# Added lookup 'tld xx' (shows information from iana about a tld)
# 2005-01-15 jule Added version string
# 2005-01-14 jule A lot of changes and additions (took me 15 hours):
#
# fixed/updated
# .ac, .ar, .cd, .co, .cu, .ee, .fi, .ge,
# .gs, .gt, .ht, .in, .im, .io, .ir, .lk,
# .lv, .mn, .ms, .mw, .my, .nu, .nz, .pa,
# .pk, .rw, .se, .sh, .tf, .tm, .tr, .tt,
# .tw, .ua, .ug, .uk, .uz
#
# added
# .ai, .ao, .bb, .bd, .bg, .bh, .bi, .bj,
# .bm, .bo, .bs, .bt, .by, .bz, .cg, .cv,
# .cy, .dm, .do, .dz, .fj, .fm, .fo, .gg,
# .gi, .gl, .gm, .gr, .id, .il, .it, .je,
# .jo, .ke, .kg, .ki, .kw, .ky, .kz, .la,
# .lt, .md, .mt, .mu, .na, .nf, .nr, .om,
# .ph, .pn, .py, .re, .ro, .sa, .sb, .si,
# .sk, .sr, .tg, .th, .tn, .ve, .wf, .yt,
# .yu, .zw, .int, .pro
#
# added notice
# .ad, .ae, .an, .aq, .aw, .ax, .az, .ba,
# .bf, .bv, .bw, .cf, .ci, .cm, .cs, .dj,
# .eg, .eh, .er, .et, .fk, .ga, .gf, .gh,
# .gn, .gp, .gq, .gu, .gw, .gy, .hn, .hr,
# .iq, .jm, .kh, .km, .kn, .lr, .ls, .ly,
# .ma, .mc, .mg, .mh, .mk, .ml, .mo, .mp,
# .mq, .mr, .mv, .mz, .nc, .ne, .ni, .pf,
# .pg, .pm, .pr, .qa, .sc, .sd, .sj, .sl,
# .sm, .sn, .so, .sv, .sy, .sz, .td, .tm,
# .tp, .va, .vc, .ye, .za, .zm
#
# removed
# ml.org
# 2005-01-10 jule Removed 200.10.4/22, 210.17/16, 210.18/15 and 210.20/16
# from registro.br, now at apnic and twnic
# 2005-01-06 jule Changed .tj
# 2005-01-04 jule Added IPv6 assignments
# 2005-01-03 jule Explicit rule for .com and .net
# added gandi handles, fixed .cr (Debian Bug#239259)
# added irt handles (Debian Bug#239768)
# added pgpkey objects (Debian Bug#239780)
# 80/6,84/8 -> 80/5,88/8 ripe (Debian Bug#243149)
# fltr objects (Debian Bug#249312)
# edu added (Debian Bug#255576)
# fixed .pe (Debian Bug#264794)
# fixed .tv (again, suckers!) (Debian Bug#267745)
# 2004-03-08 jule *-mnt und lim-* objects queried at ripe.
# 2004-03-08 jule 193/7 is nonsense, must be 193/8 and 194/8. i'm an
# idiot.
# 2004-03-07 jule added team cymru ip->as mapper whois
# 2004-03-07 jule removed all ERX listings, which are now autoconverted
# and held in seperate files
# 2004-03-03 jule fixed 80-84/8
# 2004-03-03 jule publicinterestregistry (.org) now back to normal whois
# changes for new generic whois handling code
# added idn-parameters for denic (Debian Bug#235086)
# added whois-servers.net as last resort (tnx lutz)
# changed corenic handle (Debian Bug#208866)
# .va fixed (Debian Bug#225032)
# added some blocks to RIPE (Debian Bug#225037)
# added some more blocks to RIPE (Debian Bug#226178)
# 2003-06-25 jule .cc now REAL fixed :-)
# whois.nic-se.se has incomplete data, changed for cgi
# [tnx Christian Seitz, Erik Heinz]
# 2003-06-25 jule 192.109/16 now queried at ripe (arin has totally
# outdated data!)
# fixed .as (Debian Bug#195065) and
# .cc (Debian Bug#196991) [both tnx VT100]
# 2003-04-09 lutz added 60/8 and removed 223/8 (apnic)
# 2003-02-20 jule changed .nz, changed .ie, added .museum, added .aero
# tnx to Andreas Schoenberg for hints.
# 2003-02-15 jule added .us
# 2003-02-14 lutz added 222/7 (apnic)
# 2003-01-29 jule fixed .be (trailing space)
# 2003-01-28 jule added 129.90/16 (lacnic, from lutz), 129.208/16 (ripe)
# 2003-01-28 lutz .np added
# 2003-01-28 tlr Add $ to .au pattern
# 2003-01-27 jule .org now has a totally broken whois
# 2003-01-19 cord added .coop-whois
# 2003-01-18 f2u added 130.227.0.0 - 130.227.255.255 (RIPE)
# 2003-01-08 f2u added 192.114.0.0 - 192.118.255.255 (RIPE)
# 2003-01-05 f2u added 147.233.0.0 - 147.237.255.255 (RIPE)
# 2003-01-03 f2u added 156.35.0.0 - 156.35.255.255 (RIPE)
# 2003-01-02 f2u Mark ARIN WHOIS.
# 2002-12-30 cord added 82.0.0.0-82.255.255.255 to RIPE
# 2002-11-27 cord fixed .lu (Debian Bug#170816)
# 2002-11-01 cord (Debian Bug#164375)
# 203.0.0.0-203.63.255.255 moved from aunic to apnic.
# (Debian Bug#166748)
# 210.8.0.0-210.11.255.255 is at whois.connect.com.au.
# JAPANESE IPs:
# added 61.192.0.0-61.215.255.255 (Debian Bug#148534,
# Debian Bug#165104)
# added 202.208.0.0-202.255.255.255 (Debian Bug#165406)
# added 203.136.0.0-203.141.255.255
# added 210.136.0.0-210.159.255.255
# added 210.188.0.0-210.191.255.255
# added 210.196.0.0-210.199.255.255
# added 210.224.0.0-210.239.255.255 (Debian Bug#138881)
# added 211.8.0.0-211.19.255.255 (Debian Bug#165587)
# added 211.120.0.0-211.135.255.255
# added 218.40.0.0-218.47.255.255
# added 218.216.0.0-218.231.255.255
# KOREAN IPs:
# added 61.248.0.0-61.255.255.255 (Debian Bug#164376)
# added 203.245.0.0-203.255.255.255 (Debian Bug#138718)
# added 210.90.0.0-210.91.255.255
# added 210.97.192.0-210.135.255.255
# added 210.220.0.0-210.223.255.255 (Debian Bug#141594)
# added 211.32.0.0-211.63.255.255 (Debian Bug#138717,
# Debian Bug#150750,
# Debian Bug#165587)
# added 211.168.0.0-211.171.255.255
# added 211.226.0.0-211.231.255.255 (Debian Bug#138953)
# added 218.36.0.0-218.39.255.255
# added 218.48.0.0-218.55.255.255
# added 218.144.0.0-218.159.255.255
# added 218.232.0.0-218.239.255.255
# added 220.72.0.0-220.87.255.255
# TAIWAN IPs:
# added 61.216.0.0-61.231.255.255 (Debian Bug#165105)
# added 210.17.0.0-210.17.127.255
# added 210.59.0.0-210.63.255.255
# added 210.65.0.0-210.67.255.255
# added 210.70.0.0-210.71.255.255
# added 211.20.0.0-211.23.255.255 (Debian Bug#165587)
# added 211.72.0.0-211.72.255.255
# added 211.75.0.0-211.75.255.255 (Debian Bug#165587)
# added 218.32.0.0-218.32.255.255
# added 218.160.0.0-218.165.255.255
# APNIC
# added 219.0.0.0-221.255.255.255
# NIC for Latin American and Caribbean
# added 200.0.0.0-200.255.255.255 (Debian Bug#158859)
# RIPE (Debian Bug#152090)
# added 129.11.0.0-129.13.255.255
# added 129.16.0.0-129.16.255.255
# added 129.20.0.0 - 129.20.255.255
# added 129.26.0.0 - 129.27.255.255
# added 129.31.0.0 - 129.31.255.255
# added 129.35.0.0 - 129.35.255.255
# added 129.67.0.0 - 129.67.255.255
# added 129.69.0.0- 129.70.255.255
# added 129.73.0.0 - 129.73.255.255
# added 129.88.0.0 - 129.88.255.255
# added 129.102.0.0 - 129.104.255.255
# added 129.125.0.0 - 129.125.255.255
# added 129.129.0.0 - 129.129.255.255
# added 129.132.0.0 - 129.132.255.255
# added 129.142.0.0 - 129.143.255.255
# added 129.159.0.0 - 129.159.3.255
# added 129.169.0.0 - 129.169.255.255
# added 129.175.0.0 - 129.175.255.255
# added 129.177.0.0 - 129.178.255.255
# added 129.181.0.0 - 129.185.255.255
# added 129.187.0.0 - 129.187.255.255
# added 129.194.0.0 - 129.195.255.255
# added 129.199.0.0 - 129.199.255.255
# added 129.206.0.0 - 129.206.255.255
# added 129.214.0.0 - 129.215.255.255
# added 129.217.0.0 - 129.217.255.255
# added 129.226.0.0 - 129.227.255.255
# added 129.233.0.0 - 129.234.255.255
# added 129.240.0.0 - 129.242.255.255
# added 129.247.0.0 - 129.247.255.255
# whois-server for .ac.uk and .gov.uk added.
# (Debian Bug#166785)
# whois-server for .pl added. (Debian Bug#164737)
# RIPE is also responsible for Gambia .gm
# .ar switched urls for requests. (Debian Bug#163210)
# .cl now has a real whois-server.
# .dk has a real whois-server again. (Debian Bug#163181)
# .ec is available through a web interface.
# .es switched urls for requests.
# .kr new address for whois-server.
# .name has also an whois-server.
# .pk switched urls for requests.
# .su has a whois-server. (Debian Bug#165610)
# .tw has a whois-server. (Debian Bug#163296)
# .co.za has a whois-server. (Debian Bug#149182)
# .tk has a whois-server. (Debian Bug#165614)
# 2002-09-17 jule .ag is now handled by a real whois server
# 2002-03-14 jule fixed trailing spaces after some $-signs
# KOREAN IPs:
# added 210.100.0.0-210.103.255.255 (Debian Bug#135341)
# added 210.204.0.0-210.207.255.255 (Debian Bug#135399)
# added 210.116.0.0-210.213.255.255 (Debian Bug#135470)
# added 61.78.0.0-61.85.255.255 (Debian Bug#136303)
# added 211.32.0.0-211.39.255.255 (Debian Bug#136333)
# added 210.96.0.0-210.97.191.255 (Debian Bug#136631)
# added 210.178.0.0-210.183.255.255 (Debian Bug#137599)
# added 211.212.0.0-211.215.255.255 (Debian Bug#137724)
# APNIC:
# added 218.0.0.0-218.255.255.255 (Debian Bug#137386)
# 2002-02-17 jule added .hk (Debian Bug#131390)
# added 211.0/13 to JPNIC (Debian Bug#134148)
# added 211.21/16 to TWNIC (Debian Bug#132727)
# added .to (Debian Bug#132634)
# added 211.172-211.199 to KRNIC (Debian Bug#130307)
# added 203.224-203.244 to KRNIC (Debian Bug#130307)
# added 211.104-211.119 to KRNIC (Debian Bug#130307)
# added 210.92-210.95 to KRNIC (Debian Bug#130307)
# added 211.232-211.255 to KRNIC (Debian Bug#130307)
# added 61.96-61.112 to KRNIC (Debian Bug#130307)
# 2002-02-01 jule added .tv,.ua,.ug,.uy,.uz,.vu; changed .vi,.ws,adamsnames
# (latter closes Debian Bug#131866)
# 2002-01-17 jule 210.248/13 = jpnic (Debian Bug#129489)
# jule 211.216/13 = krnic (Debian Bug#126637)
# jule 61.72-61.77 = krnic (Debian Bug#119200)
# jule changed dk-nic (Debian Bug#129026)
# jule added ripe blocks 80/81
# jule added .info and .biz
# 2001-03-12 lutz whois.cira.ca is new for *.ca (Hanno Foest)
# lutz Kasachstan does not respond (Jan Ludewig)
# lutz whois.ncst.ernet.in for .in (no better match)
# lutz .be brushed up (Andreas Schoenberg)
# 2000-12-15 lutz .in tested and failed.
# 2000-09-14 jule .tj added.
# jule added io, jo, mn, mw, sh
# lutz added sg (per Tip)
# 2000-09-06 lutz 217/8 mapped to RIPE
# 2000-08-08 lutz .ws added (Found it in spam, this registry is evil)
# lutz added several domains providing whois.nic.~tld~
# 2000-07-18 lutz .at readded (pfeifer@dbai.tuwien.ac.at)
# 2000-07-17 lutz .hm added (jule)
# 2000-06-29 lutz -RIPE should do multiple queries. (jule)
# lutz added whois.nic.at, whois.dk-hostmaster.dk, whois.nic.hu
# lutz added -BE, -DOMREG at RIPE, whois.isoc.org.il
# 2000-06-28 lutz .is and -IS are supported by whois.isnet.is
# lutz -DENIC is supported by whois.denic.de
# 2000-06-27 lutz .de will bot longer supported by ripe until tomorrow.
# lutz whois.nic.de is renamed to whois.denic.de
# 2000-06-26 lutz domain-registry.nl renamed to whois.domain-registry.nl
# (ash@ash.de)
# 2000-06-20 lutz .no, -NORID -> whois.norid.no
# 2000-06-07 lutz co??- -> corenic
# nic.cx hat neuerdings whois!
# 2000-03-27 lutz core- -> corenic (ash@ash.de)
# 2000-02-29 lutz registro.br hat neuerdings whois! IP Netze gehen auch.
# lutz Added my
# 2000-02-24 lutz RIPE-IPs vervollstaendigt
# 2000-02-15 haegar COCO- => whois.corenic.net
# 2000-02-14 lutz -HST => arin
# 2000-02-07 lutz 210.160.0.0 - 210.175.255.255 => Japan
# jule adamsnames changed
# jule 213/8 => Ripe
# 1999-12-01 jule .com/.net/.org changed to two-step whois
# 1999-08-04 lutz Added gs, ms, tc, tf, vg
# 1999-08-03 lutz Added sm
# 1999-07-05 lutz Fixed 203.178-203.183
# 1999-07-01 lutz Fixed kr, Added IPv6
# 1999-04-12 jule Added tr
# lutz Added va
# 1999-04-01 lutz Fixed 160.44-160.63
# 1999-03-30 jule Added md
# 1999-03-29 lutz Added AS...
# 1999-03-04 lutz Fixed es, se
# Added cx, eu.org
# 1998-12-18 jule Extracted from orginal source
# --------------------------------------------------------------------
/trunk/_todo/changelog_program
0,0 → 1,100
#
#
# History:
# 2015-05-06 mar pattern.d/* will now be preferred.
# Last resort (.) is now built-in.
# Fixed UTF-8 query input.
# 2014-08-18 mar UTF-8 output is now unified.
# 2014-04-02 mar Accepting "refer:" which IANA sends.
# 2013-12-17 mar Added native OID support. Output will now contain a BOM if whois server did return a UTF-8 string.
# 2013-05-05 mar *.dpkg-dist wird nun auch ausgeschlossen.
# 2012-05-22 mar "::::" (multiple+notice) is now not splitted by ":::" pattern
# multiple+notice can now be combined. "notice" will output "Additional information" then.
# 2012-05-22 mar Output of "cgihttps" and "program" is now anti spam filtered, too
# 2012-04-26 mar "--" is now recognized as command line argument seperator
# 2012-04-25 mar E-Mail addresses are now anti-spam protected! (Can be disabled with the CLI argument flag -e)
# This allows to add "RIPE -B" as default for public services.
# 2012-04-13 mar Changed all &foo() into foo() .
# See: https://www.socialtext.net/perl5/subroutines_called_with_the_ampersand
# 2012-04-01 mar New pattern available for recognizing ASN number ranges
# e.g. *AS:123-456 will match AS123, AS124 ... AS456
# 2012-03-04 mar Bugfix for IPv6 recognization
# 2012-02-26 mar IPv6 is now handled with Net::IP::ip_expand_address()
# 2012-01-28 mar rwhois is now accepted as ReferralServer
# GWhoIs::Core::redirectwhois can handle different port than 43
# 2012-01-17 mar quotemeta() to avoid shell injections
# TODO: braucht man eigentlich nicht wegen der ursp. filterung
# 2012-01-10 mar <pre> and <textarea> use now GWhoIs::Utils::htmlpre(). GWhoIs::Utils::render_html() optimized.
# Uses now STRICT perl code (used "my" everwhere and initialized variables)
# No warning at utf8 output, e.g. for cnnic.cn => UTF8 now possible.
# 2012-01-09 mar Now recognizing "001.2.3.4" as "1.2.3.4" (IPv4 and IPv6)
# 2012-01-07 mar Now supporting IPv6 subnetting / CIDR
# 2011-06-09 mar Added "program" method which invokes a script.
# IPv4/6 detection: IPv6 needs at least one ":"
# -> e.g. "ac" can now be detected as TLD and not as IPv6 anymore.
# "To resolve one of the above handles" cannot be empty now.
# 2010-07-28 jule Extend output from verisign-grs by last db update time
# 2010-05-15 jule Add locale handling, use libidn for punycode
# 2008-10-19 jule throw error on empty query string
# 2008-02-18 jule added handling for .bi and .gh (never a shortage
# of nics wo need special handling)
# 2007-09-03 jule made output from verisign-grs more verbose
# 2007-02-17 jule added mechanism for modifying redirects (see readme.ripe)
# 2006-12-02 jule new method multiple for doing multiple queries
# 2005-09-25 jule replaced 'noipprefix' and 'ipprefix' by 'prefix'
# 2005-09-25 jule query string is no longer forced lower case (Debian Bug#324669)
# 2005-01-15 jule Added version output
# 2005-01-13 jule Added "search" method 'notice' (for giving advice
# when no whois/lookup is available)
# Added "cgipostcurl" method which uses curl to
# fake a referer which is needed for the .nic.ar
# (i hate you!)
# 2005-01-06 jule new routines for searching ipv4 addresses for more
# speed improvement
# 2005-01-03 jule To get rid of the ERX tables which slow down everything,
# requery is now ok and will no longer send mails.
# (Debian Bug#243148)
# Added handling code for .pe (grr) (Debian Bug#264794)
# 2004-03-07 jule Totally changed the ip address handling code, now uses
# CIDR blocks.
# Recognized 'ipas a.b.c.d' as a request to ask team
# cymru ip->as mapper whois
# 2004-03-03 jule Integrated smaller fixes and changes done by lutz.
# Removed special code for publicinterestregistry, as
# transition is over, and referrers are nolonger used.
# Changed handling code for generic whois, can now take
# some parameters, removing need for special cases.
# 2003-07-29 jule fixed publicinterestregistry which is now in transition
# phase integrating the whois data
# 2003-02-15 jule fixed handling of dpkg-old pattern versions
# 2003-01-27 jule whois.publicinterestregistry.net is now authorative for
# .org and needs another special treatment... :-(
# plus some minor fixes
# 2003-01-02 f2u Add "+" for IP address queries to ARIN whois.
# Support multiple pattern files.
# 2002-11-01 cord Small workaround for whois-servers that return ^M.
# 2002-01-17 jule Reporting if query to upstream whois server failed
# (Debian Bug#122535)
# 2000-12-08 jule Braindead answers from nsiregistry excluded (NSI again!)
# 2000-06-29 lutz Multiple whois queries (jule)
# 2000-02-29 lutz Removed obsolete cgibr.
# lutz Fixed bug in IP queries.
# 2000-02-08 lutz Braindead answers from nsiregistry excluded
# Workaround for bug@internic removed.
# 1999-12-01 jule Support for new Internic two-step Whois
# 1999-08-04 lutz Minor fixed
# 1999-07-01 lutz Allowed spaces, commas and colons
# 1999-04-12 lutz Hotfix for problems with LWP::Simple
# 1998-12-21 lutz solving problems with ripe handles.
# 1998-12-18 lutz Mirrors possible
# jule GWhoIs::Core::wwwsgrep with LWP::Simple
# lutz multiple options bug fixed
# jule whois access made with LWP::Simple
# lutz Cosmetic changes,
# Configurable,
# Dies without line numbers,
# Direct server access
# jule External Configuration File,
# Major rewrite
# 1998-12-17 lutz Published due to jule
#
/trunk/_todo/copyright
0,0 → 1,49
Format: http://www.debian.org/doc/packaging-manuals/copyright-format/1.0/
Source: http://whois.viathinksoft.de/gwhois_fork/
Comment: This is a fork by ViaThinkSoft of the package gwhois by Juliane Holzt; http://gwhois.de/
 
Files: *
Copyright: 1998-2012, Juliane Holzt <debian@julijane.de> and contributors
Lutz Donnerhacke <Lutz.Donnerhacke@Jena.Thur.De> (Previous Co-Author)
2010-2017, Daniel Marschall <daniel-marschall@viathinksoft.de>
License: GPL-2
 
Files: idna_convert.class.php
Copyright: 2004-2014, phlyLabs Berlin, http://phlylabs.de
License: LGPL-2.1
 
License: GPL-2
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; version 2 only.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software Foundation,
Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
On any Debian system, you can find the complete text of the GNU GPL
(GNU General Public License) in the file /usr/share/common-licenses/GPL-2
 
License: LGPL-2.1
This library is free software; you can redistribute it and/or modify
it under the terms of the GNU Lesser General Public License as
published by the Free Software Foundation; either version 2.1 of the
License, or (at your option) any later version.
This library is distributed in the hope that it will be useful, but
WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with this program; if not, write to the Free Software
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301,
USA.
On any Debian system, you can find the complete text of the GNU LGPL
(GNU Lesser General Public License) in the file /usr/share/common-licenses/LGPL-2.1
/trunk/_todo/fake_install.sh
0,0 → 1,24
#!/bin/bash
 
DIR=$( dirname "$0" )
 
ln -s "$DIR"/etc/gwhois/ /etc/gwhois
ln -s "$DIR"/usr/bin/gwhois /usr/bin/gwhois
ln -s "$DIR"/var/cache/gwhois/ /var/cache/gwhois
ln -s "$DIR"/usr/share/doc/gwhois/ /usr/share/doc/gwhois
ln -s "$DIR"/usr/share/man/man1/gwhois.1 /usr/share/man/man1/gwhois.1
ln -s "$DIR"/usr/share/gwhois/ /usr/share/gwhois
 
db_get gwhois/inetd
if [ "$RET" = "true" ]; then
if [ "$(which update-inetd)" != "" ]; then
update-inetd --add 'whois stream tcp nowait nobody /usr/bin/gwhois gwhois'
else
db_input high gwhois/noinetd
db_go
fi
else
if [ "$(which update-inetd)" != "" ]; then
update-inetd --pattern gwhois --remove whois 2>&1 >/dev/null
fi
fi
Property changes:
Added: svn:mime-type
+text/x-sh
\ No newline at end of property
/trunk/_todo/fake_uninstall.sh
0,0 → 1,6
db_get gwhois/inetd
if [ "$RET" = "true" ]; then
if [ "$(which update-inetd)" != "" ]; then
update-inetd --pattern gwhois --remove whois 2>&1 >/dev/null
fi
fi
Property changes:
Added: svn:mime-type
+text/x-sh
\ No newline at end of property
/trunk/_todo/man/man1/gwhois.1
0,0 → 1,75
.TH gwhois 1 "26 Apr 2012" Linux "User Manuals"
.SH NAME
gwhois \- generic whois client / server
.SH SYNOPSIS
.B gwhois [-C dir] [-h host] [-m method:host mirror] [-L] [-e] [-v] [-?] [query]
.SH DESCRIPTION
gwhois is a generic whois client. It strives to know for all existing
tlds and all ip address ranges the appropriate whois server to ask. You
can simply call gwhois with a query for some domain or some IP and it
will ask the right server for you! It can even query webforms which
are unfortunately the only query type supported by many bad registries.
 
gwhois can also be used as a whois server. You can call it from the
inetd and make it accessible via a normal standard whois client. This
allows for example using a windows client and still make use of the
enhanced features of gwhois.
.SH OPTIONS
Try find information about the query (might be multiple words).
If no query is given, use the first line from stdin
 
Options:
\-C dir Setting an alternate configuration directory
default: /etc/gwhois
\-h host Selecting a fixed whois server for this query
\-m method:host mirror Defining a mirror for a given method and host.
\-L Use lynx \-source instead of LWP::Simple
\-e Do not protect e\-mail\-addresses
\-v Output version of pattern table(s)
\-?, \-\-help Printing this text
 
.SH FILES
.TP
.IB /etc/gwhois/pattern.d/*
The pattern file(s) of gwhois. Contains the list of domain and IP to
server mappings. It is in a machine readable regexp format but should
be easy to understand by humans, too. If you have additions and
corrections please report them always to the authors!
Attention: IPv4, IPv6, TLD and ASN pattern files will be replaced
when the script
.B gwhois\-pattern\-update
is executed.
The domain pattern file will only be extended without overwriting or deleted anything.
.TP
.IB /etc/gwhois/debconf.inc
File created depending on debconf question sending mail. Please do
not change manually but instead use dpkg\-reconfigure!
.TP
.IB /usr/share/gwhois/maintenance/pattern\-generator/gwhois\-pattern\-update
You can run this script to get the latest information according to IPv4, IPv6, ASN and TLD
resources from the RIRs. The
.B pattern.d/(ipv4_*|ipv6_*|tld|asn)
files will be overwritten.
.SH DIRECTORIES
.TP
.IB /usr/share/gwhois/maintenance/
In this directory you will find programs which you can use to maintain the pattern files.
.TP
.IB /usr/share/gwhois/subprogram/
In this directory you'll find "sub programs". They are called by gwhois by definition in the
pattern file and can do complex parsing. You can also call the sub programs independently.
.TP
.IB /var/cache/gwhois/maintenance/pattern\-generator/
In this directory,
.B /usr/share/gwhois/maintenance/pattern\-generator/gwhois\-pattern\-update
will save its downloaded RIR statistics files. If you run the script multiple times (e.g. via cronjob)
and the RIR statistics file has not changed yet, this will save traffic because the file will not be
downloaded twice.
.SH AUTHORS
2010\-2015 Daniel Marschall <daniel\-marschall@viathinksoft.de>
 
1998\-2010 Juliane Holzt <debian@julijane.de>
 
Some early parts by Lutz Donnerhacke <Lutz.Donnerhacke@Jena.Thur.de>
.SH VERSION
2015xxxx WIP
/trunk/_todo/po/POTFILES.in
0,0 → 1,2
[type: gettext/rfc822deb] templates
 
/trunk/_todo/po/cs.po
0,0 → 1,83
#
# Translators, if you are not familiar with the PO format, gettext
# documentation is worth reading, especially sections dedicated to
# this format, e.g. by running:
# info -n '(gettext)PO Files'
# info -n '(gettext)Header Entry'
#
# Some information specific to po-debconf are available at
# /usr/share/doc/po-debconf/README-trans
# or http://www.debian.org/intl/l10n/po-debconf/README-trans
#
# Developers do not need to manually edit POT or PO files.
#
msgid ""
msgstr ""
"Project-Id-Version: gwhois\n"
"Report-Msgid-Bugs-To: gwhois@packages.debian.org\n"
"POT-Creation-Date: 2010-05-15 23:41+0200\n"
"PO-Revision-Date: 2010-05-17 16:21+0200\n"
"Last-Translator: Miroslav Kure <kurem@debian.cz>\n"
"Language-Team: Czech <debian-l10n-czech@lists.debian.org>\n"
"Language: cs\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
 
#. Type: boolean
#. Description
#: ../templates:1001
msgid "Install gwhois as a whois proxy server?"
msgstr "Instalovat gwhois jako proxy server pro whois?"
 
#. Type: boolean
#. Description
#: ../templates:1001
msgid ""
"If gwhois is installed as a whois proxy server (using inetd) it will listen "
"on the standard whois port (43) allowing normal whois clients to query it."
msgstr ""
"Pokud je gwhois nainstalován jako proxy server pro whois (pomocí inetd), "
"bude naslouchat na standardním whois portu (43) a běžní whois klienti se jej "
"mohou dotazovat."
 
#. Type: boolean
#. Description
#: ../templates:1001
msgid ""
"This can be interesting for example if you want to setup a generic whois "
"server for your company or coworkers which can then use their standard whois-"
"client (e.g. a windows client) and still make use of the intelligent "
"features of gwhois."
msgstr ""
"To může být zajímavé například pokud chcete nastavit obecný whois server pro "
"celou firmu nebo pro kolegy, kteří tak mohou používat své standardní whois "
"klienty (např. na windows) a přitom využívat inteligentní vlastnosti gwhois."
 
#. Type: error
#. Description
#: ../templates:2001
msgid "Inetd or compatible replacement not installed."
msgstr "Inetd nebo kompatibilní náhrada není nainstalována."
 
#. Type: error
#. Description
#: ../templates:2001
msgid ""
"You configured gwhois to act as a whois proxy server. This requires inetd or "
"a compatible replacement (in particular the 'update-inetd' binary) which was "
"not found."
msgstr ""
"Nastavili jste gwhois, aby se choval jako proxy server pro službu whois. To "
"vyžaduje inetd nebo kompatibilní náhradu (přesněji binárku „update-inetd“), "
"avšak ani jedno z toho nebylo nalezeno."
 
#. Type: error
#. Description
#: ../templates:2001
msgid ""
"Please install a package providing inet-superserver and reconfigure gwhois "
"or disable proxy operation."
msgstr ""
"Nainstalujte si balík poskytující inet-superserver a překonfigurujte gwhois, "
"nebo fungování jako proxy zakažte."
/trunk/_todo/po/da.po
0,0 → 1,77
# Danish translation for gwhois.
# Copyright (C) 2010 gwhois & nedenstående oversættere.
# This file is distributed under the same license as the gwhois package.
# Morten Brix Pedersen <morten@wtf.dk>, 2005.
# Joe Hansen <joedalton2@yahoo.dk>, 2010.
#
msgid ""
msgstr ""
"Project-Id-Version: gwhois 20040308-2\n"
"Report-Msgid-Bugs-To: gwhois@packages.debian.org\n"
"POT-Creation-Date: 2010-05-15 23:41+0200\n"
"PO-Revision-Date: 2010-07-21 14:44+0200\n"
"Last-Translator: Joe Hansen <joedalton2@yahoo.dk>\n"
"Language-Team: Danish <debian-l10n-danish@lists.debian.org> \n"
"Language: da\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
 
#. Type: boolean
#. Description
#: ../templates:1001
msgid "Install gwhois as a whois proxy server?"
msgstr "Installer gwhois som en whois-proxyserver?"
 
#. Type: boolean
#. Description
#: ../templates:1001
msgid ""
"If gwhois is installed as a whois proxy server (using inetd) it will listen "
"on the standard whois port (43) allowing normal whois clients to query it."
msgstr ""
"Hvis gwhois er installeret som en whois-proxyserver (ved hjælp af inetd) vil "
"den lytte på standardporten for whois (43), som tillader normale whois-"
"klienter at forespørge den."
 
#. Type: boolean
#. Description
#: ../templates:1001
msgid ""
"This can be interesting for example if you want to setup a generic whois "
"server for your company or coworkers which can then use their standard whois-"
"client (e.g. a windows client) and still make use of the intelligent "
"features of gwhois."
msgstr ""
"Dette kan være interessant f.eks. hvis du vil sætte en generel whois-server "
"op til dit firma eller medarbejdere, som kan bruge standard whois-klienter "
"(f.eks. en Windows klient) og stadig bruge de intelligente funktioner i "
"gwhois."
 
#. Type: error
#. Description
#: ../templates:2001
msgid "Inetd or compatible replacement not installed."
msgstr "Inetd eller kompatibel erstatning ikke installeret."
 
#. Type: error
#. Description
#: ../templates:2001
msgid ""
"You configured gwhois to act as a whois proxy server. This requires inetd or "
"a compatible replacement (in particular the 'update-inetd' binary) which was "
"not found."
msgstr ""
"Du konfigurerede gwhois til at fungere som en whois-proxyserver. Dette "
"kræver inetd eller en kompatibel erstatning (specielt den binære 'update-"
"inetd') som ikke blev fundet."
 
#. Type: error
#. Description
#: ../templates:2001
msgid ""
"Please install a package providing inet-superserver and reconfigure gwhois "
"or disable proxy operation."
msgstr ""
"Installer venligst en pakke som tilbyder inet-superserver og rekonfigurer "
"gwhois eller deaktiver proxyhåndtering."
/trunk/_todo/po/de.po
0,0 → 1,76
# Translation of gwhois debconf templates to German
# Copyright (C) Juliane Holzt <debian@julijane.de>, 2005.
# Copyright (C) Helge Kreutzmann <debian@helgefjell.de>, 2010.
# This file is distributed under the same license as the gwhois package.
#
msgid ""
msgstr ""
"Project-Id-Version: gwhois 20100515\n"
"Report-Msgid-Bugs-To: gwhois@packages.debian.org\n"
"POT-Creation-Date: 2010-05-15 23:41+0200\n"
"PO-Revision-Date: 2010-07-11 19:17+0200\n"
"Last-Translator: Juliane Holzt <debian@julijane.de>\n"
"Language-Team: German Translation Team <german-l10n-german@lists.debian.org>\n"
"Language: de\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=ISO-8859-15\n"
"Content-Transfer-Encoding: 8bit\n"
 
#. Type: boolean
#. Description
#: ../templates:1001
msgid "Install gwhois as a whois proxy server?"
msgstr "Gwhois als whois-Proxy installieren?"
 
#. Type: boolean
#. Description
#: ../templates:1001
msgid ""
"If gwhois is installed as a whois proxy server (using inetd) it will listen "
"on the standard whois port (43) allowing normal whois clients to query it."
msgstr ""
"Wenn Gwhois als whois-Proxy (mit inetd) betrieben wird, können Abfragen mit "
"einem normalen whois-Client über den normalen whois-Port (43) vorgenommen "
"werden."
 
#. Type: boolean
#. Description
#: ../templates:1001
msgid ""
"This can be interesting for example if you want to setup a generic whois "
"server for your company or coworkers which can then use their standard whois-"
"client (e.g. a windows client) and still make use of the intelligent "
"features of gwhois."
msgstr ""
"Dies könnte interessant sein, um einen zentralen whois-Server für Ihre Firma "
"oder Kollegen bereitzustellen. Diese können einen normalen whois-Client (z."
"B. für Windows) verwenden und dennoch die intelligenten Funktionen von "
"Gwhois nutzen."
 
#. Type: error
#. Description
#: ../templates:2001
msgid "Inetd or compatible replacement not installed."
msgstr "Inetd oder Kompatibilitätsersatz nicht installiert."
 
#. Type: error
#. Description
#: ../templates:2001
msgid ""
"You configured gwhois to act as a whois proxy server. This requires inetd or "
"a compatible replacement (in particular the 'update-inetd' binary) which was "
"not found."
msgstr ""
"Sie haben Gwhois konfiguriert, um als Proxy-Server zu agieren. Dies benötigt "
"inetd oder einen kompatiblen Ersatz (inbesondere das Programm "
"»update-inetd«), der aber nicht gefunden werden konnte."
 
#. Type: error
#. Description
#: ../templates:2001
msgid ""
"Please install a package providing inet-superserver and reconfigure gwhois "
"or disable proxy operation."
msgstr ""
"Bitte installieren Sie ein Paket, das inet-superserver bereitstellt und "
"konfigurieren Sie Gwhois neu oder deaktivieren Sie den Proxy-Betrieb."
/trunk/_todo/po/es.po
0,0 → 1,134
# gwhois po-debconf translation to Spanish
# Copyright (C) 2005, 2007, 2010 Software in the Public Interest
# This file is distributed under the same license as the gwhois package.
#
# Changes:
# - Initial translation
# César Gómez Martín <cesar.gomez@gmail.com>, 2005
#
# - Updates
# Rudy Godoy Guillén <rudy@stone-head.org>, 2007
# Francisco Javier Cuadrado <fcocuadrado@gmail.com>, 2010
#
# Traductores, si no conocen el formato PO, merece la pena leer la
# documentación de gettext, especialmente las secciones dedicadas a este
# formato, por ejemplo ejecutando:
# info -n '(gettext)PO Files'
# info -n '(gettext)Header Entry'
#
# Equipo de traducción al español, por favor, lean antes de traducir
# los siguientes documentos:
#
# - El proyecto de traducción de Debian al español
# http://www.debian.org/intl/spanish/
# especialmente las notas de traducción en
# http://www.debian.org/intl/spanish/notas
#
# - La guía de traducción de po's de debconf:
# /usr/share/doc/po-debconf/README-trans
# o http://www.debian.org/intl/l10n/po-debconf/README-trans
#
msgid ""
msgstr ""
"Project-Id-Version: gwhois 20100515\n"
"Report-Msgid-Bugs-To: gwhois@packages.debian.org\n"
"POT-Creation-Date: 2010-05-15 23:41+0200\n"
"PO-Revision-Date: 2010-05-17 09:19+0100\n"
"Last-Translator: Francisco Javier Cuadrado <fcocuadrado@gmail.com>\n"
"Language-Team: Debian l10n spanish <debian-l10n-spanish@lists.debian.org>\n"
"Language: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
 
#. Type: boolean
#. Description
#: ../templates:1001
msgid "Install gwhois as a whois proxy server?"
msgstr "¿Desea instalar gwhois como un servidor proxy de whois?"
 
#. Type: boolean
#. Description
#: ../templates:1001
msgid ""
"If gwhois is installed as a whois proxy server (using inetd) it will listen "
"on the standard whois port (43) allowing normal whois clients to query it."
msgstr ""
"Si gwhois está instalado como un servidor proxy de whois (utilizando inetd), "
"escuchará en el puerto estándar de whois (43) y permitirá que los clientes "
"normales de whois le hagan peticiones."
 
#. Type: boolean
#. Description
#: ../templates:1001
msgid ""
"This can be interesting for example if you want to setup a generic whois "
"server for your company or coworkers which can then use their standard whois-"
"client (e.g. a windows client) and still make use of the intelligent "
"features of gwhois."
msgstr ""
"Esto puede ser interesante, por ejemplo, si quiere instalar un servidor "
"whois genérico para su compañía o compañeros de trabajo, que después podrán "
"utilizar su cliente whois estándar (por ejemplo: un cliente windows) y "
"también hacer uso de las características inteligentes de gwhois."
 
#. Type: error
#. Description
#: ../templates:2001
msgid "Inetd or compatible replacement not installed."
msgstr "No está instalado inetd o un sustituto compatible."
 
#. Type: error
#. Description
#: ../templates:2001
msgid ""
"You configured gwhois to act as a whois proxy server. This requires inetd or "
"a compatible replacement (in particular the 'update-inetd' binary) which was "
"not found."
msgstr ""
"Ha configurado gwhois para actuar como un servidor proxy de whois. De modo "
"que es necesario tener inetd o un sustituto compatible (concretamente el "
"binario «update-inetd»), y no se ha encontrado ninguno."
 
#. Type: error
#. Description
#: ../templates:2001
msgid ""
"Please install a package providing inet-superserver and reconfigure gwhois "
"or disable proxy operation."
msgstr ""
"Instale un paquete que proporcione el superservidor inet y reconfigure "
"gwhois o desactive el proxy."
 
#~ msgid "Will delete old ERX configuration"
#~ msgstr "Se eliminará la antigua configuración ERX"
 
#~ msgid ""
#~ "You are upgrading from an older gwhois version which has included network "
#~ "block lists for the so called ERX blocks. For a major speed improvement "
#~ "these lists will no longer be used, instead gwhois relies on ARINs "
#~ "redirection feature. Therefore the old files should be deleted."
#~ msgstr ""
#~ "Está actualizando a partir de una versión antigua de gwhois que ha "
#~ "incluido bloques de listas de red para los llamados bloques ERX. No se "
#~ "utilizarán estas listas por más tiempo para una mayor mejora de "
#~ "velocidad, en su lugar gwhois dependerá de la característica de "
#~ "redirección de ARINs. Por lo tanto los ficheros antiguos deben "
#~ "eliminarse."
 
#~ msgid ""
#~ "If you made no changes to the files, the system will automatically delete "
#~ "them. Otherwise you need to delete by hand. The files in question are:"
#~ msgstr ""
#~ "Si no hizo ningún cambio en los ficheros, el sistema los eliminará "
#~ "automáticamente. De otro modo tendrá que borrarlos manualmente. Los "
#~ "ficheros en cuestión son:"
 
#~ msgid ""
#~ " /etc/gwhois/pattern.apnic-erx\n"
#~ " /etc/gwhois/pattern.lacnic-erx\n"
#~ " /etc/gwhois/pattern.ripe-erx"
#~ msgstr ""
#~ " /etc/gwhois/pattern.apnic-erx\n"
#~ " /etc/gwhois/pattern.lacnic-erx\n"
#~ " /etc/gwhois/pattern.ripe-erx"
/trunk/_todo/po/fr.po
0,0 → 1,83
# Translation of gwhois debconf templates to French
# Copyright (C) 2005, 2010 Debian French l10n team <debian-l10n-french@lists.debian.org>
# This file is distributed under the same license as the gwhois package.
#
# Rémi Pannequin <remi.pannequin@laposte.net>, 2005.
# David Prévot <david@tilapin.org>, 2010.
msgid ""
msgstr ""
"Project-Id-Version: gwhois 20100515\n"
"Report-Msgid-Bugs-To: gwhois@packages.debian.org\n"
"POT-Creation-Date: 2010-05-15 23:41+0200\n"
"PO-Revision-Date: 2010-05-26 09:24-0400\n"
"Last-Translator: David Prévot <david@tilapin.org>\n"
"Language-Team: French <debian-l10n-french@lists.debian.org>\n"
"Language: fr\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Generator: Lokalize 1.0\n"
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
 
#. Type: boolean
#. Description
#: ../templates:1001
msgid "Install gwhois as a whois proxy server?"
msgstr "Faut-il installer gwhois en tant que serveur whois mandataire ?"
 
# . Type: boolean
# . Description
#. Type: boolean
#. Description
#: ../templates:1001
msgid ""
"If gwhois is installed as a whois proxy server (using inetd) it will listen "
"on the standard whois port (43) allowing normal whois clients to query it."
msgstr ""
"Si gwhois est installé, via inetd, en tant que serveur whois mandataire "
"(« proxy »), il écoutera sur le port 43, habituellement dédié à whois, et "
"répondra aux requêtes des clients whois standard."
 
# . Type: boolean
# . Description
#. Type: boolean
#. Description
#: ../templates:1001
msgid ""
"This can be interesting for example if you want to setup a generic whois "
"server for your company or coworkers which can then use their standard whois-"
"client (e.g. a windows client) and still make use of the intelligent "
"features of gwhois."
msgstr ""
"Cela peut servir par exemple à mettre en place un serveur whois générique "
"pour une entreprise ou un groupe de travail, qui pourront utiliser tout "
"client standard (p. ex. un client fonctionnant sous Windows), tout en "
"bénéficiant des fonctionnalités avancées de gwhois."
 
#. Type: error
#. Description
#: ../templates:2001
msgid "Inetd or compatible replacement not installed."
msgstr "Inetd ou alternative compatible non installé"
 
#. Type: error
#. Description
#: ../templates:2001
msgid ""
"You configured gwhois to act as a whois proxy server. This requires inetd or "
"a compatible replacement (in particular the 'update-inetd' binary) which was "
"not found."
msgstr ""
"Le service gwhois a été configuré en tant que serveur whois mandataire. Cela "
"nécessite la présence d'inetd ou d'une alternative compatible (en "
"particulier le binaire « update-inetd ») qui n'a pas été trouvé."
 
#. Type: error
#. Description
#: ../templates:2001
msgid ""
"Please install a package providing inet-superserver and reconfigure gwhois "
"or disable proxy operation."
msgstr ""
"Veuillez installer un paquet fournissant inet-superserver et configurer à "
"nouveau gwhois, ou désactiver la fonctionnalité de serveur mandataire."
/trunk/_todo/po/it.po
0,0 → 1,76
# Italian translation for gwhois debconf templates.
# Copyright (C) 2012, the gwhois copyright holder
# This file is distributed under the same license as the gwhois package.
# Francesca Ciceri <madamezou@zouish.org>, 2012.
#
msgid ""
msgstr ""
"Project-Id-Version: gwhois\n"
"Report-Msgid-Bugs-To: gwhois@packages.debian.org\n"
"POT-Creation-Date: 2010-05-15 23:41+0200\n"
"PO-Revision-Date: 2012-01-31 23:54+0100\n"
"Last-Translator: Francesca Ciceri <madamezou@zouish.org>\n"
"Language-Team: Italian <debian-l10n-italian@lists.debian.org>\n"
"Language: it\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
 
#. Type: boolean
#. Description
#: ../templates:1001
msgid "Install gwhois as a whois proxy server?"
msgstr "Installare gwhois come server proxy whois?"
 
#. Type: boolean
#. Description
#: ../templates:1001
msgid ""
"If gwhois is installed as a whois proxy server (using inetd) it will listen "
"on the standard whois port (43) allowing normal whois clients to query it."
msgstr ""
"Se viene installato come server proxy whois (utilizzando inetd), gwhois "
"rimarrà in ascolto sulla porta predefinita (43) per il whois consentendo ai "
"normali client whois di interrogarlo."
 
#. Type: boolean
#. Description
#: ../templates:1001
msgid ""
"This can be interesting for example if you want to setup a generic whois "
"server for your company or coworkers which can then use their standard whois-"
"client (e.g. a windows client) and still make use of the intelligent "
"features of gwhois."
msgstr ""
"Questo può risultare utile se, per esempio, si desideri impostare un server "
"whois generico per la propria azienda o i propri collaboratori che potranno "
"così usare i loro client whois predefiniti (ad esempio dei client windows) "
"sfruttando però le funzionalità avanzate di gwhois."
 
#. Type: error
#. Description
#: ../templates:2001
msgid "Inetd or compatible replacement not installed."
msgstr "Né inetd né un suo sostituto compatibile sono installati."
 
#. Type: error
#. Description
#: ../templates:2001
msgid ""
"You configured gwhois to act as a whois proxy server. This requires inetd or "
"a compatible replacement (in particular the 'update-inetd' binary) which was "
"not found."
msgstr ""
"Si è deciso di configurare gwhois come server proxy whois. Ciò richiede "
"inetd o un suo sostituto compatibile (in particolare il binario \"update-"
"inetd\") che però non sono stati trovati."
 
#. Type: error
#. Description
#: ../templates:2001
msgid ""
"Please install a package providing inet-superserver and reconfigure gwhois "
"or disable proxy operation."
msgstr ""
"Si prega di installare un pacchetto contenente inet-superserver e di "
"riconfigurare gwhois o di disabilitare la funzionalità di proxy."
/trunk/_todo/po/ja.po
0,0 → 1,84
#
# Translators, if you are not familiar with the PO format, gettext
# documentation is worth reading, especially sections dedicated to
# this format, e.g. by running:
# info -n '(gettext)PO Files'
# info -n '(gettext)Header Entry'
#
# Some information specific to po-debconf are available at
# /usr/share/doc/po-debconf/README-trans
# or http://www.debian.org/intl/l10n/po-debconf/README-trans
#
# Developers do not need to manually edit POT or PO files.
#
#
msgid ""
msgstr ""
"Project-Id-Version: gwhois 20100515-1\n"
"Report-Msgid-Bugs-To: gwhois@packages.debian.org\n"
"POT-Creation-Date: 2010-05-15 23:41+0200\n"
"PO-Revision-Date: 2010-05-19 09:14+0900\n"
"Last-Translator: Hideki Yamane <henrich@debian.org>\n"
"Language-Team: Japanese <debian-japanese@lists.debian.org>\n"
"Language: ja\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
 
#. Type: boolean
#. Description
#: ../templates:1001
msgid "Install gwhois as a whois proxy server?"
msgstr "gwhois を whois プロキシサーバとしてインストールしますか?"
 
#. Type: boolean
#. Description
#: ../templates:1001
msgid ""
"If gwhois is installed as a whois proxy server (using inetd) it will listen "
"on the standard whois port (43) allowing normal whois clients to query it."
msgstr ""
"gwhois が (inetd を使った) whois プロキシサーバとしてインストールされた場合、"
"普通の whois クライアントがクエリー可能な標準の whois のポート番号 (43) を "
"listen します。"
 
#. Type: boolean
#. Description
#: ../templates:1001
msgid ""
"This can be interesting for example if you want to setup a generic whois "
"server for your company or coworkers which can then use their standard whois-"
"client (e.g. a windows client) and still make use of the intelligent "
"features of gwhois."
msgstr ""
"面白い例として、通常の whois server を会社か同僚のために設定したい場合、標準"
"の whois クライアント (つまり Windows クライアント) が利用でき、gwhois の優秀"
"な機能を活用するのも可能になります。"
 
#. Type: error
#. Description
#: ../templates:2001
msgid "Inetd or compatible replacement not installed."
msgstr "inetd または同等の代替品はインストールされていません。"
 
#. Type: error
#. Description
#: ../templates:2001
msgid ""
"You configured gwhois to act as a whois proxy server. This requires inetd or "
"a compatible replacement (in particular the 'update-inetd' binary) which was "
"not found."
msgstr ""
"gwhois をプロキシサーバとして動作するように設定しました。これに必要となる "
"inetd あるいはその同等のもの (とりわけ 'update-inetd' バイナリ) が見つかりま"
"せんでした。"
 
#. Type: error
#. Description
#: ../templates:2001
msgid ""
"Please install a package providing inet-superserver and reconfigure gwhois "
"or disable proxy operation."
msgstr ""
"inet スーパーサーバを提供しているパッケージをインストールして gwhois を再設定"
"するか、プロキシとしての動作を無効にしてください。"
/trunk/_todo/po/nl.po
0,0 → 1,77
# Dutch translation of gwhois debconf templates.
# Copyright (C) 2005-2011 THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the gwhois package.
# Luk Claes <luk.claes@ugent.be>, 2005.
# Jeroen Schot <schot@a-eskwadraat.nl>, 2011.
#
msgid ""
msgstr ""
"Project-Id-Version: gwhois 20040308-2\n"
"Report-Msgid-Bugs-To: gwhois@packages.debian.org\n"
"POT-Creation-Date: 2010-05-15 23:41+0200\n"
"PO-Revision-Date: 2011-05-30 08:43+0200\n"
"Last-Translator: Jeroen Schot <schot@a-eskwadraat.nl>\n"
"Language-Team: Debian l10n Dutch <debian-l10n-dutch@lists.debian.org>\n"
"Language: nl\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
 
#. Type: boolean
#. Description
#: ../templates:1001
msgid "Install gwhois as a whois proxy server?"
msgstr "Gwhois als een whois-proxyserver installeren?"
 
#. Type: boolean
#. Description
#: ../templates:1001
msgid ""
"If gwhois is installed as a whois proxy server (using inetd) it will listen "
"on the standard whois port (43) allowing normal whois clients to query it."
msgstr ""
"Wanneer gwhois geïnstalleerd is als een whois-proxyserver (met inetd), dan "
"zal het op de standaard whois-poort (43) luisteren. Dit maakt het voor "
"normale whois-clients mogelijk gwois te ondervragen."
 
#. Type: boolean
#. Description
#: ../templates:1001
msgid ""
"This can be interesting for example if you want to setup a generic whois "
"server for your company or coworkers which can then use their standard whois-"
"client (e.g. a windows client) and still make use of the intelligent "
"features of gwhois."
msgstr ""
"Dit kan bijvoorbeeld interessant zijn u een algemene whois-server wilt "
"instellen voor uw bedrijf of medewerkers die dan de standaard whois-client "
"kunnen gebruiken (bv. een windows-client) en nog steeds gebruik kunnen maken "
"van de intelligente eigenschappen van gwhois."
 
#. Type: error
#. Description
#: ../templates:2001
msgid "Inetd or compatible replacement not installed."
msgstr "Geen inetd of passende vervanger geïnstalleerd."
 
#. Type: error
#. Description
#: ../templates:2001
msgid ""
"You configured gwhois to act as a whois proxy server. This requires inetd or "
"a compatible replacement (in particular the 'update-inetd' binary) which was "
"not found."
msgstr ""
"U heeft gwhois als whois-proxyserver geconfigureerd. Hiervoor is inetd of "
"een passende vervanger nodig (vooral het programma 'update-inetd'). Deze is "
"niet gevonden."
 
#. Type: error
#. Description
#: ../templates:2001
msgid ""
"Please install a package providing inet-superserver and reconfigure gwhois "
"or disable proxy operation."
msgstr ""
"Installeer een pakket dat inet-superserver aanbiedt en herconfigureer gwhois "
"of deactiveer de proxyfuntionaliteit"
/trunk/_todo/po/pl.po
0,0 → 1,79
# Translation of gwhois debconf templates to Polish.
# Copyright (C) 2010
# This file is distributed under the same license as the gwhois package.
#
# Michał Kułach <michal.kulach@gmail.com>, 2012.
msgid ""
msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: gwhois@packages.debian.org\n"
"POT-Creation-Date: 2010-05-15 23:41+0200\n"
"PO-Revision-Date: 2012-03-12 11:57+0100\n"
"Last-Translator: Michał Kułach <michal.kulach@gmail.com>\n"
"Language-Team: Polish <debian-l10n-polish@lists.debian.org>\n"
"Language: pl\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Generator: Lokalize 1.2\n"
"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 "
"|| n%100>=20) ? 1 : 2);\n"
 
#. Type: boolean
#. Description
#: ../templates:1001
msgid "Install gwhois as a whois proxy server?"
msgstr "Zainstalować gwhois jako serwer pośredniczący whois?"
 
#. Type: boolean
#. Description
#: ../templates:1001
msgid ""
"If gwhois is installed as a whois proxy server (using inetd) it will listen "
"on the standard whois port (43) allowing normal whois clients to query it."
msgstr ""
"Jeśli gwhois zostanie zainstalowany jako serwer pośredniczący whois "
"(używając inetd), będzie nasłuchiwał na standardowym porcie whois (43), "
"pozwalając zwykłym klientom whois na odpytywanie go."
 
#. Type: boolean
#. Description
#: ../templates:1001
msgid ""
"This can be interesting for example if you want to setup a generic whois "
"server for your company or coworkers which can then use their standard whois-"
"client (e.g. a windows client) and still make use of the intelligent "
"features of gwhois."
msgstr ""
"Może być to przydatne np. jeśli zachodzi potrzeba skonfigurowania typowego "
"serwera whois dla firmy lub współpracowników, którzy będą mogli w ten sposób "
"używać standardowych klientów whois (np. klienta windowsowego) i korzystać "
"jednocześnie z zaawansowanych funkcji gwhois."
 
#. Type: error
#. Description
#: ../templates:2001
msgid "Inetd or compatible replacement not installed."
msgstr "Inetd lub kompatybilny zamiennik nie jest zainstalowany."
 
#. Type: error
#. Description
#: ../templates:2001
msgid ""
"You configured gwhois to act as a whois proxy server. This requires inetd or "
"a compatible replacement (in particular the 'update-inetd' binary) which was "
"not found."
msgstr ""
"Skonfigurowano gwhois jako serwer pośredniczący whois. Takie ustawienie "
"wymaga inetd lub kompatybilnego zamiennika (przede wszystkim pliku binarnego "
"\"update-inetd\"), który nie został znaleziony."
 
#. Type: error
#. Description
#: ../templates:2001
msgid ""
"Please install a package providing inet-superserver and reconfigure gwhois "
"or disable proxy operation."
msgstr ""
"Proszę zainstalować pakiet udostępniający inet-superserver i ponownie "
"skonfigurować gwhois lub wyłączyć tryb serwera pośredniczącego."
/trunk/_todo/po/pt.po
0,0 → 1,78
# translation of gwhois debconf to Portuguese
# Copyright (C) 2007 the gwhois copyright holder
# This file is distributed under the same license as the gwhois package.
#
# Américo Monteiro <a_monteiro@netcabo.pt>, 2007, 2010.
msgid ""
msgstr ""
"Project-Id-Version: gwhois 20100515\n"
"Report-Msgid-Bugs-To: gwhois@packages.debian.org\n"
"POT-Creation-Date: 2010-05-15 23:41+0200\n"
"PO-Revision-Date: 2010-05-17 12:56+0100\n"
"Last-Translator: Américo Monteiro <a_monteiro@netcabo.pt>\n"
"Language-Team: Portuguese <traduz@debianpt.org>\n"
"Language: pt\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Generator: Lokalize 1.0\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
 
#. Type: boolean
#. Description
#: ../templates:1001
msgid "Install gwhois as a whois proxy server?"
msgstr "Instalar gwhois como um servidor proxy whois?"
 
#. Type: boolean
#. Description
#: ../templates:1001
msgid ""
"If gwhois is installed as a whois proxy server (using inetd) it will listen "
"on the standard whois port (43) allowing normal whois clients to query it."
msgstr ""
"Se o gwhois está instalado como um servidor proxy whois (usando inetd) ele "
"irá escutar no porto de omissão para whois (43) permitindo a clientes "
"normais whois que o consultem."
 
#. Type: boolean
#. Description
#: ../templates:1001
msgid ""
"This can be interesting for example if you want to setup a generic whois "
"server for your company or coworkers which can then use their standard whois-"
"client (e.g. a windows client) and still make use of the intelligent "
"features of gwhois."
msgstr ""
"Isto pode ser interessante por exemplo se você desejar configurar um "
"servidor whois genérico para a sua companhia ou colegas de trabalho os quais "
"podem depois usar um cliente whois standard (ex. um cliente windows) e mesmo "
"assim poderem usufruir das funções inteligentes do gwhois."
 
#. Type: error
#. Description
#: ../templates:2001
msgid "Inetd or compatible replacement not installed."
msgstr "Inetd ou substituto compatível não instalado."
 
#. Type: error
#. Description
#: ../templates:2001
msgid ""
"You configured gwhois to act as a whois proxy server. This requires inetd or "
"a compatible replacement (in particular the 'update-inetd' binary) which was "
"not found."
msgstr ""
"Você configurou o gwhois para actuar como um servidor proxy whois. Isto "
"requer o inetd ou um substituto compatível (em particular o binário 'update-"
"inetd') que não foi encontrado."
 
#. Type: error
#. Description
#: ../templates:2001
msgid ""
"Please install a package providing inet-superserver and reconfigure gwhois "
"or disable proxy operation."
msgstr ""
"Por favor instale um pacote que disponibilize inet-superserver e reconfigure "
"o gwhois ou desactive a operação de proxy."
/trunk/_todo/po/pt_BR.po
0,0 → 1,81
# gwhois Brazilian Portuguese translation
# Copyright (C) 2007 gwhois'S COPYRIGHT HOLDER
# This file is distributed under the same license as the gwhois package.
# Eder L. Marques (frolic) <frolic@debian-ce.org>, 2007.
# Flamarion Jorge <jorge.flamarion@gmail.com>, 2010.
#
msgid ""
msgstr ""
"Project-Id-Version: gwhois_20070926\n"
"Report-Msgid-Bugs-To: gwhois@packages.debian.org\n"
"POT-Creation-Date: 2010-05-15 23:41+0200\n"
"PO-Revision-Date: 2010-08-21 13:14-0300\n"
"Last-Translator: Flamarion Jorge <jorge.flamarion@gmail.com>\n"
"Language-Team: Brazilian Portuguese <debian-l10n-portuguese@lists.debian."
"org>\n"
"Language: pt_BR\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"pt_BR utf-8\n"
"X-Generator: KBabel 1.11.4\n"
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
 
#. Type: boolean
#. Description
#: ../templates:1001
msgid "Install gwhois as a whois proxy server?"
msgstr "Instalar o gwhois como um servidor proxy whois?"
 
#. Type: boolean
#. Description
#: ../templates:1001
msgid ""
"If gwhois is installed as a whois proxy server (using inetd) it will listen "
"on the standard whois port (43) allowing normal whois clients to query it."
msgstr ""
"Se o gwhois for instalado como um servidor proxy whois (usando o inetd) ele "
"escutará na porta whois padrão (43), permitindo que clientes whois normais o "
"consultem."
 
#. Type: boolean
#. Description
#: ../templates:1001
msgid ""
"This can be interesting for example if you want to setup a generic whois "
"server for your company or coworkers which can then use their standard whois-"
"client (e.g. a windows client) and still make use of the intelligent "
"features of gwhois."
msgstr ""
"Isto pode ser interessante, por exemplo, se você quer configurar um servidor "
"whois genérico para a sua empresa ou colaboradores, que podem então usar "
"seus clientes whois padrão (e.g. um cliente windows) e continuar fazendo uso "
"dos recursos inteligentes do gwhois."
 
#. Type: error
#. Description
#: ../templates:2001
msgid "Inetd or compatible replacement not installed."
msgstr "Inetd ou substituto compatível não instalado."
 
#. Type: error
#. Description
#: ../templates:2001
msgid ""
"You configured gwhois to act as a whois proxy server. This requires inetd or "
"a compatible replacement (in particular the 'update-inetd' binary) which was "
"not found."
msgstr ""
"Você configurou o gwhois para agir como um servidor proxy whois. Isto requer "
"o inetd ou um substituto compatível (em particular o binário 'update-inetd') "
"que não foi encontrado."
 
#. Type: error
#. Description
#: ../templates:2001
msgid ""
"Please install a package providing inet-superserver and reconfigure gwhois "
"or disable proxy operation."
msgstr ""
"Por favor, instale um pacote que forneça o inet-superserver e reconfigure o "
"gwhois, ou desabilite a operação como proxy."
/trunk/_todo/po/ru.po
0,0 → 1,79
# translation of ru.po to Russian
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
#
# Yuri Kozlov <yuray@komyakino.ru>, 2009, 2010.
msgid ""
msgstr ""
"Project-Id-Version: gwhois 20100515\n"
"Report-Msgid-Bugs-To: gwhois@packages.debian.org\n"
"POT-Creation-Date: 2010-05-15 23:41+0200\n"
"PO-Revision-Date: 2010-05-16 22:18+0400\n"
"Last-Translator: Yuri Kozlov <yuray@komyakino.ru>\n"
"Language-Team: Russian <debian-l10n-russian@lists.debian.org>\n"
"Language: ru\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Generator: KBabel 1.11.4\n"
"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n"
"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
 
#. Type: boolean
#. Description
#: ../templates:1001
msgid "Install gwhois as a whois proxy server?"
msgstr "Установить gwhois в качестве прокси-сервера whois?"
 
#. Type: boolean
#. Description
#: ../templates:1001
msgid ""
"If gwhois is installed as a whois proxy server (using inetd) it will listen "
"on the standard whois port (43) allowing normal whois clients to query it."
msgstr ""
"Если установить gwhois как прокси-сервер whois (используется inetd), то он "
"будет прослушивать стандартный порт whois (43), позволяя делать запросы "
"обычными клиентами whois."
 
#. Type: boolean
#. Description
#: ../templates:1001
msgid ""
"This can be interesting for example if you want to setup a generic whois "
"server for your company or coworkers which can then use their standard whois-"
"client (e.g. a windows client) and still make use of the intelligent "
"features of gwhois."
msgstr ""
"Это может быть полезно, например, если вы хотите настроить обычный сервер "
"whois для вашей компании или сотрудников, чтобы они могли использовать свои "
"стандартные клиенты whois (например, windows-клиенты), а у вас оставалась "
"возможность использовать дополнительные свойства gwhois."
 
#. Type: error
#. Description
#: ../templates:2001
msgid "Inetd or compatible replacement not installed."
msgstr "Inetd или совместимая служба не установлена."
 
#. Type: error
#. Description
#: ../templates:2001
msgid ""
"You configured gwhois to act as a whois proxy server. This requires inetd or "
"a compatible replacement (in particular the 'update-inetd' binary) which was "
"not found."
msgstr ""
"Вы настроили gwhois как прокси-сервер whois. Для этого требуется inetd или "
"совместимая служба (в частности, исполняемый файл update-inetd), но она не "
"найдена."
 
#. Type: error
#. Description
#: ../templates:2001
msgid ""
"Please install a package providing inet-superserver and reconfigure gwhois "
"or disable proxy operation."
msgstr ""
"Установите пакет, предоставляющий inet-superserver и перенастройте gwhois, "
"или выключите работу в качестве прокси."
/trunk/_todo/po/sk.po
0,0 → 1,78
# Slovak translations for gwhois package
# Slovenské preklady pre balík gwhois.
# Copyright (C) 2011 THE gwhois'S COPYRIGHT HOLDER
# This file is distributed under the same license as the gwhois package.
# Slavko <linux@slavino.sk>, 2011.
#
msgid ""
msgstr ""
"Project-Id-Version: gwhois 20100728\n"
"Report-Msgid-Bugs-To: gwhois@packages.debian.org\n"
"POT-Creation-Date: 2010-05-15 23:41+0200\n"
"PO-Revision-Date: 2011-08-06 00:56+0200\n"
"Last-Translator: Slavko <linux@slavino.sk>\n"
"Language-Team: Slovak <nomail>\n"
"Language: sk\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n"
 
#. Type: boolean
#. Description
#: ../templates:1001
msgid "Install gwhois as a whois proxy server?"
msgstr "Nainštalovať gwhois ako proxy server whois?"
 
#. Type: boolean
#. Description
#: ../templates:1001
msgid ""
"If gwhois is installed as a whois proxy server (using inetd) it will listen "
"on the standard whois port (43) allowing normal whois clients to query it."
msgstr ""
"Ak je gwhois nainštalovaný ako proxy server whois (pomocou inetd), bude "
"načúvať na štandardnom porte whois (43), aby mohli posielať požiadavky bežné "
"klienty whois."
 
#. Type: boolean
#. Description
#: ../templates:1001
msgid ""
"This can be interesting for example if you want to setup a generic whois "
"server for your company or coworkers which can then use their standard whois-"
"client (e.g. a windows client) and still make use of the intelligent "
"features of gwhois."
msgstr ""
"Toto môže byť zaujímavé, napríklad, ak chcete nastaviť všeobecný server "
"whois pre svoju spoločnosť alebo spolupracovníkov, ktorí potom môžu používať "
"štandardné klienty whois (napr. klient Windows) a pritom stále využívať "
"inteligentné vlastnosti gwhois."
 
#. Type: error
#. Description
#: ../templates:2001
msgid "Inetd or compatible replacement not installed."
msgstr "Inetd ani kompatibilná náhrada nie sú nainštalované."
 
#. Type: error
#. Description
#: ../templates:2001
msgid ""
"You configured gwhois to act as a whois proxy server. This requires inetd or "
"a compatible replacement (in particular the 'update-inetd' binary) which was "
"not found."
msgstr ""
"Nastavili ste gwhois tak, aby vystupoval ako proxy server whois. Tento "
"spôsob vyžaduje inetd alebo kompatibilnú náhradu (konkrétne program „update-"
"inetd”), ktoré neboli nájdené."
 
#. Type: error
#. Description
#: ../templates:2001
msgid ""
"Please install a package providing inet-superserver and reconfigure gwhois "
"or disable proxy operation."
msgstr ""
"Prosím nainštalujte balík, ktorý poskytuje inet-superserver a znova nastavte "
"gwhois alebo zakážte operácie proxy."
/trunk/_todo/po/sv.po
0,0 → 1,79
# Translation of gwhois debconf template to Swedish
# Copyright (C) 2010 Martin Bagge <brother@bsnet.se>
# This file is distributed under the same license as the gwhois package.
#
# Daniel Nylander <po@danielnylander.se>, 2005
# Martin Bagge <brother@bsnet.se>, 2010
msgid ""
msgstr ""
"Project-Id-Version: gwhois\n"
"Report-Msgid-Bugs-To: gwhois@packages.debian.org\n"
"POT-Creation-Date: 2010-05-15 23:41+0200\n"
"PO-Revision-Date: 2010-06-22 22:36+0100\n"
"Last-Translator: Martin Bagge <brother@bsnet.se>\n"
"Language-Team: Swedish <debian-l10n-swedish@lists.debian.org>\n"
"Language: sv\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Poedit-Language: Swedish\n"
"X-Poedit-Country: Sweden\n"
 
#. Type: boolean
#. Description
#: ../templates:1001
msgid "Install gwhois as a whois proxy server?"
msgstr "Installera gwhois som en proxyserver för whois?"
 
#. Type: boolean
#. Description
#: ../templates:1001
msgid ""
"If gwhois is installed as a whois proxy server (using inetd) it will listen "
"on the standard whois port (43) allowing normal whois clients to query it."
msgstr ""
"Om gwhois är installerad som en proxyserver för whois (med inetd) kommer den "
"lyssna på standardporten för whois (43) och tillåter normala whois-klienter "
"att ställa frågor till den."
 
#. Type: boolean
#. Description
#: ../templates:1001
msgid ""
"This can be interesting for example if you want to setup a generic whois "
"server for your company or coworkers which can then use their standard whois-"
"client (e.g. a windows client) and still make use of the intelligent "
"features of gwhois."
msgstr ""
"Detta kan vara intressant till exempel om du vill ställa in en generisk "
"whois-server för ditt företag eller kollegor som då kan använda deras "
"vanliga whois-klienter (exempelvis en Windows-klient) och fortfarande "
"använda de intelligenta funktionerna i gwhois."
 
#. Type: error
#. Description
#: ../templates:2001
msgid "Inetd or compatible replacement not installed."
msgstr "Inetd eller kompatibel ersättare inte installerad."
 
#. Type: error
#. Description
#: ../templates:2001
msgid ""
"You configured gwhois to act as a whois proxy server. This requires inetd or "
"a compatible replacement (in particular the 'update-inetd' binary) which was "
"not found."
msgstr ""
"Du angav att gwhois ska agera proxyserver för whois. Detta kräver inetd "
"eller en kompatibel ersättare (binären \"update-inetd\" måste finnas) och "
"det kunde inte hittas."
 
#. Type: error
#. Description
#: ../templates:2001
msgid ""
"Please install a package providing inet-superserver and reconfigure gwhois "
"or disable proxy operation."
msgstr ""
"Installera ett paket som tillhandahåller inet-superserver och gör sedan "
"inställningarna för gwhois igen eller avaktivera proxyläget."
/trunk/_todo/po/templates.pot
0,0 → 1,64
# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: gwhois@packages.debian.org\n"
"POT-Creation-Date: 2010-05-15 23:41+0200\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=CHARSET\n"
"Content-Transfer-Encoding: 8bit\n"
 
#. Type: boolean
#. Description
#: ../templates:1001
msgid "Install gwhois as a whois proxy server?"
msgstr ""
 
#. Type: boolean
#. Description
#: ../templates:1001
msgid ""
"If gwhois is installed as a whois proxy server (using inetd) it will listen "
"on the standard whois port (43) allowing normal whois clients to query it."
msgstr ""
 
#. Type: boolean
#. Description
#: ../templates:1001
msgid ""
"This can be interesting for example if you want to setup a generic whois "
"server for your company or coworkers which can then use their standard whois-"
"client (e.g. a windows client) and still make use of the intelligent "
"features of gwhois."
msgstr ""
 
#. Type: error
#. Description
#: ../templates:2001
msgid "Inetd or compatible replacement not installed."
msgstr ""
 
#. Type: error
#. Description
#: ../templates:2001
msgid ""
"You configured gwhois to act as a whois proxy server. This requires inetd or "
"a compatible replacement (in particular the 'update-inetd' binary) which was "
"not found."
msgstr ""
 
#. Type: error
#. Description
#: ../templates:2001
msgid ""
"Please install a package providing inet-superserver and reconfigure gwhois "
"or disable proxy operation."
msgstr ""
Property changes:
Added: svn:mime-type
+text/plain
\ No newline at end of property
/trunk/_todo/po/vi.po
0,0 → 1,77
# Vietnamese Translation for gWhoIs.
# Copyright © 2010 Free Software Foundation, Inc.
# Clytie Siddall <clytie@riverland.net.au>, 2005-2010.
#
msgid ""
msgstr ""
"Project-Id-Version: gwhois 20100515+nmu1\n"
"Report-Msgid-Bugs-To: gwhois@packages.debian.org\n"
"POT-Creation-Date: 2010-05-15 23:41+0200\n"
"PO-Revision-Date: 2010-09-30 16:34+0930\n"
"Last-Translator: Clytie Siddall <clytie@riverland.net.au>\n"
"Language-Team: Vietnamese <vi-VN@googlegroups.com>\n"
"Language: vi\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=1; plural=0;\n"
"X-Generator: LocFactoryEditor 1.8\n"
 
#. Type: boolean
#. Description
#: ../templates:1001
msgid "Install gwhois as a whois proxy server?"
msgstr "Cài đặt gói gwhois dưới dạng một trình phục vụ ủy nhiệm whois không?"
 
#. Type: boolean
#. Description
#: ../templates:1001
msgid ""
"If gwhois is installed as a whois proxy server (using inetd) it will listen "
"on the standard whois port (43) allowing normal whois clients to query it."
msgstr ""
"Nếu gwhois được cài đặt dưới dạng một trình phục vụ ủy nhiệm whois (dùng "
"inetd) thì nó lắng nghe trên cổng whois tiêu chuẩn (43), cho phép các ứng "
"dụng khách whois thông thường gửi yêu cầu."
 
#. Type: boolean
#. Description
#: ../templates:1001
msgid ""
"This can be interesting for example if you want to setup a generic whois "
"server for your company or coworkers which can then use their standard whois-"
"client (e.g. a windows client) and still make use of the intelligent "
"features of gwhois."
msgstr ""
"Trường hợp này có thể là phức tạp hơn nếu bạn muốn thiết lập một máy phục vụ "
"whois chung cho công ty hoặc các bạn đồng nghiệp sử dụng ứng dụng khách "
"whois bình thường (v.d. một ứng dụng khách Windows) mà vẫn còn tận dụng các "
"tính năng hữu ích của gwhois."
 
#. Type: error
#. Description
#: ../templates:2001
msgid "Inetd or compatible replacement not installed."
msgstr "Chưa cài đặt inetd hoặc một bản thay thế tương thích."
 
#. Type: error
#. Description
#: ../templates:2001
msgid ""
"You configured gwhois to act as a whois proxy server. This requires inetd or "
"a compatible replacement (in particular the 'update-inetd' binary) which was "
"not found."
msgstr ""
"Bạn đã cấu hình gwhois để hoạt động như là một trình phục vụ ủy nhiệm whois. "
"Trường hợp này yêu cầu siêu trình nền inetd hoặc một bản thay thế tương "
"thích (đặc biệt là bản nhị phân « update-inetd ») mà không tìm thấy."
 
#. Type: error
#. Description
#: ../templates:2001
msgid ""
"Please install a package providing inet-superserver and reconfigure gwhois "
"or disable proxy operation."
msgstr ""
"Hãy cài đặt một gói cung cấp siêu trình phục vụ inet-superserver và cấu hình "
"lại gwhois; không thì cần phải tắt thao tác ủy nhiệm."
/trunk/main/gwhois
0,0 → 1,366
#!/usr/bin/perl
#
# generic Whois
#
# (c) 1998-2010 by Juliane Holzt <debian@kju.de>
# Some early parts by Lutz Donnerhacke <Lutz.Donnerhacke@Jena.Thur.de>
#
# Modifications (c) 2010-2019 by Daniel Marschall, ViaThinkSoft <info@daniel-marschall.de>
#
# Distribution, usage etc. pp. regulated by the current version of GPL.
#
 
# todo
# * print whois parameters at "querying..."
# * lynx injection sicherheitslücke? => quotemeta()
# * regularly check https://bugs.debian.org/cgi-bin/pkgreport.cgi?src=gwhois
 
# TODO: "%" am Anfang jeder Meldung ausgeben
 
# TODO: lynx wird manchmal auch ausgeführt ohne -L ...
# TODO: Alle "!!" entfernen
# TODO: print -> $result .= ?
 
use warnings;
use strict;
 
use FindBin;
use lib "$FindBin::Bin/lib/";
 
use GWhoIs::Core;
use GWhoIs::Utils;
use GWhoIs::IPv4;
use GWhoIs::IPv6;
use GWhoIs::OID;
 
# install with "cpan Net::IP" or "aptitude install libnet-ip-perl"
use Net::IP;
 
use Net::LibIDN;
use Encode;
# use Encode::Detect::Detector; # requires Debian package libencode-detect-perl
 
#use encoding ':locale';
 
#use utf8;
 
 
# Examples for output of the different hosts:
# -------------------------------------------------------------
# Host Example Output BOM
# -------------------------------------------------------------
# whois.viathinksoft.de oid:2.999 UTF-8 if required (existing BOMs will be removed)
# cnnic.cn cnnic.cn UTF-8 no
# whois.ati.tn ati.tn UTF-8 no
# whois.kr whois.kr UTF-8 no
# whois.denic.de denic.de ISO-8859-1 no
# oldwhois.kisa.or.kr (obsolete) whois.kr EUC-KR no
# whois.nic.ch domian.ch UTF-8 no
# (GWHOIS from ViaThinkSoft) UTF-8 yes (existing BOMs will be removed?)
# (old GWHOIS) (like server) (like server)
# -------------------------------------------------------------
 
 
# TODO: for this diagram: check if existing BOMs will be removed, e.g. by LWP.
# TODO: how to stop LWP's auto-detect magic?
# TODO: only output bom if required? doesn't work, otherwise we would need to buffer stderr and stdout, and then their order is wrong again.
 
 
$ENV{'HOME'}='/var/home/whois' unless defined $ENV{'HOME'};
 
# Nicht nach GWhoIs::Core auslagern
# TODO: die $version auch von den .pm Modulen anzeigen?
my $version = '20100728+viathinksoft20190429';
my $fixwhoishost;
my $rawoutput = 0;
 
$| = 1; # buffer flushing = autoflush
 
#if ( -f "/etc/default/gwhois" ) {
# require "/etc/default/gwhois";
#}
 
while ($ARGV[0]) {
if ($ARGV[0] eq '--help' || $ARGV[0] eq '-?') {
print "gwhois - generic whois\n",
"Version $version\n\n",
"Usage: gwhois {options} [query]\n",
" Try find information about the query (might be multiple words).\n",
" If no query is given, use the first line from stdin\n\n",
" Options:\n",
" -C dir Setting an alternate configuration directory\n",
" default: $GWhoIs::Core::confdir\n",
" -h host Selecting a fixed whois server for this query\n",
" -m method:host mirror Defining a mirror for a given method and host.\n",
" -L Use lynx -source instead of LWP::Simple\n",
" -e Do not protect eMail addresses\n",
" -c Do not try to convert to UTF-8. Output server's stream.\n",
" -v Output version of pattern table(s)\n",
" -?, --help Printing this text\n\n";
exit;
} elsif ($ARGV[0] eq '-C') {
shift;
$GWhoIs::Core::confdir = shift;
} elsif ($ARGV[0] eq '-c') {
shift;
$rawoutput = 1;
$GWhoIs::Core::useLWP = 0; # TODO: geht irgendwie nicht anders
} elsif ($ARGV[0] eq '-h') {
shift;
$fixwhoishost = shift;
} elsif ($ARGV[0] eq '-L') {
shift;
$GWhoIs::Core::useLWP = 0;
} elsif ($ARGV[0] eq '-m') {
shift;
$_ = shift;
s/://;
$GWhoIs::Core::mirror{$_} = shift;
} elsif ($ARGV[0] eq '-e') {
shift;
$GWhoIs::Core::antispam = 0;
} elsif ($ARGV[0] eq '-v') {
print "gwhois - generic whois\n\n",
"program version: $version\n",
"pattern tables: ";
foreach my $patternfile (GWhoIs::Core::getpatternfiles()) {
if (!open(PATTERN,"<$patternfile")) {
warn "Cannot open $patternfile. STOP.\n";
exit 1;
}
 
my $line = <PATTERN>;
close(PATTERN);
 
my $patternversion;
if (defined($line)) {
($patternversion) = $line =~ /#:\s+version\s+(\S+)/;
$patternversion = 'unknown' if !defined($patternversion);
} else {
$patternversion = 'unknown';
}
print "$patternversion\t($patternfile)\n ";
}
print "\n";
exit 0;
} elsif ($ARGV[0] eq '--') {
shift;
last;
} else {
last;
}
}
 
if ($rawoutput) {
binmode(STDOUT, ":bytes");
binmode(STDERR, ":bytes");
} else {
binmode(STDOUT, ":utf8");
binmode(STDERR, ":utf8");
}
 
if (defined $ARGV[0]) {
$_ = join(' ', @ARGV);
} else {
# If no parameter is given, await an input from STDIN
$_ = <>;
chomp;
}
 
print "\x{FEFF}" if !$rawoutput; # BOM
exit main($_);
 
# -----------------------------------------------------------------------------------------
 
sub main {
my $query = shift;
 
$query = '' if !defined $query;
 
if (GWhoIs::Utils::is_utf8($query)) {
$query = Encode::decode('utf8', $query);
}
$query = GWhoIs::Utils::trim($query);
 
if ($query eq '') {
warn "Query is empty.\n";
exit 2;
}
 
my ($method,$host,$additional);
 
my $query_utf8 = GWhoIs::Utils::enforce_utf8($query);
print "Process query: '$query_utf8'\n\n";
 
if ( $fixwhoishost ) {
# QUE: soll das immer gelten, oder nur, wenn ermittelt wurde, dass whois benötigt wird (nicht aber cgi, etc?)
($method,$host,$additional) = ('whois',$fixwhoishost,'');
} else {
# if ($query !~ /[^0-9\.]/) { # ipv4
if ($query =~ /^[0-9\.]*$/) {
my ($a, $b, $c, $d, $e) = $query =~ /(\d+)\.(\d+)\.(\d+)\.(\d+)(.*)/;
$a = 256 if !defined $a;
$b = 256 if !defined $b;
$c = 256 if !defined $c;
$d = 256 if !defined $d;
$e = '' if !defined $e;
if ($a > 255 || $b > 255 || $c > 255 || $d > 255 || $e ne '') {
warn "'$query' is no valid IP address, ASN, OID or domain name.\n";
exit 2;
}
print "Query recognized as IPv4.\n";
 
($method,$host,$additional) = GWhoIs::IPv4::getmethodv4($a,$b,$c,$d);
# } elsif ( lc($query) !~ /[^0-9a-f:]/i ) { # ipv6
# } elsif ( $query !~ /[0-9a-f:]*/ ) {
} elsif (($query =~ /:/ ) && ( Net::IP::ip_expand_address($query, 6) =~ /^[0-9a-f:]*:[0-9a-f:]*$/ )) { # at least one ":" so that e.g. "ac" is recognized as TLD and not as IPv6
# check and correct v6 address
if ( $query =~ /[0-9a-f]{5}/ || $query =~ /:::/ ) {
warn "'$query' is an invalid IPv6 address.\n";
exit 2;
}
 
my $orig_query = $query;
#$query =~ s/:?$/::/ if ( $query !~ /(.*:){7}/ && $query !~ /::/ );
$query = Net::IP::ip_expand_address($query, 6);
 
print "Query recognized as IPv6.\n";
print "Address expanded to '$query'.\n" if $orig_query ne $query;
 
($method,$host,$additional) = GWhoIs::IPv6::getmethodv6($query);
} elsif ($query =~ /^(urn:){0,1}oid:/i ) { # OID
print "Query recognized as OID.\n";
 
# preliminarily remove urn: and oid: from query
# we need a dot so that we can use "oid:." in our patternfile too
$query = GWhoIs::OID::normalize_oid($query);
 
my @arcs = split(/\./, $query); # TODO: warum geht split('.',$oid) nicht?
 
($method,$host,$additional) = GWhoIs::OID::getmethodoid(@arcs);
 
# Whois OID query syntax definition by ViaThinkSoft (TODO: Apply for RFC):
# - urn:oid:2.999 or oid:2.999
# - Case insensitive
# - Leading dot should be tolerated (urn:oid:.2.999)
# - Leading zeros should be tolerated (urn:oid:.002.00999)
# Idea: Should "oid:" be optional? Since 2.999 cannot be an IP ... But 1.2.3.4 could be one ...
 
# There are many possibilities. We choose "oid:.2.999"
$query = 'oid:' . GWhoIs::OID::normalize_oid($query);
} else {
# Last resort: Query is probably a TLD, domain or handle, but we are not sure!
# print "Query recognized as domain.\n";
 
# Dot exists? Type? Punycode? Filtering?
# ------------------------------------------------
# Yes Domain Yes Yes
# No TLD Yes Yes
# No Handle No* Maybe
# ------------------------------------------------
# * = but it is unlikely that a handle contains non-latin characters
 
# Filtering
$query =~ y/[\x{00A0}-\x{FFFF}]a-zA-Z0-9:.,+_ -//cd;
$query =~ s/\.$//;
my $query_utf8_filtered = GWhoIs::Utils::enforce_utf8($query);
if ( $query_utf8 ne $query_utf8_filtered ) {
# QUE: warn or print?
warn "Attention: Query was filtered to '$query_utf8_filtered'.\n\n";
}
 
# Punycode decoding
# my $ascii_query = Net::LibIDN::idn_to_ascii($query, 'utf-8')
# We separate between spaces, so that "tld <unicode>" can be processed
my @query_split = split(' ', $query);
@query_split = map { Net::LibIDN::idn_to_ascii($_, 'utf-8') || '' } @query_split;
my $ascii_query = join(' ', @query_split);
 
# Query valid?
if (!$ascii_query) { # e.g. $query = ".x"
warn "'$query_utf8' is an invalid domain name.\n";
return 2;
}
 
# Just information for the user
if (index($query, ".") != -1) {
print "Query recognized as domain.\n\n"; # TODO: aber wenn kein IDN?
} else {
print "Query is probably a handle or TLD.\n\n";
}
 
($method,$host,$additional) = GWhoIs::Core::getmethodother($ascii_query);
}
}
 
if ($method eq '') {
warn "I don't know where to query that.\n";
warn "If this is a valid domainname or handle, please file a bug report.\n";
return 1;
}
 
# Wird in getmethod*() bereits ausgeführt.
# Grund: Dann kann auch bei redirectwhois() dementsprechend in jedem Zwischenschritt gehandelt werden.
# $host = $GWhoIs::Core::mirror{$method.$host} if defined $GWhoIs::Core::mirror{$method.$host};
 
my ($result, $exitcode) = GWhoIs::Core::doquery($query,$method,$host,$additional);
$result = '' if !defined $result; # should not happen!
 
my $antispam_replacements = 0;
if ($GWhoIs::Core::antispam) {
# Protect email addresses (to allow e.g. "RIPE -B" for public services)
# Note: eMail addresses have a much more complex structure, see http://code.google.com/p/isemail/
# But this Regex should still prevent spammers from filtering eMail addresses,
# even if e.g. the "wrong" (e.g. escaped) "@" is protected.
$antispam_replacements = $result =~ s/(\S+)@(\S+)\.([^.\s]+)/$1 (at) $2 (dot) $3/g;
# Alternative solution:
# $antispam_replacements = $result =~ s/(\S+)@(\S+)\.([^.\s]+)/$1&$2.$3/g;
}
 
# We try to get $result to wide-string. Functions like LWP::Simple automatically convert UTF-8 into Unicode
# (even without BOM sent through the whois gopher channel!), while subprograms and other methods are providing
# raw UTF-8 data.
$result = Encode::decode('utf8', GWhoIs::Utils::trim($result), Encode::FB_CROAK) if !$rawoutput && GWhoIs::Utils::is_utf8($result);
 
# Don't allow DOS format
$result =~ s/(\012|\015\012?)/\n/g;
 
# Output everything
print GWhoIs::Utils::trim($result), "\n\n";
 
if ($antispam_replacements > 0) {
print "Note: The output has been modified by GWhoIs.\n";
print "$antispam_replacements eMail addresses have been anti-spam protected.\n";
print "(Disable protection with \"gwhois -e\")\n";
print "\n";
}
 
# Footer
print "--\n To resolve one of the above handles:";
 
if ($method =~ /whois/) {
print "\n whois -h $host";
print ":$1" if ( $additional =~ /port=(\d+)/ );
print " -- HANDLE\n";
}
elsif ($method eq "cgipost") {
print "\n POST $host\n";
print " $additional\n";
}
elsif ($method eq "cgi") {
print "\n $host\n";
}
elsif ($method eq "program") {
print "\n $host HANDLE\n";
}
# elsif ($method eq "wwwgrep") {
else {
# todo: add cgipostcurl etc
print "\n hmm. not sure (method = $method).\n";
}
 
print " OTOH globally unique handles should be recognised directly by GWhoIs.\n";
print " Please report errors or misfits via the Debian bug tracking system.\n";
 
return $exitcode;
}
Property changes:
Added: svn:executable
+*
\ No newline at end of property
/trunk/main/lib/GWhoIs/Core.pm
0,0 → 1,490
package GWhoIs::Core;
 
use warnings;
use strict;
 
use LWP::Simple;
 
use FindBin;
use lib "$FindBin::Bin/../";
use GWhoIs::Utils;
 
use List::Util 'max';
 
$GWhoIs::Core::confdir = "$FindBin::Bin/pattern/";
 
# DM 11.09.2017: There is a weird bug: If I use TOR in combination with LWP on a Gopher protocol, I get error 500.
$GWhoIs::Core::useLWP = 0;
 
$GWhoIs::Core::antispam = 1; # default: on
$GWhoIs::Core::step = 1;
 
# Wieso muss das nicht deklariert werden? (Fehlermeldung "useless use")
#%GWhoIs::Core::mirror;
 
# ($result, $exitcode) = GWhoIs::Core::getsource($url)
sub GWhoIs::Core::getsource {
my ($url) = @_;
my $text = $GWhoIs::Core::useLWP ? LWP::Simple::get($url) : GWhoIs::Utils::lynxsource($url);
my $exitcode = defined($text) ? 0 : 1; # TODO: a better way to detect an error
return ($text, $exitcode);
}
 
# ($result, $exitcode) = GWhoIs::Core::whoisaccess($host,$port,$query)
sub GWhoIs::Core::whoisaccess {
my ($host,$port,$query) = @_;
 
$query =~ s/ /%20/g;
 
my ($result, $exitcode) = GWhoIs::Core::getsource("gopher://$host:$port/0$query");
if ($exitcode) {
$result .= "Query to whois server failed.\n";
}
$result =~ s/\x0D//g; # remove CR from output
 
return ($result, $exitcode);
}
 
# ($result, $exitcode) = GWhoIs::Core::inicwhoisaccess($host,$port,$query)
sub GWhoIs::Core::inicwhoisaccess { # todo: mehr als 1 redirect möglich, z.b. bei rwhois??
#TODO: hier auch $mirror unterstützung?
my ($host,$port,$query) = @_;
my ($queryresult, $result);
my $exitcode;
 
($queryresult, $exitcode) = GWhoIs::Core::whoisaccess($host,$port,"=$query");
 
# Result von NSI-Registry auf relevanten Part absuchen
if ( $queryresult =~ /Name:\s+$query\s/mi ) {
$result = "-- From: $host:$port\n\n";
($host) = $queryresult =~
/Name:\s+$query\s.*?Whois Server:\s+(.*?)\s/si;
 
my $relresult;
# my ($relresult) = $queryresult =~
# /[\r\n]([^\r\n]+\S+\sName:\s+$query\s.*?Expiration Date:[^\r\n]+)[\r\n]/si;
# $relresult = "(Redirect to $host:$port)" if !defined $relresult;
$relresult = $queryresult;
 
$result .= "$relresult\n\n-- End --\n\n";
 
# $port = 43;
my ($host2, $port) = $host =~ /^(.*):(.*)$/;
$port = 43 if !defined $port;
$host = $host2 if defined $host2;
 
# print $GWhoIs::Core::step++,". Step: Querying $host:$port with whois.\n\n"; # todo "rwhois"?
$result .= ($GWhoIs::Core::step++).". Step: Querying $host:$port with whois.\n\n"; # todo "rwhois"?
 
$result .= "-- From: $host:$port\n\n";
# TODO: beim referal whois ist die query ist nicht trimmed. scheint aber nix auszumachen
my ($loc_text, $loc_exitcode) = GWhoIs::Core::whoisaccess($host,$port,$query);
 
$exitcode = max($exitcode, $loc_exitcode);
$result .= $loc_text;
} else {
$result = "-- From: $host:$port\n\n$queryresult-- End --\n";
}
 
return ($result, $exitcode);
}
 
# ($result, $exitcode) = GWhoIs::Core::wwwsgrep($url,$match)
sub GWhoIs::Core::wwwsgrep {
my ($url,$match) = @_;
my ($result, $line, $exitcode) = ('', '', 0);
 
($line, $exitcode) = GWhoIs::Core::getsource($url);
if (!$exitcode) {
$line =~ s/\n/ /g;
if ($line =~ $match) {
($result) = $line =~ /$match/s;
}
}
return ($result, $exitcode);
}
 
# ($host, $additional) = GWhoIs::Core::methodpatternregex($query,$host,$additional,$queryline);
sub GWhoIs::Core::methodpatternregex {
my ($query,$host,$additional,$line) = @_;
 
my ($namewotld,$tld) = $query =~ /^([^\.]*)\.(.*)$/;
# TODO: !defined
my ($p1,$p2,$p3,$p4,$p5,$p6,$p7,$p8,$p9) = $query =~ $line;
# TODO: !defined
my ($ucq) = uc($query);
 
$host =~ s/~query~/$query/;
$host =~ s/~ucquery~/$ucq/;
$host =~ s/~namewotld~/$namewotld/;
$host =~ s/~tld~/$tld/;
$host =~ s/~1~/$p1/;
$host =~ s/~2~/$p2/;
$host =~ s/~2~/$p3/;
$host =~ s/~2~/$p4/;
$host =~ s/~2~/$p5/;
$host =~ s/~2~/$p6/;
$host =~ s/~2~/$p7/;
$host =~ s/~2~/$p8/;
$host =~ s/~2~/$p9/;
 
$additional =~ s/~query~/$query/;
$additional =~ s/~ucquery~/$ucq/;
$additional =~ s/~namewotld~/$namewotld/;
$additional =~ s/~tld~/$tld/;
$additional =~ s/~1~/$p1/;
$additional =~ s/~2~/$p2/;
 
return ($host,$additional);
}
 
# @patternfiles = GWhoIs::Core::getpatternfiles()
sub GWhoIs::Core::getpatternfiles {
my (@files, @files_new);
 
opendir(DIR, $GWhoIs::Core::confdir);
@files_new = sort(readdir(DIR));
closedir(DIR);
 
@files_new = grep {
($_ !~ /^\./)
&& ($_ !~ /\.dpkg-/)
&& ($_ !~ /\.orig$/)
&& ($_ !~ /\.bak$/)
&& ($_ !~ /\.save$/)
&& ($_ !~ /^\./)
} @files_new;
@files_new = map { "$GWhoIs::Core::confdir/$_" } @files_new;
 
@files = grep { -f } (@files_new);
 
return (@files);
}
 
# ($method, $host, $additional) = GWhoIs::Core::getmethodother($query);
sub GWhoIs::Core::getmethodother {
my ($query) = @_;
my $found = 0;
my ($line,$cline,$method,$host,$additional);
my ($rang_prefix, $rang_beginning, $rang_ending);
my ($rang_actual_prefix, $rang_number);
 
# Process file until we found a match
foreach my $patternfile (GWhoIs::Core::getpatternfiles()) {
open(PATTERN,"<$patternfile") || die "Cannot open $patternfile. STOP.\n";
 
while ( defined($line = <PATTERN>) && (!$found) ) {
# chomp $line;
$line = GWhoIs::Utils::trim($line);
 
if ( $line =~ /^#/ ) { # comment
} elsif ( ($cline) = $line =~ /^:(.*)$/ ) { # method declaration
($method,$host,$additional) = split(/\|/,$cline,3);
$method='' if !defined $method;
$host='' if !defined $host;
$additional='' if !defined $additional;
 
} elsif ( $line =~ /^\*/ && (($rang_actual_prefix, $rang_number) = $query =~ /^([^0-9]+)([0-9]+)$/) ) {
# e.g. for parsing ASNs
 
if (($rang_prefix, $rang_beginning) = $line =~ /^\*([^0-9]+):([0-9]+)$/) {
# Single number
$rang_ending = $rang_beginning
} else {
# Range
($rang_prefix, $rang_beginning, $rang_ending) = $line =~ /^\*([^0-9]+):([0-9]+)-([0-9]+)$/;
next if !defined $rang_prefix;
next if !defined $rang_beginning;
next if !defined $rang_ending;
}
 
if ((lc($rang_prefix) eq lc($rang_actual_prefix))
&& ($rang_number >= $rang_beginning)
&& ($rang_number <= $rang_ending)) {
$found = 1;
# ($host,$additional) = GWhoIs::Core::methodpatternregex($query,$host,$additional,$line);
}
} elsif ( $line ne '' && $line =~ /^[^\*]/ && $query =~ /$line/i ) {
# Regex
$found = 1;
($host,$additional) = GWhoIs::Core::methodpatternregex($query,$host,$additional,$line);
}
}
}
if (!$found) {
return ('','','')
}
 
$host = $GWhoIs::Core::mirror{$method.$host} if defined $GWhoIs::Core::mirror{$method.$host};
return ($method,$host,$additional);
}
 
# ($resulttext, $exitcode) = GWhoIs::Core::redirectwhois($query,$host,$port)
sub GWhoIs::Core::redirectwhois {
my ($query,$host,$port) = @_; # todo: anstelle $port lieber ein $additional zulassen?
$port = 43 if !defined $port;
 
# check for query modifier (if any)
my ($modmethod, $modhost, $modadditional) = GWhoIs::Core::getmethodother("redirect:$host(:$port){0,1}");
 
return GWhoIs::Core::doquery($query,$modmethod,$modhost,$modadditional)
if ( $modmethod ne 'none');
 
return GWhoIs::Core::doquery($query, 'whois', "$host:$port");
}
 
# ($resulttext, $exitcode) = GWhoIs::Core::doquery($query,$method,$host,$additional);
sub GWhoIs::Core::doquery {
my ($query,$method,$host,$additional,$inside_multiple) = @_;
my $result = '';
my $exitcode = 0;
 
$query = '' if !defined $query;
$method = '' if !defined $method;
$host = '' if !defined $host;
$additional = '' if !defined $additional;
$inside_multiple = 0 if !defined $inside_multiple;
 
if ($method eq 'multiple') {
my $triple;
# do not match "::::", e.g. used by notice
my @triple_split = split(/(?<!:):::(?!:)/, $additional);
my $count = 0;
foreach $triple (@triple_split) {
($method,$host,$additional) = split(/::/, $triple);
 
# We will not get the exact sequence of "prints" and "$result" outputs, but it is better than nothing.
# If we would print everything, we would get the warning "print wide char" at nic.es
# If we would save all output to $result without buffering the prints inside GWhoIs::Core::doquery(), the prints would not be in front of their section.
my $output = '';
open TOOUTPUT, '>', \$output or die "Can't open TOOUTPUT: $!"; # TODO: exitcode
my $orig_select = select(TOOUTPUT);
 
my ($loc_text, $loc_exitcode) = GWhoIs::Core::doquery($query, $method, $host, $additional, 1);
$exitcode = max($exitcode, $loc_exitcode);
 
$output .= GWhoIs::Utils::trim($loc_text);
$output .= "\n\n------\n\n" if $count < $#triple_split;
select($orig_select);
$result .= $output;
 
$count += 1;
}
 
# done
$method = '';
}
 
# TODO: usage of methods. delete unused ones!
# wwwgreplv -> removed
# whoisjp: not in pattern
# whoisarin: not in pattern
# inicwhois: in use
 
elsif ($method eq 'wwwsgrep') {
my ($protocol, $hostname) = GWhoIs::Utils::splitProtocolHost($host);
 
print "Querying $hostname with $protocol.\n\n";
 
my ($loc_text, $loc_exitcode) = GWhoIs::Core::wwwsgrep($host,$additional);
$exitcode = max($exitcode, $loc_exitcode);
if ($loc_exitcode) {
$result .= "Query to web server failed.\n";
} else {
if ($loc_text ne '') {
$result = "Match found:\n$loc_text\n";
} else {
$result = "No match found. This probably means that this domain does not exist.\n";
}
}
}
 
elsif ($method =~ /^whois(|jp|arin)$/) {
my ($parameter,$outquery,$prefix) = ('', '', '');
 
my $port = 43;
my $noipprefix = '';
my $ipprefix = '';
my $trailer = '';
my $strip = '';
 
$additional = '' if !defined $additional;
 
foreach $parameter (split('\|', $additional)) {
$trailer = $1 if ( $parameter =~ /trailer=(.*)/ );
$strip = $1 if ( $parameter =~ /strip=(.*)/ );
$prefix = $1 if ( $parameter =~ /prefix=(.*)/ );
}
 
$port = $1 if ( $host =~ /.+:(\d+)/ );
$host =~ s/:(\d+)//g;
 
print "Querying $host:$port with whois.\n"; # todo "rwhois"?
 
$outquery = $prefix . $query . $trailer . "\n";
$outquery =~ s/$strip//g if ( $strip ne '' );
 
my $loc_exitcode;
($result, $loc_exitcode) = GWhoIs::Core::whoisaccess($host,$port,$outquery);
$exitcode = max($exitcode, $loc_exitcode);
 
# TODO rwhois:// implementierung ok?
if ( $result =~ /ReferralServer: whois:\/\/(.*):43/mi || $result =~ /ReferralServer: whois:\/\/(.*)/mi ) {
($result, $loc_exitcode) = GWhoIs::Core::redirectwhois($query,$1);
$host = ''; #TODO???
$exitcode = max($exitcode, $loc_exitcode);
} elsif ( $result =~ /ReferralServer: r{0,1}whois:\/\/([^:]*):(\d+)/mi ) {
# ($result, $loc_exitcode) = GWhoIs::Core::whoisaccess($1,$2,$query); # TODO rediretwhois ?
($result, $loc_exitcode) = GWhoIs::Core::redirectwhois($query,$1,$2);
$exitcode = max($exitcode, $loc_exitcode);
} elsif ( $result =~ /ReferralServer: rwhois:\/\/(.*)/mi ) {
# ($result, $loc_exitcode) = GWhoIs::Core::whoisaccess($1,4321,$query); # TODO rediretwhois ?
($result, $loc_exitcode) = GWhoIs::Core::redirectwhois($query,$1,4321);
$exitcode = max($exitcode, $loc_exitcode);
} elsif ( $result =~ /(refer|whois server):\s+(.*)/m ) {
# "refer:" is sent by whois.iana.org (e.g. if you query test.de )
($result, $loc_exitcode) = GWhoIs::Core::redirectwhois($query,$2);
$host = ''; #TODO???
$exitcode = max($exitcode, $loc_exitcode);
}
 
# TODO: http://tools.ietf.org/html/rfc1714#section-3.3.2
# %referral<SP><server>[:type]<SP>[authority area]
 
print "\n";
}
 
elsif ($method eq 'inicwhois' ) {
my $port = $additional || 43;
$result = ($GWhoIs::Core::step++).". Step: Querying $host:$port with whois.\n\n"; #todo "rwhois"?
$query .= "\n"; # ???
 
my ($loc_text, $loc_exitcode) = GWhoIs::Core::inicwhoisaccess($host,$port,$query);
$result .= $loc_text;
$exitcode = max($exitcode, $loc_exitcode);
}
 
elsif ($method eq 'cgi') {
my ($protocol, $hostname) = GWhoIs::Utils::splitProtocolHost($host);
 
print "Querying $hostname ($protocol) with cgi.\n\n";
#!!
# print "$host\n";
 
# TODO: lynx seems to be better in some ways!
# For example, a website that outputs "text/plain" will be rendered correct in lynx!
# $result = `lynx -connect_timeout=10 -dump "$host" 2>&1`;
# $result .= "FAILED with exit code $?\n\n" if $?;
 
# TODO: GWhoIs::Core::getsource ok? war vorher IMMER lynx
my ($loc_text, $loc_exitcode) = GWhoIs::Core::getsource($host);
 
$exitcode = max($exitcode, $loc_exitcode);
if ($loc_exitcode) {
$result .= "Query to web server failed.\n";
} else {
$result = GWhoIs::Utils::render_html($loc_text);
}
}
 
elsif ($method eq 'cgipost') {
my ($protocol, $hostname) = GWhoIs::Utils::splitProtocolHost($host);
 
print "Querying $hostname ($protocol) with cgi.\n\n";
#!!
# print "echo -e '$additional\n---' | lynx -connect_timeout=10 -dump -post_data '$host'\n";
 
# TODO: GWhoIs::Utils::render_html() better? TODO: lynx source?
# [Ma 22.07.2013] "echo -e" does not work... "-e" will shown to the output... However "\n" will still work if I remove -e ... weird.
# $result = `echo -e "$additional\n---" | lynx -dump -post_data "$host" 2>&1`; # TODO escape
# $result = `echo "$additional\n---" | lynx -dump -post_data "$host" 2>&1`; # TODO escape
$result = `echo "$additional" | curl --silent -X POST --data-binary \@- "$host" | lynx -dump -stdin 2>&1`; # TODO escape
my $loc_exitcode = $?;
$exitcode = max($exitcode, $loc_exitcode);
$result .= "FAILED with exit code $loc_exitcode\n\n" if $loc_exitcode;
}
 
elsif ($method eq 'cgipostcurl') {
my ($protocol, $hostname) = GWhoIs::Utils::splitProtocolHost($host);
 
print "Querying $hostname ($protocol) with cgi.\n\n";
# print "$additional\n"; #!!
# print "curl --max-time 10 --stderr /dev/null -e $host --data '$additional' $host | lynx -dump -stdin\n";
 
# TODO: "set pipefail" doesn't work (insecure certificate will not cause the function to fail)
$result = `curl --max-time 10 --insecure --stderr /dev/null -e "$host" --data "$additional" "$host" | lynx -dump -stdin 2>&1`; # TODO escape
 
my $loc_exitcode = $?;
$exitcode = max($exitcode, $loc_exitcode);
$result .= "FAILED with exit code $loc_exitcode\n\n" if $loc_exitcode;
}
 
elsif ($method eq 'cgihttps') {
my ($protocol, $hostname) = GWhoIs::Utils::splitProtocolHost($host);
 
print "Querying $hostname ($protocol) with cgi.\n\n";
# print "$additional\n"; #!!
# print "curl --max-time 10 --stderr /dev/null $host | lynx -dump -stdin\n";
# $result = `curl --max-time 10 --insecure --stderr /dev/null "$host" | lynx -dump -stdin 2>&1`;
my $html = `curl --max-time 10 --insecure --stderr /dev/null "$host" 2>&1`; # TODO escape. why --insecure?
my $loc_exitcode = $?;
$exitcode = max($exitcode, $loc_exitcode);
$html .= "FAILED with exit code $loc_exitcode\n\n" if $loc_exitcode;
$result = GWhoIs::Utils::render_html($html);
}
 
elsif ($method eq 'notice') {
if ($inside_multiple) {
$result = "\n\nAdditional information for query '$query'.\n\n" . $additional . "\n\n";
} else {
$result = "\n\nNo lookup service available for your query '$query'.\n\ngwhois remarks: " . $additional . "\n\n";
}
# $exitcode = 0;
}
 
elsif ($method eq 'program') {
my ($program) = GWhoIs::Utils::trim($host);
$program =~ s/\$gwhois\$/$FindBin::Bin/;
print "Querying script $program\n\n";
$result = `$program $additional "$query" 2>&1`;
my $loc_exitcode = $?;
$exitcode = max($exitcode, $loc_exitcode);
$result .= "FAILED with exit code $loc_exitcode\n\n" if $loc_exitcode;
}
 
if ($host =~ /arin/) {
my $loc_exitcode;
if ($result =~ /Maintainer: RIPE/) {
($result, $loc_exitcode) = GWhoIs::Core::redirectwhois($query,'whois.ripe.net');
$exitcode = max($exitcode, $loc_exitcode);
} elsif ($result =~ /Maintainer: AP/) {
($result, $loc_exitcode) = GWhoIs::Core::redirectwhois($query,'whois.apnic.net');
$exitcode = max($exitcode, $loc_exitcode);
}
}
elsif ($host =~ /apnic/) {
my $loc_exitcode;
if ($result =~ /netname: AUNIC-AU/) {
($result, $loc_exitcode) = GWhoIs::Core::redirectwhois($query,'whois.aunic.net');
$exitcode = max($exitcode, $loc_exitcode);
} elsif ($result =~ /netname: JPNIC-JP/) {
($result, $loc_exitcode) = GWhoIs::Core::redirectwhois($query,'whois.nic.ad.jp');
$exitcode = max($exitcode, $loc_exitcode);
}
}
elsif ($host =~ /ripe/ && $result =~ /remarks:\s+whois -h (\S+)/) {
my $loc_exitcode;
($result, $loc_exitcode) = GWhoIs::Core::redirectwhois($query,$1);
$exitcode = max($exitcode, $loc_exitcode);
}
# TODO: internic gibts doch gar nicht mehr, oder?
elsif (($host =~ /internic/) && ($result =~ /No match for/) && ($query !~ /\.(arpa|com|edu|net|org)$/) ) {
my ($result1, $loc_exitcode) = GWhoIs::Core::redirectwhois($query,'whois.ripe.net');
$result = $result1 if $result1 !~ /No entries found/;
$exitcode = max($exitcode, $loc_exitcode);
}
 
return ($result, $exitcode);
}
 
1;
Property changes:
Added: svn:mime-type
+text/x-perl
\ No newline at end of property
/trunk/main/lib/GWhoIs/IPv4.pm
0,0 → 1,79
package GWhoIs::IPv4;
 
use warnings;
use strict;
 
# install with "cpan Net::IP" or "aptitude install libnet-ip-perl"
use Net::IP;
 
# %v4pattern = GWhoIs::IPv4::getpatternv4()
sub GWhoIs::IPv4::getpatternv4 {
my (%pattern);
my ($method,$host,$additional,$cline,$line,$rehost,$readditional);
 
foreach my $patternfile (GWhoIs::Core::getpatternfiles()) {
open(PATTERN,"<$patternfile") || die "Cannot open $patternfile. STOP.\n";
 
while ( defined($line = <PATTERN>) ) {
# chomp $line;
$line = GWhoIs::Utils::trim($line);
 
if ( $line =~ /^#/ ) { # comment
} elsif ( ($cline) = $line =~ /^:(.*)$/ ) { # method declaration
($method,$host,$additional) = split(/\|/,$cline,3);
$method='' if !defined $method;
$host='' if !defined $host;
$additional='' if !defined $additional;
} elsif (( $line =~ /^=/ ) && ($line !~ /:/)) { # do not read IPv6 lines (containing ':')
($rehost,$readditional) = GWhoIs::Core::methodpatternregex('',$host,$additional,$line);
 
# Store the IP inside the CIDR as integer-notation. So, the pattern "001.2.3.4" will be recognized as "1.2.3.4" too.
($line) = $line =~ /^=(.*)$/; # remove leading "="
my ($ipv4,$bits) = split(/\//,$line,2); # split into IP address and CIDR
$ipv4 = Net::IP::ip_expand_address($ipv4, 4); # Expand the IP address in case it uses shortened syntax or something
$bits = 32 if ($bits eq ''); # if no CIDR was found, assume it is a single IPv4 address
my ($ipa,$ipb,$ipc,$ipd) = split(/\./,$ipv4,4);
$ipa=0 if (!defined $ipa);
$ipb=0 if (!defined $ipb);
$ipc=0 if (!defined $ipc);
$ipd=0 if (!defined $ipd);
my $ip = $ipa<<24|$ipb<<16|$ipc<<8|$ipd;
 
my $cidr = "$ip/$bits";
 
$pattern{$cidr}{'method'} = $method;
$pattern{$cidr}{'host'} = $rehost;
$pattern{$cidr}{'add'} = $readditional;
}
}
}
return (%pattern); # TODO: might be undefined
}
 
# ($method, $host, $additional) = GWhoIs::IPv4::getmethodv4($ipa, $ipb, $ipc, $ipd);
sub GWhoIs::IPv4::getmethodv4 {
my ($ipa, $ipb, $ipc, $ipd) = @_;
my ($ip, $bits, $netmask, $method, $host, $additional, %pattern);
 
$ip = $ipa<<24 | $ipb<<16 | $ipc<<8 | $ipd;
$netmask = 256**4-1;
%pattern = GWhoIs::IPv4::getpatternv4();
$method = '';
 
for ($bits=32; $bits>=0 && $method eq ''; $bits--) {
$ip = $ip & $netmask;
$netmask <<= 1;
 
my $cidr = "$ip/$bits";
 
$method = $pattern{$cidr}{'method'} if defined $pattern{$cidr}{'method'};
$host = $pattern{$cidr}{'host'} if defined $pattern{$cidr}{'host'};
$additional = $pattern{$cidr}{'add'} if defined $pattern{$cidr}{'add'};
}
 
$host = $GWhoIs::Core::mirror{$method.$host} if defined $GWhoIs::Core::mirror{$method.$host};
return ($method,$host,$additional); # TODO: might be undefined (+ everywhere else)
}
 
1;
 
Property changes:
Added: svn:mime-type
+text/x-perl
\ No newline at end of property
/trunk/main/lib/GWhoIs/IPv6.pm
0,0 → 1,99
package GWhoIs::IPv6;
 
use warnings;
use strict;
 
# install with "cpan Net::IP" or "aptitude install libnet-ip-perl"
use Net::IP;
 
# at Debian: install with "aptitude install libmath-bigint-gmp-perl"
use Math::BigInt;
 
# %v6pattern = GWhoIs::IPv6::getpatternv6()
sub GWhoIs::IPv6::getpatternv6 {
my (%pattern);
my ($method,$host,$additional,$cline,$line,$rehost,$readditional);
 
foreach my $patternfile (GWhoIs::Core::getpatternfiles()) {
open(PATTERN,"<$patternfile") || die "Cannot open $patternfile. STOP.\n";
 
while ( defined($line = <PATTERN>) ) {
# chomp $line;
$line = GWhoIs::Utils::trim($line);
 
if ( $line =~ /^#/ ) { # comment
} elsif ( ($cline) = $line =~ /^:(.*)$/ ) { # method declaration
($method,$host,$additional) = split(/\|/,$cline,3);
$method='' if !defined $method;
$host='' if !defined $host;
$additional='' if !defined $additional;
} elsif (( $line =~ /^=/ ) && ($line =~ /:/)) { # do not read IPv4 lines (not containing ':')
($rehost,$readditional) = GWhoIs::Core::methodpatternregex('',$host,$additional,$line);
 
# Store the IP inside the CIDR as integer-notation.
($line) = $line =~ /^=(.*)$/; # remove leading "="
my ($ipv6,$bits) = split(/\//,$line,2); # split into IP address and CIDR
$ipv6 = Net::IP::ip_expand_address($ipv6, 6); # Expand the IP address in case it uses nested syntax or something
$bits = 128 if ($bits eq ''); # if no CIDR was found, assume it is a single IPv6 address
my ($ipa,$ipb,$ipc,$ipd,$ipe,$ipf,$ipg,$iph) = split(/:/,$ipv6,8);
$ipa = defined $ipa ? Math::BigInt->new(hex($ipa)) : 0;
$ipb = defined $ipb ? Math::BigInt->new(hex($ipb)) : 0;
$ipc = defined $ipc ? Math::BigInt->new(hex($ipc)) : 0;
$ipd = defined $ipd ? Math::BigInt->new(hex($ipd)) : 0;
$ipe = defined $ipe ? Math::BigInt->new(hex($ipe)) : 0;
$ipf = defined $ipf ? Math::BigInt->new(hex($ipf)) : 0;
$ipg = defined $ipg ? Math::BigInt->new(hex($ipg)) : 0;
$iph = defined $iph ? Math::BigInt->new(hex($iph)) : 0;
my $ip = $ipa<<112|$ipb<<96|$ipc<<80|$ipd<<64|$ipe<<48|$ipf<<32|$ipg<<16|$iph;
 
my $cidr = "$ip/$bits";
 
$pattern{$cidr}{'method'} = $method;
$pattern{$cidr}{'host'} = $rehost;
$pattern{$cidr}{'add'} = $readditional;
}
}
}
return (%pattern);
}
 
 
# ($method, $host, $additional) = GWhoIs::IPv6::getmethodv6($ipv6);
sub GWhoIs::IPv6::getmethodv6 {
my ($ipv6) = @_;
$ipv6 = Net::IP::ip_expand_address($ipv6, 6);
my ($ipa,$ipb,$ipc,$ipd,$ipe,$ipf,$ipg,$iph) = split(/:/,$ipv6,8);
 
$ipa = defined $ipa ? Math::BigInt->new(hex($ipa)) : 0;
$ipb = defined $ipb ? Math::BigInt->new(hex($ipb)) : 0;
$ipc = defined $ipc ? Math::BigInt->new(hex($ipc)) : 0;
$ipd = defined $ipd ? Math::BigInt->new(hex($ipd)) : 0;
$ipe = defined $ipe ? Math::BigInt->new(hex($ipe)) : 0;
$ipf = defined $ipf ? Math::BigInt->new(hex($ipf)) : 0;
$ipg = defined $ipg ? Math::BigInt->new(hex($ipg)) : 0;
$iph = defined $iph ? Math::BigInt->new(hex($iph)) : 0;
 
my ($ip, $bits, $netmask, $method, $host, $additional, %pattern);
 
$ip = $ipa<<112|$ipb<<96|$ipc<<80|$ipd<<64|$ipe<<48|$ipf<<32|$ipg<<16|$iph;
$netmask = Math::BigInt->new(65536)**8-1;
%pattern = GWhoIs::IPv6::getpatternv6();
$method = '';
 
for ($bits=128; $bits>=0 && $method eq ''; $bits--) {
$ip = $ip & $netmask;
$netmask <<= 1;
 
my $cidr = "$ip/$bits";
 
$method = $pattern{$cidr}{'method'} if defined $pattern{$cidr}{'method'};
$host = $pattern{$cidr}{'host'} if defined $pattern{$cidr}{'host'};
$additional = $pattern{$cidr}{'add'} if defined $pattern{$cidr}{'add'};
}
 
$host = $GWhoIs::Core::mirror{$method.$host} if defined $GWhoIs::Core::mirror{$method.$host};
return ($method,$host,$additional);
}
 
1;
 
Property changes:
Added: svn:mime-type
+text/x-perl
\ No newline at end of property
/trunk/main/lib/GWhoIs/OID.pm
0,0 → 1,85
package GWhoIs::OID;
 
use warnings;
use strict;
 
# urn:OID:2.0999 -> .2.999
sub GWhoIs::OID::normalize_oid($) {
my $string = shift;
 
# remove urn:oid: and oid:
$string =~ s/^(urn:oid:|oid:|)//i;
 
# add leading dot if it does not already exist
$string =~ s/^\.//;
$string = '.' . $string;
 
# remove leading zeros (requires leading dot)
$string =~ s/\.0*([1-9])/.$1/g;
 
return $string;
}
 
# %oidpattern = GWhoIs::OID::getpatternoid()
sub GWhoIs::OID::getpatternoid {
my (%pattern);
my ($method,$host,$additional,$cline,$line);
 
foreach my $patternfile (GWhoIs::Core::getpatternfiles()) {
open(PATTERN,"<$patternfile") || die "Cannot open $patternfile. STOP.\n";
 
while ( defined($line = <PATTERN>) ) {
# chomp $line;
$line = GWhoIs::Utils::trim($line);
 
if ( $line =~ /^#/ ) { # comment
} elsif ( ($cline) = $line =~ /^:(.*)$/ ) { # method declaration
($method,$host,$additional) = split(/\|/,$cline,3);
$method='' if !defined $method;
$host='' if !defined $host;
$additional='' if !defined $additional;
} elsif ( $line =~ /^(urn:){0,1}oid:/i ) {
$line = GWhoIs::OID::normalize_oid($line);
 
$pattern{$line}{'method'} = $method;
$pattern{$line}{'host'} = $host;
$pattern{$line}{'add'} = $additional;
}
}
}
return (%pattern);
}
 
 
# ($method, $host, $additional) = GWhoIs::OID::getmethodoid(@oid);
sub GWhoIs::OID::getmethodoid {
my @arcs = @_;
 
my $method = '';
my $host = '';
my $additional = '';
 
my %pattern = GWhoIs::OID::getpatternoid();
 
my $complete_oid = '';
foreach my $arc (@arcs) {
$complete_oid .= '.' if ($complete_oid ne '.');
$complete_oid .= $arc;
 
$complete_oid = GWhoIs::OID::normalize_oid($complete_oid);
 
$method = $pattern{$complete_oid}{'method'} if defined $pattern{$complete_oid}{'method'};
$host = $pattern{$complete_oid}{'host'} if defined $pattern{$complete_oid}{'host'};
$additional = $pattern{$complete_oid}{'add'} if defined $pattern{$complete_oid}{'add'};
}
 
$host = $GWhoIs::Core::mirror{$method.$host} if defined $GWhoIs::Core::mirror{$method.$host};
 
$host =~ s/~oid~/$complete_oid/;
$additional =~ s/~oid~/$complete_oid/;
 
return ($method,$host,$additional);
}
 
1;
 
Property changes:
Added: svn:mime-type
+text/x-perl
\ No newline at end of property
/trunk/main/lib/GWhoIs/Utils.pm
0,0 → 1,129
package GWhoIs::Utils;
 
use warnings;
use strict;
 
use Encode;
 
# $result = GWhoIs::Utils::lynxsource($url)
sub GWhoIs::Utils::lynxsource {
my ($url) = @_;
$url = quotemeta($url);
# LYNX sometimes hangs in combination with TOR
# return qx{lynx -connect_timeout=10 -source $url};
return qx{curl --user-agent "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:59.0) Gecko/20100101 Firefox/59.0" --silent --max-time 10 $url};
}
 
# $line = htmlpre($line);
sub GWhoIs::Utils::htmlpre {
my ($line) = @_;
$line =~ s|\n|<br>|g;
$line =~ s| |&nbsp;|g;
return $line;
}
 
# $rendered = GWhoIs::Utils::render_html($html);
sub GWhoIs::Utils::render_html {
my ($html) = @_;
 
return '' if !defined $html;
 
$html =~ s|<!--.*?-->||gsi;
 
$html =~ s|<pre>(.*?)</pre>|GWhoIs::Utils::htmlpre($1)|gsei;
$html =~ s|<textarea>(.*?)</textarea>|GWhoIs::Utils::htmlpre($1)|gsei;
 
$html =~ s|\n| |g;
 
$html =~ s|<p\s*/{0,1}\s*>|\n|gsi;
$html =~ s|<p\s.*?>|\n|gsi;
 
$html =~ s|<tr\s*/{0,1}\s*>|\n|gsi;
$html =~ s|<tr\s.*?>|\n|gsi;
$html =~ s|<td>| |gsi;
 
$html =~ s|<script.*?</script>||gsi;
$html =~ s|<style.*?</style>||gsi;
 
$html =~ s| \t| |gsi;
$html =~ s|\s*\n\s*\n|\n|gsi;
$html =~ s|^\s*||gm;
 
$html =~ s|&nbsp;| |gsi;
$html =~ s|<br\s*/{0,1}\s*>|\n|gsi;
$html =~ s|<br\s.*?>|\n|gsi;
$html =~ s|\<.*?\>||gsi;
 
return($html);
}
 
 
sub GWhoIs::Utils::trim($) {
# Source: http://www.somacon.com/p114.php
my $string = shift;
$string =~ s/^\s+//;
$string =~ s/\s+$//;
return $string; # TODO: ein push faende ich besser
}
 
sub GWhoIs::Utils::is_uc($) {
my $str = shift;
 
my $char;
foreach $char (split //, $str) {
return 1 if (ord($char) > 255);
}
 
return 0;
}
 
sub GWhoIs::Utils::is_ascii($) {
my $str = shift;
 
my $char;
foreach $char (split //, $str) {
return 0 if (ord($char) >= 128);
}
 
return 1;
}
 
sub GWhoIs::Utils::is_utf8($) {
my $str = shift;
 
my $s = eval { Encode::decode('utf8', $str, Encode::FB_CROAK) };
return defined($s);
 
# This procedure does not work :-( GWhoIs::Utils::is_utf8 and valid are true even if they should not...
# return 1 if utf8::GWhoIs::Utils::is_utf8($str);
# return 0 if GWhoIs::Utils::is_uc($str);
# return 1 if (Encode::Detect::Detector::detect($str) eq "UTF-8");
# return utf8::valid($str);
}
 
sub GWhoIs::Utils::enforce_utf8($) {
my $str = shift;
 
if (GWhoIs::Utils::is_uc($str)) {
$str =~ s/^\x{FEFF}//;
utf8::encode($str);
}
elsif (!GWhoIs::Utils::is_utf8($str)) {
$str =~ s/^\xEF\xBB\xBF//;
utf8::encode($str);
}
 
return $str;
}
 
# ($protocol, $hostname) = GWhoIs::Utils::splitProtocolHost($url)
sub GWhoIs::Utils::splitProtocolHost($) {
my $url = shift;
 
my ($protocol, $hostname) = $url =~ /(https{0,1}):\/\/([^\/]+)/;
 
return ($protocol, $hostname);
}
 
1;
 
Property changes:
Added: svn:mime-type
+text/x-perl
\ No newline at end of property
/trunk/main/pattern/001_subdomains
0,0 → 1,278
#: version 20120626.1.2+viathinksoft2017XXXX
 
# Attention: Please note that gwhois will take the first regex match only!
# This means if you have subdomain-registries, then you must define them first before you define the main registry.
# Correct order: .uk.com, .com
# So you have to name this file in a way, so that it will be in front of pattern.d/domains after sorting.
#
 
# Subdomain-Registries for gTLD and other domains
# --------------------------------------------------------------------
 
:whois|whois.eu.org
\.eu\.org$
 
#:notice||Please visit https://manage.centralnic.com/support/view_whois/ and enter the CAPTCHA.
:whois|whois.centralnic.net
# [Marschall 2013-07-25] Removed .web.com and .ae.com . They are not in the ownership of CentralNIC anymore.
# See the current list of available subdomains: https://www.centralnic.com/portfolio/registration
# Last revision/check: 2016-01-10
\.(co|mex|africa|eu|uk|us|cn|de|jpn|kr|no|za|br|ar|ru|sa|se|hu|gb|qc|uy|gr)\.com$
\.(us|ae)\.org$
\.(in|jp|uk|se|hu|gb)\.net$
\.com\.de$
\.com\.se$
# The Professional Web (-> moved to pattern.d/domains to avoid confusions)
#\.pw$
# Los Angeles (-> moved to pattern.d/domains to avoid confusions)
#\.la$
 
:notice||Please go to http://www.de.ki/whois and enter the CAPTCHA.
\.de\.ki$
 
:cgipost|http://www.freedomain.co.nr/whois.php|account=~1~&domain=co.nr&action=whois&submit=1
(.*)\.co\.nr$
 
# --- <Begin third party services which all have the same design and operator>
# This an unknown operator who offers third-party domains under many different names
# The services are under the IPs 188.40.117.12, 188.40.70.27 and 188.40.70.29 (and probably more)
# I would be happy to receive more information about them (especially their company name) in hope to get a complete list of all possible third-party domain registries.
 
# Search for new places using Google search:
# https://www.google.de/#q=Whois++%22Please+provide+the+following+information.%22
 
:notice||Please go to http://www.nic.de.be/us/whois/ and enter the CAPTCHA.
\.de\.be$
 
:notice||Please go to http://www.nic.at.vu/us/whois/ and enter the CAPTCHA.
\.at\.vu$
 
:notice||Please go to http://www.nic.ch.vu/us/whois/ and enter the CAPTCHA.
\.ch\.vu$
 
:notice||Please go to http://www.nic.de.vu/us/whois/ and enter the captcha.
\.de\.vu$
 
:notice||Please go to http://us.cydots.com/whois/ and enter the CAPTCHA.
\.net\.ms$
\.info\.ms$
\.us\.ms$
\.shop\.ms$
\.fr\.ms$
\.au\.ms$
\.com\.au\.ms$
\.de\.ms$
\.cn\.ms$
\.hk\.ms$
\.br\.ms$
\.com\.br\.ms$
\.net\.br\.ms$
\.org\.br\.ms$
\.biz\.br\.ms$
\.info\.br\.ms$
\.etc\.br\.ms$
 
:notice||Please visit http://www.duonic.com/us/whois/ and enter the CAPTCHA.
\.de\.nr$
\.at\.nr$
\.co\.at\.nr$
 
:notice||Please visit http://www.lavanic.com/us/whois/ and enter the CAPTCHA.
\.de\.lv$
\.at\.lv$
\.co\.at\.lv$
\.or\.at\.lv$
\.ch\.lv$
 
:notice||Please visit http://www.europnic.com/us/whois/ and enter the CAPTCHA.
\.de\.gg
\.at\.gg
\.co\.at\.gg
\.ch\.gg
\.fr\.gg
 
:notice||Please visit http://www.homenic.com/us/whois/ and enter the CAPTCHA.
\.at\.hm$
\.co\.at\.hm$
\.de\.hm$
 
:notice||Please visit http://www.alpennic.com/us/whois/ or http://us.unonic.com/whois/ or http://us.aliasdomains.com/whois/ and enter the CAPTCHA.
\.net\.tf$
\.eu\.tf$
\.int\.tf$
\.edu\.tf$
\.us\.tf$
\.ca\.tf$
\.bg\.tf$
\.ru\.tf$
\.pl\.tf$
\.cz\.tf$
\.de\.tf$
\.at\.tf$
\.co\.at\.tf$
\.ch\.tf$
\.sg\.tf$
 
:notice||Please visit http://us.hitnic.com/whois/ or http://www.vorname.de/whois/ and enter the CAPTCHA.
\.at\.vg$
\.ch\.vg$
\.info\.vg$
\.biz\.vg$
\.web\.vg$
\.int\.vg$
\.fr\.vg$
\.us\.vg$
\.ca\.vg$
\.au\.vg$
\.com\.au\.vg$
\.jp\.vg$
 
:notice||Please visit http://www.nic.de.nu/us/whois/ and enter the CAPTCHA.
\.de\.nu$
 
:notice||Please visit http://www.nic.tr.vu/us/whois/ and enter the CAPTCHA.
\.tr\.vu$
\.com\.tr\.vu$
\.net\.tr\.vu$
\.org\.tr\.vu$
\.biz\.tr\.vu$
\.info\.tr\.vu$
\.web\.tr\.vu$
\.name\.tr\.vu$
\.gen\.tr\.vu$
\.gov\.tr\.vu$
\.edu\.tr\.vu$
\.av\.tr\.vu$
\.dr\.tr\.vu$
\.pol\.tr\.vu$
\.bel\.tr\.vu$
\.tsk\.tr\.vu$
\.k12\.tr\.vu$
\.bbs\.tr\.vu$
\.tel\.tr\.vu$
 
:notice||Please visit http://www.neunic.com/us/whois/ and enter the CAPTCHA.
\.de\.vc$
\.at\.vc$
\.co\.at\.vc$
\.or\.at\.vc$
\.ch\.vc$
 
:notice||Please visit http://us.popnic.com/whois/ and enter the CAPTCHA.
\.de\.pn$
\.at\.pn$
\.co\.at\.pn$
\.ch\.pn$
\.fr\.pn$
\.it\.pn$
\.uk\.pn$
\.co\.uk\.pn$
\.us\.pn$
\.ca\.pn$
\.au\.pn$
\.com\.au\.pn$
\.cn\.pn$
\.jp\.pn$
 
:notice||Please visit http://us.joynic.com/whois/ and enter the CAPTCHA.
\.de\.vu$
\.at\.vu$
\.co\.at\.vu$
\.or\.at\.vu$
\.ch\.vu$
\.nl\.vu$
\.ca\.vu$
\.tr\.vu$
\.com\.tr\.vu$
\.net\.tr\.vu$
\.org\.tr\.vu$
\.biz\.tr\.vu$
\.info\.tr\.vu$
\.web\.tr\.vu$
\.name\.tr\.vu$
\.gen\.tr\.vu$
\.gov\.tr\.vu$
\.edu\.tr\.vu$
\.av\.tr\.vu$
\.dr\.tr\.vu$
\.pol\.tr\.vu$
\.bel\.tr\.vu$
\.tsk\.tr\.vu$
\.k12\.tr\.vu$
\.bbs\.tr\.vu$
\.tel\.tr\.vu$
\.gr\.vu$
\.com\.gr\.vu$
\.net\.gr\.vu$
\.org\.gr\.vu$
\.edu\.gr\.vu$
\.gov\.gr\.vu$
\.ru\.vu$
\.pl\.vu$
\.es\.vu$
\.za\.vu$
 
:notice||Please visit http://us.mediadots.com/whois/ and enter the CAPTCHA.
\.eu\.mn$
\.at\.mn$
\.co\.at\.mn$
\.fr\.mn$
\.uk\.mn$
\.co\.uk\.mn$
\.us\.mn$
\.nl\.mn$
\.it\.mn$
\.au\.mn$
\.com\.au\.mn$
\.cn\.mn$
\.jp\.mn$
 
:notice||Please visit http://www.nic.nl.vu/us/whois/ and enter the CAPTCHA.
\.nl\.vu$
 
# Seems to be defunct, see some cached version of the old site here: http://feeds.feedburner.com/copasit
# :notice||Please visit http://us.smartdots.com/whois/ and enter the CAPTCHA.
# \.net\.tc$
# \.eu\.tc$
# \.us\.tc$
# \.uk\.tc$
# \.co\.uk\.tc$
# \.me\.uk\.tc$
# \.org\.uk\.tc$
# \.au\.tc$
# \.com\.au\.tc$
# \.pro\.tc$
# \.shop\.tc$
# \.edu\.tc$
# \.int\.tc$
# \.de\.tc$
# \.at\.tc$
# \.co\.at\.tc$
# \.ch\.tc$
# \.it\.tc$
# \.es\.tc$
# \.ru\.tc$
# \.ua\.tc$
# \.se\.tc$
# \.dk\.tc$
# \.be\.tc$
# \.no\.tc$
# \.pl\.tc$
# \.bg\.tc$
# \.cz\.tc$
# \.hu\.tc$
# \.ie\.tc$
# \.mx\.tc$
# \.br\.tc$
# \.com\.br\.tc$
# \.net\.br\.tc$
# \.org\.br\.tc$
# \.biz\.br\.tc$
# \.info\.br\.tc$
# \.etc\.br\.tc$
# \.hk\.tc$
# \.kr\.tc$
# \.th\.tc$
# \.ph\.tc$
 
# --- <End third party services which all have the same design and operator>
/trunk/main/pattern/asn
0,0 → 1,2333
#: version 20181207
 
# Autonomous System Numbers (ASN)
# Automatically generated by /daten/homes/vwhois/v2019/maintenance/pattern-generator/gwhois-pattern-update
# Generation timestamp: 2019-04-29 13:40:47 GMT+0200
# Source: (20181207) https://www.iana.org/assignments/as-numbers/as-numbers.txt
 
# ARIN
:whois|whois.arin.net|prefix=a + |
*AS:1-6
*AS:8-27
*AS:29-136
*AS:138-172
*AS:174-223
*AS:225-247
*AS:252-260
*AS:262-277
*AS:279-285
*AS:287
*AS:289-293
*AS:295-374
*AS:376-377
*AS:379-512
*AS:514-516
*AS:518-527
*AS:530-539
*AS:540
*AS:541-543
*AS:545-552
*AS:554-558
*AS:560-564
*AS:566-579
*AS:580
*AS:581-589
*AS:591-592
*AS:594-668
*AS:670-675
*AS:677-678
*AS:682-694
*AS:698-708
*AS:711
*AS:713-718
*AS:720-759
*AS:762-763
*AS:765
*AS:767-773
*AS:784-785
*AS:787-788
*AS:791-1100
*AS:1201-1202
*AS:1204
*AS:1206-1212
*AS:1214-1220
*AS:1222-1227
*AS:1236
*AS:1238-1240
*AS:1242-1247
*AS:1249
*AS:1252
*AS:1254-1256
*AS:1258-1266
*AS:1276-1278
*AS:1280-1289
*AS:1291
*AS:1293-1295
*AS:1298
*AS:1310-1317
*AS:1319-1341
*AS:1343-1351
*AS:1354-1546
*AS:1548-1652
*AS:1655-1657
*AS:1658
*AS:1660-1662
*AS:1664-1679
*AS:1681-1703
*AS:1705-1706
*AS:1727-1728
*AS:1730-1731
*AS:1733-1737
*AS:1740
*AS:1742-1747
*AS:1749-1751
*AS:1753
*AS:1757-1758
*AS:1760-1763
*AS:1765-1767
*AS:1772-1773
*AS:1775
*AS:1777-1779
*AS:1782-1796
*AS:1798-1830
*AS:1832
*AS:1834
*AS:1838-1839
*AS:1842-1848
*AS:1852
*AS:1855-1876
*AS:1904-1915
*AS:1917-1920
*AS:1924-1925
*AS:1927-1929
*AS:1931-1934
*AS:1956-1959
*AS:1963-1966
*AS:1968-2003
*AS:2005-2011
*AS:2013-2015
*AS:2019-2025
*AS:2030-2035
*AS:2037
*AS:2041
*AS:2044
*AS:2046
*AS:2048
*AS:2050-2056
*AS:2137-2143
*AS:2145
*AS:2149-2173
*AS:2274-2276
*AS:2378-2379
*AS:2381-2384
*AS:2386
*AS:2489-2493
*AS:2495-2496
*AS:2531-2536
*AS:2538-2540
*AS:2542-2545
*AS:2548
*AS:2550-2553
*AS:2555-2560
*AS:2562
*AS:2564-2568
*AS:2571-2577
*AS:2579-2584
*AS:2615-2637
*AS:2639-2642
*AS:2644-2646
*AS:2648-2682
*AS:2684-2696
*AS:2698-2705
*AS:2707
*AS:2709-2712
*AS:2714
*AS:2717-2738
*AS:2740-2755
*AS:2757-2763
*AS:2765
*AS:2767-2771
*AS:2824-2829
*AS:2880-2894
*AS:2896-2903
*AS:2906
*AS:2908-2914
*AS:2916
*AS:2918-2920
*AS:2922-2924
*AS:2927-3057
*AS:3059-3066
*AS:3069-3082
*AS:3110-3131
*AS:3133-3140
*AS:3142-3150
*AS:3152-3153
*AS:3354-3356
*AS:3358-3362
*AS:3364-3381
*AS:3383-3390
*AS:3392-3394
*AS:3396-3411
*AS:3416-3448
*AS:3450
*AS:3451-3453
*AS:3455-3459
*AS:3461
*AS:3463-3483
*AS:3485-3486
*AS:3489-3495
*AS:3497-3509
*AS:3511-3547
*AS:3549
*AS:3552-3555
*AS:3557
*AS:3560-3582
*AS:3584-3595
*AS:3598-3602
*AS:3604
*AS:3606-3607
*AS:3609-3623
*AS:3625-3630
*AS:3633-3635
*AS:3637-3639
*AS:3641-3660
*AS:3663-3688
*AS:3694-3710
*AS:3712-3716
*AS:3718-3740
*AS:3742-3746
*AS:3749-3756
*AS:3759-3772
*AS:3774
*AS:3776-3783
*AS:3785
*AS:3788-3789
*AS:3791-3812
*AS:3814-3815
*AS:3817-3824
*AS:3826-3835
*AS:3837-3838
*AS:3841-3842
*AS:3844-3904
*AS:3906-3916
*AS:3919-3928
*AS:3930-3967
*AS:3970-3975
*AS:3977-4006
*AS:4008-4039
*AS:4041-4048
*AS:4050-4057
*AS:4059
*AS:4061-4133
*AS:4135-4140
*AS:4143-4147
*AS:4149-4157
*AS:4159-4173
*AS:4176-4177
*AS:4179
*AS:4180-4196
*AS:4198-4201
*AS:4203-4208
*AS:4210-4229
*AS:4231-4241
*AS:4243
*AS:4245-4250
*AS:4252-4269
*AS:4271-4273
*AS:4275-4351
*AS:4353-4380
*AS:4383-4386
*AS:4388-4404
*AS:4432
*AS:4435-4456
*AS:4459-4492
*AS:4494-4514
*AS:4516-4523
*AS:4525-4527
*AS:4529-4534
*AS:4536-4537
*AS:4539-4570
*AS:4572-4587
*AS:4590-4593
*AS:4595-4604
*AS:4606-4607
*AS:4866-4913
*AS:4915-4925
*AS:4927-4943
*AS:4945-4960
*AS:4962-4963
*AS:4965-4966
*AS:4968-4973
*AS:4975-4994
*AS:4996-5004
*AS:5006-5016
*AS:5019-5050
*AS:5052-5084
*AS:5086
*AS:5088
*AS:5090-5376
*AS:5632
*AS:5634-5638
*AS:5640-5647
*AS:5649-5691
*AS:5693-5707
*AS:5710-5712
*AS:5714-5721
*AS:5723-5733
*AS:5735-5744
*AS:5746-5771
*AS:5773-6056
*AS:6058-6062
*AS:6066
*AS:6069-6082
*AS:6086-6088
*AS:6090-6120
*AS:6122-6124
*AS:6126
*AS:6128-6132
*AS:6134
*AS:6136-6146
*AS:6150-6162
*AS:6164-6167
*AS:6169-6179
*AS:6181-6186
*AS:6188-6192
*AS:6194-6239
*AS:6241-6261
*AS:6263-6305
*AS:6307-6319
*AS:6321-6331
*AS:6333-6341
*AS:6343-6350
*AS:6352-6399
*AS:6401-6411
*AS:6413-6428
*AS:6430-6457
*AS:6459-6470
*AS:6472-6486
*AS:6488-6494
*AS:6496-6502
*AS:6504
*AS:6506-6528
*AS:6530-6534
*AS:6536-6542
*AS:6544
*AS:6546-6559
*AS:6561-6567
*AS:6569-6589
*AS:6591-6618
*AS:6620-6647
*AS:6649-6655
*AS:6912-6926
*AS:6928-6944
*AS:6946-6956
*AS:6958-6967
*AS:6969-7001
*AS:7003
*AS:7006-7019
*AS:7021-7037
*AS:7039-7047
*AS:7050-7055
*AS:7057-7062
*AS:7064-7079
*AS:7081-7086
*AS:7088-7102
*AS:7104-7119
*AS:7121-7124
*AS:7126-7130
*AS:7132-7136
*AS:7138
*AS:7139-7148
*AS:7150-7153
*AS:7155-7156
*AS:7158-7161
*AS:7163-7166
*AS:7168-7172
*AS:7174
*AS:7176-7183
*AS:7185-7194
*AS:7196-7198
*AS:7200-7230
*AS:7232-7235
*AS:7237
*AS:7238-7297
*AS:7299-7302
*AS:7304-7312
*AS:7314
*AS:7316-7324
*AS:7326-7339
*AS:7341-7364
*AS:7366-7389
*AS:7391-7398
*AS:7400-7407
*AS:7409-7413
*AS:7415-7416
*AS:7419
*AS:7421-7427
*AS:7429-7436
*AS:7439-7459
*AS:7461-7464
*AS:7466
*AS:7723-7726
*AS:7728-7737
*AS:7739-7802
*AS:7804-7854
*AS:7856-7863
*AS:7865-7889
*AS:7891-7900
*AS:7902-7905
*AS:7907
*AS:7909
*AS:7911-7926
*AS:7928-7933
*AS:7935-7952
*AS:7954-7964
*AS:7966-7970
*AS:7973
*AS:7975-7979
*AS:7981-7983
*AS:7985-7992
*AS:7996
*AS:7998-8006
*AS:8008-8023
*AS:8025
*AS:8027-8047
*AS:8049-8052
*AS:8057-8064
*AS:8067-8092
*AS:8095
*AS:8097-8139
*AS:8142-8150
*AS:8152-8162
*AS:8164-8166
*AS:8168-8177
*AS:8179-8191
*AS:10240-10246
*AS:10248-10261
*AS:10263-10268
*AS:10270-10276
*AS:10278-10284
*AS:10286-10292
*AS:10294-10298
*AS:10300
*AS:10302-10317
*AS:10319-10330
*AS:10332-10361
*AS:10363-10390
*AS:10392
*AS:10394-10411
*AS:10413-10416
*AS:10418-10419
*AS:10421-10428
*AS:10430-10435
*AS:10437-10451
*AS:10453
*AS:10455-10462
*AS:10464-10473
*AS:10475
*AS:10477-10478
*AS:10480
*AS:10482-10494
*AS:10496-10501
*AS:10503-10504
*AS:10506-10530
*AS:10532-10539
*AS:10541-10559
*AS:10561-10568
*AS:10570-10574
*AS:10576-10585
*AS:10587-10599
*AS:10601-10604
*AS:10607-10616
*AS:10618-10619
*AS:10621-10623
*AS:10625-10629
*AS:10631-10639
*AS:10641-10648
*AS:10650-10669
*AS:10672-10687
*AS:10689-10690
*AS:10692-10696
*AS:10698-10703
*AS:10705
*AS:10707-10714
*AS:10716-10732
*AS:10734-10756
*AS:10758-10777
*AS:10779-10784
*AS:10786-10794
*AS:10796-10797
*AS:10799-10802
*AS:10804-10806
*AS:10808-10823
*AS:10825-10833
*AS:10835-10840
*AS:10842-10846
*AS:10848-10874
*AS:10876-10880
*AS:10882-10894
*AS:10896
*AS:10899-10905
*AS:10907-10921
*AS:10922
*AS:10923-10937
*AS:10939-10953
*AS:10955-10963
*AS:10965-10982
*AS:10984-10985
*AS:10987-10991
*AS:10993-11007
*AS:11009-11013
*AS:11015-11052
*AS:11054-11057
*AS:11059-11062
*AS:11064-11080
*AS:11082
*AS:11084-11086
*AS:11088-11096
*AS:11098-11124
*AS:11126-11135
*AS:11137-11156
*AS:11158-11171
*AS:11173-11192
*AS:11194-11200
*AS:11202-11236
*AS:11238-11241
*AS:11243-11253
*AS:11255
*AS:11257-11258
*AS:11260-11264
*AS:11266-11270
*AS:11272-11283
*AS:11285-11294
*AS:11296-11310
*AS:11312-11314
*AS:11316-11334
*AS:11336-11337
*AS:11339
*AS:11342-11355
*AS:11357-11372
*AS:11374-11379
*AS:11381-11389
*AS:11391
*AS:11393-11410
*AS:11412-11414
*AS:11416-11418
*AS:11420-11430
*AS:11433-11446
*AS:11448-11449
*AS:11452-11466
*AS:11468-11496
*AS:11499-11502
*AS:11504-11513
*AS:11515-11518
*AS:11520-11555
*AS:11557-11561
*AS:11563-11568
*AS:11570
*AS:11572-11580
*AS:11582-11584
*AS:11586-11591
*AS:11593-11598
*AS:11600-11616
*AS:11618-11641
*AS:11643
*AS:11646-11659
*AS:11661-11663
*AS:11665-11672
*AS:11674-11676
*AS:11678-11693
*AS:11695-11705
*AS:11707-11743
*AS:11745-11749
*AS:11753-11785
*AS:11787-11799
*AS:11803-11814
*AS:11817-11829
*AS:11831-11834
*AS:11836-11843
*AS:11846-11887
*AS:11889-11895
*AS:11897-11908
*AS:11910-11920
*AS:11922-11946
*AS:11948-11959
*AS:11961-11992
*AS:11994-12033
*AS:12035-12045
*AS:12047-12065
*AS:12067-12090
*AS:12092-12126
*AS:12128-12134
*AS:12137-12139
*AS:12141-12142
*AS:12144-12145
*AS:12147-12149
*AS:12151-12247
*AS:12249-12251
*AS:12253-12257
*AS:12259-12263
*AS:12265-12287
*AS:13312-13315
*AS:13317
*AS:13319
*AS:13321-13352
*AS:13354-13356
*AS:13358-13380
*AS:13382-13401
*AS:13403-13423
*AS:13425-13439
*AS:13441-13458
*AS:13460-13473
*AS:13475-13488
*AS:13490-13494
*AS:13496-13513
*AS:13515-13518
*AS:13520
*AS:13523-13543
*AS:13545-13568
*AS:13570-13578
*AS:13580-13583
*AS:13586-13590
*AS:13592-13642
*AS:13644-13678
*AS:13680-13681
*AS:13683-13760
*AS:13762-13773
*AS:13775-13834
*AS:13836-13853
*AS:13855-13873
*AS:13875-13877
*AS:13880-13913
*AS:13915-13928
*AS:13930-13933
*AS:13937-13990
*AS:13992-13998
*AS:14001-14025
*AS:14027-14028
*AS:14031-14068
*AS:14070-14079
*AS:14081-14083
*AS:14085-14086
*AS:14088-14110
*AS:14112-14114
*AS:14116
*AS:14118-14121
*AS:14123-14177
*AS:14180-14185
*AS:14188-14201
*AS:14203
*AS:14205-14230
*AS:14233
*AS:14235-14248
*AS:14251-14258
*AS:14260-14281
*AS:14283-14284
*AS:14287-14315
*AS:14317
*AS:14319-14330
*AS:14332-14338
*AS:14340-14345
*AS:14347-14376
*AS:14378-14419
*AS:14421-14428
*AS:14430-14456
*AS:14458-14460
*AS:14461-14462
*AS:14464-14515
*AS:14517-14521
*AS:14523-14534
*AS:14536-14552
*AS:14554-14559
*AS:14561-14570
*AS:14572-14623
*AS:14625-14649
*AS:14651-14663
*AS:14665-14673
*AS:14675-14691
*AS:14693-14707
*AS:14710-14722
*AS:14724-14753
*AS:14755-14758
*AS:14760-14768
*AS:14770-14794
*AS:14796-14839
*AS:14841-14844
*AS:14846-14866
*AS:14869-14885
*AS:14887-14965
*AS:14967-14969
*AS:14971-14987
*AS:14989-15021
*AS:15023-15029
*AS:15031-15033
*AS:15035-15063
*AS:15065
*AS:15067-15074
*AS:15076-15077
*AS:15079-15106
*AS:15108-15124
*AS:15126-15150
*AS:15152-15158
*AS:15160-15179
*AS:15181-15200
*AS:15202-15207
*AS:15209-15235
*AS:15237-15240
*AS:15242-15245
*AS:15247-15251
*AS:15253-15255
*AS:15257-15273
*AS:15275-15310
*AS:15312-15359
*AS:16384-16393
*AS:16394-16396
*AS:16398-16415
*AS:16417
*AS:16419-16470
*AS:16472-16505
*AS:16507-16521
*AS:16523-16527
*AS:16529-16530
*AS:16532-16546
*AS:16548-16591
*AS:16593
*AS:16595
*AS:16597-16605
*AS:16608-16628
*AS:16631-16636
*AS:16638-16662
*AS:16664-16684
*AS:16686-16688
*AS:16690-16700
*AS:16702-16711
*AS:16713-16731
*AS:16733-16734
*AS:16737
*AS:16738-16741
*AS:16743-16761
*AS:16763-16771
*AS:16773-16779
*AS:16781-16799
*AS:16801-16813
*AS:16815-16846
*AS:16848
*AS:16850-16852
*AS:16854-16863
*AS:16865-16873
*AS:16875-16884
*AS:16886-16890
*AS:16892-16905
*AS:16908-16910
*AS:16912-16959
*AS:16961-16972
*AS:16974
*AS:16976-16989
*AS:16991-17068
*AS:17070-17071
*AS:17073-17078
*AS:17080-17085
*AS:17087-17107
*AS:17109-17125
*AS:17127-17146
*AS:17149-17181
*AS:17183-17204
*AS:17206-17207
*AS:17209-17219
*AS:17221
*AS:17223-17248
*AS:17251-17254
*AS:17256
*AS:17258-17259
*AS:17261-17286
*AS:17288-17311
*AS:17313-17328
*AS:17330-17375
*AS:17377-17378
*AS:17380-17398
*AS:17402-17407
*AS:18432-18448
*AS:18450-18454
*AS:18456-18465
*AS:18467-18478
*AS:18480-18491
*AS:18493-18495
*AS:18497-18531
*AS:18533-18546
*AS:18548-18575
*AS:18577-18578
*AS:18580-18591
*AS:18593-18643
*AS:18645-18666
*AS:18668-18677
*AS:18679-18731
*AS:18733
*AS:18735-18738
*AS:18740-18774
*AS:18776-18781
*AS:18783-18808
*AS:18810-18821
*AS:18823-18835
*AS:18837-18839
*AS:18841-18845
*AS:18847-18868
*AS:18870-18880
*AS:18882-18921
*AS:18923-18930
*AS:18932-18940
*AS:18942-18997
*AS:18999-19032
*AS:19034-19036
*AS:19039-19063
*AS:19065-19076
*AS:19078-19088
*AS:19091-19108
*AS:19110-19113
*AS:19115-19131
*AS:19133-19135
*AS:19137-19168
*AS:19170-19177
*AS:19179
*AS:19181
*AS:19183-19191
*AS:19193-19195
*AS:19197-19199
*AS:19201-19227
*AS:19229-19231
*AS:19233-19243
*AS:19245-19258
*AS:19260-19277
*AS:19279-19314
*AS:19316-19331
*AS:19333-19337
*AS:19339-19360
*AS:19362-19372
*AS:19374-19375
*AS:19377-19398
*AS:19400-19410
*AS:19412-19421
*AS:19423-19428
*AS:19430-19446
*AS:19448-19518
*AS:19520-19552
*AS:19554-19581
*AS:19584-19610
*AS:19612-19631
*AS:19633-19675
*AS:19677-19687
*AS:19689-19704
*AS:19706-19710
*AS:19712-19722
*AS:19724-19730
*AS:19732-19762
*AS:19764-19766
*AS:19768-19831
*AS:19833-19846
*AS:19848-19862
*AS:19864-19872
*AS:19874-19888
*AS:19890-19959
*AS:19961-19977
*AS:19979-19988
*AS:19991-20001
*AS:20003-20010
*AS:20012-20014
*AS:20016-20031
*AS:20033-20042
*AS:20045-20085
*AS:20087-20094
*AS:20096-20105
*AS:20107-20115
*AS:20118-20120
*AS:20122-20141
*AS:20143-20172
*AS:20174-20179
*AS:20181-20190
*AS:20192-20206
*AS:20208-20231
*AS:20233-20243
*AS:20245-20254
*AS:20257-20265
*AS:20267-20293
*AS:20295-20296
*AS:20298
*AS:20300-20304
*AS:20306-20311
*AS:20313-20320
*AS:20322-20344
*AS:20346-20360
*AS:20362
*AS:20364-20417
*AS:20419-20458
*AS:20460-20479
*AS:21504-21505
*AS:21507-21519
*AS:21521-21570
*AS:21572-21573
*AS:21576-21577
*AS:21579-21589
*AS:21591-21598
*AS:21600-21602
*AS:21604-21611
*AS:21613
*AS:21615-21673
*AS:21675-21691
*AS:21693-21738
*AS:21740
*AS:21742-21752
*AS:21754-21755
*AS:21757-21764
*AS:21766-21767
*AS:21769-21818
*AS:21820-21823
*AS:21825
*AS:21827-21837
*AS:21839-21861
*AS:21863-21882
*AS:21884-21887
*AS:21889-21910
*AS:21912-21916
*AS:21918-21979
*AS:21981-22009
*AS:22012-22018
*AS:22020-22046
*AS:22048-22054
*AS:22056-22079
*AS:22081-22084
*AS:22086-22091
*AS:22093-22107
*AS:22109-22121
*AS:22123-22127
*AS:22130-22132
*AS:22134-22147
*AS:22149-22176
*AS:22178-22184
*AS:22186-22226
*AS:22228-22249
*AS:22251-22304
*AS:22306-22312
*AS:22314-22340
*AS:22342-22353
*AS:22357-22367
*AS:22369-22370
*AS:22372-22380
*AS:22383-22385
*AS:22387-22406
*AS:22408-22410
*AS:22412-22430
*AS:22432-22452
*AS:22454-22500
*AS:22502-22507
*AS:22509-22514
*AS:22516-22528
*AS:22530-22540
*AS:22542-22547
*AS:22549-22565
*AS:22567-22571
*AS:22573-22626
*AS:22629-22660
*AS:22662-22677
*AS:22679-22682
*AS:22684-22688
*AS:22691-22697
*AS:22700-22705
*AS:22707-22723
*AS:22725
*AS:22727-22734
*AS:22736-22744
*AS:22746-22749
*AS:22751-22797
*AS:22799-22817
*AS:22820-22832
*AS:22834-22859
*AS:22861-22868
*AS:22870-22875
*AS:22877-22881
*AS:22883
*AS:22885-22888
*AS:22890-22893
*AS:22895-22907
*AS:22909-22923
*AS:22925-22926
*AS:22928-22938
*AS:22940-22974
*AS:22976-23001
*AS:23003-23006
*AS:23008-23019
*AS:23021-23030
*AS:23032-23057
*AS:23059-23073
*AS:23075-23090
*AS:23092-23104
*AS:23107-23112
*AS:23114-23127
*AS:23129-23139
*AS:23141-23200
*AS:23203-23215
*AS:23217-23241
*AS:23244-23245
*AS:23247-23288
*AS:23290-23352
*AS:23354-23359
*AS:23361-23381
*AS:23384-23415
*AS:23417-23455
*AS:23457-23486
*AS:23489-23494
*AS:23496-23540
*AS:23542-23548
*AS:23550-23551
*AS:25600-25606
*AS:25608-25619
*AS:25621-25694
*AS:25696-25700
*AS:25702-25704
*AS:25706-25717
*AS:25719-25725
*AS:25727-25733
*AS:25735-25792
*AS:25794-25811
*AS:25813-25817
*AS:25819-25831
*AS:25833-25879
*AS:25881-25907
*AS:25909-25926
*AS:25928-25932
*AS:25934-25997
*AS:25999-26047
*AS:26049-26060
*AS:26062-26089
*AS:26091-26103
*AS:26108-26111
*AS:26113-26117
*AS:26120-26129
*AS:26131-26135
*AS:26137-26161
*AS:26163-26172
*AS:26174-26193
*AS:26195-26209
*AS:26211-26217
*AS:26219-26316
*AS:26318-26417
*AS:26419-26421
*AS:26423-26425
*AS:26427-26433
*AS:26435-26472
*AS:26474-26504
*AS:26506-26591
*AS:26624
*AS:26626-26753
*AS:26755-27575
*AS:27577-27597
*AS:27599-27647
*AS:29696-29917
*AS:29919-29974
*AS:29976-30072
*AS:30074-30305
*AS:30307-30428
*AS:30430-30618
*AS:30620-30719
*AS:31744-31809
*AS:31811-31855
*AS:31857-31959
*AS:31961-32016
*AS:32018-32278
*AS:32280-32397
*AS:32399-32436
*AS:32438-32652
*AS:32654-32713
*AS:32715-32716
*AS:32718-32841
*AS:32843-32859
*AS:32861-33566
*AS:33568-33578
*AS:33580-33761
*AS:35840-36863
*AS:39936-40959
*AS:46080-47103
*AS:53248-54271
*AS:54272-55295
*AS:62464-63487
*AS:64198-64296
*AS:393216-394239
*AS:394240-395164
*AS:395165-396188
*AS:396189-397212
*AS:397213-398236
*AS:398237-399260
 
# RIPENCC
:whois|whois.ripe.net|prefix=-B |
*AS:7
*AS:28
*AS:137
*AS:224
*AS:248-251
*AS:261
*AS:286
*AS:288
*AS:294
*AS:375
*AS:378
*AS:513
*AS:517
*AS:528-529
*AS:544
*AS:553
*AS:559
*AS:565
*AS:590
*AS:593
*AS:669
*AS:679-680
*AS:695-697
*AS:709-710
*AS:712
*AS:719
*AS:760-761
*AS:764
*AS:766
*AS:774-783
*AS:786
*AS:789-790
*AS:1101-1200
*AS:1203
*AS:1205
*AS:1213
*AS:1234-1235
*AS:1241
*AS:1248
*AS:1253
*AS:1257
*AS:1267-1275
*AS:1279
*AS:1290
*AS:1297
*AS:1299-1309
*AS:1318
*AS:1342
*AS:1352-1353
*AS:1547
*AS:1653-1654
*AS:1663
*AS:1680
*AS:1707-1726
*AS:1729
*AS:1732
*AS:1738-1739
*AS:1741
*AS:1748
*AS:1752
*AS:1754-1756
*AS:1759
*AS:1764
*AS:1770-1771
*AS:1774
*AS:1776
*AS:1780
*AS:1833
*AS:1835-1837
*AS:1841
*AS:1849-1850
*AS:1853-1854
*AS:1877-1901
*AS:1902-1903
*AS:1921-1923
*AS:1926
*AS:1930
*AS:1935-1955
*AS:1960-1962
*AS:1967
*AS:2004
*AS:2012
*AS:2016-2017
*AS:2026-2029
*AS:2036
*AS:2038-2040
*AS:2043
*AS:2045
*AS:2047
*AS:2049
*AS:2057-2106
*AS:2107-2136
*AS:2147-2148
*AS:2174-2273
*AS:2278-2377
*AS:2380
*AS:2387-2488
*AS:2494
*AS:2529-2530
*AS:2541
*AS:2546-2547
*AS:2578
*AS:2585-2614
*AS:2643
*AS:2647
*AS:2683
*AS:2766
*AS:2773-2822
*AS:2830-2879
*AS:2895
*AS:2917
*AS:2921
*AS:3058
*AS:3083-3109
*AS:3151
*AS:3154-3207
*AS:3209-3353
*AS:3412-3415
*AS:3624
*AS:3843
*AS:3917-3918
*AS:4148
*AS:4405-4430
*AS:4457-4458
*AS:4524
*AS:4588-4589
*AS:4974
*AS:5089
*AS:5377-5535
*AS:5537-5631
*AS:6067
*AS:6085
*AS:6168
*AS:6320
*AS:6412
*AS:6656-6712
*AS:6714-6878
*AS:6880-6911
*AS:8093
*AS:8192-8523
*AS:8525-8769
*AS:8771-9128
*AS:9130-9215
*AS:11341
*AS:11660
*AS:12046
*AS:12288-12454
*AS:12456-12555
*AS:12557-13223
*AS:13225-13311
*AS:13879
*AS:15360-15398
*AS:15400-15474
*AS:15476-15705
*AS:15707-15803
*AS:15805-15824
*AS:15826-15833
*AS:15835-15963
*AS:15965-16057
*AS:16059-16213
*AS:16215-16283
*AS:16285-16383
*AS:18732
*AS:19178
*AS:19376
*AS:19399
*AS:20480-20483
*AS:20485-20857
*AS:20859-20927
*AS:20929-21002
*AS:21004-21151
*AS:21153-21241
*AS:21243-21270
*AS:21272-21277
*AS:21279
*AS:21281-21390
*AS:21392-21451
*AS:21453-21503
*AS:22108
*AS:22627
*AS:22683
*AS:23242
*AS:24576-24735
*AS:24737-24756
*AS:24758-24787
*AS:24789-24800
*AS:24802-24834
*AS:24836-24862
*AS:24864-24877
*AS:24879-24986
*AS:24988-25162
*AS:25164-25249
*AS:25251-25361
*AS:25363
*AS:25365-25542
*AS:25544-25567
*AS:25569-25575
*AS:25577-25599
*AS:25880
*AS:28672-28682
*AS:28684-28697
*AS:28699-28912
*AS:28914-29090
*AS:29092-29337
*AS:29339
*AS:29341-29427
*AS:29429-29494
*AS:29496-29543
*AS:29545-29570
*AS:29572-29613
*AS:29615-29673
*AS:29675-29695
*AS:30720-30895
*AS:30897-30979
*AS:30981
*AS:31000-31064
*AS:31066-31244
*AS:31246-31618
*AS:31620-31743
*AS:33792-34815
*AS:34816-35839
*AS:38912-39935
*AS:40960-41983
*AS:41984-43007
*AS:43008-44031
*AS:44032-45055
*AS:47104-48127
*AS:48128-49151
*AS:49152-50175
*AS:50176-51199
*AS:51200-52223
*AS:56320-57343
*AS:57344-58367
*AS:59392-60415
*AS:60416-61439
*AS:61952-62463
*AS:64396-64495
*AS:196608-197631
*AS:197632-198655
*AS:198656-199679
*AS:199680-200191
*AS:200192-201215
*AS:201216-202239
*AS:202240-203263
*AS:203264-204287
*AS:204288-205211
*AS:205212-206235
*AS:206236-207259
*AS:207260-208283
*AS:208284-209307
*AS:209308-210331
 
# APNIC
:whois|whois.apnic.net
*AS:173
*AS:681
*AS:1221
*AS:1233
*AS:1237
*AS:1250
*AS:1659
*AS:1704
*AS:1768-1769
*AS:1781
*AS:1851
*AS:2042
*AS:2144
*AS:2385
*AS:2497-2528
*AS:2537
*AS:2554
*AS:2563
*AS:2569-2570
*AS:2697
*AS:2706
*AS:2713
*AS:2756
*AS:2764
*AS:2772
*AS:2823
*AS:2907
*AS:2915
*AS:2925-2926
*AS:3357
*AS:3363
*AS:3382
*AS:3391
*AS:3395
*AS:3460
*AS:3462
*AS:3488
*AS:3510
*AS:3550
*AS:3558-3559
*AS:3583
*AS:3605
*AS:3608
*AS:3661-3662
*AS:3689-3693
*AS:3711
*AS:3717
*AS:3747-3748
*AS:3757-3758
*AS:3773
*AS:3775
*AS:3784
*AS:3786-3787
*AS:3813
*AS:3825
*AS:3836
*AS:3839-3840
*AS:3929
*AS:3969
*AS:3976
*AS:4007
*AS:4040
*AS:4049
*AS:4058
*AS:4060
*AS:4134
*AS:4142
*AS:4158
*AS:4174-4175
*AS:4197
*AS:4202
*AS:4251
*AS:4274
*AS:4352
*AS:4381-4382
*AS:4431
*AS:4433-4434
*AS:4515
*AS:4528
*AS:4538
*AS:4594
*AS:4605
*AS:4608-4865
*AS:4961
*AS:5017-5018
*AS:5051
*AS:5085
*AS:5087
*AS:5709
*AS:6068
*AS:6163
*AS:6262
*AS:6619
*AS:6648
*AS:7131
*AS:7175
*AS:7467-7722
*AS:7855
*AS:7901
*AS:9216-10239
*AS:10807
*AS:11467
*AS:17408-18431
*AS:19705
*AS:23552-24575
*AS:37888-38911
*AS:45056-46079
*AS:55296-56319
*AS:58368-59391
*AS:63488-63999
*AS:64000-64098
*AS:64297-64395
*AS:131072-132095
*AS:132096-133119
*AS:133120-133631
*AS:133632-134556
*AS:134557-135580
*AS:135581-136505
*AS:136506-137529
*AS:137530-138553
*AS:138554-139577
 
# LACNIC
:whois|whois.lacnic.net
*AS:278
*AS:676
*AS:1251
*AS:1292
*AS:1296
*AS:1797
*AS:1831
*AS:1840
*AS:1916
*AS:2146
*AS:2277
*AS:2549
*AS:2638
*AS:2708
*AS:2715-2716
*AS:2739
*AS:2904
*AS:3132
*AS:3141
*AS:3449
*AS:3454
*AS:3484
*AS:3487
*AS:3496
*AS:3548
*AS:3551
*AS:3556
*AS:3596-3597
*AS:3603
*AS:3631-3632
*AS:3636
*AS:3640
*AS:3790
*AS:3816
*AS:3905
*AS:3968
*AS:4141
*AS:4209
*AS:4230
*AS:4242
*AS:4244
*AS:4270
*AS:4387
*AS:4493
*AS:4535
*AS:4914
*AS:4926
*AS:4944
*AS:4964
*AS:4967
*AS:4995
*AS:5005
*AS:5633
*AS:5639
*AS:5648
*AS:5692
*AS:5708
*AS:5722
*AS:5745
*AS:5772
*AS:6057
*AS:6063-6065
*AS:6084
*AS:6121
*AS:6125
*AS:6133
*AS:6135
*AS:6147-6148
*AS:6193
*AS:6240
*AS:6306
*AS:6332
*AS:6342
*AS:6400
*AS:6429
*AS:6458
*AS:6471
*AS:6487
*AS:6495
*AS:6503
*AS:6505
*AS:6535
*AS:6543
*AS:6545
*AS:6568
*AS:6590
*AS:6927
*AS:6945
*AS:6957
*AS:7002
*AS:7004-7005
*AS:7038
*AS:7048-7049
*AS:7056
*AS:7063
*AS:7080
*AS:7087
*AS:7103
*AS:7120
*AS:7125
*AS:7137
*AS:7149
*AS:7157
*AS:7162
*AS:7167
*AS:7173
*AS:7184
*AS:7195
*AS:7199
*AS:7236
*AS:7298
*AS:7303
*AS:7313
*AS:7315
*AS:7325
*AS:7340
*AS:7365
*AS:7399
*AS:7408
*AS:7414
*AS:7417-7418
*AS:7428
*AS:7437-7438
*AS:7465
*AS:7727
*AS:7738
*AS:7803
*AS:7864
*AS:7890
*AS:7906
*AS:7908
*AS:7910
*AS:7927
*AS:7934
*AS:7953
*AS:7965
*AS:7974
*AS:7980
*AS:7984
*AS:7993-7995
*AS:7997
*AS:8007
*AS:8024
*AS:8026
*AS:8048
*AS:8053-8056
*AS:8065-8066
*AS:8096
*AS:8140-8141
*AS:8151
*AS:8163
*AS:8167
*AS:8178
*AS:10269
*AS:10277
*AS:10285
*AS:10293
*AS:10299
*AS:10301
*AS:10318
*AS:10362
*AS:10391
*AS:10412
*AS:10417
*AS:10420
*AS:10429
*AS:10436
*AS:10452
*AS:10454
*AS:10463
*AS:10476
*AS:10479
*AS:10481
*AS:10495
*AS:10502
*AS:10531
*AS:10560
*AS:10569
*AS:10586
*AS:10600
*AS:10605-10606
*AS:10617
*AS:10620
*AS:10624
*AS:10630
*AS:10640
*AS:10649
*AS:10670-10671
*AS:10688
*AS:10691
*AS:10697
*AS:10704
*AS:10706
*AS:10715
*AS:10733
*AS:10757
*AS:10778
*AS:10785
*AS:10795
*AS:10824
*AS:10834
*AS:10841
*AS:10847
*AS:10875
*AS:10881
*AS:10895
*AS:10897
*AS:10906
*AS:10938
*AS:10954
*AS:10964
*AS:10983
*AS:10986
*AS:10992
*AS:11008
*AS:11014
*AS:11053
*AS:11058
*AS:11063
*AS:11081
*AS:11083
*AS:11087
*AS:11097
*AS:11136
*AS:11172
*AS:11193
*AS:11237
*AS:11242
*AS:11254
*AS:11256
*AS:11271
*AS:11284
*AS:11295
*AS:11311
*AS:11315
*AS:11335
*AS:11338
*AS:11340
*AS:11356
*AS:11373
*AS:11390
*AS:11392
*AS:11411
*AS:11415
*AS:11419
*AS:11431-11432
*AS:11447
*AS:11450-11451
*AS:11497-11498
*AS:11503
*AS:11514
*AS:11519
*AS:11556
*AS:11562
*AS:11571
*AS:11581
*AS:11585
*AS:11592
*AS:11599
*AS:11617
*AS:11642
*AS:11644
*AS:11664
*AS:11673
*AS:11677
*AS:11694
*AS:11706
*AS:11750-11752
*AS:11786
*AS:11800-11802
*AS:11815-11816
*AS:11830
*AS:11835
*AS:11844
*AS:11888
*AS:11896
*AS:11921
*AS:11947
*AS:11960
*AS:11993
*AS:12034
*AS:12066
*AS:12127
*AS:12135-12136
*AS:12140
*AS:12146
*AS:12150
*AS:12248
*AS:12252
*AS:12264
*AS:13316
*AS:13318
*AS:13320
*AS:13353
*AS:13357
*AS:13381
*AS:13424
*AS:13440
*AS:13459
*AS:13474
*AS:13489
*AS:13495
*AS:13514
*AS:13521-13522
*AS:13544
*AS:13579
*AS:13584-13585
*AS:13591
*AS:13643
*AS:13679
*AS:13682
*AS:13761
*AS:13774
*AS:13835
*AS:13874
*AS:13878
*AS:13914
*AS:13929
*AS:13934-13936
*AS:13991
*AS:13999-14000
*AS:14026
*AS:14030
*AS:14069
*AS:14080
*AS:14084
*AS:14087
*AS:14111
*AS:14117
*AS:14122
*AS:14178-14179
*AS:14186-14187
*AS:14202
*AS:14204
*AS:14231-14232
*AS:14234
*AS:14249-14250
*AS:14259
*AS:14282
*AS:14285-14286
*AS:14316
*AS:14318
*AS:14339
*AS:14346
*AS:14377
*AS:14420
*AS:14457
*AS:14463
*AS:14522
*AS:14535
*AS:14553
*AS:14560
*AS:14571
*AS:14624
*AS:14650
*AS:14664
*AS:14674
*AS:14692
*AS:14708-14709
*AS:14723
*AS:14754
*AS:14759
*AS:14769
*AS:14795
*AS:14840
*AS:14845
*AS:14867-14868
*AS:14886
*AS:14966
*AS:14970
*AS:15030
*AS:15034
*AS:15064
*AS:15066
*AS:15075
*AS:15078
*AS:15107
*AS:15125
*AS:15151
*AS:15180
*AS:15201
*AS:15208
*AS:15236
*AS:15241
*AS:15246
*AS:15252
*AS:15256
*AS:15274
*AS:15311
*AS:16397
*AS:16418
*AS:16471
*AS:16506
*AS:16522
*AS:16528
*AS:16531
*AS:16592
*AS:16594
*AS:16596
*AS:16606-16607
*AS:16629
*AS:16663
*AS:16685
*AS:16689
*AS:16701
*AS:16712
*AS:16732
*AS:16735-16736
*AS:16742
*AS:16762
*AS:16772
*AS:16780
*AS:16814
*AS:16847
*AS:16849
*AS:16864
*AS:16874
*AS:16885
*AS:16891
*AS:16906
*AS:16911
*AS:16960
*AS:16973
*AS:16975
*AS:16990
*AS:17069
*AS:17072
*AS:17079
*AS:17086
*AS:17108
*AS:17126
*AS:17147
*AS:17182
*AS:17205
*AS:17208
*AS:17222
*AS:17249-17250
*AS:17255
*AS:17257
*AS:17287
*AS:17329
*AS:17376
*AS:17379
*AS:17399
*AS:17401
*AS:18449
*AS:18455
*AS:18466
*AS:18479
*AS:18492
*AS:18496
*AS:18532
*AS:18547
*AS:18576
*AS:18579
*AS:18592
*AS:18644
*AS:18667
*AS:18678
*AS:18734
*AS:18739
*AS:18782
*AS:18809
*AS:18822
*AS:18836
*AS:18840
*AS:18846
*AS:18869
*AS:18881
*AS:18941
*AS:18998
*AS:19033
*AS:19037-19038
*AS:19064
*AS:19077
*AS:19089-19090
*AS:19109
*AS:19114
*AS:19132
*AS:19169
*AS:19180
*AS:19182
*AS:19192
*AS:19196
*AS:19200
*AS:19228
*AS:19244
*AS:19259
*AS:19278
*AS:19315
*AS:19332
*AS:19338
*AS:19361
*AS:19373
*AS:19411
*AS:19422
*AS:19429
*AS:19447
*AS:19519
*AS:19553
*AS:19582-19583
*AS:19611
*AS:19632
*AS:19688
*AS:19723
*AS:19731
*AS:19763
*AS:19767
*AS:19863
*AS:19873
*AS:19889
*AS:19960
*AS:19978
*AS:19989-19990
*AS:20002
*AS:20015
*AS:20032
*AS:20043-20044
*AS:20106
*AS:20116-20117
*AS:20121
*AS:20142
*AS:20173
*AS:20191
*AS:20207
*AS:20232
*AS:20244
*AS:20255-20256
*AS:20266
*AS:20297
*AS:20299
*AS:20305
*AS:20312
*AS:20321
*AS:20345
*AS:20361
*AS:20363
*AS:20418
*AS:21506
*AS:21520
*AS:21571
*AS:21574-21575
*AS:21578
*AS:21590
*AS:21599
*AS:21603
*AS:21612
*AS:21614
*AS:21674
*AS:21692
*AS:21741
*AS:21753
*AS:21756
*AS:21765
*AS:21768
*AS:21824
*AS:21826
*AS:21838
*AS:21862
*AS:21883
*AS:21888
*AS:21911
*AS:21917
*AS:21980
*AS:22010-22011
*AS:22019
*AS:22047
*AS:22055
*AS:22080
*AS:22085
*AS:22092
*AS:22122
*AS:22128-22129
*AS:22133
*AS:22148
*AS:22177
*AS:22185
*AS:22227
*AS:22250
*AS:22305
*AS:22313
*AS:22341
*AS:22356
*AS:22368
*AS:22371
*AS:22381-22382
*AS:22407
*AS:22411
*AS:22431
*AS:22453
*AS:22501
*AS:22508
*AS:22515
*AS:22529
*AS:22541
*AS:22548
*AS:22566
*AS:22628
*AS:22661
*AS:22678
*AS:22689
*AS:22698-22699
*AS:22706
*AS:22724
*AS:22726
*AS:22745
*AS:22798
*AS:22818-22819
*AS:22833
*AS:22860
*AS:22869
*AS:22876
*AS:22882
*AS:22884
*AS:22889
*AS:22894
*AS:22908
*AS:22924
*AS:22927
*AS:22975
*AS:23002
*AS:23007
*AS:23020
*AS:23031
*AS:23074
*AS:23091
*AS:23105-23106
*AS:23113
*AS:23128
*AS:23140
*AS:23201-23202
*AS:23216
*AS:23243
*AS:23246
*AS:23289
*AS:23353
*AS:23360
*AS:23382-23383
*AS:23416
*AS:23487-23488
*AS:23495
*AS:23541
*AS:25607
*AS:25620
*AS:25701
*AS:25705
*AS:25718
*AS:25734
*AS:25812
*AS:25832
*AS:25908
*AS:25927
*AS:25933
*AS:25998
*AS:26048
*AS:26061
*AS:26090
*AS:26104-26105
*AS:26107
*AS:26112
*AS:26118-26119
*AS:26136
*AS:26162
*AS:26173
*AS:26194
*AS:26210
*AS:26218
*AS:26317
*AS:26418
*AS:26426
*AS:26434
*AS:26473
*AS:26505
*AS:26592-26623
*AS:27648-28671
*AS:52224-53247
*AS:61440-61951
*AS:64099-64197
*AS:262144-263167
*AS:263168-263679
*AS:263680-264604
*AS:264605-265628
*AS:265629-266652
*AS:266653-267676
*AS:267677-268700
*AS:268701-269724
*AS:269725-270748
 
# AFRINIC
:whois|whois.afrinic.net
*AS:1228-1232
*AS:2018
*AS:2561
*AS:2905
*AS:3067-3068
*AS:3208
*AS:3741
*AS:4178
*AS:4571
*AS:5536
*AS:5713
*AS:5734
*AS:6083
*AS:6089
*AS:6127
*AS:6149
*AS:6180
*AS:6187
*AS:6351
*AS:6529
*AS:6560
*AS:6713
*AS:6879
*AS:6968
*AS:7020
*AS:7154
*AS:7231
*AS:7390
*AS:7420
*AS:7460
*AS:7971-7972
*AS:8094
*AS:8524
*AS:8770
*AS:9129
*AS:10247
*AS:10262
*AS:10331
*AS:10393
*AS:10474
*AS:10505
*AS:10540
*AS:10575
*AS:10798
*AS:10803
*AS:10898
*AS:11125
*AS:11157
*AS:11201
*AS:11259
*AS:11265
*AS:11380
*AS:11569
*AS:11645
*AS:11744
*AS:11845
*AS:11909
*AS:12091
*AS:12143
*AS:12258
*AS:12455
*AS:12556
*AS:13224
*AS:13402
*AS:13519
*AS:13569
*AS:13854
*AS:14029
*AS:14115
*AS:14331
*AS:14429
*AS:14516
*AS:14988
*AS:15022
*AS:15159
*AS:15399
*AS:15475
*AS:15706
*AS:15804
*AS:15825
*AS:15834
*AS:15964
*AS:16058
*AS:16214
*AS:16284
*AS:16416
*AS:16547
*AS:16630
*AS:16637
*AS:16800
*AS:16853
*AS:16907
*AS:17148
*AS:17220
*AS:17260
*AS:17312
*AS:17400
*AS:18775
*AS:18922
*AS:18931
*AS:19136
*AS:19232
*AS:19676
*AS:19711
*AS:19832
*AS:19847
*AS:20011
*AS:20086
*AS:20095
*AS:20180
*AS:20294
*AS:20459
*AS:20484
*AS:20858
*AS:20928
*AS:21003
*AS:21152
*AS:21242
*AS:21271
*AS:21278
*AS:21280
*AS:21391
*AS:21452
*AS:21739
*AS:21819
*AS:22354-22355
*AS:22386
*AS:22572
*AS:22690
*AS:22735
*AS:22750
*AS:22939
*AS:23058
*AS:23549
*AS:24736
*AS:24757
*AS:24788
*AS:24801
*AS:24835
*AS:24863
*AS:24878
*AS:24987
*AS:25163
*AS:25250
*AS:25362
*AS:25364
*AS:25543
*AS:25568
*AS:25576
*AS:25695
*AS:25726
*AS:25793
*AS:25818
*AS:26106
*AS:26130
*AS:26422
*AS:26625
*AS:26754
*AS:27576
*AS:27598
*AS:28683
*AS:28698
*AS:28913
*AS:29091
*AS:29338
*AS:29340
*AS:29428
*AS:29495
*AS:29544
*AS:29571
*AS:29614
*AS:29674
*AS:29918
*AS:29975
*AS:30073
*AS:30306
*AS:30429
*AS:30619
*AS:30896
*AS:30980
*AS:30982-30999
*AS:31065
*AS:31245
*AS:31619
*AS:31810
*AS:31856
*AS:31960
*AS:32017
*AS:32279
*AS:32398
*AS:32437
*AS:32653
*AS:32714
*AS:32717
*AS:32842
*AS:32860
*AS:33567
*AS:33579
*AS:33762-33791
*AS:36864-37887
*AS:327680-328703
 
# Last resort: ARIN
:whois|whois.arin.net|prefix=a |
^as(.*)$
/trunk/main/pattern/domains
0,0 → 1,6434
#: version 20190428
# Domains
# This file can be updated by $gwhois$/maintenance/pattern-generator/generate_domains (only additions of new entries)
 
# Info: A good resource for research: https://wiki.rrpproxy.net/
 
# ccTLD
# --------------------------------------------------------------------
 
#:notice||Please visit https://www.nic.ac/whois-search.htm and enter the CAPTCHA
:whois|whois.nic.ac
\.ac$
 
#:notice||A list of registered domains is available on http://www.nic.ad/index_eng.htm [9/2006]
:cgi|http://www.ompa.ad/bases_dades/dominis2.php?prod=~query~&Submit=Search&tipus=nom_domini&data1=0&data2=0&lang=en
\.ad$
 
:whois|whois.aeda.net.ae
\.ae$
 
#:notice||Please go to http://whois.nic.af/whois.jsp (last checked Aug 2013)
:whois|whois.nic.af
\.af$
 
# :notice||Please go to http://www.afilias-grs.info/public/whois_search and enter the captcha (last checked Aug 2013)
# :whois|whois2.afilias-grs.net
:whois|whois.nic.ag
\.ag$
 
#:whois|whois.ai
:whois|whois.nic.ai
\.ai$
 
#:notice||No whois. Homepage http://www.nic.al. Availability check on http://www.ert.gov.al/ert_eng/domain_res.html [5/2010]
:notice||No whois. URL for registration services: http://www.akep.al/index.php/sq/regjistrim-domain and availability check on http://www.akep.al/index.php/sq/kerkoni-domain [11/2014]
\.al$
 
#:whois|whois.nic.am
:whois|whois.amnic.net
\.am$
 
:notice||Disallocated by IANA
\.an$
 
:notice||No whois. Homepage http://www.dns.ao [5/2010]
\.ao$
 
:notice||No whois, no domain list, no nothing. [5/2010]
\.aq$
 
# TODO: braucht cookies und einen normalen useragent! und geht dann trotzdem nicht
# $ curl -c cookies.txt -A "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:34.0) Gecko/20100101 Firefox/34.0" https://nic.ar/buscarDominio.xhtml > 2.html
# $ ./formfill < 2.html
# $ curl -c cookies.txt -e "https://nic.ar/buscarDominio.xhtml" -A "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:34.0) Gecko/20100101 Firefox/34.0" --data "busquedaDominioForm2:j_idt56=2&busquedaDominioForm2=busquedaDominioForm2&busquedaDominioForm2:dominio=test&busquedaDominioForm2:btnBuscar=Consultar&javax.faces.ViewState=2068546024268256105:-7972736133422905895" https://nic.ar/buscarDominio.xhtml > 3.html
# $ lynx 3.html
# -> still not working! Cookies sent, Form data sent, UserAgent sent!
# -> Sometimes they additionally show a CAPTCHA!
# :cgipostcurl|https://nic.ar/buscarDominio.xhtml|busquedaDominioForm2:j_idt56=2&busquedaDominioForm2=busquedaDominioForm2&busquedaDominioForm2:dominio=test&busquedaDominioForm2:btnBuscar=Consultar&j_idt15=j_idt15&javax.faces.ViewState=-3794484719380193327:5925215873023379072
# test.ar$
 
:cgipost|http://www.riu.edu.ar/cgi-bin/verdom.pl.nuevo|username=~1~
(.*)\.edu\.ar$
 
# TODO: how to query second -level domains "nic.ar" or "edu.ar"?
#:cgipostcurl|http://www.nic.ar/consdom.html|nombre=~1~&dominio=~2~
#(.*)(\.[^\.]*\.ar)$
#:notice||Please go to https://nic.ar/buscarDominio.xhtml to query the domain information.
:whois|whois.nic.ar
\.ar$
 
:multiple||whois::whois.nic.as:::notice::::For more information, please go to http://www.nic.as/whois.cfm
\.as$
 
:whois|whois.nic.at
\.at$
 
#:whois|whois.aunic.net
#:whois|whois.ausregistry.net.au
#:whois|whois.audns.net.au
#:multiple||whois::whois.audns.net.au:::notice::::For more availability check only, you can query whois server whois-check.ausregistry.net.au
:whois|whois.auda.org.au
\.au$
 
# :notice||No whois, no domain list. Homepage http://www.setar.aw/ [5/2010]
:whois|whois.nic.aw
\.aw$
 
#:notice||Please visit https://whois.ax/en/
:whois|whois.ax
\.ax$
 
:cgipostcurl|http://www.whois.az/cgi-bin/whois.cgi|lang=en&domain=~namewotld~&dom=.az
\.az$
 
# :notice||See http://www.nic.ba/stream/whois/, needs a image capable browser, therefore gwhois can't use this. [5/2010]
# TODO: we need some kind of OCR to read this (no CAPTCHA)
:notice||See http://nic.ba/lat/menu/view/13 , needs an image capable browser. [7/2013]
\.ba$
 
#:notice||Captcha protected whois on http://www.barbadosdomains.net/search_domain.php [5/2010]
:notice||Captcha protected whois on http://www.whois.telecoms.gov.bb/search_domain.php [7/2013]
\.bb$
 
# This service does exist, but it is sometimes not available
:cgipost|http://whois.btcl.net.bd:8080/dotbd/ViewDomain_2.jsp|dName=~namewotld~&Submit=SUBMIT
\.bd$
 
:whois|whois.dns.be
\.be$
 
#:notice||Go to http://www.nic.bf/ . (At the moment, the lookup service is not available. Last checked Jan 2012)
:notice||URL for registration services: http://www.arce.bf/domaine.php
\.bf$
 
:whois|whois.register.bg
\.bg$
 
#:cgipost|http://oldinet.arabian.net/include/domaincheckmodule.asp|txtWebDomain=~query~
:notice||Whois server gone [2015/05]
\.bh$
 
#:program|$gwhois$/subprograms/bi
:whois|whois1.nic.bi
\.bi$
 
# Alternative
# :cgi|http://whois.nic.bj/whois.php?~query~
# TODO: "To single out one record, look it up with "!XXX", where XXX is the handle."
# -> Umschreiben der Records in "BJ-XXX"?
:whois|whois.nic.bj
\.bj$
 
:notice||.bl is reserved
\.bl$
 
:program|$gwhois$/subprograms/bm
\.bm$
 
#:notice||No whois, no domain list. Homepage http://www.brunet.bn/ (last checked Sep 2005)
#:whois|whois.bn
#:notice||Whois server at whois.bn died in July 2014. You might want to check out http://www.telbru.com.bn
:whois|whois.bnnic.bn
\.bn$
 
:cgi|http://www.nic.bo/buscar.php?dominio=~1~&subdominio=.~2~.bo
(.*)\.(com|edu|gov|int|org|net|mil|tv)\.bo$
 
#:cgi|http://www.nic.bo/buscar.php?dominio=~namewotld~&subdominio=.bo
:whois|whois.nic.bo
\.bo$
 
#:whois|registro.br
:whois|whois.registro.br
\.br$
 
:cgipost|http://www.nic.bs/cgi-bin/search.pl|name=~query~
\.bs$
 
:cgi|http://www.nic.bt/mwhois.php?domainbt=~namewotld~
\.bt$
 
:notice||Disallocated by IANA
\.bu$
 
#:notice||.bv is unused as per norwegian nic. See http://www.norid.no/domenenavnbaser/bv-sj.html (last checked Jan 2005)
:notice||.bv is unused as per norwegian nic. See https://www.norid.no/omnorid/toppdomenet-bv.en.html (last checked May 2015)
\.bv$
 
#:notice||No whois, no domain list, no nothing. (last checked Sep 2005)
:whois|whois.nic.net.bw
\.bw$
 
# Gone (Mar 2012)
#:cgi|http://www.tld.by/cgi-bin/registry.cgi?domain=~namewotld~&lang=e&mode=slquest
:whois|whois.cctld.by
\.by$
 
# :notice||Please go to http://www.afilias-grs.info/public/whois_search and enter the CAPTCHA [Aug 2013]
# :whois|whois2.afilias-grs.net
# :program|$gwhois$/subprograms/bz
#:cgi|http://www.test.bz/Whois/index.php?query=~1~&output=nice&dotname=~2~&whois=Search
#(.+?)((\.[^\.]+){0,1}\.bz)$
# Attention: whois.belizenic.bz cannot query .edu.bz ... why?
:whois|whois.belizenic.bz
\.bz$
 
:whois|whois.cira.ca
\.ca$
 
#:inicwhois|whois.nic.cc
:inicwhois|ccwhois.verisign-grs.com
\.cc$
 
#:whois|whois.nic.cd
:notice||Whois server gone. You might find more information at http://nic.cd/
\.cd$
 
#:whois|whois.socatel.cf
:whois|whois.dot.cf
\.cf$
 
#:cgipost|http://www.nic.cg/cgi-bin/whois.pl|DOMAINWHOIS=~query~
:notice||A CAPTCHA is neccessary to access the information. Please visit: http://www.dnsafrica.net/cgi-bin/whois.pl (last checked Jan 2012)
\.cg$
 
:whois|whois.nic.ch
\.ch$
 
:whois|whois.nic.ci
#:cgi|http://whois.nic.ci/whois.php?Domaine=~query~&search=ok&button=Rechercher
\.ci$
 
#:whois|whois.nic.ck
:notice||Whois server gone [Nov 2013]
\.ck$
 
:whois|whois.nic.cl
\.cl$
 
#:whois|whois.ripe.net|prefix=-B |
:cgipost|http://register.cm/whois.php|domain=~query~&submit=Go
\.cm$
 
# Third level registrations also available (Apr 2012 via DE Wikipedia):
# .ac.cn
# .com.cn
# .edu.cn
# .gov.cn
# .mil.cn
# .net.cn
# .org.cn
:whois|whois.cnnic.cn
\.cn$
 
#:cgihttps|https://www.nic.co/pls/dominio/Pwhois.DatosDominio?fdominio=~1~&fnivel=~2~
#:cgi|http://www.whois.co/co/whois-co.cgi?TLD=co&dn=~query~&TYPE=DOMAIN
#(.*)\.([^\.]*)\.co$
#(.*)()\.co$
#:program|$gwhois$/subprograms/co
:whois|whois.nic.co
\.co$
 
#:notice||Please visit http://www.nic.cr/niccr_publico/showWhoisScreen.do and enter the captcha. (Nov 2012)
:whois|whois.nic.cr
\.cr$
 
:notice||Disallocated by IANA
\.cs$
 
#:cgi|http://www.nic.cu/consultas/infdomain.asp?Dominio=~query~
#:cgi|http://www.nic.cu/dom_det.php?domsrch=nic.cu
:program|$gwhois$/subprograms/cu
\.cu$
 
:cgi|http://www.dns.cv/cgi-bin/verifica-tld-pub.cgi?dominio=~query~
\.cv$
 
:notice||No whois yet available (last checked Dec 2011)
\.cw$
 
#:notice||Please go to http://whois.nic.cx/whois.jsp and enter the captcha. [Aug 2013]
:whois|whois.nic.cx
\.cx$
 
:cgi|http://www.nic.cy/nslookup/dns_get_record.php?search=~1~&what=~2~&submit=Search
(.*)\.([^\.]*)\.cy$
(.*)()\.cy$
 
:whois|whois.nic.cz
\.cz$
 
:notice||Disallocated by IANA
\.dd$
 
:whois|whois.denic.de|prefix=-T ace,dn |
\.de$
 
:notice||No whois, no domain list. Homepage http://www.adjib.dj/ (last checked Sep 2005)
\.dj$
 
:whois|whois.dk-hostmaster.dk|prefix=--show-handles |
\.dk$
 
#:cgipost|https://secure.domains.dm/tools/whois.jsp|whois=~namewotld~
#:notice||Please go to http://www.nic.dm/whois.php (uses AJAX)
#:cgi|http://www.nic.dm/getwhois.php?domain=~query~
:whois|whois.nic.dm
\.dm$
 
#:cgipost|http://ns.nic.do/whois.php3|T1=~1~&do=~2~
#:cgipost|http://nic.do/whoisingles.php3|T1=~1~&do=~2~
# 2nd Level TLDs checked 7,6,12 ( http://nic.do/whois-hin.php3 )
#(.*)\.((?:com|art|net|gov|gob|org|edu|sld|mil|web)\.do)$
#(.*)\.(do)$
:whois|whois.nic.do
\.do$
 
#:cgi|http://www.eldjazair.dz/template/rechercherdomaine.php?domain_name=~1~&domaine=~2~
#(.*)(\.(?:com|org|asso|art|edu|gov|pol)\.dz)$
#(.*)(\.dz)$
#:cgi|http://www.nic.dz/en/index.php?domain_name=~namewotld~&rechercher.x=0&rechercher.y=0&option=com_whois
:whois|whois.nic.dz
\.dz$
 
#:cgi|http://www.nic.ec/reg/eng/whois.asp?dominio=~query~
#:whois|whois.nic.ec
:notice||Please visit https://nic.ec/domain-registration/domain-whois-lookup.php
\.ec$
 
#:whois|whois.eenet.ee
:whois|whois.tld.ee
\.ee$
 
:notice||No whois, no domain list. Homepage http://www.egregistry.eg/ (2/2008)
\.eg$
 
:notice||.eh is reserved. No whois, no domain list, no nothing. (last checked Sep 2005)
\.eh$
 
:notice||No whois, no domain list. Homepage probably http://www.noc.net.er/ (last checked Sep 2005)
\.er$
 
#:cgihttps|https://www.nic.es/esnic/servlet/WhoisControllerHTML?dominio=~query~
#:notice||For captcha-secured whois please see http://www.nic.es/ (last checked Jan 2012)
#Captcha at: https://www.nic.es/sgnd/dominio/publicValidacionDetalleWhois.action?volverWhoIs=1&TDominio.nombreDominio=~query~
#:whois|whois.nic.es
#This whois service needs a registration of the IP address and has a strict query limit...
:multiple||whois::whois.nic.es:::notice::::For captcha-secured whois please see http://www.nic.es/ (last checked Jan 2012)
\.es$
 
:notice||No whois, no domain list. Homepage http://www.telecom.net.et/ (last checked Sep 2005)
\.et$
 
:whois|whois.eu
\.eu$
 
#:whois|whois.ficora.fi
:whois|whois.fi
\.fi$
 
# Whois server whois.domains.fj is online, but it is slowly and does not show the full address
# so we use our subprogram that parses the website
#:whois|whois.domains.fj
#:cgi|http://domains.fj/public/whois.php?searchDomainName=~namewotld~&searchTopLevel=~tld~&submitSearch=Search
:program|$gwhois$/subprograms/fj
\.fj$
 
:notice||No whois, no domain list. Homepage http://www.fidc.org.fk/ (last checked Sep 2005)
\.fk$
 
:cgi|http://www.dot.fm/query_whois.cfm?domain=~namewotld~&tld=fm
\.fm$
 
#:cgi|http://www.nic.fo/custom2/lookup/domain.asp?domainname=~query~
:whois|whois.nic.fo
\.fo$
 
:whois|whois.nic.fr
#:notice||Please visit https://www.afnic.fr/fr/produits-et-services/services/whois/
#:whois|whois.afnic.fr
\.fr$
 
:notice||No whois, no domain list. Homepage http://www.nic.ga/ (last checked Sep 2005)
\.ga$
 
:notice||Reserved Domain as per IANA. (last checked Sep 2005)
\.gb$
 
#:cgi|http://adamsnames.com/whois-gd/?domain=~namewotld~
#:whois|whois.adamsnames.com
:whois|whois.nic.gd
\.gd$
 
#:cgipost|http://www.registration.ge/index.php?page=11&lang=geo|whois_search=~namewotld~&domainEnd=.ge
#:whois|whois.registration.ge
#:whois|nic.net.ge
:program|$gwhois$/subprograms/ge
\.ge$
 
#:notice||Homepage http://www.nplus.gf/
# :cgipost|https://www.dom-enic.com/whois.html|domain=~namewotld~&extension=~tld~&Submit=Soumettre
:program|$gwhois$/subprograms/mq_gf_gp
# Note: IANA states that whois.mediaserv.net is the official whois.
# This whois server accepts the domainds "tld", "mq", "gf" and "gp"
# (A syntax can be displayed if you display something invalid to the whois server, for example "example.com")
# However, this whois-server don't seem to reply with verbose information. The holder, admin_c etc, shows "No object found"
#:whois|whois.mediaserv.net
\.gf$
 
#:whois|whois.isles.net
:whois|whois.gg
\.gg$
 
:whois|whois.nic.gh
\.gh$
 
# :notice||Please go to http://www.afilias-grs.info/public/whois_search and enter the captcha [Aug 2013]
:whois|whois2.afilias-grs.net
\.gi$
 
#:cgi|http://search.greennet.gl/cgi-bin/dnscheck/eng.dnscheck.pl?action=dnscheck&webaddress=~query~
:whois|whois.nic.gl
\.gl$
 
:whois|whois.ripe.net|prefix=-B |
\.gm$
 
:notice||No whois, no domain list. Homepage http://psg.com/dns/gn (2/2008)
\.gn$
 
# :whois|whois.nic.gp
# :cgipost|https://www.dom-enic.com/whois.html|domain=~namewotld~&extension=~tld~&Submit=Soumettre
:program|$gwhois$/subprograms/mq_gf_gp
\.gp$
 
#:notice||No whois, no domain list. Homepage http://www.getesa.gq/ (last checked Sep 2005)
:whois|whois.dominio.gq
\.gq$
 
# :cgipostcurl|https://grweb.ics.forth.gr/Whois|domainName=~query~&lang=en
:notice||Please visit https://grweb.ics.forth.gr/whois.jsp?lang=en and enter the CAPTCHA (last checked Nov 2012)
\.gr$
 
#:notice||Please go to http://whois.nic.gs/whois.jsp and enter the captcha. [Aug 2013]
:whois|whois.nic.gs
\.gs$
 
#:cgi|http://www.gt/cgi-bin/whois.cgi?domain=~query~
:program|$gwhois$/subprograms/gt
\.gt$
 
#:notice||.gu nic has a rather complicated search engine which gwhois can't use. See: http://gadao.gov.gu/domainsearch.htm
:program|$gwhois$/subprograms/gu
\.gu$
 
:notice||No whois, no domain list, no nothing. (last checked Sep 2005)
\.gw$
 
:whois|whois.registry.gy
\.gy$
 
#:whois|whois.hkdnr.net.hk
:whois|whois.hkirc.hk
\.hk$
 
# :whois|whois.registry.hm
# :cgi|http://www.registry.hm/HR_whois2.php?domain_name=~query~
:program|$gwhois$/subprograms/hm
\.hm$
 
# :whois|whois2.afilias-grs.net
:whois|whois.nic.hn
\.hn$
 
:cgipost|http://www.dns.hr/asp/traziFOdomenu.asp|Upit=~1~&Submit2=Tra%BEi
(.*)\.iz\.hr$
 
:cgipost|http://hr-t.dns.hr/php/search.php|domena=~1~&Submit=Tra%BEi
(.*)\.com\.hr$
 
#:cgipost|http://www.dns.hr/asp/trazidomenu.asp|Upit=~namewotld~&Submit2=Tra%BEi
:whois|whois.dns.hr
\.hr$
 
#:cgi|http://www.nic.ht/info/whois.cfm?domain=~query~
#:notice||Please go to http://whois.nic.ht/whois.jsp and enter the captcha. [Aug 2013]
:whois|whois.nic.ht
\.ht$
 
:whois|whois.nic.hu
\.hu$
 
# :cgipost|http://www.idnic.net.id/cgi-bin/whois.cgi|domain=~1~&induk=~2~
# What the hell is "war.net.id"?
# (.*)\.((?:web|sch|or|co|ac|war\.net|net|mil|go)\.id)$
#:notice||Please go to https://register.pandi.or.id/Index/whois/lang/en or https://www.pandi.or.id/whois/ and enter the CAPTCHA.
#\.((?:ac|co|net|or|web|sch|mil|go|my|biz)\.id)$
#:whois|whois.pandi.or.id
#:multiple||whois::whois.pandi.or.id:::notice::::Please go to https://register.pandi.or.id/Index/whois/lang/en or https://www.pandi.or.id/whois/ and enter the CAPTCHA.
:whois|whois.id
\.id$
 
#:whois|whois.domainregistry.ie
:whois|whois.iedr.ie
\.ie$
 
:whois|whois.isoc.org.il
\.il$
 
:whois|whois.nic.im
\.im$
 
#:whois|whois.inregistry.net
:whois|whois.registry.in
\.in$
 
:whois|whois.nic.io
\.io$
 
# :notice||No whois, no domain list, no nothing. (last checked Sep 2005)
:whois|whois.cmc.iq
\.iq$
 
:whois|whois.nic.ir
\.ir$
 
#:whois|whois.isnet.is
:whois|whois.isnic.is
\.is$
 
:whois|whois.nic.it
\.it$
 
#:whois|whois.isles.net
:whois|whois.je
\.je$
 
:notice||No whois, no domain list, no nothing. (last checked Sep 2005)
\.jm$
 
:cgi|http://www.nis.gov.jo/pls/dns/jo_organization_info?dom=~1~&subd=~2~
(.*)\.(com|edu|org|gov|net)\.jo$
 
:cgi|http://www.nis.gov.jo/pls/dns/jo_organization_info?dom=~namewotld~&subd=-
\.jo$
 
#:whois|whois.jp|trailer=/e
:whois|whois.jprs.jp|trailer=/e
\.jp$
 
:whois|whois.kenic.or.ke
\.ke$
 
#:cgipostcurl|http://www.domain.kg/cgi-bin/whois.cgi|whois=~ucquery~
#:cgipostcurl|https://www.cctld.kg/cgi-bin/whois.cgi|whois=~ucquery~&next=
#:whois|whois.domain.kg
:whois|whois.kg
\.kg$
 
:notice||No whois, no domain list. Homepage http://www.mptc.gov.kh/Reculation/dns_reualation.htm (last checked Sep 2005)
\.kh$
 
#:whois|whois.nic.ki
:notice||Whois gone [Apr 2019]
\.ki$
 
:notice||No whois, no domain list. Homepage http://www.domaine.km/ (last checked Sep 2005)
\.km$
 
#:notice||No whois, no domain list, no nothing. (last checked Sep 2005)
:whois|whois.nic.kn
\.kn$
 
#:whois|whois.kcce.kp
:notice||Whois gone [Sep 2013]
\.kp$
 
#:whois|whois.nic.or.kr
:whois|whois.kr
\.kr$
 
:cgipost|http://www.kw/mainrs.asp|domname=~1~&domtype=~2~
(.*)\.((?:com|edu|gov|net|org)\.kw)$
(.*)\.(kw)$
 
#:cgipost|http://kynseweb.messagesecure.com/whois.asp|domain_name_pref=~1~&domain_name_suff=~2~
#(.*)(\.(?:com|net|org|gov|edu)\.ky)$
#(.*)(\.ky)$
:whois|whois.kyregistry.ky
\.ky$
 
:whois|whois.nic.kz
\.kz$
 
# This domain is managed by CentralNIC, see https://www.centralnic.com/portfolio/registration
#:notice||Please visit https://manage.centralnic.com/support/view_whois/ and enter the CAPTCHA.
#:whois|whois.centralnic.net
#:cgi|https://www.la/cart/search/~namewotld~
:whois|whois.nic.la
\.la$
 
:cgi|http://www.aub.edu.lb/cgi-bin/lbdr.pl?cn=~query~
\.lb$
 
:whois|whois2.afilias-grs.net
\.lc$
 
:whois|whois.nic.li
\.li$
 
:cgipost|http://www.nic.lk/cgi-bin/searchdomModified.cgi|domain=~1~&seclev=~2~
(.*)(\.(?:assn|com|edu|grp|hotel|ltd|ngo|org|soc|web|gov|int|net|sch)\.lk)$
(.*)(\.lk)$
 
:notice||No whois, no domain list. Homepage http://psg.com/dns/lr (last checked Sep 2005)
\.lr$
 
#:cgipost|http://www.org.ls/co.asp|CT_DNS_NAME=~query~
#:cgipost|http://www.co.ls/co.asp|CT_DNS_NAME=~query~
#:notice||Please go to http://nic.ls/whois/ and enter the CAPTCHA.
#:whois|196.11.175.58
:whois|whois.nic.ls
\.ls$
 
:whois|whois.domreg.lt
\.lt$
 
#:whois|whois.restena.lu
:whois|whois.dns.lu
\.lu$
 
:whois|whois.nic.lv
\.lv$
 
:whois|whois.nic.ly
\.ly$
 
#:whois|whois.iam.net.ma
:whois|whois.registre.ma
\.ma$
 
:whois|whois.ripe.net|prefix=-B |
\.mc$
 
#:notice||Whois is secured by a captcha, please check yourself on http://www.nic.md/ (02/2008)
:whois|whois.nic.md
\.md$
 
:whois|whois.nic.me
\.me$
 
:notice||.mf is reserved
\.mf$
 
:whois|whois.nic.mg
\.mg$
 
:notice||No whois, no domain list. Homepage http://www.nic.net.mh/ (last checked Sep 2005)
\.mh$
 
#:notice||No whois, no domain list. Homepage http://www.mpt.com.mk/ (broken as of Sep 2005)
:whois|whois.marnet.mk
\.mk$
 
#:notice||No whois, no domain list. Homepage http://www.sotelma.ml/ (last checked Sep 2005)
:whois|whois.dot.ml
\.ml$
 
:notice||Unknown if a whois service exist. See http://www.nic.mm/ for more information [Aug 2013]
\.mm$
 
# :notice||Please visit http://www.domain.mn/domain.php?action=whois and enter the captcha [Aug 2013]
# :notice||Please go to http://www.afilias-grs.info/public/whois_search and enter the captcha [Aug 2013]
# Jan 2012 - Okt 2014 : Official service whois.nic.mn does not work, but whois2.afilias-grs.net works.
# Nov 2014: whois.nic.mn works again
# Jun 2016: whois.nic.mn is down again
#:whois|whois2.afilias-grs.net
:whois|whois.nic.mn
#:notice||Please visit http://domain.mn/domain-registration/domain-whois-lookup.php
\.mn$
 
:multiple||whois::whois.monic.mo:::notice::::For more information, please go to https://www.monic.mo/monic/faces/whois
\.mo$
 
#:notice||No whois, no domain list. Homepage http://www.nic.mp/ (last checked Sep 2005)
#:whois|whois.nic.mp
:notice||Whois gone [Sep 2013]
\.mp$
 
# :notice||Homepage http://www.nic.mq/
# :cgipost|https://www.dom-enic.com/whois.html|domain=~namewotld~&extension=~tld~&Submit=Soumettre
:program|$gwhois$/subprograms/mq_gf_gp
# Note: IANA states that whois.mediaserv.net is the official whois.
# This whois server accepts the domainds "tld", "mq", "gf" and "gp"
# (A syntax can be displayed if you display something invalid to the whois server, for example "example.com")
# However, this whois-server don't seem to reply with verbose information. The holder, admin_c etc, shows "No object found"
#:whois|whois.mediaserv.net
\.mq$
 
#:notice||No whois, no domain list. Homepage http://www.nic.mr/ (2/2008)
:whois|whois.nic.mr
\.mr$
 
#:notice||Please go to http://whois.nic.ms/whois.jsp and enter the captcha. [Aug 2013]
:whois|whois.nic.ms
\.ms$
 
#:whois|whois.nic.mt
#:notice||Please go to https://www.nic.org.mt/dotmt/whois/ and enter the captcha. (Aug 2013)
:whois|whois.nic.org.mt
\.mt$
 
#:notice||Please go to http://whois.nic.mu/whois.jsp and enter the captcha. [Aug 2013]
:whois|whois.nic.mu
\.mu$
 
:notice||No whois, no domain list, no nothing. (last checked Sep 2005)
\.mv$
 
#:cgi|http://www.registrar.mw/index.php?domain=~query~
:whois|whois.nic.mw
\.mw$
 
#:whois|whois.nic.mx
:whois|whois.mx
\.mx$
 
# Port 43 of whois.mynic.my ist only open to authorized resellers ( see https://www.mynic.my/en/faq.php?id=40#115 )
# :whois|whois.mynic.net.my
# :whois|whois.domainregistry.my
# :whois|whois.mynic.my
:cgipost|http://whois.mynic.my/index.jsp|type=domain&searchtxt=~namewotld~&ext=.~tld~
\.my$
 
# :notice||No whois, no domain list. Homepage http://www.ci.uem.mz/ (last checked Sep 2005)
:whois|whois.nic.mz
\.mz$
 
:whois|whois.na-nic.com.na
\.na$
 
#:notice||Captcha protected whois on http://www.domaine.nc/. Good look trying to read the captcha. (2/2008)
:whois|whois.nc
\.nc$
 
:notice||No whois, no domain list. Homepage http://www.intnet.ne/ (last checked Sep 2005)
\.ne$
 
#:notice||No whois, domain availability can be checked on https://secure.nf/ (2/2008)
#:notice||Please go to http://whois.nic.nf/whois.jsp and enter the captcha. [Aug 2013]
#:whois|whois.nic.net.nf
:whois|whois.nic.nf
\.nf$
 
#:notice||No whois, no domain list. Homepage http://psg.com/dns/ng (last checked Sep 2005)
:whois|whois.nic.net.ng
\.ng$
 
:notice||No (usable) whois. Partial domain list at homepage http://www.nic.ni/ (last checked Sep 2005)
\.ni$
 
:whois|whois.domain-registry.nl
\.nl$
 
#:notice||Whois service available at https://www.norid.no/domenenavnbaser/whois/index.en.php , CAPTCHA required
:whois|whois.norid.no
\.no$
 
:cgi|http://www.mos.com.np/cgi-bin/search.cgi?domain_name=~query~
\.np$
 
# FIXME: is there any possibility of querying *.gov.edu (e.g. ronlaw.gov.nr) or *.edu.nr ?
:cgi|http://www.cenpac.net.nr/dns/whois.html?subdomain=~1~&tld=~2~&whois=Submit
(.*)\.((?:net|biz|info|org|com)\.nr)$
(.*)\.(nr)$
 
#:whois|whois.nic.nu
:whois|whois.iis.nu
\.nu$
 
:whois|whois.srs.net.nz
\.nz$
 
# --- Dead code. omnic.om is not registered anymore.
# :cgipost|http://www.omnic.om/onlineUser/whoisMain.jsp|domainName=~1~&domainCategory=~2~&sourcePage=WHOISLookup
#:multiple||whois::whois.registry.om:::cgipost::http://www.omnic.om/onlineUser/whoisMain.jsp::domainName=~1~&domainCategory=~2~&sourcePage=WHOISLookup
# ".ac.om" etc gibt es laut enWiki ... ( + http://www.omnic.om/omnic/rules.htm )
#(.*)(\.(?:com|edu|gov|mil|net|org|med|co))\.om$
# A few 1st level domains, e.g. registry.om
# :whois|whois.registry.om
#:multiple||whois::whois.registry.om:::cgipost::http://www.omnic.om/onlineUser/whoisMain.jsp::domainName=~namewotld~&domainCategory=.om&sourcePage=WHOISLookup
#\.om$
 
# This website contains additional info (URL of the registrar, and email addresses): http://portal.registry.om/whois/whois_local.jsp
:whois|whois.registry.om
\.om$
 
#:cgi|http://www.nic.pa/whois.php?nombre_d=~query~
:program|$gwhois$/subprograms/pa
\.pa$
 
#:program|$gwhois$/subprograms/pe
#:notice||Please go to https://punto.pe/whois.php and enter the CAPTCHA.
:whois|kero.yachay.pe
\.pe$
 
#:notice||No whois, no domain list. Homepage http://www.mana.pf/ (last checked Sep 2005)
# This is the server according to IANA, but it does not currently work [Jul 2013]
:whois|whois.registry.pf
\.pf$
 
#:notice||No whois, no domain list. Homepage http://www.unitech.ac.pg/Unitech_General/ITS/ITS_Dns.htm (last checked Jan 2005)
:notice||No whois, no domain list. Homepage http://www.unitech.ac.pg/Frm_Information_about.aspx?ID=130 (last checked Jan 2013)
\.pg$
 
#:cgi|http://www.domains.ph/WhoIs.asp?Domain=~query~
:notice||Please visit http://www.dot.ph/whois and enter the CAPTCHA (last checked Nov 2012)
\.ph$
 
# :cgipost|http://pk5.pknic.net.pk/pk5/lookup.PK|name=~query~
# This output looks way better than the lynx dump:
:program|$gwhois$/subprograms/pk
\.pk$
 
#:whois|dns.pl
:whois|whois.dns.pl
\.pl$
 
#:whois|whois.nic.fr
:whois|whois.nic.pm
\.pm$
 
# :cgipost|http://www.pitcairn.pn/cgi-bin/domainNameCheck.cgi|dname=~1~&subdomain=~2~
:cgipost|http://www.government.pn/cgi-bin/whois.cgi|domainName=~1~&parentDomain=~2~
(.*)\.((?:co|net|org)\.pn)$
(.*)\.(pn)$
 
:whois|whois.dotpostregistry.net
\.post$
 
#:whois|whois.uprr.pr
#:whois|whois.nic.pr
:whois|whois.afilias-srs.net
\.pr$
 
:cgipost|http://www.pnina.ps/whois/domain_whois.php|dname=~query~
\.ps$
 
:whois|whois.dns.pt
\.pt$
 
# :notice||No whois, no domain list. Homepage http://www.pwregistry.pw/ (2/2008)
# This domain is managed by CentralNIC, see https://www.centralnic.com/portfolio/registration
#:notice||Please visit https://manage.centralnic.com/support/view_whois/ and enter the CAPTCHA.
#:whois|whois.centralnic.net
#:cgi|http://registry.pw/whois/?query=~namewotld~&output=nice
:whois|whois.nic.pw
\.pw$
 
:cgipostcurl|http://www.nic.py/cgi-nic/consultas/domdetzzz|dom=~1~&tip=~2~
(.*)\.([^\.]*)\.py$
(.*)()\.py
 
#:notice||No whois, no domain list. Homepage http://www.qatar.net.qa/ (last checked Sep 2005)
:whois|whois.registry.qa
\.qa$
 
:whois|whois.nic.re
\.re$
 
:whois|whois.rotld.ro
\.ro$
 
#:notice||No whois, no domain list. Homepage http://www.nic.rs (last checked Sep 2007)
:whois|whois.rnids.rs
\.rs$
 
#:whois|whois.ripn.net
:whois|whois.tcinet.ru
\.ru$
 
#:cgipost|http://www.nic.rw/cgi-bin/whois.pl|DOMAINWHOIS=~query~
:notice||A captcha is neccessary to access the information. Please visit: http://www.dnsafrica.net/cgi-bin/whois.pl (last checked Jan 2012)
\.rw$
 
#:whois|whois.saudinic.net.sa
:whois|whois.nic.net.sa
\.sa$
 
#:notice||Please go to http://whois.nic.sb/whois.jsp and enter the captcha. [Aug 2013]
:whois|whois.nic.net.sb
#:whois|whois.nic.sb
\.sb$
 
# :notice||Please go to http://www.afilias-grs.info/public/whois_search and enter the captcha [Aug 2013]
:whois|whois2.afilias-grs.net
\.sc$
 
:notice||No whois, no domain list. Homepage http://www.sdnic.sd/ (2/2008)
\.sd$
 
#:whois|whois.nic-se.se
:whois|whois.iis.se
\.se$
 
#:whois|whois.nic.net.sg
:whois|whois.sgnic.sg
\.sg$
 
# Official Whois Server does not show verbose information (like the creation date) [7/2013]
#:whois|whois.nic.sh
#:cgi|http://www.nic.sh/cgi-bin/whois?query=~query~
:program|$gwhois$/subprograms/sh
\.sh$
 
#:whois|whois.arnes.si
:whois|whois.register.si
\.si$
 
#:notice||.sj is unused as per norwegian nic. See http://www.norid.no/domenenavnbaser/bv-sj.html (last checked Sep 2005)
:notice||.sj is unused as per norwegian nic. See https://www.norid.no/omnorid/toppdomenet-sj.en.html (last checked May 2015)
\.sj$
 
:whois|whois.sk-nic.sk
\.sk$
 
:notice||No whois, no domain list. Homepage http://sierratel.sl/domain/ (last checked Sep 2005)
\.sl$
 
#:whois|whois.ripe.net|prefix=-B |
:whois|whois.nic.sm
\.sm$
 
#:notice||Whois on http://www.nic.sn, not working. (2/2008)
# Whois was broken for a long time (Checked Feb 2008, Nov 2012, Aug 2013)
# In Aug 2014 we noticed that the whois server works again.
:whois|whois.nic.sn
# :cgipost|http://whois.nic.sn/|domaine=~query~
# :program|$gwhois$/subprograms/sn
\.sn$
 
#:notice||No whois, no domain list. Homepage http://www.nic.so/ (last checked Sep 2005)
:whois|whois.nic.so
\.so$
 
#:notice||Whois gone, homepage http://www.sr.net (2/2008)
:notice||Domain check available at: https://www.register.sr/domainchecker.php (last checked Jan 2012)
\.sr$
 
:whois|whois.nic.ss
\.ss$
 
:whois|whois.nic.st
\.st$
 
#:whois|whois.ripn.net
:whois|whois.tcinet.ru
\.su$
 
:notice||No whois, no domain list. Availability check on http://www.svnet.org.sv/ (2/2008)
\.sv$
 
#:notice||Homepage http://www.ste.gov.sy/
:whois|whois.sx
\.sx$
 
#:notice||No whois, no domain list. Homepage http://www.ste.gov.sy/ (last checked Sep 2005)
#:notice||Please go to https://whois.tld.sy/whois.jsp
:whois|whois.tld.sy
\.sy$
 
:notice||No whois, no domain list. Homepage http://www.sispa.org.sz/ (last checked Sep 2005)
\.sz$
 
#:cgi|http://adamsnames.com/whois-tc/?domain=~namewotld~
#:whois|whois.adamsnames.tc
#:whois|whois.meridiantld.net
:whois|whois.nic.tc
\.tc$
 
#:notice||No whois, no domain list. Homepage http://www.sotel.td/ (last checked Sep 2005)
:whois|41.74.44.44
\.td$
 
:whois|whois.nic.tf
\.tf$
 
#:cgipost|http://www.nic.tg/nictg/indexplus.php?pg=verifdom&op=whois|tosearch=~namewotld~&typedom=.tg
#:cgipost|http://www.netmaster.tg/manager/whois|domain=~query~
:whois|whois.nic.tg
\.tg$
 
#:whois|whois.thnic.net
:whois|whois.thnic.co.th
\.th$
 
# :cgi|http://www.nic.tj/cgi/lookup?DOMAIN=~namewotld~
:cgi|http://www.nic.tj/cgi/whois2?domain=~namewotld~
\.tj$
 
#:notice||Please go to http://www.dot.tk/en/whois.html
:whois|whois.dot.tk
#:cgipost|http://my.dot.tk/cgi-bin/whois.taloha|domainname=~namewotld~
\.tk$
 
#:notice||Please go to http://whois.nic.tl/whois.jsp and enter the captcha. [Aug 2013]
:whois|whois.nic.tl
\.tl$
 
:whois|whois.nic.tm
\.tm$
 
# :cgipost|http://whois.ati.tn/index.php|domain=~1~&ext=2&action=whois&submit=ok
# (.*)\.com\.tn$
 
# :cgipost|http://whois.ati.tn/index.php|domain=~1~&ext=5&action=whois&submit=ok
# (.*)\.ens\.tn$
 
# :cgipost|http://whois.ati.tn/index.php|domain=~1~&ext=6&action=whois&submit=ok
# (.*)\.fin\.tn$
 
# :cgipost|http://whois.ati.tn/index.php|domain=~1~&ext=7&action=whois&submit=ok
# (.*)\.gov\.tn$
 
# :cgipost|http://whois.ati.tn/index.php|domain=~1~&ext=9&action=whois&submit=ok
# (.*)\.ind\.tn$
 
# :cgipost|http://whois.ati.tn/index.php|domain=~1~&ext=10&action=whois&submit=ok
# (.*)\.intl\.tn$
 
# :cgipost|http://whois.ati.tn/index.php|domain=~1~&ext=11&action=whois&submit=ok
# (.*)\.nat\.tn$
 
# :cgipost|http://whois.ati.tn/index.php|domain=~1~&ext=12&action=whois&submit=ok
# (.*)\.net\.tn$
 
# :cgipost|http://whois.ati.tn/index.php|domain=~1~&ext=14&action=whois&submit=ok
# (.*)\.org\.tn$
 
# :cgipost|http://whois.ati.tn/index.php|domain=~1~&ext=15&action=whois&submit=ok
# (.*)\.info\.tn$
 
# :cgipost|http://whois.ati.tn/index.php|domain=~1~&ext=16&action=whois&submit=ok
# (.*)\.person\.tn$
 
# :cgipost|http://whois.ati.tn/index.php|domain=~1~&ext=17&action=whois&submit=ok
# (.*)\.tourism\.tn$
 
# :cgipost|http://whois.ati.tn/index.php|domain=~1~&ext=18&action=whois&submit=ok
# (.*)\.edunet\.tn$
 
# :cgipost|http://whois.ati.tn/index.php|domain=~1~&ext=19&action=whois&submit=ok
# (.*)\.rnrt\.tn$
 
# :cgipost|http://whois.ati.tn/index.php|domain=~1~&ext=20&action=whois&submit=ok
# (.*)\.rns\.tn$
 
# :cgipost|http://whois.ati.tn/index.php|domain=~1~&ext=21&action=whois&submit=ok
# (.*)\.rnu\.tn$
 
# :cgipost|http://whois.ati.tn/index.php|domain=~1~&ext=22&action=whois&submit=ok
# (.*)\.mincom\.tn$
 
# :cgipost|http://whois.ati.tn/index.php|domain=~1~&ext=23&action=whois&submit=ok
# (.*)\.agrinet\.tn$
 
#:cgipost|http://whois.ati.tn/index.php|domain=~namewotld~&ext=1&action=whois&submit=ok
:whois|whois.ati.tn
\.tn$
 
:whois|whois.tonic.to
\.to$
 
:notice||Disallocated by IANA. It was replaced with .tl
\.tp$
 
:whois|whois.nic.tr
\.tr$
 
#:cgipost|http://www.nic.tt/cgi-bin/search.pl|name=~query~
:program|$gwhois$/subprograms/tt
\.tt$
 
#:inicwhois|whois.nic.tv
:inicwhois|tvwhois.verisign-grs.com
\.tv$
 
:whois|whois.twnic.net.tw
\.tw$
 
#:notice||No whois, no domain list. Homepage http://psg.com/dns/tz (last checked Sep 2005)
:whois|whois.tznic.or.tz
\.tz$
 
#:whois|whois.net.ua
:whois|whois.ua
\.ua$
 
:whois|whois.co.ug
\.ug$
 
:whois|whois.ja.net
\.(ac|gov)\.uk$
 
:whois|whois.nic.uk
\.uk$
 
#:notice||No whois, no domain list. Homepage http://www.nic.um/ (last checked Sep 2005)
#\.um$
:notice||Disallocated by IANA
\.um$
 
:whois|whois.nic.us
\.us$
 
#:whois|sepe.rau.edu.uy
:whois|whois.nic.org.uy
\.uy$
 
#:whois|whois.uz
:whois|whois.cctld.uz
\.uz$
 
# :whois|whois.ripe.net|prefix=-B |
:notice||No whois, no domain list. Homepage http://www.vatican.va/ (last checked Jan 2012)
\.va$
 
# :notice||Please go to http://www.afilias-grs.info/public/whois_search and enter the captcha [Aug 2013]
:whois|whois2.afilias-grs.net
\.vc$
 
#:cgihttps|https://registro.nic.ve/modules/whois?query=~query~&submit=Consultar
:whois|whois.nic.ve
\.ve$
 
#:whois|whois.nic.vg
#:cgi|http://adamsnames.com/whois-vg/?domain=~namewotld~
#:whois|whois.adamsnames.tc
#:whois|ccwhois.ksregistry.net
:whois|whois.nic.vg
\.vg$
 
#:cgipost|http://www.nic.vi/whois.asp|text1=~query~
#:cgipost|https://secure.nic.vi/whois-lookup/|domainName=~query~&submitted=true
:program|$gwhois$/subprograms/vi
\.vi$
 
#:cgipostcurl|http://www.tenmien.vn/jsp/jsp/tracuudomainchitiet.jsp?type=~query~
:notice||Please go to http://www.tenmien.vn/ and enter the captcha.
\.vn$
 
# ** Method 1 (official; missing email address, modified date and registrar)
#:whois|vunic.vu
#\.vu$
# ** Method 2 (missing email address and registrar)
#:cgi|http://www.vunic.vu/whois?~query~
#\.vu$
# ** Method 3 (web interace, most verbose but not well formated)
#:cgipostcurl|http://www.vunic.vu/whoiss/process_whois.php?domain=~1~&ext=~2~
#(.*)((|\.com|\.edu|\.net|\.org)\.vu)$
# ** Method 4 (parsing web interface, most verbose, parse it manually)
:program|$gwhois$/subprograms/vu
\.vu$
 
:whois|whois.nic.wf
\.wf$
 
#:whois|whois.nic.ws
:whois|whois.website.ws
\.ws$
 
:notice||No whois, no domain list. Homepage http://www.nic.gov.ye/ (last checked Sep 2005)
\.ye$
 
:whois|whois.nic.yt
\.yt$
 
#:cgi|http://www.nic.yu/cgi-bin/checkavail.cgi?domain=~1~&suffix=~2~
#(.*)(\.(?:bg\.ac|ac|co|org|edu)\.yu)$
#(.*)(.yu)$
:notice||Disallocated by IANA
\.yu$
 
# TODO: please see http://en.wikipedia.org/wiki/.za : there are much more 3rd level TLDs!
# See also: http://www.zadna.org.za/annexure-d1.html
# See also: http://www.esn.org.za/dnsreg.html
 
:cgipost|http://protea.tenet.ac.za/cgi/cgi_domainquery.exe|domain=~1~
(.*)\.ac\.za$
 
:cgi|http://co.za/cgi-bin/whois.sh?Domain=~query~
\.co\.za$
 
:notice||Please visit http://www.nom.za/ and enter the captcha.
\.nom\.za$
 
:cgipost|http://www.org.za/cgi-bin/rwhois|domain=~1~
(.*)\.org\.za$
 
:cgipost|http://dnsadmin.gov.za/navail.php|ipnamex=~query~&submit=Start
\.gov\.za$
 
:notice||Please go to http://whois.edu.za/ and enter the CAPTCHA.
\.edu\.za$
 
:notice||Please go to http://whois.net.za/ and enter the CAPTCHA.
\.net\.za$
 
:notice||Please go to http://whois.alt.za/ and enter the CAPTCHA.
\.alt\.za$
 
:notice||Please go to http://whois.web.za/ and enter the CAPTCHA.
\.web\.za$
 
:notice||No whois service currently available [7/2013]
\.school\.za$
 
:notice||No whois service currently available [7/2013]
\.mil\.za$
 
#:notice||No whois (except .co.za domains). Homepage http://www.zadna.org.za/ (last checked Sep 2005)
#How to query co.za directly as 1st TLD? (<-- was meinte ich damit?)
:notice||.za only allocates domains under third level. Either your input is wrong or gwhois don't know this second level domain you have entered. Please check http://www.zadna.org.za/ for more information.
\.za$
 
:notice||Disallocated by IANA
\.zr$
 
#:notice||No whois, no domain list. Homepage http://www.zamnet.zm/ser-isp/dns.htm (last checked Sep 2005)
:whois|whois.nic.zm
\.zm$
 
:cgi|http://www.zispa.org.zw/cgi-bin/search?domain=~query~
\.co\.zw$
 
:notice||No whois (except .co.zw domains). No homepage (http://www.zispa.org.zw for .co.zw). (last checked Sep 2005)
\.zw$
 
 
# gTLD and other domains
# --------------------------------------------------------------------
 
:whois|whois.aero
\.aero$
 
:whois|whois.iana.org
\.arpa$
 
:whois|whois.nic.asia
\.asia$
 
#:whois|whois.nic.biz
:whois|whois.biz
\.biz$
 
#:whois|whois.cat
:whois|whois.nic.cat
\.cat$
 
:inicwhois|whois.verisign-grs.com
\.com$
 
:whois|whois.nic.coop
\.coop$
 
#:whois|whois.educause.net
:whois|whois.educause.edu
\.edu$
 
# First, whois.nic.gov worked. Then, whois.dotgov.gov worked (and became the official IANA server).
# Currently (Sep 2014), whois.nic.gov works again and whois.dotgov.gov is defunct (but still the official IANA whois server).
# (Okt 2014) whois.dotgov.gov works again.
#:whois|whois.nic.gov
#:whois|whois.dotgov.gov
#:program|$gwhois$/subprograms/gov
# The official whois server shows stuff like name servers while the web interface shows additional information like Agency
:multiple||whois::whois.dotgov.gov:::program::$gwhois$/subprograms/gov
\.gov$
 
:whois|whois.afilias.net
\.info$
 
:whois|whois.iana.org
\.int$
 
#:inicwhois|jobswhois.verisign-grs.com
:whois|whois.nic.jobs
\.jobs$
 
#:whois|whois.nic.mil
#:cgi|http://www.nic.mil/dodnic/
:notice||Whois server gone. (last checked Jan 2012)
\.mil$
 
#:whois|whois.dotmobiregistry.net
:whois|whois.afilias.net
\.mobi$
 
#:whois|whois.museum
:whois|whois.nic.museum
\.museum$
 
:whois|whois.nic.name|prefix=domain=
\.name$
 
:inicwhois|whois.verisign-grs.com
\.net$
 
:whois|whois.pir.org
\.org$
 
#:whois|whois.registrypro.pro
#:whois|whois.dotproregistry.net
:whois|whois.afilias.net
\.pro$
 
:whois|whois.nic.tel
\.tel$
 
:whois|whois.nic.travel
\.travel$
 
:notice||Disallocated by IANA
\.xn--0zwm56d$
 
:notice||Disallocated by IANA
\.xn--11b5bs3a9aj6g$
 
:whois|whois.kr
\.xn--3e0b707e$
 
:whois|whois.registry.in
\.xn--45brj9c$
 
:notice||Disallocated by IANA
\.xn--80akhbyknj4f$
 
:whois|whois.rnids.rs
\.xn--90a3ac$
 
:notice||Disallocated by IANA
\.xn--9t4b11yi5a$
 
:whois|whois.sgnic.sg
\.xn--clchc0ea0b2g2a9gcd$
 
:notice||Disallocated by IANA
\.xn--deba0ad$
 
:whois|cwhois.cnnic.cn
\.xn--fiqs8s$
 
:whois|cwhois.cnnic.cn
\.xn--fiqz9s$
 
:whois|whois.registry.in
\.xn--fpcrj9c3d$
 
:notice||whois server unknown (last checked Dec 2011)
\.xn--fzc2c9e2c$
 
:notice||Disallocated by IANA
\.xn--g6w251d$
 
:whois|whois.registry.in
\.xn--gecrj9c$
 
:whois|whois.registry.in
\.xn--h2brj9c$
 
:notice||Disallocated by IANA
\.xn--hgbk6aj7f53bba$
 
:notice||Disallocated by IANA
\.xn--hlcj6aya9esc7a$
 
:whois|whois.dotukr.com
\.xn--j1amh$
 
:whois|whois.hkirc.hk
\.xn--j6w193g$
 
:notice||Disallocated by IANA
\.xn--jxalpdlp$
 
:notice||Disallocated by IANA
\.xn--kgbechtv$
 
:whois|whois.twnic.net.tw
\.xn--kprw13d$
 
:whois|whois.twnic.net.tw
\.xn--kpry57d$
 
:notice||No whois server is yet known ... (last checked Aug 2013)
\.xn--l1acc$
 
:whois|whois.nic.dz
\.xn--lgbbat1ad8j$
 
:whois|whois.nic.ir
\.xn--mgba3a4f16a$
 
:whois|whois.aeda.net.ae
\.xn--mgbaam7a8h$
 
:notice||whois server unknown (last checked Dec 2011)
\.xn--mgbayh7gpa$
 
:whois|whois.registry.om
\.xn--mgb9awbf$
 
:whois|whois.registry.in
\.xn--mgbbh1a71e$
 
:notice||whois server unknown (last checked Dec 2011)
\.xn--mgbc0a9azcg$
 
:whois|whois.nic.net.sa
\.xn--mgberp4a5d4ar$
 
# Port 43 of whois.mynic.my ist only open to authorized resellers ( see https://www.mynic.my/en/faq.php?id=40#115 )
# :whois|whois.domainregistry.my
# :whois|whois.mynic.my
:cgipost|http://whois.mynic.my/index.jsp|type=domain&searchtxt=~namewotld~&ext=.~tld~
\.xn--mgbx4cd0ab$
 
:whois|whois.thnic.co.th
\.xn--o3cw4h$
 
# :notice||whois server unknown (last checked Dec 2011)
:whois|whois.tld.sy
\.xn--ogbpf8fl$
 
:whois|whois.tcinet.ru
\.xn--p1ai$
 
:notice||whois server unknown (last checked Dec 2011)
\.xn--pgbs0dh$
 
:whois|whois.registry.in
\.xn--s9brj9c$
 
:notice||whois server unknown (last checked Dec 2011)
\.xn--wgbh1c$
 
:whois|whois.registry.qa
\.xn--wgbl6a$
 
:notice||whois server unknown (last checked Dec 2011)
\.xn--xkc2al3hye2a$
 
:whois|whois.registry.in
\.xn--xkc2dl3a5ee0h$
 
:whois|whois.sgnic.sg
\.xn--yfro4i67o$
 
:whois|whois.nic.kz
\.xn--80ao21a$
 
:whois|whois.pnina.ps
\.xn--ygbi2ammx$
 
:notice||Disallocated by IANA
\.xn--zckzah$
 
:whois|whois.nic.xxx
\.xxx$
 
 
 
# Pseudo TLDs
# --------------------------------------------------------------------
 
:notice||No whois server known for .onion domains
\.onion$
 
#:whois|whois.namecoin.us
:notice||namecoin.us domain gone [Dec 2013]
\.bit$
 
 
# new gTLDs and stuff which was automatically added by the pattern generator tool
# --------------------------------------------------------------------
 
# Delegated on 23 October 2013 to Spring Fields, LLC
# Chinese for "game(s)"
#:whois|whois.donuts.co
:whois|whois.nic.xn--unup4y
\.xn--unup4y$
 
# Delegated on 23 October 2013 to CORE Association
# Russian for "site"
:whois|whois.site.rs.corenic.net
\.xn--80aswg$
 
# Delegated on 23 October 2013 to CORE Association
# Russian for "online"
:whois|whois.online.rs.corenic.net
\.xn--80asehdb$
 
# Delegated on 23 October 2013 to International Domain Registry Pty. Ltd.
# Arabic for "web/network"
:whois|whois.nic.xn--ngbc5azd
\.xn--ngbc5azd$
 
# Delegated on 06 November 2013 to Corn Station, LLC
#:whois|whois.donuts.co
:whois|whois.nic.equipment
\.equipment$
 
# Delegated on 06 November 2013 to John Madison, LLC
#:whois|whois.donuts.co
:whois|whois.nic.holdings
\.holdings$
 
# Delegated on 06 November 2013 to Pioneer Cypress, LLC
#:whois|whois.donuts.co
:whois|whois.nic.guru
\.guru$
 
# Delegated on 06 November 2013 to Ruby House, LLC
#:whois|whois.donuts.co
:whois|whois.nic.voyage
\.voyage$
 
# Delegated on 06 November 2013 to Fern Madison, LLC
#:whois|whois.donuts.co
:whois|whois.nic.singles
\.singles$
 
# Delegated on 06 November 2013 to John McCook, LLC
#:whois|whois.donuts.co
:whois|whois.nic.lighting
\.lighting$
 
# Delegated on 06 November 2013 to Steel Lake, LLC
#:whois|whois.donuts.co
:whois|whois.nic.clothing
\.clothing$
 
# Delegated on 06 November 2013 to Atomic Maple, LLC.
#:whois|whois.donuts.co
:whois|whois.nic.camera
\.camera$
 
# Delegated on 06 November 2013 to Binky Lake, LLC
#:whois|whois.donuts.co
:whois|whois.nic.ventures
\.ventures$
 
# Delegated on 14 November 2013 to Grand Hollow, LLC
#:whois|whois.donuts.co
:whois|whois.nic.bike
\.bike$
 
# Delegated on 14 November 2013 to Pine Moon, LLC
#:whois|whois.donuts.co
:whois|whois.nic.land
\.land$
 
# Delegated on 14 November 2013 to Trixy Park, LLC
#:whois|whois.donuts.co
:whois|whois.nic.estate
\.estate$
 
# Delegated on 14 November 2013 to Auburn Falls
#:whois|whois.donuts.co
:whois|whois.nic.technology
\.technology$
 
# Delegated on 14 November 2013 to Uniregistry, Corp.
:whois|whois.uniregistry.net
\.tattoo$
 
# Delegated on 14 November 2013 to Fox Dynamite, LLC
#:whois|whois.donuts.co
:whois|whois.nic.construction
\.construction$
 
# Delegated on 14 November 2013 to Uniregistry, Corp.
:whois|whois.uniregistry.net
\.sexy$
 
# Delegated on 14 November 2013 to Sugar House, LLC
#:whois|whois.donuts.co
:whois|whois.nic.gallery
\.gallery$
 
# Delegated on 14 November 2013 to Magic Woods, LLC
#:whois|whois.donuts.co
:whois|whois.nic.contractors
\.contractors$
 
# Delegated on 14 November 2013 to Over Madison, LLC
#:whois|whois.donuts.co
:whois|whois.nic.graphics
\.graphics$
 
# Delegated on 14 November 2013 to Spring Tigers, LLC
#:whois|whois.donuts.co
:whois|whois.nic.plumbing
\.plumbing$
 
# Delegated on 19 November 2013 to Pearl Woods, LLC
#:whois|whois.donuts.co
:whois|whois.nic.today
\.today$
 
# Delegated on 19 November 2013 to Just Goodbye, LLC
#:whois|whois.donuts.co
:whois|whois.nic.kitchen
\.kitchen$
 
# Delegated on 19 November 2013 to Snow Oaks, LLC
#:whois|whois.donuts.co
:whois|whois.nic.enterprises
\.enterprises$
 
# Delegated on 19 November 2013 to Extra Madison, LLC
#:whois|whois.donuts.co
:whois|whois.nic.directory
\.directory$
 
# Delegated on 19 November 2013 to Sugar Glen, LLC
#:whois|whois.donuts.co
:whois|whois.nic.photography
\.photography$
 
# Delegated on 19 November 2013 to Corn Willow, LLC
#:whois|whois.donuts.co
:whois|whois.nic.tips
\.tips$
 
# Delegated on 19 November 2013 to John Edge, LLC
#:whois|whois.donuts.co
:whois|whois.nic.diamonds
\.diamonds$
 
# Delegated on 23 November 2013 to Charleston Road Registry, Inc.
# Japanese for "everyone"
:whois|whois.nic.google
#:whois|domain-registry-whois.l.google.com
#:notice||Please visit http://www.google.com/registry/whois.html?q=~query~
#:cgihttps|https://domain-registry.appspot.com/whois/~query~
#:notice||Please visit http://whois.charlestonroadregistry.com
#:whois|whois.charlestonroadregistry.com
\.xn--q9jyb4c$
 
# Delegated on 30 November 2013 to Dot Latin, LLC
#:notice||More information at http://www.unodominio.com
#:cgipost|http://whois.nic.uno/whoismtld/whois/?operation=basicSearch&TLD=UNO&searchText=~query~&TYPE=DOMAIN&Search=1
:whois|whois.nic.uno
\.uno$
 
# Delegated on 30 November 2013 to Wedding TLD2, LLC
:whois|whois.nic.menu
\.menu$
 
# Delegated on 10 December 2013 to Regiodot GmbH & Co. KG
:whois|whois.nic.ruhr
\.ruhr$
 
# Delegated on 17 December 2013 to Tin Mill, LLC
#:whois|whois.donuts.co
:whois|whois.nic.center
\.center$
 
# Delegated on 17 December 2013 to Binky Galley, LLC
#:whois|whois.donuts.co
:whois|whois.nic.shoes
\.shoes$
 
# Delegated on 17 December 2013 to Sea Corner, LLC
#:whois|whois.donuts.co
:whois|whois.nic.photos
\.photos$
 
# Delegated on 17 December 2013 to John Goodbye, LLC
#:whois|whois.donuts.co
:whois|whois.nic.management
\.management$
 
# Delegated on 17 December 2013 to Hidden Frostbite, LLC
#:whois|whois.donuts.co
:whois|whois.nic.limo
\.limo$
 
# Delegated on 17 December 2013 to Delta Dynamite, LLC
#:whois|whois.donuts.co
:whois|whois.nic.camp
\.camp$
 
# Delegated on 17 December 2013 to Silver Avenue, LLC
#:whois|whois.donuts.co
:whois|whois.nic.company
\.company$
 
# Delegated on 17 December 2013 to Black Madison, LLC
#:whois|whois.donuts.co
:whois|whois.nic.viajes
\.viajes$
 
# Delegated on 17 December 2013 to Sugar Cross, LLC
#:whois|whois.donuts.co
:whois|whois.nic.domains
\.domains$
 
# Delegated on 17 December 2013 to Dash Cypress, LLC
#:whois|whois.donuts.co
:whois|whois.nic.systems
\.systems$
 
# Delegated on 17 December 2013 to China Organizational Name Administration Center
# Chinese for "government"
:whois|whois.conac.cn
\.xn--zfr164b$
 
# Delegated on 17 December 2013 to China Organizational Name Administration Center
# Chinese for "charity"
:whois|whois.conac.cn
\.xn--55qw42g$
 
# Delegated on 17 December 2013 to Half Sunset, LLC
#:whois|whois.donuts.co
:whois|whois.nic.cab
\.cab$
 
# Delegated on 17 December 2013 to Wild Corner, LLC
#:whois|whois.donuts.co
:whois|whois.nic.careers
\.careers$
 
# Delegated on 17 December 2013 to Half Oaks, LLC
#:whois|whois.donuts.co
:whois|whois.nic.academy
\.academy$
 
# Delegated on 17 December 2013 to Pine Mill, LLC
#:whois|whois.donuts.co
:whois|whois.nic.computer
\.computer$
 
# Delegated on 17 December 2013 to Grand Island, LLC
#:whois|whois.donuts.co
:whois|whois.nic.recipes
\.recipes$
 
# Delegated on 18 December 2013 to Grand Orchard, LLC
#:whois|whois.donuts.co
:whois|whois.nic.support
\.support$
 
# Delegated on 18 December 2013 to dotStrategy Co.
:whois|whois.nic.buzz
\.buzz$
 
# Delegated on 28 December 2013 to Silver Cover, LLC
#:whois|whois.donuts.co
:whois|whois.nic.solutions
\.solutions$
 
# Delegated on 28 December 2013 to Goose Woods, LLC
#:whois|whois.donuts.co
:whois|whois.nic.holiday
\.holiday$
 
# Delegated on 28 December 2013 to Half Cypress, LLC
#:whois|whois.donuts.co
:whois|whois.nic.florist
\.florist$
 
# Delegated on 28 December 2013 to Trixy Cover, LLC
#:whois|whois.donuts.co
:whois|whois.nic.coffee
\.coffee$
 
# Delegated on 28 December 2013 to Atomic Madison, LLC
#:whois|whois.build.aridnrs.net.au
#:whois|whois.donuts.co
:whois|whois.nic.builders
\.builders$
 
# Delegated on 28 December 2013 to Lone Sunset, LLC
#:whois|whois.donuts.co
:whois|whois.nic.repair
\.repair$
 
# Delegated on 28 December 2013 to United TLD Holdco Ltd.
#:whois|whois.unitedtld.com
:whois|whois.nic.ninja
\.ninja$
 
# Delegated on 28 December 2013 to United TLD Holdco Ltd.
#:whois|whois.unitedtld.com
:whois|whois.nic.kaufen
\.kaufen$
 
# Delegated on 28 December 2013 to Sugar Park, LLC
#:whois|whois.donuts.co
:whois|whois.nic.house
\.house$
 
# Delegated on 28 December 2013 to Wild Willow, LLC
#:whois|whois.donuts.co
:whois|whois.nic.training
\.training$
 
# Delegated on 28 December 2013 to Puff Willow, LLC
#:whois|whois.donuts.co
:whois|whois.nic.codes
\.codes$
 
# Delegated on 28 December 2013 to Wild Way, LLC
#:whois|whois.donuts.co
:whois|whois.nic.international
\.international$
 
# Delegated on 28 December 2013 to I-REGISTRY Ltd. Niederlassung Deutschland
:whois|whois.afilias-srs.net
\.onl$
 
# Delegated on 28 December 2013 to Black Cover, LLC
#:whois|whois.donuts.co
:whois|whois.nic.glass
\.glass$
 
# Delegated on 28 December 2013 to Brice Way, LLC
#:whois|whois.donuts.co
:whois|whois.nic.education
\.education$
 
# Delegated on 28 December 2013 to Just Maple, LLC
#:whois|whois.donuts.co
:whois|whois.nic.farm
\.farm$
 
# Delegated on 28 December 2013 to Ruby Town, LLC
#:whois|whois.donuts.co
:whois|whois.nic.solar
\.solar$
 
# Delegated on 28 December 2013 to CEOTLD Pty Ltd
:whois|whois.nic.ceo
\.ceo$
 
# Delegated on 28 December 2013 to Outer Maple, LLC
#:whois|whois.donuts.co
:whois|whois.nic.institute
\.institute$
 
# Delegated on 2 January 2014 to TLD Registry Limited
# Chinese for "online"
#:whois|whois.afilias-srs.net
:whois|whois.teleinfo.cn
\.xn--3ds443g$
 
# Delegated on 2 January 2014 to United TLD Holdco Ltd.
#:whois|whois.unitedtld.com
:whois|whois.nic.immobilien
\.immobilien$
 
# Delegated on 2 January 2014 to Spring Madison, LLC
#:whois|whois.donuts.co
:whois|whois.nic.email
\.email$
 
# Delegated on 3 January 2014 to punkt.wien GmbH
#:whois|whois.wien.tld-box.at
:whois|whois.nic.wien
\.wien$
 
# Delegated on 3 January 2014 to Dot Kiwi Limited
#:whois|whois.dot-kiwi.com
:whois|whois.nic.kiwi
\.kiwi$
 
# Delegated on 3 January 2014 to Zodiac Leo Limited
:whois|whois.gtld.knet.cn
\.wang$
 
# Delegated on 3 January 2014 to TLD Registry Limited
# Chinese for "Chinese network"
#:whois|whois.afilias-srs.net
:whois|whois.teleinfo.cn
\.xn--fiq228c5hs$
 
# Delegated on 3 January 2014 to Tycoon Treasure Limited
# Chinese for "I love you"
:whois|whois.gtld.knet.cn
\.xn--6qq986b3xl$
 
# Delegated on 3 January 2014 to Eagle Horizon Limited
# Chinese for "group"
:whois|whois.gtld.knet.cn
\.xn--3bst00m$
 
# Delegated on 8 January 2014 to dotBERLIN GmbH & Co. KG
#:whois|whois.berlin.tld-box.at
:whois|whois.nic.berlin
\.berlin$
 
# Delegated on 14 January 2014 to United TLD Holdco Ltd.
#:whois|whois.unitedtld.com
:whois|whois.nic.dance
\.dance$
 
# Delegated on 14 January 2014 to United TLD Holdco Ltd.
#:whois|whois.unitedtld.com
:whois|whois.nic.moda
\.moda$
 
# Delegated on 14 January 2014 to Steel Falls, LLC
#:whois|whois.donuts.co
:whois|whois.nic.agency
\.agency$
 
# Delegated on 14 January 2014 to United TLD Holdco Ltd.
#:whois|whois.unitedtld.com
:whois|whois.nic.social
\.social$
 
# Delegated on 14 January 2014 to United TLD Holdco Ltd.
#:whois|whois.unitedtld.com
:whois|whois.nic.democrat
\.democrat$
 
# Delegated on 14 January 2014 to Fern pass, LLC
#:whois|whois.donuts.co
:whois|whois.nic.marketing
\.marketing$
 
# Delegated on 14 January 2014 to Sand Cover, LLC
#:whois|whois.donuts.co
:whois|whois.nic.cheap
\.cheap$
 
# Delegated on 14 January 2014 to Outer Falls, LLC
#:whois|whois.donuts.co
:whois|whois.nic.zone
\.zone$
 
# Delegated on 18 January 2014 to Uniregistry, Corp.
:whois|whois.uniregistry.net
\.guitars$
 
# Delegated on 18 January 2014 to Uniregistry, Corp.
:whois|whois.uniregistry.net
\.link$
 
# Delegated on 18 January 2014 to CITIC Group Corporation
# Chinese for "CITIC"
:whois|whois.gtld.knet.cn
\.xn--fiq64b$
 
# Delegated on 18 January 2014 to Afilias Limited
:whois|whois.afilias.net
\.shiksha$
 
# Delegated on 18 January 2014 to Afilias Limited
:whois|whois.afilias.net
\.red$
 
# Delegated on 18 January 2014 to I-REGISTRY Ltd. Niederlassung Deutschland
:whois|whois.afilias-srs.net
\.rich$
 
# Delegated on 18 January 2014 to Monash University
#:whois.monash.aridnrs.net.au
:whois|whois.nic.monash
\.monash$
 
# Delegated on 18 January 2014 to Computer Network Information Center of Chinese Academy of Sciences (China Internet Information Center)
# Chinese for "company"
:whois|whois.ngtld.cn
\.xn--55qx5d$
 
# Delegated on 18 January 2014 to Computer Network Information Center of Chinese Academy of Sciences (China Internet Information Center)
# Chinese for "network"
:whois|whois.ngtld.cn
\.xn--io0a7i$
 
# Delegated on 18 January 2014 to Uniregistry, Corp.
:whois|whois.uniregistry.net
\.gift$
 
# Delegated on 18 January 2014 to Uniregistry, Corp.
:whois|whois.uniregistry.net
\.photo$
 
# Delegated on 18 January 2014 to Luxury Partners, LLC
#:whois|whois.luxury.aridnrs.net.au
:whois|whois.nic.luxury
\.luxury$
 
# Delegated on 18 January 2014 to Afilias Limited
:whois|whois.afilias.net
\.pink$
 
# Delegated on 18 January 2014 to Uniregistry, Corp.
:whois|whois.uniregistry.net
\.pics$
 
# Delegated on 18 January 2014 to Plan Bee, LLC
#:whois|whois.build.aridnrs.net.au
:whois|whois.nic.build
\.build$
 
# Delegated on 18 January 2014 to .Club Domains, LLC
:whois|whois.nic.club
\.club$
 
# Delegated on 23 January 2014 to Pioneer North, LLC
#:whois|whois.donuts.co
:whois|whois.nic.tools
\.tools$
 
# Delegated on 23 January 2014 to Koko Lake, LLC
#:whois|whois.donuts.co
:whois|whois.nic.cool
\.cool$
 
# Delegated on 23 January 2014 to Afilias Limited
:whois|whois.afilias.net
\.kim$
 
# Delegated on 23 January 2014 to Sand Shadow, LLC
#:whois|whois.donuts.co
:whois|whois.nic.watch
\.watch$
 
# Delegated on 23 January 2014 to Magic Pass, LLC
#:whois|whois.donuts.co
:whois|whois.nic.expert
\.expert$
 
# Delegated on 23 January 2014 to Atgron, Inc.
#:whois|whois.coccaregistry.org
:whois|whois.nic.wed
\.wed$
 
# Delegated on 23 January 2014 to Little Dynamite, LLC
#:whois|whois.donuts.co
:whois|whois.nic.works
\.works$
 
# Delegated on 23 January 2014 to Victor Manor, LLC
#:whois|whois.donuts.co
:whois|whois.nic.tienda
\.tienda$
 
# Delegated on 23 January 2014 to Half Hallow, LLC
#:whois|whois.donuts.co
:whois|whois.nic.bargains
\.bargains$
 
# Delegated on 23 January 2014 to Over Galley, LLC
#:whois|whois.donuts.co
:whois|whois.nic.boutique
\.boutique$
 
# Delegated on 27 January 2014 to Fox Orchard, LLC
#:whois|whois.donuts.co
:whois|whois.nic.community
\.community$
 
# Delegated on 27 January 2014 to Pine Fest, LLC
#:whois|whois.donuts.co
:whois|whois.nic.dating
\.dating$
 
# Delegated on 29 January 2014 to GMO Registry, Inc.
:whois|whois.nic.nagoya
\.nagoya$
 
# Delegated on 29 January 2014 to GMO Registry, Inc.
:whois|whois.nic.tokyo
\.tokyo$
 
# Delegated on 29 January 2014 to Valuetainment, Corp.
:whois|whois.voting.tld-box.at
\.voting$
 
# Delegated on 4 February 2014 to Victor Beach, LLC
#:whois|whois.donuts.co
:whois|whois.nic.exposed
\.exposed$
 
# Delegated on 4 February 2014 to New Falls, LLC
#:whois|whois.donuts.co
:whois|whois.nic.catering
\.catering$
 
# Delegated on 4 February 2014 to Big Pass, LLC
#:whois|whois.donuts.co
:whois|whois.nic.properties
\.properties$
 
# Delegated on 4 February 2014 to Magic Glen, LLC
#:whois|whois.donuts.co
:whois|whois.nic.partners
\.partners$
 
# Delegated on 4 February 2014 to Big Hollow, LLC
#:whois|whois.nic.rentals
#:whois|whois.donuts.co
:whois|whois.nic.rentals
\.rentals$
 
# Delegated on 4 February 2014 to Spring Way, LLC
#:whois|whois.donuts.co
:whois|whois.nic.cruises
\.cruises$
 
# Delegated on 4 February 2014 to Pioneer Maple, LLC
#:whois|whois.donuts.co
:whois|whois.nic.events
\.events$
 
# Delegated on 4 February 2014 to Binky Glen, LLC
#:whois|whois.donuts.co
:whois|whois.nic.report
\.report$
 
# Delegated on 4 February 2014 to Fox Shadow, LLC
#:whois|whois.donuts.co
:whois|whois.nic.cleaning
\.cleaning$
 
# Delegated on 4 February 2014 to Fox Station, LLC
#:whois|whois.donuts.co
:whois|whois.nic.flights
\.flights$
 
# Delegated on 5 February 2014 to Afilias Limited
:whois|whois.afilias.net
\.blue$
 
# Delegated on 5 February 2014 to Afilias Limited
# Chinese for "mobile"
:whois|whois.afilias.net
\.xn--6frz82g$
 
# Delegated on 11 February 2014 to Victor Frostbite, LLC
#:whois|whois.donuts.co
:whois|whois.nic.maison
\.maison$
 
# Delegated on 11 February 2014 to Magic Birch, LLC
#:whois|whois.donuts.co
:whois|whois.nic.productions
\.productions$
 
# Delegated on 11 February 2014 to Sea Goodbye, LLC
#:whois|whois.donuts.co
:whois|whois.nic.parts
\.parts$
 
# Delegated on 11 February 2014 to Koko Station, LLC
#:whois|whois.donuts.co
:whois|whois.nic.villas
\.villas$
 
# Delegated on 11 February 2014 to Pine House, LLC
#:whois|whois.donuts.co
:whois|whois.nic.condos
\.condos$
 
# Delegated on 11 February 2014 to Koko Station, LLC
#:whois|whois.donuts.co
:whois|whois.nic.vision
\.vision$
 
# Delegated on 11 February 2014 to United TLD Holdco, Ltd.
#:whois|whois.unitedtld.com
:whois|whois.nic.futbol
\.futbol$
 
# Delegated on 11 February 2014 to United TLD Holdco, Ltd.
#:whois|whois.unitedtld.com
:whois|whois.nic.reviews
\.reviews$
 
# Delegated on 11 February 2014 to John Dale, LLC
#:whois|whois.donuts.co
:whois|whois.nic.foundation
\.foundation$
 
# Delegated on 11 February 2014 to Foggy Hollow, LLC
#:whois|whois.donuts.co
:whois|whois.nic.cards
\.cards$
 
# Delegated on 12 February 2014 to dotCOOL, Inc.
:whois|whois.nic.qpon
.qpon$
 
# Delegated on 16 February 2014 to Punto FA S.L.
#:whois|whois.mango.coreregistry.net
#:notice||Whois server gone. You might find more information at http://mango.com
:whois|whois.nic.mango
\.mango$
 
# Delegated on 18 February 2014 to CORE Association
# Arabic for "bazaar/bazar"
#:whois|whois.bazaar.coreregistry.net
:whois|whois.nic.xn--mgbab2bd
\.xn--mgbab2bd$
 
# Delegated on 19 February 2014 to NeuStar, Inc,
:whois|whois.nic.neustar
.neustar$
 
# Delegated on 19 February 2014 to Top Level Design, LLC
#:whois|whois.centralnic.com
:whois|whois.nic.wiki
\.wiki$
 
# Delegated on 19 February 2014 to XYZ.COM, LLC
#:whois|whois.centralnic.com
:whois|whois.nic.xyz
\.xyz$
 
# Delegated on 21 February 2014 to Half Falls, LLC
#:whois|whois.donuts.co
:whois|whois.nic.supply
\.supply$
 
# Delegated on 21 February 2014 to Outer House, LLC
#:whois|whois.donuts.co
:whois|whois.nic.industries
\.industries$
 
# Delegated on 21 February 2014 to Atomic Tigers, LLC
#:whois|whois.donuts.co
:whois|whois.nic.vacations
\.vacations$
 
# Delegated on 21 February 2014 to Samsung SDS Co., LTD
# Korean for "Samsung/Samseong"
:whois|whois.kr
\.xn--cg4bki$
 
# Delegated on 21 February 2014 to Fox Woods, LLC
#:whois|whois.donuts.co
:whois|whois.nic.fish
\.fish$
 
# Delegated on 25 February 2014 to Atomic Fields, LLC
#:whois|whois.donuts.co
:whois|whois.nic.supplies
\.supplies$
 
# Delegated on 26 February 2014 to United TLD Holdco, Ltd.
#:whois|whois.unitedtld.com
:whois|whois.nic.actor
\.actor$
 
# Delegated on 26 February 2014 to The Foundation for Network Initiatives "The Smart Internet"
# Russian for "kids/deti"
#:whois|212.193.111.2
:whois|whois.nic.xn--d1acj3b
\.xn--d1acj3b$
 
# Delegated on 26 February 2014 to United TLD Holdco, Ltd.
#:whois|whois.unitedtld.com
:whois|whois.nic.pub
\.pub$
 
# Delegated on 26 February 2014 to Uniregistry, Corp.
:whois|whois.uniregistry.net
\.christmas$
 
# Delegated on 27 February 2014 to BestTLD Pty Ltd
:whois|whois.nic.best
\.best$
 
# Delegated on 27 February 2014 to KredTLD Pty Ltd
:whois|whois.nic.kred
.kred$
 
# Delegated on 27 February 2014 to Punto 2012 Sociedad Anonima Promotora de Inversion de Capital Variable
#:whois|whois.centralnic.com
:whois|whois.nic.bar
\.bar$
 
# Delegated on 2 March 2014 to Monolith Registry LLC
:whois|whois.afilias.net
\.voto$
 
# Delegated on 2 March 2014 to Monolith Registry LLC
:whois|whois.afilias.net
\.vote$
 
# Delegated on 2 March 2014 to BusinessRalliart Inc.
:whois|whois.nic.okinawa
.okinawa$
 
# Delegated on 2 March 2014 to dot Bid Limited
:whois|whois.nic.bid
\.bid$
 
# Delegated on 5 March 2014 to NetCologne Gesellschaft fuer Telekommunikation mbH
#:whois|whois-fe1.pdt.koeln.tango.knipp.de
:whois|whois.ryce-rsp.com
\.koeln$
 
# Delegated on 5 March 2014 to Public Interest Registry
# Russian for "organization/org"
:whois|whois.publicinterestregistry.net
\.xn--c1avg$
 
# Delegated on 9 March 2014 to Public Interest Registry
# Chinese for "organization"
#:whois|whois.publicinterestregistry.net
:whois|whois.nic.xn--nqv7fs00ema
\.xn--nqv7fs00ema$
 
# Delegated on 9 March 2014 to Public Interest Registry
# Hindi for "organization/sangathana"
:whois|whois.publicinterestregistry.net
\.xn--i1b6b1a6a2e$
 
# Delegated on 9 March 2014 to Public Interest Registry
# Chinese for "agencies/institutions"
:whois|whois.publicinterestregistry.net
\.xn--nqv7f$
 
# Delegated on 12 March 2014 to Stable Tone Limited
# Chinese for "world/shijie"
:whois|whois.nic.xn--rhqv96g
.xn--rhqv96g$
 
# Delegated on 15 March 2014 to New TLD Company
:whois|whois.nic.jetzt
.jetzt$
 
# Delegated on 11 March 2014 to Top Level Design, LLC
#:whois|whois.centralnic.com
:whois|whois.nic.ink
\.ink$
 
# Delegated on 11 March 2014 to Dai Nippon Printing Co., Ltd.
:whois|whois.nic.dnp
.dnp$
 
# Delegated on 19 March 2014 to Elite Registry Limited
:whois|whois.nic.trade
\.trade$
 
# Delegated on 19 March 2014 to dot Webcam Limited
:whois|whois.nic.webcam
\.webcam$
 
# Delegated on 19 March 2014 to AXA SA
:whois|whois.nic.axa
.axa$
 
# Delegated on 19 March 2014 to NetCologne Gesellschaft fuer Telekommunikation mbH
#:whois|whois-fe1.pdt.cologne.tango.knipp.de
:whois|whois.ryce-rsp.com
\.cologne$
 
# Delegated on 20 March 2014 to The City of New York by and through the New York City Department of Information Technology & Telecommunications
:whois|whois.nic.nyc
.nyc$
 
# Delegated on 22 March 2014 to Dot London Domains Limited
#:whois|whois-lon.mm-registry.com
:whois|whois.nic.london
\.london$
 
# Delegated on 25 March 2014 to Sohu.com Limited
:whois|whois.nic.sohu
.sohu$
 
# Delegated on 27 March 2014 to Afilias Limited
#:whois|whois.afilias.net
:whois|whois.nic.google
\.meet$
 
# Delegated on 27 March 2014 to Beijing Qianxiang Wangjing Technology Development Co., Ltd.
:whois|whois.nic.ren
.ren$
 
# Delegated on 27 March 2014 to Afilias Limited
:whois|whois.afilias.net
\.black$
 
# Delegated on 31 March 2014 to Starting Dot Limited
#:whois|whois.ksregistry.net
:whois|whois.afilias.net
\.archi$
 
# Delegated on 31 March 2014 to Top Level Domain Holdings Limited
#:whois|whois-dub.mm-registry.com
:whois|whois.nic.miami
\.miami$
 
# Delegated on 31 March 2014 to Dot Vegas, Inc.
:whois|whois.afilias-srs.net
\.vegas$
 
# Delegated on 31 March 2014 to Top Level Domain Holdings Limited
#:whois|whois-dub.mm-registry.com
:whois|whois.nic.fishing
\.fishing$
 
# Delegated on 31 March 2014 to Top Level Domain Holdings Limited
#:whois|whois-dub.mm-registry.com
:whois|whois.nic.horse
\.horse$
 
# Delegated on 31 March 2014 to Zodiac Capricorn Limited
# Chinese for "mall"
:whois|whois.gtld.knet.cn
\.xn--czru2d$
 
# Delegated on 31 March 2014 to Uniregistry, Corp.
#:whois|whois-dub.mm-registry.com
#:whois|whois.nic.country
:whois|whois.uniregistry.net
\.country$
 
# Delegated on 31 March 2014 to Top Level Domain Holdings Limited
#:whois|whois-dub.mm-registry.com
:whois|whois.nic.rodeo
\.rodeo$
 
# Delegated on 31 March 2014 to Interlink Co., Ltd.
:whois|whois.nic.moe
\.moe$
 
# Delegated on 31 March 2014 to Top Level Domain Holdings Limited
#:whois|whois-dub.mm-registry.com
:whois|whois.nic.cooking
\.cooking$
 
# Delegated on 31 March 2014 to Pixie Edge, LLC
#:whois|whois.unitedtld.com
:whois|whois.nic.haus
\.haus$
 
# Delegated on 31 March 2014 to Top Level Domain Holdings Limited
#:whois|whois-dub.mm-registry.com
:whois|whois.nic.vodka
\.vodka$
 
# Delegated on 31 March 2014 to Pixie Station, LLC
#:whois|whois.unitedtld.com
:whois|whois.nic.consulting
\.consulting$
 
# Delegated on 2 April 2014 to dotSaarland GmbH
#:whois|whois.ksregistry.net
:whois|whois.nic.saarland
\.saarland$
 
# Delegated on 2 April 2014 to Punto 2012 Sociedad Anonima Promotora de Inversion de Capital Variable
#:whois|whois.centralnic.com
:whois|whois.nic.rest
\.rest$
 
# Delegated on 3 April 2014 to GMO Registry, Inc.
:whois|whois.nic.yokohama
\.yokohama$
 
# Delegated on 3 April 2014 to BusinessRalliart Inc.
:whois|whois.nic.ryukyu
\.ryukyu$
 
# Delegated on 4 April 2014 to Republican State Leadership Committee, Inc.
#:whois|whois-cl01.mm-registry.com
:whois|whois.nic.gop
\.gop$
 
# Delegated on 10 April 2014 to Hu Yi Global Information Resources (Holding) Company Hong Kong Limited
# Chinese for "network address"
#:whois|whois.nic.xn--ses554g
:whois|whois.registry.knet.cn
\.xn--ses554g$
 
# Delegated on 10 April 2014 to Ruby Moon, LLC
#:whois|whois.unitedtld.com
:whois|whois.nic.rocks
\.rocks$
 
# Delegated on 10 April 2014 to XYZ.COM, LLC
#:whois|whois.centralnic.com
:whois|whois.nic.college
\.college$
 
# Delegated on 10 April 2014 to Top Level Spectrum, Inc.
#:whois|whois.centralnic.com
:whois|whois.nic.feedback
\.feedback$
 
# Delegated on 10 April 2014 to Desi Networks, LLC
#:whois|whois.ksregistry.net
:whois|whois.nic.desi
\.desi$
 
# Delegated on 11 April 2014 to Delta Mill, LLC
#:whois|whois.donuts.co
:whois|whois.nic.capital
\.capital$
 
# Delegated on 11 April 2014 to Puntueus Fundazioa
#:whois|whois.eus.coreregistry.net
#:notice||Please visit https://whois.eus/
:whois|whois.nic.eus
\.eus$
 
# Delegated on 11 April 2014 to Com Sunset, LLC
#:whois|whois.donuts.co
:whois|whois.nic.gripe
\.gripe$
 
# Delegated on 11 April 2014 to Romeo Canyon
#:whois|whois.donuts.co
:whois|whois.nic.engineering
\.engineering$
 
# Delegated on 11 April 2014 to Fox Castle, LLC
#:whois|whois.donuts.co
:whois|whois.nic.services
\.services$
 
# Delegated on 11 April 2014 to Victor Trail, LLC
#:whois|whois.donuts.co
:whois|whois.nic.lease
\.lease$
 
# Delegated on 11 April 2014 to Pioneer Orchard, LLC
#:whois|whois.donuts.co
:whois|whois.nic.toys
\.toys$
 
# Delegated on 11 April 2014 to Koko Moon, LLC
#:whois|whois.donuts.co
:whois|whois.nic.town
\.town$
 
# Delegated on 11 April 2014 to dotCareer LLC
:whois|whois.nic.career
\.career$
 
# Delegated on 11 April 2014 to Grand Glen, LLC
#:whois|whois.donuts.co
:whois|whois.nic.media
\.media$
 
# Delegated on 11 April 2014 to New Cypress, LLC
#:whois|whois.donuts.co
:whois|whois.nic.reisen
\.reisen$
 
# Delegated on 11 April 2014 to Baxter Hill, LLC
#:whois|whois.donuts.co
:whois|whois.nic.associates
\.associates$
 
# Delegated on 11 April 2014 to Asociación puntoGAL
#:whois|whois.gal.coreregistry.net
#:notice||Whois server is done. You might find more information at http://http://dominio.gal/
:whois|whois.nic.gal
\.gal$
 
# Delegated on 11 April 2014 to Little Station, LLC
#:whois|whois.donuts.co
:whois|whois.nic.university
\.university$
 
# Delegated on 11 April 2014 to Foggy Sky, LLC
#:whois|whois.donuts.co
:whois|whois.nic.pictures
\.pictures$
 
# Delegated on 16 April 2014 to PointQuébec Inc
#:whois|whois.quebec.rs.corenic.net
:whois|whois.nic.quebec
\.quebec$
 
# Delegated on 19 April 2014 to OP3FT
#:whois|whois-frogans.nic.fr
:whois|whois.nic.frogans
\.frogans$
 
# Delegated on 19 April 2014 to City of Paris
:whois|whois-paris.nic.fr
\.paris$
 
# Delegated on 19 April 2014 to Charleston Road Registry
:whois|whois.nic.google
#:whois|domain-registry-whois.l.google.com
#:notice||Please visit http://www.google.com/registry/whois.html?q=~query~
#:cgihttps|https://domain-registry.appspot.com/whois/~query~
#:notice||Please visit http://whois.charlestonroadregistry.com
#:whois|whois.charlestonroadregistry.com
\.soy$
 
# Delegated on 19 April 2014 to Lifestyle Domain Holdings, Inc.
:whois|whois.nic.google
#:whois|domain-registry-whois.l.google.com
#:notice||Please visit http://www.google.com/registry/whois.html?q=~query~
#:cgihttps|https://domain-registry.appspot.com/whois/~query~
#:notice||Please visit http://whois.charlestonroadregistry.com
#:whois|whois.charlestonroadregistry.com
\.foo$
 
# Delegated on 19 April 2014 to Outer Moon, LLC
#:whois|whois.donuts.co
:whois|whois.nic.schule
\.schule$
 
# Delegated on 23 April 2014 to Brice Orchard, LLC
#:whois|whois.donuts.co
:whois|whois.nic.fitness
\.fitness$
 
# Delegated on 23 April 2014 to Goose Park, LLC
#:whois|whois.donuts.co
:whois|whois.nic.clinic
\.clinic$
 
# Delegated on 23 April 2014 to Uniregistry, Corp.
:whois|whois.uniregistry.net
\.blackfriday$
 
# Delegated on 23 April 2014 to Holly Hill, LLC
#:whois|whois.donuts.co
:whois|whois.nic.discount
\.discount$
 
# Delegated on 23 April 2014 to Delta Lake, LLC
#:whois|whois.donuts.co
:whois|whois.nic.cash
\.cash$
 
# Delegated on 23 April 2014 to Goose Cross, LLC
#:whois|whois.donuts.co
:whois|whois.nic.care
\.care$
 
# Delegated on 23 April 2014 to Tin Birch, LLC
#:whois|whois.donuts.co
:whois|whois.nic.dental
\.dental$
 
# Delegated on 23 April 2014 to Lone Fields, LLC
#:whois|whois.donuts.co
:whois|whois.nic.furniture
\.furniture$
 
# Delegated on 23 April 2014 to Pioneer Tigers, LLC
#:whois|whois.donuts.co
:whois|whois.nic.gratis
\.gratis$
 
# Delegated on 23 April 2014 to Just Cover, LLC
#:whois|whois.donuts.co
:whois|whois.nic.financial
\.financial$
 
# Delegated on 23 April 2014 to Holly Glen, LLC
#:whois|whois.donuts.co
:whois|whois.nic.investments
\.investments$
 
# Delegated on 23 April 2014 to Tin Avenue, LLC
#:whois|whois.donuts.co
:whois|whois.nic.surgery
\.surgery$
 
# Delegated on 23 April 2014 to John Castle, LLC
#:whois|whois.donuts.co
:whois|whois.nic.fund
\.fund$
 
# Delegated on 23 April 2014 to Hidden Way, LLC
#:whois|whois.donuts.co
:whois|whois.nic.wtf
\.wtf$
 
# Delegated on 23 April 2014 to Storm Orchard, LLC
#:whois|whois.donuts.co
:whois|whois.nic.tax
\.tax$
 
# Delegated on 23 April 2014 to Spring Falls, LLC
#:whois|whois.donuts.co
:whois|whois.nic.exchange
\.exchange$
 
# Delegated on 23 April 2014 to Atomic Pipe, LLC
#:whois|whois.donuts.co
:whois|whois.nic.fail
\.fail$
 
# Delegated on 23 April 2014 to Big Fest, LLC
#:whois|whois.donuts.co
:whois|whois.nic.limited
\.limited$
 
# Delegated on 24 April 2014 to Foundation for Assistance for Internet Technologies and Infrastructure Development (FAITID)
:whois|whois.nic.moscow
\.moscow$
 
# Delegated on 24 April 2014 to Foundation for Assistance for Internet Technologies and Infrastructure Development (FAITID)
# Russian for "Moscow/ moskva"
:whois|whois.nic.xn--80adxhks
\.xn--80adxhks$
 
# Delegated on 29 April 2014 to CITIC Group Corporation
:whois|whois.nic.citic
.citic$
 
# Delegated on 29 April 2014 to World Trade Centers Association, Inc.
:whois|whois.nic.wtc
\.wtc$
 
# Delegated on 29 April 2014 to Cotton Cypress, LLC
#:whois|whois.donuts.co
:whois|whois.nic.finance
\.finance$
 
# Delegated on 29 April 2014 to Pioneer Willow, LLC
#:whois|whois.donuts.co
:whois|whois.nic.insure
\.insure$
 
# Delegated on 29 April 2014 to Binky Frostbite, LLC
#:whois|whois.donuts.co
:whois|whois.nic.creditcard
\.creditcard$
 
# Delegated on 30 April 2014 to United TLD Holdco Ltd.
#:whois|whois.unitedtld.com
:whois|whois.nic.airforce
\.airforce$
 
# Delegated on 3 May 2014 to Bayern Connect GmbH
#:whois|whois-dub.mm-registry.com
:whois|whois.nic.bayern
\.bayern$
 
# Delegated on 3 May 2014 to Globo Comunicação e Participações S.A
:whois|whois.gtlds.nic.br
\.globo$
 
# Delegated on 3 May 2014 to GMO Internet, Inc.
:whois|whois.nic.gmo
\.gmo$
 
# Delegated on 15 May 2014 to Top Level Domain Holdings Limited
#:whois|whois-dub.mm-registry.com
:whois|whois.nic.luxe
\.luxe$
 
# Delegated on 15 May 2014 to Uniregistry, Corp.
:whois|whois.uniregistry.net
\.juegos$
 
# Delegated on 15 May 2014 to Top Level Domain Holdings Limited
#:whois|whois-dub.mm-registry.com
:whois|whois.nic.beer
\.beer$
 
# Delegated on 15 May 2014 to Trixy Oaks, LLC
#:whois|whois.donuts.co
:whois|whois.nic.life
\.life$
 
# Delegated on 15 May 2014 to Holly Fileds, LLC
#:whois|whois.donuts.co
:whois|whois.nic.church
\.church$
 
# Delegated on 15 May 2014 to June Woods, LLC
#:whois|whois.donuts.co
:whois|whois.nic.loans
\.loans$
 
# Delegated on 15 May 2014 to Uniregistry, Corp.
:whois|whois.uniregistry.net
\.hiphop$
 
# Delegated on 15 May 2014 to Uniregistry, Corp.
:whois|whois.uniregistry.net
\.audio$
 
# Delegated on 15 May 2014 to Snow Moon, LLC
#:whois|whois.donuts.co
:whois|whois.nic.guide
\.guide$
 
# Delegated on 7 May 2014 to Black Corner, LLC
#:whois|whois.donuts.co
:whois|whois.nic.claims
\.claims$
 
# Delegated on 7 May 2014 to Dash Park, LLC
#:whois|whois.donuts.co
:whois|whois.nic.digital
\.digital$
 
# Delegated on 7 May 2014 to Knob Town, LLC
#:whois|whois.donuts.co
:whois|whois.nic.accountants
\.accountants$
 
# Delegated on 7 May 2014 to Snow Shadow, LLC
#:whois|whois.donuts.co
:whois|whois.nic.credit
\.credit$
 
# Delegated on 22 May 2014 to Hu Yi Global Information Resources (Holding) Company .HONGKONG Limited
# Chinese for "trademark"
:whois|whois.nic.xn--czr694b
\.xn--czr694b$
 
# Delegated on 22 May 2014 to DERMotorcycles, LLC
:whois|whois.afilias-srs.net
\.motorcycles$
 
# Delegated on 22 May 2014 to dotreise GmbH
# :whois|whois.reise.tld-box.at
:whois|whois.nic.reise
\.reise$
 
# Delegated on 22 May 2014 to dotversicherung-registry GmbH
# :whois|whois.versicherung.tld-box.at
:whois|whois.nic.versicherung
\.versicherung$
 
# Delegated on 22 May 2014 to DERAutos, LLC
:whois|whois.afilias-srs.net
\.autos$
 
# Delegated on 22 May 2014 to DERHomes, LLC
:whois|whois.afilias-srs.net
\.homes$
 
# Delegated on 22 May 2014 to Empresa Municipal de Informática SA - IPLANRIO
:whois|whois.gtlds.nic.br
\.rio$
 
# Delegated on 22 May 2014 to DERYachts, LLC
:whois|whois.afilias-srs.net
\.yachts$
 
# Delegated on 28 May 2014 to Suhub Electronic Establishment
# Arabic for "site"
:whois|whois.afilias-srs.net
\.xn--4gbrim$
 
# Delegated on 30 May 2014 to DotWebsite Inc.
# :whois|whois.centralnic.com
:whois|whois.nic.website
\.website$
 
# Delegated on 30 May 2014 to DotSpace Inc.
# :whois|whois.centralnic.com
:whois|whois.nic.space
\.space$
 
# Delegated on 30 May 2014 to Puff House, LLC
#:whois|whois.rightside.co
:whois|whois.nic.degree
\.degree$
 
# Delegated on 31 May 2014 to DotPress Inc.
#:whois|whois.centralnic.com
:whois|whois.nic.press
\.press$
 
# Delegated on 31 May 2014 to United TLD Holdco, Ltd.
#:whois|whois.rightside.co
:whois|whois.nic.attorney
\.attorney$
 
# Delegated on 31 May 2014 to dotHIV gemeinnuetziger e.V.
#:whois|whois.afilias-srs.net
:whois|whois.uniregistry.net
\.hiv$
 
# Delegated on 31 May 2014 to United TLD Holdco, Ltd.
#:whois|whois.rightside.co
:whois|whois.nic.dentist
\.dentist$
 
# Delegated on 31 May 2014 to Victor Way, LLC
#:whois|whois.rightside.co
:whois|whois.nic.market
\.market$
 
# Delegated on 31 May 2014 to DotHost Inc.
:whois|whois.nic.host
\.host$
 
# Delegated on 31 May 2014 to United TLD Holdco, Ltd.
#:whois|whois.rightside.co
:whois|whois.nic.software
\.software$
 
# Delegated on 31 May 2014 to United TLD Holdco, Ltd.
#:whois|whois.rightside.co
:whois|whois.nic.mortgage
\.mortgage$
 
# Delegated on 31 May 2014 to United TLD Holdco, Ltd.
#:whois|whois.rightside.co
:whois|whois.nic.vet
\.vet$
 
# Delegated on 31 May 2014 to United TLD Holdco, Ltd.
#:whois|whois.rightside.co
:whois|whois.nic.lawyer
\.lawyer$
 
# Delegated on 2 June 2014 to STARTING DOT LIMITED
#:whois|whois.ksregistry.net
:whois|whois.afilias.net
\.bio$
 
# Delegated on 4 June 2014
#:whois|whois.rightside.co
:whois|whois.nic.army
\.army$
 
# Delegated on 4 June 2014
#:whois|whois.rightside.co
:whois|whois.nic.navy
\.navy$
 
# Delegated on 4 June 2014
#:whois|whois.rightside.co
:whois|whois.nic.gives
\.gives$
 
# Delegated on 4 June 2014
#:whois|whois.rightside.co
:whois|whois.nic.republican
\.republican$
 
# Delegated on 4 June 2014
:whois|whois.nic.tirol
\.tirol$
 
# Delegated on 4 June 2014
#:whois|whois.rightside.co
:whois|whois.nic.rehab
\.rehab$
 
# Delegated on 4 June 2014
:whois|whois.nic.hamburg
\.hamburg$
 
# Delegated on 4 June 2014
:whois|whois.nic.nhk
\.nhk$
 
# Delegated on 4 June 2014
#:whois|whois.rightside.co
:whois|whois.nic.engineer
\.engineer$
 
# Delegated on 6 June 2014
#:whois|whois.afilias-srs.net
:whois|whois.nic.global
\.global$
 
# Delegated on 13 June 2014
:whois|whois.afilias.net
\.organic$
 
# Delegated on 13 June 2014
#:whois|whois.scot.coreregistry.net
#:notice||Please visit http://whois.nic.scot/
:whois|whois.nic.scot
\.scot$
 
# Delegated on 17 June 2014
#:whois|whois-bzh.nic.fr
:whois|whois.nic.bzh
\.bzh$
 
# Delegated on 17 June 2014
# Chinese for "cell phone"
#:whois|whois.afilias-srs.net
:whois|whois.nic.xn--kput3i
\.xn--kput3i$
 
# Delegated on 18 June 2014
#:whois|whois-dub.mm-registry.com
:whois|whois.nic.surf
\.surf$
 
# Delegated on 18 June 2014
:whois|whois.nic.brussels
\.brussels$
 
# Delegated on 18 June 2014
:whois|whois.nic.vlaanderen
\.vlaanderen$
 
# Delegated on 19 June 2014
:whois|joburg-whois.registry.net.za
\.joburg$
 
# Delegated on 19 June 2014
:whois|whois.afilias.net
\.green$
 
# Delegated on 19 June 2014
:whois|durban-whois.registry.net.za
\.durban$
 
# Delegated on 19 June 2014
:whois|whois.afilias.net
\.lotto$
 
# Delegated on 19 June 2014
:whois|whois.nic.physio
\.physio$
 
# Delegated on 19 June 2014
:whois|capetown-whois.registry.net.za
\.capetown$
 
# Delegated on 19 June 2014
:whois|whois-ovh.nic.fr
\.ovh$
 
# Delegated on 21 June 2014
#:whois|whois.ksregistry.net
:whois|whois.nic.bmw
\.bmw$
 
# Delegated on 24 June 2014
#:whois|whois.ksregistry.net
:whois|whois.nic.mini
\.mini$
 
:notice||Disallocated by IANA
\.active$
 
# Delegated on 2 July 2014
:whois|whois.nic.suzuki
\.suzuki$
 
# Delegated on 2 July 2014
#:whois|whois.donuts.co
:whois|whois.nic.place
\.place$
 
# Delegated on 2 July 2014
#:whois|whois.donuts.co
:whois|whois.nic.direct
\.direct$
 
# Delegated on 3 July 2014
:whois|whois.nic.cancerresearch
\.cancerresearch$
 
# Delegated on 3 July 2014
:whois|whois.nic.cuisinella
\.cuisinella$
 
# Delegated on 3 July 2014
:whois|whois.nic.schmidt
\.schmidt$
 
# Delegated on 10 July 2014
#:whois|whois.donuts.co
:whois|whois.nic.city
\.city$
 
# Delegated on 10 July 2014
# Alternative URL: https://nic.melbourne/whois/ (requires CAPTCHA)
#:whois|whois.aridnrs.net.au
:whois|whois.nic.melbourne
\.melbourne$
 
# Delegated on 10 July 2014
#:whois|whois.donuts.co
:whois|whois.nic.deals
\.deals$
 
# Delegated on 11 July 2014
:whois|whois.nic.scb
\.scb$
 
# Delegated on 11 July 2014
:whois|whois.nic.nrw
\.nrw$
 
# Delegated on 13 July 2014
:whois|whois.nic.gent
\.gent$
 
# Delegated on 18 July 2014
:whois|whois.afilias.net
\.lgbt$
 
# Delegated on 18 July 2014
:whois|whois.nic.lacaixa
\.lacaixa$
 
# Delegated on 18 July 2014
:notice||Disallocated by IANA
\.spiegel$
 
# Delegated on 18 July 2014
:whois|whois.afilias-srs.net
\.nra$
 
# Delegated on 18 July 2014
:whois|whois.publicinterestregistry.net
\.ngo$
 
# Delegated on 18 July 2014
# Alternative URL: http://nic.krd/
#:whois|whois.aridnrs.net.au
:whois|whois.nic.krd
\.krd$
 
# Delegated on 18 July 2014
:whois|whois.nic.whoswho
\.whoswho$
 
# Delegated on 18 July 2014
#:whois|whois.donuts.co
#:whois|whois.unitedtld.com
:whois|whois.nic.auction
\.auction$
 
# Delegated on 18 July 2014
:whois|whois.nic.yandex
\.yandex$
 
# Delegated on 18 July 2014
:whois|whois.nic.praxi
\.praxi$
 
# Delegated on 28 July 2014
:whois|whois.publicinterestregistry.net
\.ong$
 
# Delegated on 28 July 2014
:whois|whois.nic.williamhill
\.williamhill$
 
# Delegated on 30 July 2014
:whois|whois.nic.realtor
\.realtor$
 
# Delegated on 30 July 2014
#:whois|whois.donuts.co
:whois|whois.nic.healthcare
\.healthcare$
 
# Delegated on 3 August 2014
:whois|whois.nic.top
\.top$
 
# Delegated on 7 August 2014
:whois|whois.nic.tatar
\.tatar$
 
# Delegated on 7 August 2014
:whois|whois.nic.wales
\.wales$
 
# Delegated on 8 August 2014
#:whois|whois.donuts.co
:whois|whois.nic.gifts
\.gifts$
 
# Delegated on 8 August 2014
#:whois|whois.donuts.co
:whois|whois.nic.sarl
\.sarl$
 
# Delegated on 8 August 2014
:whois|whois.nic.cymru
\.cymru$
 
# Delegated on 8 August 2014
#:whois|whois.donuts.co
:whois|whois.nic.restaurant
\.restaurant$
 
# Delegated on 14 August 2014
:whois|whois.afilias-srs.net
\.bnpparibas$
 
# Delegated on 14 August 2014
# Chinese city of "Foshan"
:whois|whois.ngtld.cn
\.xn--1qqw23a$
 
# Delegated on 14 August 2014
# Chinese province of "Guangdong"
:whois|whois.ngtld.cn
\.xn--xhq521b$
 
# Delegated on 14 August 2014
:whois|whois.nic.sca
\.sca$
 
# Delegated on 14 August 2014
:whois|whois.nic.caravan
\.caravan$
 
# Delegated on 16 August 2014
:whois|whois.afilias-srs.net
\.cern$
 
# Delegated on 16 August 2014
:whois|whois.afilias-srs.net
\.ltda$
 
# Delegated on 16 August 2014
:whois|whois.uniregistry.net
\.property$
 
# Delegated on 16 August 2014
:whois|whois.uniregistry.net
\.hosting$
 
# Delegated on 16 August 2014
:whois|whois.uniregistry.net
\.help$
 
# Delegated on 16 August 2014
:whois|whois.gtlds.nic.br
\.uol$
 
# Delegated on 16 August 2014
:whois|whois.nic.ooo
\.ooo$
 
# Delegated on 16 August 2014
:whois|whois.nic.google
#:whois|domain-registry-whois.l.google.com
#:notice||Please visit http://www.google.com/registry/whois.html?q=~query~
#:cgihttps|https://domain-registry.appspot.com/whois/~query~
#:notice||Please visit http://whois.charlestonroadregistry.com
#:whois|whois.charlestonroadregistry.com
\.how$
 
# Delegated on 16 August 2014
:whois|whois.uniregistry.net
\.diet$
 
# Delegated on 16 August 2014
:whois|whois.uniregistry.net
\.click$
 
# Delegated on 22 August 2014
#:whois|whois.donuts.co
:whois|whois.nic.network
\.network$
 
# Delegated on 22 August 2014
# chinese for ?enterprise?
#:whois|whois.donuts.co
:whois|whois.nic.xn--vhquv
\.xn--vhquv$
 
# Delegated on 22 August 2014
#:whois|whois.donuts.co
:whois|whois.nic.business
\.business$
 
# Delegated on 27 August 2014
:whois|whois.nic.otsuka
\.otsuka$
 
# Delegated on 27 August 2014
:whois|whois.nic.google
#:whois|domain-registry-whois.l.google.com
#:notice||Please visit http://www.google.com/registry/whois.html?q=~query~
#:cgihttps|https://domain-registry.appspot.com/whois/~query~
#:notice||Please visit http://whois.charlestonroadregistry.com
#:whois|whois.charlestonroadregistry.com
\.gbiz$
 
# Delegated on 27 August 2014
:whois|whois.nic.google
#:whois|domain-registry-whois.l.google.com
#:notice||Please visit http://www.google.com/registry/whois.html?q=~query~
#:cgihttps|https://domain-registry.appspot.com/whois/~query~
#:notice||Please visit http://whois.charlestonroadregistry.com
#:whois|whois.charlestonroadregistry.com
\.gmail$
 
# Delegated on 27 August 2014
#:whois|whois.donuts.co
:whois|whois.nic.pizza
\.pizza$
 
# Delegated on 27 August 2014
#:whois|whois.donuts.co
:whois|whois.nic.immo
\.immo$
 
# Delegated on 29 August 2014
:whois|whois.nic.google
#:whois|domain-registry-whois.l.google.com
#:notice||Please visit http://www.google.com/registry/whois.html?q=~query~
#:cgihttps|https://domain-registry.appspot.com/whois/~query~
#:notice||Please visit http://whois.charlestonroadregistry.com
#:whois|whois.charlestonroadregistry.com
\.esq$
 
# Delegated on 29 August 2014
:whois|whois.nic.google
#:whois|domain-registry-whois.l.google.com
#:notice||Please visit http://www.google.com/registry/whois.html?q=~query~
#:cgihttps|https://domain-registry.appspot.com/whois/~query~
#:notice||Please visit http://whois.charlestonroadregistry.com
#:whois|whois.charlestonroadregistry.com
\.prod$
 
# Delegated on 29 August 2014
:whois|whois.nic.google
#:whois|domain-registry-whois.l.google.com
#:notice||Please visit http://www.google.com/registry/whois.html?q=~query~
#:cgihttps|https://domain-registry.appspot.com/whois/~query~
#:notice||Please visit http://whois.charlestonroadregistry.com
#:whois|whois.charlestonroadregistry.com
\.here$
 
# Delegated on 29 August 2014
:whois|whois.nic.google
#:whois|domain-registry-whois.l.google.com
#:notice||Please visit http://www.google.com/registry/whois.html?q=~query~
#:cgihttps|https://domain-registry.appspot.com/whois/~query~
#:notice||Please visit http://whois.charlestonroadregistry.com
#:whois|whois.charlestonroadregistry.com
\.youtube$
 
# Delegated on 30 August 2014
:whois|whois.nic.google
#:whois|domain-registry-whois.l.google.com
#:notice||Please visit http://www.google.com/registry/whois.html?q=~query~
#:cgihttps|https://domain-registry.appspot.com/whois/~query~
#:notice||Please visit http://whois.charlestonroadregistry.com
#:whois|whois.charlestonroadregistry.com
\.meme$
 
# Delegated on 30 August 2014
:whois|whois.nic.google
#:whois|domain-registry-whois.l.google.com
#:notice||Please visit http://www.google.com/registry/whois.html?q=~query~
#:cgihttps|https://domain-registry.appspot.com/whois/~query~
#:notice||Please visit http://whois.charlestonroadregistry.com
#:whois|whois.charlestonroadregistry.com
\.eat$
 
# Delegated on 30 August 2014
:whois|whois.nic.google
#:whois|domain-registry-whois.l.google.com
#:notice||Please visit http://www.google.com/registry/whois.html?q=~query~
#:cgihttps|https://domain-registry.appspot.com/whois/~query~
#:notice||Please visit http://whois.charlestonroadregistry.com
#:whois|whois.charlestonroadregistry.com
\.rsvp$
 
# Delegated on 30 August 2014
:whois|whois.nic.google
#:whois|domain-registry-whois.l.google.com
#:notice||Please visit http://www.google.com/registry/whois.html?q=~query~
#:cgihttps|https://domain-registry.appspot.com/whois/~query~
#:notice||Please visit http://whois.charlestonroadregistry.com
#:whois|whois.charlestonroadregistry.com
\.mov$
 
# Delegated on 30 August 2014
:whois|whois.nic.google
#:whois|domain-registry-whois.l.google.com
#:notice||Please visit http://www.google.com/registry/whois.html?q=~query~
#:cgihttps|https://domain-registry.appspot.com/whois/~query~
#:notice||Please visit http://whois.charlestonroadregistry.com
#:whois|whois.charlestonroadregistry.com
\.new$
 
# Delegated on 30 August 2014
:whois|whois.nic.google
#:whois|domain-registry-whois.l.google.com
#:notice||Please visit http://www.google.com/registry/whois.html?q=~query~
#:cgihttps|https://domain-registry.appspot.com/whois/~query~
#:notice||Please visit http://whois.charlestonroadregistry.com
#:whois|whois.charlestonroadregistry.com
\.ing$
 
# Delegated on 30 August 2014
:whois|whois.nic.frl
\.frl$
 
# Delegated on 30 August 2014
:whois|whois.nic.google
#:whois|domain-registry-whois.l.google.com
#:notice||Please visit http://www.google.com/registry/whois.html?q=~query~
#:cgihttps|https://domain-registry.appspot.com/whois/~query~
#:notice||Please visit http://whois.charlestonroadregistry.com
#:whois|whois.charlestonroadregistry.com
\.day$
 
# Delegated on 30 August 2014
:whois|whois.nic.google
#:whois|domain-registry-whois.l.google.com
#:notice||Please visit http://www.google.com/registry/whois.html?q=~query~
#:cgihttps|https://domain-registry.appspot.com/whois/~query~
#:notice||Please visit http://whois.charlestonroadregistry.com
#:whois|whois.charlestonroadregistry.com
\.dad$
 
# Delegated on 30 August 2014
:whois|whois.nic.google
#:whois|domain-registry-whois.l.google.com
#:notice||Please visit http://www.google.com/registry/whois.html?q=~query~
#:cgihttps|https://domain-registry.appspot.com/whois/~query~
#:notice||Please visit http://whois.charlestonroadregistry.com
#:whois|whois.charlestonroadregistry.com
\.boo$
 
# Delegated on 5 September 2014
:whois|whois-fe1.gmx.tango.knipp.de
\.gmx$
 
# Delegated on 5 September 2014
:whois|whois.nic.pharmacy
\.pharmacy$
 
# Delegated on 10 September 2014
#:whois|whois.centralnic.com
:whois|whois.nic.wme
\.wme$
 
# Delegated on 15 September 2014
:whois|whois.nic.google
#:whois|domain-registry-whois.l.google.com
#:notice||Please visit http://www.google.com/registry/whois.html?q=~query~
#:cgihttps|https://domain-registry.appspot.com/whois/~query~
#:notice||Please visit http://whois.charlestonroadregistry.com
#:whois|whois.charlestonroadregistry.com
\.chrome$
 
# Delegated on 15 September 2014
:whois|whois.nic.google
#:whois|domain-registry-whois.l.google.com
#:notice||Please visit http://www.google.com/registry/whois.html?q=~query~
#:cgihttps|https://domain-registry.appspot.com/whois/~query~
#:notice||Please visit http://whois.charlestonroadregistry.com
#:whois|whois.charlestonroadregistry.com
\.cal$
 
# Delegated on 15 September 2014
:whois|whois.nic.google
#:whois|domain-registry-whois.l.google.com
#:notice||Please visit http://www.google.com/registry/whois.html?q=~query~
#:cgihttps|https://domain-registry.appspot.com/whois/~query~
#:notice||Please visit http://whois.charlestonroadregistry.com
#:whois|whois.charlestonroadregistry.com
\.zip$
 
# Delegated on 15 September 2014
:whois|whois.nic.google
#:whois|domain-registry-whois.l.google.com
#:notice||Please visit http://www.google.com/registry/whois.html?q=~query~
#:cgihttps|https://domain-registry.appspot.com/whois/~query~
#:notice||Please visit http://whois.charlestonroadregistry.com
#:whois|whois.charlestonroadregistry.com
\.gle$
 
# Delegated on 15 September 2014
:whois|whois.nic.google
#:whois|domain-registry-whois.l.google.com
#:notice||Please visit http://www.google.com/registry/whois.html?q=~query~
#:cgihttps|https://domain-registry.appspot.com/whois/~query~
#:notice||Please visit http://whois.charlestonroadregistry.com
#:whois|whois.charlestonroadregistry.com
\.prof$
 
# Delegated on 15 September 2014
:whois|whois.nic.google
#:whois|domain-registry-whois.l.google.com
#:notice||Please visit http://www.google.com/registry/whois.html?q=~query~
#:cgihttps|https://domain-registry.appspot.com/whois/~query~
#:notice||Please visit http://whois.charlestonroadregistry.com
#:whois|whois.charlestonroadregistry.com
\.channel$
 
# Delegated on 15 September 2014
:whois|whois.nic.google
#:whois|domain-registry-whois.l.google.com
#:notice||Please visit http://www.google.com/registry/whois.html?q=~query~
#:cgihttps|https://domain-registry.appspot.com/whois/~query~
#:notice||Please visit http://whois.charlestonroadregistry.com
#:whois|whois.charlestonroadregistry.com
\.nexus$
 
# Delegated on 15 September 2014
:whois|whois.nic.google
#:whois|domain-registry-whois.l.google.com
#:notice||Please visit http://www.google.com/registry/whois.html?q=~query~
#:cgihttps|https://domain-registry.appspot.com/whois/~query~
#:notice||Please visit http://whois.charlestonroadregistry.com
#:whois|whois.charlestonroadregistry.com
\.fly$
 
# Delegated on 19 September 2014
#:whois|whois.donuts.co
:whois|whois.nic.world
\.world$
 
# Delegated on 23 September 2014
#:whois|whois-dub.mm-registry.com
:whois|whois.nic.budapest
\.budapest$
 
# Delegated on 23 September 2014
#:whois|whois-dub.mm-registry.com
:whois|whois.nic.casa
\.casa$
 
# Delegated on 23 September 2014
#:whois|whois-dub.mm-registry.com
:whois|whois.nic.work
\.work$
 
# Delegated on 27 September 2014
#:whois|whois.ksregistry.net
:whois|whois.nic.pohl
\.pohl$
 
# Delegated on 27 September 2014
#:whois|whois.ksregistry.net
:whois|whois.nic.dvag
\.dvag$
 
# Delegated on 27 September 2014
#:whois|whois.ksregistry.net
:whois|whois.nic.tui
\.tui$
 
# Delegated on 27 September 2014
# Russian for "Russian"
:whois|whois.nic.xn--p1acf
\.xn--p1acf$
 
# Delegated on 27 September 2014
# German for "financial advisor"
#:whois|whois.ksregistry.net
:whois|whois.nic.xn--vermgensberater-ctb
\.xn--vermgensberater-ctb$
 
# Delegated on 27 September 2014
# German for "financial advice"
#:whois|whois.ksregistry.net
:whois|whois.nic.xn--vermgensberatung-pwb
\.xn--vermgensberatung-pwb$
 
# Delegated on 1 October 2014
#:whois|whois.unitedtld.com
:whois|whois.nic.forsale
\.forsale$
 
# Delegated on 1 October 2014
:whois|whois.nic.ibm
\.ibm$
 
# Delegated on 1 October 2014
#:whois|whois.ksregistry.net
:whois|whois.nic.allfinanz
\.allfinanz$
 
# Delegated on 4 October 2014
:whois|whois-alsace.nic.fr
\.alsace$
 
# Delegated on 15 September 2014
:whois|whois.nic.google
#:whois|domain-registry-whois.l.google.com
#:notice||Please visit http://www.google.com/registry/whois.html?q=~query~
#:cgihttps|https://domain-registry.appspot.com/whois/~query~
#:notice||Please visit http://whois.charlestonroadregistry.com
#:whois|whois.charlestonroadregistry.com
\.google$
 
# Delegated on 15 October 2014
:whois|whois.afilias.net
\.poker$
 
# Delegated on 15 October 2014
#:whois|whois-dub.mm-registry.com
:whois|whois.nic.wedding
\.wedding$
 
# Delegated on 15 October 2014
#:whois|whois.rightside.co
:whois|whois.nic.rip
\.rip$
 
# Delegated on 15 October 2014
#:whois|whois-dub.mm-registry.com
:whois|whois.nic.abogado
\.abogado$
 
# Delegated on 15 October 2014
:whois|whois.nic.crs
\.crs$
 
# Delegated on 15 October 2014
#:whois|whois-dub.mm-registry.com
:whois|whois.nic.yoga
\.yoga$
 
# Delegated on 15 October 2014
#:whois|whois.rightside.co
:whois|whois.nic.band
\.band$
 
# Delegated on 22 October 2014
:whois|whois.afilias-srs.net
\.emerck$
 
:notice||Disallocated by IANA
\.flsmidth$
 
# Delegated on 23 October 2014
:whois|whois.nic.taipei
\.taipei$
 
# Not listed in public newGTLD listing
# TODO: check if it returns (incl. the description what it means)
:whois|whois.itdc.ge
\.xn--node$
 
# Not listed in public newGTLD listing
# TODO: check if it returns (incl. the description what it means)
:whois|whois.marnet.mk
\.xn--d1alf$
 
# Delegated on 1 November 2014
#:whois|whois.donuts.co
:whois|whois.nic.delivery
\.delivery$
 
# Delegated on 1 November 2014
#:whois|whois.donuts.co
:whois|whois.nic.energy
\.energy$
 
# Delegated on 5 November 2014
:whois|whois.nic.bloomberg
\.bloomberg$
 
# Delegated on 5 November 2014
:whois|whois.nic.sydney
\.sydney$
 
:whois|whois.nic.google
#:whois|domain-registry-whois.l.google.com
#:notice||Please visit http://www.google.com/registry/whois.html?q=~query~
#:cgihttps|https://domain-registry.appspot.com/whois/~query~
#:notice||Please visit http://whois.charlestonroadregistry.com
#:whois|whois.charlestonroadregistry.com
\.android$
 
:whois|whois.nic.reit
#:whois|whois.centralnic.com
\.reit$
 
:whois|whois.nic.science
\.science$
 
:whois|whois.nic.cricket
\.cricket$
 
:whois|whois.nic.party
\.party$
 
:whois|whois.nic.xn--45q11c
\.xn--45q11c$
 
:whois|whois.nic.firmdale
\.firmdale$
 
#:whois|whois.afilias-srs.net
:whois|whois.nic.lds
\.lds$
 
:whois|whois.madrid.rs.corenic.net
\.madrid$
 
#:whois|whois.afilias-srs.net
:whois|whois.nic.mormon
\.mormon$
 
:whois|domain-registry-whois.l.google.com
#:notice||Please visit http://www.google.com/registry/whois.html?q=~query~
#:cgihttps|https://domain-registry.appspot.com/whois/~query~
#:notice||Please visit http://whois.charlestonroadregistry.com
#:whois|whois.charlestonroadregistry.com
\.xn--flw351e$
 
:whois|whois.nic.google
#:whois|domain-registry-whois.l.google.com
#:notice||Please visit http://www.google.com/registry/whois.html?q=~query~
#:cgihttps|https://domain-registry.appspot.com/whois/~query~
#:notice||Please visit http://whois.charlestonroadregistry.com
#:whois|whois.charlestonroadregistry.com
\.xn--qcka1pmc$
 
#:whois|whois.donuts.co
:whois|whois.nic.coach
\.coach$
 
:whois|whois.nic.everbank
\.everbank$
 
#:whois|whois.donuts.co
:whois|whois.nic.legal
\.legal$
 
#:whois|whois.donuts.co
:whois|whois.nic.memorial
\.memorial$
 
#:whois|whois.donuts.co
:whois|whois.nic.money
\.money$
 
:whois|whois-aquarelle.nic.fr
\.aquarelle$
 
#:whois|whois.afilias-srs.net
#:whois|whois.donuts.co
:whois|whois.nic.irish
\.irish$
 
:whois|whois.nic.latrobe
\.latrobe$
 
:whois|whois.nic.xn--hxt814e
\.xn--hxt814e$
 
#:whois|whois.nic.adult
:whois|whois.afilias-srs.net
\.adult$
 
:whois|whois.nic.eurovision
\.eurovision$
 
#:whois|whois.fashion
#:whois|whois-dub.mm-registry.com
:whois|whois.nic.fashion
\.fashion$
 
#:whois|whois.nic.porn
:whois|whois.afilias-srs.net
\.porn$
 
:whois|whois.nic.trust
\.trust$
 
#:whois|whois.nic.xn--czrs0t
#:whois|whois.donuts.co
:whois|whois.nic.xn--czrs0t
\.xn--czrs0t$
 
#:whois|whois.nic.xn--cg4bki
:whois|whois.nic.samsung
\.samsung$
 
:whois|whois.nic.cartier
\.cartier$
 
:whois|whois.nic.sky
\.sky$
 
#:whois|whois.nic.doosan
:notice||Disallocated by IANA
\.doosan$
 
#:whois|whois-dub.mm-registry.com
:whois|whois.nic.garden
\.garden$
 
#:whois|whois.nic.iwc
:notice||Disallocated by IANA
\.iwc$
 
:whois|whois.nic.lidl
\.lidl$
 
:whois|whois.nic.osaka
\.osaka$
 
:whois|whois.nic.schwarz
\.schwarz$
 
#:whois|whois.nic.sew
:whois|whois.afilias-srs.net
\.sew$
 
:whois|whois.nic.google
#:whois|domain-registry-whois.l.google.com
#:notice||Please visit http://www.google.com/registry/whois.html?q=~query~
#:cgihttps|https://domain-registry.appspot.com/whois/~query~
#:notice||Please visit http://whois.charlestonroadregistry.com
#:whois|whois.charlestonroadregistry.com
\.dev$
 
:whois|whois.nic.google
#:whois|domain-registry-whois.l.google.com
#:notice||Please visit http://www.google.com/registry/whois.html?q=~query~
#:cgihttps|https://domain-registry.appspot.com/whois/~query~
#:notice||Please visit http://whois.charlestonroadregistry.com
#:whois|whois.charlestonroadregistry.com
\.docs$
 
#:whois|whois.donuts.co
:whois|whois.nic.tires
\.tires$
 
:whois|whois.nic.amsterdam
\.amsterdam$
 
:whois|whois.uniregistry.net
\.flowers$
 
#:whois|whois.nic.gmo
:whois|whois.nic.ggee
\.ggee$
 
#:whois|whois.rightside.co
:whois|whois.nic.sale
\.sale$
 
#:whois|whois.rightside.co
:whois|whois.nic.video
\.video$
 
#:whois|whois.ksregistry.net
:whois|whois.nic.zuerich
\.zuerich$
 
#:whois|whois.nic.shriram
:whois|whois.afilias-srs.net
\.shriram$
 
:whois|whois.nic.bank
\.bank$
 
#:whois|whois-dub.mm-registry.com
:whois|whois.nic.fit
\.fit$
 
#:whois|whois.nic.gmo
:whois|whois.nic.kddi
\.kddi$
 
:whois|whois.nic.lat
\.lat$
 
#:whois|whois.nic.gmo
:whois|whois.nic.lotte
\.lotte$
 
:whois|whois.afilias-srs.net
\.marriott$
 
:whois|whois.nic.one
\.one$
 
:whois|whois.nic.barclaycard
\.barclaycard$
 
:whois|whois.nic.barclays
\.barclays$
 
#:whois|whois.nic.dabur
:whois|whois.afilias-srs.net
\.dabur$
 
:whois|whois.nic.google
#:whois|whois.nic.dclk
#:whois|domain-registry-whois.l.google.com
#:notice||Please visit http://www.google.com/registry/whois.html?q=~query~
#:cgihttps|https://domain-registry.appspot.com/whois/~query~
#:notice||Please visit http://whois.charlestonroadregistry.com
#:whois|whois.charlestonroadregistry.com
\.dclk$
 
:whois|whois.nic.design
#:whois|whois.centralnic.com
\.design$
 
#:whois|whois.nic.goog
:whois|whois.nic.google
#:whois|domain-registry-whois.l.google.com
#:notice||Please visit http://www.google.com/registry/whois.html?q=~query~
#:cgihttps|https://domain-registry.appspot.com/whois/~query~
#:notice||Please visit http://whois.charlestonroadregistry.com
#:whois|whois.charlestonroadregistry.com
\.goog$
 
#:whois|whois.nic.hangout
:whois|whois.nic.google
#:whois|domain-registry-whois.l.google.com
#:notice||Please visit http://www.google.com/registry/whois.html?q=~query~
#:cgihttps|https://domain-registry.appspot.com/whois/~query~
#:notice||Please visit http://whois.charlestonroadregistry.com
#:whois|whois.charlestonroadregistry.com
\.hangout$
 
#:whois|whois.nic.hermes
:whois|whois.afilias-srs.net
\.hermes$
 
:whois|whois.nic.ifm
\.ifm$
 
:whois|whois.nic.gmo
\.jcb$
 
#:whois|whois.nic.temasek
:whois|whois.afilias-srs.net
\.temasek$
 
#:whois|whois.nic.xn--b4w605ferd
:whois|whois.afilias-srs.net
\.xn--b4w605ferd$
 
#:whois|whois.nic.tokyo
:whois|whois.nic.kyoto
\.kyoto$
 
:whois|whois.nic.ntt
\.ntt$
 
#:whois|whois.donuts.co
:whois|whois.nic.bingo
\.bingo$
 
#:whois|whois.nic.gmo
:whois|whois.nic.canon
\.canon$
 
#:whois|whois.donuts.co
:whois|whois.nic.chat
\.chat$
 
#:whois|whois.donuts.co
:whois|whois.nic.style
\.style$
 
#:whois|whois.donuts.co
:whois|whois.nic.tennis
\.tennis$
 
#:whois|whois.nic.gmo
:whois|whois.nic.toshiba
\.toshiba$
 
#:whois|whois.donuts.co
:whois|whois.nic.apartments
\.apartments$
 
:whois|whois.nic.nico
#:whois|whois.nic.gmo
\.nico$
 
# Alternative URL: http://nic.saxo/
#:whois|whois.aridnrs.net.au
:whois|whois.nic.saxo
\.saxo$
 
:whois|whois.nic.cbn
\.cbn$
 
#:whois|whois.gdnregistry.com
:whois|whois.nic.gdn
\.gdn$
 
:whois|whois.cctld.by
\.xn--90ais$
 
#:whois|whois.donuts.co
:whois|whois.nic.casino
\.casino$
 
#:whois|whois.centralnic.com
:whois|whois.nic.fans
\.fans$
 
#:whois|whois.donuts.co
:whois|whois.nic.football
\.football$
 
#:whois|whois.nic.gmo
:whois|whois.nic.goldpoint
\.goldpoint$
 
#:whois|whois.donuts.co
:whois|whois.nic.school
\.school$
 
:whois|whois.nic.gmo
\.yodobashi$
 
:whois|whois.afilias-srs.net
\.boats$
 
# Alternative URL: http://nic.courses/
#:whois|whois.aridnrs.net.au
:whois|whois.nic.courses
\.courses$
 
:whois|whois.nic.study
\.study$
 
:whois|whois.nic.sucks
\.sucks$
 
# Alternative URL: http://whois.nic.epson/ (requires CAPTCHA)
#:whois|whois.aridnrs.net.au
:whois|whois.nic.epson
\.epson$
 
:whois|whois.nic.gmo
\.goo$
 
:whois|whois.nic.java
\.java$
 
:whois|whois-leclerc.nic.fr
\.leclerc$
 
:whois|whois.nic.maif
\.maif$
 
:whois|whois.nic.oracle
\.oracle$
 
:whois|whois.nic.xn--mxtq1m
\.xn--mxtq1m$
 
:whois|whois.nic.gmo
\.datsun$
 
:whois|whois.nic.gmo
\.infiniti$
 
#:whois|whois.nic.gmo
#:whois|whois.nic.mtpc
:notice||Disallocated by IANA
\.mtpc$
 
:whois|whois.nic.gmo
\.nissan$
 
:whois|whois.afilias-srs.net
\.abbott$
 
:whois|whois.nic.pictet
\.pictet$
 
#:whois|whois.afilias-srs.net
:whois|whois.nic.xin
\.xin$
 
#:whois|whois.nic.chloe
:notice||Disallocated by IANA
\.chloe$
 
:whois|whois.nic.erni
\.erni$
 
:whois|whois.nic.forex
\.forex$
 
:whois|whois.nic.markets
\.markets$
 
:whois|whois.nic.cfd
\.cfd$
 
:whois|whois.nic.spreadbetting
\.spreadbetting$
 
:whois|whois.nic.trading
\.trading$
 
#:whois|whois.centralnic.com
:whois|whois.nic.fan
\.fan$
 
#:whois|whois.centralnic.com
:whois|whois.nic.online
\.online$
 
:whois|whois.nic.google
#:whois|domain-registry-whois.l.google.com
#:notice||Please visit http://www.google.com/registry/whois.html?q=~query~
#:cgihttps|https://domain-registry.appspot.com/whois/~query~
#:notice||Please visit http://whois.charlestonroadregistry.com
#:whois|whois.charlestonroadregistry.com
\.page$
 
:whois|whois.nic.piaget
\.piaget$
 
#:whois|whois.centralnic.com
:whois|whois.nic.site
\.site$
 
#:whois|whois.ngtld.cn
:whois|whois.teleinfo.cn
\.xn--vuq861b$
 
:whois|whois.nic.bbc
\.bbc$
 
#:whois|whois.rightside.co
:whois|whois.nic.news
\.news$
 
#:whois|whois.centralnic.com
:whois|whois.nic.tech
\.tech$
 
:whois|whois.nic.google
#:whois|domain-registry-whois.l.google.com
#:notice||Please visit http://www.google.com/registry/whois.html?q=~query~
#:cgihttps|https://domain-registry.appspot.com/whois/~query~
#:notice||Please visit http://whois.charlestonroadregistry.com
#:whois|whois.charlestonroadregistry.com
\.ads$
 
:whois|whois.nic.film
\.film$
 
#:whois|whois.donuts.co
:whois|whois.nic.gold
\.gold$
 
#:whois|whois.donuts.co
:whois|whois.nic.golf
\.golf$
 
:whois|whois.nic.google
#:whois|domain-registry-whois.l.google.com
#:notice||Please visit http://www.google.com/registry/whois.html?q=~query~
#:cgihttps|https://domain-registry.appspot.com/whois/~query~
#:notice||Please visit http://whois.charlestonroadregistry.com
#:whois|whois.charlestonroadregistry.com
\.guge$
 
#:whois|whois.donuts.co
:whois|whois.nic.plus
\.plus$
 
#:whois|whois.donuts.co
:whois|whois.nic.tours
\.tours$
 
:whois|whois.nic.accountant
\.accountant$
 
:whois|whois.nic.date
\.date$
 
#:whois|whois.nic.doha
:notice||Disallocated by IANA
\.doha$
 
:whois|whois.nic.download
\.download$
 
:whois|whois.nic.faith
\.faith$
 
:whois|whois.nic.loan
\.loan$
 
#:whois|whois.donuts.co
:whois|whois.nic.movie
\.movie$
 
:whois|whois.nic.mtn
\.mtn$
 
:notice||Disallocated by IANA
\.panerai$
 
:whois|whois.nic.review
\.review$
 
#:whois|whois.centralnic.com
:whois|whois.nic.tickets
\.tickets$
 
:whois|whois.nic.win
\.win$
 
:whois|whois.nic.komatsu
\.komatsu$
 
:whois|whois.nic.sap
\.sap$
 
:whois|whois.nic.bond
\.bond$
 
#:whois|whois.nic.wang
:whois|whois.gtld.knet.cn
\.xn--9et52u$
 
:whois|whois.nic.afl
\.afl$
 
#:whois|whois.afilias-srs.net
:whois|whois.nic.redstone
\.redstone$
 
:whois|whois-mma.nic.fr
\.mma$
 
#:whois|whois.nic.wang
:whois|whois.gtld.knet.cn
\.xn--30rr7y$
 
#:whois|whois.centralnic.com
:whois|whois.nic.love
\.love$
 
#:whois|whois.afilias-srs.net
:whois|whois.nic.scholarships
\.scholarships$
 
:whois|whois.nic.xn--nyqy26a
\.xn--nyqy26a$
 
#:whois|whois.afilias-srs.net
:whois|whois.nic.cyou
\.cyou$
 
:whois|whois.nic.racing
\.racing$
 
:whois|whois.nic.bauhaus
\.bauhaus$
 
#:whois|whois.donuts.co
:whois|whois.nic.cafe
\.cafe$
 
#:whois|whois.donuts.co
:whois|whois.nic.express
\.express$
 
:whois|whois.nic.xn--kcrx77d1x4a
\.xn--kcrx77d1x4a$
 
#:whois|whois.donuts.co
:whois|whois.nic.jewelry
\.jewelry$
 
#:whois|whois.donuts.co
:whois|whois.nic.show
\.show$
 
:whois|whois.nic.sony
\.sony$
 
#:whois|whois.donuts.co
:whois|whois.nic.team
\.team$
 
:whois|whois.nic.xerox
\.xerox$
 
:whois|whois.nic.seat
\.seat$
 
:whois|whois.afilias-srs.net
\.sex$
 
:whois|whois.nic.weir
\.weir$
 
:whois|whois.nic.abb
\.abb$
 
:whois|whois.nic.broker
\.broker$
 
#:whois|whois.donuts.co
:whois|whois.nic.dog
\.dog$
 
:whois|whois.nic.honda
\.honda$
 
#:whois|whois.centralnic.com
:whois|whois.nic.rent
\.rent$
 
:whois|whois.nic.swiss
\.swiss$
 
:whois|whois.nic.bridgestone
\.bridgestone$
 
:whois|whois.nic.gmo
\.hitachi$
 
:whois|whois.nic.sener
\.sener$
 
:whois|whois.nic.toray
\.toray$
 
:whois|whois.nic.aig
\.aig$
 
#:whois|whois.nic.auto
:whois|whois.uniregistry.net
\.auto$
 
#:whois|whois.nic.cars
:whois|whois.uniregistry.net
\.cars$
 
:whois|whois.nic.cfa
\.cfa$
 
:whois|whois.nic.icu
\.icu$
 
:whois|whois.nic.liaison
\.liaison$
 
#:whois|whois.nic.lol
:whois|whois.uniregistry.net
\.lol$
 
:whois|whois.nic.nadex
\.nadex$
 
#:whois|whois.donuts.co
:whois|whois.nic.theater
\.theater$
 
#:whois|whois.donuts.co
:whois|whois.nic.hockey
\.hockey$
 
#:whois|whois.donuts.co
:whois|whois.nic.run
\.run$
 
#:whois|whois.donuts.co
:whois|whois.nic.taxi
\.taxi$
 
#:whois|whois.afilias-srs.net
:whois|whois.nic.xn--estv75g
\.xn--estv75g$
 
# TODO: Entry generated automatically. Needs manual check.
:notice||Whois server unknown (2019-04-28)
\.xn--mgbpl2fh$
 
:whois|whois.amnic.net
\.xn--y9a3aq$
 
:whois|whois.nic.accenture
\.accenture$
 
:whois|whois.nic.nec
\.nec$
 
:whois|whois.nic.philips
\.philips$
 
#:whois|whois.nic.xn--fjq720a
#:whois|whois.donuts.co
:whois|whois.nic.xn--fjq720a
\.xn--fjq720a$
 
:whois|whois.nic.brother
\.brother$
 
#:whois|whois.donuts.co
:whois|whois.nic.coupons
\.coupons$
 
#:whois|whois.afilias-srs.net
:whois|whois.nic.icbc
\.icbc$
 
#:whois|whois.donuts.co
:whois|whois.nic.soccer
\.soccer$
 
:whois|whois.nic.earth
\.earth$
 
:whois|whois.nic.cisco
\.cisco$
 
:whois|whois-corsica.nic.fr
\.corsica$
 
:whois|whois.nic.lupin
\.lupin$
 
:whois|whois.nic.men
\.men$
 
#:whois|whois.donuts.co
:whois|whois.nic.fyi
\.fyi$
 
:whois|whois.afilias-srs.net
\.jll$
 
#:whois|whois.donuts.co
:whois|whois.nic.mba
\.mba$
 
#:whois|whois.afilias-srs.net
:whois|whois.nic.thd
\.thd$
 
:whois|whois.nic.bbva
\.bbva$
 
:whois|whois.nic.sandvik
\.sandvik$
 
:whois|whois.nic.sandvikcoromant
\.sandvikcoromant$
 
:whois|whois.nic.walter
\.walter$
 
#:whois|whois.nic.ski
#:whois|whois.ksregistry.net
:whois|whois.afilias.net
\.ski$
 
:whois|whois.nic.xn--imr513n
\.xn--imr513n$
 
:whois|whois.nic.bible
\.bible$
 
:whois|whois-sncf.nic.fr
\.sncf$
 
#:whois|whois.afilias-srs.net
:whois|whois.nic.homedepot
\.homedepot$
 
:whois|whois.nic.xbox
\.xbox$
 
#:whois|whois.nic.montblanc
:notice||Disallocated by IANA
\.montblanc$
 
:whois|whois.nic.azure
\.azure$
 
:whois|whois.nic.bing
\.bing$
 
:whois|whois.nic.hotmail
\.hotmail$
 
:notice||Disallocated by IANA
\.jlc$
 
:whois|whois.nic.microsoft
\.microsoft$
 
:whois|whois.nic.windows
\.windows$
 
:whois|whois.afilias-srs.net
\.lasalle$
 
:whois|whois.nic.bharti
\.bharti$
 
:whois|whois.nic.crown
\.crown$
 
:notice||Disallocated by IANA
\.statoil$
 
:whois|whois.nic.aeg
\.aeg$
 
#:whois|whois.nic.drive
:whois|whois.nic.google
\.drive$
 
:whois|whois.nic.genting
\.genting$
 
:whois|whois.nic.google
\.play$
 
:whois|whois.nic.cba
\.cba$
 
:whois|whois.nic.commbank
\.commbank$
 
:whois|whois.nic.netbank
\.netbank$
 
:whois|whois.nic.ricoh
\.ricoh$
 
:whois|whois.nic.starhub
\.starhub$
 
:notice||Disallocated by IANA
\.vista$
 
:whois|whois.nic.vistaprint
\.vistaprint$
 
:whois|whois.nic.office
\.office$
 
:whois|whois.nic.scor
\.scor$
 
:whois|whois.nic.skype
\.skype$
 
#:whois|whois-dub.mm-registry.com
:whois|whois.nic.law
\.law$
 
#:whois|whois.afilias-srs.net
:whois|whois.nic.bnl
\.bnl$
 
#:whois|whois-cl01.mm-registry.com
:whois|whois.nic.bradesco
\.bradesco$
 
:whois|whois.nic.cloud
\.cloud$
 
:whois|whois.nic.hoteles
\.hoteles$
 
:whois|whois-fe.movistar.tango.knipp.de
\.movistar$
 
:whois|whois.nic.omega
\.omega$
 
:whois|whois.nic.swatch
\.swatch$
 
:whois|whois-fe.telefonica.tango.knipp.de
\.telefonica$
 
#:whois|whois.centralnic.com
:whois|whois.nic.forum
\.forum$
 
#:whois|whois.centralnic.com
:whois|whois.nic.realty
\.realty$
 
:whois|whois.nic.google
\.app$
 
:whois|whois.nic.sakura
\.sakura$
 
:whois|whois.nic.airtel
\.airtel$
 
:whois|whois.nic.barcelona
\.barcelona$
 
:whois|whois.nic.bcn
\.bcn$
 
:whois|whois.uniregistry.net
\.game$
 
:whois|whois.nic.jprs
\.jprs$
 
#:whois|whois.rightside.co
:whois|whois.nic.live
\.live$
 
#:whois|whois.rightside.co
:whois|whois.nic.studio
\.studio$
 
:whois|whois.nic.bentley
\.bentley$
 
:whois|whois.nic.hsbc
\.hsbc$
 
:notice||Disallocated by IANA
\.iinet$
 
:whois|whois.nic.orange
\.orange$
 
#:whois|whois.afilias-srs.net
:whois|whois.nic.delta
\.delta$
 
:whois|whois.afilias-srs.net
\.ist$
 
:whois|whois.afilias-srs.net
\.istanbul$
 
:whois|whois.nic.ubs
\.ubs$
 
:whois|whois.nic.axa
\.axa$
 
:whois|whois.nic.citic
\.citic$
 
:whois|whois.nic.dnp
\.dnp$
 
:whois|whois.nic.jetzt
\.jetzt$
 
:whois|whois.nic.kred
\.kred$
 
:whois|whois.nic.neustar
\.neustar$
 
:whois|whois.nic.nyc
\.nyc$
 
:whois|whois.nic.okinawa
\.okinawa$
 
:whois|whois.nic.qpon
\.qpon$
 
:whois|whois.nic.ren
\.ren$
 
:whois|whois.nic.sohu
\.sohu$
 
:whois|whois.nic.xn--rhqv96g
\.xn--rhqv96g$
 
:whois|whois-lancaster.nic.fr
\.lancaster$
 
:whois|whois.afilias-srs.net
\.nokia$
 
:whois|whois.nic.ice
\.ice$
 
:whois|whois.nic.itau
\.itau$
 
:whois|whois.afilias.net
\.bet$
 
:whois|whois.nic.sanofi
\.sanofi$
 
:whois|whois.afilias-srs.net
\.srl$
 
:whois|whois.nic.tatamotors
\.tatamotors$
 
:whois|whois.nic.ipiranga
\.ipiranga$
 
:whois|whois.nic.lexus
\.lexus$
 
:whois|whois.nic.man
\.man$
 
:whois|whois.afilias.net
\.pet$
 
:whois|whois.nic.toyota
\.toyota$
 
:whois|whois.nic.xn--11b4c3d
\.xn--11b4c3d$
 
:whois|whois.nic.xn--3pxu8k
\.xn--3pxu8k$
 
:whois|whois.nic.xn--42c2d9a
\.xn--42c2d9a$
 
:whois|whois.nic.xn--9dbq2a
\.xn--9dbq2a$
 
:whois|whois.nic.xn--c2br7g
\.xn--c2br7g$
 
:whois|whois.nic.xn--fhbei
\.xn--fhbei$
 
:whois|whois.nic.xn--j1aef
\.xn--j1aef$
 
:whois|whois.nic.xn--mk1bu44c
\.xn--mk1bu44c$
 
:whois|whois.nic.xn--pssy2u
\.xn--pssy2u$
 
:whois|whois.nic.xn--t60b56a
\.xn--t60b56a$
 
:whois|whois.nic.xn--tckwe
\.xn--tckwe$
 
:whois|whois.nic.lixil
\.lixil$
 
#:whois|whois.nic.boots
:notice||Disallocated by IANA
\.boots$
 
:whois|whois.nic.chanel
\.chanel$
 
#:whois|whois.donuts.co
:whois|whois.nic.vin
\.vin$
 
#:whois|whois.donuts.co
:whois|whois.nic.wine
\.wine$
 
#:whois|whois.nic.xperia
:notice||Disallocated by IANA
\.xperia$
 
:whois|whois.nic.giving
\.giving$
 
#:whois|whois.nic.ceb
:whois|whois.afilias-srs.net
\.ceb$
 
#:whois|whois.nic.fage
:whois|whois.afilias-srs.net
\.fage$
 
#:whois|whois.donuts.co
:whois|whois.nic.group
\.group$
 
#:whois|whois.rightside.co
:whois|whois.nic.family
\.family$
 
:whois|whois.nic.seek
\.seek$
 
:whois|whois.uniregistry.net
\.mom$
 
:whois|whois.nic.xn--efvy88h
\.xn--efvy88h$
 
:whois|whois.afilias-srs.net
\.aco$
 
:whois|whois.nic.aaa
\.aaa$
 
:whois|whois.afilias-srs.net
\.gea$
 
#:whois|whois.centralnic.com
:whois|whois.nic.stcgroup
\.stcgroup$
 
#:whois|whois.centralnic.com
:whois|whois.nic.viva
\.viva$
 
:whois|whois.nic.amica
\.amica$
 
#:whois|whois.centralnic.com
:whois|whois.nic.stc
\.stc$
 
:whois|whois.nic.csc
\.csc$
 
:whois|whois.uniregistry.net
\.car$
 
#:whois|whois.centralnic.com
:whois|whois.nic.protection
\.protection$
 
:whois|whois.afilias-srs.net
\.stada$
 
#:whois|whois.centralnic.com
:whois|whois.nic.theatre
\.theatre$
 
:whois|whois.nic.linde
\.linde$
 
#:whois|whois.centralnic.com
:whois|whois.nic.security
\.security$
 
:whois|whois.nic.bms
\.bms$
 
#:whois|whois.donuts.co
:whois|whois.nic.ltd
\.ltd$
 
:whois|whois.nic.obi
\.obi$
 
:whois|whois.gtlds.nic.br
\.bom$
 
:whois|whois.gtlds.nic.br
\.final$
 
:whois|whois.nic.hyundai
\.hyundai$
 
:whois|whois.nic.kia
\.kia$
 
:whois|whois.nic.seven
\.seven$
 
:whois|whois.afilias-srs.net
\.stockholm$
 
:whois|whois.nic.clubmed
\.clubmed$
 
:whois|whois.nic.moi
\.moi$
 
:whois|whois.nic.mtr
\.mtr$
 
:whois|whois.nic.virgin
\.virgin$
 
:whois|whois.nic.yamaxun
\.yamaxun$
 
:whois|whois.afilias-srs.net
\.cipriani$
 
:whois|whois.nic.kinder
\.kinder$
 
:whois|whois.nic.dell
\.dell$
 
:whois|whois.nic.aramco
\.aramco$
 
:whois|whois.nic.xn--mgba3a3ejt
\.xn--mgba3a3ejt$
 
:whois|whois.nic.arte
\.arte$
 
:notice||Disallocated by IANA
\.mutuelle$
 
:whois|whois.nic.gucci
\.gucci$
 
:whois|whois.nic.jaguar
\.jaguar$
 
:whois|whois.nic.landrover
\.landrover$
 
:whois|whois.nic.rwe
\.rwe$
 
:whois|whois.afilias-srs.net
\.zara$
 
#:whois|whois.nic.meo
:notice||Disallocated by IANA
\.meo$
 
:whois|whois.nic.ping
\.ping$
 
#:whois|whois.nic.sapo
:notice||Disallocated by IANA
\.sapo$
 
:whois|whois.nic.sbs
\.sbs$
 
:whois|whois.nic.aarp
\.aarp$
 
:whois|whois.afilias-srs.net
\.apple$
 
:whois|whois.afilias-srs.net
\.beats$
 
:whois|whois.cmc.iq
\.xn--mgbtx2b$
 
# TODO: Entry generated automatically. Needs manual check.
:notice||Whois server unknown (2019-04-28)
\.xn--qxam$
 
:whois|whois.nic.ferrero
\.ferrero$
 
:whois|whois.nic.playstation
\.playstation$
 
:whois|whois.nic.rocher
\.rocher$
 
:whois|whois.nic.cityeats
\.cityeats$
 
:whois|whois.afilias-srs.net
\.creditunion$
 
:whois|whois.nic.lifestyle
\.lifestyle$
 
:whois|whois.nic.vana
\.vana$
 
:whois|whois.nic.fairwinds
\.fairwinds$
 
:whois|whois.nic.grainger
\.grainger$
 
:whois|whois.nic.tab
\.tab$
 
:whois|whois.nic.comsec
\.comsec$
 
#:whois|whois-cl01.mm-registry.com
:whois|whois.nic.broadway
\.broadway$
 
:whois|whois.afilias-srs.net
\.audi$
 
:whois|whois.afilias-srs.net
\.boehringer$
 
:whois|whois-bostik.nic.fr
\.bostik$
 
:whois|whois.afilias-srs.net
\.bugatti$
 
:whois|whois.afilias-srs.net
\.lamborghini$
 
:whois|whois.nic.verisign
\.verisign$
 
#:whois|whois-dub.mm-registry.com
:whois|whois.nic.vip
\.vip$
 
:whois|whois.nic.sfr
\.sfr$
 
:whois|whois.nic.insurance
\.insurance$
 
:whois|whois.nic.med
\.med$
 
:whois|whois.nic.norton
\.norton$
 
:whois|whois.nic.symantec
\.symantec$
 
:whois|whois.nic.author
\.author$
 
:whois|whois.nic.book
\.book$
 
:whois|whois.nic.bot
\.bot$
 
:whois|whois.afilias-srs.net
\.buy$
 
:whois|whois.nic.call
\.call$
 
:whois|whois.nic.circle
\.circle$
 
:whois|whois.nic.fast
\.fast$
 
:whois|whois.nic.firestone
\.firestone$
 
:whois|whois.nic.got
\.got$
 
:whois|whois.nic.jot
\.jot$
 
:whois|whois.nic.joy
\.joy$
 
:whois|whois.nic.like
\.like$
 
:whois|whois.agitsys.net
\.nowruz$
 
:whois|whois.nic.pin
\.pin$
 
:whois|whois.nic.read
\.read$
 
:whois|whois.nic.room
\.room$
 
:whois|whois.nic.safe
\.safe$
 
#:whois|whois.nic.salon
#:whois|whois.donuts.co
:whois|whois.nic.salon
\.salon$
 
:whois|whois.nic.gmo
\.sharp$
 
:whois|whois.agitsys.net
\.shia$
 
:whois|whois.nic.smile
\.smile$
 
:whois|whois.agitsys.net
\.tci$
 
:whois|whois.afilias-srs.net
\.travelers$
 
:whois|whois.nic.zero
\.zero$
 
:whois|whois.agitsys.net
\.pars$
 
:whois|whois.agitsys.net
\.xn--mgbt3dhd$
 
:whois|whois.afilias-srs.net
\.redumbrella$
 
:whois|whois.afilias-srs.net
\.trv$
 
:whois|whois.nic.tushu
\.tushu$
 
:whois|whois.nic.watches
\.watches$
 
:whois|whois.nic.xn--eckvdtc9d
\.xn--eckvdtc9d$
 
#:whois|whois.centralnic.com
:whois|whois.nic.kfh
\.kfh$
 
:whois|whois.nic.kpn
\.kpn$
 
:whois|whois.nic.shell
\.shell$
 
:whois|whois.afilias-srs.net
\.travelersinsurance$
 
:whois|whois.nic.wanggou
\.wanggou$
 
:whois|whois.nic.xn--kpu716f
\.xn--kpu716f$
 
#:whois|whois.centralnic.com
:whois|whois.nic.xn--ngbe9e0a
\.xn--ngbe9e0a$
 
:whois|whois.nic.xn--pbt977c
\.xn--pbt977c$
 
:whois|whois.nic.ford
\.ford$
 
:whois|whois.nic.jmp
\.jmp$
 
:whois|whois.nic.lincoln
\.lincoln$
 
:whois|whois.nic.sas
\.sas$
 
#:whois|whois.afilias-srs.net
:whois|whois.nic.storage
\.storage$
 
#:whois|whois.afilias-srs.net
:whois|whois.nic.xn--jlq61u9w7b
\.xn--jlq61u9w7b$
 
:whois|whois.nic.analytics
\.analytics$
 
:whois|whois.nic.contact
\.contact$
 
:whois|whois.nic.pid
\.pid$
 
#:whois|whois.afilias-srs.net
:whois|whois.nic.star
\.star$
 
:whois|whois.nic.weber
\.weber$
 
:whois|whois.nic.mobily
\.mobily$
 
:whois|whois.nic.xn--mgbb9fbpob
\.xn--mgbb9fbpob$
 
:whois|whois.nic.bosch
\.bosch$
 
:whois|whois.nic.dealer
\.dealer$
 
:whois|whois.nic.fox
\.fox$
 
#:whois|whois.afilias-srs.net
:whois|whois.nic.lamer
\.lamer$
 
#:whois|whois.afilias-srs.net
:whois|whois.nic.origins
\.origins$
 
:whois|whois.nic.rexroth
\.rexroth$
 
:whois|whois.nic.safety
\.safety$
 
:whois|whois.afilias-srs.net
\.schaeffler$
 
:whois|whois.nic.statefarm
\.statefarm$
 
#:whois|whois.afilias-srs.net
:whois|whois.nic.clinique
\.clinique$
 
:whois|whois.nic.living
\.living$
 
:whois|whois.afilias.net
\.promo$
 
#:whois|whois.ngtld.cn
:whois|whois.gtld.knet.cn
\.baidu$
 
:whois|whois.nic.dubai
\.dubai$
 
#:whois|whois.ksregistry.net
:whois|whois.nic.fresenius
\.fresenius$
 
#:whois|whois.nic.volkswagen
:whois|whois.afilias-srs.net
\.volkswagen$
 
:whois|whois.nic.tube
\.tube$
 
:whois|whois.nic.weather
\.weather$
 
:whois|whois.nic.compare
\.compare$
 
:whois|whois.nic.iselect
\.iselect$
 
:whois|whois.nic.makeup
\.makeup$
 
:whois|whois.nic.select
\.select$
 
:whois|whois.nic.skin
\.skin$
 
#:whois|whois.afilias-srs.net
:whois|whois.nic.alibaba
\.alibaba$
 
#:whois|whois.afilias-srs.net
:whois|whois.nic.alipay
\.alipay$
 
:whois|whois.nic.softbank
\.softbank$
 
:whois|whois.nic.xn--g2xx48c
\.xn--g2xx48c$
 
:whois|whois.nic.lifeinsurance
\.lifeinsurance$
 
:whois|whois.afilias-srs.net
\.edeka$
 
#:whois|whois.nic.pamperedchef
:notice||Disallocated by IANA
\.pamperedchef$
 
:whois|whois.nic.taobao
\.taobao$
 
:whois|whois.nic.tiffany
\.tiffany$
 
:whois|whois.nic.tmall
\.tmall$
 
:whois|whois.nic.adac
\.adac$
 
:whois|whois.nic.health
\.health$
 
#:whois|whois.afilias-srs.net
:whois|whois.nic.helsinki
\.helsinki$
 
:whois|whois.nic.lanxess
\.lanxess$
 
:whois|whois.nic.nikon
\.nikon$
 
:whois|whois.nic.weatherchannel
\.weatherchannel$
 
:whois|whois.nic.deloitte
\.deloitte$
 
:whois|whois.nic.unicom
\.unicom$
 
:whois|whois.nic.frontier
\.frontier$
 
:whois|whois.nic.quest
\.quest$
 
:whois|whois.nic.xn--8y0a063a
\.xn--8y0a063a$
 
#:whois|whois.afilias-srs.net
:whois|whois.nic.gallup
\.gallup$
 
#:whois|whois.afilias-srs.net
:whois|whois.nic.hdfcbank
\.hdfcbank$
 
:whois|whois.afilias-srs.net
\.natura$
 
:whois|whois.afilias-srs.net
\.pwc$
 
#:whois|whois.afilias-srs.net
:whois|whois.nic.wolterskluwer
\.wolterskluwer$
 
:whois|whois.eu
.xn--e1a4c$
 
:whois|whois.monic.mo
\.xn--mix891f$
 
:whois|whois.nic.flickr
\.flickr$
 
#:whois|whois.afilias-srs.net
:whois|whois.nic.tvs
\.tvs$
 
:whois|whois.nic.yahoo
\.yahoo$
 
:whois|whois.nic.coupon
\.coupon$
 
:whois|whois.nic.spot
\.spot$
 
:whois|whois.nic.xn--1ck2e1b
\.xn--1ck2e1b$
 
:whois|whois.nic.xn--cck2b3b
\.xn--cck2b3b$
 
:whois|whois.nic.xn--gckr3f0f
\.xn--gckr3f0f$
 
:whois|whois.nic.xn--rovu88b
\.xn--rovu88b$
 
:whois|whois.nic.xn--bck1b9a5dre4c
\.xn--bck1b9a5dre4c$
 
:whois|whois.nic.store
\.store$
 
:whois|whois.afilias-srs.net
\.viking$
 
:whois|whois.nic.xn--jvr189m
\.xn--jvr189m$
 
:whois|whois.nic.song
\.song$
 
#:whois|whois.nic.telecity
:notice||Disallocated by IANA
\.telecity$
 
:whois|whois.nic.tunes
\.tunes$
 
:whois|whois.nic.chase
\.chase$
 
:whois|whois.nic.jpmorgan
\.jpmorgan$
 
:whois|whois.nic.passagens
\.passagens$
 
:whois|whois.nic.vuelos
\.vuelos$
 
:whois|whois.nic.kerryhotels
\.kerryhotels$
 
:whois|whois.nic.kerrylogistics
\.kerrylogistics$
 
:whois|whois.nic.kerryproperties
\.kerryproperties$
 
:whois|whois.nic.kuokgroup
\.kuokgroup$
 
:whois|whois.nic.xn--w4r85el8fhu5dnra
\.xn--w4r85el8fhu5dnra$
 
:whois|whois.afilias-srs.net
\.avianca$
 
#:whois|whois.afilias-srs.net
:whois|whois.nic.bcg
\.bcg$
 
#:whois|whois.donuts.co
:whois|whois.nic.gmbh
\.gmbh$
 
:whois|whois.nic.locus
\.locus$
 
:whois|whois-total.nic.fr
\.total$
 
:whois|whois.nic.stream
\.stream$
 
:whois|whois.nic.gallo
\.gallo$
 
:whois|whois.afilias-srs.net
\.shaw$
 
#:whois|whois.afilias-srs.net
:whois|whois.nic.ally
\.ally$
 
:whois|whois.nic.barefoot
\.barefoot$
 
:whois|whois.nic.aws
\.aws$
 
:whois|whois.afilias-srs.net
\.extraspace$
 
:whois|whois.nic.talk
\.talk$
 
:whois|whois.nic.xn--fct429k
\.xn--fct429k$
 
:whois|whois.nic.you
\.you$
 
:whois|whois.teleinfo.cn
\.anquan$
 
:whois|whois.afilias-srs.net
\.jcp$
 
:whois|whois.nic.nissay
\.nissay$
 
:whois|whois.teleinfo.cn
\.shouji$
 
#:whois|whois.afilias-srs.net
:whois|whois.nic.sina
\.sina$
 
:whois|whois.teleinfo.cn
\.xihuan$
 
:whois|whois.teleinfo.cn
\.yun$
 
#:whois|whois.nic.htc
:notice||Disallocated by IANA
\.htc$
 
:whois|whois.nic.kpmg
\.kpmg$
 
:whois|whois.nic.mutual
\.mutual$
 
:whois|whois.afilias-srs.net
\.abbvie$
 
:whois|whois.nic.abudhabi
\.abudhabi$
 
:whois|whois.nic.northwesternmutual
\.northwesternmutual$
 
:whois|whois.afilias-srs.net
\.vig$
 
#:whois|whois.afilias-srs.net
:whois|whois.nic.weibo
\.weibo$
 
#:whois|whois.afilias-srs.net
:whois|whois.nic.xn--9krt00a
\.xn--9krt00a$
 
:whois|whois.nic.xn--mgbca7dzdo
\.xn--mgbca7dzdo$
 
:whois|whois.nic.baby
\.baby$
 
:whois|whois.nic.jnj
\.jnj$
 
:whois|whois.nic.teva
\.teva$
 
:whois|whois.afilias-srs.net
\.agakhan$
 
:whois|whois.afilias-srs.net
\.akdn$
 
:whois|whois.afilias-srs.net
\.imamat$
 
:whois|whois.afilias-srs.net
\.ismaili$
 
#:whois|whois.afilias-srs.net
:whois|whois.nic.sbi
\.sbi$
 
#:whois|whois.afilias-srs.net
:whois|whois.nic.statebank
\.statebank$
 
:whois|whois.nic.ftr
\.ftr$
 
#:whois|whois.afilias-srs.net
:whois|whois.nic.xn--5tzm5g
\.xn--5tzm5g$
 
:whois|whois.nic.mls
\.mls$
 
:whois|whois.afilias-srs.net
\.progressive$
 
:whois|whois.nic.lipsy
\.lipsy$
 
:whois|whois.nic.next
\.next$
 
:whois|whois.nic.nextdirect
\.nextdirect$
 
:whois|whois.nic.olayan
\.olayan$
 
:whois|whois.nic.warman
\.warman$
 
:whois|whois.nic.xn--mgba7c0bbn0a
\.xn--mgba7c0bbn0a$
 
:whois|whois.nic.olayangroup
\.olayangroup$
 
:whois|whois.nic.flir
\.flir$
 
#:whois|whois-dub.mm-registry.com
:whois|whois.nic.dds
\.dds$
 
#:whois|whois.afilias-srs.net
:whois|whois.nic.metlife
\.metlife$
 
#:whois|whois.afilias-srs.net
:whois|whois.nic.nowtv
\.nowtv$
 
#:whois|whois.afilias-srs.net
:whois|whois.nic.pccw
\.pccw$
 
#:whois|whois.afilias-srs.net
:whois|whois.nic.richardli
\.richardli$
 
#:whois|whois.afilias-srs.net
:whois|whois.nic.xn--fzys8d69uvgm
\.xn--fzys8d69uvgm$
 
#:whois|whois.afilias-srs.net
:whois|whois.nic.hkt
\.hkt$
 
:whois|whois.nic.guardian
\.guardian$
 
:whois|whois.nic.xn--w4rs40l
\.xn--w4rs40l$
 
:whois|whois.nic.blog
\.blog$
 
#:whois|whois.afilias-srs.net
:whois|whois.nic.dot
\.dot$
 
:whois|whois.nic.aetna
\.aetna$
 
:whois|whois.nic.realestate
\.realestate$
 
:whois|whois.nic.shop
\.shop$
 
:whois|whois.nic.mlb
\.mlb$
 
#:whois|whois.afilias-srs.net
:whois|whois.nic.dtv
\.dtv$
 
#:whois|whois.afilias-srs.net
:whois|whois.nic.locker
\.locker$
 
#:whois|whois.afilias-srs.net
:whois|whois.nic.ollo
\.ollo$
 
#:whois|whois.afilias-srs.net
:whois|whois.nic.ott
\.ott$
 
:whois|whois.nic.mattel
\.mattel$
 
:whois|whois.nic.netflix
\.netflix$
 
#:whois|whois.afilias-srs.net
:whois|whois.nic.ups
\.ups$
 
:whois|whois.nic.dhl
\.dhl$
 
#:whois|whois.rightside.co
:whois|whois.nic.games
\.games$
 
:whois|whois.nic.gmo
\.hisamitsu$
 
:whois|whois.nic.gmo
\.pioneer$
 
:whois|whois.nic.zappos
\.zappos$
 
:whois|whois.nic.audible
\.audible$
 
:whois|whois.nic.chintai
\.chintai$
 
:whois|whois.nic.deal
\.deal$
 
:notice||Disallocated by IANA
\.epost$
 
:whois|whois.nic.fire
\.fire$
 
:whois|whois.nic.imdb
\.imdb$
 
:whois|whois.nic.kindle
\.kindle$
 
:whois|whois.nic.now
\.now$
 
:whois|whois.nic.prime
\.prime$
 
:whois|whois.nic.save
\.save$
 
:whois|whois.nic.silk
\.silk$
 
:whois|whois.nic.tdk
\.tdk$
 
:whois|whois.eu
\.xn--e1a4c$
 
:whois|whois.nic.airbus
\.airbus$
 
:whois|whois.nic.alstom
\.alstom$
 
#:whois|whois.afilias-srs.net
:whois|whois.nic.dunlop
\.dunlop$
 
:whois|whois.nic.dupont
\.dupont$
 
:whois|whois.nic.ericsson
\.ericsson$
 
#:whois|whois.afilias-srs.net
:whois|whois.nic.goodyear
\.goodyear$
 
#:whois|whois.afilias-srs.net
:whois|whois.nic.kosher
\.kosher$
 
#:whois|whois.ksregistry.net
:whois|whois.nic.cam
\.cam$
 
:whois|whois.nic.lego
\.lego$
 
:whois|whois.nic.able
\.able$
 
:whois|whois.nic.anz
\.anz$
 
:notice||Disallocated by IANA
\.blanco$
 
:whois|whois.afilias-srs.net
\.itv$
 
#:whois|whois.donuts.co
:whois|whois.nic.shopping
\.shopping$
 
:notice||Disallocated by IANA
\.orientexpress$
 
#:whois|whois.centralnic.com
:whois|whois.nic.art
\.art$
 
:whois|whois.nic.cookingchannel
\.cookingchannel$
 
:whois|whois.nic.foodnetwork
\.foodnetwork$
 
:whois|whois.nic.frontdoor
\.frontdoor$
 
:whois|whois.nic.hgtv
\.hgtv$
 
:whois|whois.nic.nfl
\.nfl$
 
:whois|whois.nic.politie
\.politie$
 
:whois|whois.nic.travelchannel
\.travelchannel$
 
:whois|whois.nic.woodside
\.woodside$
 
:whois|whois.nic.farmers
\.farmers$
 
#:whois|whois.afilias-srs.net
:whois|whois.nic.fedex
\.fedex$
 
:whois|whois.ikano.tld-box.at
\.ikano$
 
#:whois|whois.afilias-srs.net
:whois|whois.nic.pnc
\.pnc$
 
:whois|whois.nic.cbre
\.cbre$
 
:whois|whois.nic.shangrila
\.shangrila$
 
:whois|whois.nic.xn--5su34j936bgsg
\.xn--5su34j936bgsg$
 
:whois|whois.imena.bg
\.xn--90ae$
 
:notice||Disallocated by IANA
\.zippo$
 
:whois|whois.afilias-srs.net
\.mit$
 
:whois|whois.nic.comcast
\.comcast$
 
:whois|whois.nic.gmo
\.fujitsu$
 
:whois|whois.afilias-srs.net
\.godaddy$
 
:whois|whois.nic.gmo
\.mitsubishi$
 
:whois|whois.nic.xfinity
\.xfinity$
 
:whois|whois.nic.nike
\.nike$
 
:whois|whois.nic.ses
\.ses$
 
:whois|whois.nic.intuit
\.intuit$
 
:whois|whois.nic.macys
\.macys$
 
:whois|whois.nic.mint
\.mint$
 
:whois|whois.afilias-srs.net
\.allstate$
 
:notice||Disallocated by IANA
\.goodhands$
 
:whois|whois.nic.lefrak
\.lefrak$
 
:whois|whois.nic.bbt
\.bbt$
 
:whois|whois.nic.beauty
\.beauty$
 
:whois|whois.nic.fujixerox
\.fujixerox$
 
:whois|whois.nic.homegoods
\.homegoods$
 
:whois|whois.nic.homesense
\.homesense$
 
:whois|whois.nic.lancome
\.lancome$
 
:whois|whois.nic.lundbeck
\.lundbeck$
 
:whois|whois.nic.marshalls
\.marshalls$
 
:whois|whois.nic.nationwide
\.nationwide$
 
:whois|whois.nic.onyourside
\.onyourside$
 
:whois|whois.nic.gmo
\.panasonic$
 
:whois|whois.nic.pfizer
\.pfizer$
 
#:whois|whois-gtld.smart.com.ph
:whois|whois.nic.smart
\.smart$
 
:whois|whois.nic.staples
\.staples$
 
:whois|whois.nic.tjmaxx
\.tjmaxx$
 
:whois|whois.nic.tjx
\.tjx$
 
:whois|whois.nic.tkmaxx
\.tkmaxx$
 
:whois|whois.nic.vivo
\.vivo$
 
:whois|whois.nic.winners
\.winners$
 
#:whois|whois.afilias-srs.net
:whois|whois.nic.bestbuy
\.bestbuy$
 
:whois|whois.nic.lpl
\.lpl$
 
:whois|whois.nic.lplfinancial
\.lplfinancial$
 
:whois|whois.nic.tiaa
\.tiaa$
 
#:whois|whois.donuts.co
:whois|whois.nic.doctor
\.doctor$
 
:whois|whois.nic.duck
\.duck$
 
:whois|whois.nic.ieee
\.ieee$
 
:whois|whois.nic.off
\.off$
 
:whois|whois.nic.raid
\.raid$
 
:whois|whois.nic.rightathome
\.rightathome$
 
:whois|whois.nic.scjohnson
\.scjohnson$
 
:whois|whois.nic.swiftcover
\.swiftcover$
 
:whois|whois.nic.amfam
\.amfam$
 
:whois|whois.nic.booking
\.booking$
 
:whois|whois.nic.citadel
\.citadel$
 
:whois|whois.nic.duns
\.duns$
 
:whois|whois.afilias-srs.net
\.esurance$
 
:whois|whois.nic.msd
\.msd$
 
:whois|whois.nic.americanfamily
\.americanfamily$
 
:whois|whois.nic.honeywell
\.honeywell$
 
:whois|whois.nic.abc
\.abc$
 
:whois|whois.nic.banamex
\.banamex$
 
:whois|whois.afilias-srs.net
\.chrysler$
 
:whois|whois.nic.citi
\.citi$
 
:whois|whois.nic.discover
\.discover$
 
:whois|whois.nic.glade
\.glade$
 
:whois|whois.nic.hyatt
\.hyatt$
 
:whois|whois.nic.intel
\.intel$
 
:whois|whois.afilias-srs.net
\.jeep$
 
:whois|whois.nic.pramerica
\.pramerica$
 
:whois|whois.nic.pru
\.pru$
 
:whois|whois.nic.prudential
\.prudential$
 
:whois|whois.afilias-srs.net
\.srt$
 
:whois|whois.afilias-srs.net
\.uconnect$
 
:whois|whois.nic.visa
\.visa$
 
:whois|whois.nic.ladbrokes
\.ladbrokes$
 
:whois|whois.nic.afamilycompany
\.afamilycompany$
 
:whois|whois.nic.lilly
\.lilly$
 
#:whois|whois.afilias-srs.net
:whois|whois.nic.mckinsey
\.mckinsey$
 
:whois|whois.afilias-srs.net
\.alfaromeo$
 
:whois|whois.nic.bofa
\.bofa$
 
#:whois|whois.afilias-srs.net
:whois|whois.nic.ferrari
\.ferrari$
 
:whois|whois.afilias-srs.net
\.fiat$
 
:whois|whois.nic.juniper
\.juniper$
 
:whois|whois.afilias-srs.net
\.mopar$
 
:whois|whois.nic.nba
\.nba$
 
:whois|whois.afilias-srs.net
\.abarth$
 
:whois|whois.nic.athleta
\.athleta$
 
:whois|whois.nic.bananarepublic
\.bananarepublic$
 
#:whois|whois.afilias-srs.net
:whois|whois.nic.blockbuster
\.blockbuster$
 
:whois|whois.nic.calvinklein
\.calvinklein$
 
:whois|whois.afilias-srs.net
\.cbs$
 
:whois|whois.afilias-srs.net
\.dodge$
 
:whois|whois.nic.fidelity
\.fidelity$
 
:whois|whois.nic.gap
\.gap$
 
:whois|whois.afilias-srs.net
\.lancia$
 
#:whois|whois.afilias-srs.net
:whois|whois.nic.latino
\.latino$
 
:whois|whois.nic.loft
\.loft$
 
#:whois|whois.afilias-srs.net
:whois|whois.nic.maserati
\.maserati$
 
:whois|whois.nic.oldnavy
\.oldnavy$
 
:whois|whois.nic.qvc
\.qvc$
 
:whois|whois.afilias-srs.net
\.showtime$
 
:whois|whois.nic.target
\.target$
 
:whois|whois.nic.americanexpress
\.americanexpress$
 
:whois|whois.nic.amex
\.amex$
 
#:whois|whois.nic.mcd
:notice||Disallocated by IANA
\.mcd$
 
#:whois|whois.nic.mcdonalds
:notice||Disallocated by IANA
\.mcdonalds$
 
:whois|whois.nic.open
\.open$
 
:whois|whois.nic.capitalone
\.capitalone$
 
#:whois|whois.afilias-srs.net
:whois|whois.nic.dish
\.dish$
 
:whois|whois.nic.hot
\.hot$
 
#:whois|whois.afilias-srs.net
:whois|whois.nic.hughes
\.hughes$
 
:whois|whois.nic.pay
\.pay$
 
:whois|whois.nic.secure
\.secure$
 
#:whois|whois.afilias-srs.net
:whois|whois.nic.sling
\.sling$
 
:whois|whois.nic.asda
\.asda$
 
:whois|whois.nic.hbo
\.hbo$
 
:whois|whois.afilias-srs.net
\.aigo$
 
#:whois|whois.afilias-srs.net
:whois|whois.nic.hdfc
\.hdfc$
 
#:whois|whois.afilias-srs.net
:whois|whois.nic.xn--3oq18vl8pn36a
\.xn--3oq18vl8pn36a$
 
:whois|whois.nic.auspost
\.auspost$
 
:whois|whois.nic.george
\.george$
 
:whois|whois.nic.nab
\.nab$
 
:whois|whois.nic.samsclub
\.samsclub$
 
:whois|whois.nic.ubank
\.ubank$
 
:whois|whois.nic.walmart
\.walmart$
 
:whois|whois.nic.diy
\.diy$
 
#:whois|whois.afilias-srs.net
:whois|whois.nic.eco
\.eco$
 
:whois|whois.nic.vanguard
\.vanguard$
 
#:whois|whois.afilias-srs.net
:whois|whois.nic.monster
\.monster$
 
:whois|whois.afilias-srs.net
\.fido$
 
:whois|whois.afilias-srs.net
\.rogers$
 
#:whois|whois.centralnic.com
:whois|whois.nic.observer
\.observer$
 
:whois|whois.nic.wow
\.wow$
 
#:whois|whois.afilias-srs.net
:whois|whois.nic.dvr
\.dvr$
 
:whois|whois.nic.xn--gk3at1e
\.xn--gk3at1e$
 
# TODO: Entry generated automatically. Needs manual check.
:notice||Whois server unknown (2019-04-28)
\.xn--54b7fta0cc$
 
:whois|whois.nic.radio
\.radio$
 
#:whois|whois.centralnic.com
:whois|whois.nic.basketball
\.basketball$
 
:whois|whois.nic.volvo
\.volvo$
 
:whois|whois.nic.baseball
\.baseball$
 
#:whois|whois.afilias-srs.net
:whois|whois.nic.case
\.case$
 
#:whois|whois.afilias-srs.net
:whois|whois.nic.caseih
\.caseih$
 
#:whois|whois.afilias-srs.net
:whois|whois.nic.iveco
\.iveco$
 
#:whois|whois.afilias-srs.net
:whois|whois.nic.newholland
\.newholland$
 
:whois|whois.nic.aol
\.aol$
 
:whois|whois.nic.free
\.free$
 
:whois|whois.nic.food
\.food$
 
# Alternative URL: http://nic.box/
#:whois|whois.aridnrs.net.au
:whois|whois.nic.box
\.box$
 
#:whois|whois.afilias-srs.net
:whois|whois.nic.cruise
\.cruise$
 
:whois|whois.nic.moto
\.moto$
 
#:whois|whois.afilias-srs.net
:whois|whois.nic.jio
\.jio$
 
#:whois|whois.afilias-srs.net
:whois|whois.nic.reliance
\.reliance$
 
#:whois|whois.afilias-srs.net
:whois|whois.nic.ril
\.ril$
 
# Alternative URL: http://nic.rmit/
#:whois|whois.aridnrs.net.au
:whois|whois.nic.rmit
\.rmit$
 
:whois|whois.nic.boston
\.boston$
 
# Alternative URL: http://nic.catholic/
#:whois|whois.aridnrs.net.au
:whois|nic.catholic
\.catholic$
 
# Alternative URL: https://whois.nic.xn--80aqecdr1a/
#:whois|whois.aridnrs.net.au
:whois|whois.nic.xn--80aqecdr1a
\.xn--80aqecdr1a$
 
# Alternative URL: https://whois.nic.xn--mgbi4ecexp/
#:whois|whois.aridnrs.net.au
:whois|whois.nic.xn--mgbi4ecexp
\.xn--mgbi4ecexp$
 
# Alternative URL: https://whois.nic.xn--tiq49xqyj/
#:whois|whois.aridnrs.net.au
:whois|whois.nic.xn--tiq49xqyj
\.xn--tiq49xqyj$
 
:whois|whois.nic.hair
\.hair$
 
#:whois|whois.donuts.co
:whois|whois.nic.hospital
\.hospital$
 
#:whois|whois.afilias-srs.net
:whois|whois.nic.data
\.data$
 
#:whois|whois.afilias-srs.net
:whois|whois.nic.mobile
\.mobile$
 
#:whois|whois.afilias-srs.net
:whois|whois.nic.phone
\.phone$
 
#:whois|whois.centralnic.com
:whois|whois.nic.fun
\.fun$
 
:whois|africa-whois.registry.net.za
\.africa$
 
# TODO: Entry generated automatically. Needs manual check.
:notice||Whois server unknown (2019-04-28)
\.xn--mgbai9azgqp6j$
 
:whois|whois.nic.hotels
\.hotels$
 
:whois|whois.centralnic.com
\.rugby$
 
:whois|whois.nic.arab
\.arab$
 
:whois|whois.nic.xn--ngbrx
\.xn--ngbrx$
 
:whois|whois.centralnic.com
\.etisalat$
 
:whois|whois.centralnic.com
\.xn--mgbaakc7dvf$
 
:whois|whois.nic.grocery
\.grocery$
 
:whois|whois.nic.google
\.map$
 
:whois|whois.nic.google
\.phd$
 
:whois|whois.nic.google
\.search$
 
:whois|whois.registry.in
\.xn--2scrj9c$
 
:whois|whois.registry.in
\.xn--3hcrj9c$
 
:whois|whois.registry.in
\.xn--45br5cyl$
 
:whois|whois.registry.in
\.xn--h2breg3eve$
 
:whois|whois.registry.in
\.xn--h2brj9c8c$
 
:whois|whois.registry.in
\.xn--mgbbh1a$
 
:whois|whois.registry.in
\.xn--mgbgu82a$
 
:whois|whois.registry.in
\.xn--rvc1e0am3e$
 
:whois|whois.nic.merckmsd
\.merckmsd$
 
:whois|whois.nic.sport
\.sport$
 
:whois|whois.nic.xn--otu796d
\.xn--otu796d$
 
:whois|whois.afilias.net
\.llc$
 
:whois|whois.nic.charity
\.charity$
 
:whois|whois.nic.inc
\.inc$
 
:whois|whois.nic.mr
\.xn--mgbah1a3hjkrd$
/trunk/main/pattern/handles
0,0 → 1,161
#: version 20120626.1.2+viathinksoft2017XXXX
 
# Handles
# --------------------------------------------------------------------
 
# RIR
 
:whois|whois.lacnic.net
-lacnic$
 
:whois|whois.afrinic.net
-afrinic$
^afrinic-
^aap
 
:whois|whois.apnic.net
-ap$
^apnic-
 
:whois|whois.apnic.net
-kr$
-krnic-
 
:whois|whois.ripe.net|prefix=-B |
^lim-
^poem-
^mnt-
-mnt$
-ripe$
-be$
-domreg$
-nic$
^irt-
^pgpkey-
 
:whois|whois.arin.net|prefix=z + |
^net(blk)?-[a-z0-9-]+$
-arin$
-hst$
 
# NIC
 
:whois|whois.nic.at
-nicat$
^at\d+$
#^at-
 
:whois|whois.ua
-uanic$
 
#:whois|whois.nic.ck
:notice||Whois server gone [Nov 2013]
-cknic$
 
# Other
 
# "The 6bone was an IPv6 testbed to assist in the evolution and deployment of IPv6. It was phased out on the 6th of June 2006 per agreements with the IETF IPv6 community.
# No 3FFE prefixes are to be in use after 6 June 2006 as these 6bone testbed prefixes have all been returned to the IANA."
# -- Source: http://www.gogo6.com/page/6bone
# :whois|whois.6bone.net
# -6bone$
 
:whois|whois.ra.net
# ??? (mar) ist "AS" ein handle von ra.net?? es steht im konflikt mit den AS-numbers
#^as\d+$
^as\d+\.\d+$
^fltr-
 
:whois|whois.aunic.net
-au$
 
# ???
:whois|whois.denic.de|prefix=-T ace,dn |
-denic$
 
# ToDo: Write parser for http://www.denic.de/de/denic/mitglieder/alldetail.html?member=DENIC-...
:notice||Denic members can only be viewed in the memberlist at http://www.denic.de/de/denic/mitglieder/mitgliederliste.html or via http://www.denic.de/en/denic/mitglieder/alldetail.html?member=DENIC-<member_id>
^denic-\d+$
 
:notice||Unknown if denic handles can be resolved. [Jan 2012]
^denic-\d+-\S+
 
:whois|whois.dk-hostmaster.dk
-dk$
 
#:cgi|http://www.nic.es/cgi-bin/consulta.whois?tipo=procesar&list=Personas&key=~query~
:notice||WhoIs service for ESNIC handles gone. Unknown if it is still available somewhere. (last checked Jan 2012)
#:whois|whois.nic.es
#This whois service needs a registration of the IP address and has a strict query limit...
-esnic$
 
:whois|whois.nic.fr
^fr-[^.]+$
 
:whois|whois.isnet.is
-is$
 
:whois|whois.nic.ad.jp|trailer=/e
# ^[^.]*jp$
^[a-z]{2}\d+jp$
^jp\d+$
 
:whois|whois.norid.no
-norid$
 
:whois|whois.ripn.net
-ripn$
 
:whois|whois.gandi.net
-gandi$
 
# Team Cymru IP->AS mapper whois
:whois|whois.cymru.com|strip=ipas |
ipas\s\S+
 
:whois|whois.nic.name|prefix=contact=
#-name$
\d+contact-name$
 
:whois|whois.nic.name|prefix=registrar=
\d+registrar-name$
 
:whois|whois.corenic.net|prefix=contact |
^co..-\d+$
 
:whois|whois.corenic.net
-cone$
 
# SIXXS handles
#:whois|whois.sixxs.net
:notice||The SixXS project has been retired in June 2017
-sixxs$
 
# MUSEUM
:whois|whois.museum|prefix=contact |
^C\d+-MUSEUM$
:whois|whois.museum
^D\d+-MUSEUM$
 
# AERO
:whois|whois.aero|prefix=contact |
#^C\d+-AERO$
-AERO$
 
# INFO
:whois|whois.afilias.info|prefix=contact |
C\d+-LRMS$
 
# ASIA
:whois|whois.nic.asia|prefix=contact |
C\d+-ASIA$
 
# RU-CENTER
:whois|whois.tcinet.ru
^RUCENTER-
^RU-CENTER-
 
# FRNIC
:whois|whois.nic.fr
-frnic$
 
/trunk/main/pattern/ipv4
0,0 → 1,131
#: version 20120626.1.2+viathinksoft2017XXXX
 
# IPv4
# --------------------------------------------------------------------
 
# Private address space (unrouteable)
 
# IANA's output is very short and not so informative
#:whois|whois.iana.org
## Link local
#=169.254/16
## LAN
#=10/8
#=172.16/12
#=192.168/16
## Loopback
#=127/8
 
:whois|whois.viathinksoft.de
=37.48.104.223/32
 
# IANA
:whois|whois.iana.org
# Multicast stuff (224/8 .. 239/8)
=224/4
# TODO: alles hieraus adden: http://www.iana.org/assignments/multicast-addresses/multicast-addresses.xml
# + http://www.iana.org/assignments/iana-ipv4-special-registry/iana-ipv4-special-registry.xml
 
# RIRs
 
# ==> See pattern/ipv4_* (automatically generated)
 
# below RIR
 
# Australia(?)
#:whois|whois.connect.com.au
#=210.8/14
 
# Japan
:whois|whois.nic.ad.jp|trailer=/e
=61.192/12
=61.208/13
=202.23/16
=202.24/14
=202.208/12
=202.224/11
=203.136/14
=203.140/15
=203.178/15
=203.180/14
=210.136/13
=210.144/12
=210.160/12
=210.188/14
=210.196/14
=210.224/12
=210.248/13
=211.0/12
=211.16/14
=211.120/13
=211.128/13
=211.140/14
=211.144/14
=218.216/14
=218.220/14
=218.224/13
 
# Korea
:whois|whois.nic.or.kr
=61.72/13
=61.80/14
=61.84/15
=61.96/12
=61.248/13
=203.224/11
=210.90/15
=210.92/14
=210.96/11
=210.128/13
=210.178/15
=210.180/14
=210.204/14
=210.216/13
=211.32/11
=211.104/13
=211.112/13
=211.168/15
=211.170/15
=211.172/14
=211.176/12
=211.192/10
=218.36/14
=218.48/13
=218.144/12
=218.232/13
=220.72/13
=220.80/13
 
# Taiwan
:whois|whois.twnic.net
=61.216/13
=61.224/13
=210.17.0/17
=210.59/16
=210.60/14
=210.65/16
=210.66/15
=210.70/15
=210.240/14
=211.20/14
=211.72/14
=218.32/16
=218.160/14
=218.164/15
 
# Brazil
:whois|whois.registro.br
=200.128/9
 
# --- Private enterprises which offer a whois service
 
# ViaThinkSoft
:whois|whois.viathinksoft.de
=95.211.38.42/32
=95.211.38.108/32
 
# ---
 
# ip last resort / everything else
:whois|whois.arin.net|prefix=z + |
=0.0.0.0/0
/trunk/main/pattern/ipv4_afrinic
0,0 → 1,588
#: version 20190429
 
# AFRINIC IPv4
# Automatically generated by /daten/homes/vwhois/v2019/maintenance/pattern-generator/gwhois-pattern-update
# Generation timestamp: 2019-04-29 13:40:58 GMT+0200
# Source: (</head><body>) ftp://ftp.iana.org/assignments/ipv4-address-space/ipv4-address-space.txt
# Source: (20190429) ftp://ftp.afrinic.net/pub/stats/afrinic/delegated-afrinic-extended-latest
 
:whois|whois.afrinic.net
=41/8
=45.96/12
=45.192/12
=45.208/13
=45.216/14
=45.220/15
=45.222/16
=45.240/13
=62.8.64/19
=62.12.96/19
=62.24.96/19
=62.61.192/18
=62.68.32/19
=62.68.224/19
=62.114/16
=62.117.32/19
=62.135/17
=62.139/16
=62.140.64/18
=62.173.32/19
=62.193.64/18
=62.193.160/19
=62.240.32/19
=62.240.96/19
=62.241.128/19
=62.251.128/17
=64.57.112/20
=66.8/17
=66.18.64/19
=66.251.128/18
=69.63.64/20
=69.67.32/20
=77.220/19
=80.67.128/20
=80.72.96/20
=80.75.160/19
=80.87.64/19
=80.88/20
=80.95/20
=80.240.192/20
=80.246/20
=80.248/20
=80.248.64/20
=80.249.64/20
=80.250.32/20
=81.4/18
=81.10/17
=81.21.96/20
=81.22.64/19
=81.26.64/20
=81.29.96/20
=81.91.224/20
=81.192/16
=82.101.128/18
=82.128/17
=82.129.128/17
=82.151.64/19
=82.201.128/17
=83.143.24/21
=84.36/16
=84.205.96/19
=84.233/17
=87.255.96/19
=102/8
=105/8
=129/16
=129.18/16
=129.45/16
=129.56/16
=129.122/16
=129.140/16
=129.205/16
=129.232/16
=137.63/16
=137.64/16
=137.115/16
=137.158/16
=137.171/16
=137.196/16
=137.214/15
=137.255/16
=139.26/16
=139.53/16
=143.128/16
=143.160/16
=146.64/16
=146.141/16
=146.182/16
=146.196.128/17
=146.230/15
=146.232/16
=147.110/16
=152.106/15
=152.108/14
=152.112/16
=154/16
=154.16/16
=154.65/16
=154.66/15
=154.68/14
=154.72/13
=154.80/12
=154.96/11
=154.128/9
=155/16
=155.11/16
=155.12/16
=155.89/16
=155.93/16
=155.159/16
=155.196/16
=155.232/13
=155.240/16
=155.251/16
=155.255/16
=156/16
=156.8/16
=156.38/16
=156.155/16
=156.156/14
=156.160/11
=156.192/10
=160/16
=160.19.36/22
=160.19.60/22
=160.19.96/21
=160.19.112/20
=160.19.128/20
=160.19.152/22
=160.19.188/22
=160.19.192/21
=160.19.232/21
=160.20.24/21
=160.20.112/22
=160.20.213/24
=160.20.217/24
=160.20.221/24
=160.20.226/23
=160.20.252/22
=160.77/16
=160.89/16
=160.90/16
=160.105/16
=160.113/16
=160.115/16
=160.116/14
=160.120/14
=160.124/16
=160.152/16
=160.154/15
=160.156/14
=160.160/12
=160.176/14
=160.181/16
=160.182/15
=160.184/16
=160.224/15
=160.226/16
=160.238.11/24
=160.238.48/23
=160.238.50/24
=160.238.57/24
=160.238.101/24
=160.242/16
=160.255/16
=161.123/16
=163.121/16
=163.195/16
=163.196/14
=163.200/14
=164.88/16
=164.146/15
=164.148/14
=164.155/16
=164.160/16
=165/16
=165.3/16
=165.4/15
=165.8/14
=165.16/16
=165.25/16
=165.49/16
=165.50/15
=165.52/14
=165.56/13
=165.73/16
=165.90/16
=165.143/16
=165.144/14
=165.148/15
=165.165/16
=165.169/16
=165.180/16
=165.210/15
=165.231/16
=165.233/16
=165.255/16
=166.85/16
=168.76/16
=168.80/15
=168.89/16
=168.128/16
=168.142/16
=168.155/16
=168.164/16
=168.167/16
=168.172/16
=168.206/16
=168.209/16
=168.210/15
=168.253/16
=169/15
=169.129/16
=169.159/16
=169.202/16
=169.239/16
=169.255/16
=192.12.110/23
=192.12.116/23
=192.33.10/24
=192.42.99/24
=192.47.36/24
=192.48.253/24
=192.51.240/24
=192.52.232/24
=192.68.138/24
=192.70.200/23
=192.70.237/24
=192.75.236/24
=192.82.142/24
=192.83.208/21
=192.84.244/24
=192.91.200/24
=192.94.61/24
=192.94.210/24
=192.94.240/23
=192.94.246/24
=192.96.1/24
=192.96.2/23
=192.96.4/22
=192.96.8/21
=192.96.16/24
=192.96.19/24
=192.96.20/23
=192.96.22/24
=192.96.24/21
=192.96.32/22
=192.96.37/24
=192.96.38/23
=192.96.40/24
=192.96.43/24
=192.96.45/24
=192.96.46/23
=192.96.48/21
=192.96.56/23
=192.96.58/24
=192.96.60/23
=192.96.68/22
=192.96.72/24
=192.96.74/23
=192.96.76/23
=192.96.79/24
=192.96.80/20
=192.96.96/22
=192.96.100/23
=192.96.102/24
=192.96.104/21
=192.96.112/20
=192.96.128/22
=192.96.132/23
=192.96.134/24
=192.96.138/23
=192.96.140/23
=192.96.142/24
=192.96.144/24
=192.96.146/23
=192.96.148/22
=192.96.152/22
=192.96.158/24
=192.96.164/22
=192.96.177/24
=192.96.178/23
=192.96.180/22
=192.96.184/21
=192.96.193/24
=192.96.194/23
=192.96.196/22
=192.96.224/21
=192.96.232/24
=192.96.234/23
=192.96.236/22
=192.96.240/22
=192.96.245/24
=192.96.246/23
=192.96.248/22
=192.96.252/23
=192.96.254/24
=192.100.1/24
=192.101.142/24
=192.102.9/24
=192.109.242/24
=192.133.250/24
=192.136.55/24
=192.136.56/23
=192.142/15
=192.145.128/18
=192.145.230/24
=192.157.190/24
=192.188.164/22
=192.189.75/24
=192.189.139/24
=192.189.140/24
=192.231.237/24
=192.231.254/24
=192.245.148/24
=192.251.202/24
=193.17.215/24
=193.19.232/22
=193.41.146/23
=193.95/17
=193.108.23/24
=193.108.28/24
=193.108.214/24
=193.108.252/22
=193.109.66/23
=193.110.104/23
=193.188.7/24
=193.189/18
=193.189.64/23
=193.189.128/24
=193.194.1/24
=193.194.2/23
=193.194.4/23
=193.194.32/19
=193.194.64/19
=193.194.128/24
=193.194.160/19
=193.221.218/24
=193.227/18
=193.227.128/24
=194.6.224/24
=194.9.64/23
=194.9.82/23
=194.79.96/19
=194.204.192/18
=195.24.80/21
=195.24.192/19
=195.39.218/23
=195.43/19
=195.166.224/19
=195.202.64/19
=195.234.120/22
=195.234.168/24
=195.234.185/24
=195.234.252/22
=195.246.32/19
=196/16
=196.1/24
=196.1.4/24
=196.1.7/24
=196.1.8/21
=196.1.16/20
=196.1.32/19
=196.1.71/24
=196.1.74/23
=196.1.76/22
=196.1.80/20
=196.1.96/21
=196.1.115/24
=196.1.116/22
=196.1.120/21
=196.1.128/22
=196.1.132/23
=196.1.137/24
=196.1.143/24
=196.1.144/20
=196.1.176/20
=196.1.192/18
=196.2.2/23
=196.2.8/21
=196.2.16/20
=196.2.32/19
=196.2.64/18
=196.2.128/17
=196.3.14/23
=196.3.57/24
=196.3.58/23
=196.3.60/22
=196.3.64/24
=196.3.90/24
=196.3.92/23
=196.3.94/24
=196.3.96/21
=196.3.105/24
=196.3.107/24
=196.3.108/22
=196.3.112/20
=196.3.128/22
=196.3.148/22
=196.3.154/23
=196.3.156/22
=196.3.160/20
=196.3.176/21
=196.3.224/19
=196.4/19
=196.4.32/21
=196.4.40/22
=196.4.44/23
=196.4.71/24
=196.4.72/21
=196.4.80/20
=196.4.96/19
=196.4.128/17
=196.5/16
=196.6/15
=196.8/14
=196.12.10/23
=196.12.12/22
=196.12.16/20
=196.12.128/19
=196.12.192/18
=196.13/16
=196.14/16
=196.15/20
=196.15.64/18
=196.15.128/17
=196.16/13
=196.24/15
=196.26/16
=196.27.64/18
=196.27.128/17
=196.28/19
=196.28.32/20
=196.28.64/18
=196.28.128/17
=196.29/18
=196.29.96/19
=196.29.128/17
=196.30/15
=196.32.8/21
=196.32.16/20
=196.32.96/19
=196.32.160/19
=196.32.192/18
=196.33/16
=196.34/15
=196.36/14
=196.40.96/19
=196.40.128/17
=196.41/16
=196.42.64/18
=196.42.128/17
=196.43/16
=196.44/14
=196.48/12
=196.64/10
=196.128/10
=196.192/12
=196.208/13
=196.216/24
=196.216.2/23
=196.216.4/22
=196.216.8/21
=196.216.16/20
=196.216.32/19
=196.216.64/18
=196.216.128/17
=196.217/16
=196.218/15
=196.220/14
=196.224/11
=197/8
=198.54.1/24
=198.54.2/23
=198.54.4/22
=198.54.8/23
=198.54.10/24
=198.54.15/24
=198.54.16/20
=198.54.32/20
=198.54.48/21
=198.54.56/22
=198.54.60/23
=198.54.64/20
=198.54.80/24
=198.54.83/24
=198.54.84/22
=198.54.91/24
=198.54.98/23
=198.54.141/24
=198.54.142/23
=198.54.144/21
=198.54.154/23
=198.54.156/22
=198.54.160/22
=198.54.165/24
=198.54.170/24
=198.54.173/24
=198.54.174/23
=198.54.176/22
=198.54.180/23
=198.54.183/24
=198.54.184/21
=198.54.192/21
=198.54.202/23
=198.54.204/22
=198.54.208/23
=198.54.210/24
=198.54.219/24
=198.54.220/24
=198.54.223/24
=198.54.225/24
=198.54.226/23
=198.54.228/23
=198.54.231/24
=198.54.232/24
=198.54.234/24
=198.54.247/24
=198.54.248/22
=198.54.252/23
=198.54.254/24
=200.16.8/21
=202.123/19
=204.8.204/22
=204.12.128/20
=204.87.179/24
=204.152.14/23
=204.235.32/21
=204.235.40/22
=205.159.79/24
=206.223.136/24
=208.85.156/22
=209.203/18
=209.212.96/19
=212.0.128/19
=212.12.224/19
=212.22.160/19
=212.49.64/19
=212.52.128/19
=212.60.64/19
=212.85.192/19
=212.88.96/19
=212.96/19
=212.100.64/19
=212.103.160/19
=212.122.224/19
=212.217/17
=213.55.64/18
=213.131.64/19
=213.136.96/19
=213.147.64/19
=213.150.96/19
=213.150.160/19
=213.150.192/19
=213.152.64/19
=213.154.32/19
=213.154.64/19
=213.158.160/19
=213.172.128/19
=213.179.160/19
=213.181.224/19
=213.193.32/19
=213.212.192/18
=213.247/19
=213.255.128/19
=216.236.176/20
=217.14.80/20
=217.20.224/20
=217.21.112/20
=217.29.128/20
=217.29.208/20
=217.52/14
=217.64.96/20
=217.77.64/20
=217.78.64/20
=217.117/20
=217.139/16
=217.170.144/20
=217.199.144/20
/trunk/main/pattern/ipv4_apnic
0,0 → 1,2321
#: version 20190428
 
# APNIC IPv4
# Automatically generated by /daten/homes/vwhois/v2019/maintenance/pattern-generator/gwhois-pattern-update
# Generation timestamp: 2019-04-29 13:40:59 GMT+0200
# Source: (</head><body>) ftp://ftp.iana.org/assignments/ipv4-address-space/ipv4-address-space.txt
# Source: (20190428) ftp://ftp.apnic.net/pub/stats/apnic/delegated-apnic-extended-latest
 
:whois|whois.apnic.net
=1/8
=5.28.32/21
=8.128/10
=8.208/12
=14/10
=14.64/11
=14.96/14
=14.100/15
=14.102/17
=14.102.128/19
=14.102.160/21
=14.102.168/22
=14.102.176/20
=14.102.192/18
=14.103/16
=14.104/13
=14.112/12
=14.128/9
=23.106.120/21
=23.111.12/22
=23.226/20
=23.232.128/17
=24.41.112/20
=24.53.192/19
=24.230/19
=24.235.24/21
=27/10
=27.64/11
=27.96/13
=27.104/14
=27.108/15
=27.110.20/22
=27.110.24/21
=27.110.32/19
=27.110.64/18
=27.110.128/17
=27.111/16
=27.112/12
=27.128/9
=36/9
=36.128/10
=36.192/11
=36.224/12
=36.240/13
=36.248/14
=36.252/15
=36.254/16
=36.255/18
=36.255.64/20
=36.255.80/21
=36.255.88/22
=36.255.96/19
=36.255.128/17
=37.111/16
=39/8
=40.72/15
=40.125.128/17
=40.126.64/18
=42/8
=43/9
=43.128/10
=43.192/11
=43.224/16
=43.225/18
=43.225.64/19
=43.225.96/20
=43.225.116/22
=43.225.120/21
=43.225.128/17
=43.226/15
=43.228/15
=43.230/16
=43.231/21
=43.231.8/22
=43.231.16/20
=43.231.32/19
=43.231.64/18
=43.231.128/17
=43.232/13
=43.240/15
=43.242/16
=43.243/18
=43.243.64/20
=43.243.80/22
=43.243.88/21
=43.243.96/19
=43.243.128/17
=43.244/14
=43.248/15
=43.250/16
=43.251/17
=43.251.128/19
=43.251.164/22
=43.251.168/21
=43.251.176/20
=43.251.192/18
=43.252/14
=45.40.192/18
=45.64/16
=45.65/18
=45.75/17
=45.112/15
=45.114/18
=45.114.64/19
=45.114.96/20
=45.114.112/21
=45.114.124/22
=45.114.128/18
=45.114.192/19
=45.114.228/22
=45.114.232/21
=45.114.240/20
=45.115/16
=45.116/15
=45.118/16
=45.119/17
=45.119.128/18
=45.119.192/20
=45.119.212/22
=45.119.216/21
=45.119.224/19
=45.120/13
=45.248/15
=45.250/20
=45.250.16/21
=45.250.28/22
=45.250.32/19
=45.250.64/18
=45.250.128/17
=45.251/16
=45.252/14
=46.149.192/20
=47.8/15
=47.11/16
=47.15/16
=47.29/16
=47.30/15
=47.92/14
=47.96/11
=47.247/16
=49/13
=49.8/14
=49.14/15
=49.16/12
=49.32/11
=49.64/10
=49.128/9
=52.80/14
=52.128.224/19
=52.130/15
=54.222/15
=58/7
=60/8
=61/13
=61.8/14
=61.12/15
=61.14/17
=61.14.128/18
=61.14.192/19
=61.14.228/22
=61.14.232/21
=61.14.240/20
=61.15/16
=61.16/12
=61.32/11
=61.64/10
=61.128/9
=62.234/16
=63.140/20
=64.33/18
=64.63.64/18
=64.119.16/20
=64.120.110/23
=64.120.112/21
=64.120.120/23
=64.188.32/20
=64.207.208/21
=65.18.112/20
=65.99/18
=65.99.64/19
=65.181.64/19
=66.42.32/19
=66.96.192/18
=66.133.80/20
=66.181.160/19
=66.203.144/20
=66.228/20
=66.232/20
=66.234.160/20
=67.158.52/24
=67.213.140/22
=67.215.112/20
=68.65.228/22
=68.65.232/21
=68.79/18
=69.6.64/20
=69.72.80/21
=69.94.32/20
=69.94.80/20
=69.94.96/20
=69.160/19
=69.160.168/21
=69.172.64/19
=69.194.160/20
=69.230.192/18
=69.231.128/18
=69.234.192/18
=69.235.128/18
=70.34.58/24
=71.131.192/18
=71.132/18
=71.136.64/18
=71.137/18
=72.35.248/22
=72.35.252/23
=72.255/18
=72.255.224/19
=74.50.208/21
=74.114.48/22
=74.118.80/22
=76.77.48/20
=81.23.208/20
=81.68/14
=82.156/15
=87.247.160/21
=91.212.132/24
=92.202/15
=94.190.208/20
=94.190.224/20
=94.191/17
=96.9.64/19
=96.9.160/19
=96.30.64/18
=101/11
=101.32/12
=101.48/13
=101.64/10
=101.128/9
=103/13
=103.8/15
=103.10/16
=103.11/18
=103.11.68/22
=103.11.72/21
=103.11.80/20
=103.11.96/19
=103.11.128/17
=103.12/17
=103.12.128/18
=103.12.192/20
=103.12.208/22
=103.12.216/21
=103.12.224/19
=103.13/16
=103.14/15
=103.16/15
=103.18/16
=103.19/18
=103.19.64/20
=103.19.80/22
=103.19.88/21
=103.19.96/19
=103.19.128/17
=103.20/14
=103.24/16
=103.25/17
=103.25.128/18
=103.25.192/19
=103.25.224/22
=103.25.228/23
=103.25.231/24
=103.25.232/21
=103.25.240/20
=103.26/17
=103.26.128/21
=103.26.136/22
=103.26.144/20
=103.26.160/19
=103.26.192/18
=103.27/16
=103.28/18
=103.28.64/22
=103.28.72/21
=103.28.80/20
=103.28.96/19
=103.28.128/17
=103.29/16
=103.30/15
=103.32/13
=103.40/14
=103.44/15
=103.46/16
=103.47/19
=103.47.32/20
=103.47.48/21
=103.47.56/22
=103.47.60/23
=103.47.64/18
=103.47.128/17
=103.48/13
=103.56/14
=103.60/21
=103.60.8/22
=103.60.16/20
=103.60.32/19
=103.60.64/18
=103.60.128/17
=103.61/16
=103.62/15
=103.64/10
=103.128/10
=103.192/14
=103.196/17
=103.196.128/19
=103.196.160/20
=103.196.176/22
=103.196.184/21
=103.196.192/18
=103.197/16
=103.198/15
=103.200/14
=103.204/15
=103.206/18
=103.206.64/20
=103.206.80/22
=103.206.88/21
=103.206.96/19
=103.206.128/17
=103.207/16
=103.208/12
=103.224/16
=103.225/17
=103.225.128/18
=103.225.192/21
=103.225.204/22
=103.225.208/20
=103.225.224/19
=103.226/15
=103.228/15
=103.230/16
=103.231/17
=103.231.128/21
=103.231.140/22
=103.231.144/20
=103.231.160/19
=103.231.192/18
=103.232/17
=103.232.128/18
=103.232.192/21
=103.232.200/22
=103.232.204/23
=103.232.208/20
=103.232.224/19
=103.233/16
=103.234/15
=103.236/14
=103.240/16
=103.241/18
=103.241.64/19
=103.241.96/21
=103.241.104/22
=103.241.112/20
=103.241.128/17
=103.242/17
=103.242.128/18
=103.242.196/22
=103.242.200/21
=103.242.208/20
=103.242.224/19
=103.243/16
=103.244/14
=103.248/15
=103.250/16
=103.251/17
=103.251.128/19
=103.251.160/22
=103.251.168/21
=103.251.176/20
=103.251.192/18
=103.252/18
=103.252.64/20
=103.252.80/21
=103.252.92/22
=103.252.96/19
=103.252.128/17
=103.253/18
=103.253.64/19
=103.253.100/22
=103.253.104/21
=103.253.112/20
=103.253.128/17
=103.254/15
=104.161.128/17
=104.200.112/20
=104.250.32/19
=104.251.144/20
=106/8
=107.153/16
=109.236/20
=109.244/16
=110/7
=112/8
=113/9
=113.128/10
=113.192/13
=113.200/15
=113.202/16
=113.203.192/18
=113.204/14
=113.208/12
=113.224/11
=114/7
=116/9
=116.128/10
=116.192/13
=116.200/15
=116.204/14
=116.208/12
=116.224/11
=117/8
=118/7
=120/6
=124/8
=125/11
=125.32/12
=125.48/13
=125.56/14
=125.60/15
=125.62/18
=125.62.64/21
=125.62.76/22
=125.62.80/20
=125.62.96/19
=125.62.128/17
=125.63/16
=125.64/10
=125.128/9
=126/8
=128.22/16
=128.27/16
=128.28/16
=128.53/16
=128.94/16
=128.106/16
=128.108/16
=128.134/16
=128.184/15
=128.250/16
=129.28/16
=129.60/16
=129.78/16
=129.94/16
=129.96/16
=129.126/15
=129.136/16
=129.180/16
=129.204/16
=129.211/16
=129.226/16
=129.249/16
=129.254/16
=130.26/16
=130.34/16
=130.54/16
=130.56/16
=130.69/16
=130.87/16
=130.95/16
=130.102/16
=130.105/16
=130.116/16
=130.123/16
=130.130/16
=130.153/16
=130.155/16
=130.158/16
=130.194/15
=130.216/15
=130.220/16
=130.248.108/22
=130.248.112/20
=131.112/15
=131.129/16
=131.147/16
=131.170/16
=131.172/16
=131.181/16
=131.185/16
=131.203/16
=131.206/16
=131.213/16
=131.217/16
=131.236/16
=131.242/16
=131.244/15
=131.248/16
=132.147.64/18
=132.154/16
=132.179/16
=132.181/16
=132.182/16
=132.222/16
=132.232/16
=132.234/16
=133/8
=134.7/16
=134.18/16
=134.42.224/22
=134.75/16
=134.115/16
=134.144/16
=134.148/16
=134.159/16
=134.160/16
=134.175/16
=134.178/16
=134.180/16
=134.196/16
=134.208/16
=134.211/16
=134.236/15
=134.242.224/19
=135.84.232/21
=135.84.240/20
=135.149/16
=136.22.32/19
=136.143.224/19
=136.153/16
=136.154/16
=136.158/17
=136.185/16
=136.186/15
=136.198/16
=136.228.128/19
=136.228.160/20
=136.232/15
=137.59/16
=137.68/16
=137.76/16
=137.92/16
=137.97/16
=137.109/16
=137.111/16
=137.132/16
=137.147/16
=137.153/16
=137.154/16
=137.157/16
=137.166/16
=137.172/16
=137.189/16
=137.219/16
=138.7/16
=138.19/16
=138.24/15
=138.30/16
=138.44/16
=138.64/16
=138.71/16
=138.75/16
=138.77/16
=138.79/16
=138.80/16
=138.101/16
=138.107/16
=138.130/16
=138.194/16
=138.211/16
=138.212/15
=138.217/16
=138.235/16
=138.239/16
=138.243/16
=138.252/16
=139/16
=139.5/16
=139.9/16
=139.44/16
=139.59/16
=139.80/16
=139.86/16
=139.101/16
=139.129/16
=139.130/16
=139.132/16
=139.134/16
=139.148/16
=139.150/16
=139.152/16
=139.154/15
=139.159/16
=139.163/16
=139.167/16
=139.168/16
=139.170/16
=139.175/16
=139.176/16
=139.180.8/21
=139.180.64/18
=139.180.128/18
=139.180.192/19
=139.183/16
=139.186/16
=139.188/15
=139.190/16
=139.192/12
=139.208/13
=139.216/14
=139.220/15
=139.223/16
=139.224/16
=139.226/15
=139.228/16
=139.230/16
=139.255/16
=140/16
=140.75/16
=140.79/16
=140.81/16
=140.82.192/20
=140.83/16
=140.92/16
=140.96/16
=140.109/16
=140.110/15
=140.112/12
=140.128/13
=140.136/15
=140.138/16
=140.143/16
=140.149/16
=140.159/16
=140.168/16
=140.179/16
=140.200/16
=140.205/16
=140.206/15
=140.210/16
=140.213/16
=140.224/16
=140.227/16
=140.237/16
=140.240/16
=140.243/16
=140.246/16
=140.249/16
=140.250/16
=140.253/16
=140.255/16
=141.103/16
=141.120/16
=141.132/16
=141.168/16
=141.178/16
=141.193.40/22
=141.193.152/21
=141.223/16
=141.229/16
=141.243/16
=143.64/16
=143.89/16
=143.90/16
=143.92/17
=143.94/16
=143.96/16
=143.119/16
=143.125/16
=143.136/16
=143.171/16
=143.174/16
=143.188/15
=143.192.96/19
=143.201/16
=143.216/16
=143.218/16
=143.221/16
=143.238/16
=143.248/16
=143.253/16
=144/15
=144.6/15
=144.12/16
=144.16/16
=144.36.70/23
=144.36.72/23
=144.36.104/24
=144.36.128/23
=144.36.134/23
=144.36.140/23
=144.36.144/23
=144.36.148/23
=144.36.176/24
=144.36.178/24
=144.36.182/23
=144.36.184/23
=144.36.188/23
=144.36.206/23
=144.36.210/23
=144.36.214/23
=144.36.216/23
=144.36.220/22
=144.36.224/21
=144.36.232/22
=144.36.236/24
=144.36.244/23
=144.36.248/22
=144.36.254/23
=144.48/19
=144.48.32/20
=144.48.48/21
=144.48.56/22
=144.48.64/18
=144.48.128/17
=144.52/15
=144.55/16
=144.66/16
=144.79/16
=144.97/16
=144.110/16
=144.120/16
=144.123/16
=144.130/15
=144.132/14
=144.136/14
=144.140/16
=144.199/16
=144.205/16
=144.213/16
=144.214/16
=144.218/16
=144.255/16
=146.11/16
=146.51/16
=146.56/16
=146.62/16
=146.88.16/21
=146.88.24/22
=146.88.28/24
=146.88.32/19
=146.88.64/19
=146.88.128/21
=146.88.144/22
=146.88.152/21
=146.88.160/20
=146.88.196/22
=146.88.200/21
=146.99/16
=146.116/15
=146.118/16
=146.144/16
=146.160/16
=146.171/16
=146.178/16
=146.195/16
=146.196/17
=146.221/16
=147.6/16
=147.8/16
=147.10/16
=147.41/16
=147.43/16
=147.46/15
=147.50/16
=147.66/16
=147.69/16
=147.76/16
=147.92.32/20
=147.92.128/17
=147.109/16
=147.132/16
=147.145/16
=147.157/16
=147.158/16
=147.176/16
=147.192/16
=147.200/16
=147.209/16
=147.211/16
=147.212/16
=148.7/16
=148.59.57/24
=148.66/19
=148.66.48/20
=148.66.64/18
=148.66.128/19
=148.67/16
=148.68/16
=148.70/16
=148.145/16
=148.161/16
=148.182/16
=148.195/16
=149.54/16
=149.129/16
=149.135/16
=149.144/16
=149.167/16
=149.171/16
=149.176/16
=149.234.128/18
=150/10
=150.64/11
=150.96/14
=150.100/15
=150.107/17
=150.107.128/18
=150.107.192/21
=150.107.204/22
=150.107.208/20
=150.107.224/19
=150.109/16
=150.115/16
=150.116/15
=150.121/16
=150.122/16
=150.129/21
=150.129.12/22
=150.129.16/20
=150.129.32/19
=150.129.64/18
=150.129.128/17
=150.138/15
=150.147/16
=150.150/15
=150.158/16
=150.173/16
=150.183/16
=150.191/16
=150.197/16
=150.203/16
=150.206/15
=150.223/16
=150.229/16
=150.242/18
=150.242.64/20
=150.242.80/21
=150.242.92/22
=150.242.96/19
=150.242.128/18
=150.242.192/20
=150.242.208/21
=150.242.216/22
=150.242.224/19
=150.246/16
=150.249/16
=150.255/16
=151.130/16
=151.158/16
=151.172/16
=151.178/16
=151.210.128/17
=152.32.64/18
=152.32.128/17
=152.52/16
=152.56/14
=152.76/16
=152.83/16
=152.91/16
=152.98/15
=152.101/16
=152.102/15
=152.104/16
=152.118/16
=152.136/16
=152.147/16
=152.149/16
=152.153/16
=152.165/16
=152.226/16
=153/16
=153.3/16
=153.20/16
=153.34/15
=153.36/15
=153.99/16
=153.101/16
=153.107/16
=153.111/16
=153.118/15
=153.120/13
=153.128/9
=154.8.48/20
=154.8.128/17
=154.10/16
=154.33/16
=154.34/16
=155.32/16
=155.35.1/24
=155.35.34/23
=155.35.46/23
=155.35.226/24
=155.35.232/24
=155.59/16
=155.60/16
=155.62/16
=155.69/16
=155.71/16
=155.143/16
=155.144/16
=155.160/16
=155.187/16
=155.205/16
=155.230/16
=156.13/16
=156.16/16
=156.22/16
=156.31/16
=156.50/16
=156.59/16
=156.62/16
=156.69/16
=156.147/16
=156.149/16
=157/12
=157.16/14
=157.20/16
=157.32/12
=157.48/14
=157.61/16
=157.63/16
=157.64/12
=157.80/15
=157.82/16
=157.85/16
=157.101/16
=157.102/15
=157.104/13
=157.112/13
=157.120/17
=157.120.128/18
=157.120.232/22
=157.122/16
=157.128/16
=157.147/16
=157.148/16
=157.155/16
=157.156/16
=157.179/16
=157.185.192/18
=157.192/16
=157.197/16
=157.205/16
=157.211/16
=157.227/16
=157.250.64/18
=157.250.128/17
=157.255/16
=158.40/16
=158.44/15
=158.54/16
=158.89/16
=158.108/16
=158.132/16
=158.140.128/17
=158.144/16
=158.158/16
=158.161/16
=158.182/16
=158.198/15
=158.200/13
=158.208/13
=158.217/16
=159.13/16
=159.27/16
=159.28.64/18
=159.28.128/17
=159.52/16
=159.73/16
=159.75/16
=159.80/16
=159.117/19
=159.117.32/20
=159.117.64/18
=159.117.128/19
=159.117.200/23
=159.117.220/22
=159.117.224/19
=159.138/16
=159.192/16
=159.196/16
=159.207/16
=159.211/16
=159.226/16
=159.228/16
=159.242.16/20
=159.248/16
=160.4/16
=160.11/16
=160.12/14
=160.16/15
=160.18/16
=160.19.16/21
=160.19.32/22
=160.19.40/22
=160.19.48/21
=160.19.56/22
=160.19.64/20
=160.19.80/21
=160.19.88/22
=160.19.108/22
=160.19.144/21
=160.19.156/22
=160.19.164/22
=160.19.176/22
=160.19.184/22
=160.19.204/22
=160.19.208/20
=160.19.224/21
=160.20/20
=160.20.16/22
=160.20.36/22
=160.20.40/21
=160.20.48/20
=160.20.72/21
=160.20.104/22
=160.20.116/22
=160.20.120/21
=160.20.128/20
=160.20.212/24
=160.20.216/24
=160.20.220/24
=160.20.222/23
=160.20.224/24
=160.20.228/24
=160.20.240/24
=160.20.244/24
=160.20.250/24
=160.21/16
=160.22/15
=160.24/14
=160.28/15
=160.30/16
=160.32.240/21
=160.64/16
=160.74/16
=160.86/16
=160.96/16
=160.185/16
=160.186/15
=160.188/14
=160.192/13
=160.200/15
=160.202/20
=160.202.32/19
=160.202.128/17
=160.203/16
=160.204/16
=160.206/16
=160.215/16
=160.222/16
=160.231.128/18
=160.233/16
=160.234/15
=160.236/15
=160.238/21
=160.238.8/23
=160.238.10/24
=160.238.12/22
=160.238.16/22
=160.238.20/24
=160.238.30/24
=160.238.32/22
=160.238.40/24
=160.238.51/24
=160.238.56/24
=160.238.58/23
=160.238.62/24
=160.238.64/19
=160.238.100/24
=160.239/16
=160.240/15
=160.243/16
=160.244/14
=160.248/14
=160.252/16
=161.29/16
=161.34/16
=161.43/16
=161.49/17
=161.49.128/19
=161.49.160/20
=161.49.176/21
=161.49.184/22
=161.49.192/19
=161.49.224/21
=161.50/16
=161.64/15
=161.66/16
=161.75/16
=161.93/16
=161.94/15
=161.96/16
=161.117/16
=161.118/16
=161.122/16
=161.126/16
=161.139/16
=161.142/15
=161.146/16
=161.152/16
=161.189/16
=161.200/16
=161.207/16
=161.229/16
=161.246/16
=161.248/16
=162.4/16
=162.12.208/21
=162.12.240/21
=162.14/16
=162.56/16
=162.62/16
=162.105/16
=162.112/16
=162.145/16
=162.146/15
=162.216.140/22
=162.219.32/21
=162.219.80/21
=162.221.76/22
=162.223.168/21
=162.245.124/22
=162.247/21
=162.253.16/22
=162.255.48/22
=163/16
=163.7/16
=163.8/16
=163.13/16
=163.14/15
=163.16/12
=163.32/16
=163.42/15
=163.44/15
=163.46/16
=163.47/18
=163.47.64/21
=163.47.72/22
=163.47.80/20
=163.47.96/19
=163.47.128/17
=163.48/13
=163.56/14
=163.60/15
=163.122/16
=163.125/16
=163.127/16
=163.128/16
=163.130/15
=163.132/14
=163.136/13
=163.144/14
=163.148/15
=163.152/16
=163.177/16
=163.179/16
=163.180/16
=163.189/16
=163.204/16
=163.208/12
=163.224/14
=163.228/15
=163.232/15
=163.239/16
=163.255/16
=164.43/16
=164.46/16
=164.52/17
=164.52.192/19
=164.53/16
=164.69/16
=164.70/15
=164.75/16
=164.78/16
=164.80/16
=164.97/16
=164.100/16
=164.108/16
=164.112/16
=164.115/16
=164.124/15
=164.161/16
=164.162/16
=164.164/16
=165.12/16
=165.14/15
=165.17/16
=165.18/16
=165.21/16
=165.31/16
=165.42/15
=165.67/16
=165.69/16
=165.76/16
=165.84/17
=165.84.128/18
=165.84.192/20
=165.84.232/21
=165.84.240/20
=165.86/16
=165.93/16
=165.96/16
=165.99/16
=165.100/15
=165.102/16
=165.108/16
=165.118/16
=165.132/15
=165.141/16
=165.142/16
=165.173/18
=165.186/15
=165.191/16
=165.194/16
=165.202/16
=165.205/16
=165.209/16
=165.213/16
=165.220/16
=165.228/15
=165.240/14
=165.244/16
=165.246/16
=166.64/15
=166.79/16
=166.81/16
=166.83/16
=166.100/16
=166.103/16
=166.104/16
=166.106/16
=166.111/16
=166.118/15
=166.120/15
=166.125/16
=167.30/16
=167.103/16
=167.123/16
=167.130/16
=167.139/16
=167.162/16
=167.169/16
=167.175/16
=167.179/16
=167.189/16
=167.205/16
=167.219.48/20
=167.220.224/19
=168.70/16
=168.78/15
=168.95/16
=168.106/16
=168.115/16
=168.120/16
=168.126/16
=168.130/15
=168.132/16
=168.134/16
=168.140/16
=168.152/15
=168.154/16
=168.160/16
=168.186/16
=168.188/16
=168.198/16
=168.217/16
=168.219/16
=168.245.188/22
=168.248/15
=168.252/16
=169.140/16
=169.149/16
=169.201/16
=169.208/12
=170.33/16
=170.38/16
=170.76.176/22
=170.95/16
=170.106/16
=170.157/16
=170.179/16
=170.199.246/24
=170.248/23
=170.248.12/23
=170.248.42/23
=170.248.46/23
=170.248.138/23
=170.248.160/21
=170.248.168/22
=170.248.190/23
=170.249.64/21
=170.249.96/19
=170.251.10/23
=170.251.20/23
=170.251.40/21
=170.251.60/23
=170.251.90/23
=170.251.110/23
=170.251.142/23
=170.251.149/24
=170.251.150/23
=170.251.154/23
=170.251.156/23
=170.251.170/23
=170.251.174/23
=171/12
=171.34/15
=171.36/14
=171.40/13
=171.48/12
=171.76/14
=171.80/12
=171.96/11
=171.207/16
=171.208/12
=171.224/11
=172.81.192/18
=172.86.208/20
=172.122/15
=172.192/13
=172.241.248/21
=173.248.224/19
=174.138.144/20
=175/10
=175.64/11
=175.96/13
=175.104/14
=175.108/15
=175.110/17
=175.111/16
=175.112/12
=175.128/9
=180/9
=180.128/10
=180.192/11
=180.224/13
=180.232/15
=180.235/16
=180.236/14
=180.240/12
=182/7
=184.22/16
=184.82/16
=185.8.100/22
=185.100.40/22
=185.178.144/22
=188.131.128/17
=188.214.64/20
=192.5.90/24
=192.5.216/24
=192.5.240/24
=192.8.32/21
=192.8.40/22
=192.8.116/22
=192.8.160/20
=192.8.176/24
=192.8.179/24
=192.8.180/24
=192.8.182/24
=192.8.184/21
=192.8.192/18
=192.12.76/24
=192.12.109/24
=192.16.178/23
=192.16.180/24
=192.26.91/24
=192.26.93/24
=192.26.94/24
=192.26.96/24
=192.26.110/24
=192.26.215/24
=192.26.216/21
=192.26.224/22
=192.26.228/23
=192.26.230/24
=192.26.232/24
=192.28.120/22
=192.31.116/22
=192.31.120/22
=192.31.124/24
=192.31.197/24
=192.31.198/23
=192.31.200/22
=192.31.204/23
=192.31.206/24
=192.33.135/24
=192.35.59/24
=192.35.248/24
=192.41.146/24
=192.41.170/24
=192.41.178/23
=192.41.180/22
=192.41.184/21
=192.41.192/22
=192.41.196/23
=192.41.203/24
=192.41.206/24
=192.42.52/24
=192.42.60/23
=192.42.62/24
=192.42.84/23
=192.42.86/24
=192.42.103/24
=192.42.104/22
=192.42.151/24
=192.42.237/24
=192.43.174/24
=192.43.185/24
=192.43.189/24
=192.43.198/24
=192.43.201/24
=192.43.202/24
=192.43.207/24
=192.43.208/23
=192.43.226/23
=192.43.228/23
=192.43.239/24
=192.47/20
=192.47.16/21
=192.47.24/22
=192.47.29/24
=192.47.30/23
=192.47.32/22
=192.47.37/24
=192.47.38/23
=192.47.40/21
=192.47.48/20
=192.47.64/18
=192.47.128/18
=192.47.192/19
=192.47.224/20
=192.47.240/23
=192.48.109/24
=192.48.110/24
=192.48.248/24
=192.50/16
=192.51.16/20
=192.51.32/20
=192.51.49/24
=192.51.50/23
=192.51.52/22
=192.51.56/21
=192.51.64/18
=192.51.128/18
=192.51.194/23
=192.51.196/22
=192.51.200/21
=192.51.208/20
=192.51.224/20
=192.51.241/24
=192.51.242/23
=192.51.244/22
=192.51.248/21
=192.52.72/23
=192.52.119/24
=192.52.120/21
=192.52.128/20
=192.52.144/22
=192.52.148/23
=192.52.150/24
=192.52.171/24
=192.52.172/22
=192.52.176/24
=192.52.185/24
=192.52.196/23
=192.54.105/24
=192.54.106/24
=192.54.130/24
=192.54.135/24
=192.54.137/24
=192.54.247/24
=192.54.251/24
=192.55.46/24
=192.55.68/22
=192.55.98/23
=192.55.110/24
=192.55.112/24
=192.55.118/24
=192.55.190/24
=192.55.198/24
=192.55.209/24
=192.55.219/24
=192.55.220/24
=192.55.232/24
=192.55.238/24
=192.58.9/24
=192.58.10/23
=192.58.12/22
=192.58.16/23
=192.58.18/24
=192.58.97/24
=192.58.98/23
=192.58.100/23
=192.58.133/24
=192.58.134/23
=192.58.136/24
=192.64.203/24
=192.64.204/24
=192.65.82/23
=192.65.84/22
=192.65.88/22
=192.65.130/24
=192.65.182/24
=192.65.217/24
=192.65.248/24
=192.65.250/24
=192.67.1/24
=192.67.12/24
=192.67.84/23
=192.67.168/24
=192.67.171/24
=192.67.217/24
=192.67.248/24
=192.68.110/23
=192.68.132/24
=192.68.139/24
=192.68.171/24
=192.68.172/24
=192.68.179/24
=192.68.235/24
=192.68.236/22
=192.68.240/21
=192.68.248/23
=192.70.135/24
=192.70.174/24
=192.70.179/24
=192.70.180/22
=192.70.216/24
=192.70.219/24
=192.72.3/24
=192.72.4/22
=192.72.8/21
=192.72.16/20
=192.72.32/19
=192.72.64/18
=192.72.128/18
=192.72.192/19
=192.72.224/20
=192.72.240/21
=192.72.248/22
=192.72.252/24
=192.73.12/24
=192.73.21/24
=192.73.22/24
=192.73.24/23
=192.73.66/24
=192.74.139/24
=192.74.140/22
=192.74.144/20
=192.74.160/19
=192.74.192/20
=192.74.208/24
=192.75.137/24
=192.76.122/24
=192.76.252/23
=192.76.254/24
=192.77.8/24
=192.77.17/24
=192.82.52/22
=192.82.56/21
=192.82.64/19
=192.82.100/24
=192.82.132/24
=192.82.140/24
=192.82.143/24
=192.82.161/24
=192.82.222/24
=192.82.230/24
=192.83.104/24
=192.83.118/23
=192.83.122/23
=192.83.157/24
=192.83.166/23
=192.83.168/21
=192.83.176/20
=192.83.192/22
=192.83.196/24
=192.83.198/24
=192.83.217/24
=192.83.218/23
=192.83.224/24
=192.83.231/24
=192.83.237/24
=192.83.238/24
=192.84.71/24
=192.84.72/23
=192.84.89/24
=192.84.219/24
=192.84.230/24
=192.84.237/24
=192.84.238/24
=192.84.241/24
=192.84.242/24
=192.84.253/24
=192.86.12/24
=192.86.129/24
=192.86.132/23
=192.86.165/24
=192.88.6/23
=192.88.80/24
=192.88.85/24
=192.88.101/24
=192.88.102/24
=192.88.119/24
=192.88.187/24
=192.88.190/24
=192.91.179/24
=192.91.185/24
=192.91.213/24
=192.92.15/24
=192.92.248/21
=192.94.41/24
=192.94.62/23
=192.94.64/24
=192.94.122/24
=192.94.169/24
=192.94.174/24
=192.94.200/24
=192.94.208/23
=192.94.220/24
=192.94.227/24
=192.94.238/24
=192.94.243/24
=192.94.244/24
=192.100.2/24
=192.100.22/24
=192.100.53/24
=192.100.77/24
=192.100.80/24
=192.101.16/24
=192.101.91/24
=192.101.134/24
=192.101.183/24
=192.101.254/24
=192.102.83/24
=192.102.92/24
=192.102.204/23
=192.102.239/24
=192.102.250/23
=192.103.42/23
=192.103.46/24
=192.103.130/24
=192.103.132/24
=192.104.15/24
=192.104.40/24
=192.104.43/24
=192.104.44/23
=192.104.80/24
=192.104.172/24
=192.104.232/23
=192.104.246/23
=192.104.252/24
=192.105.10/24
=192.107.9/24
=192.107.10/24
=192.107.101/24
=192.107.112/23
=192.107.171/24
=192.107.172/24
=192.108.99/24
=192.108.113/24
=192.108.230/24
=192.111.32/24
=192.111.102/24
=192.111.105/24
=192.112.215/24
=192.122.131/24
=192.122.132/22
=192.122.136/22
=192.122.140/24
=192.122.171/24
=192.122.176/24
=192.122.180/24
=192.122.210/24
=192.124.10/23
=192.124.12/23
=192.124.14/24
=192.124.24/24
=192.124.117/24
=192.124.152/24
=192.124.154/24
=192.131.13/24
=192.131.27/24
=192.131.28/23
=192.131.30/24
=192.131.90/23
=192.131.92/24
=192.131.251/24
=192.131.252/24
=192.132.15/24
=192.132.31/24
=192.132.41/24
=192.132.93/24
=192.132.102/24
=192.132.247/24
=192.132.248/22
=192.132.253/24
=192.133.10/24
=192.133.14/24
=192.133.21/24
=192.133.31/24
=192.133.41/24
=192.133.66/23
=192.135.89/24
=192.135.90/23
=192.135.92/24
=192.135.94/24
=192.135.96/22
=192.135.101/24
=192.135.102/23
=192.135.104/22
=192.135.108/24
=192.135.207/24
=192.135.208/24
=192.135.210/24
=192.135.222/24
=192.136.39/24
=192.136.59/24
=192.136.141/24
=192.136.142/23
=192.138.100/24
=192.138.118/23
=192.138.120/22
=192.138.124/23
=192.138.188/24
=192.138.251/24
=192.140.128/17
=192.144.78/23
=192.144.80/20
=192.144.128/17
=192.145.228/23
=192.146.133/24
=192.146.150/24
=192.146.184/24
=192.146.189/24
=192.146.200/24
=192.146.218/23
=192.146.232/24
=192.146.251/24
=192.146.252/23
=192.147.114/24
=192.147.151/24
=192.147.152/23
=192.147.235/24
=192.147.246/24
=192.147.253/24
=192.148.116/22
=192.148.120/21
=192.148.128/19
=192.148.160/22
=192.148.164/23
=192.148.221/24
=192.148.223/24
=192.148.224/22
=192.148.228/23
=192.148.230/24
=192.149.20/24
=192.149.36/24
=192.149.54/24
=192.149.149/24
=192.149.209/24
=192.149.239/24
=192.150.16/24
=192.150.96/24
=192.150.107/24
=192.150.129/24
=192.150.130/23
=192.150.132/22
=192.150.136/22
=192.150.144/24
=192.150.200/24
=192.150.202/24
=192.150.218/23
=192.150.220/24
=192.150.234/23
=192.150.236/23
=192.150.246/24
=192.150.249/24
=192.150.250/23
=192.151.129/24
=192.152.69/24
=192.152.86/23
=192.152.119/24
=192.152.144/24
=192.152.146/24
=192.152.197/24
=192.152.212/24
=192.153.9/24
=192.153.93/24
=192.153.95/24
=192.153.96/20
=192.153.112/23
=192.153.114/24
=192.153.158/24
=192.153.196/23
=192.153.221/24
=192.153.222/23
=192.153.224/22
=192.153.228/24
=192.153.251/24
=192.154.16/21
=192.154.24/23
=192.156.140/22
=192.156.144/21
=192.156.152/22
=192.156.156/24
=192.156.158/23
=192.156.165/24
=192.156.207/24
=192.156.208/24
=192.156.220/24
=192.156.225/24
=192.156.249/24
=192.157.162/24
=192.157.191/24
=192.159.16/21
=192.159.24/22
=192.159.28/23
=192.159.30/24
=192.160.16/24
=192.160.19/24
=192.160.29/24
=192.160.71/24
=192.160.155/24
=192.160.161/24
=192.160.169/24
=192.160.170/23
=192.160.205/24
=192.160.226/24
=192.160.229/24
=192.161.128/23
=192.169.32/21
=192.169.40/23
=192.172.227/24
=192.172.228/22
=192.172.234/23
=192.172.236/22
=192.172.241/24
=192.172.242/23
=192.172.245/24
=192.172.246/24
=192.173.16/21
=192.173.24/24
=192.174.128/17
=192.188.43/24
=192.188.71/24
=192.188.73/24
=192.188.74/23
=192.188.76/22
=192.188.80/24
=192.188.82/23
=192.188.85/24
=192.188.86/23
=192.188.89/24
=192.188.90/24
=192.188.92/24
=192.188.101/24
=192.188.107/24
=192.188.115/24
=192.188.128/24
=192.188.151/24
=192.188.170/23
=192.188.172/24
=192.188.174/23
=192.188.185/24
=192.188.186/24
=192.188.241/24
=192.189.24/24
=192.189.34/24
=192.189.54/24
=192.189.94/24
=192.189.136/24
=192.189.148/24
=192.189.159/24
=192.189.208/22
=192.189.223/24
=192.189.229/24
=192.189.230/23
=192.189.232/23
=192.190.61/24
=192.190.66/24
=192.190.108/24
=192.190.180/23
=192.190.204/23
=192.190.208/21
=192.192/16
=192.195.2/24
=192.195.10/24
=192.195.12/23
=192.195.14/24
=192.195.34/24
=192.195.39/24
=192.195.40/24
=192.195.44/22
=192.195.48/21
=192.195.102/24
=192.195.112/24
=192.195.152/24
=192.195.170/24
=192.195.186/24
=192.195.197/24
=192.195.219/24
=192.195.233/24
=192.197.113/24
=192.199.32/20
=192.200.64/20
=192.203.38/23
=192.203.81/24
=192.203.82/23
=192.203.84/22
=192.203.88/21
=192.203.99/24
=192.203.138/23
=192.203.140/22
=192.203.144/23
=192.203.146/24
=192.203.154/24
=192.203.156/23
=192.203.176/24
=192.203.183/24
=192.203.184/23
=192.203.193/24
=192.203.208/23
=192.203.213/24
=192.203.216/24
=192.203.232/24
=192.203.235/24
=192.203.247/24
=192.206.102/24
=192.206.108/24
=192.206.117/24
=192.206.152/22
=192.206.156/23
=192.207.33/24
=192.207.36/24
=192.207.64/24
=192.207.91/24
=192.207.96/23
=192.207.98/24
=192.207.113/24
=192.207.119/24
=192.207.120/23
=192.207.143/24
=192.207.151/24
=192.207.152/22
=192.207.156/23
=192.207.158/24
=192.207.161/24
=192.207.165/24
=192.207.187/24
=192.207.197/24
=192.207.198/24
=192.207.242/24
=192.207.248/24
=192.207.254/24
=192.218/16
=192.227.1/24
=192.227.2/23
=192.227.4/22
=192.227.8/21
=192.228.128/17
=192.230.16/20
=192.231.15/24
=192.231.34/24
=192.231.59/24
=192.231.77/24
=192.231.127/24
=192.231.135/24
=192.231.136/23
=192.231.144/24
=192.231.166/23
=192.231.168/23
=192.231.170/24
=192.231.183/24
=192.231.193/24
=192.231.203/24
=192.231.211/24
=192.231.212/24
=192.231.216/24
=192.231.218/24
=192.231.248/24
=192.232.32/19
=192.232.128/19
=192.234.58/24
=192.234.231/24
=192.234.245/24
=192.240.16/20
=192.244/16
=192.245.11/24
=192.245.13/24
=192.245.14/24
=192.245.34/23
=192.245.36/24
=192.245.58/23
=192.245.73/24
=192.245.74/23
=192.245.76/22
=192.245.80/24
=192.245.94/24
=192.245.105/24
=192.245.106/23
=192.245.108/22
=192.245.112/24
=192.245.155/24
=192.245.162/24
=192.245.185/24
=192.245.192/24
=192.245.196/24
=192.245.208/24
=192.245.210/23
=192.245.212/22
=192.245.216/23
=192.245.219/24
=192.245.220/24
=192.245.249/24
=192.245.250/23
=192.248/17
=192.249.16/20
=192.249.42/23
=192.251.148/24
=192.251.195/24
=192.251.201/24
=192.251.204/22
=192.251.227/24
=192.251.228/23
=193.82.64/19
=193.82.224/19
=193.112/16
=193.114/19
=193.114.96/19
=193.114.128/19
=193.115.32/19
=193.115.64/18
=193.116.32/19
=193.116.64/18
=193.116.192/18
=193.117.64/19
=193.119/17
=194.91/16
=194.193.32/19
=194.193.128/18
=194.193.192/19
=194.223/18
=194.223.64/19
=194.223.160/19
=195.128.4/22
=196.1.1/24
=196.1.68/24
=196.1.104/23
=196.1.106/24
=196.1.108/22
=196.1.113/24
=196.1.114/24
=196.1.134/24
=196.3.65/24
=196.3.72/24
=196.12.32/19
=196.15.16/20
=198.15.16/20
=198.15.32/19
=198.17.1/24
=198.17.7/24
=198.17.70/24
=198.17.106/24
=198.17.113/24
=198.17.114/23
=198.17.118/24
=198.17.228/24
=198.17.240/23
=198.22.34/23
=198.22.37/24
=198.22.47/24
=198.22.48/23
=198.22.50/24
=198.22.61/24
=198.27.4/22
=198.27.8/24
=198.41.16/21
=198.41.24/22
=198.48/22
=198.49.2/23
=198.49.32/21
=198.49.87/24
=198.49.112/23
=198.49.124/24
=198.51.4/22
=198.51.99/24
=198.51.100/23
=198.51.186/24
=198.51.195/24
=198.51.196/24
=198.51.210/23
=198.56.16/21
=198.56.24/23
=198.61.1/24
=198.61.2/23
=198.61.8/21
=198.73.220/24
=198.99.173/24
=198.142/16
=198.144.128/20
=198.148.189/24
=198.148.192/22
=198.148.196/23
=198.175.100/22
=198.179.225/24
=198.180.142/24
=198.200/21
=198.200.8/23
=198.244.10/23
=198.246.223/24
=199.9.24/21
=199.21.172/22
=199.26.96/21
=199.34.10/24
=199.43.18/23
=199.43.45/24
=199.43.63/24
=199.65.192/21
=199.166.34/23
=199.166.36/23
=199.212.57/24
=202/18
=202.0.64/21
=202.0.72/22
=202.0.76/24
=202.0.78/23
=202.0.80/20
=202.0.96/19
=202.0.128/17
=202.1/16
=202.2/15
=202.4/16
=202.5/20
=202.5.32/19
=202.5.64/18
=202.5.128/17
=202.6/15
=202.8/13
=202.16/12
=202.32/11
=202.64/11
=202.96/12
=202.112/13
=202.120/15
=202.122/16
=202.123.32/19
=202.123.64/18
=202.123.128/17
=202.124/14
=202.128/13
=202.136/18
=202.136.64/21
=202.136.72/22
=202.136.80/20
=202.136.96/19
=202.136.128/17
=202.137/16
=202.138/15
=202.140/14
=202.144/12
=202.160/13
=202.168/15
=202.170/17
=202.170.128/18
=202.170.196/22
=202.170.200/21
=202.170.208/20
=202.170.224/19
=202.171/16
=202.172/16
=202.173/18
=202.173.64/19
=202.173.96/20
=202.173.112/22
=202.173.120/21
=202.173.128/17
=202.174/15
=202.176/12
=202.192/10
=203/12
=203.16/13
=203.24/17
=203.24.128/18
=203.24.192/19
=203.24.224/20
=203.24.240/22
=203.24.244/23
=203.24.246/24
=203.24.248/21
=203.25/16
=203.26/15
=203.28/14
=203.32/16
=203.33/17
=203.33.128/20
=203.33.144/21
=203.33.154/23
=203.33.156/22
=203.33.160/19
=203.33.192/18
=203.34/15
=203.36/14
=203.40/13
=203.48/13
=203.56/14
=203.60/15
=203.62/17
=203.62.128/19
=203.62.160/20
=203.62.176/22
=203.62.184/21
=203.62.192/18
=203.63/16
=203.64/10
=203.128/14
=203.132/20
=203.132.32/19
=203.132.64/18
=203.132.128/17
=203.133/16
=203.134/15
=203.136/13
=203.144/13
=203.152/14
=203.156/15
=203.158/16
=203.159/18
=203.159.64/20
=203.159.96/19
=203.159.128/17
=203.160/12
=203.176/13
=203.184/14
=203.188/15
=203.190/19
=203.190.32/20
=203.190.48/21
=203.190.64/18
=203.190.128/17
=203.191/16
=203.192/10
=204.52.191/24
=204.75.142/24
=204.145/24
=204.145.2/23
=204.145.4/22
=204.145.97/24
=204.152.224/21
=205.147.96/20
=205.166.177/24
=205.201/20
=205.203.74/23
=205.253/16
=206.131.192/20
=206.201/20
=207.136/18
=207.148.32/20
=207.148.64/18
=207.158.64/18
=207.174.176/20
=207.189.168/22
=207.189.184/22
=208.66.232/21
=208.71.212/22
=208.71.224/21
=208.81.116/22
=208.87.166/23
=208.111.48/21
=209.58.160/19
=209.141/20
=209.150.144/20
=209.212.192/19
=210/7
=212.8.230/23
=212.8.254/23
=212.64/17
=212.92.102/23
=212.95.128/19
=212.117.48/20
=212.129.128/17
=216.8/19
=216.10.240/20
=216.46.122/23
=216.99.198/24
=216.99.201/24
=216.99.204/24
=216.108.240/20
=216.118/18
=216.118.224/19
=216.151.192/20
=216.171.112/20
=216.183.208/20
=216.250.96/20
=217.178/16
=218/7
=220/9
=220.128/12
=220.144/13
=220.152/14
=220.156/15
=220.158/17
=220.158.128/18
=220.158.192/22
=220.158.200/21
=220.158.208/20
=220.158.224/19
=220.159/16
=220.160/11
=220.192/10
=221/8
=222/7
/trunk/main/pattern/ipv4_arin
0,0 → 1,9063
#: version 20190429
 
# ARIN IPv4
# Automatically generated by /daten/homes/vwhois/v2019/maintenance/pattern-generator/gwhois-pattern-update
# Generation timestamp: 2019-04-29 13:41:01 GMT+0200
# Source: (</head><body>) ftp://ftp.iana.org/assignments/ipv4-address-space/ipv4-address-space.txt
# Source: (20190429) ftp://ftp.arin.net/pub/stats/arin/delegated-arin-extended-latest
 
:whois|whois.arin.net|prefix=n + |
=3/8
=4/8
=6/7
=8/9
=8.192/12
=8.224/11
=9/8
=11/8
=12/8
=13/10
=13.64/11
=13.96/12
=13.112/14
=13.124/14
=13.128/13
=13.136/14
=13.144/12
=13.160/13
=13.184/13
=13.192/11
=13.224/12
=13.244/14
=13.248/13
=14.102.172/22
=15/8
=16/6
=20/7
=22/8
=23/12
=23.16/15
=23.18/16
=23.19/19
=23.19.32/20
=23.19.52/22
=23.19.64/18
=23.19.128/17
=23.20/14
=23.24/13
=23.32/11
=23.64/12
=23.80/15
=23.82/16
=23.83/18
=23.83.72/21
=23.83.80/20
=23.83.96/20
=23.83.128/17
=23.84/14
=23.88/13
=23.96/13
=23.104/16
=23.105/17
=23.105.128/18
=23.105.192/19
=23.106/18
=23.106.64/19
=23.106.96/21
=23.106.128/17
=23.107/16
=23.108/17
=23.108.128/18
=23.108.192/20
=23.108.224/19
=23.110/16
=23.111.8/22
=23.111.64/20
=23.111.128/18
=23.111.248/21
=23.112/12
=23.128/10
=23.192/11
=23.224/15
=23.226.16/20
=23.226.32/19
=23.226.64/18
=23.226.128/17
=23.227/16
=23.228/14
=23.232/17
=23.233/16
=23.234/15
=23.236/15
=23.238/16
=23.239/17
=23.239.160/19
=23.239.192/18
=23.240/13
=23.248/16
=23.249/17
=23.249.128/18
=23.249.192/19
=23.249.224/21
=23.249.240/20
=23.250/15
=23.252/18
=23.252.64/23
=23.252.69/24
=23.252.70/24
=23.252.73/24
=23.252.74/24
=23.252.77/24
=23.252.78/24
=23.252.80/20
=23.252.96/19
=23.252.128/17
=23.253/16
=23.254/15
=24/11
=24.32/13
=24.40/16
=24.41/18
=24.41.64/19
=24.41.96/20
=24.41.128/17
=24.42/15
=24.44/14
=24.48/14
=24.52/16
=24.53/17
=24.53.128/18
=24.53.224/19
=24.54/15
=24.56/13
=24.64/10
=24.128/14
=24.136/13
=24.144/13
=24.152.128/17
=24.153/16
=24.154/15
=24.156/14
=24.160/11
=24.192/11
=24.224/14
=24.228/15
=24.230.32/19
=24.230.64/18
=24.230.128/17
=24.231/16
=24.233/16
=24.234/16
=24.235/20
=24.235.16/22
=24.235.20/23
=24.235.32/19
=24.235.64/18
=24.235.128/17
=24.236/14
=24.240/12
=26/8
=28/7
=30/8
=31.207/21
=31.207.56/22
=32/6
=38/8
=40/10
=40.64/13
=40.74/15
=40.76/14
=40.80/12
=40.96/12
=40.112/13
=40.120/14
=40.124/16
=40.125/17
=40.126/18
=40.126.128/17
=40.127/16
=40.128/9
=43.231.12/22
=43.243.84/22
=44/8
=45/14
=45.16/12
=45.32/13
=45.40/17
=45.40.128/18
=45.41/16
=45.42/16
=45.43/18
=45.43.96/19
=45.43.128/17
=45.44/14
=45.48/13
=45.56/17
=45.56.128/18
=45.56.192/19
=45.57/16
=45.58/15
=45.60/14
=45.72/15
=45.74/16
=45.76/14
=45.114.224/22
=45.119.208/22
=45.223/16
=47/13
=47.10/16
=47.12/15
=47.14/16
=47.16/13
=47.24/14
=47.28/16
=47.32/11
=47.64/12
=47.80/13
=47.88/14
=47.128/10
=47.192/11
=47.224/12
=47.240/14
=47.244/15
=47.246/16
=47.248/13
=48/8
=50/11
=50.32/12
=50.48/13
=50.56/14
=50.62/15
=50.64/11
=50.96/12
=50.112/14
=50.116/15
=50.118/16
=50.120/13
=50.128/9
=51.79/16
=51.81/16
=52/10
=52.64/12
=52.84/14
=52.88/13
=52.96/11
=52.128/17
=52.128.128/18
=52.128.192/19
=52.129/16
=52.132/14
=52.136/13
=52.144/18
=52.144.96/19
=52.144.128/17
=52.145/16
=52.146/15
=52.148/14
=52.152/13
=52.160/11
=52.192/10
=54/11
=54.32/14
=54.39/16
=54.40/13
=54.48/12
=54.64/10
=54.128/10
=54.192/12
=54.208/13
=54.216/14
=54.220/15
=54.224/11
=55/8
=56/8
=63/9
=63.128/13
=63.136/14
=63.140.16/20
=63.140.32/19
=63.140.64/18
=63.140.128/17
=63.141/19
=63.141.32/23
=63.141.38/23
=63.141.40/21
=63.141.48/20
=63.141.64/18
=63.141.128/17
=63.142.16/20
=63.142.32/19
=63.142.64/18
=63.142.128/17
=63.143/16
=63.144/12
=63.160/11
=63.192/11
=63.224/12
=63.240/14
=63.244/15
=63.246/17
=63.246.134/23
=63.246.138/24
=63.246.140/23
=63.246.143/24
=63.246.153/24
=63.246.154/23
=63.246.160/19
=63.246.192/18
=63.247/16
=63.248/13
=64/12
=64.16/17
=64.16.128/18
=64.16.224/19
=64.17/16
=64.18/15
=64.20/14
=64.24/14
=64.28.32/19
=64.28.64/18
=64.28.144/20
=64.28.160/19
=64.28.192/18
=64.29/16
=64.30/15
=64.32/18
=64.32.128/17
=64.33.64/18
=64.33.128/17
=64.34/15
=64.36/14
=64.40/15
=64.42/16
=64.43.128/17
=64.44/14
=64.48/13
=64.56/16
=64.57/18
=64.57.64/19
=64.57.96/20
=64.57.128/17
=64.58/15
=64.60/15
=64.62/16
=64.63/18
=64.63.128/17
=64.64/16
=64.65/18
=64.65.128/17
=64.66/15
=64.68/14
=64.72/13
=64.80/12
=64.96/12
=64.112/14
=64.116/15
=64.118/16
=64.119/20
=64.119.32/19
=64.119.64/18
=64.119.128/17
=64.120/18
=64.120.64/19
=64.120.96/21
=64.120.104/22
=64.120.108/23
=64.120.122/23
=64.120.124/22
=64.120.128/17
=64.121/16
=64.122/15
=64.124/14
=64.128/13
=64.136/16
=64.137/17
=64.137.128/18
=64.138/15
=64.140/14
=64.144/12
=64.160/12
=64.176/13
=64.184/14
=64.188/19
=64.188.48/20
=64.188.64/18
=64.188.128/17
=64.189/16
=64.190/15
=64.192/13
=64.200/14
=64.204/15
=64.206/16
=64.207/17
=64.207.128/18
=64.207.192/20
=64.207.216/21
=64.207.224/19
=64.208/12
=64.224/13
=64.232/14
=64.236/15
=64.238/16
=64.239/17
=64.239.128/18
=64.239.192/19
=64.239.224/21
=64.239.232/22
=64.239.240/20
=64.240/13
=64.248/14
=64.252/16
=64.253/19
=64.253.64/18
=64.253.128/17
=64.254/15
=65/12
=65.16/15
=65.18/18
=65.18.64/19
=65.18.96/20
=65.18.192/20
=65.18.224/19
=65.19/16
=65.20/14
=65.24/13
=65.32/14
=65.36/15
=65.38/16
=65.39/18
=65.39.96/19
=65.39.128/17
=65.40/13
=65.48/12
=65.64/11
=65.96/15
=65.98/16
=65.99.96/19
=65.99.192/18
=65.100/14
=65.104/13
=65.112/12
=65.128/11
=65.160/12
=65.176/14
=65.180/16
=65.181/18
=65.181.96/19
=65.181.128/17
=65.182/15
=65.184/13
=65.192/10
=66/13
=66.8.128/17
=66.9/16
=66.10/15
=66.12/14
=66.16/15
=66.18/18
=66.18.96/19
=66.18.128/17
=66.19/16
=66.20/14
=66.24/13
=66.32/13
=66.40/15
=66.42/19
=66.42.64/18
=66.42.128/17
=66.43/16
=66.44/14
=66.48/13
=66.56/14
=66.60.64/18
=66.60.128/17
=66.61/16
=66.62/15
=66.64/13
=66.72/14
=66.76/15
=66.78/16
=66.79/18
=66.79.64/19
=66.79.128/17
=66.80/14
=66.84/18
=66.84.80/20
=66.84.96/19
=66.84.128/17
=66.85/16
=66.86/15
=66.88/13
=66.96/17
=66.96.128/18
=66.97/16
=66.98.96/19
=66.98.128/17
=66.99/16
=66.100/14
=66.104/13
=66.112/14
=66.116/15
=66.118/17
=66.118.192/18
=66.119/16
=66.120/13
=66.128/19
=66.128.48/20
=66.128.64/18
=66.128.128/17
=66.129/16
=66.130/15
=66.132/16
=66.133/18
=66.133.64/20
=66.133.96/19
=66.133.128/17
=66.134/15
=66.136/13
=66.144/12
=66.160/12
=66.176/14
=66.180/16
=66.181/17
=66.181.128/19
=66.181.192/18
=66.182/15
=66.184/13
=66.192/13
=66.200/15
=66.202/16
=66.203/17
=66.203.128/20
=66.203.160/19
=66.203.192/18
=66.204/16
=66.205/18
=66.205.96/19
=66.205.128/17
=66.206/15
=66.208/14
=66.212/18
=66.212.64/19
=66.212.128/17
=66.213/16
=66.214/15
=66.216/13
=66.224/14
=66.228.16/20
=66.228.32/19
=66.228.64/18
=66.228.128/17
=66.229/16
=66.230/16
=66.231/18
=66.231.80/20
=66.231.96/19
=66.231.128/17
=66.232.16/20
=66.232.32/19
=66.232.64/18
=66.232.128/17
=66.233/16
=66.234/17
=66.234.128/19
=66.234.176/20
=66.234.192/18
=66.235/16
=66.236/14
=66.240/13
=66.248/17
=66.248.128/18
=66.248.192/21
=66.248.200/22
=66.248.208/20
=66.248.224/19
=66.249/16
=66.250/16
=66.251/17
=66.251.192/18
=66.252/14
=67/12
=67.16/14
=67.20/15
=67.22/19
=67.22.60/22
=67.22.64/18
=67.22.128/17
=67.23/16
=67.24/13
=67.32/11
=67.64/10
=67.128/12
=67.144/13
=67.152/14
=67.156/15
=67.158/19
=67.158.32/20
=67.158.48/22
=67.158.53/24
=67.158.54/23
=67.158.56/22
=67.158.60/23
=67.158.63/24
=67.158.64/18
=67.158.128/17
=67.159/16
=67.160/11
=67.192/12
=67.208/16
=67.209/17
=67.209.160/19
=67.209.192/18
=67.210/15
=67.212/16
=67.213/17
=67.213.128/21
=67.213.136/22
=67.213.144/20
=67.213.160/19
=67.213.192/18
=67.214/16
=67.215/18
=67.215.64/19
=67.215.96/20
=67.215.128/17
=67.216/13
=67.224/11
=68/10
=68.64/16
=68.65/17
=68.65.128/18
=68.65.192/19
=68.65.224/22
=68.65.240/20
=68.66/15
=68.68/15
=68.70/17
=68.70.128/18
=68.70.208/20
=68.70.224/19
=68.71/16
=68.72/14
=68.76/15
=68.78/16
=68.79.64/18
=68.79.128/17
=68.80/12
=68.96/11
=68.128/9
=69/14
=69.4/15
=69.6.80/20
=69.6.96/19
=69.6.128/17
=69.7/16
=69.8/13
=69.16/12
=69.32/12
=69.48/13
=69.56/14
=69.60/15
=69.62/16
=69.63/18
=69.63.80/20
=69.63.96/19
=69.63.128/17
=69.64/15
=69.66/16
=69.67/19
=69.67.48/20
=69.67.64/18
=69.67.128/17
=69.68/14
=69.72/18
=69.72.64/20
=69.72.88/21
=69.72.96/19
=69.72.128/17
=69.73/16
=69.74/15
=69.76/14
=69.80/13
=69.88/14
=69.92/15
=69.94/19
=69.94.48/20
=69.94.128/17
=69.95/16
=69.96/11
=69.128/11
=69.160.32/19
=69.160.64/18
=69.160.128/19
=69.160.160/21
=69.160.176/20
=69.160.192/18
=69.161/16
=69.162/15
=69.164/14
=69.168/14
=69.172/18
=69.172.128/17
=69.173/16
=69.174/15
=69.176/12
=69.192/15
=69.194/18
=69.194.128/19
=69.194.176/20
=69.194.192/18
=69.195/16
=69.196/14
=69.200/13
=69.208/12
=69.224/14
=69.228/15
=69.230/17
=69.230.128/18
=69.231/17
=69.231.192/18
=69.232/15
=69.234/17
=69.234.128/18
=69.235/17
=69.235.192/18
=69.236/14
=69.240/12
=70/11
=70.32/15
=70.34/19
=70.34.32/20
=70.34.48/21
=70.34.56/23
=70.34.59/24
=70.34.60/22
=70.34.64/18
=70.34.128/17
=70.35/16
=70.36/14
=70.40/13
=70.48/12
=70.64/10
=70.128/9
=71/9
=71.128/15
=71.130/16
=71.131/17
=71.131.128/18
=71.132.64/18
=71.132.128/17
=71.133/16
=71.134/15
=71.136/18
=71.136.128/17
=71.137.64/18
=71.137.128/17
=71.138/15
=71.140/14
=71.144/12
=71.160/11
=71.192/10
=72/11
=72.32/15
=72.34/16
=72.35/17
=72.35.128/18
=72.35.192/19
=72.35.224/20
=72.35.240/21
=72.35.254/23
=72.36/14
=72.40/14
=72.44/20
=72.44.32/19
=72.44.64/18
=72.44.128/17
=72.45/16
=72.46/15
=72.48/12
=72.64/10
=72.128/10
=72.192/11
=72.224/12
=72.240/13
=72.248/14
=72.252/15
=72.254/16
=72.255.64/18
=72.255.128/18
=72.255.192/19
=73/8
=74/11
=74.32/12
=74.48/15
=74.50/17
=74.50.128/18
=74.50.192/20
=74.50.216/21
=74.50.224/19
=74.51/16
=74.52/14
=74.56/13
=74.64/11
=74.96/12
=74.112/15
=74.114/19
=74.114.32/20
=74.114.52/22
=74.114.56/21
=74.114.64/18
=74.114.128/17
=74.115/16
=74.116/15
=74.118/18
=74.118.64/20
=74.118.84/22
=74.118.88/21
=74.118.96/19
=74.118.128/17
=74.119/16
=74.120/13
=74.128/9
=75/8
=76/10
=76.64/13
=76.72/14
=76.76/16
=76.77/19
=76.77.32/20
=76.77.64/18
=76.77.128/17
=76.78/15
=76.80/12
=76.96/11
=76.128/9
=80.71.32/20
=80.86.16/20
=89.208.240/20
=89.239.48/20
=91.225.32/23
=91.235.4/23
=93.179.96/21
=93.179.112/21
=93.179.124/22
=94.26.27/24
=94.26.31/24
=94.26.44/24
=94.26.46/23
=94.26.67/24
=94.26.73/24
=94.26.84/23
=94.103.4/22
=95.163.192/20
=95.169/19
=95.181.188/22
=96/13
=96.8/16
=96.9/18
=96.9.96/19
=96.9.192/18
=96.10/15
=96.12/14
=96.16/13
=96.24/14
=96.28/15
=96.30/18
=96.30.128/17
=96.31/16
=96.32/11
=96.64/11
=96.96/12
=96.112/13
=96.120/14
=96.124/16
=96.125/17
=96.125.128/20
=96.125.160/19
=96.125.192/18
=96.126/15
=96.128/9
=97/8
=98/9
=98.129/16
=98.130/15
=98.132/14
=98.136/13
=98.144/12
=98.160/11
=98.192/10
=99/8
=100/10
=100.128/9
=103.11.64/22
=103.12.212/22
=103.19.84/22
=103.25.230/24
=103.26.140/22
=103.28.68/22
=103.47.62/23
=103.60.12/22
=103.196.180/22
=103.206.84/22
=103.232.206/23
=103.242.192/22
=103.253.96/22
=104/11
=104.32/14
=104.36/16
=104.37/19
=104.37.40/21
=104.37.48/20
=104.37.64/18
=104.37.128/17
=104.38/15
=104.40/13
=104.48/12
=104.64/10
=104.128/12
=104.144/13
=104.152/16
=104.153/18
=104.153.64/20
=104.153.80/22
=104.153.88/21
=104.153.96/19
=104.153.128/17
=104.154/15
=104.156/14
=104.160/16
=104.161/17
=104.162/15
=104.164/14
=104.168/13
=104.176/12
=104.192/13
=104.200/18
=104.200.64/19
=104.200.96/20
=104.200.128/17
=104.201/16
=104.202/15
=104.204/14
=104.208/12
=104.224/13
=104.232/19
=104.232.32/22
=104.232.38/23
=104.232.40/21
=104.232.48/20
=104.232.64/18
=104.232.128/17
=104.233/18
=104.233.128/17
=104.234/15
=104.236/14
=104.240/15
=104.242/16
=104.243/17
=104.243.128/18
=104.243.192/20
=104.243.208/21
=104.243.220/22
=104.243.224/19
=104.244/21
=104.244.12/22
=104.244.16/20
=104.244.32/19
=104.244.64/18
=104.244.128/17
=104.245/16
=104.246/15
=104.248/15
=104.250/19
=104.250.64/18
=104.250.128/17
=104.251/17
=104.251.128/20
=104.251.160/19
=104.251.192/18
=104.252/14
=107/9
=107.128/12
=107.144/14
=107.148/15
=107.150/17
=107.150.128/19
=107.150.160/23
=107.150.180/22
=107.150.184/21
=107.150.192/18
=107.151/16
=107.152/16
=107.154/15
=107.156/14
=107.160/16
=107.161/17
=107.161.128/19
=107.161.176/20
=107.161.192/18
=107.162/15
=107.164/14
=107.168/13
=107.176/14
=107.180/16
=107.181/17
=107.181.160/19
=107.181.192/18
=107.182/15
=107.184/14
=107.188/15
=107.190/16
=107.191/18
=107.191.64/22
=107.191.69/24
=107.191.70/23
=107.191.72/21
=107.191.80/20
=107.191.96/19
=107.191.128/17
=107.192/10
=108/8
=128.1/16
=128.2/15
=128.4/15
=128.6/16
=128.8/13
=128.17/16
=128.18/15
=128.20/15
=128.23/16
=128.24/15
=128.26/16
=128.29/16
=128.30/15
=128.32/14
=128.36/15
=128.38/16
=128.42/15
=128.44/16
=128.46/15
=128.48/14
=128.52/16
=128.54/15
=128.56/13
=128.64/16
=128.80/14
=128.84/15
=128.88/14
=128.92/16
=128.95/16
=128.96/15
=128.99/16
=128.100/14
=128.104/15
=128.107/16
=128.109/16
=128.110/15
=128.112/14
=128.116/17
=128.117/16
=128.118/15
=128.120/14
=128.125/16
=128.126/16
=128.128/15
=128.132/15
=128.135/16
=128.136/15
=128.138/16
=128.143/16
=128.144/12
=128.160/13
=128.169/16
=128.170/15
=128.172/14
=128.177/16
=128.180/14
=128.186/15
=128.188/14
=128.192/14
=128.196/15
=128.198/16
=128.200/16
=128.202/15
=128.205/16
=128.206/15
=128.208/14
=128.212/15
=128.215/16
=128.216/13
=128.224/13
=128.233/16
=128.235/16
=128.236/14
=128.241/16
=128.242/16
=128.244/15
=128.247/16
=128.248/15
=128.251/16
=128.252/14
=129.1/16
=129.2/15
=129.4/14
=129.8/15
=129.10/16
=129.14/15
=129.17/16
=129.19/16
=129.21/16
=129.22/15
=129.24/15
=129.29/16
=129.30/16
=129.32/13
=129.40/14
=129.44/16
=129.46/15
=129.48/13
=129.57/16
=129.58/15
=129.61/16
=129.62/15
=129.64/15
=129.66/16
=129.68/16
=129.71/16
=129.72/16
=129.74/15
=129.76/15
=129.79/16
=129.80/13
=129.89/16
=129.91/16
=129.92/15
=129.95/16
=129.97/16
=129.98/15
=129.100/15
=129.105/16
=129.106/15
=129.108/14
=129.112/13
=129.120/15
=129.123/16
=129.124/16
=129.128/16
=129.130/15
=129.133/16
=129.134/15
=129.137/16
=129.138/15
=129.141/16
=129.144/12
=129.160/13
=129.168/16
=129.170/15
=129.172/15
=129.174/16
=129.176/16
=129.179/16
=129.186/16
=129.188/14
=129.192/15
=129.196/15
=129.198/16
=129.200/14
=129.207/16
=129.209/16
=129.210/16
=129.212/15
=129.216/16
=129.218/15
=129.220/14
=129.224/15
=129.227/16
=129.228/14
=129.235/16
=129.236/14
=129.243/16
=129.244/15
=129.246/16
=129.248/16
=129.250/15
=129.252/15
=129.255/16
=130.1/16
=130.2/15
=130.4/14
=130.8/13
=130.16/13
=130.27/16
=130.29/16
=130.30/15
=130.33/16
=130.35/16
=130.36/16
=130.38/15
=130.40/15
=130.42/16
=130.44/14
=130.48/14
=130.52/15
=130.55/16
=130.57/16
=130.58/16
=130.61/16
=130.62/15
=130.64/15
=130.68/16
=130.70/15
=130.72/16
=130.74/16
=130.76/15
=130.80/15
=130.85/16
=130.86/16
=130.90/15
=130.94/16
=130.96/15
=130.99/16
=130.101/16
=130.103/16
=130.106/15
=130.108/14
=130.113/16
=130.114/16
=130.117/16
=130.118/15
=130.121/16
=130.122/16
=130.124/16
=130.126/15
=130.128/15
=130.131/16
=130.132/16
=130.134/15
=130.137/16
=130.150/15
=130.152/16
=130.154/16
=130.156/15
=130.160/16
=130.162/15
=130.164/17
=130.165/16
=130.166/15
=130.168/13
=130.176/14
=130.181/16
=130.182/16
=130.184/16
=130.187/16
=130.189/16
=130.191/16
=130.196/15
=130.199/16
=130.200/14
=130.205/16
=130.207/16
=130.210/15
=130.212/14
=130.218/15
=130.221/16
=130.222/16
=130.224/16
=130.245/16
=130.247/16
=130.248/19
=130.248.32/20
=130.248.56/23
=130.248.64/22
=130.248.128/17
=130.249/16
=130.250/16
=130.252/15
=130.254/16
=131.2/15
=131.4/14
=131.8/13
=131.16/12
=131.32/11
=131.64/13
=131.73/16
=131.74/15
=131.76/14
=131.80/12
=131.96/16
=131.98/16
=131.101/16
=131.103/16
=131.104/14
=131.109/16
=131.110/16
=131.118/15
=131.120/13
=131.128/16
=131.131/16
=131.132/14
=131.136/13
=131.144/15
=131.146/16
=131.148/14
=131.153/16
=131.156/15
=131.158/16
=131.162/15
=131.167/16
=131.168/16
=131.171/16
=131.179/16
=131.182/15
=131.184/16
=131.186/15
=131.189/16
=131.190/15
=131.192/14
=131.197/16
=131.198/15
=131.200/15
=131.202/16
=131.204/16
=131.208/15
=131.210/16
=131.212/16
=131.214/15
=131.216/16
=131.218/15
=131.222/15
=131.225/16
=131.226/16
=131.229/16
=131.230/16
=131.232/15
=131.235/16
=131.238/15
=131.240/15
=131.243/16
=131.247/16
=131.249/16
=131.250/16
=131.252/15
=132/10
=132.79/16
=132.80/12
=132.96/11
=132.128/12
=132.144/15
=132.147/18
=132.147.128/17
=132.148/16
=132.151/16
=132.152/16
=132.156/16
=132.158/15
=132.160/14
=132.164/16
=132.170/16
=132.172/14
=132.177/16
=132.178/16
=132.183/16
=132.188/15
=132.190/16
=132.192/15
=132.194/16
=132.197/16
=132.198/16
=132.200/13
=132.208/13
=132.216/14
=132.220/15
=132.223/16
=132.224/15
=132.226/16
=132.228/16
=132.233/16
=132.235/16
=132.236/14
=132.240/14
=132.245/16
=132.246/16
=132.249/16
=132.250/16
=132.253/16
=134.4/15
=134.6/16
=134.8/13
=134.16/16
=134.20/16
=134.22/15
=134.24/16
=134.26/16
=134.29/16
=134.31/16
=134.32/15
=134.38/15
=134.40/15
=134.42/17
=134.42.128/18
=134.42.192/19
=134.42.228/22
=134.42.232/21
=134.42.240/20
=134.43/16
=134.44/15
=134.46/16
=134.48/14
=134.52/15
=134.55/16
=134.56/15
=134.62/15
=134.64/13
=134.72/15
=134.74/16
=134.77/16
=134.78/15
=134.80/16
=134.82/16
=134.84/14
=134.88/15
=134.111/16
=134.112/15
=134.114/16
=134.116/15
=134.118/16
=134.120/13
=134.128/15
=134.131/16
=134.132/14
=134.136/15
=134.139/16
=134.140/15
=134.149/16
=134.150/16
=134.152/15
=134.154/16
=134.156/16
=134.161/16
=134.162/15
=134.164/14
=134.168/16
=134.170/16
=134.172/15
=134.174/16
=134.177/16
=134.179/16
=134.181/16
=134.182/16
=134.185/16
=134.186/15
=134.189/16
=134.190/16
=134.192/14
=134.197/16
=134.198/15
=134.200/15
=134.202/16
=134.204/15
=134.207/16
=134.209/16
=134.210/16
=134.215/16
=134.216/15
=134.218/16
=134.223/16
=134.224/16
=134.228/14
=134.232/14
=134.238/16
=134.240/15
=134.242/17
=134.242.128/18
=134.242.192/19
=134.243/16
=134.244/16
=134.248/16
=134.250/15
=134.252/15
=134.254/16
=135/10
=135.64/12
=135.80/14
=135.84/19
=135.84.32/20
=135.84.48/22
=135.84.56/21
=135.84.64/18
=135.84.128/20
=135.84.144/22
=135.84.152/21
=135.84.160/19
=135.84.192/19
=135.84.224/21
=135.85/16
=135.86/15
=135.88/15
=135.91/16
=135.92/14
=135.96/11
=135.128/12
=135.144/14
=135.148/16
=135.150/15
=135.152/13
=135.160/11
=135.192/14
=135.197/16
=135.198/15
=135.200/13
=135.208/12
=135.224/11
=136/12
=136.16/14
=136.20/15
=136.22/19
=136.22.64/18
=136.22.128/17
=136.23/16
=136.24/13
=136.32/11
=136.64/10
=136.128/13
=136.136/14
=136.140/15
=136.142/16
=136.143.128/18
=136.143.192/19
=136.144/20
=136.145/16
=136.146/15
=136.149/16
=136.150/15
=136.152/16
=136.159/16
=136.160/15
=136.162/16
=136.165/16
=136.166/15
=136.168/16
=136.171/16
=136.174/15
=136.176/13
=136.184/16
=136.188/14
=136.192/14
=136.196/15
=136.200/16
=136.202/15
=136.204/15
=136.207/16
=136.208/12
=136.224/16
=136.226/15
=136.228/17
=136.228.176/20
=136.228.192/18
=136.229/16
=136.234/15
=136.236/14
=136.240/15
=136.242/16
=136.244/14
=136.248/14
=136.252/15
=136.254/16
=137/12
=137.16/16
=137.18/15
=137.20/14
=137.24/13
=137.32/16
=137.35/16
=137.36/14
=137.40/15
=137.42/16
=137.45/16
=137.46/16
=137.48/15
=137.51/16
=137.52/15
=137.54/16
=137.57/16
=137.65/16
=137.66/15
=137.69/16
=137.70/15
=137.72/16
=137.75/16
=137.77/16
=137.78/15
=137.80/13
=137.88/14
=137.94/15
=137.98/15
=137.100/16
=137.102/15
=137.104/16
=137.106/15
=137.110/16
=137.112/15
=137.114/16
=137.116/14
=137.122/15
=137.124/14
=137.128/16
=137.130/15
=137.134/15
=137.136/15
=137.139/16
=137.140/14
=137.144/15
=137.146/16
=137.148/14
=137.152/16
=137.155/16
=137.159/16
=137.160/15
=137.162/16
=137.164/15
=137.167/16
=137.168/15
=137.170/16
=137.173/16
=137.175/16
=137.176/13
=137.184/14
=137.188/16
=137.190/16
=137.192/16
=137.197/16
=137.198/15
=137.200/14
=137.206/15
=137.209/16
=137.210/15
=137.212/16
=137.216/16
=137.220/16
=137.225/16
=137.227/16
=137.228/14
=137.232/13
=137.240/13
=137.249/16
=137.252/16
=137.254/16
=138.1/16
=138.2/16
=138.5/16
=138.8/14
=138.12/15
=138.15/16
=138.16/15
=138.18/16
=138.20/16
=138.23/16
=138.26/15
=138.28/15
=138.31/16
=138.32/14
=138.39/16
=138.42/15
=138.45/16
=138.46/15
=138.49/16
=138.50/15
=138.52/14
=138.56/15
=138.58/16
=138.60/15
=138.65/16
=138.67/16
=138.68/15
=138.72/15
=138.74/16
=138.76/16
=138.78/16
=138.82/15
=138.84/14
=138.88/14
=138.92/15
=138.95/16
=138.98/16
=138.105/16
=138.108/14
=138.112/14
=138.116/16
=138.119/16
=138.120/16
=138.123/16
=138.125/16
=138.126/15
=138.128/17
=138.128.128/21
=138.128.144/20
=138.128.160/19
=138.128.192/18
=138.129/16
=138.133/16
=138.135/16
=138.136/13
=138.144/12
=138.160/12
=138.176/13
=138.184/16
=138.192/15
=138.196/15
=138.202/16
=138.207/16
=138.208/15
=138.210/16
=138.214/16
=138.218/16
=138.220/16
=138.229/16
=138.230/16
=138.234/16
=138.236/15
=138.238/16
=138.240/15
=138.242/16
=138.247/16
=138.254/16
=139.31/16
=139.32/13
=139.40/14
=139.46/16
=139.48/15
=139.51/16
=139.52/16
=139.55/16
=139.56/15
=139.60/15
=139.62/16
=139.64.128/17
=139.65/16
=139.67/16
=139.68/14
=139.72/15
=139.76/15
=139.78/16
=139.81/16
=139.84/15
=139.87/16
=139.88/16
=139.93/16
=139.94/15
=139.99/16
=139.102/15
=139.104/16
=139.121/16
=139.125/16
=139.126/15
=139.131/16
=139.135/16
=139.136/15
=139.138/17
=139.138.128/18
=139.138.224/19
=139.139/16
=139.140/16
=139.142/16
=139.144/16
=139.146/15
=139.151/16
=139.161/16
=139.169/16
=139.171/16
=139.172/15
=139.177/16
=139.180/21
=139.180.16/20
=139.180.32/19
=139.180.224/19
=139.181/16
=139.182/16
=139.185/16
=139.187/16
=139.225/16
=139.229/16
=139.231/16
=139.232/13
=139.240/13
=139.248/14
=139.252/15
=139.254/16
=140.1/16
=140.2/15
=140.4/14
=140.8/13
=140.16/12
=140.32/11
=140.64/13
=140.72/15
=140.74/16
=140.76/16
=140.80/16
=140.82/17
=140.82.128/18
=140.82.208/20
=140.82.224/19
=140.87/16
=140.88/14
=140.95/16
=140.98/15
=140.100/14
=140.104/16
=140.106/15
=140.108/16
=140.139/16
=140.140/15
=140.142/16
=140.144/14
=140.152/14
=140.156/15
=140.158/16
=140.160/14
=140.165/16
=140.167/16
=140.169/16
=140.170/15
=140.172/14
=140.176/15
=140.178/16
=140.180/16
=140.182/15
=140.184/14
=140.188/15
=140.190/16
=140.192/13
=140.201/16
=140.202/16
=140.204/16
=140.208/15
=140.211/16
=140.212/16
=140.214/15
=140.216/13
=140.225/16
=140.226/16
=140.228/15
=140.230/16
=140.232/14
=140.236/16
=140.238/15
=140.241/16
=140.242/16
=140.244/15
=140.247/16
=140.248/16
=140.251/16
=140.252/16
=140.254/16
=141.86/16
=141.102/16
=141.104/16
=141.106/15
=141.109/16
=141.110/15
=141.112/16
=141.114/16
=141.116/14
=141.121/16
=141.122/15
=141.124/16
=141.126/15
=141.128/15
=141.131/16
=141.133/16
=141.139/16
=141.140/15
=141.142/16
=141.149/16
=141.150/15
=141.152/13
=141.160/15
=141.162/16
=141.164/17
=141.165/16
=141.166/15
=141.173/16
=141.174/16
=141.177/16
=141.180/14
=141.184/13
=141.193/20
=141.193.16/22
=141.193.21/24
=141.193.22/23
=141.193.24/21
=141.193.32/21
=141.193.44/22
=141.193.48/20
=141.193.64/19
=141.193.96/21
=141.193.104/22
=141.193.112/20
=141.193.128/20
=141.193.144/21
=141.193.160/19
=141.193.192/20
=141.193.208/22
=141.193.212/23
=141.193.216/21
=141.193.224/19
=141.195/16
=141.197/16
=141.198/15
=141.202/16
=141.204/14
=141.209/16
=141.210/15
=141.212/14
=141.216/14
=141.220/15
=141.222/16
=141.224/15
=141.226.136/23
=141.226.138/24
=141.226.140/22
=141.230/16
=141.232/14
=141.236/16
=141.238/15
=141.240/16
=141.242/16
=141.246/15
=141.248/16
=141.251/16
=141.254/16
=142/10
=142.64/12
=142.80/13
=142.88/15
=142.90/16
=142.91/21
=142.91.16/20
=142.91.32/19
=142.91.64/19
=142.91.96/20
=142.91.112/21
=142.91.128/20
=142.91.144/21
=142.91.160/19
=142.91.192/18
=142.92/14
=142.96/11
=142.128/12
=142.144/13
=142.152/15
=142.154.128/17
=142.155/16
=142.156/14
=142.160/11
=142.192/11
=142.224/13
=142.232/15
=142.234/19
=142.234.40/21
=142.234.48/20
=142.234.64/18
=142.234.128/17
=142.235/16
=142.236/14
=142.240/14
=142.244/15
=142.246/16
=142.248/13
=143.1/16
=143.2/15
=143.4/14
=143.8/13
=143.16/12
=143.32/13
=143.40/16
=143.42/15
=143.44/15
=143.46/16
=143.48/15
=143.55/16
=143.56/13
=143.66/15
=143.68/14
=143.72/13
=143.80/13
=143.88/16
=143.91/16
=143.95/16
=143.98/16
=143.100/14
=143.104/15
=143.109/16
=143.110/15
=143.112/14
=143.116/16
=143.120/16
=143.122/15
=143.124/16
=143.127/16
=143.131/16
=143.132/14
=143.138/15
=143.140/14
=143.144/12
=143.162/16
=143.165/16
=143.166/16
=143.168/16
=143.170/16
=143.172/15
=143.175/16
=143.181/16
=143.182/15
=143.184/14
=143.190/15
=143.192/18
=143.192.64/19
=143.192.128/17
=143.193/16
=143.194/15
=143.197/16
=143.198/15
=143.200/16
=143.203/16
=143.204/16
=143.206/15
=143.209/16
=143.211/16
=143.212/14
=143.219/16
=143.220/16
=143.222/15
=143.226/15
=143.228/14
=143.232/16
=143.235/16
=143.236/16
=143.240/14
=143.244/16
=143.246/15
=143.249/16
=143.250/15
=143.254/16
=144.3/16
=144.5/16
=144.8/14
=144.13/16
=144.14/15
=144.17/16
=144.18/15
=144.25/16
=144.26/16
=144.28/14
=144.33/16
=144.34/15
=144.36/18
=144.36.64/22
=144.36.68/23
=144.36.74/23
=144.36.76/22
=144.36.80/20
=144.36.96/21
=144.36.105/24
=144.36.106/23
=144.36.108/22
=144.36.112/20
=144.36.130/23
=144.36.132/23
=144.36.136/22
=144.36.142/23
=144.36.146/23
=144.36.150/23
=144.36.152/21
=144.36.160/20
=144.36.177/24
=144.36.179/24
=144.36.180/23
=144.36.186/23
=144.36.190/23
=144.36.192/21
=144.36.200/22
=144.36.204/23
=144.36.208/23
=144.36.212/23
=144.36.218/23
=144.36.237/24
=144.36.238/23
=144.36.240/22
=144.36.246/23
=144.36.252/23
=144.37/16
=144.38/15
=144.40/16
=144.42/16
=144.45/16
=144.46/15
=144.49/16
=144.50/15
=144.58/15
=144.60/15
=144.62/16
=144.67/16
=144.68/14
=144.72/14
=144.77/16
=144.78/16
=144.80/15
=144.83/16
=144.86.128/17
=144.88/14
=144.92/15
=144.94/16
=144.96/16
=144.99/16
=144.100/14
=144.104/14
=144.108/15
=144.111/16
=144.112/14
=144.116/15
=144.118/16
=144.121/16
=144.125/16
=144.126/16
=144.128/15
=144.141/16
=144.142/15
=144.144/16
=144.146/15
=144.148/14
=144.152/13
=144.160/14
=144.166/15
=144.168/14
=144.172/16
=144.174/15
=144.182/15
=144.184/13
=144.192/16
=144.194/15
=144.196/15
=144.198/16
=144.201/16
=144.202/15
=144.207/16
=144.208.64/18
=144.210/15
=144.212/16
=144.215/16
=144.216/15
=144.219/16
=144.220/14
=144.224/12
=144.240/13
=144.249/16
=144.250/15
=144.252/15
=144.254/16
=146.1/16
=146.5/16
=146.6/15
=146.8/15
=146.10/16
=146.12/14
=146.16/15
=146.18/16
=146.20/16
=146.22/15
=146.24/13
=146.32/12
=146.49/16
=146.53/16
=146.54/15
=146.57/16
=146.58/16
=146.61/16
=146.63/16
=146.65/16
=146.68/15
=146.71/18
=146.71.64/20
=146.71.80/21
=146.71.88/22
=146.71.92/23
=146.71.96/19
=146.71.128/17
=146.73/16
=146.74/16
=146.76/16
=146.78/15
=146.82/16
=146.84/15
=146.86/16
=146.88/20
=146.88.29/24
=146.88.30/23
=146.88.96/19
=146.88.136/21
=146.88.148/22
=146.88.176/20
=146.88.192/22
=146.88.208/20
=146.88.224/21
=146.88.240/20
=146.89/16
=146.91/16
=146.92/14
=146.96/16
=146.98/16
=146.111/16
=146.113/16
=146.114/15
=146.121/16
=146.122/15
=146.125/16
=146.126/15
=146.128/14
=146.132/16
=146.135/16
=146.137/16
=146.138/15
=146.142/15
=146.145/16
=146.146/15
=146.148/14
=146.152/15
=146.154/16
=146.156/15
=146.163/16
=146.165/16
=146.166/15
=146.168/16
=146.170/16
=146.174/16
=146.180/15
=146.183/16
=146.184/16
=146.186/15
=146.189/16
=146.190/16
=146.197/16
=146.198/15
=146.200/13
=146.208/15
=146.214/15
=146.217/16
=146.218/16
=146.222/15
=146.225/16
=146.226/16
=146.229/16
=146.233/16
=146.235/16
=146.236/14
=146.240/16
=146.242/15
=146.244/15
=146.246/16
=146.250/16
=146.252/16
=147/14
=147.4/15
=147.9/16
=147.11/16
=147.15/16
=147.16/13
=147.24/15
=147.26/16
=147.31/16
=147.34/15
=147.36/14
=147.40/16
=147.42/16
=147.48/15
=147.51/16
=147.53/16
=147.55/16
=147.56/14
=147.61/16
=147.62/15
=147.64/16
=147.70/15
=147.72/15
=147.74/16
=147.79/16
=147.80/15
=147.85/16
=147.90/16
=147.92/19
=147.92.48/20
=147.92.64/18
=147.97/16
=147.101/16
=147.103/16
=147.104/14
=147.108/16
=147.113/16
=147.114/15
=147.116/15
=147.118/16
=147.120/15
=147.124/16
=147.126/16
=147.128/14
=147.133/16
=147.134/16
=147.135/17
=147.136/14
=147.140/15
=147.144/16
=147.146/16
=147.153/16
=147.154/15
=147.159/16
=147.160/16
=147.164/15
=147.166/16
=147.168/15
=147.170/16
=147.174/16
=147.177/16
=147.178/15
=147.182/15
=147.185/16
=147.187/16
=147.190/15
=147.194/15
=147.198/15
=147.202/15
=147.205/16
=147.206/15
=147.208/16
=147.216/14
=147.221/16
=147.222/15
=147.224/14
=147.238/15
=147.240/15
=147.242/16
=147.244/14
=147.248/15
=147.253/16
=147.254/15
=148.1/16
=148.4/15
=148.8/13
=148.16/12
=148.32/12
=148.48/14
=148.52/15
=148.55/16
=148.57/16
=148.58/16
=148.59/19
=148.59.32/20
=148.59.48/21
=148.59.56/24
=148.59.58/23
=148.59.60/22
=148.59.64/19
=148.59.96/20
=148.59.112/23
=148.59.114/24
=148.59.116/22
=148.59.120/21
=148.59.128/17
=148.61/16
=148.62/16
=148.64/19
=148.64.32/20
=148.64.48/21
=148.64.60/22
=148.64.64/18
=148.64.128/17
=148.65/16
=148.66.32/20
=148.66.160/19
=148.66.192/18
=148.72/14
=148.76/17
=148.76.128/18
=148.76.192/19
=148.77/16
=148.78/16
=148.80/16
=148.84/14
=148.89/16
=148.90/15
=148.92/14
=148.96/14
=148.100/16
=148.104/14
=148.108/15
=148.112/14
=148.116/15
=148.124/14
=148.128/14
=148.132/15
=148.134/16
=148.137/16
=148.139/16
=148.141/16
=148.142/16
=148.144/16
=148.146/15
=148.149/16
=148.150/16
=148.152/13
=148.162/15
=148.164/14
=148.168/16
=148.170/15
=148.172/14
=148.177/16
=148.178/15
=148.180/16
=148.183/16
=148.184/16
=148.186/16
=148.188/14
=148.192/15
=148.194/16
=148.199/16
=148.254/16
=149.1/16
=149.2/16
=149.4/14
=149.8/13
=149.16/13
=149.24/15
=149.26/16
=149.28/14
=149.32/12
=149.48/16
=149.50/15
=149.52/15
=149.55/16
=149.56/15
=149.58/16
=149.60/15
=149.63/16
=149.64/12
=149.80/16
=149.82/15
=149.84/14
=149.88/15
=149.91/16
=149.92/14
=149.96/13
=149.104/14
=149.108/16
=149.110/15
=149.112/13
=149.120/14
=149.124/15
=149.127/16
=149.128/16
=149.130/15
=149.136/15
=149.138/16
=149.141/16
=149.142/15
=149.145/16
=149.149/16
=149.150/15
=149.152/16
=149.158/15
=149.160/14
=149.164/15
=149.166/16
=149.168/15
=149.173/16
=149.174/15
=149.198/15
=149.234/21
=149.234.192/18
=149.248/16
=149.252/15
=150.102/15
=150.104/15
=150.108/16
=150.110/15
=150.113/16
=150.114/16
=150.118/15
=150.120/16
=150.123/16
=150.124/14
=150.130/15
=150.133/16
=150.134/15
=150.136/15
=150.141/16
=150.142/15
=150.144/16
=150.148/15
=150.152/14
=150.156/15
=150.159/16
=150.160/16
=150.166/15
=150.168/14
=150.172/16
=150.174/16
=150.176/15
=150.179/16
=150.180/15
=150.182/16
=150.184/16
=150.190/16
=150.192/14
=150.196/16
=150.198/15
=150.200/15
=150.202/16
=150.208/14
=150.212/16
=150.215/16
=150.216/16
=150.218/15
=150.220/15
=150.222/16
=150.224/15
=150.226/16
=150.228/16
=150.230/15
=150.232/14
=150.238/15
=150.240/16
=150.242.88/22
=150.242.220/22
=150.243/16
=150.245/16
=150.247/16
=150.248/16
=150.250/16
=150.252/15
=151.101/16
=151.102/15
=151.104/15
=151.106.160/19
=151.106.240/20
=151.107/16
=151.108/14
=151.112/15
=151.114/16
=151.116/14
=151.121/16
=151.122/15
=151.124/15
=151.126/16
=151.128/16
=151.131/16
=151.132/16
=151.134/16
=151.137/16
=151.138/15
=151.140/14
=151.144/13
=151.152/14
=151.159/16
=151.160/13
=151.168/15
=151.171/16
=151.174/16
=151.179/16
=151.181/16
=151.185/16
=151.186/16
=151.188/16
=151.190/15
=151.192/12
=151.208/15
=151.210/17
=151.213/16
=151.214/15
=152.1/16
=152.2/15
=152.4/14
=152.8/13
=152.16/12
=152.32/18
=152.33/16
=152.34/15
=152.36/14
=152.40/13
=152.48/14
=152.53/16
=152.54/15
=152.60/14
=152.64/15
=152.67/16
=152.68/15
=152.70/16
=152.72/16
=152.75/16
=152.79/16
=152.80/16
=152.82/16
=152.85/16
=152.86/15
=152.97/16
=152.100/16
=152.113/16
=152.116/15
=152.119/16
=152.120/13
=152.128/14
=152.132/15
=152.135/16
=152.137/16
=152.138/16
=152.140/15
=152.142/16
=152.144/15
=152.146/16
=152.148/16
=152.151/16
=152.154/15
=152.157/16
=152.158/15
=152.160/14
=152.164/16
=152.176/12
=152.192/13
=152.208/12
=152.224/15
=152.227/16
=152.228/15
=153.2/16
=153.4/16
=153.6/15
=153.8/14
=153.12/15
=153.14/16
=153.16/16
=153.18/16
=153.21/16
=153.22/15
=153.24/13
=153.32/15
=153.38/15
=153.40/13
=153.48/12
=153.64/12
=153.80/13
=153.89/16
=153.90/15
=153.102/15
=153.104/15
=153.106/16
=153.113/16
=153.114/15
=153.116/15
=154.1/16
=154.2/15
=154.4/14
=154.9/16
=154.11/16
=154.12/15
=154.17/16
=154.18/15
=154.20/14
=154.24/13
=154.35/16
=154.36/14
=154.40/13
=154.48/12
=154.64/16
=155.1/16
=155.2/15
=155.5/16
=155.6/15
=155.8/15
=155.10/16
=155.13/16
=155.14/15
=155.16/12
=155.33/16
=155.34/16
=155.35/24
=155.35.2/23
=155.35.4/22
=155.35.8/21
=155.35.16/20
=155.35.32/23
=155.35.36/22
=155.35.40/22
=155.35.44/23
=155.35.48/20
=155.35.64/18
=155.35.128/18
=155.35.192/19
=155.35.224/23
=155.35.227/24
=155.35.228/22
=155.35.233/24
=155.35.234/23
=155.35.236/22
=155.35.240/20
=155.36/14
=155.40/14
=155.44/16
=155.46/15
=155.48/14
=155.52/15
=155.57/16
=155.58/16
=155.61/16
=155.63/16
=155.64/15
=155.67/16
=155.68/16
=155.70/16
=155.72/16
=155.74/15
=155.76/14
=155.80/13
=155.88/16
=155.90/15
=155.92/16
=155.94/15
=155.96/13
=155.104/16
=155.106/15
=155.108/14
=155.112/12
=155.128/15
=155.130/16
=155.134/15
=155.138/18
=155.138.128/17
=155.139/16
=155.141/16
=155.142/16
=155.146/15
=155.148/14
=155.152/14
=155.156/15
=155.161/16
=155.162/15
=155.164/14
=155.168/13
=155.176/13
=155.184/16
=155.186/16
=155.188/14
=155.193/16
=155.194/15
=155.197/16
=155.199/16
=155.200/15
=155.203/16
=155.206/16
=155.208/16
=155.212/14
=155.216/14
=155.220/15
=155.222/16
=155.224/15
=155.226/16
=155.229/16
=155.241/16
=155.242/15
=155.244/16
=155.246/15
=155.248/16
=155.252/16
=155.254/19
=155.254.64/18
=155.254.128/17
=156.1/16
=156.2/15
=156.4/14
=156.9/16
=156.11/16
=156.12/16
=156.15/16
=156.19/16
=156.20/15
=156.23/16
=156.24/16
=156.26/15
=156.29/16
=156.30/16
=156.32/15
=156.34/16
=156.36/15
=156.39/16
=156.40/15
=156.42/16
=156.44/14
=156.53/16
=156.55/16
=156.56/15
=156.60/16
=156.63/16
=156.64/15
=156.66/16
=156.68/16
=156.70/15
=156.72/13
=156.80/15
=156.82/16
=156.84/14
=156.88/13
=156.96/16
=156.98/15
=156.100/14
=156.104/15
=156.107/16
=156.108/14
=156.112/15
=156.117/16
=156.119/16
=156.120/13
=156.128/14
=156.132/16
=156.134/16
=156.136/13
=156.144/15
=156.146/16
=156.151/16
=156.152/15
=156.154/16
=157.21/16
=157.22/16
=157.30/15
=157.52/14
=157.56/14
=157.60/16
=157.62/16
=157.87/16
=157.89/16
=157.90/15
=157.93/16
=157.95/16
=157.98/16
=157.120.192/19
=157.121/16
=157.123/16
=157.126/15
=157.130/15
=157.132/14
=157.137/16
=157.139/16
=157.141/16
=157.142/15
=157.145/16
=157.146/16
=157.149/16
=157.150/15
=157.152/15
=157.154/16
=157.160/16
=157.165/16
=157.166/16
=157.170/16
=157.174/15
=157.176/16
=157.178/16
=157.182/15
=157.184/16
=157.185/17
=157.185.128/18
=157.187/16
=157.188/15
=157.191/16
=157.194/15
=157.196/16
=157.198/15
=157.201/16
=157.202/16
=157.204/16
=157.206/15
=157.208/15
=157.210/16
=157.212/14
=157.216/13
=157.224/15
=157.226/16
=157.229/16
=157.230/16
=157.232/14
=157.238/15
=157.240/15
=157.242/16
=157.244/15
=157.246/16
=157.248/16
=157.250/18
=157.251/16
=157.252/16
=157.254/16
=158/11
=158.32/14
=158.48/16
=158.51/16
=158.52/15
=158.55/16
=158.56/15
=158.59/16
=158.61/16
=158.62/15
=158.65/16
=158.68/14
=158.72/15
=158.74/16
=158.76/14
=158.80/13
=158.88/16
=158.91/16
=158.93/16
=158.95/16
=158.96/16
=158.98/16
=158.100/15
=158.103/16
=158.104/16
=158.106/15
=158.111/16
=158.113/16
=158.114/15
=158.116/15
=158.118/16
=158.120/14
=158.128/16
=158.130/16
=158.134/15
=158.136/14
=158.140/20
=158.140.32/19
=158.141/16
=158.142/16
=158.145/16
=158.146/17
=158.146.144/20
=158.146.160/19
=158.146.192/18
=158.147/16
=158.151/16
=158.153/16
=158.154/15
=158.157/16
=158.159/16
=158.163/16
=158.164/15
=158.171/16
=158.183/16
=158.184/14
=158.188/15
=158.219/16
=158.221/16
=158.222/16
=158.224/16
=158.228/15
=158.235/16
=158.236/14
=158.240/13
=158.252/15
=158.254/16
=159.1/16
=159.2/15
=159.4/15
=159.6/16
=159.9/16
=159.10/15
=159.14/16
=159.17/16
=159.18/15
=159.21/16
=159.24/16
=159.26/16
=159.28/18
=159.32/15
=159.35/16
=159.36/15
=159.39/16
=159.40/14
=159.44/15
=159.47/16
=159.48/15
=159.53/16
=159.54/15
=159.56/15
=159.59/16
=159.61/16
=159.62/15
=159.64/14
=159.68/16
=159.70/15
=159.74/16
=159.76/14
=159.82/15
=159.85/16
=159.87/16
=159.88/15
=159.91/16
=159.94/16
=159.96/14
=159.102/16
=159.105/16
=159.106/16
=159.108/16
=159.110/15
=159.112/15
=159.115/16
=159.116/16
=159.117.48/20
=159.117.160/19
=159.117.208/21
=159.117.216/22
=159.118/15
=159.120/15
=159.123/16
=159.124/14
=159.128/15
=159.131/16
=159.132/15
=159.135/17
=159.135.160/19
=159.135.192/18
=159.136/15
=159.139/16
=159.140/14
=159.145/16
=159.150/16
=159.153/16
=159.155/16
=159.157/16
=159.158/15
=159.161/16
=159.163/16
=159.164/15
=159.166/16
=159.169/16
=159.172/16
=159.174/15
=159.176/15
=159.178/16
=159.181/16
=159.182/15
=159.184/14
=159.188/15
=159.191/16
=159.198/15
=159.201/16
=159.202/15
=159.204/16
=159.206/16
=159.208/15
=159.212/16
=159.214/15
=159.218/16
=159.220/14
=159.225/16
=159.227/16
=159.229/16
=159.230/15
=159.233/16
=159.234/15
=159.238/16
=159.240/16
=159.242/21
=159.242.32/19
=159.242.128/18
=159.242.192/19
=159.242.240/20
=159.243/16
=159.246/15
=159.249/16
=159.250/15
=159.252/16
=160.1/16
=160.2/15
=160.7/16
=160.10/16
=160.19/20
=160.19.24/21
=160.19.104/22
=160.19.160/22
=160.20.208/22
=160.20.230/23
=160.20.232/21
=160.20.251/24
=160.31/16
=160.32/17
=160.32.128/18
=160.32.192/19
=160.32.224/20
=160.32.248/21
=160.33/16
=160.34/15
=160.36/15
=160.39/16
=160.41/16
=160.42/15
=160.65/16
=160.69/16
=160.72/15
=160.76/16
=160.79/16
=160.81/16
=160.82/15
=160.84/16
=160.87/16
=160.88/16
=160.91/16
=160.93/16
=160.94/15
=160.101/16
=160.102/16
=160.106/15
=160.108/14
=160.112/16
=160.125/16
=160.126/15
=160.128/12
=160.144/13
=160.153/16
=160.202.64/18
=160.205/16
=160.207/16
=160.208/15
=160.212/16
=160.223/16
=160.227/16
=160.229/16
=160.230/16
=160.231/18
=160.231.192/18
=160.232/16
=160.238.22/23
=160.238.31/24
=160.238.41/24
=160.238.42/23
=160.238.44/22
=160.238.102/23
=160.253/16
=160.254/16
=161.1/16
=161.6/15
=161.11/16
=161.13/16
=161.14/15
=161.16/16
=161.19/16
=161.21/16
=161.26/16
=161.28/16
=161.31/16
=161.32/15
=161.35/16
=161.36/16
=161.38/15
=161.40/16
=161.44/14
=161.49.188/22
=161.49.232/21
=161.49.240/20
=161.51/16
=161.55/16
=161.57/16
=161.58/16
=161.60/15
=161.63/16
=161.68/15
=161.77/16
=161.80/15
=161.82/16
=161.97/16
=161.98/15
=161.100/14
=161.107/16
=161.108/15
=161.113/16
=161.114/15
=161.119/16
=161.120/15
=161.124/15
=161.127/16
=161.128/15
=161.130/16
=161.133/16
=161.135/16
=161.136/15
=161.141/16
=161.144/15
=161.149/16
=161.150/15
=161.153/16
=161.154/15
=161.157/16
=161.159/16
=161.160/12
=161.176/13
=161.184/14
=161.188/16
=161.191/16
=161.192/14
=161.197/16
=161.198/15
=161.201/16
=161.203/16
=161.204/15
=161.206/16
=161.208/14
=161.213/16
=161.214/15
=161.216/15
=161.219/16
=161.220/14
=161.224/14
=161.228/16
=161.231/16
=161.232/15
=161.235/16
=161.236/15
=161.239/16
=161.240/14
=161.244/15
=161.247/16
=161.249/16
=161.250/16
=161.253/16
=161.254/16
=162/14
=162.5/16
=162.6/15
=162.8/15
=162.10/16
=162.12/17
=162.12.128/18
=162.12.192/22
=162.12.216/21
=162.12.224/20
=162.12.248/21
=162.15/16
=162.16/14
=162.20/16
=162.22/16
=162.24/16
=162.27/16
=162.28/14
=162.32/14
=162.36/15
=162.39/16
=162.40/13
=162.48/13
=162.57/16
=162.58/15
=162.60/15
=162.63/16
=162.64/12
=162.80/14
=162.84/15
=162.87/16
=162.88/13
=162.96/13
=162.104/16
=162.106/15
=162.108/14
=162.113/16
=162.114/15
=162.116/14
=162.120/15
=162.123/16
=162.124/14
=162.128/14
=162.132/16
=162.134/15
=162.136/14
=162.140/15
=162.142/17
=162.143/16
=162.144/16
=162.148/14
=162.152/13
=162.160/11
=162.192/12
=162.208/13
=162.216/17
=162.216.128/21
=162.216.136/23
=162.216.144/20
=162.216.160/19
=162.216.192/18
=162.217/17
=162.217.128/18
=162.217.192/19
=162.217.224/20
=162.217.240/21
=162.217.252/22
=162.218/18
=162.218.64/20
=162.218.80/21
=162.218.96/19
=162.218.128/19
=162.218.160/20
=162.218.180/22
=162.218.184/21
=162.218.192/18
=162.219/19
=162.219.40/21
=162.219.48/20
=162.219.64/20
=162.219.88/21
=162.219.96/19
=162.219.128/17
=162.220/17
=162.220.128/18
=162.220.192/19
=162.220.224/20
=162.220.248/21
=162.221/18
=162.221.64/21
=162.221.72/22
=162.221.80/20
=162.221.96/19
=162.221.128/17
=162.222/18
=162.222.64/20
=162.222.80/21
=162.222.91/24
=162.222.92/22
=162.222.96/19
=162.222.128/17
=162.223/17
=162.223.128/19
=162.223.160/21
=162.223.176/20
=162.223.192/18
=162.224/12
=162.240/14
=162.244/19
=162.244.32/20
=162.244.48/22
=162.244.56/21
=162.244.64/18
=162.244.128/17
=162.245/18
=162.245.64/19
=162.245.96/20
=162.245.112/21
=162.245.120/22
=162.245.128/18
=162.245.192/21
=162.245.200/22
=162.245.208/20
=162.245.224/19
=162.246/16
=162.247.8/21
=162.247.16/20
=162.247.32/19
=162.247.64/18
=162.247.128/17
=162.248/17
=162.248.128/18
=162.248.192/22
=162.248.200/21
=162.248.208/20
=162.248.224/19
=162.249/16
=162.250/17
=162.250.128/18
=162.250.192/20
=162.250.208/21
=162.250.220/22
=162.250.224/19
=162.251/19
=162.251.40/21
=162.251.48/20
=162.251.64/18
=162.251.128/17
=162.252/16
=162.253/20
=162.253.20/22
=162.253.24/21
=162.253.32/19
=162.253.64/18
=162.253.128/17
=162.254/16
=162.255/19
=162.255.32/20
=162.255.52/22
=162.255.56/21
=162.255.64/18
=162.255.128/18
=162.255.192/22
=162.255.200/21
=162.255.208/20
=162.255.224/19
=163.2/16
=163.4/16
=163.6/16
=163.11/16
=163.12/16
=163.33/16
=163.35/16
=163.36/14
=163.40/15
=163.47.76/22
=163.118/16
=163.120/16
=163.123/16
=163.124/16
=163.126/16
=163.129/16
=163.150/15
=163.153/16
=163.154/15
=163.176/16
=163.181/16
=163.182/15
=163.184/14
=163.188/16
=163.190/15
=163.192/15
=163.194/16
=163.205/16
=163.206/15
=163.230/15
=163.234/15
=163.236/15
=163.238/16
=163.240/15
=163.243/16
=163.244/15
=163.246/16
=163.248/15
=163.251/16
=163.252/15
=163.254/16
=164.42/16
=164.44/15
=164.47/16
=164.49/16
=164.50/15
=164.52.128/18
=164.52.224/19
=164.54/15
=164.56/15
=164.58/16
=164.62/15
=164.64/14
=164.68/16
=164.72/16
=164.74/16
=164.76/16
=164.79/16
=164.82/15
=164.84/16
=164.86/15
=164.89/16
=164.90/15
=164.92/16
=164.93/17
=164.94/15
=164.99/16
=164.101/16
=164.102/15
=164.104/14
=164.109/16
=164.110/15
=164.113/16
=164.114/16
=164.116/14
=164.120/14
=164.144/15
=164.152/15
=164.154/16
=164.156/14
=164.165/16
=164.166/15
=164.168/13
=164.176/16
=164.178/15
=164.180/14
=164.184/13
=164.192/12
=164.208/14
=164.212/15
=164.214/16
=164.216/13
=164.224/11
=165.1/16
=165.2/16
=165.6/15
=165.13/16
=165.19/16
=165.20/16
=165.22/15
=165.24/16
=165.26/15
=165.28/15
=165.30/16
=165.32/13
=165.40/15
=165.44/14
=165.48/16
=165.64/15
=165.66/16
=165.68/16
=165.70/15
=165.72/16
=165.74/15
=165.77/16
=165.79/16
=165.80/14
=165.84.224/21
=165.85/16
=165.87/16
=165.88/15
=165.91/16
=165.92/16
=165.94/15
=165.97/16
=165.103/16
=165.104/14
=165.109/16
=165.110/15
=165.112/15
=165.115/16
=165.116/15
=165.119/16
=165.120/13
=165.128/14
=165.134/15
=165.136/14
=165.140/16
=165.150/15
=165.152/13
=165.160/14
=165.164/16
=165.166/15
=165.168/16
=165.170/15
=165.172/16
=165.173.64/18
=165.173.128/17
=165.174/15
=165.176/14
=165.181/16
=165.184/15
=165.188/15
=165.190/16
=165.193/16
=165.195/16
=165.196/14
=165.200/15
=165.203/16
=165.204/16
=165.206/15
=165.208/16
=165.212/16
=165.214/15
=165.216/15
=165.219/16
=165.221/16
=165.223/16
=165.224/14
=165.230/16
=165.232/16
=165.234/15
=165.236/14
=165.245/16
=165.247/16
=165.248/14
=165.252/15
=165.254/16
=166/13
=166.16/12
=166.32/12
=166.48/16
=166.49/17
=166.50/15
=166.52/14
=166.56/13
=166.66/15
=166.68/14
=166.72/15
=166.74/16
=166.76/15
=166.78/16
=166.80/16
=166.82/16
=166.84/16
=166.86/16
=166.88/13
=166.96/14
=166.101/16
=166.102/16
=166.105/16
=166.107/16
=166.108/15
=166.112/15
=166.115/16
=166.116/15
=166.122/15
=166.124/16
=166.126/15
=166.128/9
=167.1/16
=167.2/15
=167.4/14
=167.8/13
=167.16/13
=167.24/14
=167.29/16
=167.31/16
=167.32/12
=167.48/13
=167.64/12
=167.80/16
=167.82/15
=167.84/15
=167.86/18
=167.86.64/23
=167.88/13
=167.96/15
=167.99/16
=167.100/17
=167.101/16
=167.102/16
=167.104/14
=167.109/16
=167.110/16
=167.112/14
=167.117/16
=167.118/15
=167.120/15
=167.122/16
=167.124/14
=167.128/15
=167.131/16
=167.132/15
=167.135/16
=167.136/15
=167.138/16
=167.140/14
=167.144/13
=167.152/14
=167.156/16
=167.158/15
=167.160.32/19
=167.160.64/18
=167.160.128/17
=167.161/16
=167.163/16
=167.164/14
=167.170/15
=167.173/16
=167.174/16
=167.176/15
=167.178/16
=167.180/14
=167.184/14
=167.188/16
=167.190/15
=167.192/13
=167.200/15
=167.202/16
=167.204/16
=167.206/15
=167.208/13
=167.216/15
=167.218/16
=167.219/19
=167.219.32/20
=167.219.64/18
=167.219.128/17
=167.220/17
=167.220.128/18
=167.220.192/19
=167.221/16
=167.222/15
=167.224/13
=167.232/16
=167.234/15
=167.236/14
=167.240/13
=167.248/16
=167.251/16
=167.253/16
=167.254/15
=168.2/15
=168.4/14
=168.8/13
=168.16/12
=168.32/11
=168.64/14
=168.68/15
=168.71/16
=168.72/14
=168.82/16
=168.84/14
=168.88/16
=168.91/16
=168.92/15
=168.94/16
=168.97/16
=168.98/15
=168.100/16
=168.102/15
=168.104/15
=168.107/16
=168.108/14
=168.112/15
=168.114/16
=168.116/14
=168.122/15
=168.124/15
=168.127/16
=168.129/16
=168.133/16
=168.135/16
=168.136/15
=168.138/16
=168.141/16
=168.143/16
=168.144/14
=168.148/16
=168.149.128/18
=168.149.192/19
=168.149.224/20
=168.149.240/21
=168.149.250/23
=168.149.252/22
=168.150/15
=168.156/14
=168.161/16
=168.162/15
=168.166/16
=168.168/14
=168.173/16
=168.174/15
=168.177/16
=168.178/15
=168.180/16
=168.182/15
=168.184/15
=168.189/16
=168.190/15
=168.192/15
=168.199/16
=168.200/14
=168.204/16
=168.207/16
=168.208/16
=168.212/14
=168.216/16
=168.218/16
=168.220/14
=168.224/15
=168.229/16
=168.230/16
=168.233/16
=168.235/16
=168.236/14
=168.240/15
=168.242/16
=168.244/16
=168.245/17
=168.245.128/19
=168.245.160/20
=168.245.176/21
=168.245.184/22
=168.245.192/22
=168.245.198/23
=168.245.200/21
=168.245.208/20
=168.245.224/19
=168.246/15
=168.250/15
=168.254/16
=169.2/15
=169.4/14
=169.8/13
=169.16/12
=169.64/10
=169.128/16
=169.130/15
=169.132/14
=169.136/14
=169.141/16
=169.142/15
=169.144/14
=169.148.128/17
=169.150/15
=169.152/14
=169.156/15
=169.160/11
=169.192/13
=169.200/16
=169.203/16
=169.204/14
=169.224/13
=169.232/14
=169.236/15
=169.238/16
=169.240/13
=169.248/14
=169.252/15
=170.1/16
=170.2/15
=170.4/14
=170.8/15
=170.10/18
=170.10.64/19
=170.10.96/20
=170.10.128/17
=170.11/16
=170.12/16
=170.13/17
=170.13.128/18
=170.13.192/19
=170.13.224/20
=170.13.240/22
=170.13.244/23
=170.13.247/24
=170.13.248/21
=170.14/15
=170.16/16
=170.17/17
=170.19/16
=170.20/14
=170.24/16
=170.26/15
=170.28/14
=170.32/16
=170.34/15
=170.36/16
=170.37/17
=170.37.128/18
=170.37.192/21
=170.37.200/23
=170.37.202/24
=170.37.207/24
=170.37.208/20
=170.37.224/19
=170.39/16
=170.40/13
=170.48/15
=170.50/16
=170.52/14
=170.56/14
=170.61/16
=170.62/15
=170.64/15
=170.67/16
=170.68/15
=170.71/16
=170.72/14
=170.76/17
=170.76.128/19
=170.76.160/20
=170.76.180/22
=170.76.184/21
=170.76.192/18
=170.77/16
=170.85/16
=170.86/15
=170.88/14
=170.92/15
=170.94/16
=170.96/14
=170.100/16
=170.101/17
=170.102/17
=170.103/16
=170.104/15
=170.107/16
=170.108/14
=170.112/12
=170.128/14
=170.132/16
=170.133.128/17
=170.134/15
=170.136/13
=170.144/14
=170.148/15
=170.151/16
=170.152/15
=170.154/16
=170.156/16
=170.158/15
=170.160/13
=170.168/16
=170.170/15
=170.172/14
=170.176/15
=170.178/16
=170.180/14
=170.184/13
=170.192/14
=170.196/15
=170.198/16
=170.199/17
=170.199.128/18
=170.199.192/19
=170.199.224/20
=170.199.240/22
=170.199.244/23
=170.199.247/24
=170.199.248/21
=170.200/13
=170.208/15
=170.211/16
=170.212/14
=170.216/13
=170.224/14
=170.228/15
=170.230/16
=170.232/16
=170.234/15
=170.240/14
=170.248.2/23
=170.248.4/22
=170.248.8/22
=170.248.14/23
=170.248.16/20
=170.248.32/21
=170.248.40/23
=170.248.44/23
=170.248.48/20
=170.248.64/18
=170.248.128/21
=170.248.136/23
=170.248.140/22
=170.248.144/20
=170.248.172/22
=170.248.176/21
=170.248.184/22
=170.248.188/23
=170.248.192/18
=170.249/18
=170.249.72/21
=170.249.80/20
=170.249.128/17
=170.250/16
=170.251/21
=170.251.8/23
=170.251.12/22
=170.251.16/22
=170.251.22/23
=170.251.24/21
=170.251.32/21
=170.251.48/21
=170.251.56/22
=170.251.62/23
=170.251.64/20
=170.251.80/21
=170.251.88/23
=170.251.92/22
=170.251.96/21
=170.251.104/22
=170.251.108/23
=170.251.112/20
=170.251.128/21
=170.251.136/22
=170.251.140/23
=170.251.144/22
=170.251.148/24
=170.251.152/23
=170.251.158/23
=170.251.160/21
=170.251.168/23
=170.251.172/23
=170.251.176/20
=170.251.192/18
=170.252/15
=171.64/13
=171.72/14
=171.128/10
=171.192/13
=171.200/14
=171.204/15
=171.206/16
=172/12
=172.32/11
=172.64/12
=172.80/17
=172.81/17
=172.81.128/18
=172.82/15
=172.84/15
=172.86/17
=172.86.128/18
=172.86.192/20
=172.86.224/19
=172.87/16
=172.88/13
=172.96/14
=172.100/15
=172.102/16
=172.103/18
=172.103.64/20
=172.103.80/21
=172.103.96/19
=172.103.128/17
=172.104/13
=172.112/13
=172.120/15
=172.124/14
=172.128/10
=172.200/13
=172.208/12
=172.224/12
=172.240/16
=172.241.8/21
=172.241.16/20
=172.241.32/21
=172.241.56/21
=172.241.72/21
=172.241.80/22
=172.241.88/21
=172.241.96/19
=172.241.128/18
=172.241.192/19
=172.241.224/20
=172.241.240/21
=172.242/15
=172.244/14
=172.248/14
=172.252/15
=172.254/16
=172.255.16/20
=172.255.32/19
=172.255.64/19
=172.255.112/20
=172.255.128/21
=172.255.144/20
=172.255.160/19
=172.255.208/20
=172.255.240/21
=173/9
=173.128/10
=173.192/12
=173.208/14
=173.212/17
=173.212.128/18
=173.213/16
=173.214/17
=173.214.128/18
=173.214.192/21
=173.214.204/22
=173.214.208/20
=173.214.224/19
=173.215/16
=173.216/13
=173.224/13
=173.232/15
=173.234/17
=173.234.136/21
=173.234.144/20
=173.234.160/19
=173.234.192/18
=173.235/16
=173.236/14
=173.240/14
=173.244/17
=173.244.128/20
=173.244.160/19
=173.244.192/18
=173.245/16
=173.246/15
=173.248/17
=173.248.128/18
=173.248.192/19
=173.249.64/18
=173.249.128/17
=173.250/15
=173.252/15
=173.254/16
=173.255/17
=173.255.128/20
=173.255.152/21
=173.255.160/19
=173.255.192/18
=174/9
=174.128/13
=174.136/15
=174.138/17
=174.138.128/20
=174.138.160/19
=174.138.192/18
=174.139/16
=174.140.64/18
=174.140.128/17
=174.141/16
=174.142/15
=174.144/12
=174.160/11
=174.192/10
=176.111.56/24
=176.115.176/21
=176.122.128/18
=178.238.80/20
=184/12
=184.16/14
=184.20/15
=184.23/16
=184.24/13
=184.32/11
=184.64/12
=184.80/15
=184.83/16
=184.84/14
=184.88/13
=184.96/11
=184.128/9
=185.20.220/22
=185.30.72/22
=185.38.210/23
=185.77.6/23
=185.90.244/22
=185.105.7/24
=185.132.48/22
=185.146.32/22
=185.169.108/22
=185.170.56/22
=185.171.208/22
=185.176.52/22
=188.209.144/21
=192.0.1/24
=192.0.3/24
=192.0.4/22
=192.0.8/21
=192.0.16/20
=192.0.32/19
=192.0.64/18
=192.0.128/17
=192.1/16
=192.2/15
=192.4/16
=192.5/20
=192.5.16/21
=192.5.24/22
=192.5.31/24
=192.5.32/22
=192.5.37/24
=192.5.38/23
=192.5.40/21
=192.5.48/23
=192.5.51/24
=192.5.52/22
=192.5.56/23
=192.5.58/24
=192.5.60/24
=192.5.63/24
=192.5.64/20
=192.5.80/21
=192.5.88/23
=192.5.91/24
=192.5.92/22
=192.5.96/24
=192.5.98/23
=192.5.100/22
=192.5.104/21
=192.5.112/20
=192.5.128/21
=192.5.136/22
=192.5.140/23
=192.5.143/24
=192.5.144/24
=192.5.146/23
=192.5.148/22
=192.5.152/21
=192.5.160/23
=192.5.163/24
=192.5.164/22
=192.5.168/21
=192.5.176/20
=192.5.192/20
=192.5.208/21
=192.5.217/24
=192.5.218/23
=192.5.220/22
=192.5.224/21
=192.5.232/22
=192.5.236/23
=192.5.238/24
=192.5.241/24
=192.5.242/23
=192.5.244/22
=192.5.248/22
=192.5.252/23
=192.5.255/24
=192.6/15
=192.8/19
=192.8.44/22
=192.8.48/20
=192.8.64/19
=192.8.96/20
=192.8.112/22
=192.8.120/21
=192.8.128/19
=192.8.177/24
=192.8.178/24
=192.8.181/24
=192.8.183/24
=192.9/16
=192.10/15
=192.12/24
=192.12.2/23
=192.12.4/22
=192.12.8/21
=192.12.16/20
=192.12.32/21
=192.12.40/22
=192.12.44/23
=192.12.46/24
=192.12.48/22
=192.12.52/23
=192.12.55/24
=192.12.56/21
=192.12.64/21
=192.12.74/23
=192.12.78/23
=192.12.80/24
=192.12.82/23
=192.12.84/22
=192.12.88/21
=192.12.97/24
=192.12.98/24
=192.12.100/22
=192.12.104/22
=192.12.108/24
=192.12.119/24
=192.12.120/21
=192.12.128/18
=192.12.195/24
=192.12.196/22
=192.12.200/21
=192.12.208/21
=192.12.216/24
=192.12.219/24
=192.12.220/22
=192.12.224/22
=192.12.228/23
=192.12.230/24
=192.12.233/24
=192.12.234/24
=192.12.236/22
=192.12.240/22
=192.12.244/23
=192.12.246/24
=192.12.248/21
=192.13/16
=192.14/16
=192.16/18
=192.16.64/19
=192.16.96/20
=192.16.112/21
=192.16.120/23
=192.16.122/24
=192.16.167/24
=192.16.168/21
=192.16.176/23
=192.16.181/24
=192.16.182/24
=192.16.203/24
=192.16.204/22
=192.16.208/20
=192.16.224/19
=192.17/16
=192.18/17
=192.18.128/18
=192.18.192/23
=192.18.194/24
=192.18.196/22
=192.18.200/21
=192.18.208/20
=192.18.224/19
=192.19/16
=192.20/14
=192.24/15
=192.26/20
=192.26.16/21
=192.26.24/22
=192.26.48/20
=192.26.64/20
=192.26.80/21
=192.26.88/23
=192.26.90/24
=192.26.92/24
=192.26.95/24
=192.26.97/24
=192.26.98/23
=192.26.100/22
=192.26.104/24
=192.26.129/24
=192.26.130/23
=192.26.132/24
=192.26.136/21
=192.26.144/21
=192.26.152/23
=192.26.194/23
=192.26.196/22
=192.26.200/21
=192.26.208/22
=192.26.212/23
=192.26.214/24
=192.26.233/24
=192.26.235/24
=192.26.240/20
=192.27/16
=192.28/18
=192.28.64/19
=192.28.96/20
=192.28.112/21
=192.28.132/22
=192.28.136/21
=192.28.144/20
=192.28.160/19
=192.28.192/18
=192.29/16
=192.30/16
=192.31/21
=192.31.8/22
=192.31.12/23
=192.31.15/24
=192.31.16/22
=192.31.20/23
=192.31.22/24
=192.31.24/23
=192.31.28/23
=192.31.30/24
=192.31.32/21
=192.31.41/24
=192.31.42/23
=192.31.44/22
=192.31.48/21
=192.31.56/22
=192.31.60/23
=192.31.63/24
=192.31.64/19
=192.31.96/22
=192.31.100/23
=192.31.103/24
=192.31.104/21
=192.31.112/22
=192.31.125/24
=192.31.126/23
=192.31.128/19
=192.31.160/22
=192.31.164/23
=192.31.172/22
=192.31.176/20
=192.31.192/22
=192.31.207/24
=192.31.208/23
=192.31.210/24
=192.31.212/22
=192.31.216/21
=192.31.224/22
=192.31.228/23
=192.31.230/24
=192.31.232/21
=192.31.240/21
=192.31.248/22
=192.31.253/24
=192.31.254/23
=192.32/16
=192.33/21
=192.33.8/23
=192.33.11/24
=192.33.12/23
=192.33.14/24
=192.33.17/24
=192.33.18/23
=192.33.20/22
=192.33.24/21
=192.33.32/22
=192.33.37/24
=192.33.38/23
=192.33.40/21
=192.33.48/20
=192.33.64/20
=192.33.80/22
=192.33.84/23
=192.33.86/24
=192.33.112/24
=192.33.115/24
=192.33.116/23
=192.33.128/23
=192.33.132/23
=192.33.134/24
=192.33.136/22
=192.33.140/23
=192.33.142/24
=192.33.146/24
=192.33.167/24
=192.33.168/24
=192.33.172/22
=192.33.183/24
=192.33.184/21
=192.33.232/24
=192.33.240/21
=192.33.248/22
=192.33.252/23
=192.33.255/24
=192.34/20
=192.34.16/23
=192.34.18/24
=192.34.20/22
=192.34.24/21
=192.34.32/20
=192.34.48/23
=192.34.51/24
=192.34.52/22
=192.34.56/21
=192.34.64/19
=192.34.96/21
=192.34.104/23
=192.34.106/24
=192.34.108/22
=192.34.112/22
=192.34.117/24
=192.34.118/23
=192.34.120/21
=192.34.128/19
=192.34.160/20
=192.34.176/23
=192.34.178/24
=192.34.180/22
=192.34.184/21
=192.34.192/18
=192.35.20/22
=192.35.24/21
=192.35.32/20
=192.35.48/21
=192.35.56/23
=192.35.58/24
=192.35.60/23
=192.35.62/24
=192.35.73/24
=192.35.74/23
=192.35.76/22
=192.35.80/21
=192.35.88/23
=192.35.91/24
=192.35.92/23
=192.35.95/24
=192.35.96/21
=192.35.104/22
=192.35.109/24
=192.35.110/23
=192.35.112/20
=192.35.128/23
=192.35.134/23
=192.35.136/23
=192.35.139/24
=192.35.140/22
=192.35.144/23
=192.35.147/24
=192.35.148/24
=192.35.154/23
=192.35.156/22
=192.35.160/21
=192.35.168/22
=192.35.173/24
=192.35.174/23
=192.35.176/22
=192.35.180/23
=192.35.182/24
=192.35.193/24
=192.35.194/23
=192.35.196/24
=192.35.199/24
=192.35.200/22
=192.35.204/24
=192.35.208/20
=192.35.224/22
=192.35.228/24
=192.35.230/23
=192.35.232/21
=192.35.245/24
=192.35.249/24
=192.35.250/23
=192.35.252/22
=192.39/16
=192.40/18
=192.40.64/22
=192.40.68/24
=192.40.81/24
=192.40.82/23
=192.40.84/22
=192.40.88/21
=192.40.96/19
=192.40.128/18
=192.40.192/19
=192.40.224/22
=192.40.229/24
=192.40.230/23
=192.40.232/21
=192.40.240/20
=192.41/18
=192.41.64/19
=192.41.96/22
=192.41.100/23
=192.41.102/24
=192.41.137/24
=192.41.138/23
=192.41.148/24
=192.41.161/24
=192.41.162/23
=192.41.164/22
=192.41.168/23
=192.41.171/24
=192.41.172/22
=192.41.176/23
=192.41.198/23
=192.41.200/23
=192.41.202/24
=192.41.204/23
=192.41.207/24
=192.41.208/23
=192.41.211/24
=192.41.212/22
=192.41.217/24
=192.41.219/24
=192.41.220/22
=192.41.224/23
=192.41.226/24
=192.41.228/22
=192.41.232/21
=192.41.240/20
=192.42/24
=192.42.2/23
=192.42.4/22
=192.42.8/21
=192.42.16/20
=192.42.32/21
=192.42.40/23
=192.42.48/22
=192.42.54/23
=192.42.56/22
=192.42.66/23
=192.42.68/22
=192.42.72/21
=192.42.80/22
=192.42.88/21
=192.42.96/24
=192.42.98/24
=192.42.101/24
=192.42.108/22
=192.42.112/24
=192.42.133/24
=192.42.134/23
=192.42.136/22
=192.42.140/23
=192.42.142/24
=192.42.144/22
=192.42.148/23
=192.42.150/24
=192.42.152/21
=192.42.160/20
=192.42.176/22
=192.42.202/23
=192.42.204/22
=192.42.208/20
=192.42.224/21
=192.42.232/22
=192.42.236/24
=192.42.238/23
=192.42.240/21
=192.42.248/22
=192.42.252/24
=192.42.254/23
=192.43/17
=192.43.128/19
=192.43.160/23
=192.43.172/23
=192.43.175/24
=192.43.176/21
=192.43.184/24
=192.43.186/23
=192.43.188/24
=192.43.190/23
=192.43.197/24
=192.43.199/24
=192.43.200/24
=192.43.203/24
=192.43.204/23
=192.43.206/24
=192.43.211/24
=192.43.213/24
=192.43.214/23
=192.43.216/21
=192.43.224/23
=192.43.230/23
=192.43.232/23
=192.43.235/24
=192.43.236/23
=192.43.238/24
=192.43.240/20
=192.44.68/23
=192.44.70/24
=192.44.91/24
=192.44.92/22
=192.44.96/19
=192.44.128/18
=192.44.192/19
=192.44.224/20
=192.44.252/22
=192.45/16
=192.46/16
=192.47.242/23
=192.47.250/23
=192.47.252/22
=192.48/20
=192.48.16/21
=192.48.24/22
=192.48.28/23
=192.48.30/24
=192.48.32/19
=192.48.64/19
=192.48.96/21
=192.48.104/23
=192.48.106/24
=192.48.108/24
=192.48.111/24
=192.48.112/20
=192.48.128/20
=192.48.144/24
=192.48.146/23
=192.48.148/22
=192.48.152/21
=192.48.160/19
=192.48.192/19
=192.48.225/24
=192.48.226/23
=192.48.228/23
=192.48.230/24
=192.48.232/21
=192.48.240/21
=192.48.249/24
=192.48.250/23
=192.48.252/24
=192.48.254/23
=192.51.48/24
=192.51.192/23
=192.52.51/24
=192.52.52/22
=192.52.56/21
=192.52.64/21
=192.52.74/23
=192.52.76/22
=192.52.80/20
=192.52.96/20
=192.52.112/22
=192.52.116/23
=192.52.118/24
=192.52.151/24
=192.52.153/24
=192.52.154/23
=192.52.156/23
=192.52.158/24
=192.52.162/23
=192.52.164/22
=192.52.168/23
=192.52.170/24
=192.52.177/24
=192.52.178/23
=192.52.180/22
=192.52.184/24
=192.52.186/23
=192.52.188/22
=192.52.192/24
=192.52.194/23
=192.52.198/23
=192.52.200/21
=192.52.208/21
=192.52.216/22
=192.52.220/24
=192.52.224/21
=192.52.233/24
=192.52.234/23
=192.52.236/22
=192.52.240/21
=192.52.248/22
=192.52.252/24
=192.52.255/24
=192.53/18
=192.53.64/19
=192.53.96/22
=192.53.100/23
=192.53.102/24
=192.53.105/24
=192.53.106/23
=192.53.108/22
=192.53.112/20
=192.53.128/17
=192.54/20
=192.54.16/21
=192.54.24/22
=192.54.28/23
=192.54.30/24
=192.54.53/24
=192.54.81/24
=192.54.82/23
=192.54.84/22
=192.54.88/21
=192.54.96/21
=192.54.107/24
=192.54.108/22
=192.54.112/24
=192.54.114/24
=192.54.121/24
=192.54.123/24
=192.54.124/24
=192.54.129/24
=192.54.131/24
=192.54.133/24
=192.54.134/24
=192.54.136/24
=192.54.138/24
=192.54.140/24
=192.54.222/23
=192.54.224/24
=192.54.226/23
=192.54.228/22
=192.54.232/21
=192.54.240/22
=192.54.246/24
=192.54.248/23
=192.54.250/24
=192.54.252/23
=192.54.255/24
=192.55/19
=192.55.32/21
=192.55.40/22
=192.55.44/23
=192.55.47/24
=192.55.48/20
=192.55.64/22
=192.55.72/21
=192.55.80/22
=192.55.85/24
=192.55.86/23
=192.55.88/24
=192.55.90/23
=192.55.92/22
=192.55.96/23
=192.55.100/24
=192.55.102/23
=192.55.104/24
=192.55.106/23
=192.55.108/24
=192.55.111/24
=192.55.113/24
=192.55.114/24
=192.55.116/23
=192.55.119/24
=192.55.120/21
=192.55.128/24
=192.55.130/23
=192.55.133/24
=192.55.134/23
=192.55.136/21
=192.55.144/20
=192.55.160/20
=192.55.176/21
=192.55.184/22
=192.55.189/24
=192.55.191/24
=192.55.192/24
=192.55.194/23
=192.55.196/24
=192.55.199/24
=192.55.200/21
=192.55.208/24
=192.55.210/23
=192.55.213/24
=192.55.214/23
=192.55.216/23
=192.55.218/24
=192.55.221/24
=192.55.222/23
=192.55.224/21
=192.55.233/24
=192.55.234/23
=192.55.236/23
=192.55.239/24
=192.55.240/22
=192.55.245/24
=192.55.246/23
=192.55.248/21
=192.56/15
=192.58/21
=192.58.8/24
=192.58.19/24
=192.58.20/22
=192.58.24/22
=192.58.36/22
=192.58.40/24
=192.58.90/23
=192.58.92/22
=192.58.96/24
=192.58.102/23
=192.58.104/21
=192.58.112/20
=192.58.128/22
=192.58.132/24
=192.58.137/24
=192.58.138/23
=192.58.140/22
=192.58.144/20
=192.58.160/19
=192.58.192/22
=192.58.196/24
=192.58.198/23
=192.58.200/21
=192.58.208/21
=192.58.216/23
=192.58.219/24
=192.58.220/22
=192.58.224/23
=192.58.230/23
=192.58.232/21
=192.58.240/20
=192.59/16
=192.60/14
=192.64/20
=192.64.16/21
=192.64.24/22
=192.64.29/24
=192.64.30/23
=192.64.32/21
=192.64.40/22
=192.64.46/23
=192.64.48/20
=192.64.64/19
=192.64.96/22
=192.64.104/21
=192.64.112/21
=192.64.120/22
=192.64.124/24
=192.64.126/23
=192.64.128/18
=192.64.192/21
=192.64.200/23
=192.64.205/24
=192.64.206/23
=192.64.208/20
=192.64.224/19
=192.65/19
=192.65.32/20
=192.65.48/23
=192.65.50/24
=192.65.71/24
=192.65.72/21
=192.65.80/23
=192.65.95/24
=192.65.97/24
=192.65.98/23
=192.65.100/22
=192.65.104/21
=192.65.112/20
=192.65.128/23
=192.65.133/24
=192.65.134/23
=192.65.136/23
=192.65.138/24
=192.65.140/22
=192.65.147/24
=192.65.148/22
=192.65.154/23
=192.65.156/22
=192.65.160/20
=192.65.176/22
=192.65.180/23
=192.65.198/23
=192.65.200/21
=192.65.208/21
=192.65.216/24
=192.65.218/24
=192.65.229/24
=192.65.230/23
=192.65.232/21
=192.65.240/21
=192.65.249/24
=192.65.251/24
=192.65.252/22
=192.67/24
=192.67.2/24
=192.67.5/24
=192.67.6/23
=192.67.8/22
=192.67.13/24
=192.67.14/23
=192.67.16/22
=192.67.20/23
=192.67.22/24
=192.67.24/21
=192.67.32/22
=192.67.36/23
=192.67.38/24
=192.67.40/23
=192.67.42/24
=192.67.44/23
=192.67.46/24
=192.67.48/23
=192.67.51/24
=192.67.53/24
=192.67.54/24
=192.67.56/23
=192.67.59/24
=192.67.60/22
=192.67.64/21
=192.67.72/22
=192.67.77/24
=192.67.78/24
=192.67.80/22
=192.67.86/24
=192.67.88/22
=192.67.92/23
=192.67.95/24
=192.67.96/22
=192.67.105/24
=192.67.106/23
=192.67.108/22
=192.67.112/20
=192.67.128/22
=192.67.132/23
=192.67.134/24
=192.67.136/21
=192.67.144/20
=192.67.160/22
=192.67.164/23
=192.67.166/24
=192.67.169/24
=192.67.172/22
=192.67.176/21
=192.67.184/22
=192.67.188/24
=192.67.209/24
=192.67.210/23
=192.67.212/22
=192.67.216/24
=192.67.219/24
=192.67.222/24
=192.67.224/20
=192.67.240/21
=192.67.250/23
=192.67.252/22
=192.68.20/23
=192.68.22/24
=192.68.24/22
=192.68.28/23
=192.68.30/24
=192.68.52/22
=192.68.56/21
=192.68.64/21
=192.68.72/22
=192.68.108/23
=192.68.112/20
=192.68.128/22
=192.68.133/24
=192.68.134/23
=192.68.136/23
=192.68.140/22
=192.68.144/22
=192.68.148/23
=192.68.150/24
=192.68.154/23
=192.68.156/22
=192.68.160/22
=192.68.164/24
=192.68.173/24
=192.68.175/24
=192.68.177/24
=192.68.178/24
=192.68.180/23
=192.68.183/24
=192.68.184/24
=192.68.187/24
=192.68.188/22
=192.68.192/20
=192.68.208/24
=192.68.210/24
=192.68.217/24
=192.68.218/23
=192.68.220/24
=192.68.222/23
=192.68.225/24
=192.68.226/23
=192.68.228/23
=192.68.231/24
=192.68.232/23
=192.68.234/24
=192.68.253/24
=192.68.255/24
=192.69/16
=192.70.120/21
=192.70.128/22
=192.70.132/24
=192.70.137/24
=192.70.138/23
=192.70.160/21
=192.70.168/22
=192.70.172/23
=192.70.175/24
=192.70.176/23
=192.70.178/24
=192.70.184/21
=192.70.202/23
=192.70.204/22
=192.70.208/21
=192.70.217/24
=192.70.218/24
=192.70.220/22
=192.70.224/21
=192.70.232/22
=192.70.236/24
=192.70.238/23
=192.70.240/23
=192.70.243/24
=192.70.244/22
=192.70.248/21
=192.72/23
=192.72.2/24
=192.72.253/24
=192.72.254/23
=192.73/21
=192.73.8/22
=192.73.13/24
=192.73.14/23
=192.73.16/23
=192.73.18/24
=192.73.23/24
=192.73.26/23
=192.73.28/22
=192.73.32/23
=192.73.45/24
=192.73.46/23
=192.73.48/20
=192.73.64/23
=192.73.67/24
=192.73.68/22
=192.73.72/21
=192.73.80/20
=192.73.96/19
=192.73.128/18
=192.73.192/19
=192.73.224/23
=192.73.227/24
=192.73.228/24
=192.73.230/23
=192.73.232/21
=192.73.240/20
=192.74/17
=192.74.128/21
=192.74.136/23
=192.74.138/24
=192.74.209/24
=192.74.210/23
=192.74.212/22
=192.74.216/21
=192.74.224/19
=192.75/22
=192.75.5/24
=192.75.6/23
=192.75.8/21
=192.75.16/20
=192.75.32/19
=192.75.64/18
=192.75.128/21
=192.75.136/24
=192.75.138/23
=192.75.140/22
=192.75.144/20
=192.75.160/19
=192.75.192/19
=192.75.224/21
=192.75.232/22
=192.75.237/24
=192.75.238/23
=192.75.240/20
=192.76/22
=192.76.4/23
=192.76.36/22
=192.76.40/21
=192.76.48/20
=192.76.64/19
=192.76.96/20
=192.76.112/21
=192.76.120/23
=192.76.133/24
=192.76.173/24
=192.76.174/23
=192.76.177/24
=192.76.178/23
=192.76.180/22
=192.76.184/21
=192.76.192/19
=192.76.224/20
=192.76.240/24
=192.76.249/24
=192.76.250/23
=192.76.255/24
=192.77/21
=192.77.9/24
=192.77.10/24
=192.77.12/22
=192.77.16/24
=192.77.18/23
=192.77.20/22
=192.77.24/21
=192.77.32/19
=192.77.64/19
=192.77.96/20
=192.77.112/23
=192.77.116/22
=192.77.124/22
=192.77.128/22
=192.77.139/24
=192.77.142/23
=192.77.144/20
=192.77.160/19
=192.77.192/18
=192.78/15
=192.80/20
=192.80.16/22
=192.80.22/23
=192.80.25/24
=192.80.26/23
=192.80.28/23
=192.80.30/24
=192.80.43/24
=192.80.44/23
=192.80.47/24
=192.80.48/23
=192.80.50/24
=192.80.52/22
=192.80.56/21
=192.80.64/18
=192.80.128/18
=192.80.192/20
=192.80.208/24
=192.80.210/23
=192.80.212/22
=192.80.216/21
=192.80.224/19
=192.81/19
=192.81.32/20
=192.81.48/21
=192.81.56/23
=192.81.58/24
=192.81.60/24
=192.81.63/24
=192.81.64/19
=192.81.96/21
=192.81.104/22
=192.81.108/24
=192.81.110/23
=192.81.112/21
=192.81.120/24
=192.81.122/24
=192.81.124/22
=192.81.128/19
=192.81.161/24
=192.81.162/23
=192.81.164/22
=192.81.168/21
=192.81.176/22
=192.81.180/23
=192.81.185/24
=192.81.186/23
=192.81.188/22
=192.81.192/23
=192.81.195/24
=192.81.196/22
=192.81.200/21
=192.81.208/20
=192.81.224/22
=192.81.228/23
=192.81.231/24
=192.81.232/23
=192.81.235/24
=192.81.236/22
=192.81.240/20
=192.82/19
=192.82.32/20
=192.82.48/22
=192.82.96/22
=192.82.101/24
=192.82.102/23
=192.82.104/21
=192.82.112/21
=192.82.120/24
=192.82.122/23
=192.82.125/24
=192.82.126/24
=192.82.128/22
=192.82.133/24
=192.82.134/23
=192.82.136/22
=192.82.141/24
=192.82.144/21
=192.82.152/24
=192.82.154/23
=192.82.156/24
=192.82.159/24
=192.82.160/24
=192.82.162/23
=192.82.164/22
=192.82.168/21
=192.82.176/20
=192.82.192/20
=192.82.208/22
=192.82.212/23
=192.82.215/24
=192.82.216/22
=192.82.223/24
=192.82.224/22
=192.82.228/23
=192.82.231/24
=192.82.232/21
=192.82.240/24
=192.82.242/23
=192.82.244/22
=192.82.248/21
=192.83.101/24
=192.83.103/24
=192.83.105/24
=192.83.106/23
=192.83.108/22
=192.83.112/22
=192.83.116/23
=192.83.120/23
=192.83.124/22
=192.83.128/20
=192.83.144/21
=192.83.152/22
=192.83.156/24
=192.83.158/23
=192.83.161/24
=192.83.162/23
=192.83.164/24
=192.83.197/24
=192.83.199/24
=192.83.201/24
=192.83.203/24
=192.83.204/23
=192.83.206/24
=192.83.220/23
=192.83.222/24
=192.83.225/24
=192.83.226/23
=192.83.228/24
=192.83.232/22
=192.83.236/24
=192.83.239/24
=192.83.240/20
=192.84/22
=192.84.4/24
=192.84.6/23
=192.84.8/22
=192.84.14/24
=192.84.16/21
=192.84.24/23
=192.84.26/24
=192.84.28/23
=192.84.31/24
=192.84.34/23
=192.84.36/22
=192.84.40/21
=192.84.48/21
=192.84.56/22
=192.84.60/23
=192.84.63/24
=192.84.64/22
=192.84.68/23
=192.84.70/24
=192.84.74/24
=192.84.85/24
=192.84.86/24
=192.84.88/24
=192.84.100/24
=192.84.110/23
=192.84.112/21
=192.84.120/22
=192.84.124/23
=192.84.126/24
=192.84.157/24
=192.84.158/23
=192.84.160/22
=192.84.164/23
=192.84.167/24
=192.84.168/22
=192.84.172/24
=192.84.174/23
=192.84.208/22
=192.84.213/24
=192.84.214/23
=192.84.216/23
=192.84.218/24
=192.84.222/23
=192.84.224/23
=192.84.231/24
=192.84.232/22
=192.84.236/24
=192.84.239/24
=192.84.240/24
=192.84.243/24
=192.84.248/22
=192.84.252/24
=192.84.254/23
=192.85/16
=192.86/21
=192.86.8/23
=192.86.10/24
=192.86.13/24
=192.86.15/24
=192.86.16/23
=192.86.19/24
=192.86.20/22
=192.86.24/24
=192.86.26/24
=192.86.28/22
=192.86.32/19
=192.86.64/20
=192.86.80/21
=192.86.88/24
=192.86.90/23
=192.86.92/22
=192.86.96/20
=192.86.112/21
=192.86.120/22
=192.86.124/24
=192.86.128/24
=192.86.130/23
=192.86.135/24
=192.86.136/24
=192.86.139/24
=192.86.140/22
=192.86.144/20
=192.86.160/23
=192.86.162/24
=192.86.164/24
=192.86.168/24
=192.86.170/23
=192.86.172/22
=192.86.176/20
=192.86.192/19
=192.86.224/20
=192.86.240/21
=192.86.248/22
=192.86.252/23
=192.86.255/24
=192.88/24
=192.88.2/23
=192.88.5/24
=192.88.8/24
=192.88.11/24
=192.88.12/22
=192.88.16/24
=192.88.18/23
=192.88.20/23
=192.88.22/24
=192.88.25/24
=192.88.26/23
=192.88.28/22
=192.88.32/19
=192.88.64/20
=192.88.81/24
=192.88.82/24
=192.88.87/24
=192.88.88/21
=192.88.96/24
=192.88.100/24
=192.88.103/24
=192.88.104/22
=192.88.109/24
=192.88.110/23
=192.88.112/22
=192.88.116/23
=192.88.120/23
=192.88.122/24
=192.88.124/22
=192.88.129/24
=192.88.131/24
=192.88.132/24
=192.88.134/23
=192.88.136/21
=192.88.144/20
=192.88.160/20
=192.88.176/21
=192.88.184/23
=192.88.186/24
=192.88.188/23
=192.88.191/24
=192.88.192/22
=192.88.197/24
=192.88.198/23
=192.88.200/22
=192.88.205/24
=192.88.206/23
=192.88.208/20
=192.88.224/21
=192.88.232/22
=192.88.236/23
=192.88.240/21
=192.88.248/23
=192.88.255/24
=192.90/16
=192.91/17
=192.91.128/21
=192.91.136/22
=192.91.142/23
=192.91.144/20
=192.91.160/20
=192.91.176/24
=192.91.178/24
=192.91.180/22
=192.91.184/24
=192.91.187/24
=192.91.188/24
=192.91.190/24
=192.91.192/22
=192.91.196/23
=192.91.198/24
=192.91.202/23
=192.91.204/22
=192.91.208/23
=192.91.210/24
=192.91.212/24
=192.91.234/23
=192.91.248/22
=192.91.252/23
=192.91.255/24
=192.92/21
=192.92.8/22
=192.92.12/23
=192.92.14/24
=192.92.16/20
=192.92.32/19
=192.92.64/20
=192.92.80/22
=192.92.84/23
=192.92.87/24
=192.92.88/22
=192.92.92/23
=192.92.95/24
=192.92.96/21
=192.92.107/24
=192.92.110/23
=192.92.112/22
=192.92.117/24
=192.92.118/23
=192.92.120/22
=192.92.124/24
=192.92.140/24
=192.92.157/24
=192.92.158/23
=192.92.160/19
=192.92.192/20
=192.92.208/21
=192.92.217/24
=192.92.218/23
=192.92.220/22
=192.92.224/20
=192.92.240/21
=192.94/20
=192.94.16/21
=192.94.25/24
=192.94.26/23
=192.94.29/24
=192.94.30/23
=192.94.32/21
=192.94.40/24
=192.94.42/23
=192.94.44/22
=192.94.48/21
=192.94.56/24
=192.94.59/24
=192.94.60/24
=192.94.65/24
=192.94.66/24
=192.94.69/24
=192.94.70/23
=192.94.72/22
=192.94.77/24
=192.94.79/24
=192.94.80/20
=192.94.96/21
=192.94.104/22
=192.94.108/23
=192.94.110/24
=192.94.118/23
=192.94.120/23
=192.94.123/24
=192.94.124/22
=192.94.128/20
=192.94.144/21
=192.94.152/22
=192.94.164/22
=192.94.168/24
=192.94.170/23
=192.94.173/24
=192.94.201/24
=192.94.202/23
=192.94.204/22
=192.94.211/24
=192.94.213/24
=192.94.214/23
=192.94.216/22
=192.94.222/23
=192.94.224/23
=192.94.228/22
=192.94.232/24
=192.94.234/24
=192.94.236/23
=192.94.242/24
=192.94.245/24
=192.94.247/24
=192.94.248/21
=192.95/16
=192.96/24
=192.96.17/24
=192.96.18/24
=192.96.23/24
=192.96.36/24
=192.96.41/24
=192.96.42/24
=192.96.44/24
=192.96.59/24
=192.96.62/23
=192.96.64/22
=192.96.73/24
=192.96.78/24
=192.96.103/24
=192.96.135/24
=192.96.136/23
=192.96.143/24
=192.96.145/24
=192.96.156/23
=192.96.159/24
=192.96.160/22
=192.96.168/21
=192.96.176/24
=192.96.192/24
=192.96.200/21
=192.96.208/20
=192.96.233/24
=192.96.244/24
=192.96.255/24
=192.97/16
=192.99/16
=192.100/24
=192.100.3/24
=192.100.4/22
=192.100.8/21
=192.100.16/23
=192.100.19/24
=192.100.20/23
=192.100.26/23
=192.100.28/22
=192.100.32/20
=192.100.48/22
=192.100.54/23
=192.100.56/22
=192.100.60/24
=192.100.62/24
=192.100.64/21
=192.100.72/22
=192.100.76/24
=192.100.79/24
=192.100.81/24
=192.100.82/23
=192.100.84/22
=192.100.88/21
=192.100.100/23
=192.100.134/24
=192.100.141/24
=192.100.142/23
=192.100.145/24
=192.100.146/23
=192.100.148/22
=192.100.152/23
=192.100.255/24
=192.101/24
=192.101.2/23
=192.101.5/24
=192.101.6/23
=192.101.9/24
=192.101.10/24
=192.101.12/22
=192.101.17/24
=192.101.18/23
=192.101.20/22
=192.101.24/22
=192.101.29/24
=192.101.30/23
=192.101.32/23
=192.101.35/24
=192.101.36/22
=192.101.40/21
=192.101.48/20
=192.101.64/21
=192.101.72/23
=192.101.74/24
=192.101.76/22
=192.101.80/24
=192.101.92/22
=192.101.96/21
=192.101.104/22
=192.101.108/23
=192.101.110/24
=192.101.115/24
=192.101.116/23
=192.101.119/24
=192.101.120/21
=192.101.128/22
=192.101.132/23
=192.101.135/24
=192.101.136/24
=192.101.138/23
=192.101.140/23
=192.101.143/24
=192.101.144/20
=192.101.160/24
=192.101.169/24
=192.101.171/24
=192.101.172/22
=192.101.177/24
=192.101.178/24
=192.101.181/24
=192.101.182/24
=192.101.184/21
=192.101.193/24
=192.101.194/23
=192.101.196/24
=192.101.199/24
=192.101.200/21
=192.101.208/20
=192.101.224/20
=192.101.240/21
=192.101.248/22
=192.101.253/24
=192.101.255/24
=192.102/24
=192.102.2/23
=192.102.4/23
=192.102.10/23
=192.102.12/22
=192.102.16/24
=192.102.82/24
=192.102.85/24
=192.102.86/23
=192.102.88/24
=192.102.90/23
=192.102.93/24
=192.102.94/24
=192.102.96/19
=192.102.128/20
=192.102.144/23
=192.102.178/23
=192.102.180/22
=192.102.184/21
=192.102.192/21
=192.102.200/22
=192.102.206/23
=192.102.208/22
=192.102.212/23
=192.102.215/24
=192.102.216/21
=192.102.226/24
=192.102.230/23
=192.102.232/22
=192.102.236/23
=192.102.238/24
=192.102.240/21
=192.102.248/23
=192.102.252/22
=192.103/23
=192.103.3/24
=192.103.4/23
=192.103.6/24
=192.103.8/22
=192.103.12/23
=192.103.15/24
=192.103.16/22
=192.103.21/24
=192.103.22/24
=192.103.24/23
=192.103.26/24
=192.103.41/24
=192.103.44/23
=192.103.47/24
=192.103.48/20
=192.103.64/20
=192.103.80/22
=192.103.84/24
=192.103.117/24
=192.103.118/23
=192.103.120/21
=192.103.128/23
=192.103.131/24
=192.103.133/24
=192.103.134/23
=192.103.136/24
=192.103.140/22
=192.103.144/23
=192.103.146/24
=192.103.148/22
=192.103.152/21
=192.103.160/19
=192.103.192/18
=192.104/21
=192.104.8/22
=192.104.12/23
=192.104.14/24
=192.104.16/22
=192.104.20/23
=192.104.22/24
=192.104.24/22
=192.104.30/23
=192.104.32/23
=192.104.34/24
=192.104.38/23
=192.104.42/24
=192.104.46/23
=192.104.49/24
=192.104.50/23
=192.104.52/24
=192.104.54/24
=192.104.59/24
=192.104.60/22
=192.104.64/21
=192.104.73/24
=192.104.74/23
=192.104.76/24
=192.104.78/23
=192.104.81/24
=192.104.83/24
=192.104.84/22
=192.104.88/21
=192.104.96/19
=192.104.128/21
=192.104.136/22
=192.104.141/24
=192.104.143/24
=192.104.144/23
=192.104.146/24
=192.104.148/22
=192.104.152/23
=192.104.156/22
=192.104.160/22
=192.104.164/23
=192.104.166/24
=192.104.169/24
=192.104.170/23
=192.104.173/24
=192.104.174/23
=192.104.176/20
=192.104.192/19
=192.104.224/21
=192.104.234/23
=192.104.236/23
=192.104.239/24
=192.104.240/22
=192.104.244/24
=192.104.249/24
=192.104.250/24
=192.104.253/24
=192.104.254/23
=192.105/21
=192.105.8/23
=192.105.11/24
=192.105.12/22
=192.105.16/20
=192.105.32/19
=192.105.64/21
=192.105.72/23
=192.105.74/24
=192.105.76/22
=192.105.80/20
=192.105.96/19
=192.105.128/17
=192.107/23
=192.107.3/24
=192.107.6/23
=192.107.8/24
=192.107.14/23
=192.107.16/20
=192.107.32/20
=192.107.48/23
=192.107.50/24
=192.107.102/23
=192.107.105/24
=192.107.106/23
=192.107.108/23
=192.107.111/24
=192.107.115/24
=192.107.116/22
=192.107.120/23
=192.107.130/23
=192.107.133/24
=192.107.134/23
=192.107.136/21
=192.107.144/20
=192.107.160/21
=192.107.169/24
=192.107.170/24
=192.107.173/24
=192.107.175/24
=192.107.176/24
=192.107.179/24
=192.107.180/22
=192.107.184/23
=192.107.186/24
=192.107.188/22
=192.107.192/21
=192.107.234/24
=192.107.237/24
=192.107.238/23
=192.107.240/20
=192.108/20
=192.108.16/22
=192.108.20/23
=192.108.22/24
=192.108.50/24
=192.108.93/24
=192.108.94/23
=192.108.96/23
=192.108.98/24
=192.108.102/23
=192.108.104/23
=192.108.106/24
=192.108.109/24
=192.108.110/23
=192.108.112/24
=192.108.122/23
=192.108.124/24
=192.108.127/24
=192.108.175/24
=192.108.176/20
=192.108.192/23
=192.108.194/24
=192.108.215/24
=192.108.216/21
=192.108.224/22
=192.108.228/23
=192.108.231/24
=192.108.232/23
=192.108.235/24
=192.108.236/23
=192.108.239/24
=192.108.240/20
=192.109.45/24
=192.109.75/24
=192.109.92/23
=192.109.99/24
=192.109.103/24
=192.109.104/24
=192.109.120/24
=192.110/16
=192.111/19
=192.111.34/23
=192.111.36/23
=192.111.38/24
=192.111.40/22
=192.111.45/24
=192.111.46/24
=192.111.49/24
=192.111.50/23
=192.111.52/22
=192.111.56/21
=192.111.64/20
=192.111.80/21
=192.111.89/24
=192.111.90/23
=192.111.92/22
=192.111.96/22
=192.111.100/24
=192.111.106/23
=192.111.108/22
=192.111.112/21
=192.111.120/22
=192.111.126/24
=192.111.128/18
=192.111.192/19
=192.111.224/22
=192.111.228/24
=192.111.231/24
=192.111.232/21
=192.111.240/21
=192.111.248/22
=192.111.253/24
=192.111.254/23
=192.112/20
=192.112.16/21
=192.112.24/22
=192.112.28/23
=192.112.33/24
=192.112.34/23
=192.112.36/22
=192.112.40/22
=192.112.44/24
=192.112.46/23
=192.112.48/24
=192.112.50/23
=192.112.52/22
=192.112.56/22
=192.112.60/24
=192.112.62/23
=192.112.64/22
=192.112.68/23
=192.112.80/20
=192.112.96/23
=192.112.101/24
=192.112.102/23
=192.112.104/21
=192.112.112/20
=192.112.128/18
=192.112.192/21
=192.112.200/22
=192.112.205/24
=192.112.207/24
=192.112.209/24
=192.112.210/23
=192.112.212/24
=192.112.216/21
=192.112.224/20
=192.112.240/22
=192.112.244/23
=192.112.246/24
=192.112.248/22
=192.112.252/23
=192.112.255/24
=192.119/16
=192.120/16
=192.122/24
=192.122.147/24
=192.122.148/23
=192.122.150/24
=192.122.172/22
=192.122.177/24
=192.122.178/23
=192.122.181/24
=192.122.182/23
=192.122.184/21
=192.122.192/20
=192.122.208/23
=192.122.211/24
=192.122.212/23
=192.122.215/24
=192.122.235/24
=192.122.236/23
=192.122.243/24
=192.122.244/22
=192.122.248/22
=192.122.252/23
=192.122.255/24
=192.123/16
=192.124/21
=192.124.8/23
=192.124.15/24
=192.124.16/21
=192.124.29/24
=192.124.30/23
=192.124.33/24
=192.124.34/23
=192.124.36/23
=192.124.38/24
=192.124.40/22
=192.124.44/23
=192.124.47/24
=192.124.48/20
=192.124.64/19
=192.124.96/20
=192.124.113/24
=192.124.114/24
=192.124.118/23
=192.124.120/21
=192.124.128/20
=192.124.144/21
=192.124.153/24
=192.124.156/22
=192.124.160/21
=192.124.168/23
=192.124.220/22
=192.124.224/21
=192.124.232/23
=192.124.234/24
=192.124.236/24
=192.124.246/24
=192.124.249/24
=192.124.255/24
=192.126/24
=192.126.65/24
=192.126.66/23
=192.126.68/22
=192.126.72/21
=192.126.80/20
=192.126.96/19
=192.126.128/17
=192.127/16
=192.128/16
=192.129/24
=192.129.62/23
=192.129.64/20
=192.129.81/24
=192.129.82/23
=192.129.84/23
=192.129.86/24
=192.129.88/21
=192.129.96/23
=192.129.99/24
=192.129.100/22
=192.129.104/21
=192.129.112/20
=192.129.128/17
=192.131/21
=192.131.8/22
=192.131.12/24
=192.131.14/23
=192.131.16/22
=192.131.21/24
=192.131.22/23
=192.131.24/24
=192.131.31/24
=192.131.32/19
=192.131.64/21
=192.131.72/22
=192.131.76/23
=192.131.78/24
=192.131.80/21
=192.131.88/24
=192.131.93/24
=192.131.94/23
=192.131.97/24
=192.131.98/23
=192.131.100/22
=192.131.104/22
=192.131.109/24
=192.131.110/23
=192.131.112/20
=192.131.128/22
=192.131.133/24
=192.131.134/23
=192.131.136/21
=192.131.144/20
=192.131.160/19
=192.131.192/19
=192.131.224/20
=192.131.240/21
=192.131.248/23
=192.131.250/24
=192.131.253/24
=192.131.254/23
=192.132/21
=192.132.8/24
=192.132.12/23
=192.132.14/24
=192.132.16/21
=192.132.24/22
=192.132.28/23
=192.132.30/24
=192.132.32/23
=192.132.36/22
=192.132.40/24
=192.132.42/23
=192.132.44/22
=192.132.48/22
=192.132.52/24
=192.132.54/24
=192.132.56/21
=192.132.64/20
=192.132.80/21
=192.132.88/22
=192.132.92/24
=192.132.94/23
=192.132.96/23
=192.132.98/24
=192.132.100/23
=192.132.103/24
=192.132.104/21
=192.132.112/20
=192.132.128/18
=192.132.192/19
=192.132.224/21
=192.132.232/22
=192.132.236/23
=192.132.238/24
=192.132.240/22
=192.132.246/24
=192.132.254/23
=192.133/21
=192.133.8/23
=192.133.11/24
=192.133.12/23
=192.133.16/22
=192.133.20/24
=192.133.22/23
=192.133.24/22
=192.133.29/24
=192.133.30/24
=192.133.33/24
=192.133.34/23
=192.133.37/24
=192.133.38/23
=192.133.40/24
=192.133.42/23
=192.133.44/22
=192.133.48/22
=192.133.52/24
=192.133.56/23
=192.133.59/24
=192.133.60/22
=192.133.65/24
=192.133.68/22
=192.133.72/21
=192.133.80/20
=192.133.96/21
=192.133.104/22
=192.133.112/21
=192.133.120/24
=192.133.122/23
=192.133.124/22
=192.133.128/23
=192.133.130/24
=192.133.132/22
=192.133.136/21
=192.133.144/20
=192.133.160/19
=192.133.192/19
=192.133.224/20
=192.133.240/22
=192.133.245/24
=192.133.246/23
=192.133.248/23
=192.133.251/24
=192.133.252/22
=192.135/22
=192.135.4/23
=192.135.6/24
=192.135.38/23
=192.135.40/22
=192.135.44/23
=192.135.47/24
=192.135.48/23
=192.135.50/24
=192.135.54/23
=192.135.56/22
=192.135.60/23
=192.135.62/24
=192.135.64/23
=192.135.67/24
=192.135.69/24
=192.135.70/23
=192.135.72/21
=192.135.80/23
=192.135.83/24
=192.135.84/22
=192.135.88/24
=192.135.93/24
=192.135.109/24
=192.135.110/23
=192.135.112/20
=192.135.128/24
=192.135.130/23
=192.135.132/24
=192.135.134/23
=192.135.136/22
=192.135.140/23
=192.135.142/24
=192.135.144/24
=192.135.169/24
=192.135.170/23
=192.135.172/23
=192.135.174/24
=192.135.176/21
=192.135.184/24
=192.135.186/24
=192.135.188/22
=192.135.192/21
=192.135.200/22
=192.135.204/23
=192.135.206/24
=192.135.209/24
=192.135.211/24
=192.135.212/22
=192.135.216/23
=192.135.218/24
=192.135.220/23
=192.135.223/24
=192.135.224/24
=192.135.226/23
=192.135.228/23
=192.135.230/24
=192.135.235/24
=192.135.236/22
=192.135.240/21
=192.135.248/22
=192.135.252/24
=192.135.255/24
=192.136/22
=192.136.4/23
=192.136.6/24
=192.136.8/24
=192.136.10/23
=192.136.12/22
=192.136.16/23
=192.136.20/23
=192.136.22/24
=192.136.24/22
=192.136.28/24
=192.136.32/22
=192.136.36/23
=192.136.38/24
=192.136.48/24
=192.136.50/24
=192.136.53/24
=192.136.54/24
=192.136.58/24
=192.136.60/24
=192.136.62/23
=192.136.64/22
=192.136.68/23
=192.136.70/24
=192.136.103/24
=192.136.104/21
=192.136.112/20
=192.136.128/21
=192.136.136/22
=192.136.140/24
=192.136.144/21
=192.136.152/23
=192.136.157/24
=192.136.158/23
=192.136.160/19
=192.136.192/18
=192.137/16
=192.138/24
=192.138.9/24
=192.138.10/23
=192.138.12/22
=192.138.16/20
=192.138.32/19
=192.138.64/20
=192.138.80/22
=192.138.84/23
=192.138.87/24
=192.138.88/21
=192.138.96/22
=192.138.101/24
=192.138.102/23
=192.138.104/24
=192.138.126/23
=192.138.128/20
=192.138.144/21
=192.138.152/23
=192.138.154/24
=192.138.159/24
=192.138.160/20
=192.138.176/22
=192.138.180/23
=192.138.182/24
=192.138.184/22
=192.138.189/24
=192.138.190/23
=192.138.193/24
=192.138.194/23
=192.138.196/22
=192.138.200/22
=192.138.205/24
=192.138.206/23
=192.138.208/20
=192.138.224/22
=192.138.233/24
=192.138.234/23
=192.138.236/22
=192.138.240/21
=192.138.249/24
=192.138.250/24
=192.138.252/22
=192.139/18
=192.139.64/21
=192.139.72/22
=192.139.76/23
=192.139.79/24
=192.139.80/20
=192.139.96/19
=192.139.128/17
=192.140/24
=192.140.4/22
=192.145.231/24
=192.145.232/21
=192.145.240/20
=192.146/18
=192.146.64/19
=192.146.96/20
=192.146.112/22
=192.146.116/24
=192.146.118/24
=192.146.120/23
=192.146.122/24
=192.146.127/24
=192.146.128/22
=192.146.142/23
=192.146.144/22
=192.146.148/23
=192.146.151/24
=192.146.153/24
=192.146.154/23
=192.146.156/24
=192.146.158/23
=192.146.160/23
=192.146.162/24
=192.146.171/24
=192.146.183/24
=192.146.186/24
=192.146.188/24
=192.146.190/23
=192.146.192/24
=192.146.194/23
=192.146.196/22
=192.146.201/24
=192.146.202/23
=192.146.205/24
=192.146.206/23
=192.146.208/21
=192.146.216/23
=192.146.220/22
=192.146.224/23
=192.146.226/24
=192.146.230/23
=192.146.235/24
=192.146.236/24
=192.146.240/23
=192.146.243/24
=192.146.244/22
=192.146.248/23
=192.146.250/24
=192.146.254/23
=192.147/20
=192.147.16/22
=192.147.20/23
=192.147.22/24
=192.147.24/21
=192.147.32/23
=192.147.35/24
=192.147.37/24
=192.147.38/23
=192.147.40/23
=192.147.43/24
=192.147.44/22
=192.147.48/20
=192.147.64/21
=192.147.72/22
=192.147.80/20
=192.147.96/20
=192.147.112/23
=192.147.115/24
=192.147.116/22
=192.147.120/21
=192.147.128/21
=192.147.136/22
=192.147.140/24
=192.147.142/23
=192.147.144/22
=192.147.148/23
=192.147.154/24
=192.147.156/22
=192.147.160/19
=192.147.192/20
=192.147.208/23
=192.147.211/24
=192.147.213/24
=192.147.214/24
=192.147.220/22
=192.147.224/22
=192.147.229/24
=192.147.230/23
=192.147.232/23
=192.147.234/24
=192.147.236/22
=192.147.240/22
=192.147.244/23
=192.147.248/23
=192.147.250/24
=192.147.252/24
=192.147.254/23
=192.148/19
=192.148.32/24
=192.148.93/24
=192.148.94/23
=192.148.96/22
=192.148.100/23
=192.148.102/24
=192.148.104/21
=192.148.112/22
=192.148.168/22
=192.148.172/23
=192.148.174/24
=192.148.176/24
=192.148.187/24
=192.148.188/22
=192.148.195/24
=192.148.196/23
=192.148.217/24
=192.148.218/23
=192.148.222/24
=192.148.231/24
=192.148.232/21
=192.148.240/20
=192.149/23
=192.149.2/24
=192.149.4/24
=192.149.6/23
=192.149.8/22
=192.149.12/23
=192.149.14/24
=192.149.16/23
=192.149.18/24
=192.149.21/24
=192.149.22/23
=192.149.24/23
=192.149.26/24
=192.149.28/24
=192.149.34/24
=192.149.37/24
=192.149.38/23
=192.149.40/24
=192.149.42/23
=192.149.44/22
=192.149.48/22
=192.149.52/23
=192.149.55/24
=192.149.56/24
=192.149.58/24
=192.149.61/24
=192.149.62/23
=192.149.64/21
=192.149.72/22
=192.149.76/24
=192.149.80/20
=192.149.96/23
=192.149.99/24
=192.149.101/24
=192.149.103/24
=192.149.104/22
=192.149.108/23
=192.149.112/22
=192.149.116/24
=192.149.122/23
=192.149.124/23
=192.149.127/24
=192.149.128/20
=192.149.144/22
=192.149.148/24
=192.149.150/23
=192.149.152/21
=192.149.160/19
=192.149.192/20
=192.149.208/24
=192.149.210/23
=192.149.212/22
=192.149.216/21
=192.149.224/23
=192.149.226/24
=192.149.228/22
=192.149.233/24
=192.149.234/23
=192.149.236/23
=192.149.240/20
=192.150/20
=192.150.17/24
=192.150.18/23
=192.150.21/24
=192.150.22/23
=192.150.24/21
=192.150.32/20
=192.150.48/21
=192.150.56/23
=192.150.73/24
=192.150.74/24
=192.150.77/24
=192.150.85/24
=192.150.86/23
=192.150.88/24
=192.150.90/23
=192.150.93/24
=192.150.95/24
=192.150.97/24
=192.150.98/23
=192.150.100/22
=192.150.105/24
=192.150.108/22
=192.150.112/21
=192.150.120/22
=192.150.125/24
=192.150.127/24
=192.150.128/24
=192.150.141/24
=192.150.142/23
=192.150.145/24
=192.150.147/24
=192.150.148/22
=192.150.152/21
=192.150.160/20
=192.150.176/24
=192.150.185/24
=192.150.186/23
=192.150.191/24
=192.150.199/24
=192.150.201/24
=192.150.206/23
=192.150.210/23
=192.150.212/22
=192.150.216/23
=192.150.221/24
=192.150.222/24
=192.150.224/23
=192.150.226/24
=192.150.239/24
=192.150.240/22
=192.150.244/23
=192.150.247/24
=192.150.253/24
=192.150.255/24
=192.151/17
=192.151.128/24
=192.151.130/23
=192.151.132/22
=192.151.136/21
=192.151.144/20
=192.151.160/19
=192.151.192/18
=192.152/22
=192.152.4/23
=192.152.7/24
=192.152.8/22
=192.152.12/23
=192.152.15/24
=192.152.16/24
=192.152.18/23
=192.152.20/22
=192.152.24/23
=192.152.28/22
=192.152.32/21
=192.152.40/23
=192.152.43/24
=192.152.45/24
=192.152.46/24
=192.152.52/23
=192.152.55/24
=192.152.56/22
=192.152.60/24
=192.152.64/22
=192.152.70/23
=192.152.72/21
=192.152.80/23
=192.152.83/24
=192.152.84/23
=192.152.88/21
=192.152.96/23
=192.152.99/24
=192.152.100/22
=192.152.104/22
=192.152.108/23
=192.152.110/24
=192.152.113/24
=192.152.114/23
=192.152.116/23
=192.152.118/24
=192.152.120/23
=192.152.123/24
=192.152.125/24
=192.152.126/23
=192.152.128/21
=192.152.136/22
=192.152.140/24
=192.152.142/23
=192.152.145/24
=192.152.147/24
=192.152.148/23
=192.152.150/24
=192.152.152/22
=192.152.157/24
=192.152.158/23
=192.152.160/22
=192.152.164/23
=192.152.168/22
=192.152.172/23
=192.152.175/24
=192.152.176/21
=192.152.188/22
=192.152.192/22
=192.152.196/24
=192.152.198/23
=192.152.200/21
=192.152.208/22
=192.152.213/24
=192.152.214/23
=192.152.216/21
=192.152.224/20
=192.152.240/24
=192.152.242/23
=192.152.245/24
=192.152.246/23
=192.152.248/22
=192.152.252/24
=192.152.255/24
=192.153/23
=192.153.4/22
=192.153.8/24
=192.153.10/23
=192.153.14/23
=192.153.16/23
=192.153.20/22
=192.153.24/21
=192.153.32/19
=192.153.64/20
=192.153.80/21
=192.153.90/23
=192.153.92/24
=192.153.94/24
=192.153.115/24
=192.153.117/24
=192.153.118/24
=192.153.121/24
=192.153.122/23
=192.153.124/23
=192.153.126/24
=192.153.128/20
=192.153.144/21
=192.153.152/24
=192.153.154/24
=192.153.156/23
=192.153.159/24
=192.153.160/22
=192.153.164/23
=192.153.169/24
=192.153.170/24
=192.153.172/24
=192.153.183/24
=192.153.184/22
=192.153.190/23
=192.153.192/23
=192.153.195/24
=192.153.198/23
=192.153.200/21
=192.153.208/22
=192.153.212/24
=192.153.214/23
=192.153.216/22
=192.153.220/24
=192.153.229/24
=192.153.230/23
=192.153.232/21
=192.153.240/21
=192.153.248/23
=192.153.250/24
=192.153.252/22
=192.154/20
=192.154.26/23
=192.154.28/22
=192.154.32/19
=192.154.64/18
=192.154.128/17
=192.155/24
=192.155.7/24
=192.155.8/21
=192.155.16/20
=192.155.32/19
=192.155.64/18
=192.155.128/17
=192.156/17
=192.156.128/22
=192.156.133/24
=192.156.134/23
=192.156.136/22
=192.156.157/24
=192.156.160/23
=192.156.163/24
=192.156.164/24
=192.156.166/24
=192.156.168/21
=192.156.176/20
=192.156.192/21
=192.156.200/22
=192.156.204/23
=192.156.206/24
=192.156.209/24
=192.156.211/24
=192.156.212/24
=192.156.214/23
=192.156.216/24
=192.156.218/23
=192.156.221/24
=192.156.222/23
=192.156.224/24
=192.156.226/24
=192.156.228/22
=192.156.232/22
=192.156.236/23
=192.156.238/24
=192.156.240/21
=192.156.250/23
=192.156.252/22
=192.157/24
=192.157.4/22
=192.157.18/23
=192.157.20/22
=192.157.24/21
=192.157.32/19
=192.157.64/18
=192.157.128/24
=192.157.130/23
=192.157.132/22
=192.157.136/21
=192.157.144/20
=192.157.160/23
=192.157.163/24
=192.157.164/24
=192.157.173/24
=192.157.175/24
=192.157.177/24
=192.157.178/23
=192.157.180/22
=192.157.184/24
=192.157.186/24
=192.157.188/24
=192.157.192/18
=192.158/16
=192.159/20
=192.159.31/24
=192.159.32/22
=192.159.36/23
=192.159.40/21
=192.159.48/20
=192.159.64/22
=192.159.68/23
=192.159.71/24
=192.159.72/24
=192.159.74/23
=192.159.76/24
=192.159.78/23
=192.159.80/22
=192.159.86/23
=192.159.88/23
=192.159.91/24
=192.159.92/23
=192.159.94/24
=192.159.96/23
=192.159.98/24
=192.159.104/24
=192.159.106/23
=192.159.110/23
=192.159.112/22
=192.159.119/24
=192.159.120/24
=192.159.123/24
=192.159.124/22
=192.159.128/17
=192.160/21
=192.160.8/23
=192.160.11/24
=192.160.12/23
=192.160.14/24
=192.160.17/24
=192.160.18/24
=192.160.20/24
=192.160.24/23
=192.160.26/24
=192.160.28/24
=192.160.30/23
=192.160.32/24
=192.160.34/23
=192.160.36/24
=192.160.38/23
=192.160.40/22
=192.160.44/24
=192.160.46/23
=192.160.48/23
=192.160.51/24
=192.160.52/22
=192.160.56/21
=192.160.64/24
=192.160.66/24
=192.160.68/23
=192.160.70/24
=192.160.72/21
=192.160.80/21
=192.160.88/22
=192.160.92/23
=192.160.94/24
=192.160.97/24
=192.160.98/23
=192.160.100/22
=192.160.104/23
=192.160.107/24
=192.160.108/24
=192.160.112/21
=192.160.120/23
=192.160.122/24
=192.160.124/23
=192.160.127/24
=192.160.129/24
=192.160.130/23
=192.160.132/22
=192.160.136/22
=192.160.140/23
=192.160.144/21
=192.160.153/24
=192.160.154/24
=192.160.157/24
=192.160.158/23
=192.160.162/23
=192.160.164/22
=192.160.168/24
=192.160.173/24
=192.160.174/23
=192.160.176/24
=192.160.180/22
=192.160.184/22
=192.160.189/24
=192.160.190/23
=192.160.192/23
=192.160.196/22
=192.160.200/22
=192.160.204/24
=192.160.206/23
=192.160.208/20
=192.160.227/24
=192.160.228/24
=192.160.230/24
=192.160.234/23
=192.160.236/22
=192.160.240/22
=192.160.244/24
=192.160.250/24
=192.160.253/24
=192.160.254/23
=192.161/22
=192.161.4/23
=192.161.8/21
=192.161.16/20
=192.161.32/19
=192.161.66/23
=192.161.68/22
=192.161.72/21
=192.161.80/20
=192.161.96/19
=192.161.130/23
=192.161.132/22
=192.161.136/21
=192.161.144/20
=192.161.160/19
=192.161.192/18
=192.163/19
=192.163.160/19
=192.163.192/18
=192.169/19
=192.169.42/23
=192.169.44/22
=192.169.48/20
=192.169.64/18
=192.169.128/17
=192.170/16
=192.171/24
=192.171.6/23
=192.171.8/21
=192.171.16/20
=192.171.32/19
=192.171.64/18
=192.171.200/21
=192.171.208/20
=192.171.224/19
=192.172/17
=192.172.128/18
=192.172.192/19
=192.172.224/23
=192.172.226/24
=192.172.233/24
=192.172.240/24
=192.172.244/24
=192.172.247/24
=192.172.248/22
=192.172.252/24
=192.172.254/23
=192.173/24
=192.173.5/24
=192.173.6/23
=192.173.8/21
=192.173.25/24
=192.173.26/23
=192.173.28/22
=192.173.32/19
=192.173.64/18
=192.173.136/21
=192.173.144/20
=192.173.160/19
=192.173.192/18
=192.174/18
=192.174.69/24
=192.174.70/23
=192.174.72/21
=192.174.80/20
=192.174.96/19
=192.175/21
=192.175.8/22
=192.175.12/23
=192.175.16/20
=192.175.48/20
=192.175.64/18
=192.175.128/17
=192.177/16
=192.178/15
=192.180/14
=192.184/15
=192.186/16
=192.187/20
=192.187.26/23
=192.187.28/22
=192.187.32/19
=192.187.64/18
=192.187.128/17
=192.188/21
=192.188.8/23
=192.188.12/22
=192.188.16/20
=192.188.32/21
=192.188.40/23
=192.188.42/24
=192.188.61/24
=192.188.62/24
=192.188.66/23
=192.188.68/24
=192.188.70/24
=192.188.72/24
=192.188.81/24
=192.188.84/24
=192.188.88/24
=192.188.91/24
=192.188.93/24
=192.188.94/23
=192.188.97/24
=192.188.98/23
=192.188.100/24
=192.188.102/23
=192.188.104/24
=192.188.106/24
=192.188.108/22
=192.188.112/23
=192.188.114/24
=192.188.118/23
=192.188.120/24
=192.188.123/24
=192.188.124/24
=192.188.126/24
=192.188.130/23
=192.188.133/24
=192.188.134/23
=192.188.137/24
=192.188.138/23
=192.188.140/22
=192.188.144/24
=192.188.146/23
=192.188.148/23
=192.188.150/24
=192.188.152/22
=192.188.156/24
=192.188.159/24
=192.188.160/22
=192.188.168/23
=192.188.173/24
=192.188.176/21
=192.188.184/24
=192.188.188/24
=192.188.190/23
=192.188.192/23
=192.188.198/23
=192.188.200/21
=192.188.208/20
=192.188.224/21
=192.188.232/24
=192.188.238/23
=192.188.240/24
=192.188.249/24
=192.188.250/23
=192.188.252/22
=192.189/24
=192.189.2/23
=192.189.4/22
=192.189.12/23
=192.189.15/24
=192.189.16/22
=192.189.20/23
=192.189.22/24
=192.189.25/24
=192.189.26/23
=192.189.28/22
=192.189.32/23
=192.189.35/24
=192.189.36/22
=192.189.40/24
=192.189.42/23
=192.189.44/22
=192.189.48/23
=192.189.50/24
=192.189.53/24
=192.189.56/21
=192.189.64/23
=192.189.67/24
=192.189.68/24
=192.189.71/24
=192.189.72/24
=192.189.74/24
=192.189.77/24
=192.189.78/23
=192.189.80/21
=192.189.88/22
=192.189.92/23
=192.189.95/24
=192.189.96/20
=192.189.112/22
=192.189.116/23
=192.189.118/24
=192.189.120/21
=192.189.128/21
=192.189.137/24
=192.189.138/24
=192.189.141/24
=192.189.142/23
=192.189.144/22
=192.189.149/24
=192.189.150/24
=192.189.152/23
=192.189.155/24
=192.189.156/24
=192.189.158/24
=192.189.161/24
=192.189.162/23
=192.189.164/23
=192.189.171/24
=192.189.172/22
=192.189.176/20
=192.189.192/21
=192.189.200/23
=192.189.204/22
=192.189.212/22
=192.189.216/22
=192.189.220/23
=192.189.222/24
=192.189.224/22
=192.189.228/24
=192.189.234/23
=192.189.236/22
=192.189.240/21
=192.189.248/23
=192.189.250/24
=192.189.252/22
=192.190/20
=192.190.16/21
=192.190.24/22
=192.190.28/23
=192.190.32/21
=192.190.40/22
=192.190.45/24
=192.190.46/23
=192.190.48/21
=192.190.56/23
=192.190.60/24
=192.190.62/23
=192.190.65/24
=192.190.68/24
=192.190.70/23
=192.190.72/21
=192.190.80/21
=192.190.88/22
=192.190.92/23
=192.190.94/24
=192.190.96/21
=192.190.104/22
=192.190.109/24
=192.190.110/23
=192.190.112/20
=192.190.128/24
=192.190.133/24
=192.190.134/23
=192.190.136/21
=192.190.144/20
=192.190.160/21
=192.190.168/22
=192.190.172/24
=192.190.175/24
=192.190.176/22
=192.190.184/22
=192.190.188/23
=192.190.194/23
=192.190.196/22
=192.190.200/24
=192.190.203/24
=192.190.206/23
=192.190.216/21
=192.190.224/21
=192.190.232/24
=192.190.237/24
=192.190.238/23
=192.190.241/24
=192.190.243/24
=192.190.244/23
=192.190.246/24
=192.190.250/23
=192.190.252/22
=192.191/16
=192.193/16
=192.195/24
=192.195.3/24
=192.195.4/22
=192.195.9/24
=192.195.11/24
=192.195.15/24
=192.195.16/20
=192.195.32/23
=192.195.35/24
=192.195.36/23
=192.195.38/24
=192.195.41/24
=192.195.58/23
=192.195.60/22
=192.195.64/21
=192.195.73/24
=192.195.74/23
=192.195.76/22
=192.195.80/20
=192.195.96/23
=192.195.99/24
=192.195.100/23
=192.195.103/24
=192.195.104/24
=192.195.107/24
=192.195.108/23
=192.195.111/24
=192.195.113/24
=192.195.114/23
=192.195.119/24
=192.195.120/21
=192.195.128/22
=192.195.132/23
=192.195.149/24
=192.195.150/23
=192.195.153/24
=192.195.154/23
=192.195.156/22
=192.195.160/21
=192.195.168/23
=192.195.171/24
=192.195.172/22
=192.195.176/22
=192.195.180/23
=192.195.182/24
=192.195.185/24
=192.195.187/24
=192.195.188/22
=192.195.192/23
=192.195.194/24
=192.195.196/24
=192.195.198/23
=192.195.200/21
=192.195.208/21
=192.195.216/23
=192.195.218/24
=192.195.220/22
=192.195.224/21
=192.195.232/24
=192.195.234/23
=192.195.238/23
=192.195.240/20
=192.196/24
=192.196.156/22
=192.196.160/19
=192.196.192/18
=192.197/18
=192.197.64/19
=192.197.96/20
=192.197.112/24
=192.197.114/23
=192.197.116/22
=192.197.120/21
=192.197.128/17
=192.198/21
=192.198.16/20
=192.198.32/19
=192.198.64/18
=192.198.128/17
=192.199/20
=192.199.48/20
=192.199.64/18
=192.199.128/17
=192.200/18
=192.200.80/20
=192.200.96/19
=192.200.128/17
=192.201/16
=192.202/16
=192.203/19
=192.203.32/22
=192.203.36/23
=192.203.40/21
=192.203.48/20
=192.203.64/20
=192.203.96/23
=192.203.98/24
=192.203.100/22
=192.203.104/22
=192.203.110/23
=192.203.112/20
=192.203.128/21
=192.203.136/23
=192.203.147/24
=192.203.148/22
=192.203.152/23
=192.203.155/24
=192.203.159/24
=192.203.160/20
=192.203.178/23
=192.203.180/23
=192.203.182/24
=192.203.186/23
=192.203.188/22
=192.203.192/24
=192.203.194/23
=192.203.196/22
=192.203.200/21
=192.203.210/23
=192.203.212/24
=192.203.214/23
=192.203.217/24
=192.203.218/23
=192.203.220/22
=192.203.224/23
=192.203.226/24
=192.203.228/22
=192.203.233/24
=192.203.234/24
=192.203.236/22
=192.203.240/22
=192.203.244/23
=192.203.246/24
=192.203.248/21
=192.204/15
=192.206/18
=192.206.64/21
=192.206.72/22
=192.206.76/24
=192.206.82/23
=192.206.84/23
=192.206.87/24
=192.206.88/21
=192.206.96/22
=192.206.100/23
=192.206.103/24
=192.206.104/22
=192.206.109/24
=192.206.110/23
=192.206.112/22
=192.206.116/24
=192.206.118/23
=192.206.120/21
=192.206.128/20
=192.206.144/21
=192.206.158/23
=192.206.160/19
=192.206.192/20
=192.206.208/21
=192.206.216/22
=192.206.220/23
=192.206.227/24
=192.206.228/22
=192.206.232/21
=192.206.240/20
=192.207/21
=192.207.8/22
=192.207.12/23
=192.207.15/24
=192.207.16/21
=192.207.24/22
=192.207.28/23
=192.207.30/24
=192.207.32/24
=192.207.34/23
=192.207.37/24
=192.207.38/23
=192.207.43/24
=192.207.44/22
=192.207.48/20
=192.207.69/24
=192.207.70/23
=192.207.72/21
=192.207.80/21
=192.207.88/23
=192.207.90/24
=192.207.92/22
=192.207.99/24
=192.207.100/22
=192.207.104/21
=192.207.112/24
=192.207.114/23
=192.207.116/23
=192.207.118/24
=192.207.122/23
=192.207.124/22
=192.207.128/21
=192.207.136/22
=192.207.140/24
=192.207.144/23
=192.207.147/24
=192.207.148/23
=192.207.150/24
=192.207.159/24
=192.207.160/24
=192.207.162/23
=192.207.164/24
=192.207.166/23
=192.207.168/21
=192.207.176/22
=192.207.180/23
=192.207.182/24
=192.207.184/23
=192.207.186/24
=192.207.188/22
=192.207.192/23
=192.207.199/24
=192.207.207/24
=192.207.208/20
=192.207.224/20
=192.207.240/23
=192.207.243/24
=192.207.245/24
=192.207.246/23
=192.207.249/24
=192.207.250/23
=192.207.252/23
=192.207.255/24
=192.208/13
=192.216/15
=192.219/16
=192.220/15
=192.222/16
=192.223/18
=192.223.128/17
=192.224/15
=192.226/16
=192.227/24
=192.227.16/20
=192.227.32/19
=192.227.64/18
=192.227.128/17
=192.228/17
=192.229/16
=192.230/20
=192.230.32/19
=192.230.64/18
=192.230.128/17
=192.231/21
=192.231.8/22
=192.231.12/23
=192.231.14/24
=192.231.16/20
=192.231.32/23
=192.231.35/24
=192.231.36/22
=192.231.40/21
=192.231.48/21
=192.231.56/23
=192.231.58/24
=192.231.60/22
=192.231.64/23
=192.231.66/24
=192.231.68/22
=192.231.72/22
=192.231.76/24
=192.231.78/23
=192.231.80/23
=192.231.83/24
=192.231.84/22
=192.231.88/21
=192.231.96/21
=192.231.104/22
=192.231.108/23
=192.231.111/24
=192.231.112/23
=192.231.122/23
=192.231.124/23
=192.231.126/24
=192.231.128/22
=192.231.132/23
=192.231.134/24
=192.231.138/23
=192.231.141/24
=192.231.142/23
=192.231.145/24
=192.231.146/23
=192.231.148/22
=192.231.152/21
=192.231.160/22
=192.231.164/23
=192.231.171/24
=192.231.172/23
=192.231.174/24
=192.231.177/24
=192.231.178/23
=192.231.180/23
=192.231.182/24
=192.231.184/21
=192.231.192/24
=192.231.194/23
=192.231.196/22
=192.231.200/23
=192.231.202/24
=192.231.204/22
=192.231.208/23
=192.231.210/24
=192.231.213/24
=192.231.214/23
=192.231.217/24
=192.231.219/24
=192.231.220/22
=192.231.224/21
=192.231.232/22
=192.231.236/24
=192.231.238/23
=192.231.240/21
=192.231.249/24
=192.231.250/23
=192.231.252/23
=192.231.255/24
=192.232/19
=192.232.64/18
=192.232.160/19
=192.232.192/18
=192.233/16
=192.234/19
=192.234.32/20
=192.234.48/21
=192.234.56/23
=192.234.59/24
=192.234.60/22
=192.234.64/18
=192.234.128/18
=192.234.192/19
=192.234.224/22
=192.234.228/23
=192.234.230/24
=192.234.232/21
=192.234.240/22
=192.234.244/24
=192.234.246/23
=192.234.248/21
=192.235/16
=192.236/15
=192.238/24
=192.238.11/24
=192.238.12/22
=192.238.16/20
=192.238.32/19
=192.238.64/18
=192.238.128/17
=192.239/16
=192.240/20
=192.240.32/19
=192.240.64/18
=192.240.128/17
=192.241/16
=192.242/15
=192.245/21
=192.245.8/23
=192.245.10/24
=192.245.12/24
=192.245.15/24
=192.245.16/21
=192.245.24/22
=192.245.28/23
=192.245.31/24
=192.245.32/23
=192.245.37/24
=192.245.38/23
=192.245.40/21
=192.245.48/21
=192.245.56/23
=192.245.61/24
=192.245.62/23
=192.245.64/21
=192.245.72/24
=192.245.81/24
=192.245.82/23
=192.245.84/22
=192.245.88/22
=192.245.92/23
=192.245.95/24
=192.245.96/21
=192.245.104/24
=192.245.113/24
=192.245.114/23
=192.245.116/22
=192.245.120/24
=192.245.122/23
=192.245.124/22
=192.245.128/20
=192.245.144/22
=192.245.149/24
=192.245.150/23
=192.245.153/24
=192.245.154/24
=192.245.156/22
=192.245.160/23
=192.245.163/24
=192.245.164/22
=192.245.168/24
=192.245.170/23
=192.245.172/22
=192.245.176/21
=192.245.184/24
=192.245.186/23
=192.245.188/22
=192.245.193/24
=192.245.194/23
=192.245.197/24
=192.245.198/23
=192.245.200/21
=192.245.209/24
=192.245.218/24
=192.245.221/24
=192.245.222/23
=192.245.224/24
=192.245.226/23
=192.245.228/22
=192.245.232/21
=192.245.240/21
=192.245.248/24
=192.245.252/22
=192.246/16
=192.247/24
=192.247.11/24
=192.247.12/22
=192.247.16/20
=192.247.32/19
=192.247.64/18
=192.247.128/17
=192.248.128/17
=192.249/20
=192.249.32/21
=192.249.40/23
=192.249.44/22
=192.249.48/20
=192.249.64/18
=192.249.128/17
=192.250/16
=192.251/19
=192.251.32/22
=192.251.36/23
=192.251.38/24
=192.251.40/21
=192.251.48/21
=192.251.56/22
=192.251.60/24
=192.251.66/23
=192.251.68/22
=192.251.72/21
=192.251.80/20
=192.251.96/19
=192.251.128/20
=192.251.144/22
=192.251.149/24
=192.251.150/23
=192.251.152/21
=192.251.160/19
=192.251.192/23
=192.251.194/24
=192.251.196/22
=192.251.200/24
=192.251.203/24
=192.251.208/20
=192.251.224/23
=192.251.231/24
=192.251.232/21
=192.251.240/20
=192.252/14
=193.122/15
=194.35.191/24
=195.167.160/20
=196.1.2/24
=196.1.72/23
=196.1.107/24
=196.1.136/24
=196.1.138/23
=196.1.140/23
=196.1.142/24
=196.1.160/20
=196.2/23
=196.3/21
=196.3.8/22
=196.3.12/23
=196.3.32/20
=196.3.48/21
=196.3.56/24
=196.3.73/24
=196.3.95/24
=196.3.104/24
=196.3.153/24
=196.3.184/21
=196.3.192/19
=196.4.46/23
=196.4.48/20
=196.4.64/22
=196.4.68/23
=196.4.70/24
=196.12/21
=196.12.8/23
=196.12.64/18
=196.12.160/19
=196.27/18
=196.28.48/20
=196.32/21
=196.32.128/19
=196.42/18
=196.216.1/24
=198/15
=198.2/20
=198.2.32/19
=198.2.64/18
=198.2.128/17
=198.3/16
=198.4/14
=198.8/15
=198.10/16
=198.11.4/22
=198.11.8/21
=198.11.16/20
=198.11.32/19
=198.11.64/18
=198.11.128/17
=198.12/19
=198.12.64/18
=198.12.128/17
=198.13/16
=198.14/16
=198.15/20
=198.15.64/18
=198.15.128/17
=198.16/16
=198.17/24
=198.17.2/23
=198.17.4/23
=198.17.6/24
=198.17.8/21
=198.17.16/20
=198.17.32/19
=198.17.64/22
=198.17.68/23
=198.17.71/24
=198.17.72/22
=198.17.76/24
=198.17.78/23
=198.17.80/20
=198.17.96/21
=198.17.104/23
=198.17.107/24
=198.17.108/22
=198.17.112/24
=198.17.116/24
=198.17.119/24
=198.17.122/23
=198.17.124/22
=198.17.128/19
=198.17.160/20
=198.17.176/22
=198.17.183/24
=198.17.184/21
=198.17.192/19
=198.17.224/22
=198.17.229/24
=198.17.230/24
=198.17.233/24
=198.17.234/23
=198.17.236/22
=198.17.242/23
=198.17.244/22
=198.17.248/21
=198.20/15
=198.22/19
=198.22.32/23
=198.22.36/24
=198.22.38/23
=198.22.40/22
=198.22.44/23
=198.22.46/24
=198.22.52/22
=198.22.56/22
=198.22.60/24
=198.22.62/23
=198.22.64/20
=198.22.80/21
=198.22.88/22
=198.22.92/24
=198.22.98/23
=198.22.100/22
=198.22.104/21
=198.22.112/20
=198.22.128/18
=198.22.192/19
=198.22.224/20
=198.22.240/21
=198.22.248/23
=198.22.252/22
=198.23/16
=198.24/15
=198.26/16
=198.27/22
=198.27.9/24
=198.27.10/23
=198.27.12/22
=198.27.16/20
=198.27.32/19
=198.27.64/18
=198.27.128/17
=198.28/14
=198.32/14
=198.36/19
=198.36.47/24
=198.36.48/20
=198.36.64/18
=198.36.128/17
=198.37/16
=198.38/15
=198.40/16
=198.41/20
=198.41.28/22
=198.41.47/24
=198.41.48/20
=198.41.64/18
=198.41.128/17
=198.42/15
=198.44/16
=198.45/18
=198.45.64/19
=198.45.96/20
=198.45.112/22
=198.45.120/21
=198.45.128/17
=198.46/15
=198.48.4/22
=198.48.8/21
=198.48.16/20
=198.48.32/19
=198.48.64/18
=198.48.128/17
=198.49/23
=198.49.4/22
=198.49.8/21
=198.49.16/20
=198.49.40/21
=198.49.48/20
=198.49.64/20
=198.49.80/22
=198.49.84/23
=198.49.86/24
=198.49.88/21
=198.49.96/20
=198.49.114/23
=198.49.116/22
=198.49.120/22
=198.49.125/24
=198.49.126/23
=198.49.134/23
=198.49.136/21
=198.49.144/20
=198.49.160/22
=198.49.165/24
=198.49.166/23
=198.49.168/21
=198.49.176/20
=198.49.192/18
=198.50/20
=198.50.24/21
=198.50.32/19
=198.50.64/18
=198.50.128/17
=198.51/22
=198.51.8/22
=198.51.13/24
=198.51.14/23
=198.51.16/20
=198.51.32/19
=198.51.64/22
=198.51.68/23
=198.51.70/24
=198.51.72/21
=198.51.80/20
=198.51.96/23
=198.51.98/24
=198.51.102/23
=198.51.104/21
=198.51.112/20
=198.51.128/21
=198.51.136/22
=198.51.140/23
=198.51.142/24
=198.51.147/24
=198.51.148/22
=198.51.152/21
=198.51.160/20
=198.51.176/21
=198.51.184/23
=198.51.187/24
=198.51.188/22
=198.51.192/23
=198.51.194/24
=198.51.197/24
=198.51.198/23
=198.51.200/21
=198.51.208/23
=198.51.212/22
=198.51.216/21
=198.51.224/19
=198.52/19
=198.52.32/21
=198.52.40/22
=198.52.48/20
=198.52.64/18
=198.52.128/17
=198.53/16
=198.54/24
=198.54.11/24
=198.54.12/23
=198.54.14/24
=198.54.62/23
=198.54.81/24
=198.54.82/24
=198.54.88/23
=198.54.90/24
=198.54.92/22
=198.54.96/23
=198.54.100/22
=198.54.104/21
=198.54.112/20
=198.54.128/21
=198.54.136/22
=198.54.140/24
=198.54.152/23
=198.54.164/24
=198.54.166/23
=198.54.168/23
=198.54.171/24
=198.54.172/24
=198.54.182/24
=198.54.200/23
=198.54.211/24
=198.54.212/22
=198.54.216/23
=198.54.218/24
=198.54.221/24
=198.54.222/24
=198.54.224/24
=198.54.230/24
=198.54.233/24
=198.54.235/24
=198.54.236/22
=198.54.240/22
=198.54.244/23
=198.54.246/24
=198.54.255/24
=198.55/20
=198.55.16/21
=198.55.24/22
=198.55.32/19
=198.55.64/18
=198.55.128/17
=198.56/20
=198.56.26/23
=198.56.28/22
=198.56.32/19
=198.56.64/18
=198.56.128/17
=198.57/16
=198.58/21
=198.58.13/24
=198.58.14/23
=198.58.16/20
=198.58.32/19
=198.58.64/18
=198.58.128/17
=198.59/16
=198.60/16
=198.61/24
=198.61.4/22
=198.61.16/20
=198.61.32/19
=198.61.64/18
=198.61.128/17
=198.62/15
=198.64/13
=198.72/16
=198.73/17
=198.73.128/18
=198.73.192/20
=198.73.208/21
=198.73.216/22
=198.73.221/24
=198.73.222/23
=198.73.224/19
=198.74/15
=198.76/14
=198.80/13
=198.88/16
=198.89/18
=198.89.64/20
=198.89.80/21
=198.89.96/19
=198.89.128/17
=198.90/15
=198.92/14
=198.96/16
=198.97/19
=198.97.32/22
=198.97.36/23
=198.97.39/24
=198.97.40/21
=198.97.48/20
=198.97.64/18
=198.97.128/17
=198.98/16
=198.99/17
=198.99.128/20
=198.99.144/22
=198.99.149/24
=198.99.150/23
=198.99.152/21
=198.99.160/21
=198.99.168/22
=198.99.172/24
=198.99.174/23
=198.99.176/20
=198.99.192/20
=198.99.208/21
=198.99.216/22
=198.99.220/23
=198.99.223/24
=198.99.224/19
=198.100/14
=198.104/16
=198.105/18
=198.105.64/19
=198.105.128/17
=198.106/15
=198.108/14
=198.112/12
=198.128/14
=198.132/16
=198.133/18
=198.133.64/20
=198.133.86/23
=198.133.88/21
=198.133.96/19
=198.133.128/21
=198.133.136/22
=198.133.141/24
=198.133.142/23
=198.133.144/20
=198.133.160/19
=198.133.192/21
=198.133.200/22
=198.133.204/23
=198.133.207/24
=198.133.208/20
=198.133.224/23
=198.133.227/24
=198.133.228/22
=198.133.232/21
=198.133.240/20
=198.134/16
=198.135/17
=198.135.128/21
=198.135.136/24
=198.135.139/24
=198.135.140/22
=198.135.144/20
=198.135.160/22
=198.135.164/23
=198.135.166/24
=198.135.168/21
=198.135.176/20
=198.135.192/18
=198.136/14
=198.140/15
=198.143/16
=198.144/17
=198.144.144/20
=198.144.160/19
=198.144.192/18
=198.145/16
=198.146/16
=198.147/17
=198.147.128/19
=198.147.161/24
=198.147.162/23
=198.147.164/22
=198.147.168/21
=198.147.176/20
=198.147.192/18
=198.148/17
=198.148.128/19
=198.148.160/20
=198.148.176/24
=198.148.179/24
=198.148.180/22
=198.148.184/22
=198.148.188/24
=198.148.190/23
=198.148.198/23
=198.148.200/21
=198.148.208/20
=198.148.224/19
=198.149/16
=198.150/16
=198.151/17
=198.151.128/22
=198.151.133/24
=198.151.134/23
=198.151.136/21
=198.151.144/20
=198.151.160/19
=198.151.192/18
=198.152/13
=198.160/13
=198.168/14
=198.172/15
=198.174/16
=198.175/18
=198.175.64/19
=198.175.96/22
=198.175.104/21
=198.175.112/20
=198.175.128/17
=198.176/15
=198.178/16
=198.179/17
=198.179.128/18
=198.179.192/19
=198.179.224/24
=198.179.226/23
=198.179.228/22
=198.179.232/21
=198.179.240/20
=198.180/17
=198.180.128/21
=198.180.136/22
=198.180.140/23
=198.180.143/24
=198.180.144/22
=198.180.148/23
=198.180.154/23
=198.180.156/22
=198.180.160/19
=198.180.192/18
=198.181/16
=198.182/15
=198.184/17
=198.184.128/19
=198.184.160/24
=198.184.162/23
=198.184.164/22
=198.184.168/21
=198.184.176/20
=198.184.192/18
=198.185/16
=198.186/15
=198.188/14
=198.192/13
=198.200.10/23
=198.200.12/22
=198.200.16/20
=198.200.32/19
=198.200.64/18
=198.200.128/17
=198.201/16
=198.202/15
=198.204/15
=198.206/17
=198.206.128/18
=198.206.192/22
=198.206.196/24
=198.206.198/23
=198.206.203/24
=198.206.204/22
=198.206.208/20
=198.206.224/19
=198.207/16
=198.208/12
=198.224/12
=198.240/17
=198.241/16
=198.242/15
=198.244/21
=198.244.8/23
=198.244.12/22
=198.244.16/20
=198.244.32/19
=198.244.64/18
=198.244.128/17
=198.245/16
=198.246/17
=198.246.128/18
=198.246.192/20
=198.246.208/21
=198.246.216/22
=198.246.220/23
=198.246.222/24
=198.246.224/19
=198.247/16
=198.248/13
=199/13
=199.8/16
=199.9/20
=199.9.16/21
=199.9.32/19
=199.9.64/18
=199.9.128/17
=199.10/15
=199.12/14
=199.16/14
=199.20/16
=199.21/17
=199.21.128/19
=199.21.160/21
=199.21.168/22
=199.21.176/20
=199.21.192/18
=199.22/15
=199.24/15
=199.26/18
=199.26.64/19
=199.26.104/21
=199.26.112/20
=199.26.128/18
=199.26.192/19
=199.26.224/21
=199.26.232/23
=199.26.235/24
=199.26.236/22
=199.26.240/20
=199.27/16
=199.28/14
=199.32/15
=199.34/21
=199.34.8/23
=199.34.11/24
=199.34.12/22
=199.34.16/20
=199.34.32/19
=199.34.64/18
=199.34.128/17
=199.35/16
=199.36/14
=199.40/15
=199.42/16
=199.43/20
=199.43.16/23
=199.43.20/22
=199.43.24/21
=199.43.32/21
=199.43.40/22
=199.43.44/24
=199.43.46/23
=199.43.48/21
=199.43.56/22
=199.43.60/23
=199.43.62/24
=199.43.64/18
=199.43.128/18
=199.43.192/19
=199.43.224/20
=199.43.240/22
=199.43.244/23
=199.43.248/21
=199.44/14
=199.48/17
=199.48.128/18
=199.48.192/19
=199.48.224/22
=199.48.228/23
=199.48.232/21
=199.48.240/20
=199.49/16
=199.50/15
=199.52/16
=199.54/15
=199.56/13
=199.64/16
=199.65/17
=199.65.128/18
=199.65.200/21
=199.65.208/20
=199.65.224/19
=199.66/15
=199.68/14
=199.72/13
=199.80/13
=199.88/17
=199.88.128/18
=199.88.192/20
=199.88.216/21
=199.88.224/19
=199.89/16
=199.90/16
=199.91/20
=199.91.32/19
=199.91.64/18
=199.91.128/17
=199.92/14
=199.96/14
=199.100/15
=199.102/16
=199.103/21
=199.103.13/24
=199.103.14/23
=199.103.16/20
=199.103.32/19
=199.103.64/19
=199.103.96/22
=199.103.100/23
=199.103.103/24
=199.103.104/21
=199.103.112/20
=199.103.128/17
=199.104/13
=199.112/12
=199.128/11
=199.160/14
=199.164/15
=199.166/19
=199.166.32/23
=199.166.38/23
=199.166.40/21
=199.166.48/20
=199.166.64/18
=199.166.128/17
=199.167/16
=199.168/13
=199.176/12
=199.192/12
=199.208/14
=199.212/19
=199.212.32/20
=199.212.48/21
=199.212.56/24
=199.212.58/23
=199.212.60/22
=199.212.64/18
=199.212.128/17
=199.213/16
=199.214/15
=199.216/13
=199.224/12
=199.240/14
=199.244/15
=199.246/16
=199.247.32/20
=199.247.48/21
=199.247.64/18
=199.247.128/17
=199.248/17
=199.248.128/20
=199.248.145/24
=199.248.146/23
=199.248.148/22
=199.248.152/21
=199.248.160/19
=199.248.192/18
=199.249/16
=199.250/17
=199.250.160/19
=199.250.192/18
=199.251/16
=199.252/14
=200.0.94/24
=200.0.137/24
=200.0.138/24
=200.0.216/21
=200.1.160/24
=200.5/21
=200.5.8/24
=200.5.11/24
=200.9.82/23
=200.9.115/24
=200.10.152/24
=200.10.155/24
=200.10.160/24
=200.10.165/24
=200.10.166/24
=200.12.168/24
=200.12.224/20
=200.15/16
=200.16.88/24
=200.30/18
=200.50/19
=200.50.64/19
=200.50.128/20
=200.58/18
=200.62/18
=202.5.16/20
=202.136.76/22
=202.170.192/22
=202.173.116/22
=203.24.247/24
=203.33.152/23
=203.62.180/22
=203.132.16/20
=204/13
=204.8/17
=204.8.128/18
=204.8.192/21
=204.8.200/22
=204.8.208/20
=204.8.224/19
=204.9/16
=204.10/16
=204.11.4/22
=204.11.8/21
=204.11.16/20
=204.11.32/19
=204.11.64/18
=204.11.128/17
=204.12/17
=204.12.144/20
=204.12.160/19
=204.12.192/18
=204.13/16
=204.14/15
=204.16/15
=204.19/16
=204.20/14
=204.24/13
=204.32/12
=204.48/19
=204.48.34/23
=204.48.36/22
=204.48.40/21
=204.48.48/20
=204.48.64/18
=204.48.128/17
=204.49/16
=204.50/15
=204.52/17
=204.52.128/19
=204.52.160/20
=204.52.176/21
=204.52.184/22
=204.52.188/23
=204.52.190/24
=204.52.192/18
=204.53/16
=204.54/15
=204.56/15
=204.58/17
=204.58.128/21
=204.58.140/22
=204.58.144/20
=204.58.160/19
=204.58.192/18
=204.59/16
=204.60/14
=204.64/13
=204.72/15
=204.74/16
=204.75/17
=204.75.128/21
=204.75.136/22
=204.75.140/23
=204.75.143/24
=204.75.144/20
=204.75.160/19
=204.75.192/18
=204.76/14
=204.80/17
=204.80.128/21
=204.80.136/22
=204.80.140/23
=204.80.142/24
=204.80.144/20
=204.80.160/19
=204.80.192/18
=204.81/16
=204.82/15
=204.84/15
=204.86/16
=204.87/17
=204.87.128/19
=204.87.160/21
=204.87.168/24
=204.87.170/23
=204.87.172/22
=204.87.176/23
=204.87.178/24
=204.87.180/22
=204.87.184/21
=204.87.192/21
=204.87.200/22
=204.87.204/24
=204.87.206/23
=204.87.208/20
=204.87.224/19
=204.88/16
=204.89/17
=204.89.128/18
=204.89.192/21
=204.89.200/22
=204.89.204/23
=204.89.207/24
=204.89.208/20
=204.89.224/19
=204.90/15
=204.92/14
=204.96/12
=204.112/13
=204.120/14
=204.124/18
=204.124.64/19
=204.124.96/21
=204.124.108/22
=204.124.112/20
=204.124.128/17
=204.125/16
=204.126/21
=204.126.8/22
=204.126.14/23
=204.126.16/20
=204.126.32/19
=204.126.64/18
=204.126.130/23
=204.126.132/22
=204.126.136/22
=204.126.142/23
=204.126.144/20
=204.126.160/19
=204.126.192/18
=204.127/16
=204.128/12
=204.144/16
=204.145.1/24
=204.145.8/21
=204.145.16/20
=204.145.32/19
=204.145.64/19
=204.145.96/24
=204.145.98/23
=204.145.100/22
=204.145.104/21
=204.145.112/20
=204.145.128/18
=204.145.192/21
=204.145.200/24
=204.145.202/23
=204.145.204/22
=204.145.208/20
=204.145.224/19
=204.146/15
=204.148/14
=204.152/21
=204.152.8/22
=204.152.12/23
=204.152.16/20
=204.152.32/19
=204.152.64/18
=204.152.128/18
=204.152.192/19
=204.152.232/21
=204.152.240/20
=204.153/20
=204.153.16/21
=204.153.26/23
=204.153.28/22
=204.153.32/19
=204.153.64/18
=204.153.128/17
=204.154/15
=204.156/14
=204.160/11
=204.192/11
=204.224/16
=204.225/19
=204.225.32/21
=204.225.40/23
=204.225.44/22
=204.225.48/20
=204.225.64/18
=204.225.128/18
=204.225.192/20
=204.225.208/21
=204.225.216/23
=204.225.219/24
=204.225.220/22
=204.225.224/19
=204.226/15
=204.228/14
=204.232/15
=204.234/16
=204.235/19
=204.235.44/22
=204.235.48/20
=204.235.64/18
=204.235.128/17
=204.236/14
=204.240/12
=205/9
=205.128/12
=205.144/15
=205.146/16
=205.147/18
=205.147.64/19
=205.147.112/20
=205.147.128/17
=205.148/14
=205.152/14
=205.156/15
=205.158/16
=205.159/18
=205.159.64/21
=205.159.72/22
=205.159.76/23
=205.159.78/24
=205.159.80/20
=205.159.96/19
=205.159.128/17
=205.160/14
=205.164/15
=205.166/17
=205.166.128/19
=205.166.160/20
=205.166.176/24
=205.166.178/23
=205.166.180/22
=205.166.184/21
=205.166.192/19
=205.166.224/20
=205.166.240/21
=205.166.248/23
=205.166.250/24
=205.166.252/22
=205.167/16
=205.168/13
=205.176/12
=205.192/13
=205.200/16
=205.201.16/20
=205.201.32/20
=205.201.48/22
=205.201.52/23
=205.201.54/24
=205.201.56/21
=205.201.64/18
=205.201.128/17
=205.202/16
=205.203/18
=205.203.64/21
=205.203.72/23
=205.203.76/22
=205.203.80/20
=205.203.96/19
=205.203.128/17
=205.204/14
=205.208/15
=205.210/16
=205.211/18
=205.211.64/20
=205.211.80/23
=205.211.82/24
=205.211.84/22
=205.211.88/21
=205.211.96/19
=205.211.128/17
=205.212/14
=205.216/14
=205.220/17
=205.220.128/18
=205.220.192/20
=205.220.208/21
=205.220.218/23
=205.220.220/22
=205.220.224/19
=205.221/16
=205.222/15
=205.224/12
=205.240/13
=205.248/14
=205.252/16
=205.254/15
=206/9
=206.128/15
=206.130/16
=206.131/17
=206.131.128/18
=206.131.208/20
=206.131.224/19
=206.132/14
=206.136/13
=206.144/12
=206.160/14
=206.164/15
=206.166/16
=206.167/19
=206.167.32/24
=206.167.34/23
=206.167.36/22
=206.167.40/21
=206.167.48/20
=206.167.64/18
=206.167.128/17
=206.168/13
=206.176/13
=206.184/14
=206.188/15
=206.190/17
=206.190.128/18
=206.190.192/20
=206.190.208/21
=206.190.216/22
=206.190.224/19
=206.191/16
=206.192/15
=206.194/16
=206.195/19
=206.195.64/18
=206.195.128/17
=206.196/14
=206.200/16
=206.201.16/20
=206.201.32/19
=206.201.64/18
=206.201.128/17
=206.202/15
=206.204/14
=206.208/13
=206.216/14
=206.220/16
=206.221/18
=206.221.64/20
=206.221.96/19
=206.221.128/17
=206.222/16
=206.223/18
=206.223.64/19
=206.223.96/20
=206.223.112/21
=206.223.120/22
=206.223.125/24
=206.223.126/23
=206.223.128/23
=206.223.131/24
=206.223.132/22
=206.223.137/24
=206.223.138/23
=206.223.140/22
=206.223.144/20
=206.223.160/19
=206.223.192/18
=206.224/19
=206.224.64/18
=206.224.128/17
=206.225/16
=206.226/15
=206.228/14
=206.232/13
=206.240/13
=206.248/14
=206.252/17
=206.252.128/18
=206.252.192/19
=206.253/16
=206.254/15
=207/10
=207.64/12
=207.80/13
=207.88/16
=207.89/18
=207.89.128/17
=207.90/15
=207.92/14
=207.96/11
=207.128/13
=207.136.64/18
=207.136.128/17
=207.137/16
=207.138/15
=207.140/14
=207.144/14
=207.148/19
=207.148.48/20
=207.148.128/17
=207.149/16
=207.150/17
=207.150.128/19
=207.150.192/18
=207.151/16
=207.152/14
=207.156/15
=207.158/18
=207.158.128/17
=207.159/16
=207.160/13
=207.168/14
=207.172/15
=207.174/17
=207.174.128/19
=207.174.160/20
=207.174.192/20
=207.174.208/21
=207.174.220/22
=207.174.224/19
=207.175/16
=207.176/15
=207.178/18
=207.178.96/19
=207.178.128/17
=207.179/16
=207.180/17
=207.180.128/18
=207.181/16
=207.182/15
=207.184/14
=207.188/16
=207.189/17
=207.189.128/19
=207.189.160/21
=207.189.172/22
=207.189.176/21
=207.189.188/22
=207.189.208/20
=207.189.224/19
=207.190/16
=207.191/17
=207.191.128/19
=207.191.176/20
=207.191.192/18
=207.192/11
=207.224/14
=207.228/16
=207.229/18
=207.229.64/19
=207.229.96/20
=207.229.117/24
=207.229.121/24
=207.229.128/17
=207.230/15
=207.232/13
=207.240/13
=207.250/15
=207.252/14
=208/10
=208.64/15
=208.66/17
=208.66.128/18
=208.66.192/19
=208.66.224/21
=208.66.240/20
=208.67/16
=208.68/15
=208.70/16
=208.71/17
=208.71.128/18
=208.71.192/20
=208.71.208/22
=208.71.216/21
=208.71.232/21
=208.71.240/20
=208.72/13
=208.80/16
=208.81/18
=208.81.64/19
=208.81.96/20
=208.81.112/22
=208.81.120/21
=208.81.128/17
=208.82/18
=208.82.64/21
=208.82.76/22
=208.82.80/20
=208.82.96/19
=208.82.128/17
=208.83/16
=208.84/16
=208.85/17
=208.85.128/20
=208.85.144/21
=208.85.152/22
=208.85.160/19
=208.85.192/18
=208.86/16
=208.87/17
=208.87.128/19
=208.87.160/22
=208.87.164/23
=208.87.168/21
=208.87.176/20
=208.87.192/18
=208.88/13
=208.96/13
=208.104/14
=208.108/15
=208.110/16
=208.111/19
=208.111.32/20
=208.111.56/21
=208.111.64/18
=208.111.128/17
=208.112/12
=208.128/9
=209/13
=209.8/14
=209.12/16
=209.14/15
=209.16/12
=209.32/13
=209.40/15
=209.42.32/19
=209.42.64/18
=209.42.128/18
=209.43/16
=209.44/16
=209.45.128/17
=209.46/15
=209.48/13
=209.56/15
=209.58/17
=209.58.128/19
=209.58.192/18
=209.59/16
=209.60/14
=209.64/12
=209.80/13
=209.88/14
=209.92/15
=209.94/17
=209.94.128/18
=209.94.224/19
=209.95/16
=209.96/15
=209.98/16
=209.99/17
=209.99.128/18
=209.99.192/19
=209.99.240/20
=209.100/14
=209.104/13
=209.112/12
=209.128/13
=209.136/14
=209.140/16
=209.141.16/20
=209.141.32/19
=209.141.64/18
=209.141.128/17
=209.142/15
=209.144/14
=209.148/15
=209.150/17
=209.150.128/20
=209.150.160/19
=209.150.192/18
=209.151/16
=209.152/13
=209.160/15
=209.162/17
=209.162.160/19
=209.162.192/18
=209.163/16
=209.164/14
=209.168/13
=209.176/12
=209.192/13
=209.200/15
=209.202/16
=209.203.64/18
=209.203.128/17
=209.204/15
=209.206.32/22
=209.206.36/23
=209.206.40/21
=209.206.48/20
=209.206.64/18
=209.206.128/17
=209.207/16
=209.208/14
=209.212/18
=209.212.64/19
=209.212.128/18
=209.212.224/19
=209.213/19
=209.213.32/20
=209.213.64/18
=209.213.128/17
=209.214/15
=209.216/13
=209.224/12
=209.240/13
=209.248/15
=209.250/17
=209.250.128/18
=209.250.192/19
=209.251/17
=209.251.128/18
=209.251.192/23
=209.251.194/24
=209.251.198/23
=209.251.200/21
=209.251.208/20
=209.251.224/20
=209.251.240/21
=209.251.248/22
=209.251.254/23
=209.252/14
=212.8.241/24
=212.69.144/20
=213.159.14/23
=213.159.132/22
=214/7
=216/13
=216.8.32/19
=216.8.64/18
=216.8.128/17
=216.9/16
=216.10/17
=216.10.128/18
=216.10.192/19
=216.10.224/20
=216.11/16
=216.12/14
=216.16/12
=216.32/13
=216.40/14
=216.44/15
=216.46/18
=216.46.64/19
=216.46.96/20
=216.46.112/21
=216.46.120/23
=216.46.126/23
=216.46.128/17
=216.47/16
=216.48/12
=216.64/11
=216.96/15
=216.98/17
=216.98.128/18
=216.98.192/20
=216.98.224/19
=216.99/17
=216.99.128/18
=216.99.192/22
=216.99.196/23
=216.99.199/24
=216.99.200/24
=216.99.202/23
=216.99.205/24
=216.99.206/23
=216.99.208/21
=216.99.216/22
=216.99.220/23
=216.99.223/24
=216.99.224/19
=216.100/14
=216.104/14
=216.108/17
=216.108.128/18
=216.108.192/19
=216.108.224/20
=216.109/16
=216.110/15
=216.112/14
=216.116/15
=216.118.64/18
=216.118.128/18
=216.118.192/19
=216.119/16
=216.120/13
=216.128/12
=216.144/14
=216.148/15
=216.150/16
=216.151/17
=216.151.128/18
=216.151.208/20
=216.151.224/19
=216.152/17
=216.152.128/19
=216.152.176/20
=216.152.192/18
=216.153/16
=216.154/16
=216.155/18
=216.155.96/19
=216.155.128/17
=216.156/15
=216.158/18
=216.158.64/19
=216.158.112/20
=216.158.128/17
=216.159/16
=216.160/13
=216.168/15
=216.170/16
=216.171/18
=216.171.64/19
=216.171.96/20
=216.171.128/17
=216.172/18
=216.172.80/20
=216.172.96/19
=216.172.128/17
=216.173/16
=216.174/15
=216.176/14
=216.180/15
=216.182/16
=216.183/17
=216.183.128/18
=216.183.192/20
=216.183.224/19
=216.184/13
=216.192/12
=216.208/14
=216.212/16
=216.213/17
=216.213.192/18
=216.214/15
=216.216/13
=216.224/14
=216.228/15
=216.230/17
=216.230.160/19
=216.230.192/18
=216.231/16
=216.232/14
=216.236/17
=216.236.128/19
=216.236.160/20
=216.236.192/18
=216.237/16
=216.238/15
=216.240/16
=216.241.32/19
=216.241.64/18
=216.241.160/19
=216.241.192/18
=216.242/15
=216.244/17
=216.245/16
=216.246/15
=216.248/15
=216.250/18
=216.250.64/19
=216.250.112/20
=216.250.128/17
=216.251/16
=216.252/14
=217.147.184/21
/trunk/main/pattern/ipv4_lacnic
0,0 → 1,500
#: version 20190426
 
# LACNIC IPv4
# Automatically generated by /daten/homes/vwhois/v2019/maintenance/pattern-generator/gwhois-pattern-update
# Generation timestamp: 2019-04-29 13:41:05 GMT+0200
# Source: (</head><body>) ftp://ftp.iana.org/assignments/ipv4-address-space/ipv4-address-space.txt
# Source: (20190426) ftp://ftp.lacnic.net/pub/stats/lacnic/delegated-lacnic-extended-latest
 
:whois|whois.lacnic.net
=24.152/17
=24.232/16
=45.4/14
=45.65.128/17
=45.68/14
=45.160/11
=45.224/12
=64.28.128/20
=64.32.64/18
=66.60/18
=66.98/18
=66.98.64/19
=66.128.32/20
=66.231.64/20
=72.44.16/20
=128.201/16
=129.90/16
=131/16
=131.72/16
=131.100/16
=131.108/16
=131.161/16
=131.178/16
=131.196/16
=131.221/16
=131.255/16
=132.157/16
=132.184/16
=132.191/16
=132.247/16
=132.248/16
=132.251/16
=132.254/15
=138/16
=138.36/16
=138.59/16
=138.94/16
=138.97/16
=138.99/16
=138.117/16
=138.118/16
=138.121/16
=138.122/16
=138.185/16
=138.186/16
=138.204/16
=138.219/16
=138.255/16
=139.82/16
=140.148/16
=140.191/16
=143/16
=143.54/16
=143.106/15
=143.108/16
=143.137/16
=143.202/16
=143.208/16
=143.255/16
=144.22/15
=146.83/16
=146.134/16
=146.155/16
=146.164/16
=147.65/16
=148/16
=148.101/16
=148.102/15
=148.201/16
=148.202/15
=148.204/14
=148.208/12
=148.224/12
=148.240/13
=148.248/15
=148.250/16
=148.255/16
=150.161/16
=150.162/15
=150.164/15
=150.185/16
=150.186/15
=150.188/15
=152/16
=152.74/16
=152.84/16
=152.92/16
=152.139/16
=152.156/16
=152.166/15
=152.168/13
=152.200/13
=152.230/15
=152.232/13
=152.240/12
=155.211/16
=156.97/16
=157.86/16
=157.92/16
=157.100/16
=157.253/16
=158.97/16
=158.160/16
=158.170/16
=158.251/16
=159.16/16
=159.90/16
=160.19.44/22
=160.19.168/21
=160.19.200/22
=160.19.240/20
=160.20.20/22
=160.20.32/22
=160.20.64/21
=160.20.80/20
=160.20.160/19
=160.20.192/20
=160.20.218/23
=160.20.225/24
=160.20.242/23
=160.20.246/23
=160.238.24/22
=160.238.28/23
=160.238.63/24
=160.238.104/21
=160.238.128/17
=161/16
=161.10/16
=161.18/16
=161.22/16
=161.24/15
=161.56/16
=161.79/16
=161.131/16
=161.132/16
=161.138/16
=161.140/16
=161.148/16
=161.190/16
=161.196/16
=161.212/16
=161.234/16
=161.238/16
=161.255/16
=162.12.196/22
=162.122/16
=163.10/16
=163.178/16
=163.247/16
=163.250/16
=164.41/16
=164.73/16
=164.77/16
=164.85/16
=164.96/16
=164.98/16
=164.163/16
=165.98/16
=165.182/15
=166.75/16
=166.110/16
=166.114/16
=167/16
=167.28/16
=167.56/13
=167.108/16
=167.116/16
=167.134/16
=167.157/16
=167.249/16
=167.250/16
=167.252/16
=168/16
=168.77/16
=168.83/16
=168.90/16
=168.96/16
=168.101/16
=168.121/16
=168.165/16
=168.176/16
=168.181/16
=168.194/15
=168.196/15
=168.205/16
=168.226/15
=168.228/16
=168.231/16
=168.232/16
=168.234/16
=168.243/16
=168.255/16
=169.158/16
=170/16
=170.18/16
=170.25/16
=170.51/16
=170.66/16
=170.70/16
=170.78/15
=170.80/14
=170.84/16
=170.150/16
=170.155/16
=170.169/16
=170.210/16
=170.231/16
=170.233/16
=170.238/15
=170.244/14
=170.254/16
=177/8
=179/8
=181/8
=186/7
=189/8
=190/7
=192.12.112/22
=192.12.118/24
=192.65.152/24
=192.67.23/24
=192.68.185/24
=192.75.4/24
=192.80.24/24
=192.80.209/24
=192.83.207/24
=192.84.12/24
=192.91.254/24
=192.92.154/24
=192.100.155/24
=192.100.156/22
=192.100.160/19
=192.100.192/19
=192.100.224/20
=192.100.240/21
=192.100.248/22
=192.100.252/23
=192.100.254/24
=192.102.84/24
=192.107.104/24
=192.111.229/24
=192.111.230/24
=192.132.35/24
=192.135.95/24
=192.135.185/24
=192.136.42/23
=192.136.44/22
=192.140.1/24
=192.140.8/21
=192.140.16/20
=192.140.32/19
=192.140.64/18
=192.141/16
=192.144.64/21
=192.144.72/23
=192.144.96/19
=192.145.192/19
=192.146.157/24
=192.146.229/24
=192.146.237/24
=192.147.210/24
=192.147.218/24
=192.148.175/24
=192.150.126/24
=192.153.12/24
=192.153.88/24
=192.153.119/24
=192.153.120/24
=192.153.155/24
=192.153.167/24
=192.159.116/23
=192.160.45/24
=192.160.50/24
=192.160.111/24
=192.160.128/24
=192.160.188/24
=192.188.11/24
=192.188.44/22
=192.188.48/21
=192.188.56/22
=192.188.60/24
=192.188.194/23
=192.188.196/23
=192.190.30/23
=192.195.56/23
=192.195.237/24
=192.198.8/21
=192.203.158/24
=192.203.177/24
=192.207.40/23
=192.207.42/24
=192.207.65/24
=192.207.66/23
=192.207.68/24
=192.207.146/24
=192.207.183/24
=192.207.194/23
=192.207.200/22
=192.207.204/23
=192.207.206/24
=192.207.244/24
=192.223.64/18
=192.231.110/24
=192.231.114/23
=192.231.116/22
=192.231.120/23
=192.231.140/24
=192.231.175/24
=192.231.176/24
=192.245.30/24
=192.245.60/24
=192.245.121/24
=192.251.39/24
=196.1.112/24
=196.1.135/24
=196.3.16/20
=196.3.74/23
=196.3.76/22
=196.3.80/21
=196.3.88/23
=196.3.106/24
=196.3.132/22
=196.3.136/21
=196.3.144/22
=196.3.152/24
=196.29.64/19
=196.32.32/19
=196.32.64/19
=196.40/18
=196.40.64/19
=198.2.16/20
=198.12.32/19
=198.17.120/23
=198.17.231/24
=198.17.232/24
=198.22.250/23
=198.41.32/21
=198.41.40/22
=198.41.44/23
=198.41.46/24
=198.49.128/22
=198.49.132/23
=198.49.164/24
=198.50.16/21
=198.51.71/24
=198.58.8/22
=198.58.12/24
=198.97.38/24
=198.151.132/24
=198.184.161/24
=199.26.234/24
=199.103.102/24
=199.248.144/24
=200/18
=200.0.64/20
=200.0.80/21
=200.0.88/22
=200.0.92/23
=200.0.95/24
=200.0.96/19
=200.0.128/21
=200.0.136/24
=200.0.139/24
=200.0.140/22
=200.0.144/20
=200.0.160/19
=200.0.192/20
=200.0.208/21
=200.0.224/19
=200.1/17
=200.1.128/19
=200.1.161/24
=200.1.162/23
=200.1.164/22
=200.1.168/21
=200.1.176/20
=200.1.192/18
=200.2/15
=200.4/16
=200.5.9/24
=200.5.10/24
=200.5.12/22
=200.5.16/20
=200.5.32/19
=200.5.64/18
=200.5.128/17
=200.6/15
=200.8/16
=200.9/18
=200.9.64/20
=200.9.80/23
=200.9.84/22
=200.9.88/21
=200.9.96/20
=200.9.112/23
=200.9.114/24
=200.9.116/22
=200.9.120/21
=200.9.128/17
=200.10/17
=200.10.128/20
=200.10.144/21
=200.10.153/24
=200.10.154/24
=200.10.156/22
=200.10.161/24
=200.10.162/23
=200.10.164/24
=200.10.167/24
=200.10.168/21
=200.10.176/20
=200.10.192/18
=200.11/16
=200.12/17
=200.12.128/19
=200.12.160/21
=200.12.169/24
=200.12.170/23
=200.12.172/22
=200.12.176/20
=200.12.192/19
=200.12.240/20
=200.13/16
=200.14/16
=200.16/21
=200.16.16/20
=200.16.32/19
=200.16.64/20
=200.16.80/21
=200.16.89/24
=200.16.90/23
=200.16.92/22
=200.16.96/19
=200.16.128/17
=200.17/16
=200.18/15
=200.20/14
=200.24/14
=200.28/15
=200.30.64/18
=200.30.128/17
=200.31/16
=200.32/12
=200.48/15
=200.50.32/19
=200.50.96/19
=200.50.144/20
=200.50.160/19
=200.50.192/18
=200.51/16
=200.52/14
=200.56/15
=200.58.64/18
=200.58.128/17
=200.59/16
=200.60/15
=200.62.64/18
=200.62.128/17
=200.63/16
=200.64/10
=200.128/9
=201/8
=204.58.136/22
=204.80.143/24
=204.87.169/24
=204.87.205/24
=204.89.206/24
=204.124.104/22
=204.126.12/23
=204.126.128/23
=204.126.140/23
=204.145.201/24
=204.153.24/23
=204.225.42/23
=205.166.251/24
=206.221.80/20
=206.223.124/24
=206.223.130/24
=206.224.32/19
=207.191.160/20
=207.248/15
=209.13/16
=209.45/17
=209.94.192/19
=209.99.224/20
=216.98.208/20
=216.152.160/20
=216.155.64/19
=216.230.128/19
=216.241/19
=216.244.128/17
/trunk/main/pattern/ipv4_ripencc
0,0 → 1,4274
#: version 20190428
 
# RIPENCC IPv4
# Automatically generated by /daten/homes/vwhois/v2019/maintenance/pattern-generator/gwhois-pattern-update
# Generation timestamp: 2019-04-29 13:41:06 GMT+0200
# Source: (</head><body>) ftp://ftp.iana.org/assignments/ipv4-address-space/ipv4-address-space.txt
# Source: (20190428) ftp://ftp.ripe.net/pub/stats/ripencc/delegated-ripencc-extended-latest
 
:whois|whois.ripe.net|prefix=-B |
=2/8
=5/12
=5.16/13
=5.24/14
=5.28/19
=5.28.40/21
=5.28.48/20
=5.28.64/18
=5.28.128/17
=5.29/16
=5.30/15
=5.32/11
=5.64/10
=5.128/9
=13.116/14
=13.120/14
=13.140/14
=13.168/13
=13.176/13
=13.240/14
=23.19.48/22
=23.19.56/21
=23.83.64/21
=23.83.112/20
=23.105.224/19
=23.106.104/21
=23.106.112/21
=23.108.208/20
=23.109/16
=23.111/21
=23.111.16/20
=23.111.32/19
=23.111.80/20
=23.111.96/19
=23.111.192/19
=23.111.224/20
=23.111.240/21
=23.239.128/19
=23.249.232/21
=23.252.66/23
=23.252.68/24
=23.252.71/24
=23.252.72/24
=23.252.75/24
=23.252.76/24
=23.252.79/24
=24.132/14
=24.235.22/23
=25/8
=27.110/20
=27.110.16/22
=31/9
=31.128/10
=31.192/13
=31.200/14
=31.204/15
=31.206/16
=31.207.8/21
=31.207.16/20
=31.207.32/20
=31.207.48/21
=31.207.60/22
=31.207.64/18
=31.207.128/17
=31.208/12
=31.224/11
=36.255.92/22
=37/10
=37.64/11
=37.96/13
=37.104/14
=37.108/15
=37.110/16
=37.112/12
=37.128/9
=43.225.112/22
=43.251.160/22
=45.8/13
=45.43.64/19
=45.56.224/19
=45.65.64/18
=45.66/15
=45.75.128/17
=45.80/12
=45.114.120/22
=45.128/11
=45.250.24/22
=46/9
=46.128/12
=46.144/14
=46.148/16
=46.149/17
=46.149.128/18
=46.149.208/20
=46.149.224/19
=46.150/15
=46.152/13
=46.160/11
=46.192/10
=49.12/15
=50.60/15
=50.119/16
=51/10
=51.64/13
=51.72/14
=51.76/15
=51.78/16
=51.80/16
=51.82/15
=51.84/14
=51.88/13
=51.96/11
=51.128/9
=52.144.64/19
=53/8
=54.36/15
=54.38/16
=57/8
=61.14.224/22
=62/13
=62.8/18
=62.8.96/19
=62.8.128/17
=62.9/16
=62.10/15
=62.12/18
=62.12.64/19
=62.12.128/17
=62.13/16
=62.14/15
=62.16/13
=62.24/18
=62.24.64/19
=62.24.128/17
=62.25/16
=62.26/15
=62.28/14
=62.32/12
=62.48/13
=62.56/14
=62.60/16
=62.61/17
=62.61.128/18
=62.62/15
=62.64/14
=62.68/19
=62.68.64/18
=62.68.128/18
=62.68.192/19
=62.69/16
=62.70/15
=62.72/13
=62.80/12
=62.96/12
=62.112/15
=62.115/16
=62.116/16
=62.117/19
=62.117.64/18
=62.117.128/17
=62.118/15
=62.120/13
=62.128/14
=62.132/15
=62.134/16
=62.135.128/17
=62.136/15
=62.138/16
=62.140/18
=62.140.128/17
=62.141/16
=62.142/15
=62.144/12
=62.160/13
=62.168/14
=62.172/16
=62.173/19
=62.173.64/18
=62.173.128/17
=62.174/15
=62.176/12
=62.192/16
=62.193/18
=62.193.128/19
=62.193.192/18
=62.194/15
=62.196/14
=62.200/13
=62.208/12
=62.224/13
=62.232/15
=62.235/16
=62.236/14
=62.240/19
=62.240.64/19
=62.240.128/17
=62.241/17
=62.241.160/19
=62.241.192/18
=62.242/15
=62.244/14
=62.248/15
=62.250/16
=62.251/17
=62.252/14
=63.141.34/23
=63.141.36/23
=63.142/20
=63.246.128/22
=63.246.132/23
=63.246.136/23
=63.246.139/24
=63.246.142/24
=63.246.144/21
=63.246.152/24
=63.246.156/22
=64.16.192/19
=64.28/19
=64.43/17
=64.65.64/18
=64.137.192/18
=64.239.236/22
=64.253.32/19
=65.18.128/18
=65.18.208/20
=65.39.64/19
=65.99.128/18
=66.79.96/19
=66.84.64/20
=66.118.128/18
=66.205.64/19
=66.212.96/19
=66.248.204/22
=67.22.32/20
=67.22.48/21
=67.22.56/22
=67.158.62/24
=67.209.128/19
=68.70.192/20
=69.6/18
=69.94.64/20
=69.94.112/20
=69.172.96/19
=69.194.64/18
=77/9
=77.128/10
=77.192/12
=77.208/13
=77.216/14
=77.220.32/19
=77.220.64/18
=77.220.128/17
=77.221/16
=77.222/15
=77.224/11
=78/7
=80/10
=80.64/15
=80.66/16
=80.67/17
=80.67.144/20
=80.67.160/19
=80.67.192/18
=80.68/15
=80.70/16
=80.71/19
=80.71.48/20
=80.71.64/18
=80.71.128/17
=80.72/18
=80.72.64/19
=80.72.112/20
=80.72.128/17
=80.73/16
=80.74/16
=80.75/17
=80.75.128/19
=80.75.192/18
=80.76/14
=80.80/14
=80.84/15
=80.86/20
=80.86.32/19
=80.86.64/18
=80.86.128/17
=80.87/18
=80.87.96/19
=80.87.128/17
=80.88.16/20
=80.88.32/19
=80.88.64/18
=80.88.128/17
=80.89/16
=80.90/15
=80.92/15
=80.94/16
=80.95.16/20
=80.95.32/19
=80.95.64/18
=80.95.128/17
=80.96/11
=80.128/10
=80.192/11
=80.224/12
=80.240/17
=80.240.128/18
=80.240.208/20
=80.240.224/19
=80.241/16
=80.242/15
=80.244/15
=80.246.16/20
=80.246.32/19
=80.246.64/18
=80.246.128/17
=80.247/16
=80.248.16/20
=80.248.32/19
=80.248.80/20
=80.248.96/19
=80.248.128/17
=80.249/18
=80.249.80/20
=80.249.96/19
=80.249.128/17
=80.250/19
=80.250.48/20
=80.250.64/18
=80.250.128/17
=80.251/16
=80.252/14
=81/14
=81.4.64/18
=81.4.128/17
=81.5/16
=81.6/15
=81.8/15
=81.10.128/17
=81.11/16
=81.12/14
=81.16/14
=81.20/16
=81.21/18
=81.21.64/19
=81.21.112/20
=81.21.128/17
=81.22/18
=81.22.96/19
=81.22.128/17
=81.23/17
=81.23.128/18
=81.23.192/20
=81.23.224/19
=81.24/15
=81.26/18
=81.26.80/20
=81.26.96/19
=81.26.128/17
=81.27/16
=81.28/16
=81.29/18
=81.29.64/19
=81.29.112/20
=81.29.128/17
=81.30/15
=81.32/11
=81.64/14
=81.72/13
=81.80/13
=81.88/15
=81.90/16
=81.91/17
=81.91.128/18
=81.91.192/19
=81.91.240/20
=81.92/14
=81.96/11
=81.128/10
=81.193/16
=81.194/15
=81.196/14
=81.200/13
=81.208/12
=81.224/11
=82/10
=82.64/11
=82.96/14
=82.100/16
=82.101/17
=82.101.192/18
=82.102/15
=82.104/13
=82.112/12
=82.128.128/17
=82.129/17
=82.130/15
=82.132/14
=82.136/13
=82.144/14
=82.148/15
=82.150/16
=82.151/18
=82.151.96/19
=82.151.128/17
=82.152/14
=82.158/15
=82.160/11
=82.192/13
=82.200/16
=82.201/17
=82.202/15
=82.204/14
=82.208/12
=82.224/11
=83/9
=83.128/13
=83.136/14
=83.140/15
=83.142/16
=83.143/20
=83.143.16/21
=83.143.32/19
=83.143.64/18
=83.143.128/17
=83.144/12
=83.160/11
=83.192/10
=84/11
=84.32/14
=84.37/16
=84.38/15
=84.40/13
=84.48/12
=84.64/10
=84.128/10
=84.192/13
=84.200/14
=84.204/16
=84.205/18
=84.205.64/19
=84.205.128/17
=84.206/15
=84.208/12
=84.224/13
=84.232/16
=84.233.128/17
=84.234/15
=84.236/14
=84.240/12
=85/8
=86/8
=87/9
=87.128/10
=87.192/11
=87.224/12
=87.240/14
=87.244/15
=87.246/16
=87.247/17
=87.247.128/19
=87.247.168/21
=87.247.176/20
=87.247.192/18
=87.248/14
=87.252/15
=87.254/16
=87.255/18
=87.255.64/19
=87.255.128/17
=88/8
=89/9
=89.128/10
=89.192/12
=89.208/17
=89.208.128/18
=89.208.192/19
=89.208.224/20
=89.209/16
=89.210/15
=89.212/14
=89.216/13
=89.224/13
=89.232/14
=89.236/15
=89.238/16
=89.239/19
=89.239.32/20
=89.239.64/18
=89.239.128/17
=89.240/12
=90/8
=91/9
=91.128/10
=91.192/12
=91.208/14
=91.212/17
=91.212.128/22
=91.212.133/24
=91.212.134/23
=91.212.136/21
=91.212.144/20
=91.212.160/19
=91.212.192/18
=91.213/16
=91.214/15
=91.216/13
=91.224/16
=91.225/19
=91.225.34/23
=91.225.36/22
=91.225.40/21
=91.225.48/20
=91.225.64/18
=91.225.128/17
=91.226/15
=91.228/14
=91.232/15
=91.234/16
=91.235/22
=91.235.6/23
=91.235.8/21
=91.235.16/20
=91.235.32/19
=91.235.64/18
=91.235.128/17
=91.236/14
=91.240/12
=92/9
=92.128/10
=92.192/13
=92.200/15
=92.204/14
=92.208/12
=92.224/11
=93/9
=93.128/11
=93.160/12
=93.176/15
=93.178/16
=93.179/18
=93.179.64/19
=93.179.104/21
=93.179.120/22
=93.179.128/17
=93.180/14
=93.184/13
=93.192/10
=94/12
=94.16/13
=94.24/15
=94.26/20
=94.26.16/21
=94.26.24/23
=94.26.26/24
=94.26.28/23
=94.26.30/24
=94.26.32/21
=94.26.40/22
=94.26.45/24
=94.26.48/20
=94.26.64/23
=94.26.66/24
=94.26.68/22
=94.26.72/24
=94.26.74/23
=94.26.76/22
=94.26.80/22
=94.26.86/23
=94.26.88/21
=94.26.96/19
=94.26.128/17
=94.27/16
=94.28/14
=94.32/11
=94.64/11
=94.96/14
=94.100/15
=94.102/16
=94.103/22
=94.103.8/21
=94.103.16/20
=94.103.32/19
=94.103.64/18
=94.103.128/17
=94.104/13
=94.112/12
=94.128/11
=94.160/12
=94.176/13
=94.184/14
=94.188/15
=94.190/17
=94.190.128/18
=94.190.192/20
=94.190.240/20
=94.191.128/17
=94.192/10
=95/9
=95.128/11
=95.160/15
=95.162/16
=95.163/17
=95.163.128/18
=95.163.208/20
=95.163.224/19
=95.164/14
=95.168/16
=95.169.32/19
=95.169.64/18
=95.169.128/17
=95.170/15
=95.172/14
=95.176/14
=95.180/16
=95.181/17
=95.181.128/19
=95.181.160/20
=95.181.176/21
=95.181.184/22
=95.181.192/18
=95.182/15
=95.184/13
=95.192/10
=96.9.128/19
=96.125.144/20
=98.128/16
=101.56/13
=103.225.200/22
=103.231.136/22
=103.241.108/22
=103.251.164/22
=103.252.88/22
=104.37.32/21
=104.153.84/22
=104.232.36/23
=104.233.64/18
=104.243.216/22
=104.244.8/22
=107.150.162/23
=107.150.164/22
=107.150.168/21
=107.150.176/22
=107.161.160/20
=107.181.128/19
=107.191.68/24
=109/9
=109.128/10
=109.192/11
=109.224/13
=109.232/14
=109.236.16/20
=109.236.32/19
=109.236.64/18
=109.236.128/17
=109.237/16
=109.238/15
=109.240/14
=109.245/16
=109.246/15
=109.248/13
=113.203/17
=113.203.128/18
=116.202/15
=125.62.72/22
=128/16
=128.7/16
=128.16/16
=128.39/16
=128.40/15
=128.45/16
=128.65/16
=128.66/15
=128.68/14
=128.72/13
=128.86/15
=128.93/16
=128.98/16
=128.116.128/17
=128.124/16
=128.127/16
=128.130/15
=128.139/16
=128.140/15
=128.142/16
=128.168/16
=128.176/16
=128.178/15
=128.199/16
=128.204/16
=128.214/16
=128.232/16
=128.234/16
=128.240/16
=128.243/16
=128.246/16
=129.11/16
=129.12/15
=129.16/16
=129.20/16
=129.26/15
=129.31/16
=129.67/16
=129.69/16
=129.70/16
=129.73/16
=129.88/16
=129.102/15
=129.104/16
=129.125/16
=129.129/16
=129.132/16
=129.142/15
=129.169/16
=129.175/16
=129.177/16
=129.178/16
=129.181/16
=129.182/15
=129.184/15
=129.187/16
=129.194/15
=129.199/16
=129.206/16
=129.208/16
=129.214/15
=129.217/16
=129.233/16
=129.234/16
=129.240/15
=129.242/16
=129.247/16
=130/16
=130.24/15
=130.28/16
=130.32/16
=130.37/16
=130.43/16
=130.59/16
=130.60/16
=130.66/15
=130.73/16
=130.75/16
=130.78/15
=130.82/15
=130.84/16
=130.88/15
=130.92/15
=130.98/16
=130.100/16
=130.104/16
=130.112/16
=130.115/16
=130.120/16
=130.125/16
=130.133/16
=130.136/16
=130.138/15
=130.140/14
=130.144/14
=130.148/15
=130.159/16
=130.161/16
=130.164.128/17
=130.180/16
=130.183/16
=130.185/16
=130.186/16
=130.188/16
=130.190/16
=130.192/15
=130.198/16
=130.204/16
=130.206/16
=130.208/15
=130.223/16
=130.225/16
=130.226/15
=130.228/14
=130.232/13
=130.240/14
=130.244/16
=130.246/16
=130.248.48/21
=130.248.58/23
=130.248.60/22
=130.248.68/22
=130.248.72/21
=130.248.80/20
=130.248.96/21
=130.248.104/22
=130.251/16
=130.255/16
=131.1/16
=131.97/16
=131.99/16
=131.102/16
=131.111/16
=131.114/15
=131.116/15
=131.130/16
=131.152/16
=131.154/15
=131.159/16
=131.160/16
=131.164/15
=131.166/16
=131.169/16
=131.173/16
=131.174/15
=131.176/15
=131.180/16
=131.188/16
=131.205/16
=131.207/16
=131.211/16
=131.220/16
=131.224/16
=131.227/16
=131.228/16
=131.231/16
=131.234/16
=131.237/16
=131.246/16
=131.251/16
=131.254/16
=132.64/13
=132.72/14
=132.76/15
=132.78/16
=132.146/16
=132.149/16
=132.150/16
=132.153/16
=132.155/16
=132.165/16
=132.166/15
=132.168/15
=132.171/16
=132.176/16
=132.180/16
=132.185/16
=132.186/15
=132.195/16
=132.196/16
=132.199/16
=132.227/16
=132.229/16
=132.230/15
=132.244/16
=132.252/16
=134/14
=134.17/16
=134.19/16
=134.21/16
=134.25/16
=134.27/16
=134.28/16
=134.30/16
=134.34/15
=134.36/15
=134.47/16
=134.54/16
=134.58/15
=134.60/15
=134.76/16
=134.81/16
=134.83/16
=134.90/15
=134.92/14
=134.96/13
=134.104/14
=134.108/15
=134.110/16
=134.119/16
=134.130/16
=134.138/16
=134.142/15
=134.145/16
=134.146/15
=134.151/16
=134.155/16
=134.157/16
=134.158/16
=134.169/16
=134.171/16
=134.176/16
=134.183/16
=134.184/16
=134.188/16
=134.191/16
=134.203/16
=134.206/16
=134.212/15
=134.214/16
=134.219/16
=134.220/15
=134.222/16
=134.225/16
=134.226/15
=134.239/16
=134.245/16
=134.246/15
=134.249/16
=134.255/16
=135.84.52/22
=135.84.148/22
=135.90/16
=135.196/16
=136.143/17
=136.144.16/20
=136.144.32/19
=136.144.64/18
=136.144.128/17
=136.148/16
=136.155/16
=136.156/15
=136.158.128/17
=136.163/16
=136.164/16
=136.169/16
=136.170/16
=136.172/15
=136.199/16
=136.201/16
=136.206/16
=136.225/16
=136.230/15
=136.243/16
=136.255/16
=137.17/16
=137.33/16
=137.34/16
=137.43/16
=137.44/16
=137.47/16
=137.50/16
=137.55/16
=137.56/16
=137.58/16
=137.60/15
=137.62/16
=137.73/16
=137.74/16
=137.93/16
=137.96/16
=137.101/16
=137.105/16
=137.108/16
=137.120/15
=137.129/16
=137.133/16
=137.138/16
=137.156/16
=137.163/16
=137.174/16
=137.191/16
=137.193/16
=137.194/15
=137.204/15
=137.208/16
=137.213/16
=137.217/16
=137.218/16
=137.221/16
=137.222/15
=137.224/16
=137.226/16
=137.248/16
=137.250/15
=137.253/16
=138.3/16
=138.4/16
=138.6/16
=138.14/16
=138.21/16
=138.22/16
=138.37/16
=138.38/16
=138.40/15
=138.48/16
=138.62/15
=138.66/16
=138.70/16
=138.81/16
=138.96/16
=138.100/16
=138.102/15
=138.104/16
=138.106/16
=138.124/16
=138.128.136/21
=138.131/16
=138.132/16
=138.134/16
=138.187/16
=138.188/14
=138.195/16
=138.198/15
=138.200/15
=138.203/16
=138.205/16
=138.206/16
=138.215/16
=138.216/16
=138.221/16
=138.222/15
=138.224/14
=138.228/16
=138.231/16
=138.232/15
=138.244/15
=138.246/16
=138.248/14
=138.253/16
=139.1/16
=139.2/15
=139.4/16
=139.6/15
=139.8/16
=139.10/15
=139.12/14
=139.16/13
=139.24/15
=139.27/16
=139.28/15
=139.30/16
=139.45/16
=139.47/16
=139.50/16
=139.54/16
=139.58/16
=139.63/16
=139.64/17
=139.66/16
=139.74/15
=139.79/16
=139.83/16
=139.89/16
=139.90/15
=139.92/16
=139.96/15
=139.98/16
=139.100/16
=139.105/16
=139.106/15
=139.108/14
=139.112/13
=139.120/16
=139.122/15
=139.124/16
=139.128/16
=139.133/16
=139.138.192/19
=139.141/16
=139.143/16
=139.145/16
=139.149/16
=139.153/16
=139.156/15
=139.158/16
=139.160/16
=139.162/16
=139.164/15
=139.166/16
=139.174/16
=139.178/15
=139.184/16
=139.191/16
=139.222/16
=140.77/16
=140.78/16
=140.84/15
=140.86/16
=140.93/16
=140.94/16
=140.97/16
=140.105/16
=140.150/15
=140.164/16
=140.166/16
=140.181/16
=140.203/16
=140.231/16
=141/10
=141.64/12
=141.80/14
=141.84/15
=141.87/16
=141.88/13
=141.96/14
=141.100/15
=141.105/16
=141.108/16
=141.113/16
=141.115/16
=141.125/16
=141.130/16
=141.134/15
=141.136/15
=141.138/16
=141.143/16
=141.144/14
=141.148/16
=141.163/16
=141.164.128/17
=141.169/16
=141.170/15
=141.172/16
=141.175/16
=141.176/16
=141.179/16
=141.192/16
=141.193.20/24
=141.193.108/22
=141.193.214/23
=141.194/16
=141.196/16
=141.200/15
=141.203/16
=141.208/16
=141.226/17
=141.226.128/21
=141.226.139/24
=141.226.144/20
=141.226.160/19
=141.226.192/18
=141.227/16
=141.228/16
=141.231/16
=141.237/16
=141.241/16
=141.244/15
=141.249/16
=141.250/16
=141.252/15
=141.255/16
=142.91.8/21
=142.91.120/21
=142.91.152/21
=142.154/17
=142.234.32/21
=142.247/16
=143.41/16
=143.47/16
=143.50/15
=143.52/15
=143.65/16
=143.92.128/17
=143.93/16
=143.97/16
=143.99/16
=143.117/16
=143.118/16
=143.121/16
=143.126/16
=143.129/16
=143.130/16
=143.161/16
=143.163/16
=143.164/16
=143.167/16
=143.169/16
=143.176/14
=143.180/16
=143.196/16
=143.205/16
=143.210/16
=143.217/16
=143.224/15
=143.233/16
=143.234/16
=143.237/16
=143.239/16
=143.245/16
=143.252/16
=144.2/16
=144.4/16
=144.20/15
=144.24/16
=144.27/16
=144.32/16
=144.41/16
=144.43/16
=144.44/16
=144.48.60/22
=144.54/16
=144.56/15
=144.63/16
=144.64/15
=144.76/16
=144.82/16
=144.84/15
=144.86/17
=144.87/16
=144.95/16
=144.98/16
=144.119/16
=144.122/16
=144.124/16
=144.127/16
=144.145/16
=144.164/15
=144.173/16
=144.176/14
=144.180/15
=144.193/16
=144.200/16
=144.204/16
=144.206/16
=144.208/18
=144.208.128/17
=144.209/16
=144.248/16
=145/8
=146/16
=146.2/15
=146.4/16
=146.19/16
=146.21/16
=146.48/16
=146.50/16
=146.52/16
=146.59/16
=146.60/16
=146.66/15
=146.70/16
=146.71.94/23
=146.72/16
=146.75/16
=146.77/16
=146.80/15
=146.87/16
=146.88.232/21
=146.90/16
=146.97/16
=146.100/14
=146.104/14
=146.108/15
=146.110/16
=146.112/16
=146.119/16
=146.120/16
=146.124/16
=146.133/16
=146.136/16
=146.140/16
=146.158/15
=146.161/16
=146.162/16
=146.169/16
=146.172/15
=146.175/16
=146.176/15
=146.179/16
=146.185/16
=146.188/16
=146.191/16
=146.192/15
=146.194/16
=146.210/15
=146.212/15
=146.216/16
=146.219/16
=146.220/16
=146.224/16
=146.227/16
=146.228/16
=146.234/16
=146.241/16
=146.247/16
=146.248/15
=146.251/16
=146.253/16
=146.254/15
=147.7/16
=147.12/15
=147.14/16
=147.27/16
=147.28/15
=147.30/16
=147.32/15
=147.44/15
=147.52/16
=147.54/16
=147.60/16
=147.67/16
=147.68/16
=147.75/16
=147.77/16
=147.78/16
=147.82/15
=147.84/16
=147.86/15
=147.88/15
=147.91/16
=147.93/16
=147.94/15
=147.96/16
=147.98/15
=147.100/16
=147.102/16
=147.111/16
=147.112/16
=147.119/16
=147.122/15
=147.125/16
=147.127/16
=147.135.128/17
=147.142/15
=147.147/16
=147.148/14
=147.152/16
=147.156/16
=147.161/16
=147.162/15
=147.167/16
=147.171/16
=147.172/15
=147.175/16
=147.180/15
=147.184/16
=147.186/16
=147.188/15
=147.193/16
=147.196/15
=147.201/16
=147.204/16
=147.210/16
=147.213/16
=147.214/15
=147.220/16
=147.228/14
=147.232/14
=147.236/15
=147.243/16
=147.250/15
=147.252/16
=148.2/15
=148.6/16
=148.54/16
=148.56/16
=148.59.115/24
=148.60/16
=148.63/16
=148.64.56/22
=148.69/16
=148.71/16
=148.76.224/19
=148.79/16
=148.81/16
=148.82/15
=148.88/16
=148.110/15
=148.118/15
=148.120/14
=148.135/16
=148.136/16
=148.138/16
=148.140/16
=148.143/16
=148.148/16
=148.151/16
=148.160/16
=148.169/16
=148.176/16
=148.181/16
=148.185/16
=148.187/16
=148.196/15
=148.198/16
=148.200/16
=148.251/16
=148.252/15
=149/16
=149.3/16
=149.27/16
=149.49/16
=149.59/16
=149.62/16
=149.81/16
=149.90/16
=149.109/16
=149.126/16
=149.132/15
=149.134/16
=149.139/16
=149.140/16
=149.146/15
=149.148/16
=149.153/16
=149.154/15
=149.156/15
=149.170/16
=149.172/16
=149.177/16
=149.178/15
=149.180/14
=149.184/13
=149.192/14
=149.196/15
=149.200/13
=149.208/12
=149.224/13
=149.232/15
=149.234.8/21
=149.234.16/20
=149.234.32/19
=149.234.64/18
=149.235/16
=149.236/14
=149.240/13
=149.249/16
=149.250/15
=149.254/15
=150.106/16
=150.107.200/22
=150.112/16
=150.128/16
=150.129.8/22
=150.132/16
=150.140/16
=150.145/16
=150.146/16
=150.175/16
=150.178/16
=150.204/15
=150.213/16
=150.214/16
=150.217/16
=150.227/16
=150.236/15
=150.241/16
=150.244/16
=150.251/16
=150.254/16
=151/10
=151.64/11
=151.96/14
=151.100/16
=151.106/17
=151.106.128/19
=151.106.192/19
=151.106.224/20
=151.115/16
=151.120/16
=151.127/16
=151.129/16
=151.133/16
=151.135/16
=151.136/16
=151.156/15
=151.170/16
=151.173/16
=151.175/16
=151.176/15
=151.180/16
=151.182/15
=151.184/16
=151.187/16
=151.189/16
=151.211/16
=151.212/16
=151.216/13
=151.224/11
=152.66/16
=152.71/16
=152.73/16
=152.77/16
=152.78/16
=152.81/16
=152.88/15
=152.90/16
=152.93/16
=152.94/15
=152.96/16
=152.105/16
=152.114/15
=152.134/16
=152.143/16
=152.150/16
=152.152/16
=153.1/16
=153.5/16
=153.15/16
=153.17/16
=153.19/16
=153.88/16
=153.92/14
=153.96/15
=153.98/16
=153.100/16
=153.108/15
=153.110/16
=153.112/16
=154.8/19
=154.8.32/20
=154.8.64/18
=154.14/15
=154.32/16
=155.4/16
=155.45/16
=155.54/15
=155.56/16
=155.66/16
=155.73/16
=155.105/16
=155.131/16
=155.132/15
=155.136/15
=155.138.64/18
=155.140/16
=155.145/16
=155.158/16
=155.185/16
=155.192/16
=155.198/16
=155.202/16
=155.204/16
=155.207/16
=155.209/16
=155.210/16
=155.223/16
=155.227/16
=155.228/16
=155.231/16
=155.245/16
=155.249/16
=155.250/16
=155.253/16
=155.254.32/19
=156.10/16
=156.14/16
=156.17/16
=156.18/16
=156.25/16
=156.28/16
=156.35/16
=156.43/16
=156.48/15
=156.51/16
=156.52/16
=156.54/16
=156.58/16
=156.61/16
=156.67/16
=156.83/16
=156.106/16
=156.114/15
=156.116/16
=156.118/16
=156.133/16
=156.135/16
=156.148/16
=156.150/16
=157.23/16
=157.24/14
=157.28/15
=157.83/16
=157.84/16
=157.88/16
=157.94/16
=157.96/15
=157.99/16
=157.120.224/21
=157.120.236/22
=157.120.240/20
=157.124/15
=157.129/16
=157.136/16
=157.138/16
=157.140/16
=157.144/16
=157.157/16
=157.158/15
=157.161/16
=157.162/15
=157.164/16
=157.167/16
=157.168/15
=157.171/16
=157.172/15
=157.177/16
=157.180/15
=157.186/16
=157.190/16
=157.193/16
=157.200/16
=157.203/16
=157.228/16
=157.231/16
=157.236/15
=157.243/16
=157.247/16
=157.249/16
=158.36/14
=158.41/16
=158.42/15
=158.46/15
=158.49/16
=158.50/16
=158.58/16
=158.60/16
=158.64/16
=158.66/15
=158.75/16
=158.90/16
=158.92/16
=158.94/16
=158.99/16
=158.102/16
=158.105/16
=158.109/16
=158.110/16
=158.112/16
=158.119/16
=158.124/14
=158.129/16
=158.131/16
=158.133/16
=158.140.16/20
=158.140.64/18
=158.143/16
=158.146.128/20
=158.148/15
=158.150/16
=158.152/16
=158.156/16
=158.162/16
=158.166/15
=158.168/15
=158.172/14
=158.176/14
=158.180/15
=158.190/15
=158.192/14
=158.196/15
=158.216/16
=158.218/16
=158.220/16
=158.223/16
=158.225/16
=158.226/15
=158.230/15
=158.232/15
=158.234/16
=158.248/15
=158.250/16
=158.255/16
=159/16
=159.7/16
=159.8/16
=159.12/16
=159.15/16
=159.20/16
=159.22/15
=159.25/16
=159.29/16
=159.30/15
=159.34/16
=159.38/16
=159.46/16
=159.50/15
=159.58/16
=159.60/16
=159.69/16
=159.72/16
=159.81/16
=159.84/16
=159.86/16
=159.92/15
=159.95/16
=159.100/15
=159.103/16
=159.104/16
=159.107/16
=159.109/16
=159.114/16
=159.117.192/21
=159.117.202/23
=159.117.204/22
=159.122/16
=159.130/16
=159.134/16
=159.135.128/19
=159.144/16
=159.146/15
=159.148/15
=159.151/16
=159.152/16
=159.154/16
=159.156/16
=159.160/16
=159.162/16
=159.167/16
=159.168/16
=159.170/15
=159.173/16
=159.179/16
=159.180/16
=159.190/16
=159.193/16
=159.194/15
=159.197/16
=159.200/16
=159.205/16
=159.210/16
=159.213/16
=159.216/15
=159.219/16
=159.224/16
=159.232/16
=159.236/15
=159.239/16
=159.241/16
=159.242.8/21
=159.242.64/18
=159.242.224/20
=159.244/15
=159.253/16
=159.254/15
=160.5/16
=160.6/16
=160.8/15
=160.19.92/22
=160.19.180/22
=160.20.96/21
=160.20.108/22
=160.20.144/20
=160.20.214/23
=160.20.229/24
=160.20.248/23
=160.38/16
=160.40/16
=160.44/14
=160.48/12
=160.66/15
=160.68/16
=160.70/15
=160.75/16
=160.78/16
=160.80/16
=160.85/16
=160.92/16
=160.97/16
=160.98/15
=160.100/16
=160.103/16
=160.104/16
=160.114/16
=160.180/16
=160.202.16/20
=160.210/15
=160.213/16
=160.214/16
=160.216/14
=160.220/15
=160.228/16
=160.231.64/18
=160.238.21/24
=160.238.36/22
=160.238.52/22
=160.238.60/23
=160.238.96/22
=160.238.112/20
=161.2/15
=161.4/15
=161.8/15
=161.12/16
=161.17/16
=161.20/16
=161.23/16
=161.27/16
=161.30/16
=161.37/16
=161.41/16
=161.42/16
=161.48/16
=161.52/15
=161.54/16
=161.59/16
=161.62/16
=161.67/16
=161.70/15
=161.72/15
=161.74/16
=161.76/16
=161.78/16
=161.83/16
=161.84/14
=161.88/14
=161.92/16
=161.104/15
=161.106/16
=161.110/15
=161.112/16
=161.116/16
=161.134/16
=161.147/16
=161.156/16
=161.158/16
=161.202/16
=161.218/16
=161.230/16
=161.251/16
=161.252/16
=162.11/16
=162.12.200/21
=162.13/16
=162.21/16
=162.23/16
=162.25/16
=162.26/16
=162.38/16
=162.86/16
=162.133/16
=162.142.128/17
=162.216.138/23
=162.217.248/22
=162.218.88/21
=162.218.176/22
=162.220.240/21
=162.222.88/23
=162.222.90/24
=162.244.52/22
=162.245.204/22
=162.248.196/22
=162.250.216/22
=162.251.32/21
=162.255.196/22
=163.1/16
=163.3/16
=163.5/16
=163.9/16
=163.34/16
=163.62/15
=163.64/11
=163.96/12
=163.112/14
=163.116/15
=163.119/16
=163.156/14
=163.160/12
=163.242/16
=164/11
=164.32/13
=164.40/16
=164.48/16
=164.59/16
=164.60/15
=164.81/16
=164.93.128/17
=164.126/15
=164.128/12
=164.177/16
=164.215/16
=165.78/16
=165.84.208/20
=165.114/16
=165.192/16
=165.218/16
=165.222/16
=166.8/13
=166.49.128/17
=166.87/16
=167.81/16
=167.86.66/23
=167.86.68/22
=167.86.72/21
=167.86.80/20
=167.86.96/19
=167.86.128/17
=167.87/16
=167.98/16
=167.100.128/17
=167.111/16
=167.160/19
=167.168/16
=167.172/16
=167.203/16
=167.233/16
=168.1/16
=168.139/16
=168.149/17
=168.149.248/23
=168.187/16
=168.245.196/23
=169.32/11
=169.148/17
=170.10.112/20
=170.13.246/24
=170.17.128/17
=170.37.203/24
=170.37.204/23
=170.37.206/24
=170.60/16
=170.101.128/17
=170.102.128/17
=170.133/17
=170.236/15
=170.255/16
=171.16/12
=171.32/15
=172.80.128/17
=172.103.88/21
=172.241/21
=172.241.40/21
=172.241.48/21
=172.241.64/21
=172.241.84/22
=172.255/20
=172.255.96/20
=172.255.136/21
=172.255.192/20
=172.255.224/20
=172.255.248/21
=173.212.192/18
=173.214.200/22
=173.234.128/21
=173.244.144/20
=173.249/18
=173.255.144/21
=174.140/18
=175.110.128/17
=176/10
=176.64/11
=176.96/13
=176.104/14
=176.108/15
=176.110/16
=176.111/19
=176.111.32/20
=176.111.48/21
=176.111.57/24
=176.111.58/23
=176.111.60/22
=176.111.64/18
=176.111.128/17
=176.112/15
=176.114/16
=176.115/17
=176.115.128/19
=176.115.160/20
=176.115.184/21
=176.115.192/18
=176.116/14
=176.120/15
=176.122/17
=176.122.192/18
=176.123/16
=176.124/14
=176.128/9
=178/9
=178.128/10
=178.192/11
=178.224/13
=178.232/14
=178.236/15
=178.238/18
=178.238.64/20
=178.238.96/19
=178.238.128/17
=178.239/16
=178.240/12
=180.234/16
=185/13
=185.8/18
=185.8.64/19
=185.8.96/22
=185.8.104/21
=185.8.112/20
=185.8.128/17
=185.9/16
=185.10/15
=185.12/14
=185.16/14
=185.20/17
=185.20.128/18
=185.20.192/20
=185.20.208/21
=185.20.216/22
=185.20.224/19
=185.21/16
=185.22/15
=185.24/14
=185.28/15
=185.30/18
=185.30.64/21
=185.30.76/22
=185.30.80/20
=185.30.96/19
=185.30.128/17
=185.31/16
=185.32/14
=185.36/15
=185.38/17
=185.38.128/18
=185.38.192/20
=185.38.208/23
=185.38.212/22
=185.38.216/21
=185.38.224/19
=185.39/16
=185.40/13
=185.48/12
=185.64/13
=185.72/14
=185.76/16
=185.77/22
=185.77.4/23
=185.77.8/21
=185.77.16/20
=185.77.32/19
=185.77.64/18
=185.77.128/17
=185.78/15
=185.80/13
=185.88/15
=185.90/17
=185.90.128/18
=185.90.192/19
=185.90.224/20
=185.90.240/22
=185.90.248/21
=185.91/16
=185.92/14
=185.96/14
=185.100/19
=185.100.32/21
=185.100.44/22
=185.100.48/20
=185.100.64/18
=185.100.128/17
=185.101/16
=185.102/15
=185.104/16
=185.105/22
=185.105.4/23
=185.105.6/24
=185.105.8/21
=185.105.16/20
=185.105.32/19
=185.105.64/18
=185.105.128/17
=185.106/15
=185.108/14
=185.112/12
=185.128/14
=185.132/19
=185.132.32/20
=185.132.52/22
=185.132.56/21
=185.132.64/18
=185.132.128/17
=185.133/16
=185.134/15
=185.136/13
=185.144/15
=185.146/19
=185.146.36/22
=185.146.40/21
=185.146.48/20
=185.146.64/18
=185.146.128/17
=185.147/16
=185.148/14
=185.152/13
=185.160/13
=185.168/16
=185.169/18
=185.169.64/19
=185.169.96/21
=185.169.104/22
=185.169.112/20
=185.169.128/17
=185.170/19
=185.170.32/20
=185.170.48/21
=185.170.60/22
=185.170.64/18
=185.170.128/17
=185.171/17
=185.171.128/18
=185.171.192/20
=185.171.212/22
=185.171.216/21
=185.171.224/19
=185.172/14
=185.176/19
=185.176.32/20
=185.176.48/22
=185.176.56/21
=185.176.64/18
=185.176.128/17
=185.177/16
=185.178/17
=185.178.128/20
=185.178.148/22
=185.178.152/21
=185.178.160/19
=185.178.192/18
=185.179/16
=185.180/14
=185.184/13
=185.192/10
=188/9
=188.128/15
=188.130/16
=188.131/17
=188.132/14
=188.136/13
=188.144/12
=188.160/11
=188.192/12
=188.208/16
=188.209/17
=188.209.128/20
=188.209.152/21
=188.209.160/19
=188.209.192/18
=188.210/15
=188.212/15
=188.214/18
=188.214.80/20
=188.214.96/19
=188.214.128/17
=188.215/16
=188.216/13
=188.224/11
=192.5.28/23
=192.5.30/24
=192.5.36/24
=192.5.50/24
=192.5.59/24
=192.5.61/24
=192.5.62/24
=192.5.97/24
=192.5.142/24
=192.5.145/24
=192.5.162/24
=192.5.239/24
=192.5.254/24
=192.12.1/24
=192.12.47/24
=192.12.54/24
=192.12.72/23
=192.12.77/24
=192.12.81/24
=192.12.96/24
=192.12.99/24
=192.12.192/23
=192.12.194/24
=192.12.217/24
=192.12.218/24
=192.12.231/24
=192.12.232/24
=192.12.235/24
=192.12.247/24
=192.15/16
=192.16.123/24
=192.16.124/22
=192.16.128/19
=192.16.160/22
=192.16.164/23
=192.16.166/24
=192.16.183/24
=192.16.184/21
=192.16.192/21
=192.16.200/23
=192.16.202/24
=192.18.195/24
=192.26.28/22
=192.26.32/20
=192.26.105/24
=192.26.106/23
=192.26.108/23
=192.26.111/24
=192.26.112/20
=192.26.128/24
=192.26.133/24
=192.26.134/23
=192.26.154/23
=192.26.156/22
=192.26.160/19
=192.26.192/23
=192.26.231/24
=192.26.234/24
=192.26.236/22
=192.28.124/22
=192.28.128/22
=192.31.14/24
=192.31.23/24
=192.31.26/23
=192.31.31/24
=192.31.40/24
=192.31.62/24
=192.31.102/24
=192.31.166/23
=192.31.168/22
=192.31.211/24
=192.31.231/24
=192.31.252/24
=192.33.15/24
=192.33.16/24
=192.33.36/24
=192.33.87/24
=192.33.88/21
=192.33.96/20
=192.33.113/24
=192.33.114/24
=192.33.118/23
=192.33.120/21
=192.33.130/23
=192.33.143/24
=192.33.144/23
=192.33.147/24
=192.33.148/22
=192.33.152/21
=192.33.160/22
=192.33.164/23
=192.33.166/24
=192.33.169/24
=192.33.170/23
=192.33.176/22
=192.33.180/23
=192.33.182/24
=192.33.192/19
=192.33.224/21
=192.33.233/24
=192.33.234/23
=192.33.236/22
=192.33.254/24
=192.34.19/24
=192.34.50/24
=192.34.107/24
=192.34.116/24
=192.34.179/24
=192.35/20
=192.35.16/22
=192.35.63/24
=192.35.64/21
=192.35.72/24
=192.35.90/24
=192.35.94/24
=192.35.108/24
=192.35.130/23
=192.35.132/23
=192.35.138/24
=192.35.146/24
=192.35.149/24
=192.35.150/23
=192.35.152/23
=192.35.172/24
=192.35.183/24
=192.35.184/21
=192.35.192/24
=192.35.197/24
=192.35.198/24
=192.35.205/24
=192.35.206/23
=192.35.229/24
=192.35.240/22
=192.35.244/24
=192.35.246/23
=192.36/15
=192.38/16
=192.40.69/24
=192.40.70/23
=192.40.72/21
=192.40.80/24
=192.40.228/24
=192.41.103/24
=192.41.104/21
=192.41.112/20
=192.41.128/21
=192.41.136/24
=192.41.140/22
=192.41.144/23
=192.41.147/24
=192.41.149/24
=192.41.150/23
=192.41.152/21
=192.41.160/24
=192.41.210/24
=192.41.216/24
=192.41.218/24
=192.41.227/24
=192.42.1/24
=192.42.42/23
=192.42.44/22
=192.42.53/24
=192.42.63/24
=192.42.64/23
=192.42.87/24
=192.42.97/24
=192.42.100/24
=192.42.102/24
=192.42.113/24
=192.42.114/23
=192.42.116/22
=192.42.120/21
=192.42.128/22
=192.42.132/24
=192.42.143/24
=192.42.180/22
=192.42.184/21
=192.42.192/21
=192.42.200/23
=192.42.253/24
=192.43.162/23
=192.43.164/22
=192.43.168/22
=192.43.192/22
=192.43.196/24
=192.43.210/24
=192.43.212/24
=192.43.234/24
=192.44/18
=192.44.64/22
=192.44.71/24
=192.44.72/21
=192.44.80/21
=192.44.88/23
=192.44.90/24
=192.44.240/21
=192.44.248/22
=192.47.244/22
=192.47.248/23
=192.48.31/24
=192.48.107/24
=192.48.145/24
=192.48.224/24
=192.48.231/24
=192.49/16
=192.51/20
=192.52/19
=192.52.32/20
=192.52.48/23
=192.52.50/24
=192.52.152/24
=192.52.159/24
=192.52.160/23
=192.52.221/24
=192.52.222/23
=192.52.253/24
=192.52.254/24
=192.53.103/24
=192.53.104/24
=192.54.31/24
=192.54.32/20
=192.54.48/22
=192.54.52/24
=192.54.54/23
=192.54.56/21
=192.54.64/20
=192.54.80/24
=192.54.104/24
=192.54.113/24
=192.54.115/24
=192.54.116/22
=192.54.120/24
=192.54.122/24
=192.54.125/24
=192.54.126/23
=192.54.128/24
=192.54.132/24
=192.54.139/24
=192.54.141/24
=192.54.142/23
=192.54.144/20
=192.54.160/19
=192.54.192/20
=192.54.208/21
=192.54.216/22
=192.54.220/23
=192.54.225/24
=192.54.244/23
=192.54.254/24
=192.55.84/24
=192.55.89/24
=192.55.101/24
=192.55.105/24
=192.55.109/24
=192.55.115/24
=192.55.129/24
=192.55.132/24
=192.55.188/24
=192.55.193/24
=192.55.197/24
=192.55.212/24
=192.55.244/24
=192.58.28/22
=192.58.32/22
=192.58.41/24
=192.58.42/23
=192.58.44/22
=192.58.48/20
=192.58.64/20
=192.58.80/21
=192.58.88/23
=192.58.197/24
=192.58.218/24
=192.58.226/23
=192.58.228/23
=192.64.28/24
=192.64.44/23
=192.64.100/22
=192.64.125/24
=192.64.202/24
=192.65.51/24
=192.65.52/22
=192.65.56/21
=192.65.64/22
=192.65.68/23
=192.65.70/24
=192.65.92/23
=192.65.94/24
=192.65.96/24
=192.65.131/24
=192.65.132/24
=192.65.139/24
=192.65.144/23
=192.65.146/24
=192.65.153/24
=192.65.183/24
=192.65.184/21
=192.65.192/22
=192.65.196/23
=192.65.219/24
=192.65.220/22
=192.65.224/22
=192.65.228/24
=192.66/16
=192.67.3/24
=192.67.4/24
=192.67.39/24
=192.67.43/24
=192.67.47/24
=192.67.50/24
=192.67.52/24
=192.67.55/24
=192.67.58/24
=192.67.76/24
=192.67.79/24
=192.67.87/24
=192.67.94/24
=192.67.100/22
=192.67.104/24
=192.67.135/24
=192.67.167/24
=192.67.170/24
=192.67.189/24
=192.67.190/23
=192.67.192/20
=192.67.208/24
=192.67.218/24
=192.67.220/23
=192.67.223/24
=192.67.249/24
=192.68/20
=192.68.16/22
=192.68.23/24
=192.68.31/24
=192.68.32/20
=192.68.48/22
=192.68.76/22
=192.68.80/20
=192.68.96/21
=192.68.104/22
=192.68.151/24
=192.68.152/23
=192.68.165/24
=192.68.166/23
=192.68.168/23
=192.68.170/24
=192.68.174/24
=192.68.176/24
=192.68.182/24
=192.68.186/24
=192.68.209/24
=192.68.211/24
=192.68.212/22
=192.68.216/24
=192.68.221/24
=192.68.224/24
=192.68.230/24
=192.68.250/23
=192.68.252/24
=192.68.254/24
=192.70/18
=192.70.64/19
=192.70.96/20
=192.70.112/21
=192.70.133/24
=192.70.134/24
=192.70.136/24
=192.70.140/22
=192.70.144/20
=192.70.192/21
=192.70.242/24
=192.71/16
=192.73.19/24
=192.73.20/24
=192.73.34/23
=192.73.36/22
=192.73.40/22
=192.73.44/24
=192.73.226/24
=192.73.229/24
=192.76.6/23
=192.76.8/21
=192.76.16/20
=192.76.32/22
=192.76.123/24
=192.76.124/22
=192.76.128/22
=192.76.132/24
=192.76.134/23
=192.76.136/21
=192.76.144/20
=192.76.160/21
=192.76.168/22
=192.76.172/24
=192.76.176/24
=192.76.241/24
=192.76.242/23
=192.76.244/22
=192.76.248/24
=192.77.11/24
=192.77.114/23
=192.77.120/22
=192.77.132/22
=192.77.136/23
=192.77.138/24
=192.77.140/23
=192.80.20/23
=192.80.31/24
=192.80.32/21
=192.80.40/23
=192.80.42/24
=192.80.46/24
=192.80.51/24
=192.81.59/24
=192.81.61/24
=192.81.62/24
=192.81.109/24
=192.81.121/24
=192.81.123/24
=192.81.160/24
=192.81.182/23
=192.81.184/24
=192.81.194/24
=192.81.230/24
=192.81.234/24
=192.82.121/24
=192.82.124/24
=192.82.127/24
=192.82.153/24
=192.82.157/24
=192.82.158/24
=192.82.214/24
=192.82.220/23
=192.82.241/24
=192.83/18
=192.83.64/19
=192.83.96/22
=192.83.100/24
=192.83.102/24
=192.83.160/24
=192.83.165/24
=192.83.200/24
=192.83.202/24
=192.83.216/24
=192.83.223/24
=192.83.229/24
=192.83.230/24
=192.84.5/24
=192.84.13/24
=192.84.15/24
=192.84.27/24
=192.84.30/24
=192.84.32/23
=192.84.62/24
=192.84.75/24
=192.84.76/22
=192.84.80/22
=192.84.84/24
=192.84.87/24
=192.84.90/23
=192.84.92/22
=192.84.96/22
=192.84.101/24
=192.84.102/23
=192.84.104/22
=192.84.108/23
=192.84.127/24
=192.84.128/20
=192.84.144/21
=192.84.152/22
=192.84.156/24
=192.84.166/24
=192.84.173/24
=192.84.176/20
=192.84.192/20
=192.84.212/24
=192.84.220/23
=192.84.226/23
=192.84.228/23
=192.84.245/24
=192.84.246/23
=192.86.11/24
=192.86.14/24
=192.86.18/24
=192.86.25/24
=192.86.27/24
=192.86.89/24
=192.86.125/24
=192.86.126/23
=192.86.134/24
=192.86.137/24
=192.86.138/24
=192.86.163/24
=192.86.166/23
=192.86.169/24
=192.86.254/24
=192.87/16
=192.88.1/24
=192.88.4/24
=192.88.9/24
=192.88.10/24
=192.88.17/24
=192.88.23/24
=192.88.24/24
=192.88.83/24
=192.88.84/24
=192.88.86/24
=192.88.97/24
=192.88.98/24
=192.88.108/24
=192.88.118/24
=192.88.123/24
=192.88.128/24
=192.88.130/24
=192.88.133/24
=192.88.196/24
=192.88.204/24
=192.88.238/23
=192.88.250/23
=192.88.252/23
=192.88.254/24
=192.89/16
=192.91.140/23
=192.91.177/24
=192.91.186/24
=192.91.189/24
=192.91.191/24
=192.91.199/24
=192.91.201/24
=192.91.211/24
=192.91.214/23
=192.91.216/21
=192.91.224/21
=192.91.232/23
=192.91.236/22
=192.91.240/21
=192.92.86/24
=192.92.94/24
=192.92.104/23
=192.92.106/24
=192.92.108/23
=192.92.116/24
=192.92.125/24
=192.92.126/23
=192.92.128/21
=192.92.136/22
=192.92.141/24
=192.92.142/23
=192.92.144/21
=192.92.152/23
=192.92.155/24
=192.92.156/24
=192.92.216/24
=192.93/16
=192.94.24/24
=192.94.28/24
=192.94.57/24
=192.94.58/24
=192.94.67/24
=192.94.68/24
=192.94.76/24
=192.94.78/24
=192.94.111/24
=192.94.112/22
=192.94.116/23
=192.94.156/22
=192.94.160/22
=192.94.172/24
=192.94.175/24
=192.94.176/20
=192.94.192/21
=192.94.212/24
=192.94.221/24
=192.94.226/24
=192.94.233/24
=192.94.235/24
=192.94.239/24
=192.98/16
=192.100.18/24
=192.100.23/24
=192.100.24/23
=192.100.52/24
=192.100.61/24
=192.100.63/24
=192.100.78/24
=192.100.96/22
=192.100.102/23
=192.100.104/21
=192.100.112/20
=192.100.128/22
=192.100.132/23
=192.100.135/24
=192.100.136/22
=192.100.140/24
=192.100.144/24
=192.100.154/24
=192.101.1/24
=192.101.4/24
=192.101.8/24
=192.101.11/24
=192.101.28/24
=192.101.34/24
=192.101.75/24
=192.101.81/24
=192.101.82/23
=192.101.84/22
=192.101.88/23
=192.101.90/24
=192.101.111/24
=192.101.112/23
=192.101.114/24
=192.101.118/24
=192.101.137/24
=192.101.161/24
=192.101.162/23
=192.101.164/22
=192.101.168/24
=192.101.170/24
=192.101.176/24
=192.101.179/24
=192.101.180/24
=192.101.192/24
=192.101.197/24
=192.101.198/24
=192.101.252/24
=192.102.1/24
=192.102.6/23
=192.102.8/24
=192.102.17/24
=192.102.18/23
=192.102.20/22
=192.102.24/21
=192.102.32/19
=192.102.64/20
=192.102.80/23
=192.102.89/24
=192.102.95/24
=192.102.146/23
=192.102.148/22
=192.102.152/21
=192.102.160/20
=192.102.176/23
=192.102.214/24
=192.102.224/23
=192.102.227/24
=192.102.228/23
=192.103.2/24
=192.103.7/24
=192.103.14/24
=192.103.20/24
=192.103.23/24
=192.103.27/24
=192.103.28/22
=192.103.32/21
=192.103.40/24
=192.103.85/24
=192.103.86/23
=192.103.88/21
=192.103.96/20
=192.103.112/22
=192.103.116/24
=192.103.137/24
=192.103.138/23
=192.103.147/24
=192.104.23/24
=192.104.28/23
=192.104.35/24
=192.104.36/23
=192.104.41/24
=192.104.48/24
=192.104.53/24
=192.104.55/24
=192.104.56/23
=192.104.58/24
=192.104.72/24
=192.104.77/24
=192.104.82/24
=192.104.140/24
=192.104.142/24
=192.104.147/24
=192.104.154/23
=192.104.167/24
=192.104.168/24
=192.104.238/24
=192.104.245/24
=192.104.248/24
=192.104.251/24
=192.105.75/24
=192.106/16
=192.107.2/24
=192.107.4/23
=192.107.11/24
=192.107.12/23
=192.107.51/24
=192.107.52/22
=192.107.56/21
=192.107.64/19
=192.107.96/22
=192.107.100/24
=192.107.110/24
=192.107.114/24
=192.107.122/23
=192.107.124/22
=192.107.128/23
=192.107.132/24
=192.107.168/24
=192.107.174/24
=192.107.177/24
=192.107.178/24
=192.107.187/24
=192.107.200/21
=192.107.208/20
=192.107.224/21
=192.107.232/23
=192.107.235/24
=192.107.236/24
=192.108.23/24
=192.108.24/21
=192.108.32/20
=192.108.48/23
=192.108.51/24
=192.108.52/22
=192.108.56/21
=192.108.64/20
=192.108.80/21
=192.108.88/22
=192.108.92/24
=192.108.100/23
=192.108.107/24
=192.108.108/24
=192.108.114/23
=192.108.116/22
=192.108.120/23
=192.108.125/24
=192.108.126/24
=192.108.128/19
=192.108.160/21
=192.108.168/22
=192.108.172/23
=192.108.174/24
=192.108.195/24
=192.108.196/22
=192.108.200/21
=192.108.208/22
=192.108.212/23
=192.108.214/24
=192.108.234/24
=192.108.238/24
=192.109/19
=192.109.32/21
=192.109.40/22
=192.109.44/24
=192.109.46/23
=192.109.48/20
=192.109.64/21
=192.109.72/23
=192.109.74/24
=192.109.76/22
=192.109.80/21
=192.109.88/22
=192.109.94/23
=192.109.96/23
=192.109.98/24
=192.109.100/23
=192.109.102/24
=192.109.105/24
=192.109.106/23
=192.109.108/22
=192.109.112/21
=192.109.121/24
=192.109.122/23
=192.109.124/22
=192.109.128/18
=192.109.192/19
=192.109.224/20
=192.109.240/23
=192.109.243/24
=192.109.244/22
=192.109.248/21
=192.111.33/24
=192.111.39/24
=192.111.44/24
=192.111.47/24
=192.111.48/24
=192.111.88/24
=192.111.101/24
=192.111.103/24
=192.111.104/24
=192.111.124/23
=192.111.127/24
=192.111.252/24
=192.112.30/23
=192.112.32/24
=192.112.45/24
=192.112.49/24
=192.112.61/24
=192.112.70/23
=192.112.72/21
=192.112.98/23
=192.112.100/24
=192.112.204/24
=192.112.206/24
=192.112.208/24
=192.112.213/24
=192.112.214/24
=192.112.247/24
=192.112.254/24
=192.113/16
=192.114/15
=192.116/15
=192.118/16
=192.121/16
=192.122.1/24
=192.122.2/23
=192.122.4/22
=192.122.8/21
=192.122.16/20
=192.122.32/19
=192.122.64/18
=192.122.128/23
=192.122.130/24
=192.122.141/24
=192.122.142/23
=192.122.144/23
=192.122.146/24
=192.122.151/24
=192.122.152/21
=192.122.160/21
=192.122.168/23
=192.122.170/24
=192.122.214/24
=192.122.216/21
=192.122.224/21
=192.122.232/23
=192.122.234/24
=192.122.238/23
=192.122.240/23
=192.122.242/24
=192.122.254/24
=192.124.25/24
=192.124.26/23
=192.124.28/24
=192.124.32/24
=192.124.39/24
=192.124.46/24
=192.124.112/24
=192.124.115/24
=192.124.116/24
=192.124.155/24
=192.124.170/23
=192.124.172/22
=192.124.176/20
=192.124.192/20
=192.124.208/21
=192.124.216/22
=192.124.235/24
=192.124.237/24
=192.124.238/23
=192.124.240/22
=192.124.244/23
=192.124.247/24
=192.124.248/24
=192.124.250/23
=192.124.252/23
=192.124.254/24
=192.125/16
=192.126.1/24
=192.126.2/23
=192.126.4/22
=192.126.8/21
=192.126.16/20
=192.126.32/19
=192.126.64/24
=192.129.1/24
=192.129.2/23
=192.129.4/22
=192.129.8/21
=192.129.16/20
=192.129.32/20
=192.129.48/21
=192.129.56/22
=192.129.60/23
=192.129.80/24
=192.129.87/24
=192.129.98/24
=192.130/16
=192.131.20/24
=192.131.25/24
=192.131.26/24
=192.131.79/24
=192.131.89/24
=192.131.96/24
=192.131.108/24
=192.131.132/24
=192.132.9/24
=192.132.10/23
=192.132.34/24
=192.132.53/24
=192.132.55/24
=192.132.99/24
=192.132.239/24
=192.132.244/23
=192.132.252/24
=192.133.15/24
=192.133.28/24
=192.133.32/24
=192.133.36/24
=192.133.53/24
=192.133.54/23
=192.133.58/24
=192.133.64/24
=192.133.108/22
=192.133.121/24
=192.133.131/24
=192.133.244/24
=192.134/16
=192.135.7/24
=192.135.8/21
=192.135.16/20
=192.135.32/22
=192.135.36/23
=192.135.46/24
=192.135.51/24
=192.135.52/23
=192.135.63/24
=192.135.66/24
=192.135.68/24
=192.135.82/24
=192.135.100/24
=192.135.129/24
=192.135.133/24
=192.135.143/24
=192.135.145/24
=192.135.146/23
=192.135.148/22
=192.135.152/21
=192.135.160/21
=192.135.168/24
=192.135.175/24
=192.135.187/24
=192.135.219/24
=192.135.225/24
=192.135.231/24
=192.135.232/23
=192.135.234/24
=192.135.253/24
=192.135.254/24
=192.136.7/24
=192.136.9/24
=192.136.18/23
=192.136.23/24
=192.136.29/24
=192.136.30/23
=192.136.40/23
=192.136.49/24
=192.136.51/24
=192.136.52/24
=192.136.61/24
=192.136.71/24
=192.136.72/21
=192.136.80/20
=192.136.96/22
=192.136.100/23
=192.136.102/24
=192.136.154/23
=192.136.156/24
=192.138.1/24
=192.138.2/23
=192.138.4/22
=192.138.8/24
=192.138.86/24
=192.138.105/24
=192.138.106/23
=192.138.108/22
=192.138.112/22
=192.138.116/23
=192.138.155/24
=192.138.156/23
=192.138.158/24
=192.138.183/24
=192.138.192/24
=192.138.204/24
=192.138.228/22
=192.138.232/24
=192.138.248/24
=192.139.78/24
=192.140.2/23
=192.144/18
=192.144.74/23
=192.144.76/23
=192.145/17
=192.145.224/22
=192.146.117/24
=192.146.119/24
=192.146.123/24
=192.146.124/23
=192.146.126/24
=192.146.132/24
=192.146.134/23
=192.146.136/22
=192.146.140/23
=192.146.152/24
=192.146.163/24
=192.146.164/22
=192.146.168/23
=192.146.170/24
=192.146.172/22
=192.146.176/22
=192.146.180/23
=192.146.182/24
=192.146.185/24
=192.146.187/24
=192.146.193/24
=192.146.204/24
=192.146.227/24
=192.146.228/24
=192.146.233/24
=192.146.234/24
=192.146.238/23
=192.146.242/24
=192.147.23/24
=192.147.34/24
=192.147.36/24
=192.147.42/24
=192.147.76/22
=192.147.141/24
=192.147.150/24
=192.147.155/24
=192.147.212/24
=192.147.215/24
=192.147.216/23
=192.147.219/24
=192.147.228/24
=192.147.247/24
=192.147.251/24
=192.148.33/24
=192.148.34/23
=192.148.36/22
=192.148.40/21
=192.148.48/20
=192.148.64/20
=192.148.80/21
=192.148.88/22
=192.148.92/24
=192.148.103/24
=192.148.166/23
=192.148.177/24
=192.148.178/23
=192.148.180/22
=192.148.184/23
=192.148.186/24
=192.148.192/23
=192.148.194/24
=192.148.198/23
=192.148.200/21
=192.148.208/21
=192.148.216/24
=192.148.220/24
=192.149.3/24
=192.149.5/24
=192.149.15/24
=192.149.19/24
=192.149.27/24
=192.149.29/24
=192.149.30/23
=192.149.32/23
=192.149.35/24
=192.149.41/24
=192.149.57/24
=192.149.59/24
=192.149.60/24
=192.149.77/24
=192.149.78/23
=192.149.98/24
=192.149.100/24
=192.149.102/24
=192.149.110/23
=192.149.117/24
=192.149.118/23
=192.149.120/23
=192.149.126/24
=192.149.227/24
=192.149.232/24
=192.149.238/24
=192.150.20/24
=192.150.58/23
=192.150.60/22
=192.150.64/21
=192.150.72/24
=192.150.75/24
=192.150.76/24
=192.150.78/23
=192.150.80/22
=192.150.84/24
=192.150.89/24
=192.150.92/24
=192.150.94/24
=192.150.104/24
=192.150.106/24
=192.150.124/24
=192.150.140/24
=192.150.146/24
=192.150.177/24
=192.150.178/23
=192.150.180/22
=192.150.184/24
=192.150.188/23
=192.150.190/24
=192.150.192/22
=192.150.196/23
=192.150.198/24
=192.150.203/24
=192.150.204/23
=192.150.208/23
=192.150.223/24
=192.150.227/24
=192.150.228/22
=192.150.232/23
=192.150.238/24
=192.150.248/24
=192.150.252/24
=192.150.254/24
=192.152.6/24
=192.152.14/24
=192.152.17/24
=192.152.26/23
=192.152.42/24
=192.152.44/24
=192.152.47/24
=192.152.48/22
=192.152.54/24
=192.152.61/24
=192.152.62/23
=192.152.68/24
=192.152.82/24
=192.152.98/24
=192.152.111/24
=192.152.112/24
=192.152.122/24
=192.152.124/24
=192.152.141/24
=192.152.151/24
=192.152.156/24
=192.152.166/23
=192.152.174/24
=192.152.184/22
=192.152.241/24
=192.152.244/24
=192.152.253/24
=192.152.254/24
=192.153.2/23
=192.153.13/24
=192.153.18/23
=192.153.89/24
=192.153.116/24
=192.153.127/24
=192.153.153/24
=192.153.166/24
=192.153.168/24
=192.153.171/24
=192.153.173/24
=192.153.174/23
=192.153.176/22
=192.153.180/23
=192.153.182/24
=192.153.188/23
=192.153.194/24
=192.153.213/24
=192.155.1/24
=192.155.2/23
=192.155.4/23
=192.155.6/24
=192.156.132/24
=192.156.162/24
=192.156.167/24
=192.156.210/24
=192.156.213/24
=192.156.217/24
=192.156.227/24
=192.156.239/24
=192.156.248/24
=192.157.1/24
=192.157.2/23
=192.157.8/21
=192.157.16/23
=192.157.129/24
=192.157.165/24
=192.157.166/23
=192.157.168/22
=192.157.172/24
=192.157.174/24
=192.157.176/24
=192.157.185/24
=192.157.187/24
=192.157.189/24
=192.159.38/23
=192.159.70/24
=192.159.73/24
=192.159.77/24
=192.159.84/23
=192.159.90/24
=192.159.95/24
=192.159.99/24
=192.159.100/22
=192.159.105/24
=192.159.108/23
=192.159.118/24
=192.159.121/24
=192.159.122/24
=192.160.10/24
=192.160.15/24
=192.160.21/24
=192.160.22/23
=192.160.27/24
=192.160.33/24
=192.160.37/24
=192.160.65/24
=192.160.67/24
=192.160.95/24
=192.160.96/24
=192.160.106/24
=192.160.109/24
=192.160.110/24
=192.160.123/24
=192.160.126/24
=192.160.142/23
=192.160.152/24
=192.160.156/24
=192.160.160/24
=192.160.172/24
=192.160.177/24
=192.160.178/23
=192.160.194/23
=192.160.224/23
=192.160.231/24
=192.160.232/23
=192.160.245/24
=192.160.246/23
=192.160.248/23
=192.160.251/24
=192.160.252/24
=192.161.6/23
=192.161.64/23
=192.162/16
=192.163.32/19
=192.163.64/18
=192.163.128/19
=192.164/14
=192.171.1/24
=192.171.2/23
=192.171.4/23
=192.171.128/18
=192.171.192/21
=192.172.232/24
=192.172.253/24
=192.173.1/24
=192.173.2/23
=192.173.4/24
=192.173.128/21
=192.174.64/22
=192.174.68/24
=192.175.14/23
=192.175.32/20
=192.176/16
=192.187.16/21
=192.187.24/23
=192.188.10/24
=192.188.63/24
=192.188.64/23
=192.188.69/24
=192.188.96/24
=192.188.105/24
=192.188.116/23
=192.188.121/24
=192.188.122/24
=192.188.125/24
=192.188.127/24
=192.188.129/24
=192.188.132/24
=192.188.136/24
=192.188.145/24
=192.188.157/24
=192.188.158/24
=192.188.187/24
=192.188.189/24
=192.188.233/24
=192.188.234/23
=192.188.236/23
=192.188.242/23
=192.188.244/22
=192.188.248/24
=192.189.1/24
=192.189.8/22
=192.189.14/24
=192.189.23/24
=192.189.41/24
=192.189.51/24
=192.189.52/24
=192.189.55/24
=192.189.66/24
=192.189.69/24
=192.189.70/24
=192.189.73/24
=192.189.76/24
=192.189.119/24
=192.189.151/24
=192.189.154/24
=192.189.157/24
=192.189.160/24
=192.189.166/23
=192.189.168/23
=192.189.170/24
=192.189.202/23
=192.189.251/24
=192.190.44/24
=192.190.58/23
=192.190.64/24
=192.190.67/24
=192.190.69/24
=192.190.95/24
=192.190.129/24
=192.190.130/23
=192.190.132/24
=192.190.173/24
=192.190.174/24
=192.190.182/23
=192.190.190/23
=192.190.192/23
=192.190.201/24
=192.190.202/24
=192.190.233/24
=192.190.234/23
=192.190.236/24
=192.190.240/24
=192.190.242/24
=192.190.247/24
=192.190.248/23
=192.194/16
=192.195.1/24
=192.195.8/24
=192.195.42/23
=192.195.72/24
=192.195.98/24
=192.195.105/24
=192.195.106/24
=192.195.110/24
=192.195.116/23
=192.195.118/24
=192.195.134/23
=192.195.136/21
=192.195.144/22
=192.195.148/24
=192.195.183/24
=192.195.184/24
=192.195.195/24
=192.195.236/24
=192.196.1/24
=192.196.2/23
=192.196.4/22
=192.196.8/21
=192.196.16/20
=192.196.32/19
=192.196.64/18
=192.196.128/20
=192.196.144/21
=192.196.152/22
=192.199.16/20
=192.203.80/24
=192.203.108/23
=192.203.227/24
=192.206.77/24
=192.206.78/23
=192.206.80/23
=192.206.86/24
=192.206.222/23
=192.206.224/23
=192.206.226/24
=192.207.14/24
=192.207.31/24
=192.207.141/24
=192.207.142/24
=192.207.196/24
=192.231.67/24
=192.231.82/24
=192.238.1/24
=192.238.2/23
=192.238.4/22
=192.238.8/23
=192.238.10/24
=192.245.152/24
=192.245.169/24
=192.245.225/24
=192.247.1/24
=192.247.2/23
=192.247.4/22
=192.247.8/23
=192.247.10/24
=192.251.61/24
=192.251.62/23
=192.251.64/23
=192.251.226/24
=192.251.230/24
=193/12
=193.16/16
=193.17/17
=193.17.128/18
=193.17.192/20
=193.17.208/22
=193.17.212/23
=193.17.214/24
=193.17.216/21
=193.17.224/19
=193.18/16
=193.19/17
=193.19.128/18
=193.19.192/19
=193.19.224/21
=193.19.236/22
=193.19.240/20
=193.20/14
=193.24/13
=193.32/13
=193.40/16
=193.41/17
=193.41.128/20
=193.41.144/23
=193.41.148/22
=193.41.152/21
=193.41.160/19
=193.41.192/18
=193.42/15
=193.44/14
=193.48/12
=193.64/12
=193.80/15
=193.82/18
=193.82.96/19
=193.82.128/18
=193.82.192/19
=193.83/16
=193.84/14
=193.88/14
=193.92/15
=193.94/16
=193.95.128/17
=193.96/13
=193.104/14
=193.108/20
=193.108.16/22
=193.108.20/23
=193.108.22/24
=193.108.24/22
=193.108.29/24
=193.108.30/23
=193.108.32/19
=193.108.64/18
=193.108.128/18
=193.108.192/20
=193.108.208/22
=193.108.212/23
=193.108.215/24
=193.108.216/21
=193.108.224/20
=193.108.240/21
=193.108.248/22
=193.109/18
=193.109.64/23
=193.109.68/22
=193.109.72/21
=193.109.80/20
=193.109.96/19
=193.109.128/17
=193.110/18
=193.110.64/19
=193.110.96/21
=193.110.106/23
=193.110.108/22
=193.110.112/20
=193.110.128/17
=193.111/16
=193.113/16
=193.114.32/19
=193.114.64/19
=193.114.160/19
=193.114.192/18
=193.115/19
=193.115.128/17
=193.116/19
=193.116.128/18
=193.117/18
=193.117.96/19
=193.117.128/17
=193.118/16
=193.119.128/17
=193.120/15
=193.124/14
=193.128/11
=193.160/12
=193.176/13
=193.184/14
=193.188/22
=193.188.4/23
=193.188.6/24
=193.188.8/21
=193.188.16/20
=193.188.32/19
=193.188.64/18
=193.188.128/17
=193.189.66/23
=193.189.68/22
=193.189.72/21
=193.189.80/20
=193.189.96/19
=193.189.129/24
=193.189.130/23
=193.189.132/22
=193.189.136/21
=193.189.144/20
=193.189.160/19
=193.189.192/18
=193.190/15
=193.192/15
=193.194/24
=193.194.6/23
=193.194.8/21
=193.194.16/20
=193.194.96/19
=193.194.129/24
=193.194.130/23
=193.194.132/22
=193.194.136/21
=193.194.144/20
=193.194.192/18
=193.195/16
=193.196/14
=193.200/13
=193.208/13
=193.216/14
=193.220/16
=193.221/17
=193.221.128/18
=193.221.192/20
=193.221.208/21
=193.221.216/23
=193.221.219/24
=193.221.220/22
=193.221.224/19
=193.222/15
=193.224/15
=193.226/16
=193.227.64/18
=193.227.129/24
=193.227.130/23
=193.227.132/22
=193.227.136/21
=193.227.144/20
=193.227.160/19
=193.227.192/18
=193.228/14
=193.232/13
=193.240/12
=194/14
=194.4/15
=194.6/17
=194.6.128/18
=194.6.192/19
=194.6.225/24
=194.6.226/23
=194.6.228/22
=194.6.232/21
=194.6.240/20
=194.7/16
=194.8/16
=194.9/18
=194.9.66/23
=194.9.68/22
=194.9.72/21
=194.9.80/23
=194.9.84/22
=194.9.88/21
=194.9.96/19
=194.9.128/17
=194.10/15
=194.12/14
=194.16/12
=194.32/15
=194.34/16
=194.35/17
=194.35.128/19
=194.35.160/20
=194.35.176/21
=194.35.184/22
=194.35.188/23
=194.35.190/24
=194.35.192/18
=194.36/14
=194.40/13
=194.48/12
=194.64/13
=194.72/14
=194.76/15
=194.78/16
=194.79/18
=194.79.64/19
=194.79.128/17
=194.80/13
=194.88/15
=194.90/16
=194.92/14
=194.96/11
=194.128/10
=194.192/16
=194.193/19
=194.193.64/18
=194.193.224/19
=194.194/15
=194.196/14
=194.200/14
=194.204/17
=194.204.128/18
=194.205/16
=194.206/15
=194.208/13
=194.216/14
=194.220/15
=194.222/16
=194.223.96/19
=194.223.128/19
=194.223.192/18
=194.224/11
=195/12
=195.16/13
=195.24/18
=195.24.64/20
=195.24.88/21
=195.24.96/19
=195.24.128/18
=195.24.224/19
=195.25/16
=195.26/15
=195.28/14
=195.32/14
=195.36/15
=195.38/16
=195.39/17
=195.39.128/18
=195.39.192/20
=195.39.208/21
=195.39.216/23
=195.39.220/22
=195.39.224/19
=195.40/15
=195.42/16
=195.43.32/19
=195.43.64/18
=195.43.128/17
=195.44/14
=195.48/12
=195.64/10
=195.128/22
=195.128.8/21
=195.128.16/20
=195.128.32/19
=195.128.64/18
=195.128.128/17
=195.129/16
=195.130/15
=195.132/14
=195.136/13
=195.144/12
=195.160/14
=195.164/15
=195.166/17
=195.166.128/18
=195.166.192/19
=195.167/17
=195.167.128/19
=195.167.176/20
=195.167.192/18
=195.168/13
=195.176/12
=195.192/13
=195.200/15
=195.202/18
=195.202.96/19
=195.202.128/17
=195.203/16
=195.204/14
=195.208/12
=195.224/13
=195.232/15
=195.234/18
=195.234.64/19
=195.234.96/20
=195.234.112/21
=195.234.124/22
=195.234.128/19
=195.234.160/21
=195.234.169/24
=195.234.170/23
=195.234.172/22
=195.234.176/21
=195.234.184/24
=195.234.186/23
=195.234.188/22
=195.234.192/19
=195.234.224/20
=195.234.240/21
=195.234.248/22
=195.235/16
=195.236/14
=195.240/14
=195.244/15
=195.246/19
=195.246.64/18
=195.246.128/17
=195.247/16
=195.248/13
=196.1.3/24
=196.1.5/24
=196.1.6/24
=196.1.64/22
=196.1.69/24
=196.1.70/24
=196.2.4/22
=196.3.66/23
=196.3.68/22
=196.3.91/24
=196.15.32/19
=198.11/22
=198.17.77/24
=198.17.117/24
=198.17.180/23
=198.17.182/24
=198.22.51/24
=198.22.93/24
=198.22.94/23
=198.22.96/23
=198.36.32/21
=198.36.40/22
=198.36.44/23
=198.36.46/24
=198.45.116/22
=198.51.12/24
=198.51.143/24
=198.51.144/23
=198.51.146/24
=198.52.44/22
=198.55.28/22
=198.89.88/21
=198.99.148/24
=198.99.222/24
=198.105.96/19
=198.133.80/22
=198.133.84/23
=198.133.140/24
=198.133.206/24
=198.133.226/24
=198.135.137/24
=198.135.138/24
=198.135.167/24
=198.147.160/24
=198.148.177/24
=198.148.178/24
=198.180.150/23
=198.180.152/23
=198.206.197/24
=198.206.200/23
=198.206.202/24
=198.240.128/17
=199.43.246/23
=199.48.230/23
=199.53/16
=199.88.208/21
=199.91.16/20
=199.103.8/22
=199.103.12/24
=199.247/19
=199.247.56/21
=199.250.128/19
=202.0.77/24
=203.159.80/20
=203.190.56/21
=204.11/22
=204.18/16
=204.48.32/23
=204.225.218/24
=205.201.55/24
=205.211.83/24
=205.220.216/23
=206.167.33/24
=206.190.220/22
=206.195.32/19
=206.252.224/19
=207.89.64/18
=207.150.160/19
=207.174.216/22
=207.178.64/19
=207.180.192/18
=207.189.192/20
=207.229.112/22
=207.229.116/24
=207.229.118/23
=207.229.120/24
=207.229.122/23
=207.229.124/22
=208.82.72/22
=209.42/19
=209.42.192/18
=209.162.128/19
=209.206/19
=209.206.38/23
=209.213.48/20
=209.250.224/19
=209.251.195/24
=209.251.196/23
=209.251.252/23
=212/17
=212.0.160/19
=212.0.192/18
=212.1/16
=212.2/15
=212.4/14
=212.8/17
=212.8.128/18
=212.8.192/19
=212.8.224/22
=212.8.228/23
=212.8.232/21
=212.8.240/24
=212.8.242/23
=212.8.244/22
=212.8.248/22
=212.8.252/23
=212.9/16
=212.10/15
=212.12/17
=212.12.128/18
=212.12.192/19
=212.13/16
=212.14/15
=212.16/14
=212.20/15
=212.22/17
=212.22.128/19
=212.22.192/18
=212.23/16
=212.24/13
=212.32/12
=212.48/16
=212.49/18
=212.49.96/19
=212.49.128/17
=212.50/15
=212.52/17
=212.52.160/19
=212.52.192/18
=212.53/16
=212.54/15
=212.56/14
=212.60/18
=212.60.96/19
=212.60.128/17
=212.61/16
=212.62/15
=212.64.128/17
=212.65/16
=212.66/15
=212.68/16
=212.69/17
=212.69.128/20
=212.69.160/19
=212.69.192/18
=212.70/15
=212.72/13
=212.80/14
=212.84/16
=212.85/17
=212.85.128/18
=212.85.224/19
=212.86/15
=212.88/18
=212.88.64/19
=212.88.128/17
=212.89/16
=212.90/15
=212.92/18
=212.92.64/19
=212.92.96/22
=212.92.100/23
=212.92.104/21
=212.92.112/20
=212.92.128/17
=212.93/16
=212.94/16
=212.95/17
=212.95.160/19
=212.95.192/18
=212.96.32/19
=212.96.64/18
=212.96.128/17
=212.97/16
=212.98/15
=212.100/18
=212.100.96/19
=212.100.128/17
=212.101/16
=212.102/16
=212.103/17
=212.103.128/19
=212.103.192/18
=212.104/13
=212.112/14
=212.116/16
=212.117/19
=212.117.32/20
=212.117.64/18
=212.117.128/17
=212.118/15
=212.120/15
=212.122/17
=212.122.128/18
=212.122.192/19
=212.123/16
=212.124/14
=212.128/16
=212.129/17
=212.130/15
=212.132/14
=212.136/13
=212.144/12
=212.160/11
=212.192/12
=212.208/13
=212.216/16
=212.217.128/17
=212.218/15
=212.220/14
=212.224/11
=213/11
=213.32/12
=213.48/14
=213.52/15
=213.54/16
=213.55/18
=213.55.128/17
=213.56/13
=213.64/10
=213.128/15
=213.130/16
=213.131/18
=213.131.96/19
=213.131.128/17
=213.132/14
=213.136/18
=213.136.64/19
=213.136.128/17
=213.137/16
=213.138/15
=213.140/14
=213.144/15
=213.146/16
=213.147/18
=213.147.96/19
=213.147.128/17
=213.148/15
=213.150/18
=213.150.64/19
=213.150.128/19
=213.150.224/19
=213.151/16
=213.152/18
=213.152.96/19
=213.152.128/17
=213.153/16
=213.154/19
=213.154.96/19
=213.154.128/17
=213.155/16
=213.156/15
=213.158/17
=213.158.128/19
=213.158.192/18
=213.159/21
=213.159.8/22
=213.159.12/23
=213.159.16/20
=213.159.32/19
=213.159.64/18
=213.159.128/22
=213.159.136/21
=213.159.144/20
=213.159.160/19
=213.159.192/18
=213.160/13
=213.168/14
=213.172/17
=213.172.160/19
=213.172.192/18
=213.173/16
=213.174/15
=213.176/15
=213.178/16
=213.179/17
=213.179.128/19
=213.179.192/18
=213.180/16
=213.181/17
=213.181.128/18
=213.181.192/19
=213.182/15
=213.184/13
=213.192/16
=213.193/19
=213.193.64/18
=213.193.128/17
=213.194/15
=213.196/14
=213.200/13
=213.208/14
=213.212/17
=213.212.128/18
=213.213/16
=213.214/15
=213.216/13
=213.224/12
=213.240/14
=213.244/15
=213.246/16
=213.247.32/19
=213.247.64/18
=213.247.128/17
=213.248/14
=213.252/15
=213.254/16
=213.255/17
=213.255.160/19
=213.255.192/18
=216.46.124/23
=216.99.222/24
=216.158.96/20
=216.172.64/20
=216.213.128/18
=216.241.128/19
=217/13
=217.8/14
=217.12/15
=217.14/18
=217.14.64/20
=217.14.96/19
=217.14.128/17
=217.15/16
=217.16/14
=217.20/17
=217.20.128/18
=217.20.192/19
=217.20.240/20
=217.21/18
=217.21.64/19
=217.21.96/20
=217.21.128/17
=217.22/15
=217.24/14
=217.28/16
=217.29/17
=217.29.144/20
=217.29.160/19
=217.29.192/20
=217.29.224/19
=217.30/15
=217.32/12
=217.48/14
=217.56/13
=217.64/18
=217.64.64/19
=217.64.112/20
=217.64.128/17
=217.65/16
=217.66/15
=217.68/14
=217.72/14
=217.76/16
=217.77/18
=217.77.80/20
=217.77.96/19
=217.77.128/17
=217.78/18
=217.78.80/20
=217.78.96/19
=217.78.128/17
=217.79/16
=217.80/12
=217.96/12
=217.112/14
=217.116/16
=217.117.16/20
=217.117.32/19
=217.117.64/18
=217.117.128/17
=217.118/15
=217.120/13
=217.128/13
=217.136/15
=217.138/16
=217.140/14
=217.144/15
=217.146/16
=217.147/17
=217.147.128/19
=217.147.160/20
=217.147.176/21
=217.147.192/18
=217.148/14
=217.152/13
=217.160/13
=217.168/15
=217.170/17
=217.170.128/20
=217.170.160/19
=217.170.192/18
=217.171/16
=217.172/14
=217.176/15
=217.179/16
=217.180/14
=217.184/13
=217.192/14
=217.196/15
=217.198/16
=217.199/17
=217.199.128/20
=217.199.160/19
=217.199.192/18
=217.200/13
=217.208/12
=217.224/11
=220.158.196/22
/trunk/main/pattern/ipv6
0,0 → 1,83
#: version 20120626.1.2+viathinksoft2017XXXX
 
# IPv6
# --------------------------------------------------------------------
 
# 6Bone v6
# "The 6bone was an IPv6 testbed to assist in the evolution and deployment of IPv6. It was phased out on the 6th of June 2006 per agreements with the IETF IPv6 community.
# No 3FFE prefixes are to be in use after 6 June 2006 as these 6bone testbed prefixes have all been returned to the IANA."
# -- Source: http://www.gogo6.com/page/6bone
#:whois|whois.6bone.net
#^3ffe:
#=3ffe::/16
 
:whois|whois.viathinksoft.de
=2001:1af8:4700:a07e:1::/112
 
# RIRs
 
# ==> See pattern/ipv6_* (automatically generated)
 
# IANA
:whois|whois.iana.org
# TODO: prüfen ob das alles von http://www.iana.org/assignments/iana-ipv6-special-registry/iana-ipv6-special-registry.xml abdeckt
=2001::/23
# www.iana.org/assignments/ipv6-unicast-address-assignments/ipv6-unicast-address-assignments.xml
# The assignable Global Unicast Address space is defined in RFC4291 as being the address block defined by the
# prefix 2000::/3. All address space in this block not listed in the table below is reserved by IANA for
# future allocation.
=2000::/3
# http://www.iana.org/assignments/ipv6-multicast-addresses/ipv6-multicast-addresses.xml
# IPv6 multicast addresses are distinguished from unicast addresses by the
# value of the high-order octet of the addresses: a value of 0xFF (binary
# 11111111) identifies an address as a multicast address; any other value
# identifies an address as a unicast address.
=FF00::/8
 
# TEREDO
# (IANA won't give any useful information in their whois)
# We are providing a very nice and useful decoding of the TEREDO address
:program|$gwhois$/subprograms/teredo_decoder
# defined prefix in RFC 4380
=2001::/32
# deprecated (used in WinXP/2003 without Microsoft Security Bulletin MS06-064)
=3ffe:831f::/32
 
# 6to4
:program|$gwhois$/subprograms/6to4_decoder
=2002::/16
 
:whois|whois.iana.org
# Not specified address
::/128
# Loopback
::1/128
# Link Local
fe80::/10
# Site Local Unicast (deprecated)
fec0::/10
# Unique Local Unicast
fc00::/7
# Multicast
ff00::/8
# IPv4 compatibility (deprecated)
::/96
# IPv4 mapped
0:0:0:0:0:ffff::/96
# Documentation purposes
2001:db8::/32
# NAT64 (RFC 6146)
64:ff9b::/96
 
# --- Private enterprises which offer a whois service
 
# ViaThinkSoft
:whois|whois.viathinksoft.de
=2001:1af8:4100:a061:1::/112
 
# ---
 
# other v6, try arin
:whois|whois.arin.net|prefix=z + |
#.:
=0::/0
/trunk/main/pattern/ipv6_afrinic
0,0 → 1,11
#: version 20190429
 
# AFRINIC IPv6
# Automatically generated by /daten/homes/vwhois/v2019/maintenance/pattern-generator/gwhois-pattern-update
# Generation timestamp: 2019-04-29 13:41:13 GMT+0200
# Source: (20190312) ftp://ftp.iana.org/assignments/ipv6-unicast-address-assignments/ipv6-unicast-address-assignments.txt
# Source: (20190429) ftp://ftp.afrinic.net/pub/stats/afrinic/delegated-afrinic-extended-latest
 
:whois|whois.afrinic.net
=2001:4200::/23
=2c00::/12
/trunk/main/pattern/ipv6_apnic
0,0 → 1,15
#: version 20190428
 
# APNIC IPv6
# Automatically generated by /daten/homes/vwhois/v2019/maintenance/pattern-generator/gwhois-pattern-update
# Generation timestamp: 2019-04-29 13:41:14 GMT+0200
# Source: (20190312) ftp://ftp.iana.org/assignments/ipv6-unicast-address-assignments/ipv6-unicast-address-assignments.txt
# Source: (20190428) ftp://ftp.apnic.net/pub/stats/apnic/delegated-apnic-extended-latest
 
:whois|whois.apnic.net
=2001:200::/23
=2001:7fa::/32
=2001:c00::/22
=2001:4400::/23
=2001:8000::/18
=2400::/12
/trunk/main/pattern/ipv6_arin
0,0 → 1,15
#: version 20190429
 
# ARIN IPv6
# Automatically generated by /daten/homes/vwhois/v2019/maintenance/pattern-generator/gwhois-pattern-update
# Generation timestamp: 2019-04-29 13:41:19 GMT+0200
# Source: (20190312) ftp://ftp.iana.org/assignments/ipv6-unicast-address-assignments/ipv6-unicast-address-assignments.txt
# Source: (20190429) ftp://ftp.arin.net/pub/stats/arin/delegated-arin-extended-latest
 
:whois|whois.arin.net|prefix=n + |
=2001:400::/23
=2001:1800::/23
=2001:4800::/23
=2600::/12
=2610::/23
=2620::/23
/trunk/main/pattern/ipv6_lacnic
0,0 → 1,11
#: version 20190426
 
# LACNIC IPv6
# Automatically generated by /daten/homes/vwhois/v2019/maintenance/pattern-generator/gwhois-pattern-update
# Generation timestamp: 2019-04-29 13:41:25 GMT+0200
# Source: (20190312) ftp://ftp.iana.org/assignments/ipv6-unicast-address-assignments/ipv6-unicast-address-assignments.txt
# Source: (20190426) ftp://ftp.lacnic.net/pub/stats/lacnic/delegated-lacnic-extended-latest
 
:whois|whois.lacnic.net
=2001:1200::/23
=2800::/12
/trunk/main/pattern/ipv6_ripencc
0,0 → 1,23
#: version 20190428
 
# RIPENCC IPv6
# Automatically generated by /daten/homes/vwhois/v2019/maintenance/pattern-generator/gwhois-pattern-update
# Generation timestamp: 2019-04-29 13:41:30 GMT+0200
# Source: (20190312) ftp://ftp.iana.org/assignments/ipv6-unicast-address-assignments/ipv6-unicast-address-assignments.txt
# Source: (20190428) ftp://ftp.ripe.net/pub/stats/ripencc/delegated-ripencc-extended-latest
 
:whois|whois.ripe.net|prefix=-B |
=2001:5::/32
=2001:600::/23
=2001:800::/22
=2001:1400::/22
=2001:1a00::/23
=2001:1c00::/22
=2001:2000::/19
=2001:4000::/23
=2001:4600::/23
=2001:4a00::/23
=2001:4c00::/23
=2001:5000::/20
=2003::/18
=2a00::/12
/trunk/main/pattern/oid
0,0 → 1,15
#: version 20190311
 
# Special: OIDs
# There will be soon a RFC by Daniel Marschall, which will define how information about an OID can be queried over a whois service
# Generally, you can query a whois server with "oid:.2.999" or "oid:2.999"
# The whois servers should do referal whois redirects
# --------------------------------------------------------------------
 
#:cgi|https://oidplus.viathinksoft.com/oidplus/whois/webwhois.php?query=oid:~oid~
:whois|whois.viathinksoft.de
oid:.1.3.6.1.4.1.37476
 
# Last resort for OIDs. If no more specific OID can be found, query a repository.
:program|$gwhois$/subprograms/oid
oid:.
/trunk/main/pattern/redirect
0,0 → 1,11
#: version 20120626.1.2+viathinksoft2017XXXX
 
 
# Redirect-Targets (for specifying query modifiers)
# --------------------------------------------------------------------
# Verbose output for RIPE
:whois|whois.ripe.net|prefix=-B |
redirect:whois.ripe.net
 
:none||
^redirect:
/trunk/main/pattern/tld
0,0 → 1,19
#: version 20190429
 
# TLDs
# Automatically generated by /daten/homes/vwhois/v2019/maintenance/pattern-generator/gwhois-pattern-update
# Generation timestamp: 2019-04-29 13:54:45 GMT+0200
 
# Source: (20190410) https://whois.viathinksoft.de/iana-utils/tld-watcher/tld_deleted_list.php
 
:notice||Disallocated by IANA
^(tld\s){0,1}(UM|YU|BU|CS|DD|ZR|XN--0ZWM56D|XN--11B5BS3A9AJ6G|XN--80AKHBYKNJ4F|XN--9T4B11YI5A|XN--DEBA0AD|XN--G6W251D|XN--HGBK6AJ7F53BBA|XN--HLCJ6AYA9ESC7A|XN--JXALPDLP|XN--KGBECHTV|XN--ZCKZAH|TP|AN|DOOSAN|FLSMIDTH|IINET|MUTUELLE|ORIENTEXPRESS|MTPC|MCD|MCDONALDS|MONTBLANC|PAMPEREDCHEF|CHLOE|HTC|BOOTS|MEO|SAPO|IWC|XPERIA|TELECITY|VISTA|JLC|PANERAI|GOODHANDS|STATOIL|SPIEGEL|BLANCO|EPOST|ZIPPO|ACTIVE|DOHA)$
 
# Source: (20190429) https://data.iana.org/TLD/tlds-alpha-by-domain.txt
 
:whois|whois.iana.org
^(AAA|AARP|ABARTH|ABB|ABBOTT|ABBVIE|ABC|ABLE|ABOGADO|ABUDHABI|AC|ACADEMY|ACCENTURE|ACCOUNTANT|ACCOUNTANTS|ACO|ACTOR|AD|ADAC|ADS|ADULT|AE|AEG|AERO|AETNA|AF|AFAMILYCOMPANY|AFL|AFRICA|AG|AGAKHAN|AGENCY|AI|AIG|AIGO|AIRBUS|AIRFORCE|AIRTEL|AKDN|AL|ALFAROMEO|ALIBABA|ALIPAY|ALLFINANZ|ALLSTATE|ALLY|ALSACE|ALSTOM|AM|AMERICANEXPRESS|AMERICANFAMILY|AMEX|AMFAM|AMICA|AMSTERDAM|ANALYTICS|ANDROID|ANQUAN|ANZ|AO|AOL|APARTMENTS|APP|APPLE|AQ|AQUARELLE|AR|ARAB|ARAMCO|ARCHI|ARMY|ARPA|ART|ARTE|AS|ASDA|ASIA|ASSOCIATES|AT|ATHLETA|ATTORNEY|AU|AUCTION|AUDI|AUDIBLE|AUDIO|AUSPOST|AUTHOR|AUTO|AUTOS|AVIANCA|AW|AWS|AX|AXA|AZ|AZURE|BA|BABY|BAIDU|BANAMEX|BANANAREPUBLIC|BAND|BANK|BAR|BARCELONA|BARCLAYCARD|BARCLAYS|BAREFOOT|BARGAINS|BASEBALL|BASKETBALL|BAUHAUS|BAYERN|BB|BBC|BBT|BBVA|BCG|BCN|BD|BE|BEATS|BEAUTY|BEER|BENTLEY|BERLIN|BEST|BESTBUY|BET|BF|BG|BH|BHARTI|BI|BIBLE|BID|BIKE|BING|BINGO|BIO|BIZ|BJ|BLACK|BLACKFRIDAY|BLOCKBUSTER|BLOG|BLOOMBERG|BLUE|BM|BMS|BMW|BN|BNL|BNPPARIBAS|BO|BOATS|BOEHRINGER|BOFA|BOM|BOND|BOO|BOOK|BOOKING|BOSCH|BOSTIK|BOSTON|BOT|BOUTIQUE|BOX|BR|BRADESCO|BRIDGESTONE|BROADWAY|BROKER|BROTHER|BRUSSELS|BS|BT|BUDAPEST|BUGATTI|BUILD|BUILDERS|BUSINESS|BUY|BUZZ|BV|BW|BY|BZ|BZH|CA|CAB|CAFE|CAL|CALL|CALVINKLEIN|CAM|CAMERA|CAMP|CANCERRESEARCH|CANON|CAPETOWN|CAPITAL|CAPITALONE|CAR|CARAVAN|CARDS|CARE|CAREER|CAREERS|CARS|CARTIER|CASA|CASE|CASEIH|CASH|CASINO|CAT|CATERING|CATHOLIC|CBA|CBN|CBRE|CBS|CC|CD|CEB|CENTER|CEO|CERN|CF|CFA|CFD|CG|CH|CHANEL|CHANNEL|CHARITY|CHASE|CHAT|CHEAP|CHINTAI|CHRISTMAS|CHROME|CHRYSLER|CHURCH|CI|CIPRIANI|CIRCLE|CISCO|CITADEL|CITI|CITIC|CITY|CITYEATS|CK|CL|CLAIMS|CLEANING|CLICK|CLINIC|CLINIQUE|CLOTHING|CLOUD|CLUB|CLUBMED|CM|CN|CO|COACH|CODES|COFFEE|COLLEGE|COLOGNE|COM|COMCAST|COMMBANK|COMMUNITY|COMPANY|COMPARE|COMPUTER|COMSEC|CONDOS|CONSTRUCTION|CONSULTING|CONTACT|CONTRACTORS|COOKING|COOKINGCHANNEL|COOL|COOP|CORSICA|COUNTRY|COUPON|COUPONS|COURSES|CR|CREDIT|CREDITCARD|CREDITUNION|CRICKET|CROWN|CRS|CRUISE|CRUISES|CSC|CU|CUISINELLA|CV|CW|CX|CY|CYMRU|CYOU|CZ|DABUR|DAD|DANCE|DATA|DATE|DATING|DATSUN|DAY|DCLK|DDS|DE|DEAL|DEALER|DEALS|DEGREE|DELIVERY|DELL|DELOITTE|DELTA|DEMOCRAT|DENTAL|DENTIST|DESI|DESIGN|DEV|DHL|DIAMONDS|DIET|DIGITAL|DIRECT|DIRECTORY|DISCOUNT|DISCOVER|DISH|DIY|DJ|DK|DM|DNP|DO|DOCS|DOCTOR|DODGE|DOG|DOMAINS|DOT|DOWNLOAD|DRIVE|DTV|DUBAI|DUCK|DUNLOP|DUNS|DUPONT|DURBAN|DVAG|DVR|DZ|EARTH|EAT|EC|ECO|EDEKA|EDU|EDUCATION|EE|EG|EMAIL|EMERCK|ENERGY|ENGINEER|ENGINEERING|ENTERPRISES|EPSON|EQUIPMENT|ER|ERICSSON|ERNI|ES|ESQ|ESTATE|ESURANCE|ET|ETISALAT|EU|EUROVISION|EUS|EVENTS|EVERBANK|EXCHANGE|EXPERT|EXPOSED|EXPRESS|EXTRASPACE|FAGE|FAIL|FAIRWINDS|FAITH|FAMILY|FAN|FANS|FARM|FARMERS|FASHION|FAST|FEDEX|FEEDBACK|FERRARI|FERRERO|FI|FIAT|FIDELITY|FIDO|FILM|FINAL|FINANCE|FINANCIAL|FIRE|FIRESTONE|FIRMDALE|FISH|FISHING|FIT|FITNESS|FJ|FK|FLICKR|FLIGHTS|FLIR|FLORIST|FLOWERS|FLY|FM|FO|FOO|FOOD|FOODNETWORK|FOOTBALL|FORD|FOREX|FORSALE|FORUM|FOUNDATION|FOX|FR|FREE|FRESENIUS|FRL|FROGANS|FRONTDOOR|FRONTIER|FTR|FUJITSU|FUJIXEROX|FUN|FUND|FURNITURE|FUTBOL|FYI|GA|GAL|GALLERY|GALLO|GALLUP|GAME|GAMES|GAP|GARDEN|GB|GBIZ|GD|GDN|GE|GEA|GENT|GENTING|GEORGE|GF|GG|GGEE|GH|GI|GIFT|GIFTS|GIVES|GIVING|GL|GLADE|GLASS|GLE|GLOBAL|GLOBO|GM|GMAIL|GMBH|GMO|GMX|GN|GODADDY|GOLD|GOLDPOINT|GOLF|GOO|GOODYEAR|GOOG|GOOGLE|GOP|GOT|GOV|GP|GQ|GR|GRAINGER|GRAPHICS|GRATIS|GREEN|GRIPE|GROCERY|GROUP|GS|GT|GU|GUARDIAN|GUCCI|GUGE|GUIDE|GUITARS|GURU|GW|GY|HAIR|HAMBURG|HANGOUT|HAUS|HBO|HDFC|HDFCBANK|HEALTH|HEALTHCARE|HELP|HELSINKI|HERE|HERMES|HGTV|HIPHOP|HISAMITSU|HITACHI|HIV|HK|HKT|HM|HN|HOCKEY|HOLDINGS|HOLIDAY|HOMEDEPOT|HOMEGOODS|HOMES|HOMESENSE|HONDA|HONEYWELL|HORSE|HOSPITAL|HOST|HOSTING|HOT|HOTELES|HOTELS|HOTMAIL|HOUSE|HOW|HR|HSBC|HT|HU|HUGHES|HYATT|HYUNDAI|IBM|ICBC|ICE|ICU|ID|IE|IEEE|IFM|IKANO|IL|IM|IMAMAT|IMDB|IMMO|IMMOBILIEN|IN|INC|INDUSTRIES|INFINITI|INFO|ING|INK|INSTITUTE|INSURANCE|INSURE|INT|INTEL|INTERNATIONAL|INTUIT|INVESTMENTS|IO|IPIRANGA|IQ|IR|IRISH|IS|ISELECT|ISMAILI|IST|ISTANBUL|IT|ITAU|ITV|IVECO|JAGUAR|JAVA|JCB|JCP|JE|JEEP|JETZT|JEWELRY|JIO|JLL|JM|JMP|JNJ|JO|JOBS|JOBURG|JOT|JOY|JP|JPMORGAN|JPRS|JUEGOS|JUNIPER|KAUFEN|KDDI|KE|KERRYHOTELS|KERRYLOGISTICS|KERRYPROPERTIES|KFH|KG|KH|KI|KIA|KIM|KINDER|KINDLE|KITCHEN|KIWI|KM|KN|KOELN|KOMATSU|KOSHER|KP|KPMG|KPN|KR|KRD|KRED|KUOKGROUP|KW|KY|KYOTO|KZ|LA|LACAIXA|LADBROKES|LAMBORGHINI|LAMER|LANCASTER|LANCIA|LANCOME|LAND|LANDROVER|LANXESS|LASALLE|LAT|LATINO|LATROBE|LAW|LAWYER|LB|LC|LDS|LEASE|LECLERC|LEFRAK|LEGAL|LEGO|LEXUS|LGBT|LI|LIAISON|LIDL|LIFE|LIFEINSURANCE|LIFESTYLE|LIGHTING|LIKE|LILLY|LIMITED|LIMO|LINCOLN|LINDE|LINK|LIPSY|LIVE|LIVING|LIXIL|LK|LLC|LOAN|LOANS|LOCKER|LOCUS|LOFT|LOL|LONDON|LOTTE|LOTTO|LOVE|LPL|LPLFINANCIAL|LR|LS|LT|LTD|LTDA|LU|LUNDBECK|LUPIN|LUXE|LUXURY|LV|LY|MA|MACYS|MADRID|MAIF|MAISON|MAKEUP|MAN|MANAGEMENT|MANGO|MAP|MARKET|MARKETING|MARKETS|MARRIOTT|MARSHALLS|MASERATI|MATTEL|MBA|MC|MCKINSEY|MD|ME|MED|MEDIA|MEET|MELBOURNE|MEME|MEMORIAL|MEN|MENU|MERCKMSD|METLIFE|MG|MH|MIAMI|MICROSOFT|MIL|MINI|MINT|MIT|MITSUBISHI|MK|ML|MLB|MLS|MM|MMA|MN|MO|MOBI|MOBILE|MOBILY|MODA|MOE|MOI|MOM|MONASH|MONEY|MONSTER|MOPAR|MORMON|MORTGAGE|MOSCOW|MOTO|MOTORCYCLES|MOV|MOVIE|MOVISTAR|MP|MQ|MR|MS|MSD|MT|MTN|MTR|MU|MUSEUM|MUTUAL|MV|MW|MX|MY|MZ|NA|NAB|NADEX|NAGOYA|NAME|NATIONWIDE|NATURA|NAVY|NBA|NC|NE|NEC|NET|NETBANK|NETFLIX|NETWORK|NEUSTAR|NEW|NEWHOLLAND|NEWS|NEXT|NEXTDIRECT|NEXUS|NF|NFL|NG|NGO|NHK|NI|NICO|NIKE|NIKON|NINJA|NISSAN|NISSAY|NL|NO|NOKIA|NORTHWESTERNMUTUAL|NORTON|NOW|NOWRUZ|NOWTV|NP|NR|NRA|NRW|NTT|NU|NYC|NZ|OBI|OBSERVER|OFF|OFFICE|OKINAWA|OLAYAN|OLAYANGROUP|OLDNAVY|OLLO|OM|OMEGA|ONE|ONG|ONL|ONLINE|ONYOURSIDE|OOO|OPEN|ORACLE|ORANGE|ORG|ORGANIC|ORIGINS|OSAKA|OTSUKA|OTT|OVH|PA|PAGE|PANASONIC|PARIS|PARS|PARTNERS|PARTS|PARTY|PASSAGENS|PAY|PCCW|PE|PET|PF|PFIZER|PG|PH|PHARMACY|PHD|PHILIPS|PHONE|PHOTO|PHOTOGRAPHY|PHOTOS|PHYSIO|PIAGET|PICS|PICTET|PICTURES|PID|PIN|PING|PINK|PIONEER|PIZZA|PK|PL|PLACE|PLAY|PLAYSTATION|PLUMBING|PLUS|PM|PN|PNC|POHL|POKER|POLITIE|PORN|POST|PR|PRAMERICA|PRAXI|PRESS|PRIME|PRO|PROD|PRODUCTIONS|PROF|PROGRESSIVE|PROMO|PROPERTIES|PROPERTY|PROTECTION|PRU|PRUDENTIAL|PS|PT|PUB|PW|PWC|PY|QA|QPON|QUEBEC|QUEST|QVC|RACING|RADIO|RAID|RE|READ|REALESTATE|REALTOR|REALTY|RECIPES|RED|REDSTONE|REDUMBRELLA|REHAB|REISE|REISEN|REIT|RELIANCE|REN|RENT|RENTALS|REPAIR|REPORT|REPUBLICAN|REST|RESTAURANT|REVIEW|REVIEWS|REXROTH|RICH|RICHARDLI|RICOH|RIGHTATHOME|RIL|RIO|RIP|RMIT|RO|ROCHER|ROCKS|RODEO|ROGERS|ROOM|RS|RSVP|RU|RUGBY|RUHR|RUN|RW|RWE|RYUKYU|SA|SAARLAND|SAFE|SAFETY|SAKURA|SALE|SALON|SAMSCLUB|SAMSUNG|SANDVIK|SANDVIKCOROMANT|SANOFI|SAP|SARL|SAS|SAVE|SAXO|SB|SBI|SBS|SC|SCA|SCB|SCHAEFFLER|SCHMIDT|SCHOLARSHIPS|SCHOOL|SCHULE|SCHWARZ|SCIENCE|SCJOHNSON|SCOR|SCOT|SD|SE|SEARCH|SEAT|SECURE|SECURITY|SEEK|SELECT|SENER|SERVICES|SES|SEVEN|SEW|SEX|SEXY|SFR|SG|SH|SHANGRILA|SHARP|SHAW|SHELL|SHIA|SHIKSHA|SHOES|SHOP|SHOPPING|SHOUJI|SHOW|SHOWTIME|SHRIRAM|SI|SILK|SINA|SINGLES|SITE|SJ|SK|SKI|SKIN|SKY|SKYPE|SL|SLING|SM|SMART|SMILE|SN|SNCF|SO|SOCCER|SOCIAL|SOFTBANK|SOFTWARE|SOHU|SOLAR|SOLUTIONS|SONG|SONY|SOY|SPACE|SPORT|SPOT|SPREADBETTING|SR|SRL|SRT|SS|ST|STADA|STAPLES|STAR|STARHUB|STATEBANK|STATEFARM|STC|STCGROUP|STOCKHOLM|STORAGE|STORE|STREAM|STUDIO|STUDY|STYLE|SU|SUCKS|SUPPLIES|SUPPLY|SUPPORT|SURF|SURGERY|SUZUKI|SV|SWATCH|SWIFTCOVER|SWISS|SX|SY|SYDNEY|SYMANTEC|SYSTEMS|SZ|TAB|TAIPEI|TALK|TAOBAO|TARGET|TATAMOTORS|TATAR|TATTOO|TAX|TAXI|TC|TCI|TD|TDK|TEAM|TECH|TECHNOLOGY|TEL|TELEFONICA|TEMASEK|TENNIS|TEVA|TF|TG|TH|THD|THEATER|THEATRE|TIAA|TICKETS|TIENDA|TIFFANY|TIPS|TIRES|TIROL|TJ|TJMAXX|TJX|TK|TKMAXX|TL|TM|TMALL|TN|TO|TODAY|TOKYO|TOOLS|TOP|TORAY|TOSHIBA|TOTAL|TOURS|TOWN|TOYOTA|TOYS|TR|TRADE|TRADING|TRAINING|TRAVEL|TRAVELCHANNEL|TRAVELERS|TRAVELERSINSURANCE|TRUST|TRV|TT|TUBE|TUI|TUNES|TUSHU|TV|TVS|TW|TZ|UA|UBANK|UBS|UCONNECT|UG|UK|UNICOM|UNIVERSITY|UNO|UOL|UPS|US|UY|UZ|VA|VACATIONS|VANA|VANGUARD|VC|VE|VEGAS|VENTURES|VERISIGN|VERSICHERUNG|VET|VG|VI|VIAJES|VIDEO|VIG|VIKING|VILLAS|VIN|VIP|VIRGIN|VISA|VISION|VISTAPRINT|VIVA|VIVO|VLAANDEREN|VN|VODKA|VOLKSWAGEN|VOLVO|VOTE|VOTING|VOTO|VOYAGE|VU|VUELOS|WALES|WALMART|WALTER|WANG|WANGGOU|WARMAN|WATCH|WATCHES|WEATHER|WEATHERCHANNEL|WEBCAM|WEBER|WEBSITE|WED|WEDDING|WEIBO|WEIR|WF|WHOSWHO|WIEN|WIKI|WILLIAMHILL|WIN|WINDOWS|WINE|WINNERS|WME|WOLTERSKLUWER|WOODSIDE|WORK|WORKS|WORLD|WOW|WS|WTC|WTF|XBOX|XEROX|XFINITY|XIHUAN|XIN|XN--11B4C3D|XN--1CK2E1B|XN--1QQW23A|XN--2SCRJ9C|XN--30RR7Y|XN--3BST00M|XN--3DS443G|XN--3E0B707E|XN--3HCRJ9C|XN--3OQ18VL8PN36A|XN--3PXU8K|XN--42C2D9A|XN--45BR5CYL|XN--45BRJ9C|XN--45Q11C|XN--4GBRIM|XN--54B7FTA0CC|XN--55QW42G|XN--55QX5D|XN--5SU34J936BGSG|XN--5TZM5G|XN--6FRZ82G|XN--6QQ986B3XL|XN--80ADXHKS|XN--80AO21A|XN--80AQECDR1A|XN--80ASEHDB|XN--80ASWG|XN--8Y0A063A|XN--90A3AC|XN--90AE|XN--90AIS|XN--9DBQ2A|XN--9ET52U|XN--9KRT00A|XN--B4W605FERD|XN--BCK1B9A5DRE4C|XN--C1AVG|XN--C2BR7G|XN--CCK2B3B|XN--CG4BKI|XN--CLCHC0EA0B2G2A9GCD|XN--CZR694B|XN--CZRS0T|XN--CZRU2D|XN--D1ACJ3B|XN--D1ALF|XN--E1A4C|XN--ECKVDTC9D|XN--EFVY88H|XN--ESTV75G|XN--FCT429K|XN--FHBEI|XN--FIQ228C5HS|XN--FIQ64B|XN--FIQS8S|XN--FIQZ9S|XN--FJQ720A|XN--FLW351E|XN--FPCRJ9C3D|XN--FZC2C9E2C|XN--FZYS8D69UVGM|XN--G2XX48C|XN--GCKR3F0F|XN--GECRJ9C|XN--GK3AT1E|XN--H2BREG3EVE|XN--H2BRJ9C|XN--H2BRJ9C8C|XN--HXT814E|XN--I1B6B1A6A2E|XN--IMR513N|XN--IO0A7I|XN--J1AEF|XN--J1AMH|XN--J6W193G|XN--JLQ61U9W7B|XN--JVR189M|XN--KCRX77D1X4A|XN--KPRW13D|XN--KPRY57D|XN--KPU716F|XN--KPUT3I|XN--L1ACC|XN--LGBBAT1AD8J|XN--MGB9AWBF|XN--MGBA3A3EJT|XN--MGBA3A4F16A|XN--MGBA7C0BBN0A|XN--MGBAAKC7DVF|XN--MGBAAM7A8H|XN--MGBAB2BD|XN--MGBAH1A3HJKRD|XN--MGBAI9AZGQP6J|XN--MGBAYH7GPA|XN--MGBB9FBPOB|XN--MGBBH1A|XN--MGBBH1A71E|XN--MGBC0A9AZCG|XN--MGBCA7DZDO|XN--MGBERP4A5D4AR|XN--MGBGU82A|XN--MGBI4ECEXP|XN--MGBPL2FH|XN--MGBT3DHD|XN--MGBTX2B|XN--MGBX4CD0AB|XN--MIX891F|XN--MK1BU44C|XN--MXTQ1M|XN--NGBC5AZD|XN--NGBE9E0A|XN--NGBRX|XN--NODE|XN--NQV7F|XN--NQV7FS00EMA|XN--NYQY26A|XN--O3CW4H|XN--OGBPF8FL|XN--OTU796D|XN--P1ACF|XN--P1AI|XN--PBT977C|XN--PGBS0DH|XN--PSSY2U|XN--Q9JYB4C|XN--QCKA1PMC|XN--QXAM|XN--RHQV96G|XN--ROVU88B|XN--RVC1E0AM3E|XN--S9BRJ9C|XN--SES554G|XN--T60B56A|XN--TCKWE|XN--TIQ49XQYJ|XN--UNUP4Y|XN--VERMGENSBERATER-CTB|XN--VERMGENSBERATUNG-PWB|XN--VHQUV|XN--VUQ861B|XN--W4R85EL8FHU5DNRA|XN--W4RS40L|XN--WGBH1C|XN--WGBL6A|XN--XHQ521B|XN--XKC2AL3HYE2A|XN--XKC2DL3A5EE0H|XN--Y9A3AQ|XN--YFRO4I67O|XN--YGBI2AMMX|XN--ZFR164B|XXX|XYZ|YACHTS|YAHOO|YAMAXUN|YANDEX|YE|YODOBASHI|YOGA|YOKOHAMA|YOU|YOUTUBE|YT|YUN|ZA|ZAPPOS|ZARA|ZERO|ZIP|ZM|ZONE|ZUERICH|ZW)$
 
:whois|whois.iana.org|strip=tld |
^tld\s\S+$
 
/trunk/main/subprograms/.trash/ac
0,0 → 1,63
#!/usr/bin/php
<?php
 
#
# generic Whois - Subprogram "ac"
#
# (c) 2011-2014 by Daniel Marschall, ViaThinkSoft <www.viathinksoft.de>
#
# Distribution, usage etc. pp. regulated by the current version of GPL.
#
#
#
# History:
# 2011-06-07 mar Initial release
# 2014-11-30 mar Fixed
#
 
require_once __DIR__ . '/../../../shared/php_includes/common_functions.inc.php';
 
$domain = isset($argv[1]) ? $argv[1] : '';
 
$url = "http://www.nic.ac/cgi-bin/whois?query=$domain";
 
$res = "% Parsing via regex from '$url'\n\n";
 
$x = file_get_contents2($url);
 
preg_match_all('|<div class="mainboxBody">(.*)<div class="mainboxFoot">|ismU', $x, $m);
 
if (!isset($m[1][0])) {
fwrite(STDERR, "Cannot parse page (mainboxBody missing). Please report this bug.\n");
exit(1);
}
 
$x = $m[1][0];
 
$x = strip_tags($x);
 
$x = preg_replace('|:\s*([^\s])|ismU', ': $1', $x);
$x = preg_replace('|^\s*([^\s])|ismU', '$1', $x);
 
$x = html_entity_decode($x);
 
$special_words = array(
'Domain Information',
'Admin Contact',
'Technical Contact',
'Billing Contact',
'Primary Nameserver',
'Secondary Nameserver'
);
 
foreach ($special_words as $s) {
$x = str_replace($s, "\n".strtoupper($s)."\n", $x);
}
 
$x = make_tabs($x);
 
$x = trim($x);
 
$x = str_replace(' - CLICK TO BUY', '', $x);
 
echo $res.trim_each_line($x)."\n";
Property changes:
Added: svn:executable
+*
\ No newline at end of property
/trunk/main/subprograms/.trash/bz
0,0 → 1,53
#!/usr/bin/perl
 
#
# generic Whois - bz subprogram
#
# (c) 2015 by Daniel Marschall, ViaThinkSoft <www.viathinksoft.de>
#
# Distribution, usage etc. pp. regulated by the current version of GPL.
#
#
#
# History:
# 2015-05-15 mar Initial release
#
 
use warnings;
use strict;
use utf8;
 
use FindBin;
use lib "$FindBin::Bin/../../lib/";
use GWhoIs::Core;
 
if (defined $ARGV[0]) {
$_ = join(' ', @ARGV);
} else {
# If no parameter is given, await an input from STDIN
$_ = <>;
chomp;
}
 
my $query = $_;
 
my $host = "http://www.belizenic.bz/cgi-bin/Registrar_test?action=whois&action2=whois&domain="; # TODO: https?
 
my ($protocol, $hostname) = GWhoIs::Utils::splitProtocolHost($host);
 
#print "Querying $hostname with $protocol.\n";
 
my $hexstring;
$hexstring = $query;
$hexstring =~ s/./sprintf("%02x",ord("$&"))/eg;
 
my ($text, $exitcode) = GWhoIs::Core::doquery($query,'cgi',$host.$hexstring,'');
 
if ($exitcode) {
# print STDERR "Query to web server failed.\n";
}
 
print $text;
 
exit $exitcode;
 
Property changes:
Added: svn:executable
+*
\ No newline at end of property
/trunk/main/subprograms/.trash/gh
0,0 → 1,69
#!/usr/bin/perl
 
#
# generic Whois - gh subprogram
#
# (c) 2015 by Daniel Marschall, ViaThinkSoft <www.viathinksoft.de>
#
# Distribution, usage etc. pp. regulated by the current version of GPL.
#
#
#
# History:
# 2015-05-15 mar Initial release
#
 
use warnings;
use strict;
use utf8;
 
use FindBin;
use lib "$FindBin::Bin/../../lib/";
use GWhoIs::Core;
 
if (defined $ARGV[0]) {
$_ = join(' ', @ARGV);
} else {
# If no parameter is given, await an input from STDIN
$_ = <>;
chomp;
}
 
my $query = $_;
 
my ($dom,$sld) = $query =~ /(.*?)\.(com|org|gov|edu|mil)\.gh$/;
 
if (!defined $sld) {
# no second level domain, e.g. yellowpages.gh
($dom) = $query =~ /(.*?)\.gh$/;
$sld = '';
}
 
my $host = 'http://www.nic.gh'; # TODO: https?
 
my ($protocol, $hostname) = GWhoIs::Utils::splitProtocolHost($host);
 
#print "Querying $hostname with $protocol.\n";
 
# TODO: !defined $dom
my ($text, $exitcode) = GWhoIs::Core::doquery('','cgipost',"$host/customer/result_c.php","r_cdm=$dom&r_dom_slvl=$sld&Submit=Search");
if ($exitcode) {
# print STDERR "Query to web server failed.\n";
print $text;
exit $exitcode;
}
 
if ( $text =~ m|(customer/displayresult_c.php\?id=\d+)|s ) {
print "Match found. Now querying for the domain data.\n\n";
($text, $exitcode) = GWhoIs::Core::doquery($query,'cgi',"$host/$1");
print $text;
} else {
print "No match found. This probably means that this domain does not exist.\n";
}
 
if ($exitcode) {
# print STDERR "Query to web server failed.\n";
}
 
exit $exitcode;
 
Property changes:
Added: svn:executable
+*
\ No newline at end of property
/trunk/main/subprograms/6to4_decoder
0,0 → 1,81
#!/usr/bin/perl
 
#
# generic Whois - 6to4 address decoder
#
# (c) 2012 by Daniel Marschall, ViaThinkSoft <www.viathinksoft.de>
#
# Distribution, usage etc. pp. regulated by the current version of GPL.
#
#
#
# History:
# 2012-02-24 mar Initial release
#
 
# todo: möglichkeit geben, den prefix-check per CLI zu deaktivieren
 
use warnings;
use strict;
 
my $prefix_check = 1;
 
# install with "cpan Net::IP"
use Net::IP qw(ip_expand_address);
 
sub parse_6to4_ipv6 {
my ($ipv6_addr) = @_;
 
$ipv6_addr = ip_expand_address($ipv6_addr, 6);
 
my ($prefix, $client_ipv4, $rest)
= $ipv6_addr =~ /([0-9a-f]{4}):([0-9a-f]{4}:[0-9a-f]{4}):([0-9a-f]{4}:[0-9a-f]{4}:[0-9a-f]{4}:[0-9a-f]{4}:[0-9a-f]{4})/i;
 
return ($ipv6_addr, "") if !defined $prefix;
return ($ipv6_addr, $prefix) if $prefix_check && ($prefix ne "2002");
 
# $client_ipv4 =~ s/://;
$client_ipv4 = hex2ip4($client_ipv4);
 
return ($ipv6_addr, $prefix, $client_ipv4, $rest);
}
 
sub print_6to4_info {
my ($ipv6_addr, $prefix, $client_ipv4, $rest) = @_;
 
if ($prefix_check && ($prefix ne "2002")) {
print STDERR "Invalid 6to4 address $ipv6_addr\n";
return 1;
}
 
print "6to4 IPv6 address: ", $ipv6_addr, "\n";
print "Client public IPv4: ", $client_ipv4, "\n";
print "Rest address: ", $rest, "\n";
 
return 0;
}
 
sub hex2ip4 {
my ($hex) = @_;
$hex =~ s/[^0-9a-f]//i;
my ($ip4a, $ip4b, $ip4c, $ip4d) = $hex =~ /([0-9a-f]{2})([0-9a-f]{2})([0-9a-f]{2})([0-9a-f]{2})/i;
$ip4a = hex($ip4a);
return if !defined $ip4a;
$ip4b = hex($ip4b);
return if !defined $ip4b;
$ip4c = hex($ip4c);
return if !defined $ip4c;
$ip4d = hex($ip4d);
return if !defined $ip4d;
return "$ip4a.$ip4b.$ip4c.$ip4d";
}
 
if ($ARGV[0]) {
$_ = join(' ',@ARGV);
} else {
$_ = <>;
chomp;
}
 
my @info = parse_6to4_ipv6($_);
exit print_6to4_info(@info);
Property changes:
Added: svn:executable
+*
\ No newline at end of property
/trunk/main/subprograms/bi
0,0 → 1,57
#!/usr/bin/perl
 
#
# generic Whois - bi subprogram
#
# (c) 2015 by Daniel Marschall, ViaThinkSoft <www.viathinksoft.de>
#
# Distribution, usage etc. pp. regulated by the current version of GPL.
#
#
#
# History:
# 2015-05-15 mar Initial release
#
 
use warnings;
use strict;
use utf8;
 
use FindBin;
use lib "$FindBin::Bin/../lib/";
use GWhoIs::Core;
 
if (defined $ARGV[0]) {
$_ = join(' ', @ARGV);
} else {
# If no parameter is given, await an input from STDIN
$_ = <>;
chomp;
}
 
my $query = $_;
 
my $host = "http://whois.nic.bi/register/whois.hei"; # TODO: https?
 
my ($protocol, $hostname) = GWhoIs::Utils::splitProtocolHost($host);
 
#print "Querying $hostname with $protocol.\n";
 
# Get session URL
my ($text, $exitcode) = GWhoIs::Core::wwwsgrep($host,'name="card" value="(.*?)');
if ($exitcode) {
# print STDERR "Query to web server failed.\n";
print $text;
exit $exitcode;
}
 
# Get lookup
($text, $exitcode) = GWhoIs::Core::doquery($query,'cgi',"$host?card=$text&f_1.qdomain=$query&f_1.type=domain&f_1.q=Search");
 
if ($exitcode) {
# print STDERR "Query to web server failed.\n";
}
 
print $text;
 
exit $exitcode;
Property changes:
Added: svn:executable
+*
\ No newline at end of property
/trunk/main/subprograms/bm
0,0 → 1,64
#!/usr/bin/perl
 
#
# generic Whois - bm subprogram
#
# (c) 2015 by Daniel Marschall, ViaThinkSoft <www.viathinksoft.de>
#
# Distribution, usage etc. pp. regulated by the current version of GPL.
#
#
#
# History:
# 2015-05-15 mar Initial release
#
 
use warnings;
use strict;
use utf8;
 
use FindBin;
use lib "$FindBin::Bin/../lib/";
use GWhoIs::Core;
 
if (defined $ARGV[0]) {
$_ = join(' ', @ARGV);
} else {
# If no parameter is given, await an input from STDIN
$_ = <>;
chomp;
}
 
my $query = $_;
 
# my $host = "http://207.228.133.14/cgi-bin/lansaweb?procfun+BMWHO+BMWHO2+WHO";
my $host = "http://www.bermudanic.bm/cgi-bin/lansaweb?procfun+BMWHO+BMWHO2+WHO"; # TODO: https?
 
my ($protocol, $hostname) = GWhoIs::Utils::splitProtocolHost($host);
 
#print "Querying $hostname with $protocol.\n";
 
# Get session URL
my ($text, $exitcode) = GWhoIs::Core::wwwsgrep($host,'ACTION="(.*?)"');
if ($exitcode) {
# print STDERR "Query to web server failed.\n";
print $text;
exit $exitcode;
}
 
# Get lookup
($text, $exitcode) = GWhoIs::Core::doquery($query,'cgipost',"$protocol://$hostname$text",
"ADOM++++++=$query&_PROCESS=BMWHO+&_FUNCTION=BMWHO2+");
 
if ($exitcode) {
# print STDERR "Query to web server failed.\n";
}
 
# Remove unnecessary stuff
$text =~ s/\[.+\]\s+//g; # image reference
$text =~ s/Sponsored by\s+//g;
 
print $text;
 
exit $exitcode;
 
Property changes:
Added: svn:executable
+*
\ No newline at end of property
/trunk/main/subprograms/cu
0,0 → 1,93
#!/usr/bin/php
<?php
 
#
# generic Whois - Subprogram "cu"
#
# (c) 2011 by Daniel Marschall, ViaThinkSoft <www.viathinksoft.de>
#
# Distribution, usage etc. pp. regulated by the current version of GPL.
#
#
#
# History:
# 2011-06-07 mar Initial release
# 2012-01-16 mar Fixed uppercase(). Added non-available-detection
#
 
require_once __DIR__ . '/../../shared/php_includes/common_functions.inc.php';
 
$domain = isset($argv[1]) ? $argv[1] : '';
 
define('BEGIN', '<!-- InstanceBeginEditable name="MainRgn" -->');
define('END', '<!-- InstanceEndEditable -->');
 
$url = "http://www.nic.cu/dom_det.php?domsrch=$domain";
 
$res = "% Parsing via regex from '$url'\n\n";
 
$x = file_get_contents2($url);
 
preg_match_all('@'.preg_quote(BEGIN, '@').'(.*)'.preg_quote(END, '@').'@ismU', $x, $m);
 
if (!isset($m[1][0])) {
echo "Error while parsing the web content. Could not find limitations.\n";
exit(1);
}
 
$x = $m[1][0];
 
$x = strip_tags($x);
 
// é -> É @ strtoupper()
/*
$locals = array('es_ES@euro', 'es_ES', 'es');
reset($locals);
while (list(, $locale) = each ($locals)) {
if ( setlocale(LC_CTYPE, $locale) == $locale ) {
break; // Exit when we were successfull
}
}
*/
 
$x = str_replace('&nbsp;', ' ', $x);
 
$x = html_entity_decode($x);
 
$x = preg_replace("| +|", ' ', $x);
$x = preg_replace("|\n *|", "\n", $x);
$x = preg_replace("| *\n|", "\n", $x);
$x = preg_replace("|\n+|", "\n", $x);
 
$x = str_replace(":\n", ": ", $x);
 
$special_words = array(
'Detalles del dominio',
'Información general del dominio',
'DNS Primario',
'Contacto Técnico',
'Contacto Administrativo',
'Contacto Financiero'
);
 
foreach ($special_words as $s) {
$x = str_replace($s, "\n".uc_latin1($s)."\n", $x);
}
 
$x = str_replace('< Regresar a la página anterior', '', $x);
 
$x = make_tabs($x);
 
$x = trim($x);
 
if (strpos($x, 'Dominio: Organización: Dirección:') !== false) {
$x = 'Domain does not exist.';
}
 
#does not work...
#if ($x == 'DETALLES DEL DOMINIO\n\nINFORMACIÓN GENERAL DEL DOMINIO\n\nDominio: Organización: Dirección:\n\nDNS\nNombre: Dirección IP:\nContacto\nNombre: Organización: Dirección: Teléfono: Fax:') {
if (md5($x) == '82f755ffa4a436159afec22d69be304c') {
$x = 'Domain not available.';
}
 
echo $res.trim_each_line($x)."\n";
Property changes:
Added: svn:executable
+*
\ No newline at end of property
/trunk/main/subprograms/fj
0,0 → 1,53
#!/usr/bin/php
<?php
 
#
# generic Whois - Subprogram "fj"
#
# (c) 2018 by Daniel Marschall, ViaThinkSoft <www.viathinksoft.de>
#
# Distribution, usage etc. pp. regulated by the current version of GPL.
#
#
#
# History:
# 2018-04-05 mar Initial release
#
 
# Alternatively, you can query whois.nic.fj , but it does not show the full address
 
require_once __DIR__ . '/../../shared/php_includes/common_functions.inc.php';
 
$domain = isset($argv[1]) ? $argv[1] : '';
 
list($namewotld, $tld) = explode('.', $domain, 2);
 
if ($tld == 'fj') {
echo "Whois for .fj is not possible. Please use a 2nd level TLD like .com.fj\n";
exit;
}
 
$cont = file_get_contents2('http://domains.fj/public/whois.php?searchDomainName='.urlencode($namewotld).'&searchTopLevel='.urlencode($tld).'&submitSearch=Search');
 
if (strpos($cont, 'does not exist,<br><br>') !== false) {
echo "Domain $domain does not exist\n";
exit;
}
 
if (preg_match('@<div class="errorBox">(.+)</div>@ismU', $cont, $m)) {
$cont = $m[1];
$cont = str_replace(', please choose one from the drop down list', '', $cont);
} else if (preg_match('@<table border=\'0\'>(.+)</table>@ismU', $cont, $m)) {
$cont = $m[1];
}
 
$cont = str_replace('<br>', "\n", $cont);
$cont = html_entity_decode($cont);
$cont = strip_tags($cont);
$cont = explode("\n", $cont);
foreach ($cont as &$line) $line = trim($line);
$cont = implode("\n", $cont);
$cont = str_replace("\n\n", "\n", $cont);
$cont = trim($cont);
 
echo "$cont\n";
Property changes:
Added: svn:executable
+*
\ No newline at end of property
/trunk/main/subprograms/ge
0,0 → 1,80
#!/usr/bin/php
<?php
 
#
# generic Whois - Subprogram "ge"
#
# (c) 2018 by Daniel Marschall, ViaThinkSoft <www.viathinksoft.de>
#
# Distribution, usage etc. pp. regulated by the current version of GPL.
#
#
#
# History:
# 2018-04-02 mar Initial release
#
 
require_once __DIR__ . '/../../shared/php_includes/common_functions.inc.php';
 
$domain = isset($argv[1]) ? $argv[1] : '';
 
list($domainwotld, $tld) = explode('.', $domain, 2);
 
$headers = array(
'Origin' => 'http://www.nic.net.ge',
'Accept-Encodinpt-Language' => 'de-DE,de;q=0.9,en-DE;q=0.8,en;q=0.7,en-US;q=0.6',
'User-Agent' => 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36',
'Content-Type' => 'application/x-www-form-urlencoded',
'Accept' => '*/*',
'Referer' => 'http://www.nic.net.ge/',
'X-Requested-With' => 'XMLHttpRequest'
);
 
//$url = 'http://www.nic.net.ge/Home/DomainCheckPreload';
//$post = '';
//$cont = file_get_contents2($url, $post, $headers);
 
$url = 'http://www.nic.net.ge/Home/DomainCheck';
$post = 'Domain='.urlencode($domainwotld).'&TopLevelDomain='.urlencode('.'.$tld);
$cont = file_get_contents2($url, $post, $headers);
 
$data = json_decode($cont); // Output is UTF8
 
if (!$data->Success) die("JSON request failed\n");
 
$html = $data->Data;
 
if (strpos($html, '<!-- end info -->') === false) {
// Domain available
 
echo "Domain $domain is available for registration\n\n";
 
if (preg_match('@<!-- end infobox -->(.+)<!-- end status -->@ismU', $html, $m)) {
$html = $m[1];
$html = explode(',<br', $html)[0];
} else {
echo "Error parsing data. Showing full page\n";
$html = preg_replace('@<script(.+)</script>@is', '', $html);
}
} else {
// Domain not available
 
echo "Domain $domain is NOT available for registration\n\n";
 
if (preg_match('@<!-- end infobox -->(.+)<!-- end info -->@ismU', $html, $m)) {
$html = $m[1];
} else {
echo "Error parsing data. Showing full page\n";
$html = preg_replace('@<script(.+)</script>@is', '', $html);
}
}
 
$text = strip_tags($html);
 
$text = preg_replace('@^[ \t]+@ism', '', $text);
$text = preg_replace('@[ \t]+$@ism', '', $text);
$text = preg_replace("/(\r\n|\n|\r){2,}/", "$1", $text);
$text = trim($text)."\n";
 
echo $text;
 
Property changes:
Added: svn:executable
+*
\ No newline at end of property
/trunk/main/subprograms/gov
0,0 → 1,105
#!/usr/bin/php
<?php
 
#
# generic Whois - Subprogram "gov"
#
# (c) 2014 by Daniel Marschall, ViaThinkSoft <www.viathinksoft.de>
#
# Distribution, usage etc. pp. regulated by the current version of GPL.
#
#
#
# History:
# 2014-01-28 mar Initial release
# 2014-09-12 mar Fixed
#
 
require_once __DIR__ . '/../../shared/php_includes/common_functions.inc.php';
 
$domain = isset($argv[1]) ? $argv[1] : '';
 
// This service does output more verbose information (e.g. Agency) in comparison to the whois service.
$friendly_url = 'https://www.dotgov.gov/portal/web/dotgov/whois';
 
/*
$viewstate = 'H4sIAAAAAAAAAKVXXYwTVRS+7XZ3uyvq/hiCPwtlQRbiMl1ayrZbCHS7W7axXch2QYGH5Xbm7nZgOjPM3NnOgmzACERJjAY1mqyRRB98gBd948Gf+GAkQeMmPmhiQoyJMfEnMSaoD+q9dzpttzttgc7DdH7OPefM+b7vnNtrv4JWQwO9x1In4DzkJCjPcQeyJxCPo698+ew7Xfo2yQ2AqQIAvLoGgryS53RD5mYhj3QOqqok8hCLisxlMMQoDWU4h7RkXpU2T2sITSoC+nP2xkfXh/Z/vIb6KWwF9PDRaGbRC/GpKjKSMXcoeVhEhSlFwcRWPwUWgbuQYAs2OS/I4bzETZBTQtHy4HFByUNRjs1DUYJZURLxQjyH+JP0pe0uTpy5wNYG7pKyauBpZGLQq6FTBtIxEsaY80mYR7avnczXQANfaaTrpCg6aD0xIwpBe/EIWzzYYHFcyeehLIwaGCsyaNONbF7EtguOuPCAjbVqeRBqJFmMNCtyyF4WZpGfahD5gIFJDWjpILYcDDfrIGIa1AE93KUrb+mqQyUHIVl3mYqjiiIhKN/yaee+WfrnNzdwHQWt81AykKm6WDYPAbaml60xsChxMU2DCylRx+b55b63PodvtwBXEnh08TRiPAYFDzm1EWw7J6bTqZnRWCYZxyDif2Z8dHtyMuE36Sf4NTRHfGiM3P4axOKYKQnfVQ6fUngoocW/uo8vDf39ixt4ksCbg3qOJ1JIgXZeMWSsLWDQwxTnp5/pz2BNlOeiKeCltwZhC/20tcR8HmoilDG7NdX/yEGkgYEbyfTRupXVSsoYEfX1/HD1vTvnL4Xd9LuL1bJTZHaTRj6LtIvXXu974LXbl219P0iqX8LC5YDUWodnHaUM2MdPkA9NQ7W1/btPP1t7/OsW4E6ATkmBQgLyWNGSoAPnNKTnFEkw1b37mIu2gpfSgLrFYF1lg5EQ1rl0bOrpmeQYBt7gsAADu7K7nKxiBw+mkuNjJBv/qnci6UbcGJqFhoQT1sPNMdK5FqaVk0ieWPpqLCq/cdVqT/EmeECqFv+263Snaaq4bi+ixdtGTw/TUxe2sLGlRC1Uxu1uUpMWi60YtCOZxwsqY8Zmetpiqo5HCZtWB7z6ysiVrloq0KRX/auBYUHLEEQw8Mi0tzi3x4q4VaOlSPTry4d/+rnvzH6bei5c5GmZfwTJLc4Nhg2aCcIgpGXgPNKO3Pxwz5WlW2k3cKdABy9BXadZFBXUqRMbga3B5J5pTlT8GUR0JYmnYVZCUZO1kC2riIMkbhrOHaaJjZsq4a1OOACsw0X5ooF1Vo7Essqs0Hnu2O1P/n3Vzcx6S2Zli3cvvJT54+jyblYEEn+9HX+1MzpPW268n93w5Bdv0rj02/aRyRjYdKYGzUZJ1+QcsDlb2QesQa+qZmERPHfftPftC4QHA0M7fAzBPf33nlM/6cW1YlA1jDgscqZeTVHRWV4WVZstqo48NCUkz+EcBi1QYn02RE8j2JoYjPiEH8wn865aN/QXg+5x0nI1n5WAj0qCSZAFeoyEiFdps/QisEKpwEGpXaUrT0N9uqr0OUQ70MZ6FWVbkeJYDlZW7ZHKqtlbl3LlXFblrLLYdSDBOnlFUjQClBBl9+ut+yxhRFSFgkBUvz2rkE1MfiSkmlFi0Yqp9qyyUEcHHGrwhEMvu8saRIK0Bv31amBtprC9q6qsQk9lFazNV40aWI93UwEP1GggaYRzilCrgzxaag3Vdh/4b17+8c7Ol91FxcdIjA0VTaLannaJ76cWw2uOXPnd7hJiYRKM1FckT6/KEqo0WtEtrN7NcKAbQED7xiVwoYm+EQwM7giGfWRrQIwbNY56afZTrHuYra/yhfOAXDklnXY6jSdiFdvCgbtSXKiouFCZa2oNXhFJaQhKmSJHPVgzUC2ZtN9/4rOh6j152JrHXg3JZMIioWIkF5lOf/ayc7wwBiL1YVvxTkI+dMo3kIilMuMDZ0F71treN8+knaHByC6fnXIjKtXJiY6ihjAO23+IarYM619PGVp3Gdrn7ZFSxUOnGdAMsLwjsCyD+pDGQfjeyzc9daga0YvghSYQDQ03i6iV0l0BGrH/oJYBpacX7w3A/wF62oXTTBEAAA==';
$session_id = 'k2NNSnyK9Kvh3BZHpTphvrL12yFTn6TcMJpZrj865x7qLQCvvjs2SK3XB0GxG5qSlX2JhcxymvNqTWqlmdQ311gwVywf8fxNJKVG9p4mccGvXQLbl1LLMxdDBzWt2jFD';
$unknown1 = '1882029245';
$unknown2 = '1390916170265';
*/
 
$x = file_get_contents2($friendly_url);
 
if (!preg_match('@name="javax.faces.ViewState" id="javax.faces.ViewState" value="(.*)"@ismU', $x, $m)) {
echo "Error (A) while querying whois service. Please manually check at $friendly_url\n";
exit(1);
}
$viewstate = $m[1];
$viewstate = str_replace('+', '%2B', $viewstate);
$viewstate = str_replace('/', '%2F', $viewstate);
 
if (!preg_match('@getSessionId:function\\(\\){return"([^!]+)!([^!]+)!([^!]+)"}@ismU', $x, $m)) {
echo "Error (B) while querying whois service. Please manually check at $friendly_url\n";
exit(1);
}
$session_id = $m[1];
$unknown1 = $m[2];
$unknown2 = $m[3];
 
# ---
 
$bef = '';
#$bef .= 'vtor -- ';
$bef .= 'curl "https://www.dotgov.gov/portal/web/dotgov/whois?p_p_id=domainAvailabilityCheck_portlet_WAR_dotgov_portlets&p_p_lifecycle=1&p_p_state=normal&p_p_mode=view&p_p_col_id=column-3&p_p_col_count=1&_domainAvailabilityCheck_portlet_WAR_dotgov_portlets_com.sun.faces.portlet.VIEW_ID="%"2FWEB-INF"%"2Fxhtml"%"2Fregistration"%"2FdomainAvailabilityCheck.xhtml&_domainAvailabilityCheck_portlet_WAR_dotgov_portlets_com.sun.faces.portlet.NAME_SPACE=_domainAvailabilityCheck_portlet_WAR_dotgov_portlets_"';
 
$bef .= ' -H "Cookie: JSESSIONID='.$session_id.'!'.$unknown1.'; GUEST_LANGUAGE_ID=en_US; COOKIE_SUPPORT=true"';
$bef .= ' -H "Host: www.dotgov.gov"';
$bef .= ' -H "Origin: https://www.dotgov.gov"';
$bef .= ' -H "Accept-Encoding: gzip,deflate"';
$bef .= ' -H "Accept-Language: de-DE,de;q=0.8,en-US;q=0.6,en;q=0.4"';
$bef .= ' -H "User-Agent: Mozilla/5.0 (Windows NT 5.1; rv:32.0) Gecko/20100101 Firefox/32.0"';
#$bef .= ' -H "Content-Type: application/x-www-form-urlencoded"';
$bef .= ' -H "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8"';
$bef .= ' -H "Cache-Control: max-age=0"';
$bef .= ' -H "Referer: https://www.dotgov.gov/portal/web/dotgov/whois;jsessionid='.$session_id.'!'.$unknown1.'!'.$unknown2.'?p_p_id=domainAvailabilityCheck_portlet_WAR_dotgov_portlets&p_p_lifecycle=1&p_p_state=normal&p_p_mode=view&p_p_col_id=column-3&p_p_col_count=1&_domainAvailabilityCheck_portlet_WAR_dotgov_portlets_com.sun.faces.portlet.VIEW_ID="%"2FWEB-INF"%"2Fxhtml"%"2Fregistration"%"2FdomainAvailabilityCheck.xhtml&_domainAvailabilityCheck_portlet_WAR_dotgov_portlets_com.sun.faces.portlet.NAME_SPACE=_domainAvailabilityCheck_portlet_WAR_dotgov_portlets_"';
$bef .= ' -H "Connection: keep-alive"';
$bef .= ' --data '.escapeshellarg('domainAvailabilityCheckForm=domainAvailabilityCheckForm&domainAvailabilityCheckForm%3ArequestedDomainName='.$domain.'&domainAvailabilityCheckForm%3Asubmit=Check+Availability&javax.faces.ViewState='.$viewstate);
$bef .= ' --compressed';
$bef .= ' --silent';
 
$out = array();
exec($bef, $out, $code);
 
if ($code != 0) {
echo "Error (C) while querying whois service. Please manually check at $friendly_url\n";
exit($code);
}
 
$x = implode('', $out);
 
if (!preg_match('@<strong>(.*)</tr>@ismU', $x, $m)) {
echo "Error (D) while querying whois service. Please manually check at $friendly_url\n";
exit(1);
}
 
$x = $m[1];
 
$x = str_replace('<br />', "\n", $x);
 
$x = strip_tags($x);
$x = trim($x);
$x = trimHereDoc($x); // jede einzelne Zeile
 
$x = preg_replace('@[ \\t]+@m', ' ', $x);
 
echo "% Parsing via regex from '$friendly_url'\n\n";
echo "$x\n\n";
exit(0);
 
# ---
 
function trimHereDoc($t) {
# http://stackoverflow.com/a/1655176
return implode("\n", array_map('trim', explode("\n", $t)));
}
Property changes:
Added: svn:executable
+*
\ No newline at end of property
/trunk/main/subprograms/gt
0,0 → 1,64
#!/usr/bin/php
<?php
 
#
# generic Whois - Subprogram "gt"
#
# (c) 2011 by Daniel Marschall, ViaThinkSoft <www.viathinksoft.de>
#
# Distribution, usage etc. pp. regulated by the current version of GPL.
#
#
#
# History:
# 2011-06-07 mar Initial release
# 2012-01-16 mar Fixed uppercase(). Spaces between NSs.
#
 
require_once __DIR__ . '/../../shared/php_includes/common_functions.inc.php';
 
$domain = isset($argv[1]) ? $argv[1] : '';
 
$url = "http://www.gt/cgi-bin/whois.cgi?domain=$domain";
 
$res = "% Parsing via regex from '$url'\n\n";
 
$x = file_get_contents2($url);
$x = strip_tags($x);
 
# $x = preg_replace('|:\s*([^\s])|ismU', ': $1', $x);
$x = preg_replace('|^\s*([^\s])|ismU', '$1', $x);
 
// é -> É @ strtoupper()
/*
$locals = array('es_ES@euro', 'es_ES', 'es');
reset($locals);
while (list(, $locale) = each ($locals)) {
if ( setlocale(LC_CTYPE, $locale) == $locale ) {
break; // Exit when we were successfull
}
}
*/
 
$x = html_entity_decode($x);
 
$special_words = array(
'Información del Dominio'."\n".$domain,
'Contactos Administrativos',
'Contactos Técnicos',
'Servidores',
'Fecha de Expiración (dd/mm/aaaa)'
);
 
foreach ($special_words as $s) {
$x = str_replace($s, "\n".uc_latin1($s)."\n", $x);
}
 
$x = str_replace('Inicio', '', $x); // Back to mainpage
 
$x = str_replace('Primario', "Primario\n\n", $x);
$x = str_replace('Secundario', "Secundario\n\n", $x);
 
$x = trim($x);
 
echo $res.trim_each_line($x)."\n";
Property changes:
Added: svn:executable
+*
\ No newline at end of property
/trunk/main/subprograms/gu
0,0 → 1,49
#!/usr/bin/php
<?php
 
#
# generic Whois - Subprogram "gu"
#
# (c) 2013 by Daniel Marschall, ViaThinkSoft <www.viathinksoft.de>
#
# Distribution, usage etc. pp. regulated by the current version of GPL.
#
#
#
# History:
# 2013-07-23 mar Initial release
#
 
# TODO: check if all preg_match() did succeed
# TODO: check if the query did output exactly 1 record.
# TODO: Is there any better way to retrieve the information of a domain without full text search engine?
 
require_once __DIR__ . '/../../shared/php_includes/common_functions.inc.php';
 
$domain = isset($argv[1]) ? $argv[1] : '';
 
$url = 'http://gadao.gov.gu/Scripts/dtSearch/dtisapi.dll';
 
$post = 'cmd=search&SearchForm=C:\Inetpub\wwwroot\domainsearch_form.htm&request=Domain%20name:%20'.rawurlencode($domain).'&index=C:\dtSearch\BIN\domain&maxFiles=25&stemming=Yes';
 
$cont = file_get_contents2($url, $post);
 
if (!preg_match('@target="doc">(.*)\\.htm</A>@ismU', $cont, $m)) {
echo "Domain $domain not found or the parsing script is outdated.\n";
exit(1);
}
$a = $m[1];
$url2 = "http://gadao.gov.gu/domain/$a.htm";
 
preg_match('@<TD align=right>((\\d+)/(\\d+)/(\\d+))</TD>@ismU', $cont, $m);
//$moddate = $m[1];
$month = $m[2];
$day = $m[3];
$year = $m[4];
$moddate = date('Y-m-d', mktime(0, 0, 0, $month, $day, $year));
 
$cont2 = file_get_contents2($url2);
preg_match('@<pre>(.+)</pre>@ismU', $cont2, $m);
 
echo "Content of $url2 (Last modified: $moddate)\n\n";
echo trim(html_entity_decode($m[1]))."\n";
Property changes:
Added: svn:executable
+*
\ No newline at end of property
/trunk/main/subprograms/hm
0,0 → 1,40
#!/usr/bin/php
<?php
 
#
# generic Whois - Subprogram "hm"
#
# (c) 2018 by Daniel Marschall, ViaThinkSoft <www.viathinksoft.de>
#
# Distribution, usage etc. pp. regulated by the current version of GPL.
#
#
#
# History:
# 2018-03-22 mar Initial release
#
 
require_once __DIR__ . '/../../shared/php_includes/common_functions.inc.php';
 
# The server whois.registry.hm is not available for the public anymore.
# The whois server runs internally, and can be accessed via the web interface.
 
$domain = isset($argv[1]) ? $argv[1] : '';
 
# Please note that you first have to call the whois main page which sets a cookie that is required.
$cont = file_get_contents2("http://www.registry.hm/");
 
# Now the real call
$cont = file_get_contents2("http://www.registry.hm/HR_whois2.php?domain_name=$domain");
 
if (!preg_match('@<pre>(.+)</pre>@ismU', $cont, $m)) {
echo "Parse error\n";
exit(1);
}
 
$cont = $m[1];
 
$cont = str_replace('<br>', "\n", $cont);
 
echo $cont;
 
Property changes:
Added: svn:executable
+*
\ No newline at end of property
/trunk/main/subprograms/mq_gf_gp
0,0 → 1,91
#!/usr/bin/php
<?php
 
#
# generic Whois - Subprogram "mq_gf_gp"
#
# (c) 2012 by Daniel Marschall, ViaThinkSoft <www.viathinksoft.de>
#
# Distribution, usage etc. pp. regulated by the current version of GPL.
#
#
#
# History:
# 2012-11-19 mar Initial release
#
 
# TODO: for many domains, the format is completely different! do we have a good enough parser?
 
require_once __DIR__ . '/../../shared/php_includes/common_functions.inc.php';
 
$domain = isset($argv[1]) ? $argv[1] : '';
 
$url = "https://www.dom-enic.com/whois.html";
 
$res = "% Parsing via regex from '$url'\n\n";
 
// Split up "naked" domain name and TLD
if (!preg_match('@^(.*)(\.(mq|gf|gp))$@', $domain, $m)) {
echo "Error: Can only handle .mq, .gf and .gp TLDs.\n";
exit(1);
}
$domain = $m[1];
$ext = $m[2];
 
$x = file_get_contents2($url, 'domain='.urlencode($domain).'&' .
'extension='.urlencode($ext).'&' .
'Submit=Soumettre');
 
if (strpos($x, /* $domain. */ ' est disponible.') !== false) {
define('BEGIN', '<div align="center" class="texte1"><p>');
define('END', '</p></div>');
} else {
// For some domains it is <p> and not <h1>
$x = str_replace('<p class="titre1">WHOIS result</p>', '<h1 class="titre1">WHOIS result</h1>', $x);
define('BEGIN', '<h1 class="titre1">WHOIS result</h1>');
// define('END', '</div>');
// In comparison to </div>, this includes the disclaimer at the bottom:
define('END', '</td>');
}
 
preg_match_all('@'.preg_quote(BEGIN, '@').'(.*)'.preg_quote(END, '@').'@ismU', $x, $m);
 
if (!isset($m[1][0])) {
echo "Error while parsing the web content. Could not find limitations.\n";
exit(1);
}
$x = $m[1][0];
 
$x = preg_replace('@<br />(?!\n)@', "\n", $x);
$x = strip_tags($x);
 
$x = html_entity_decode($x);
 
// é -> É @ strtoupper()
/*
$locals = array('es_ES@euro', 'es_ES', 'es');
reset($locals);
while (list(, $locale) = each ($locals)) {
if ( setlocale(LC_CTYPE, $locale) == $locale ) {
break; // Exit when we were successfull
}
}
*/
 
$x = preg_replace("@\n\s+\n@", "\n\n", $x);
while (strpos($x, "\n\n\n") !== false) $x = str_replace("\n\n\n", "\n\n", $x);
 
$special_words = array(
'Registrant:',
'Administrative Contact:',
'Technical Contact:',
'Billing Contact:'
);
 
foreach ($special_words as $s) {
$x = str_replace($s, "\n".uc_latin1($s)."\n", $x);
}
 
$x = trim($x);
 
echo $res.trim_each_line($x)."\n";
Property changes:
Added: svn:executable
+*
\ No newline at end of property
/trunk/main/subprograms/oid
0,0 → 1,404
#!/usr/bin/php
<?php
 
#
# generic Whois - Subprogram "oid" (BETA)
#
# (c) 2011-2019 by Daniel Marschall, ViaThinkSoft <www.viathinksoft.de>
#
# Distribution, usage etc. pp. regulated by the current version of GPL.
#
#
#
# History:
# 2011-06-07 mar 0.1 Initial release
# 2011-07-22 mar 0.2 FT: Support for non-validated OIDs
# 2013-12-17 mar 0.3 FT: works again + Output now UTF-8
# 2015-01-07 mar 0.4 FT: fixed UTF-8 problem
# 2019-03-12 mar 0.5 FT: adjusted regex
#
 
# OID resolution over WhoIs
# Not really whois, but handy!
 
# TODO: weitere oid repositories einbinden
# TODO: tabs
# TODO: der encoding anzeigen
# TODO ALVESTRAND_NO fertig machen (404 erkennung, formatierung usw)
 
require_once __DIR__ . '/../../shared/php_includes/common_functions.inc.php';
 
define('WALK_UP', true);
define('ASK_FRANCE_TELECOM', true);
define('ASK_ALVESTRAND_NO', false);
 
$domain = $argv[1];
 
# normalize to "2.999", removing leading zeros, urn:oid: and oid: as well as leading dot
$domain = normalize_oid($domain, false);
 
// Check if the OID is correct and handle the special case of the root zone "oid:."
$test_oid = explode('.', $domain, 2);
if ($domain === '') {
echo "You cannot lookup the root zone of the OIDs.\n";
echo "Please choose at least one of these root OIDs:\n";
echo "- itu-t(0)\n";
echo "- iso(1)\n";
echo "- joint-iso-itu-t(2)\n\n";
# exit(1);
exit;
} else {
$first_arc = $test_oid[0];
$oid_ok = ($first_arc === '0') || ($first_arc === '1') || ($first_arc === '2');
if (!$oid_ok) {
echo "The OID is invalid. The root arc needs to be 0, 1 or 2\n\n";
# exit(1);
exit;
}
}
 
ob_start();
 
if (ASK_FRANCE_TELECOM) {
check_oidinfo_com($domain);
}
 
if (ASK_ALVESTRAND_NO) {
if (ASK_FRANCE_TELECOM) {
echo "\n\n";
echo "% ===========================================================\n";
echo "% ===========================================================\n";
echo "\n";
}
check_alvestrand_no($domain);
}
 
$x = ob_get_contents();
ob_end_clean();
 
$x = wordwrap($x, 75, "\n", false);
echo html_entity_decode($x, ENT_QUOTES, 'utf-8');
#echo $x;
 
# ----------------- FRANCE TELECOM OID REPOSITORY
 
# Callback for Link-Replacing
function fto_link_replacing_cb($treffer) {
# '[$4] &lt;$2&gt;'
 
$name = $treffer[4];
$link = $treffer[2];
 
if (trim(strip_tags($name)) == '') {
return '';
}
 
# relative -> absolute links
if (substr($link, 0, 3) == '../') {
$link = 'http://oid-info.com/'.$link;
} else if ($link[0] == '/') {
$link = 'http://oid-info.com'.$link;
}
 
return $name . ' &lt;' . $link . '&gt;';
}
 
function check_oidinfo_com($oid) {
$url = "http://oid-info.com/get/$oid";
 
$x = file_get_contents2($url);
 
$father = fto_find_father($x);
 
$err = 'The following error must be corrected to take your request into account:';
 
if (strpos($x, $err) !== false) {
echo "\nError:\n"; # TODO: warum \n am anfang?
 
preg_match_all('|<font color="#ff0000">(.*)</font>|ismU', $x, $m);
 
$x = implode("\n", $m[1]);
 
$x = strip_tags($x);
 
$x = trim($x);
 
echo $x;
 
if (WALK_UP && ($father !== false)) {
echo "\n\n";
echo "% ===========================================================\n";
echo "% Requesting father OID '$father'\n";
echo check_oidinfo_com($father);
}
 
return;
} else {
if ((strpos($x, '<td>(<a href="/faq.htm#17">ASN.1</a> notation)</td>') === false) &&
(strpos($x, 'This OID description has not yet been validated') === false)) {
echo "\nUnknown error! Please try again later.\n";
 
if (WALK_UP && ($father !== false)) {
echo "\n\n";
echo "% ===========================================================\n";
echo "% Requesting father OID '$father'\n";
echo check_oidinfo_com($father);
}
 
return;
}
}
 
if (strpos($x, 'This OID description has not yet been validated') !== false) {
// <i>This OID description has not yet been validated by the OID repository administrator and/or the registrant of the superior OID.</i>
preg_match_all('|<i>(.+?)</i>|', $x, $m);
echo $m[1][0];
 
if (WALK_UP && ($father !== false)) {
echo "\n\n";
echo "% ===========================================================\n";
echo "% Requesting father OID '$father'\n";
echo check_oidinfo_com($father);
}
 
return;
}
 
$x = str_replace('<strong>Short URL for this page</strong>'."\n:", '', $x);
$x = str_replace('<font size="-2">Webmaster</font></td>', '</td>', $x);
$x = str_replace('<strong>Disclaimer:</strong>', "\n\n".'<strong>Disclaimer:</strong>'."\n\n", $x);
 
$del = '<tr bgcolor="#CCCCCC">';
$ary = explode($del, $x, 2);
if (isset($ary[1])) $x = $ary[1];
 
echo "% Parsing via regex from '$url'\n\n";
 
$x = preg_replace_callback('|<a\s([^>]*?)href="(.*)"([^>]*?)>(.*)</a>|ismU', 'fto_link_replacing_cb', $x);
 
$x = strip_tags($x);
 
$x = str_replace('&nbsp;', ' ', $x);
$x = str_replace('&nbsp', ' ', $x);
 
$x = html_entity_decode($x);
 
$x = preg_replace("| +|", ' ', $x);
$x = preg_replace("|\n *|", "\n", $x);
$x = preg_replace("| *\n|", "\n", $x);
$x = preg_replace("|\n+|", "\n", $x);
 
$x = preg_replace('|<mailto:(.*)&(.*)>|ismU', '<$1@$2>', $x);
$x = str_replace("<#top>\n", '', $x);
 
$x = str_replace('(OID-IRI <http://oid-info.com/faq.htm#iri> notation)', '(OID-IRI notation)', $x);
$x = str_replace('(ASN.1 <http://oid-info.com/faq.htm#17> notation)', '(ASN.1 notation)', $x);
$x = str_replace('(dot <http://oid-info.com/faq.htm#14> notation)', '(dot notation)', $x);
$x = str_replace(' <http://oid-info.com/faq.htm#iri>', '', $x);
 
 
$prev_swap_lines = array(
'(ASN.1 notation)',
'(dot notation)',
'(OID-IRI notation)',
);
 
$ary = explode("\n", $x);
foreach ($prev_swap_lines as $s) {
foreach ($ary as $n => $l) {
if ($l == $s) {
$tmp = $ary[$n-1];
$ary[$n-1] = $ary[$n];
$ary[$n] = $tmp;
}
}
}
$x = implode("\n", $ary);
 
foreach ($prev_swap_lines as $s) {
$sx = str_replace('(', '', $s);
$sx = str_replace(')', '', $sx);
$x = str_replace("$s\n", "$sx: ", $x);
}
 
$ary = explode("\n", $x);
$c = count($ary);
$tmp = $ary[$c-2];
$ary[$c-2] = "Last modified:\n$tmp";
$x = implode("\n", $ary);
 
$x = preg_replace("|\nFirst Registration Authority$|ismU", "\nFirst Registration Authority:", $x);
$x = preg_replace("|\nCurrent Registration Authority$|ismU", "\nCurrent Registration Authority:", $x);
 
$special_words = array(
'Name:',
'Address:',
'Phone:',
'Fax:',
'Creation date:'
);
 
foreach ($special_words as $s) {
$x = str_replace("$s\n", "$s ", $x);
}
 
$special_words = array(
'OID:',
'Information:',
'Description:',
'Disclaimer:',
'Last modified:',
'First Registration Authority:',
'Current Registration Authority:'
);
 
foreach ($special_words as $s) {
$x = str_replace("\n$s\n", "\n\n".strtoupper($s)."\n\n", $x);
}
 
$x = preg_replace("/To contact the (first|current) Registration Authority, replace \"&\" by \"@\" in the email address\n/ismU", '', $x);
$x = preg_replace("/Short URL for this page:\n/ismU", '', $x);
 
$x = trim($x);
 
$x = utf8_encode($x);
 
echo $x;
 
if (WALK_UP && ($father !== false)) {
echo "\n\n";
echo "% ===========================================================\n";
echo "% Requesting father OID '$father'\n";
echo check_oidinfo_com($father);
}
}
 
function fto_find_father($content) {
 
# Works for...
# ... root OIDS, e.g. 2
# ... existing OIDs, e.g. 2.999
# ... non existing OIDs, 2.999.1 and 2.999.1.2
# ... orphan OIDs, e.g. 1.3.6.1.4.1.311.1.1.3.1.2
# ... non validated OIDs...
 
$content = str_replace('<img src="/images/bullet.gif" width="10" height="8" border="0"><a href="/basic-search.htm">', '', $content);
 
// For non validated OIDs
$content = str_replace('<br><img src="/images/bullet.gif" width="10" height="8" border="0"><a href="/cgi-bin/manage?father_oid=', '', $content);
 
$ary = explode('<font size="+2" color="#FF5500"><strong>OID description</strong></font>', $content, 2);
$content = $ary[0];
 
preg_match_all('|<img src="/images/bullet.gif" width="10" height="8" border="0"><a href="(.*)">|ismU', $content, $m);
 
$c = count($m[1]);
 
if ($c == 0) return false;
 
$last = $m[1][$c-1];
$last = str_replace('/cgi-bin/manage?action=create&oid=', '', $last);
$last = str_replace('http://www.oid-info.com/get/', '', $last);
$last = str_replace('http://oid-info.com/get/', '', $last);
 
return $last;
}
 
# ----------------- ALVESTRAND.NO
# Note that oid-info.com usually contains all OIDs in alvestrands repository.
 
# todo: + submissions checken (not proofread)
# todo: 404
# todo: fertig
# todo: <p> als \n werten, alles andere als nichts
 
# Callback for Link-Replacing
function alv_link_replacing_cb($treffer) {
# '[$4] &lt;$2&gt;'
 
$name = $treffer[4];
$link = $treffer[2];
 
if (trim(strip_tags($name)) == '') {
return '';
}
 
# relative -> absolute links
if (substr($link, 0, 3) == '../') {
$link = 'http://www.alvestrand.no/'.$link;
} else if ($link[0] == '/') {
$link = 'http://www.alvestrand.no'.$link;
}
 
return $name . ' &lt;' . $link . '&gt;';
}
 
function check_alvestrand_no($oid) {
$oid = convert_to_dot($oid);
 
$father = oid_up($oid);
if ($father == $oid) $father = false;
 
$url = "http://www.alvestrand.no/objectid/$oid.html";
 
$x = file_get_contents2($url);
 
echo "% Parsing via regex from '$url'\n\n";
 
$x = preg_replace_callback('|<a\s([^>]*?)href="(.*)"([^>]*?)>(.*)</a>|ismU', 'alv_link_replacing_cb', $x);
 
$x = strip_tags($x);
 
$x = str_replace('&nbsp;', ' ', $x);
$x = str_replace('&nbsp', ' ', $x);
 
$x = html_entity_decode($x);
 
$x = preg_replace("| +|", ' ', $x);
$x = preg_replace("|\n *|", "\n", $x);
$x = preg_replace("| *\n|", "\n", $x);
$x = preg_replace("|\n+|", "\n", $x);
 
$x = preg_replace('|<mailto:(.*)&(.*)>|ismU', '<$1@$2>', $x);
 
$x = preg_replace('|Superior references(.*)Incoming OIDs <submissions> that have not been proofread yet|ismU', '', $x);
 
$x = trim($x);
 
echo $x;
 
if (WALK_UP && ($father !== false)) {
echo "\n\n";
echo "% ===========================================================\n";
echo "% Requesting father OID '$father'\n";
echo check_alvestrand_no($father);
}
}
 
function oid_up($oid) {
$p = strrpos($oid, '.');
if ($p === false) return $oid;
return substr($oid, 0, $p);
}
 
function convert_to_dot($oid) {
// {joint-iso-itu-t(2) example(999) 1 2 3} --> 2.999.1.2.3
// 2.999 --> 2.999
// joint-iso-itu-t.999 --> 2.999
 
$oid = str_replace('.', ' ', $oid);
 
# Standardized identifiers
$oid = " $oid ";
$oid = str_replace(' ccitt ', '0 ', $oid);
$oid = str_replace(' itu-r ', '0 ', $oid);
$oid = str_replace(' itu-t ', '0 ', $oid);
$oid = str_replace(' iso ', '1 ', $oid);
$oid = str_replace(' joint-iso-ccitt ', '2 ', $oid);
$oid = str_replace(' joint-iso-itu-t ', '2 ', $oid);
 
$oid = preg_replace("|([^0123456789 ]*)|ismU", "", $oid);
$oid = trim($oid);
$oid = str_replace(' ', '.', $oid);
return $oid;
}
Property changes:
Added: svn:executable
+*
\ No newline at end of property
/trunk/main/subprograms/pa
0,0 → 1,92
#!/usr/bin/php
<?php
 
#
# generic Whois - Subprogram "pa"
#
# (c) 2011 by Daniel Marschall, ViaThinkSoft <www.viathinksoft.de>
#
# Distribution, usage etc. pp. regulated by the current version of GPL.
#
#
#
# History:
# 2011-06-07 mar Initial release
# 2012-01-16 mar Fixed uppercase().
#
 
require_once __DIR__ . '/../../shared/php_includes/common_functions.inc.php';
 
$domain = isset($argv[1]) ? $argv[1] : '';
 
$url = "http://www.nic.pa/whois.php?nombre_d=$domain";
 
$res = "% Parsing via regex from '$url'\n\n";
 
$x = file_get_contents2($url);
 
$x = preg_replace('|sans-serif">\s*</font>|ismU', 'sans-serif">-</font>', $x);
 
$x = strip_tags($x);
 
$ary = explode('Información del Dominio', $x, 2);
 
if (!isset($ary[1])) {
echo "Domain '$domain' does not exist.";
exit(2);
}
 
$x = 'Información del Dominio'.$ary[1];
 
// é -> É @ strtoupper()
/*
$locals = array('es_ES@euro', 'es_ES', 'es');
reset($locals);
while (list(, $locale) = each ($locals)) {
if ( setlocale(LC_CTYPE, $locale) == $locale ) {
break; // Exit when we were successfull
}
}
*/
 
$x = str_replace('&nbsp;', ' ', $x);
 
$x = html_entity_decode($x);
 
$x = str_replace("\t", ' ', $x);
 
$x = preg_replace("| +|", ' ', $x);
$x = preg_replace("|\n *|", "\n", $x);
$x = preg_replace("| *\n|", "\n", $x);
$x = preg_replace("|\n+|", "\n", $x);
 
$x = str_replace(":\n", ": ", $x);
 
$x = str_replace("Nombre\n", 'Nombre ', $x);
$x = str_replace("Contacto\n", 'Contacto ', $x);
$x = str_replace("Fecha\n", 'Fecha ', $x);
 
if (strpos($x, 'Fecha de Creación: 0000-00-00') !== false) {
echo "Domain '$domain' does not exist!";
exit(2);
}
 
$special_words = array(
"Información del Dominio $domain",
);
 
foreach ($special_words as $s) {
$x = str_replace($s, "\n".uc_latin1($s)."\n", $x);
}
 
$x = str_replace("Datos Obtenidos de nuestra base de datos ...\n$domain\n", "\n>>>>", $x);
 
# Emulate tabulators.
$cry = explode(">>>>", $x, 2);
$x = make_tabs($cry[0]);
 
if (isset($cry[1])) $x .= '>>>> '.$cry[1];
 
$x = trim($x);
 
echo $res.trim_each_line($x)."\n";
Property changes:
Added: svn:executable
+*
\ No newline at end of property
/trunk/main/subprograms/pe
0,0 → 1,60
#!/usr/bin/perl
 
#
# generic Whois - pe subprogram
#
# (c) 2015 by Daniel Marschall, ViaThinkSoft <www.viathinksoft.de>
#
# Distribution, usage etc. pp. regulated by the current version of GPL.
#
#
#
# History:
# 2015-05-15 mar Initial release
#
 
use warnings;
use strict;
use utf8;
 
use FindBin;
use lib "$FindBin::Bin/../lib/";
use GWhoIs::Core;
 
if (defined $ARGV[0]) {
$_ = join(' ', @ARGV);
} else {
# If no parameter is given, await an input from STDIN
$_ = <>;
chomp;
}
 
my $query = $_;
 
my $host = "http://www.nic.pe/rpublicac-i.php?txtbuscar=$query&radopcion=D"; # TODO: https?
my $additional = "(detpublic-i.php.*?)'";
 
my ($protocol, $hostname) = GWhoIs::Utils::splitProtocolHost($host);
 
#print "Querying $hostname with $protocol.\n";
 
my ($text, $exitcode) = GWhoIs::Core::wwwsgrep($host,$additional);
if ($exitcode) {
# print STDERR "Query to web server failed.\n";
print $text;
exit $exitcode;
}
 
if ($text ne '') {
print "Match found. Now querying for the domain data.\n\n";
($text, $exitcode) = GWhoIs::Core::doquery($query,'cgi',"$protocol://$hostname/$text", '');
print $text;
} else {
print "No match found. This probably means that this domain does not exist.\n";
}
 
if ($exitcode) {
# print STDERR "Query to web server failed.\n";
}
 
exit $exitcode;
Property changes:
Added: svn:executable
+*
\ No newline at end of property
/trunk/main/subprograms/pk
0,0 → 1,93
#!/usr/bin/php
<?php
 
#
# generic Whois - Subprogram "pk"
#
# (c) 2012 by Daniel Marschall, ViaThinkSoft <www.viathinksoft.de>
#
# Distribution, usage etc. pp. regulated by the current version of GPL.
#
#
#
# History:
# 2012-11-19 mar Initial release
#
 
require_once __DIR__ . '/../../shared/php_includes/common_functions.inc.php';
 
$domain = isset($argv[1]) ? $argv[1] : '';
 
$url = "http://pk5.pknic.net.pk/pk5/lookup.PK";
 
$res = "% Parsing via regex from '$url'\n\n";
 
$x = file_get_contents2($url, 'name='.$domain);
 
if (strpos($x, '<XPC_RESULT_NOTFOUND/>') !== false) {
define('BEGIN', '<td id="Tmain">');
define('END', '<XPC_RESULT_NOTFOUND/>');
} else {
define('BEGIN', '<p class="pkheading">');
define('END', '<SPAN class="sideHead">');
}
 
preg_match_all('@'.preg_quote(BEGIN, '@').'(.*)'.preg_quote(END, '@').'@ismU', $x, $m);
 
if (!isset($m[1][0])) {
echo "Error while parsing the web content. Could not find limitations.\n";
exit(1);
}
$x = $m[1][0];
 
$x = strip_tags($x);
 
// é -> É @ strtoupper()
/*
$locals = array('es_ES@euro', 'es_ES', 'es');
reset($locals);
while (list(, $locale) = each ($locals)) {
if ( setlocale(LC_CTYPE, $locale) == $locale ) {
break; // Exit when we were successfull
}
}
*/
 
$x = str_replace('&nbsp;', ' ', $x);
 
$x = html_entity_decode($x);
 
$x = preg_replace("| +|", ' ', $x);
$x = preg_replace("|\n *|", "\n", $x);
$x = preg_replace("| *\n|", "\n", $x);
$x = preg_replace("|\n+|", "\n", $x);
 
$x = str_replace(":\n", ": ", $x);
 
while (strpos($x, "\t") !== false) $x = str_replace("\t", '', $x);
while (strpos($x, ' ') !== false) $x = str_replace(' ', ' ', $x);
 
# Avoid "Contact person: Address:" if there is no contact person. Add a line break
$x = preg_replace('@^([^:\n]+):\s+([^\n:]+):@m', "\\1:\n\\2:", $x);
 
$x = make_tabs($x);
 
$x = trim($x);
 
$x = preg_replace("@\n\s+\n@", "\n\n", $x);
 
while (strpos($x, "\n\n") !== false) $x = str_replace("\n\n", "\n", $x);
 
$x = preg_replace('@The Domain record for(.*)\n@', 'The Domain record for\\1'."\n\n", $x);
 
$special_words = array(
'Technical Contact',
'Billing Contact',
'Nameservers'
);
 
foreach ($special_words as $s) {
$x = str_replace($s, "\n".uc_latin1($s)."\n", $x);
}
 
echo $res.trim_each_line($x)."\n";
Property changes:
Added: svn:executable
+*
\ No newline at end of property
/trunk/main/subprograms/sh
0,0 → 1,41
#!/usr/bin/php
<?php
 
#
# generic Whois - Subprogram "sh"
#
# (c) 2013 by Daniel Marschall, ViaThinkSoft <www.viathinksoft.de>
#
# Distribution, usage etc. pp. regulated by the current version of GPL.
#
#
#
# History:
# 2013-07-25 mar Initial release
#
 
require_once __DIR__ . '/../../shared/php_includes/common_functions.inc.php';
 
$domain = isset($argv[1]) ? $argv[1] : '';
 
$url = "http://www.nic.sh/cgi-bin/whois?query=$domain";
 
$cont = file_get_contents2($url);
 
if (preg_match('@<!--- ### --->(.+)<!--- ### --->@ismU', $cont, $m)) {
$cont = $m[1];
} else {
// Error or domain is available
if (preg_match('@<!--- ERROR: .+ --->\n\n<h2>Domain Information</h2>\n<hr>\n<h3>.+</h3>(.+)<br /><br />@ismU', $cont, $m)) {
$cont = $m[1];
}
}
 
$cont = html_entity_decode(strip_tags($cont));
 
// Remove whitespaces at the beginning of each line
$cont = preg_replace('@([\r\n])[ \t]+(\S)@isU', '\\1\\2', $cont);
$cont = trim($cont);
 
echo "Information about $domain extracted from $url:\n\n";
echo $cont."\n";
Property changes:
Added: svn:executable
+*
\ No newline at end of property
/trunk/main/subprograms/sn
0,0 → 1,33
#!/usr/bin/php
<?php
 
#
# generic Whois - Subprogram "sn"
#
# (c) 2013 by Daniel Marschall, ViaThinkSoft <www.viathinksoft.de>
#
# Distribution, usage etc. pp. regulated by the current version of GPL.
#
#
#
# History:
# 2013-08-22 mar Initial release
#
 
require_once __DIR__ . '/../../shared/php_includes/common_functions.inc.php';
 
$domain = isset($argv[1]) ? $argv[1] : '';
 
$url = 'http://whois.nic.sn/';
 
$post = "domaine=$domain";
 
$cont = file_get_contents2($url, $post);
 
preg_match('@<div class="content">(.+)</div>@ismU', $cont, $m);
 
$cont = $m[1];
 
$cont = strip_tags($cont);
 
echo trim(html_entity_decode($cont))."\n";
Property changes:
Added: svn:executable
+*
\ No newline at end of property
/trunk/main/subprograms/teredo_decoder
0,0 → 1,154
#!/usr/bin/perl
 
#
# generic Whois - Teredo address decoder
#
# (c) 2012 by Daniel Marschall, ViaThinkSoft <www.viathinksoft.de>
#
# Distribution, usage etc. pp. regulated by the current version of GPL.
#
#
#
# History:
# 2012-02-23 mar Initial release
# 2012-11-19 mar Tabs -> Spaces
#
 
# todo: möglichkeit geben, den prefix-check per CLI zu deaktivieren
 
use warnings;
use strict;
 
my $prefix_check = 1;
 
# install with "cpan Net::IP"
use Net::IP qw(ip_expand_address);
 
use Net::DNS;
 
sub parse_teredo_ipv6 {
# See: http://en.wikipedia.org/wiki/Teredo_tunneling#IPv6_addressing
 
my ($ipv6_addr) = @_;
 
$ipv6_addr = ip_expand_address($ipv6_addr, 6);
 
my ($prefix, $teredo_server, $flags, $udp_port, $client_ipv4)
= $ipv6_addr =~ /([0-9a-f]{4}:[0-9a-f]{4}):([0-9a-f]{4}:[0-9a-f]{4}):([0-9a-f]{4}):([0-9a-f]{4}):([0-9a-f]{4}:[0-9a-f]{4})/i;
 
return ($ipv6_addr, "") if !defined $prefix;
return ($ipv6_addr, $prefix) if $prefix_check && ($prefix ne "2001:0000") && ($prefix ne "3ffe:831f");
 
# $teredo_server=~ s/://;
$teredo_server = hex2ip4($teredo_server);
 
# MSB first, is "CRAAAAUG AAAAAAAA",
# where "C" remains the "Cone NAT" flag
# The "R" bit is reserved for future use
# The "U" bit is for the Universal/Local flag (set to 0).
# The "G" bit is Individual/Group flag (set to 0).
# The A bits are set to a 12-bit randomly generated number
# chosen by the Teredo client to introduce additional protection
# for the Teredo node against IPv6-based scanning attacks.
$flags = hex($flags);
my $flag_cone_nat = ($flags & 0x8000) == 0x8000 ? 1 : 0;
my $flag_reserved = ($flags & 0x4000) == 0x4000 ? 1 : 0;
my $flag_universal_local = ($flags & 0x0200) == 0x0200 ? 1 : 0;
my $flag_individual_group = ($flags & 0x0100) == 0x0100 ? 1 : 0;
my $flag_random_12bit = (($flags & 0x3C00) >> 2) | ($flags & 0x00FF);
 
$udp_port = hex($udp_port) ^ 0xFFFF; # decode
 
$client_ipv4 =~ s/://;
$client_ipv4 = sprintf('%x', hex($client_ipv4) ^ 0xFFFFFFFF); # decode
$client_ipv4 = hex2ip4($client_ipv4);
 
return ($ipv6_addr, $prefix, $teredo_server, $flags, $flag_cone_nat, $flag_reserved,
$flag_universal_local, $flag_individual_group,
$flag_random_12bit, $udp_port, $client_ipv4);
}
 
sub print_teredo_info {
my ($ipv6_addr, $prefix, $teredo_server, $flags, $flag_cone_nat, $flag_reserved,
$flag_universal_local, $flag_individual_group,
$flag_random_12bit, $udp_port, $client_ipv4) = @_;
 
if ($prefix_check && ($prefix ne "2001:0000") && ($prefix ne "3ffe:831f")) {
print "Invalid Teredo address $ipv6_addr\n";
return;
}
 
my @revdns;
print "Teredo IPv6 address: ", $ipv6_addr, "\n";
# Is "2001:0000" or "3ffe:831f" (deprecated)
print "Teredo prefix: ", $prefix, "\n";
print "Teredo server: ", $teredo_server, "\n";
@revdns = revdns_ipv4($teredo_server);
foreach my $addr (@revdns) {
print " $addr\n";
}
print "Flags: ", $flags, "\n";
print " Cone NAT flag: ", $flag_cone_nat, "\n";
print " Reserved flag: ", $flag_reserved, "\n";
print " Universal/Local flag: ", $flag_universal_local, "\n";
print " Individual/Group flag: ", $flag_individual_group, "\n";
print " Random 12 bits: ", $flag_random_12bit, "\n"; # 0..4095
print "Client UDP port: ", $udp_port, "\n";
print "Client public IPv4: ", $client_ipv4, "\n";
@revdns = revdns_ipv4($client_ipv4);
foreach my $addr (@revdns) {
print " $addr\n";
}
}
 
sub hex2ip4 {
my ($hex) = @_;
$hex =~ s/[^0-9a-f]//i;
my ($ip4a, $ip4b, $ip4c, $ip4d) = $hex =~ /([0-9a-f]{2})([0-9a-f]{2})([0-9a-f]{2})([0-9a-f]{2})/i;
$ip4a = hex($ip4a);
return if !defined $ip4a;
$ip4b = hex($ip4b);
return if !defined $ip4b;
$ip4c = hex($ip4c);
return if !defined $ip4c;
$ip4d = hex($ip4d);
return if !defined $ip4d;
return "$ip4a.$ip4b.$ip4c.$ip4d";
}
 
sub revdns_ipv4 {
# Source: http://stackoverflow.com/questions/85487/reverse-dns-lookup-in-perl
 
my ($ipv4) = @_;
 
my $res = Net::DNS::Resolver->new;
 
# create the reverse lookup DNS name (note that the octets in the IP address need to be reversed).
my $target_IP = join('.', reverse split(/\./, $ipv4)).".in-addr.arpa";
 
my @out = qw();
 
my $query = $res->query("$target_IP", "PTR");
 
if ($query) {
foreach my $rr ($query->answer) {
next unless $rr->type eq "PTR";
push (@out, $rr->rdatastr);
}
} else {
# warn "Reverse DNS query failed: ", $res->errorstring, "\n";
push (@out, "Reverse DNS query failed: ".$res->errorstring."\n");
}
 
return @out;
}
 
if ($ARGV[0]) {
$_ = join(' ',@ARGV);
} else {
$_ = <>;
chomp;
}
 
my @info = parse_teredo_ipv6($_);
print_teredo_info(@info);
Property changes:
Added: svn:executable
+*
\ No newline at end of property
/trunk/main/subprograms/tt
0,0 → 1,78
#!/usr/bin/php
<?php
 
#
# generic Whois - Subprogram "tt"
#
# (c) 2011 by Daniel Marschall, ViaThinkSoft <www.viathinksoft.de>
#
# Distribution, usage etc. pp. regulated by the current version of GPL.
#
#
#
# History:
# 2011-06-07 mar Initial release
#
 
require_once __DIR__ . '/../../shared/php_includes/common_functions.inc.php';
 
$domain = isset($argv[1]) ? $argv[1] : '';
 
$url = "https://www.nic.tt/cgi-bin/search.pl";
$post = "name=$domain";
 
$res = "% Parsing via regex from '$url' with post parameters '$post'\n\n";
 
$x = file_get_contents2($url, $post);
 
preg_match_all('|<div id="main">(.*)<div id="foot">|ismU', $x, $m);
 
$x = $m[1][0];
 
# The Domain Name <font color=red>nia.tt</font> is available.
$x = str_replace('<font color=red>', '', $x);
$x = str_replace('</font>', '', $x);
 
# Entferne, wenn möglich:
# Domain Search Form
# Enter Domain Name:
$bry = explode('</form>', $x, 2);
$x = $bry[count($bry)-1];
 
$x = str_replace('>', ">\n", $x);
 
$x = strip_tags($x);
 
# &nbsp -> &nbsp; -- did they really do this? yeah...
$x = preg_replace('|&nbsp(?!;)|ismU', '&nbsp;', $x);
 
// You might wonder why trim(html_entity_decode('&nbsp;')); doesn't reduce the string to an
// empty string, that's because the '&nbsp;' entity is not ASCII code 32
// (which is stripped by trim()) but ASCII code 160 (0xa0) in the default ISO 8859-1 characterset.
$x = str_replace("&nbsp;", " ", $x);
 
$x = html_entity_decode($x);
 
$x = preg_replace("| +|", ' ', $x);
$x = preg_replace("|\n *|", "\n", $x);
$x = preg_replace("|\n+|", "\n", $x);
 
$special_words = array(
'Domain Name',
'Registrant Name',
'Registrant Address',
'DNS Hostnames',
'DNS IP Addresses',
'Expiration Date',
'Administrative Contact',
'Technical Contact',
'Billing Contact'
);
 
foreach ($special_words as $s) {
$x = str_replace("\n$s\n", "\n\n".strtoupper($s)."\n\n", $x);
}
 
$x = trim($x);
 
echo $res.trim_each_line($x)."\n";
Property changes:
Added: svn:executable
+*
\ No newline at end of property
/trunk/main/subprograms/vi
0,0 → 1,42
#!/usr/bin/php
<?php
 
#
# generic Whois - Subprogram "vi"
#
# (c) 2013 by Daniel Marschall, ViaThinkSoft <www.viathinksoft.de>
#
# Distribution, usage etc. pp. regulated by the current version of GPL.
#
#
#
# History:
# 2013-07-25 mar Initial release
#
 
require_once __DIR__ . '/../../shared/php_includes/common_functions.inc.php';
 
$domain = isset($argv[1]) ? $argv[1] : '';
 
$url = 'https://secure.nic.vi/whois-lookup/';
 
$post = 'submitted=true&domainName='.rawurlencode($domain);
 
$cont = file_get_contents2($url, $post);
 
if (preg_match('@<div class="results">(.+)</div>@ismU', $cont, $m)) {
$cont = $m[1];
}
 
// There is a "secret" field named "Name". Why hide it?
$cont = str_replace('<!--', '', $cont);
$cont = str_replace('-->', '', $cont);
 
$cont = html_entity_decode(strip_tags($cont));
 
// Remove whitespaces at the beginning of each line
$cont = preg_replace('@([\r\n])[ \t]+(\S)@isU', '\\1\\2', $cont);
$cont = trim($cont);
 
echo "Information about $domain extracted from $url:\n\n";
echo $cont."\n";
Property changes:
Added: svn:executable
+*
\ No newline at end of property
/trunk/main/subprograms/vu
0,0 → 1,84
#!/usr/bin/php
<?php
 
#
# generic Whois - Subprogram "vu"
#
# (c) 2014 by Daniel Marschall, ViaThinkSoft <www.viathinksoft.de>
#
# Distribution, usage etc. pp. regulated by the current version of GPL.
#
#
#
# History:
# 2014-02-02 mar Initial release
#
 
/*
 
Official whois server is: vunic.vu
 
But the page http://www.vunic.vu/whoiss/whois.php
contains following additional information:
- EMail
- Date modified
- Registrar
 
*/
 
require_once __DIR__ . '/../../shared/php_includes/common_functions.inc.php';
 
$domain = isset($argv[1]) ? $argv[1] : '';
 
if (preg_match('@(.*)((|\.com|\.edu|\.net|\.org)(\.vu))@isU', $domain, $m)) {
$domain_wotld = $m[1];
$tld = $m[2];
} else {
echo "'$domain' is not a valid .vu domain.\n";
exit(2);
}
 
$url = 'http://www.vunic.vu/whoiss/process_whois.php';
 
$post = 'domain='.rawurlencode($domain_wotld).'&ext='.rawurlencode($tld);
 
$cont = file_get_contents2($url, $post);
 
$cont = str_replace('</tr>', "\n", $cont);
 
$cont = html_entity_decode(strip_tags($cont));
 
// Remove whitespaces at the beginning of each line
$cont = preg_replace('@([\r\n])[ \t]+(\S)@isU', '\\1\\2', $cont);
$cont = trim($cont);
 
$cont = str_replace("\r", '', $cont);
 
$ary = explode("\n", $cont);
$cont = '';
foreach ($ary as $a) {
$a = trim($a);
if ($a == '') continue;
$cont .= "$a\n";
}
 
$cont = preg_replace('@^(Domain|Registrar|Date Created|Date Modified|Expiry Date)\n@ismU', '$1: ', $cont);
 
$cont = str_replace('DNS Server',
"\nDNS Server\n", $cont);
 
$cont = str_replace('Registrant',
"\nRegistrant\n", $cont);
 
$cont = str_replace('Other results you may like',
"\nOther results you may like\n\n", $cont);
 
$cont = preg_replace("@ {0,1}:\n@ismU", ": ", $cont);
$cont = str_replace(' : ', ': ', $cont);
 
# ---
 
$puburl = 'http://www.vunic.vu/whoiss/whois.php';
 
echo "Information about $domain extracted from $puburl:\n\n";
echo $cont."\n";
Property changes:
Added: svn:executable
+*
\ No newline at end of property
/trunk/main/subprograms
Property changes:
Added: svn:ignore
+.test
/trunk/maintenance/config/dead-servers.list
0,0 → 1,27
# These whois servers are dead and we have no replacement. We list them here so we get notified when they come back.
# whois.6bone.net
whois.kcce.kp
whois.nic.mp
whois.nic.ck
whois.nic.mil
whois.namecoin.us
whois.bn
whois.quebec.rs.corenic.net
whois.bazaar.coreregistry.net
nic.net.ge
whois.nic.ec
whois.scot.coreregistry.net
whois.eus.coreregistry.net
whois.gal.coreregistry.net
whois.mango.coreregistry.net
whois.nic.cd
whois.nic.ki
 
# does not listen to public IPs anymore. The whois server only accepts calls from the web interface
whois.registry.hm
 
# Only opened for authorized resellers. Maybe they will open for the public again
whois.mynic.my
 
# This was the registry of 210.8/14 (AAPT Limited)
whois.connect.com.au
/trunk/maintenance/config/gwhois-pattern-update.conf
0,0 → 1,38
#
# generic Whois - Automatic Pattern Generator: New gTLDs
#
# (c) 2012-2015 Daniel Marschall, ViaThinkSoft [www.viathinksoft.de]
#
# Distribution, usage etc. pp. regulated by the current version of GPL.
#
#
# Version 2015-04-15
#
 
# For all
USE_CACHE=1
 
# Only for IPv4 and IPv6
INCLUDE_BLOCK_RANGE_COMMENTS=0
 
# Only for IPv4 and IPv6
USE_IANA_DATA=1
 
# Only for IPv4 and IPv6
# STRONGLY RECOMMENDED
USE_RIR_STAT_DATA=1
 
# 24/8 instead of 24.0.0.0/8
IPV4_SHORT_FORM=1
 
# For all
# Shows more than just 2 lines information about network objects!
ENABLE_UNFILTERED_ARIN_OUTPUT=1
 
# For all
# E-Mail addresses are shown (but are protected by GWhoIs itself by default)
ENABLE_UNFILTERED_RIPE_OUTPUT=1
 
# For generate_domains only
DOMAINS_RECHECK_MISSING_WHOIS_SERVERS=7 # days
TRY_FINDING_HIDDEN_WHOIS_SERVERS=1
/trunk/maintenance/config/qa-monitor.conf
0,0 → 1,28
# --- These values are used by "qa-monitor" subprogram
 
# Diese offiziell bei der IANA eingetragenen
# Whois server sind entweder kaputt oder sind durch was
# besseres/informativeres ersetzt worden und müssen daher nicht
# einkommentiert sein.
#
# Diese Liste sollte ständig geprüft werden:
# 1) ist der fragwürdige whois server immer noch in der IANA root db? (wenn nein, dann hat sich das problem wahrscheinlich schon gelöst und der eintrag kann verschwinden)
# 2) gibt es immer noch das problem?
 
# AC: The subprogram "ac" shows more verbose information than the whois server (like creation date)
# SH: "sh" has the same problem as "ac" -- they are probably using the same software since the output looks equal
# VU: The subprogram "vu" does show more verbose information
# MQ and GF: The whois server whois.mediaserv.net only shows "NO OBJECT FOUND!"
# GE: The whois server whois.registration.ge only shows "NO OBJECT FOUND!". Therefore, the subprogram "ge" parses the website.
# The whois server whois.itdc.ge always shows a syntax error
EXCLUDE_WHOIS=AC SH VU MQ GF GE
 
# --- These values are used by "whois-ping" subprogram
 
# After which time should we notice a whois server as "dead" (seconds)
# 432000 = 5 days
WHOIS_SERVER_DEAD_AFTER=432000
 
# After which time should we recheck the whois server
# 604800 = 7 days
RECHECK_AFTER=604800
/trunk/maintenance/config/testcases.annot
0,0 → 1,17
ati.tn: whois.ati.tn handle FSI-ATI not working
cnnic.cn: whois.cnnic.cn handle 20030310s10001s00012956-cn not working
cnnic.cn: whois.cnnic.cn handle s1255673574881 not working
AS681: whois.apnic.net handle MNT-ERX-WAIKATOUNI-NON-NZ to check
AS681: whois.apnic.net handle ERX-KAWAIHIKO-1 to check
AS1228: Should there be a -B flag?
AS327680: Should there be a -B flag used?
ORG-ARIN1-AFRINIC: "-B" flag
AFRINIC-042005: "-B" flag
41.0.0.0: -B flag?
andorratelecom.ad: could be better formatted.
andorratelecom.ad: is there a better whois service? is this whois service only for government domains?
aeda.net.ae: they write "whois.aeda.ae", but the correct address is "whois.aeda.net.ae"
ru.ac.za: Output could be better formatted.
nic.af: 488169-CoCCA kann nicht durch whois aufgelöst werden
C270-LRMS: R145-LRMS auch pattern anlegen?
intrans.ba: lat -> eng
/trunk/maintenance/config/testcases.conf
0,0 → 1,16
 
# Default: i (interactive)
mode="i"
 
# Default: 3 days
# Attention: This value should not be exactly in 24h intervals if you use a 24h-cronjob! Always subtract a few minutes.
# (Otherwise, qa-audit calls will invoke a full check when the user does not want it)
# TODO: in the qa-audit, opt out the check via "--never-check", so that CALL_GWI=0 in testcases/single.sh
recheck_time=259000
 
# Default: 0
force=0
 
# This option cannot be set in the CLI options
trytor=1
 
/trunk/maintenance/config/testcases.list
0,0 → 1,1288
#invalid domain
.x
 
#real idn
test.テスト
 
#6to4
2002:2030:4050::2
 
#as-afrinic-16
AS1228
 
#as-afrinic-32
AS327680
 
#as-apnic-16
AS681
 
#as-apnic-32
AS131072
 
#as-arin-16
AS1
 
#as-arin-32
AS393216
 
#as-lacnic-16
AS278
 
#as-lacnic-32
AS262144
 
#as-ripe-16
AS224
 
#as-ripe-32
AS196608
 
#hdl-aero
C223523-AERO
D322-AERO
 
#hdl-afrinic
ORG-ARIN1-AFRINIC
AFRINIC-042005
 
#hdl-ag
R32-LRCC
D52707-LRCC
 
#hdl-apnic
MAINT-APNIC-AP
DNS3-AP
 
#hdl-arin
DOCKM1-ARIN
 
#hdl-asia
C270-ASIA
R118-ASIA
D24374-ASIA
R2-ASIA
 
#hdl-at
NAIV1902732-NICAT
NAR1899634-NICAT
UH567003-NICAT
AT-DOM
 
#hdl-au
CONNECT-AU
 
#hdl-biz
D712-BIZ
 
#hdl-ck
RM1-CKNIC
CK-NIC-MNT
 
#hdl-cn
20030310s10001s00012956-cn
 
#hdl-co
D734276-CO
 
#hdl-corenic
D10120103-CONE
COCO-10119103
 
#hdl-de
DENIC-8
DENIC-8-RC39151342
 
#hdl-es
JGT6-ESNIC-F4
SA28789-ESNIC-F4
 
#hdl-fr
AFNI21-FRNIC
 
#hdl-info
C270-LRMS
D217-LRMS
R145-LRMS
 
#hdl-jp
SK222JP
HW1733JP
 
#hdl-lacnic
MX-UNAM1-LACNIC
 
#hdl-museum
C728-MUSEUM
D6136003-MUSEUM
 
#hdl-name
2891347DOMAIN-NAME
222REGISTRAR-NAME
3110912CONTACT-NAME
1420418HOST-NAME
 
#hdl-norid
UNA78O-NORID
 
#hdl-org-za
TEST_1255595960_ORGZA
 
#hdl-ripe
RIPE-NCC-RIS-MNT
RISM-RIPE
 
#hdl-rucenter
RUCENTER-REG-FID
RU-CENTER-REG-RIPN
 
#hdl-sc
R138-LRCC
D1972475-LRCC
 
#hdl-sg
SGNIC-ORGSI134835
 
#hdl-sixxs
DMZ9-SIXXS
 
#hdl-tel
D583364-TEL
 
#hdl-travel
D99505-TRAVEL
 
#hdl-ua
ST101-UANIC
 
#hdl-xxx
ICMFCON00000001
D131092-XXX
R3189-XXX
 
#ip-au
210.8.0.0
 
#ip-jp
61.192.0.0
 
#ip-kr
61.72.0.0
 
#ipv4-afrinic
41.0.0.0
 
#ipv4-br
200.128.0.0
 
#ipv4-iana
224.0.0.0
 
#ipv4-lacnic
24.232.0.0
 
#ipv4-ripe
2.0.0.0
 
#ipv4-tw
61.216.0.0
 
#ipv6-6bone
3ffe::
 
#ipv6-afrinic
2c00::
 
#ipv6-apnic
2400::
 
#ipv6-arin
2620::
 
#ipv6-lacnic
2800::
 
#ipv6-ripe
2a00::
 
#oid-invalid
oid:3
 
#oid-valid
oid:2.999
 
#rwhois-ips
108.171.243.10
68.233.238.33
 
#teredo
2001:0000:4136:e378:8000:63bf:3fff:fdd2
 
#tld
de
com
net
tld net
tld jp
 
#tld-ac
nic.ac
invalid.ac
manchester.ac
 
#tld-ac.za
ru.ac.za
 
#tld-ad
andorratelecom.ad
 
#tld-ae
aeda.net.ae
aeda.ae
 
#tld-aero
whois.aero
 
#tld-af
nic.af
 
#tld-ag
nic.ag
 
#tld-ai
whois.ai
offshore.ai
 
#tld-al
akep.al
 
#tld-am
nic.am
 
#tld-an
una.an
 
#tld-ao
nexus.ao
 
#tld-aq
icenic.aq
 
#tld-ar
cancilleria.gov.ar
 
#tld-arpa
in-addr.arpa
 
#tld-as
nic.as
 
#tld-asia
nic.asia
 
#tld-at
nic.at
 
#tld-au
audns.net.au
 
#tld-aw
setarnet.aw
 
#tld-ax
regeringen.ax
 
#tld-az
fa.az
 
#tld-ba
intrans.ba
 
#tld-bb
telecoms.gov.bb
 
#tld-bd
mopt.gov.bd
btcl.net.bd
invalid.bd
 
#tld-be
dns.be
 
#tld-bf
arce.bf
 
#tld-bg
register.bg
 
#tld-bh
batelco.com.bh
 
#tld-bi
nic.bi
 
#tld-biz
whois.biz
 
#tld-bj
nic.bj
 
#tld-bl
nic.bl
 
#tld-bm
gov.bm
 
#tld-bn
brunet.bn
 
#tld-bo
nic.bo
 
#tld-br
registro.br
cert.br
 
#tld-bs
cob.edu.bs
 
#tld-bt
bt.bt
 
#tld-bu
nic.bu
 
#tld-bv
nic.bv
 
#tld-bw
btc.bw
 
#tld-by
tld.by
 
#tld-bz
belizenic.bz
bcs.edu.bz
lv.com.bz
 
#tld-ca
cira.ca
eonline.ca
 
#tld-cat
whois.cat
 
#tld-cc
nic.cc
 
#tld-cd
nic.cd
 
#tld-cf
socatel.cf
 
#tld-cg
nic.cg
 
#tld-ch
domian.ch
#nic.ch
 
#tld-ci
nic.ci
 
#tld-ck
telecom.co.ck
 
#tld-cl
nic.cl
 
#tld-cm
camnet.cm
register.cm
 
#tld-cn
cnnic.cn
 
#tld-co
nic.co
invalidx.co
 
#tld-co.za
test.co.za
 
#tld-com
verisign-grs.com
dracenmarx.com
viathinksoft.com
 
#tld-coop
nic.coop
 
#tld-cr
ns.cr
 
#tld-cs
nic.cs
 
#tld-cu
ceniai.inf.cu
nic.cu
invalid.cu
 
#tld-cv
anac.cv
 
#tld-cw
uts.cw
 
#tld-cx
nic.cx
 
#tld-cy
ucy.ac.cy
 
#tld-cz
nic.cz
 
#tld-dd
nic.dd
 
#tld-de
denic.de
 
#tld-dj
nic.dj
 
#tld-dk
dk-hostmaster.dk
 
#tld-dm
nic.dm
courts.co.dm
 
#tld-do
pucmm.edu.do
 
#tld-dz
nic.dz
 
#tld-ec
nic.ec
 
#tld-edu
educause.edu
 
#tld-ee
tld.ee
 
#tld-eg
egregistry.eg
 
#tld-er
noc.net.er
 
#tld-es
nic.es
crimestoppers.es
 
#tld-et
ethionet.et
 
#tld-eu
whois.eu
 
#tld-fi
whois.fi
 
#tld-fj
usp.ac.fj
 
#tld-fk
fidc.co.fk
 
#tld-fm
mail.fm
 
#tld-fo
nic.fo
 
#tld-fr
nic.fr
 
#tld-ga
gabontelecom.ga
 
#tld-gb
dfhnet.dra.hmg.gb
 
#tld-gd
nic.gd
 
#tld-ge
sanet.ge
 
#tld-gf
nic.gf
 
#tld-gg
whois.gg
 
#tld-gh
nic.gh
gaf.mil.gh
yellowpages.gh
 
#tld-gi
sapphire.gi
 
#tld-gl
nic.gl
 
#tld-gm
nic.gm
 
#tld-gn
areeba.com.gn
 
#tld-gov
dotgov.gov
 
#tld-gp
ntgroup.gp
invalid.gp
 
#tld-gq
orange-getesa.gq
 
#tld-gr
ics.forth.gr
 
#tld-gs
nic.gs
 
#tld-gt
uvg.edu.gt
invalid.gt
 
#tld-gu
dollar.com.gu
 
#tld-gw
register.gw
 
#tld-gy
registry.gy
 
#tld-hk
hkirc.hk
 
#tld-hm
registry.hm
 
#tld-hn
rds.org.hn
 
#tld-hr
dns.hr
 
#tld-ht
nic.ht
 
#tld-hu
nic.hu
 
#tld-id
iptek.net.id
 
#tld-ie
domainregistry.ie
 
#tld-il
isoc.org.il
 
#tld-im
nic.im
 
#tld-in
afilias.in
 
#tld-info
afilias.info
 
#tld-int
ectel.int
 
#tld-io
nic.io
 
#tld-iq
cmc.iq
 
#tld-ir
nic.ir
 
#tld-is
isnic.is
 
#tld-it
nic.it
 
#tld-je
whois.je
 
#tld-jm
uwimona.edu.jm
 
#tld-jo
nitc.gov.jo
 
#tld-jobs
goto.jobs
 
#tld-jp
jprs.jp
 
#tld-ke
kenic.or.ke
 
#tld-kg
domain.kg
 
#tld-kh
dns.net.kh
 
#tld-ki
nic.ki
 
#tld-km
comorestelecom.km
 
#tld-kn
knnic.kn
 
#tld-kp
star-co.net.kp
 
#tld-kr
nic.kr
#whois.kr
 
#tld-kw
moc.kw
 
#tld-ky
icta.ky
 
#tld-kz
nic.kz
 
#tld-la
nic.la
 
#tld-lb
aub.edu.lb
 
#tld-lc
isisworld.lc
 
#tld-li
nic.li
 
#tld-lk
cse.mrt.ac.lk
 
#tld-lr
nimbaunitedfc.com.lr
 
#tld-ls
denver.co.ls
metolong.org.ls
invalidx.ls
 
#tld-lt
domreg.lt
 
#tld-lu
dns.lu
 
#tld-lv
nic.lv
adidas.lv
 
#tld-ly
nic.ly
 
#tld-ma
iam.net.ma
 
#tld-mc
gouv.mc
 
#tld-md
nic.md
 
#tld-me
nic.me
 
#tld-mf
nic.mf
 
#tld-mg
nic.mg
 
#tld-mh
dgt.mh
 
#tld-mil
nic.mil
 
#tld-mk
ultra.ultra.com.mk
 
#tld-ml
sotelma.ml
 
#tld-mm
mptmail.net.mm
 
#tld-mn
nic.mn
 
#tld-mo
umac.mo
 
#tld-mobi
mtld.mobi
 
#tld-mp
nic.mp
 
#tld-mq
microforce.mq
lechateau.mq
 
#tld-mr
cse.mr
 
#tld-ms
nic.ms
 
#tld-mt
nic.org.mt
 
#tld-mu
nic.mu
 
#tld-museum
whois.museum
 
#tld-mv
dhiraagu.com.mv
 
#tld-mw
sdnp.org.mw
 
#tld-mx
whois.mx
 
#tld-my
domainregistry.my
 
#tld-mz
zebra.uem.mz
 
#tld-na
na-nic.com.na
 
#tld-name
nic.name
suggest.name
 
#tld-nc
whois.nc
 
#tld-ne
amnic.ne
 
#tld-net
amnic.net
 
#tld-nf
nic.net.nf
 
#tld-ng
nic.net.ng
 
#tld-ni
nic.ni
 
#tld-nl
domain-registry.nl
 
#tld-no
norid.no
 
#tld-nom.za
smith.nom.za
 
#tld-np
mos.com.np
 
#tld-nr
naurugov.nr
invalid.nr
 
#tld-nr-co-redirect
greenyouthgeneration.co.nr
xxxxxxxx.co.nr
 
#tld-nr-de-thirdparty
test.de.nr
xxxxxxxxxx.de.nr
 
#tld-nr-gov
ronlaw.gov.nr
invalid.gov.nr
 
#tld-nr-net
cenpac.net.nr
invalid.net.nr
 
#tld-nu
nic.nu
 
#tld-nz
srs.net.nz
 
#tld-om
registry.om
einsurance.com.om
 
#tld-org
pir.org
 
#tld-org.za
test.org.za
 
#tld-pa
utp.ac.pa
invalid.pa
 
#tld-pe
yachay.pe
 
#tld-pf
spt.gov.pf
 
#tld-pg
unitech.ac.pg
 
#tld-ph
dot.ph
invalid.ph
 
#tld-pk
pknic.net.pk
test.com.pk
invalid.pk
 
#tld-pl
dns.pl
 
#tld-pm
nic.pm
 
#tld-pn
pitcairn.gov.pn
invalid.pn
 
#tld-post
nothingknown.post
 
#tld-pr
nic.pr
 
#tld-pro
registrypro.pro
 
#tld-ps
gcc.gov.ps
 
#tld-pt
dns.pt
 
#tld-pw
pwregistry.pw
 
#tld-py
nic.py
teleguia.com.py
una.py
 
#tld-qa
registry.qa
 
#tld-re
nic.re
 
#tld-ro
rotld.ro
 
#tld-rs
rnids.rs
 
#tld-ru
tcinet.ru
 
#tld-rw
brd.rw
nic.rw
 
#tld-sa
nic.net.sa
 
#tld-sb
nic.net.sb
 
#tld-sc
freedomchurch.sc
 
#tld-sd
isoc.sd
 
#tld-se
iis.se
 
#tld-sg
sgnic.sg
 
#tld-sh
nic.sh
 
#tld-si
arnes.si
 
#tld-sj
unknown-tld-sj
nic.sj
 
#tld-sk
sk-nic.sk
 
#tld-sl
afcom.sl
 
#tld-sm
nic.sm
 
#tld-sn
nic.sn
 
#tld-so
nic.so
somalisat.so
 
#tld-sr
telesur.sr
 
#tld-ss
nic.ss
 
#tld-st
nic.st
 
#tld-su
nic.su
WORLDOFWARPLANES.SU
 
#tld-sv
di.uca.edu.sv
 
#tld-sx
whois.sx
nic.sx
registry.sx
 
#tld-sy
tld.sy
 
#tld-sz
sispa.org.sz
 
#tld-tc
adamsnames.tc
icc.tc
 
#tld-td
intnet.td
 
#tld-tel
nic.tel
knysna.tel
 
#tld-tf
nic.tf
 
#tld-tg
cafe.tg
 
#tld-th
thnic.co.th
 
#tld-tj
nic.tj
mintrans.tj
 
#tld-tk
dot.tk
 
#tld-tl
nic.tl
 
#tld-tm
nic.tm
 
#tld-tn
# double UTF-8 encoding!
ati.tn
 
#tld-tn-com
nouvelair.com.tn
 
#tld-to
tonic.to
fail.to
 
#tld-tp
nic.tp
 
#tld-tr
nic.tr
 
#tld-travel
nic.travel
 
#tld-tt
nic.tt
invalid.tt
 
#tld-tv
tuvalu.tv
 
#tld-tw
twnic.net.tw
 
#tld-tz
tznic.or.tz
 
#tld-ua
whois.ua
 
#tld-ug
whois.co.ug
 
#tld-uk
nic.uk
 
#tld-um
nic.um
 
#tld-us
nic.us
 
#tld-uy
nic.org.uy
 
#tld-uz
cctld.uz
 
#tld-va
vatican.va
archiviosegretovaticano.va
 
#tld-vc
mail.gov.vc
 
#tld-ve
nic.ve
 
#tld-vg
nic.vg
bingo.vg
 
#tld-vi
rotarystthomas.vi
 
#tld-vn
vnnic.net.vn
tenmien.vn
 
#tld-vu
nic.vu
invalid.vu
 
#tld-wf
nic.wf
 
#tld-ws
website.ws
 
#tld-xn--0zwm56d
xn--fsqu00a.xn--0zwm56d
 
#tld-xn--11b5bs3a9aj6g
xn--p1b6ci4b4b3a.xn--11b5bs3a9aj6g
 
#tld-xn--3e0b707e
xn--ok0b82d83uwleqxax72c.xn--3e0b707e
 
#tld-xn--45brj9c
unknown-tld-xn--45brj9c
 
#tld-xn--80akhbyknj4f
xn--e1afmkfd.xn--80akhbyknj4f
 
#tld-xn--80ao21a
xn--e1aybc.xn--80ao21a
 
#tld-xn--90a3ac
xn--d1aholi.xn--90a3ac
 
#tld-xn--9t4b11yi5a
xn--9n2bp8q.xn--9t4b11yi5a
 
#tld-xn--clchc0ea0b2g2a9gcd
unknown-tld-xn--clchc0ea0b2g2a9gcd
 
#tld-xn--deba0ad
xn--fdbk5d8ap9b8a8d.xn--deba0ad
 
#tld-xn--fiqs8s
xn--cjrz24bfyfdjk2v4b20c.xn--fiqs8s
 
#tld-xn--fiqz9s
xn--4gqsa60bk09hfz2a.xn--fiqz9s
 
#tld-xn--fpcrj9c3d
unknown-tld-xn--fpcrj9c3d
 
#tld-xn--fzc2c9e2c
xn--fzc3a2azd8dsa2ktat.xn--fzc2c9e2c
 
#tld-xn--g6w251d
xn--fsqu00a.xn--g6w251d
 
#tld-xn--gecrj9c
unknown-tld-xn--gecrj9c
 
#tld-xn--h2brj9c
unknown-tld-xn--h2brj9c
 
#tld-xn--hgbk6aj7f53bba
xn--mgbh0fb.xn--hgbk6aj7f53bba
 
#tld-xn--hlcj6aya9esc7a
xn--zkc6cc5bi7f6e.xn--hlcj6aya9esc7a
 
#tld-xn--j6w193g
xn--q8sz05f.xn--55qx5d.xn--j6w193g
xn--fjqw22h.xn--j6w193g
 
#tld-xn--jxalpdlp
xn--hxajbheg2az3al.xn--jxalpdlp
 
#tld-xn--kgbechtv
xn--mgbh0fb.xn--kgbechtv
 
#tld-xn--kprw13d
xn--8mr3z850bhx6ablr.xn--kprw13d
 
#tld-xn--kpry57d
xn--rlsx8k.xn--kpry57d
 
#tld-xn--lgbbat1ad8j
unknown-tld-xn--lgbbat1ad8j
 
#tld-xn--mgb9awbf
nothingknown.xn--mgb9awbf
 
#tld-xn--mgbaam7a8h
xn--ogbh0eio.xn--mgbaam7a8h
 
#tld-xn--mgbayh7gpa
xn--mgbbv2b6cav.xn--mgbayh7gpa
 
#tld-xn--mgbbh1a71e
unknown-tld-xn--mgbbh1a71e
 
#tld-xn--mgbc0a9azcg
xn------nzeabcaancne6mxa3pircddecvqfa4bhn4cg.xn--mgbc0a9azcg
 
#tld-xn--mgberp4a5d4ar
xn--mgbaa2bbjj1kkm8ak.xn--mgberp4a5d4ar
 
#tld-xn--mgbx4cd0ab
nothingknown.xn--mgbx4cd0ab
 
#tld-xn--o3cw4h
xn--12c3cwavs1kc8c9b.xn--o3cw4h
 
#tld-xn--ogbpf8fl
xn--hgbo2h.xn--ogbpf8fl
 
#tld-xn--p1ai
xn--80aajfpdawelcil0c2d.xn--p1ai
 
#tld-xn--pgbs0dh
xn--pgbus4b3a.xn--pgbs0dh
 
#tld-xn--s9brj9c
unknown-tld-xn--s9brj9c
 
#tld-xn--wgbh1c
xn--ggblala6cyf.xn--wgbh1c
 
#tld-xn--wgbl6a
xn--mgbeh7c1c.xn--wgbl6a
 
#tld-xn--xkc2al3hye2a
xn--rlcuo9h.xn--wlcbmbhil0gb5a8kc.xn--xkc2al3hye2a
 
#tld-xn--xkc2dl3a5ee0h
unknown-tld-xn--xkc2dl3a5ee0h
 
#tld-xn--yfro4i67o
unknown-tld-xn--yfro4i67o
 
#tld-xn--ygbi2ammx
xn--mgbad0esc.xn--ygbi2ammx
 
#tld-xn--zckzah
xn--r8jz45g.xn--zckzah
 
#tld-xxx
nic.xxx
 
#tld-ye
y.net.ye
 
#tld-yt
nic.yt
 
#tld-yu
nic.yu
 
#tld-za
#(Only 3rd-Level-TLD)
 
#tld-zm
zamnet.zm
 
#tld-zr
nic.zr
 
#tld-zw
telone.co.zw
telone-invalid.co.zw
 
/trunk/maintenance/config/urls.conf
0,0 → 1,21
#
# generic Whois - Automatic Pattern Generator: New gTLDs
#
# (c) 2012-2015 Daniel Marschall, ViaThinkSoft [www.viathinksoft.de]
#
# Distribution, usage etc. pp. regulated by the current version of GPL.
#
#
# Version 2015-04-17
#
 
IANA_TLD_REGISTRY="https://data.iana.org/TLD/tlds-alpha-by-domain.txt"
IANA_AS_NUMBERS="https://www.iana.org/assignments/as-numbers/as-numbers.txt"
IANA_IPV4_ASSIGNMENTS="https://www.iana.org/assignments/ipv4-address-space/ipv4-address-space.txt"
IANA_IPV6_ASSIGNMENTS="https://www.iana.org/assignments/ipv6-unicast-address-assignments/ipv6-unicast-address-assignments.txt"
DELETED_TLD_LIST="https://whois.viathinksoft.de/iana-utils/tld-watcher/tld_deleted_list.php"
ROOT_WHOIS_SERVER_LIST="https://whois.viathinksoft.de/iana-utils/root-whois-watcher/root_whois_list.php"
IANA_TLD_ENTRY="https://www.iana.org/domains/root/db/%s"
IANA_TLD_FOLDER="https://data.iana.org/TLD/"
DEBIAN_GWHOIS_PACKAGE_URL="http://packages.debian.org/search?searchon=names&keywords=gwhois"
 
/trunk/maintenance/pattern-generator/.trash/generate_newgtld
0,0 → 1,319
#!/usr/bin/php
<?php
 
#
# generic Whois - Automatic Pattern Generator: New gTLDs
#
# (c) 2012-2014 Daniel Marschall, ViaThinkSoft [www.viathinksoft.de]
#
# Distribution, usage etc. pp. regulated by the current version of GPL.
#
#
# Version 2014-10-30
#
 
# TODO: ":notice||Whois server unknown (2014-03-15)" in pattern_newgtld automatisch umwandeln in :whois| wenn etwas bei IANA vorliegt.
 
error_reporting(E_ALL | E_NOTICE | E_STRICT | E_DEPRECATED);
 
require_once __DIR__ . '/config.inc.phps';
require_once __DIR__ . '/../../shared/php_includes/common_functions.inc.phps';
require_once __DIR__ . '/../../shared/php_includes/idna_convert.class.php';
require_once __DIR__ . '/iana_functions.inc.phps';
 
# ---
 
$iana_tld_data = null;
 
// Step 1:
// Check if in the meantime TLDs without an official whois server were updated to have one
// Attention/TODO: A change of the whois name still needs manual intervention!
 
$newgtld_cont_original = file_get_contents(NEWGTLD_PATTERN_FILE);
 
$newgtld_cont_new = preg_replace_callback(
'@# TODO: Entry generated automatically\. Needs manual check\.\n:notice\|\|Whois server unknown \((.*)\)\n\.(.*)\$\n@imU',
function ($treffer) {
$in_all = $treffer[0];
$in_ts = $treffer[1];
$in_tld = $treffer[2];
 
$days_passed = (time()-strtotime($treffer[1]))/(60*60*24);
if ($days_passed < NEWGTLD_RECHECK_MISSING_WHOIS_SERVERS) {
return $in_all; // leave everything unchanged
}
 
$whois_serv = find_rootzone_whois_server($in_tld);
 
if (!$whois_serv) {
// Nothing found. Just update last check date.
return str_replace($in_ts, date('Y-m-d'), $in_all);
} else {
// Update the entry
return ":whois|$whois_serv\n.${in_tld}\$\n";
}
},
$newgtld_cont_original
);
 
if ($newgtld_cont_original != $newgtld_cont_new) {
file_put_contents(NEWGTLD_PATTERN_FILE, $newgtld_cont_new);
gwi_update_newgtld_patternfile();
}
 
// Step 2:
// Search for new gTLDs which are not in our pattern file
 
$newgtld_data = gwi_newgtld_get_all_delegated_strings();
foreach ($newgtld_data as $data) {
$date = $data[0];
$string = $data[1];
$tld = $data[2];
$tld_uc = $data[3];
$explanation = $data[4];
 
// Is it already in our pattern file?
if (does_exist($tld)) {
# echo "Info: $tld is already in pattern.\n";
continue;
}
 
// Only add the TLD to our pattern file if it has also been published by IANA.
// The reason is that the newGTLD page had temporary typos many times (e.g. calogne instead of cologne)
if (!isset($iana_tld_data)) $iana_tld_data = get_iana_tld_data();
if (!in_array(strtoupper($tld), $iana_tld_data)) {
echo "Info: Will not add $tld, since it is not yet added in IANA's registry.\n";
continue;
}
 
$to_append = "\n";
$to_append .= "# Delegated on $date\n";
if ($explanation) {
$to_append .= "# $explanation\n";
}
 
$whois_serv = find_rootzone_whois_server($tld);
 
if ($whois_serv) {
$to_append .= ":whois|$whois_serv\n";
} else {
$to_append .= "# TODO: Entry generated automatically. Needs manual check.\n";
$to_append .= ":notice||Whois server unknown (".date('Y-m-d').")\n";
}
$to_append .= "\\.$tld$\n";
 
file_put_contents(NEWGTLD_PATTERN_FILE, $to_append, FILE_APPEND);
 
gwi_update_newgtld_patternfile();
}
 
 
 
 
 
 
// TODO:
// Step 3: Check if there are IANA TLDs which are not in our pattern files yet
if (!isset($iana_tld_data)) $iana_tld_data = get_iana_tld_data();
foreach ($iana_tld_data as $tld) {
 
if (does_exist($tld)) { # TODO: in allen pattern files schauen
continue;
}
 
 
# echo "Does not exist: $tld\n";
continue;
 
$newgtld_res = count_newgtld_applications($tld);
if ($newgtld_res === false) {
// TODO: ignore?
} else if ($newgtld_res > 0) {
// TODO: add to newgtld pattern file
} else {
// TODO: add to normal pattern file
}
 
 
}
 
 
 
# ------------------------------------------------------
 
function gwi_update_newgtld_patternfile() {
$now = date('Ymd');
 
$pcont_original = file_get_contents(NEWGTLD_PATTERN_FILE);
$pcont = $pcont_original;
 
$count = 0;
$pcont = preg_replace("@#: version (\\S+)@i", "#: version $now", $pcont, 1, $count);
 
if ($count == 0) {
// Add header
$pcont = "#: version $now\n".
"# New gTLD\n".
"# see: http://newgtlds.icann.org/en/program-status/delegated-strings\n".
"# This file can be updated by ".__DIR__."/generate_newgtld (only additions of new \"New gTLDs\")\n".
"# --------------------------------------------------------------------\n".
"\n".$pcont;
}
 
if ($pcont != $pcont_original) {
file_put_contents(NEWGTLD_PATTERN_FILE, $pcont);
}
}
 
function find_rootzone_whois_server($tld) {
$whois_serv = iana_get_rootzone_whois_server($tld);
 
// Try to find "secret whois servers"
if (TRY_FINDING_HIDDEN_WHOIS_SERVERS) {
// TODO: also try out to use the URL of the homepage (in IANAs root DB)
if (!$whois_serv) {
$check_server = "whois.nic.$tld";
if (gwitc_is_port_open($check_server, 43)) {
$whois_serv = $check_server;
}
}
if (!$whois_serv) {
$check_server = "whois.$tld";
if (gwitc_is_port_open($check_server, 43)) {
$whois_serv = $check_server;
}
}
if (!$whois_serv) {
$check_server = "$tld";
if (gwitc_is_port_open($check_server, 43)) {
$whois_serv = $check_server;
}
}
}
 
return $whois_serv;
}
 
function iana_get_rootzone_whois_server($tld) {
$tld = strtolower($tld);
$cont = QueryWhoisServer('whois.iana.org', $tld);
if (!preg_match('@whois:\\s*(\\S+)@i', $cont, $m)) return false;
return $m[1];
}
 
function does_exist($tld) {
$cont = file_get_contents(NEWGTLD_PATTERN_FILE);
$tld = strtolower($tld);
$cont = strtolower($cont);
return (strpos($cont, "\n\\.$tld\$\n") !== false);
}
 
function gwi_newgtld_get_all_delegated_strings() {
$cont = file_get_contents('http://newgtlds.icann.org/en/program-status/delegated-strings');
 
// Convert Unicode stuff
$cont = str_replace('xn'.unichr(0x2013), 'xn--', $cont);
$cont = str_replace('xn'.unichr(0x2015), 'xn--', $cont); // used in Samsung TLD
$cont = str_replace(unichr(0x2013), '-', $cont); // used in most explanations
$cont = str_replace(unichr(0x2015), '-', $cont);
$cont = str_replace(unichr(0x00fc), 'ue', $cont); // German umlaut ue (used in .koeln)
$cont = utf8_decode($cont);
 
// Do some minor corrections
$cont = str_replace('game (s)', 'game(s)', $cont);
 
$cont = explode('STRING</th>', $cont, 2);
$cont = $cont[1];
 
preg_match_all('@<tr>\s*<td[^>]*>(.*)</td>\s*<td[^>]*>(.*)</td>\s*</tr>@ismU', $cont, $m, PREG_SET_ORDER);
 
$m = array_reverse($m);
 
$out = array();
foreach ($m as $data) {
$date = html_entity_decode(strip_tags($data[1]));
$string = html_entity_decode(strip_tags($data[2]));
 
$string = str_replace('(', ' (', $string);
while (strpos($string, ' ') !== false) $string = str_replace(' ', ' ', $string);
 
# Fixing some misplaced white spaces
$string = preg_replace('@\.\s+@m', '.', $string);
$string = preg_replace('@\(\s+@m', '(', $string);
$string = preg_replace('@\s+\)@m', ')', $string);
 
$ary = explode(' ', $string, 3);
if (count($ary) > 1) {
$tld_uc = trim($ary[0]); // Unicode TLD
 
$tld = trim($ary[1]); // Punycode TLD
$tld = substr($tld, 1, strlen($tld)-2);
 
$explanation = trim($ary[2]);
$explanation = substr($explanation, 1); // remove "-"
$explanation = trim($explanation);
} else {
$tld = trim(strtolower($string));
$tld_uc = $tld;
$explanation = '';
}
 
$out[] = array($date, $string, $tld, $tld_uc, $explanation);
}
 
return $out;
}
 
/**
* Return unicode char by its code
*
* @param int $u
* @return char
* @source http://www.php.net/manual/de/function.chr.php#88611
*/
function unichr($u) {
return mb_convert_encoding('&#' . intval($u) . ';', 'UTF-8', 'HTML-ENTITIES');
}
 
function count_newgtld_applications($string) {
#global $punycoder;
 
#if (is_null($punycoder))
$punycoder = new idna_convert();
$ua = 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:32.0) Gecko/20100101 Firefox/32.0';
 
if (($x = $punycoder->decode(strtolower($string))) !== false) $string = $x;
 
$out = array();
exec('curl -i -s https://gtldresult.icann.org/application-result/applicationstatus/viewstatus -H "Host: gtldresult.icann.org" -H '.escapeshellarg('User-Agent: '.$ua), $out, $code);
if ($code != 0) return false;
$html = implode("\n", $out);
 
if (!preg_match('@JSESSIONID=(.+);@ismU', $html, $m)) return false;
$jsessionid = $m[1];
 
if (!preg_match('@<input value="([^"]+)" name="t:formdata"@ismU', $html, $m)) return false;
$formdata = $m[1];
$formdata = str_replace('+', '%2B', $formdata);
$formdata = str_replace('/', '%2F', $formdata);
 
$out = array();
exec('curl -s "https://gtldresult.icann.org/application-result/applicationstatus/viewstatus.applicationstatusform" -H "Host: gtldresult.icann.org" -H '.escapeshellarg('User-Agent: '.$ua).' -H "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8" -H "Accept-Language: de,en-US;q=0.7,en;q=0.3" -H "Referer: https://gtldresult.icann.org/application-result/applicationstatus/viewstatus" -H '.escapeshellarg('Cookie: JSESSIONID='.$jsessionid).' -H "Connection: keep-alive" --data '.escapeshellarg('t%3Aformdata='.$formdata.'&t%3Asubmit=%5B%22searchButton%22%2C%22searchButton%22%5D&searchField='.$string.'&searchButton=Search&status=&updates=&objections=&gacew=&similar=&pic='), $out, $code);
if ($code != 0) return false;
 
$out = array();
exec('curl -s "https://gtldresult.icann.org/application-result/applicationstatus/viewstatus" -H "Host: gtldresult.icann.org" -H '.escapeshellarg('User-Agent: '.$ua).' -H "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8" -H "Accept-Language: de,en-US;q=0.7,en;q=0.3" -H "Referer: https://gtldresult.icann.org/application-result/applicationstatus/viewstatus" -H '.escapeshellarg('Cookie: JSESSIONID='.$jsessionid).' -H "DNT: 1" -H "Connection: keep-alive"', $out, $code);
if ($code != 0) return false;
 
$html = implode("\n", $out);
 
preg_match_all('@href="/application-result/applicationstatus/viewstatus:viewapplicationdetails/(\d+)">'.preg_quote($string, '@').'</a>@ismU', $html, $m);
 
# DEBUG
echo "$string = ".count($m[1])."\n";
 
# return (count($m[1]) > 0);
return count($m[1]);
}
 
#assert(count_newgtld_applications('shopping') == 2);
Property changes:
Added: svn:executable
+*
\ No newline at end of property
/trunk/maintenance/pattern-generator/.trash/test-ipv4_functions.inc.php2.2-2.4
0,0 → 1,684
<?php
 
#
# IPv4 Functions for PHP
#
# (c) 2012 Daniel Marschall, ViaThinkSoft [www.viathinksoft.de]
#
# Distribution, usage etc. pp. regulated by the current version of GPL.
#
#
# Version 2012-12-17
#
 
// TODO: oop
 
// Very small self-test:
/*
function ipv4_selftest() {
$iv_b = ipv4_complete('1.2');
$iv_m = 20;
$r = ipv4_cidr2range($iv_b, $iv_m);
echo "$iv_b/$iv_m => $r[0] - $r[1]\n";
 
$rev = ipv4_range2cidr($r[0], $r[1]);
$rev = implode("\n", $rev);
echo "$r[0] - $r[1] => $rev [";
$ok = $rev == "$iv_b/$iv_m";
echo $ok ? 'OK' : 'Mismatch';
echo "]\n";
echo "In-CIDR-Test: ";
echo ipv4_in_cidr("$iv_b/$iv_m", "$iv_b/$iv_m") ? 'OK' : 'Fail';
echo "\n";
}
ipv4_selftest();
*/
 
function ipv4_cidr2range($baseip_or_cidr, $subnet='') {
# (C) 2012 ViaThinkSoft
# Version 1.1
# This function converts an CIDR notation <baseip>/<subnet> into an IPv4 address block array($low_ip, $high_ip)
 
if (strpos($baseip_or_cidr, '/') !== false) {
$tmp = explode('/', $baseip_or_cidr, 2);
$baseip_or_cidr = $tmp[0];
$subnet = $tmp[1];
unset($tmp);
}
 
if (($subnet < 0) || ($subnet > 32)) return false;
 
$maxint32 = 0xFFFFFFFF;
$netmask = $maxint32 << (32-$subnet);
$netmask = $netmask & $maxint32; // crop to 32 bits
$wildcard = $maxint32 ^ $netmask; // ~$netmask;
 
$x = ipv4_incomplete_ip2long($baseip_or_cidr) & $netmask;
$nums = $wildcard;
$low = long2ip($x);
$high = long2ip($x + $nums);
 
return array($low, $high);
}
 
function ipv4_range2cidr($baseip, $topip, $shortening=false) {
# (C) 2012 ViaThinkSoft
# Version 1.0
# This function converts an IPv4 address block into valid CIDR blocks (There may be multiple blocks!)
 
$out = array();
if (ipv4_cmp($baseip, $topip) > 0) return false;
while (ipv4_incomplete_ip2long($baseip)-1 != ipv4_incomplete_ip2long($topip)) {
$i = -1;
do {
$i++;
$range = ipv4_cidr2range($baseip, $i);
$l = $range[0];
$t = $range[1];
} while ((ipv4_cmp($l, $baseip) != 0) || (ipv4_cmp($t, $topip) > 0));
 
# Shortening: Stroke ".0" at the end
if ($shortening) $baseip = ipv4_shortening($baseip);
 
$out[] = "$baseip/$i";
$baseip = ipv4_add($t, 1);
}
return $out;
}
 
function ipv4_shortening($ip) {
# (C) 2012 ViaThinkSoft
# Version 1.0
 
return preg_replace("|(\\.0{1,3}){0,3}\$|ismU", '', $ip);
}
 
function ipv4_add($baseip, $num) {
# (C) 2012 ViaThinkSoft
# Version 1.0
 
return long2ip(ipv4_incomplete_ip2long($baseip) + $num);
}
 
function ipv4_sub($baseip, $num) {
# (C) 2012 ViaThinkSoft
# Version 1.0
 
return long2ip(ipv4_incomplete_ip2long($baseip) - $num);
}
 
function ipv4_cmp($a, $b) {
# (C) 2012 ViaThinkSoft
# Version 1.0
 
$a = ipv4_incomplete_ip2long($a);
$b = ipv4_incomplete_ip2long($b);
 
if ($a == $b) return 0;
if ($a < $b) return -1;
if ($a > $b) return 1;
}
 
function ipv4_in_cidr($haystack, $needle) {
# (C) 2012 ViaThinkSoft
# Version 1.1
 
$x = explode('/', $haystack);
$ha = ipv4_cidr2range($x[0], $x[1]);
 
$x = explode('/', $needle);
if (!isset($x[1])) $x[1] = '32'; // single IP
$ne = ipv4_cidr2range($x[0], $x[1]);
 
$ha_low = ipv4_incomplete_ip2long($ha[0]);
$ha_hig = ipv4_incomplete_ip2long($ha[1]);
$ne_low = ipv4_incomplete_ip2long($ne[0]);
$ne_hig = ipv4_incomplete_ip2long($ne[1]);
 
# HA: low[ ]high
# NE: low[ ]high
 
return ($ne_low >= $ha_low) && ($ne_hig <= $ha_hig);
}
 
function ipv4_complete($short_form) {
# (C) 2012 ViaThinkSoft
# Version 1.0
 
$short_form = trim($short_form);
if ($short_form == '') return '0.0.0.0';
$c = substr_count($short_form, '.');
if ($c > 3) return false;
if ($c == 3) return $short_form;
$c = substr_count($short_form, '.');
$short_form .= str_repeat('.0', 3-$c);
return $short_form;
}
 
function ipv4_incomplete_ip2long($ip) {
# (C) 2012 ViaThinkSoft
# Version 1.1
 
# return ip2long(ipv4_complete($ip));
return ip2long(ipv4_normalize($ip));
}
 
function ipv4_merge_address_blocks($data, $debug = false, $shortening = false) {
# (C) 2012 ViaThinkSoft
# Version 2.1
 
if ($debug !== false) $STARTZEIT = time();
 
// 1. Convert IPs to numbers
 
$cmp_ary = array();
foreach ($data as $a => &$b) {
$a = ipv4_incomplete_ip2long($a);
$b = ipv4_incomplete_ip2long($b);
 
$cmp_ary[$a] = $b;
unset($a);
unset($b);
}
 
// 2. Merge the blocks in an intelligent way (and remove redundant blocks)
 
# Merge overlapping blocks
# [ ]
# [ ] -> [ ]
 
# Merge neighbor blocks
# [ ][ ] -> [ ]
 
# Remove redundant blocks
# [ ] -> [ ]
# [ ]
/*
$merge_count = 0;
$redundant_deleted_count = 0;
$round_count = 0;
do {
if ($debug !== false) {
$LAUFZEIT = time() - $STARTZEIT;
echo $debug."Merging... $round_count rounds; merged $merge_count blocks; deleted $redundant_deleted_count redundant blocks; time: $LAUFZEIT seconds\r";
}
 
$round_count++;
 
$clean = true;
 
foreach ($cmp_ary as $a => &$b) {
foreach ($cmp_ary as $x => &$y) {
if ($x<=$a) continue;
if ($x>$b+1) continue; // <-- grenzfall!!! falsch!!!
 
// Merge
$clean = false;
if ($y>=$b) { // <-- y>b?
$merge_count++;
$b = $y;
unset($cmp_ary[$x]); // <!-- race condition?
break; // increases performance dramatically
} else {
$redundant_deleted_count++;
unset($cmp_ary[$x]); // <-- race condition?
}
}
}
} while (!$clean);
 
if ($debug !== false) {
$LAUFZEIT = time() - $STARTZEIT;
echo $debug."Merge completed. $round_count rounds; merged $merge_count blocks; deleted $redundant_deleted_count redundant blocks; time: $LAUFZEIT seconds\n";
}
 
// 3. Sort
 
ksort($cmp_ary);
*/
 
// IMPORTANT! $cmp_ary[x]=y MUST HAVE x<=y !
 
// To avoid two nested foreach() loops, we sort the array by source, so we can
// easily only scan an area using a for-loop.
ksort($cmp_ary);
 
if ($debug !== false) {
$LAUFZEIT = time() - $STARTZEIT;
echo $debug."Merge - Step 1; time: $LAUFZEIT seconds\n";
}
 
 
# =================================================
# Rule 1: Expand
# --- Minimum case:
# Before:
# [a b]
# [x y]
# After:
# [a b] (set b:=y)
# [x y] (obsolete, will be deleted in step 2)
# --- Maximum case:
# Before:
# [a b]
# [x y]
# After:
# [a b] (set b:=y)
# [x y] (obsolete, will be deleted in step 2)
# --- Rule:
# a<=x<=b+1 && y>b ==> Blocks a..b and x..y merge to single block a..y
# =================================================
 
$keys = array_keys($cmp_ary);
 
$idx_a = 0;
foreach ($cmp_ary as $a => &$b) {
// $x=$a not possible because it's the array key and is therefore unique!
 
for ($i=++$idx_a; isset($keys[$i]) && ($keys[$i]/*x*/<=$b+1); $i++) {
$b = $cmp_ary[$keys[$i]]; // $y
break; // test 2.3
}
 
/*
for ($x=$a+1; $x<=$b+1; $x++) {
if (!isset($cmp_ary[$x])) continue;
// Merge! Set b:=y .
// Block [x..y] will be deleted in step 2
// because it is then a subset of [a..b=y]
$b = $cmp_ary[$x]; // $y
}
*/
}
 
if ($debug !== false) {
$LAUFZEIT = time() - $STARTZEIT;
echo $debug."Merge - Step 2; time: $LAUFZEIT seconds\n";
}
 
# =================================================
# Step 2: Clean up
# --- Minimum case:
# Before:
# [a b]
# [x=y]
# After:
# [a b]
# --- Maximum case:
# Before:
# [a b]
# [x y]
# After:
# [a b]
# --- Rule:
# a<=x<=y<=b ==> Block x..y is not neccessary
# The expression y<=b is ALWAYS true, because Step 1 would
# have extended b=y if y>b would have been the case.
# So the formula is:
# a<=x<=b ==> Block x..y is not neccessary
# =================================================
 
$out_ary = array();
$prev = -1;
foreach ($cmp_ary as $a => &$b) {
if ($a <= $prev) continue;
$out_ary[$a] = $b;
$prev = $b;
}
$cmp_ary = $out_ary;
 
if ($debug !== false) {
$LAUFZEIT = time() - $STARTZEIT;
echo $debug."Merge - Finished; time: $LAUFZEIT seconds\n";
}
 
 
 
// 4. Convert back to IPs
 
$out_ary = array();
foreach ($cmp_ary as $a => &$b) {
$a = long2ip($a);
$b = long2ip($b);
if ($shortening) {
$a = ipv4_shortening($a);
$b = ipv4_shortening($b);
}
$out_ary[$a] = $b;
}
 
return $out_ary;
}
 
function ipv4_merge_arrays($data_a, $data_b) {
# (C) 2012 ViaThinkSoft
# Version 1.2
 
$normalized_data_a = array();
foreach ($data_a as $from => &$to) {
$normalized_data_a[ipv4_normalize($from)] = ipv4_normalize($to);
}
 
$normalized_data_b = array();
foreach ($data_b as $from => &$to) {
$normalized_data_b[ipv4_normalize($from)] = ipv4_normalize($to);
}
 
$data = array();
 
foreach ($normalized_data_a as $from => &$to) {
if (isset($normalized_data_b[$from])) {
$data[$from] = ipv4_max($to, $normalized_data_b[$from]);
} else {
$data[$from] = $to;
}
}
 
foreach ($normalized_data_b as $from => &$to) {
if (!isset($normalized_data_a[$from])) {
$data[$from] = $to;
}
}
 
return $data;
}
 
function ipv4_valid($ip) {
# (C) 2012 ViaThinkSoft
# Version 1.0
 
# return ipv4_incomplete_ip2long($ip) !== false;
return ip2long($ip) !== false;
}
 
function ipv4_normalize($ip) {
# (C) 2012 ViaThinkSoft
# Version 1.0
 
# Example:
# 100.010.001.000 -> 100.10.1.0
 
$ip = ipv4_complete($ip);
 
# ip2long buggy: 001.0.0.0 wird nicht akzeptiert
$cry = explode('.', $ip);
$cry[0] = preg_replace('@^0+@', '', $cry[0]); if ($cry[0] == '') $cry[0] = '0';
$cry[1] = preg_replace('@^0+@', '', $cry[1]); if ($cry[1] == '') $cry[1] = '0';
$cry[2] = preg_replace('@^0+@', '', $cry[2]); if ($cry[2] == '') $cry[2] = '0';
$cry[3] = preg_replace('@^0+@', '', $cry[3]); if ($cry[3] == '') $cry[3] = '0';
$ip = implode('.', $cry);
 
return $ip;
}
 
function ipv4_expand($ip) {
# (C) 2012 ViaThinkSoft
# Version 1.0
 
# Example:
# 100.10.1.0 -> 100.010.001.000
 
$ip = ipv4_complete($ip);
 
$cry = explode('.', $ip);
$cry[0] = str_pad($cry[0], 3, '0', STR_PAD_LEFT);
$cry[1] = str_pad($cry[1], 3, '0', STR_PAD_LEFT);
$cry[2] = str_pad($cry[2], 3, '0', STR_PAD_LEFT);
$cry[3] = str_pad($cry[3], 3, '0', STR_PAD_LEFT);
return implode('.', $cry);
}
 
function ipv4_min($ip_a, $ip_b) {
# (C) 2012 ViaThinkSoft
# Version 1.0
 
if (ipv4_cmp($ip_a, $ip_b) == -1) {
return $ip_a;
} else {
return $ip_b;
}
}
 
function ipv4_max($ip_a, $ip_b) {
# (C) 2012 ViaThinkSoft
# Version 1.0
 
if (ipv4_cmp($ip_a, $ip_b) == 1) {
return $ip_a;
} else {
return $ip_b;
}
}
 
function ipv4_ipcount($data) {
# (C) 2012 ViaThinkSoft
# Version 1.0
 
$cnt = 0;
 
foreach ($data as $from => &$to) {
$cnt += ipv4_incomplete_ip2long($to) - ipv4_incomplete_ip2long($from);
}
 
return $cnt;
}
 
function ipv4_read_file($file) {
# (C) 2012 ViaThinkSoft
# Version 1.0
 
$data = array();
 
$lines = file($file);
foreach ($lines as &$line) {
$rng = ipv4_line2range($line);
$data[$rng[0]] = $rng[1];
}
 
return $data;
}
 
function ipv4_line2range($line) {
# (C) 2012 ViaThinkSoft
# Version 1.0
 
$line = trim($line);
 
if (strpos($line, '/') !== false) {
$rng = ipv4_cidr2range($line);
} else {
$rng = explode('-', $line);
$rng[0] = trim($rng[0]);
$rng[1] = trim($rng[1]);
$rng[0] = ipv4_normalize($rng[0]);
if (!isset($rng[1])) $rng[1] = $rng[0];
$rng[1] = ipv4_normalize($rng[1]);
}
 
return $rng;
}
 
# --- New 16,12,12
 
define('IPV4_BITS', 32);
 
function ipv4_distance($ipOrCIDR_Searchterm, $ipOrCIDR_Candidate) {
$ary = ipv4_cidr_split($ipOrCIDR_Searchterm);
$ip = $ary[0];
 
if (filter_var($ip, FILTER_VALIDATE_IP, FILTER_FLAG_IPV4) === false) {
return false;
}
 
$ary = ipv4_cidr_split($ipOrCIDR_Candidate);
$ip = $ary[0];
$cidr_bits = $ary[1];
if ($cidr_bits > IPV4_BITS) return false; // throw new Exception('CIDR bits > '.IPV4_BITS);
 
if (filter_var($ip, FILTER_VALIDATE_IP, FILTER_FLAG_IPV4) === false) {
return false;
}
 
$x = ipv4_trackdown($ipOrCIDR_Searchterm);
 
if (ipv4_in_cidr($x[0], $ip.'/'.$cidr_bits)) {
$ary = ipv4_cidr_split($x[0]);
$cidr_bits2 = $ary[1];
if ($cidr_bits2 > IPV4_BITS) return false; // throw new Exception('CIDR bits > '.IPV4_BITS);
return $cidr_bits2-$cidr_bits;
}
 
$i = 0;
$max = false;
foreach ($x as &$y) {
if (ipv4_in_cidr($ip.'/'.$cidr_bits, $y)) {
$max = $i;
}
$i++;
}
 
return $max;
}
 
function ipv4_cidr_split($ipOrCIDR) {
$ary = explode('/', $ipOrCIDR, 2);
$cidr_bits = isset($ary[1]) ? $ary[1] : IPV4_BITS;
if ($cidr_bits > IPV4_BITS) return false; // throw new Exception('CIDR bits > '.IPV4_BITS);
$ip = $ary[0];
return array($ip, $cidr_bits);
}
 
function ipv4_equals($ipOrCIDRA, $ipOrCIDRB) {
return ipv4_normalize_range($ipOrCIDRA) == ipv4_normalize_range($ipOrCIDRB);
}
 
function ipv4_cidr_min_ip($ipOrCIDR) {
$ary = ipv4_cidr_split($ipOrCIDR);
$ipOrCIDR = $ary[0];
$cidr_bits = $ary[1];
if ($cidr_bits > IPV4_BITS) return false; // throw new Exception('CIDR bits > '.IPV4_BITS);
 
$m = ip2bin($ipOrCIDR);
$m = substr($m, 0, $cidr_bits) . str_repeat('0', IPV4_BITS-$cidr_bits);
 
return bin2ip($m);
}
 
function ipv4_cidr_max_ip($ipOrCIDR) {
$ary = ipv4_cidr_split($ipOrCIDR);
$ipOrCIDR = $ary[0];
$cidr_bits = $ary[1];
if ($cidr_bits > IPV4_BITS) return false; // throw new Exception('CIDR bits > '.IPV4_BITS);
 
$m = ip2bin($ipOrCIDR);
$m = substr($m, 0, $cidr_bits) . str_repeat('1', IPV4_BITS-$cidr_bits);
 
return bin2ip($m);
}
 
function ipv4_normalize_range($ipOrCIDR) {
$ary = ipv4_cidr_split($ipOrCIDR);
$ipOrCIDR = $ary[0];
$cidr_bits = $ary[1];
if ($cidr_bits > IPV4_BITS) return false; // throw new Exception('CIDR bits > '.IPV4_BITS);
 
$m = ip2bin($ipOrCIDR);
$m = substr($m, 0, $cidr_bits) . str_repeat('0', IPV4_BITS-$cidr_bits);
 
return bin2ip($m) . '/' . $cidr_bits;
}
 
function ipv4_trackdown($ipOrCIDR) {
$ary = ipv4_cidr_split($ipOrCIDR);
$ipOrCIDR = $ary[0];
$cidr_bits = $ary[1];
if ($cidr_bits > IPV4_BITS) return false; // throw new Exception('CIDR bits > '.IPV4_BITS);
 
$out = array();
$m = ip2bin($ipOrCIDR);
 
for ($i=$cidr_bits; $i>=0; $i--) {
$m = substr($m, 0, $i) . str_repeat('0', IPV4_BITS-$i);
$out[] = bin2ip($m) . '/' . $i;
}
 
return $out;
}
 
# ---
 
if (!function_exists('ip2bin')) {
function ip2bin($ip) {
# Source: http://php.net/manual/en/function.ip2long.php#104163
# modified by VTS
 
if (filter_var($ip, FILTER_VALIDATE_IP, FILTER_FLAG_IPV4) !== false) {
return base_convert(ip2long($ip), 10, 2);
}
if (filter_var($ip, FILTER_VALIDATE_IP, FILTER_FLAG_IPV6) === false) {
return false;
}
if (($ip_n = inet_pton($ip)) === false) {
return false;
}
$bits = 15; // 16 x 8 bit = 128bit (ipv6)
$ipbin = ''; # added by vts to avoid warning
while ($bits >= 0) {
$bin = sprintf('%08b', (ord($ip_n[$bits])));
$ipbin = $bin.$ipbin;
$bits--;
}
return $ipbin;
}
}
 
if (!function_exists('bin2ip')) {
function bin2ip($bin) {
# Source: http://php.net/manual/en/function.ip2long.php#104163
# modified by VTS
 
if (strlen($bin) <= 32) { // 32bits (ipv4)
return long2ip(base_convert($bin, 2, 10));
}
if (strlen($bin) != 128) {
return false;
}
$pad = 128 - strlen($bin);
for ($i = 1; $i <= $pad; $i++) {
$bin = '0'.$bin;
}
$bits = 0;
$ipv6 = ''; # added by vts to avoid warning
while ($bits <= 7) {
$bin_part = substr($bin,($bits*16),16);
$ipv6 .= dechex(bindec($bin_part)) . ':';
$bits++;
}
return inet_ntop(inet_pton(substr($ipv6, 0, -1)));
}
}
 
# --- TEST
 
/*
assert(ipv4_distance('192.168.0.0/16', '192.168.64.0/18') == -2);
assert(ipv4_distance('192.168.0.0/17', '192.168.64.0/18') == -1);
assert(ipv4_distance('192.168.64.0/18', '192.168.64.0/18') == 0);
assert(ipv4_distance('192.168.64.0/19', '192.168.64.0/18') == 1);
assert(ipv4_distance('192.168.64.0/20', '192.168.64.0/18') == 2);
 
assert(ipv4_distance('192.168.69.202/31', '192.168.69.200/31') === false);
assert(ipv4_distance('192.168.69.201/32', '192.168.69.200/32') === false);
assert(ipv4_distance('192.168.69.201', '192.168.69.200') === false);
*/
 
/*
$test = '192.168.69.123';
$x = ipv4_trackdown($test);
foreach ($x as &$cidr) {
$min = ipv4_cidr_min_ip($cidr);
$max = ipv4_cidr_max_ip($cidr);
echo "$cidr ($min - $max)\n";
}
*/
 
/trunk/maintenance/pattern-generator/config.inc.php
0,0 → 1,16
<?php
 
#
# generic Whois - Automatic Pattern Generator configuration
#
# (c) 2012-2015 Daniel Marschall, ViaThinkSoft [www.viathinksoft.de]
#
# Distribution, usage etc. pp. regulated by the current version of GPL.
#
#
# Version 2015-04-17
#
 
require_once __DIR__ . '/../../shared/php_includes/config_functions.inc.php';
parse_config(__DIR__ . '/../config/gwhois-pattern-update.conf');
parse_config(__DIR__ . '/../config/urls.conf');
/trunk/maintenance/pattern-generator/generate_asn
0,0 → 1,119
#!/usr/bin/php
<?php
 
#
# generic Whois - Automatic Pattern Generator: ASN
#
# (c) 2012 Daniel Marschall, ViaThinkSoft [www.viathinksoft.de]
#
# Distribution, usage etc. pp. regulated by the current version of GPL.
#
#
# Version 2012-11-17
#
 
# TODO: also use extended stats of the RIRs, which may have avails / reserved?
 
error_reporting(E_ALL | E_NOTICE | E_STRICT | E_DEPRECATED);
 
require_once __DIR__ . '/config.inc.php';
require_once __DIR__ . '/../../shared/php_includes/common_functions.inc.php';
require_once __DIR__ . '/rirs.inc.php';
 
define('PATTERN_DIR', __DIR__ . '/../../main/pattern');
define('IANA_CACHE_DIR', __DIR__ . '/../.cache/pattern-generator/iana');
 
echo "ASN Preparation: Get IANA delegation file\n";
 
$iana_asn_url = "https://www.iana.org/assignments/as-numbers/as-numbers.txt";
$iana_asn_cache = IANA_CACHE_DIR . '/as-numbers.txt';
if ((USE_CACHE) && (file_exists($iana_asn_cache))) {
@mkdir(dirname($iana_asn_cache), 0777, true);
$iana_asn_data = file($iana_asn_cache, FILE_IGNORE_NEW_LINES);
} else {
$iana_asn_data = file($iana_asn_url, FILE_IGNORE_NEW_LINES);
}
 
echo "ASN: Parsing...\n";
 
$version = trim(str_replace('-', '', $iana_asn_data[3]));
 
$iana_asn_data = grep($iana_asn_data, 'whois');
 
$iana_asn_data = implode("\n", $iana_asn_data);
 
$iana_asn_data = str_replace('Assigned by RIPE NCC', '', $iana_asn_data);
$iana_asn_data = str_replace('Assigned by AFRINIC', '', $iana_asn_data); // do not change to 'AfriNIC' !
$iana_asn_data = str_replace('Assigned by LACNIC', '', $iana_asn_data);
$iana_asn_data = str_replace('Assigned by APNIC', '', $iana_asn_data);
$iana_asn_data = str_replace('Assigned by ARIN', '', $iana_asn_data);
 
while (strpos($iana_asn_data, ' ') !== false) {
$iana_asn_data = str_replace(' ', ' ', $iana_asn_data);
}
 
$out = '';
 
$ary = explode("\n", $iana_asn_data);
 
$res = array();
 
foreach ($ary as &$x) {
$x = trim($x);
if ($x == '') continue;
$bry = explode(" ", $x);
 
$asnums = $bry[0];
$whois = $bry[1];
 
if (strpos($asnums, '-') === false) {
# Single ASN
$res[$whois][$asnums] = $asnums;
} else {
# ASN range
$tmp = explode('-', $asnums, 2);
$res[$whois][$tmp[0]] = $tmp[1];
}
}
 
$out .= "#: version $version\n\n";
 
$out .= "# Autonomous System Numbers (ASN)\n";
$out .= "# Automatically generated by ".__DIR__."/gwhois-pattern-update\n";
$out .= "# Generation timestamp: ".date('Y-m-d H:i:s \G\M\TO')."\n";
$out .= "# Source: ($version) $iana_asn_url\n";
$out .= "\n";
 
foreach ($res as $whois => &$x) {
$rir = array_search($whois, $rir_whois_server);
 
if ($asn_additional_params[$rir] != '') {
$whois .= '|prefix='.$asn_additional_params[$rir].'|';
}
 
$out .= "# ".strtoupper($rir)."\n";
$out .= ":whois|$whois\n";
 
foreach ($x as $begin => &$end) {
if ($begin == $end) {
# Single ASN
$out .= "*AS:$begin\n";
} else {
# ASN Range
$out .= "*AS:$begin-$end\n";
}
}
$out .= "\n";
}
 
$out .= "# Last resort: ARIN\n";
$out .= ":whois|whois.arin.net|prefix=a |\n";
$out .= "^as(.*)$\n";
 
echo "ASN: Write to output file\n";
 
$h = fopen(PATTERN_DIR.'/asn', 'w') or die('Error opening file '.PATTERN_DIR.'/asn');
fwrite($h, $out) or die('Could not write to output file');
fclose($h);
 
echo "ASN Finished\n";
Property changes:
Added: svn:executable
+*
\ No newline at end of property
/trunk/maintenance/pattern-generator/generate_domains
0,0 → 1,161
#!/usr/bin/php
<?php
 
#
# generic Whois - Automatic Pattern Generator: TLDs
#
# (c) 2012-2015 Daniel Marschall, ViaThinkSoft [www.viathinksoft.de]
#
# Distribution, usage etc. pp. regulated by the current version of GPL.
#
#
# Version 2015-07-13
#
 
require_once __DIR__ . '/iana_functions.inc.php';
require_once __DIR__ . '/config.inc.php';
require_once __DIR__ . '/../../shared/php_includes/common_functions.inc.php';
 
define('PATTERN_DIR', __DIR__ . '/../../main/pattern');
define('DOMAINS_PATTERN_FILE', PATTERN_DIR.'/domains');
 
error_reporting(E_ALL | E_NOTICE | E_STRICT | E_DEPRECATED);
 
$iana_tld_data = null;
 
// Step 1:
// Check if in the meantime TLDs without an official whois server were updated to have one
// Attention/TODO: A change of the whois name still needs manual intervention!
 
$domains_cont_original = file_get_contents(DOMAINS_PATTERN_FILE);
 
$domains_cont_new = preg_replace_callback(
'@# TODO: Entry generated automatically\. Needs manual check\.\n:notice\|\|Whois server unknown \((.*)\)\n\\\.(.*)\$\n@imU',
function ($treffer) {
$in_all = $treffer[0];
$in_ts = $treffer[1];
$in_tld = $treffer[2];
 
$days_passed = (time()-strtotime($treffer[1]))/(60*60*24);
if ($days_passed < DOMAINS_RECHECK_MISSING_WHOIS_SERVERS) {
return $in_all; // leave everything unchanged
}
 
$whois_serv = find_rootzone_whois_server($in_tld);
 
if (!$whois_serv) {
// Nothing found. Just update last check date.
return str_replace($in_ts, date('Y-m-d'), $in_all);
} else {
// Update the entry
return ":whois|$whois_serv\n.${in_tld}\$\n";
}
},
$domains_cont_original
);
 
if ($domains_cont_original != $domains_cont_new) {
file_put_contents(DOMAINS_PATTERN_FILE, $domains_cont_new);
gwi_update_domains_patternfile();
}
 
// Step 2:
// Search for new TLDs which are not in our pattern file
 
if (!isset($iana_tld_data)) $iana_tld_data = get_iana_tld_data();
 
foreach ($iana_tld_data as $tld) {
if ($tld[0] == '#') continue;
 
$tld = strtolower($tld);
 
if (!does_exist($tld)) {
$whois_serv = find_rootzone_whois_server($tld);
 
$to_append = "\n";
if ($whois_serv) {
$to_append .= ":whois|$whois_serv\n";
} else {
$to_append .= "# TODO: Entry generated automatically. Needs manual check.\n";
$to_append .= ":notice||Whois server unknown (".date('Y-m-d').")\n";
}
$to_append .= "\\.$tld$\n";
 
file_put_contents(DOMAINS_PATTERN_FILE, $to_append, FILE_APPEND);
 
gwi_update_domains_patternfile();
 
echo "Added: $tld\n";
}
 
}
 
# ------------------------------------------------------
 
function does_exist($tld) {
$cont = get_united_pattern();
$cont = preg_replace('@#[^\n]*\n@ismU', '', $cont);
$tld = strtolower($tld);
$cont = strtolower($cont);
$cont = str_replace(array('(', ')'), '', $cont);
return (strpos($cont, "\\.$tld\$\n") !== false);
}
 
function gwi_update_domains_patternfile() {
$now = date('Ymd');
 
$pcont_original = file_get_contents(DOMAINS_PATTERN_FILE);
$pcont = $pcont_original;
 
$count = 0;
$pcont = preg_replace("@#: version (\\S+)@i", "#: version $now", $pcont, 1, $count);
 
if ($count == 0) {
// Add header
$pcont = "#: version $now\n".
"# Domains\n".
"# This file can be updated by ".__DIR__."/generate_domains (only additions of new entries)\n".
"# --------------------------------------------------------------------\n".
"\n".$pcont;
}
 
if ($pcont != $pcont_original) {
file_put_contents(DOMAINS_PATTERN_FILE, $pcont);
}
}
 
function find_rootzone_whois_server($tld) {
$whois_serv = iana_get_rootzone_whois_server($tld);
 
// Try to find undocumented whois servers
if (TRY_FINDING_HIDDEN_WHOIS_SERVERS) {
// TODO: also try out to use the URL of the homepage (in IANAs root DB)
if (!$whois_serv) {
$check_server = "whois.nic.$tld";
if (gwitc_is_port_open($check_server, 43)) {
$whois_serv = $check_server;
}
}
if (!$whois_serv) {
$check_server = "whois.$tld";
if (gwitc_is_port_open($check_server, 43)) {
$whois_serv = $check_server;
}
}
if (!$whois_serv) {
$check_server = "$tld";
if (gwitc_is_port_open($check_server, 43)) {
$whois_serv = $check_server;
}
}
}
 
return $whois_serv;
}
 
function iana_get_rootzone_whois_server($tld) {
$tld = strtolower($tld);
$cont = QueryWhoisServer('whois.iana.org', $tld);
if (!preg_match('@whois:\\s*(\\S+)@i', $cont, $m)) return false;
return $m[1];
}
Property changes:
Added: svn:executable
+*
\ No newline at end of property
/trunk/maintenance/pattern-generator/generate_ipv4
0,0 → 1,190
#!/usr/bin/php
<?php
 
#
# generic Whois - Automatic Pattern Generator: IPv4
#
# (c) 2012-2013 Daniel Marschall, ViaThinkSoft [www.viathinksoft.de]
#
# Distribution, usage etc. pp. regulated by the current version of GPL.
#
#
# Version 2013-03-08
#
 
error_reporting(E_ALL | E_NOTICE | E_STRICT | E_DEPRECATED);
 
require_once __DIR__ . '/config.inc.php';
require_once __DIR__ . '/../../shared/php_includes/common_functions.inc.php';
require_once __DIR__ . '/rirs.inc.php';
 
define('IANA_CACHE_DIR', __DIR__ . '/../.cache/pattern-generator/iana');
define('PATTERN_DIR', __DIR__ . '/../../main/pattern');
define('RIRSTATS_CACHE_DIR', __DIR__ . '/../.cache/pattern-generator/rirstats');
 
if (USE_IANA_DATA) {
echo "IPv4 Preparation: Get IANA delegation file\n";
 
$iana_root_url = 'ftp://ftp.iana.org/assignments/ipv4-address-space/ipv4-address-space.txt';
$iana_root_cache = IANA_CACHE_DIR . '/ipv4-address-space.txt';
if ((USE_CACHE) && (file_exists($iana_root_cache))) {
@mkdir(dirname($iana_root_cache), 0777, true);
$iana_root_data = file($iana_root_cache, FILE_IGNORE_NEW_LINES);
} else {
$iana_root_data = file($iana_root_url, FILE_IGNORE_NEW_LINES);
}
$iana_root_ver = trim(str_replace('-', '', $iana_root_data[3]));
$iana_root_data = grep($iana_root_data, 'whois.');
}
 
foreach ($rirs as &$rir) {
$step = 0;
$out = '';
 
$loc_rir_whois_server = $rir_whois_server[$rir];
 
if (USE_RIR_STAT_DATA) {
$step++;
echo "IPv4 $rir: Step $step - Get RIR statistics file\n";
 
$rirstat_url = $rirstat_urls[$rir];
$rirstat_cache = RIRSTATS_CACHE_DIR . "/$rir";
if ((USE_CACHE) && (file_exists($rirstat_cache))) {
@mkdir(dirname($rirstat_cache), 0777, true);
$rirstat_file = file($rirstat_cache);
} else {
$rirstat_file = file($rirstat_url);
}
 
$rirstat_file = antigrep($rirstat_file, '#');
 
$tmp = explode('|', $rirstat_file[0]);
$rirstat_ver = $tmp[5]; // enddate
# $rirstat_ver = substr($rirstat_ver, 0, 4) . '-' . substr($rirstat_ver, 4, 2) . '-' . substr($rirstat_ver, 6, 2);
unset($tmp);
 
$out .= "#: version $rirstat_ver\n\n";
} else if (USE_IANA_DATA) {
$out .= "#: version $iana_root_ver\n\n";
} else {
fwrite(STDERR, "Configuration error: USE_RIR_STAT_DATA and USE_IANA_DATA cannot be both false.\n");
exit(1);
}
 
$out .= "# ".strtoupper($rir)." IPv4\n";
$out .= "# Automatically generated by ".__DIR__."/gwhois-pattern-update\n";
$out .= "# Generation timestamp: ".date('Y-m-d H:i:s \G\M\TO')."\n";
if (USE_IANA_DATA) $out .= "# Source: ($iana_root_ver) $iana_root_url\n";
if (USE_RIR_STAT_DATA) $out .= "# Source: ($rirstat_ver) $rirstat_url\n";
$out .= "\n";
 
$out .= ":whois|$loc_rir_whois_server";
if ($ipv4_additional_params[$rir] != '') {
$out .= '|prefix='.$ipv4_additional_params[$rir].'|';
}
$out .= "\n";
 
$iana_blocks = array();
if (USE_IANA_DATA) {
$step++;
echo "IPv4 $rir: Step $step - Parse IANA root blocks\n";
 
$loc_roots = grep($iana_root_data, $loc_rir_whois_server);
 
$iana_ary = array();
foreach ($loc_roots as &$lr) {
$lr = trim($lr);
$tmp = explode(' ', $lr, 2);
$lr = $tmp[0];
unset($tmp);
$lr = preg_replace('|^0*|s', '', $lr);
 
// Break up the CIDR
$ary = explode('/', $lr, 2);
$bry = ipv4_cidr2range($ary[0], $ary[1]);
$iana_blocks[$bry[0]] = $bry[1];
}
}
 
$rir_blocks = array();
if (USE_RIR_STAT_DATA) {
$step++;
echo "IPv4 $rir: Step $step - Parse RIR blocks\n";
 
# $rirstat_file = grep($rirstat_file, 'ipv4');
# $rirstat_file = antigrep($rirstat_file, 'summary');
## array_shift($rirstat_file); // header line
 
foreach ($rirstat_file as &$x) {
$x = trim($x);
if ($x == '') continue;
 
$ary = explode('|', $x);
 
# arin|* |asn|* |22244|summary
# ^0 ^1 ^2 ^3 ^4 ^5
if ($ary[5] == 'summary') continue;
 
# Example:
# afrinic|ZM|ipv4|196.46.192.0|8192|20031024|allocated
# ^0 ^1 ^2 ^3 ^4 ^5 ^6
 
# 2.1AP resp 2.3 (= extended) are compatible with 2.0
 
$type = $ary[2];
if ($type != 'ipv4') continue;
 
$baseip = $ary[3];
$nums = $ary[4];
# $state = $ary[6];
 
$topip = ipv4_add($baseip, $nums-1);
 
$rir_blocks[$baseip] = $topip;
}
}
 
if (USE_IANA_DATA && USE_RIR_STAT_DATA) {
# Use both
$step++;
echo "IPv4 $rir: Step $step - Merging RIR and IANA stats\n";
$blocks_merged = ipv4_merge_arrays($rir_blocks, $iana_blocks);
} else if (USE_IANA_DATA) {
# Use only IANA
$blocks_merged = $iana_blocks;
} else if (USE_RIR_STAT_DATA) {
# Use only RIR data
$blocks_merged = $rir_blocks;
} else {
fwrite(STDERR, "Configuration error: USE_RIR_STAT_DATA and USE_IANA_DATA cannot be both false.\n");
exit(1);
}
 
$step++;
$blocks_merged = ipv4_merge_address_blocks($blocks_merged, "IPv4 $rir: Step $step - ");
 
// --- CIDR finden und ausgeben ---
 
$step++;
echo "IPv4 $rir: Step $step - Analyze address ranges and write CIDR blocks\n";
 
foreach ($blocks_merged as $baseip => &$topip) {
if (INCLUDE_BLOCK_RANGE_COMMENTS) $out .= "# $baseip - $topip\n";
 
$cidrs = ipv4_range2cidr($baseip, $topip, IPV4_SHORT_FORM);
foreach ($cidrs as &$cidr) {
$out .= "=$cidr\n";
}
}
 
# --- Write to file ---
 
$step++;
echo "IPv4 $rir: Step $step - Write to output file\n";
 
$h = fopen(PATTERN_DIR."/ipv4_$rir", 'w') or die("Error opening file ".PATTERN_DIR."/ipv4_$rir");
fwrite($h, $out) or die('Could not write to output file');
fclose($h);
}
 
echo "IPv4 Finished!\n";
Property changes:
Added: svn:executable
+*
\ No newline at end of property
/trunk/maintenance/pattern-generator/generate_ipv6
0,0 → 1,191
#!/usr/bin/php
<?php
 
#
# generic Whois - Automatic Pattern Generator: IPv6
#
# (c) 2012-2013 Daniel Marschall, ViaThinkSoft [www.viathinksoft.de]
#
# Distribution, usage etc. pp. regulated by the current version of GPL.
#
#
# Version 2013-03-08
#
 
error_reporting(E_ALL | E_NOTICE | E_STRICT | E_DEPRECATED);
 
require_once __DIR__ . '/config.inc.php';
require_once __DIR__ . '/../../shared/php_includes/common_functions.inc.php';
require_once __DIR__ . '/rirs.inc.php';
 
define('IANA_CACHE_DIR', __DIR__ . '/../.cache/pattern-generator/iana');
define('PATTERN_DIR', __DIR__ . '/../../main/pattern');
define('RIRSTATS_CACHE_DIR', __DIR__ . '/../.cache/pattern-generator/rirstats');
 
if (USE_IANA_DATA) {
echo "IPv6 Preparation: Get IANA delegation file\n";
 
$iana_root_url = 'ftp://ftp.iana.org/assignments/ipv6-unicast-address-assignments/ipv6-unicast-address-assignments.txt';
$iana_root_cache = IANA_CACHE_DIR . '/ipv6-unicast-address-assignments.txt';
if ((USE_CACHE) && (file_exists($iana_root_cache))) {
@mkdir(dirname($iana_root_cache), 0777, true);
$iana_root_data = file($iana_root_cache, FILE_IGNORE_NEW_LINES);
} else {
$iana_root_data = file($iana_root_url, FILE_IGNORE_NEW_LINES);
}
$iana_root_ver = trim(str_replace('-', '', $iana_root_data[3]));
$iana_root_data = grep($iana_root_data, 'whois.');
}
 
foreach ($rirs as &$rir) {
$step = 0;
$out = '';
 
$loc_rir_whois_server = $rir_whois_server[$rir];
 
if (USE_RIR_STAT_DATA) {
$step++;
echo "IPv6 $rir: Step $step - Get RIR statistics file\n";
 
$rirstat_url = $rirstat_urls[$rir];
$rirstat_cache = RIRSTATS_CACHE_DIR . "/$rir";
if ((USE_CACHE) && (file_exists($rirstat_cache))) {
@mkdir(dirname($rirstat_cache), 0777, true);
$rirstat_file = file($rirstat_cache);
} else {
$rirstat_file = file($rirstat_url);
}
 
$rirstat_file = antigrep($rirstat_file, '#');
 
$tmp = explode('|', $rirstat_file[0]);
$rirstat_ver = $tmp[5]; // enddate
# $rirstat_ver = substr($rirstat_ver, 0, 4) . '-' . substr($rirstat_ver, 4, 2) . '-' . substr($rirstat_ver, 6, 2);
unset($tmp);
 
$out .= "#: version $rirstat_ver\n\n";
} else if (USE_IANA_DATA) {
$out .= "#: version $iana_root_ver\n\n";
} else {
fwrite(STDERR, "Configuration error: USE_RIR_STAT_DATA and USE_IANA_DATA cannot be both false.\n");
exit(1);
}
 
$out .= "# ".strtoupper($rir)." IPv6\n";
$out .= "# Automatically generated by ".__DIR__."/gwhois-pattern-update\n";
$out .= "# Generation timestamp: ".date('Y-m-d H:i:s \G\M\TO')."\n";
if (USE_IANA_DATA) $out .= "# Source: ($iana_root_ver) $iana_root_url\n";
if (USE_RIR_STAT_DATA) $out .= "# Source: ($rirstat_ver) $rirstat_url\n";
$out .= "\n";
 
$out .= ":whois|$loc_rir_whois_server";
if ($ipv6_additional_params[$rir] != '') {
$out .= '|prefix='.$ipv6_additional_params[$rir].'|';
}
$out .= "\n";
 
$iana_blocks = array();
if (USE_IANA_DATA) {
$step++;
echo "IPv6 $rir: Step $step - Parse IANA root blocks\n";
 
$loc_roots = grep($iana_root_data, $loc_rir_whois_server);
 
$iana_ary = array();
foreach ($loc_roots as &$lr) {
$lr = trim($lr);
$tmp = explode(' ', $lr, 2);
$lr = $tmp[0];
unset($tmp);
$lr = preg_replace('|^0*|s', '', $lr);
 
// Break up the CIDR
$ary = explode('/', $lr, 2);
$bry = ipv6_cidr2range($ary[0], $ary[1]);
$iana_blocks[$bry[0]] = $bry[1];
}
}
 
$rir_blocks = array();
if (USE_RIR_STAT_DATA) {
$step++;
echo "IPv6 $rir: Step $step - Parse RIR blocks\n";
 
# $rirstat_file = grep($rirstat_file, 'ipv6');
# $rirstat_file = antigrep($rirstat_file, 'summary');
## array_shift($rirstat_file); // header line
 
foreach ($rirstat_file as &$x) {
$x = trim($x);
if ($x == '') continue;
 
$ary = explode('|', $x);
 
# arin|* |asn|* |22244|summary
# ^0 ^1 ^2 ^3 ^4 ^5
if ($ary[5] == 'summary') continue;
 
# Example:
# afrinic|KE|ipv6|2c0f:fe88::|32|20100728|allocated
# ^0 ^1 ^2 ^3 ^4 ^5 ^6
 
# 2.1AP resp 2.3 (= extended) are compatible with 2.0
 
$type = $ary[2];
if ($type != 'ipv6') continue;
 
$baseip = $ary[3];
$cidr = $ary[4];
# $state = $ary[6];
 
$range = ipv6_cidr2range($baseip, $cidr);
$topip = $range[1];
 
$rir_blocks[$baseip] = $topip;
}
}
 
if (USE_IANA_DATA && USE_RIR_STAT_DATA) {
# Use both
$step++;
echo "IPv6 $rir: Step $step - Merging RIR and IANA stats\n";
$blocks_merged = ipv6_merge_arrays($rir_blocks, $iana_blocks);
} else if (USE_IANA_DATA) {
# Use only IANA
$blocks_merged = $iana_blocks;
} else if (USE_RIR_STAT_DATA) {
# Use only RIR data
$blocks_merged = $rir_blocks;
} else {
fwrite(STDERR, "Configuration error: USE_RIR_STAT_DATA and USE_IANA_DATA cannot be both false.\n");
exit(1);
}
 
$step++;
$blocks_merged = ipv6_merge_address_blocks($blocks_merged, "IPv6 $rir: Step $step - ");
 
// --- CIDR finden und ausgeben ---
 
$step++;
echo "IPv6 $rir: Step $step - Analyze address ranges and write CIDR blocks\n";
 
foreach ($blocks_merged as $baseip => &$topip) {
if (INCLUDE_BLOCK_RANGE_COMMENTS) $out .= "# $baseip - $topip\n";
 
$cidrs = ipv6_range2cidr($baseip, $topip);
foreach ($cidrs as &$cidr) {
$out .= "=$cidr\n";
}
}
 
# --- Write to file ---
 
$step++;
echo "IPv6 $rir: Step $step - Write to output file\n";
 
$h = fopen(PATTERN_DIR."/ipv6_$rir", 'w') or die("Error opening file ".PATTERN_DIR."/ipv6_$rir");
fwrite($h, $out) or die('Could not write to output file');
fclose($h);
}
 
echo "IPv6 Finished!\n";
Property changes:
Added: svn:executable
+*
\ No newline at end of property
/trunk/maintenance/pattern-generator/generate_tld
0,0 → 1,116
#!/usr/bin/php
<?php
 
#
# generic Whois - Automatic Pattern Generator: TLD
#
# (c) 2012-2015 Daniel Marschall, ViaThinkSoft [www.viathinksoft.de]
#
# Distribution, usage etc. pp. regulated by the current version of GPL.
#
#
# Version 2015-05-07
#
 
error_reporting(E_ALL | E_NOTICE | E_STRICT | E_DEPRECATED);
 
require_once __DIR__ . '/config.inc.php';
require_once __DIR__ . '/../../shared/php_includes/common_functions.inc.php';
require_once __DIR__ . '/rirs.inc.php';
require_once __DIR__ . '/iana_functions.inc.php';
 
define('PATTERN_DIR', __DIR__ . '/../../main/pattern');
define('CACHE_FILE_DIR', __DIR__ . '/../.cache/cache');
 
$out = '';
$out .= "# TLDs\n";
$out .= "# Automatically generated by ".__DIR__."/gwhois-pattern-update\n";
$out .= "# Generation timestamp: ".date('Y-m-d H:i:s \G\M\TO')."\n";
$out .= "\n";
 
$max_version = 0;
 
# ---
 
echo "Deleted TLD: Get deleted TLD list (".DELETED_TLD_LIST.")\n";
 
$iana_tld_data = cached_file(DELETED_TLD_LIST, CACHE_FILE_DIR);
$iana_tld_data = str_replace("\r", '', $iana_tld_data);
$iana_tld_data = trim($iana_tld_data);
$iana_tld_data = explode("\n", $iana_tld_data);
 
echo "Deleted TLD: Parsing...\n";
 
if (preg_match('@# Latest update detected on (.*)@', $iana_tld_data[0], $m)) {
$version = $m[1];
$version = substr($version, 0, 10);
$version = str_replace('-', '', $version);
if ($version > $max_version) $max_version = $version;
}
 
array_shift($iana_tld_data);
 
$tlds = implode('|', $iana_tld_data);
 
$iana_tld_data = implode("\n", $iana_tld_data);
 
$out .= "# Source: ($version) ".DELETED_TLD_LIST."\n";
$out .= "\n";
 
$out .= ":notice||Disallocated by IANA";
if ($tld_additional_params['iana'] != '') {
$out .= '|prefix='.$tld_additional_params['iana'].'|';
}
$out .= "\n";
$out .= "^(tld\\s){0,1}($tlds)\$\n";
$out .= "\n";
 
# ---
 
echo "TLD: Get IANA delegation file (".IANA_TLD_REGISTRY.")\n";
 
$iana_tld_data = get_iana_tld_data();
 
echo "TLD: Parsing...\n";
 
if (preg_match('@# Version (\d+), Last Updated (.*)@', $iana_tld_data[0], $m)) {
$version = $m[1];
$version = substr($version, 0, 8);
if ($version > $max_version) $max_version = $version;
}
 
array_shift($iana_tld_data);
 
$tlds = implode('|', $iana_tld_data);
 
$iana_tld_data = implode("\n", $iana_tld_data);
 
$out .= "# Source: ($version) ".IANA_TLD_REGISTRY."\n";
$out .= "\n";
 
$out .= ":whois|".$rir_whois_server['iana'];
if ($tld_additional_params['iana'] != '') {
$out .= '|prefix='.$tld_additional_params['iana'].'|';
}
$out .= "\n";
$out .= "^($tlds)\$\n";
$out .= "\n";
$out .= ":whois|".$rir_whois_server['iana']."|strip=tld ";
if ($tld_additional_params['iana'] != '') {
$out .= '|prefix='.$tld_additional_params['iana'];
}
$out .= "|\n";
$out .= "^tld\\s\\S+\$\n";
$out .= "\n";
 
# ---
 
$out = "#: version $max_version\n\n".$out;
 
echo "TLD-Generator: Write to output file\n";
 
$h = fopen(PATTERN_DIR.'/tld', 'w') or die('Error opening file '.PATTERN_DIR.'/tld');
fwrite($h, $out) or die('Could not write to output file');
fclose($h);
 
echo "TLD-Generator: Finished\n";
Property changes:
Added: svn:executable
+*
\ No newline at end of property
/trunk/maintenance/pattern-generator/gwhois-pattern-update
0,0 → 1,104
#!/bin/bash
 
#
# generic Whois - Automatic Pattern Generator Master-Script
#
# (c) 2012-2015 Daniel Marschall, ViaThinkSoft [www.viathinksoft.de]
#
# Distribution, usage etc. pp. regulated by the current version of GPL.
#
#
# Version 2015-04-15
#
 
# TODO: "force" option will enforce generate even when web download was not http 200
 
DIR=$( dirname "$0" );
 
. "$DIR"/../config/gwhois-pattern-update.conf
. "$DIR"/../config/urls.conf
 
IANA_CACHE_DIR="$DIR"/../.cache/pattern-generator/iana
 
function download() {
# in: <url> <outputfile>
# out: 0 = success
# 1 = error
# 2 = success, but nothing updated
# output file will not be touched when nothing needs to be updated
 
# Thanks to http://blog.yjl.im/2012/03/downloading-only-when-modified-using.html for this wonderful tutorial
 
if [ -f "$2" ]; then
HTTPCODE=$( curl -o "$2" -z "$2" -fsSL --write-out %{http_code} -- "$1" )
else
HTTPCODE=$( curl -o "$2" -fsSL --write-out %{http_code} -- "$1" )
fi
 
RES=$?
 
if [ $RES -eq 0 ]; then
touch "$2.success"
if [[ "$HTTPCODE" == "200" ]]; then
return 0
else
return 2
fi
else
touch "$2.fail"
return 1
fi
}
 
if [ $? -ne 0 ]
then
echo "Error when reading configuration value IANA_CACHE_DIR" > /dev/stderr
exit 1
fi
 
echo "=================== GWHOIS PATTERN UPDATE ==================="
echo "This script downloads the latest RIR statistics"
echo "and renews the pattern files of GWhoIs to provide"
echo "up-to-date informations of IPv4, IPv6 and ASN resources."
echo "ATTENTION: The parsing of the downloaded files will take"
echo "approximately 15-20 minutes!!!"
echo "============================================================="
 
# RIR stats are necessary for generate_ipv4 and generate_ipv6
echo "RIR stats Synchronization ...";
"$DIR"/sync_rir_stats
 
mkdir -p "$IANA_CACHE_DIR"/
 
echo "IPv4 Synchronization ...";
download "$IANA_IPV4_ASSIGNMENTS" "$IANA_CACHE_DIR"/ipv4-address-space.txt
if [ $? -eq 0 ]; then
echo "IPv4 Generating ..."
"$DIR"/generate_ipv4
fi
 
echo "IPv6 Synchronization ...";
download "$IANA_IPV6_ASSIGNMENTS" "$IANA_CACHE_DIR"/ipv6-unicast-address-assignments.txt
if [ $? -eq 0 ]; then
echo "IPv6 Generating ..."
"$DIR"/generate_ipv6
fi
 
echo "ASN Synchronization ...";
download "$IANA_AS_NUMBERS" "$IANA_CACHE_DIR"/as-numbers.txt
if [ $? -eq 0 ]; then
echo "ASN Generating ..."
"$DIR"/generate_asn
fi
 
echo "TLD Synchronization ...";
download "$IANA_TLD_REGISTRY" "$IANA_CACHE_DIR"/tlds-alpha-by-domain.txt
if [ $? -eq 0 ]; then
echo "TLD Generating ..."
"$DIR"/generate_tld
 
echo "Domains Generating ..."
"$DIR"/generate_domains
fi
 
echo "Everything finished!"
Property changes:
Added: svn:executable
+*
\ No newline at end of property
/trunk/maintenance/pattern-generator/iana_functions.inc.php
0,0 → 1,26
<?php
 
#
# generic Whois - Automatic Pattern Generator: TLD
#
# (c) 2012 Daniel Marschall, ViaThinkSoft [www.viathinksoft.de]
#
# Distribution, usage etc. pp. regulated by the current version of GPL.
#
#
# Version 2014-04-31
#
 
require_once __DIR__ . '/config.inc.php';
 
define('IANA_CACHE_DIR', __DIR__ . '/../.cache/pattern-generator/iana');
define('IANA_TLD_CACHE', IANA_CACHE_DIR . '/tlds-alpha-by-domain.txt');
 
function get_iana_tld_data() {
if ((USE_CACHE) && (file_exists(IANA_TLD_CACHE))) {
@mkdir(dirname(IANA_TLD_CACHE), 0777, true);
return file(IANA_TLD_CACHE, FILE_IGNORE_NEW_LINES);
} else {
return file(IANA_TLD_REGISTRY, FILE_IGNORE_NEW_LINES);
}
}
/trunk/maintenance/pattern-generator/info
0,0 → 1,8
This tool updates the GWhoIs pattern files which include the following patterns:
- IPv4 blocks
- IPv6 blocks
- ASNs
- TLDs
- new gTLDs
 
You can run it as cronjob
/trunk/maintenance/pattern-generator/rir_bugs.info
Cannot display: file marked as a binary type.
svn:mime-type = application/x-info
Property changes:
Added: svn:mime-type
+application/x-info
\ No newline at end of property
/trunk/maintenance/pattern-generator/rirs.inc.php
0,0 → 1,104
<?php
 
#
# generic Whois - Automatic Pattern Generator RIR file
#
# (c) 2012-2013 Daniel Marschall, ViaThinkSoft [www.viathinksoft.de]
#
# Distribution, usage etc. pp. regulated by the current version of GPL.
#
#
# Version 2013-03-07
#
 
$rirs = array('afrinic', 'apnic', 'arin', 'lacnic', 'ripencc');
# IANA is not a "real" RIR - to enable, please add "iana" manually:
# $rirs[] = 'iana';
 
// Extended format also has "reserved" and "available" resources!
// I have contacted the NRO EC in Apr 2012 to suggest that the other RIRs also use that extended format,
// so that the statistics can also show available and reserved blocks
// APNIC supports extended RIR statistics exchange format since 2008-02-14 .
// RIPE NCC supports extended RIR statistics exchange format since 2012-05-23 .
// LACNIC supports extended RIR statistics exchange format since 2012-06-28 .
// AfriNIC supports extended RIR statistics exchange format since 2012-10-02 .
// ARIN supports extended RIR statistics exchange format since 2013-03-05 . (First publication 2013-02-16 , revoked due to problems )
$supports_extended_rirstat = array();
$supports_extended_rirstat['afrinic'] = true;
$supports_extended_rirstat['apnic'] = true;
$supports_extended_rirstat['arin'] = true; // must always be true, since they discontinued the old stats
$supports_extended_rirstat['lacnic'] = true;
$supports_extended_rirstat['ripencc'] = true;
$supports_extended_rirstat['iana'] = false;
 
$rir_whois_server = array();
$rir_whois_server['afrinic'] = 'whois.afrinic.net';
$rir_whois_server['apnic'] = 'whois.apnic.net';
$rir_whois_server['arin'] = 'whois.arin.net';
$rir_whois_server['lacnic'] = 'whois.lacnic.net';
$rir_whois_server['ripencc'] = 'whois.ripe.net';
$rir_whois_server['iana'] = 'whois.iana.org';
 
$rir_domain = array();
$rir_domain['afrinic'] = 'afrinic.net';
$rir_domain['apnic'] = 'apnic.net';
$rir_domain['arin'] = 'arin.net';
$rir_domain['lacnic'] = 'lacnic.net';
$rir_domain['ripencc'] = 'ripe.net';
$rir_domain['iana'] = 'iana.org';
 
// If the RIR offers and extended format, use it instead!
// Alternative address: ftp://ftp.iana.org/pub/mirror/rirstats/
$rirstat_urls = array();
$rirstat_urls['afrinic'] = 'ftp://ftp.afrinic.net/pub/stats/afrinic/delegated-afrinic-extended-latest';
$rirstat_urls['apnic'] = 'ftp://ftp.apnic.net/pub/stats/apnic/delegated-apnic-extended-latest';
$rirstat_urls['arin'] = 'ftp://ftp.arin.net/pub/stats/arin/delegated-arin-extended-latest';
$rirstat_urls['lacnic'] = 'ftp://ftp.lacnic.net/pub/stats/lacnic/delegated-lacnic-extended-latest';
$rirstat_urls['ripencc'] = 'ftp://ftp.ripe.net/pub/stats/ripencc/delegated-ripencc-extended-latest';
$rirstat_urls['iana'] = 'ftp://ftp.apnic.net/pub/stats/iana/delegated-iana-latest'; # This is a service by apnic.net . IANA is not running a public service, NRO EC resolution needed
 
$ipv4_additional_params = array();
$ipv4_additional_params['afrinic'] = '';
$ipv4_additional_params['apnic'] = '';
$ipv4_additional_params['arin'] = 'n ';
$ipv4_additional_params['lacnic'] = '';
$ipv4_additional_params['ripencc'] = '';
$ipv4_additional_params['iana'] = '';
 
$ipv6_additional_params = array();
$ipv6_additional_params['afrinic'] = '';
$ipv6_additional_params['apnic'] = '';
$ipv6_additional_params['arin'] = 'n ';
$ipv6_additional_params['lacnic'] = '';
$ipv6_additional_params['ripencc'] = '';
$ipv6_additional_params['iana'] = '';
 
$asn_additional_params = array();
$asn_additional_params['afrinic'] = '';
$asn_additional_params['apnic'] = '';
$asn_additional_params['arin'] = 'a ';
$asn_additional_params['lacnic'] = '';
$asn_additional_params['ripencc'] = '';
$asn_additional_params['iana'] = '';
 
$tld_additional_params = array();
$tld_additional_params['afrinic'] = '';
$tld_additional_params['apnic'] = '';
$tld_additional_params['arin'] = 'z '; # ???
$tld_additional_params['lacnic'] = '';
$tld_additional_params['ripencc'] = '';
$tld_additional_params['iana'] = '';
 
// Output unfiltered results for ARIN
if ((defined('ENABLE_UNFILTERED_ARIN_OUTPUT')) && (ENABLE_UNFILTERED_ARIN_OUTPUT)) {
$ipv6_additional_params['arin'] .= '+ ';
$ipv4_additional_params['arin'] .= '+ ';
$asn_additional_params['arin'] .= '+ ';
}
 
// Output unfiltered results for RIPE
if ((defined('ENABLE_UNFILTERED_RIPE_OUTPUT')) && (ENABLE_UNFILTERED_RIPE_OUTPUT)) {
$ipv6_additional_params['ripencc'] .= '-B ';
$ipv4_additional_params['ripencc'] .= '-B ';
$asn_additional_params['ripencc'] .= '-B ';
}
/trunk/maintenance/pattern-generator/sync_rir_stats
0,0 → 1,97
#!/usr/bin/php
<?php
 
#
# generic Whois - Automatic Pattern Generator RIR-Statistics-Synchronisation-Tool
#
# (c) 2012-2015 Daniel Marschall, ViaThinkSoft [www.viathinksoft.de]
#
# Distribution, usage etc. pp. regulated by the current version of GPL.
#
#
# Version 2015-04-14
#
 
error_reporting(E_ALL | E_NOTICE | E_STRICT | E_DEPRECATED);
 
require_once __DIR__ . '/config.inc.php';
require_once __DIR__ . '/rirs.inc.php';
 
define('RIRSTATS_CACHE_DIR', __DIR__ . '/../.cache/pattern-generator/rirstats');
 
function rir_get_md5_sum($url) {
// MD5 (/var/opt/ftp/pub/apnic/stats/apnic/delegated-apnic-extended-latest) = 82c291bb5d4363a3db254853c1602777
// MD5 (delegated-lacnic-extended-latest) = 2815f0b5837d5658acf1659dff98bb52
// MD5 (delegated-ripencc-extended-latest) = d4caddde59952c44b584cacf720ef836
// MD5 (delegated-arin-latest) = 3137d635d5e647481af972ddc87e5570
// MD5 (delegated-afrinic-latest) = 9c1cd55e8894402062282e3ebdcf53c8 <-- WRONG FILE NAME SHOWN FOR delegated-afrinic-extended-latest.md5!
 
$md5_cont = file_get_contents($url.'.md5');
 
if (substr($md5_cont, 0, 5) != 'MD5 (') {
// Some older *.md5 files of AfriNIC have following formats:
// 73d5e32afd43eac0beb4635b6a9056c4 delegated-afrinic-latest
// since 2012-06-25 AfriNIC uses the "normal" format
// MD5 (delegated-afrinic-latest) = 9c1cd55e8894402062282e3ebdcf53c8
// however, the filename is wrong (delegated-afrinic-latest instead of delegated-afrinic-extended-latest)
return substr($md5_cont, 0, 32);
} else {
// Die anderen RIRs
$tmp = explode(' = ', $md5_cont);
return trim($tmp[1]);
}
}
 
function rir_download_report($url, $outfile, $do_md5_check = true) {
if (($do_md5_check) && (file_exists($outfile))) {
$md5_ist = md5_file($outfile);
$md5_soll = rir_get_md5_sum($url);
if ($md5_soll == $md5_ist) {
touch("$outfile.success");
return true;
}
}
 
$cont = file_get_contents($url);
 
if (!$cont) {
touch("$outfile.fail");
return false;
}
 
if ($do_md5_check) {
$md5_ist = md5($cont);
if (!isset($md5_soll)) $md5_soll = rir_get_md5_sum($url);
if ($md5_soll != $md5_ist) {
touch("$outfile.fail");
return false;
}
}
 
$h = fopen($outfile, 'w');
if (!$h) return false;
if (!fwrite($h, $cont)) {
touch("$outfile.fail");
return false;
}
fclose($h);
 
touch("$outfile.success");
return true;
}
 
$rirs[] = 'iana';
 
@mkdir(RIRSTATS_CACHE_DIR.'/', 0777, true);
 
foreach ($rirs as $rir) {
$url = $rirstat_urls[$rir];
 
$failcounter = 0;
while (!rir_download_report($url, RIRSTATS_CACHE_DIR."/$rir", $rir != 'iana')) {
$failcounter++;
echo "Retry downloading $rir stats ($failcounter)...\n";
if ($failcounter > 100) break;
sleep(60);
}
}
Property changes:
Added: svn:executable
+*
\ No newline at end of property
/trunk/maintenance/qa-monitor/config.inc.php
0,0 → 1,18
<?php
 
#
# generic Whois - Automatic Pattern Generator configuration
#
# (c) 2012-2015 Daniel Marschall, ViaThinkSoft [www.viathinksoft.de]
#
# Distribution, usage etc. pp. regulated by the current version of GPL.
#
#
# Version 2015-04-17
#
 
require_once __DIR__ . '/../../shared/php_includes/config_functions.inc.php';
parse_config(__DIR__.'/../config/qa-monitor.conf');
parse_config(__DIR__.'/../config/urls.conf');
 
$anormale_whois=explode(' ', EXCLUDE_WHOIS);
/trunk/maintenance/qa-monitor/run
0,0 → 1,346
#!/usr/bin/php
<?php
 
#
# generic Whois - Automatic Pattern Generator: QA Monitor
#
# (c) 2012-2015 Daniel Marschall, ViaThinkSoft [www.viathinksoft.de]
#
# Distribution, usage etc. pp. regulated by the current version of GPL.
#
#
# Version 2015-04-27
#
 
# TODO: strikte trennung zwischen pattern entwicklung ( = im sdk enthalten ) und lokaler gwi entwicklung ( = packages, eigene vwi services )
# TODO: alles modular machen, vieles cachen
 
# TODO: was wenn ein rwi entfernt wird? prüfung notwendig dann!
# --> das wird im whois-ping test geprueft
# TODO: auch unnoetige excludes (anormalities) in config.inc.php melden
 
# TODO pattern.d/tld --> check if all existing and disallocated TLDs are inside
 
# TODO: konsolenfarben z.b. grün für qa-audit
 
error_reporting(E_ALL | E_NOTICE | E_STRICT | E_DEPRECATED);
 
require_once __DIR__ . '/../../shared/php_includes/common_functions.inc.php';
 
define('CACHE_FILE_DIR', __DIR__ . '/../.cache/cache');
 
# ---
 
// This is like __DIR__, but does not resolve symlinks
// (useful for sharing StatMon source codes locally by symlinking)
define('DIR', dirname($_SERVER['SCRIPT_FILENAME']));
 
$anormale_whois = array();
require DIR . '/config.inc.php';
 
$pattern_cont = get_united_pattern();
 
$global_status = 0;
 
echo "* Checking for died whois servers and check if presumed dead whois servers (= already removed from the pattern file) have resurrected...\n";
 
exec(__DIR__ . "/whois-ping/whoisping", $out, $ec);
 
$loc_good = $ec == 0;
 
if ($loc_good) {
echo "[ OK ]\n";
} else {
echo "[ FAIL ]\n";
$global_status=1;
}
 
# ---
 
echo "* Checking the testcases in background mode...\n";
 
exec(__DIR__ . "/testcases/batch --mode b", $out, $ec);
 
$loc_good = $ec == 0;
 
if ($loc_good) {
echo "[ OK ]\n";
} else {
echo "[ FAIL ]\n";
$global_status=1;
}
 
# ---
 
echo "* Check if every deleted TLD has a notice ( ".DELETED_TLD_LIST." )\n";
 
# does not exist as static file at VTS server
$del_tld_cont = explode("\n", cached_file(DELETED_TLD_LIST, CACHE_FILE_DIR));
 
$loc_good = true;
foreach ($del_tld_cont as $tld) {
$tld = trim($tld);
if ($tld == '') continue;
if ($tld[0] == '#') continue;
$tld = strtolower($tld);
if (!preg_match('@:notice\\|\\|Disallocated by IANA([^\\n]*)[\\r\\n]+\\\\.'.$tld.'\\$@smU', $pattern_cont, $m)) {
$loc_good = false;
echo "[ !! ] Does not have a notice beginning with \"Disallocated by IANA\": $tld\n";
}
}
 
if ($loc_good) {
echo "[ OK ]\n";
} else {
$global_status=1;
}
 
# ---
 
echo "* Check if every TLD has a single whois entry\n";
 
$tld_cont = explode("\n", cached_file(IANA_TLD_REGISTRY, CACHE_FILE_DIR));
 
$loc_good = true;
foreach ($tld_cont as $tld) {
$tld = trim($tld);
if ($tld == '') continue;
if ($tld[0] == '#') continue;
$tld = strtolower($tld);
$regex = '@[\r\n]\s*(?<!#)\s*[^a-zA-Z\r\n#]*\\\\.'.trim($tld).'\\$\s*[\r\n]@isU';
$pc = $pattern_cont;
$pc = preg_replace('@\\(\\?\\:[a-zA-Z\\|]+\\)@isU', '', $pc); # z.B. \.((?:ac|co|net|or|web|sch|mil|go|my|biz)\.id)$
$pc = str_replace('(', '', $pc);
$pc = str_replace(')', '', $pc); # wegen regexes, z.b. \.(pn)$
# if (strpos($pattern_cont, '\.'.trim($tld)) === false) {
# if (strpos(str_replace(')', '', $pattern_cont), '\.'.trim($tld).'$') === false) { # ')' wegen RegEx'es
if (!preg_match($regex, $pc)) {
$iana_url = sprintf(IANA_TLD_ENTRY, $tld);
$iana_cont = file_get_contents($iana_url);
if (strpos($iana_cont, 'This domain is not present in the root zone at this time.') === false) {
$loc_good = false;
 
# TODO: hier sollte man evtl schon gucken, ob bei iana.org ein whois-name vorliegt.
echo "[ !! ] Not in pattern-file: $tld (see $iana_url )\n";
}
}
}
 
if ($loc_good) {
echo "[ OK ]\n";
} else {
$global_status=1;
}
 
# ---
 
echo "* Check if TLDs have the latest Root-Whois-Server URLs ( ".ROOT_WHOIS_SERVER_LIST." )\n";
 
# TODO: geht nicht wenn 2 TLDs sich einen :whois teilen
# geht auch nicht mit domains mit third level tlds oder regexes usw
 
# TODO: allerdings wird keine kontrolle gemacht ob die auskommentierte Zeile wirklich zu $tld gehört!
echo "Note: For following TLDs, the root whois server may be commented out: ".implode(', ', $anormale_whois)."\n";
 
$loc_good = true;
$rws_cont = rws_get_list();
foreach ($rws_cont as $tld => $whois) {
$c = "$tld => $whois";
 
$g = false;
if (in_arrayi($tld, $anormale_whois)) {
# Sonderfälle... whois server die nicht gehen...
# Der Server muss dann nur irgendwo vorkommen, in Form einer auskommentierten Zeile
$g = (
(stripos($pattern_cont, ':whois|'.$whois."\n") !== false) ||
(stripos($pattern_cont, 'whois::'.$whois.":::") !== false) || // multiple
(stripos($pattern_cont, 'whois::'.$whois."\n") !== false) || // multiple
(stripos($pattern_cont, ':inicwhois|'.$whois."\n") !== false) ||
(stripos($pattern_cont, 'inicwhois::'.$whois.":::") !== false) || // multiple
(stripos($pattern_cont, 'inicwhois::'.$whois."\n") !== false) // multiple
);
} else {
# TODO: auch auskommentierte einträge erlauben, falls die RWI outdated ist
$regex = "@\\n:(inic){0,1}whois\\|".preg_quote($whois, '@')."(\\|.*)*\\n(#.*\n)*\\\\.".preg_quote($tld, '@')."\\$@ismU";
$g = preg_match($regex, $pattern_cont);
 
if (!$g) {
# Multiple?
# TODO: bessere pruefung auf auskommentiere eintraege
$regex = "@(:multiple\\|\\||:::)(inic){0,1}whois::".preg_quote($whois, '@')."(:[^\n]*|)\s*\n(#.*\n)*(\\(\\.\\*\\)){0,1}\\\\.".preg_quote($tld, '@')."\\$@ismU";
$g = preg_match($regex, $pattern_cont);
}
}
 
if (!$g) {
# If the data is not live, we need to check if the whois server is still official (and not changed since then)
if ((!rws_is_live()) && (iana_get_whois($tld) != $whois)) continue;
 
# If we reported it as dead, we trust that. (In case it is wrong, the whois-ping will warn about it)
if (reported_dead($whois)) continue;
 
# Whois servers which are official but are down, are not interesting. Do not warn.
if (!gwitc_is_port_open($whois, 43)) continue;
 
$loc_good = false;
echo "[ !! ] Not in TLD file: $c\n";
}
unset($g);
}
 
if ($loc_good) {
echo "[ OK ]\n";
} else {
$global_status=1;
}
 
# ---
 
echo "* Check if there is a newer official version of gwhois which needs to be merged with the ViaThinkSoft fork ( ".DEBIAN_GWHOIS_PACKAGE_URL." )\n";
 
define('CUR_VER', gwi_getInstalledBaseVersion());
 
$latest_official = getLatestGWIversion();
$latest_official = str_replace('-', '.', $latest_official); // they use the reserved '-' character in their versions (used for delimiting upstream versions)
$loc_good = true;
if (CUR_VER != $latest_official) {
echo '[ !! ] Latest version: '.$latest_official." (This version: ".CUR_VER.")\n";
$loc_good = false;
}
 
if ($loc_good) {
echo "[ OK ]\n";
} else {
$global_status=1;
}
 
# ---
 
echo "* Check if IANA has (probably) a TLD whois list in ".IANA_TLD_FOLDER."\n";
 
$x = cached_file(IANA_TLD_FOLDER, CACHE_FILE_DIR);
$loc_good = substr_count($x, '.txt">') == 1;
 
if ($loc_good) {
echo "[ OK ]\n";
} else {
$global_status=1;
echo "[ !! ] Something has changed ! Please change rws_*() in the QA tool!\n";
}
 
# ---
 
echo "* Check if testcases require attention\n";
 
$out = array();
exec(__DIR__ . '/testcases/status_short', $out, $code);
$loc_good = $code == 0;
 
if ($loc_good) {
echo "[ OK ]\n";
} else {
$global_status=1;
echo trim(implode("\n", $out))."\n";
}
 
# ---
 
echo "* Check the status of whois-ping\n";
 
$out = array();
exec(__DIR__ . '/whois-ping/showerrors', $out, $code);
$loc_good = $code == 0;
 
if ($loc_good) {
echo "[ OK ]\n";
} else {
$global_status=1;
echo trim(implode("\n", $out))."\n";
}
 
# ---
 
echo "* Check syntax of all script files (Perl, PHP)\n";
 
$out = array();
exec(__DIR__ . '/syntax/global-syntax-check', $out, $code);
$loc_good = $code == 0;
 
if ($loc_good) {
echo "[ OK ]\n";
} else {
$global_status=1;
echo trim(implode("\n", $out))."\n";
}
 
# ---
 
exit($global_status);
 
# ---
 
function getLatestGWIversion() {
$x = cached_file(DEBIAN_GWHOIS_PACKAGE_URL, CACHE_FILE_DIR);
preg_match_all('@<br>(.*): all@isU', $x, $m);
$m = $m[1];
rsort($m);
return $m[0]; // biggest version
}
 
// RWS = Root Whois Server List functions
// (needs to be updated as soon as IANA implements this service.)
function rws_get_list() {
$result = array();
 
$tld_cont = explode("\n", cached_file(ROOT_WHOIS_SERVER_LIST, CACHE_FILE_DIR));
 
foreach ($tld_cont as &$c) {
$c = trim($c);
if ($c == '') continue;
if ($c[0] == '#') continue;
$ary = explode(" => ", $c);
$tld = $ary[0];
$whois = trim($ary[1]);
 
$result[$tld] = $whois;
}
 
return $result;
}
 
function rws_is_live() {
// The data is collected every week.
return false;
}
 
function iana_get_whois($tld) {
$out = QueryWhoisServer('whois.iana.org', $tld);
 
if (strpos($out, 'domain:') === false) return false;
if (!preg_match("@\nwhois:\\s*([^\\s]+)\n@ismU", $out, $m)) return false;
return $m[1];
}
 
function gwi_getInstalledBaseVersion() {
# TODO: auch andere dateien anschauen
 
$pattern = file(DIR . '/../../main/pattern/001_subdomains');
if (!preg_match('@#: version (.+)\+@iU', $pattern[0], $m)) return false;
 
return $m[1];
}
 
function in_arrayi($needle, $haystack) {
return in_array(strtolower($needle), array_map('strtolower', $haystack));
}
 
function reported_dead($whois) {
$dead_servers_raw = file(DIR . '/../config/dead-servers.list');
foreach ($dead_servers_raw as &$server) {
$server = trim($server);
if ($server == '') continue;
if ($server[0] == '#') continue;
if ($server == $whois) return true;
}
return false;
}
Property changes:
Added: svn:executable
+*
\ No newline at end of property
/trunk/maintenance/qa-monitor/syntax/global-syntax-check
0,0 → 1,79
#!/usr/bin/php
<?php
 
#
# generic Whois - Maintenance Tools: Global Syntax Check
#
# (c) 2012-2015 Daniel Marschall, ViaThinkSoft [www.viathinksoft.de]
#
# Distribution, usage etc. pp. regulated by the current version of GPL.
#
#
# Version 2015-05-07
#
 
error_reporting(E_ALL | E_NOTICE | E_STRICT | E_DEPRECATED);
 
$silent = ($argc >= 2) && ($argv[1] == '--silent');
 
$files = array();
 
$rii = new RecursiveIteratorIterator(new RecursiveDirectoryIterator(dirname(dirname(dirname(__DIR__)))));
foreach ($rii as $file) {
$filename = $file->getPathname();
if (strpos($filename, '/.') !== false) continue; # also hide ".dir" and ".file"
if (!file_exists($filename)) continue;
$files[] = $filename;
}
 
$baddest = 0;
 
foreach ($files as $filename) {
$h = fopen($filename, 'r');
$headline = fgets($h);
fclose($h);
 
$scripttype = 'n/a';
 
if (preg_match('@#!(.+)\s@U', $headline, $m)) {
$interpreter = $m[1];
 
switch ($interpreter) {
case '/usr/bin/php':
$scripttype = 'PHP';
break;
case '/usr/bin/perl':
$scripttype = 'Perl';
break;
}
} else if (strpos($filename, '.php') !== false) {
$scripttype = 'PHP';
} else if ((strpos($filename, '.pl') !== false) || (strpos($filename, '.pm') !== false)) {
$scripttype = 'Perl';
}
 
$cmd = '';
switch ($scripttype) {
case 'PHP':
$cmd = 'php -l '.escapeshellarg($filename);
break;
case 'Perl':
$cmd = 'perl -Mstrict -Mdiagnostics -cw '.escapeshellarg($filename);
break;
}
 
if ($cmd) {
$out = array();
exec($cmd." 2>&1", $out, $code);
 
if ($code > $baddest) $baddest = $code;
 
if ($code != 0) {
echo "($code) $filename: ".trim(implode("\n ", $out))."\n";
} else {
if (!$silent) echo "OK: $filename\n";
}
}
}
 
exit($baddest);
Property changes:
Added: svn:executable
+*
\ No newline at end of property
/trunk/maintenance/qa-monitor/testcases/allpatterns
0,0 → 1,90
#!/usr/bin/php
<?php
 
#
# generic Whois - Maintenance Framework: Testcases
#
# (c) 2012-2014 Daniel Marschall, ViaThinkSoft [www.viathinksoft.de]
#
# Distribution, usage etc. pp. regulated by the current version of GPL.
#
#
# Version 2014-11-25
#
 
require_once __DIR__ . '/../../shared/php_includes/common_functions.inc.php';
 
$patterns = glob(__DIR__ . '/../../main/pattern/*');
 
#$bs = '\\b';
#$be = '\\b';
 
$vc = '[\p{L}a-zA-Z0-9_\\-\\+\\*\\.]';
$bs = '(?<!'.$vc.')';
$be = '(?!'.$vc.')';
 
foreach ($patterns as $pattern_file) {
$pattern = file($pattern_file);
 
$pattern[] = ':end';
 
$content = '';
foreach ($pattern as $p) {
$p = trim($p);
if ($p == '') continue;
if ($p[0] == '#') continue; // comment
 
if (preg_match('@^\\^redirect:@ismU', $p, $m)) continue;
 
$p = str_replace(array('(.*)', '(.+)'), '', $p);
 
if ($p[0] == ':') {
$content = '';
} else {
if ($p[0] == '=') {
// IP
$p_ = substr($p, 1);
 
// ignore for now
continue;
} else if ($p[0] == '*') {
// ASN
 
preg_match('#\*(.*):(\d+)(-(\d+)){0,1}#isU', $p, $m);
$prefix = $m[1];
$min = $m[2];
$max = (isset($m[4])) ? $m[4] : $min;
 
// ignore for now
continue;
} else if (preg_match('@^(urn:){0,1}oid:(.*)@i', $p, $m)) {
// OIDs
 
$regex = normalize_oid($m[2]);
$regex = str_replace('.', '\\.0*', $regex);
$regex = '@('.$bs.$regex.'(\\.\\d+)*'.$be.')@iU';
 
echo "$regex\n";
} else {
// REGEX
 
$regex = $p;
 
if ($regex == '.') continue; // last resort
 
$regex = preg_replace('@(?<!(?<!\\\\)\\$)$@', $vc.'*', $regex);
$regex = preg_replace('@(?<!\\\\)\\$$@', '', $regex);
 
$regex = preg_replace('@^(?!\\^)@', $vc.'*', $regex);
$regex = preg_replace('@^\\^@', '', $regex);
 
$regex = preg_replace('@(?>!\\$)$@', $vc.'*', $regex);
$regex = preg_replace('@\\$$@', '', $regex);
 
$regex = '@('.$bs.$regex.$be.')@iUu';
 
echo "$regex\n";
}
}
}
}
Property changes:
Added: svn:executable
+*
\ No newline at end of property
/trunk/maintenance/qa-monitor/testcases/batch
0,0 → 1,55
#!/bin/bash
 
#
# generic Whois - Maintenance Framework: Testcases
#
# (c) 2012-2014 Daniel Marschall, ViaThinkSoft [www.viathinksoft.de]
#
# Distribution, usage etc. pp. regulated by the current version of GPL.
#
#
# Version 2014-08-19
#
 
DIR=$( dirname "$0" )
 
ARGS=()
 
shuffle() {
# http://stackoverflow.com/a/5533586
local i tmp size max rand
 
# $RANDOM % (i+1) is biased because of the limited range of $RANDOM
# Compensate by using a range which is a multiple of the array size.
size = ${#ARGS[*]}
max = $(( 32768 / size * size ))
 
for ((i=size-1; i>0; i--)); do
while (( (rand=$RANDOM) >= max )); do :; done
rand=$(( rand % (i+1) ))
tmp=${ARGS[i]} ARGS[i]=${ARGS[rand]} ARGS[rand]=$tmp
done
}
 
while read f; do
if [ -z "$f" ]; then
continue;
fi
 
echo "$f" | grep -E "\s*^#" > /dev/null
if [ $? -eq 0 ]; then
continue;
fi
 
# Warum? "tld jp" wird dann zu "tld"
# query="$( basename $f )"
query="$f";
 
ARGS+=("$query")
done < "$DIR/../../config/testcases.list"
 
# TODO: does not work
#shuffle
 
"$DIR"/single $@ ${ARGS[@]}
exit $?
Property changes:
Added: svn:executable
+*
\ No newline at end of property
/trunk/maintenance/qa-monitor/testcases/coverage
0,0 → 1,145
#!/usr/bin/php
<?php
 
#
# generic Whois - Maintenance Framework: Testcases
#
# (c) 2012-2014 Daniel Marschall, ViaThinkSoft [www.viathinksoft.de]
#
# Distribution, usage etc. pp. regulated by the current version of GPL.
#
#
# Version 2014-11-25
#
 
# There are 2 possibilities
# - Coverage by section. At least 1 line per command must be covered
# => this is currently our behavior
# - Every line must be covered
 
require_once __DIR__ . '/../../shared/php_includes/common_functions.inc.php';
 
$testcases = array();
$testcases_tmp = file(__DIR__ . '/../config/testcases.list');
foreach ($testcases_tmp as &$tc) {
$tc = trim($tc);
if ($tc == '') continue;
if ($tc[0] == '#') continue;
$testcases[] = $tc;
}
 
$patterns = glob(__DIR__ . '/../../main/pattern/*');
 
$count_total = 0;
$count_covered = 0;
$count_uncovered = 0;
 
echo "Uncovered\n\n";
 
foreach ($patterns as $pattern_file) {
$pattern = file($pattern_file);
 
$pattern[] = ':end';
$count_total--; // wegen ":end"
 
$content = '';
$covered = false;
$cmd = '';
foreach ($pattern as $p) {
$p = trim($p);
if ($p == '') continue;
if ($p[0] == '#') continue; // comment
 
if ($p[0] == ':') {
$count_total++;
if ($covered) {
$count_covered++;
$covered = false;
} else {
if ($cmd != '') {
$count_uncovered++;
echo "$pattern_file ($cmd): $content\n\n";
}
}
$cmd = $p;
$content = '';
} else if (!$covered) {
if ($p[0] == '=') {
// IP
 
$p_ = substr($p, 1);
 
foreach ($testcases as $query) {
$match = false;
if (strpos($p, ':') !== false) {
// IPv6
if (!ipv6_valid($query)) continue;
$covered = ipv6_in_cidr($p_, $query);
} else {
// IPv4
if (!ipv4_valid($query)) continue;
$covered = ipv4_in_cidr($p_, $query);
}
if ($covered) break;
}
} else if ($p[0] == '*') {
// ASN
 
preg_match('#\*(.*):(\d+)(-(\d+)){0,1}#isU', $p, $m);
$prefix = $m[1];
$min = $m[2];
$max = (isset($m[4])) ? $m[4] : $min;
 
foreach ($testcases as $query) {
if (preg_match('#'.preg_quote($prefix, '#').'(\d+)#is', $query, $m)) {
$num = $m[1];
if (($num >= $min) && ($num <= $max)) {
$covered = true;
break;
}
}
}
} else if (preg_match('@^(urn:){0,1}oid:(.*)@i', $p, $m)) {
// OIDs
 
$oid = normalize_oid($m[2]);
 
foreach ($testcases as $query) {
if (preg_match('@^(urn:){0,1}oid:(.*)@i', $query, $m2)) {
$oid_tc = normalize_oid($m2[2]);
 
if (strpos($oid.'.', $oid_tc.'.') === 0) {
$covered = true;
break;
}
}
}
} else {
// REGEX
 
$regex = $p;
 
foreach ($testcases as $query) {
if (preg_match('/'.$regex.'/i', $query, $m)) {
$covered = true;
break;
}
}
}
}
$content .= "$p\n";
}
}
 
if ($count_uncovered == 0) {
echo 'Every instruction is covered with at least one testcase!\n\n';
}
 
echo "Stats\n\n";
 
echo "Total = $count_total\n";
echo "Covered = $count_covered\n";
echo "Uncovered = $count_uncovered\n";
 
$coverage = $count_covered/$count_total * 100;
echo "Coverage = $coverage %\n";
Property changes:
Added: svn:executable
+*
\ No newline at end of property
/trunk/maintenance/qa-monitor/testcases/highlighter
0,0 → 1,110
#!/usr/bin/php
<?php
 
#
# generic Whois - Maintenance Framework: Testcases
#
# (c) 2012-2015 Daniel Marschall, ViaThinkSoft [www.viathinksoft.de]
#
# Distribution, usage etc. pp. regulated by the current version of GPL.
#
#
# Version 2015-04-17
#
 
#mb_internal_encoding('utf-8');
 
require_once __DIR__ . '/../../shared/php_includes/common_functions.inc.php';
require_once __DIR__ . '/../../shared/php_includes/idna_convert.class.php';
 
$punycoder = new idna_convert();
 
$in = '';
while($f = fgets(STDIN)) {
$in .= $f;
}
 
$pre = generateRandomToken($in);
$post = generateRandomToken($in);
$plc1 = generateRandomToken($in);
 
// to avoid that "domain......ati.tn" will be highlighted completely.
$in = preg_replace('@\\.{2,}+@u', '<<<'.$plc1.':${0}>>>', $in);
 
if ($argc == 1) {
$out = array();
exec(__DIR__ . '/allpatterns', $out, $code);
if ($code != 0) {
echo __DIR__ . "/allpatterns failed with code $code\n"; # TODO: STDERR
exit(1);
}
foreach ($out as $o) {
$o = trim($o);
if ($o == '') continue;
$argv[] = $o;
}
}
 
array_shift($argv);
# $i = 0;
foreach ($argv as $x) {
# TODO: problem: $x darf nicht quoted werden, darf aber auch nicht @ enthalten -> dynamisch rausfinden welcher delimiter nicht vorkommt
# TODO: there are several problems using this mechanism. It is very hard to highlight everything which is queryable through gwhois.
# for example: (1) it is not possible to use \S+ in the pattern files, because it would match everything in the gwhois output, even though it was only meant to match everything in the query
# (2) if the rule .com.xx is applied after .xx , the .com.xx will not match, since .xx is already wrapped with $pre and $post
 
# $i++;
# $pre = "[start$i]";
# $post = "[end$i]";
 
$in = preg_replace($x, $pre.'${0}'.$post, $in);
 
$c = 0;
 
$x = preg_replace_callback("@(xn\-\-[0-9a-z\-]+)@ui", "punycodeCB", $x, -1, $c);
if ($c > 0) {
$in = preg_replace($x, $pre.'${0}'.$post, $in);
}
}
 
# Remove nesting (( x (( y )) a )) -> (( x a ))
do {
$ok = true;
$in = preg_replace_callback("@$pre(.*$post)@Uu", "verschachtelungCB", $in);
} while (!$ok);
 
# colorize
$in = str_replace($pre, "\033[41m\033[37m", $in);
$in = str_replace($post, "\033[0m", $in);
 
# undo it again (see above)
$in = preg_replace('@<<<'.$plc1.':([^>]+)>>>@u', '${1}', $in);
 
echo $in;
 
# ---
 
function verschachtelungCB($treffer) {
global $pre, $post, $ok;
 
if (strpos($treffer[1], $pre) === false) {
return $pre.$treffer[1];
} else {
$ok = false;
return $pre.str_replace(array($pre,$post), '', $treffer[1]);
}
}
 
function punycodeCB($treffer) {
global $punycoder;
 
$out = "";
$x = $punycoder->decode(strtolower($treffer[0]));
preg_match_all('/./u', $x, $results);
foreach ($results[0] as $m) {
$out .= '\\x{'.dechex(_uniord($m)).'}';
}
 
return $out;
}
 
Property changes:
Added: svn:executable
+*
\ No newline at end of property
/trunk/maintenance/qa-monitor/testcases/loc_gwhois
0,0 → 1,34
#!/bin/bash
 
#
# generic Whois - Maintenance Framework: Testcases
#
# (c) 2012-2014 Daniel Marschall, ViaThinkSoft [www.viathinksoft.de]
#
# Distribution, usage etc. pp. regulated by the current version of GPL.
#
#
# Version 2014-08-25
#
 
# TODO: $@ or $* ?
 
DIR=$( dirname "$0" )
 
. "$DIR/../../config/testcases.conf"
 
if [ $trytor -eq 1 ]; then
if [ -e "/usr/bin/vtor" ]; then
# We use vtor first, because it needs to cleanup temp files, which is only possible if it is not killed... Does this work?
vtor -a -r 1 -- "$DIR"/timeout.sh -t 10 -- gwhois $@
elif [ -e "/usr/bin/usewithtor" ]; then
"$DIR"/timeout.sh -t 10 -- usewithtor -- gwhois $@
elif [ -e "/usr/bin/torify" ]; then
"$DIR"/timeout.sh -t 10 -- torify -- gwhois $@
else
echo "Warning: Cannot find any TOR proxy software. Will do the query without TOR." >&2
"$DIR"/timeout.sh -t 10 -- gwhois $@
fi
else
"$DIR"/timeout.sh -t 10 -- gwhois $@
fi
Property changes:
Added: svn:executable
+*
\ No newline at end of property
/trunk/maintenance/qa-monitor/testcases/single
0,0 → 1,542
#!/bin/bash
 
#
# generic Whois - Maintenance Framework: Testcases
#
# (c) 2012-2015 Daniel Marschall, ViaThinkSoft [www.viathinksoft.de]
#
# Distribution, usage etc. pp. regulated by the current version of GPL.
#
#
# Version 2015-05-03
#
 
# TODO: use >&2
 
# TODO: anzeigen von wann der whois output ist... "last checked" -> "last activity" (da ein user-mode-batch-approval ja kein recheck beinhaltet)
 
DIR=$( dirname "$0" )
 
annotfile="$DIR/../../config/testcases.annot"
 
TESTCASE_CACHE_FILE="$DIR/../../.cache/testcases"
 
# ---
 
function resetconsole {
# http://superuser.com/questions/122911/bash-reset-and-clear-commands
 
# clear
 
# clears the console screen, but not the scrollback buffer
# this is actually the escape code to "reset" the terminal
echo -en "\ec"
 
# clears the scrollback buffer, but not the console screen
# screen content remains, and cursor position remains at its last position
echo -en "\e[3J"
}
 
function showPatternHighlighted {
A=()
 
patterns=$( "$DIR"/allpatterns )
for p in ${patterns[@]}; do
A+=("$p");
done
 
out=""
while IFS= read data; do
out="$out$data"$'\n'
done
 
# Attention: "less" or "nano" does not work with Unicode for Asian languages :-(
# Maybe this helps? http://serverfault.com/questions/414760/how-to-make-the-less-command-handle-utf-8 .
# But then it still can't handle colors...
echo "$out" | "$DIR"/highlighter "${A[@]}"
}
 
function question {
if [ -f "$annotfile" ]; then
ANNOTS=$( cat "$annotfile" | grep -E "^$query:" )
if [ "$ANNOTS" != "" ]; then
echo ""
echo "********************"
echo "Notes in $annotfile :"
OLDIFS="$IFS"
IFS=$'\n'
for p in ${ANNOTS[@]}; do
pos="${#query}"
(( pos += 2 ))
echo " ${p:$pos}";
done
IFS="$OLDIFS"
echo "********************"
fi
fi
echo ""
echo "Keep in mind to only set this result as expected state, when:"
echo " (1) The output is well formatted OR when you add an entry to the ToDo"
echo " list when the output is 'OK, but not optimal'."
echo " (2) For web-requests you should also have a testcase which shows"
echo " non-existant domains"
echo " (3) All handles should have testcases too, or it should be noted that"
echo " specific handles cannot be queried by the NIC."
echo " (4) There should be no volative stuff like dates, serving whois server"
echo " names or your IP address in the output."
echo " Otherwise you should grep them away in $0 before you approve this testcase."
echo " (5) In notices, URLs/information must be correct"
echo " (6) Highlighting shall be working, otherwise the patterns or $DIR/highlighter needs to be changed"
while true; do
echo ""
if [ -f "$E" ]; then
echo "Do you want to override the expected result? ([y]es, [n]o, [s]kip, [r]etry, [a]dd note, reset[t], e[x]it)"
else
# TODO: braucht man hier reset?
echo "Do you want to define this as the expected result? ([y]es, [n]o, [s]kip, [r]etry, [a]dd note, rese[t], e[x]it)"
fi
read yn
case $yn in
[Yy]* )
cat "$T" > "$E"
rm "$T"
if [ -f "$Q" ] && [ "$Q" != "$T" ]; then
rm "$Q"
fi
touch "$tsfile"
return 0
;;
[Nn]* )
rm "$T"
return 1
;;
[Ss]* )
return 1
;;
[Rr]* )
bakmode="$mode"
mode="i"
bakforce="$force"
force=1
process "$query"
RES=$?
mode="$bakmode"
force="$bakforce"
return $RES
;;
[Aa]* )
echo "Please enter a note you want to add or empty string if you want to cancel"
read note
 
if [ "$note" == "" ]; then
echo "Cancelled"
else
echo "Note added to testcase of $query"
echo "$query: $note" >> "$annotfile"
fi
;;
[Xx]* )
return 2
;;
[Tt]* )
# Clears the expected state
#rm $TESTCASE_CACHE_FILE/*/$query
rm "$E"
rm "$Q"
rm "$tsfile"
# Now retry
# TODO: codeduplikat vermeiden?
bakmode="$mode"
mode="i"
bakforce="$force"
force=1
process "$query"
RES=$?
mode="$bakmode"
force="$bakforce"
return $RES
;;
* )
echo "Please answer with the letter written in square brackets."
;;
esac
done
}
 
function question2 {
while true; do
echo ""
echo "Gwhois might already have been fixed. Do you want to enforce a gwhois recheck now? ([y]es, [n]o, e[x]it)"
read yn
case $yn in
[YyRr]* )
if [ -f "$Q" ]; then
rm "$Q"
fi
bakmode="$mode"
mode="i"
bakforce="$force"
force=1
process "$query"
RES=$?
mode="$bakmode"
force="$bakforce"
return $RES
;;
[NnSs]* )
return 1
;;
[Xx]* )
return 2
;;
* )
echo "Please answer with the letter written in square brackets."
;;
esac
done
}
 
function unquote {
echo "$1" | sed "s/^'\(.*\)'$/\1/";
}
 
function process {
if [ "$mode" != "b" ]; then
# TODO: diese meldung soll nicht kommen, wenn einfach nur da steht "does not need a recheck" now...
resetconsole
fi
 
query="$1"
echo "Query: $query"
 
E="$TESTCASE_CACHE_FILE/expected/$query"
Q="$TESTCASE_CACHE_FILE/problems/$query"
tsfile="$TESTCASE_CACHE_FILE/checktimestamps/$query"
 
if [ "$mode" == "u" ]; then
T="$Q"
if [ ! -f "$T" ]; then
echo "There is no action needed by the user"
return 0
fi
else
T=$( mktemp --suffix='.gwhoisTC' )
 
# In interactive/background mode, we will always do a webrequest when there is no problem and no expectation file without respect of the last checktime, to avoid that the status monitor will show entries with "no expectation file" when the user pressed "no", and then he would have to wait 7 days until "batch u" works again.
# TODO: how to do that in 1 line?
CALL_GWI=0
if [ $force -eq 1 ]; then
CALL_GWI=1
else
test \( ! -f "$Q" \) -a \( ! -f "$E" \)
if [ $? -eq 0 ]; then
CALL_GWI=1
elif [ ! -f "$tsfile" ] || [ $( stat --format=%Y "$tsfile" ) -le $(( $( date +%s ) - $recheck_time )) ]; then
if [ -f "$Q" ] && [ $( stat --format=%Y "$Q" ) -gt $(( $( date +%s ) - $recheck_time )) ]; then
CALL_GWI=0
else
CALL_GWI=1
fi
fi
fi
if [ $CALL_GWI -eq 1 ]; then
echo "... calling gwhois ..."
# We have to use loc_gwhois to allow $trytor to work correctly.
# The torifiers "torify" and "usewithtor" always outputting bogus "libtorsocks" warning messages which would be saved in the output
# "vtor" - if applied to this script - can only filter them from STDOUT and STDERR, but not intercept this "&>" pipe
# So we have to use this loc_gwhois script, where we torify manually
# Also, it is important that we do the warning message filtering in this step, because in the final output the lines will be colored/highlighted, and therefore "vtor" cannot grep them correctly anymore.
# Note: regex only valid in the years 1000-1099, 1900-2099, 2900-2999
# grep away volative stuff like server names or times
(
"$DIR"/loc_gwhois "$query" \
| grep -v "This query was served by " \
| grep -v "(c)[12][90][0-9]\{2\}" \
| grep -v "[12][90][0-9]\{2\}-[0-9]\{2\}-[0-9]\{2\}" \
| grep -v "\[[0-9]\{1,3\}.[0-9]\{1,3\}.[0-9]\{1,3\}.[0-9]\{1,3\} REQUEST\]" \
| grep -v "RL Net \[.*\] - RL IP \[.*\]" \
| grep -v "% Query time:" \
| grep -v "% request from" \
| grep -v "% Last update of whois database:" \
| grep -v "%AM TLD whois server #" \
| grep -v "Last updated on " \
| grep -v "This is the Ukrainian Whois query server #" \
| grep -v "Last update of whois database" \
| grep -v "Query time:" \
| grep -v "nsstat:" \
| grep -v "nslastaa:"
) &> "$T"
# auskommentiert wegen problem: wenn man einen recheck wegen perl errors macht und dann abbricht, ist dann der PROBLEM state gespeichert? nein, er wurde im i-mode gelöscht!
# -> lösung ?rm "$Q" nur im erfolgsfall
# if [ -f "$Q" ]; then
# rm "$Q"
# fi
 
# behoben? in mode=i and mode=u, should the output of a new gwhois request be saved into the problem file, if the user cancels? (to avoid a second web request?)
# also, when doing a recheck after a perl error, and then cancel, the problem-file will not be updated!
# TODO: was ist besser?
#if [ ! -f "$Q" ] && [ "$T" != "$Q" ]; then
if [ "$T" != "$Q" ]; then
cat "$T" > "$Q"
fi
 
 
else
rm "$T"
if [ "$mode" == "b" ]; then
echo "The query does not need a recheck now. Use --force to enforce it."
# if [ -f "$Q" ] && [ "$Q" != "$T" ]; then
# rm "$Q"
# fi
return 0
else
T="$Q"
if [ ! -f "$T" ]; then
echo "There is no action needed by the user"
return 0
fi
fi
fi
fi
 
WARNINGS=()
cat "$T" | grep -E "at /(bin|usr|etc|var)/\S+ line" > /dev/null
if [ $? -eq 0 ]; then
WARNINGS+=("Perl errors found in gwhois output!")
fi
cat "$T" | head -n 1 | grep -E "^("$'\xEF\xBB\xBF'"){0,1}Process query: '$query'" > /dev/null
if [ $? -ne 0 ]; then
WARNINGS+=("The gwhois output does not begin with 'Process query'!")
fi
cat "$T" | grep "gwhois remarks: If this is a valid domainname or handle, please file a bug report." > /dev/null
if [ $? -eq 0 ]; then
WARNINGS+=("No pattern match!")
fi
if [ ${#WARNINGS[@]} -gt 0 ]; then
if [ "$T" != "$Q" ]; then
cat "$T" > "$Q"
rm "$T"
fi
# if [ "$mode" != "b" ]; then
# resetconsole
# fi
OLDIFS="$IFS"
IFS=$'\n'
for p in ${WARNINGS[@]}; do
echo "WARNING: $p"
done
IFS="$OLDIFS"
if [ "$mode" == "b" ]; then
echo "Saved for later analysis."
# TODO: problem: this will prevent another background runner to check it again, but it will prevent the user-batch to investigate this, too?!!
# touch "$tsfile"
return 1
else
# Hinweis: niemals vor "question" oder "question2" ein ts aktualisieren. denn wenn man in question* einen recheck beantragt und dann abbricht, dann würde dieser aktualisierte ts bewirken, dass der testcase erst wieder in 7 tagen angezeigt wird
echo ""
cat "$Q" | showPatternHighlighted
question2
return $?
fi
fi
 
if [ -f "$E" ]; then
D=$( date -r "$E" )
echo "Compare with results of $D"
diff -U 0 "$E" "$T" | showPatternHighlighted
if [ ${PIPESTATUS[0]} -eq 0 ]; then
echo "OK! No differences found!"
rm "$T"
touch "$tsfile"
if [ -f "$Q" ] && [ "$Q" != "$T" ]; then
rm "$Q"
fi
return 0
else
echo "Problem! Differences found!"
 
if [ "$mode" == "b" ]; then
echo "Saved for later analysis."
if [ "$T" != "$Q" ]; then
cat "$T" > "$Q"
rm "$T"
fi
 
# TODO: problem: this will prevent another background runner to check it again, but it will prevent the user-batch to investigate this, too?!!
# touch "$tsfile"
return 1
else
if [ "$T" != "$Q" ]; then
rm "$T"
fi
 
question
return $?
fi
fi
else
if [ "$mode" == "b" ]; then
echo "This query has no expected state. Please define one."
echo "Saved for later analysis."
if [ "$T" != "$Q" ]; then
cat "$T" > "$Q"
rm "$T"
fi
# TODO: problem: this will prevent another background runner to check it again, but it will prevent the user-batch to investigate this, too?!!
# touch "$tsfile"
return 1
else
# resetconsole
echo "This query has no expected state. Please define one."
echo "This is the current output of gwhois:"
 
echo ""
cat "$T" | showPatternHighlighted
echo ""
 
if [ "$T" != "$Q" ]; then
rm "$T"
fi
 
question
return $?
fi
fi
}
 
function HumanReadableTime {
local seconds=$1
local days=$(($seconds/86400))
seconds=$(($seconds-($days*86400) ))
local hours=$(($seconds/3600))
seconds=$((seconds-($hours*3600) ))
local minutes=$(($seconds/60))
seconds=$(( $seconds-($minutes*60) ))
 
# echo -n "${days}D ${hours}H ${minutes}M ${seconds}S"
if [ $days -gt 0 ]; then
if [ $hours -gt 12 ]; then
((days++));
fi
echo -n "${days} days"
elif [ $hours -gt 0 ]; then
if [ $minutes -gt 30 ]; then
((hours++));
fi
echo -n "${hours} hours"
elif [ $minutes -gt 0 ]; then
if [ $seconds -gt 30 ]; then
((minutes++));
fi
echo -n "${minutes} minutes"
else
echo -n "a few seconds"
fi
}
 
function usage {
. "$DIR/../../config/testcases.conf"
 
hf_recheck_time=$( HumanReadableTime $recheck_time )
 
echo "Syntax: $0 options query"
echo " -h|--help"
echo " -m|--mode mode"
echo " Default: $mode"
echo " Mode: i = interactive (download and then show results/ask the developer if the result is OK)"
echo " b = background (download only and save the results for later query)"
echo " u = user-dialog only (only ask the developer if there are questions, e.g. which were generated by mode b)."
echo " -r|--rechecktime seconds"
echo " Default: $recheck_time = approx. $hf_recheck_time)"
echo " -f|--force"
echo " Ignores --rechecktime and forces a new gwhois request"
echo " Default: $force"
}
 
# ---
 
if [ $# -eq 0 ]; then
usage;
exit;
fi
 
if [ ! -d "$TESTCASE_CACHE_FILE/checktimestamps" ]; then
mkdir "$TESTCASE_CACHE_FILE/checktimestamps"
fi
 
if [ ! -d "$TESTCASE_CACHE_FILE/problems" ]; then
mkdir "$TESTCASE_CACHE_FILE/problems"
fi
 
if [ ! -d "$TESTCASE_CACHE_FILE/expected" ]; then
mkdir "$TESTCASE_CACHE_FILE/expected"
fi
 
# defaults
. "$DIR/../../config/testcases.conf"
 
PARAMS=( "$@" );
optarr=( $( getopt --name "$0" --options 'hfr:m:' --long 'help,force,rechecktime:,mode:' -- "${PARAMS[@]}" 2> /dev/null ) );
 
# Now process the arguments
i=0;
while true; do
case "${optarr[$i]}" in
-h|--help)
usage;
exit 0;
;;
-f|--force)
force=1;
((i++));
;;
-r|--rechecktime)
recheck_time=$( unquote "${optarr[$((i+1))]}" );
((i=i+2));
;;
-m|--mode)
mode=$( unquote "${optarr[$((i+1))]}" );
 
if [ "$mode" != "i" ] && [ "$mode" != "b" ] && [ "$mode" != "u" ]; then
echo "Invalid mode '$mode'"
usage
exit 2
fi
 
((i=i+2));
;;
--)
((i++));
break;
;;
*)
# Should never happen
echo "$0: Internal error while command-line-processing! Please report this error as bug." >&2;
exit 2;
;;
esac
done
 
RESTARGS=${optarr[@]:i}; # i..end
CMD="${optarr[i]}";
ARG="${optarr[@]:((i+1))}"; # (i+1)..end
 
 
EXITSTATUS=0
for X in ${RESTARGS[@]}
do
X=$( unquote "$X" )
process "$X"
EC=$?
 
if [ $EC -eq 2 ]; then
# user pressed x for exit
exit $EXITSTATUS;
elif [ $EC -gt $EXITSTATUS ]; then
# exitcode = max(exitcodes from processes)
EXITSTATUS=$EC
fi
 
done
 
exit $EXITSTATUS
Property changes:
Added: svn:executable
+*
\ No newline at end of property
/trunk/maintenance/qa-monitor/testcases/status
0,0 → 1,121
#!/bin/bash
 
#
# generic Whois - Maintenance Framework: Testcases
#
# (c) 2012-2014 Daniel Marschall, ViaThinkSoft [www.viathinksoft.de]
#
# Distribution, usage etc. pp. regulated by the current version of GPL.
#
#
# Version 2014-08-25
#
 
DIR=$( dirname "$0" )
 
# ---
 
function FileAge() {
echo $((`date +%s` - `stat -c %Y $1`))
}
 
function HumanReadableAge() {
local seconds=$1
local days=$(($seconds/86400))
seconds=$(($seconds-($days*86400) ))
local hours=$(($seconds/3600))
seconds=$((seconds-($hours*3600) ))
local minutes=$(($seconds/60))
seconds=$(( $seconds-($minutes*60) ))
 
# echo -n "${days}D ${hours}H ${minutes}M ${seconds}S"
if [ $days -gt 0 ]; then
if [ $hours -gt 12 ]; then
((days++));
fi
echo -n "${days} days ago"
elif [ $hours -gt 0 ]; then
if [ $minutes -gt 30 ]; then
((hours++));
fi
echo -n "${hours} hours ago"
elif [ $minutes -gt 0 ]; then
if [ $seconds -gt 30 ]; then
((minutes++));
fi
echo -n "${minutes} minutes ago"
else
echo -n "a few seconds ago"
fi
}
 
# ---
 
. "$DIR/../../config/testcases.conf"
 
echo "Query Last activity Status"
echo "----------------------------------------------------------------------------------"
 
while read f; do
if [ -z "$f" ]; then
continue;
fi
 
# Check if the line begins with an '#' (leading spaces are permitted)
echo "$f" | grep -E "\s*^#" > /dev/null
if [ $? -eq 0 ]; then
continue;
fi
 
# Warum? "tld jp" wird dann zu "tld"
# query="$( basename $f )"
query="$f";
 
expfile="$DIR/../../.cache/testcases/expected/$query"
 
tsfile="$DIR/../../.cache/testcases/checktimestamps/$query"
if [ -f "$tsfile" ]; then
# lastcheck="$( date -r "$tsfile" )"
lastcheck=$( HumanReadableAge $( FileAge "$tsfile" ))
else
lastcheck="never"
fi
 
errfile="$DIR/../../.cache/testcases/problems/$query"
if [ -f "$errfile" ]; then
cat "$errfile" | grep -E "at /(bin|usr|etc|var)/\S+ line" > /dev/null
PERLERR=$?
 
cat "$errfile" | head -n 1 | grep -E "^("$'\xEF\xBB\xBF'"){0,1}Process query: '$query'" > /dev/null
STARTEXP=$?
 
cat "$errfile" | grep "gwhois remarks: If this is a valid domainname or handle, please file a bug report." > /dev/null
NOPATTERNMATCH=$?
 
if [ $PERLERR -eq 0 ]; then
status="Perl-Error!"
elif [ $STARTEXP -ne 0 ]; then
status="Unexpected head line"
elif [ $NOPATTERNMATCH -eq 0 ]; then
status="No pattern match"
elif [ -f "$expfile" ]; then
status="Different output"
else
status="No expected output defined"
fi
else
if [ -f "$expfile" ]; then
status="OK"
else
status="No expected output defined"
fi
fi
 
if [ ! -f "$tsfile" ] || [ $( stat --format=%Y "$tsfile" ) -le $(( $( date +%s ) - $recheck_time )) ]; then
if [ ! -f "$errfile" ] || [ $( stat --format=%Y "$errfile" ) -le $(( $( date +%s ) - $recheck_time )) ]; then
status="$status, outdated"
fi
fi
 
printf "%-30s %-20s %-20s\n" "$query" "$lastcheck" "$status"
done < "$DIR/../../config/testcases.list"
Property changes:
Added: svn:executable
+*
\ No newline at end of property
/trunk/maintenance/qa-monitor/testcases/status_short
0,0 → 1,53
#!/bin/bash
 
#
# generic Whois - Maintenance Framework: Testcases
#
# (c) 2012-2014 Daniel Marschall, ViaThinkSoft [www.viathinksoft.de]
#
# Distribution, usage etc. pp. regulated by the current version of GPL.
#
#
# Version 2014-08-19
#
 
DIR=$( dirname "$0" )
 
. "$DIR/../../config/testcases.conf"
 
count=0
 
while read f; do
if [ -z "$f" ]; then
continue;
fi
 
echo "$f" | grep -E "\s*^#" > /dev/null
if [ $? -eq 0 ]; then
continue;
fi
 
# Warum? "tld jp" wird dann zu "tld"
# query="$( basename $f )"
query="$f";
 
tsfile="$DIR/../../.cache/testcases/checktimestamps/$query"
errfile="$DIR/../../.cache/testcases/problems/$query"
 
if [ ! -f "$tsfile" ]; then
((count++));
elif [ ! -f "$tsfile" ] || [ $( stat --format=%Y "$tsfile" ) -le $(( $( date +%s ) - $recheck_time )) ]; then
((count++));
elif [ -f "$errfile" ]; then
((count++));
fi
 
done < "$DIR/../../config/testcases.list"
 
if [ $count -eq 0 ]; then
echo "[ OK ]"
exit 0
else
echo "[ !! ] $count testcases require attention"
exit 1
fi
Property changes:
Added: svn:executable
+*
\ No newline at end of property
/trunk/maintenance/qa-monitor/testcases/testcases_cronrun
0,0 → 1,16
#!/bin/bash
 
#
# generic Whois - Maintenance Framework: Testcases
#
# (c) 2012-2014 Daniel Marschall, ViaThinkSoft [www.viathinksoft.de]
#
# Distribution, usage etc. pp. regulated by the current version of GPL.
#
#
# Version 2014-04-08
#
 
DIR=$( dirname "$0" )
 
"$DIR"/batch --mode b &> /dev/null
Property changes:
Added: svn:executable
+*
\ No newline at end of property
/trunk/maintenance/qa-monitor/testcases/timeout.sh
0,0 → 1,92
#!/bin/bash
#
# The Bash shell script executes a command with a time-out.
# Upon time-out expiration SIGTERM (15) is sent to the process. If the signal
# is blocked, then the subsequent SIGKILL (9) terminates it.
#
# Based on the Bash documentation example.
 
# Hello Chet,
# please find attached a "little easier" :-) to comprehend
# time-out example. If you find it suitable, feel free to include
# anywhere: the very same logic as in the original examples/scripts, a
# little more transparent implementation to my taste.
#
# Dmitry V Golovashkin <Dmitry.Golovashkin@sas.com>
 
scriptName="${0##*/}"
 
declare -i DEFAULT_TIMEOUT=9
declare -i DEFAULT_INTERVAL=1
declare -i DEFAULT_DELAY=1
 
# Timeout.
declare -i timeout=DEFAULT_TIMEOUT
# Interval between checks if the process is still alive.
declare -i interval=DEFAULT_INTERVAL
# Delay between posting the SIGTERM signal and destroying the process by SIGKILL.
declare -i delay=DEFAULT_DELAY
 
function printUsage() {
cat <<EOF
 
Synopsis
$scriptName [-t timeout] [-i interval] [-d delay] command
Execute a command with a time-out.
Upon time-out expiration SIGTERM (15) is sent to the process. If SIGTERM
signal is blocked, then the subsequent SIGKILL (9) terminates it.
 
-t timeout
Number of seconds to wait for command completion.
Default value: $DEFAULT_TIMEOUT seconds.
 
-i interval
Interval between checks if the process is still alive.
Positive integer, default value: $DEFAULT_INTERVAL seconds.
 
-d delay
Delay between posting the SIGTERM signal and destroying the
process by SIGKILL. Default value: $DEFAULT_DELAY seconds.
 
As of today, Bash does not support floating point arithmetic (sleep does),
therefore all delay/time values must be integers.
EOF
}
 
# Options.
while getopts ":t:i:d:" option; do
case "$option" in
t) timeout=$OPTARG ;;
i) interval=$OPTARG ;;
d) delay=$OPTARG ;;
*) printUsage; exit 1 ;;
esac
done
shift $((OPTIND - 1))
 
# $# should be at least 1 (the command to execute), however it may be strictly
# greater than 1 if the command itself has options.
if (($# == 0 || interval <= 0)); then
printUsage
exit 1
fi
 
# kill -0 pid Exit code indicates if a signal may be sent to $pid process.
(
((t = timeout))
 
while ((t > 0)); do
sleep $interval
kill -0 $$ || exit 0
((t -= interval))
done
 
# Be nice, post SIGTERM first.
# The 'exit 0' below will be executed if any preceeding command fails.
kill -s SIGTERM $$ && kill -0 $$ || exit 0
sleep $delay
kill -s SIGKILL $$
) 2> /dev/null &
 
exec "$@"
 
Property changes:
Added: svn:executable
+*
\ No newline at end of property
Added: svn:mime-type
+text/x-sh
\ No newline at end of property
/trunk/maintenance/qa-monitor/testcases/todo
0,0 → 1,78
Process query: '2001:0000:4136:e378:8000:63bf:3fff:fdd2'
 
Query recognized as IPv6.
Address expanded to '2001:0000:4136:e378:8000:63bf:3fff:fdd2'.
Querying script .../main/subprograms/teredo_decoder
 
00:06:00 libtorsocks(5179): sendto: Connection is a UDP or ICMP stream, may be a DNS request or other form of leak: rejecting.
00:06:00 libtorsocks(5179): sendto: Connection is a UDP or ICMP stream, may be a DNS request or other form of leak: rejecting.
00:06:00 libtorsocks(5179): sendto: Connection is a UDP or ICMP stream, may be a DNS request or other form of leak: rejecting.
00:06:00 libtorsocks(5179): sendto: Connection is a UDP or ICMP stream, may be a DNS request or other form of leak: rejecting.
00:06:00 libtorsocks(5179): sendto: Connection is a UDP or ICMP stream, may be a DNS request or other form of leak: rejecting.
00:06:00 libtorsocks(5179): sendto: Connection is a UDP or ICMP stream, may be a DNS request or other form of leak: rejecting.
Teredo IPv6 address: 2001:0000:4136:e378:8000:63bf:3fff:fdd2
Teredo prefix: 2001:0000
 
---
 
handle ...-SITA? (bei .aero)
 
---
 
highlighter: viele highlights funktionieren nicht und markieren bis zum ende oder bis zum anfang der zeile
 
---
 
highlighter brauchen testcases
 
möglichkeit alles zu vergessen, also
rm .cache/testcases/*/$query
und danach retry
 
ability to remove notes in the GUI (select note by entering a number)
 
GROSSES PROBLEM
obwohl ich den cron jede nacht laufen lasse, muss ich jedes mal bei "batch --mode b" warten
die "problem" timestamps sind 3 tage alt... warum?
 
---
 
TESTCASE GENERATOR TOOL:
for all missing testcase TLDs, try following to find a valid test domain:
- when whois server or url ends with <tld> , use this domain (without subdomains)
- try to do a nslookup to nic.<tld>
- search for site:*.<tid> at google
=> then add a testcase!
 
measure coverage mit ALLEN pattern files; line-coverage
 
weitere funktionen:
- remove notes from that testcase
- do a side query
 
arin sendet escape zeichen? z.B. bei "AS1", deswegen wir kein console scrollback buffer geleert!
-> nein, der console buffer ist einfach zu klein! aber less geht nicht mit color!
 
./single --mode u ati.tn
Query: ati.tn
There is no action needed by the user
-> es gibt keine problem file und keine expectation file. er sollte runterladen?
-> nein, aber meldung ist verwirrend. "mode u" sollte niemals inet conn haben
 
möglichkeiteben, die testcases mit attributen zu versehen
jedem testcase einen namen geben
jedem testcase eine möglichkeit geben, dinge per SED-REGEX auszublenden (z.b. ipadresse, uhrzeit etc).
 
einen befehl machen, der den expected status nochmal im korrekten highlight anzeigt. zum kontrollieren. damit man alle expectations nochmal sehen kann. (batch)
 
wenn man währendes diff (?) einen strg+c macht, dann kommt "no changes" - speichern?
 
----
 
gwi im allgemeinen : kann man einen unicode domainnamen eingeben? ggf auch als utf-8 ?
 
---
 
beschreibung, wie man dieses tool benutzt, also dass man ./batch aufrufen muss
 
notizen entfernbar machen (mit nano editieren)
/trunk/maintenance/qa-monitor/whois-ping/config.inc.php
0,0 → 1,15
<?php
 
#
# generic Whois - Automatic Pattern Generator configuration
#
# (c) 2012 Daniel Marschall, ViaThinkSoft [www.viathinksoft.de]
#
# Distribution, usage etc. pp. regulated by the current version of GPL.
#
#
# Version 2014-09-12
#
 
require_once __DIR__ . '/../../../shared/php_includes/config_functions.inc.php';
parse_config(__DIR__.'/../../config/qa-monitor.conf');
/trunk/maintenance/qa-monitor/whois-ping/showerrors
0,0 → 1,97
#!/usr/bin/php
<?php
 
#
# generic Whois - Whois Server Ping Testing Suite
#
# (c) 2013-2014 Daniel Marschall, ViaThinkSoft [www.viathinksoft.de]
#
# Distribution, usage etc. pp. regulated by the current version of GPL.
#
#
# Version 2014-09-12
#
 
error_reporting(E_ALL | E_NOTICE | E_STRICT | E_DEPRECATED);
 
require_once __DIR__ . '/../../../shared/php_includes/common_functions.inc.php';
require_once __DIR__ . '/whoisping_functions.inc.php';
require_once __DIR__ . '/config.inc.php';
 
$db = new SQLite3(__DIR__.'/../../.cache/whois-server-ping/whoisping.db'); # TODO: in config auslagern
if (!$db) die ($error);
 
gwitc_initdb($db);
 
/*
$stm = "SELECT * FROM gwi_tc_whois_ping WHERE server = 'whois.nic.ve'";
$result = $db->query("SELECT * FROM gwi_tc_whois_ping WHERE server = 'whois.nic.ve'");
$row = $result->fetchArray(SQLITE3_ASSOC);
print_r($row);
*/
 
$status=0;
 
$pattern_servers = array();
$pattern_files = getpatternfiles();
foreach ($pattern_files as &$pattern_file) {
$pattern_servers_c = gwitc_list_whois_servers($pattern_file);
$pattern_servers = array_merge($pattern_servers, $pattern_servers_c);
}
 
$dead_servers = array();
$dead_servers_raw = file(__DIR__ . '/../../config/dead-servers.list');
foreach ($dead_servers_raw as &$server) {
$server = trim($server);
if ($server == '') continue;
if ($server[0] == '#') continue;
 
$dead_servers[] = $server;
}
 
# $servers = $dead_servers + $pattern_servers
$servers = array();
foreach ($pattern_servers as &$server) {
if (!in_array($server, $servers)) {
$servers[] = $server;
}
}
foreach ($dead_servers as &$server) {
if (!in_array($server, $servers)) {
$servers[] = $server;
} else {
if (in_array($server, $dead_servers)) {
$status=1;
echo "[ !! ] Attention! $server is in dead-servers.list and pattern. Please remove one instance!\n";
}
}
}
 
foreach ($servers as &$server) {
$reborn = gwitc_reborn_val($db, $server);
if ($reborn) { // TODO: also show time since when it is reborn?
if (in_array($server, $dead_servers)) {
$status=1;
echo "[ !! ] Attention: $server is ALIVE again! Please remove from dead-servers.list and add to pattern.\n";
}
 
if (in_array($server, $pattern_servers) && (!in_array($server, $dead_servers))) {
gwitc_set_reborn($db, $server, 0);
}
} else {
if (in_array($server, $dead_servers) && (!in_array($server, $pattern_servers))) continue;
 
$duration = gwitc_fail_duration($db, $server);
if ($duration < WHOIS_SERVER_DEAD_AFTER) continue;
$status=1;
echo "[ !! ] $server down for ".human_timediff($duration)."; first fail: ".date('Y-m-d', gwitc_first_fail($db, $server))."\n";
}
}
 
$db->close();
 
if ($status == 0) {
echo "[ OK ]\n";
}
 
exit($status);
Property changes:
Added: svn:executable
+*
\ No newline at end of property
/trunk/maintenance/qa-monitor/whois-ping/whoisping
0,0 → 1,83
#!/usr/bin/php
<?php
 
#
# generic Whois - Whois Server Ping Testing Suite
#
# (c) 2013-2014 Daniel Marschall, ViaThinkSoft [www.viathinksoft.de]
#
# Distribution, usage etc. pp. regulated by the current version of GPL.
#
#
# Version 2014-11-23
#
 
error_reporting(E_ALL | E_NOTICE | E_STRICT | E_DEPRECATED);
 
require_once __DIR__ . '/../../../shared/php_includes/common_functions.inc.php';
require_once __DIR__ . '/whoisping_functions.inc.php';
require_once __DIR__ . '/config.inc.php';
 
$db = new SQLite3(__DIR__ . '/../../.cache/whois-server-ping/whoisping.db'); # TODO: in config auslagern
if (!$db) die ($error);
 
gwitc_initdb($db);
 
$pattern_servers = array();
$pattern_files = getpatternfiles();
foreach ($pattern_files as &$pattern_file) {
$pattern_servers_c = gwitc_list_whois_servers($pattern_file);
$pattern_servers = array_merge($pattern_servers, $pattern_servers_c);
}
 
$dead_servers = array();
$dead_servers_raw = file(__DIR__ . '/../../config/dead-servers.list');
foreach ($dead_servers_raw as &$server) {
$server = trim($server);
if ($server == '') continue;
if ($server[0] == '#') continue;
 
$dead_servers[] = $server;
}
 
# --- Check the servers in the pattern files
 
foreach ($pattern_servers as &$server) {
 
// We will handle them below, not here. (Otherwise the recheck timer would be reset)
if (in_array($server, $dead_servers)) {
$status=1;
echo "[ !! ] Attention! $server is in dead-servers.list and pattern. Please remove one instance!\n";
continue;
}
 
$age = gwitc_checkage_succ($db, $server);
if ($age < RECHECK_AFTER) continue;
$open = gwitc_is_port_open($server, 43);
if ($open) {
gwitc_reset_failcounter($db, $server);
echo "OK: $server\n";
} else {
$fails = gwitc_incr_failcounter($db, $server);
$duration = gwitc_fail_duration($db, $server);
echo "FAIL #$fails: $server (Duration: $duration)\n";
}
}
 
# --- Check the dead servers (which have been removed from the pattern list) have resurrected
 
foreach ($dead_servers as &$server) {
$age = gwitc_checkage_check($db, $server);
if ($age < RECHECK_AFTER) continue;
$open = gwitc_is_port_open($server, 43);
if ($open) {
gwitc_set_reborn($db, $server, 1);
echo "Attention: $server is ALIVE again! Please remove from maintenance/config/dead-servers.list and add to pattern.\n";
} else {
# wird bereits von gwitc_incr_failcounter() gemacht: gwitc_set_reborn($db, $server, 0);
$fails = gwitc_incr_failcounter($db, $server); // hier wird auch lastcheck aktualisiert
echo "Still dead: $server\n";
}
}
 
$db->close();
Property changes:
Added: svn:executable
+*
\ No newline at end of property
/trunk/maintenance/qa-monitor/whois-ping/whoisping_cronrun
0,0 → 1,18
#!/bin/bash
 
#
# generic Whois - Automatic Pattern Generator: Whois Ping Cronjob
#
# (c) 2012-2014 Daniel Marschall, ViaThinkSoft [www.viathinksoft.de]
#
# Distribution, usage etc. pp. regulated by the current version of GPL.
#
#
# Version 2014-04-08
#
 
DIR=$( dirname "$0" )
 
"$DIR"/whoisping >& /dev/null
 
"$DIR"/showerrors >& /dev/null
Property changes:
Added: svn:executable
+*
\ No newline at end of property
/trunk/maintenance/qa-monitor/whois-ping/whoisping_functions.inc.php
0,0 → 1,152
<?php
 
#
# generic Whois - Whois Server Ping Testing Suite
#
# (c) 2013-2014 Daniel Marschall, ViaThinkSoft [www.viathinksoft.de]
#
# Distribution, usage etc. pp. regulated by the current version of GPL.
#
#
# Version 2014-11-19
#
 
# FUT: sqlinj und cmdinj beheben
 
function gwitc_initdb($db) {
# "CREATE TABLE IF NOT EXISTS" does not work with my version of PHP/SQLite
$stm = "CREATE TABLE IF NOT EXISTS gwi_tc_whois_ping (
id INTEGER PRIMARY KEY,
server TEXT UNIQUE,
fails INTEGER,
lastcheck INTEGER,
lastsucc INTEGER,
firstfail INTEGER,
lastfail INTEGER,
reborn INTEGER
)";
$db->exec($stm);
}
 
function gwitc_checkage_succ($db, $server) {
$stm = "SELECT lastsucc FROM gwi_tc_whois_ping WHERE server = '$server'";
$result = $db->query($stm);
if (!$result) die("Cannot execute query.");
$row = $result->fetchArray(SQLITE3_ASSOC);
$ts = (int)$row['lastsucc'];
$now = time();
 
return ($now-$ts);
}
 
function gwitc_checkage_check($db, $server) {
$stm = "SELECT lastcheck FROM gwi_tc_whois_ping WHERE server = '$server'";
$result = $db->query($stm);
if (!$result) die("Cannot execute query.");
$row = $result->fetchArray(SQLITE3_ASSOC);
$ts = (int)$row['lastcheck'];
$now = time();
 
return ($now-$ts);
}
 
function gwitc_reborn_val($db, $server) {
$stm = "SELECT reborn FROM gwi_tc_whois_ping WHERE server = '$server'";
$result = $db->query($stm);
if (!$result) die("Cannot execute query.");
$row = $result->fetchArray(SQLITE3_ASSOC);
return (int)$row['reborn'];
}
 
function gwitc_fail_duration($db, $server) {
$stm = "SELECT firstfail,lastsucc,lastfail FROM gwi_tc_whois_ping WHERE server = '$server'";
$result = $db->query($stm);
if (!$result) die("Cannot execute query.");
$row = $result->fetchArray(SQLITE3_ASSOC);
$lastsucc = (int)$row['lastsucc'];
$firstfail = (int)$row['firstfail'];
$lastfail = (int)$row['lastfail'];
 
if ($firstfail == 0) return 0;
if ($lastsucc > $lastfail) return 0;
 
return ($lastfail-max($lastsucc,$firstfail));
}
 
function gwitc_first_fail($db, $server) {
$stm = "SELECT firstfail,lastsucc FROM gwi_tc_whois_ping WHERE server = '$server'";
$result = $db->query($stm);
if (!$result) die("Cannot execute query.");
$row = $result->fetchArray(SQLITE3_ASSOC);
$lastsucc = (int)$row['lastsucc'];
$firstfail = (int)$row['firstfail'];
 
if ($firstfail == 0) return 0;
 
return max($firstfail,$lastsucc);
}
 
function gwitc_set_reborn($db, $server, $val) {
$stm = "SELECT fails,lastsucc,firstfail FROM gwi_tc_whois_ping WHERE server = '$server'";
$result = $db->query($stm);
if (!$result) die("Cannot execute query.");
$row = $result->fetchArray(SQLITE3_ASSOC);
$fails = 0; // (int)$row['fails'];
$ts = time();
$lastsucc = $ts; // (int)$row['lastsucc'];
$firstfail = 0; // (int)$row['firstfail'];
$stm = "REPLACE INTO gwi_tc_whois_ping (server,fails,lastcheck,lastsucc,lastfail,firstfail,reborn) VALUES ('$server', $fails, $ts, $lastsucc, $ts, $firstfail, $val)";
$ok = $db->exec($stm);
if (!$ok) die("Cannot execute query.");
 
return $fails;
}
 
function gwitc_incr_failcounter($db, $server) {
$stm = "SELECT fails,lastsucc,firstfail FROM gwi_tc_whois_ping WHERE server = '$server'";
$result = $db->query($stm);
if (!$result) die("Cannot execute query.");
$row = $result->fetchArray(SQLITE3_ASSOC);
$fails = (int)$row['fails'];
$lastsucc = (int)$row['lastsucc'];
 
$fails++;
$ts = time();
$firstfail = ($fails == 1) ? $ts : (int)$row['firstfail'];
$reborn = 0; // wenn er failed ist, kann er nicht reborned sein
 
$stm = "REPLACE INTO gwi_tc_whois_ping (server,fails,lastcheck,lastsucc,lastfail,firstfail,reborn) VALUES ('$server', $fails, $ts, $lastsucc, $ts, $firstfail, $reborn)";
$ok = $db->exec($stm);
if (!$ok) die("Cannot execute query.");
 
return $fails;
}
 
function gwitc_reset_failcounter($db, $server) {
$stm = "SELECT lastfail,reborn FROM gwi_tc_whois_ping WHERE server = '$server'";
$result = $db->query($stm);
if (!$result) die("Cannot execute query.");
$row = $result->fetchArray(SQLITE3_ASSOC);
$lastfail = (int)$row['lastfail'];
$ts = time();
$reborn = (int)$row['reborn'];
 
$stm = "REPLACE INTO gwi_tc_whois_ping (server,fails,lastcheck,lastsucc,lastfail,firstfail,reborn) VALUES ('$server', 0, $ts, $ts, $lastfail, 0, $reborn)";
$ok = $db->exec($stm);
if (!$ok) die("Cannot execute query.");
}
 
function gwitc_list_whois_servers($patternfile) {
$out = array();
$cont = file($patternfile);
foreach ($cont as &$x) {
$x = trim($x);
if ($x == '') continue;
if ($x[0] == '#') continue;
if ((preg_match('@^:whois\|(.+)\|@isU', $x.'|', $m)) || (preg_match('@whois::(.+):@isU', $x.':', $m))) {
$out[] = $m[1];
}
}
$out = array_unique($out);
return $out;
}
/trunk/maintenance
Property changes:
Added: svn:ignore
+.cache
/trunk/shared/php_includes/common_functions.inc.php
0,0 → 1,270
<?php
 
#
# generic Whois - Maintenance Framework Common Functions
#
# (c) 2013 Daniel Marschall, ViaThinkSoft [www.viathinksoft.de]
#
# Distribution, usage etc. pp. regulated by the current version of GPL.
#
#
# Version 2013-09-24
#
# History:
# 2011-06-07 mar Initial release
# 2012-04-13 mar Added uc_latin1()
# 2012-11-19 mar Added tab2space(), trim_each_line()
#
 
include_once __DIR__ . '/ipv4_functions.inc.php';
include_once __DIR__ . '/ipv6_functions.inc.php';
include_once __DIR__ . '/grep_functions.inc.php';
include_once __DIR__ . '/gwi_functions.inc.php';
 
function file_age($filename) {
$m = file_exists($filename) ? filemtime($filename) : 0;
return time()-$m;
}
 
function human_timediff($t) {
if ($t < 60) {
$e = 'seconds';
} else if ($t < 60*60) {
$t /= 60;
$e = 'minutes';
} else if ($t < 24*60*60) {
$t /= 60*60;
$e = 'hours';
} else if ($t < 30*24*60*60) {
$t /= 24*60*60;
$e = 'days';
} else if ($t < 365*24*60*60) {
$t /= 30*24*60*60;
$e = 'months';
} else {
$t /= 365*24*60*60;
$e = 'years';
}
$t = floor($t);
return "$t $e";
}
 
# http://www.phpeasycode.com/whois/
# TODO: code duplicate in maintenance/pattern-generator/generate_newgtld
function QueryWhoisServer($whoisserver, $domain, $port=43, $timeout=10) {
$fp = @fsockopen($whoisserver, $port, $errno, $errstr, $timeout) or die("Socket Error " . $errno . " - " . $errstr);
// if ($whoisserver == "whois.verisign-grs.com") $domain = "=$domain"; // whois.verisign-grs.com requires the equals sign ("=") or it returns any result containing the searched string.
fputs($fp, $domain . "\r\n");
$out = "";
while(!feof($fp)){
$out .= fgets($fp);
}
fclose($fp);
 
$res = "";
if ((strpos(strtolower($out), "error") === FALSE) && (strpos(strtolower($out), "not allocated") === FALSE)) {
$rows = explode("\n", $out);
foreach($rows as $row) {
$row = trim($row);
if (($row != '') && ($row[0] != '#') && ($row[0] != '%')) {
$res .= "$row\n";
}
}
}
return $res;
}
 
# TODO: rename (without "gwitc")
function gwitc_is_port_open($server, $default_port, $timeout=3) {
// TODO: "whois.namecoin.us" will always answer to a port request, because the domain parking service is shit
 
$x = explode(':', $server, 2);
$host = $x[0];
$port = isset($x[1]) ? $x[1] : $default_port;
 
// First try with TOR
# $cmd = "vtor -- nc -zw$timeout $host $port 2>/dev/null";
# exec($cmd, $out, $code);
# if ($code == 0) return true;
 
// Try without TOR
$cmd = "nc -zw$timeout $host $port 2>/dev/null";
exec($cmd, $out, $code);
return ($code == 0);
}
 
function getAllFiles($directory, $recursive = true, $include_dirs = false, $include_files = true) {
$result = array();
$handle = opendir($directory);
if (substr($directory, -1) == '/') $directory = substr($directory, 0, strlen($directory)-1);
if ($include_dirs) {
$result[] = $directory;
}
while ($datei = readdir($handle)) {
if (($datei != '.') && ($datei != '..')) {
$file = $directory.'/'.$datei;
if (is_dir($file)) {
if ($include_dirs && !$recursive) {
$result[] = $file;
}
if ($recursive) {
$result = array_merge($result, getAllFiles($file, $recursive, $include_dirs, $include_files));
}
} else {
if ($include_files) $result[] = $file;
}
}
}
closedir($handle);
return $result;
}
 
// TOR capable
function file_get_contents2($url, $postvalues='', $headers=array()) {
# exec ("wget -N -O - -- ".escapeshellarg($url), $out);
 
$add_cmd = '';
foreach ($headers as $name => $h) {
if (is_numeric($name)) {
$add_cmd .= "-H ".escapeshellarg($h)." ";
} else {
$add_cmd .= "-H ".escapeshellarg($name.': '.$h)." ";
}
}
 
if ($postvalues != '') {
$add_cmd .= "-d ".escapeshellarg($postvalues)." ";
}
 
exec("curl --cookie ~/.cookiejar --cookie-jar ~/.cookiejar -s -k -L -A 'Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:59.0) Gecko/20100101 Firefox/59.0' $add_cmd".escapeshellarg($url), $out);
 
return implode("\n", $out);
}
 
function make_tabs($text, $abstand = 4) {
$ary = explode("\n", $text);
$longest = 0;
foreach ($ary as $a) {
$bry = explode(':', $a, 2);
if (count($bry) < 2) continue;
$c = strlen($bry[0]);
if ($c > $longest) $longest = $c;
}
foreach ($ary as $n => $a) {
$bry = explode(':', $a, 2);
if (count($bry) < 2) continue;
$rep = $longest-strlen($bry[0]) + $abstand;
if ($rep < 1) {
$wh = '';
} else {
$wh = str_repeat(' ', $rep);
}
$ary[$n] = $bry[0].':'.$wh.trim($bry[1]);
}
$x = implode("\n", $ary);
return $x;
}
 
function uc_latin1($str) {
# Source: http://de3.php.net/manual/en/function.strtoupper.php#82592
$str = strtoupper(strtr($str, "àáâãäåæçèéêëìíîïðñòóôõöøùúûüý",
"ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝ"));
return strtr($str, array("ß" => "SS"));
}
 
/**
* Converts tabs to the appropriate amount of spaces while preserving formatting
*
* @author Aidan Lister <aidan@php.net>
* @version 1.2.0
* @link http://aidanlister.com/repos/v/function.tab2space.php
* @param string $text The text to convert
* @param int $spaces Number of spaces per tab column
* @param boolean $html Output as HTML or not
* @return string The text with tabs replaced
*/
function tab2space($text, $spaces = 4, $html = false) {
// Snippet from PHP Share: http://www.phpshare.org/scripts/Convert-Tabs-to-Spaces
// Modified by Daniel Marschall: Added $html param
 
// Explode the text into an array of single lines
$lines = explode("\n", $text);
 
// Loop through each line
foreach ($lines as $line) {
// Break out of the loop when there are no more tabs to replace
while (false !== $tab_pos = strpos($line, "\t")) {
// Break the string apart, insert spaces then concatenate
$start = substr($line, 0, $tab_pos);
$tab = str_repeat($html ? '&nbsp;' : '', $spaces - $tab_pos % $spaces);
$end = substr($line, $tab_pos + 1);
$line = $start . $tab . $end;
}
 
$result[] = $line;
}
 
return implode("\n", $result);
}
 
function trim_each_line($x) {
$res = '';
foreach (explode("\n", $x) as $y) {
$res .= trim($y)."\n";
}
return $res;
}
 
function generateRandomString($length = 10) {
$characters = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
$randomString = '';
for ($i = 0; $i < $length; $i++) {
$randomString .= $characters[rand(0, strlen($characters) - 1)];
}
return $randomString;
}
 
# http://stackoverflow.com/a/9361531
function _uniord($c) {
if (ord($c{0}) >=0 && ord($c{0}) <= 127)
return ord($c{0});
if (ord($c{0}) >= 192 && ord($c{0}) <= 223)
return (ord($c{0})-192)*64 + (ord($c{1})-128);
if (ord($c{0}) >= 224 && ord($c{0}) <= 239)
return (ord($c{0})-224)*4096 + (ord($c{1})-128)*64 + (ord($c{2})-128);
if (ord($c{0}) >= 240 && ord($c{0}) <= 247)
return (ord($c{0})-240)*262144 + (ord($c{1})-128)*4096 + (ord($c{2})-128)*64 + (ord($c{3})-128);
if (ord($c{0}) >= 248 && ord($c{0}) <= 251)
return (ord($c{0})-248)*16777216 + (ord($c{1})-128)*262144 + (ord($c{2})-128)*4096 + (ord($c{3})-128)*64 + (ord($c{4})-128);
if (ord($c{0}) >= 252 && ord($c{0}) <= 253)
return (ord($c{0})-252)*1073741824 + (ord($c{1})-128)*16777216 + (ord($c{2})-128)*262144 + (ord($c{3})-128)*4096 + (ord($c{4})-128)*64 + (ord($c{5})-128);
if (ord($c{0}) >= 254 && ord($c{0}) <= 255) // error
return FALSE;
return 0;
}
 
# urn:OID:2.0999 -> .2.999
function normalize_oid($oid, $leading_dot=true) {
# remove urn:oid: and oid:
$oid = preg_replace('@^(urn:oid:|oid:|)@i', '', $oid);
 
# add leading dot if it does not already exist
$oid = preg_replace('@^\.@', '', $oid);
$oid = '.' . $oid;
 
# remove leading zeros (requires leading dot)
$oid = preg_replace('@\.0*([1-9])@', '.$1', $oid);
 
if (!$leading_dot) {
$oid = preg_replace('@^\\.@s', '', $oid);
}
 
return $oid;
}
 
function generateRandomToken($haystack, $length = 20) {
do {
$t = generateRandomString($length);
} while (strpos($haystack, $t) !== false);
return $t;
}
/trunk/shared/php_includes/config_functions.inc.php
0,0 → 1,57
<?php
 
#
# generic Whois - Automatic Pattern Generator configuration
#
# (c) 2012-2018 Daniel Marschall, ViaThinkSoft [www.viathinksoft.de]
#
# Distribution, usage etc. pp. regulated by the current version of GPL.
#
#
# Version 2018-10-26
#
 
function parse_config($file) {
if (!file_exists($file)) return false;
 
$count = 0;
 
$cont = file($file);
foreach ($cont as $c) {
$c = trim($c);
 
if ($c == '') continue;
if ($c[0] == '#') continue;
 
$c = preg_replace('@(.+)\\s#.+$@U', '\\1', $c);
 
$ary = explode('=', $c, 2);
$name = trim($ary[0]);
$val = trim($ary[1]);
 
// true/false does not work for bash, so we do not accept it here either
/*
if (strtolower($val) === 'no') $val = false;
if (strtolower($val) === 'false') $val = false;
if (strtolower($val) === 'yes') $val = true;
if (strtolower($val) === 'true') $val = true;
*/
 
$val = str_strip_quotes($val);
 
define($name, $val);
$count++;
}
 
return $count;
}
 
function str_strip_quotes($x) {
if (((substr($x,0,1) == '"') && (substr($x,-1,1) == '"')) ||
((substr($x,0,1) == "'") && (substr($x,-1,1) == "'"))) {
return substr($x,1,strlen($x)-2);
} else {
return $x;
}
}
 
/trunk/shared/php_includes/grep_functions.inc.php
0,0 → 1,36
<?php
 
#
# Grep Functions for PHP
#
# (c) 2012-2013 Daniel Marschall, ViaThinkSoft [www.viathinksoft.de]
#
# Distribution, usage etc. pp. regulated by the current version of GPL.
#
#
# Version 2013-03-08
#
 
# TODO: if console available, use it
 
// "grep"
function grep(&$array, $substr) {
if (!is_array($array)) return false;
$ret = array();
foreach ($array as &$a) {
if (strpos($a, $substr) !== false) $ret[] = $a;
}
return $ret;
}
 
// "grep -v"
function antigrep(&$array, $substr) {
if (!is_array($array)) return false;
$ret = array();
foreach ($array as &$a) {
if (strpos($a, $substr) === false) $ret[] = $a;
}
return $ret;
}
 
?>
/trunk/shared/php_includes/gwi_functions.inc.php
0,0 → 1,53
<?php
 
#
# generic Whois - Maintenance Framework Common Functions
#
# (c) 2013-2015 Daniel Marschall, ViaThinkSoft [www.viathinksoft.de]
#
# Distribution, usage etc. pp. regulated by the current version of GPL.
#
#
# Version 2015-05-06
#
 
function getpatternfiles() {
$out = array();
 
# NEW FILES
$files = glob(__DIR__ . '/../../main/pattern/'.'*');
foreach ($files as &$file) {
# see /usr/bin/gwhois
if (preg_match('@\.dpkg-@', $file)) continue;
if (preg_match('@\.orig$@', $file)) continue;
if (preg_match('@\.bak$@', $file)) continue;
if (preg_match('@\.save$@', $file)) continue;
if (preg_match('@^\.@', $file)) continue;
 
$out[] = $file;
}
 
return $out;
}
 
function get_united_pattern() {
$cont = '';
 
$files = getpatternfiles();
foreach ($files as &$file) {
$cont .= file_get_contents($file)."\n\n";
}
 
return $cont;
}
 
function cached_file($url, $cache_dir, $max_age = /* 24*60*60 */ 86400) {
$cachefile = $cache_dir . '/' . sha1($url) . '.cache';
if (file_age($cachefile) > $max_age) {
$cont = file_get_contents($url);
file_put_contents($cachefile, $cont);
} else {
$cont = file_get_contents($cachefile);
}
return $cont;
}
/trunk/shared/php_includes/idna_convert.class.php
0,0 → 1,3470
<?php
 
// ** Newest version can be downloaded here:
// ** https://idnaconv.net/index.html
// ** https://github.com/algo26-matthias/idna-convert
/*
Als Alternative zu idna_convert kann man auch TrueBV Punycode verwenden:
https://raw.githubusercontent.com/true/php-punycode/master/src/Punycode.php
Der Damals aufgetretene Fehler bei 'xn--p1ai' ist mittlerweile behoben.
*/
 
// {{{ license
 
/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4 foldmethod=marker: */
//
// +----------------------------------------------------------------------+
// | This library is free software; you can redistribute it and/or modify |
// | it under the terms of the GNU Lesser General Public License as |
// | published by the Free Software Foundation; either version 2.1 of the |
// | License, or (at your option) any later version. |
// | |
// | This library is distributed in the hope that it will be useful, but |
// | WITHOUT ANY WARRANTY; without even the implied warranty of |
// | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
// | Lesser General Public License for more details. |
// | |
// | You should have received a copy of the GNU Lesser General Public |
// | License along with this library; if not, write to the Free Software |
// | Foundation, Inc., 51 Franklin St, Boston, MA 02110, United States |
// +----------------------------------------------------------------------+
//
// }}}
 
/**
* Encode/decode Internationalized Domain Names.
*
* The class allows to convert internationalized domain names
* (see RFC 3490 for details) as they can be used with various registries worldwide
* to be translated between their original (localized) form and their encoded form
* as it will be used in the DNS (Domain Name System).
*
* The class provides two public methods, encode() and decode(), which do exactly
* what you would expect them to do. You are allowed to use complete domain names,
* simple strings and complete email addresses as well. That means, that you might
* use any of the following notations:
*
* - www.nörgler.com
* - xn--nrgler-wxa
* - xn--brse-5qa.xn--knrz-1ra.info
*
* Unicode input might be given as either UTF-8 string, UCS-4 string or UCS-4 array.
* Unicode output is available in the same formats.
* You can select your preferred format via {@link set_paramter()}.
*
* ACE input and output is always expected to be ASCII.
*
* @author Matthias Sommerfeld <mso@phlylabs.de>
* @copyright 2004-2014 phlyLabs Berlin, http://phlylabs.de
* @version 0.9.0 2014-12-12
*/
class idna_convert {
 
private $version = '0.9.0';
protected $sub_version = 'main';
 
// NP See below
// Internal settings, do not mess with them
protected $_punycode_prefix = 'xn--';
protected $_invalid_ucs = 0x80000000;
protected $_max_ucs = 0x10FFFF;
protected $_base = 36;
protected $_tmin = 1;
protected $_tmax = 26;
protected $_skew = 38;
protected $_damp = 700;
protected $_initial_bias = 72;
protected $_initial_n = 0x80;
protected $_sbase = 0xAC00;
protected $_lbase = 0x1100;
protected $_vbase = 0x1161;
protected $_tbase = 0x11A7;
protected $_lcount = 19;
protected $_vcount = 21;
protected $_tcount = 28;
protected $_ncount = 588; // _vcount * _tcount
protected $_scount = 11172; // _lcount * _tcount * _vcount
protected $_error = false;
protected static $_mb_string_overload = null;
// See {@link set_paramter()} for details of how to change the following
// settings from within your script / application
protected $_api_encoding = 'utf8'; // Default input charset is UTF-8
protected $_allow_overlong = false; // Overlong UTF-8 encodings are forbidden
protected $_strict_mode = false; // Behave strict or not
protected $_idn_version = 2003; // Can be either 2003 (old, default) or 2008
 
/**
* the constructor
*
* @param array $options
* @return boolean
* @since 0.5.2
*/
public function __construct($options = false)
{
$this->slast = $this->_sbase + $this->_lcount * $this->_vcount * $this->_tcount;
// If parameters are given, pass these to the respective method
if (is_array($options)) {
$this->set_parameter($options);
}
 
// populate mbstring overloading cache if not set
if (self::$_mb_string_overload === null) {
self::$_mb_string_overload = (extension_loaded('mbstring') && (ini_get('mbstring.func_overload') & 0x02) === 0x02);
}
}
 
public function get_version()
{
return $this->version.'-'.$this->sub_version;
}
 
/**
* Sets a new option value. Available options and values:
* [encoding - Use either UTF-8, UCS4 as array or UCS4 as string as input ('utf8' for UTF-8,
* 'ucs4_string' and 'ucs4_array' respectively for UCS4); The output is always UTF-8]
* [overlong - Unicode does not allow unnecessarily long encodings of chars,
* to allow this, set this parameter to true, else to false;
* default is false.]
* [strict - true: strict mode, good for registration purposes - Causes errors
* on failures; false: loose mode, ideal for "wildlife" applications
* by silently ignoring errors and returning the original input instead
*
* @param mixed Parameter to set (string: single parameter; array of Parameter => Value pairs)
* @param string Value to use (if parameter 1 is a string)
* @return boolean true on success, false otherwise
*/
public function set_parameter($option, $value = false)
{
if (!is_array($option)) {
$option = array($option => $value);
}
foreach ($option as $k => $v) {
switch ($k) {
case 'encoding':
switch ($v) {
case 'utf8':
case 'ucs4_string':
case 'ucs4_array':
$this->_api_encoding = $v;
break;
default:
$this->_error('Set Parameter: Unknown parameter ' . $v . ' for option ' . $k);
return false;
}
break;
case 'overlong':
$this->_allow_overlong = ($v) ? true : false;
break;
case 'strict':
$this->_strict_mode = ($v) ? true : false;
break;
case 'idn_version':
if (in_array($v, array('2003', '2008'))) {
$this->_idn_version = $v;
} else {
$this->_error('Set Parameter: Unknown parameter ' . $v . ' for option ' . $k);
}
break;
case 'encode_german_sz': // Deprecated
if (!$v) {
self::$NP['replacemaps'][0xDF] = array(0x73, 0x73);
} else {
unset(self::$NP['replacemaps'][0xDF]);
}
break;
default:
$this->_error('Set Parameter: Unknown option ' . $k);
return false;
}
}
return true;
}
 
/**
* Decode a given ACE domain name
* @param string Domain name (ACE string)
* [@param string Desired output encoding, see {@link set_parameter}]
* @return string Decoded Domain name (UTF-8 or UCS-4)
*/
public function decode($input, $one_time_encoding = false)
{
// Optionally set
if ($one_time_encoding) {
switch ($one_time_encoding) {
case 'utf8':
case 'ucs4_string':
case 'ucs4_array':
break;
default:
$this->_error('Unknown encoding ' . $one_time_encoding);
return false;
}
}
// Make sure to drop any newline characters around
$input = trim($input);
 
// Negotiate input and try to determine, whether it is a plain string,
// an email address or something like a complete URL
if (strpos($input, '@')) { // Maybe it is an email address
// No no in strict mode
if ($this->_strict_mode) {
$this->_error('Only simple domain name parts can be handled in strict mode');
return false;
}
list ($email_pref, $input) = explode('@', $input, 2);
$arr = explode('.', $input);
foreach ($arr as $k => $v) {
if (preg_match('!^' . preg_quote($this->_punycode_prefix, '!') . '!', $v)) {
$conv = $this->_decode($v);
if ($conv) {
$arr[$k] = $conv;
}
}
}
$input = join('.', $arr);
$arr = explode('.', $email_pref);
foreach ($arr as $k => $v) {
if (preg_match('!^' . preg_quote($this->_punycode_prefix, '!') . '!', $v)) {
$conv = $this->_decode($v);
if ($conv) {
$arr[$k] = $conv;
}
}
}
$email_pref = join('.', $arr);
$return = $email_pref . '@' . $input;
} elseif (preg_match('![:\./]!', $input)) { // Or a complete domain name (with or without paths / parameters)
// No no in strict mode
if ($this->_strict_mode) {
$this->_error('Only simple domain name parts can be handled in strict mode');
return false;
}
$parsed = parse_url($input);
if (isset($parsed['host'])) {
$arr = explode('.', $parsed['host']);
foreach ($arr as $k => $v) {
$conv = $this->_decode($v);
if ($conv) {
$arr[$k] = $conv;
}
}
$parsed['host'] = join('.', $arr);
$return = (empty($parsed['scheme']) ? '' : $parsed['scheme'] . (strtolower($parsed['scheme']) == 'mailto' ? ':' : '://')).
(empty($parsed['user']) ? '' : $parsed['user'] . (empty($parsed['pass']) ? '' : ':' . $parsed['pass']) . '@').
$parsed['host'].
(empty($parsed['port']) ? '' : ':' . $parsed['port']).
(empty($parsed['path']) ? '' : $parsed['path']).
(empty($parsed['query']) ? '' : '?' . $parsed['query']).
(empty($parsed['fragment']) ? '' : '#' . $parsed['fragment']);
} else { // parse_url seems to have failed, try without it
$arr = explode('.', $input);
foreach ($arr as $k => $v) {
$conv = $this->_decode($v);
$arr[$k] = ($conv) ? $conv : $v;
}
$return = join('.', $arr);
}
} else { // Otherwise we consider it being a pure domain name string
$return = $this->_decode($input);
if (!$return) {
$return = $input;
}
}
// The output is UTF-8 by default, other output formats need conversion here
// If one time encoding is given, use this, else the objects property
switch (($one_time_encoding) ? $one_time_encoding : $this->_api_encoding) {
case 'utf8': return $return; // break;
case 'ucs4_string': return $this->_ucs4_to_ucs4_string($this->_utf8_to_ucs4($return)); // break;
case 'ucs4_array': return $this->_utf8_to_ucs4($return); // break;
default: $this->_error('Unsupported output format'); return false;
}
}
 
/**
* Encode a given UTF-8 domain name
* @param string Domain name (UTF-8 or UCS-4)
* [@param string Desired input encoding, see {@link set_parameter}]
* @return string Encoded Domain name (ACE string)
*/
public function encode($decoded, $one_time_encoding = false)
{
// Forcing conversion of input to UCS4 array
// If one time encoding is given, use this, else the objects property
switch ($one_time_encoding ? $one_time_encoding : $this->_api_encoding) {
case 'utf8':
$decoded = $this->_utf8_to_ucs4($decoded);
break;
case 'ucs4_string':
$decoded = $this->_ucs4_string_to_ucs4($decoded);
case 'ucs4_array':
break;
default:
$this->_error('Unsupported input format: ' . ($one_time_encoding ? $one_time_encoding : $this->_api_encoding));
return false;
}
 
// No input, no output, what else did you expect?
if (empty($decoded)) {
return '';
}
 
// Anchors for iteration
$last_begin = 0;
// Output string
$output = '';
foreach ($decoded as $k => $v) {
// Make sure to use just the plain dot
switch ($v) {
case 0x3002:
case 0xFF0E:
case 0xFF61:
$decoded[$k] = 0x2E;
// Right, no break here, the above are converted to dots anyway
// Stumbling across an anchoring character
case 0x2E:
case 0x2F:
case 0x3A:
case 0x3F:
case 0x40:
// Neither email addresses nor URLs allowed in strict mode
if ($this->_strict_mode) {
$this->_error('Neither email addresses nor URLs are allowed in strict mode.');
return false;
} else {
// Skip first char
if ($k) {
$encoded = '';
$encoded = $this->_encode(array_slice($decoded, $last_begin, (($k) - $last_begin)));
if ($encoded) {
$output .= $encoded;
} else {
$output .= $this->_ucs4_to_utf8(array_slice($decoded, $last_begin, (($k) - $last_begin)));
}
$output .= chr($decoded[$k]);
}
$last_begin = $k + 1;
}
}
}
// Catch the rest of the string
if ($last_begin) {
$inp_len = sizeof($decoded);
$encoded = '';
$encoded = $this->_encode(array_slice($decoded, $last_begin, (($inp_len) - $last_begin)));
if ($encoded) {
$output .= $encoded;
} else {
$output .= $this->_ucs4_to_utf8(array_slice($decoded, $last_begin, (($inp_len) - $last_begin)));
}
return $output;
} else {
if (false !== ($output = $this->_encode($decoded))) {
return $output;
} else {
return $this->_ucs4_to_utf8($decoded);
}
}
}
 
/**
* Removes a weakness of encode(), which cannot properly handle URIs but instead encodes their
* path or query components, too.
* @param string $uri Expects the URI as a UTF-8 (or ASCII) string
* @return string The URI encoded to Punycode, everything but the host component is left alone
* @since 0.6.4
*/
public function encode_uri($uri)
{
$parsed = parse_url($uri);
if (!isset($parsed['host'])) {
$this->_error('The given string does not look like a URI');
return false;
}
$arr = explode('.', $parsed['host']);
foreach ($arr as $k => $v) {
$conv = $this->encode($v, 'utf8');
if ($conv) {
$arr[$k] = $conv;
}
}
$parsed['host'] = join('.', $arr);
$return = (empty($parsed['scheme']) ? '' : $parsed['scheme'] . (strtolower($parsed['scheme']) == 'mailto' ? ':' : '://')).
(empty($parsed['user']) ? '' : $parsed['user'] . (empty($parsed['pass']) ? '' : ':' . $parsed['pass']) . '@').
$parsed['host'].
(empty($parsed['port']) ? '' : ':' . $parsed['port']).
(empty($parsed['path']) ? '' : $parsed['path']).
(empty($parsed['query']) ? '' : '?' . $parsed['query']).
(empty($parsed['fragment']) ? '' : '#' . $parsed['fragment']);
return $return;
}
 
/**
* Use this method to get the last error ocurred
* @param void
* @return string The last error, that occured
*/
public function get_last_error()
{
return $this->_error;
}
 
/**
* The actual decoding algorithm
* @param string
* @return mixed
*/
protected function _decode($encoded)
{
$decoded = array();
// find the Punycode prefix
if (!preg_match('!^' . preg_quote($this->_punycode_prefix, '!') . '!', $encoded)) {
$this->_error('This is not a punycode string');
return false;
}
$encode_test = preg_replace('!^' . preg_quote($this->_punycode_prefix, '!') . '!', '', $encoded);
// If nothing left after removing the prefix, it is hopeless
if (!$encode_test) {
$this->_error('The given encoded string was empty');
return false;
}
// Find last occurence of the delimiter
$delim_pos = strrpos($encoded, '-');
if ($delim_pos > self::byteLength($this->_punycode_prefix)) {
for ($k = self::byteLength($this->_punycode_prefix); $k < $delim_pos; ++$k) {
$decoded[] = ord($encoded{$k});
}
}
$deco_len = count($decoded);
$enco_len = self::byteLength($encoded);
 
// Wandering through the strings; init
$is_first = true;
$bias = $this->_initial_bias;
$idx = 0;
$char = $this->_initial_n;
 
for ($enco_idx = ($delim_pos) ? ($delim_pos + 1) : 0; $enco_idx < $enco_len; ++$deco_len) {
for ($old_idx = $idx, $w = 1, $k = $this->_base; 1; $k += $this->_base) {
$digit = $this->_decode_digit($encoded{$enco_idx++});
$idx += $digit * $w;
$t = ($k <= $bias) ? $this->_tmin :
(($k >= $bias + $this->_tmax) ? $this->_tmax : ($k - $bias));
if ($digit < $t) {
break;
}
$w = (int) ($w * ($this->_base - $t));
}
$bias = $this->_adapt($idx - $old_idx, $deco_len + 1, $is_first);
$is_first = false;
$char += (int) ($idx / ($deco_len + 1));
$idx %= ($deco_len + 1);
if ($deco_len > 0) {
// Make room for the decoded char
for ($i = $deco_len; $i > $idx; $i--) {
$decoded[$i] = $decoded[($i - 1)];
}
}
$decoded[$idx++] = $char;
}
return $this->_ucs4_to_utf8($decoded);
}
 
/**
* The actual encoding algorithm
* @param string
* @return mixed
*/
protected function _encode($decoded)
{
// We cannot encode a domain name containing the Punycode prefix
$extract = self::byteLength($this->_punycode_prefix);
$check_pref = $this->_utf8_to_ucs4($this->_punycode_prefix);
$check_deco = array_slice($decoded, 0, $extract);
 
if ($check_pref == $check_deco) {
$this->_error('This is already a punycode string');
return false;
}
// We will not try to encode strings consisting of basic code points only
$encodable = false;
foreach ($decoded as $k => $v) {
if ($v > 0x7a) {
$encodable = true;
break;
}
}
if (!$encodable) {
$this->_error('The given string does not contain encodable chars');
return false;
}
// Do NAMEPREP
$decoded = $this->_nameprep($decoded);
if (!$decoded || !is_array($decoded)) {
return false; // NAMEPREP failed
}
$deco_len = count($decoded);
if (!$deco_len) {
return false; // Empty array
}
$codecount = 0; // How many chars have been consumed
$encoded = '';
// Copy all basic code points to output
for ($i = 0; $i < $deco_len; ++$i) {
$test = $decoded[$i];
// Will match [-0-9a-zA-Z]
if ((0x2F < $test && $test < 0x40) || (0x40 < $test && $test < 0x5B) || (0x60 < $test && $test <= 0x7B) || (0x2D == $test)) {
$encoded .= chr($decoded[$i]);
$codecount++;
}
}
if ($codecount == $deco_len) {
return $encoded; // All codepoints were basic ones
}
// Start with the prefix; copy it to output
$encoded = $this->_punycode_prefix . $encoded;
// If we have basic code points in output, add an hyphen to the end
if ($codecount) {
$encoded .= '-';
}
// Now find and encode all non-basic code points
$is_first = true;
$cur_code = $this->_initial_n;
$bias = $this->_initial_bias;
$delta = 0;
while ($codecount < $deco_len) {
// Find the smallest code point >= the current code point and
// remember the last ouccrence of it in the input
for ($i = 0, $next_code = $this->_max_ucs; $i < $deco_len; $i++) {
if ($decoded[$i] >= $cur_code && $decoded[$i] <= $next_code) {
$next_code = $decoded[$i];
}
}
$delta += ($next_code - $cur_code) * ($codecount + 1);
$cur_code = $next_code;
 
// Scan input again and encode all characters whose code point is $cur_code
for ($i = 0; $i < $deco_len; $i++) {
if ($decoded[$i] < $cur_code) {
$delta++;
} elseif ($decoded[$i] == $cur_code) {
for ($q = $delta, $k = $this->_base; 1; $k += $this->_base) {
$t = ($k <= $bias) ? $this->_tmin :
(($k >= $bias + $this->_tmax) ? $this->_tmax : $k - $bias);
if ($q < $t) {
break;
}
$encoded .= $this->_encode_digit(intval($t + (($q - $t) % ($this->_base - $t)))); //v0.4.5 Changed from ceil() to intval()
$q = (int) (($q - $t) / ($this->_base - $t));
}
$encoded .= $this->_encode_digit($q);
$bias = $this->_adapt($delta, $codecount + 1, $is_first);
$codecount++;
$delta = 0;
$is_first = false;
}
}
$delta++;
$cur_code++;
}
return $encoded;
}
 
/**
* Adapt the bias according to the current code point and position
* @param int $delta
* @param int $npoints
* @param int $is_first
* @return int
*/
protected function _adapt($delta, $npoints, $is_first)
{
$delta = intval($is_first ? ($delta / $this->_damp) : ($delta / 2));
$delta += intval($delta / $npoints);
for ($k = 0; $delta > (($this->_base - $this->_tmin) * $this->_tmax) / 2; $k += $this->_base) {
$delta = intval($delta / ($this->_base - $this->_tmin));
}
return intval($k + ($this->_base - $this->_tmin + 1) * $delta / ($delta + $this->_skew));
}
 
/**
* Encoding a certain digit
* @param int $d
* @return string
*/
protected function _encode_digit($d)
{
return chr($d + 22 + 75 * ($d < 26));
}
 
/**
* Decode a certain digit
* @param int $cp
* @return int
*/
protected function _decode_digit($cp)
{
$cp = ord($cp);
return ($cp - 48 < 10) ? $cp - 22 : (($cp - 65 < 26) ? $cp - 65 : (($cp - 97 < 26) ? $cp - 97 : $this->_base));
}
 
/**
* Internal error handling method
* @param string $error
*/
protected function _error($error = '')
{
$this->_error = $error;
}
 
/**
* Do Nameprep according to RFC3491 and RFC3454
* @param array Unicode Characters
* @return string Unicode Characters, Nameprep'd
*/
protected function _nameprep($input)
{
$output = array();
//
// Mapping
// Walking through the input array, performing the required steps on each of
// the input chars and putting the result into the output array
// While mapping required chars we apply the cannonical ordering
foreach ($input as $v) {
// Map to nothing == skip that code point
if (in_array($v, self::$NP['map_nothing'])) {
continue;
}
// Try to find prohibited input
if (in_array($v, self::$NP['prohibit']) || in_array($v, self::$NP['general_prohibited'])) {
$this->_error('NAMEPREP: Prohibited input U+' . sprintf('%08X', $v));
return false;
}
foreach (self::$NP['prohibit_ranges'] as $range) {
if ($range[0] <= $v && $v <= $range[1]) {
$this->_error('NAMEPREP: Prohibited input U+' . sprintf('%08X', $v));
return false;
}
}
 
if (0xAC00 <= $v && $v <= 0xD7AF) {
// Hangul syllable decomposition
foreach ($this->_hangul_decompose($v) as $out) {
$output[] = (int) $out;
}
} elseif (($this->_idn_version == '2003') && isset(self::$NP['replacemaps_2003'][$v])) {
foreach ($this->_apply_cannonical_ordering(self::$NP['replacemaps_2003'][$v]) as $out) {
$output[] = (int) $out;
}
} elseif (($this->_idn_version == '2008') && isset(self::$NP['replacemaps'][$v])) {
foreach ($this->_apply_cannonical_ordering(self::$NP['replacemaps'][$v]) as $out) {
$output[] = (int) $out;
}
} else {
$output[] = (int) $v;
}
}
// Before applying any Combining, try to rearrange any Hangul syllables
$output = $this->_hangul_compose($output);
//
// Combine code points
//
$last_class = 0;
$last_starter = 0;
$out_len = count($output);
for ($i = 0; $i < $out_len; ++$i) {
$class = $this->_get_combining_class($output[$i]);
if ((!$last_class || $last_class > $class) && $class) {
// Try to match
$seq_len = $i - $last_starter;
$out = $this->_combine(array_slice($output, $last_starter, $seq_len));
// On match: Replace the last starter with the composed character and remove
// the now redundant non-starter(s)
if ($out) {
$output[$last_starter] = $out;
if (count($out) != $seq_len) {
for ($j = $i + 1; $j < $out_len; ++$j) {
$output[$j - 1] = $output[$j];
}
unset($output[$out_len]);
}
// Rewind the for loop by one, since there can be more possible compositions
$i--;
$out_len--;
$last_class = ($i == $last_starter) ? 0 : $this->_get_combining_class($output[$i - 1]);
continue;
}
}
// The current class is 0
if (!$class) {
$last_starter = $i;
}
$last_class = $class;
}
return $output;
}
 
/**
* Decomposes a Hangul syllable
* (see http://www.unicode.org/unicode/reports/tr15/#Hangul
* @param integer 32bit UCS4 code point
* @return array Either Hangul Syllable decomposed or original 32bit value as one value array
*/
protected function _hangul_decompose($char)
{
$sindex = (int) $char - $this->_sbase;
if ($sindex < 0 || $sindex >= $this->_scount) {
return array($char);
}
$result = array();
$result[] = (int) $this->_lbase + $sindex / $this->_ncount;
$result[] = (int) $this->_vbase + ($sindex % $this->_ncount) / $this->_tcount;
$T = intval($this->_tbase + $sindex % $this->_tcount);
if ($T != $this->_tbase) {
$result[] = $T;
}
return $result;
}
 
/**
* Ccomposes a Hangul syllable
* (see http://www.unicode.org/unicode/reports/tr15/#Hangul
* @param array Decomposed UCS4 sequence
* @return array UCS4 sequence with syllables composed
*/
protected function _hangul_compose($input)
{
$inp_len = count($input);
if (!$inp_len) {
return array();
}
$result = array();
$last = (int) $input[0];
$result[] = $last; // copy first char from input to output
 
for ($i = 1; $i < $inp_len; ++$i) {
$char = (int) $input[$i];
$sindex = $last - $this->_sbase;
$lindex = $last - $this->_lbase;
$vindex = $char - $this->_vbase;
$tindex = $char - $this->_tbase;
// Find out, whether two current characters are LV and T
if (0 <= $sindex && $sindex < $this->_scount && ($sindex % $this->_tcount == 0) && 0 <= $tindex && $tindex <= $this->_tcount) {
// create syllable of form LVT
$last += $tindex;
$result[(count($result) - 1)] = $last; // reset last
continue; // discard char
}
// Find out, whether two current characters form L and V
if (0 <= $lindex && $lindex < $this->_lcount && 0 <= $vindex && $vindex < $this->_vcount) {
// create syllable of form LV
$last = (int) $this->_sbase + ($lindex * $this->_vcount + $vindex) * $this->_tcount;
$result[(count($result) - 1)] = $last; // reset last
continue; // discard char
}
// if neither case was true, just add the character
$last = $char;
$result[] = $char;
}
return $result;
}
 
/**
* Returns the combining class of a certain wide char
* @param integer Wide char to check (32bit integer)
* @return integer Combining class if found, else 0
*/
protected function _get_combining_class($char)
{
return isset(self::$NP['norm_combcls'][$char]) ? self::$NP['norm_combcls'][$char] : 0;
}
 
/**
* Applies the cannonical ordering of a decomposed UCS4 sequence
* @param array Decomposed UCS4 sequence
* @return array Ordered USC4 sequence
*/
protected function _apply_cannonical_ordering($input)
{
$swap = true;
$size = count($input);
while ($swap) {
$swap = false;
$last = $this->_get_combining_class(intval($input[0]));
for ($i = 0; $i < $size - 1; ++$i) {
$next = $this->_get_combining_class(intval($input[$i + 1]));
if ($next != 0 && $last > $next) {
// Move item leftward until it fits
for ($j = $i + 1; $j > 0; --$j) {
if ($this->_get_combining_class(intval($input[$j - 1])) <= $next) {
break;
}
$t = intval($input[$j]);
$input[$j] = intval($input[$j - 1]);
$input[$j - 1] = $t;
$swap = true;
}
// Reentering the loop looking at the old character again
$next = $last;
}
$last = $next;
}
}
return $input;
}
 
/**
* Do composition of a sequence of starter and non-starter
* @param array UCS4 Decomposed sequence
* @return array Ordered USC4 sequence
*/
protected function _combine($input)
{
$inp_len = count($input);
if (0 == $inp_len) {
return false;
}
foreach (self::$NP['replacemaps'] as $np_src => $np_target) {
if ($np_target[0] != $input[0]) {
continue;
}
if (count($np_target) != $inp_len) {
continue;
}
$hit = false;
foreach ($input as $k2 => $v2) {
if ($v2 == $np_target[$k2]) {
$hit = true;
} else {
$hit = false;
break;
}
}
if ($hit) {
return $np_src;
}
}
return false;
}
 
/**
* This converts an UTF-8 encoded string to its UCS-4 representation
* By talking about UCS-4 "strings" we mean arrays of 32bit integers representing
* each of the "chars". This is due to PHP not being able to handle strings with
* bit depth different from 8. This apllies to the reverse method _ucs4_to_utf8(), too.
* The following UTF-8 encodings are supported:
* bytes bits representation
* 1 7 0xxxxxxx
* 2 11 110xxxxx 10xxxxxx
* 3 16 1110xxxx 10xxxxxx 10xxxxxx
* 4 21 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
* 5 26 111110xx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx
* 6 31 1111110x 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx
* Each x represents a bit that can be used to store character data.
* The five and six byte sequences are part of Annex D of ISO/IEC 10646-1:2000
* @param string $input
* @return string
*/
protected function _utf8_to_ucs4($input)
{
$output = array();
$out_len = 0;
$inp_len = self::byteLength($input);
$mode = 'next';
$test = 'none';
for ($k = 0; $k < $inp_len; ++$k) {
$v = ord($input{$k}); // Extract byte from input string
if ($v < 128) { // We found an ASCII char - put into stirng as is
$output[$out_len] = $v;
++$out_len;
if ('add' == $mode) {
$this->_error('Conversion from UTF-8 to UCS-4 failed: malformed input at byte ' . $k);
return false;
}
continue;
}
if ('next' == $mode) { // Try to find the next start byte; determine the width of the Unicode char
$start_byte = $v;
$mode = 'add';
$test = 'range';
if ($v >> 5 == 6) { // &110xxxxx 10xxxxx
$next_byte = 0; // Tells, how many times subsequent bitmasks must rotate 6bits to the left
$v = ($v - 192) << 6;
} elseif ($v >> 4 == 14) { // &1110xxxx 10xxxxxx 10xxxxxx
$next_byte = 1;
$v = ($v - 224) << 12;
} elseif ($v >> 3 == 30) { // &11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
$next_byte = 2;
$v = ($v - 240) << 18;
} elseif ($v >> 2 == 62) { // &111110xx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx
$next_byte = 3;
$v = ($v - 248) << 24;
} elseif ($v >> 1 == 126) { // &1111110x 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx
$next_byte = 4;
$v = ($v - 252) << 30;
} else {
$this->_error('This might be UTF-8, but I don\'t understand it at byte ' . $k);
return false;
}
if ('add' == $mode) {
$output[$out_len] = (int) $v;
++$out_len;
continue;
}
}
if ('add' == $mode) {
if (!$this->_allow_overlong && $test == 'range') {
$test = 'none';
if (($v < 0xA0 && $start_byte == 0xE0) || ($v < 0x90 && $start_byte == 0xF0) || ($v > 0x8F && $start_byte == 0xF4)) {
$this->_error('Bogus UTF-8 character detected (out of legal range) at byte ' . $k);
return false;
}
}
if ($v >> 6 == 2) { // Bit mask must be 10xxxxxx
$v = ($v - 128) << ($next_byte * 6);
$output[($out_len - 1)] += $v;
--$next_byte;
} else {
$this->_error('Conversion from UTF-8 to UCS-4 failed: malformed input at byte ' . $k);
return false;
}
if ($next_byte < 0) {
$mode = 'next';
}
}
} // for
return $output;
}
 
/**
* Convert UCS-4 string into UTF-8 string
* See _utf8_to_ucs4() for details
* @param string $input
* @return string
*/
protected function _ucs4_to_utf8($input)
{
$output = '';
foreach ($input as $k => $v) {
if ($v < 128) { // 7bit are transferred literally
$output .= chr($v);
} elseif ($v < (1 << 11)) { // 2 bytes
$output .= chr(192 + ($v >> 6)) . chr(128 + ($v & 63));
} elseif ($v < (1 << 16)) { // 3 bytes
$output .= chr(224 + ($v >> 12)) . chr(128 + (($v >> 6) & 63)) . chr(128 + ($v & 63));
} elseif ($v < (1 << 21)) { // 4 bytes
$output .= chr(240 + ($v >> 18)) . chr(128 + (($v >> 12) & 63)) . chr(128 + (($v >> 6) & 63)) . chr(128 + ($v & 63));
} else {
$this->_error('Conversion from UCS-4 to UTF-8 failed: malformed input at byte ' . $k);
return false;
}
}
return $output;
}
 
/**
* Convert UCS-4 array into UCS-4 string
*
* @param array $input
* @return string
*/
protected function _ucs4_to_ucs4_string($input)
{
$output = '';
// Take array values and split output to 4 bytes per value
// The bit mask is 255, which reads &11111111
foreach ($input as $v) {
$output .= chr(($v >> 24) & 255) . chr(($v >> 16) & 255) . chr(($v >> 8) & 255) . chr($v & 255);
}
return $output;
}
 
/**
* Convert UCS-4 strin into UCS-4 garray
*
* @param string $input
* @return array
*/
protected function _ucs4_string_to_ucs4($input)
{
$output = array();
$inp_len = self::byteLength($input);
// Input length must be dividable by 4
if ($inp_len % 4) {
$this->_error('Input UCS4 string is broken');
return false;
}
// Empty input - return empty output
if (!$inp_len) {
return $output;
}
for ($i = 0, $out_len = -1; $i < $inp_len; ++$i) {
// Increment output position every 4 input bytes
if (!($i % 4)) {
$out_len++;
$output[$out_len] = 0;
}
$output[$out_len] += ord($input{$i}) << (8 * (3 - ($i % 4) ) );
}
return $output;
}
 
/**
* Gets the length of a string in bytes even if mbstring function
* overloading is turned on
*
* @param string $string the string for which to get the length.
* @return integer the length of the string in bytes.
*/
protected static function byteLength($string)
{
if (self::$_mb_string_overload) {
return mb_strlen($string, '8bit');
}
return strlen((binary) $string);
}
 
/**
* Attempts to return a concrete IDNA instance.
*
* @param array $params Set of paramaters
* @return idna_convert
* @access public
*/
public function getInstance($params = array())
{
return new idna_convert($params);
}
 
/**
* Attempts to return a concrete IDNA instance for either php4 or php5,
* only creating a new instance if no IDNA instance with the same
* parameters currently exists.
*
* @param array $params Set of paramaters
*
* @return object idna_convert
* @access public
*/
public function singleton($params = array())
{
static $instances = array();
 
$signature = serialize($params);
if (!isset($instances[$signature])) {
$instances[$signature] = idna_convert::getInstance($params);
}
return $instances[$signature];
}
 
/**
* Holds all relevant mapping tables
* See RFC3454 for details
*
* @private array
* @since 0.5.2
*/
protected static $NP = array(
'map_nothing' => array(0xAD, 0x34F, 0x1806, 0x180B, 0x180C, 0x180D, 0x200B, 0x200C,
0x200D, 0x2060, 0xFE00, 0xFE01, 0xFE02, 0xFE03, 0xFE04, 0xFE05, 0xFE06, 0xFE07,
0xFE08, 0xFE09, 0xFE0A, 0xFE0B, 0xFE0C, 0xFE0D, 0xFE0E, 0xFE0F, 0xFEFF
),
'general_prohibited' => array(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19,
20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42,
43, 44, 47, 59, 60, 61, 62, 63, 64, 91, 92, 93, 94, 95, 96, 123, 124, 125, 126, 127, 0x3002
),
'prohibit' => array(0xA0, 0x340, 0x341, 0x6DD, 0x70F, 0x1680, 0x180E, 0x2000, 0x2001, 0x2002, 0x2003,
0x2004, 0x2005, 0x2006, 0x2007, 0x2008, 0x2009, 0x200A, 0x200B, 0x200C, 0x200D, 0x200E, 0x200F,
0x2028, 0x2029, 0x202A, 0x202B, 0x202C, 0x202D, 0x202E, 0x202F, 0x205F, 0x206A, 0x206B, 0x206C,
0x206D, 0x206E, 0x206F, 0x3000, 0x33C2, 0xFEFF, 0xFFF9, 0xFFFA, 0xFFFB, 0xFFFC, 0xFFFD, 0xFFFE, 0xFFFF,
0x1FFFE, 0x1FFFF, 0x2FFFE, 0x2FFFF, 0x3FFFE, 0x3FFFF, 0x4FFFE, 0x4FFFF, 0x5FFFE, 0x5FFFF, 0x6FFFE,
0x6FFFF, 0x7FFFE, 0x7FFFF, 0x8FFFE, 0x8FFFF, 0x9FFFE, 0x9FFFF, 0xAFFFE, 0xAFFFF, 0xBFFFE, 0xBFFFF,
0xCFFFE, 0xCFFFF, 0xDFFFE, 0xDFFFF, 0xE0001, 0xEFFFE, 0xEFFFF, 0xFFFFE, 0xFFFFF, 0x10FFFE, 0x10FFFF
),
'prohibit_ranges' => array(array(0x80, 0x9F), array(0x2060, 0x206F), array(0x1D173, 0x1D17A),
array(0xE000, 0xF8FF), array(0xF0000, 0xFFFFD), array(0x100000, 0x10FFFD),
array(0xFDD0, 0xFDEF), array(0xD800, 0xDFFF), array(0x2FF0, 0x2FFB), array(0xE0020, 0xE007F)
),
'replacemaps_2003' => array(0x41 => array(0x61), 0x42 => array(0x62), 0x43 => array(0x63),
0x44 => array(0x64), 0x45 => array(0x65), 0x46 => array(0x66), 0x47 => array(0x67),
0x48 => array(0x68), 0x49 => array(0x69), 0x4A => array(0x6A), 0x4B => array(0x6B),
0x4C => array(0x6C), 0x4D => array(0x6D), 0x4E => array(0x6E), 0x4F => array(0x6F),
0x50 => array(0x70), 0x51 => array(0x71), 0x52 => array(0x72), 0x53 => array(0x73),
0x54 => array(0x74), 0x55 => array(0x75), 0x56 => array(0x76), 0x57 => array(0x77),
0x58 => array(0x78), 0x59 => array(0x79), 0x5A => array(0x7A), 0xB5 => array(0x3BC),
0xC0 => array(0xE0), 0xC1 => array(0xE1), 0xC2 => array(0xE2), 0xC3 => array(0xE3),
0xC4 => array(0xE4), 0xC5 => array(0xE5), 0xC6 => array(0xE6), 0xC7 => array(0xE7),
0xC8 => array(0xE8), 0xC9 => array(0xE9), 0xCA => array(0xEA), 0xCB => array(0xEB),
0xCC => array(0xEC), 0xCD => array(0xED), 0xCE => array(0xEE), 0xCF => array(0xEF),
0xD0 => array(0xF0), 0xD1 => array(0xF1), 0xD2 => array(0xF2), 0xD3 => array(0xF3),
0xD4 => array(0xF4), 0xD5 => array(0xF5), 0xD6 => array(0xF6), 0xD8 => array(0xF8),
0xD9 => array(0xF9), 0xDA => array(0xFA), 0xDB => array(0xFB), 0xDC => array(0xFC),
0xDD => array(0xFD), 0xDE => array(0xFE), 0xDF => array(0x73, 0x73),
0x100 => array(0x101), 0x102 => array(0x103), 0x104 => array(0x105),
0x106 => array(0x107), 0x108 => array(0x109), 0x10A => array(0x10B),
0x10C => array(0x10D), 0x10E => array(0x10F), 0x110 => array(0x111),
0x112 => array(0x113), 0x114 => array(0x115), 0x116 => array(0x117),
0x118 => array(0x119), 0x11A => array(0x11B), 0x11C => array(0x11D),
0x11E => array(0x11F), 0x120 => array(0x121), 0x122 => array(0x123),
0x124 => array(0x125), 0x126 => array(0x127), 0x128 => array(0x129),
0x12A => array(0x12B), 0x12C => array(0x12D), 0x12E => array(0x12F),
0x130 => array(0x69, 0x307), 0x132 => array(0x133), 0x134 => array(0x135),
0x136 => array(0x137), 0x139 => array(0x13A), 0x13B => array(0x13C),
0x13D => array(0x13E), 0x13F => array(0x140), 0x141 => array(0x142),
0x143 => array(0x144), 0x145 => array(0x146), 0x147 => array(0x148),
0x149 => array(0x2BC, 0x6E), 0x14A => array(0x14B), 0x14C => array(0x14D),
0x14E => array(0x14F), 0x150 => array(0x151), 0x152 => array(0x153),
0x154 => array(0x155), 0x156 => array(0x157), 0x158 => array(0x159),
0x15A => array(0x15B), 0x15C => array(0x15D), 0x15E => array(0x15F),
0x160 => array(0x161), 0x162 => array(0x163), 0x164 => array(0x165),
0x166 => array(0x167), 0x168 => array(0x169), 0x16A => array(0x16B),
0x16C => array(0x16D), 0x16E => array(0x16F), 0x170 => array(0x171),
0x172 => array(0x173), 0x174 => array(0x175), 0x176 => array(0x177),
0x178 => array(0xFF), 0x179 => array(0x17A), 0x17B => array(0x17C),
0x17D => array(0x17E), 0x17F => array(0x73), 0x181 => array(0x253),
0x182 => array(0x183), 0x184 => array(0x185), 0x186 => array(0x254),
0x187 => array(0x188), 0x189 => array(0x256), 0x18A => array(0x257),
0x18B => array(0x18C), 0x18E => array(0x1DD), 0x18F => array(0x259),
0x190 => array(0x25B), 0x191 => array(0x192), 0x193 => array(0x260),
0x194 => array(0x263), 0x196 => array(0x269), 0x197 => array(0x268),
0x198 => array(0x199), 0x19C => array(0x26F), 0x19D => array(0x272),
0x19F => array(0x275), 0x1A0 => array(0x1A1), 0x1A2 => array(0x1A3),
0x1A4 => array(0x1A5), 0x1A6 => array(0x280), 0x1A7 => array(0x1A8),
0x1A9 => array(0x283), 0x1AC => array(0x1AD), 0x1AE => array(0x288),
0x1AF => array(0x1B0), 0x1B1 => array(0x28A), 0x1B2 => array(0x28B),
0x1B3 => array(0x1B4), 0x1B5 => array(0x1B6), 0x1B7 => array(0x292),
0x1B8 => array(0x1B9), 0x1BC => array(0x1BD), 0x1C4 => array(0x1C6),
0x1C5 => array(0x1C6), 0x1C7 => array(0x1C9), 0x1C8 => array(0x1C9),
0x1CA => array(0x1CC), 0x1CB => array(0x1CC), 0x1CD => array(0x1CE),
0x1CF => array(0x1D0), 0x1D1 => array(0x1D2), 0x1D3 => array(0x1D4),
0x1D5 => array(0x1D6), 0x1D7 => array(0x1D8), 0x1D9 => array(0x1DA),
0x1DB => array(0x1DC), 0x1DE => array(0x1DF), 0x1E0 => array(0x1E1),
0x1E2 => array(0x1E3), 0x1E4 => array(0x1E5), 0x1E6 => array(0x1E7),
0x1E8 => array(0x1E9), 0x1EA => array(0x1EB), 0x1EC => array(0x1ED),
0x1EE => array(0x1EF), 0x1F0 => array(0x6A, 0x30C), 0x1F1 => array(0x1F3),
0x1F2 => array(0x1F3), 0x1F4 => array(0x1F5), 0x1F6 => array(0x195),
0x1F7 => array(0x1BF), 0x1F8 => array(0x1F9), 0x1FA => array(0x1FB),
0x1FC => array(0x1FD), 0x1FE => array(0x1FF), 0x200 => array(0x201),
0x202 => array(0x203), 0x204 => array(0x205), 0x206 => array(0x207),
0x208 => array(0x209), 0x20A => array(0x20B), 0x20C => array(0x20D),
0x20E => array(0x20F), 0x210 => array(0x211), 0x212 => array(0x213),
0x214 => array(0x215), 0x216 => array(0x217), 0x218 => array(0x219),
0x21A => array(0x21B), 0x21C => array(0x21D), 0x21E => array(0x21F),
0x220 => array(0x19E), 0x222 => array(0x223), 0x224 => array(0x225),
0x226 => array(0x227), 0x228 => array(0x229), 0x22A => array(0x22B),
0x22C => array(0x22D), 0x22E => array(0x22F), 0x230 => array(0x231),
0x232 => array(0x233), 0x345 => array(0x3B9), 0x37A => array(0x20, 0x3B9),
0x386 => array(0x3AC), 0x388 => array(0x3AD), 0x389 => array(0x3AE),
0x38A => array(0x3AF), 0x38C => array(0x3CC), 0x38E => array(0x3CD),
0x38F => array(0x3CE), 0x390 => array(0x3B9, 0x308, 0x301),
0x391 => array(0x3B1), 0x392 => array(0x3B2), 0x393 => array(0x3B3),
0x394 => array(0x3B4), 0x395 => array(0x3B5), 0x396 => array(0x3B6),
0x397 => array(0x3B7), 0x398 => array(0x3B8), 0x399 => array(0x3B9),
0x39A => array(0x3BA), 0x39B => array(0x3BB), 0x39C => array(0x3BC),
0x39D => array(0x3BD), 0x39E => array(0x3BE), 0x39F => array(0x3BF),
0x3A0 => array(0x3C0), 0x3A1 => array(0x3C1), 0x3A3 => array(0x3C3),
0x3A4 => array(0x3C4), 0x3A5 => array(0x3C5), 0x3A6 => array(0x3C6),
0x3A7 => array(0x3C7), 0x3A8 => array(0x3C8), 0x3A9 => array(0x3C9),
0x3AA => array(0x3CA), 0x3AB => array(0x3CB), 0x3B0 => array(0x3C5, 0x308, 0x301),
0x3C2 => array(0x3C3), 0x3D0 => array(0x3B2), 0x3D1 => array(0x3B8),
0x3D2 => array(0x3C5), 0x3D3 => array(0x3CD), 0x3D4 => array(0x3CB),
0x3D5 => array(0x3C6), 0x3D6 => array(0x3C0), 0x3D8 => array(0x3D9),
0x3DA => array(0x3DB), 0x3DC => array(0x3DD), 0x3DE => array(0x3DF),
0x3E0 => array(0x3E1), 0x3E2 => array(0x3E3), 0x3E4 => array(0x3E5),
0x3E6 => array(0x3E7), 0x3E8 => array(0x3E9), 0x3EA => array(0x3EB),
0x3EC => array(0x3ED), 0x3EE => array(0x3EF), 0x3F0 => array(0x3BA),
0x3F1 => array(0x3C1), 0x3F2 => array(0x3C3), 0x3F4 => array(0x3B8),
0x3F5 => array(0x3B5), 0x400 => array(0x450), 0x401 => array(0x451),
0x402 => array(0x452), 0x403 => array(0x453), 0x404 => array(0x454),
0x405 => array(0x455), 0x406 => array(0x456), 0x407 => array(0x457),
0x408 => array(0x458), 0x409 => array(0x459), 0x40A => array(0x45A),
0x40B => array(0x45B), 0x40C => array(0x45C), 0x40D => array(0x45D),
0x40E => array(0x45E), 0x40F => array(0x45F), 0x410 => array(0x430),
0x411 => array(0x431), 0x412 => array(0x432), 0x413 => array(0x433),
0x414 => array(0x434), 0x415 => array(0x435), 0x416 => array(0x436),
0x417 => array(0x437), 0x418 => array(0x438), 0x419 => array(0x439),
0x41A => array(0x43A), 0x41B => array(0x43B), 0x41C => array(0x43C),
0x41D => array(0x43D), 0x41E => array(0x43E), 0x41F => array(0x43F),
0x420 => array(0x440), 0x421 => array(0x441), 0x422 => array(0x442),
0x423 => array(0x443), 0x424 => array(0x444), 0x425 => array(0x445),
0x426 => array(0x446), 0x427 => array(0x447), 0x428 => array(0x448),
0x429 => array(0x449), 0x42A => array(0x44A), 0x42B => array(0x44B),
0x42C => array(0x44C), 0x42D => array(0x44D), 0x42E => array(0x44E),
0x42F => array(0x44F), 0x460 => array(0x461), 0x462 => array(0x463),
0x464 => array(0x465), 0x466 => array(0x467), 0x468 => array(0x469),
0x46A => array(0x46B), 0x46C => array(0x46D), 0x46E => array(0x46F),
0x470 => array(0x471), 0x472 => array(0x473), 0x474 => array(0x475),
0x476 => array(0x477), 0x478 => array(0x479), 0x47A => array(0x47B),
0x47C => array(0x47D), 0x47E => array(0x47F), 0x480 => array(0x481),
0x48A => array(0x48B), 0x48C => array(0x48D), 0x48E => array(0x48F),
0x490 => array(0x491), 0x492 => array(0x493), 0x494 => array(0x495),
0x496 => array(0x497), 0x498 => array(0x499), 0x49A => array(0x49B),
0x49C => array(0x49D), 0x49E => array(0x49F), 0x4A0 => array(0x4A1),
0x4A2 => array(0x4A3), 0x4A4 => array(0x4A5), 0x4A6 => array(0x4A7),
0x4A8 => array(0x4A9), 0x4AA => array(0x4AB), 0x4AC => array(0x4AD),
0x4AE => array(0x4AF), 0x4B0 => array(0x4B1), 0x4B2 => array(0x4B3),
0x4B4 => array(0x4B5), 0x4B6 => array(0x4B7), 0x4B8 => array(0x4B9),
0x4BA => array(0x4BB), 0x4BC => array(0x4BD), 0x4BE => array(0x4BF),
0x4C1 => array(0x4C2), 0x4C3 => array(0x4C4), 0x4C5 => array(0x4C6),
0x4C7 => array(0x4C8), 0x4C9 => array(0x4CA), 0x4CB => array(0x4CC),
0x4CD => array(0x4CE), 0x4D0 => array(0x4D1), 0x4D2 => array(0x4D3),
0x4D4 => array(0x4D5), 0x4D6 => array(0x4D7), 0x4D8 => array(0x4D9),
0x4DA => array(0x4DB), 0x4DC => array(0x4DD), 0x4DE => array(0x4DF),
0x4E0 => array(0x4E1), 0x4E2 => array(0x4E3), 0x4E4 => array(0x4E5),
0x4E6 => array(0x4E7), 0x4E8 => array(0x4E9), 0x4EA => array(0x4EB),
0x4EC => array(0x4ED), 0x4EE => array(0x4EF), 0x4F0 => array(0x4F1),
0x4F2 => array(0x4F3), 0x4F4 => array(0x4F5), 0x4F8 => array(0x4F9),
0x500 => array(0x501), 0x502 => array(0x503), 0x504 => array(0x505),
0x506 => array(0x507), 0x508 => array(0x509), 0x50A => array(0x50B),
0x50C => array(0x50D), 0x50E => array(0x50F), 0x531 => array(0x561),
0x532 => array(0x562), 0x533 => array(0x563), 0x534 => array(0x564),
0x535 => array(0x565), 0x536 => array(0x566), 0x537 => array(0x567),
0x538 => array(0x568), 0x539 => array(0x569), 0x53A => array(0x56A),
0x53B => array(0x56B), 0x53C => array(0x56C), 0x53D => array(0x56D),
0x53E => array(0x56E), 0x53F => array(0x56F), 0x540 => array(0x570),
0x541 => array(0x571), 0x542 => array(0x572), 0x543 => array(0x573),
0x544 => array(0x574), 0x545 => array(0x575), 0x546 => array(0x576),
0x547 => array(0x577), 0x548 => array(0x578), 0x549 => array(0x579),
0x54A => array(0x57A), 0x54B => array(0x57B), 0x54C => array(0x57C),
0x54D => array(0x57D), 0x54E => array(0x57E), 0x54F => array(0x57F),
0x550 => array(0x580), 0x551 => array(0x581), 0x552 => array(0x582),
0x553 => array(0x583), 0x554 => array(0x584), 0x555 => array(0x585),
0x556 => array(0x586), 0x587 => array(0x565, 0x582), 0xE33 => array(0xE4D, 0xE32),
0x1E00 => array(0x1E01), 0x1E02 => array(0x1E03), 0x1E04 => array(0x1E05),
0x1E06 => array(0x1E07), 0x1E08 => array(0x1E09), 0x1E0A => array(0x1E0B),
0x1E0C => array(0x1E0D), 0x1E0E => array(0x1E0F), 0x1E10 => array(0x1E11),
0x1E12 => array(0x1E13), 0x1E14 => array(0x1E15), 0x1E16 => array(0x1E17),
0x1E18 => array(0x1E19), 0x1E1A => array(0x1E1B), 0x1E1C => array(0x1E1D),
0x1E1E => array(0x1E1F), 0x1E20 => array(0x1E21), 0x1E22 => array(0x1E23),
0x1E24 => array(0x1E25), 0x1E26 => array(0x1E27), 0x1E28 => array(0x1E29),
0x1E2A => array(0x1E2B), 0x1E2C => array(0x1E2D), 0x1E2E => array(0x1E2F),
0x1E30 => array(0x1E31), 0x1E32 => array(0x1E33), 0x1E34 => array(0x1E35),
0x1E36 => array(0x1E37), 0x1E38 => array(0x1E39), 0x1E3A => array(0x1E3B),
0x1E3C => array(0x1E3D), 0x1E3E => array(0x1E3F), 0x1E40 => array(0x1E41),
0x1E42 => array(0x1E43), 0x1E44 => array(0x1E45), 0x1E46 => array(0x1E47),
0x1E48 => array(0x1E49), 0x1E4A => array(0x1E4B), 0x1E4C => array(0x1E4D),
0x1E4E => array(0x1E4F), 0x1E50 => array(0x1E51), 0x1E52 => array(0x1E53),
0x1E54 => array(0x1E55), 0x1E56 => array(0x1E57), 0x1E58 => array(0x1E59),
0x1E5A => array(0x1E5B), 0x1E5C => array(0x1E5D), 0x1E5E => array(0x1E5F),
0x1E60 => array(0x1E61), 0x1E62 => array(0x1E63), 0x1E64 => array(0x1E65),
0x1E66 => array(0x1E67), 0x1E68 => array(0x1E69), 0x1E6A => array(0x1E6B),
0x1E6C => array(0x1E6D), 0x1E6E => array(0x1E6F), 0x1E70 => array(0x1E71),
0x1E72 => array(0x1E73), 0x1E74 => array(0x1E75), 0x1E76 => array(0x1E77),
0x1E78 => array(0x1E79), 0x1E7A => array(0x1E7B), 0x1E7C => array(0x1E7D),
0x1E7E => array(0x1E7F), 0x1E80 => array(0x1E81), 0x1E82 => array(0x1E83),
0x1E84 => array(0x1E85), 0x1E86 => array(0x1E87), 0x1E88 => array(0x1E89),
0x1E8A => array(0x1E8B), 0x1E8C => array(0x1E8D), 0x1E8E => array(0x1E8F),
0x1E90 => array(0x1E91), 0x1E92 => array(0x1E93), 0x1E94 => array(0x1E95),
0x1E96 => array(0x68, 0x331), 0x1E97 => array(0x74, 0x308), 0x1E98 => array(0x77, 0x30A),
0x1E99 => array(0x79, 0x30A), 0x1E9A => array(0x61, 0x2BE), 0x1E9B => array(0x1E61),
0x1EA0 => array(0x1EA1), 0x1EA2 => array(0x1EA3), 0x1EA4 => array(0x1EA5),
0x1EA6 => array(0x1EA7), 0x1EA8 => array(0x1EA9), 0x1EAA => array(0x1EAB),
0x1EAC => array(0x1EAD), 0x1EAE => array(0x1EAF), 0x1EB0 => array(0x1EB1),
0x1EB2 => array(0x1EB3), 0x1EB4 => array(0x1EB5), 0x1EB6 => array(0x1EB7),
0x1EB8 => array(0x1EB9), 0x1EBA => array(0x1EBB), 0x1EBC => array(0x1EBD),
0x1EBE => array(0x1EBF), 0x1EC0 => array(0x1EC1), 0x1EC2 => array(0x1EC3),
0x1EC4 => array(0x1EC5), 0x1EC6 => array(0x1EC7), 0x1EC8 => array(0x1EC9),
0x1ECA => array(0x1ECB), 0x1ECC => array(0x1ECD), 0x1ECE => array(0x1ECF),
0x1ED0 => array(0x1ED1), 0x1ED2 => array(0x1ED3), 0x1ED4 => array(0x1ED5),
0x1ED6 => array(0x1ED7), 0x1ED8 => array(0x1ED9), 0x1EDA => array(0x1EDB),
0x1EDC => array(0x1EDD), 0x1EDE => array(0x1EDF), 0x1EE0 => array(0x1EE1),
0x1EE2 => array(0x1EE3), 0x1EE4 => array(0x1EE5), 0x1EE6 => array(0x1EE7),
0x1EE8 => array(0x1EE9), 0x1EEA => array(0x1EEB), 0x1EEC => array(0x1EED),
0x1EEE => array(0x1EEF), 0x1EF0 => array(0x1EF1), 0x1EF2 => array(0x1EF3),
0x1EF4 => array(0x1EF5), 0x1EF6 => array(0x1EF7), 0x1EF8 => array(0x1EF9),
0x1F08 => array(0x1F00), 0x1F09 => array(0x1F01), 0x1F0A => array(0x1F02),
0x1F0B => array(0x1F03), 0x1F0C => array(0x1F04), 0x1F0D => array(0x1F05),
0x1F0E => array(0x1F06), 0x1F0F => array(0x1F07), 0x1F18 => array(0x1F10),
0x1F19 => array(0x1F11), 0x1F1A => array(0x1F12), 0x1F1B => array(0x1F13),
0x1F1C => array(0x1F14), 0x1F1D => array(0x1F15), 0x1F28 => array(0x1F20),
0x1F29 => array(0x1F21), 0x1F2A => array(0x1F22), 0x1F2B => array(0x1F23),
0x1F2C => array(0x1F24), 0x1F2D => array(0x1F25), 0x1F2E => array(0x1F26),
0x1F2F => array(0x1F27), 0x1F38 => array(0x1F30), 0x1F39 => array(0x1F31),
0x1F3A => array(0x1F32), 0x1F3B => array(0x1F33), 0x1F3C => array(0x1F34),
0x1F3D => array(0x1F35), 0x1F3E => array(0x1F36), 0x1F3F => array(0x1F37),
0x1F48 => array(0x1F40), 0x1F49 => array(0x1F41), 0x1F4A => array(0x1F42),
0x1F4B => array(0x1F43), 0x1F4C => array(0x1F44), 0x1F4D => array(0x1F45),
0x1F50 => array(0x3C5, 0x313), 0x1F52 => array(0x3C5, 0x313, 0x300),
0x1F54 => array(0x3C5, 0x313, 0x301), 0x1F56 => array(0x3C5, 0x313, 0x342),
0x1F59 => array(0x1F51), 0x1F5B => array(0x1F53), 0x1F5D => array(0x1F55),
0x1F5F => array(0x1F57), 0x1F68 => array(0x1F60), 0x1F69 => array(0x1F61),
0x1F6A => array(0x1F62), 0x1F6B => array(0x1F63), 0x1F6C => array(0x1F64),
0x1F6D => array(0x1F65), 0x1F6E => array(0x1F66), 0x1F6F => array(0x1F67),
0x1F80 => array(0x1F00, 0x3B9), 0x1F81 => array(0x1F01, 0x3B9),
0x1F82 => array(0x1F02, 0x3B9), 0x1F83 => array(0x1F03, 0x3B9),
0x1F84 => array(0x1F04, 0x3B9), 0x1F85 => array(0x1F05, 0x3B9),
0x1F86 => array(0x1F06, 0x3B9), 0x1F87 => array(0x1F07, 0x3B9),
0x1F88 => array(0x1F00, 0x3B9), 0x1F89 => array(0x1F01, 0x3B9),
0x1F8A => array(0x1F02, 0x3B9), 0x1F8B => array(0x1F03, 0x3B9),
0x1F8C => array(0x1F04, 0x3B9), 0x1F8D => array(0x1F05, 0x3B9),
0x1F8E => array(0x1F06, 0x3B9), 0x1F8F => array(0x1F07, 0x3B9),
0x1F90 => array(0x1F20, 0x3B9), 0x1F91 => array(0x1F21, 0x3B9),
0x1F92 => array(0x1F22, 0x3B9), 0x1F93 => array(0x1F23, 0x3B9),
0x1F94 => array(0x1F24, 0x3B9), 0x1F95 => array(0x1F25, 0x3B9),
0x1F96 => array(0x1F26, 0x3B9), 0x1F97 => array(0x1F27, 0x3B9),
0x1F98 => array(0x1F20, 0x3B9), 0x1F99 => array(0x1F21, 0x3B9),
0x1F9A => array(0x1F22, 0x3B9), 0x1F9B => array(0x1F23, 0x3B9),
0x1F9C => array(0x1F24, 0x3B9), 0x1F9D => array(0x1F25, 0x3B9),
0x1F9E => array(0x1F26, 0x3B9), 0x1F9F => array(0x1F27, 0x3B9),
0x1FA0 => array(0x1F60, 0x3B9), 0x1FA1 => array(0x1F61, 0x3B9),
0x1FA2 => array(0x1F62, 0x3B9), 0x1FA3 => array(0x1F63, 0x3B9),
0x1FA4 => array(0x1F64, 0x3B9), 0x1FA5 => array(0x1F65, 0x3B9),
0x1FA6 => array(0x1F66, 0x3B9), 0x1FA7 => array(0x1F67, 0x3B9),
0x1FA8 => array(0x1F60, 0x3B9), 0x1FA9 => array(0x1F61, 0x3B9),
0x1FAA => array(0x1F62, 0x3B9), 0x1FAB => array(0x1F63, 0x3B9),
0x1FAC => array(0x1F64, 0x3B9), 0x1FAD => array(0x1F65, 0x3B9),
0x1FAE => array(0x1F66, 0x3B9), 0x1FAF => array(0x1F67, 0x3B9),
0x1FB2 => array(0x1F70, 0x3B9), 0x1FB3 => array(0x3B1, 0x3B9),
0x1FB4 => array(0x3AC, 0x3B9), 0x1FB6 => array(0x3B1, 0x342),
0x1FB7 => array(0x3B1, 0x342, 0x3B9), 0x1FB8 => array(0x1FB0),
0x1FB9 => array(0x1FB1), 0x1FBA => array(0x1F70), 0x1FBB => array(0x1F71),
0x1FBC => array(0x3B1, 0x3B9), 0x1FBE => array(0x3B9),
0x1FC2 => array(0x1F74, 0x3B9), 0x1FC3 => array(0x3B7, 0x3B9),
0x1FC4 => array(0x3AE, 0x3B9), 0x1FC6 => array(0x3B7, 0x342),
0x1FC7 => array(0x3B7, 0x342, 0x3B9), 0x1FC8 => array(0x1F72),
0x1FC9 => array(0x1F73), 0x1FCA => array(0x1F74), 0x1FCB => array(0x1F75),
0x1FCC => array(0x3B7, 0x3B9), 0x1FD2 => array(0x3B9, 0x308, 0x300),
0x1FD3 => array(0x3B9, 0x308, 0x301), 0x1FD6 => array(0x3B9, 0x342),
0x1FD7 => array(0x3B9, 0x308, 0x342), 0x1FD8 => array(0x1FD0),
0x1FD9 => array(0x1FD1), 0x1FDA => array(0x1F76),
0x1FDB => array(0x1F77), 0x1FE2 => array(0x3C5, 0x308, 0x300),
0x1FE3 => array(0x3C5, 0x308, 0x301), 0x1FE4 => array(0x3C1, 0x313),
0x1FE6 => array(0x3C5, 0x342), 0x1FE7 => array(0x3C5, 0x308, 0x342),
0x1FE8 => array(0x1FE0), 0x1FE9 => array(0x1FE1),
0x1FEA => array(0x1F7A), 0x1FEB => array(0x1F7B),
0x1FEC => array(0x1FE5), 0x1FF2 => array(0x1F7C, 0x3B9),
0x1FF3 => array(0x3C9, 0x3B9), 0x1FF4 => array(0x3CE, 0x3B9),
0x1FF6 => array(0x3C9, 0x342), 0x1FF7 => array(0x3C9, 0x342, 0x3B9),
0x1FF8 => array(0x1F78), 0x1FF9 => array(0x1F79), 0x1FFA => array(0x1F7C),
0x1FFB => array(0x1F7D), 0x1FFC => array(0x3C9, 0x3B9),
0x20A8 => array(0x72, 0x73), 0x2102 => array(0x63), 0x2103 => array(0xB0, 0x63),
0x2107 => array(0x25B), 0x2109 => array(0xB0, 0x66), 0x210B => array(0x68),
0x210C => array(0x68), 0x210D => array(0x68), 0x2110 => array(0x69),
0x2111 => array(0x69), 0x2112 => array(0x6C), 0x2115 => array(0x6E),
0x2116 => array(0x6E, 0x6F), 0x2119 => array(0x70), 0x211A => array(0x71),
0x211B => array(0x72), 0x211C => array(0x72), 0x211D => array(0x72),
0x2120 => array(0x73, 0x6D), 0x2121 => array(0x74, 0x65, 0x6C),
0x2122 => array(0x74, 0x6D), 0x2124 => array(0x7A), 0x2126 => array(0x3C9),
0x2128 => array(0x7A), 0x212A => array(0x6B), 0x212B => array(0xE5),
0x212C => array(0x62), 0x212D => array(0x63), 0x2130 => array(0x65),
0x2131 => array(0x66), 0x2133 => array(0x6D), 0x213E => array(0x3B3),
0x213F => array(0x3C0), 0x2145 => array(0x64), 0x2160 => array(0x2170),
0x2161 => array(0x2171), 0x2162 => array(0x2172), 0x2163 => array(0x2173),
0x2164 => array(0x2174), 0x2165 => array(0x2175), 0x2166 => array(0x2176),
0x2167 => array(0x2177), 0x2168 => array(0x2178), 0x2169 => array(0x2179),
0x216A => array(0x217A), 0x216B => array(0x217B), 0x216C => array(0x217C),
0x216D => array(0x217D), 0x216E => array(0x217E), 0x216F => array(0x217F),
0x24B6 => array(0x24D0), 0x24B7 => array(0x24D1), 0x24B8 => array(0x24D2),
0x24B9 => array(0x24D3), 0x24BA => array(0x24D4), 0x24BB => array(0x24D5),
0x24BC => array(0x24D6), 0x24BD => array(0x24D7), 0x24BE => array(0x24D8),
0x24BF => array(0x24D9), 0x24C0 => array(0x24DA), 0x24C1 => array(0x24DB),
0x24C2 => array(0x24DC), 0x24C3 => array(0x24DD), 0x24C4 => array(0x24DE),
0x24C5 => array(0x24DF), 0x24C6 => array(0x24E0), 0x24C7 => array(0x24E1),
0x24C8 => array(0x24E2), 0x24C9 => array(0x24E3), 0x24CA => array(0x24E4),
0x24CB => array(0x24E5), 0x24CC => array(0x24E6), 0x24CD => array(0x24E7),
0x24CE => array(0x24E8), 0x24CF => array(0x24E9), 0x3371 => array(0x68, 0x70, 0x61),
0x3373 => array(0x61, 0x75), 0x3375 => array(0x6F, 0x76),
0x3380 => array(0x70, 0x61), 0x3381 => array(0x6E, 0x61),
0x3382 => array(0x3BC, 0x61), 0x3383 => array(0x6D, 0x61),
0x3384 => array(0x6B, 0x61), 0x3385 => array(0x6B, 0x62),
0x3386 => array(0x6D, 0x62), 0x3387 => array(0x67, 0x62),
0x338A => array(0x70, 0x66), 0x338B => array(0x6E, 0x66),
0x338C => array(0x3BC, 0x66), 0x3390 => array(0x68, 0x7A),
0x3391 => array(0x6B, 0x68, 0x7A), 0x3392 => array(0x6D, 0x68, 0x7A),
0x3393 => array(0x67, 0x68, 0x7A), 0x3394 => array(0x74, 0x68, 0x7A),
0x33A9 => array(0x70, 0x61), 0x33AA => array(0x6B, 0x70, 0x61),
0x33AB => array(0x6D, 0x70, 0x61), 0x33AC => array(0x67, 0x70, 0x61),
0x33B4 => array(0x70, 0x76), 0x33B5 => array(0x6E, 0x76),
0x33B6 => array(0x3BC, 0x76), 0x33B7 => array(0x6D, 0x76),
0x33B8 => array(0x6B, 0x76), 0x33B9 => array(0x6D, 0x76),
0x33BA => array(0x70, 0x77), 0x33BB => array(0x6E, 0x77),
0x33BC => array(0x3BC, 0x77), 0x33BD => array(0x6D, 0x77),
0x33BE => array(0x6B, 0x77), 0x33BF => array(0x6D, 0x77),
0x33C0 => array(0x6B, 0x3C9), 0x33C1 => array(0x6D, 0x3C9), /*
0x33C2 => array(0x61, 0x2E, 0x6D, 0x2E), */
0x33C3 => array(0x62, 0x71), 0x33C6 => array(0x63, 0x2215, 0x6B, 0x67),
0x33C7 => array(0x63, 0x6F, 0x2E), 0x33C8 => array(0x64, 0x62),
0x33C9 => array(0x67, 0x79), 0x33CB => array(0x68, 0x70),
0x33CD => array(0x6B, 0x6B), 0x33CE => array(0x6B, 0x6D),
0x33D7 => array(0x70, 0x68), 0x33D9 => array(0x70, 0x70, 0x6D),
0x33DA => array(0x70, 0x72), 0x33DC => array(0x73, 0x76),
0x33DD => array(0x77, 0x62), 0xFB00 => array(0x66, 0x66),
0xFB01 => array(0x66, 0x69), 0xFB02 => array(0x66, 0x6C),
0xFB03 => array(0x66, 0x66, 0x69), 0xFB04 => array(0x66, 0x66, 0x6C),
0xFB05 => array(0x73, 0x74), 0xFB06 => array(0x73, 0x74),
0xFB13 => array(0x574, 0x576), 0xFB14 => array(0x574, 0x565),
0xFB15 => array(0x574, 0x56B), 0xFB16 => array(0x57E, 0x576),
0xFB17 => array(0x574, 0x56D), 0xFF21 => array(0xFF41),
0xFF22 => array(0xFF42), 0xFF23 => array(0xFF43), 0xFF24 => array(0xFF44),
0xFF25 => array(0xFF45), 0xFF26 => array(0xFF46), 0xFF27 => array(0xFF47),
0xFF28 => array(0xFF48), 0xFF29 => array(0xFF49), 0xFF2A => array(0xFF4A),
0xFF2B => array(0xFF4B), 0xFF2C => array(0xFF4C), 0xFF2D => array(0xFF4D),
0xFF2E => array(0xFF4E), 0xFF2F => array(0xFF4F), 0xFF30 => array(0xFF50),
0xFF31 => array(0xFF51), 0xFF32 => array(0xFF52), 0xFF33 => array(0xFF53),
0xFF34 => array(0xFF54), 0xFF35 => array(0xFF55), 0xFF36 => array(0xFF56),
0xFF37 => array(0xFF57), 0xFF38 => array(0xFF58), 0xFF39 => array(0xFF59),
0xFF3A => array(0xFF5A), 0x10400 => array(0x10428), 0x10401 => array(0x10429),
0x10402 => array(0x1042A), 0x10403 => array(0x1042B), 0x10404 => array(0x1042C),
0x10405 => array(0x1042D), 0x10406 => array(0x1042E), 0x10407 => array(0x1042F),
0x10408 => array(0x10430), 0x10409 => array(0x10431), 0x1040A => array(0x10432),
0x1040B => array(0x10433), 0x1040C => array(0x10434), 0x1040D => array(0x10435),
0x1040E => array(0x10436), 0x1040F => array(0x10437), 0x10410 => array(0x10438),
0x10411 => array(0x10439), 0x10412 => array(0x1043A), 0x10413 => array(0x1043B),
0x10414 => array(0x1043C), 0x10415 => array(0x1043D), 0x10416 => array(0x1043E),
0x10417 => array(0x1043F), 0x10418 => array(0x10440), 0x10419 => array(0x10441),
0x1041A => array(0x10442), 0x1041B => array(0x10443), 0x1041C => array(0x10444),
0x1041D => array(0x10445), 0x1041E => array(0x10446), 0x1041F => array(0x10447),
0x10420 => array(0x10448), 0x10421 => array(0x10449), 0x10422 => array(0x1044A),
0x10423 => array(0x1044B), 0x10424 => array(0x1044C), 0x10425 => array(0x1044D),
0x1D400 => array(0x61), 0x1D401 => array(0x62), 0x1D402 => array(0x63),
0x1D403 => array(0x64), 0x1D404 => array(0x65), 0x1D405 => array(0x66),
0x1D406 => array(0x67), 0x1D407 => array(0x68), 0x1D408 => array(0x69),
0x1D409 => array(0x6A), 0x1D40A => array(0x6B), 0x1D40B => array(0x6C),
0x1D40C => array(0x6D), 0x1D40D => array(0x6E), 0x1D40E => array(0x6F),
0x1D40F => array(0x70), 0x1D410 => array(0x71), 0x1D411 => array(0x72),
0x1D412 => array(0x73), 0x1D413 => array(0x74), 0x1D414 => array(0x75),
0x1D415 => array(0x76), 0x1D416 => array(0x77), 0x1D417 => array(0x78),
0x1D418 => array(0x79), 0x1D419 => array(0x7A), 0x1D434 => array(0x61),
0x1D435 => array(0x62), 0x1D436 => array(0x63), 0x1D437 => array(0x64),
0x1D438 => array(0x65), 0x1D439 => array(0x66), 0x1D43A => array(0x67),
0x1D43B => array(0x68), 0x1D43C => array(0x69), 0x1D43D => array(0x6A),
0x1D43E => array(0x6B), 0x1D43F => array(0x6C), 0x1D440 => array(0x6D),
0x1D441 => array(0x6E), 0x1D442 => array(0x6F), 0x1D443 => array(0x70),
0x1D444 => array(0x71), 0x1D445 => array(0x72), 0x1D446 => array(0x73),
0x1D447 => array(0x74), 0x1D448 => array(0x75), 0x1D449 => array(0x76),
0x1D44A => array(0x77), 0x1D44B => array(0x78), 0x1D44C => array(0x79),
0x1D44D => array(0x7A), 0x1D468 => array(0x61), 0x1D469 => array(0x62),
0x1D46A => array(0x63), 0x1D46B => array(0x64), 0x1D46C => array(0x65),
0x1D46D => array(0x66), 0x1D46E => array(0x67), 0x1D46F => array(0x68),
0x1D470 => array(0x69), 0x1D471 => array(0x6A), 0x1D472 => array(0x6B),
0x1D473 => array(0x6C), 0x1D474 => array(0x6D), 0x1D475 => array(0x6E),
0x1D476 => array(0x6F), 0x1D477 => array(0x70), 0x1D478 => array(0x71),
0x1D479 => array(0x72), 0x1D47A => array(0x73), 0x1D47B => array(0x74),
0x1D47C => array(0x75), 0x1D47D => array(0x76), 0x1D47E => array(0x77),
0x1D47F => array(0x78), 0x1D480 => array(0x79), 0x1D481 => array(0x7A),
0x1D49C => array(0x61), 0x1D49E => array(0x63), 0x1D49F => array(0x64),
0x1D4A2 => array(0x67), 0x1D4A5 => array(0x6A), 0x1D4A6 => array(0x6B),
0x1D4A9 => array(0x6E), 0x1D4AA => array(0x6F), 0x1D4AB => array(0x70),
0x1D4AC => array(0x71), 0x1D4AE => array(0x73), 0x1D4AF => array(0x74),
0x1D4B0 => array(0x75), 0x1D4B1 => array(0x76), 0x1D4B2 => array(0x77),
0x1D4B3 => array(0x78), 0x1D4B4 => array(0x79), 0x1D4B5 => array(0x7A),
0x1D4D0 => array(0x61), 0x1D4D1 => array(0x62), 0x1D4D2 => array(0x63),
0x1D4D3 => array(0x64), 0x1D4D4 => array(0x65), 0x1D4D5 => array(0x66),
0x1D4D6 => array(0x67), 0x1D4D7 => array(0x68), 0x1D4D8 => array(0x69),
0x1D4D9 => array(0x6A), 0x1D4DA => array(0x6B), 0x1D4DB => array(0x6C),
0x1D4DC => array(0x6D), 0x1D4DD => array(0x6E), 0x1D4DE => array(0x6F),
0x1D4DF => array(0x70), 0x1D4E0 => array(0x71), 0x1D4E1 => array(0x72),
0x1D4E2 => array(0x73), 0x1D4E3 => array(0x74), 0x1D4E4 => array(0x75),
0x1D4E5 => array(0x76), 0x1D4E6 => array(0x77), 0x1D4E7 => array(0x78),
0x1D4E8 => array(0x79), 0x1D4E9 => array(0x7A), 0x1D504 => array(0x61),
0x1D505 => array(0x62), 0x1D507 => array(0x64), 0x1D508 => array(0x65),
0x1D509 => array(0x66), 0x1D50A => array(0x67), 0x1D50D => array(0x6A),
0x1D50E => array(0x6B), 0x1D50F => array(0x6C), 0x1D510 => array(0x6D),
0x1D511 => array(0x6E), 0x1D512 => array(0x6F), 0x1D513 => array(0x70),
0x1D514 => array(0x71), 0x1D516 => array(0x73), 0x1D517 => array(0x74),
0x1D518 => array(0x75), 0x1D519 => array(0x76), 0x1D51A => array(0x77),
0x1D51B => array(0x78), 0x1D51C => array(0x79), 0x1D538 => array(0x61),
0x1D539 => array(0x62), 0x1D53B => array(0x64), 0x1D53C => array(0x65),
0x1D53D => array(0x66), 0x1D53E => array(0x67), 0x1D540 => array(0x69),
0x1D541 => array(0x6A), 0x1D542 => array(0x6B), 0x1D543 => array(0x6C),
0x1D544 => array(0x6D), 0x1D546 => array(0x6F), 0x1D54A => array(0x73),
0x1D54B => array(0x74), 0x1D54C => array(0x75), 0x1D54D => array(0x76),
0x1D54E => array(0x77), 0x1D54F => array(0x78), 0x1D550 => array(0x79),
0x1D56C => array(0x61), 0x1D56D => array(0x62), 0x1D56E => array(0x63),
0x1D56F => array(0x64), 0x1D570 => array(0x65), 0x1D571 => array(0x66),
0x1D572 => array(0x67), 0x1D573 => array(0x68), 0x1D574 => array(0x69),
0x1D575 => array(0x6A), 0x1D576 => array(0x6B), 0x1D577 => array(0x6C),
0x1D578 => array(0x6D), 0x1D579 => array(0x6E), 0x1D57A => array(0x6F),
0x1D57B => array(0x70), 0x1D57C => array(0x71), 0x1D57D => array(0x72),
0x1D57E => array(0x73), 0x1D57F => array(0x74), 0x1D580 => array(0x75),
0x1D581 => array(0x76), 0x1D582 => array(0x77), 0x1D583 => array(0x78),
0x1D584 => array(0x79), 0x1D585 => array(0x7A), 0x1D5A0 => array(0x61),
0x1D5A1 => array(0x62), 0x1D5A2 => array(0x63), 0x1D5A3 => array(0x64),
0x1D5A4 => array(0x65), 0x1D5A5 => array(0x66), 0x1D5A6 => array(0x67),
0x1D5A7 => array(0x68), 0x1D5A8 => array(0x69), 0x1D5A9 => array(0x6A),
0x1D5AA => array(0x6B), 0x1D5AB => array(0x6C), 0x1D5AC => array(0x6D),
0x1D5AD => array(0x6E), 0x1D5AE => array(0x6F), 0x1D5AF => array(0x70),
0x1D5B0 => array(0x71), 0x1D5B1 => array(0x72), 0x1D5B2 => array(0x73),
0x1D5B3 => array(0x74), 0x1D5B4 => array(0x75), 0x1D5B5 => array(0x76),
0x1D5B6 => array(0x77), 0x1D5B7 => array(0x78), 0x1D5B8 => array(0x79),
0x1D5B9 => array(0x7A), 0x1D5D4 => array(0x61), 0x1D5D5 => array(0x62),
0x1D5D6 => array(0x63), 0x1D5D7 => array(0x64), 0x1D5D8 => array(0x65),
0x1D5D9 => array(0x66), 0x1D5DA => array(0x67), 0x1D5DB => array(0x68),
0x1D5DC => array(0x69), 0x1D5DD => array(0x6A), 0x1D5DE => array(0x6B),
0x1D5DF => array(0x6C), 0x1D5E0 => array(0x6D), 0x1D5E1 => array(0x6E),
0x1D5E2 => array(0x6F), 0x1D5E3 => array(0x70), 0x1D5E4 => array(0x71),
0x1D5E5 => array(0x72), 0x1D5E6 => array(0x73), 0x1D5E7 => array(0x74),
0x1D5E8 => array(0x75), 0x1D5E9 => array(0x76), 0x1D5EA => array(0x77),
0x1D5EB => array(0x78), 0x1D5EC => array(0x79), 0x1D5ED => array(0x7A),
0x1D608 => array(0x61), 0x1D609 => array(0x62), 0x1D60A => array(0x63),
0x1D60B => array(0x64), 0x1D60C => array(0x65), 0x1D60D => array(0x66),
0x1D60E => array(0x67), 0x1D60F => array(0x68), 0x1D610 => array(0x69),
0x1D611 => array(0x6A), 0x1D612 => array(0x6B), 0x1D613 => array(0x6C),
0x1D614 => array(0x6D), 0x1D615 => array(0x6E), 0x1D616 => array(0x6F),
0x1D617 => array(0x70), 0x1D618 => array(0x71), 0x1D619 => array(0x72),
0x1D61A => array(0x73), 0x1D61B => array(0x74), 0x1D61C => array(0x75),
0x1D61D => array(0x76), 0x1D61E => array(0x77), 0x1D61F => array(0x78),
0x1D620 => array(0x79), 0x1D621 => array(0x7A), 0x1D63C => array(0x61),
0x1D63D => array(0x62), 0x1D63E => array(0x63), 0x1D63F => array(0x64),
0x1D640 => array(0x65), 0x1D641 => array(0x66), 0x1D642 => array(0x67),
0x1D643 => array(0x68), 0x1D644 => array(0x69), 0x1D645 => array(0x6A),
0x1D646 => array(0x6B), 0x1D647 => array(0x6C), 0x1D648 => array(0x6D),
0x1D649 => array(0x6E), 0x1D64A => array(0x6F), 0x1D64B => array(0x70),
0x1D64C => array(0x71), 0x1D64D => array(0x72), 0x1D64E => array(0x73),
0x1D64F => array(0x74), 0x1D650 => array(0x75), 0x1D651 => array(0x76),
0x1D652 => array(0x77), 0x1D653 => array(0x78), 0x1D654 => array(0x79),
0x1D655 => array(0x7A), 0x1D670 => array(0x61), 0x1D671 => array(0x62),
0x1D672 => array(0x63), 0x1D673 => array(0x64), 0x1D674 => array(0x65),
0x1D675 => array(0x66), 0x1D676 => array(0x67), 0x1D677 => array(0x68),
0x1D678 => array(0x69), 0x1D679 => array(0x6A), 0x1D67A => array(0x6B),
0x1D67B => array(0x6C), 0x1D67C => array(0x6D), 0x1D67D => array(0x6E),
0x1D67E => array(0x6F), 0x1D67F => array(0x70), 0x1D680 => array(0x71),
0x1D681 => array(0x72), 0x1D682 => array(0x73), 0x1D683 => array(0x74),
0x1D684 => array(0x75), 0x1D685 => array(0x76), 0x1D686 => array(0x77),
0x1D687 => array(0x78), 0x1D688 => array(0x79), 0x1D689 => array(0x7A),
0x1D6A8 => array(0x3B1), 0x1D6A9 => array(0x3B2), 0x1D6AA => array(0x3B3),
0x1D6AB => array(0x3B4), 0x1D6AC => array(0x3B5), 0x1D6AD => array(0x3B6),
0x1D6AE => array(0x3B7), 0x1D6AF => array(0x3B8), 0x1D6B0 => array(0x3B9),
0x1D6B1 => array(0x3BA), 0x1D6B2 => array(0x3BB), 0x1D6B3 => array(0x3BC),
0x1D6B4 => array(0x3BD), 0x1D6B5 => array(0x3BE), 0x1D6B6 => array(0x3BF),
0x1D6B7 => array(0x3C0), 0x1D6B8 => array(0x3C1), 0x1D6B9 => array(0x3B8),
0x1D6BA => array(0x3C3), 0x1D6BB => array(0x3C4), 0x1D6BC => array(0x3C5),
0x1D6BD => array(0x3C6), 0x1D6BE => array(0x3C7), 0x1D6BF => array(0x3C8),
0x1D6C0 => array(0x3C9), 0x1D6D3 => array(0x3C3), 0x1D6E2 => array(0x3B1),
0x1D6E3 => array(0x3B2), 0x1D6E4 => array(0x3B3), 0x1D6E5 => array(0x3B4),
0x1D6E6 => array(0x3B5), 0x1D6E7 => array(0x3B6), 0x1D6E8 => array(0x3B7),
0x1D6E9 => array(0x3B8), 0x1D6EA => array(0x3B9), 0x1D6EB => array(0x3BA),
0x1D6EC => array(0x3BB), 0x1D6ED => array(0x3BC), 0x1D6EE => array(0x3BD),
0x1D6EF => array(0x3BE), 0x1D6F0 => array(0x3BF), 0x1D6F1 => array(0x3C0),
0x1D6F2 => array(0x3C1), 0x1D6F3 => array(0x3B8), 0x1D6F4 => array(0x3C3),
0x1D6F5 => array(0x3C4), 0x1D6F6 => array(0x3C5), 0x1D6F7 => array(0x3C6),
0x1D6F8 => array(0x3C7), 0x1D6F9 => array(0x3C8), 0x1D6FA => array(0x3C9),
0x1D70D => array(0x3C3), 0x1D71C => array(0x3B1), 0x1D71D => array(0x3B2),
0x1D71E => array(0x3B3), 0x1D71F => array(0x3B4), 0x1D720 => array(0x3B5),
0x1D721 => array(0x3B6), 0x1D722 => array(0x3B7), 0x1D723 => array(0x3B8),
0x1D724 => array(0x3B9), 0x1D725 => array(0x3BA), 0x1D726 => array(0x3BB),
0x1D727 => array(0x3BC), 0x1D728 => array(0x3BD), 0x1D729 => array(0x3BE),
0x1D72A => array(0x3BF), 0x1D72B => array(0x3C0), 0x1D72C => array(0x3C1),
0x1D72D => array(0x3B8), 0x1D72E => array(0x3C3), 0x1D72F => array(0x3C4),
0x1D730 => array(0x3C5), 0x1D731 => array(0x3C6), 0x1D732 => array(0x3C7),
0x1D733 => array(0x3C8), 0x1D734 => array(0x3C9), 0x1D747 => array(0x3C3),
0x1D756 => array(0x3B1), 0x1D757 => array(0x3B2), 0x1D758 => array(0x3B3),
0x1D759 => array(0x3B4), 0x1D75A => array(0x3B5), 0x1D75B => array(0x3B6),
0x1D75C => array(0x3B7), 0x1D75D => array(0x3B8), 0x1D75E => array(0x3B9),
0x1D75F => array(0x3BA), 0x1D760 => array(0x3BB), 0x1D761 => array(0x3BC),
0x1D762 => array(0x3BD), 0x1D763 => array(0x3BE), 0x1D764 => array(0x3BF),
0x1D765 => array(0x3C0), 0x1D766 => array(0x3C1), 0x1D767 => array(0x3B8),
0x1D768 => array(0x3C3), 0x1D769 => array(0x3C4), 0x1D76A => array(0x3C5),
0x1D76B => array(0x3C6), 0x1D76C => array(0x3C7), 0x1D76D => array(0x3C8),
0x1D76E => array(0x3C9), 0x1D781 => array(0x3C3), 0x1D790 => array(0x3B1),
0x1D791 => array(0x3B2), 0x1D792 => array(0x3B3), 0x1D793 => array(0x3B4),
0x1D794 => array(0x3B5), 0x1D795 => array(0x3B6), 0x1D796 => array(0x3B7),
0x1D797 => array(0x3B8), 0x1D798 => array(0x3B9), 0x1D799 => array(0x3BA),
0x1D79A => array(0x3BB), 0x1D79B => array(0x3BC), 0x1D79C => array(0x3BD),
0x1D79D => array(0x3BE), 0x1D79E => array(0x3BF), 0x1D79F => array(0x3C0),
0x1D7A0 => array(0x3C1), 0x1D7A1 => array(0x3B8), 0x1D7A2 => array(0x3C3),
0x1D7A3 => array(0x3C4), 0x1D7A4 => array(0x3C5), 0x1D7A5 => array(0x3C6),
0x1D7A6 => array(0x3C7), 0x1D7A7 => array(0x3C8), 0x1D7A8 => array(0x3C9),
0x1D7BB => array(0x3C3), 0x3F9 => array(0x3C3), 0x1D2C => array(0x61),
0x1D2D => array(0xE6), 0x1D2E => array(0x62), 0x1D30 => array(0x64),
0x1D31 => array(0x65), 0x1D32 => array(0x1DD), 0x1D33 => array(0x67),
0x1D34 => array(0x68), 0x1D35 => array(0x69), 0x1D36 => array(0x6A),
0x1D37 => array(0x6B), 0x1D38 => array(0x6C), 0x1D39 => array(0x6D),
0x1D3A => array(0x6E), 0x1D3C => array(0x6F), 0x1D3D => array(0x223),
0x1D3E => array(0x70), 0x1D3F => array(0x72), 0x1D40 => array(0x74),
0x1D41 => array(0x75), 0x1D42 => array(0x77), 0x213B => array(0x66, 0x61, 0x78),
0x3250 => array(0x70, 0x74, 0x65), 0x32CC => array(0x68, 0x67),
0x32CE => array(0x65, 0x76), 0x32CF => array(0x6C, 0x74, 0x64),
0x337A => array(0x69, 0x75), 0x33DE => array(0x76, 0x2215, 0x6D),
0x33DF => array(0x61, 0x2215, 0x6D)
),
'replacemaps' => array(0x41 => array(0x61), 0x42 => array(0x62), 0x43 => array(0x63),
0x44 => array(0x64), 0x45 => array(0x65), 0x46 => array(0x66),
0x47 => array(0x67), 0x48 => array(0x68), 0x49 => array(0x69),
0x4A => array(0x6A), 0x4B => array(0x6B), 0x4C => array(0x6C),
0x4D => array(0x6D), 0x4E => array(0x6E), 0x4F => array(0x6F),
0x50 => array(0x70), 0x51 => array(0x71), 0x52 => array(0x72),
0x53 => array(0x73), 0x54 => array(0x74), 0x55 => array(0x75),
0x56 => array(0x76), 0x57 => array(0x77), 0x58 => array(0x78),
0x59 => array(0x79), 0x5A => array(0x7A), 0xAA => array(0x61),
0xB2 => array(0x32), 0xB3 => array(0x33), 0xB5 => array(0x3BC),
0xB9 => array(0x31), 0xBA => array(0x6F), 0xBC => array(0x31, 0x2044, 0x34),
0xBD => array(0x31, 0x2044, 0x32), 0xBE => array(0x33, 0x2044, 0x34), 0xC0 => array(0xE0),
0xC1 => array(0xE1), 0xC2 => array(0xE2), 0xC3 => array(0xE3),
0xC4 => array(0xE4), 0xC5 => array(0xE5), 0xC6 => array(0xE6),
0xC7 => array(0xE7), 0xC8 => array(0xE8), 0xC9 => array(0xE9),
0xCA => array(0xEA), 0xCB => array(0xEB), 0xCC => array(0xEC),
0xCD => array(0xED), 0xCE => array(0xEE), 0xCF => array(0xEF),
0xD0 => array(0xF0), 0xD1 => array(0xF1), 0xD2 => array(0xF2),
0xD3 => array(0xF3), 0xD4 => array(0xF4), 0xD5 => array(0xF5),
0xD6 => array(0xF6), 0xD8 => array(0xF8), 0xD9 => array(0xF9),
0xDA => array(0xFA), 0xDB => array(0xFB), 0xDC => array(0xFC),
0xDD => array(0xFD), 0xDE => array(0xFE), 0x100 => array(0x101),
0x102 => array(0x103), 0x104 => array(0x105), 0x106 => array(0x107),
0x108 => array(0x109), 0x10A => array(0x10B), 0x10C => array(0x10D),
0x10E => array(0x10F), 0x110 => array(0x111), 0x112 => array(0x113),
0x114 => array(0x115), 0x116 => array(0x117), 0x118 => array(0x119),
0x11A => array(0x11B), 0x11C => array(0x11D), 0x11E => array(0x11F),
0x120 => array(0x121), 0x122 => array(0x123), 0x124 => array(0x125),
0x126 => array(0x127), 0x128 => array(0x129), 0x12A => array(0x12B),
0x12C => array(0x12D), 0x12E => array(0x12F), 0x130 => array(0x69, 0x307),
0x132 => array(0x69, 0x6A), 0x133 => array(0x69, 0x6A), 0x134 => array(0x135),
0x136 => array(0x137), 0x139 => array(0x13A), 0x13B => array(0x13C),
0x13D => array(0x13E), 0x13F => array(0x6C, 0xB7), 0x140 => array(0x6C, 0xB7),
0x141 => array(0x142), 0x143 => array(0x144), 0x145 => array(0x146),
0x147 => array(0x148), 0x149 => array(0x2BC, 0x6E), 0x14A => array(0x14B),
0x14C => array(0x14D), 0x14E => array(0x14F), 0x150 => array(0x151),
0x152 => array(0x153), 0x154 => array(0x155), 0x156 => array(0x157),
0x158 => array(0x159), 0x15A => array(0x15B), 0x15C => array(0x15D),
0x15E => array(0x15F), 0x160 => array(0x161), 0x162 => array(0x163),
0x164 => array(0x165), 0x166 => array(0x167), 0x168 => array(0x169),
0x16A => array(0x16B), 0x16C => array(0x16D), 0x16E => array(0x16F),
0x170 => array(0x171), 0x172 => array(0x173), 0x174 => array(0x175),
0x176 => array(0x177), 0x178 => array(0xFF), 0x179 => array(0x17A),
0x17B => array(0x17C), 0x17D => array(0x17E), 0x17F => array(0x73),
0x181 => array(0x253), 0x182 => array(0x183), 0x184 => array(0x185),
0x186 => array(0x254), 0x187 => array(0x188), 0x189 => array(0x256),
0x18A => array(0x257), 0x18B => array(0x18C), 0x18E => array(0x1DD),
0x18F => array(0x259), 0x190 => array(0x25B), 0x191 => array(0x192),
0x193 => array(0x260), 0x194 => array(0x263), 0x196 => array(0x269),
0x197 => array(0x268), 0x198 => array(0x199), 0x19C => array(0x26F),
0x19D => array(0x272), 0x19F => array(0x275), 0x1A0 => array(0x1A1),
0x1A2 => array(0x1A3), 0x1A4 => array(0x1A5), 0x1A6 => array(0x280),
0x1A7 => array(0x1A8), 0x1A9 => array(0x283), 0x1AC => array(0x1AD),
0x1AE => array(0x288), 0x1AF => array(0x1B0), 0x1B1 => array(0x28A),
0x1B2 => array(0x28B), 0x1B3 => array(0x1B4), 0x1B5 => array(0x1B6),
0x1B7 => array(0x292), 0x1B8 => array(0x1B9), 0x1BC => array(0x1BD),
0x1C4 => array(0x64, 0x17E), 0x1C5 => array(0x64, 0x17E), 0x1C6 => array(0x64, 0x17E),
0x1C7 => array(0x6C, 0x6A), 0x1C8 => array(0x6C, 0x6A), 0x1C9 => array(0x6C, 0x6A),
0x1CA => array(0x6E, 0x6A), 0x1CB => array(0x6E, 0x6A), 0x1CC => array(0x6E, 0x6A),
0x1CD => array(0x1CE), 0x1CF => array(0x1D0), 0x1D1 => array(0x1D2),
0x1D3 => array(0x1D4), 0x1D5 => array(0x1D6), 0x1D7 => array(0x1D8),
0x1D9 => array(0x1DA), 0x1DB => array(0x1DC), 0x1DE => array(0x1DF),
0x1E0 => array(0x1E1), 0x1E2 => array(0x1E3), 0x1E4 => array(0x1E5),
0x1E6 => array(0x1E7), 0x1E8 => array(0x1E9), 0x1EA => array(0x1EB),
0x1EC => array(0x1ED), 0x1EE => array(0x1EF), 0x1F1 => array(0x64, 0x7A),
0x1F2 => array(0x64, 0x7A), 0x1F3 => array(0x64, 0x7A), 0x1F4 => array(0x1F5),
0x1F6 => array(0x195), 0x1F7 => array(0x1BF), 0x1F8 => array(0x1F9),
0x1FA => array(0x1FB), 0x1FC => array(0x1FD), 0x1FE => array(0x1FF),
0x200 => array(0x201), 0x202 => array(0x203), 0x204 => array(0x205),
0x206 => array(0x207), 0x208 => array(0x209), 0x20A => array(0x20B),
0x20C => array(0x20D), 0x20E => array(0x20F), 0x210 => array(0x211),
0x212 => array(0x213), 0x214 => array(0x215), 0x216 => array(0x217),
0x218 => array(0x219), 0x21A => array(0x21B), 0x21C => array(0x21D),
0x21E => array(0x21F), 0x220 => array(0x19E), 0x222 => array(0x223),
0x224 => array(0x225), 0x226 => array(0x227), 0x228 => array(0x229),
0x22A => array(0x22B), 0x22C => array(0x22D), 0x22E => array(0x22F),
0x230 => array(0x231), 0x232 => array(0x233), 0x23A => array(0x2C65),
0x23B => array(0x23C), 0x23D => array(0x19A), 0x23E => array(0x2C66),
0x241 => array(0x242), 0x243 => array(0x180), 0x244 => array(0x289),
0x245 => array(0x28C), 0x246 => array(0x247), 0x248 => array(0x249),
0x24A => array(0x24B), 0x24C => array(0x24D), 0x24E => array(0x24F),
0x2B0 => array(0x68), 0x2B1 => array(0x266), 0x2B2 => array(0x6A),
0x2B3 => array(0x72), 0x2B4 => array(0x279), 0x2B5 => array(0x27B),
0x2B6 => array(0x281), 0x2B7 => array(0x77), 0x2B8 => array(0x79),
0x2E0 => array(0x263), 0x2E1 => array(0x6C), 0x2E2 => array(0x73),
0x2E3 => array(0x78), 0x2E4 => array(0x295), 0x340 => array(0x300),
0x341 => array(0x301), 0x343 => array(0x313), 0x344 => array(0x308, 0x301),
0x345 => array(0x3B9), 0x370 => array(0x371), 0x372 => array(0x373),
0x374 => array(0x2B9), 0x376 => array(0x377), 0x37F => array(0x3F3),
0x386 => array(0x3AC), 0x387 => array(0xB7), 0x388 => array(0x3AD),
0x389 => array(0x3AE), 0x38A => array(0x3AF), 0x38C => array(0x3CC),
0x38E => array(0x3CD), 0x38F => array(0x3CE), 0x391 => array(0x3B1),
0x392 => array(0x3B2), 0x393 => array(0x3B3), 0x394 => array(0x3B4),
0x395 => array(0x3B5), 0x396 => array(0x3B6), 0x397 => array(0x3B7),
0x398 => array(0x3B8), 0x399 => array(0x3B9), 0x39A => array(0x3BA),
0x39B => array(0x3BB), 0x39C => array(0x3BC), 0x39D => array(0x3BD),
0x39E => array(0x3BE), 0x39F => array(0x3BF), 0x3A0 => array(0x3C0),
0x3A1 => array(0x3C1), 0x3A3 => array(0x3C3), 0x3A4 => array(0x3C4),
0x3A5 => array(0x3C5), 0x3A6 => array(0x3C6), 0x3A7 => array(0x3C7),
0x3A8 => array(0x3C8), 0x3A9 => array(0x3C9), 0x3AA => array(0x3CA),
0x3AB => array(0x3CB), 0x3CF => array(0x3D7), 0x3D0 => array(0x3B2),
0x3D1 => array(0x3B8), 0x3D2 => array(0x3C5), 0x3D3 => array(0x3CD),
0x3D4 => array(0x3CB), 0x3D5 => array(0x3C6), 0x3D6 => array(0x3C0),
0x3D8 => array(0x3D9), 0x3DA => array(0x3DB), 0x3DC => array(0x3DD),
0x3DE => array(0x3DF), 0x3E0 => array(0x3E1), 0x3E2 => array(0x3E3),
0x3E4 => array(0x3E5), 0x3E6 => array(0x3E7), 0x3E8 => array(0x3E9),
0x3EA => array(0x3EB), 0x3EC => array(0x3ED), 0x3EE => array(0x3EF),
0x3F0 => array(0x3BA), 0x3F1 => array(0x3C1), 0x3F2 => array(0x3C3),
0x3F4 => array(0x3B8), 0x3F5 => array(0x3B5), 0x3F7 => array(0x3F8),
0x3F9 => array(0x3C3), 0x3FA => array(0x3FB), 0x3FD => array(0x37B),
0x3FE => array(0x37C), 0x3FF => array(0x37D), 0x400 => array(0x450),
0x401 => array(0x451), 0x402 => array(0x452), 0x403 => array(0x453),
0x404 => array(0x454), 0x405 => array(0x455), 0x406 => array(0x456),
0x407 => array(0x457), 0x408 => array(0x458), 0x409 => array(0x459),
0x40A => array(0x45A), 0x40B => array(0x45B), 0x40C => array(0x45C),
0x40D => array(0x45D), 0x40E => array(0x45E), 0x40F => array(0x45F),
0x410 => array(0x430), 0x411 => array(0x431), 0x412 => array(0x432),
0x413 => array(0x433), 0x414 => array(0x434), 0x415 => array(0x435),
0x416 => array(0x436), 0x417 => array(0x437), 0x418 => array(0x438),
0x419 => array(0x439), 0x41A => array(0x43A), 0x41B => array(0x43B),
0x41C => array(0x43C), 0x41D => array(0x43D), 0x41E => array(0x43E),
0x41F => array(0x43F), 0x420 => array(0x440), 0x421 => array(0x441),
0x422 => array(0x442), 0x423 => array(0x443), 0x424 => array(0x444),
0x425 => array(0x445), 0x426 => array(0x446), 0x427 => array(0x447),
0x428 => array(0x448), 0x429 => array(0x449), 0x42A => array(0x44A),
0x42B => array(0x44B), 0x42C => array(0x44C), 0x42D => array(0x44D),
0x42E => array(0x44E), 0x42F => array(0x44F), 0x460 => array(0x461),
0x462 => array(0x463), 0x464 => array(0x465), 0x466 => array(0x467),
0x468 => array(0x469), 0x46A => array(0x46B), 0x46C => array(0x46D),
0x46E => array(0x46F), 0x470 => array(0x471), 0x472 => array(0x473),
0x474 => array(0x475), 0x476 => array(0x477), 0x478 => array(0x479),
0x47A => array(0x47B), 0x47C => array(0x47D), 0x47E => array(0x47F),
0x480 => array(0x481), 0x48A => array(0x48B), 0x48C => array(0x48D),
0x48E => array(0x48F), 0x490 => array(0x491), 0x492 => array(0x493),
0x494 => array(0x495), 0x496 => array(0x497), 0x498 => array(0x499),
0x49A => array(0x49B), 0x49C => array(0x49D), 0x49E => array(0x49F),
0x4A0 => array(0x4A1), 0x4A2 => array(0x4A3), 0x4A4 => array(0x4A5),
0x4A6 => array(0x4A7), 0x4A8 => array(0x4A9), 0x4AA => array(0x4AB),
0x4AC => array(0x4AD), 0x4AE => array(0x4AF), 0x4B0 => array(0x4B1),
0x4B2 => array(0x4B3), 0x4B4 => array(0x4B5), 0x4B6 => array(0x4B7),
0x4B8 => array(0x4B9), 0x4BA => array(0x4BB), 0x4BC => array(0x4BD),
0x4BE => array(0x4BF), 0x4C1 => array(0x4C2), 0x4C3 => array(0x4C4),
0x4C5 => array(0x4C6), 0x4C7 => array(0x4C8), 0x4C9 => array(0x4CA),
0x4CB => array(0x4CC), 0x4CD => array(0x4CE), 0x4D0 => array(0x4D1),
0x4D2 => array(0x4D3), 0x4D4 => array(0x4D5), 0x4D6 => array(0x4D7),
0x4D8 => array(0x4D9), 0x4DA => array(0x4DB), 0x4DC => array(0x4DD),
0x4DE => array(0x4DF), 0x4E0 => array(0x4E1), 0x4E2 => array(0x4E3),
0x4E4 => array(0x4E5), 0x4E6 => array(0x4E7), 0x4E8 => array(0x4E9),
0x4EA => array(0x4EB), 0x4EC => array(0x4ED), 0x4EE => array(0x4EF),
0x4F0 => array(0x4F1), 0x4F2 => array(0x4F3), 0x4F4 => array(0x4F5),
0x4F6 => array(0x4F7), 0x4F8 => array(0x4F9), 0x4FA => array(0x4FB),
0x4FC => array(0x4FD), 0x4FE => array(0x4FF), 0x500 => array(0x501),
0x502 => array(0x503), 0x504 => array(0x505), 0x506 => array(0x507),
0x508 => array(0x509), 0x50A => array(0x50B), 0x50C => array(0x50D),
0x50E => array(0x50F), 0x510 => array(0x511), 0x512 => array(0x513),
0x514 => array(0x515), 0x516 => array(0x517), 0x518 => array(0x519),
0x51A => array(0x51B), 0x51C => array(0x51D), 0x51E => array(0x51F),
0x520 => array(0x521), 0x522 => array(0x523), 0x524 => array(0x525),
0x526 => array(0x527), 0x528 => array(0x529), 0x52A => array(0x52B),
0x52C => array(0x52D), 0x52E => array(0x52F), 0x531 => array(0x561),
0x532 => array(0x562), 0x533 => array(0x563), 0x534 => array(0x564),
0x535 => array(0x565), 0x536 => array(0x566), 0x537 => array(0x567),
0x538 => array(0x568), 0x539 => array(0x569), 0x53A => array(0x56A),
0x53B => array(0x56B), 0x53C => array(0x56C), 0x53D => array(0x56D),
0x53E => array(0x56E), 0x53F => array(0x56F), 0x540 => array(0x570),
0x541 => array(0x571), 0x542 => array(0x572), 0x543 => array(0x573),
0x544 => array(0x574), 0x545 => array(0x575), 0x546 => array(0x576),
0x547 => array(0x577), 0x548 => array(0x578), 0x549 => array(0x579),
0x54A => array(0x57A), 0x54B => array(0x57B), 0x54C => array(0x57C),
0x54D => array(0x57D), 0x54E => array(0x57E), 0x54F => array(0x57F),
0x550 => array(0x580), 0x551 => array(0x581), 0x552 => array(0x582),
0x553 => array(0x583), 0x554 => array(0x584), 0x555 => array(0x585),
0x556 => array(0x586), 0x587 => array(0x565, 0x582), 0x675 => array(0x627, 0x674),
0x676 => array(0x648, 0x674), 0x677 => array(0x6C7, 0x674), 0x678 => array(0x64A, 0x674),
0x958 => array(0x915, 0x93C), 0x959 => array(0x916, 0x93C), 0x95A => array(0x917, 0x93C),
0x95B => array(0x91C, 0x93C), 0x95C => array(0x921, 0x93C), 0x95D => array(0x922, 0x93C),
0x95E => array(0x92B, 0x93C), 0x95F => array(0x92F, 0x93C), 0x9DC => array(0x9A1, 0x9BC),
0x9DD => array(0x9A2, 0x9BC), 0x9DF => array(0x9AF, 0x9BC), 0xA33 => array(0xA32, 0xA3C),
0xA36 => array(0xA38, 0xA3C), 0xA59 => array(0xA16, 0xA3C), 0xA5A => array(0xA17, 0xA3C),
0xA5B => array(0xA1C, 0xA3C), 0xA5E => array(0xA2B, 0xA3C), 0xB5C => array(0xB21, 0xB3C),
0xB5D => array(0xB22, 0xB3C), 0xE33 => array(0xE4D, 0xE32), 0xEB3 => array(0xECD, 0xEB2),
0xEDC => array(0xEAB, 0xE99), 0xEDD => array(0xEAB, 0xEA1), 0xF0C => array(0xF0B),
0xF43 => array(0xF42, 0xFB7), 0xF4D => array(0xF4C, 0xFB7), 0xF52 => array(0xF51, 0xFB7),
0xF57 => array(0xF56, 0xFB7), 0xF5C => array(0xF5B, 0xFB7), 0xF69 => array(0xF40, 0xFB5),
0xF73 => array(0xF71, 0xF72), 0xF75 => array(0xF71, 0xF74), 0xF76 => array(0xFB2, 0xF80),
0xF77 => array(0xFB2, 0xF71, 0xF80), 0xF78 => array(0xFB3, 0xF80), 0xF79 => array(0xFB3, 0xF71, 0xF80),
0xF81 => array(0xF71, 0xF80), 0xF93 => array(0xF92, 0xFB7), 0xF9D => array(0xF9C, 0xFB7),
0xFA2 => array(0xFA1, 0xFB7), 0xFA7 => array(0xFA6, 0xFB7), 0xFAC => array(0xFAB, 0xFB7),
0xFB9 => array(0xF90, 0xFB5), 0x10C7 => array(0x2D27), 0x10CD => array(0x2D2D),
0x10FC => array(0x10DC), 0x1D2C => array(0x61), 0x1D2D => array(0xE6),
0x1D2E => array(0x62), 0x1D30 => array(0x64), 0x1D31 => array(0x65),
0x1D32 => array(0x1DD), 0x1D33 => array(0x67), 0x1D34 => array(0x68),
0x1D35 => array(0x69), 0x1D36 => array(0x6A), 0x1D37 => array(0x6B),
0x1D38 => array(0x6C), 0x1D39 => array(0x6D), 0x1D3A => array(0x6E),
0x1D3C => array(0x6F), 0x1D3D => array(0x223), 0x1D3E => array(0x70),
0x1D3F => array(0x72), 0x1D40 => array(0x74), 0x1D41 => array(0x75),
0x1D42 => array(0x77), 0x1D43 => array(0x61), 0x1D44 => array(0x250),
0x1D45 => array(0x251), 0x1D46 => array(0x1D02), 0x1D47 => array(0x62),
0x1D48 => array(0x64), 0x1D49 => array(0x65), 0x1D4A => array(0x259),
0x1D4B => array(0x25B), 0x1D4C => array(0x25C), 0x1D4D => array(0x67),
0x1D4F => array(0x6B), 0x1D50 => array(0x6D), 0x1D51 => array(0x14B),
0x1D52 => array(0x6F), 0x1D53 => array(0x254), 0x1D54 => array(0x1D16),
0x1D55 => array(0x1D17), 0x1D56 => array(0x70), 0x1D57 => array(0x74),
0x1D58 => array(0x75), 0x1D59 => array(0x1D1D), 0x1D5A => array(0x26F),
0x1D5B => array(0x76), 0x1D5C => array(0x1D25), 0x1D5D => array(0x3B2),
0x1D5E => array(0x3B3), 0x1D5F => array(0x3B4), 0x1D60 => array(0x3C6),
0x1D61 => array(0x3C7), 0x1D62 => array(0x69), 0x1D63 => array(0x72),
0x1D64 => array(0x75), 0x1D65 => array(0x76), 0x1D66 => array(0x3B2),
0x1D67 => array(0x3B3), 0x1D68 => array(0x3C1), 0x1D69 => array(0x3C6),
0x1D6A => array(0x3C7), 0x1D78 => array(0x43D), 0x1D9B => array(0x252),
0x1D9C => array(0x63), 0x1D9D => array(0x255), 0x1D9E => array(0xF0),
0x1D9F => array(0x25C), 0x1DA0 => array(0x66), 0x1DA1 => array(0x25F),
0x1DA2 => array(0x261), 0x1DA3 => array(0x265), 0x1DA4 => array(0x268),
0x1DA5 => array(0x269), 0x1DA6 => array(0x26A), 0x1DA7 => array(0x1D7B),
0x1DA8 => array(0x29D), 0x1DA9 => array(0x26D), 0x1DAA => array(0x1D85),
0x1DAB => array(0x29F), 0x1DAC => array(0x271), 0x1DAD => array(0x270),
0x1DAE => array(0x272), 0x1DAF => array(0x273), 0x1DB0 => array(0x274),
0x1DB1 => array(0x275), 0x1DB2 => array(0x278), 0x1DB3 => array(0x282),
0x1DB4 => array(0x283), 0x1DB5 => array(0x1AB), 0x1DB6 => array(0x289),
0x1DB7 => array(0x28A), 0x1DB8 => array(0x1D1C), 0x1DB9 => array(0x28B),
0x1DBA => array(0x28C), 0x1DBB => array(0x7A), 0x1DBC => array(0x290),
0x1DBD => array(0x291), 0x1DBE => array(0x292), 0x1DBF => array(0x3B8),
0x1E00 => array(0x1E01), 0x1E02 => array(0x1E03), 0x1E04 => array(0x1E05),
0x1E06 => array(0x1E07), 0x1E08 => array(0x1E09), 0x1E0A => array(0x1E0B),
0x1E0C => array(0x1E0D), 0x1E0E => array(0x1E0F), 0x1E10 => array(0x1E11),
0x1E12 => array(0x1E13), 0x1E14 => array(0x1E15), 0x1E16 => array(0x1E17),
0x1E18 => array(0x1E19), 0x1E1A => array(0x1E1B), 0x1E1C => array(0x1E1D),
0x1E1E => array(0x1E1F), 0x1E20 => array(0x1E21), 0x1E22 => array(0x1E23),
0x1E24 => array(0x1E25), 0x1E26 => array(0x1E27), 0x1E28 => array(0x1E29),
0x1E2A => array(0x1E2B), 0x1E2C => array(0x1E2D), 0x1E2E => array(0x1E2F),
0x1E30 => array(0x1E31), 0x1E32 => array(0x1E33), 0x1E34 => array(0x1E35),
0x1E36 => array(0x1E37), 0x1E38 => array(0x1E39), 0x1E3A => array(0x1E3B),
0x1E3C => array(0x1E3D), 0x1E3E => array(0x1E3F), 0x1E40 => array(0x1E41),
0x1E42 => array(0x1E43), 0x1E44 => array(0x1E45), 0x1E46 => array(0x1E47),
0x1E48 => array(0x1E49), 0x1E4A => array(0x1E4B), 0x1E4C => array(0x1E4D),
0x1E4E => array(0x1E4F), 0x1E50 => array(0x1E51), 0x1E52 => array(0x1E53),
0x1E54 => array(0x1E55), 0x1E56 => array(0x1E57), 0x1E58 => array(0x1E59),
0x1E5A => array(0x1E5B), 0x1E5C => array(0x1E5D), 0x1E5E => array(0x1E5F),
0x1E60 => array(0x1E61), 0x1E62 => array(0x1E63), 0x1E64 => array(0x1E65),
0x1E66 => array(0x1E67), 0x1E68 => array(0x1E69), 0x1E6A => array(0x1E6B),
0x1E6C => array(0x1E6D), 0x1E6E => array(0x1E6F), 0x1E70 => array(0x1E71),
0x1E72 => array(0x1E73), 0x1E74 => array(0x1E75), 0x1E76 => array(0x1E77),
0x1E78 => array(0x1E79), 0x1E7A => array(0x1E7B), 0x1E7C => array(0x1E7D),
0x1E7E => array(0x1E7F), 0x1E80 => array(0x1E81), 0x1E82 => array(0x1E83),
0x1E84 => array(0x1E85), 0x1E86 => array(0x1E87), 0x1E88 => array(0x1E89),
0x1E8A => array(0x1E8B), 0x1E8C => array(0x1E8D), 0x1E8E => array(0x1E8F),
0x1E90 => array(0x1E91), 0x1E92 => array(0x1E93), 0x1E94 => array(0x1E95),
0x1E9A => array(0x61, 0x2BE), 0x1E9B => array(0x1E61), 0x1E9E => array(0x73, 0x73),
0x1EA0 => array(0x1EA1), 0x1EA2 => array(0x1EA3), 0x1EA4 => array(0x1EA5),
0x1EA6 => array(0x1EA7), 0x1EA8 => array(0x1EA9), 0x1EAA => array(0x1EAB),
0x1EAC => array(0x1EAD), 0x1EAE => array(0x1EAF), 0x1EB0 => array(0x1EB1),
0x1EB2 => array(0x1EB3), 0x1EB4 => array(0x1EB5), 0x1EB6 => array(0x1EB7),
0x1EB8 => array(0x1EB9), 0x1EBA => array(0x1EBB), 0x1EBC => array(0x1EBD),
0x1EBE => array(0x1EBF), 0x1EC0 => array(0x1EC1), 0x1EC2 => array(0x1EC3),
0x1EC4 => array(0x1EC5), 0x1EC6 => array(0x1EC7), 0x1EC8 => array(0x1EC9),
0x1ECA => array(0x1ECB), 0x1ECC => array(0x1ECD), 0x1ECE => array(0x1ECF),
0x1ED0 => array(0x1ED1), 0x1ED2 => array(0x1ED3), 0x1ED4 => array(0x1ED5),
0x1ED6 => array(0x1ED7), 0x1ED8 => array(0x1ED9), 0x1EDA => array(0x1EDB),
0x1EDC => array(0x1EDD), 0x1EDE => array(0x1EDF), 0x1EE0 => array(0x1EE1),
0x1EE2 => array(0x1EE3), 0x1EE4 => array(0x1EE5), 0x1EE6 => array(0x1EE7),
0x1EE8 => array(0x1EE9), 0x1EEA => array(0x1EEB), 0x1EEC => array(0x1EED),
0x1EEE => array(0x1EEF), 0x1EF0 => array(0x1EF1), 0x1EF2 => array(0x1EF3),
0x1EF4 => array(0x1EF5), 0x1EF6 => array(0x1EF7), 0x1EF8 => array(0x1EF9),
0x1EFA => array(0x1EFB), 0x1EFC => array(0x1EFD), 0x1EFE => array(0x1EFF),
0x1F08 => array(0x1F00), 0x1F09 => array(0x1F01), 0x1F0A => array(0x1F02),
0x1F0B => array(0x1F03), 0x1F0C => array(0x1F04), 0x1F0D => array(0x1F05),
0x1F0E => array(0x1F06), 0x1F0F => array(0x1F07), 0x1F18 => array(0x1F10),
0x1F19 => array(0x1F11), 0x1F1A => array(0x1F12), 0x1F1B => array(0x1F13),
0x1F1C => array(0x1F14), 0x1F1D => array(0x1F15), 0x1F28 => array(0x1F20),
0x1F29 => array(0x1F21), 0x1F2A => array(0x1F22), 0x1F2B => array(0x1F23),
0x1F2C => array(0x1F24), 0x1F2D => array(0x1F25), 0x1F2E => array(0x1F26),
0x1F2F => array(0x1F27), 0x1F38 => array(0x1F30), 0x1F39 => array(0x1F31),
0x1F3A => array(0x1F32), 0x1F3B => array(0x1F33), 0x1F3C => array(0x1F34),
0x1F3D => array(0x1F35), 0x1F3E => array(0x1F36), 0x1F3F => array(0x1F37),
0x1F48 => array(0x1F40), 0x1F49 => array(0x1F41), 0x1F4A => array(0x1F42),
0x1F4B => array(0x1F43), 0x1F4C => array(0x1F44), 0x1F4D => array(0x1F45),
0x1F59 => array(0x1F51), 0x1F5B => array(0x1F53), 0x1F5D => array(0x1F55),
0x1F5F => array(0x1F57), 0x1F68 => array(0x1F60), 0x1F69 => array(0x1F61),
0x1F6A => array(0x1F62), 0x1F6B => array(0x1F63), 0x1F6C => array(0x1F64),
0x1F6D => array(0x1F65), 0x1F6E => array(0x1F66), 0x1F6F => array(0x1F67),
0x1F71 => array(0x3AC), 0x1F73 => array(0x3AD), 0x1F75 => array(0x3AE),
0x1F77 => array(0x3AF), 0x1F79 => array(0x3CC), 0x1F7B => array(0x3CD),
0x1F7D => array(0x3CE), 0x1F80 => array(0x1F00, 0x3B9), 0x1F81 => array(0x1F01, 0x3B9),
0x1F82 => array(0x1F02, 0x3B9), 0x1F83 => array(0x1F03, 0x3B9), 0x1F84 => array(0x1F04, 0x3B9),
0x1F85 => array(0x1F05, 0x3B9), 0x1F86 => array(0x1F06, 0x3B9), 0x1F87 => array(0x1F07, 0x3B9),
0x1F88 => array(0x1F00, 0x3B9), 0x1F89 => array(0x1F01, 0x3B9), 0x1F8A => array(0x1F02, 0x3B9),
0x1F8B => array(0x1F03, 0x3B9), 0x1F8C => array(0x1F04, 0x3B9), 0x1F8D => array(0x1F05, 0x3B9),
0x1F8E => array(0x1F06, 0x3B9), 0x1F8F => array(0x1F07, 0x3B9), 0x1F90 => array(0x1F20, 0x3B9),
0x1F91 => array(0x1F21, 0x3B9), 0x1F92 => array(0x1F22, 0x3B9), 0x1F93 => array(0x1F23, 0x3B9),
0x1F94 => array(0x1F24, 0x3B9), 0x1F95 => array(0x1F25, 0x3B9), 0x1F96 => array(0x1F26, 0x3B9),
0x1F97 => array(0x1F27, 0x3B9), 0x1F98 => array(0x1F20, 0x3B9), 0x1F99 => array(0x1F21, 0x3B9),
0x1F9A => array(0x1F22, 0x3B9), 0x1F9B => array(0x1F23, 0x3B9), 0x1F9C => array(0x1F24, 0x3B9),
0x1F9D => array(0x1F25, 0x3B9), 0x1F9E => array(0x1F26, 0x3B9), 0x1F9F => array(0x1F27, 0x3B9),
0x1FA0 => array(0x1F60, 0x3B9), 0x1FA1 => array(0x1F61, 0x3B9), 0x1FA2 => array(0x1F62, 0x3B9),
0x1FA3 => array(0x1F63, 0x3B9), 0x1FA4 => array(0x1F64, 0x3B9), 0x1FA5 => array(0x1F65, 0x3B9),
0x1FA6 => array(0x1F66, 0x3B9), 0x1FA7 => array(0x1F67, 0x3B9), 0x1FA8 => array(0x1F60, 0x3B9),
0x1FA9 => array(0x1F61, 0x3B9), 0x1FAA => array(0x1F62, 0x3B9), 0x1FAB => array(0x1F63, 0x3B9),
0x1FAC => array(0x1F64, 0x3B9), 0x1FAD => array(0x1F65, 0x3B9), 0x1FAE => array(0x1F66, 0x3B9),
0x1FAF => array(0x1F67, 0x3B9), 0x1FB2 => array(0x1F70, 0x3B9), 0x1FB3 => array(0x3B1, 0x3B9),
0x1FB4 => array(0x3AC, 0x3B9), 0x1FB7 => array(0x1FB6, 0x3B9), 0x1FB8 => array(0x1FB0),
0x1FB9 => array(0x1FB1), 0x1FBA => array(0x1F70), 0x1FBB => array(0x3AC),
0x1FBC => array(0x3B1, 0x3B9), 0x1FBE => array(0x3B9), 0x1FC2 => array(0x1F74, 0x3B9),
0x1FC3 => array(0x3B7, 0x3B9), 0x1FC4 => array(0x3AE, 0x3B9), 0x1FC7 => array(0x1FC6, 0x3B9),
0x1FC8 => array(0x1F72), 0x1FC9 => array(0x3AD), 0x1FCA => array(0x1F74),
0x1FCB => array(0x3AE), 0x1FCC => array(0x3B7, 0x3B9), 0x1FD3 => array(0x390),
0x1FD8 => array(0x1FD0), 0x1FD9 => array(0x1FD1), 0x1FDA => array(0x1F76),
0x1FDB => array(0x3AF), 0x1FE3 => array(0x3B0), 0x1FE8 => array(0x1FE0),
0x1FE9 => array(0x1FE1), 0x1FEA => array(0x1F7A), 0x1FEB => array(0x3CD),
0x1FEC => array(0x1FE5), 0x1FF2 => array(0x1F7C, 0x3B9), 0x1FF3 => array(0x3C9, 0x3B9),
0x1FF4 => array(0x3CE, 0x3B9), 0x1FF7 => array(0x1FF6, 0x3B9), 0x1FF8 => array(0x1F78),
0x1FF9 => array(0x3CC), 0x1FFA => array(0x1F7C), 0x1FFB => array(0x3CE),
0x1FFC => array(0x3C9, 0x3B9), 0x2011 => array(0x2010), 0x2033 => array(0x2032, 0x2032),
0x2034 => array(0x2032, 0x2032, 0x2032), 0x2036 => array(0x2035, 0x2035), 0x2037 => array(0x2035, 0x2035, 0x2035),
0x2057 => array(0x2032, 0x2032, 0x2032, 0x2032), 0x2070 => array(0x30), 0x2071 => array(0x69),
0x2074 => array(0x34), 0x2075 => array(0x35), 0x2076 => array(0x36),
0x2077 => array(0x37), 0x2078 => array(0x38), 0x2079 => array(0x39),
0x207B => array(0x2212), 0x207F => array(0x6E), 0x2080 => array(0x30),
0x2081 => array(0x31), 0x2082 => array(0x32), 0x2083 => array(0x33),
0x2084 => array(0x34), 0x2085 => array(0x35), 0x2086 => array(0x36),
0x2087 => array(0x37), 0x2088 => array(0x38), 0x2089 => array(0x39),
0x208B => array(0x2212), 0x2090 => array(0x61), 0x2091 => array(0x65),
0x2092 => array(0x6F), 0x2093 => array(0x78), 0x2094 => array(0x259),
0x2095 => array(0x68), 0x2096 => array(0x6B), 0x2097 => array(0x6C),
0x2098 => array(0x6D), 0x2099 => array(0x6E), 0x209A => array(0x70),
0x209B => array(0x73), 0x209C => array(0x74), 0x20A8 => array(0x72, 0x73),
0x2102 => array(0x63), 0x2103 => array(0xB0, 0x63), 0x2107 => array(0x25B),
0x2109 => array(0xB0, 0x66), 0x210A => array(0x67), 0x210B => array(0x68),
0x210C => array(0x68), 0x210D => array(0x68), 0x210E => array(0x68),
0x210F => array(0x127), 0x2110 => array(0x69), 0x2111 => array(0x69),
0x2112 => array(0x6C), 0x2113 => array(0x6C), 0x2115 => array(0x6E),
0x2116 => array(0x6E, 0x6F), 0x2119 => array(0x70), 0x211A => array(0x71),
0x211B => array(0x72), 0x211C => array(0x72), 0x211D => array(0x72),
0x2120 => array(0x73, 0x6D), 0x2121 => array(0x74, 0x65, 0x6C), 0x2122 => array(0x74, 0x6D),
0x2124 => array(0x7A), 0x2126 => array(0x3C9), 0x2128 => array(0x7A),
0x212A => array(0x6B), 0x212B => array(0xE5), 0x212C => array(0x62),
0x212D => array(0x63), 0x212F => array(0x65), 0x2130 => array(0x65),
0x2131 => array(0x66), 0x2133 => array(0x6D), 0x2134 => array(0x6F),
0x2135 => array(0x5D0), 0x2136 => array(0x5D1), 0x2137 => array(0x5D2),
0x2138 => array(0x5D3), 0x2139 => array(0x69), 0x213B => array(0x66, 0x61, 0x78),
0x213C => array(0x3C0), 0x213D => array(0x3B3), 0x213E => array(0x3B3),
0x213F => array(0x3C0), 0x2140 => array(0x2211), 0x2145 => array(0x64),
0x2146 => array(0x64), 0x2147 => array(0x65), 0x2148 => array(0x69),
0x2149 => array(0x6A), 0x2150 => array(0x31, 0x2044, 0x37), 0x2151 => array(0x31, 0x2044, 0x39),
0x2152 => array(0x31, 0x2044, 0x31, 0x30), 0x2153 => array(0x31, 0x2044, 0x33), 0x2154 => array(0x32, 0x2044, 0x33),
0x2155 => array(0x31, 0x2044, 0x35), 0x2156 => array(0x32, 0x2044, 0x35), 0x2157 => array(0x33, 0x2044, 0x35),
0x2158 => array(0x34, 0x2044, 0x35), 0x2159 => array(0x31, 0x2044, 0x36), 0x215A => array(0x35, 0x2044, 0x36),
0x215B => array(0x31, 0x2044, 0x38), 0x215C => array(0x33, 0x2044, 0x38), 0x215D => array(0x35, 0x2044, 0x38),
0x215E => array(0x37, 0x2044, 0x38), 0x215F => array(0x31, 0x2044), 0x2160 => array(0x69),
0x2161 => array(0x69, 0x69), 0x2162 => array(0x69, 0x69, 0x69), 0x2163 => array(0x69, 0x76),
0x2164 => array(0x76), 0x2165 => array(0x76, 0x69), 0x2166 => array(0x76, 0x69, 0x69),
0x2167 => array(0x76, 0x69, 0x69, 0x69), 0x2168 => array(0x69, 0x78), 0x2169 => array(0x78),
0x216A => array(0x78, 0x69), 0x216B => array(0x78, 0x69, 0x69), 0x216C => array(0x6C),
0x216D => array(0x63), 0x216E => array(0x64), 0x216F => array(0x6D),
0x2170 => array(0x69), 0x2171 => array(0x69, 0x69), 0x2172 => array(0x69, 0x69, 0x69),
0x2173 => array(0x69, 0x76), 0x2174 => array(0x76), 0x2175 => array(0x76, 0x69),
0x2176 => array(0x76, 0x69, 0x69), 0x2177 => array(0x76, 0x69, 0x69, 0x69), 0x2178 => array(0x69, 0x78),
0x2179 => array(0x78), 0x217A => array(0x78, 0x69), 0x217B => array(0x78, 0x69, 0x69),
0x217C => array(0x6C), 0x217D => array(0x63), 0x217E => array(0x64),
0x217F => array(0x6D), 0x2189 => array(0x30, 0x2044, 0x33), 0x222C => array(0x222B, 0x222B),
0x222D => array(0x222B, 0x222B, 0x222B), 0x222F => array(0x222E, 0x222E), 0x2230 => array(0x222E, 0x222E, 0x222E),
0x2329 => array(0x3008), 0x232A => array(0x3009), 0x2460 => array(0x31),
0x2461 => array(0x32), 0x2462 => array(0x33), 0x2463 => array(0x34),
0x2464 => array(0x35), 0x2465 => array(0x36), 0x2466 => array(0x37),
0x2467 => array(0x38), 0x2468 => array(0x39), 0x2469 => array(0x31, 0x30),
0x246A => array(0x31, 0x31), 0x246B => array(0x31, 0x32), 0x246C => array(0x31, 0x33),
0x246D => array(0x31, 0x34), 0x246E => array(0x31, 0x35), 0x246F => array(0x31, 0x36),
0x2470 => array(0x31, 0x37), 0x2471 => array(0x31, 0x38), 0x2472 => array(0x31, 0x39),
0x2473 => array(0x32, 0x30), 0x24B6 => array(0x61), 0x24B7 => array(0x62),
0x24B8 => array(0x63), 0x24B9 => array(0x64), 0x24BA => array(0x65),
0x24BB => array(0x66), 0x24BC => array(0x67), 0x24BD => array(0x68),
0x24BE => array(0x69), 0x24BF => array(0x6A), 0x24C0 => array(0x6B),
0x24C1 => array(0x6C), 0x24C2 => array(0x6D), 0x24C3 => array(0x6E),
0x24C4 => array(0x6F), 0x24C5 => array(0x70), 0x24C6 => array(0x71),
0x24C7 => array(0x72), 0x24C8 => array(0x73), 0x24C9 => array(0x74),
0x24CA => array(0x75), 0x24CB => array(0x76), 0x24CC => array(0x77),
0x24CD => array(0x78), 0x24CE => array(0x79), 0x24CF => array(0x7A),
0x24D0 => array(0x61), 0x24D1 => array(0x62), 0x24D2 => array(0x63),
0x24D3 => array(0x64), 0x24D4 => array(0x65), 0x24D5 => array(0x66),
0x24D6 => array(0x67), 0x24D7 => array(0x68), 0x24D8 => array(0x69),
0x24D9 => array(0x6A), 0x24DA => array(0x6B), 0x24DB => array(0x6C),
0x24DC => array(0x6D), 0x24DD => array(0x6E), 0x24DE => array(0x6F),
0x24DF => array(0x70), 0x24E0 => array(0x71), 0x24E1 => array(0x72),
0x24E2 => array(0x73), 0x24E3 => array(0x74), 0x24E4 => array(0x75),
0x24E5 => array(0x76), 0x24E6 => array(0x77), 0x24E7 => array(0x78),
0x24E8 => array(0x79), 0x24E9 => array(0x7A), 0x24EA => array(0x30),
0x2A0C => array(0x222B, 0x222B, 0x222B, 0x222B), 0x2ADC => array(0x2ADD, 0x338), 0x2C00 => array(0x2C30),
0x2C01 => array(0x2C31), 0x2C02 => array(0x2C32), 0x2C03 => array(0x2C33),
0x2C04 => array(0x2C34), 0x2C05 => array(0x2C35), 0x2C06 => array(0x2C36),
0x2C07 => array(0x2C37), 0x2C08 => array(0x2C38), 0x2C09 => array(0x2C39),
0x2C0A => array(0x2C3A), 0x2C0B => array(0x2C3B), 0x2C0C => array(0x2C3C),
0x2C0D => array(0x2C3D), 0x2C0E => array(0x2C3E), 0x2C0F => array(0x2C3F),
0x2C10 => array(0x2C40), 0x2C11 => array(0x2C41), 0x2C12 => array(0x2C42),
0x2C13 => array(0x2C43), 0x2C14 => array(0x2C44), 0x2C15 => array(0x2C45),
0x2C16 => array(0x2C46), 0x2C17 => array(0x2C47), 0x2C18 => array(0x2C48),
0x2C19 => array(0x2C49), 0x2C1A => array(0x2C4A), 0x2C1B => array(0x2C4B),
0x2C1C => array(0x2C4C), 0x2C1D => array(0x2C4D), 0x2C1E => array(0x2C4E),
0x2C1F => array(0x2C4F), 0x2C20 => array(0x2C50), 0x2C21 => array(0x2C51),
0x2C22 => array(0x2C52), 0x2C23 => array(0x2C53), 0x2C24 => array(0x2C54),
0x2C25 => array(0x2C55), 0x2C26 => array(0x2C56), 0x2C27 => array(0x2C57),
0x2C28 => array(0x2C58), 0x2C29 => array(0x2C59), 0x2C2A => array(0x2C5A),
0x2C2B => array(0x2C5B), 0x2C2C => array(0x2C5C), 0x2C2D => array(0x2C5D),
0x2C2E => array(0x2C5E), 0x2C60 => array(0x2C61), 0x2C62 => array(0x26B),
0x2C63 => array(0x1D7D), 0x2C64 => array(0x27D), 0x2C67 => array(0x2C68),
0x2C69 => array(0x2C6A), 0x2C6B => array(0x2C6C), 0x2C6D => array(0x251),
0x2C6E => array(0x271), 0x2C6F => array(0x250), 0x2C70 => array(0x252),
0x2C72 => array(0x2C73), 0x2C75 => array(0x2C76), 0x2C7C => array(0x6A),
0x2C7D => array(0x76), 0x2C7E => array(0x23F), 0x2C7F => array(0x240),
0x2C80 => array(0x2C81), 0x2C82 => array(0x2C83), 0x2C84 => array(0x2C85),
0x2C86 => array(0x2C87), 0x2C88 => array(0x2C89), 0x2C8A => array(0x2C8B),
0x2C8C => array(0x2C8D), 0x2C8E => array(0x2C8F), 0x2C90 => array(0x2C91),
0x2C92 => array(0x2C93), 0x2C94 => array(0x2C95), 0x2C96 => array(0x2C97),
0x2C98 => array(0x2C99), 0x2C9A => array(0x2C9B), 0x2C9C => array(0x2C9D),
0x2C9E => array(0x2C9F), 0x2CA0 => array(0x2CA1), 0x2CA2 => array(0x2CA3),
0x2CA4 => array(0x2CA5), 0x2CA6 => array(0x2CA7), 0x2CA8 => array(0x2CA9),
0x2CAA => array(0x2CAB), 0x2CAC => array(0x2CAD), 0x2CAE => array(0x2CAF),
0x2CB0 => array(0x2CB1), 0x2CB2 => array(0x2CB3), 0x2CB4 => array(0x2CB5),
0x2CB6 => array(0x2CB7), 0x2CB8 => array(0x2CB9), 0x2CBA => array(0x2CBB),
0x2CBC => array(0x2CBD), 0x2CBE => array(0x2CBF), 0x2CC0 => array(0x2CC1),
0x2CC2 => array(0x2CC3), 0x2CC4 => array(0x2CC5), 0x2CC6 => array(0x2CC7),
0x2CC8 => array(0x2CC9), 0x2CCA => array(0x2CCB), 0x2CCC => array(0x2CCD),
0x2CCE => array(0x2CCF), 0x2CD0 => array(0x2CD1), 0x2CD2 => array(0x2CD3),
0x2CD4 => array(0x2CD5), 0x2CD6 => array(0x2CD7), 0x2CD8 => array(0x2CD9),
0x2CDA => array(0x2CDB), 0x2CDC => array(0x2CDD), 0x2CDE => array(0x2CDF),
0x2CE0 => array(0x2CE1), 0x2CE2 => array(0x2CE3), 0x2CEB => array(0x2CEC),
0x2CED => array(0x2CEE), 0x2CF2 => array(0x2CF3), 0x2D6F => array(0x2D61),
0x2E9F => array(0x6BCD), 0x2EF3 => array(0x9F9F), 0x2F00 => array(0x4E00),
0x2F01 => array(0x4E28), 0x2F02 => array(0x4E36), 0x2F03 => array(0x4E3F),
0x2F04 => array(0x4E59), 0x2F05 => array(0x4E85), 0x2F06 => array(0x4E8C),
0x2F07 => array(0x4EA0), 0x2F08 => array(0x4EBA), 0x2F09 => array(0x513F),
0x2F0A => array(0x5165), 0x2F0B => array(0x516B), 0x2F0C => array(0x5182),
0x2F0D => array(0x5196), 0x2F0E => array(0x51AB), 0x2F0F => array(0x51E0),
0x2F10 => array(0x51F5), 0x2F11 => array(0x5200), 0x2F12 => array(0x529B),
0x2F13 => array(0x52F9), 0x2F14 => array(0x5315), 0x2F15 => array(0x531A),
0x2F16 => array(0x5338), 0x2F17 => array(0x5341), 0x2F18 => array(0x535C),
0x2F19 => array(0x5369), 0x2F1A => array(0x5382), 0x2F1B => array(0x53B6),
0x2F1C => array(0x53C8), 0x2F1D => array(0x53E3), 0x2F1E => array(0x56D7),
0x2F1F => array(0x571F), 0x2F20 => array(0x58EB), 0x2F21 => array(0x5902),
0x2F22 => array(0x590A), 0x2F23 => array(0x5915), 0x2F24 => array(0x5927),
0x2F25 => array(0x5973), 0x2F26 => array(0x5B50), 0x2F27 => array(0x5B80),
0x2F28 => array(0x5BF8), 0x2F29 => array(0x5C0F), 0x2F2A => array(0x5C22),
0x2F2B => array(0x5C38), 0x2F2C => array(0x5C6E), 0x2F2D => array(0x5C71),
0x2F2E => array(0x5DDB), 0x2F2F => array(0x5DE5), 0x2F30 => array(0x5DF1),
0x2F31 => array(0x5DFE), 0x2F32 => array(0x5E72), 0x2F33 => array(0x5E7A),
0x2F34 => array(0x5E7F), 0x2F35 => array(0x5EF4), 0x2F36 => array(0x5EFE),
0x2F37 => array(0x5F0B), 0x2F38 => array(0x5F13), 0x2F39 => array(0x5F50),
0x2F3A => array(0x5F61), 0x2F3B => array(0x5F73), 0x2F3C => array(0x5FC3),
0x2F3D => array(0x6208), 0x2F3E => array(0x6236), 0x2F3F => array(0x624B),
0x2F40 => array(0x652F), 0x2F41 => array(0x6534), 0x2F42 => array(0x6587),
0x2F43 => array(0x6597), 0x2F44 => array(0x65A4), 0x2F45 => array(0x65B9),
0x2F46 => array(0x65E0), 0x2F47 => array(0x65E5), 0x2F48 => array(0x66F0),
0x2F49 => array(0x6708), 0x2F4A => array(0x6728), 0x2F4B => array(0x6B20),
0x2F4C => array(0x6B62), 0x2F4D => array(0x6B79), 0x2F4E => array(0x6BB3),
0x2F4F => array(0x6BCB), 0x2F50 => array(0x6BD4), 0x2F51 => array(0x6BDB),
0x2F52 => array(0x6C0F), 0x2F53 => array(0x6C14), 0x2F54 => array(0x6C34),
0x2F55 => array(0x706B), 0x2F56 => array(0x722A), 0x2F57 => array(0x7236),
0x2F58 => array(0x723B), 0x2F59 => array(0x723F), 0x2F5A => array(0x7247),
0x2F5B => array(0x7259), 0x2F5C => array(0x725B), 0x2F5D => array(0x72AC),
0x2F5E => array(0x7384), 0x2F5F => array(0x7389), 0x2F60 => array(0x74DC),
0x2F61 => array(0x74E6), 0x2F62 => array(0x7518), 0x2F63 => array(0x751F),
0x2F64 => array(0x7528), 0x2F65 => array(0x7530), 0x2F66 => array(0x758B),
0x2F67 => array(0x7592), 0x2F68 => array(0x7676), 0x2F69 => array(0x767D),
0x2F6A => array(0x76AE), 0x2F6B => array(0x76BF), 0x2F6C => array(0x76EE),
0x2F6D => array(0x77DB), 0x2F6E => array(0x77E2), 0x2F6F => array(0x77F3),
0x2F70 => array(0x793A), 0x2F71 => array(0x79B8), 0x2F72 => array(0x79BE),
0x2F73 => array(0x7A74), 0x2F74 => array(0x7ACB), 0x2F75 => array(0x7AF9),
0x2F76 => array(0x7C73), 0x2F77 => array(0x7CF8), 0x2F78 => array(0x7F36),
0x2F79 => array(0x7F51), 0x2F7A => array(0x7F8A), 0x2F7B => array(0x7FBD),
0x2F7C => array(0x8001), 0x2F7D => array(0x800C), 0x2F7E => array(0x8012),
0x2F7F => array(0x8033), 0x2F80 => array(0x807F), 0x2F81 => array(0x8089),
0x2F82 => array(0x81E3), 0x2F83 => array(0x81EA), 0x2F84 => array(0x81F3),
0x2F85 => array(0x81FC), 0x2F86 => array(0x820C), 0x2F87 => array(0x821B),
0x2F88 => array(0x821F), 0x2F89 => array(0x826E), 0x2F8A => array(0x8272),
0x2F8B => array(0x8278), 0x2F8C => array(0x864D), 0x2F8D => array(0x866B),
0x2F8E => array(0x8840), 0x2F8F => array(0x884C), 0x2F90 => array(0x8863),
0x2F91 => array(0x897E), 0x2F92 => array(0x898B), 0x2F93 => array(0x89D2),
0x2F94 => array(0x8A00), 0x2F95 => array(0x8C37), 0x2F96 => array(0x8C46),
0x2F97 => array(0x8C55), 0x2F98 => array(0x8C78), 0x2F99 => array(0x8C9D),
0x2F9A => array(0x8D64), 0x2F9B => array(0x8D70), 0x2F9C => array(0x8DB3),
0x2F9D => array(0x8EAB), 0x2F9E => array(0x8ECA), 0x2F9F => array(0x8F9B),
0x2FA0 => array(0x8FB0), 0x2FA1 => array(0x8FB5), 0x2FA2 => array(0x9091),
0x2FA3 => array(0x9149), 0x2FA4 => array(0x91C6), 0x2FA5 => array(0x91CC),
0x2FA6 => array(0x91D1), 0x2FA7 => array(0x9577), 0x2FA8 => array(0x9580),
0x2FA9 => array(0x961C), 0x2FAA => array(0x96B6), 0x2FAB => array(0x96B9),
0x2FAC => array(0x96E8), 0x2FAD => array(0x9751), 0x2FAE => array(0x975E),
0x2FAF => array(0x9762), 0x2FB0 => array(0x9769), 0x2FB1 => array(0x97CB),
0x2FB2 => array(0x97ED), 0x2FB3 => array(0x97F3), 0x2FB4 => array(0x9801),
0x2FB5 => array(0x98A8), 0x2FB6 => array(0x98DB), 0x2FB7 => array(0x98DF),
0x2FB8 => array(0x9996), 0x2FB9 => array(0x9999), 0x2FBA => array(0x99AC),
0x2FBB => array(0x9AA8), 0x2FBC => array(0x9AD8), 0x2FBD => array(0x9ADF),
0x2FBE => array(0x9B25), 0x2FBF => array(0x9B2F), 0x2FC0 => array(0x9B32),
0x2FC1 => array(0x9B3C), 0x2FC2 => array(0x9B5A), 0x2FC3 => array(0x9CE5),
0x2FC4 => array(0x9E75), 0x2FC5 => array(0x9E7F), 0x2FC6 => array(0x9EA5),
0x2FC7 => array(0x9EBB), 0x2FC8 => array(0x9EC3), 0x2FC9 => array(0x9ECD),
0x2FCA => array(0x9ED1), 0x2FCB => array(0x9EF9), 0x2FCC => array(0x9EFD),
0x2FCD => array(0x9F0E), 0x2FCE => array(0x9F13), 0x2FCF => array(0x9F20),
0x2FD0 => array(0x9F3B), 0x2FD1 => array(0x9F4A), 0x2FD2 => array(0x9F52),
0x2FD3 => array(0x9F8D), 0x2FD4 => array(0x9F9C), 0x2FD5 => array(0x9FA0),
0x3002 => array(0x2E), 0x3036 => array(0x3012), 0x3038 => array(0x5341),
0x3039 => array(0x5344), 0x303A => array(0x5345), 0x309F => array(0x3088, 0x308A),
0x30FF => array(0x30B3, 0x30C8), 0x3131 => array(0x1100), 0x3132 => array(0x1101),
0x3133 => array(0x11AA), 0x3134 => array(0x1102), 0x3135 => array(0x11AC),
0x3136 => array(0x11AD), 0x3137 => array(0x1103), 0x3138 => array(0x1104),
0x3139 => array(0x1105), 0x313A => array(0x11B0), 0x313B => array(0x11B1),
0x313C => array(0x11B2), 0x313D => array(0x11B3), 0x313E => array(0x11B4),
0x313F => array(0x11B5), 0x3140 => array(0x111A), 0x3141 => array(0x1106),
0x3142 => array(0x1107), 0x3143 => array(0x1108), 0x3144 => array(0x1121),
0x3145 => array(0x1109), 0x3146 => array(0x110A), 0x3147 => array(0x110B),
0x3148 => array(0x110C), 0x3149 => array(0x110D), 0x314A => array(0x110E),
0x314B => array(0x110F), 0x314C => array(0x1110), 0x314D => array(0x1111),
0x314E => array(0x1112), 0x314F => array(0x1161), 0x3150 => array(0x1162),
0x3151 => array(0x1163), 0x3152 => array(0x1164), 0x3153 => array(0x1165),
0x3154 => array(0x1166), 0x3155 => array(0x1167), 0x3156 => array(0x1168),
0x3157 => array(0x1169), 0x3158 => array(0x116A), 0x3159 => array(0x116B),
0x315A => array(0x116C), 0x315B => array(0x116D), 0x315C => array(0x116E),
0x315D => array(0x116F), 0x315E => array(0x1170), 0x315F => array(0x1171),
0x3160 => array(0x1172), 0x3161 => array(0x1173), 0x3162 => array(0x1174),
0x3163 => array(0x1175), 0x3165 => array(0x1114), 0x3166 => array(0x1115),
0x3167 => array(0x11C7), 0x3168 => array(0x11C8), 0x3169 => array(0x11CC),
0x316A => array(0x11CE), 0x316B => array(0x11D3), 0x316C => array(0x11D7),
0x316D => array(0x11D9), 0x316E => array(0x111C), 0x316F => array(0x11DD),
0x3170 => array(0x11DF), 0x3171 => array(0x111D), 0x3172 => array(0x111E),
0x3173 => array(0x1120), 0x3174 => array(0x1122), 0x3175 => array(0x1123),
0x3176 => array(0x1127), 0x3177 => array(0x1129), 0x3178 => array(0x112B),
0x3179 => array(0x112C), 0x317A => array(0x112D), 0x317B => array(0x112E),
0x317C => array(0x112F), 0x317D => array(0x1132), 0x317E => array(0x1136),
0x317F => array(0x1140), 0x3180 => array(0x1147), 0x3181 => array(0x114C),
0x3182 => array(0x11F1), 0x3183 => array(0x11F2), 0x3184 => array(0x1157),
0x3185 => array(0x1158), 0x3186 => array(0x1159), 0x3187 => array(0x1184),
0x3188 => array(0x1185), 0x3189 => array(0x1188), 0x318A => array(0x1191),
0x318B => array(0x1192), 0x318C => array(0x1194), 0x318D => array(0x119E),
0x318E => array(0x11A1), 0x3192 => array(0x4E00), 0x3193 => array(0x4E8C),
0x3194 => array(0x4E09), 0x3195 => array(0x56DB), 0x3196 => array(0x4E0A),
0x3197 => array(0x4E2D), 0x3198 => array(0x4E0B), 0x3199 => array(0x7532),
0x319A => array(0x4E59), 0x319B => array(0x4E19), 0x319C => array(0x4E01),
0x319D => array(0x5929), 0x319E => array(0x5730), 0x319F => array(0x4EBA),
0x3244 => array(0x554F), 0x3245 => array(0x5E7C), 0x3246 => array(0x6587),
0x3247 => array(0x7B8F), 0x3250 => array(0x70, 0x74, 0x65), 0x3251 => array(0x32, 0x31),
0x3252 => array(0x32, 0x32), 0x3253 => array(0x32, 0x33), 0x3254 => array(0x32, 0x34),
0x3255 => array(0x32, 0x35), 0x3256 => array(0x32, 0x36), 0x3257 => array(0x32, 0x37),
0x3258 => array(0x32, 0x38), 0x3259 => array(0x32, 0x39), 0x325A => array(0x33, 0x30),
0x325B => array(0x33, 0x31), 0x325C => array(0x33, 0x32), 0x325D => array(0x33, 0x33),
0x325E => array(0x33, 0x34), 0x325F => array(0x33, 0x35), 0x3260 => array(0x1100),
0x3261 => array(0x1102), 0x3262 => array(0x1103), 0x3263 => array(0x1105),
0x3264 => array(0x1106), 0x3265 => array(0x1107), 0x3266 => array(0x1109),
0x3267 => array(0x110B), 0x3268 => array(0x110C), 0x3269 => array(0x110E),
0x326A => array(0x110F), 0x326B => array(0x1110), 0x326C => array(0x1111),
0x326D => array(0x1112), 0x326E => array(0xAC00), 0x326F => array(0xB098),
0x3270 => array(0xB2E4), 0x3271 => array(0xB77C), 0x3272 => array(0xB9C8),
0x3273 => array(0xBC14), 0x3274 => array(0xC0AC), 0x3275 => array(0xC544),
0x3276 => array(0xC790), 0x3277 => array(0xCC28), 0x3278 => array(0xCE74),
0x3279 => array(0xD0C0), 0x327A => array(0xD30C), 0x327B => array(0xD558),
0x327C => array(0xCC38, 0xACE0), 0x327D => array(0xC8FC, 0xC758), 0x327E => array(0xC6B0),
0x3280 => array(0x4E00), 0x3281 => array(0x4E8C), 0x3282 => array(0x4E09),
0x3283 => array(0x56DB), 0x3284 => array(0x4E94), 0x3285 => array(0x516D),
0x3286 => array(0x4E03), 0x3287 => array(0x516B), 0x3288 => array(0x4E5D),
0x3289 => array(0x5341), 0x328A => array(0x6708), 0x328B => array(0x706B),
0x328C => array(0x6C34), 0x328D => array(0x6728), 0x328E => array(0x91D1),
0x328F => array(0x571F), 0x3290 => array(0x65E5), 0x3291 => array(0x682A),
0x3292 => array(0x6709), 0x3293 => array(0x793E), 0x3294 => array(0x540D),
0x3295 => array(0x7279), 0x3296 => array(0x8CA1), 0x3297 => array(0x795D),
0x3298 => array(0x52B4), 0x3299 => array(0x79D8), 0x329A => array(0x7537),
0x329B => array(0x5973), 0x329C => array(0x9069), 0x329D => array(0x512A),
0x329E => array(0x5370), 0x329F => array(0x6CE8), 0x32A0 => array(0x9805),
0x32A1 => array(0x4F11), 0x32A2 => array(0x5199), 0x32A3 => array(0x6B63),
0x32A4 => array(0x4E0A), 0x32A5 => array(0x4E2D), 0x32A6 => array(0x4E0B),
0x32A7 => array(0x5DE6), 0x32A8 => array(0x53F3), 0x32A9 => array(0x533B),
0x32AA => array(0x5B97), 0x32AB => array(0x5B66), 0x32AC => array(0x76E3),
0x32AD => array(0x4F01), 0x32AE => array(0x8CC7), 0x32AF => array(0x5354),
0x32B0 => array(0x591C), 0x32B1 => array(0x33, 0x36), 0x32B2 => array(0x33, 0x37),
0x32B3 => array(0x33, 0x38), 0x32B4 => array(0x33, 0x39), 0x32B5 => array(0x34, 0x30),
0x32B6 => array(0x34, 0x31), 0x32B7 => array(0x34, 0x32), 0x32B8 => array(0x34, 0x33),
0x32B9 => array(0x34, 0x34), 0x32BA => array(0x34, 0x35), 0x32BB => array(0x34, 0x36),
0x32BC => array(0x34, 0x37), 0x32BD => array(0x34, 0x38), 0x32BE => array(0x34, 0x39),
0x32BF => array(0x35, 0x30), 0x32C0 => array(0x31, 0x6708), 0x32C1 => array(0x32, 0x6708),
0x32C2 => array(0x33, 0x6708), 0x32C3 => array(0x34, 0x6708), 0x32C4 => array(0x35, 0x6708),
0x32C5 => array(0x36, 0x6708), 0x32C6 => array(0x37, 0x6708), 0x32C7 => array(0x38, 0x6708),
0x32C8 => array(0x39, 0x6708), 0x32C9 => array(0x31, 0x30, 0x6708), 0x32CA => array(0x31, 0x31, 0x6708),
0x32CB => array(0x31, 0x32, 0x6708), 0x32CC => array(0x68, 0x67), 0x32CD => array(0x65, 0x72, 0x67),
0x32CE => array(0x65, 0x76), 0x32CF => array(0x6C, 0x74, 0x64), 0x32D0 => array(0x30A2),
0x32D1 => array(0x30A4), 0x32D2 => array(0x30A6), 0x32D3 => array(0x30A8),
0x32D4 => array(0x30AA), 0x32D5 => array(0x30AB), 0x32D6 => array(0x30AD),
0x32D7 => array(0x30AF), 0x32D8 => array(0x30B1), 0x32D9 => array(0x30B3),
0x32DA => array(0x30B5), 0x32DB => array(0x30B7), 0x32DC => array(0x30B9),
0x32DD => array(0x30BB), 0x32DE => array(0x30BD), 0x32DF => array(0x30BF),
0x32E0 => array(0x30C1), 0x32E1 => array(0x30C4), 0x32E2 => array(0x30C6),
0x32E3 => array(0x30C8), 0x32E4 => array(0x30CA), 0x32E5 => array(0x30CB),
0x32E6 => array(0x30CC), 0x32E7 => array(0x30CD), 0x32E8 => array(0x30CE),
0x32E9 => array(0x30CF), 0x32EA => array(0x30D2), 0x32EB => array(0x30D5),
0x32EC => array(0x30D8), 0x32ED => array(0x30DB), 0x32EE => array(0x30DE),
0x32EF => array(0x30DF), 0x32F0 => array(0x30E0), 0x32F1 => array(0x30E1),
0x32F2 => array(0x30E2), 0x32F3 => array(0x30E4), 0x32F4 => array(0x30E6),
0x32F5 => array(0x30E8), 0x32F6 => array(0x30E9), 0x32F7 => array(0x30EA),
0x32F8 => array(0x30EB), 0x32F9 => array(0x30EC), 0x32FA => array(0x30ED),
0x32FB => array(0x30EF), 0x32FC => array(0x30F0), 0x32FD => array(0x30F1),
0x32FE => array(0x30F2), 0x3300 => array(0x30A2, 0x30D1, 0x30FC, 0x30C8), 0x3301 => array(0x30A2, 0x30EB, 0x30D5, 0x30A1),
0x3302 => array(0x30A2, 0x30F3, 0x30DA, 0x30A2), 0x3303 => array(0x30A2, 0x30FC, 0x30EB), 0x3304 => array(0x30A4, 0x30CB, 0x30F3, 0x30B0),
0x3305 => array(0x30A4, 0x30F3, 0x30C1), 0x3306 => array(0x30A6, 0x30A9, 0x30F3), 0x3307 => array(0x30A8, 0x30B9, 0x30AF, 0x30FC, 0x30C9),
0x3308 => array(0x30A8, 0x30FC, 0x30AB, 0x30FC), 0x3309 => array(0x30AA, 0x30F3, 0x30B9), 0x330A => array(0x30AA, 0x30FC, 0x30E0),
0x330B => array(0x30AB, 0x30A4, 0x30EA), 0x330C => array(0x30AB, 0x30E9, 0x30C3, 0x30C8), 0x330D => array(0x30AB, 0x30ED, 0x30EA, 0x30FC),
0x330E => array(0x30AC, 0x30ED, 0x30F3), 0x330F => array(0x30AC, 0x30F3, 0x30DE), 0x3310 => array(0x30AE, 0x30AC),
0x3311 => array(0x30AE, 0x30CB, 0x30FC), 0x3312 => array(0x30AD, 0x30E5, 0x30EA, 0x30FC), 0x3313 => array(0x30AE, 0x30EB, 0x30C0, 0x30FC),
0x3314 => array(0x30AD, 0x30ED), 0x3315 => array(0x30AD, 0x30ED, 0x30B0, 0x30E9, 0x30E0), 0x3316 => array(0x30AD, 0x30ED, 0x30E1, 0x30FC, 0x30C8, 0x30EB),
0x3317 => array(0x30AD, 0x30ED, 0x30EF, 0x30C3, 0x30C8), 0x3318 => array(0x30B0, 0x30E9, 0x30E0), 0x3319 => array(0x30B0, 0x30E9, 0x30E0, 0x30C8, 0x30F3),
0x331A => array(0x30AF, 0x30EB, 0x30BC, 0x30A4, 0x30ED), 0x331B => array(0x30AF, 0x30ED, 0x30FC, 0x30CD), 0x331C => array(0x30B1, 0x30FC, 0x30B9),
0x331D => array(0x30B3, 0x30EB, 0x30CA), 0x331E => array(0x30B3, 0x30FC, 0x30DD), 0x331F => array(0x30B5, 0x30A4, 0x30AF, 0x30EB),
0x3320 => array(0x30B5, 0x30F3, 0x30C1, 0x30FC, 0x30E0), 0x3321 => array(0x30B7, 0x30EA, 0x30F3, 0x30B0), 0x3322 => array(0x30BB, 0x30F3, 0x30C1),
0x3323 => array(0x30BB, 0x30F3, 0x30C8), 0x3324 => array(0x30C0, 0x30FC, 0x30B9), 0x3325 => array(0x30C7, 0x30B7),
0x3326 => array(0x30C9, 0x30EB), 0x3327 => array(0x30C8, 0x30F3), 0x3328 => array(0x30CA, 0x30CE),
0x3329 => array(0x30CE, 0x30C3, 0x30C8), 0x332A => array(0x30CF, 0x30A4, 0x30C4), 0x332B => array(0x30D1, 0x30FC, 0x30BB, 0x30F3, 0x30C8),
0x332C => array(0x30D1, 0x30FC, 0x30C4), 0x332D => array(0x30D0, 0x30FC, 0x30EC, 0x30EB), 0x332E => array(0x30D4, 0x30A2, 0x30B9, 0x30C8, 0x30EB),
0x332F => array(0x30D4, 0x30AF, 0x30EB), 0x3330 => array(0x30D4, 0x30B3), 0x3331 => array(0x30D3, 0x30EB),
0x3332 => array(0x30D5, 0x30A1, 0x30E9, 0x30C3, 0x30C9), 0x3333 => array(0x30D5, 0x30A3, 0x30FC, 0x30C8), 0x3334 => array(0x30D6, 0x30C3, 0x30B7, 0x30A7, 0x30EB),
0x3335 => array(0x30D5, 0x30E9, 0x30F3), 0x3336 => array(0x30D8, 0x30AF, 0x30BF, 0x30FC, 0x30EB), 0x3337 => array(0x30DA, 0x30BD),
0x3338 => array(0x30DA, 0x30CB, 0x30D2), 0x3339 => array(0x30D8, 0x30EB, 0x30C4), 0x333A => array(0x30DA, 0x30F3, 0x30B9),
0x333B => array(0x30DA, 0x30FC, 0x30B8), 0x333C => array(0x30D9, 0x30FC, 0x30BF), 0x333D => array(0x30DD, 0x30A4, 0x30F3, 0x30C8),
0x333E => array(0x30DC, 0x30EB, 0x30C8), 0x333F => array(0x30DB, 0x30F3), 0x3340 => array(0x30DD, 0x30F3, 0x30C9),
0x3341 => array(0x30DB, 0x30FC, 0x30EB), 0x3342 => array(0x30DB, 0x30FC, 0x30F3), 0x3343 => array(0x30DE, 0x30A4, 0x30AF, 0x30ED),
0x3344 => array(0x30DE, 0x30A4, 0x30EB), 0x3345 => array(0x30DE, 0x30C3, 0x30CF), 0x3346 => array(0x30DE, 0x30EB, 0x30AF),
0x3347 => array(0x30DE, 0x30F3, 0x30B7, 0x30E7, 0x30F3), 0x3348 => array(0x30DF, 0x30AF, 0x30ED, 0x30F3), 0x3349 => array(0x30DF, 0x30EA),
0x334A => array(0x30DF, 0x30EA, 0x30D0, 0x30FC, 0x30EB), 0x334B => array(0x30E1, 0x30AC), 0x334C => array(0x30E1, 0x30AC, 0x30C8, 0x30F3),
0x334D => array(0x30E1, 0x30FC, 0x30C8, 0x30EB), 0x334E => array(0x30E4, 0x30FC, 0x30C9), 0x334F => array(0x30E4, 0x30FC, 0x30EB),
0x3350 => array(0x30E6, 0x30A2, 0x30F3), 0x3351 => array(0x30EA, 0x30C3, 0x30C8, 0x30EB), 0x3352 => array(0x30EA, 0x30E9),
0x3353 => array(0x30EB, 0x30D4, 0x30FC), 0x3354 => array(0x30EB, 0x30FC, 0x30D6, 0x30EB), 0x3355 => array(0x30EC, 0x30E0),
0x3356 => array(0x30EC, 0x30F3, 0x30C8, 0x30B2, 0x30F3), 0x3357 => array(0x30EF, 0x30C3, 0x30C8), 0x3358 => array(0x30, 0x70B9),
0x3359 => array(0x31, 0x70B9), 0x335A => array(0x32, 0x70B9), 0x335B => array(0x33, 0x70B9),
0x335C => array(0x34, 0x70B9), 0x335D => array(0x35, 0x70B9), 0x335E => array(0x36, 0x70B9),
0x335F => array(0x37, 0x70B9), 0x3360 => array(0x38, 0x70B9), 0x3361 => array(0x39, 0x70B9),
0x3362 => array(0x31, 0x30, 0x70B9), 0x3363 => array(0x31, 0x31, 0x70B9), 0x3364 => array(0x31, 0x32, 0x70B9),
0x3365 => array(0x31, 0x33, 0x70B9), 0x3366 => array(0x31, 0x34, 0x70B9), 0x3367 => array(0x31, 0x35, 0x70B9),
0x3368 => array(0x31, 0x36, 0x70B9), 0x3369 => array(0x31, 0x37, 0x70B9), 0x336A => array(0x31, 0x38, 0x70B9),
0x336B => array(0x31, 0x39, 0x70B9), 0x336C => array(0x32, 0x30, 0x70B9), 0x336D => array(0x32, 0x31, 0x70B9),
0x336E => array(0x32, 0x32, 0x70B9), 0x336F => array(0x32, 0x33, 0x70B9), 0x3370 => array(0x32, 0x34, 0x70B9),
0x3371 => array(0x68, 0x70, 0x61), 0x3372 => array(0x64, 0x61), 0x3373 => array(0x61, 0x75),
0x3374 => array(0x62, 0x61, 0x72), 0x3375 => array(0x6F, 0x76), 0x3376 => array(0x70, 0x63),
0x3377 => array(0x64, 0x6D), 0x3378 => array(0x64, 0x6D, 0x32), 0x3379 => array(0x64, 0x6D, 0x33),
0x337A => array(0x69, 0x75), 0x337B => array(0x5E73, 0x6210), 0x337C => array(0x662D, 0x548C),
0x337D => array(0x5927, 0x6B63), 0x337E => array(0x660E, 0x6CBB), 0x337F => array(0x682A, 0x5F0F, 0x4F1A, 0x793E),
0x3380 => array(0x70, 0x61), 0x3381 => array(0x6E, 0x61), 0x3382 => array(0x3BC, 0x61),
0x3383 => array(0x6D, 0x61), 0x3384 => array(0x6B, 0x61), 0x3385 => array(0x6B, 0x62),
0x3386 => array(0x6D, 0x62), 0x3387 => array(0x67, 0x62), 0x3388 => array(0x63, 0x61, 0x6C),
0x3389 => array(0x6B, 0x63, 0x61, 0x6C), 0x338A => array(0x70, 0x66), 0x338B => array(0x6E, 0x66),
0x338C => array(0x3BC, 0x66), 0x338D => array(0x3BC, 0x67), 0x338E => array(0x6D, 0x67),
0x338F => array(0x6B, 0x67), 0x3390 => array(0x68, 0x7A), 0x3391 => array(0x6B, 0x68, 0x7A),
0x3392 => array(0x6D, 0x68, 0x7A), 0x3393 => array(0x67, 0x68, 0x7A), 0x3394 => array(0x74, 0x68, 0x7A),
0x3395 => array(0x3BC, 0x6C), 0x3396 => array(0x6D, 0x6C), 0x3397 => array(0x64, 0x6C),
0x3398 => array(0x6B, 0x6C), 0x3399 => array(0x66, 0x6D), 0x339A => array(0x6E, 0x6D),
0x339B => array(0x3BC, 0x6D), 0x339C => array(0x6D, 0x6D), 0x339D => array(0x63, 0x6D),
0x339E => array(0x6B, 0x6D), 0x339F => array(0x6D, 0x6D, 0x32), 0x33A0 => array(0x63, 0x6D, 0x32),
0x33A1 => array(0x6D, 0x32), 0x33A2 => array(0x6B, 0x6D, 0x32), 0x33A3 => array(0x6D, 0x6D, 0x33),
0x33A4 => array(0x63, 0x6D, 0x33), 0x33A5 => array(0x6D, 0x33), 0x33A6 => array(0x6B, 0x6D, 0x33),
0x33A7 => array(0x6D, 0x2215, 0x73), 0x33A8 => array(0x6D, 0x2215, 0x73, 0x32), 0x33A9 => array(0x70, 0x61),
0x33AA => array(0x6B, 0x70, 0x61), 0x33AB => array(0x6D, 0x70, 0x61), 0x33AC => array(0x67, 0x70, 0x61),
0x33AD => array(0x72, 0x61, 0x64), 0x33AE => array(0x72, 0x61, 0x64, 0x2215, 0x73), 0x33AF => array(0x72, 0x61, 0x64, 0x2215, 0x73, 0x32),
0x33B0 => array(0x70, 0x73), 0x33B1 => array(0x6E, 0x73), 0x33B2 => array(0x3BC, 0x73),
0x33B3 => array(0x6D, 0x73), 0x33B4 => array(0x70, 0x76), 0x33B5 => array(0x6E, 0x76),
0x33B6 => array(0x3BC, 0x76), 0x33B7 => array(0x6D, 0x76), 0x33B8 => array(0x6B, 0x76),
0x33B9 => array(0x6D, 0x76), 0x33BA => array(0x70, 0x77), 0x33BB => array(0x6E, 0x77),
0x33BC => array(0x3BC, 0x77), 0x33BD => array(0x6D, 0x77), 0x33BE => array(0x6B, 0x77),
0x33BF => array(0x6D, 0x77), 0x33C0 => array(0x6B, 0x3C9), 0x33C1 => array(0x6D, 0x3C9),
0x33C3 => array(0x62, 0x71), 0x33C4 => array(0x63, 0x63), 0x33C5 => array(0x63, 0x64),
0x33C6 => array(0x63, 0x2215, 0x6B, 0x67), 0x33C8 => array(0x64, 0x62), 0x33C9 => array(0x67, 0x79),
0x33CA => array(0x68, 0x61), 0x33CB => array(0x68, 0x70), 0x33CC => array(0x69, 0x6E),
0x33CD => array(0x6B, 0x6B), 0x33CE => array(0x6B, 0x6D), 0x33CF => array(0x6B, 0x74),
0x33D0 => array(0x6C, 0x6D), 0x33D1 => array(0x6C, 0x6E), 0x33D2 => array(0x6C, 0x6F, 0x67),
0x33D3 => array(0x6C, 0x78), 0x33D4 => array(0x6D, 0x62), 0x33D5 => array(0x6D, 0x69, 0x6C),
0x33D6 => array(0x6D, 0x6F, 0x6C), 0x33D7 => array(0x70, 0x68), 0x33D9 => array(0x70, 0x70, 0x6D),
0x33DA => array(0x70, 0x72), 0x33DB => array(0x73, 0x72), 0x33DC => array(0x73, 0x76),
0x33DD => array(0x77, 0x62), 0x33DE => array(0x76, 0x2215, 0x6D), 0x33DF => array(0x61, 0x2215, 0x6D),
0x33E0 => array(0x31, 0x65E5), 0x33E1 => array(0x32, 0x65E5), 0x33E2 => array(0x33, 0x65E5),
0x33E3 => array(0x34, 0x65E5), 0x33E4 => array(0x35, 0x65E5), 0x33E5 => array(0x36, 0x65E5),
0x33E6 => array(0x37, 0x65E5), 0x33E7 => array(0x38, 0x65E5), 0x33E8 => array(0x39, 0x65E5),
0x33E9 => array(0x31, 0x30, 0x65E5), 0x33EA => array(0x31, 0x31, 0x65E5), 0x33EB => array(0x31, 0x32, 0x65E5),
0x33EC => array(0x31, 0x33, 0x65E5), 0x33ED => array(0x31, 0x34, 0x65E5), 0x33EE => array(0x31, 0x35, 0x65E5),
0x33EF => array(0x31, 0x36, 0x65E5), 0x33F0 => array(0x31, 0x37, 0x65E5), 0x33F1 => array(0x31, 0x38, 0x65E5),
0x33F2 => array(0x31, 0x39, 0x65E5), 0x33F3 => array(0x32, 0x30, 0x65E5), 0x33F4 => array(0x32, 0x31, 0x65E5),
0x33F5 => array(0x32, 0x32, 0x65E5), 0x33F6 => array(0x32, 0x33, 0x65E5), 0x33F7 => array(0x32, 0x34, 0x65E5),
0x33F8 => array(0x32, 0x35, 0x65E5), 0x33F9 => array(0x32, 0x36, 0x65E5), 0x33FA => array(0x32, 0x37, 0x65E5),
0x33FB => array(0x32, 0x38, 0x65E5), 0x33FC => array(0x32, 0x39, 0x65E5), 0x33FD => array(0x33, 0x30, 0x65E5),
0x33FE => array(0x33, 0x31, 0x65E5), 0x33FF => array(0x67, 0x61, 0x6C), 0xA640 => array(0xA641),
0xA642 => array(0xA643), 0xA644 => array(0xA645), 0xA646 => array(0xA647),
0xA648 => array(0xA649), 0xA64A => array(0xA64B), 0xA64C => array(0xA64D),
0xA64E => array(0xA64F), 0xA650 => array(0xA651), 0xA652 => array(0xA653),
0xA654 => array(0xA655), 0xA656 => array(0xA657), 0xA658 => array(0xA659),
0xA65A => array(0xA65B), 0xA65C => array(0xA65D), 0xA65E => array(0xA65F),
0xA660 => array(0xA661), 0xA662 => array(0xA663), 0xA664 => array(0xA665),
0xA666 => array(0xA667), 0xA668 => array(0xA669), 0xA66A => array(0xA66B),
0xA66C => array(0xA66D), 0xA680 => array(0xA681), 0xA682 => array(0xA683),
0xA684 => array(0xA685), 0xA686 => array(0xA687), 0xA688 => array(0xA689),
0xA68A => array(0xA68B), 0xA68C => array(0xA68D), 0xA68E => array(0xA68F),
0xA690 => array(0xA691), 0xA692 => array(0xA693), 0xA694 => array(0xA695),
0xA696 => array(0xA697), 0xA698 => array(0xA699), 0xA69A => array(0xA69B),
0xA69C => array(0x44A), 0xA69D => array(0x44C), 0xA722 => array(0xA723),
0xA724 => array(0xA725), 0xA726 => array(0xA727), 0xA728 => array(0xA729),
0xA72A => array(0xA72B), 0xA72C => array(0xA72D), 0xA72E => array(0xA72F),
0xA732 => array(0xA733), 0xA734 => array(0xA735), 0xA736 => array(0xA737),
0xA738 => array(0xA739), 0xA73A => array(0xA73B), 0xA73C => array(0xA73D),
0xA73E => array(0xA73F), 0xA740 => array(0xA741), 0xA742 => array(0xA743),
0xA744 => array(0xA745), 0xA746 => array(0xA747), 0xA748 => array(0xA749),
0xA74A => array(0xA74B), 0xA74C => array(0xA74D), 0xA74E => array(0xA74F),
0xA750 => array(0xA751), 0xA752 => array(0xA753), 0xA754 => array(0xA755),
0xA756 => array(0xA757), 0xA758 => array(0xA759), 0xA75A => array(0xA75B),
0xA75C => array(0xA75D), 0xA75E => array(0xA75F), 0xA760 => array(0xA761),
0xA762 => array(0xA763), 0xA764 => array(0xA765), 0xA766 => array(0xA767),
0xA768 => array(0xA769), 0xA76A => array(0xA76B), 0xA76C => array(0xA76D),
0xA76E => array(0xA76F), 0xA770 => array(0xA76F), 0xA779 => array(0xA77A),
0xA77B => array(0xA77C), 0xA77D => array(0x1D79), 0xA77E => array(0xA77F),
0xA780 => array(0xA781), 0xA782 => array(0xA783), 0xA784 => array(0xA785),
0xA786 => array(0xA787), 0xA78B => array(0xA78C), 0xA78D => array(0x265),
0xA790 => array(0xA791), 0xA792 => array(0xA793), 0xA796 => array(0xA797),
0xA798 => array(0xA799), 0xA79A => array(0xA79B), 0xA79C => array(0xA79D),
0xA79E => array(0xA79F), 0xA7A0 => array(0xA7A1), 0xA7A2 => array(0xA7A3),
0xA7A4 => array(0xA7A5), 0xA7A6 => array(0xA7A7), 0xA7A8 => array(0xA7A9),
0xA7AA => array(0x266), 0xA7AB => array(0x25C), 0xA7AC => array(0x261),
0xA7AD => array(0x26C), 0xA7B0 => array(0x29E), 0xA7B1 => array(0x287),
0xA7F8 => array(0x127), 0xA7F9 => array(0x153), 0xAB5C => array(0xA727),
0xAB5D => array(0xAB37), 0xAB5E => array(0x26B), 0xAB5F => array(0xAB52),
0xF900 => array(0x8C48), 0xF901 => array(0x66F4), 0xF902 => array(0x8ECA),
0xF903 => array(0x8CC8), 0xF904 => array(0x6ED1), 0xF905 => array(0x4E32),
0xF906 => array(0x53E5), 0xF907 => array(0x9F9C), 0xF908 => array(0x9F9C),
0xF909 => array(0x5951), 0xF90A => array(0x91D1), 0xF90B => array(0x5587),
0xF90C => array(0x5948), 0xF90D => array(0x61F6), 0xF90E => array(0x7669),
0xF90F => array(0x7F85), 0xF910 => array(0x863F), 0xF911 => array(0x87BA),
0xF912 => array(0x88F8), 0xF913 => array(0x908F), 0xF914 => array(0x6A02),
0xF915 => array(0x6D1B), 0xF916 => array(0x70D9), 0xF917 => array(0x73DE),
0xF918 => array(0x843D), 0xF919 => array(0x916A), 0xF91A => array(0x99F1),
0xF91B => array(0x4E82), 0xF91C => array(0x5375), 0xF91D => array(0x6B04),
0xF91E => array(0x721B), 0xF91F => array(0x862D), 0xF920 => array(0x9E1E),
0xF921 => array(0x5D50), 0xF922 => array(0x6FEB), 0xF923 => array(0x85CD),
0xF924 => array(0x8964), 0xF925 => array(0x62C9), 0xF926 => array(0x81D8),
0xF927 => array(0x881F), 0xF928 => array(0x5ECA), 0xF929 => array(0x6717),
0xF92A => array(0x6D6A), 0xF92B => array(0x72FC), 0xF92C => array(0x90CE),
0xF92D => array(0x4F86), 0xF92E => array(0x51B7), 0xF92F => array(0x52DE),
0xF930 => array(0x64C4), 0xF931 => array(0x6AD3), 0xF932 => array(0x7210),
0xF933 => array(0x76E7), 0xF934 => array(0x8001), 0xF935 => array(0x8606),
0xF936 => array(0x865C), 0xF937 => array(0x8DEF), 0xF938 => array(0x9732),
0xF939 => array(0x9B6F), 0xF93A => array(0x9DFA), 0xF93B => array(0x788C),
0xF93C => array(0x797F), 0xF93D => array(0x7DA0), 0xF93E => array(0x83C9),
0xF93F => array(0x9304), 0xF940 => array(0x9E7F), 0xF941 => array(0x8AD6),
0xF942 => array(0x58DF), 0xF943 => array(0x5F04), 0xF944 => array(0x7C60),
0xF945 => array(0x807E), 0xF946 => array(0x7262), 0xF947 => array(0x78CA),
0xF948 => array(0x8CC2), 0xF949 => array(0x96F7), 0xF94A => array(0x58D8),
0xF94B => array(0x5C62), 0xF94C => array(0x6A13), 0xF94D => array(0x6DDA),
0xF94E => array(0x6F0F), 0xF94F => array(0x7D2F), 0xF950 => array(0x7E37),
0xF951 => array(0x964B), 0xF952 => array(0x52D2), 0xF953 => array(0x808B),
0xF954 => array(0x51DC), 0xF955 => array(0x51CC), 0xF956 => array(0x7A1C),
0xF957 => array(0x7DBE), 0xF958 => array(0x83F1), 0xF959 => array(0x9675),
0xF95A => array(0x8B80), 0xF95B => array(0x62CF), 0xF95C => array(0x6A02),
0xF95D => array(0x8AFE), 0xF95E => array(0x4E39), 0xF95F => array(0x5BE7),
0xF960 => array(0x6012), 0xF961 => array(0x7387), 0xF962 => array(0x7570),
0xF963 => array(0x5317), 0xF964 => array(0x78FB), 0xF965 => array(0x4FBF),
0xF966 => array(0x5FA9), 0xF967 => array(0x4E0D), 0xF968 => array(0x6CCC),
0xF969 => array(0x6578), 0xF96A => array(0x7D22), 0xF96B => array(0x53C3),
0xF96C => array(0x585E), 0xF96D => array(0x7701), 0xF96E => array(0x8449),
0xF96F => array(0x8AAA), 0xF970 => array(0x6BBA), 0xF971 => array(0x8FB0),
0xF972 => array(0x6C88), 0xF973 => array(0x62FE), 0xF974 => array(0x82E5),
0xF975 => array(0x63A0), 0xF976 => array(0x7565), 0xF977 => array(0x4EAE),
0xF978 => array(0x5169), 0xF979 => array(0x51C9), 0xF97A => array(0x6881),
0xF97B => array(0x7CE7), 0xF97C => array(0x826F), 0xF97D => array(0x8AD2),
0xF97E => array(0x91CF), 0xF97F => array(0x52F5), 0xF980 => array(0x5442),
0xF981 => array(0x5973), 0xF982 => array(0x5EEC), 0xF983 => array(0x65C5),
0xF984 => array(0x6FFE), 0xF985 => array(0x792A), 0xF986 => array(0x95AD),
0xF987 => array(0x9A6A), 0xF988 => array(0x9E97), 0xF989 => array(0x9ECE),
0xF98A => array(0x529B), 0xF98B => array(0x66C6), 0xF98C => array(0x6B77),
0xF98D => array(0x8F62), 0xF98E => array(0x5E74), 0xF98F => array(0x6190),
0xF990 => array(0x6200), 0xF991 => array(0x649A), 0xF992 => array(0x6F23),
0xF993 => array(0x7149), 0xF994 => array(0x7489), 0xF995 => array(0x79CA),
0xF996 => array(0x7DF4), 0xF997 => array(0x806F), 0xF998 => array(0x8F26),
0xF999 => array(0x84EE), 0xF99A => array(0x9023), 0xF99B => array(0x934A),
0xF99C => array(0x5217), 0xF99D => array(0x52A3), 0xF99E => array(0x54BD),
0xF99F => array(0x70C8), 0xF9A0 => array(0x88C2), 0xF9A1 => array(0x8AAA),
0xF9A2 => array(0x5EC9), 0xF9A3 => array(0x5FF5), 0xF9A4 => array(0x637B),
0xF9A5 => array(0x6BAE), 0xF9A6 => array(0x7C3E), 0xF9A7 => array(0x7375),
0xF9A8 => array(0x4EE4), 0xF9A9 => array(0x56F9), 0xF9AA => array(0x5BE7),
0xF9AB => array(0x5DBA), 0xF9AC => array(0x601C), 0xF9AD => array(0x73B2),
0xF9AE => array(0x7469), 0xF9AF => array(0x7F9A), 0xF9B0 => array(0x8046),
0xF9B1 => array(0x9234), 0xF9B2 => array(0x96F6), 0xF9B3 => array(0x9748),
0xF9B4 => array(0x9818), 0xF9B5 => array(0x4F8B), 0xF9B6 => array(0x79AE),
0xF9B7 => array(0x91B4), 0xF9B8 => array(0x96B8), 0xF9B9 => array(0x60E1),
0xF9BA => array(0x4E86), 0xF9BB => array(0x50DA), 0xF9BC => array(0x5BEE),
0xF9BD => array(0x5C3F), 0xF9BE => array(0x6599), 0xF9BF => array(0x6A02),
0xF9C0 => array(0x71CE), 0xF9C1 => array(0x7642), 0xF9C2 => array(0x84FC),
0xF9C3 => array(0x907C), 0xF9C4 => array(0x9F8D), 0xF9C5 => array(0x6688),
0xF9C6 => array(0x962E), 0xF9C7 => array(0x5289), 0xF9C8 => array(0x677B),
0xF9C9 => array(0x67F3), 0xF9CA => array(0x6D41), 0xF9CB => array(0x6E9C),
0xF9CC => array(0x7409), 0xF9CD => array(0x7559), 0xF9CE => array(0x786B),
0xF9CF => array(0x7D10), 0xF9D0 => array(0x985E), 0xF9D1 => array(0x516D),
0xF9D2 => array(0x622E), 0xF9D3 => array(0x9678), 0xF9D4 => array(0x502B),
0xF9D5 => array(0x5D19), 0xF9D6 => array(0x6DEA), 0xF9D7 => array(0x8F2A),
0xF9D8 => array(0x5F8B), 0xF9D9 => array(0x6144), 0xF9DA => array(0x6817),
0xF9DB => array(0x7387), 0xF9DC => array(0x9686), 0xF9DD => array(0x5229),
0xF9DE => array(0x540F), 0xF9DF => array(0x5C65), 0xF9E0 => array(0x6613),
0xF9E1 => array(0x674E), 0xF9E2 => array(0x68A8), 0xF9E3 => array(0x6CE5),
0xF9E4 => array(0x7406), 0xF9E5 => array(0x75E2), 0xF9E6 => array(0x7F79),
0xF9E7 => array(0x88CF), 0xF9E8 => array(0x88E1), 0xF9E9 => array(0x91CC),
0xF9EA => array(0x96E2), 0xF9EB => array(0x533F), 0xF9EC => array(0x6EBA),
0xF9ED => array(0x541D), 0xF9EE => array(0x71D0), 0xF9EF => array(0x7498),
0xF9F0 => array(0x85FA), 0xF9F1 => array(0x96A3), 0xF9F2 => array(0x9C57),
0xF9F3 => array(0x9E9F), 0xF9F4 => array(0x6797), 0xF9F5 => array(0x6DCB),
0xF9F6 => array(0x81E8), 0xF9F7 => array(0x7ACB), 0xF9F8 => array(0x7B20),
0xF9F9 => array(0x7C92), 0xF9FA => array(0x72C0), 0xF9FB => array(0x7099),
0xF9FC => array(0x8B58), 0xF9FD => array(0x4EC0), 0xF9FE => array(0x8336),
0xF9FF => array(0x523A), 0xFA00 => array(0x5207), 0xFA01 => array(0x5EA6),
0xFA02 => array(0x62D3), 0xFA03 => array(0x7CD6), 0xFA04 => array(0x5B85),
0xFA05 => array(0x6D1E), 0xFA06 => array(0x66B4), 0xFA07 => array(0x8F3B),
0xFA08 => array(0x884C), 0xFA09 => array(0x964D), 0xFA0A => array(0x898B),
0xFA0B => array(0x5ED3), 0xFA0C => array(0x5140), 0xFA0D => array(0x55C0),
0xFA10 => array(0x585A), 0xFA12 => array(0x6674), 0xFA15 => array(0x51DE),
0xFA16 => array(0x732A), 0xFA17 => array(0x76CA), 0xFA18 => array(0x793C),
0xFA19 => array(0x795E), 0xFA1A => array(0x7965), 0xFA1B => array(0x798F),
0xFA1C => array(0x9756), 0xFA1D => array(0x7CBE), 0xFA1E => array(0x7FBD),
0xFA20 => array(0x8612), 0xFA22 => array(0x8AF8), 0xFA25 => array(0x9038),
0xFA26 => array(0x90FD), 0xFA2A => array(0x98EF), 0xFA2B => array(0x98FC),
0xFA2C => array(0x9928), 0xFA2D => array(0x9DB4), 0xFA2E => array(0x90DE),
0xFA2F => array(0x96B7), 0xFA30 => array(0x4FAE), 0xFA31 => array(0x50E7),
0xFA32 => array(0x514D), 0xFA33 => array(0x52C9), 0xFA34 => array(0x52E4),
0xFA35 => array(0x5351), 0xFA36 => array(0x559D), 0xFA37 => array(0x5606),
0xFA38 => array(0x5668), 0xFA39 => array(0x5840), 0xFA3A => array(0x58A8),
0xFA3B => array(0x5C64), 0xFA3C => array(0x5C6E), 0xFA3D => array(0x6094),
0xFA3E => array(0x6168), 0xFA3F => array(0x618E), 0xFA40 => array(0x61F2),
0xFA41 => array(0x654F), 0xFA42 => array(0x65E2), 0xFA43 => array(0x6691),
0xFA44 => array(0x6885), 0xFA45 => array(0x6D77), 0xFA46 => array(0x6E1A),
0xFA47 => array(0x6F22), 0xFA48 => array(0x716E), 0xFA49 => array(0x722B),
0xFA4A => array(0x7422), 0xFA4B => array(0x7891), 0xFA4C => array(0x793E),
0xFA4D => array(0x7949), 0xFA4E => array(0x7948), 0xFA4F => array(0x7950),
0xFA50 => array(0x7956), 0xFA51 => array(0x795D), 0xFA52 => array(0x798D),
0xFA53 => array(0x798E), 0xFA54 => array(0x7A40), 0xFA55 => array(0x7A81),
0xFA56 => array(0x7BC0), 0xFA57 => array(0x7DF4), 0xFA58 => array(0x7E09),
0xFA59 => array(0x7E41), 0xFA5A => array(0x7F72), 0xFA5B => array(0x8005),
0xFA5C => array(0x81ED), 0xFA5D => array(0x8279), 0xFA5E => array(0x8279),
0xFA5F => array(0x8457), 0xFA60 => array(0x8910), 0xFA61 => array(0x8996),
0xFA62 => array(0x8B01), 0xFA63 => array(0x8B39), 0xFA64 => array(0x8CD3),
0xFA65 => array(0x8D08), 0xFA66 => array(0x8FB6), 0xFA67 => array(0x9038),
0xFA68 => array(0x96E3), 0xFA69 => array(0x97FF), 0xFA6A => array(0x983B),
0xFA6B => array(0x6075), 0xFA6C => array(0x242EE), 0xFA6D => array(0x8218),
0xFA70 => array(0x4E26), 0xFA71 => array(0x51B5), 0xFA72 => array(0x5168),
0xFA73 => array(0x4F80), 0xFA74 => array(0x5145), 0xFA75 => array(0x5180),
0xFA76 => array(0x52C7), 0xFA77 => array(0x52FA), 0xFA78 => array(0x559D),
0xFA79 => array(0x5555), 0xFA7A => array(0x5599), 0xFA7B => array(0x55E2),
0xFA7C => array(0x585A), 0xFA7D => array(0x58B3), 0xFA7E => array(0x5944),
0xFA7F => array(0x5954), 0xFA80 => array(0x5A62), 0xFA81 => array(0x5B28),
0xFA82 => array(0x5ED2), 0xFA83 => array(0x5ED9), 0xFA84 => array(0x5F69),
0xFA85 => array(0x5FAD), 0xFA86 => array(0x60D8), 0xFA87 => array(0x614E),
0xFA88 => array(0x6108), 0xFA89 => array(0x618E), 0xFA8A => array(0x6160),
0xFA8B => array(0x61F2), 0xFA8C => array(0x6234), 0xFA8D => array(0x63C4),
0xFA8E => array(0x641C), 0xFA8F => array(0x6452), 0xFA90 => array(0x6556),
0xFA91 => array(0x6674), 0xFA92 => array(0x6717), 0xFA93 => array(0x671B),
0xFA94 => array(0x6756), 0xFA95 => array(0x6B79), 0xFA96 => array(0x6BBA),
0xFA97 => array(0x6D41), 0xFA98 => array(0x6EDB), 0xFA99 => array(0x6ECB),
0xFA9A => array(0x6F22), 0xFA9B => array(0x701E), 0xFA9C => array(0x716E),
0xFA9D => array(0x77A7), 0xFA9E => array(0x7235), 0xFA9F => array(0x72AF),
0xFAA0 => array(0x732A), 0xFAA1 => array(0x7471), 0xFAA2 => array(0x7506),
0xFAA3 => array(0x753B), 0xFAA4 => array(0x761D), 0xFAA5 => array(0x761F),
0xFAA6 => array(0x76CA), 0xFAA7 => array(0x76DB), 0xFAA8 => array(0x76F4),
0xFAA9 => array(0x774A), 0xFAAA => array(0x7740), 0xFAAB => array(0x78CC),
0xFAAC => array(0x7AB1), 0xFAAD => array(0x7BC0), 0xFAAE => array(0x7C7B),
0xFAAF => array(0x7D5B), 0xFAB0 => array(0x7DF4), 0xFAB1 => array(0x7F3E),
0xFAB2 => array(0x8005), 0xFAB3 => array(0x8352), 0xFAB4 => array(0x83EF),
0xFAB5 => array(0x8779), 0xFAB6 => array(0x8941), 0xFAB7 => array(0x8986),
0xFAB8 => array(0x8996), 0xFAB9 => array(0x8ABF), 0xFABA => array(0x8AF8),
0xFABB => array(0x8ACB), 0xFABC => array(0x8B01), 0xFABD => array(0x8AFE),
0xFABE => array(0x8AED), 0xFABF => array(0x8B39), 0xFAC0 => array(0x8B8A),
0xFAC1 => array(0x8D08), 0xFAC2 => array(0x8F38), 0xFAC3 => array(0x9072),
0xFAC4 => array(0x9199), 0xFAC5 => array(0x9276), 0xFAC6 => array(0x967C),
0xFAC7 => array(0x96E3), 0xFAC8 => array(0x9756), 0xFAC9 => array(0x97DB),
0xFACA => array(0x97FF), 0xFACB => array(0x980B), 0xFACC => array(0x983B),
0xFACD => array(0x9B12), 0xFACE => array(0x9F9C), 0xFACF => array(0x2284A),
0xFAD0 => array(0x22844), 0xFAD1 => array(0x233D5), 0xFAD2 => array(0x3B9D),
0xFAD3 => array(0x4018), 0xFAD4 => array(0x4039), 0xFAD5 => array(0x25249),
0xFAD6 => array(0x25CD0), 0xFAD7 => array(0x27ED3), 0xFAD8 => array(0x9F43),
0xFAD9 => array(0x9F8E), 0xFB00 => array(0x66, 0x66), 0xFB01 => array(0x66, 0x69),
0xFB02 => array(0x66, 0x6C), 0xFB03 => array(0x66, 0x66, 0x69), 0xFB04 => array(0x66, 0x66, 0x6C),
0xFB05 => array(0x73, 0x74), 0xFB06 => array(0x73, 0x74), 0xFB13 => array(0x574, 0x576),
0xFB14 => array(0x574, 0x565), 0xFB15 => array(0x574, 0x56B), 0xFB16 => array(0x57E, 0x576),
0xFB17 => array(0x574, 0x56D), 0xFB1D => array(0x5D9, 0x5B4), 0xFB1F => array(0x5F2, 0x5B7),
0xFB20 => array(0x5E2), 0xFB21 => array(0x5D0), 0xFB22 => array(0x5D3),
0xFB23 => array(0x5D4), 0xFB24 => array(0x5DB), 0xFB25 => array(0x5DC),
0xFB26 => array(0x5DD), 0xFB27 => array(0x5E8), 0xFB28 => array(0x5EA),
0xFB2A => array(0x5E9, 0x5C1), 0xFB2B => array(0x5E9, 0x5C2), 0xFB2C => array(0x5E9, 0x5BC, 0x5C1),
0xFB2D => array(0x5E9, 0x5BC, 0x5C2), 0xFB2E => array(0x5D0, 0x5B7), 0xFB2F => array(0x5D0, 0x5B8),
0xFB30 => array(0x5D0, 0x5BC), 0xFB31 => array(0x5D1, 0x5BC), 0xFB32 => array(0x5D2, 0x5BC),
0xFB33 => array(0x5D3, 0x5BC), 0xFB34 => array(0x5D4, 0x5BC), 0xFB35 => array(0x5D5, 0x5BC),
0xFB36 => array(0x5D6, 0x5BC), 0xFB38 => array(0x5D8, 0x5BC), 0xFB39 => array(0x5D9, 0x5BC),
0xFB3A => array(0x5DA, 0x5BC), 0xFB3B => array(0x5DB, 0x5BC), 0xFB3C => array(0x5DC, 0x5BC),
0xFB3E => array(0x5DE, 0x5BC), 0xFB40 => array(0x5E0, 0x5BC), 0xFB41 => array(0x5E1, 0x5BC),
0xFB43 => array(0x5E3, 0x5BC), 0xFB44 => array(0x5E4, 0x5BC), 0xFB46 => array(0x5E6, 0x5BC),
0xFB47 => array(0x5E7, 0x5BC), 0xFB48 => array(0x5E8, 0x5BC), 0xFB49 => array(0x5E9, 0x5BC),
0xFB4A => array(0x5EA, 0x5BC), 0xFB4B => array(0x5D5, 0x5B9), 0xFB4C => array(0x5D1, 0x5BF),
0xFB4D => array(0x5DB, 0x5BF), 0xFB4E => array(0x5E4, 0x5BF), 0xFB4F => array(0x5D0, 0x5DC),
0xFB50 => array(0x671), 0xFB51 => array(0x671), 0xFB52 => array(0x67B),
0xFB53 => array(0x67B), 0xFB54 => array(0x67B), 0xFB55 => array(0x67B),
0xFB56 => array(0x67E), 0xFB57 => array(0x67E), 0xFB58 => array(0x67E),
0xFB59 => array(0x67E), 0xFB5A => array(0x680), 0xFB5B => array(0x680),
0xFB5C => array(0x680), 0xFB5D => array(0x680), 0xFB5E => array(0x67A),
0xFB5F => array(0x67A), 0xFB60 => array(0x67A), 0xFB61 => array(0x67A),
0xFB62 => array(0x67F), 0xFB63 => array(0x67F), 0xFB64 => array(0x67F),
0xFB65 => array(0x67F), 0xFB66 => array(0x679), 0xFB67 => array(0x679),
0xFB68 => array(0x679), 0xFB69 => array(0x679), 0xFB6A => array(0x6A4),
0xFB6B => array(0x6A4), 0xFB6C => array(0x6A4), 0xFB6D => array(0x6A4),
0xFB6E => array(0x6A6), 0xFB6F => array(0x6A6), 0xFB70 => array(0x6A6),
0xFB71 => array(0x6A6), 0xFB72 => array(0x684), 0xFB73 => array(0x684),
0xFB74 => array(0x684), 0xFB75 => array(0x684), 0xFB76 => array(0x683),
0xFB77 => array(0x683), 0xFB78 => array(0x683), 0xFB79 => array(0x683),
0xFB7A => array(0x686), 0xFB7B => array(0x686), 0xFB7C => array(0x686),
0xFB7D => array(0x686), 0xFB7E => array(0x687), 0xFB7F => array(0x687),
0xFB80 => array(0x687), 0xFB81 => array(0x687), 0xFB82 => array(0x68D),
0xFB83 => array(0x68D), 0xFB84 => array(0x68C), 0xFB85 => array(0x68C),
0xFB86 => array(0x68E), 0xFB87 => array(0x68E), 0xFB88 => array(0x688),
0xFB89 => array(0x688), 0xFB8A => array(0x698), 0xFB8B => array(0x698),
0xFB8C => array(0x691), 0xFB8D => array(0x691), 0xFB8E => array(0x6A9),
0xFB8F => array(0x6A9), 0xFB90 => array(0x6A9), 0xFB91 => array(0x6A9),
0xFB92 => array(0x6AF), 0xFB93 => array(0x6AF), 0xFB94 => array(0x6AF),
0xFB95 => array(0x6AF), 0xFB96 => array(0x6B3), 0xFB97 => array(0x6B3),
0xFB98 => array(0x6B3), 0xFB99 => array(0x6B3), 0xFB9A => array(0x6B1),
0xFB9B => array(0x6B1), 0xFB9C => array(0x6B1), 0xFB9D => array(0x6B1),
0xFB9E => array(0x6BA), 0xFB9F => array(0x6BA), 0xFBA0 => array(0x6BB),
0xFBA1 => array(0x6BB), 0xFBA2 => array(0x6BB), 0xFBA3 => array(0x6BB),
0xFBA4 => array(0x6C0), 0xFBA5 => array(0x6C0), 0xFBA6 => array(0x6C1),
0xFBA7 => array(0x6C1), 0xFBA8 => array(0x6C1), 0xFBA9 => array(0x6C1),
0xFBAA => array(0x6BE), 0xFBAB => array(0x6BE), 0xFBAC => array(0x6BE),
0xFBAD => array(0x6BE), 0xFBAE => array(0x6D2), 0xFBAF => array(0x6D2),
0xFBB0 => array(0x6D3), 0xFBB1 => array(0x6D3), 0xFBD3 => array(0x6AD),
0xFBD4 => array(0x6AD), 0xFBD5 => array(0x6AD), 0xFBD6 => array(0x6AD),
0xFBD7 => array(0x6C7), 0xFBD8 => array(0x6C7), 0xFBD9 => array(0x6C6),
0xFBDA => array(0x6C6), 0xFBDB => array(0x6C8), 0xFBDC => array(0x6C8),
0xFBDD => array(0x6C7, 0x674), 0xFBDE => array(0x6CB), 0xFBDF => array(0x6CB),
0xFBE0 => array(0x6C5), 0xFBE1 => array(0x6C5), 0xFBE2 => array(0x6C9),
0xFBE3 => array(0x6C9), 0xFBE4 => array(0x6D0), 0xFBE5 => array(0x6D0),
0xFBE6 => array(0x6D0), 0xFBE7 => array(0x6D0), 0xFBE8 => array(0x649),
0xFBE9 => array(0x649), 0xFBEA => array(0x626, 0x627), 0xFBEB => array(0x626, 0x627),
0xFBEC => array(0x626, 0x6D5), 0xFBED => array(0x626, 0x6D5), 0xFBEE => array(0x626, 0x648),
0xFBEF => array(0x626, 0x648), 0xFBF0 => array(0x626, 0x6C7), 0xFBF1 => array(0x626, 0x6C7),
0xFBF2 => array(0x626, 0x6C6), 0xFBF3 => array(0x626, 0x6C6), 0xFBF4 => array(0x626, 0x6C8),
0xFBF5 => array(0x626, 0x6C8), 0xFBF6 => array(0x626, 0x6D0), 0xFBF7 => array(0x626, 0x6D0),
0xFBF8 => array(0x626, 0x6D0), 0xFBF9 => array(0x626, 0x649), 0xFBFA => array(0x626, 0x649),
0xFBFB => array(0x626, 0x649), 0xFBFC => array(0x6CC), 0xFBFD => array(0x6CC),
0xFBFE => array(0x6CC), 0xFBFF => array(0x6CC), 0xFC00 => array(0x626, 0x62C),
0xFC01 => array(0x626, 0x62D), 0xFC02 => array(0x626, 0x645), 0xFC03 => array(0x626, 0x649),
0xFC04 => array(0x626, 0x64A), 0xFC05 => array(0x628, 0x62C), 0xFC06 => array(0x628, 0x62D),
0xFC07 => array(0x628, 0x62E), 0xFC08 => array(0x628, 0x645), 0xFC09 => array(0x628, 0x649),
0xFC0A => array(0x628, 0x64A), 0xFC0B => array(0x62A, 0x62C), 0xFC0C => array(0x62A, 0x62D),
0xFC0D => array(0x62A, 0x62E), 0xFC0E => array(0x62A, 0x645), 0xFC0F => array(0x62A, 0x649),
0xFC10 => array(0x62A, 0x64A), 0xFC11 => array(0x62B, 0x62C), 0xFC12 => array(0x62B, 0x645),
0xFC13 => array(0x62B, 0x649), 0xFC14 => array(0x62B, 0x64A), 0xFC15 => array(0x62C, 0x62D),
0xFC16 => array(0x62C, 0x645), 0xFC17 => array(0x62D, 0x62C), 0xFC18 => array(0x62D, 0x645),
0xFC19 => array(0x62E, 0x62C), 0xFC1A => array(0x62E, 0x62D), 0xFC1B => array(0x62E, 0x645),
0xFC1C => array(0x633, 0x62C), 0xFC1D => array(0x633, 0x62D), 0xFC1E => array(0x633, 0x62E),
0xFC1F => array(0x633, 0x645), 0xFC20 => array(0x635, 0x62D), 0xFC21 => array(0x635, 0x645),
0xFC22 => array(0x636, 0x62C), 0xFC23 => array(0x636, 0x62D), 0xFC24 => array(0x636, 0x62E),
0xFC25 => array(0x636, 0x645), 0xFC26 => array(0x637, 0x62D), 0xFC27 => array(0x637, 0x645),
0xFC28 => array(0x638, 0x645), 0xFC29 => array(0x639, 0x62C), 0xFC2A => array(0x639, 0x645),
0xFC2B => array(0x63A, 0x62C), 0xFC2C => array(0x63A, 0x645), 0xFC2D => array(0x641, 0x62C),
0xFC2E => array(0x641, 0x62D), 0xFC2F => array(0x641, 0x62E), 0xFC30 => array(0x641, 0x645),
0xFC31 => array(0x641, 0x649), 0xFC32 => array(0x641, 0x64A), 0xFC33 => array(0x642, 0x62D),
0xFC34 => array(0x642, 0x645), 0xFC35 => array(0x642, 0x649), 0xFC36 => array(0x642, 0x64A),
0xFC37 => array(0x643, 0x627), 0xFC38 => array(0x643, 0x62C), 0xFC39 => array(0x643, 0x62D),
0xFC3A => array(0x643, 0x62E), 0xFC3B => array(0x643, 0x644), 0xFC3C => array(0x643, 0x645),
0xFC3D => array(0x643, 0x649), 0xFC3E => array(0x643, 0x64A), 0xFC3F => array(0x644, 0x62C),
0xFC40 => array(0x644, 0x62D), 0xFC41 => array(0x644, 0x62E), 0xFC42 => array(0x644, 0x645),
0xFC43 => array(0x644, 0x649), 0xFC44 => array(0x644, 0x64A), 0xFC45 => array(0x645, 0x62C),
0xFC46 => array(0x645, 0x62D), 0xFC47 => array(0x645, 0x62E), 0xFC48 => array(0x645, 0x645),
0xFC49 => array(0x645, 0x649), 0xFC4A => array(0x645, 0x64A), 0xFC4B => array(0x646, 0x62C),
0xFC4C => array(0x646, 0x62D), 0xFC4D => array(0x646, 0x62E), 0xFC4E => array(0x646, 0x645),
0xFC4F => array(0x646, 0x649), 0xFC50 => array(0x646, 0x64A), 0xFC51 => array(0x647, 0x62C),
0xFC52 => array(0x647, 0x645), 0xFC53 => array(0x647, 0x649), 0xFC54 => array(0x647, 0x64A),
0xFC55 => array(0x64A, 0x62C), 0xFC56 => array(0x64A, 0x62D), 0xFC57 => array(0x64A, 0x62E),
0xFC58 => array(0x64A, 0x645), 0xFC59 => array(0x64A, 0x649), 0xFC5A => array(0x64A, 0x64A),
0xFC5B => array(0x630, 0x670), 0xFC5C => array(0x631, 0x670), 0xFC5D => array(0x649, 0x670),
0xFC64 => array(0x626, 0x631), 0xFC65 => array(0x626, 0x632), 0xFC66 => array(0x626, 0x645),
0xFC67 => array(0x626, 0x646), 0xFC68 => array(0x626, 0x649), 0xFC69 => array(0x626, 0x64A),
0xFC6A => array(0x628, 0x631), 0xFC6B => array(0x628, 0x632), 0xFC6C => array(0x628, 0x645),
0xFC6D => array(0x628, 0x646), 0xFC6E => array(0x628, 0x649), 0xFC6F => array(0x628, 0x64A),
0xFC70 => array(0x62A, 0x631), 0xFC71 => array(0x62A, 0x632), 0xFC72 => array(0x62A, 0x645),
0xFC73 => array(0x62A, 0x646), 0xFC74 => array(0x62A, 0x649), 0xFC75 => array(0x62A, 0x64A),
0xFC76 => array(0x62B, 0x631), 0xFC77 => array(0x62B, 0x632), 0xFC78 => array(0x62B, 0x645),
0xFC79 => array(0x62B, 0x646), 0xFC7A => array(0x62B, 0x649), 0xFC7B => array(0x62B, 0x64A),
0xFC7C => array(0x641, 0x649), 0xFC7D => array(0x641, 0x64A), 0xFC7E => array(0x642, 0x649),
0xFC7F => array(0x642, 0x64A), 0xFC80 => array(0x643, 0x627), 0xFC81 => array(0x643, 0x644),
0xFC82 => array(0x643, 0x645), 0xFC83 => array(0x643, 0x649), 0xFC84 => array(0x643, 0x64A),
0xFC85 => array(0x644, 0x645), 0xFC86 => array(0x644, 0x649), 0xFC87 => array(0x644, 0x64A),
0xFC88 => array(0x645, 0x627), 0xFC89 => array(0x645, 0x645), 0xFC8A => array(0x646, 0x631),
0xFC8B => array(0x646, 0x632), 0xFC8C => array(0x646, 0x645), 0xFC8D => array(0x646, 0x646),
0xFC8E => array(0x646, 0x649), 0xFC8F => array(0x646, 0x64A), 0xFC90 => array(0x649, 0x670),
0xFC91 => array(0x64A, 0x631), 0xFC92 => array(0x64A, 0x632), 0xFC93 => array(0x64A, 0x645),
0xFC94 => array(0x64A, 0x646), 0xFC95 => array(0x64A, 0x649), 0xFC96 => array(0x64A, 0x64A),
0xFC97 => array(0x626, 0x62C), 0xFC98 => array(0x626, 0x62D), 0xFC99 => array(0x626, 0x62E),
0xFC9A => array(0x626, 0x645), 0xFC9B => array(0x626, 0x647), 0xFC9C => array(0x628, 0x62C),
0xFC9D => array(0x628, 0x62D), 0xFC9E => array(0x628, 0x62E), 0xFC9F => array(0x628, 0x645),
0xFCA0 => array(0x628, 0x647), 0xFCA1 => array(0x62A, 0x62C), 0xFCA2 => array(0x62A, 0x62D),
0xFCA3 => array(0x62A, 0x62E), 0xFCA4 => array(0x62A, 0x645), 0xFCA5 => array(0x62A, 0x647),
0xFCA6 => array(0x62B, 0x645), 0xFCA7 => array(0x62C, 0x62D), 0xFCA8 => array(0x62C, 0x645),
0xFCA9 => array(0x62D, 0x62C), 0xFCAA => array(0x62D, 0x645), 0xFCAB => array(0x62E, 0x62C),
0xFCAC => array(0x62E, 0x645), 0xFCAD => array(0x633, 0x62C), 0xFCAE => array(0x633, 0x62D),
0xFCAF => array(0x633, 0x62E), 0xFCB0 => array(0x633, 0x645), 0xFCB1 => array(0x635, 0x62D),
0xFCB2 => array(0x635, 0x62E), 0xFCB3 => array(0x635, 0x645), 0xFCB4 => array(0x636, 0x62C),
0xFCB5 => array(0x636, 0x62D), 0xFCB6 => array(0x636, 0x62E), 0xFCB7 => array(0x636, 0x645),
0xFCB8 => array(0x637, 0x62D), 0xFCB9 => array(0x638, 0x645), 0xFCBA => array(0x639, 0x62C),
0xFCBB => array(0x639, 0x645), 0xFCBC => array(0x63A, 0x62C), 0xFCBD => array(0x63A, 0x645),
0xFCBE => array(0x641, 0x62C), 0xFCBF => array(0x641, 0x62D), 0xFCC0 => array(0x641, 0x62E),
0xFCC1 => array(0x641, 0x645), 0xFCC2 => array(0x642, 0x62D), 0xFCC3 => array(0x642, 0x645),
0xFCC4 => array(0x643, 0x62C), 0xFCC5 => array(0x643, 0x62D), 0xFCC6 => array(0x643, 0x62E),
0xFCC7 => array(0x643, 0x644), 0xFCC8 => array(0x643, 0x645), 0xFCC9 => array(0x644, 0x62C),
0xFCCA => array(0x644, 0x62D), 0xFCCB => array(0x644, 0x62E), 0xFCCC => array(0x644, 0x645),
0xFCCD => array(0x644, 0x647), 0xFCCE => array(0x645, 0x62C), 0xFCCF => array(0x645, 0x62D),
0xFCD0 => array(0x645, 0x62E), 0xFCD1 => array(0x645, 0x645), 0xFCD2 => array(0x646, 0x62C),
0xFCD3 => array(0x646, 0x62D), 0xFCD4 => array(0x646, 0x62E), 0xFCD5 => array(0x646, 0x645),
0xFCD6 => array(0x646, 0x647), 0xFCD7 => array(0x647, 0x62C), 0xFCD8 => array(0x647, 0x645),
0xFCD9 => array(0x647, 0x670), 0xFCDA => array(0x64A, 0x62C), 0xFCDB => array(0x64A, 0x62D),
0xFCDC => array(0x64A, 0x62E), 0xFCDD => array(0x64A, 0x645), 0xFCDE => array(0x64A, 0x647),
0xFCDF => array(0x626, 0x645), 0xFCE0 => array(0x626, 0x647), 0xFCE1 => array(0x628, 0x645),
0xFCE2 => array(0x628, 0x647), 0xFCE3 => array(0x62A, 0x645), 0xFCE4 => array(0x62A, 0x647),
0xFCE5 => array(0x62B, 0x645), 0xFCE6 => array(0x62B, 0x647), 0xFCE7 => array(0x633, 0x645),
0xFCE8 => array(0x633, 0x647), 0xFCE9 => array(0x634, 0x645), 0xFCEA => array(0x634, 0x647),
0xFCEB => array(0x643, 0x644), 0xFCEC => array(0x643, 0x645), 0xFCED => array(0x644, 0x645),
0xFCEE => array(0x646, 0x645), 0xFCEF => array(0x646, 0x647), 0xFCF0 => array(0x64A, 0x645),
0xFCF1 => array(0x64A, 0x647), 0xFCF2 => array(0x640, 0x64E, 0x651), 0xFCF3 => array(0x640, 0x64F, 0x651),
0xFCF4 => array(0x640, 0x650, 0x651), 0xFCF5 => array(0x637, 0x649), 0xFCF6 => array(0x637, 0x64A),
0xFCF7 => array(0x639, 0x649), 0xFCF8 => array(0x639, 0x64A), 0xFCF9 => array(0x63A, 0x649),
0xFCFA => array(0x63A, 0x64A), 0xFCFB => array(0x633, 0x649), 0xFCFC => array(0x633, 0x64A),
0xFCFD => array(0x634, 0x649), 0xFCFE => array(0x634, 0x64A), 0xFCFF => array(0x62D, 0x649),
0xFD00 => array(0x62D, 0x64A), 0xFD01 => array(0x62C, 0x649), 0xFD02 => array(0x62C, 0x64A),
0xFD03 => array(0x62E, 0x649), 0xFD04 => array(0x62E, 0x64A), 0xFD05 => array(0x635, 0x649),
0xFD06 => array(0x635, 0x64A), 0xFD07 => array(0x636, 0x649), 0xFD08 => array(0x636, 0x64A),
0xFD09 => array(0x634, 0x62C), 0xFD0A => array(0x634, 0x62D), 0xFD0B => array(0x634, 0x62E),
0xFD0C => array(0x634, 0x645), 0xFD0D => array(0x634, 0x631), 0xFD0E => array(0x633, 0x631),
0xFD0F => array(0x635, 0x631), 0xFD10 => array(0x636, 0x631), 0xFD11 => array(0x637, 0x649),
0xFD12 => array(0x637, 0x64A), 0xFD13 => array(0x639, 0x649), 0xFD14 => array(0x639, 0x64A),
0xFD15 => array(0x63A, 0x649), 0xFD16 => array(0x63A, 0x64A), 0xFD17 => array(0x633, 0x649),
0xFD18 => array(0x633, 0x64A), 0xFD19 => array(0x634, 0x649), 0xFD1A => array(0x634, 0x64A),
0xFD1B => array(0x62D, 0x649), 0xFD1C => array(0x62D, 0x64A), 0xFD1D => array(0x62C, 0x649),
0xFD1E => array(0x62C, 0x64A), 0xFD1F => array(0x62E, 0x649), 0xFD20 => array(0x62E, 0x64A),
0xFD21 => array(0x635, 0x649), 0xFD22 => array(0x635, 0x64A), 0xFD23 => array(0x636, 0x649),
0xFD24 => array(0x636, 0x64A), 0xFD25 => array(0x634, 0x62C), 0xFD26 => array(0x634, 0x62D),
0xFD27 => array(0x634, 0x62E), 0xFD28 => array(0x634, 0x645), 0xFD29 => array(0x634, 0x631),
0xFD2A => array(0x633, 0x631), 0xFD2B => array(0x635, 0x631), 0xFD2C => array(0x636, 0x631),
0xFD2D => array(0x634, 0x62C), 0xFD2E => array(0x634, 0x62D), 0xFD2F => array(0x634, 0x62E),
0xFD30 => array(0x634, 0x645), 0xFD31 => array(0x633, 0x647), 0xFD32 => array(0x634, 0x647),
0xFD33 => array(0x637, 0x645), 0xFD34 => array(0x633, 0x62C), 0xFD35 => array(0x633, 0x62D),
0xFD36 => array(0x633, 0x62E), 0xFD37 => array(0x634, 0x62C), 0xFD38 => array(0x634, 0x62D),
0xFD39 => array(0x634, 0x62E), 0xFD3A => array(0x637, 0x645), 0xFD3B => array(0x638, 0x645),
0xFD3C => array(0x627, 0x64B), 0xFD3D => array(0x627, 0x64B), 0xFD50 => array(0x62A, 0x62C, 0x645),
0xFD51 => array(0x62A, 0x62D, 0x62C), 0xFD52 => array(0x62A, 0x62D, 0x62C), 0xFD53 => array(0x62A, 0x62D, 0x645),
0xFD54 => array(0x62A, 0x62E, 0x645), 0xFD55 => array(0x62A, 0x645, 0x62C), 0xFD56 => array(0x62A, 0x645, 0x62D),
0xFD57 => array(0x62A, 0x645, 0x62E), 0xFD58 => array(0x62C, 0x645, 0x62D), 0xFD59 => array(0x62C, 0x645, 0x62D),
0xFD5A => array(0x62D, 0x645, 0x64A), 0xFD5B => array(0x62D, 0x645, 0x649), 0xFD5C => array(0x633, 0x62D, 0x62C),
0xFD5D => array(0x633, 0x62C, 0x62D), 0xFD5E => array(0x633, 0x62C, 0x649), 0xFD5F => array(0x633, 0x645, 0x62D),
0xFD60 => array(0x633, 0x645, 0x62D), 0xFD61 => array(0x633, 0x645, 0x62C), 0xFD62 => array(0x633, 0x645, 0x645),
0xFD63 => array(0x633, 0x645, 0x645), 0xFD64 => array(0x635, 0x62D, 0x62D), 0xFD65 => array(0x635, 0x62D, 0x62D),
0xFD66 => array(0x635, 0x645, 0x645), 0xFD67 => array(0x634, 0x62D, 0x645), 0xFD68 => array(0x634, 0x62D, 0x645),
0xFD69 => array(0x634, 0x62C, 0x64A), 0xFD6A => array(0x634, 0x645, 0x62E), 0xFD6B => array(0x634, 0x645, 0x62E),
0xFD6C => array(0x634, 0x645, 0x645), 0xFD6D => array(0x634, 0x645, 0x645), 0xFD6E => array(0x636, 0x62D, 0x649),
0xFD6F => array(0x636, 0x62E, 0x645), 0xFD70 => array(0x636, 0x62E, 0x645), 0xFD71 => array(0x637, 0x645, 0x62D),
0xFD72 => array(0x637, 0x645, 0x62D), 0xFD73 => array(0x637, 0x645, 0x645), 0xFD74 => array(0x637, 0x645, 0x64A),
0xFD75 => array(0x639, 0x62C, 0x645), 0xFD76 => array(0x639, 0x645, 0x645), 0xFD77 => array(0x639, 0x645, 0x645),
0xFD78 => array(0x639, 0x645, 0x649), 0xFD79 => array(0x63A, 0x645, 0x645), 0xFD7A => array(0x63A, 0x645, 0x64A),
0xFD7B => array(0x63A, 0x645, 0x649), 0xFD7C => array(0x641, 0x62E, 0x645), 0xFD7D => array(0x641, 0x62E, 0x645),
0xFD7E => array(0x642, 0x645, 0x62D), 0xFD7F => array(0x642, 0x645, 0x645), 0xFD80 => array(0x644, 0x62D, 0x645),
0xFD81 => array(0x644, 0x62D, 0x64A), 0xFD82 => array(0x644, 0x62D, 0x649), 0xFD83 => array(0x644, 0x62C, 0x62C),
0xFD84 => array(0x644, 0x62C, 0x62C), 0xFD85 => array(0x644, 0x62E, 0x645), 0xFD86 => array(0x644, 0x62E, 0x645),
0xFD87 => array(0x644, 0x645, 0x62D), 0xFD88 => array(0x644, 0x645, 0x62D), 0xFD89 => array(0x645, 0x62D, 0x62C),
0xFD8A => array(0x645, 0x62D, 0x645), 0xFD8B => array(0x645, 0x62D, 0x64A), 0xFD8C => array(0x645, 0x62C, 0x62D),
0xFD8D => array(0x645, 0x62C, 0x645), 0xFD8E => array(0x645, 0x62E, 0x62C), 0xFD8F => array(0x645, 0x62E, 0x645),
0xFD92 => array(0x645, 0x62C, 0x62E), 0xFD93 => array(0x647, 0x645, 0x62C), 0xFD94 => array(0x647, 0x645, 0x645),
0xFD95 => array(0x646, 0x62D, 0x645), 0xFD96 => array(0x646, 0x62D, 0x649), 0xFD97 => array(0x646, 0x62C, 0x645),
0xFD98 => array(0x646, 0x62C, 0x645), 0xFD99 => array(0x646, 0x62C, 0x649), 0xFD9A => array(0x646, 0x645, 0x64A),
0xFD9B => array(0x646, 0x645, 0x649), 0xFD9C => array(0x64A, 0x645, 0x645), 0xFD9D => array(0x64A, 0x645, 0x645),
0xFD9E => array(0x628, 0x62E, 0x64A), 0xFD9F => array(0x62A, 0x62C, 0x64A), 0xFDA0 => array(0x62A, 0x62C, 0x649),
0xFDA1 => array(0x62A, 0x62E, 0x64A), 0xFDA2 => array(0x62A, 0x62E, 0x649), 0xFDA3 => array(0x62A, 0x645, 0x64A),
0xFDA4 => array(0x62A, 0x645, 0x649), 0xFDA5 => array(0x62C, 0x645, 0x64A), 0xFDA6 => array(0x62C, 0x62D, 0x649),
0xFDA7 => array(0x62C, 0x645, 0x649), 0xFDA8 => array(0x633, 0x62E, 0x649), 0xFDA9 => array(0x635, 0x62D, 0x64A),
0xFDAA => array(0x634, 0x62D, 0x64A), 0xFDAB => array(0x636, 0x62D, 0x64A), 0xFDAC => array(0x644, 0x62C, 0x64A),
0xFDAD => array(0x644, 0x645, 0x64A), 0xFDAE => array(0x64A, 0x62D, 0x64A), 0xFDAF => array(0x64A, 0x62C, 0x64A),
0xFDB0 => array(0x64A, 0x645, 0x64A), 0xFDB1 => array(0x645, 0x645, 0x64A), 0xFDB2 => array(0x642, 0x645, 0x64A),
0xFDB3 => array(0x646, 0x62D, 0x64A), 0xFDB4 => array(0x642, 0x645, 0x62D), 0xFDB5 => array(0x644, 0x62D, 0x645),
0xFDB6 => array(0x639, 0x645, 0x64A), 0xFDB7 => array(0x643, 0x645, 0x64A), 0xFDB8 => array(0x646, 0x62C, 0x62D),
0xFDB9 => array(0x645, 0x62E, 0x64A), 0xFDBA => array(0x644, 0x62C, 0x645), 0xFDBB => array(0x643, 0x645, 0x645),
0xFDBC => array(0x644, 0x62C, 0x645), 0xFDBD => array(0x646, 0x62C, 0x62D), 0xFDBE => array(0x62C, 0x62D, 0x64A),
0xFDBF => array(0x62D, 0x62C, 0x64A), 0xFDC0 => array(0x645, 0x62C, 0x64A), 0xFDC1 => array(0x641, 0x645, 0x64A),
0xFDC2 => array(0x628, 0x62D, 0x64A), 0xFDC3 => array(0x643, 0x645, 0x645), 0xFDC4 => array(0x639, 0x62C, 0x645),
0xFDC5 => array(0x635, 0x645, 0x645), 0xFDC6 => array(0x633, 0x62E, 0x64A), 0xFDC7 => array(0x646, 0x62C, 0x64A),
0xFDF0 => array(0x635, 0x644, 0x6D2), 0xFDF1 => array(0x642, 0x644, 0x6D2), 0xFDF2 => array(0x627, 0x644, 0x644, 0x647),
0xFDF3 => array(0x627, 0x643, 0x628, 0x631), 0xFDF4 => array(0x645, 0x62D, 0x645, 0x62F), 0xFDF5 => array(0x635, 0x644, 0x639, 0x645),
0xFDF6 => array(0x631, 0x633, 0x648, 0x644), 0xFDF7 => array(0x639, 0x644, 0x64A, 0x647), 0xFDF8 => array(0x648, 0x633, 0x644, 0x645),
0xFDF9 => array(0x635, 0x644, 0x649), 0xFDFC => array(0x631, 0x6CC, 0x627, 0x644), 0xFE11 => array(0x3001),
0xFE17 => array(0x3016), 0xFE18 => array(0x3017), 0xFE31 => array(0x2014),
0xFE32 => array(0x2013), 0xFE39 => array(0x3014), 0xFE3A => array(0x3015),
0xFE3B => array(0x3010), 0xFE3C => array(0x3011), 0xFE3D => array(0x300A),
0xFE3E => array(0x300B), 0xFE3F => array(0x3008), 0xFE40 => array(0x3009),
0xFE41 => array(0x300C), 0xFE42 => array(0x300D), 0xFE43 => array(0x300E),
0xFE44 => array(0x300F), 0xFE51 => array(0x3001), 0xFE58 => array(0x2014),
0xFE5D => array(0x3014), 0xFE5E => array(0x3015), 0xFE63 => array(0x2D),
0xFE71 => array(0x640, 0x64B), 0xFE77 => array(0x640, 0x64E), 0xFE79 => array(0x640, 0x64F),
0xFE7B => array(0x640, 0x650), 0xFE7D => array(0x640, 0x651), 0xFE7F => array(0x640, 0x652),
0xFE80 => array(0x621), 0xFE81 => array(0x622), 0xFE82 => array(0x622),
0xFE83 => array(0x623), 0xFE84 => array(0x623), 0xFE85 => array(0x624),
0xFE86 => array(0x624), 0xFE87 => array(0x625), 0xFE88 => array(0x625),
0xFE89 => array(0x626), 0xFE8A => array(0x626), 0xFE8B => array(0x626),
0xFE8C => array(0x626), 0xFE8D => array(0x627), 0xFE8E => array(0x627),
0xFE8F => array(0x628), 0xFE90 => array(0x628), 0xFE91 => array(0x628),
0xFE92 => array(0x628), 0xFE93 => array(0x629), 0xFE94 => array(0x629),
0xFE95 => array(0x62A), 0xFE96 => array(0x62A), 0xFE97 => array(0x62A),
0xFE98 => array(0x62A), 0xFE99 => array(0x62B), 0xFE9A => array(0x62B),
0xFE9B => array(0x62B), 0xFE9C => array(0x62B), 0xFE9D => array(0x62C),
0xFE9E => array(0x62C), 0xFE9F => array(0x62C), 0xFEA0 => array(0x62C),
0xFEA1 => array(0x62D), 0xFEA2 => array(0x62D), 0xFEA3 => array(0x62D),
0xFEA4 => array(0x62D), 0xFEA5 => array(0x62E), 0xFEA6 => array(0x62E),
0xFEA7 => array(0x62E), 0xFEA8 => array(0x62E), 0xFEA9 => array(0x62F),
0xFEAA => array(0x62F), 0xFEAB => array(0x630), 0xFEAC => array(0x630),
0xFEAD => array(0x631), 0xFEAE => array(0x631), 0xFEAF => array(0x632),
0xFEB0 => array(0x632), 0xFEB1 => array(0x633), 0xFEB2 => array(0x633),
0xFEB3 => array(0x633), 0xFEB4 => array(0x633), 0xFEB5 => array(0x634),
0xFEB6 => array(0x634), 0xFEB7 => array(0x634), 0xFEB8 => array(0x634),
0xFEB9 => array(0x635), 0xFEBA => array(0x635), 0xFEBB => array(0x635),
0xFEBC => array(0x635), 0xFEBD => array(0x636), 0xFEBE => array(0x636),
0xFEBF => array(0x636), 0xFEC0 => array(0x636), 0xFEC1 => array(0x637),
0xFEC2 => array(0x637), 0xFEC3 => array(0x637), 0xFEC4 => array(0x637),
0xFEC5 => array(0x638), 0xFEC6 => array(0x638), 0xFEC7 => array(0x638),
0xFEC8 => array(0x638), 0xFEC9 => array(0x639), 0xFECA => array(0x639),
0xFECB => array(0x639), 0xFECC => array(0x639), 0xFECD => array(0x63A),
0xFECE => array(0x63A), 0xFECF => array(0x63A), 0xFED0 => array(0x63A),
0xFED1 => array(0x641), 0xFED2 => array(0x641), 0xFED3 => array(0x641),
0xFED4 => array(0x641), 0xFED5 => array(0x642), 0xFED6 => array(0x642),
0xFED7 => array(0x642), 0xFED8 => array(0x642), 0xFED9 => array(0x643),
0xFEDA => array(0x643), 0xFEDB => array(0x643), 0xFEDC => array(0x643),
0xFEDD => array(0x644), 0xFEDE => array(0x644), 0xFEDF => array(0x644),
0xFEE0 => array(0x644), 0xFEE1 => array(0x645), 0xFEE2 => array(0x645),
0xFEE3 => array(0x645), 0xFEE4 => array(0x645), 0xFEE5 => array(0x646),
0xFEE6 => array(0x646), 0xFEE7 => array(0x646), 0xFEE8 => array(0x646),
0xFEE9 => array(0x647), 0xFEEA => array(0x647), 0xFEEB => array(0x647),
0xFEEC => array(0x647), 0xFEED => array(0x648), 0xFEEE => array(0x648),
0xFEEF => array(0x649), 0xFEF0 => array(0x649), 0xFEF1 => array(0x64A),
0xFEF2 => array(0x64A), 0xFEF3 => array(0x64A), 0xFEF4 => array(0x64A),
0xFEF5 => array(0x644, 0x622), 0xFEF6 => array(0x644, 0x622), 0xFEF7 => array(0x644, 0x623),
0xFEF8 => array(0x644, 0x623), 0xFEF9 => array(0x644, 0x625), 0xFEFA => array(0x644, 0x625),
0xFEFB => array(0x644, 0x627), 0xFEFC => array(0x644, 0x627), 0xFF0D => array(0x2D),
0xFF0E => array(0x2E), 0xFF10 => array(0x30), 0xFF11 => array(0x31),
0xFF12 => array(0x32), 0xFF13 => array(0x33), 0xFF14 => array(0x34),
0xFF15 => array(0x35), 0xFF16 => array(0x36), 0xFF17 => array(0x37),
0xFF18 => array(0x38), 0xFF19 => array(0x39), 0xFF21 => array(0x61),
0xFF22 => array(0x62), 0xFF23 => array(0x63), 0xFF24 => array(0x64),
0xFF25 => array(0x65), 0xFF26 => array(0x66), 0xFF27 => array(0x67),
0xFF28 => array(0x68), 0xFF29 => array(0x69), 0xFF2A => array(0x6A),
0xFF2B => array(0x6B), 0xFF2C => array(0x6C), 0xFF2D => array(0x6D),
0xFF2E => array(0x6E), 0xFF2F => array(0x6F), 0xFF30 => array(0x70),
0xFF31 => array(0x71), 0xFF32 => array(0x72), 0xFF33 => array(0x73),
0xFF34 => array(0x74), 0xFF35 => array(0x75), 0xFF36 => array(0x76),
0xFF37 => array(0x77), 0xFF38 => array(0x78), 0xFF39 => array(0x79),
0xFF3A => array(0x7A), 0xFF41 => array(0x61), 0xFF42 => array(0x62),
0xFF43 => array(0x63), 0xFF44 => array(0x64), 0xFF45 => array(0x65),
0xFF46 => array(0x66), 0xFF47 => array(0x67), 0xFF48 => array(0x68),
0xFF49 => array(0x69), 0xFF4A => array(0x6A), 0xFF4B => array(0x6B),
0xFF4C => array(0x6C), 0xFF4D => array(0x6D), 0xFF4E => array(0x6E),
0xFF4F => array(0x6F), 0xFF50 => array(0x70), 0xFF51 => array(0x71),
0xFF52 => array(0x72), 0xFF53 => array(0x73), 0xFF54 => array(0x74),
0xFF55 => array(0x75), 0xFF56 => array(0x76), 0xFF57 => array(0x77),
0xFF58 => array(0x78), 0xFF59 => array(0x79), 0xFF5A => array(0x7A),
0xFF5F => array(0x2985), 0xFF60 => array(0x2986), 0xFF61 => array(0x2E),
0xFF62 => array(0x300C), 0xFF63 => array(0x300D), 0xFF64 => array(0x3001),
0xFF65 => array(0x30FB), 0xFF66 => array(0x30F2), 0xFF67 => array(0x30A1),
0xFF68 => array(0x30A3), 0xFF69 => array(0x30A5), 0xFF6A => array(0x30A7),
0xFF6B => array(0x30A9), 0xFF6C => array(0x30E3), 0xFF6D => array(0x30E5),
0xFF6E => array(0x30E7), 0xFF6F => array(0x30C3), 0xFF70 => array(0x30FC),
0xFF71 => array(0x30A2), 0xFF72 => array(0x30A4), 0xFF73 => array(0x30A6),
0xFF74 => array(0x30A8), 0xFF75 => array(0x30AA), 0xFF76 => array(0x30AB),
0xFF77 => array(0x30AD), 0xFF78 => array(0x30AF), 0xFF79 => array(0x30B1),
0xFF7A => array(0x30B3), 0xFF7B => array(0x30B5), 0xFF7C => array(0x30B7),
0xFF7D => array(0x30B9), 0xFF7E => array(0x30BB), 0xFF7F => array(0x30BD),
0xFF80 => array(0x30BF), 0xFF81 => array(0x30C1), 0xFF82 => array(0x30C4),
0xFF83 => array(0x30C6), 0xFF84 => array(0x30C8), 0xFF85 => array(0x30CA),
0xFF86 => array(0x30CB), 0xFF87 => array(0x30CC), 0xFF88 => array(0x30CD),
0xFF89 => array(0x30CE), 0xFF8A => array(0x30CF), 0xFF8B => array(0x30D2),
0xFF8C => array(0x30D5), 0xFF8D => array(0x30D8), 0xFF8E => array(0x30DB),
0xFF8F => array(0x30DE), 0xFF90 => array(0x30DF), 0xFF91 => array(0x30E0),
0xFF92 => array(0x30E1), 0xFF93 => array(0x30E2), 0xFF94 => array(0x30E4),
0xFF95 => array(0x30E6), 0xFF96 => array(0x30E8), 0xFF97 => array(0x30E9),
0xFF98 => array(0x30EA), 0xFF99 => array(0x30EB), 0xFF9A => array(0x30EC),
0xFF9B => array(0x30ED), 0xFF9C => array(0x30EF), 0xFF9D => array(0x30F3),
0xFF9E => array(0x3099), 0xFF9F => array(0x309A), 0xFFA1 => array(0x1100),
0xFFA2 => array(0x1101), 0xFFA3 => array(0x11AA), 0xFFA4 => array(0x1102),
0xFFA5 => array(0x11AC), 0xFFA6 => array(0x11AD), 0xFFA7 => array(0x1103),
0xFFA8 => array(0x1104), 0xFFA9 => array(0x1105), 0xFFAA => array(0x11B0),
0xFFAB => array(0x11B1), 0xFFAC => array(0x11B2), 0xFFAD => array(0x11B3),
0xFFAE => array(0x11B4), 0xFFAF => array(0x11B5), 0xFFB0 => array(0x111A),
0xFFB1 => array(0x1106), 0xFFB2 => array(0x1107), 0xFFB3 => array(0x1108),
0xFFB4 => array(0x1121), 0xFFB5 => array(0x1109), 0xFFB6 => array(0x110A),
0xFFB7 => array(0x110B), 0xFFB8 => array(0x110C), 0xFFB9 => array(0x110D),
0xFFBA => array(0x110E), 0xFFBB => array(0x110F), 0xFFBC => array(0x1110),
0xFFBD => array(0x1111), 0xFFBE => array(0x1112), 0xFFC2 => array(0x1161),
0xFFC3 => array(0x1162), 0xFFC4 => array(0x1163), 0xFFC5 => array(0x1164),
0xFFC6 => array(0x1165), 0xFFC7 => array(0x1166), 0xFFCA => array(0x1167),
0xFFCB => array(0x1168), 0xFFCC => array(0x1169), 0xFFCD => array(0x116A),
0xFFCE => array(0x116B), 0xFFCF => array(0x116C), 0xFFD2 => array(0x116D),
0xFFD3 => array(0x116E), 0xFFD4 => array(0x116F), 0xFFD5 => array(0x1170),
0xFFD6 => array(0x1171), 0xFFD7 => array(0x1172), 0xFFDA => array(0x1173),
0xFFDB => array(0x1174), 0xFFDC => array(0x1175), 0xFFE0 => array(0xA2),
0xFFE1 => array(0xA3), 0xFFE2 => array(0xAC), 0xFFE4 => array(0xA6),
0xFFE5 => array(0xA5), 0xFFE6 => array(0x20A9), 0xFFE8 => array(0x2502),
0xFFE9 => array(0x2190), 0xFFEA => array(0x2191), 0xFFEB => array(0x2192),
0xFFEC => array(0x2193), 0xFFED => array(0x25A0), 0xFFEE => array(0x25CB),
0x10400 => array(0x10428), 0x10401 => array(0x10429), 0x10402 => array(0x1042A),
0x10403 => array(0x1042B), 0x10404 => array(0x1042C), 0x10405 => array(0x1042D),
0x10406 => array(0x1042E), 0x10407 => array(0x1042F), 0x10408 => array(0x10430),
0x10409 => array(0x10431), 0x1040A => array(0x10432), 0x1040B => array(0x10433),
0x1040C => array(0x10434), 0x1040D => array(0x10435), 0x1040E => array(0x10436),
0x1040F => array(0x10437), 0x10410 => array(0x10438), 0x10411 => array(0x10439),
0x10412 => array(0x1043A), 0x10413 => array(0x1043B), 0x10414 => array(0x1043C),
0x10415 => array(0x1043D), 0x10416 => array(0x1043E), 0x10417 => array(0x1043F),
0x10418 => array(0x10440), 0x10419 => array(0x10441), 0x1041A => array(0x10442),
0x1041B => array(0x10443), 0x1041C => array(0x10444), 0x1041D => array(0x10445),
0x1041E => array(0x10446), 0x1041F => array(0x10447), 0x10420 => array(0x10448),
0x10421 => array(0x10449), 0x10422 => array(0x1044A), 0x10423 => array(0x1044B),
0x10424 => array(0x1044C), 0x10425 => array(0x1044D), 0x10426 => array(0x1044E),
0x10427 => array(0x1044F), 0x118A0 => array(0x118C0), 0x118A1 => array(0x118C1),
0x118A2 => array(0x118C2), 0x118A3 => array(0x118C3), 0x118A4 => array(0x118C4),
0x118A5 => array(0x118C5), 0x118A6 => array(0x118C6), 0x118A7 => array(0x118C7),
0x118A8 => array(0x118C8), 0x118A9 => array(0x118C9), 0x118AA => array(0x118CA),
0x118AB => array(0x118CB), 0x118AC => array(0x118CC), 0x118AD => array(0x118CD),
0x118AE => array(0x118CE), 0x118AF => array(0x118CF), 0x118B0 => array(0x118D0),
0x118B1 => array(0x118D1), 0x118B2 => array(0x118D2), 0x118B3 => array(0x118D3),
0x118B4 => array(0x118D4), 0x118B5 => array(0x118D5), 0x118B6 => array(0x118D6),
0x118B7 => array(0x118D7), 0x118B8 => array(0x118D8), 0x118B9 => array(0x118D9),
0x118BA => array(0x118DA), 0x118BB => array(0x118DB), 0x118BC => array(0x118DC),
0x118BD => array(0x118DD), 0x118BE => array(0x118DE), 0x118BF => array(0x118DF),
0x1D15E => array(0x1D157, 0x1D165), 0x1D15F => array(0x1D158, 0x1D165), 0x1D160 => array(0x1D158, 0x1D165, 0x1D16E),
0x1D161 => array(0x1D158, 0x1D165, 0x1D16F), 0x1D162 => array(0x1D158, 0x1D165, 0x1D170), 0x1D163 => array(0x1D158, 0x1D165, 0x1D171),
0x1D164 => array(0x1D158, 0x1D165, 0x1D172), 0x1D1BB => array(0x1D1B9, 0x1D165), 0x1D1BC => array(0x1D1BA, 0x1D165),
0x1D1BD => array(0x1D1B9, 0x1D165, 0x1D16E), 0x1D1BE => array(0x1D1BA, 0x1D165, 0x1D16E), 0x1D1BF => array(0x1D1B9, 0x1D165, 0x1D16F),
0x1D1C0 => array(0x1D1BA, 0x1D165, 0x1D16F), 0x1D400 => array(0x61), 0x1D401 => array(0x62),
0x1D402 => array(0x63), 0x1D403 => array(0x64), 0x1D404 => array(0x65),
0x1D405 => array(0x66), 0x1D406 => array(0x67), 0x1D407 => array(0x68),
0x1D408 => array(0x69), 0x1D409 => array(0x6A), 0x1D40A => array(0x6B),
0x1D40B => array(0x6C), 0x1D40C => array(0x6D), 0x1D40D => array(0x6E),
0x1D40E => array(0x6F), 0x1D40F => array(0x70), 0x1D410 => array(0x71),
0x1D411 => array(0x72), 0x1D412 => array(0x73), 0x1D413 => array(0x74),
0x1D414 => array(0x75), 0x1D415 => array(0x76), 0x1D416 => array(0x77),
0x1D417 => array(0x78), 0x1D418 => array(0x79), 0x1D419 => array(0x7A),
0x1D41A => array(0x61), 0x1D41B => array(0x62), 0x1D41C => array(0x63),
0x1D41D => array(0x64), 0x1D41E => array(0x65), 0x1D41F => array(0x66),
0x1D420 => array(0x67), 0x1D421 => array(0x68), 0x1D422 => array(0x69),
0x1D423 => array(0x6A), 0x1D424 => array(0x6B), 0x1D425 => array(0x6C),
0x1D426 => array(0x6D), 0x1D427 => array(0x6E), 0x1D428 => array(0x6F),
0x1D429 => array(0x70), 0x1D42A => array(0x71), 0x1D42B => array(0x72),
0x1D42C => array(0x73), 0x1D42D => array(0x74), 0x1D42E => array(0x75),
0x1D42F => array(0x76), 0x1D430 => array(0x77), 0x1D431 => array(0x78),
0x1D432 => array(0x79), 0x1D433 => array(0x7A), 0x1D434 => array(0x61),
0x1D435 => array(0x62), 0x1D436 => array(0x63), 0x1D437 => array(0x64),
0x1D438 => array(0x65), 0x1D439 => array(0x66), 0x1D43A => array(0x67),
0x1D43B => array(0x68), 0x1D43C => array(0x69), 0x1D43D => array(0x6A),
0x1D43E => array(0x6B), 0x1D43F => array(0x6C), 0x1D440 => array(0x6D),
0x1D441 => array(0x6E), 0x1D442 => array(0x6F), 0x1D443 => array(0x70),
0x1D444 => array(0x71), 0x1D445 => array(0x72), 0x1D446 => array(0x73),
0x1D447 => array(0x74), 0x1D448 => array(0x75), 0x1D449 => array(0x76),
0x1D44A => array(0x77), 0x1D44B => array(0x78), 0x1D44C => array(0x79),
0x1D44D => array(0x7A), 0x1D44E => array(0x61), 0x1D44F => array(0x62),
0x1D450 => array(0x63), 0x1D451 => array(0x64), 0x1D452 => array(0x65),
0x1D453 => array(0x66), 0x1D454 => array(0x67), 0x1D456 => array(0x69),
0x1D457 => array(0x6A), 0x1D458 => array(0x6B), 0x1D459 => array(0x6C),
0x1D45A => array(0x6D), 0x1D45B => array(0x6E), 0x1D45C => array(0x6F),
0x1D45D => array(0x70), 0x1D45E => array(0x71), 0x1D45F => array(0x72),
0x1D460 => array(0x73), 0x1D461 => array(0x74), 0x1D462 => array(0x75),
0x1D463 => array(0x76), 0x1D464 => array(0x77), 0x1D465 => array(0x78),
0x1D466 => array(0x79), 0x1D467 => array(0x7A), 0x1D468 => array(0x61),
0x1D469 => array(0x62), 0x1D46A => array(0x63), 0x1D46B => array(0x64),
0x1D46C => array(0x65), 0x1D46D => array(0x66), 0x1D46E => array(0x67),
0x1D46F => array(0x68), 0x1D470 => array(0x69), 0x1D471 => array(0x6A),
0x1D472 => array(0x6B), 0x1D473 => array(0x6C), 0x1D474 => array(0x6D),
0x1D475 => array(0x6E), 0x1D476 => array(0x6F), 0x1D477 => array(0x70),
0x1D478 => array(0x71), 0x1D479 => array(0x72), 0x1D47A => array(0x73),
0x1D47B => array(0x74), 0x1D47C => array(0x75), 0x1D47D => array(0x76),
0x1D47E => array(0x77), 0x1D47F => array(0x78), 0x1D480 => array(0x79),
0x1D481 => array(0x7A), 0x1D482 => array(0x61), 0x1D483 => array(0x62),
0x1D484 => array(0x63), 0x1D485 => array(0x64), 0x1D486 => array(0x65),
0x1D487 => array(0x66), 0x1D488 => array(0x67), 0x1D489 => array(0x68),
0x1D48A => array(0x69), 0x1D48B => array(0x6A), 0x1D48C => array(0x6B),
0x1D48D => array(0x6C), 0x1D48E => array(0x6D), 0x1D48F => array(0x6E),
0x1D490 => array(0x6F), 0x1D491 => array(0x70), 0x1D492 => array(0x71),
0x1D493 => array(0x72), 0x1D494 => array(0x73), 0x1D495 => array(0x74),
0x1D496 => array(0x75), 0x1D497 => array(0x76), 0x1D498 => array(0x77),
0x1D499 => array(0x78), 0x1D49A => array(0x79), 0x1D49B => array(0x7A),
0x1D49C => array(0x61), 0x1D49E => array(0x63), 0x1D49F => array(0x64),
0x1D4A2 => array(0x67), 0x1D4A5 => array(0x6A), 0x1D4A6 => array(0x6B),
0x1D4A9 => array(0x6E), 0x1D4AA => array(0x6F), 0x1D4AB => array(0x70),
0x1D4AC => array(0x71), 0x1D4AE => array(0x73), 0x1D4AF => array(0x74),
0x1D4B0 => array(0x75), 0x1D4B1 => array(0x76), 0x1D4B2 => array(0x77),
0x1D4B3 => array(0x78), 0x1D4B4 => array(0x79), 0x1D4B5 => array(0x7A),
0x1D4B6 => array(0x61), 0x1D4B7 => array(0x62), 0x1D4B8 => array(0x63),
0x1D4B9 => array(0x64), 0x1D4BB => array(0x66), 0x1D4BD => array(0x68),
0x1D4BE => array(0x69), 0x1D4BF => array(0x6A), 0x1D4C0 => array(0x6B),
0x1D4C1 => array(0x6C), 0x1D4C2 => array(0x6D), 0x1D4C3 => array(0x6E),
0x1D4C5 => array(0x70), 0x1D4C6 => array(0x71), 0x1D4C7 => array(0x72),
0x1D4C8 => array(0x73), 0x1D4C9 => array(0x74), 0x1D4CA => array(0x75),
0x1D4CB => array(0x76), 0x1D4CC => array(0x77), 0x1D4CD => array(0x78),
0x1D4CE => array(0x79), 0x1D4CF => array(0x7A), 0x1D4D0 => array(0x61),
0x1D4D1 => array(0x62), 0x1D4D2 => array(0x63), 0x1D4D3 => array(0x64),
0x1D4D4 => array(0x65), 0x1D4D5 => array(0x66), 0x1D4D6 => array(0x67),
0x1D4D7 => array(0x68), 0x1D4D8 => array(0x69), 0x1D4D9 => array(0x6A),
0x1D4DA => array(0x6B), 0x1D4DB => array(0x6C), 0x1D4DC => array(0x6D),
0x1D4DD => array(0x6E), 0x1D4DE => array(0x6F), 0x1D4DF => array(0x70),
0x1D4E0 => array(0x71), 0x1D4E1 => array(0x72), 0x1D4E2 => array(0x73),
0x1D4E3 => array(0x74), 0x1D4E4 => array(0x75), 0x1D4E5 => array(0x76),
0x1D4E6 => array(0x77), 0x1D4E7 => array(0x78), 0x1D4E8 => array(0x79),
0x1D4E9 => array(0x7A), 0x1D4EA => array(0x61), 0x1D4EB => array(0x62),
0x1D4EC => array(0x63), 0x1D4ED => array(0x64), 0x1D4EE => array(0x65),
0x1D4EF => array(0x66), 0x1D4F0 => array(0x67), 0x1D4F1 => array(0x68),
0x1D4F2 => array(0x69), 0x1D4F3 => array(0x6A), 0x1D4F4 => array(0x6B),
0x1D4F5 => array(0x6C), 0x1D4F6 => array(0x6D), 0x1D4F7 => array(0x6E),
0x1D4F8 => array(0x6F), 0x1D4F9 => array(0x70), 0x1D4FA => array(0x71),
0x1D4FB => array(0x72), 0x1D4FC => array(0x73), 0x1D4FD => array(0x74),
0x1D4FE => array(0x75), 0x1D4FF => array(0x76), 0x1D500 => array(0x77),
0x1D501 => array(0x78), 0x1D502 => array(0x79), 0x1D503 => array(0x7A),
0x1D504 => array(0x61), 0x1D505 => array(0x62), 0x1D507 => array(0x64),
0x1D508 => array(0x65), 0x1D509 => array(0x66), 0x1D50A => array(0x67),
0x1D50D => array(0x6A), 0x1D50E => array(0x6B), 0x1D50F => array(0x6C),
0x1D510 => array(0x6D), 0x1D511 => array(0x6E), 0x1D512 => array(0x6F),
0x1D513 => array(0x70), 0x1D514 => array(0x71), 0x1D516 => array(0x73),
0x1D517 => array(0x74), 0x1D518 => array(0x75), 0x1D519 => array(0x76),
0x1D51A => array(0x77), 0x1D51B => array(0x78), 0x1D51C => array(0x79),
0x1D51E => array(0x61), 0x1D51F => array(0x62), 0x1D520 => array(0x63),
0x1D521 => array(0x64), 0x1D522 => array(0x65), 0x1D523 => array(0x66),
0x1D524 => array(0x67), 0x1D525 => array(0x68), 0x1D526 => array(0x69),
0x1D527 => array(0x6A), 0x1D528 => array(0x6B), 0x1D529 => array(0x6C),
0x1D52A => array(0x6D), 0x1D52B => array(0x6E), 0x1D52C => array(0x6F),
0x1D52D => array(0x70), 0x1D52E => array(0x71), 0x1D52F => array(0x72),
0x1D530 => array(0x73), 0x1D531 => array(0x74), 0x1D532 => array(0x75),
0x1D533 => array(0x76), 0x1D534 => array(0x77), 0x1D535 => array(0x78),
0x1D536 => array(0x79), 0x1D537 => array(0x7A), 0x1D538 => array(0x61),
0x1D539 => array(0x62), 0x1D53B => array(0x64), 0x1D53C => array(0x65),
0x1D53D => array(0x66), 0x1D53E => array(0x67), 0x1D540 => array(0x69),
0x1D541 => array(0x6A), 0x1D542 => array(0x6B), 0x1D543 => array(0x6C),
0x1D544 => array(0x6D), 0x1D546 => array(0x6F), 0x1D54A => array(0x73),
0x1D54B => array(0x74), 0x1D54C => array(0x75), 0x1D54D => array(0x76),
0x1D54E => array(0x77), 0x1D54F => array(0x78), 0x1D550 => array(0x79),
0x1D552 => array(0x61), 0x1D553 => array(0x62), 0x1D554 => array(0x63),
0x1D555 => array(0x64), 0x1D556 => array(0x65), 0x1D557 => array(0x66),
0x1D558 => array(0x67), 0x1D559 => array(0x68), 0x1D55A => array(0x69),
0x1D55B => array(0x6A), 0x1D55C => array(0x6B), 0x1D55D => array(0x6C),
0x1D55E => array(0x6D), 0x1D55F => array(0x6E), 0x1D560 => array(0x6F),
0x1D561 => array(0x70), 0x1D562 => array(0x71), 0x1D563 => array(0x72),
0x1D564 => array(0x73), 0x1D565 => array(0x74), 0x1D566 => array(0x75),
0x1D567 => array(0x76), 0x1D568 => array(0x77), 0x1D569 => array(0x78),
0x1D56A => array(0x79), 0x1D56B => array(0x7A), 0x1D56C => array(0x61),
0x1D56D => array(0x62), 0x1D56E => array(0x63), 0x1D56F => array(0x64),
0x1D570 => array(0x65), 0x1D571 => array(0x66), 0x1D572 => array(0x67),
0x1D573 => array(0x68), 0x1D574 => array(0x69), 0x1D575 => array(0x6A),
0x1D576 => array(0x6B), 0x1D577 => array(0x6C), 0x1D578 => array(0x6D),
0x1D579 => array(0x6E), 0x1D57A => array(0x6F), 0x1D57B => array(0x70),
0x1D57C => array(0x71), 0x1D57D => array(0x72), 0x1D57E => array(0x73),
0x1D57F => array(0x74), 0x1D580 => array(0x75), 0x1D581 => array(0x76),
0x1D582 => array(0x77), 0x1D583 => array(0x78), 0x1D584 => array(0x79),
0x1D585 => array(0x7A), 0x1D586 => array(0x61), 0x1D587 => array(0x62),
0x1D588 => array(0x63), 0x1D589 => array(0x64), 0x1D58A => array(0x65),
0x1D58B => array(0x66), 0x1D58C => array(0x67), 0x1D58D => array(0x68),
0x1D58E => array(0x69), 0x1D58F => array(0x6A), 0x1D590 => array(0x6B),
0x1D591 => array(0x6C), 0x1D592 => array(0x6D), 0x1D593 => array(0x6E),
0x1D594 => array(0x6F), 0x1D595 => array(0x70), 0x1D596 => array(0x71),
0x1D597 => array(0x72), 0x1D598 => array(0x73), 0x1D599 => array(0x74),
0x1D59A => array(0x75), 0x1D59B => array(0x76), 0x1D59C => array(0x77),
0x1D59D => array(0x78), 0x1D59E => array(0x79), 0x1D59F => array(0x7A),
0x1D5A0 => array(0x61), 0x1D5A1 => array(0x62), 0x1D5A2 => array(0x63),
0x1D5A3 => array(0x64), 0x1D5A4 => array(0x65), 0x1D5A5 => array(0x66),
0x1D5A6 => array(0x67), 0x1D5A7 => array(0x68), 0x1D5A8 => array(0x69),
0x1D5A9 => array(0x6A), 0x1D5AA => array(0x6B), 0x1D5AB => array(0x6C),
0x1D5AC => array(0x6D), 0x1D5AD => array(0x6E), 0x1D5AE => array(0x6F),
0x1D5AF => array(0x70), 0x1D5B0 => array(0x71), 0x1D5B1 => array(0x72),
0x1D5B2 => array(0x73), 0x1D5B3 => array(0x74), 0x1D5B4 => array(0x75),
0x1D5B5 => array(0x76), 0x1D5B6 => array(0x77), 0x1D5B7 => array(0x78),
0x1D5B8 => array(0x79), 0x1D5B9 => array(0x7A), 0x1D5BA => array(0x61),
0x1D5BB => array(0x62), 0x1D5BC => array(0x63), 0x1D5BD => array(0x64),
0x1D5BE => array(0x65), 0x1D5BF => array(0x66), 0x1D5C0 => array(0x67),
0x1D5C1 => array(0x68), 0x1D5C2 => array(0x69), 0x1D5C3 => array(0x6A),
0x1D5C4 => array(0x6B), 0x1D5C5 => array(0x6C), 0x1D5C6 => array(0x6D),
0x1D5C7 => array(0x6E), 0x1D5C8 => array(0x6F), 0x1D5C9 => array(0x70),
0x1D5CA => array(0x71), 0x1D5CB => array(0x72), 0x1D5CC => array(0x73),
0x1D5CD => array(0x74), 0x1D5CE => array(0x75), 0x1D5CF => array(0x76),
0x1D5D0 => array(0x77), 0x1D5D1 => array(0x78), 0x1D5D2 => array(0x79),
0x1D5D3 => array(0x7A), 0x1D5D4 => array(0x61), 0x1D5D5 => array(0x62),
0x1D5D6 => array(0x63), 0x1D5D7 => array(0x64), 0x1D5D8 => array(0x65),
0x1D5D9 => array(0x66), 0x1D5DA => array(0x67), 0x1D5DB => array(0x68),
0x1D5DC => array(0x69), 0x1D5DD => array(0x6A), 0x1D5DE => array(0x6B),
0x1D5DF => array(0x6C), 0x1D5E0 => array(0x6D), 0x1D5E1 => array(0x6E),
0x1D5E2 => array(0x6F), 0x1D5E3 => array(0x70), 0x1D5E4 => array(0x71),
0x1D5E5 => array(0x72), 0x1D5E6 => array(0x73), 0x1D5E7 => array(0x74),
0x1D5E8 => array(0x75), 0x1D5E9 => array(0x76), 0x1D5EA => array(0x77),
0x1D5EB => array(0x78), 0x1D5EC => array(0x79), 0x1D5ED => array(0x7A),
0x1D5EE => array(0x61), 0x1D5EF => array(0x62), 0x1D5F0 => array(0x63),
0x1D5F1 => array(0x64), 0x1D5F2 => array(0x65), 0x1D5F3 => array(0x66),
0x1D5F4 => array(0x67), 0x1D5F5 => array(0x68), 0x1D5F6 => array(0x69),
0x1D5F7 => array(0x6A), 0x1D5F8 => array(0x6B), 0x1D5F9 => array(0x6C),
0x1D5FA => array(0x6D), 0x1D5FB => array(0x6E), 0x1D5FC => array(0x6F),
0x1D5FD => array(0x70), 0x1D5FE => array(0x71), 0x1D5FF => array(0x72),
0x1D600 => array(0x73), 0x1D601 => array(0x74), 0x1D602 => array(0x75),
0x1D603 => array(0x76), 0x1D604 => array(0x77), 0x1D605 => array(0x78),
0x1D606 => array(0x79), 0x1D607 => array(0x7A), 0x1D608 => array(0x61),
0x1D609 => array(0x62), 0x1D60A => array(0x63), 0x1D60B => array(0x64),
0x1D60C => array(0x65), 0x1D60D => array(0x66), 0x1D60E => array(0x67),
0x1D60F => array(0x68), 0x1D610 => array(0x69), 0x1D611 => array(0x6A),
0x1D612 => array(0x6B), 0x1D613 => array(0x6C), 0x1D614 => array(0x6D),
0x1D615 => array(0x6E), 0x1D616 => array(0x6F), 0x1D617 => array(0x70),
0x1D618 => array(0x71), 0x1D619 => array(0x72), 0x1D61A => array(0x73),
0x1D61B => array(0x74), 0x1D61C => array(0x75), 0x1D61D => array(0x76),
0x1D61E => array(0x77), 0x1D61F => array(0x78), 0x1D620 => array(0x79),
0x1D621 => array(0x7A), 0x1D622 => array(0x61), 0x1D623 => array(0x62),
0x1D624 => array(0x63), 0x1D625 => array(0x64), 0x1D626 => array(0x65),
0x1D627 => array(0x66), 0x1D628 => array(0x67), 0x1D629 => array(0x68),
0x1D62A => array(0x69), 0x1D62B => array(0x6A), 0x1D62C => array(0x6B),
0x1D62D => array(0x6C), 0x1D62E => array(0x6D), 0x1D62F => array(0x6E),
0x1D630 => array(0x6F), 0x1D631 => array(0x70), 0x1D632 => array(0x71),
0x1D633 => array(0x72), 0x1D634 => array(0x73), 0x1D635 => array(0x74),
0x1D636 => array(0x75), 0x1D637 => array(0x76), 0x1D638 => array(0x77),
0x1D639 => array(0x78), 0x1D63A => array(0x79), 0x1D63B => array(0x7A),
0x1D63C => array(0x61), 0x1D63D => array(0x62), 0x1D63E => array(0x63),
0x1D63F => array(0x64), 0x1D640 => array(0x65), 0x1D641 => array(0x66),
0x1D642 => array(0x67), 0x1D643 => array(0x68), 0x1D644 => array(0x69),
0x1D645 => array(0x6A), 0x1D646 => array(0x6B), 0x1D647 => array(0x6C),
0x1D648 => array(0x6D), 0x1D649 => array(0x6E), 0x1D64A => array(0x6F),
0x1D64B => array(0x70), 0x1D64C => array(0x71), 0x1D64D => array(0x72),
0x1D64E => array(0x73), 0x1D64F => array(0x74), 0x1D650 => array(0x75),
0x1D651 => array(0x76), 0x1D652 => array(0x77), 0x1D653 => array(0x78),
0x1D654 => array(0x79), 0x1D655 => array(0x7A), 0x1D656 => array(0x61),
0x1D657 => array(0x62), 0x1D658 => array(0x63), 0x1D659 => array(0x64),
0x1D65A => array(0x65), 0x1D65B => array(0x66), 0x1D65C => array(0x67),
0x1D65D => array(0x68), 0x1D65E => array(0x69), 0x1D65F => array(0x6A),
0x1D660 => array(0x6B), 0x1D661 => array(0x6C), 0x1D662 => array(0x6D),
0x1D663 => array(0x6E), 0x1D664 => array(0x6F), 0x1D665 => array(0x70),
0x1D666 => array(0x71), 0x1D667 => array(0x72), 0x1D668 => array(0x73),
0x1D669 => array(0x74), 0x1D66A => array(0x75), 0x1D66B => array(0x76),
0x1D66C => array(0x77), 0x1D66D => array(0x78), 0x1D66E => array(0x79),
0x1D66F => array(0x7A), 0x1D670 => array(0x61), 0x1D671 => array(0x62),
0x1D672 => array(0x63), 0x1D673 => array(0x64), 0x1D674 => array(0x65),
0x1D675 => array(0x66), 0x1D676 => array(0x67), 0x1D677 => array(0x68),
0x1D678 => array(0x69), 0x1D679 => array(0x6A), 0x1D67A => array(0x6B),
0x1D67B => array(0x6C), 0x1D67C => array(0x6D), 0x1D67D => array(0x6E),
0x1D67E => array(0x6F), 0x1D67F => array(0x70), 0x1D680 => array(0x71),
0x1D681 => array(0x72), 0x1D682 => array(0x73), 0x1D683 => array(0x74),
0x1D684 => array(0x75), 0x1D685 => array(0x76), 0x1D686 => array(0x77),
0x1D687 => array(0x78), 0x1D688 => array(0x79), 0x1D689 => array(0x7A),
0x1D68A => array(0x61), 0x1D68B => array(0x62), 0x1D68C => array(0x63),
0x1D68D => array(0x64), 0x1D68E => array(0x65), 0x1D68F => array(0x66),
0x1D690 => array(0x67), 0x1D691 => array(0x68), 0x1D692 => array(0x69),
0x1D693 => array(0x6A), 0x1D694 => array(0x6B), 0x1D695 => array(0x6C),
0x1D696 => array(0x6D), 0x1D697 => array(0x6E), 0x1D698 => array(0x6F),
0x1D699 => array(0x70), 0x1D69A => array(0x71), 0x1D69B => array(0x72),
0x1D69C => array(0x73), 0x1D69D => array(0x74), 0x1D69E => array(0x75),
0x1D69F => array(0x76), 0x1D6A0 => array(0x77), 0x1D6A1 => array(0x78),
0x1D6A2 => array(0x79), 0x1D6A3 => array(0x7A), 0x1D6A4 => array(0x131),
0x1D6A5 => array(0x237), 0x1D6A8 => array(0x3B1), 0x1D6A9 => array(0x3B2),
0x1D6AA => array(0x3B3), 0x1D6AB => array(0x3B4), 0x1D6AC => array(0x3B5),
0x1D6AD => array(0x3B6), 0x1D6AE => array(0x3B7), 0x1D6AF => array(0x3B8),
0x1D6B0 => array(0x3B9), 0x1D6B1 => array(0x3BA), 0x1D6B2 => array(0x3BB),
0x1D6B3 => array(0x3BC), 0x1D6B4 => array(0x3BD), 0x1D6B5 => array(0x3BE),
0x1D6B6 => array(0x3BF), 0x1D6B7 => array(0x3C0), 0x1D6B8 => array(0x3C1),
0x1D6B9 => array(0x3B8), 0x1D6BA => array(0x3C3), 0x1D6BB => array(0x3C4),
0x1D6BC => array(0x3C5), 0x1D6BD => array(0x3C6), 0x1D6BE => array(0x3C7),
0x1D6BF => array(0x3C8), 0x1D6C0 => array(0x3C9), 0x1D6C1 => array(0x2207),
0x1D6C2 => array(0x3B1), 0x1D6C3 => array(0x3B2), 0x1D6C4 => array(0x3B3),
0x1D6C5 => array(0x3B4), 0x1D6C6 => array(0x3B5), 0x1D6C7 => array(0x3B6),
0x1D6C8 => array(0x3B7), 0x1D6C9 => array(0x3B8), 0x1D6CA => array(0x3B9),
0x1D6CB => array(0x3BA), 0x1D6CC => array(0x3BB), 0x1D6CD => array(0x3BC),
0x1D6CE => array(0x3BD), 0x1D6CF => array(0x3BE), 0x1D6D0 => array(0x3BF),
0x1D6D1 => array(0x3C0), 0x1D6D2 => array(0x3C1), 0x1D6D3 => array(0x3C3),
0x1D6D4 => array(0x3C3), 0x1D6D5 => array(0x3C4), 0x1D6D6 => array(0x3C5),
0x1D6D7 => array(0x3C6), 0x1D6D8 => array(0x3C7), 0x1D6D9 => array(0x3C8),
0x1D6DA => array(0x3C9), 0x1D6DB => array(0x2202), 0x1D6DC => array(0x3B5),
0x1D6DD => array(0x3B8), 0x1D6DE => array(0x3BA), 0x1D6DF => array(0x3C6),
0x1D6E0 => array(0x3C1), 0x1D6E1 => array(0x3C0), 0x1D6E2 => array(0x3B1),
0x1D6E3 => array(0x3B2), 0x1D6E4 => array(0x3B3), 0x1D6E5 => array(0x3B4),
0x1D6E6 => array(0x3B5), 0x1D6E7 => array(0x3B6), 0x1D6E8 => array(0x3B7),
0x1D6E9 => array(0x3B8), 0x1D6EA => array(0x3B9), 0x1D6EB => array(0x3BA),
0x1D6EC => array(0x3BB), 0x1D6ED => array(0x3BC), 0x1D6EE => array(0x3BD),
0x1D6EF => array(0x3BE), 0x1D6F0 => array(0x3BF), 0x1D6F1 => array(0x3C0),
0x1D6F2 => array(0x3C1), 0x1D6F3 => array(0x3B8), 0x1D6F4 => array(0x3C3),
0x1D6F5 => array(0x3C4), 0x1D6F6 => array(0x3C5), 0x1D6F7 => array(0x3C6),
0x1D6F8 => array(0x3C7), 0x1D6F9 => array(0x3C8), 0x1D6FA => array(0x3C9),
0x1D6FB => array(0x2207), 0x1D6FC => array(0x3B1), 0x1D6FD => array(0x3B2),
0x1D6FE => array(0x3B3), 0x1D6FF => array(0x3B4), 0x1D700 => array(0x3B5),
0x1D701 => array(0x3B6), 0x1D702 => array(0x3B7), 0x1D703 => array(0x3B8),
0x1D704 => array(0x3B9), 0x1D705 => array(0x3BA), 0x1D706 => array(0x3BB),
0x1D707 => array(0x3BC), 0x1D708 => array(0x3BD), 0x1D709 => array(0x3BE),
0x1D70A => array(0x3BF), 0x1D70B => array(0x3C0), 0x1D70C => array(0x3C1),
0x1D70D => array(0x3C3), 0x1D70E => array(0x3C3), 0x1D70F => array(0x3C4),
0x1D710 => array(0x3C5), 0x1D711 => array(0x3C6), 0x1D712 => array(0x3C7),
0x1D713 => array(0x3C8), 0x1D714 => array(0x3C9), 0x1D715 => array(0x2202),
0x1D716 => array(0x3B5), 0x1D717 => array(0x3B8), 0x1D718 => array(0x3BA),
0x1D719 => array(0x3C6), 0x1D71A => array(0x3C1), 0x1D71B => array(0x3C0),
0x1D71C => array(0x3B1), 0x1D71D => array(0x3B2), 0x1D71E => array(0x3B3),
0x1D71F => array(0x3B4), 0x1D720 => array(0x3B5), 0x1D721 => array(0x3B6),
0x1D722 => array(0x3B7), 0x1D723 => array(0x3B8), 0x1D724 => array(0x3B9),
0x1D725 => array(0x3BA), 0x1D726 => array(0x3BB), 0x1D727 => array(0x3BC),
0x1D728 => array(0x3BD), 0x1D729 => array(0x3BE), 0x1D72A => array(0x3BF),
0x1D72B => array(0x3C0), 0x1D72C => array(0x3C1), 0x1D72D => array(0x3B8),
0x1D72E => array(0x3C3), 0x1D72F => array(0x3C4), 0x1D730 => array(0x3C5),
0x1D731 => array(0x3C6), 0x1D732 => array(0x3C7), 0x1D733 => array(0x3C8),
0x1D734 => array(0x3C9), 0x1D735 => array(0x2207), 0x1D736 => array(0x3B1),
0x1D737 => array(0x3B2), 0x1D738 => array(0x3B3), 0x1D739 => array(0x3B4),
0x1D73A => array(0x3B5), 0x1D73B => array(0x3B6), 0x1D73C => array(0x3B7),
0x1D73D => array(0x3B8), 0x1D73E => array(0x3B9), 0x1D73F => array(0x3BA),
0x1D740 => array(0x3BB), 0x1D741 => array(0x3BC), 0x1D742 => array(0x3BD),
0x1D743 => array(0x3BE), 0x1D744 => array(0x3BF), 0x1D745 => array(0x3C0),
0x1D746 => array(0x3C1), 0x1D747 => array(0x3C3), 0x1D748 => array(0x3C3),
0x1D749 => array(0x3C4), 0x1D74A => array(0x3C5), 0x1D74B => array(0x3C6),
0x1D74C => array(0x3C7), 0x1D74D => array(0x3C8), 0x1D74E => array(0x3C9),
0x1D74F => array(0x2202), 0x1D750 => array(0x3B5), 0x1D751 => array(0x3B8),
0x1D752 => array(0x3BA), 0x1D753 => array(0x3C6), 0x1D754 => array(0x3C1),
0x1D755 => array(0x3C0), 0x1D756 => array(0x3B1), 0x1D757 => array(0x3B2),
0x1D758 => array(0x3B3), 0x1D759 => array(0x3B4), 0x1D75A => array(0x3B5),
0x1D75B => array(0x3B6), 0x1D75C => array(0x3B7), 0x1D75D => array(0x3B8),
0x1D75E => array(0x3B9), 0x1D75F => array(0x3BA), 0x1D760 => array(0x3BB),
0x1D761 => array(0x3BC), 0x1D762 => array(0x3BD), 0x1D763 => array(0x3BE),
0x1D764 => array(0x3BF), 0x1D765 => array(0x3C0), 0x1D766 => array(0x3C1),
0x1D767 => array(0x3B8), 0x1D768 => array(0x3C3), 0x1D769 => array(0x3C4),
0x1D76A => array(0x3C5), 0x1D76B => array(0x3C6), 0x1D76C => array(0x3C7),
0x1D76D => array(0x3C8), 0x1D76E => array(0x3C9), 0x1D76F => array(0x2207),
0x1D770 => array(0x3B1), 0x1D771 => array(0x3B2), 0x1D772 => array(0x3B3),
0x1D773 => array(0x3B4), 0x1D774 => array(0x3B5), 0x1D775 => array(0x3B6),
0x1D776 => array(0x3B7), 0x1D777 => array(0x3B8), 0x1D778 => array(0x3B9),
0x1D779 => array(0x3BA), 0x1D77A => array(0x3BB), 0x1D77B => array(0x3BC),
0x1D77C => array(0x3BD), 0x1D77D => array(0x3BE), 0x1D77E => array(0x3BF),
0x1D77F => array(0x3C0), 0x1D780 => array(0x3C1), 0x1D781 => array(0x3C3),
0x1D782 => array(0x3C3), 0x1D783 => array(0x3C4), 0x1D784 => array(0x3C5),
0x1D785 => array(0x3C6), 0x1D786 => array(0x3C7), 0x1D787 => array(0x3C8),
0x1D788 => array(0x3C9), 0x1D789 => array(0x2202), 0x1D78A => array(0x3B5),
0x1D78B => array(0x3B8), 0x1D78C => array(0x3BA), 0x1D78D => array(0x3C6),
0x1D78E => array(0x3C1), 0x1D78F => array(0x3C0), 0x1D790 => array(0x3B1),
0x1D791 => array(0x3B2), 0x1D792 => array(0x3B3), 0x1D793 => array(0x3B4),
0x1D794 => array(0x3B5), 0x1D795 => array(0x3B6), 0x1D796 => array(0x3B7),
0x1D797 => array(0x3B8), 0x1D798 => array(0x3B9), 0x1D799 => array(0x3BA),
0x1D79A => array(0x3BB), 0x1D79B => array(0x3BC), 0x1D79C => array(0x3BD),
0x1D79D => array(0x3BE), 0x1D79E => array(0x3BF), 0x1D79F => array(0x3C0),
0x1D7A0 => array(0x3C1), 0x1D7A1 => array(0x3B8), 0x1D7A2 => array(0x3C3),
0x1D7A3 => array(0x3C4), 0x1D7A4 => array(0x3C5), 0x1D7A5 => array(0x3C6),
0x1D7A6 => array(0x3C7), 0x1D7A7 => array(0x3C8), 0x1D7A8 => array(0x3C9),
0x1D7A9 => array(0x2207), 0x1D7AA => array(0x3B1), 0x1D7AB => array(0x3B2),
0x1D7AC => array(0x3B3), 0x1D7AD => array(0x3B4), 0x1D7AE => array(0x3B5),
0x1D7AF => array(0x3B6), 0x1D7B0 => array(0x3B7), 0x1D7B1 => array(0x3B8),
0x1D7B2 => array(0x3B9), 0x1D7B3 => array(0x3BA), 0x1D7B4 => array(0x3BB),
0x1D7B5 => array(0x3BC), 0x1D7B6 => array(0x3BD), 0x1D7B7 => array(0x3BE),
0x1D7B8 => array(0x3BF), 0x1D7B9 => array(0x3C0), 0x1D7BA => array(0x3C1),
0x1D7BB => array(0x3C3), 0x1D7BC => array(0x3C3), 0x1D7BD => array(0x3C4),
0x1D7BE => array(0x3C5), 0x1D7BF => array(0x3C6), 0x1D7C0 => array(0x3C7),
0x1D7C1 => array(0x3C8), 0x1D7C2 => array(0x3C9), 0x1D7C3 => array(0x2202),
0x1D7C4 => array(0x3B5), 0x1D7C5 => array(0x3B8), 0x1D7C6 => array(0x3BA),
0x1D7C7 => array(0x3C6), 0x1D7C8 => array(0x3C1), 0x1D7C9 => array(0x3C0),
0x1D7CA => array(0x3DD), 0x1D7CB => array(0x3DD), 0x1D7CE => array(0x30),
0x1D7CF => array(0x31), 0x1D7D0 => array(0x32), 0x1D7D1 => array(0x33),
0x1D7D2 => array(0x34), 0x1D7D3 => array(0x35), 0x1D7D4 => array(0x36),
0x1D7D5 => array(0x37), 0x1D7D6 => array(0x38), 0x1D7D7 => array(0x39),
0x1D7D8 => array(0x30), 0x1D7D9 => array(0x31), 0x1D7DA => array(0x32),
0x1D7DB => array(0x33), 0x1D7DC => array(0x34), 0x1D7DD => array(0x35),
0x1D7DE => array(0x36), 0x1D7DF => array(0x37), 0x1D7E0 => array(0x38),
0x1D7E1 => array(0x39), 0x1D7E2 => array(0x30), 0x1D7E3 => array(0x31),
0x1D7E4 => array(0x32), 0x1D7E5 => array(0x33), 0x1D7E6 => array(0x34),
0x1D7E7 => array(0x35), 0x1D7E8 => array(0x36), 0x1D7E9 => array(0x37),
0x1D7EA => array(0x38), 0x1D7EB => array(0x39), 0x1D7EC => array(0x30),
0x1D7ED => array(0x31), 0x1D7EE => array(0x32), 0x1D7EF => array(0x33),
0x1D7F0 => array(0x34), 0x1D7F1 => array(0x35), 0x1D7F2 => array(0x36),
0x1D7F3 => array(0x37), 0x1D7F4 => array(0x38), 0x1D7F5 => array(0x39),
0x1D7F6 => array(0x30), 0x1D7F7 => array(0x31), 0x1D7F8 => array(0x32),
0x1D7F9 => array(0x33), 0x1D7FA => array(0x34), 0x1D7FB => array(0x35),
0x1D7FC => array(0x36), 0x1D7FD => array(0x37), 0x1D7FE => array(0x38),
0x1D7FF => array(0x39), 0x1EE00 => array(0x627), 0x1EE01 => array(0x628),
0x1EE02 => array(0x62C), 0x1EE03 => array(0x62F), 0x1EE05 => array(0x648),
0x1EE06 => array(0x632), 0x1EE07 => array(0x62D), 0x1EE08 => array(0x637),
0x1EE09 => array(0x64A), 0x1EE0A => array(0x643), 0x1EE0B => array(0x644),
0x1EE0C => array(0x645), 0x1EE0D => array(0x646), 0x1EE0E => array(0x633),
0x1EE0F => array(0x639), 0x1EE10 => array(0x641), 0x1EE11 => array(0x635),
0x1EE12 => array(0x642), 0x1EE13 => array(0x631), 0x1EE14 => array(0x634),
0x1EE15 => array(0x62A), 0x1EE16 => array(0x62B), 0x1EE17 => array(0x62E),
0x1EE18 => array(0x630), 0x1EE19 => array(0x636), 0x1EE1A => array(0x638),
0x1EE1B => array(0x63A), 0x1EE1C => array(0x66E), 0x1EE1D => array(0x6BA),
0x1EE1E => array(0x6A1), 0x1EE1F => array(0x66F), 0x1EE21 => array(0x628),
0x1EE22 => array(0x62C), 0x1EE24 => array(0x647), 0x1EE27 => array(0x62D),
0x1EE29 => array(0x64A), 0x1EE2A => array(0x643), 0x1EE2B => array(0x644),
0x1EE2C => array(0x645), 0x1EE2D => array(0x646), 0x1EE2E => array(0x633),
0x1EE2F => array(0x639), 0x1EE30 => array(0x641), 0x1EE31 => array(0x635),
0x1EE32 => array(0x642), 0x1EE34 => array(0x634), 0x1EE35 => array(0x62A),
0x1EE36 => array(0x62B), 0x1EE37 => array(0x62E), 0x1EE39 => array(0x636),
0x1EE3B => array(0x63A), 0x1EE42 => array(0x62C), 0x1EE47 => array(0x62D),
0x1EE49 => array(0x64A), 0x1EE4B => array(0x644), 0x1EE4D => array(0x646),
0x1EE4E => array(0x633), 0x1EE4F => array(0x639), 0x1EE51 => array(0x635),
0x1EE52 => array(0x642), 0x1EE54 => array(0x634), 0x1EE57 => array(0x62E),
0x1EE59 => array(0x636), 0x1EE5B => array(0x63A), 0x1EE5D => array(0x6BA),
0x1EE5F => array(0x66F), 0x1EE61 => array(0x628), 0x1EE62 => array(0x62C),
0x1EE64 => array(0x647), 0x1EE67 => array(0x62D), 0x1EE68 => array(0x637),
0x1EE69 => array(0x64A), 0x1EE6A => array(0x643), 0x1EE6C => array(0x645),
0x1EE6D => array(0x646), 0x1EE6E => array(0x633), 0x1EE6F => array(0x639),
0x1EE70 => array(0x641), 0x1EE71 => array(0x635), 0x1EE72 => array(0x642),
0x1EE74 => array(0x634), 0x1EE75 => array(0x62A), 0x1EE76 => array(0x62B),
0x1EE77 => array(0x62E), 0x1EE79 => array(0x636), 0x1EE7A => array(0x638),
0x1EE7B => array(0x63A), 0x1EE7C => array(0x66E), 0x1EE7E => array(0x6A1),
0x1EE80 => array(0x627), 0x1EE81 => array(0x628), 0x1EE82 => array(0x62C),
0x1EE83 => array(0x62F), 0x1EE84 => array(0x647), 0x1EE85 => array(0x648),
0x1EE86 => array(0x632), 0x1EE87 => array(0x62D), 0x1EE88 => array(0x637),
0x1EE89 => array(0x64A), 0x1EE8B => array(0x644), 0x1EE8C => array(0x645),
0x1EE8D => array(0x646), 0x1EE8E => array(0x633), 0x1EE8F => array(0x639),
0x1EE90 => array(0x641), 0x1EE91 => array(0x635), 0x1EE92 => array(0x642),
0x1EE93 => array(0x631), 0x1EE94 => array(0x634), 0x1EE95 => array(0x62A),
0x1EE96 => array(0x62B), 0x1EE97 => array(0x62E), 0x1EE98 => array(0x630),
0x1EE99 => array(0x636), 0x1EE9A => array(0x638), 0x1EE9B => array(0x63A),
0x1EEA1 => array(0x628), 0x1EEA2 => array(0x62C), 0x1EEA3 => array(0x62F),
0x1EEA5 => array(0x648), 0x1EEA6 => array(0x632), 0x1EEA7 => array(0x62D),
0x1EEA8 => array(0x637), 0x1EEA9 => array(0x64A), 0x1EEAB => array(0x644),
0x1EEAC => array(0x645), 0x1EEAD => array(0x646), 0x1EEAE => array(0x633),
0x1EEAF => array(0x639), 0x1EEB0 => array(0x641), 0x1EEB1 => array(0x635),
0x1EEB2 => array(0x642), 0x1EEB3 => array(0x631), 0x1EEB4 => array(0x634),
0x1EEB5 => array(0x62A), 0x1EEB6 => array(0x62B), 0x1EEB7 => array(0x62E),
0x1EEB8 => array(0x630), 0x1EEB9 => array(0x636), 0x1EEBA => array(0x638),
0x1EEBB => array(0x63A), 0x1F12A => array(0x3014, 0x73, 0x3015), 0x1F12B => array(0x63),
0x1F12C => array(0x72), 0x1F12D => array(0x63, 0x64), 0x1F12E => array(0x77, 0x7A),
0x1F130 => array(0x61), 0x1F131 => array(0x62), 0x1F132 => array(0x63),
0x1F133 => array(0x64), 0x1F134 => array(0x65), 0x1F135 => array(0x66),
0x1F136 => array(0x67), 0x1F137 => array(0x68), 0x1F138 => array(0x69),
0x1F139 => array(0x6A), 0x1F13A => array(0x6B), 0x1F13B => array(0x6C),
0x1F13C => array(0x6D), 0x1F13D => array(0x6E), 0x1F13E => array(0x6F),
0x1F13F => array(0x70), 0x1F140 => array(0x71), 0x1F141 => array(0x72),
0x1F142 => array(0x73), 0x1F143 => array(0x74), 0x1F144 => array(0x75),
0x1F145 => array(0x76), 0x1F146 => array(0x77), 0x1F147 => array(0x78),
0x1F148 => array(0x79), 0x1F149 => array(0x7A), 0x1F14A => array(0x68, 0x76),
0x1F14B => array(0x6D, 0x76), 0x1F14C => array(0x73, 0x64), 0x1F14D => array(0x73, 0x73),
0x1F14E => array(0x70, 0x70, 0x76), 0x1F14F => array(0x77, 0x63), 0x1F16A => array(0x6D, 0x63),
0x1F16B => array(0x6D, 0x64), 0x1F190 => array(0x64, 0x6A), 0x1F200 => array(0x307B, 0x304B),
0x1F201 => array(0x30B3, 0x30B3), 0x1F202 => array(0x30B5), 0x1F210 => array(0x624B),
0x1F211 => array(0x5B57), 0x1F212 => array(0x53CC), 0x1F213 => array(0x30C7),
0x1F214 => array(0x4E8C), 0x1F215 => array(0x591A), 0x1F216 => array(0x89E3),
0x1F217 => array(0x5929), 0x1F218 => array(0x4EA4), 0x1F219 => array(0x6620),
0x1F21A => array(0x7121), 0x1F21B => array(0x6599), 0x1F21C => array(0x524D),
0x1F21D => array(0x5F8C), 0x1F21E => array(0x518D), 0x1F21F => array(0x65B0),
0x1F220 => array(0x521D), 0x1F221 => array(0x7D42), 0x1F222 => array(0x751F),
0x1F223 => array(0x8CA9), 0x1F224 => array(0x58F0), 0x1F225 => array(0x5439),
0x1F226 => array(0x6F14), 0x1F227 => array(0x6295), 0x1F228 => array(0x6355),
0x1F229 => array(0x4E00), 0x1F22A => array(0x4E09), 0x1F22B => array(0x904A),
0x1F22C => array(0x5DE6), 0x1F22D => array(0x4E2D), 0x1F22E => array(0x53F3),
0x1F22F => array(0x6307), 0x1F230 => array(0x8D70), 0x1F231 => array(0x6253),
0x1F232 => array(0x7981), 0x1F233 => array(0x7A7A), 0x1F234 => array(0x5408),
0x1F235 => array(0x6E80), 0x1F236 => array(0x6709), 0x1F237 => array(0x6708),
0x1F238 => array(0x7533), 0x1F239 => array(0x5272), 0x1F23A => array(0x55B6),
0x1F240 => array(0x3014, 0x672C, 0x3015), 0x1F241 => array(0x3014, 0x4E09, 0x3015), 0x1F242 => array(0x3014, 0x4E8C, 0x3015),
0x1F243 => array(0x3014, 0x5B89, 0x3015), 0x1F244 => array(0x3014, 0x70B9, 0x3015), 0x1F245 => array(0x3014, 0x6253, 0x3015),
0x1F246 => array(0x3014, 0x76D7, 0x3015), 0x1F247 => array(0x3014, 0x52DD, 0x3015), 0x1F248 => array(0x3014, 0x6557, 0x3015),
0x1F250 => array(0x5F97), 0x1F251 => array(0x53EF), 0x2F800 => array(0x4E3D),
0x2F801 => array(0x4E38), 0x2F802 => array(0x4E41), 0x2F803 => array(0x20122),
0x2F804 => array(0x4F60), 0x2F805 => array(0x4FAE), 0x2F806 => array(0x4FBB),
0x2F807 => array(0x5002), 0x2F808 => array(0x507A), 0x2F809 => array(0x5099),
0x2F80A => array(0x50E7), 0x2F80B => array(0x50CF), 0x2F80C => array(0x349E),
0x2F80D => array(0x2063A), 0x2F80E => array(0x514D), 0x2F80F => array(0x5154),
0x2F810 => array(0x5164), 0x2F811 => array(0x5177), 0x2F812 => array(0x2051C),
0x2F813 => array(0x34B9), 0x2F814 => array(0x5167), 0x2F815 => array(0x518D),
0x2F816 => array(0x2054B), 0x2F817 => array(0x5197), 0x2F818 => array(0x51A4),
0x2F819 => array(0x4ECC), 0x2F81A => array(0x51AC), 0x2F81B => array(0x51B5),
0x2F81C => array(0x291DF), 0x2F81D => array(0x51F5), 0x2F81E => array(0x5203),
0x2F81F => array(0x34DF), 0x2F820 => array(0x523B), 0x2F821 => array(0x5246),
0x2F822 => array(0x5272), 0x2F823 => array(0x5277), 0x2F824 => array(0x3515),
0x2F825 => array(0x52C7), 0x2F826 => array(0x52C9), 0x2F827 => array(0x52E4),
0x2F828 => array(0x52FA), 0x2F829 => array(0x5305), 0x2F82A => array(0x5306),
0x2F82B => array(0x5317), 0x2F82C => array(0x5349), 0x2F82D => array(0x5351),
0x2F82E => array(0x535A), 0x2F82F => array(0x5373), 0x2F830 => array(0x537D),
0x2F831 => array(0x537F), 0x2F832 => array(0x537F), 0x2F833 => array(0x537F),
0x2F834 => array(0x20A2C), 0x2F835 => array(0x7070), 0x2F836 => array(0x53CA),
0x2F837 => array(0x53DF), 0x2F838 => array(0x20B63), 0x2F839 => array(0x53EB),
0x2F83A => array(0x53F1), 0x2F83B => array(0x5406), 0x2F83C => array(0x549E),
0x2F83D => array(0x5438), 0x2F83E => array(0x5448), 0x2F83F => array(0x5468),
0x2F840 => array(0x54A2), 0x2F841 => array(0x54F6), 0x2F842 => array(0x5510),
0x2F843 => array(0x5553), 0x2F844 => array(0x5563), 0x2F845 => array(0x5584),
0x2F846 => array(0x5584), 0x2F847 => array(0x5599), 0x2F848 => array(0x55AB),
0x2F849 => array(0x55B3), 0x2F84A => array(0x55C2), 0x2F84B => array(0x5716),
0x2F84C => array(0x5606), 0x2F84D => array(0x5717), 0x2F84E => array(0x5651),
0x2F84F => array(0x5674), 0x2F850 => array(0x5207), 0x2F851 => array(0x58EE),
0x2F852 => array(0x57CE), 0x2F853 => array(0x57F4), 0x2F854 => array(0x580D),
0x2F855 => array(0x578B), 0x2F856 => array(0x5832), 0x2F857 => array(0x5831),
0x2F858 => array(0x58AC), 0x2F859 => array(0x214E4), 0x2F85A => array(0x58F2),
0x2F85B => array(0x58F7), 0x2F85C => array(0x5906), 0x2F85D => array(0x591A),
0x2F85E => array(0x5922), 0x2F85F => array(0x5962), 0x2F860 => array(0x216A8),
0x2F861 => array(0x216EA), 0x2F862 => array(0x59EC), 0x2F863 => array(0x5A1B),
0x2F864 => array(0x5A27), 0x2F865 => array(0x59D8), 0x2F866 => array(0x5A66),
0x2F867 => array(0x36EE), 0x2F869 => array(0x5B08), 0x2F86A => array(0x5B3E),
0x2F86B => array(0x5B3E), 0x2F86C => array(0x219C8), 0x2F86D => array(0x5BC3),
0x2F86E => array(0x5BD8), 0x2F86F => array(0x5BE7), 0x2F870 => array(0x5BF3),
0x2F871 => array(0x21B18), 0x2F872 => array(0x5BFF), 0x2F873 => array(0x5C06),
0x2F875 => array(0x5C22), 0x2F876 => array(0x3781), 0x2F877 => array(0x5C60),
0x2F878 => array(0x5C6E), 0x2F879 => array(0x5CC0), 0x2F87A => array(0x5C8D),
0x2F87B => array(0x21DE4), 0x2F87C => array(0x5D43), 0x2F87D => array(0x21DE6),
0x2F87E => array(0x5D6E), 0x2F87F => array(0x5D6B), 0x2F880 => array(0x5D7C),
0x2F881 => array(0x5DE1), 0x2F882 => array(0x5DE2), 0x2F883 => array(0x382F),
0x2F884 => array(0x5DFD), 0x2F885 => array(0x5E28), 0x2F886 => array(0x5E3D),
0x2F887 => array(0x5E69), 0x2F888 => array(0x3862), 0x2F889 => array(0x22183),
0x2F88A => array(0x387C), 0x2F88B => array(0x5EB0), 0x2F88C => array(0x5EB3),
0x2F88D => array(0x5EB6), 0x2F88E => array(0x5ECA), 0x2F88F => array(0x2A392),
0x2F890 => array(0x5EFE), 0x2F891 => array(0x22331), 0x2F892 => array(0x22331),
0x2F893 => array(0x8201), 0x2F894 => array(0x5F22), 0x2F895 => array(0x5F22),
0x2F896 => array(0x38C7), 0x2F897 => array(0x232B8), 0x2F898 => array(0x261DA),
0x2F899 => array(0x5F62), 0x2F89A => array(0x5F6B), 0x2F89B => array(0x38E3),
0x2F89C => array(0x5F9A), 0x2F89D => array(0x5FCD), 0x2F89E => array(0x5FD7),
0x2F89F => array(0x5FF9), 0x2F8A0 => array(0x6081), 0x2F8A1 => array(0x393A),
0x2F8A2 => array(0x391C), 0x2F8A3 => array(0x6094), 0x2F8A4 => array(0x226D4),
0x2F8A5 => array(0x60C7), 0x2F8A6 => array(0x6148), 0x2F8A7 => array(0x614C),
0x2F8A8 => array(0x614E), 0x2F8A9 => array(0x614C), 0x2F8AA => array(0x617A),
0x2F8AB => array(0x618E), 0x2F8AC => array(0x61B2), 0x2F8AD => array(0x61A4),
0x2F8AE => array(0x61AF), 0x2F8AF => array(0x61DE), 0x2F8B0 => array(0x61F2),
0x2F8B1 => array(0x61F6), 0x2F8B2 => array(0x6210), 0x2F8B3 => array(0x621B),
0x2F8B4 => array(0x625D), 0x2F8B5 => array(0x62B1), 0x2F8B6 => array(0x62D4),
0x2F8B7 => array(0x6350), 0x2F8B8 => array(0x22B0C), 0x2F8B9 => array(0x633D),
0x2F8BA => array(0x62FC), 0x2F8BB => array(0x6368), 0x2F8BC => array(0x6383),
0x2F8BD => array(0x63E4), 0x2F8BE => array(0x22BF1), 0x2F8BF => array(0x6422),
0x2F8C0 => array(0x63C5), 0x2F8C1 => array(0x63A9), 0x2F8C2 => array(0x3A2E),
0x2F8C3 => array(0x6469), 0x2F8C4 => array(0x647E), 0x2F8C5 => array(0x649D),
0x2F8C6 => array(0x6477), 0x2F8C7 => array(0x3A6C), 0x2F8C8 => array(0x654F),
0x2F8C9 => array(0x656C), 0x2F8CA => array(0x2300A), 0x2F8CB => array(0x65E3),
0x2F8CC => array(0x66F8), 0x2F8CD => array(0x6649), 0x2F8CE => array(0x3B19),
0x2F8CF => array(0x6691), 0x2F8D0 => array(0x3B08), 0x2F8D1 => array(0x3AE4),
0x2F8D2 => array(0x5192), 0x2F8D3 => array(0x5195), 0x2F8D4 => array(0x6700),
0x2F8D5 => array(0x669C), 0x2F8D6 => array(0x80AD), 0x2F8D7 => array(0x43D9),
0x2F8D8 => array(0x6717), 0x2F8D9 => array(0x671B), 0x2F8DA => array(0x6721),
0x2F8DB => array(0x675E), 0x2F8DC => array(0x6753), 0x2F8DD => array(0x233C3),
0x2F8DE => array(0x3B49), 0x2F8DF => array(0x67FA), 0x2F8E0 => array(0x6785),
0x2F8E1 => array(0x6852), 0x2F8E2 => array(0x6885), 0x2F8E3 => array(0x2346D),
0x2F8E4 => array(0x688E), 0x2F8E5 => array(0x681F), 0x2F8E6 => array(0x6914),
0x2F8E7 => array(0x3B9D), 0x2F8E8 => array(0x6942), 0x2F8E9 => array(0x69A3),
0x2F8EA => array(0x69EA), 0x2F8EB => array(0x6AA8), 0x2F8EC => array(0x236A3),
0x2F8ED => array(0x6ADB), 0x2F8EE => array(0x3C18), 0x2F8EF => array(0x6B21),
0x2F8F0 => array(0x238A7), 0x2F8F1 => array(0x6B54), 0x2F8F2 => array(0x3C4E),
0x2F8F3 => array(0x6B72), 0x2F8F4 => array(0x6B9F), 0x2F8F5 => array(0x6BBA),
0x2F8F6 => array(0x6BBB), 0x2F8F7 => array(0x23A8D), 0x2F8F8 => array(0x21D0B),
0x2F8F9 => array(0x23AFA), 0x2F8FA => array(0x6C4E), 0x2F8FB => array(0x23CBC),
0x2F8FC => array(0x6CBF), 0x2F8FD => array(0x6CCD), 0x2F8FE => array(0x6C67),
0x2F8FF => array(0x6D16), 0x2F900 => array(0x6D3E), 0x2F901 => array(0x6D77),
0x2F902 => array(0x6D41), 0x2F903 => array(0x6D69), 0x2F904 => array(0x6D78),
0x2F905 => array(0x6D85), 0x2F906 => array(0x23D1E), 0x2F907 => array(0x6D34),
0x2F908 => array(0x6E2F), 0x2F909 => array(0x6E6E), 0x2F90A => array(0x3D33),
0x2F90B => array(0x6ECB), 0x2F90C => array(0x6EC7), 0x2F90D => array(0x23ED1),
0x2F90E => array(0x6DF9), 0x2F90F => array(0x6F6E), 0x2F910 => array(0x23F5E),
0x2F911 => array(0x23F8E), 0x2F912 => array(0x6FC6), 0x2F913 => array(0x7039),
0x2F914 => array(0x701E), 0x2F915 => array(0x701B), 0x2F916 => array(0x3D96),
0x2F917 => array(0x704A), 0x2F918 => array(0x707D), 0x2F919 => array(0x7077),
0x2F91A => array(0x70AD), 0x2F91B => array(0x20525), 0x2F91C => array(0x7145),
0x2F91D => array(0x24263), 0x2F91E => array(0x719C), 0x2F920 => array(0x7228),
0x2F921 => array(0x7235), 0x2F922 => array(0x7250), 0x2F923 => array(0x24608),
0x2F924 => array(0x7280), 0x2F925 => array(0x7295), 0x2F926 => array(0x24735),
0x2F927 => array(0x24814), 0x2F928 => array(0x737A), 0x2F929 => array(0x738B),
0x2F92A => array(0x3EAC), 0x2F92B => array(0x73A5), 0x2F92C => array(0x3EB8),
0x2F92D => array(0x3EB8), 0x2F92E => array(0x7447), 0x2F92F => array(0x745C),
0x2F930 => array(0x7471), 0x2F931 => array(0x7485), 0x2F932 => array(0x74CA),
0x2F933 => array(0x3F1B), 0x2F934 => array(0x7524), 0x2F935 => array(0x24C36),
0x2F936 => array(0x753E), 0x2F937 => array(0x24C92), 0x2F938 => array(0x7570),
0x2F939 => array(0x2219F), 0x2F93A => array(0x7610), 0x2F93B => array(0x24FA1),
0x2F93C => array(0x24FB8), 0x2F93D => array(0x25044), 0x2F93E => array(0x3FFC),
0x2F93F => array(0x4008), 0x2F940 => array(0x76F4), 0x2F941 => array(0x250F3),
0x2F942 => array(0x250F2), 0x2F943 => array(0x25119), 0x2F944 => array(0x25133),
0x2F945 => array(0x771E), 0x2F946 => array(0x771F), 0x2F947 => array(0x771F),
0x2F948 => array(0x774A), 0x2F949 => array(0x4039), 0x2F94A => array(0x778B),
0x2F94B => array(0x4046), 0x2F94C => array(0x4096), 0x2F94D => array(0x2541D),
0x2F94E => array(0x784E), 0x2F94F => array(0x788C), 0x2F950 => array(0x78CC),
0x2F951 => array(0x40E3), 0x2F952 => array(0x25626), 0x2F953 => array(0x7956),
0x2F954 => array(0x2569A), 0x2F955 => array(0x256C5), 0x2F956 => array(0x798F),
0x2F957 => array(0x79EB), 0x2F958 => array(0x412F), 0x2F959 => array(0x7A40),
0x2F95A => array(0x7A4A), 0x2F95B => array(0x7A4F), 0x2F95C => array(0x2597C),
0x2F95D => array(0x25AA7), 0x2F95E => array(0x25AA7), 0x2F960 => array(0x4202),
0x2F961 => array(0x25BAB), 0x2F962 => array(0x7BC6), 0x2F963 => array(0x7BC9),
0x2F964 => array(0x4227), 0x2F965 => array(0x25C80), 0x2F966 => array(0x7CD2),
0x2F967 => array(0x42A0), 0x2F968 => array(0x7CE8), 0x2F969 => array(0x7CE3),
0x2F96A => array(0x7D00), 0x2F96B => array(0x25F86), 0x2F96C => array(0x7D63),
0x2F96D => array(0x4301), 0x2F96E => array(0x7DC7), 0x2F96F => array(0x7E02),
0x2F970 => array(0x7E45), 0x2F971 => array(0x4334), 0x2F972 => array(0x26228),
0x2F973 => array(0x26247), 0x2F974 => array(0x4359), 0x2F975 => array(0x262D9),
0x2F976 => array(0x7F7A), 0x2F977 => array(0x2633E), 0x2F978 => array(0x7F95),
0x2F979 => array(0x7FFA), 0x2F97A => array(0x8005), 0x2F97B => array(0x264DA),
0x2F97C => array(0x26523), 0x2F97D => array(0x8060), 0x2F97E => array(0x265A8),
0x2F97F => array(0x8070), 0x2F980 => array(0x2335F), 0x2F981 => array(0x43D5),
0x2F982 => array(0x80B2), 0x2F983 => array(0x8103), 0x2F984 => array(0x440B),
0x2F985 => array(0x813E), 0x2F986 => array(0x5AB5), 0x2F987 => array(0x267A7),
0x2F988 => array(0x267B5), 0x2F989 => array(0x23393), 0x2F98A => array(0x2339C),
0x2F98B => array(0x8201), 0x2F98C => array(0x8204), 0x2F98D => array(0x8F9E),
0x2F98E => array(0x446B), 0x2F98F => array(0x8291), 0x2F990 => array(0x828B),
0x2F991 => array(0x829D), 0x2F992 => array(0x52B3), 0x2F993 => array(0x82B1),
0x2F994 => array(0x82B3), 0x2F995 => array(0x82BD), 0x2F996 => array(0x82E6),
0x2F997 => array(0x26B3C), 0x2F998 => array(0x82E5), 0x2F999 => array(0x831D),
0x2F99A => array(0x8363), 0x2F99B => array(0x83AD), 0x2F99C => array(0x8323),
0x2F99D => array(0x83BD), 0x2F99E => array(0x83E7), 0x2F99F => array(0x8457),
0x2F9A0 => array(0x8353), 0x2F9A1 => array(0x83CA), 0x2F9A2 => array(0x83CC),
0x2F9A3 => array(0x83DC), 0x2F9A4 => array(0x26C36), 0x2F9A5 => array(0x26D6B),
0x2F9A6 => array(0x26CD5), 0x2F9A7 => array(0x452B), 0x2F9A8 => array(0x84F1),
0x2F9A9 => array(0x84F3), 0x2F9AA => array(0x8516), 0x2F9AB => array(0x273CA),
0x2F9AC => array(0x8564), 0x2F9AD => array(0x26F2C), 0x2F9AE => array(0x455D),
0x2F9AF => array(0x4561), 0x2F9B0 => array(0x26FB1), 0x2F9B1 => array(0x270D2),
0x2F9B2 => array(0x456B), 0x2F9B3 => array(0x8650), 0x2F9B4 => array(0x865C),
0x2F9B5 => array(0x8667), 0x2F9B6 => array(0x8669), 0x2F9B7 => array(0x86A9),
0x2F9B8 => array(0x8688), 0x2F9B9 => array(0x870E), 0x2F9BA => array(0x86E2),
0x2F9BB => array(0x8779), 0x2F9BC => array(0x8728), 0x2F9BD => array(0x876B),
0x2F9BE => array(0x8786), 0x2F9C0 => array(0x87E1), 0x2F9C1 => array(0x8801),
0x2F9C2 => array(0x45F9), 0x2F9C3 => array(0x8860), 0x2F9C4 => array(0x8863),
0x2F9C5 => array(0x27667), 0x2F9C6 => array(0x88D7), 0x2F9C7 => array(0x88DE),
0x2F9C8 => array(0x4635), 0x2F9C9 => array(0x88FA), 0x2F9CA => array(0x34BB),
0x2F9CB => array(0x278AE), 0x2F9CC => array(0x27966), 0x2F9CD => array(0x46BE),
0x2F9CE => array(0x46C7), 0x2F9CF => array(0x8AA0), 0x2F9D0 => array(0x8AED),
0x2F9D1 => array(0x8B8A), 0x2F9D2 => array(0x8C55), 0x2F9D3 => array(0x27CA8),
0x2F9D4 => array(0x8CAB), 0x2F9D5 => array(0x8CC1), 0x2F9D6 => array(0x8D1B),
0x2F9D7 => array(0x8D77), 0x2F9D8 => array(0x27F2F), 0x2F9D9 => array(0x20804),
0x2F9DA => array(0x8DCB), 0x2F9DB => array(0x8DBC), 0x2F9DC => array(0x8DF0),
0x2F9DD => array(0x208DE), 0x2F9DE => array(0x8ED4), 0x2F9DF => array(0x8F38),
0x2F9E0 => array(0x285D2), 0x2F9E1 => array(0x285ED), 0x2F9E2 => array(0x9094),
0x2F9E3 => array(0x90F1), 0x2F9E4 => array(0x9111), 0x2F9E5 => array(0x2872E),
0x2F9E6 => array(0x911B), 0x2F9E7 => array(0x9238), 0x2F9E8 => array(0x92D7),
0x2F9E9 => array(0x92D8), 0x2F9EA => array(0x927C), 0x2F9EB => array(0x93F9),
0x2F9EC => array(0x9415), 0x2F9ED => array(0x28BFA), 0x2F9EE => array(0x958B),
0x2F9EF => array(0x4995), 0x2F9F0 => array(0x95B7), 0x2F9F1 => array(0x28D77),
0x2F9F2 => array(0x49E6), 0x2F9F3 => array(0x96C3), 0x2F9F4 => array(0x5DB2),
0x2F9F5 => array(0x9723), 0x2F9F6 => array(0x29145), 0x2F9F7 => array(0x2921A),
0x2F9F8 => array(0x4A6E), 0x2F9F9 => array(0x4A76), 0x2F9FA => array(0x97E0),
0x2F9FB => array(0x2940A), 0x2F9FC => array(0x4AB2), 0x2F9FD => array(0x29496),
0x2F9FE => array(0x980B), 0x2F9FF => array(0x980B), 0x2FA00 => array(0x9829),
0x2FA01 => array(0x295B6), 0x2FA02 => array(0x98E2), 0x2FA03 => array(0x4B33),
0x2FA04 => array(0x9929), 0x2FA05 => array(0x99A7), 0x2FA06 => array(0x99C2),
0x2FA07 => array(0x99FE), 0x2FA08 => array(0x4BCE), 0x2FA09 => array(0x29B30),
0x2FA0A => array(0x9B12), 0x2FA0B => array(0x9C40), 0x2FA0C => array(0x9CFD),
0x2FA0D => array(0x4CCE), 0x2FA0E => array(0x4CED), 0x2FA0F => array(0x9D67),
0x2FA10 => array(0x2A0CE), 0x2FA11 => array(0x4CF8), 0x2FA12 => array(0x2A105),
0x2FA13 => array(0x2A20E), 0x2FA14 => array(0x2A291), 0x2FA15 => array(0x9EBB),
0x2FA16 => array(0x4D56), 0x2FA17 => array(0x9EF9), 0x2FA18 => array(0x9EFE),
0x2FA19 => array(0x9F05), 0x2FA1A => array(0x9F0F), 0x2FA1B => array(0x9F16),
0x2FA1C => array(0x9F3B), 0x2FA1D => array(0x2A600)
),
'norm_combcls' => array(0x334 => 1, 0x335 => 1, 0x336 => 1, 0x337 => 1,
0x338 => 1, 0x93C => 7, 0x9BC => 7, 0xA3C => 7, 0xABC => 7,
0xB3C => 7, 0xCBC => 7, 0x1037 => 7, 0x3099 => 8, 0x309A => 8,
0x94D => 9, 0x9CD => 9, 0xA4D => 9, 0xACD => 9, 0xB4D => 9,
0xBCD => 9, 0xC4D => 9, 0xCCD => 9, 0xD4D => 9, 0xDCA => 9,
0xE3A => 9, 0xF84 => 9, 0x1039 => 9, 0x1714 => 9, 0x1734 => 9,
0x17D2 => 9, 0x5B0 => 10, 0x5B1 => 11, 0x5B2 => 12, 0x5B3 => 13,
0x5B4 => 14, 0x5B5 => 15, 0x5B6 => 16, 0x5B7 => 17, 0x5B8 => 18,
0x5B9 => 19, 0x5BB => 20, 0x5Bc => 21, 0x5BD => 22, 0x5BF => 23,
0x5C1 => 24, 0x5C2 => 25, 0xFB1E => 26, 0x64B => 27, 0x64C => 28,
0x64D => 29, 0x64E => 30, 0x64F => 31, 0x650 => 32, 0x651 => 33,
0x652 => 34, 0x670 => 35, 0x711 => 36, 0xC55 => 84, 0xC56 => 91,
0xE38 => 103, 0xE39 => 103, 0xE48 => 107, 0xE49 => 107, 0xE4A => 107,
0xE4B => 107, 0xEB8 => 118, 0xEB9 => 118, 0xEC8 => 122, 0xEC9 => 122,
0xECA => 122, 0xECB => 122, 0xF71 => 129, 0xF72 => 130, 0xF7A => 130,
0xF7B => 130, 0xF7C => 130, 0xF7D => 130, 0xF80 => 130, 0xF74 => 132,
0x321 => 202, 0x322 => 202, 0x327 => 202, 0x328 => 202, 0x31B => 216,
0xF39 => 216, 0x1D165 => 216, 0x1D166 => 216, 0x1D16E => 216, 0x1D16F => 216,
0x1D170 => 216, 0x1D171 => 216, 0x1D172 => 216, 0x302A => 218, 0x316 => 220,
0x317 => 220, 0x318 => 220, 0x319 => 220, 0x31C => 220, 0x31D => 220,
0x31E => 220, 0x31F => 220, 0x320 => 220, 0x323 => 220, 0x324 => 220,
0x325 => 220, 0x326 => 220, 0x329 => 220, 0x32A => 220, 0x32B => 220,
0x32C => 220, 0x32D => 220, 0x32E => 220, 0x32F => 220, 0x330 => 220,
0x331 => 220, 0x332 => 220, 0x333 => 220, 0x339 => 220, 0x33A => 220,
0x33B => 220, 0x33C => 220, 0x347 => 220, 0x348 => 220, 0x349 => 220,
0x34D => 220, 0x34E => 220, 0x353 => 220, 0x354 => 220, 0x355 => 220,
0x356 => 220, 0x591 => 220, 0x596 => 220, 0x59B => 220, 0x5A3 => 220,
0x5A4 => 220, 0x5A5 => 220, 0x5A6 => 220, 0x5A7 => 220, 0x5AA => 220,
0x655 => 220, 0x656 => 220, 0x6E3 => 220, 0x6EA => 220, 0x6ED => 220,
0x731 => 220, 0x734 => 220, 0x737 => 220, 0x738 => 220, 0x739 => 220,
0x73B => 220, 0x73C => 220, 0x73E => 220, 0x742 => 220, 0x744 => 220,
0x746 => 220, 0x748 => 220, 0x952 => 220, 0xF18 => 220, 0xF19 => 220,
0xF35 => 220, 0xF37 => 220, 0xFC6 => 220, 0x193B => 220, 0x20E8 => 220,
0x1D17B => 220, 0x1D17C => 220, 0x1D17D => 220, 0x1D17E => 220, 0x1D17F => 220,
0x1D180 => 220, 0x1D181 => 220, 0x1D182 => 220, 0x1D18A => 220, 0x1D18B => 220,
0x59A => 222, 0x5AD => 222, 0x1929 => 222, 0x302D => 222, 0x302E => 224,
0x302F => 224, 0x1D16D => 226, 0x5AE => 228, 0x18A9 => 228, 0x302B => 228,
0x300 => 230, 0x301 => 230, 0x302 => 230, 0x303 => 230, 0x304 => 230,
0x305 => 230, 0x306 => 230, 0x307 => 230, 0x308 => 230, 0x309 => 230,
0x30A => 230, 0x30B => 230, 0x30C => 230, 0x30D => 230, 0x30E => 230,
0x30F => 230, 0x310 => 230, 0x311 => 230, 0x312 => 230, 0x313 => 230,
0x314 => 230, 0x33D => 230, 0x33E => 230, 0x33F => 230, 0x340 => 230,
0x341 => 230, 0x342 => 230, 0x343 => 230, 0x344 => 230, 0x346 => 230,
0x34A => 230, 0x34B => 230, 0x34C => 230, 0x350 => 230, 0x351 => 230,
0x352 => 230, 0x357 => 230, 0x363 => 230, 0x364 => 230, 0x365 => 230,
0x366 => 230, 0x367 => 230, 0x368 => 230, 0x369 => 230, 0x36A => 230,
0x36B => 230, 0x36C => 230, 0x36D => 230, 0x36E => 230, 0x36F => 230,
0x483 => 230, 0x484 => 230, 0x485 => 230, 0x486 => 230, 0x592 => 230,
0x593 => 230, 0x594 => 230, 0x595 => 230, 0x597 => 230, 0x598 => 230,
0x599 => 230, 0x59C => 230, 0x59D => 230, 0x59E => 230, 0x59F => 230,
0x5A0 => 230, 0x5A1 => 230, 0x5A8 => 230, 0x5A9 => 230, 0x5AB => 230,
0x5AC => 230, 0x5AF => 230, 0x5C4 => 230, 0x610 => 230, 0x611 => 230,
0x612 => 230, 0x613 => 230, 0x614 => 230, 0x615 => 230, 0x653 => 230,
0x654 => 230, 0x657 => 230, 0x658 => 230, 0x6D6 => 230, 0x6D7 => 230,
0x6D8 => 230, 0x6D9 => 230, 0x6DA => 230, 0x6DB => 230, 0x6DC => 230,
0x6DF => 230, 0x6E0 => 230, 0x6E1 => 230, 0x6E2 => 230, 0x6E4 => 230,
0x6E7 => 230, 0x6E8 => 230, 0x6EB => 230, 0x6EC => 230, 0x730 => 230,
0x732 => 230, 0x733 => 230, 0x735 => 230, 0x736 => 230, 0x73A => 230,
0x73D => 230, 0x73F => 230, 0x740 => 230, 0x741 => 230, 0x743 => 230,
0x745 => 230, 0x747 => 230, 0x749 => 230, 0x74A => 230, 0x951 => 230,
0x953 => 230, 0x954 => 230, 0xF82 => 230, 0xF83 => 230, 0xF86 => 230,
0xF87 => 230, 0x170D => 230, 0x193A => 230, 0x20D0 => 230, 0x20D1 => 230,
0x20D4 => 230, 0x20D5 => 230, 0x20D6 => 230, 0x20D7 => 230, 0x20DB => 230,
0x20DC => 230, 0x20E1 => 230, 0x20E7 => 230, 0x20E9 => 230, 0xFE20 => 230,
0xFE21 => 230, 0xFE22 => 230, 0xFE23 => 230, 0x1D185 => 230, 0x1D186 => 230,
0x1D187 => 230, 0x1D189 => 230, 0x1D188 => 230, 0x1D1AA => 230, 0x1D1AB => 230,
0x1D1AC => 230, 0x1D1AD => 230, 0x315 => 232, 0x31A => 232, 0x302C => 232,
0x35F => 233, 0x362 => 233, 0x35D => 234, 0x35E => 234, 0x360 => 234,
0x361 => 234, 0x345 => 240
)
);
}
/trunk/shared/php_includes/ipv4_functions.inc.php
0,0 → 1,657
<?php
 
#
# IPv4 Functions for PHP
#
# (c) 2012-2019 Daniel Marschall, ViaThinkSoft [www.viathinksoft.de]
#
# Distribution, usage etc. pp. regulated by the current version of GPL.
#
#
# Version 2019-03-11
#
 
// TODO: oop, exceptions?
 
// Very small self-test:
/*
function ipv4_selftest() {
$iv_b = ipv4_complete('1.2');
$iv_m = 20;
$r = ipv4_cidr2range($iv_b, $iv_m);
echo "$iv_b/$iv_m => $r[0] - $r[1]\n";
 
$rev = ipv4_range2cidr($r[0], $r[1]);
$rev = implode("\n", $rev);
echo "$r[0] - $r[1] => $rev [";
$ok = $rev == "$iv_b/$iv_m";
echo $ok ? 'OK' : 'Mismatch';
echo "]\n";
echo "In-CIDR-Test: ";
echo ipv4_in_cidr("$iv_b/$iv_m", "$iv_b/$iv_m") ? 'OK' : 'Fail';
echo "\n";
}
ipv4_selftest();
*/
 
function ipv4_cidr2range($baseip_or_cidr, $subnet='') {
# (C) 2012 ViaThinkSoft
# Version 1.1
# This function converts an CIDR notation <baseip>/<subnet> into an IPv4 address block array($low_ip, $high_ip)
 
if (strpos($baseip_or_cidr, '/') !== false) {
$tmp = explode('/', $baseip_or_cidr, 2);
$baseip_or_cidr = $tmp[0];
$subnet = $tmp[1];
unset($tmp);
}
 
if (($subnet < 0) || ($subnet > 32)) return false;
 
$maxint32 = 0xFFFFFFFF;
$netmask = $maxint32 << (32-$subnet);
$netmask = $netmask & $maxint32; // crop to 32 bits
$wildcard = $maxint32 ^ $netmask; // ~$netmask;
 
$x = ipv4_incomplete_ip2long($baseip_or_cidr) & $netmask;
$nums = $wildcard;
$low = long2ip($x);
$high = long2ip($x + $nums);
 
return array($low, $high);
}
 
function ipv4_range2cidr($baseip, $topip, $shortening=false) {
# (C) 2012 ViaThinkSoft
# Version 1.0
# This function converts an IPv4 address block into valid CIDR blocks (There may be multiple blocks!)
 
$out = array();
if (ipv4_cmp($baseip, $topip) > 0) return false;
while (ipv4_incomplete_ip2long($baseip)-1 != ipv4_incomplete_ip2long($topip)) {
$i = -1;
do {
$i++;
$range = ipv4_cidr2range($baseip, $i);
$l = $range[0];
$t = $range[1];
} while ((ipv4_cmp($l, $baseip) != 0) || (ipv4_cmp($t, $topip) > 0));
 
# Shortening: Stroke ".0" at the end
if ($shortening) $baseip = ipv4_shortening($baseip);
 
$out[] = "$baseip/$i";
$baseip = ipv4_add($t, 1);
}
return $out;
}
 
function ipv4_shortening($ip) {
# (C) 2012 ViaThinkSoft
# Version 1.0
 
return preg_replace("|(\\.0{1,3}){0,3}\$|ismU", '', $ip);
}
 
function ipv4_add($baseip, $num) {
# (C) 2012 ViaThinkSoft
# Version 1.0
 
return long2ip(ipv4_incomplete_ip2long($baseip) + $num);
}
 
function ipv4_sub($baseip, $num) {
# (C) 2012 ViaThinkSoft
# Version 1.0
 
return long2ip(ipv4_incomplete_ip2long($baseip) - $num);
}
 
function ipv4_cmp($a, $b) {
# (C) 2012 ViaThinkSoft
# Version 1.0
 
$a = ipv4_incomplete_ip2long($a);
$b = ipv4_incomplete_ip2long($b);
 
if ($a == $b) return 0;
if ($a < $b) return -1;
if ($a > $b) return 1;
}
 
function ipv4_in_cidr($haystack, $needle) {
# (C) 2012 ViaThinkSoft
# Version 1.1
 
$x = explode('/', $haystack);
$ha = ipv4_cidr2range($x[0], $x[1]);
 
$x = explode('/', $needle);
if (!isset($x[1])) $x[1] = '32'; // single IP
$ne = ipv4_cidr2range($x[0], $x[1]);
 
$ha_low = ipv4_incomplete_ip2long($ha[0]);
$ha_hig = ipv4_incomplete_ip2long($ha[1]);
$ne_low = ipv4_incomplete_ip2long($ne[0]);
$ne_hig = ipv4_incomplete_ip2long($ne[1]);
 
# HA: low[ ]high
# NE: low[ ]high
 
return ($ne_low >= $ha_low) && ($ne_hig <= $ha_hig);
}
 
function ipv4_complete($short_form) {
# (C) 2012 ViaThinkSoft
# Version 1.0
 
$short_form = trim($short_form);
if ($short_form == '') return '0.0.0.0';
$c = substr_count($short_form, '.');
if ($c > 3) return false;
if ($c == 3) return $short_form;
$c = substr_count($short_form, '.');
$short_form .= str_repeat('.0', 3-$c);
return $short_form;
}
 
function ipv4_incomplete_ip2long($ip) {
# (C) 2012-2014 ViaThinkSoft
# Version 1.2
 
# return sprintf('%u', ip2long(ipv4_complete($ip)));
return sprintf('%u', ip2long(ipv4_normalize($ip)));
}
 
// IMPORTANT! $cmp_ary[x]=y MUST HAVE x<=y !
function ipv4_merge_address_blocks($data, $debug = false, $shortening = false) {
# (C) 2012-2013 ViaThinkSoft
# Version 2.2
 
if ($debug !== false) $STARTZEIT = time();
 
// 1. Convert IPs to numbers
 
$cmp_ary = array();
foreach ($data as $a => &$b) {
$a = ipv4_incomplete_ip2long($a);
$b = ipv4_incomplete_ip2long($b);
 
$cmp_ary[$a] = $b;
unset($a);
unset($b);
}
 
// 2. Sort array
 
ksort($cmp_ary);
 
// 3. Merge the blocks in an intelligent way (and remove redundant blocks)
 
# Merge overlapping blocks
# [ ]
# [ ] -> [ ]
 
# Merge neighbor blocks
# [ ][ ] -> [ ]
 
# Remove redundant blocks
# [ ] -> [ ]
# [ ]
 
$merge_count = 0;
$redundant_deleted_count = 0;
$round_count = 0;
do {
if ($debug !== false) {
$LAUFZEIT = time() - $STARTZEIT;
echo $debug."Merging... $round_count rounds; merged $merge_count blocks; deleted $redundant_deleted_count redundant blocks; time: $LAUFZEIT seconds\r";
}
 
$round_count++;
 
$clean = true;
 
foreach ($cmp_ary as $a => &$b) {
foreach ($cmp_ary as $x => &$y) {
// x in range [a+1..b+1] ?
if ($x<=$a) continue;
if ($x>$b+1) break;
 
// Merge
$clean = false;
if ($y>$b) {
$merge_count++;
$b = $y;
unset($cmp_ary[$x]);
} else {
$redundant_deleted_count++;
unset($cmp_ary[$x]);
}
}
}
} while (!$clean);
 
if ($debug !== false) {
$LAUFZEIT = time() - $STARTZEIT;
echo $debug."Merge completed. $round_count rounds; merged $merge_count blocks; deleted $redundant_deleted_count redundant blocks; time: $LAUFZEIT seconds\n";
}
 
// 4. Convert back to IPs
 
$out_ary = array();
foreach ($cmp_ary as $a => &$b) {
$a = long2ip($a);
$b = long2ip($b);
if ($shortening) {
$a = ipv4_shortening($a);
$b = ipv4_shortening($b);
}
$out_ary[$a] = $b;
}
 
return $out_ary;
}
 
function ipv4_merge_arrays($data_a, $data_b) {
# (C) 2012 ViaThinkSoft
# Version 1.2
 
$normalized_data_a = array();
foreach ($data_a as $from => &$to) {
$normalized_data_a[ipv4_normalize($from)] = ipv4_normalize($to);
}
 
$normalized_data_b = array();
foreach ($data_b as $from => &$to) {
$normalized_data_b[ipv4_normalize($from)] = ipv4_normalize($to);
}
 
$data = array();
 
foreach ($normalized_data_a as $from => &$to) {
if (isset($normalized_data_b[$from])) {
$data[$from] = ipv4_max($to, $normalized_data_b[$from]);
} else {
$data[$from] = $to;
}
}
 
foreach ($normalized_data_b as $from => &$to) {
if (!isset($normalized_data_a[$from])) {
$data[$from] = $to;
}
}
 
return $data;
}
 
function ipv4_valid($ip) {
# (C) 2012 ViaThinkSoft
# Version 1.0
 
# return ipv4_incomplete_ip2long($ip) !== false;
return ip2long($ip) !== false;
}
 
function ipv4_normalize($ip) {
# (C) 2012-2013 ViaThinkSoft
# Version 1.1.1
 
# Example:
# 100.010.001.000 -> 100.10.1.0
 
$ip = ipv4_complete($ip);
if (!$ip) return false;
 
# ip2long buggy: 001.0.0.0 wird nicht akzeptiert
## $cry = explode('.', $ip);
## $cry[0] = preg_replace('@^0+@', '', $cry[0]); if ($cry[0] == '') $cry[0] = '0';
## $cry[1] = preg_replace('@^0+@', '', $cry[1]); if ($cry[1] == '') $cry[1] = '0';
## $cry[2] = preg_replace('@^0+@', '', $cry[2]); if ($cry[2] == '') $cry[2] = '0';
## $cry[3] = preg_replace('@^0+@', '', $cry[3]); if ($cry[3] == '') $cry[3] = '0';
## $ip = implode('.', $cry);
## return $ip;
 
return preg_replace('@^0{0,2}([0-9]{1,3})\.0{0,2}([0-9]{1,3})\.0{0,2}([0-9]{1,3})\.0{0,2}([0-9]{1,3})$@', '\\1.\\2.\\3.\\4', $ip);
}
 
function ipv4_expand($ip) {
# (C) 2012 ViaThinkSoft
# Version 1.0
 
# Example:
# 100.10.1.0 -> 100.010.001.000
 
$ip = ipv4_complete($ip);
if (!$ip) return false;
 
$cry = explode('.', $ip);
$cry[0] = str_pad($cry[0], 3, '0', STR_PAD_LEFT);
$cry[1] = str_pad($cry[1], 3, '0', STR_PAD_LEFT);
$cry[2] = str_pad($cry[2], 3, '0', STR_PAD_LEFT);
$cry[3] = str_pad($cry[3], 3, '0', STR_PAD_LEFT);
return implode('.', $cry);
}
 
function ipv4_min($ip_a, $ip_b) {
# (C) 2012 ViaThinkSoft
# Version 1.0
 
if (ipv4_cmp($ip_a, $ip_b) == -1) {
return $ip_a;
} else {
return $ip_b;
}
}
 
function ipv4_max($ip_a, $ip_b) {
# (C) 2012 ViaThinkSoft
# Version 1.0
 
if (ipv4_cmp($ip_a, $ip_b) == 1) {
return $ip_a;
} else {
return $ip_b;
}
}
 
function ipv4_ipcount($data) {
# (C) 2012 ViaThinkSoft
# Version 1.0
 
$cnt = 0;
 
foreach ($data as $from => &$to) {
$cnt += ipv4_incomplete_ip2long($to) - ipv4_incomplete_ip2long($from);
}
 
return $cnt;
}
 
function ipv4_read_file($file) {
# (C) 2012 ViaThinkSoft
# Version 1.0
 
$data = array();
 
$lines = file($file);
foreach ($lines as &$line) {
$rng = ipv4_line2range($line);
$data[$rng[0]] = $rng[1];
}
 
return $data;
}
 
function ipv4_line2range($line) {
# (C) 2012 ViaThinkSoft
# Version 1.0
 
$line = trim($line);
 
if (strpos($line, '/') !== false) {
$rng = ipv4_cidr2range($line);
} else {
$rng = explode('-', $line);
$rng[0] = trim($rng[0]);
$rng[1] = trim($rng[1]);
$rng[0] = ipv4_normalize($rng[0]);
if (!isset($rng[1])) $rng[1] = $rng[0];
$rng[1] = ipv4_normalize($rng[1]);
}
 
return $rng;
}
 
# --- New 16,12,12
 
define('IPV4_BITS', 32);
 
function ipv4_distance($ipOrCIDR_Searchterm, $ipOrCIDR_Candidate) {
$ary = ipv4_cidr_split($ipOrCIDR_Searchterm);
$ip = $ary[0];
 
if (filter_var($ip, FILTER_VALIDATE_IP, FILTER_FLAG_IPV4) === false) {
return false;
}
 
$ary = ipv4_cidr_split($ipOrCIDR_Candidate);
$ip = $ary[0];
$cidr_bits = $ary[1];
if ($cidr_bits > IPV4_BITS) return false; // throw new Exception('CIDR bits > '.IPV4_BITS);
if (!is_numeric($cidr_bits)) return false;
 
if (filter_var($ip, FILTER_VALIDATE_IP, FILTER_FLAG_IPV4) === false) {
return false;
}
 
$x = ipv4_trackdown($ipOrCIDR_Searchterm);
 
if (ipv4_in_cidr($x[0], $ip.'/'.$cidr_bits)) {
$ary = ipv4_cidr_split($x[0]);
$cidr_bits2 = $ary[1];
if ($cidr_bits2 > IPV4_BITS) return false; // throw new Exception('CIDR bits > '.IPV4_BITS);
return $cidr_bits2-$cidr_bits;
}
 
$i = 0;
$max = false;
foreach ($x as &$y) {
if (ipv4_in_cidr($ip.'/'.$cidr_bits, $y)) {
$max = $i;
}
$i++;
}
 
return $max;
}
 
function ipv4_cidr_split($ipOrCIDR) {
$ary = explode('/', $ipOrCIDR, 2);
$cidr_bits = isset($ary[1]) ? $ary[1] : IPV4_BITS;
if ($cidr_bits > IPV4_BITS) return false; // throw new Exception('CIDR bits > '.IPV4_BITS);
if (!is_numeric($cidr_bits)) return false;
$ip = $ary[0];
return array($ip, $cidr_bits);
}
 
function ipv4_equals($ipOrCIDRA, $ipOrCIDRB) {
return ipv4_normalize_range($ipOrCIDRA) == ipv4_normalize_range($ipOrCIDRB);
}
 
function ipv4_cidr_min_ip($ipOrCIDR) {
$ary = ipv4_cidr_split($ipOrCIDR);
$ipOrCIDR = $ary[0];
$cidr_bits = $ary[1];
if ($cidr_bits > IPV4_BITS) return false; // throw new Exception('CIDR bits > '.IPV4_BITS);
if (!is_numeric($cidr_bits)) return false;
 
$m = ip2bin($ipOrCIDR);
$m = substr($m, 0, $cidr_bits) . str_repeat('0', IPV4_BITS-$cidr_bits);
 
return bin2ip($m);
}
 
function ipv4_cidr_max_ip($ipOrCIDR) {
$ary = ipv4_cidr_split($ipOrCIDR);
$ipOrCIDR = $ary[0];
$cidr_bits = $ary[1];
if ($cidr_bits > IPV4_BITS) return false; // throw new Exception('CIDR bits > '.IPV4_BITS);
if (!is_numeric($cidr_bits)) return false;
 
$m = ip2bin($ipOrCIDR);
$m = substr($m, 0, $cidr_bits) . str_repeat('1', IPV4_BITS-$cidr_bits);
 
return bin2ip($m);
}
 
function ipv4_normalize_range($ipOrCIDR) {
$ary = ipv4_cidr_split($ipOrCIDR);
$ipOrCIDR = $ary[0];
$cidr_bits = $ary[1];
if ($cidr_bits > IPV4_BITS) return false; // throw new Exception('CIDR bits > '.IPV4_BITS);
if (!is_numeric($cidr_bits)) return false;
 
$m = ip2bin($ipOrCIDR);
$m = substr($m, 0, $cidr_bits) . str_repeat('0', IPV4_BITS-$cidr_bits);
 
return bin2ip($m) . '/' . $cidr_bits;
}
 
function ipv4_trackdown($ipOrCIDR) {
$ary = ipv4_cidr_split($ipOrCIDR);
$ipOrCIDR = $ary[0];
$cidr_bits = $ary[1];
if ($cidr_bits > IPV4_BITS) return false; // throw new Exception('CIDR bits > '.IPV4_BITS);
if (!is_numeric($cidr_bits)) return false;
 
$out = array();
$m = ip2bin($ipOrCIDR);
 
for ($i=$cidr_bits; $i>=0; $i--) {
$m = substr($m, 0, $i) . str_repeat('0', IPV4_BITS-$i);
$out[] = bin2ip($m) . '/' . $i;
}
 
return $out;
}
 
# ---
 
if (!function_exists('ip2bin')) {
function ip2bin($ip) {
# Source: http://php.net/manual/en/function.ip2long.php#104163
# modified by VTS
 
if (filter_var($ip, FILTER_VALIDATE_IP, FILTER_FLAG_IPV4) !== false) {
return base_convert(ip2long($ip), 10, 2);
}
if (filter_var($ip, FILTER_VALIDATE_IP, FILTER_FLAG_IPV6) === false) {
return false;
}
if (($ip_n = inet_pton($ip)) === false) {
return false;
}
$bits = 15; // 16 x 8 bit = 128bit (ipv6)
$ipbin = ''; # added by vts to avoid warning
while ($bits >= 0) {
$bin = sprintf('%08b', (ord($ip_n[$bits])));
$ipbin = $bin.$ipbin;
$bits--;
}
return $ipbin;
}
}
 
if (!function_exists('bin2ip')) {
function bin2ip($bin) {
# Source: http://php.net/manual/en/function.ip2long.php#104163
# modified by VTS
 
if (strlen($bin) <= 32) { // 32bits (ipv4)
return long2ip(base_convert($bin, 2, 10));
}
if (strlen($bin) != 128) {
return false;
}
$pad = 128 - strlen($bin);
for ($i = 1; $i <= $pad; $i++) {
$bin = '0'.$bin;
}
$bits = 0;
$ipv6 = ''; # added by vts to avoid warning
while ($bits <= 7) {
$bin_part = substr($bin,($bits*16),16);
$ipv6 .= dechex(bindec($bin_part)) . ':';
$bits++;
}
return inet_ntop(inet_pton(substr($ipv6, 0, -1)));
}
}
 
# --- TEST
 
/*
assert(ipv4_normalize('100.010.001.000') == '100.10.1.0');
assert(ipv4_normalize('100.010.01.000') == '100.10.1.0');
assert(ipv4_normalize('100.10.001.000') == '100.10.1.0');
assert(ipv4_normalize('1.010.001.000') == '1.10.1.0');
assert(ipv4_normalize('1.10.001.000') == '1.10.1.0');
 
assert(ipv4_distance('192.168.0.0/16', '192.168.64.0/18') == -2);
assert(ipv4_distance('192.168.0.0/17', '192.168.64.0/18') == -1);
assert(ipv4_distance('192.168.64.0/18', '192.168.64.0/18') == 0);
assert(ipv4_distance('192.168.64.0/19', '192.168.64.0/18') == 1);
assert(ipv4_distance('192.168.64.0/20', '192.168.64.0/18') == 2);
 
assert(ipv4_distance('192.168.69.202/31', '192.168.69.200/31') === false);
assert(ipv4_distance('192.168.69.201/32', '192.168.69.200/32') === false);
assert(ipv4_distance('192.168.69.201', '192.168.69.200') === false);
*/
 
/*
$test = '192.168.69.123';
$x = ipv4_trackdown($test);
foreach ($x as &$cidr) {
$min = ipv4_cidr_min_ip($cidr);
$max = ipv4_cidr_max_ip($cidr);
echo "$cidr ($min - $max)\n";
}
*/
 
 
 
 
function ipv4_sort($ary) {
$f = array();
foreach ($ary as $c) {
$a = explode('/', $c);
$ip = $a[0];
$bits = isset($a[1]) ? $a[1] : 32;
 
$d = ip2bin($ip);
 
# ord('*') must be smaller than ord('0')
$d = substr($d, 0, $bits).str_repeat('*', 32-$bits);
 
$f[$d] = $c;
}
 
return $f;
}
 
function ipv4_make_tree($ary) {
$ary = ipv4_sort($ary);
 
if (count($ary) == 0) return array();
 
$sub_begin = '';
$sub_begin_ip = '';
foreach ($ary as $n => $d) {
$sub_begin = substr($n, 0, strpos($n, '*'));
$sub_begin_ip = $d;
unset($ary[$n]);
break;
}
 
$sub = array();
$nonsub = array();
foreach ($ary as $n => $d) {
if (substr($n, 0, strlen($sub_begin)) == $sub_begin) {
$sub[$n] = $d;
} else {
$nonsub[$n] = $d;
}
}
 
$out = array();
$out[$sub_begin_ip] = ipv4_make_tree($sub);
 
$a = ipv4_make_tree($nonsub);
 
$out = array_merge($out, $a);
 
return $out;
}
 
/trunk/shared/php_includes/ipv6_functions.inc.php
0,0 → 1,753
<?php
 
#
# IPv6 Functions for PHP
#
# (c) 2012-2014 Daniel Marschall, ViaThinkSoft [www.viathinksoft.de]
#
# Distribution, usage etc. pp. regulated by the current version of GPL.
#
#
# Version 2014-12-22
#
 
# This library needs gmp! aptitude install php5-gmp
 
// TODO: oop, exceptions?
// TODO: variant without gmp ?
// TODO: IPv6 auflösung 'ffff::192.168.69.1' -> 'ffff:0000:0000:0000:0000:0000:c0a8:4501' geht nicht!!!
 
define('GMP_ONE', gmp_init('1'));
 
// Very small self-test:
/*
function ipv6_selftest() {
$iv_b = 'c0ff:ee00::';
$iv_m = 32;
$r = ipv6_cidr2range($iv_b, $iv_m);
echo "$iv_b/$iv_m => $r[0] - $r[1]\n";
 
$rev = ipv6_range2cidr($r[0], $r[1]);
$rev = implode("\n", $rev);
echo "$r[0] - $r[1] => $rev [";
$ok = $rev == "$iv_b/$iv_m";
echo $ok ? 'OK' : 'Mismatch';
echo "]\n";
echo "In-CIDR-Test: ";
echo ipv6_in_cidr("$iv_b/$iv_m", "$iv_b/$iv_m") ? 'OK' : 'Fail';
echo "\n";
}
ipv6_selftest();
*/
 
$cache_ipv6_cidr2range = array();
function ipv6_cidr2range($baseip_or_cidr, $subnet='') {
# (C) 2012 ViaThinkSoft
# Version 1.1
# This function converts an CIDR notation <baseip>/<subnet> into an IPv6 address block array($low_ip, $high_ip)
 
global $cache_ipv6_cidr2range;
$vvv = $baseip_or_cidr.'|'.$subnet;
if (isset($cache_ipv6_cidr2range[$vvv])) return $cache_ipv6_cidr2range[$vvv];
 
if (strpos($baseip_or_cidr, '/') !== false) {
$tmp = explode('/', $baseip_or_cidr, 2);
$baseip_or_cidr = $tmp[0];
$subnet = $tmp[1];
unset($tmp);
}
 
if (($subnet < 0) || ($subnet > 128)) {
$cache_ipv6_cidr2range[$vvv] = false;
return false;
}
 
$maxint128 = gmp_sub(gmp_pow('2', 128), GMP_ONE); # TODO: GMP_TWO ?
$netmask = gmp_shiftl($maxint128, 128-$subnet);
$netmask = gmp_and($netmask, $maxint128); // crop to 128 bit
$wildcard = gmp_xor($maxint128, $netmask);
 
$x = gmp_and(ip2long6($baseip_or_cidr), $netmask);
$nums = $wildcard;
$low = long2ip6($x);
$high = long2ip6(gmp_add($x, $nums));
 
$out = array($low, $high);
$cache_ipv6_cidr2range[$vvv] = $out;
return $out;
}
 
$cache_ipv6_range2cidr = array();
function ipv6_range2cidr($baseip, $topip) {
# (C) 2012 ViaThinkSoft
# Version 1.0
# This function converts an IPv6 address block into valid CIDR blocks (There may be multiple blocks!)
 
global $cache_ipv6_range2cidr;
$vvv = $baseip.'|'.$topip;
if (isset($cache_ipv6_range2cidr[$vvv])) return $cache_ipv6_range2cidr[$vvv];
 
$out = array();
if (ipv6_cmp($baseip, $topip) > 0) {
$cache_ipv6_range2cidr[$vvv] = false;
return false;
}
while (gmp_cmp(gmp_sub(ip2long6($baseip), GMP_ONE), ip2long6($topip)) != 0) {
$i = -1;
do {
$i++;
$range = ipv6_cidr2range($baseip, $i);
$l = $range[0];
$t = $range[1];
} while ((ipv6_cmp($l, $baseip) != 0) || (ipv6_cmp($t, $topip) > 0));
 
$out[] = "$baseip/$i";
$baseip = ipv6_add($t, GMP_ONE);
}
 
$cache_ipv6_range2cidr[$vvv] = $out;
return $out;
}
 
function ipv6_add($baseip, $num) {
# (C) 2012 ViaThinkSoft
# Version 1.0
 
return long2ip6(gmp_add(ip2long6($baseip), $num));
}
 
function ipv6_sub($baseip, $num) {
# (C) 2012 ViaThinkSoft
# Version 1.0
 
return long2ip6(gmp_sub(ip2long6($baseip), $num));
}
 
function ipv6_cmp($a, $b) {
# (C) 2012 ViaThinkSoft
# Version 1.0
 
return gmp_cmp(ip2long6($a), ip2long6($b));
}
 
$cache_ipv6_in_cidr = array();
function ipv6_in_cidr($haystack, $needle) {
# (C) 2012 ViaThinkSoft
# Version 1.1
 
global $cache_ipv6_in_cidr;
$vvv = $haystack.'|'.$needle;
if (isset($cache_ipv6_in_cidr[$vvv])) return $cache_ipv6_in_cidr[$vvv];
 
$x = explode('/', $haystack);
$ha = ipv6_cidr2range($x[0], $x[1]);
 
$x = explode('/', $needle);
if (!isset($x[1])) $x[1] = 128; // single IP
$ne = ipv6_cidr2range($x[0], $x[1]);
 
$ha_low = ip2long6($ha[0]);
$ha_hig = ip2long6($ha[1]);
$ne_low = ip2long6($ne[0]);
$ne_hig = ip2long6($ne[1]);
 
# HA: low[ ]high
# NE: low[ ]high
 
$out = (gmp_cmp($ne_low, $ha_low) >= 0) && (gmp_cmp($ne_hig, $ha_hig) <= 0);
$cache_ipv6_in_cidr[$vvv] = $out;
return $out;
}
 
// IMPORTANT! $cmp_ary[x]=y MUST HAVE x<=y !
function ipv6_merge_address_blocks($data, $debug = false) {
# (C) 2012-2013 ViaThinkSoft
# Version 2.2
 
if ($debug !== false) $STARTZEIT = time();
 
// 1. Convert IPs to numbers
 
$cmp_ary = array();
foreach ($data as $a => &$b) {
$a = ip2long6($a);
$b = ip2long6($b);
 
$cmp_ary[gmp_strval($a)] = gmp_strval($b);
unset($a);
unset($b);
}
 
// 2. Sort array
 
ksort($cmp_ary);
 
// 3. Merge the blocks in an intelligent way (and remove redundant blocks)
 
# Merge overlapping blocks
# [ ]
# [ ] -> [ ]
 
# Merge neighbor blocks
# [ ][ ] -> [ ]
 
# Remove redundant blocks
# [ ] -> [ ]
# [ ]
 
$merge_count = 0;
$redundant_deleted_count = 0;
$round_count = 0;
do {
if ($debug !== false) {
$LAUFZEIT = time() - $STARTZEIT;
echo $debug."Merging... $round_count rounds; merged $merge_count blocks; deleted $redundant_deleted_count redundant blocks; time: $LAUFZEIT seconds\r";
}
 
$round_count++;
 
$clean = true;
 
foreach ($cmp_ary as $a => &$b) {
foreach ($cmp_ary as $x => &$y) {
// x in range [a+1..b+1] ?
if (gmp_cmp(gmp_init($x), gmp_init($a)) <= 0) continue;
if (gmp_cmp(gmp_init($x), gmp_add(gmp_init($b), GMP_ONE)) > 0) break;
 
// Merge
$clean = false;
if (gmp_cmp(gmp_init($y), gmp_init($b)) > 0) {
$merge_count++;
$b = $y;
unset($cmp_ary[$x]);
} else {
$redundant_deleted_count++;
unset($cmp_ary[$x]);
}
}
}
} while (!$clean);
 
if ($debug !== false) {
$LAUFZEIT = time() - $STARTZEIT;
echo $debug."Merge completed. $round_count rounds; merged $merge_count blocks; deleted $redundant_deleted_count redundant blocks; time: $LAUFZEIT seconds\n";
}
 
// 4. Convert back to IPs
 
$out_ary = array();
foreach ($cmp_ary as $a => &$b) {
$a = long2ip6(gmp_init($a));
$b = long2ip6(gmp_init($b));
$out_ary[$a] = $b;
}
 
return $out_ary;
}
 
function ipv6_merge_arrays($data_a, $data_b) {
# (C) 2012 ViaThinkSoft
# Version 1.2
 
$normalized_data_a = array();
foreach ($data_a as $from => &$to) {
$normalized_data_a[ipv6_normalize($from)] = ipv6_normalize($to);
}
 
$normalized_data_b = array();
foreach ($data_b as $from => &$to) {
$normalized_data_b[ipv6_normalize($from)] = ipv6_normalize($to);
}
 
$data = array();
 
foreach ($normalized_data_a as $from => &$to) {
if (isset($normalized_data_b[$from])) {
$data[$from] = ipv6_max($to, $normalized_data_b[$from]);
} else {
$data[$from] = $to;
}
}
 
foreach ($normalized_data_b as $from => &$to) {
if (!isset($normalized_data_a[$from])) {
$data[$from] = $to;
}
}
 
return $data;
}
 
function ipv6_valid($ip) {
# (C) 2012 ViaThinkSoft
# Version 1.0
 
return ip2long6($ip) !== false;
}
 
function ipv6_normalize($ip) {
# (C) 2012 ViaThinkSoft
# Version 1.0
 
# Example:
# 2001:0000:0000::1 -> 2001::1
 
$long = ip2long6($ip);
if ($long == -1 || $long === FALSE) return false;
return long2ip6($long);
}
 
function ipv6_expand($ip) {
# (C) 2012 ViaThinkSoft
# Version 1.0
 
# Example:
# 2001::1 -> 2001:0000:0000:0000:0000:0000:0000:0000
 
$long = ip2long6($ip);
if ($long == -1 || $long === FALSE) return false;
return long2ip6($long, false);
}
 
function ipv6_min($ip_a, $ip_b) {
# (C) 2012 ViaThinkSoft
# Version 1.0
 
if (ipv6_cmp($ip_a, $ip_b) == -1) {
return $ip_a;
} else {
return $ip_b;
}
}
 
function ipv6_max($ip_a, $ip_b) {
# (C) 2012 ViaThinkSoft
# Version 1.0
 
if (ipv6_cmp($ip_a, $ip_b) == 1) {
return $ip_a;
} else {
return $ip_b;
}
}
 
function ipv6_ipcount($data) {
# (C) 2012 ViaThinkSoft
# Version 1.0
 
$cnt = gmp_init('0');
 
foreach ($data as $from => &$to) {
$cnt = gmp_add($cnt, gmp_sub(ip2long6($to), ip2long6($from)));
}
 
return gmp_strval($cnt, 10);
}
 
function ipv6_read_file($file) {
# (C) 2012 ViaThinkSoft
# Version 1.0
 
$data = array();
 
$lines = file($file);
foreach ($lines as &$line) {
$rng = ipv6_line2range($line);
$data[$rng[0]] = $rng[1];
}
 
return $data;
}
 
function ipv6_line2range($line) {
# (C) 2012 ViaThinkSoft
# Version 1.0
 
$line = trim($line);
 
if (strpos($line, '/') !== false) {
$rng = ipv6_cidr2range($line);
} else {
$rng = explode('-', $line);
$rng[0] = trim($rng[0]);
$rng[1] = trim($rng[1]);
$rng[0] = ipv6_normalize($rng[0]);
if (!isset($rng[1])) $rng[1] = $rng[0];
$rng[1] = ipv6_normalize($rng[1]);
}
 
return $rng;
}
 
# ---
 
function gmp_shiftl($x, $n) { // shift left
// http://www.php.net/manual/en/ref.gmp.php#99788
return gmp_mul($x, gmp_pow('2', $n));
}
 
function gmp_shiftr($x, $n) { // shift right
// http://www.php.net/manual/en/ref.gmp.php#99788
return gmp_div($x, gmp_pow('2', $n));
}
 
$cache_ip2long6 = array();
function ip2long6($ipv6) {
// Source:
// http://www.netz-guru.de/2009/11/07/php-ipv6-ip2long-und-long2ip-funktionen/
// Slightly modified
 
global $cache_ip2long6;
if (isset($cache_ip2long6[$ipv6])) return $cache_ip2long6[$ipv6];
 
if ($ipv6 == '') $ipv6 = '::';
 
if (filter_var($ipv6, FILTER_VALIDATE_IP, FILTER_FLAG_IPV6) === false) {
$cache_ip2long6[$ipv6] = false;
return false;
}
 
$ip_n = @inet_pton($ipv6);
if ($ip_n === false) {
$cache_ip2long6[$ipv6] = false;
return false; // modified
}
$bytes = 16; // 16 bytes x 8 bit/byte = 128bit
$ipv6long = '';
 
while ($bytes > 0) {
$bin = sprintf('%08b',(ord($ip_n[$bytes-1])));
$ipv6long = $bin.$ipv6long;
$bytes--;
}
 
// $out = gmp_strval(gmp_init($ipv6long, 2), 10);
$out = gmp_init($ipv6long, 2);
$cache_ip2long6[$ipv6] = $out;
return $out;
}
 
$cache_long2ip6 = array();
function long2ip6($ipv6long, $compress=true) {
// Source:
// http://www.netz-guru.de/2009/11/07/php-ipv6-ip2long-und-long2ip-funktionen/
// Slightly modified
 
global $cache_long2ip6;
$vvv = ($compress ? 'T' : 'F').$ipv6long;
if (isset($cache_long2ip6[$vvv])) return $cache_long2ip6[$vvv];
 
// $bin = gmp_strval(gmp_init($ipv6long, 10), 2);
$bin = gmp_strval($ipv6long, 2);
if (strlen($bin) < 128) {
$pad = 128 - strlen($bin);
for ($i = 1; $i <= $pad; $i++) {
$bin = '0'.$bin;
}
}
 
$bytes = 0;
$ipv6 = '';
while ($bytes < 8) { // 16 bytes x 8 bit/byte = 128bit
$bin_part = substr($bin,($bytes*16),16);
$part = dechex(bindec($bin_part));
if (!$compress) {
$part = str_pad($part, 4, '0', STR_PAD_LEFT);
}
$ipv6 .= $part.':';
$bytes++;
}
 
if ($compress) {
$out = inet_ntop(inet_pton(substr($ipv6, 0, -1)));
} else {
$out = substr($ipv6, 0, strlen($ipv6)-1);
}
$cache_long2ip6[$vvv] = $out;
return $out;
}
 
# --- New 16,12,12
 
define('IPV6_BITS', 128);
 
$global_ipv6_distance = array();
function ipv6_distance($ipOrCIDR_Searchterm, $ipOrCIDR_Candidate) {
global $global_ipv6_distance;
$vvv = $ipOrCIDR_Searchterm.'|'.$ipOrCIDR_Candidate;
if (isset($global_ipv6_distance[$vvv])) return $global_ipv6_distance[$vvv];
 
$ary = ipv6_cidr_split($ipOrCIDR_Searchterm);
$ip = $ary[0];
 
if (filter_var($ip, FILTER_VALIDATE_IP, FILTER_FLAG_IPV6) === false) {
$global_ipv6_distance[$vvv] = false;
return false;
}
 
$ary = ipv6_cidr_split($ipOrCIDR_Candidate);
$ip = $ary[0];
$cidr_bits = $ary[1];
if ($cidr_bits > IPV6_BITS) {
$global_ipv6_distance[$vvv] = false;
return false; // throw new Exception('CIDR bits > '.IPV6_BITS);
}
if (!is_numeric($cidr_bits)) return false;
 
if (filter_var($ip, FILTER_VALIDATE_IP, FILTER_FLAG_IPV6) === false) {
$global_ipv6_distance[$vvv] = false;
return false;
}
 
$x = ipv6_trackdown($ipOrCIDR_Searchterm);
 
if (ipv6_in_cidr($x[0], $ip.'/'.$cidr_bits)) {
$ary = ipv6_cidr_split($x[0]);
$cidr_bits2 = $ary[1];
if ($cidr_bits2 > IPV6_BITS) {
$global_ipv6_distance[$vvv] = false;
return false; // throw new Exception('CIDR bits > '.IPV6_BITS);
}
$out = $cidr_bits2-$cidr_bits;
$global_ipv6_distance[$vvv] = $out;
return $out;
}
 
$i = 0;
$max = false;
foreach ($x as &$y) {
if (ipv6_in_cidr($ip.'/'.$cidr_bits, $y)) {
$max = $i;
}
$i++;
}
 
$global_ipv6_distance[$vvv] = $max;
return $max;
}
 
function ipv6_cidr_split($ipOrCIDR) {
$ary = explode('/', $ipOrCIDR, 2);
$cidr_bits = isset($ary[1]) ? $ary[1] : IPV6_BITS;
if ($cidr_bits > IPV6_BITS) return false; // throw new Exception('CIDR bits > '.IPV6_BITS);
if (!is_numeric($cidr_bits)) return false;
$ip = $ary[0];
return array($ip, $cidr_bits);
}
 
function ipv6_equals($ipOrCIDRA, $ipOrCIDRB) {
return ipv6_normalize_range($ipOrCIDRA) == ipv6_normalize_range($ipOrCIDRB);
}
 
function ipv6_cidr_min_ip($ipOrCIDR) {
$ary = ipv6_cidr_split($ipOrCIDR);
$ipOrCIDR = $ary[0];
$cidr_bits = $ary[1];
if ($cidr_bits > IPV6_BITS) return false; // throw new Exception('CIDR bits > '.IPV6_BITS);
if (!is_numeric($cidr_bits)) return false;
 
$m = ip2bin($ipOrCIDR);
$m = substr($m, 0, $cidr_bits) . str_repeat('0', IPV6_BITS-$cidr_bits);
 
return bin2ip($m);
}
 
function ipv6_cidr_max_ip($ipOrCIDR) {
$ary = ipv6_cidr_split($ipOrCIDR);
$ipOrCIDR = $ary[0];
$cidr_bits = $ary[1];
if ($cidr_bits > IPV6_BITS) return false; // throw new Exception('CIDR bits > '.IPV6_BITS);
if (!is_numeric($cidr_bits)) return false;
 
$m = ip2bin($ipOrCIDR);
$m = substr($m, 0, $cidr_bits) . str_repeat('1', IPV6_BITS-$cidr_bits);
 
return bin2ip($m);
}
 
function ipv6_normalize_range($ipOrCIDR) {
# 2001:1800::1/21
# --> 2001:1800::/21
 
# 2001:1af8:4100:a061:0001::1337
# --> 2001:1af8:4100:a061:1::1337/128
 
$ary = ipv6_cidr_split($ipOrCIDR);
$ipOrCIDR = $ary[0];
$cidr_bits = $ary[1];
if ($cidr_bits > IPV6_BITS) return false; // throw new Exception('CIDR bits > '.IPV6_BITS);
if (!is_numeric($cidr_bits)) return false;
 
$m = ip2bin($ipOrCIDR);
$m = substr($m, 0, $cidr_bits) . str_repeat('0', IPV6_BITS-$cidr_bits);
 
return bin2ip($m) . '/' . $cidr_bits;
}
 
function ipv6_trackdown($ipOrCIDR) {
$ary = ipv6_cidr_split($ipOrCIDR);
$ipOrCIDR = $ary[0];
$cidr_bits = $ary[1];
if ($cidr_bits > IPV6_BITS) return false; // throw new Exception('CIDR bits > '.IPV6_BITS);
if (!is_numeric($cidr_bits)) return false;
 
$out = array();
$m = ip2bin($ipOrCIDR);
for ($i=$cidr_bits; $i>=0; $i--) {
$m = substr($m, 0, $i) . str_repeat('0', IPV6_BITS-$i);
$out[] = bin2ip($m) . '/' . $i;
}
 
return $out;
}
 
function ipv6_sort($ary) {
$f = array();
foreach ($ary as $c) {
$a = explode('/', $c);
$ip = $a[0];
$bits = isset($a[1]) ? $a[1] : 128;
 
$d = ip2bin($ip);
 
# ord('*') must be smaller than ord('0')
$d = substr($d, 0, $bits).str_repeat('*', 128-$bits);
 
$f[$d] = $c;
}
 
return $f;
}
 
function ipv6_make_tree($ary) {
$ary = ipv6_sort($ary);
 
if (count($ary) == 0) return array();
 
$sub_begin = '';
$sub_begin_ip = '';
foreach ($ary as $n => $d) {
$sub_begin = substr($n, 0, strpos($n, '*'));
$sub_begin_ip = $d;
unset($ary[$n]);
break;
}
 
$sub = array();
$nonsub = array();
foreach ($ary as $n => $d) {
if (substr($n, 0, strlen($sub_begin)) == $sub_begin) {
$sub[$n] = $d;
} else {
$nonsub[$n] = $d;
}
}
 
$out = array();
$out[$sub_begin_ip] = ipv6_make_tree($sub);
 
$a = ipv6_make_tree($nonsub);
 
$out = array_merge($out, $a);
 
return $out;
}
 
# ---
 
if (!function_exists('ip2bin')) {
$cache_ip2bin = array();
function ip2bin($ip) {
# Source: http://php.net/manual/en/function.ip2long.php#104163
# modified by VTS
 
global $cache_ip2bin;
if (isset($cache_ip2bin[$ip])) return $cache_ip2bin[$ip];
 
if (filter_var($ip, FILTER_VALIDATE_IP, FILTER_FLAG_IPV4) !== false) {
$out = base_convert(ip2long($ip), 10, 2);
$cache_ip2bin[$ip] = $out;
return $out;
}
if (filter_var($ip, FILTER_VALIDATE_IP, FILTER_FLAG_IPV6) === false) {
$cache_ip2bin[$ip] = false;
return false;
}
if (($ip_n = inet_pton($ip)) === false) {
$cache_ip2bin[$ip] = false;
return false;
}
$bits = 15; // 16 x 8 bit = 128bit (ipv6)
$ipbin = ''; # added by vts to avoid warning
while ($bits >= 0) {
$bin = sprintf('%08b', (ord($ip_n[$bits])));
$ipbin = $bin.$ipbin;
$bits--;
}
 
$cache_ip2bin[$ip] = $ipbin;
return $ipbin;
}
}
 
if (!function_exists('bin2ip')) {
$cache_bin2ip = array();
function bin2ip($bin) {
# Source: http://php.net/manual/en/function.ip2long.php#104163
# modified by VTS
 
global $cache_bin2ip;
if (isset($cache_bin2ip[$bin])) return $cache_bin2ip[$bin];
 
if (strlen($bin) <= 32) { // 32bits (ipv4)
$out = long2ip(base_convert($bin, 2, 10));
$cache_bin2ip[$bin] = $out;
return $out;
}
if (strlen($bin) != 128) {
$cache_bin2ip[$bin] = false;
return false;
}
$pad = 128 - strlen($bin);
for ($i = 1; $i <= $pad; $i++) {
$bin = '0'.$bin;
}
$bits = 0;
$ipv6 = ''; # added by vts to avoid warning
while ($bits <= 7) {
$bin_part = substr($bin,($bits*16),16);
$ipv6 .= dechex(bindec($bin_part)) . ':';
$bits++;
}
 
$out = inet_ntop(inet_pton(substr($ipv6, 0, -1)));
$cache_bin2ip[$bin] = $out;
return $out;
}
}
 
# --- TEST
 
/*
assert(ipv6_normalize('2001:0000:0000::1') == '2001::1');
 
assert(ipv6_distance('2001:1ae0::/27', '2001:1af8::/29') == -2);
assert(ipv6_distance('2001:1af0::/28', '2001:1af8::/29') == -1);
assert(ipv6_distance('2001:1af8::/29', '2001:1af8::/29') == 0);
assert(ipv6_distance('2001:1af8::/30', '2001:1af8::/29') == 1);
assert(ipv6_distance('2001:1af8::/31', '2001:1af8::/29') == 2);
 
assert(ipv6_distance('2001:1af8:4100:a061:0001::1336/127', '2001:1af8:4100:a061:0001::1335/127') === false);
assert(ipv6_distance('2001:1af8:4100:a061:0001::1336/128', '2001:1af8:4100:a061:0001::1337/128') === false);
assert(ipv6_distance('2001:1af8:4100:a061:0001::1336', '2001:1af8:4100:a061:0001::1337') === false);
*/
 
/*
$test = '2001:1af8:4100:a061:0001::1337';
$x = ipv6_trackdown($test);
foreach ($x as &$cidr) {
$min = ipv6_cidr_min_ip($cidr);
$max = ipv6_cidr_max_ip($cidr);
echo "$cidr ($min - $max)\n";
}
*/