From 0f39924b088e44f62bc2575d3ccaed14442aa542 Mon Sep 17 00:00:00 2001 From: wfifi Date: Fri, 20 Oct 2017 18:09:07 +0800 Subject: [PATCH 01/18] add python3 support --- binding/python3/ip2Region.py | 240 ++++++++++++++++++++++++++++++++ binding/python3/testSearcher.py | 79 +++++++++++ 2 files changed, 319 insertions(+) create mode 100644 binding/python3/ip2Region.py create mode 100644 binding/python3/testSearcher.py diff --git a/binding/python3/ip2Region.py b/binding/python3/ip2Region.py new file mode 100644 index 0000000..f2e638b --- /dev/null +++ b/binding/python3/ip2Region.py @@ -0,0 +1,240 @@ +#-*- coding:utf-8 -*- +""" +" ip2region python seacher client module +" +" Author: koma +" Date : 2015-11-06 +""" +import struct, io, socket, sys + +class Ip2Region(object): + __headerSip = [] + __headerPtr = [] + __f = None + __sPtr = 0 + __indexLen = 0 + __dbBinStr = '' + + def __init__(self, dbfile): + self.initDatabase(dbfile) + + def memorySearch(self, ip): + """ + " memory search method + " param: ip + """ + if not ip.isdigit(): ip = self.ip2long(ip) + + if self.__dbBinStr == '': + self.__dbBinStr = self.__f.read() #read all the contents in file + self.__sPtr = self.getLong(self.__dbBinStr, 0) + endPtr = self.getLong(self.__dbBinStr, 4) + self.__indexLen = endPtr - self.__sPtr + + startPtr = self.__sPtr + indexLen = self.__indexLen + dbBinStr = self.__dbBinStr + + l, h, mixPtr = (0, int(indexLen/12), 0) + while l <= h: + m = int((l+h)/2) + ptr = startPtr + m*12 + + sip = self.getLong(dbBinStr, ptr) + eip = self.getLong(dbBinStr, ptr+4) + + if ip >= sip: + if ip > eip: + l = m + 1 + else: + mixPtr = self.getLong(dbBinStr, ptr+8) + break; + else: + h = m - 1 + + if mixPtr == 0: return "N2" + + return self.returnData(mixPtr) + + def binarySearch(self, ip): + """ + " binary search method + " param: ip + """ + if not ip.isdigit(): ip = self.ip2long(ip) + + if self.__indexLen < 1: + self.__f.seek(0) + b = self.__f.read(8) + self.__sPtr = self.getLong(b, 0) + endPtr = self.getLong(b, 4) + self.__indexLen = endPtr - self.__sPtr + + startPtr = self.__sPtr + indexLen = self.__indexLen + + self.__f.seek(startPtr) + b = self.__f.read(indexLen+12) + + l, h, mixPtr = (0, int(indexLen/12), 0) + while l <= h: + m = int((l+h)/2) + ptr = startPtr + m*12 + self.__f.seek(ptr) + + b = self.__f.read(12) + sip = self.getLong(b, 0) + eip = self.getLong(b, 4) + + if ip >= sip: + if ip > eip: + l = m + 1 + else: + mixPtr = self.getLong(b, 8) + break; + else: + h = m - 1 + + if mixPtr == 0: return "N2" + + return self.returnData(mixPtr) + + def btreeSearch(self, ip): + """ + " b-tree search method + " param: ip + """ + if not ip.isdigit(): ip = self.ip2long(ip) + + if len(self.__headerSip) < 1: + #pass the super block + self.__f.seek(8) + #read the header block + b = self.__f.read(4086) + #parse the header block + sip = None + ptr = None + for i in range(0, len(b)-1, 8): + sip = self.getLong(b, i) + ptr = self.getLong(b, i+4) + if ptr == 0: + break + self.__headerSip.append(sip) + self.__headerPtr.append(ptr) + + headerLen = len(self.__headerSip) - 1 + l, h, sptr, eptr = (0, headerLen, 0, 0) + while l <= h: + m = int((l+h)/2) + + if ip == self.__headerSip[m]: + if m > 0: + sptr = self.__headerPtr[m-1] + eptr = self.__headerPtr[m] + break; + else: + sptr = self.__headerPtr[m] + eptr = self.__headerPtr[m+1] + break; + + if ip > self.__headerSip[m]: + if m == headerLen: + sptr = self.__headerPtr[m-1] + eptr = self.__headerPtr[m] + break; + elif ip < self.__headerSip[m+1]: + sptr = self.__headerPtr[m] + eptr = self.__headerPtr[m+1] + break; + + l = m + 1 + else: + if m == 0: + sptr = self.__headerPtr[m] + eptr = self.__headerPtr[m+1] + break; + elif ip > self.__headerSip[m-1]: + sptr = self.__headerPtr[m-1] + eptr = self.__headerPtr[m] + break; + + h = m - 1 + + if sptr == 0: return "N1" + + indexLen = eptr - sptr + self.__f.seek(sptr) + b = self.__f.read(indexLen + 12) + + l, h, mixPtr = (0, int(indexLen/12), 0) + while l <= h: + m = int((l+h)/2) + offset = m * 12 + + if ip >= self.getLong(b, offset): + if ip > self.getLong(b, offset+4): + l = m + 1 + else: + mixPtr = self.getLong(b, offset+8) + break; + else: + h = m - 1 + + if mixPtr == 0: return "N2" + + return self.returnData(mixPtr) + + def initDatabase(self, dbfile): + """ + " initialize the database for search + " param: dbFile + """ + try: + self.__f = io.open(dbfile, "rb") + except IOError as e: + print ("[Error]: ", e) + sys.exit() + + def returnData(self, dsptr): + """ + " get ip data from db file by data start ptr + " param: dsptr + """ + dataPtr = dsptr & 0x00FFFFFF + dataLen = (dsptr >> 24) & 0xFF + + self.__f.seek(dataPtr) + data = self.__f.read(dataLen) + + return { + "city_id": self.getLong(data, 0), + "region" : data[4:] + } + + def ip2long(self, ip): + _ip = socket.inet_aton(ip) + + return struct.unpack("!L", _ip)[0] + + def isip(self, ip): + p = ip.split(".") + + if len(p) != 4 : return False + for pp in p: + if not pp.isdigit() : return False + if len(pp) > 3 : return False + if int(pp) > 255 : return False + + return True + + def getLong(self, b, offset): + if len( b[offset:offset+4] ) == 4: + return struct.unpack('I', b[offset:offset+4])[0] + + return 0 + + def close(self): + self.__headerSip = None + self.__headerPtr = None + self.__f.close() + self.__f = None diff --git a/binding/python3/testSearcher.py b/binding/python3/testSearcher.py new file mode 100644 index 0000000..fd36f10 --- /dev/null +++ b/binding/python3/testSearcher.py @@ -0,0 +1,79 @@ +#-*- coding:utf-8 -*- +""" +" ip2region python seacher client module +" +" Autho: koma +" Date : 2015-11-06 +""" +import struct, sys, os, time +from ip2Region import Ip2Region + +def testSearch(): + """ + " ip2region test function + """ + llen = len(sys.argv) + + if llen < 2: + print ("Usage: python testSearcher.py [ip2region db file] [alrogrithm]") + print ("Algorithm: binary or b-tree") + return 0 + + dbFile = sys.argv[1] + method = 1 + algorithm = "b-tree" + + if (not os.path.isfile(dbFile)) or (not os.path.exists(dbFile)): + print ("[Error]: Specified db file is not exists.") + return 0 + + if llen > 2: + algorithm = sys.argv[2] + if algorithm == "binary": + method = 2 + elif algorithm == "memory": + method = 3 + + print ("initializing %s..."% algorithm) + print ("+----------------------------------+") + print ("| ip2region test program |") + print ("| Author: chenxin619315@gmail.com. |") + print ("| Type 'quit' or 'exit' to exit program |") + print ("+----------------------------------+") + + searcher = Ip2Region(dbFile); + + while True: + line = input("ip2region>> ") + line = line.strip() + + if line == "": + print ("[Error]: Invalid ip address.") + continue + + if line == "quit" or line == "exit" : + print ("[Info]: Thanks for your use, Bye.") + break + + if not searcher.isip(line): + print ("[Error]: Invalid ip address.") + continue + + sTime = time.time() * 1000 + if method == 1: + data = searcher.btreeSearch(line) + elif method == 2: + data = searcher.binarySearch(line) + else: + data = searcher.memorySearch(line) + eTime = time.time() * 1000 + + if isinstance(data, dict): + print ("%s|%s in %f millseconds" % (data["city_id"], data["region"].decode('utf-8'), eTime-sTime)) + else: + print ("[Error]: ", data) + + searcher.close() + +if __name__ == "__main__": + testSearch() From b48dbe5248c3bad5ee70eed4e4233cabf2c5cc4a Mon Sep 17 00:00:00 2001 From: lionsoul Date: Sat, 21 Oct 2017 12:47:24 +0800 Subject: [PATCH 02/18] Bug fixed: Adjust the super header length to 8192 for all client implementation --- binding/c/ip2region.h | 4 +++- binding/c_mmap/ip2region.h | 2 +- binding/golang/ip2Region.go | 4 ++-- binding/java/src/org/lionsoul/ip2region/DbConfig.java | 4 ++-- binding/nodejs/ip2region.js | 2 +- binding/php/Ip2Region.class.php | 2 +- binding/python/ip2Region.py | 2 +- binding/python3/ip2Region.py | 2 +- 8 files changed, 12 insertions(+), 10 deletions(-) diff --git a/binding/c/ip2region.h b/binding/c/ip2region.h index 33820b3..5c807b3 100644 --- a/binding/c/ip2region.h +++ b/binding/c/ip2region.h @@ -43,7 +43,9 @@ typedef unsigned int uint_t; typedef unsigned long ulong_t; #define INDEX_BLOCK_LENGTH 12 -#define TOTAL_HEADER_LENGTH 4096 + +//thats 8 * 1024 +#define TOTAL_HEADER_LENGTH 8192 /* * ip2region properties struct diff --git a/binding/c_mmap/ip2region.h b/binding/c_mmap/ip2region.h index 8f81dbe..acd06ee 100644 --- a/binding/c_mmap/ip2region.h +++ b/binding/c_mmap/ip2region.h @@ -44,7 +44,7 @@ typedef unsigned int uint_t; typedef unsigned long ulong_t; #define INDEX_BLOCK_LENGTH 12 -#define TOTAL_HEADER_LENGTH 4096 +#define TOTAL_HEADER_LENGTH 8192 /* * ip2region properties struct diff --git a/binding/golang/ip2Region.go b/binding/golang/ip2Region.go index 3e06e72..adaf382 100644 --- a/binding/golang/ip2Region.go +++ b/binding/golang/ip2Region.go @@ -9,8 +9,8 @@ import ( ) const ( - INDEX_BLOCK_LENGTH = 12 - TOTAL_HEADER_LENGTH = 4096 + INDEX_BLOCK_LENGTH = 12 + TOTAL_HEADER_LENGTH = 8192 ) var err error diff --git a/binding/java/src/org/lionsoul/ip2region/DbConfig.java b/binding/java/src/org/lionsoul/ip2region/DbConfig.java index 1aa473f..365b870 100644 --- a/binding/java/src/org/lionsoul/ip2region/DbConfig.java +++ b/binding/java/src/org/lionsoul/ip2region/DbConfig.java @@ -32,12 +32,12 @@ public class DbConfig } this.totalHeaderSize = totalHeaderSize; - this.indexBlockSize = 4096; //4 * 1024 + this.indexBlockSize = 8192; //4 * 2048 } public DbConfig() throws DbMakerConfigException { - this(8192); + this(8 * 2048); } public int getTotalHeaderSize() diff --git a/binding/nodejs/ip2region.js b/binding/nodejs/ip2region.js index 3bfbac9..70bd0c7 100644 --- a/binding/nodejs/ip2region.js +++ b/binding/nodejs/ip2region.js @@ -18,7 +18,7 @@ var lastIndexPtr = 0; var superBlock = new Buffer(8); var indexBlockLength = 12; -var totalHeaderLength = 4096; +var totalHeaderLength = 8192; /** diff --git a/binding/php/Ip2Region.class.php b/binding/php/Ip2Region.class.php index 3c26879..f58a07d 100644 --- a/binding/php/Ip2Region.class.php +++ b/binding/php/Ip2Region.class.php @@ -7,7 +7,7 @@ */ defined('INDEX_BLOCK_LENGTH') or define('INDEX_BLOCK_LENGTH', 12); -defined('TOTAL_HEADER_LENGTH') or define('TOTAL_HEADER_LENGTH', 4096); +defined('TOTAL_HEADER_LENGTH') or define('TOTAL_HEADER_LENGTH', 8192); class Ip2Region { diff --git a/binding/python/ip2Region.py b/binding/python/ip2Region.py index 100566c..f30dc4b 100644 --- a/binding/python/ip2Region.py +++ b/binding/python/ip2Region.py @@ -110,7 +110,7 @@ class Ip2Region(object): #pass the super block self.__f.seek(8) #read the header block - b = self.__f.read(4086) + b = self.__f.read(8192) #parse the header block sip = None ptr = None diff --git a/binding/python3/ip2Region.py b/binding/python3/ip2Region.py index f2e638b..1636434 100644 --- a/binding/python3/ip2Region.py +++ b/binding/python3/ip2Region.py @@ -110,7 +110,7 @@ class Ip2Region(object): #pass the super block self.__f.seek(8) #read the header block - b = self.__f.read(4086) + b = self.__f.read(8192) #parse the header block sip = None ptr = None From b0aecd7046c943a2c5293aec4c107fdbf6b39eec Mon Sep 17 00:00:00 2001 From: lionsoul Date: Sat, 21 Oct 2017 13:05:14 +0800 Subject: [PATCH 03/18] active the upgrade notice --- README.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/README.md b/README.md index a1a9102..45ce7b7 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,9 @@ +### @Note 升级注意 + +``` +1.3版本因为调整了ip2regine.db的生成配置,bingding下各种语言的实现也需要做调整,已经提交了更改,请结果最新的ip2region.db和对应的binding一起使用,跨版本会有问题! +``` + ip2region - 最自由的ip地址查询库,ip到地区的映射库,提供Binary,B树和纯内存三种查询算法,妈妈再也不用担心我的ip地址定位。 **1. 99.9%准确率,定时更新:** From 1f0b07d42ba8cb0062745ac5ca1661d07a37d322 Mon Sep 17 00:00:00 2001 From: lionsoul Date: Sat, 21 Oct 2017 13:06:08 +0800 Subject: [PATCH 04/18] Update the notice --- README.md | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/README.md b/README.md index 45ce7b7..c2e8d5d 100644 --- a/README.md +++ b/README.md @@ -1,8 +1,6 @@ ### @Note 升级注意 -``` -1.3版本因为调整了ip2regine.db的生成配置,bingding下各种语言的实现也需要做调整,已经提交了更改,请结果最新的ip2region.db和对应的binding一起使用,跨版本会有问题! -``` +** 1.3版本因为调整了ip2regine.db的生成配置,bingding下各种语言的实现也需要做调整,已经提交了更改,请结果最新的ip2region.db和对应的binding一起使用,跨版本会有问题! ip2region - 最自由的ip地址查询库,ip到地区的映射库,提供Binary,B树和纯内存三种查询算法,妈妈再也不用担心我的ip地址定位。 From a49fae2ce8dc047fe8d731db7fe8795c638ed8a2 Mon Sep 17 00:00:00 2001 From: lionsoul Date: Sat, 21 Oct 2017 13:07:29 +0800 Subject: [PATCH 05/18] Update the README --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index c2e8d5d..d1fa949 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ ### @Note 升级注意 -** 1.3版本因为调整了ip2regine.db的生成配置,bingding下各种语言的实现也需要做调整,已经提交了更改,请结果最新的ip2region.db和对应的binding一起使用,跨版本会有问题! +1.3版本因为调整了ip2regine.db的生成配置,binding下各种语言的实现也需要做调整,已经提交了更改,请结合最新的ip2region.db和对应的binding一起使用,跨版本会有问题! ip2region - 最自由的ip地址查询库,ip到地区的映射库,提供Binary,B树和纯内存三种查询算法,妈妈再也不用担心我的ip地址定位。 From 29bacb0c8a7c065a3cfbe1721d7ec6d7009d700a Mon Sep 17 00:00:00 2001 From: lionsoul Date: Sat, 21 Oct 2017 13:08:26 +0800 Subject: [PATCH 06/18] Update the README --- README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index d1fa949..d9c7fdf 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,8 @@ ### @Note 升级注意 -1.3版本因为调整了ip2regine.db的生成配置,binding下各种语言的实现也需要做调整,已经提交了更改,请结合最新的ip2region.db和对应的binding一起使用,跨版本会有问题! +** 1.3版本因为调整了ip2regine.db的生成配置,binding下各种语言的实现也需要做调整,已经提交了更改,请结合最新的ip2region.db和对应的binding一起使用,跨版本会有问题!** +
ip2region - 最自由的ip地址查询库,ip到地区的映射库,提供Binary,B树和纯内存三种查询算法,妈妈再也不用担心我的ip地址定位。 **1. 99.9%准确率,定时更新:** From 4d0ce5500830bc3aa58948aafa0feeaf01cb6ee7 Mon Sep 17 00:00:00 2001 From: lionsoul Date: Sat, 21 Oct 2017 13:10:16 +0800 Subject: [PATCH 07/18] bold the upgrade notice --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index d9c7fdf..6b858b2 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ ### @Note 升级注意 -** 1.3版本因为调整了ip2regine.db的生成配置,binding下各种语言的实现也需要做调整,已经提交了更改,请结合最新的ip2region.db和对应的binding一起使用,跨版本会有问题!** +**1.3版本因为调整了ip2regine.db的生成配置,binding下各种语言的实现也需要做调整,已经提交了更改,请结合最新的ip2region.db和对应的binding一起使用,跨版本会有问题!**
ip2region - 最自由的ip地址查询库,ip到地区的映射库,提供Binary,B树和纯内存三种查询算法,妈妈再也不用担心我的ip地址定位。 From 5f29715ec28d2391cd1026ff85363bc3322416ba Mon Sep 17 00:00:00 2001 From: lionsoul Date: Mon, 23 Oct 2017 13:48:49 +0800 Subject: [PATCH 08/18] java binding maven upload & track the latest dbMaker.jar --- README.md | 37 +- binding/java/build.xml | 2 +- binding/java/pom.xml | 190 ++++++ .../org/lionsoul/ip2region/DataBlock.java | 0 .../org/lionsoul/ip2region/DbConfig.java | 0 .../ip2region/DbMakerConfigException.java | 0 .../org/lionsoul/ip2region/DbSearcher.java | 0 .../org/lionsoul/ip2region/HeaderBlock.java | 0 .../org/lionsoul/ip2region/IndexBlock.java | 0 .../java}/org/lionsoul/ip2region/Util.java | 0 .../lionsoul/ip2region/test/TestSearcher.java | 0 .../org/lionsoul/ip2region/test/TestUnit.java | 0 .../org/lionsoul/ip2region/test/TestUtil.java | 0 .../java/target/apidocs/allclasses-frame.html | 29 + .../target/apidocs/allclasses-noframe.html | 29 + .../java/target/apidocs/constant-values.html | 169 ++++++ .../java/target/apidocs/deprecated-list.html | 126 ++++ binding/java/target/apidocs/help-doc.html | 231 +++++++ binding/java/target/apidocs/index-all.html | 415 +++++++++++++ binding/java/target/apidocs/index.html | 76 +++ .../org/lionsoul/ip2region/DataBlock.html | 387 ++++++++++++ .../org/lionsoul/ip2region/DbConfig.html | 345 +++++++++++ .../ip2region/DbMakerConfigException.html | 293 +++++++++ .../org/lionsoul/ip2region/DbSearcher.html | 560 +++++++++++++++++ .../org/lionsoul/ip2region/HeaderBlock.html | 339 +++++++++++ .../org/lionsoul/ip2region/IndexBlock.html | 408 +++++++++++++ .../apidocs/org/lionsoul/ip2region/Util.html | 462 ++++++++++++++ .../ip2region/class-use/DataBlock.html | 216 +++++++ .../ip2region/class-use/DbConfig.html | 190 ++++++ .../class-use/DbMakerConfigException.html | 169 ++++++ .../ip2region/class-use/DbSearcher.html | 126 ++++ .../ip2region/class-use/HeaderBlock.html | 170 ++++++ .../ip2region/class-use/IndexBlock.html | 178 ++++++ .../lionsoul/ip2region/class-use/Util.html | 126 ++++ .../org/lionsoul/ip2region/package-frame.html | 30 + .../lionsoul/ip2region/package-summary.html | 193 ++++++ .../org/lionsoul/ip2region/package-tree.html | 153 +++++ .../org/lionsoul/ip2region/package-use.html | 181 ++++++ .../lionsoul/ip2region/test/TestSearcher.html | 278 +++++++++ .../org/lionsoul/ip2region/test/TestUnit.html | 278 +++++++++ .../org/lionsoul/ip2region/test/TestUtil.html | 278 +++++++++ .../test/class-use/TestSearcher.html | 126 ++++ .../ip2region/test/class-use/TestUnit.html | 126 ++++ .../ip2region/test/class-use/TestUtil.html | 126 ++++ .../ip2region/test/package-frame.html | 23 + .../ip2region/test/package-summary.html | 158 +++++ .../lionsoul/ip2region/test/package-tree.html | 141 +++++ .../lionsoul/ip2region/test/package-use.html | 126 ++++ .../java/target/apidocs/overview-frame.html | 23 + .../java/target/apidocs/overview-summary.html | 144 +++++ .../java/target/apidocs/overview-tree.html | 157 +++++ binding/java/target/apidocs/package-list | 2 + binding/java/target/apidocs/script.js | 30 + .../java/target/apidocs/serialized-form.html | 143 +++++ binding/java/target/apidocs/stylesheet.css | 574 ++++++++++++++++++ .../java/target/ip2region-1.4-javadoc.jar.asc | 11 + .../java/target/ip2region-1.4-sources.jar.asc | 11 + binding/java/target/ip2region-1.4.jar.asc | 11 + binding/java/target/ip2region-1.4.pom | 190 ++++++ binding/java/target/ip2region-1.4.pom.asc | 11 + .../javadoc-options-javadoc-resources.xml | 10 + .../javadoc-bundle-options/package-list | 209 +++++++ .../java/target/maven-archiver/pom.properties | 5 + .../compile/default-compile/createdFiles.lst | 10 + .../compile/default-compile/inputFiles.lst | 10 + dbMaker-1.2.2.jar | Bin 10541 -> 10543 bytes 66 files changed, 9024 insertions(+), 17 deletions(-) create mode 100644 binding/java/pom.xml rename binding/java/src/{ => main/java}/org/lionsoul/ip2region/DataBlock.java (100%) rename binding/java/src/{ => main/java}/org/lionsoul/ip2region/DbConfig.java (100%) rename binding/java/src/{ => main/java}/org/lionsoul/ip2region/DbMakerConfigException.java (100%) rename binding/java/src/{ => main/java}/org/lionsoul/ip2region/DbSearcher.java (100%) rename binding/java/src/{ => main/java}/org/lionsoul/ip2region/HeaderBlock.java (100%) rename binding/java/src/{ => main/java}/org/lionsoul/ip2region/IndexBlock.java (100%) rename binding/java/src/{ => main/java}/org/lionsoul/ip2region/Util.java (100%) rename binding/java/src/{ => main/java}/org/lionsoul/ip2region/test/TestSearcher.java (100%) rename binding/java/src/{ => main/java}/org/lionsoul/ip2region/test/TestUnit.java (100%) rename binding/java/src/{ => main/java}/org/lionsoul/ip2region/test/TestUtil.java (100%) create mode 100644 binding/java/target/apidocs/allclasses-frame.html create mode 100644 binding/java/target/apidocs/allclasses-noframe.html create mode 100644 binding/java/target/apidocs/constant-values.html create mode 100644 binding/java/target/apidocs/deprecated-list.html create mode 100644 binding/java/target/apidocs/help-doc.html create mode 100644 binding/java/target/apidocs/index-all.html create mode 100644 binding/java/target/apidocs/index.html create mode 100644 binding/java/target/apidocs/org/lionsoul/ip2region/DataBlock.html create mode 100644 binding/java/target/apidocs/org/lionsoul/ip2region/DbConfig.html create mode 100644 binding/java/target/apidocs/org/lionsoul/ip2region/DbMakerConfigException.html create mode 100644 binding/java/target/apidocs/org/lionsoul/ip2region/DbSearcher.html create mode 100644 binding/java/target/apidocs/org/lionsoul/ip2region/HeaderBlock.html create mode 100644 binding/java/target/apidocs/org/lionsoul/ip2region/IndexBlock.html create mode 100644 binding/java/target/apidocs/org/lionsoul/ip2region/Util.html create mode 100644 binding/java/target/apidocs/org/lionsoul/ip2region/class-use/DataBlock.html create mode 100644 binding/java/target/apidocs/org/lionsoul/ip2region/class-use/DbConfig.html create mode 100644 binding/java/target/apidocs/org/lionsoul/ip2region/class-use/DbMakerConfigException.html create mode 100644 binding/java/target/apidocs/org/lionsoul/ip2region/class-use/DbSearcher.html create mode 100644 binding/java/target/apidocs/org/lionsoul/ip2region/class-use/HeaderBlock.html create mode 100644 binding/java/target/apidocs/org/lionsoul/ip2region/class-use/IndexBlock.html create mode 100644 binding/java/target/apidocs/org/lionsoul/ip2region/class-use/Util.html create mode 100644 binding/java/target/apidocs/org/lionsoul/ip2region/package-frame.html create mode 100644 binding/java/target/apidocs/org/lionsoul/ip2region/package-summary.html create mode 100644 binding/java/target/apidocs/org/lionsoul/ip2region/package-tree.html create mode 100644 binding/java/target/apidocs/org/lionsoul/ip2region/package-use.html create mode 100644 binding/java/target/apidocs/org/lionsoul/ip2region/test/TestSearcher.html create mode 100644 binding/java/target/apidocs/org/lionsoul/ip2region/test/TestUnit.html create mode 100644 binding/java/target/apidocs/org/lionsoul/ip2region/test/TestUtil.html create mode 100644 binding/java/target/apidocs/org/lionsoul/ip2region/test/class-use/TestSearcher.html create mode 100644 binding/java/target/apidocs/org/lionsoul/ip2region/test/class-use/TestUnit.html create mode 100644 binding/java/target/apidocs/org/lionsoul/ip2region/test/class-use/TestUtil.html create mode 100644 binding/java/target/apidocs/org/lionsoul/ip2region/test/package-frame.html create mode 100644 binding/java/target/apidocs/org/lionsoul/ip2region/test/package-summary.html create mode 100644 binding/java/target/apidocs/org/lionsoul/ip2region/test/package-tree.html create mode 100644 binding/java/target/apidocs/org/lionsoul/ip2region/test/package-use.html create mode 100644 binding/java/target/apidocs/overview-frame.html create mode 100644 binding/java/target/apidocs/overview-summary.html create mode 100644 binding/java/target/apidocs/overview-tree.html create mode 100644 binding/java/target/apidocs/package-list create mode 100644 binding/java/target/apidocs/script.js create mode 100644 binding/java/target/apidocs/serialized-form.html create mode 100644 binding/java/target/apidocs/stylesheet.css create mode 100644 binding/java/target/ip2region-1.4-javadoc.jar.asc create mode 100644 binding/java/target/ip2region-1.4-sources.jar.asc create mode 100644 binding/java/target/ip2region-1.4.jar.asc create mode 100644 binding/java/target/ip2region-1.4.pom create mode 100644 binding/java/target/ip2region-1.4.pom.asc create mode 100644 binding/java/target/javadoc-bundle-options/javadoc-options-javadoc-resources.xml create mode 100644 binding/java/target/javadoc-bundle-options/package-list create mode 100644 binding/java/target/maven-archiver/pom.properties create mode 100644 binding/java/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst create mode 100644 binding/java/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst diff --git a/README.md b/README.md index 6b858b2..497dd88 100644 --- a/README.md +++ b/README.md @@ -1,27 +1,22 @@ -### @Note 升级注意 - -**1.3版本因为调整了ip2regine.db的生成配置,binding下各种语言的实现也需要做调整,已经提交了更改,请结合最新的ip2region.db和对应的binding一起使用,跨版本会有问题!** - -
ip2region - 最自由的ip地址查询库,ip到地区的映射库,提供Binary,B树和纯内存三种查询算法,妈妈再也不用担心我的ip地址定位。 -**1. 99.9%准确率,定时更新:** +### 1. 99.9%准确率,定时更新: 数据聚合了一些知名ip到地名查询提供商的数据,这些是他们官方的的准确率,经测试着实比纯真啥的准确多了。
每次聚合一下数据需要1-2天,会不定时更新。 -**2. 标准化的数据格式:** +### 2. 标准化的数据格式: 每条ip数据段都固定了格式:_城市Id|国家|区域|省份|城市|ISP_ 只有中国的数据精确到了城市,其他国家只能定位到国家,后前的选项全部是0,已经包含了全部你能查到的大大小小的国家。 (请忽略前面的城市Id,个人项目需求) -**3. 体积小:** +### 3. 体积小: 生成的数据库文件ip2region.db只有1.5M(1.2版本前是3.5M) -**4. 多查询客户端的支持,0.0x毫秒级别的查询** +### 4. 多查询客户端的支持,0.0x毫秒级别的查询 已经集成的客户端有:java, php, c, python,nodejs,php扩展(支持linux, php5, php7版本已支持),golang。 @@ -34,29 +29,37 @@ ip2region - 最自由的ip地址查询库,ip到地区的映射库,提供Bina 任何客户端b-tree都比binary算法快,当然Memory算法固然是最快的! -**5. 测试程序:** -java: +maven仓库地址: +``` +``` +### 5. 测试程序: +java: +```shell cd binding/java ant all java -jar ip2region-{version}.jar ./data/ip2region.db +``` php: - +```shell php binding/php/testSearcher ./data/ip2region.db +``` c: - +```shell cd binding/c/ gcc -g -O2 testSearcher.c ip2region.c ./a.out ../../data/ip2region.db +``` python: - +```shell python binding/python/testSearcher ./data/ip2region.db +``` 均会看到如下界面: - +```shell initializing B-tree ... +----------------------------------+ | ip2region test script | @@ -65,12 +68,14 @@ python: +----------------------------------+ p2region>> 101.105.35.57 2163|中国|华南|广东省|深圳市|鹏博士 in 0.02295 millseconds +``` 输入ip地址开始测试,第一次会稍微有点慢,在运行命令后面接入binary,memory来尝试其他算法,建议使用b-tree算法,速度和并发需求的可以使用memory算法。 具体集成请参考不同客户端的测试源码。 -**6. 如何生成ip2region.db文件** + +### 6. 如何生成ip2region.db文件 从ip2region 1.2.2版本开始里面提交了一个dbMaker-{version}.jar的可以执行jar文件,用它来完成这个工作: * 1, 确保你安装好了java环境(不玩Java的童鞋就自己谷歌找找拉,临时用一用,几分钟的事情) diff --git a/binding/java/build.xml b/binding/java/build.xml index 2ac3638..df11c05 100644 --- a/binding/java/build.xml +++ b/binding/java/build.xml @@ -9,7 +9,7 @@ - + diff --git a/binding/java/pom.xml b/binding/java/pom.xml new file mode 100644 index 0000000..a4a7651 --- /dev/null +++ b/binding/java/pom.xml @@ -0,0 +1,190 @@ + + + 4.0.0 + + org.lionsoul + ip2region + 1.4 + jar + + ip2region + http://gitee.com/lionsoul/ip2region/ + Open source internel address locator + + + + The Apache Software License, Version 2.0 + http://www.apache.org/licenses/LICENSE-2.0.txt + repo + + + + + git@gitee.com:lionsoul/ip2region.git + scm:git:git@gitee.com:lionsoul/ip2region.git + scm:git:git@gitee.com:lionsoul/ip2region.git + + + + + lionsoul + chenxin + chenxin619315@gmail.com + + + + + http://gitee.com/lionsoul/ip2region/issues + gitee issues + + + + UTF-8 + UTF-8 + + + + + junit + junit + 3.8.1 + test + + + + + + + org.apache.maven.plugins + maven-source-plugin + 2.1.2 + + + attach-sources + package + + jar + + + + + + + org.apache.maven.plugins + maven-javadoc-plugin + 2.9 + + + attach-javadocs + package + + jar + + + ${javadoc.opts} + + + + + false + + + + + org.apache.maven.plugins + maven-shade-plugin + 1.4 + + + package + + shade + + + + + org.lionsoul.ip2region.test.TestSearcher + + + + + + + + + + + + java8-doclint-disabled + + [1.8,) + + + -Xdoclint:none + + + + release + + + + + org.apache.maven.plugins + maven-source-plugin + 2.2.1 + + + package + + jar-no-fork + + + + + + + org.apache.maven.plugins + maven-javadoc-plugin + 2.9.1 + + + package + + jar + + + ${javadoc.opts} + + + + + + + org.apache.maven.plugins + maven-gpg-plugin + 1.5 + + + verify + + sign + + + + + + + + + oss-parent + https://oss.sonatype.org/content/repositories/snapshots/ + + + oss-parent + https://oss.sonatype.org/service/local/staging/deploy/maven2/ + + + + + + diff --git a/binding/java/src/org/lionsoul/ip2region/DataBlock.java b/binding/java/src/main/java/org/lionsoul/ip2region/DataBlock.java similarity index 100% rename from binding/java/src/org/lionsoul/ip2region/DataBlock.java rename to binding/java/src/main/java/org/lionsoul/ip2region/DataBlock.java diff --git a/binding/java/src/org/lionsoul/ip2region/DbConfig.java b/binding/java/src/main/java/org/lionsoul/ip2region/DbConfig.java similarity index 100% rename from binding/java/src/org/lionsoul/ip2region/DbConfig.java rename to binding/java/src/main/java/org/lionsoul/ip2region/DbConfig.java diff --git a/binding/java/src/org/lionsoul/ip2region/DbMakerConfigException.java b/binding/java/src/main/java/org/lionsoul/ip2region/DbMakerConfigException.java similarity index 100% rename from binding/java/src/org/lionsoul/ip2region/DbMakerConfigException.java rename to binding/java/src/main/java/org/lionsoul/ip2region/DbMakerConfigException.java diff --git a/binding/java/src/org/lionsoul/ip2region/DbSearcher.java b/binding/java/src/main/java/org/lionsoul/ip2region/DbSearcher.java similarity index 100% rename from binding/java/src/org/lionsoul/ip2region/DbSearcher.java rename to binding/java/src/main/java/org/lionsoul/ip2region/DbSearcher.java diff --git a/binding/java/src/org/lionsoul/ip2region/HeaderBlock.java b/binding/java/src/main/java/org/lionsoul/ip2region/HeaderBlock.java similarity index 100% rename from binding/java/src/org/lionsoul/ip2region/HeaderBlock.java rename to binding/java/src/main/java/org/lionsoul/ip2region/HeaderBlock.java diff --git a/binding/java/src/org/lionsoul/ip2region/IndexBlock.java b/binding/java/src/main/java/org/lionsoul/ip2region/IndexBlock.java similarity index 100% rename from binding/java/src/org/lionsoul/ip2region/IndexBlock.java rename to binding/java/src/main/java/org/lionsoul/ip2region/IndexBlock.java diff --git a/binding/java/src/org/lionsoul/ip2region/Util.java b/binding/java/src/main/java/org/lionsoul/ip2region/Util.java similarity index 100% rename from binding/java/src/org/lionsoul/ip2region/Util.java rename to binding/java/src/main/java/org/lionsoul/ip2region/Util.java diff --git a/binding/java/src/org/lionsoul/ip2region/test/TestSearcher.java b/binding/java/src/main/java/org/lionsoul/ip2region/test/TestSearcher.java similarity index 100% rename from binding/java/src/org/lionsoul/ip2region/test/TestSearcher.java rename to binding/java/src/main/java/org/lionsoul/ip2region/test/TestSearcher.java diff --git a/binding/java/src/org/lionsoul/ip2region/test/TestUnit.java b/binding/java/src/main/java/org/lionsoul/ip2region/test/TestUnit.java similarity index 100% rename from binding/java/src/org/lionsoul/ip2region/test/TestUnit.java rename to binding/java/src/main/java/org/lionsoul/ip2region/test/TestUnit.java diff --git a/binding/java/src/org/lionsoul/ip2region/test/TestUtil.java b/binding/java/src/main/java/org/lionsoul/ip2region/test/TestUtil.java similarity index 100% rename from binding/java/src/org/lionsoul/ip2region/test/TestUtil.java rename to binding/java/src/main/java/org/lionsoul/ip2region/test/TestUtil.java diff --git a/binding/java/target/apidocs/allclasses-frame.html b/binding/java/target/apidocs/allclasses-frame.html new file mode 100644 index 0000000..3966786 --- /dev/null +++ b/binding/java/target/apidocs/allclasses-frame.html @@ -0,0 +1,29 @@ + + + + + + +All Classes (ip2region 1.4 API) + + + + + +

All Classes

+ + + diff --git a/binding/java/target/apidocs/allclasses-noframe.html b/binding/java/target/apidocs/allclasses-noframe.html new file mode 100644 index 0000000..bf21842 --- /dev/null +++ b/binding/java/target/apidocs/allclasses-noframe.html @@ -0,0 +1,29 @@ + + + + + + +All Classes (ip2region 1.4 API) + + + + + +

All Classes

+ + + diff --git a/binding/java/target/apidocs/constant-values.html b/binding/java/target/apidocs/constant-values.html new file mode 100644 index 0000000..f8dd4f1 --- /dev/null +++ b/binding/java/target/apidocs/constant-values.html @@ -0,0 +1,169 @@ + + + + + + +Constant Field Values (ip2region 1.4 API) + + + + + + + + +
+ + + + + + + +
+ + +
+

Constant Field Values

+

Contents

+ +
+
+ + +

org.lionsoul.*

+ +
+ +
+ + + + + + + +
+ + +

Copyright © 2017. All rights reserved.

+ + diff --git a/binding/java/target/apidocs/deprecated-list.html b/binding/java/target/apidocs/deprecated-list.html new file mode 100644 index 0000000..224dcf4 --- /dev/null +++ b/binding/java/target/apidocs/deprecated-list.html @@ -0,0 +1,126 @@ + + + + + + +Deprecated List (ip2region 1.4 API) + + + + + + + + +
+ + + + + + + +
+ + +
+

Deprecated API

+

Contents

+
+ +
+ + + + + + + +
+ + +

Copyright © 2017. All rights reserved.

+ + diff --git a/binding/java/target/apidocs/help-doc.html b/binding/java/target/apidocs/help-doc.html new file mode 100644 index 0000000..7a43fa8 --- /dev/null +++ b/binding/java/target/apidocs/help-doc.html @@ -0,0 +1,231 @@ + + + + + + +API Help (ip2region 1.4 API) + + + + + + + + +
+ + + + + + + +
+ + +
+

How This API Document Is Organized

+
This API (Application Programming Interface) document has pages corresponding to the items in the navigation bar, described as follows.
+
+
+
    +
  • +

    Overview

    +

    The Overview page is the front page of this API document and provides a list of all packages with a summary for each. This page can also contain an overall description of the set of packages.

    +
  • +
  • +

    Package

    +

    Each package has a page that contains a list of its classes and interfaces, with a summary for each. This page can contain six categories:

    +
      +
    • Interfaces (italic)
    • +
    • Classes
    • +
    • Enums
    • +
    • Exceptions
    • +
    • Errors
    • +
    • Annotation Types
    • +
    +
  • +
  • +

    Class/Interface

    +

    Each class, interface, nested class and nested interface has its own separate page. Each of these pages has three sections consisting of a class/interface description, summary tables, and detailed member descriptions:

    +
      +
    • Class inheritance diagram
    • +
    • Direct Subclasses
    • +
    • All Known Subinterfaces
    • +
    • All Known Implementing Classes
    • +
    • Class/interface declaration
    • +
    • Class/interface description
    • +
    +
      +
    • Nested Class Summary
    • +
    • Field Summary
    • +
    • Constructor Summary
    • +
    • Method Summary
    • +
    +
      +
    • Field Detail
    • +
    • Constructor Detail
    • +
    • Method Detail
    • +
    +

    Each summary entry contains the first sentence from the detailed description for that item. The summary entries are alphabetical, while the detailed descriptions are in the order they appear in the source code. This preserves the logical groupings established by the programmer.

    +
  • +
  • +

    Annotation Type

    +

    Each annotation type has its own separate page with the following sections:

    +
      +
    • Annotation Type declaration
    • +
    • Annotation Type description
    • +
    • Required Element Summary
    • +
    • Optional Element Summary
    • +
    • Element Detail
    • +
    +
  • +
  • +

    Enum

    +

    Each enum has its own separate page with the following sections:

    +
      +
    • Enum declaration
    • +
    • Enum description
    • +
    • Enum Constant Summary
    • +
    • Enum Constant Detail
    • +
    +
  • +
  • +

    Use

    +

    Each documented package, class and interface has its own Use page. This page describes what packages, classes, methods, constructors and fields use any part of the given class or package. Given a class or interface A, its Use page includes subclasses of A, fields declared as A, methods that return A, and methods and constructors with parameters of type A. You can access this page by first going to the package, class or interface, then clicking on the "Use" link in the navigation bar.

    +
  • +
  • +

    Tree (Class Hierarchy)

    +

    There is a Class Hierarchy page for all packages, plus a hierarchy for each package. Each hierarchy page contains a list of classes and a list of interfaces. The classes are organized by inheritance structure starting with java.lang.Object. The interfaces do not inherit from java.lang.Object.

    +
      +
    • When viewing the Overview page, clicking on "Tree" displays the hierarchy for all packages.
    • +
    • When viewing a particular package, class or interface page, clicking "Tree" displays the hierarchy for only that package.
    • +
    +
  • +
  • +

    Deprecated API

    +

    The Deprecated API page lists all of the API that have been deprecated. A deprecated API is not recommended for use, generally due to improvements, and a replacement API is usually given. Deprecated APIs may be removed in future implementations.

    +
  • +
  • +

    Index

    +

    The Index contains an alphabetic list of all classes, interfaces, constructors, methods, and fields.

    +
  • +
  • +

    Prev/Next

    +

    These links take you to the next or previous class, interface, package, or related page.

    +
  • +
  • +

    Frames/No Frames

    +

    These links show and hide the HTML frames. All pages are available with or without frames.

    +
  • +
  • +

    All Classes

    +

    The All Classes link shows all classes and interfaces except non-static nested types.

    +
  • +
  • +

    Serialized Form

    +

    Each serializable or externalizable class has a description of its serialization fields and methods. This information is of interest to re-implementors, not to developers using the API. While there is no link in the navigation bar, you can get to this information by going to any serialized class and clicking "Serialized Form" in the "See also" section of the class description.

    +
  • +
  • +

    Constant Field Values

    +

    The Constant Field Values page lists the static final fields and their values.

    +
  • +
+This help file applies to API documentation generated using the standard doclet.
+ +
+ + + + + + + +
+ + +

Copyright © 2017. All rights reserved.

+ + diff --git a/binding/java/target/apidocs/index-all.html b/binding/java/target/apidocs/index-all.html new file mode 100644 index 0000000..cd311c4 --- /dev/null +++ b/binding/java/target/apidocs/index-all.html @@ -0,0 +1,415 @@ + + + + + + +Index (ip2region 1.4 API) + + + + + + + + +
+ + + + + + + +
+ + +
B C D G H I L M O S T U W  + + +

B

+
+
BINARY_ALGORITHM - Static variable in class org.lionsoul.ip2region.DbSearcher
+
 
+
binarySearch(long) - Method in class org.lionsoul.ip2region.DbSearcher
+
+
get the region with a int ip address with binary search algorithm
+
+
binarySearch(String) - Method in class org.lionsoul.ip2region.DbSearcher
+
+
get the region throught the ip address with binary search algorithm
+
+
BTREE_ALGORITHM - Static variable in class org.lionsoul.ip2region.DbSearcher
+
 
+
btreeSearch(long) - Method in class org.lionsoul.ip2region.DbSearcher
+
+
get the region with a int ip address with b-tree algorithm
+
+
btreeSearch(String) - Method in class org.lionsoul.ip2region.DbSearcher
+
+
get the region throught the ip address with b-tree search algorithm
+
+
+ + + +

C

+
+
close() - Method in class org.lionsoul.ip2region.DbSearcher
+
+
close the db
+
+
+ + + +

D

+
+
DataBlock - Class in org.lionsoul.ip2region
+
+
data block class
+
+
DataBlock(int, String, int) - Constructor for class org.lionsoul.ip2region.DataBlock
+
+
construct method
+
+
DataBlock(int, String) - Constructor for class org.lionsoul.ip2region.DataBlock
+
 
+
DbConfig - Class in org.lionsoul.ip2region
+
+
database configuration class
+
+
DbConfig(int) - Constructor for class org.lionsoul.ip2region.DbConfig
+
+
construct method
+
+
DbConfig() - Constructor for class org.lionsoul.ip2region.DbConfig
+
 
+
DbMakerConfigException - Exception in org.lionsoul.ip2region
+
+
configuration exception
+
+
DbMakerConfigException(String) - Constructor for exception org.lionsoul.ip2region.DbMakerConfigException
+
 
+
DbMakerConfigException(Throwable) - Constructor for exception org.lionsoul.ip2region.DbMakerConfigException
+
 
+
DbMakerConfigException(String, Throwable) - Constructor for exception org.lionsoul.ip2region.DbMakerConfigException
+
 
+
DbSearcher - Class in org.lionsoul.ip2region
+
+
ip db searcher class (Not thread safe)
+
+
DbSearcher(DbConfig, String) - Constructor for class org.lionsoul.ip2region.DbSearcher
+
+
construct class
+
+
+ + + +

G

+
+
getByIndexPtr(long) - Method in class org.lionsoul.ip2region.DbSearcher
+
+
get by index ptr
+
+
getBytes() - Method in class org.lionsoul.ip2region.HeaderBlock
+
+
get the bytes for db storage
+
+
getBytes() - Method in class org.lionsoul.ip2region.IndexBlock
+
+
get the bytes for storage
+
+
getCityId() - Method in class org.lionsoul.ip2region.DataBlock
+
 
+
getDataLen() - Method in class org.lionsoul.ip2region.IndexBlock
+
 
+
getDataPtr() - Method in class org.lionsoul.ip2region.DataBlock
+
 
+
getDataPtr() - Method in class org.lionsoul.ip2region.IndexBlock
+
 
+
getDbConfig() - Method in class org.lionsoul.ip2region.DbSearcher
+
+
get the db config
+
+
getEndIp() - Method in class org.lionsoul.ip2region.IndexBlock
+
 
+
getIndexBlockLength() - Static method in class org.lionsoul.ip2region.IndexBlock
+
 
+
getIndexBlockSize() - Method in class org.lionsoul.ip2region.DbConfig
+
 
+
getIndexPtr() - Method in class org.lionsoul.ip2region.HeaderBlock
+
 
+
getIndexStartIp() - Method in class org.lionsoul.ip2region.HeaderBlock
+
 
+
getInt1(byte[], int) - Static method in class org.lionsoul.ip2region.Util
+
 
+
getInt2(byte[], int) - Static method in class org.lionsoul.ip2region.Util
+
 
+
getInt3(byte[], int) - Static method in class org.lionsoul.ip2region.Util
+
+
get a int from a byte array start from the specifield offset
+
+
getIntLong(byte[], int) - Static method in class org.lionsoul.ip2region.Util
+
+
get a int from a byte array start from the specifiled offset
+
+
getRegion() - Method in class org.lionsoul.ip2region.DataBlock
+
 
+
getStartIp() - Method in class org.lionsoul.ip2region.IndexBlock
+
 
+
getTotalHeaderSize() - Method in class org.lionsoul.ip2region.DbConfig
+
 
+
+ + + +

H

+
+
HeaderBlock - Class in org.lionsoul.ip2region
+
+
header block class
+
+
HeaderBlock(long, int) - Constructor for class org.lionsoul.ip2region.HeaderBlock
+
 
+
+ + + +

I

+
+
IndexBlock - Class in org.lionsoul.ip2region
+
+
item index class
+
+
IndexBlock(long, long, int, int) - Constructor for class org.lionsoul.ip2region.IndexBlock
+
 
+
ip2long(String) - Static method in class org.lionsoul.ip2region.Util
+
+
string ip to long ip
+
+
isIpAddress(String) - Static method in class org.lionsoul.ip2region.Util
+
+
check the validate of the specifeld ip address
+
+
+ + + +

L

+
+
long2ip(long) - Static method in class org.lionsoul.ip2region.Util
+
+
int to ip string
+
+
+ + + +

M

+
+
main(String[]) - Static method in class org.lionsoul.ip2region.test.TestSearcher
+
 
+
main(String[]) - Static method in class org.lionsoul.ip2region.test.TestUnit
+
 
+
main(String[]) - Static method in class org.lionsoul.ip2region.test.TestUtil
+
 
+
MEMORY_ALGORITYM - Static variable in class org.lionsoul.ip2region.DbSearcher
+
 
+
memorySearch(long) - Method in class org.lionsoul.ip2region.DbSearcher
+
+
get the region with a int ip address with memory binary search algorithm
+
+
memorySearch(String) - Method in class org.lionsoul.ip2region.DbSearcher
+
+
get the region throught the ip address with memory binary search algorithm
+
+
+ + + +

O

+
+
org.lionsoul.ip2region - package org.lionsoul.ip2region
+
 
+
org.lionsoul.ip2region.test - package org.lionsoul.ip2region.test
+
 
+
+ + + +

S

+
+
setCityId(int) - Method in class org.lionsoul.ip2region.DataBlock
+
 
+
setDataLen(int) - Method in class org.lionsoul.ip2region.IndexBlock
+
 
+
setDataPtr(int) - Method in class org.lionsoul.ip2region.DataBlock
+
 
+
setDataPtr(int) - Method in class org.lionsoul.ip2region.IndexBlock
+
 
+
setEndIp(long) - Method in class org.lionsoul.ip2region.IndexBlock
+
 
+
setIndexBlockSize(int) - Method in class org.lionsoul.ip2region.DbConfig
+
 
+
setIndexPtr(int) - Method in class org.lionsoul.ip2region.HeaderBlock
+
 
+
setIndexStartIp(long) - Method in class org.lionsoul.ip2region.HeaderBlock
+
 
+
setRegion(String) - Method in class org.lionsoul.ip2region.DataBlock
+
 
+
setStartIp(long) - Method in class org.lionsoul.ip2region.IndexBlock
+
 
+
setTotalHeaderSize(int) - Method in class org.lionsoul.ip2region.DbConfig
+
 
+
+ + + +

T

+
+
TestSearcher - Class in org.lionsoul.ip2region.test
+
+
project test script
+
+
TestSearcher() - Constructor for class org.lionsoul.ip2region.test.TestSearcher
+
 
+
TestUnit - Class in org.lionsoul.ip2region.test
+
+
data check class
+
+
TestUnit() - Constructor for class org.lionsoul.ip2region.test.TestUnit
+
 
+
TestUtil - Class in org.lionsoul.ip2region.test
+
+
project test script
+
+
TestUtil() - Constructor for class org.lionsoul.ip2region.test.TestUtil
+
 
+
toString() - Method in class org.lionsoul.ip2region.DataBlock
+
 
+
+ + + +

U

+
+
Util - Class in org.lionsoul.ip2region
+
+
util class
+
+
Util() - Constructor for class org.lionsoul.ip2region.Util
+
 
+
+ + + +

W

+
+
write(byte[], int, long, int) - Static method in class org.lionsoul.ip2region.Util
+
+
write specfield bytes to a byte array start from offset
+
+
writeIntLong(byte[], int, long) - Static method in class org.lionsoul.ip2region.Util
+
+
write a int to a byte array
+
+
+B C D G H I L M O S T U W 
+ +
+ + + + + + + +
+ + +

Copyright © 2017. All rights reserved.

+ + diff --git a/binding/java/target/apidocs/index.html b/binding/java/target/apidocs/index.html new file mode 100644 index 0000000..38319cc --- /dev/null +++ b/binding/java/target/apidocs/index.html @@ -0,0 +1,76 @@ + + + + + + +ip2region 1.4 API + + + + + + + + + +<noscript> +<div>JavaScript is disabled on your browser.</div> +</noscript> +<h2>Frame Alert</h2> +<p>This document is designed to be viewed using the frames feature. If you see this message, you are using a non-frame-capable web client. Link to <a href="overview-summary.html">Non-frame version</a>.</p> + + + diff --git a/binding/java/target/apidocs/org/lionsoul/ip2region/DataBlock.html b/binding/java/target/apidocs/org/lionsoul/ip2region/DataBlock.html new file mode 100644 index 0000000..c181f67 --- /dev/null +++ b/binding/java/target/apidocs/org/lionsoul/ip2region/DataBlock.html @@ -0,0 +1,387 @@ + + + + + + +DataBlock (ip2region 1.4 API) + + + + + + + + + + + + +
+
org.lionsoul.ip2region
+

Class DataBlock

+
+
+ +
+
    +
  • +
    +
    +
    public class DataBlock
    +extends Object
    +
    data block class
    +
    +
    Author:
    +
    chenxin
    +
    +
  • +
+
+
+ +
+
+
    +
  • + +
      +
    • + + +

      Constructor Detail

      + + + +
        +
      • +

        DataBlock

        +
        public DataBlock(int city_id,
        +                 String region,
        +                 int dataPtr)
        +
        construct method
        +
        +
        Parameters:
        +
        city_id -
        +
        region - region string
        +
        ptr - data ptr
        +
        +
      • +
      + + + +
        +
      • +

        DataBlock

        +
        public DataBlock(int city_id,
        +                 String region)
        +
      • +
      +
    • +
    + +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        getCityId

        +
        public int getCityId()
        +
      • +
      + + + +
        +
      • +

        setCityId

        +
        public DataBlock setCityId(int city_id)
        +
      • +
      + + + +
        +
      • +

        getRegion

        +
        public String getRegion()
        +
      • +
      + + + + + + + +
        +
      • +

        getDataPtr

        +
        public int getDataPtr()
        +
      • +
      + + + +
        +
      • +

        setDataPtr

        +
        public DataBlock setDataPtr(int dataPtr)
        +
      • +
      + + + + +
    • +
    +
  • +
+
+
+ + + + + +

Copyright © 2017. All rights reserved.

+ + diff --git a/binding/java/target/apidocs/org/lionsoul/ip2region/DbConfig.html b/binding/java/target/apidocs/org/lionsoul/ip2region/DbConfig.html new file mode 100644 index 0000000..9960ef1 --- /dev/null +++ b/binding/java/target/apidocs/org/lionsoul/ip2region/DbConfig.html @@ -0,0 +1,345 @@ + + + + + + +DbConfig (ip2region 1.4 API) + + + + + + + + + + + + +
+
org.lionsoul.ip2region
+

Class DbConfig

+
+
+ +
+
    +
  • +
    +
    +
    public class DbConfig
    +extends Object
    +
    database configuration class
    +
    +
    Author:
    +
    chenxin
    +
    +
  • +
+
+
+ +
+
+
    +
  • + + + +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        getTotalHeaderSize

        +
        public int getTotalHeaderSize()
        +
      • +
      + + + +
        +
      • +

        setTotalHeaderSize

        +
        public DbConfig setTotalHeaderSize(int totalHeaderSize)
        +
      • +
      + + + +
        +
      • +

        getIndexBlockSize

        +
        public int getIndexBlockSize()
        +
      • +
      + + + +
        +
      • +

        setIndexBlockSize

        +
        public DbConfig setIndexBlockSize(int dataBlockSize)
        +
      • +
      +
    • +
    +
  • +
+
+
+ + + + + +

Copyright © 2017. All rights reserved.

+ + diff --git a/binding/java/target/apidocs/org/lionsoul/ip2region/DbMakerConfigException.html b/binding/java/target/apidocs/org/lionsoul/ip2region/DbMakerConfigException.html new file mode 100644 index 0000000..aff85db --- /dev/null +++ b/binding/java/target/apidocs/org/lionsoul/ip2region/DbMakerConfigException.html @@ -0,0 +1,293 @@ + + + + + + +DbMakerConfigException (ip2region 1.4 API) + + + + + + + + + + + + +
+
org.lionsoul.ip2region
+

Class DbMakerConfigException

+
+
+ +
+
    +
  • +
    +
    All Implemented Interfaces:
    +
    Serializable
    +
    +
    +
    +
    public class DbMakerConfigException
    +extends Exception
    +
    configuration exception
    +
    +
    Author:
    +
    chenxin
    +
    See Also:
    +
    Serialized Form
    +
    +
  • +
+
+
+ +
+
+
    +
  • + +
      +
    • + + +

      Constructor Detail

      + + + +
        +
      • +

        DbMakerConfigException

        +
        public DbMakerConfigException(String info)
        +
      • +
      + + + +
        +
      • +

        DbMakerConfigException

        +
        public DbMakerConfigException(Throwable res)
        +
      • +
      + + + +
        +
      • +

        DbMakerConfigException

        +
        public DbMakerConfigException(String info,
        +                              Throwable res)
        +
      • +
      +
    • +
    +
  • +
+
+
+ + + + + +

Copyright © 2017. All rights reserved.

+ + diff --git a/binding/java/target/apidocs/org/lionsoul/ip2region/DbSearcher.html b/binding/java/target/apidocs/org/lionsoul/ip2region/DbSearcher.html new file mode 100644 index 0000000..734252a --- /dev/null +++ b/binding/java/target/apidocs/org/lionsoul/ip2region/DbSearcher.html @@ -0,0 +1,560 @@ + + + + + + +DbSearcher (ip2region 1.4 API) + + + + + + + + + + + + +
+
org.lionsoul.ip2region
+

Class DbSearcher

+
+
+ +
+
    +
  • +
    +
    +
    public class DbSearcher
    +extends Object
    +
    ip db searcher class (Not thread safe)
    +
    +
    Author:
    +
    chenxin
    +
    +
  • +
+
+
+ +
+
+
    +
  • + + + + + +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        memorySearch

        +
        public DataBlock memorySearch(long ip)
        +                       throws IOException
        +
        get the region with a int ip address with memory binary search algorithm
        +
        +
        Parameters:
        +
        ip -
        +
        Throws:
        +
        IOException
        +
        +
      • +
      + + + +
        +
      • +

        memorySearch

        +
        public DataBlock memorySearch(String ip)
        +                       throws IOException
        +
        get the region throught the ip address with memory binary search algorithm
        +
        +
        Parameters:
        +
        ip -
        +
        Returns:
        +
        DataBlock
        +
        Throws:
        +
        IOException
        +
        +
      • +
      + + + +
        +
      • +

        getByIndexPtr

        +
        public DataBlock getByIndexPtr(long ptr)
        +                        throws IOException
        +
        get by index ptr
        +
        +
        Parameters:
        +
        indexPtr -
        +
        Throws:
        +
        IOException
        +
        +
      • +
      + + + +
        +
      • +

        btreeSearch

        +
        public DataBlock btreeSearch(long ip)
        +                      throws IOException
        +
        get the region with a int ip address with b-tree algorithm
        +
        +
        Parameters:
        +
        ip -
        +
        Throws:
        +
        IOException
        +
        +
      • +
      + + + +
        +
      • +

        btreeSearch

        +
        public DataBlock btreeSearch(String ip)
        +                      throws IOException
        +
        get the region throught the ip address with b-tree search algorithm
        +
        +
        Parameters:
        +
        ip -
        +
        Returns:
        +
        DataBlock
        +
        Throws:
        +
        IOException
        +
        +
      • +
      + + + +
        +
      • +

        binarySearch

        +
        public DataBlock binarySearch(long ip)
        +                       throws IOException
        +
        get the region with a int ip address with binary search algorithm
        +
        +
        Parameters:
        +
        ip -
        +
        Throws:
        +
        IOException
        +
        +
      • +
      + + + +
        +
      • +

        binarySearch

        +
        public DataBlock binarySearch(String ip)
        +                       throws IOException
        +
        get the region throught the ip address with binary search algorithm
        +
        +
        Parameters:
        +
        ip -
        +
        Returns:
        +
        DataBlock
        +
        Throws:
        +
        IOException
        +
        +
      • +
      + + + +
        +
      • +

        getDbConfig

        +
        public DbConfig getDbConfig()
        +
        get the db config
        +
        +
        Returns:
        +
        DbConfig
        +
        +
      • +
      + + + + +
    • +
    +
  • +
+
+
+ + + + + +

Copyright © 2017. All rights reserved.

+ + diff --git a/binding/java/target/apidocs/org/lionsoul/ip2region/HeaderBlock.html b/binding/java/target/apidocs/org/lionsoul/ip2region/HeaderBlock.html new file mode 100644 index 0000000..457f058 --- /dev/null +++ b/binding/java/target/apidocs/org/lionsoul/ip2region/HeaderBlock.html @@ -0,0 +1,339 @@ + + + + + + +HeaderBlock (ip2region 1.4 API) + + + + + + + + + + + + +
+
org.lionsoul.ip2region
+

Class HeaderBlock

+
+
+ +
+
    +
  • +
    +
    +
    public class HeaderBlock
    +extends Object
    +
    header block class
    +
    +
    Author:
    +
    chenxin
    +
    +
  • +
+
+
+ +
+
+
    +
  • + +
      +
    • + + +

      Constructor Detail

      + + + +
        +
      • +

        HeaderBlock

        +
        public HeaderBlock(long indexStartIp,
        +                   int indexPtr)
        +
      • +
      +
    • +
    + +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        getIndexStartIp

        +
        public long getIndexStartIp()
        +
      • +
      + + + +
        +
      • +

        setIndexStartIp

        +
        public HeaderBlock setIndexStartIp(long indexStartIp)
        +
      • +
      + + + +
        +
      • +

        getIndexPtr

        +
        public int getIndexPtr()
        +
      • +
      + + + +
        +
      • +

        setIndexPtr

        +
        public HeaderBlock setIndexPtr(int indexPtr)
        +
      • +
      + + + +
        +
      • +

        getBytes

        +
        public byte[] getBytes()
        +
        get the bytes for db storage
        +
        +
        Returns:
        +
        byte[]
        +
        +
      • +
      +
    • +
    +
  • +
+
+
+ + + + + +

Copyright © 2017. All rights reserved.

+ + diff --git a/binding/java/target/apidocs/org/lionsoul/ip2region/IndexBlock.html b/binding/java/target/apidocs/org/lionsoul/ip2region/IndexBlock.html new file mode 100644 index 0000000..0237926 --- /dev/null +++ b/binding/java/target/apidocs/org/lionsoul/ip2region/IndexBlock.html @@ -0,0 +1,408 @@ + + + + + + +IndexBlock (ip2region 1.4 API) + + + + + + + + + + + + +
+
org.lionsoul.ip2region
+

Class IndexBlock

+
+
+ +
+
    +
  • +
    +
    +
    public class IndexBlock
    +extends Object
    +
    item index class
    +
    +
    Author:
    +
    chenxin
    +
    +
  • +
+
+
+ +
+
+
    +
  • + +
      +
    • + + +

      Constructor Detail

      + + + +
        +
      • +

        IndexBlock

        +
        public IndexBlock(long startIp,
        +                  long endIp,
        +                  int dataPtr,
        +                  int dataLen)
        +
      • +
      +
    • +
    + +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        getStartIp

        +
        public long getStartIp()
        +
      • +
      + + + +
        +
      • +

        setStartIp

        +
        public IndexBlock setStartIp(long startIp)
        +
      • +
      + + + +
        +
      • +

        getEndIp

        +
        public long getEndIp()
        +
      • +
      + + + +
        +
      • +

        setEndIp

        +
        public IndexBlock setEndIp(long endIp)
        +
      • +
      + + + +
        +
      • +

        getDataPtr

        +
        public int getDataPtr()
        +
      • +
      + + + +
        +
      • +

        setDataPtr

        +
        public IndexBlock setDataPtr(int dataPtr)
        +
      • +
      + + + +
        +
      • +

        getDataLen

        +
        public int getDataLen()
        +
      • +
      + + + +
        +
      • +

        setDataLen

        +
        public IndexBlock setDataLen(int dataLen)
        +
      • +
      + + + +
        +
      • +

        getIndexBlockLength

        +
        public static int getIndexBlockLength()
        +
      • +
      + + + +
        +
      • +

        getBytes

        +
        public byte[] getBytes()
        +
        get the bytes for storage
        +
        +
        Returns:
        +
        byte[]
        +
        +
      • +
      +
    • +
    +
  • +
+
+
+ + + + + +

Copyright © 2017. All rights reserved.

+ + diff --git a/binding/java/target/apidocs/org/lionsoul/ip2region/Util.html b/binding/java/target/apidocs/org/lionsoul/ip2region/Util.html new file mode 100644 index 0000000..609dc04 --- /dev/null +++ b/binding/java/target/apidocs/org/lionsoul/ip2region/Util.html @@ -0,0 +1,462 @@ + + + + + + +Util (ip2region 1.4 API) + + + + + + + + + + + + +
+
org.lionsoul.ip2region
+

Class Util

+
+
+ +
+
    +
  • +
    +
    +
    public class Util
    +extends Object
    +
    util class
    +
    +
    Author:
    +
    chenxin
    +
    +
  • +
+
+
+
    +
  • + +
      +
    • + + +

      Constructor Summary

      + + + + + + + + +
      Constructors 
      Constructor and Description
      Util() 
      +
    • +
    + +
      +
    • + + +

      Method Summary

      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      All Methods Static Methods Concrete Methods 
      Modifier and TypeMethod and Description
      static intgetInt1(byte[] b, + int offset) 
      static intgetInt2(byte[] b, + int offset) 
      static intgetInt3(byte[] b, + int offset) +
      get a int from a byte array start from the specifield offset
      +
      static longgetIntLong(byte[] b, + int offset) +
      get a int from a byte array start from the specifiled offset
      +
      static longip2long(String ip) +
      string ip to long ip
      +
      static booleanisIpAddress(String ip) +
      check the validate of the specifeld ip address
      +
      static Stringlong2ip(long ip) +
      int to ip string
      +
      static voidwrite(byte[] b, + int offset, + long v, + int bytes) +
      write specfield bytes to a byte array start from offset
      +
      static voidwriteIntLong(byte[] b, + int offset, + long v) +
      write a int to a byte array
      +
      + +
    • +
    +
  • +
+
+
+
    +
  • + +
      +
    • + + +

      Constructor Detail

      + + + +
        +
      • +

        Util

        +
        public Util()
        +
      • +
      +
    • +
    + +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        write

        +
        public static void write(byte[] b,
        +                         int offset,
        +                         long v,
        +                         int bytes)
        +
        write specfield bytes to a byte array start from offset
        +
        +
        Parameters:
        +
        b -
        +
        offset -
        +
        v -
        +
        bytes -
        +
        +
      • +
      + + + +
        +
      • +

        writeIntLong

        +
        public static void writeIntLong(byte[] b,
        +                                int offset,
        +                                long v)
        +
        write a int to a byte array
        +
        +
        Parameters:
        +
        b -
        +
        offet -
        +
        v -
        +
        +
      • +
      + + + +
        +
      • +

        getIntLong

        +
        public static long getIntLong(byte[] b,
        +                              int offset)
        +
        get a int from a byte array start from the specifiled offset
        +
        +
        Parameters:
        +
        b -
        +
        offset -
        +
        +
      • +
      + + + +
        +
      • +

        getInt3

        +
        public static int getInt3(byte[] b,
        +                          int offset)
        +
        get a int from a byte array start from the specifield offset
        +
        +
        Parameters:
        +
        b -
        +
        offset -
        +
        +
      • +
      + + + +
        +
      • +

        getInt2

        +
        public static int getInt2(byte[] b,
        +                          int offset)
        +
      • +
      + + + +
        +
      • +

        getInt1

        +
        public static int getInt1(byte[] b,
        +                          int offset)
        +
      • +
      + + + +
        +
      • +

        ip2long

        +
        public static long ip2long(String ip)
        +
        string ip to long ip
        +
        +
        Parameters:
        +
        ip -
        +
        Returns:
        +
        long
        +
        +
      • +
      + + + +
        +
      • +

        long2ip

        +
        public static String long2ip(long ip)
        +
        int to ip string
        +
        +
        Parameters:
        +
        ip -
        +
        Returns:
        +
        string
        +
        +
      • +
      + + + +
        +
      • +

        isIpAddress

        +
        public static boolean isIpAddress(String ip)
        +
        check the validate of the specifeld ip address
        +
        +
        Parameters:
        +
        ip -
        +
        Returns:
        +
        boolean
        +
        +
      • +
      +
    • +
    +
  • +
+
+
+ + + + + +

Copyright © 2017. All rights reserved.

+ + diff --git a/binding/java/target/apidocs/org/lionsoul/ip2region/class-use/DataBlock.html b/binding/java/target/apidocs/org/lionsoul/ip2region/class-use/DataBlock.html new file mode 100644 index 0000000..193b848 --- /dev/null +++ b/binding/java/target/apidocs/org/lionsoul/ip2region/class-use/DataBlock.html @@ -0,0 +1,216 @@ + + + + + + +Uses of Class org.lionsoul.ip2region.DataBlock (ip2region 1.4 API) + + + + + + + + + + + +
+

Uses of Class
org.lionsoul.ip2region.DataBlock

+
+
+ +
+ + + + +

Copyright © 2017. All rights reserved.

+ + diff --git a/binding/java/target/apidocs/org/lionsoul/ip2region/class-use/DbConfig.html b/binding/java/target/apidocs/org/lionsoul/ip2region/class-use/DbConfig.html new file mode 100644 index 0000000..48fe2fe --- /dev/null +++ b/binding/java/target/apidocs/org/lionsoul/ip2region/class-use/DbConfig.html @@ -0,0 +1,190 @@ + + + + + + +Uses of Class org.lionsoul.ip2region.DbConfig (ip2region 1.4 API) + + + + + + + + + + + +
+

Uses of Class
org.lionsoul.ip2region.DbConfig

+
+
+ +
+ + + + +

Copyright © 2017. All rights reserved.

+ + diff --git a/binding/java/target/apidocs/org/lionsoul/ip2region/class-use/DbMakerConfigException.html b/binding/java/target/apidocs/org/lionsoul/ip2region/class-use/DbMakerConfigException.html new file mode 100644 index 0000000..6f97272 --- /dev/null +++ b/binding/java/target/apidocs/org/lionsoul/ip2region/class-use/DbMakerConfigException.html @@ -0,0 +1,169 @@ + + + + + + +Uses of Class org.lionsoul.ip2region.DbMakerConfigException (ip2region 1.4 API) + + + + + + + + + + + +
+

Uses of Class
org.lionsoul.ip2region.DbMakerConfigException

+
+
+ +
+ + + + +

Copyright © 2017. All rights reserved.

+ + diff --git a/binding/java/target/apidocs/org/lionsoul/ip2region/class-use/DbSearcher.html b/binding/java/target/apidocs/org/lionsoul/ip2region/class-use/DbSearcher.html new file mode 100644 index 0000000..da93a2d --- /dev/null +++ b/binding/java/target/apidocs/org/lionsoul/ip2region/class-use/DbSearcher.html @@ -0,0 +1,126 @@ + + + + + + +Uses of Class org.lionsoul.ip2region.DbSearcher (ip2region 1.4 API) + + + + + + + + + + + +
+

Uses of Class
org.lionsoul.ip2region.DbSearcher

+
+
No usage of org.lionsoul.ip2region.DbSearcher
+ + + + +

Copyright © 2017. All rights reserved.

+ + diff --git a/binding/java/target/apidocs/org/lionsoul/ip2region/class-use/HeaderBlock.html b/binding/java/target/apidocs/org/lionsoul/ip2region/class-use/HeaderBlock.html new file mode 100644 index 0000000..9e2cd2f --- /dev/null +++ b/binding/java/target/apidocs/org/lionsoul/ip2region/class-use/HeaderBlock.html @@ -0,0 +1,170 @@ + + + + + + +Uses of Class org.lionsoul.ip2region.HeaderBlock (ip2region 1.4 API) + + + + + + + + + + + +
+

Uses of Class
org.lionsoul.ip2region.HeaderBlock

+
+
+ +
+ + + + +

Copyright © 2017. All rights reserved.

+ + diff --git a/binding/java/target/apidocs/org/lionsoul/ip2region/class-use/IndexBlock.html b/binding/java/target/apidocs/org/lionsoul/ip2region/class-use/IndexBlock.html new file mode 100644 index 0000000..1cbc883 --- /dev/null +++ b/binding/java/target/apidocs/org/lionsoul/ip2region/class-use/IndexBlock.html @@ -0,0 +1,178 @@ + + + + + + +Uses of Class org.lionsoul.ip2region.IndexBlock (ip2region 1.4 API) + + + + + + + + + + + +
+

Uses of Class
org.lionsoul.ip2region.IndexBlock

+
+
+ +
+ + + + +

Copyright © 2017. All rights reserved.

+ + diff --git a/binding/java/target/apidocs/org/lionsoul/ip2region/class-use/Util.html b/binding/java/target/apidocs/org/lionsoul/ip2region/class-use/Util.html new file mode 100644 index 0000000..1fec146 --- /dev/null +++ b/binding/java/target/apidocs/org/lionsoul/ip2region/class-use/Util.html @@ -0,0 +1,126 @@ + + + + + + +Uses of Class org.lionsoul.ip2region.Util (ip2region 1.4 API) + + + + + + + + + + + +
+

Uses of Class
org.lionsoul.ip2region.Util

+
+
No usage of org.lionsoul.ip2region.Util
+ + + + +

Copyright © 2017. All rights reserved.

+ + diff --git a/binding/java/target/apidocs/org/lionsoul/ip2region/package-frame.html b/binding/java/target/apidocs/org/lionsoul/ip2region/package-frame.html new file mode 100644 index 0000000..1fe3918 --- /dev/null +++ b/binding/java/target/apidocs/org/lionsoul/ip2region/package-frame.html @@ -0,0 +1,30 @@ + + + + + + +org.lionsoul.ip2region (ip2region 1.4 API) + + + + + +

org.lionsoul.ip2region

+ + + diff --git a/binding/java/target/apidocs/org/lionsoul/ip2region/package-summary.html b/binding/java/target/apidocs/org/lionsoul/ip2region/package-summary.html new file mode 100644 index 0000000..873a03d --- /dev/null +++ b/binding/java/target/apidocs/org/lionsoul/ip2region/package-summary.html @@ -0,0 +1,193 @@ + + + + + + +org.lionsoul.ip2region (ip2region 1.4 API) + + + + + + + + + + + +
+

Package org.lionsoul.ip2region

+
+
+
    +
  • + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Class Summary 
    ClassDescription
    DataBlock +
    data block class
    +
    DbConfig +
    database configuration class
    +
    DbSearcher +
    ip db searcher class (Not thread safe)
    +
    HeaderBlock +
    header block class
    +
    IndexBlock +
    item index class
    +
    Util +
    util class
    +
    +
  • +
  • + + + + + + + + + + + + +
    Exception Summary 
    ExceptionDescription
    DbMakerConfigException +
    configuration exception
    +
    +
  • +
+
+ + + + +

Copyright © 2017. All rights reserved.

+ + diff --git a/binding/java/target/apidocs/org/lionsoul/ip2region/package-tree.html b/binding/java/target/apidocs/org/lionsoul/ip2region/package-tree.html new file mode 100644 index 0000000..bbad4a3 --- /dev/null +++ b/binding/java/target/apidocs/org/lionsoul/ip2region/package-tree.html @@ -0,0 +1,153 @@ + + + + + + +org.lionsoul.ip2region Class Hierarchy (ip2region 1.4 API) + + + + + + + + + + + +
+

Hierarchy For Package org.lionsoul.ip2region

+Package Hierarchies: + +
+
+

Class Hierarchy

+ +
+ + + + +

Copyright © 2017. All rights reserved.

+ + diff --git a/binding/java/target/apidocs/org/lionsoul/ip2region/package-use.html b/binding/java/target/apidocs/org/lionsoul/ip2region/package-use.html new file mode 100644 index 0000000..060a891 --- /dev/null +++ b/binding/java/target/apidocs/org/lionsoul/ip2region/package-use.html @@ -0,0 +1,181 @@ + + + + + + +Uses of Package org.lionsoul.ip2region (ip2region 1.4 API) + + + + + + + + + + + +
+

Uses of Package
org.lionsoul.ip2region

+
+
+ +
+ + + + +

Copyright © 2017. All rights reserved.

+ + diff --git a/binding/java/target/apidocs/org/lionsoul/ip2region/test/TestSearcher.html b/binding/java/target/apidocs/org/lionsoul/ip2region/test/TestSearcher.html new file mode 100644 index 0000000..b651b4b --- /dev/null +++ b/binding/java/target/apidocs/org/lionsoul/ip2region/test/TestSearcher.html @@ -0,0 +1,278 @@ + + + + + + +TestSearcher (ip2region 1.4 API) + + + + + + + + + + + + +
+
org.lionsoul.ip2region.test
+

Class TestSearcher

+
+
+ +
+
    +
  • +
    +
    +
    public class TestSearcher
    +extends Object
    +
    project test script
    +
    +
    Author:
    +
    chenxin
    +
    +
  • +
+
+
+ +
+
+
    +
  • + +
      +
    • + + +

      Constructor Detail

      + + + +
        +
      • +

        TestSearcher

        +
        public TestSearcher()
        +
      • +
      +
    • +
    + +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        main

        +
        public static void main(String[] argv)
        +
      • +
      +
    • +
    +
  • +
+
+
+ + + + + +

Copyright © 2017. All rights reserved.

+ + diff --git a/binding/java/target/apidocs/org/lionsoul/ip2region/test/TestUnit.html b/binding/java/target/apidocs/org/lionsoul/ip2region/test/TestUnit.html new file mode 100644 index 0000000..154b4a1 --- /dev/null +++ b/binding/java/target/apidocs/org/lionsoul/ip2region/test/TestUnit.html @@ -0,0 +1,278 @@ + + + + + + +TestUnit (ip2region 1.4 API) + + + + + + + + + + + + +
+
org.lionsoul.ip2region.test
+

Class TestUnit

+
+
+ +
+
    +
  • +
    +
    +
    public class TestUnit
    +extends Object
    +
    data check class
    +
    +
    Author:
    +
    koma
    +
    +
  • +
+
+
+ +
+
+
    +
  • + +
      +
    • + + +

      Constructor Detail

      + + + +
        +
      • +

        TestUnit

        +
        public TestUnit()
        +
      • +
      +
    • +
    + +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        main

        +
        public static void main(String[] args)
        +
      • +
      +
    • +
    +
  • +
+
+
+ + + + + +

Copyright © 2017. All rights reserved.

+ + diff --git a/binding/java/target/apidocs/org/lionsoul/ip2region/test/TestUtil.html b/binding/java/target/apidocs/org/lionsoul/ip2region/test/TestUtil.html new file mode 100644 index 0000000..942254d --- /dev/null +++ b/binding/java/target/apidocs/org/lionsoul/ip2region/test/TestUtil.html @@ -0,0 +1,278 @@ + + + + + + +TestUtil (ip2region 1.4 API) + + + + + + + + + + + + +
+
org.lionsoul.ip2region.test
+

Class TestUtil

+
+
+ +
+
    +
  • +
    +
    +
    public class TestUtil
    +extends Object
    +
    project test script
    +
    +
    Author:
    +
    chenxin
    +
    +
  • +
+
+
+ +
+
+
    +
  • + +
      +
    • + + +

      Constructor Detail

      + + + +
        +
      • +

        TestUtil

        +
        public TestUtil()
        +
      • +
      +
    • +
    + +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        main

        +
        public static void main(String[] argv)
        +
      • +
      +
    • +
    +
  • +
+
+
+ + + + + +

Copyright © 2017. All rights reserved.

+ + diff --git a/binding/java/target/apidocs/org/lionsoul/ip2region/test/class-use/TestSearcher.html b/binding/java/target/apidocs/org/lionsoul/ip2region/test/class-use/TestSearcher.html new file mode 100644 index 0000000..2893bd2 --- /dev/null +++ b/binding/java/target/apidocs/org/lionsoul/ip2region/test/class-use/TestSearcher.html @@ -0,0 +1,126 @@ + + + + + + +Uses of Class org.lionsoul.ip2region.test.TestSearcher (ip2region 1.4 API) + + + + + + + + + + + +
+

Uses of Class
org.lionsoul.ip2region.test.TestSearcher

+
+
No usage of org.lionsoul.ip2region.test.TestSearcher
+ + + + +

Copyright © 2017. All rights reserved.

+ + diff --git a/binding/java/target/apidocs/org/lionsoul/ip2region/test/class-use/TestUnit.html b/binding/java/target/apidocs/org/lionsoul/ip2region/test/class-use/TestUnit.html new file mode 100644 index 0000000..47bc52e --- /dev/null +++ b/binding/java/target/apidocs/org/lionsoul/ip2region/test/class-use/TestUnit.html @@ -0,0 +1,126 @@ + + + + + + +Uses of Class org.lionsoul.ip2region.test.TestUnit (ip2region 1.4 API) + + + + + + + + + + + +
+

Uses of Class
org.lionsoul.ip2region.test.TestUnit

+
+
No usage of org.lionsoul.ip2region.test.TestUnit
+ + + + +

Copyright © 2017. All rights reserved.

+ + diff --git a/binding/java/target/apidocs/org/lionsoul/ip2region/test/class-use/TestUtil.html b/binding/java/target/apidocs/org/lionsoul/ip2region/test/class-use/TestUtil.html new file mode 100644 index 0000000..2ebf83f --- /dev/null +++ b/binding/java/target/apidocs/org/lionsoul/ip2region/test/class-use/TestUtil.html @@ -0,0 +1,126 @@ + + + + + + +Uses of Class org.lionsoul.ip2region.test.TestUtil (ip2region 1.4 API) + + + + + + + + + + + +
+

Uses of Class
org.lionsoul.ip2region.test.TestUtil

+
+
No usage of org.lionsoul.ip2region.test.TestUtil
+ + + + +

Copyright © 2017. All rights reserved.

+ + diff --git a/binding/java/target/apidocs/org/lionsoul/ip2region/test/package-frame.html b/binding/java/target/apidocs/org/lionsoul/ip2region/test/package-frame.html new file mode 100644 index 0000000..0c89be4 --- /dev/null +++ b/binding/java/target/apidocs/org/lionsoul/ip2region/test/package-frame.html @@ -0,0 +1,23 @@ + + + + + + +org.lionsoul.ip2region.test (ip2region 1.4 API) + + + + + +

org.lionsoul.ip2region.test

+
+

Classes

+ +
+ + diff --git a/binding/java/target/apidocs/org/lionsoul/ip2region/test/package-summary.html b/binding/java/target/apidocs/org/lionsoul/ip2region/test/package-summary.html new file mode 100644 index 0000000..861016f --- /dev/null +++ b/binding/java/target/apidocs/org/lionsoul/ip2region/test/package-summary.html @@ -0,0 +1,158 @@ + + + + + + +org.lionsoul.ip2region.test (ip2region 1.4 API) + + + + + + + + + + + +
+

Package org.lionsoul.ip2region.test

+
+
+
    +
  • + + + + + + + + + + + + + + + + + + + + +
    Class Summary 
    ClassDescription
    TestSearcher +
    project test script
    +
    TestUnit +
    data check class
    +
    TestUtil +
    project test script
    +
    +
  • +
+
+ + + + +

Copyright © 2017. All rights reserved.

+ + diff --git a/binding/java/target/apidocs/org/lionsoul/ip2region/test/package-tree.html b/binding/java/target/apidocs/org/lionsoul/ip2region/test/package-tree.html new file mode 100644 index 0000000..12b31b7 --- /dev/null +++ b/binding/java/target/apidocs/org/lionsoul/ip2region/test/package-tree.html @@ -0,0 +1,141 @@ + + + + + + +org.lionsoul.ip2region.test Class Hierarchy (ip2region 1.4 API) + + + + + + + + + + + +
+

Hierarchy For Package org.lionsoul.ip2region.test

+Package Hierarchies: + +
+
+

Class Hierarchy

+ +
+ + + + +

Copyright © 2017. All rights reserved.

+ + diff --git a/binding/java/target/apidocs/org/lionsoul/ip2region/test/package-use.html b/binding/java/target/apidocs/org/lionsoul/ip2region/test/package-use.html new file mode 100644 index 0000000..d5241b3 --- /dev/null +++ b/binding/java/target/apidocs/org/lionsoul/ip2region/test/package-use.html @@ -0,0 +1,126 @@ + + + + + + +Uses of Package org.lionsoul.ip2region.test (ip2region 1.4 API) + + + + + + + + + + + +
+

Uses of Package
org.lionsoul.ip2region.test

+
+
No usage of org.lionsoul.ip2region.test
+ + + + +

Copyright © 2017. All rights reserved.

+ + diff --git a/binding/java/target/apidocs/overview-frame.html b/binding/java/target/apidocs/overview-frame.html new file mode 100644 index 0000000..37f6be2 --- /dev/null +++ b/binding/java/target/apidocs/overview-frame.html @@ -0,0 +1,23 @@ + + + + + + +Overview List (ip2region 1.4 API) + + + + + + + +

 

+ + diff --git a/binding/java/target/apidocs/overview-summary.html b/binding/java/target/apidocs/overview-summary.html new file mode 100644 index 0000000..8bb2edf --- /dev/null +++ b/binding/java/target/apidocs/overview-summary.html @@ -0,0 +1,144 @@ + + + + + + +Overview (ip2region 1.4 API) + + + + + + + + +
+ + + + + + + +
+ + +
+

ip2region 1.4 API

+
+
+ + + + + + + + + + + + + + + + +
Packages 
PackageDescription
org.lionsoul.ip2region 
org.lionsoul.ip2region.test 
+
+ +
+ + + + + + + +
+ + +

Copyright © 2017. All rights reserved.

+ + diff --git a/binding/java/target/apidocs/overview-tree.html b/binding/java/target/apidocs/overview-tree.html new file mode 100644 index 0000000..26aa565 --- /dev/null +++ b/binding/java/target/apidocs/overview-tree.html @@ -0,0 +1,157 @@ + + + + + + +Class Hierarchy (ip2region 1.4 API) + + + + + + + + +
+ + + + + + + +
+ + +
+

Hierarchy For All Packages

+Package Hierarchies: + +
+
+

Class Hierarchy

+ +
+ +
+ + + + + + + +
+ + +

Copyright © 2017. All rights reserved.

+ + diff --git a/binding/java/target/apidocs/package-list b/binding/java/target/apidocs/package-list new file mode 100644 index 0000000..acab539 --- /dev/null +++ b/binding/java/target/apidocs/package-list @@ -0,0 +1,2 @@ +org.lionsoul.ip2region +org.lionsoul.ip2region.test diff --git a/binding/java/target/apidocs/script.js b/binding/java/target/apidocs/script.js new file mode 100644 index 0000000..b346356 --- /dev/null +++ b/binding/java/target/apidocs/script.js @@ -0,0 +1,30 @@ +function show(type) +{ + count = 0; + for (var key in methods) { + var row = document.getElementById(key); + if ((methods[key] & type) != 0) { + row.style.display = ''; + row.className = (count++ % 2) ? rowColor : altColor; + } + else + row.style.display = 'none'; + } + updateTabs(type); +} + +function updateTabs(type) +{ + for (var value in tabs) { + var sNode = document.getElementById(tabs[value][0]); + var spanNode = sNode.firstChild; + if (value == type) { + sNode.className = activeTableTab; + spanNode.innerHTML = tabs[value][1]; + } + else { + sNode.className = tableTab; + spanNode.innerHTML = "" + tabs[value][1] + ""; + } + } +} diff --git a/binding/java/target/apidocs/serialized-form.html b/binding/java/target/apidocs/serialized-form.html new file mode 100644 index 0000000..2ba28ff --- /dev/null +++ b/binding/java/target/apidocs/serialized-form.html @@ -0,0 +1,143 @@ + + + + + + +Serialized Form (ip2region 1.4 API) + + + + + + + + +
+ + + + + + + +
+ + +
+

Serialized Form

+
+
+ +
+ +
+ + + + + + + +
+ + +

Copyright © 2017. All rights reserved.

+ + diff --git a/binding/java/target/apidocs/stylesheet.css b/binding/java/target/apidocs/stylesheet.css new file mode 100644 index 0000000..98055b2 --- /dev/null +++ b/binding/java/target/apidocs/stylesheet.css @@ -0,0 +1,574 @@ +/* Javadoc style sheet */ +/* +Overall document style +*/ + +@import url('resources/fonts/dejavu.css'); + +body { + background-color:#ffffff; + color:#353833; + font-family:'DejaVu Sans', Arial, Helvetica, sans-serif; + font-size:14px; + margin:0; +} +a:link, a:visited { + text-decoration:none; + color:#4A6782; +} +a:hover, a:focus { + text-decoration:none; + color:#bb7a2a; +} +a:active { + text-decoration:none; + color:#4A6782; +} +a[name] { + color:#353833; +} +a[name]:hover { + text-decoration:none; + color:#353833; +} +pre { + font-family:'DejaVu Sans Mono', monospace; + font-size:14px; +} +h1 { + font-size:20px; +} +h2 { + font-size:18px; +} +h3 { + font-size:16px; + font-style:italic; +} +h4 { + font-size:13px; +} +h5 { + font-size:12px; +} +h6 { + font-size:11px; +} +ul { + list-style-type:disc; +} +code, tt { + font-family:'DejaVu Sans Mono', monospace; + font-size:14px; + padding-top:4px; + margin-top:8px; + line-height:1.4em; +} +dt code { + font-family:'DejaVu Sans Mono', monospace; + font-size:14px; + padding-top:4px; +} +table tr td dt code { + font-family:'DejaVu Sans Mono', monospace; + font-size:14px; + vertical-align:top; + padding-top:4px; +} +sup { + font-size:8px; +} +/* +Document title and Copyright styles +*/ +.clear { + clear:both; + height:0px; + overflow:hidden; +} +.aboutLanguage { + float:right; + padding:0px 21px; + font-size:11px; + z-index:200; + margin-top:-9px; +} +.legalCopy { + margin-left:.5em; +} +.bar a, .bar a:link, .bar a:visited, .bar a:active { + color:#FFFFFF; + text-decoration:none; +} +.bar a:hover, .bar a:focus { + color:#bb7a2a; +} +.tab { + background-color:#0066FF; + color:#ffffff; + padding:8px; + width:5em; + font-weight:bold; +} +/* +Navigation bar styles +*/ +.bar { + background-color:#4D7A97; + color:#FFFFFF; + padding:.8em .5em .4em .8em; + height:auto;/*height:1.8em;*/ + font-size:11px; + margin:0; +} +.topNav { + background-color:#4D7A97; + color:#FFFFFF; + float:left; + padding:0; + width:100%; + clear:right; + height:2.8em; + padding-top:10px; + overflow:hidden; + font-size:12px; +} +.bottomNav { + margin-top:10px; + background-color:#4D7A97; + color:#FFFFFF; + float:left; + padding:0; + width:100%; + clear:right; + height:2.8em; + padding-top:10px; + overflow:hidden; + font-size:12px; +} +.subNav { + background-color:#dee3e9; + float:left; + width:100%; + overflow:hidden; + font-size:12px; +} +.subNav div { + clear:left; + float:left; + padding:0 0 5px 6px; + text-transform:uppercase; +} +ul.navList, ul.subNavList { + float:left; + margin:0 25px 0 0; + padding:0; +} +ul.navList li{ + list-style:none; + float:left; + padding: 5px 6px; + text-transform:uppercase; +} +ul.subNavList li{ + list-style:none; + float:left; +} +.topNav a:link, .topNav a:active, .topNav a:visited, .bottomNav a:link, .bottomNav a:active, .bottomNav a:visited { + color:#FFFFFF; + text-decoration:none; + text-transform:uppercase; +} +.topNav a:hover, .bottomNav a:hover { + text-decoration:none; + color:#bb7a2a; + text-transform:uppercase; +} +.navBarCell1Rev { + background-color:#F8981D; + color:#253441; + margin: auto 5px; +} +.skipNav { + position:absolute; + top:auto; + left:-9999px; + overflow:hidden; +} +/* +Page header and footer styles +*/ +.header, .footer { + clear:both; + margin:0 20px; + padding:5px 0 0 0; +} +.indexHeader { + margin:10px; + position:relative; +} +.indexHeader span{ + margin-right:15px; +} +.indexHeader h1 { + font-size:13px; +} +.title { + color:#2c4557; + margin:10px 0; +} +.subTitle { + margin:5px 0 0 0; +} +.header ul { + margin:0 0 15px 0; + padding:0; +} +.footer ul { + margin:20px 0 5px 0; +} +.header ul li, .footer ul li { + list-style:none; + font-size:13px; +} +/* +Heading styles +*/ +div.details ul.blockList ul.blockList ul.blockList li.blockList h4, div.details ul.blockList ul.blockList ul.blockListLast li.blockList h4 { + background-color:#dee3e9; + border:1px solid #d0d9e0; + margin:0 0 6px -8px; + padding:7px 5px; +} +ul.blockList ul.blockList ul.blockList li.blockList h3 { + background-color:#dee3e9; + border:1px solid #d0d9e0; + margin:0 0 6px -8px; + padding:7px 5px; +} +ul.blockList ul.blockList li.blockList h3 { + padding:0; + margin:15px 0; +} +ul.blockList li.blockList h2 { + padding:0px 0 20px 0; +} +/* +Page layout container styles +*/ +.contentContainer, .sourceContainer, .classUseContainer, .serializedFormContainer, .constantValuesContainer { + clear:both; + padding:10px 20px; + position:relative; +} +.indexContainer { + margin:10px; + position:relative; + font-size:12px; +} +.indexContainer h2 { + font-size:13px; + padding:0 0 3px 0; +} +.indexContainer ul { + margin:0; + padding:0; +} +.indexContainer ul li { + list-style:none; + padding-top:2px; +} +.contentContainer .description dl dt, .contentContainer .details dl dt, .serializedFormContainer dl dt { + font-size:12px; + font-weight:bold; + margin:10px 0 0 0; + color:#4E4E4E; +} +.contentContainer .description dl dd, .contentContainer .details dl dd, .serializedFormContainer dl dd { + margin:5px 0 10px 0px; + font-size:14px; + font-family:'DejaVu Sans Mono',monospace; +} +.serializedFormContainer dl.nameValue dt { + margin-left:1px; + font-size:1.1em; + display:inline; + font-weight:bold; +} +.serializedFormContainer dl.nameValue dd { + margin:0 0 0 1px; + font-size:1.1em; + display:inline; +} +/* +List styles +*/ +ul.horizontal li { + display:inline; + font-size:0.9em; +} +ul.inheritance { + margin:0; + padding:0; +} +ul.inheritance li { + display:inline; + list-style:none; +} +ul.inheritance li ul.inheritance { + margin-left:15px; + padding-left:15px; + padding-top:1px; +} +ul.blockList, ul.blockListLast { + margin:10px 0 10px 0; + padding:0; +} +ul.blockList li.blockList, ul.blockListLast li.blockList { + list-style:none; + margin-bottom:15px; + line-height:1.4; +} +ul.blockList ul.blockList li.blockList, ul.blockList ul.blockListLast li.blockList { + padding:0px 20px 5px 10px; + border:1px solid #ededed; + background-color:#f8f8f8; +} +ul.blockList ul.blockList ul.blockList li.blockList, ul.blockList ul.blockList ul.blockListLast li.blockList { + padding:0 0 5px 8px; + background-color:#ffffff; + border:none; +} +ul.blockList ul.blockList ul.blockList ul.blockList li.blockList { + margin-left:0; + padding-left:0; + padding-bottom:15px; + border:none; +} +ul.blockList ul.blockList ul.blockList ul.blockList li.blockListLast { + list-style:none; + border-bottom:none; + padding-bottom:0; +} +table tr td dl, table tr td dl dt, table tr td dl dd { + margin-top:0; + margin-bottom:1px; +} +/* +Table styles +*/ +.overviewSummary, .memberSummary, .typeSummary, .useSummary, .constantsSummary, .deprecatedSummary { + width:100%; + border-left:1px solid #EEE; + border-right:1px solid #EEE; + border-bottom:1px solid #EEE; +} +.overviewSummary, .memberSummary { + padding:0px; +} +.overviewSummary caption, .memberSummary caption, .typeSummary caption, +.useSummary caption, .constantsSummary caption, .deprecatedSummary caption { + position:relative; + text-align:left; + background-repeat:no-repeat; + color:#253441; + font-weight:bold; + clear:none; + overflow:hidden; + padding:0px; + padding-top:10px; + padding-left:1px; + margin:0px; + white-space:pre; +} +.overviewSummary caption a:link, .memberSummary caption a:link, .typeSummary caption a:link, +.useSummary caption a:link, .constantsSummary caption a:link, .deprecatedSummary caption a:link, +.overviewSummary caption a:hover, .memberSummary caption a:hover, .typeSummary caption a:hover, +.useSummary caption a:hover, .constantsSummary caption a:hover, .deprecatedSummary caption a:hover, +.overviewSummary caption a:active, .memberSummary caption a:active, .typeSummary caption a:active, +.useSummary caption a:active, .constantsSummary caption a:active, .deprecatedSummary caption a:active, +.overviewSummary caption a:visited, .memberSummary caption a:visited, .typeSummary caption a:visited, +.useSummary caption a:visited, .constantsSummary caption a:visited, .deprecatedSummary caption a:visited { + color:#FFFFFF; +} +.overviewSummary caption span, .memberSummary caption span, .typeSummary caption span, +.useSummary caption span, .constantsSummary caption span, .deprecatedSummary caption span { + white-space:nowrap; + padding-top:5px; + padding-left:12px; + padding-right:12px; + padding-bottom:7px; + display:inline-block; + float:left; + background-color:#F8981D; + border: none; + height:16px; +} +.memberSummary caption span.activeTableTab span { + white-space:nowrap; + padding-top:5px; + padding-left:12px; + padding-right:12px; + margin-right:3px; + display:inline-block; + float:left; + background-color:#F8981D; + height:16px; +} +.memberSummary caption span.tableTab span { + white-space:nowrap; + padding-top:5px; + padding-left:12px; + padding-right:12px; + margin-right:3px; + display:inline-block; + float:left; + background-color:#4D7A97; + height:16px; +} +.memberSummary caption span.tableTab, .memberSummary caption span.activeTableTab { + padding-top:0px; + padding-left:0px; + padding-right:0px; + background-image:none; + float:none; + display:inline; +} +.overviewSummary .tabEnd, .memberSummary .tabEnd, .typeSummary .tabEnd, +.useSummary .tabEnd, .constantsSummary .tabEnd, .deprecatedSummary .tabEnd { + display:none; + width:5px; + position:relative; + float:left; + background-color:#F8981D; +} +.memberSummary .activeTableTab .tabEnd { + display:none; + width:5px; + margin-right:3px; + position:relative; + float:left; + background-color:#F8981D; +} +.memberSummary .tableTab .tabEnd { + display:none; + width:5px; + margin-right:3px; + position:relative; + background-color:#4D7A97; + float:left; + +} +.overviewSummary td, .memberSummary td, .typeSummary td, +.useSummary td, .constantsSummary td, .deprecatedSummary td { + text-align:left; + padding:0px 0px 12px 10px; +} +th.colOne, th.colFirst, th.colLast, .useSummary th, .constantsSummary th, +td.colOne, td.colFirst, td.colLast, .useSummary td, .constantsSummary td{ + vertical-align:top; + padding-right:0px; + padding-top:8px; + padding-bottom:3px; +} +th.colFirst, th.colLast, th.colOne, .constantsSummary th { + background:#dee3e9; + text-align:left; + padding:8px 3px 3px 7px; +} +td.colFirst, th.colFirst { + white-space:nowrap; + font-size:13px; +} +td.colLast, th.colLast { + font-size:13px; +} +td.colOne, th.colOne { + font-size:13px; +} +.overviewSummary td.colFirst, .overviewSummary th.colFirst, +.useSummary td.colFirst, .useSummary th.colFirst, +.overviewSummary td.colOne, .overviewSummary th.colOne, +.memberSummary td.colFirst, .memberSummary th.colFirst, +.memberSummary td.colOne, .memberSummary th.colOne, +.typeSummary td.colFirst{ + width:25%; + vertical-align:top; +} +td.colOne a:link, td.colOne a:active, td.colOne a:visited, td.colOne a:hover, td.colFirst a:link, td.colFirst a:active, td.colFirst a:visited, td.colFirst a:hover, td.colLast a:link, td.colLast a:active, td.colLast a:visited, td.colLast a:hover, .constantValuesContainer td a:link, .constantValuesContainer td a:active, .constantValuesContainer td a:visited, .constantValuesContainer td a:hover { + font-weight:bold; +} +.tableSubHeadingColor { + background-color:#EEEEFF; +} +.altColor { + background-color:#FFFFFF; +} +.rowColor { + background-color:#EEEEEF; +} +/* +Content styles +*/ +.description pre { + margin-top:0; +} +.deprecatedContent { + margin:0; + padding:10px 0; +} +.docSummary { + padding:0; +} + +ul.blockList ul.blockList ul.blockList li.blockList h3 { + font-style:normal; +} + +div.block { + font-size:14px; + font-family:'DejaVu Serif', Georgia, "Times New Roman", Times, serif; +} + +td.colLast div { + padding-top:0px; +} + + +td.colLast a { + padding-bottom:3px; +} +/* +Formatting effect styles +*/ +.sourceLineNo { + color:green; + padding:0 30px 0 0; +} +h1.hidden { + visibility:hidden; + overflow:hidden; + font-size:10px; +} +.block { + display:block; + margin:3px 10px 2px 0px; + color:#474747; +} +.deprecatedLabel, .descfrmTypeLabel, .memberNameLabel, .memberNameLink, +.overrideSpecifyLabel, .packageHierarchyLabel, .paramLabel, .returnLabel, +.seeLabel, .simpleTagLabel, .throwsLabel, .typeNameLabel, .typeNameLink { + font-weight:bold; +} +.deprecationComment, .emphasizedPhrase, .interfaceName { + font-style:italic; +} + +div.block div.block span.deprecationComment, div.block div.block span.emphasizedPhrase, +div.block div.block span.interfaceName { + font-style:normal; +} + +div.contentContainer ul.blockList li.blockList h2{ + padding-bottom:0px; +} diff --git a/binding/java/target/ip2region-1.4-javadoc.jar.asc b/binding/java/target/ip2region-1.4-javadoc.jar.asc new file mode 100644 index 0000000..a7ebbb5 --- /dev/null +++ b/binding/java/target/ip2region-1.4-javadoc.jar.asc @@ -0,0 +1,11 @@ +-----BEGIN PGP SIGNATURE----- +Version: GnuPG v1 + +iQEcBAABAgAGBQJZ7YCFAAoJELSsKBmaQiajakwIALxAokzZ4uRrL6IIO9er0gQ3 +k+uIW+dOpH/O0Xpem+wrl3JOq1HoeIfcW9lzj+wzbznhgpE7+0Yz2/XmI1yd+Ug6 +A5TmGzeb5Z2Mwbmw12gbfZI4VLQ70TzHS1BBDv9UsRKxHpo9MunVZ/DkhYMsT6Le +lLfepdOsy2WIo6GUJP5lTYO20QwQRx4IoFgLlSViIAdBDnVpuj75d2hnSpH7WijB +h0LPPOycyy7Rsy8TCAzPvh/U0e2W0m6FvM5tvkNDP0/PHEaQQ5Lw9MAHXHz/MWOS +vDvJ8fHt65MdsnDzJ6ev25XJ8xy5M1iS/bRbyVCHbPD59T18HZkJQLRDdXX4xiM= +=6kop +-----END PGP SIGNATURE----- diff --git a/binding/java/target/ip2region-1.4-sources.jar.asc b/binding/java/target/ip2region-1.4-sources.jar.asc new file mode 100644 index 0000000..37bc077 --- /dev/null +++ b/binding/java/target/ip2region-1.4-sources.jar.asc @@ -0,0 +1,11 @@ +-----BEGIN PGP SIGNATURE----- +Version: GnuPG v1 + +iQEcBAABAgAGBQJZ7YCFAAoJELSsKBmaQiajOTIH/iVcfGRpfdCMno60sjgygYtk +kvfk3gKyFjc+HDjoYBXF/aLQojC5SOBx0Xg9EqlZG3atq+sm+Hoz8O5cU/JjcwrU +fOBB8ca5b27n8tth6MQImlIirNd5+CbiOn8Ou5oL/AAwq0jZ+P1nOPx+TQ6l3Zmr +iLxrZ7enx9OQsIna4vjMz3Y+D30ViCHCALm8+yaypMTBBwxx93IPEONSE+F2Cha1 +4LBvtSUSK+51JMzH3W/d+u0uvdgazNc+wF1f7SAn4aDfbBEXMzjROTIqUh8a4qBX +zAAXwP49Lu4EU0zVH6A3UHgVcyPSBnhnohR9YlLxTR//TM45ef5rvOrLZH50st0= +=2gQ4 +-----END PGP SIGNATURE----- diff --git a/binding/java/target/ip2region-1.4.jar.asc b/binding/java/target/ip2region-1.4.jar.asc new file mode 100644 index 0000000..6d0818d --- /dev/null +++ b/binding/java/target/ip2region-1.4.jar.asc @@ -0,0 +1,11 @@ +-----BEGIN PGP SIGNATURE----- +Version: GnuPG v1 + +iQEcBAABAgAGBQJZ7YB+AAoJELSsKBmaQiajc1wIAJdid768yjVbMjeTvhZ8V9Sj +9NvaoeApXPceBi2bneHT+lvu+30bvbxEZ12ljfsqMC2lwFixiJvOZv/mCq1+Oqo1 +EAqSZZogQofXhr3KzgJNsTWr9raFhkbRS9qMK5P+Wfmqs14z55J1jW3axS2Da7OU +7cGdcOsnqoAY3mp59b3EuVlXx1kNXpbmRgqm/GMXHJcax67XfITmA3kXf6TdL9t7 +xnSt905Mrzk24ZGCt5fdJ9tDzH/JAspYHP4l9zzfeej9LxnflGXUSP9KMJSUyxrS +cyIveNfP4ulUwRX+68LwyEDiHsMx+NSnZUdbx487x1RaP8So1ufqQUvPZjYE76g= +=0a8X +-----END PGP SIGNATURE----- diff --git a/binding/java/target/ip2region-1.4.pom b/binding/java/target/ip2region-1.4.pom new file mode 100644 index 0000000..a4a7651 --- /dev/null +++ b/binding/java/target/ip2region-1.4.pom @@ -0,0 +1,190 @@ + + + 4.0.0 + + org.lionsoul + ip2region + 1.4 + jar + + ip2region + http://gitee.com/lionsoul/ip2region/ + Open source internel address locator + + + + The Apache Software License, Version 2.0 + http://www.apache.org/licenses/LICENSE-2.0.txt + repo + + + + + git@gitee.com:lionsoul/ip2region.git + scm:git:git@gitee.com:lionsoul/ip2region.git + scm:git:git@gitee.com:lionsoul/ip2region.git + + + + + lionsoul + chenxin + chenxin619315@gmail.com + + + + + http://gitee.com/lionsoul/ip2region/issues + gitee issues + + + + UTF-8 + UTF-8 + + + + + junit + junit + 3.8.1 + test + + + + + + + org.apache.maven.plugins + maven-source-plugin + 2.1.2 + + + attach-sources + package + + jar + + + + + + + org.apache.maven.plugins + maven-javadoc-plugin + 2.9 + + + attach-javadocs + package + + jar + + + ${javadoc.opts} + + + + + false + + + + + org.apache.maven.plugins + maven-shade-plugin + 1.4 + + + package + + shade + + + + + org.lionsoul.ip2region.test.TestSearcher + + + + + + + + + + + + java8-doclint-disabled + + [1.8,) + + + -Xdoclint:none + + + + release + + + + + org.apache.maven.plugins + maven-source-plugin + 2.2.1 + + + package + + jar-no-fork + + + + + + + org.apache.maven.plugins + maven-javadoc-plugin + 2.9.1 + + + package + + jar + + + ${javadoc.opts} + + + + + + + org.apache.maven.plugins + maven-gpg-plugin + 1.5 + + + verify + + sign + + + + + + + + + oss-parent + https://oss.sonatype.org/content/repositories/snapshots/ + + + oss-parent + https://oss.sonatype.org/service/local/staging/deploy/maven2/ + + + + + + diff --git a/binding/java/target/ip2region-1.4.pom.asc b/binding/java/target/ip2region-1.4.pom.asc new file mode 100644 index 0000000..8fc617b --- /dev/null +++ b/binding/java/target/ip2region-1.4.pom.asc @@ -0,0 +1,11 @@ +-----BEGIN PGP SIGNATURE----- +Version: GnuPG v1 + +iQEcBAABAgAGBQJZ7YCFAAoJELSsKBmaQiajwbMH/0iGhc7q2aSw1eQj1DlJLhex +IiXVTGD6i2HJhEm4t5UL2iG00p7Cm6v/dVLpi3GgtIEkK+2oOpTvlrrhlq3y7qri +epJ4PfRKoPHRUJeA1i06f13MODnLdIhUDN/IX3D3Wtrjx6l5fJWmAVdmTPba63Kh +rwxu7GeCA3kJeP4kVMOCaKFjW01mnHmYlPjpgWbfT67eLIcMDg65YWqQkK2UsZZY +w8QX/9Xq7LiyjMcRRemK1/bmGqpLxF2cZ6VQuZWOUQZ0bfSvBmvui8oooJrEQNQi +0o+HN8gVtzA4WfICFxZgZhNn+BviUmWPjJ39xfFOSFWytY91QPe4eQ4TBUKmDhY= +=5U47 +-----END PGP SIGNATURE----- diff --git a/binding/java/target/javadoc-bundle-options/javadoc-options-javadoc-resources.xml b/binding/java/target/javadoc-bundle-options/javadoc-options-javadoc-resources.xml new file mode 100644 index 0000000..8b89c97 --- /dev/null +++ b/binding/java/target/javadoc-bundle-options/javadoc-options-javadoc-resources.xml @@ -0,0 +1,10 @@ + + + + + + + + + src/main/javadoc + diff --git a/binding/java/target/javadoc-bundle-options/package-list b/binding/java/target/javadoc-bundle-options/package-list new file mode 100644 index 0000000..364356e --- /dev/null +++ b/binding/java/target/javadoc-bundle-options/package-list @@ -0,0 +1,209 @@ +java.applet +java.awt +java.awt.color +java.awt.datatransfer +java.awt.dnd +java.awt.event +java.awt.font +java.awt.geom +java.awt.im +java.awt.im.spi +java.awt.image +java.awt.image.renderable +java.awt.print +java.beans +java.beans.beancontext +java.io +java.lang +java.lang.annotation +java.lang.instrument +java.lang.invoke +java.lang.management +java.lang.ref +java.lang.reflect +java.math +java.net +java.nio +java.nio.channels +java.nio.channels.spi +java.nio.charset +java.nio.charset.spi +java.nio.file +java.nio.file.attribute +java.nio.file.spi +java.rmi +java.rmi.activation +java.rmi.dgc +java.rmi.registry +java.rmi.server +java.security +java.security.acl +java.security.cert +java.security.interfaces +java.security.spec +java.sql +java.text +java.text.spi +java.util +java.util.concurrent +java.util.concurrent.atomic +java.util.concurrent.locks +java.util.jar +java.util.logging +java.util.prefs +java.util.regex +java.util.spi +java.util.zip +javax.accessibility +javax.activation +javax.activity +javax.annotation +javax.annotation.processing +javax.crypto +javax.crypto.interfaces +javax.crypto.spec +javax.imageio +javax.imageio.event +javax.imageio.metadata +javax.imageio.plugins.bmp +javax.imageio.plugins.jpeg +javax.imageio.spi +javax.imageio.stream +javax.jws +javax.jws.soap +javax.lang.model +javax.lang.model.element +javax.lang.model.type +javax.lang.model.util +javax.management +javax.management.loading +javax.management.modelmbean +javax.management.monitor +javax.management.openmbean +javax.management.relation +javax.management.remote +javax.management.remote.rmi +javax.management.timer +javax.naming +javax.naming.directory +javax.naming.event +javax.naming.ldap +javax.naming.spi +javax.net +javax.net.ssl +javax.print +javax.print.attribute +javax.print.attribute.standard +javax.print.event +javax.rmi +javax.rmi.CORBA +javax.rmi.ssl +javax.script +javax.security.auth +javax.security.auth.callback +javax.security.auth.kerberos +javax.security.auth.login +javax.security.auth.spi +javax.security.auth.x500 +javax.security.cert +javax.security.sasl +javax.sound.midi +javax.sound.midi.spi +javax.sound.sampled +javax.sound.sampled.spi +javax.sql +javax.sql.rowset +javax.sql.rowset.serial +javax.sql.rowset.spi +javax.swing +javax.swing.border +javax.swing.colorchooser +javax.swing.event +javax.swing.filechooser +javax.swing.plaf +javax.swing.plaf.basic +javax.swing.plaf.metal +javax.swing.plaf.multi +javax.swing.plaf.nimbus +javax.swing.plaf.synth +javax.swing.table +javax.swing.text +javax.swing.text.html +javax.swing.text.html.parser +javax.swing.text.rtf +javax.swing.tree +javax.swing.undo +javax.tools +javax.transaction +javax.transaction.xa +javax.xml +javax.xml.bind +javax.xml.bind.annotation +javax.xml.bind.annotation.adapters +javax.xml.bind.attachment +javax.xml.bind.helpers +javax.xml.bind.util +javax.xml.crypto +javax.xml.crypto.dom +javax.xml.crypto.dsig +javax.xml.crypto.dsig.dom +javax.xml.crypto.dsig.keyinfo +javax.xml.crypto.dsig.spec +javax.xml.datatype +javax.xml.namespace +javax.xml.parsers +javax.xml.soap +javax.xml.stream +javax.xml.stream.events +javax.xml.stream.util +javax.xml.transform +javax.xml.transform.dom +javax.xml.transform.sax +javax.xml.transform.stax +javax.xml.transform.stream +javax.xml.validation +javax.xml.ws +javax.xml.ws.handler +javax.xml.ws.handler.soap +javax.xml.ws.http +javax.xml.ws.soap +javax.xml.ws.spi +javax.xml.ws.spi.http +javax.xml.ws.wsaddressing +javax.xml.xpath +org.ietf.jgss +org.omg.CORBA +org.omg.CORBA.DynAnyPackage +org.omg.CORBA.ORBPackage +org.omg.CORBA.TypeCodePackage +org.omg.CORBA.portable +org.omg.CORBA_2_3 +org.omg.CORBA_2_3.portable +org.omg.CosNaming +org.omg.CosNaming.NamingContextExtPackage +org.omg.CosNaming.NamingContextPackage +org.omg.Dynamic +org.omg.DynamicAny +org.omg.DynamicAny.DynAnyFactoryPackage +org.omg.DynamicAny.DynAnyPackage +org.omg.IOP +org.omg.IOP.CodecFactoryPackage +org.omg.IOP.CodecPackage +org.omg.Messaging +org.omg.PortableInterceptor +org.omg.PortableInterceptor.ORBInitInfoPackage +org.omg.PortableServer +org.omg.PortableServer.CurrentPackage +org.omg.PortableServer.POAManagerPackage +org.omg.PortableServer.POAPackage +org.omg.PortableServer.ServantLocatorPackage +org.omg.PortableServer.portable +org.omg.SendingContext +org.omg.stub.java.rmi +org.w3c.dom +org.w3c.dom.bootstrap +org.w3c.dom.events +org.w3c.dom.ls +org.xml.sax +org.xml.sax.ext +org.xml.sax.helpers \ No newline at end of file diff --git a/binding/java/target/maven-archiver/pom.properties b/binding/java/target/maven-archiver/pom.properties new file mode 100644 index 0000000..375e152 --- /dev/null +++ b/binding/java/target/maven-archiver/pom.properties @@ -0,0 +1,5 @@ +#Generated by Maven +#Mon Oct 23 13:38:20 CST 2017 +version=1.4 +groupId=org.lionsoul +artifactId=ip2region diff --git a/binding/java/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst b/binding/java/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst new file mode 100644 index 0000000..0382520 --- /dev/null +++ b/binding/java/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst @@ -0,0 +1,10 @@ +org/lionsoul/ip2region/DbMakerConfigException.class +org/lionsoul/ip2region/IndexBlock.class +org/lionsoul/ip2region/DbConfig.class +org/lionsoul/ip2region/test/TestUnit.class +org/lionsoul/ip2region/test/TestUtil.class +org/lionsoul/ip2region/DbSearcher.class +org/lionsoul/ip2region/DataBlock.class +org/lionsoul/ip2region/Util.class +org/lionsoul/ip2region/HeaderBlock.class +org/lionsoul/ip2region/test/TestSearcher.class diff --git a/binding/java/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst b/binding/java/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst new file mode 100644 index 0000000..daa0f16 --- /dev/null +++ b/binding/java/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst @@ -0,0 +1,10 @@ +/Code/java/JavaSE/ip2region/binding/java/src/main/java/org/lionsoul/ip2region/DbConfig.java +/Code/java/JavaSE/ip2region/binding/java/src/main/java/org/lionsoul/ip2region/test/TestUtil.java +/Code/java/JavaSE/ip2region/binding/java/src/main/java/org/lionsoul/ip2region/test/TestSearcher.java +/Code/java/JavaSE/ip2region/binding/java/src/main/java/org/lionsoul/ip2region/DataBlock.java +/Code/java/JavaSE/ip2region/binding/java/src/main/java/org/lionsoul/ip2region/DbMakerConfigException.java +/Code/java/JavaSE/ip2region/binding/java/src/main/java/org/lionsoul/ip2region/IndexBlock.java +/Code/java/JavaSE/ip2region/binding/java/src/main/java/org/lionsoul/ip2region/Util.java +/Code/java/JavaSE/ip2region/binding/java/src/main/java/org/lionsoul/ip2region/DbSearcher.java +/Code/java/JavaSE/ip2region/binding/java/src/main/java/org/lionsoul/ip2region/test/TestUnit.java +/Code/java/JavaSE/ip2region/binding/java/src/main/java/org/lionsoul/ip2region/HeaderBlock.java diff --git a/dbMaker-1.2.2.jar b/dbMaker-1.2.2.jar index d172541c89cb7094ce2bed8495cb30c97077e7b3..ba6857665feff4d20fc8465bd9a56a906c801aea 100644 GIT binary patch delta 5375 zcmY*d1y~eq*IsH7X=G`XTtey2rCFAxkrbpuVo8x)Lb`;dq`SLOQc6-l1w5>#a z#Q*)i|9!4&X6`d{p1ICE_nbL%?h4H+O#*dg49xogz&!xqv7N4R903bH`|UBaEfzBr z00891$$*hd(V|ijo7r>hm2xb)M+R9OaRAT7#RX-de(&7@XNupEu%{l&%UU#@8>$gJ z*Ks^6tt9-Dqp012YPjBJ$>_oe@55nB=3Bq{d@Qmou>Aj*6C0`4&JEdVp~o9>@R1_b0B~kp4R`ZxO=9n(Kd0@W%s1 zipGL@2OwxXe}NmCAn~6wJXca(YiIxf&h1PvDgccN^%ad389}JyqjyTe%6dOSjpREK zud?O@oajnPl69Jl^a|~o_24qq;z4qWr|?4Cso1I5`oqJO^{G9;?n-9J(X?jH3b0!x z#36byDeybh;ItVx1soWelb2m)q9{cP9Jrk7f=UUauTCEYv62?!6U=#3O1zX^@XPFx z-Z%{tb9rzoXG`*6PlE_JU>@M!Ei&RZOpfjXq4GqxlgHdGYfnB_`c7{$sTbzI%kRs%|Ux^Cd3EJG4re9M5hzCpKl z_P74{t9kCm(7TAcsP4?dun0-?Mt%A8b7>Fp6FY|%U3%gBAC&9uKDWRdOgZSv*YKFj z#Db6(4#RXvAadAvXc~VRru|r_?lDJoJl~|VhR_(XPj|rE0TrG1vOVj+yWI+4Wk@b$3+tCH|@|E^810#3BZE(oMsj zmMS|m#hcNwJ?zYx5%l~Y?(YHEv2PjP!AyOKn#F)13+Aq#y6ZQEa?+t4NT-B}V&PIt zy5ae>I_!Ngs>^5c;Js42dgP<-L`r%*2Z2c_m6?@5KZ@M4E4JVff4Os6#0A(j?^nPO z;;7$hw(RcQ0sd^(daaTcgfJbF39T;G;#elvjIx;2MKA?;y#^&l{pkHHOdDe@f0P4D z@RLIpzx00JpZ@DJaq?U{S@%Is3Qf556Md8kq=RBGT*o&40sCCwY*fCaLH!aLwZIW` z1??|kXdP=5ZsM^x!Pg(gU`BE>l*CtF}7=))S4jHNsyVu~S3o+OwHyU3*& zhk7mu(%U|&O|rA|&^!`R+BIdn-z~U0z*dLDzD-fZ>lJuE%U_int6}OVs>un`{pxEu zT;n%YJ(mWq_@iWQ2zR8=;zppK2}TH3EQR2Ch073Yu%YYH2?@qYr*{-vx!DzBSJX~U zec(ixeAZx}xWR)t&IvTNwxe?n@)s~%|DEpSyV-hfcingB=_(nU_5TRG<&Q;}SPh*3 z00^K40GRGF)PMyag#n~OQ>l9h97MzNz{&gmv~CC6?jFu%r4#dz*8bW~oheZz#$AF7 zzErKnyG?M^?Z$UEy_|&xr9(=Fl*5Lh)cv#3XPd z5QM3}wpx2>^(fE##>W$@I%o}ju$a91nN+vpqIt0Tr~Icf{S#J$`PSGH=(HrIMkuQm z=#kz=+!GJrqu5V~Q$kFHS^@hWQ7W~f?y`cMLB5h(ykR2veHu^B7lHM7Wc9_AWLy23 z&T&J!+iO1Xjcug~aUy!s{bJ(AXcdMLB|g51II6}9cyol;Z*yl3j-qz;f$KRb0@oy* zF1Nj^2=|0DT)+n^@v~vqXCf(~Lx}c|dX@!UsomSb6+9a_DZ@@F`t5utb`ZbL%V$;) zdxz*HKcPk3e^&RwZGPM?Z$z^M@-;R9z)J`Ku-vT=J}VKb2t%qLpAnky zYJo@GQn8y57KIcB6o>Js0}vx}-4y`oGQv=FW{Y4vqeR()`QTP>pINyC54?x_Rhp{y zbKy}mzgSFu6>HsLb|{JR#NZ?&J?kih*b1gmMTo+H_OGbO@GYu);)j4GPePYPshj)C zx8Uq>9X-3JvMSy9I0NI~Hfw55Kfzli1dLK7AZ*g?(6FqEr@GXR4bI5kigHil2__|I zG#O{++f2J5-j2vKlsQVv;W~X$k!hmka3B(a{XWy zuAHiJ*q1qZ9Bgo9%cJIV7Y@jdj&egHUvF;HJ5l4xS4<=ldo9dWl3L*Y_m##rJe&eQ zhw1u9EW1+nOO>N7FJh3rF1`&K#YwGcG77nTR=snBFo75NO$?KHi3SH3rA|Ke&oT}Y zV_@nFthz(d#5kjir+%S(e!Uf(t4h)>@7yk?K{$us3j z9F0@)1vY%dn>5_j((f<%6b{!7N+iUmzd^-XU^SYC1^48Du|_-x;6ix1)O?RptNk+Q zYC6Bv^J@>cG2ekGN{fQqIkjSM5Az<(I>TM#2{m|fKOlTzu`t}Q*=!DQ zu#yo#AIkYDh7j4-*AGc@+PKW^ap@2`!1ggSBehl$-k$f&1f{fg|6nM*w@GWh6#A(Q z;cES2DOJ}Vx`7Lchiscw@E9AGB^lVnRdda9!5x+ew&M=l(543}1a}93s|{@g%3-_; z?gctC%BA$4Uyn9k!~L08$3;PNX9fi>%7KEf-0Rg%c9C5KU@oCS5IdG>IgiGQMX^uV ziB->L8zjfWDHh*UiE$N_^KqsO$eEorGq3Ri26i8KWC|bwwzw}*RJa;Wa*bb{C7lqp zVQTTP!~I580i?c;RwQ{^A2M2%e()u;NSJH{hcAIc6Y#g6qd zeUP)tMgGW*&E_3-`jA_tv$Y*_ej@&fp;Yaj9@dY_{79F)WRxGb7!&~}Xqm93Ay>F`J z{DiV5Rs@IavW}Z}$8)UWz7iiEYNACkbJQWuk(uvzd-S70EE3%>CUy3Zz|Xv^@p<-( zmPqBabrlJ_ty2hj+EGkvz(XWoL8Os6#!rQ#00+4}h(Ciwee{=WLhmtO>p32WJZuS% zMgs#65;fCL!9O{)9=o4P_FZcY6nz}l4~I`gK>7kgecmt8jLX|BEJ>7vQ{ds7*UBYl zBEvXR6Xx|ga|?#4Ra(bLP^70~sV{pM&jd z!ISZUKrO4RiB@EpRYcj3Y~_CTcs4_raEK+I#0{=0p?-)IK{OiNK7&5nk!}e1q*sS) zTrMZPUD91QZkOsp;b;rBLG>7kbuF7vQ*mx3Ai1G8vo1_mZs+zz<7yKpwDpob9UJax zTzxYmdQA!D*pYtaQ#9KjK;u0<-uKkXxdN`Ax_6x=7M_WBGP1sRQ-T_&_@p41YO72v zZ&i|{=~9ffMBG);OkDi3A)l6#N&gav3 z%)u^VN1cn4@3Rnl6q04gXP0)|z%#=jG&Uk8{hLMZ_sxjv>ys>-05MAzAE%;VJ6p6} z(v}$xn(abG|M%aqPbJZI9iyA+o4qlcPc6O5j~grZ5yyfhu957MPF+>z8rxhl2%Zu& zz{2ukllr!-N>2{(soFMjZ@<)nkY@Zc_KMskd2ob@co#-Oi*SES&(!2l@2z6hAE(o= zMAyC*w&3xrK4*`0T6L}n>EYh-`JLg0v6N6WOVE3Hq<_u6pwcF(n?9ydq2eqHKdvJx z>I!2wUUDK^A=LajSd)M&;gyp{iB39KB9S+{1VaNmHRWV&Blrys=(H+1AZidCnx`+u z?wHh!tYhLUU0^Ur*Up+jmD6}p4AG_@Apfaoe+!z9i*Q^JN|F|aY}R_#6U~N&RYR>i zPCzff6dzMXxQ`$uC6(_X+|TPt6C?x4S)1%0rF&bg?fgCmby6iAel!ye#j{$@OAigv zr*!3AqtxcIIf|56lKUWOYJv|eNS*-^2Mfx+?8X(Z8F({J-8gOrMFcyHs=KvRcLXrc z(Y>m<4in5|WwiNCKOACpgsO(t?EOW}Q33|+k*Iw;!yvoSgANZE0>cihL_B+*Z zd^Yj&Z=s`Z>-Y7_kPv`+x_FUDXI(vD zAi6htL?tZ^7xb)$`K{;y>YAMfluVg0Kbi5Ju#qxlC_6?AflPSkUH_B!qo4SX8qs6T zJ!4T4jZd*S-|<$s+Z5R9zPlTheNu0Ki{~2xTP!+tr5vb-7V};+e&v0y!$pauN(w#@ z_M{S7nxFYdXtUaUFt)HKH?TPH6d3)wu@Xz-q6VS_D`5mdY3yt6Uz*2xs+J>S z1j_mNZ$xN=YPKYf(mzIGtncO-A>Z)wUk6ISyThcBlJ~V1qCXpxU|*GOyUkX9ReW%z z0pRsa4a_CUa{7tCRL1Z;&5PCzLyzt~wCpMLSld73H_kB9I5XQqh~>?;yk}r-TQQuj zV?`}uCU!Z+zm%!(tnim&!hF~vNlc_m20!yPCSO}q?otojc<{W>-kALiCH!>1d~v8s z{+vGvw_Of0Ds)Eg;%5owTK91k3$C3*=XOybr*Vla+PB}zC&=6g`ur*Y!Xpfcm=8K4S@NQ^bG6Y?-GHH z<)k4BK`)HtcIJJ