Greasy Fork is available in English.

AutoLink UBA

Wandelt ISBNs in Links auf den Katalog der UBA um und ermittelt, ob die Bücher in der Bibliothek vorhanden sind.

Stan na 05-02-2018. Zobacz najnowsza wersja.

// ==UserScript==
// @name          AutoLink UBA
// @namespace     http://www.tempelb.de/
// @author     Bernhard Tempel
// @description   Wandelt ISBNs in Links auf den Katalog der UBA um und ermittelt, ob die Bücher in der Bibliothek vorhanden sind.
// @grant    GM_getValue
// @grant    GM_setValue
// @grant    GM_deleteValue
// @grant    GM_registerMenuCommand
// @grant    GM_xmlhttpRequest
// @grant    GM_openInTab
// @include *
// @include file://*
// @include http://*
// @include https://*
// @exclude http://opac.bibliothek.uni-augsburg.de/*
// @exclude https://opac.bibliothek.uni-augsburg.de/*

// @version 0.25.201608290902
// ==/UserScript==

/*
Compiled by Bernhard Tempel (bernhard.tempel//at//freenet.de).  adapted by UB Augsburg

2016-08-29 / 0.25beta


Inspired by and based on following scripts:

* Autolink by Jesse Ruderman (http://www.squarefree.com/2005/05/22/autolink/)
* isbnjs - An ISBN JavaScript Library by hetappi.pm (code completely included)
* Edward Vielmetti's Greasemonkey script for inserting library holdings information into Google Book Search (http://vielmetti.typepad.com/superpatron/2006/02/inserting_libra.html) and derived scripts
* http://userscripts.org/scripts/review/20145
*/

// Anzahl der ISBNs auf einer Seite, die ohne Rückfrage am Katalog geprüft werden
var maxisbns = 50;

/* Auswahl der Bibliothek per Menü ermöglichen
   Default ist: TIB.
*/

if (GM_getValue("libraryName") == undefined){ GM_setValue("libraryName", "UBA"); }
if (GM_getValue("libraryName") == "TIB"){ GM_setValue("libraryName", "UBA"); }

/* Zur Anpassung des Skripts für Kataloge weiterer Bibliothek,
   ist der folgende Block anzupassen (Menüregistrierung und Variablen) */

function registerTIBUB() {
    GM_setValue("libraryName", "TIB");
    alert(GM_getValue("libraryName") + " ausgewählt");
}
GM_registerMenuCommand( "TIB", registerTIBUB);

function registerUBA() {
    GM_setValue("libraryName", "UBA");
    alert(GM_getValue("libraryName") + " ausgewählt");
}
GM_registerMenuCommand( "UBA", registerUBA);    

switch(GM_getValue("libraryName"))
    {
    case 'TIB':
//// Für Abfrage im Picaplus-Format (Parsing der Signatur einfacher)
	//libraryUrlPatternA = "http://opac.tib.eu/DB=1/LNG=DU/CMD?ACT=SRCHA&PRS=PP%7F&TRM=(not+lcd+eblpda)+and+num+";
// Für Einfügen des Links auf den Katalog
	//libraryUrlPatternB = "http://opac.tib.eu/DB=1/LNG=DU/CMD?ACT=SRCHA&IKT=1016&SRT=YOP&TRM=num+";
// Name der Bibliothek (möglichst kurz, wird u.a. hinter ISBNs in die Webseiten geschrieben
//	libraryName = GM_getValue("libraryName");
// String zum Erkennen einer Kurzliste als Ergebnis der Abfrage (in diesem Fall wird keine Signatur ausgelesen);
//	libraryAvailability = /\d+ von \d+/;
// String zum Parsen der Signatur
	//libraryShelfmark = /<TD>209A\/\d\d<\/TD><TD>.*?\$a([^$<]*)/i;
// String zum Parsen des Standorts
	//libraryLocation = /<TD>209A\/\d\d<\/TD><TD>.*?\$f([^$<]*)/i;
// String zum Erkennen eines Nulltreffer-Ergebnisses
//	notFound = /Es wurde nichts gefunden/;
	//break;

   

case 'UBA':
    libraryUrlPatternA = "https://opac.bibliothek.uni-augsburg.de/TouchPoint/start.do?View=uba&Language=de&MediaQuery=490=%22";
    libraryUrlPatternA2 = "%22%20IN%20[2]";
    libraryUrlPatternB = "https://opac.bibliothek.uni-augsburg.de/TouchPoint/start.do?View=uba&Language=de&MediaQuery=490=%22";
    libraryUrlPatternB2 = "%22%20IN%20[2]";
    libraryName = GM_getValue("libraryName");
    libraryAvailability = /UB Augsburg \(\d+(\/\d+)?\)/;
    libraryShelfmark = /\/cgi-bin\/uba-cgi\/lageplan\/sto\?SIGN=(.*?)"/i;
    libraryLocation = /\/qrcode\/\?size=150x150&data=.*?\|(.*?)\|/i;
    notFound = /Ihre Suche erzielte keine Treffer/;
    break;    
    }


// Linkersetzung
//
// Da Autolink keine Links verarbeitet, muessen Links,
// die eine ISBN enthalten, zunaechst durch ihren Linktext
// ersetzt werden. Pruefung auf Validitaet der ISBN kann an
// dieser Stelle noch unterbleiben.

// Regexp zur Ermittlung moeglicher ISBN-Kandidaten
// (zuerst Prüfung auf ISBN13 anschließend auf ISBN10
var patternISBN = /(97[89][\- ]?[\d\- ]{9,11}[\- ]?[\dxX]|[\d][\- \d]{8,10}[\- ]?[\- ]?[\dxX])/;

var allLinks = document.getElementsByTagName("a");
// alert(allLinks.length); // Fuer Debugging: Ausgabe Anzahl Links

var link = "";

for (var i = allLinks.length - 1; i >=0; i--)
    {
	link = allLinks[i];
	if (patternISBN.exec(link.textContent)){
	    // Linkersetzung
	    link.parentNode.replaceChild(document.createTextNode(link.textContent), link);

	    // // Alternativ zur Linkersetzung: Einfügen eines zusätzlichen Links
	    // link.parentNode.appendChild(document.createTextNode(link.textContent), link);
	}
    }
//
// Ende vorsorgliche Linkersetzung
//

var page = '';
var counter = 0;

const timeBefore = new Date();

/***********************************
 *             Filters             *
 ***********************************/

// This functions takes a string containing
// a candidate for ISBN (ISBN-10 or ISBN-13) and returns
// true if it's valid or false if it's invalid.

function validateISBN(isbn) {
    var isbnTest = ISBN.parse(isbn);
    if (isbnTest == null){
	return false;
    }
    if (isbnTest.isIsbn10()){
	return true;
    }
    else if (isbnTest.isIsbn13()){
	return true;
    }
    return false;
}

// No change of Autolink algorithm although only one filter needed

const filters = [
    {
	name: "ISBN --> TIB",
	regexp: /\b(97[89][\- ]?[\d\- ]{9,11}[\- ]?[\dxX]|[\d][\- \d]{8,10}[\- ]?[\- ]?[\dxX])/g,
	href: function(match) {
	    var isbx = alphanumerics(match[1]);
	    if (validateISBN(isbx) == true) {
		   if (libraryName == "ULB Muenster" || libraryName == "UBA") {
		      return libraryUrlPatternB + ISBN.asIsbn13(alphanumerics(match[1])) + libraryUrlPatternB2; }
		   else {
		      return libraryUrlPatternB + ISBN.asIsbn13(alphanumerics(match[1])) + "+or+" + ISBN.asIsbn10(alphanumerics(match[1])) + "&sourceid=autolink_tibub_tempelb"; }
	    }
	}
    }
];

/***********************************
 *  Helper function for filters   *
 ***********************************/

function alphanumerics(s)
{
    return s.replace(/[^0-9a-z]/ig, "");
}

/***********************************
 *           Link styling          *
 ***********************************/

/*

  You can make links generated by AutoLink look different from normal links
  by editing styleLink below and/or by setting up user style sheet rules.

  Example: on squarefree.com, make autolinked plain text links orange. (Firefox trunk only.)

  @-moz-document domain(squarefree.com) {
  .autolink-plain-text-link { color: orange ! important; }
  }

*/

function styleLink(a, filter, color)
{
    a.style.border = "1px solid " + color;
    a.style.padding ="1px";
    a.target = "_blank";
}

/***********************************
 *           Fix filters           *
 ***********************************/

function fixFilters()
{
    var i, r;
    for (i = 0; r = filters[i]; ++i) {
	// lowercase, and replace each run of non-alphanumerics with a single hyphen
	r.classNamePart = r.name.toLowerCase().replace(/[^0-9a-z]+/ig, "-");
	if(!r.regexp.global)
	    alert("AutoLink-Filter " + r.name + " ist nicht als global definiert! Das gibt Probleme!!!");
    }
}
fixFilters();

/***********************************
 *      When and where to run      *
 ***********************************/

var moddingDOM = false;

window.addEventListener("load", init, false);
function init(rightaway)
{
    document.addEventListener("DOMNodeInserted", nodeInserted, false);
    if (rightaway)
	go(document.body);
    else
	window.setTimeout(go, 100, document.body);
}

// This makes it work at Gmail.
// 20% performance penalty on a plain text file with a link on almost every line.
// Tiny performance penalty on pages with few automatically added links.
function nodeInserted(e)
{
    // our own modifications should not trigger this.
    // (we don't want our regular expression objects getting confused)
    // (we want better control over when we recurse)

    //GM_log("Inserted: " + e.target);

    if (!moddingDOM && e.target.nodeType != 3)
	go(e.target);
}

/***********************************
 *          DOM traversal          *
 ***********************************/

/*

  This script uses manual DOM traversal, in an iterative way without a stack!

  Advantages of snapshot XPath:
  * Much less code
  * 20-40% faster
  * May be possible to get another speed boost by including the regexp in the XPath expression - http://www.developer.com/xml/article.php/10929_3344421_3
  * All the cool people are using it

  Advantages of manual DOM traversal:
  * Lets us stop+continue (snapshot xpath doesn't let us)
  * Lets us modify DOM in strange ways without worrying.
  * Easier to control which elements we recurse into.

  */


// Ignore all children of these elements.
const skippedElements = {
    a:        true, // keeps us from screwing with existing links. keeps us from recursing to death :)
    noscript: true, // noscript has uninterpreted, unshown text children; don't waste time+sanity there.
    head:     true,
    script:   true,
    style:    true,
    textarea: true,
    label:    true,
    select:   true,
    button:   true
};

const gmail = (window.location.host == "gmail.google.com");

function skipChildren(node)
{
    if (node.tagName)  // !
	{
	    if (skippedElements[node.tagName.toLowerCase()]) {
		return true;
	    }

	    if (gmail) {
		if (node.className == "ac") // gmail autocomplete (fake dropdown)
		    return true;
		if (node.className == "ilc sxs") // invite foo to gmail (fake link/button)
		    return true;
	    }
	}

    return false;
}

function go(traversalRoot)
{
    /* some documents don't have document.body - such as XML documents */
    /*    if (traversalRoot == null)
	  return;
    */
    var m;

    // Ensure we're not already in a forbidden element.
    for (m = traversalRoot; m != undefined; m = m.parentNode) {
	if (!m || skipChildren(m)) {
	    return;
	}
    }

    // work around bug, or in case previous user scripts did crazy stuff
    traversalRoot.normalize();

    function cont(n, didChildren)
    {
	var k = 0; // split work into chunks so Firefox doesn't freeze
	var q;

	while (n && k < 100)
	    {
		++k;

		// Do stuff at this node
		if (!didChildren && n.nodeType == 3) {
		    if((q = runFiltersOnTextNode(n))) {
			n = q[0];

			// if there were changes, run filters again on the new text node that's here
			if (q[1])
			    continue;
		    }
		}

		// Traverse to the "next" node in depth-first order

		if (!n.firstChild)
		    didChildren = true;

		if (didChildren && n == traversalRoot)
		    break;
		else if (!didChildren && n.firstChild && !skipChildren(n)) {
		    n = n.firstChild;
		    // didChildren is already false and should stay false
		}
		else {
		    if (n.nextSibling) {
			n = n.nextSibling;
			didChildren = false;
		    }
		    else {
			n = n.parentNode;
			didChildren = true;
		    }
		}
	    } // end while

	if (!n) {
	    //GM_log("Odd. traversalRoot was " + traversalRoot);
	}
	else if (n == traversalRoot) {
	    //GM_log("Done");
	    //alert("AutoLink time: " + (new Date() - timeBefore))
	}
	else {
	    // Continue after 10ms.
	    //GM_log("will have to continue");
	    setTimeout(cont, 10, n, didChildren);
	}

    } // end function cont

    cont(traversalRoot, false);
}

/***********************************
 *         Running filters         *
 ***********************************/

// runFiltersOnTextNode
// Return: node at which to continue traversal, or |null| to mean no changes were made.

function runFiltersOnTextNode(node)
{
    function genLink(filter, match)
    {
	try {
	    return filter.href(match);
	}
	catch(er) {
	    return "data:text/plain,Error running AutoLink function for filter: " + encodeURIComponent(filter.name) + "%0A%0A" + encodeURIComponent(er);
	}
    }

    // Too many variables.  Good hint that I need to split this function up :P
    var source, j, regexp, match, lastLastIndex, k, filter, href, anyChanges; // things
    var used, unused, firstUnused, lastUnused, a, parent, nextSibling; // nodes

    source = node.data;

    anyChanges = false;

    // runFiltersOnTextNode has its own do-too-much-at-once avoider thingie.
    // assumption: if there is one text node with a lot of matches,
    // it's more important to finish quickly than be transparent.
    // (e.g. plain text file FULL of links)
    // assumption: 40 * 100 = 140.
    k=0;

    for (j = 0; filter = filters[j]; ++j) {
	regexp = filter.regexp;

	if (regexp.test(source)) {

	    parent = node.parentNode;
	    nextSibling = node.nextSibling;

	    regexp.lastIndex = 0;
	    firstUnused = null;

	    // Optimization from the linkify that came with Greasemonkey(?):
	    // instead of splitting a text node multiple times, take advantage
	    // of global regexps and substring.

	    for (match = null, lastLastIndex = 0; k < 40 && (match = regexp.exec(source)); ) {

		href = genLink(filter, match);

		if (href != null && href != location.href) {
		    ++k;
		    unused = document.createTextNode(source.substring(lastLastIndex, match.index));
		    if (!anyChanges) {
			anyChanges = true;
			parent.removeChild(node);
			firstUnused = unused;
			moddingDOM = true;
		    }
		    parent.insertBefore(unused, nextSibling);

		    // Abfrage am Katalog der TIB

		    var isbnx = alphanumerics(match[0]);
		    counter++;
		    if (counter == maxisbns +1){
			var check = confirm("Die Seite scheint viele ISBNs zu enthalten.\nEs werden " + maxisbns + " ISBNs am Katalog geprüft.\nBestätigen Sie mit \"ok\", wenn das Skript\nohne Beschränkung weiterlaufen soll.");
			if (!check){
			    exit();
			}
		    }

		    libraryUrlLookup = libraryUrlPatternA + "(" + ISBN.asIsbn10(isbnx) + "+OR+" + ISBN.asIsbn13(isbnx) + ")";
		    if (libraryName == "ULB Muenster" || libraryName == "UBA") {
			   libraryUrlLookup = libraryUrlPatternA + ISBN.asIsbn13(isbnx) + libraryUrlPatternA2;
		    }
		    GM_xmlhttpRequest
			({
			    method:'GET',
			    url: libraryUrlLookup,
				onload:function(results)
				{
				    var page = results.responseText;
                    var location, signatur, sst;

				    if ( notFound.test(page) )
				    {
					used = document.createTextNode(isbnx + ' FEHLT ' + libraryName);
					a = document.createElement("a");
					a.href = href;
					a.title = "Link eingesetzt von Autolink_TIB/UB";
					a.className = "autolink autolink-" + filter.classNamePart;

					styleLink(a, filter, "red");

					a.appendChild(used);
					parent.insertBefore(a, nextSibling);
				    }
				    else if ( libraryAvailability.test(page) ) {
					   if (libraryLocation == "") { }
 					else {
					   location = libraryLocation.exec(page);
					}
					signatur = libraryShelfmark.exec(page);
					if (signatur) {
                       if (location) {
					      sst = location[1] + " ";
					   }
					   else {
                          sst = "";
					   }
					   shelfmark = libraryName + "+ " + sst + signatur[1];
					}
					else {
					   shelfmark = libraryName + "+";
					}
					used = document.createTextNode(isbnx + ' ' + shelfmark);
					a = document.createElement("a");
					a.href = href;
					a.title = "Link eingesetzt von Autolink_TIB/UB";
					a.className = "autolink autolink-" + filter.classNamePart;
					styleLink(a, filter, "blue");
					a.appendChild(used);
					parent.insertBefore(a, nextSibling);
				    }
				    else
				    {
					alert(isbnx + "Sonstiger Fehler?!");
				    }
				}
			});
		    lastLastIndex = regexp.lastIndex;
		    if (anyChanges) {
			lastUnused = document.createTextNode(source.substring(lastLastIndex));
			parent.insertBefore(lastUnused, nextSibling);
			moddingDOM = false;
			return [firstUnused, true];
		    }
		    return [node, false];
		}
	    }
	}
    }
    return null;
}

//
// isbn.js
//
// The MIT License
// Copyright (c) 2007, 2010 hetappi <hetappi.pm (a) gmail.com>
//

var ISBN;
(function () {
    ISBN  = {
	VERSION: '0.01',
	GROUPS: {
	    '0': {
		'name': 'English speaking area',
		'ranges': [['00', '19'], ['200', '699'], ['7000', '8499'], ['85000', '89999'], ['900000', '949999'], ['9500000', '9999999']]
	    },
	    '1': {
		'name': 'English speaking area',
		'ranges': [['00', '09'], ['100', '399'], ['4000', '5499'], ['55000', '86979'], ['869800', '998999']]
	    },
	    '4': {
		'name': 'Japan',
		'ranges': [['00','19'], ['200','699'], ['7000','8499'], ['85000','89999'], ['900000','949999'], ['9500000','9999999']]
	    }
	},

	isbn: function () {
	    this.initialize.apply(this, arguments);
	},

	parse: function(val, groups) {
	    var me = new ISBN.isbn(val, groups ? groups : ISBN.GROUPS);
	    return me.isValid() ? me : null;
	},

	hyphenate: function(val) {
	    var me = ISBN.parse(val);
	    return me ? me.isIsbn13() ? me.asIsbn13(true) : me.asIsbn10(true) : null;
	},

	asIsbn13: function(val, hyphen) {
	    var me = ISBN.parse(val);
	    return me ? me.asIsbn13(hyphen) : null;
	},

	asIsbn10: function(val, hyphen) {
	    var me = ISBN.parse(val);
	    return me ? me.asIsbn10(hyphen) : null;
	}
    };

    ISBN.isbn.prototype = {
	isValid: function() {
	    return this.codes && this.codes.isValid;
	},

	isIsbn13: function() {
	    return this.isValid() && this.codes.isIsbn13;
	},

	isIsbn10: function() {
	    return this.isValid() && this.codes.isIsbn10;
	},

	asIsbn10: function(hyphen) {
	    return this.isValid() ? hyphen ? this.codes.isbn10h : this.codes.isbn10 : null;
	},

	asIsbn13: function(hyphen) {
	    return this.isValid() ? hyphen ? this.codes.isbn13h : this.codes.isbn13 : null;
	},

	initialize: function(val, groups) {
	    this.groups = groups;
	    this.codes = this.parse(val);
	},

	merge: function(lobj, robj) {
	    var key;
	    if (!lobj || !robj) {
		return null;
	    }
	    for (key in robj) {
		if (robj.hasOwnProperty(key)) {
		    lobj[key] = robj[key];
		}
	    }
	    return lobj;
	},

	parse: function(val) {
	    var ret;
	    // correct for misplaced hyphens
	    // val = val.replace(/ -/,'');
	    ret =
	    val.match(/^\d{9}[\dX]$/) ?
	    this.fill(
		      this.merge({source: val, isValid: true, isIsbn10: true, isIsbn13: false}, this.split(val))) :
	    val.length === 13 && val.match(/^(\d+)-(\d+)-(\d+)-([\dX])$/) ?
	    this.fill({
		    source: val, isValid: true, isIsbn10: true, isIsbn13: false, group: RegExp.$1, publisher: RegExp.$2,
		    article: RegExp.$3, check: RegExp.$4}) :
	    val.match(/^(978|979)(\d{9}[\dX]$)/) ?
	    this.fill(
		      this.merge({source: val, isValid: true, isIsbn10: false, isIsbn13: true, prefix: RegExp.$1},
				 this.split(RegExp.$2))) :
	    val.length === 17 && val.match(/^(978|979)-(\d+)-(\d+)-(\d+)-([\dX])$/) ?
	    this.fill({
		    source: val, isValid: true, isIsbn10: false, isIsbn13: true, prefix: RegExp.$1, group: RegExp.$2,
		    publisher: RegExp.$3, article: RegExp.$4, check: RegExp.$5}) :
	    null;

	    if (!ret) {
		return {source: val, isValid: false};
	    }

	    return this.merge(ret, {isValid: ret.check === (ret.isIsbn13 ? ret.check13 : ret.check10)});
	},

	split: function(isbn) {
	    return (
		    !isbn ?
		    null :
		    isbn.length === 13 ?
		    this.merge(this.split(isbn.substr(3)), {prefix: isbn.substr(0, 3)}) :
		    isbn.length === 10 ?
		    this.splitToObject(isbn) :
		    null);
	},

	splitToArray: function(isbn10) {
	    var rec, key, rest, i, m;
	    rec = this.getGroupRecord(isbn10);
	    if (!rec) {
		return null;
	    }

	    for (key, i = 0, m = rec.record.ranges.length; i < m; i += 1) {
		key = rec.rest.substr(0, rec.record.ranges[i][0].length);
		if (rec.record.ranges[i][0] <= key && rec.record.ranges[i][1] >= key) {
		    rest = rec.rest.substr(key.length);
		    return [rec.group, key, rest.substr(0, rest.length - 1), rest.charAt(rest.length - 1)];
		}
	    }
	    return null;
	},

	splitToObject: function(isbn10) {
	    var a = this.splitToArray(isbn10);
	    if (!a || a.length !== 4) {
		return null;
	    }
	    return {group: a[0], publisher: a[1], article: a[2], check: a[3]};
	},

	fill: function(codes) {
	    var rec, prefix, ck10, ck13, parts13, parts10;

	    if (!codes) {
		return null;
	    }

	    rec = this.groups[codes.group];
	    if (!rec) {
		return null;
	    }

	    prefix = codes.prefix ? codes.prefix : '978';
	    ck10 = this.calcCheckDigit([
					codes.group, codes.publisher, codes.article].join(''));
	    if (!ck10) {
		return null;
	    }

	    ck13 = this.calcCheckDigit([prefix, codes.group, codes.publisher, codes.article].join(''));
	    if (!ck13) {
		return null;
	    }

	    parts13 = [prefix, codes.group, codes.publisher, codes.article, ck13];
	    this.merge(codes, {
		    isbn13: parts13.join(''),
			isbn13h: parts13.join('-'),
			check10: ck10,
			check13: ck13,
			groupname: rec.name
			});

	    if (prefix === '978') {
		parts10 = [codes.group, codes.publisher, codes.article, ck10];
		this.merge(codes, {isbn10: parts10.join(''), isbn10h: parts10.join('-')});
	    }

	    return codes;
	},

	getGroupRecord: function(isbn10) {
	    var key;
	    for (key in this.groups) {
		if (isbn10.match('^' + key + '(.+)')) {
		    return {group: key, record: this.groups[key], rest: RegExp.$1};
		}
	    }
	    return null;
	},

	calcCheckDigit: function(isbn) {
	    var c, n;
	    if (isbn.match(/^\d{9}[\dX]?$/)) {
		c = 0;
		for (n = 0; n < 9; n += 1) {
		    c += (10 - n) * isbn.charAt(n);
		}
		c = (11 - c % 11) % 11;
		return c === 10 ? 'X' : String(c);

	    } else if (isbn.match(/(?:978|979)\d{9}[\dX]?/)) {
		c = 0;
		for (n = 0; n < 12; n += 2) {
		    c += Number(isbn.charAt(n)) + 3 * isbn.charAt(n + 1);
		}
		return String((10 - c % 10) % 10);
	    }

	    return null;
	}
    };
}());

// referred: http://www.isbn-international.org/converter/ranges.htm
// frequently, you need to update the following table. what a nice specification!
// isbn-groups.js
// generated by mkgroups.pl

var ISBN = ISBN || {};
(function () {

// referred: http://www.isbn-international.org/converter/ranges.htm
// frequently, you need to update the following table. what a nice specification!
    ISBN.GROUPS_VERSION = '20090504';
    ISBN.GROUPS = {
	"0": {
	    "name": "English speaking area",
	    "ranges": [["00", "19"], ["200", "699"], ["7000", "8499"], ["85000", "89999"], ["900000", "949999"], ["9500000", "9999999"]]
	},
	"1": {
	    "name": "English speaking area",
	    "ranges": [["00", "09"], ["100", "399"], ["4000", "5499"], ["55000", "86979"], ["869800", "998999"]]
	},
	"2": {
	    "name": "French speaking area",
	    "ranges": [["00", "19"], ["200", "349"], ["35000", "39999"], ["400", "699"], ["7000", "8399"], ["84000", "89999"], ["900000", "949999"], ["9500000", "9999999"]]
	},
	"3": {
	    "name": "German speaking area",
	    "ranges": [["00", "02"], ["030", "033"], ["0340", "0369"], ["03700", "03999"], ["04", "19"], ["200", "699"], ["7000", "8499"], ["85000", "89999"], ["900000", "949999"], ["9500000", "9539999"], ["95400", "96999"], ["9700000", "9899999"], ["99000", "99499"], ["99500", "99999"]]
	},
	"4": {
	    "name": "Japan",
	    "ranges": [["00", "19"], ["200", "699"], ["7000", "8499"], ["85000", "89999"], ["900000", "949999"], ["9500000", "9999999"]]
	},
	"5": {
	    "name": "Russian Federation",
	    "ranges": [["00", "19"], ["200", "420"], ["4210", "4299"], ["430", "430"], ["4310", "4399"], ["440", "440"], ["4410", "4499"], ["450", "699"], ["7000", "8499"], ["85000", "89999"], ["900000", "909999"], ["91000", "91999"], ["9200", "9299"], ["93000", "94999"], ["9500", "9799"], ["98000", "98999"], ["9900000", "9909999"], ["9910", "9999"]]
	},
	"600": {
	    "name": "Iran",
	    "ranges": [["00", "09"], ["100", "499"], ["5000", "8999"], ["90000", "99999"]]
	},
	"601": {
	    "name": "Kazakhstan",
	    "ranges": [["00", "19"], ["200", "699"], ["7000", "7999"], ["80000", "84999"], ["85", "99"]]
	},
	"602": {
	    "name": "Indonesia",
	    "ranges": [["00", "19"], ["200", "799"], ["8000", "9499"], ["95000", "99999"]]
	},
	"603": {
	    "name": "Saudi Arabia",
	    "ranges": [["00", "04"], ["500", "799"], ["8000", "8999"], ["90000", "99999"]]
	},
	"604": {
	    "name": "Vietnam",
	    "ranges": [["0", "4"], ["50", "89"], ["900", "979"], ["9800", "9999"]]
	},
	"605": {
	    "name": "Turkey",
	    "ranges": [["00", "09"], ["100", "399"], ["4000", "5999"], ["60000", "89999"]]
	},
	"606": {
	    "name": "Romania",
	    "ranges": [["0", "0"], ["10", "49"], ["500", "799"], ["8000", "9199"], ["92000", "99999"]]
	},
	"607": {
	    "name": "Mexico",
	    "ranges": [["00", "39"], ["400", "749"], ["7500", "9499"], ["95000", "99999"]]
	},
	"608": {
	    "name": "Macedonia",
	    "ranges": [["0", "0"], ["10", "19"], ["200", "449"], ["4500", "6499"], ["65000", "69999"], ["7", "9"]]
	},
	"609": {
	    "name": "Lithuania",
	    "ranges": [["00", "39"], ["400", "799"], ["8000", "9499"], ["95000", "99999"]]
	},
	"610": {
	    "name": "Thailand",
	    "ranges": [["00", "19"], ["200", "699"], ["7000", "8999"], ["90000", "99999"]]
	},
	"611": {
	    "name": "Ukraine",
	    "ranges": [["00", "49"], ["500", "699"], ["7000", "8999"], ["90000", "99999"]]
	},
	"612": {
	    "name": "Peru",
	    "ranges": [["00", "29"], ["300", "399"], ["4000", "4499"], ["45000", "49999"], ["50", "99"]]
	},
	"613": {
	    "name": "Mauritius",
	    "ranges": [["0", "9"]]
	},
	"614": {
	    "name": "Lebanon",
	    "ranges": [["00", "39"], ["400", "799"], ["8000", "9499"], ["95000", "99999"]]
	},
	"615": {
	    "name": "Hungary",
	    "ranges": [["00", "09"], ["100", "499"], ["5000", "7999"], ["80000", "89999"]]
	},
	"7": {
	    "name": "China, People's Republic",
	    "ranges": [["00", "09"], ["100", "499"], ["5000", "7999"], ["80000", "89999"], ["900000", "999999"]]
	},
	"80": {
	    "name": "Czech Republic; Slovakia",
	    "ranges": [["00", "19"], ["200", "699"], ["7000", "8499"], ["85000", "89999"], ["900000", "999999"]]
	},
	"81": {
	    "name": "India",
	    "ranges": [["00", "19"], ["200", "699"], ["7000", "8499"], ["85000", "89999"], ["900000", "999999"]]
	},
	"82": {
	    "name": "Norway",
	    "ranges": [["00", "19"], ["200", "699"], ["7000", "8999"], ["90000", "98999"], ["990000", "999999"]]
	},
	"83": {
	    "name": "Poland",
	    "ranges": [["00", "19"], ["200", "599"], ["60000", "69999"], ["7000", "8499"], ["85000", "89999"], ["900000", "999999"]]
	},
	"84": {
	    "name": "Spain",
	    "ranges": [["00", "19"], ["200", "699"], ["7000", "8499"], ["85000", "89999"], ["9000", "9199"], ["920000", "923999"], ["92400", "92999"], ["930000", "949999"], ["95000", "96999"], ["9700", "9999"]]
	},
	"85": {
	    "name": "Brazil",
	    "ranges": [["00", "19"], ["200", "599"], ["60000", "69999"], ["7000", "8499"], ["85000", "89999"], ["900000", "979999"], ["98000", "99999"]]
	},
	"86": {
	    "name": "Serbia and Montenegro",
	    "ranges": [["00", "29"], ["300", "599"], ["6000", "7999"], ["80000", "89999"], ["900000", "999999"]]
	},
	"87": {
	    "name": "Denmark",
	    "ranges": [["00", "29"], ["400", "649"], ["7000", "7999"], ["85000", "94999"], ["970000", "999999"]]
	},
	"88": {
	    "name": "Italian speaking area",
	    "ranges": [["00", "19"], ["200", "599"], ["6000", "8499"], ["85000", "89999"], ["900000", "949999"], ["95000", "99999"]]
	},
	"89": {
	    "name": "Korea",
	    "ranges": [["00", "24"], ["250", "549"], ["5500", "8499"], ["85000", "94999"], ["950000", "999999"]]
	},
	"90": {
	    "name": "Netherlands, Belgium (Flemish)",
	    "ranges": [["00", "19"], ["200", "499"], ["5000", "6999"], ["70000", "79999"], ["800000", "849999"], ["8500", "8999"], ["900000", "909999"], ["940000", "949999"]]
	},
	"91": {
	    "name": "Sweden",
	    "ranges": [["0", "1"], ["20", "49"], ["500", "649"], ["7000", "7999"], ["85000", "94999"], ["970000", "999999"]]
	},
	"92": {
	    "name": "International Publishers (Unesco, EU), European Community Organizations",
	    "ranges": [["0", "5"], ["60", "79"], ["800", "899"], ["9000", "9499"], ["95000", "98999"], ["990000", "999999"]]
	},
	"93": {
	    "name": "India",
	    "ranges": [["00", "09"], ["100", "499"], ["5000", "7999"], ["80000", "94999"], ["950000", "999999"]]
	},
	"94": {
	    "name": "Netherlands",
	    "ranges": [["000", "599"], ["6000", "8999"], ["90000", "99999"]]
	},
	"950": {
	    "name": "Argentina",
	    "ranges": [["00", "49"], ["500", "899"], ["9000", "9899"], ["99000", "99999"]]
	},
	"951": {
	    "name": "Finland",
	    "ranges": [["0", "1"], ["20", "54"], ["550", "889"], ["8900", "9499"], ["95000", "99999"]]
	},
	"952": {
	    "name": "Finland",
	    "ranges": [["00", "19"], ["200", "499"], ["5000", "5999"], ["60", "65"], ["6600", "6699"], ["67000", "69999"], ["7000", "7999"], ["80", "94"], ["9500", "9899"], ["99000", "99999"]]
	},
	"953": {
	    "name": "Croatia",
	    "ranges": [["0", "0"], ["10", "14"], ["150", "549"], ["55000", "59999"], ["6000", "9499"], ["95000", "99999"]]
	},
	"954": {
	    "name": "Bulgaria",
	    "ranges": [["00", "29"], ["300", "799"], ["8000", "8999"], ["90000", "92999"], ["9300", "9999"]]
	},
	"955": {
	    "name": "Sri Lanka",
	    "ranges": [["0000", "0999"], ["1000", "1999"], ["20", "54"], ["550", "799"], ["8000", "9499"], ["95000", "99999"]]
	},
	"956": {
	    "name": "Chile",
	    "ranges": [["00", "19"], ["200", "699"], ["7000", "9999"]]
	},
	"957": {
	    "name": "Taiwan, China",
	    "ranges": [["00", "02"], ["0300", "0499"], ["05", "19"], ["2000", "2099"], ["21", "27"], ["28000", "30999"], ["31", "43"], ["440", "819"], ["8200", "9699"], ["97000", "99999"]]
	},
	"958": {
	    "name": "Colombia",
	    "ranges": [["00", "56"], ["57000", "59999"], ["600", "799"], ["8000", "9499"], ["95000", "99999"]]
	},
	"959": {
	    "name": "Cuba",
	    "ranges": [["00", "19"], ["200", "699"], ["7000", "8499"]]
	},
	"960": {
	    "name": "Greece",
	    "ranges": [["00", "19"], ["200", "659"], ["6600", "6899"], ["690", "699"], ["7000", "8499"], ["85000", "99999"]]
	},
	"961": {
	    "name": "Slovenia",
	    "ranges": [["00", "19"], ["200", "599"], ["6000", "8999"], ["90000", "94999"]]
	},
	"962": {
	    "name": "Hong Kong",
	    "ranges": [["00", "19"], ["200", "699"], ["7000", "8499"], ["85000", "86999"], ["8700", "8999"], ["900", "999"]]
	},
	"963": {
	    "name": "Hungary",
	    "ranges": [["00", "19"], ["200", "699"], ["7000", "8499"], ["85000", "89999"], ["9000", "9999"]]
	},
	"964": {
	    "name": "Iran",
	    "ranges": [["00", "14"], ["150", "249"], ["2500", "2999"], ["300", "549"], ["5500", "8999"], ["90000", "96999"], ["970", "989"], ["9900", "9999"]]
	},
	"965": {
	    "name": "Israel",
	    "ranges": [["00", "19"], ["200", "599"], ["7000", "7999"], ["90000", "99999"]]
	},
	"966": {
    "name": "Ukraine",
    "ranges": [["00", "14"], ["1500", "1699"], ["170", "199"], ["2000", "2999"], ["300", "699"], ["7000", "8999"], ["90000", "99999"]]
	},
	"967": {
	    "name": "Malaysia",
	    "ranges": [["00", "29"], ["300", "499"], ["5000", "5999"], ["60", "89"], ["900", "989"], ["9900", "9989"], ["99900", "99999"]]
	},
	"968": {
	    "name": "Mexico",
	    "ranges": [["01", "39"], ["400", "499"], ["5000", "7999"], ["800", "899"], ["9000", "9999"]]
	},
	"969": {
	    "name": "Pakistan",
	    "ranges": [["0", "1"], ["20", "39"], ["400", "799"], ["8000", "9999"]]
	},
	"970": {
	    "name": "Mexico",
	    "ranges": [["01", "59"], ["600", "899"], ["9000", "9099"], ["91000", "96999"], ["9700", "9999"]]
	},
	"971": {
	    "name": "Philippines",
	    "ranges": [["000", "019"], ["02", "02"], ["0300", "0599"], ["06", "09"], ["10", "49"], ["500", "849"], ["8500", "9099"], ["91000", "99999"]]
	},
	"972": {
	    "name": "Portugal",
	    "ranges": [["0", "1"], ["20", "54"], ["550", "799"], ["8000", "9499"], ["95000", "99999"]]
	},
	"973": { "name": "Romania", "ranges": [["0", "0"], ["100", "169"], ["1700", "1999"], ["20", "54"], ["550", "759"], ["7600", "8499"], ["85000", "88999"], ["8900", "9499"], ["95000", "99999"]]
	},
	"974": { "name": "Thailand",
		 "ranges": [["00", "19"], ["200", "699"], ["7000", "8499"], ["85000", "89999"], ["90000", "94999"], ["9500", "9999"]] }, "975": { "name": "Turkey", "ranges": [["00000", "00999"], ["01", "24"], ["250", "599"], ["6000", "9199"], ["92000", "98999"], ["990", "999"]]
	},
	"976": {
	    "name": "Caribbean Community",
	    "ranges": [["0", "3"], ["40", "59"], ["600", "799"], ["8000", "9499"], ["95000", "99999"]]
	},
	"977": {
	    "name": "Egypr",
	    "ranges": [["00", "19"], ["200", "499"], ["5000", "6999"], ["700", "999"]]
	},
	"978": {
	    "name": "Nigeria",
	    "ranges": [["000", "199"], ["2000", "2999"], ["30000", "79999"], ["8000", "8999"], ["900", "999"]]
	},
	"979": {
	    "name": "Indonesia",
	    "ranges": [["000", "099"], ["1000", "1499"], ["15000", "19999"], ["20", "29"], ["3000", "3999"], ["400", "799"], ["8000", "9499"], ["95000", "99999"]]
	},
	"980": {
	    "name": "Venezuela",
	    "ranges": [["00", "19"], ["200", "599"], ["6000", "9999"]]
	},
	"981": {
	    "name": "Singapore",
	    "ranges": [["00", "11"], ["1200", "1999"], ["200", "289"], ["2900", "9999"]]
	},
	"982": {
	    "name": "South Pacific",
	    "ranges": [["00", "09"], ["100", "699"], ["70", "89"], ["9000", "9999"]]
	},
	"983": {
	    "name": "Malaysia",
	    "ranges": [["00", "01"], ["020", "199"], ["2000", "3999"], ["40000", "44999"], ["45", "49"], ["50", "79"], ["800", "899"], ["9000", "9899"], ["99000", "99999"]]
	},
  "984": {
      "name": "Bangladesh",
      "ranges": [["00", "39"], ["400", "799"], ["8000", "8999"], ["90000", "99999"]]
  },
	"985": {
	    "name": "Belarus",
	    "ranges": [["00", "39"], ["400", "599"], ["6000", "8999"], ["90000", "99999"]]
	},
	"986": {
	    "name": "Taiwan, China",
	    "ranges": [["00", "11"], ["120", "559"], ["5600", "7999"], ["80000", "99999"]]
	},
	"987": {
	    "name": "Argentina",
	    "ranges": [["00", "09"], ["1000", "1999"], ["20000", "29999"], ["30", "49"], ["500", "899"], ["9000", "9499"], ["95000", "99999"]]
	},
	"988": {
	    "name": "Hongkong",
	    "ranges": [["00", "16"], ["17000", "19999"], ["200", "799"], ["8000", "9699"], ["97000", "99999"]]
	},
	"989": {
	    "name": "Portugal",
	    "ranges": [["0", "1"], ["20", "54"], ["550", "799"], ["8000", "9499"], ["95000", "99999"]]
	},
	"9933": {
	    "name": "Syria",
	    "ranges": [["0", "0"], ["10", "39"], ["400", "899"], ["9000", "9999"]]
	},
	"9934": {
	    "name": "Latvia",
	    "ranges": [["0", "0"], ["10", "49"], ["500", "799"], ["8000", "9999"]]
	},
	"9935": {
	    "name": "Iceland",
	    "ranges": [["0", "0"], ["10", "39"], ["400", "899"], ["9000", "9999"]]
	},
	"9936": {
	    "name": "Afghanistan",
	    "ranges": [["0", "1"], ["20", "39"], ["400", "799"], ["8000", "9999"]]
	},
	"9937": {
	    "name": "Nepal",
	    "ranges": [["0", "2"], ["30", "49"], ["500", "799"], ["8000", "9999"]]
	},
	"9938": {
	    "name": "Tunisia",
	    "ranges": [["00", "79"], ["800", "949"], ["9500", "9999"]]
	},
	"9939": {
	    "name": "Armenia",
	    "ranges": [["0", "4"], ["50", "79"], ["800", "899"], ["9000", "9999"]]
	},
	"9940": {
	    "name": "Montenegro",
	    "ranges": [["0", "1"], ["20", "49"], ["500", "899"], ["9000", "9999"]]
	},
	"9941": {
	    "name": "Georgia",
	    "ranges": [["0", "0"], ["10", "39"], ["400", "899"], ["9000", "9999"]]
	},
	"9942": {
	    "name": "Ecuador",
	    "ranges": [["00", "89"], ["900", "994"], ["9950", "9999"]]
	},
	"9943": {
	    "name": "Uzbekistan",
	    "ranges": [["00", "29"], ["300", "399"], ["4000", "9999"]]
	},
	"9944": {
	    "name": "Turkey",
	    "ranges": [["0", "2"], ["300", "499"], ["5000", "5999"], ["60", "89"], ["900", "999"]]
	},
	"9945": {
	    "name": "Dominican Republic",
	    "ranges": [["00", "00"], ["010", "079"], ["08", "39"], ["400", "569"], ["57", "57"], ["580", "849"], ["8500", "9999"]]
	},
	"9946": {
	    "name": "Korea, P.D.R.",
	    "ranges": [["0", "1"], ["20", "39"], ["400", "899"], ["9000", "9999"]]
	},
	"9947": {
	    "name": "Algeria",
	    "ranges": [["0", "1"], ["20", "79"], ["800", "999"]]
	},
	"9948": {
	    "name": "United Arab Emirates",
	    "ranges": [["00", "39"], ["400", "849"], ["8500", "9999"]]
	},
	"9949": {
	    "name": "Estonia",
	    "ranges": [["0", "0"], ["10", "39"], ["400", "899"], ["9000", "9999"]]
	},
	"9950": {
	    "name": "Palestine",
	    "ranges": [["00", "29"], ["300", "840"], ["8500", "9999"]]
	},
	"9951": {
	    "name": "Kosova",
	    "ranges": [["00", "39"], ["400", "849"], ["8500", "9999"]]
	},
	"9952": {
	    "name": "Azerbaijan",
	    "ranges": [["0", "1"], ["20", "39"], ["400", "799"], ["8000", "9999"]]
	},
	"9953": {
	    "name": "Lebanon",
	    "ranges": [["0", "0"], ["10", "39"], ["400", "599"], ["60", "89"], ["9000", "9999"]]
	},
	"9954": {
	    "name": "Morocco",
	    "ranges": [["0", "1"], ["20", "39"], ["400", "799"], ["8000", "9999"]]
	},
	"9955": {
	    "name": "Lithuania",
	    "ranges": [["00", "39"], ["400", "929"], ["9300", "9999"]]
	},
	"9956": {
	    "name": "Cameroon",
	    "ranges": [["0", "0"], ["10", "39"], ["400", "899"], ["9000", "9999"]]
	},
	"9957": {
	    "name": "Jordan",
	    "ranges": [["00", "39"], ["400", "699"], ["70", "84"], ["8500", "9999"]]
	},
	"9958": {
	    "name": "Bosnia and Herzegovina",
	    "ranges": [["0", "0"], ["10", "49"], ["500", "899"], ["9000", "9999"]]
	},
	"9959": {
	    "name": "Libya",
	    "ranges": [["0", "1"], ["20", "79"], ["800", "949"], ["9500", "9999"]]
	},
	"9960": {
	    "name": "Saudi Arabia",
	    "ranges": [["00", "59"], ["600", "899"], ["9000", "9999"]]
	},
	"9961": {
	    "name": "Algeria",
	    "ranges": [["0", "2"], ["30", "69"], ["700", "949"], ["9500", "9999"]]
	},
	"9962": {
	    "name": "Panama",
	    "ranges": [["00", "54"], ["5500", "5599"], ["56", "59"], ["600", "849"], ["8500", "9999"]]
	},
	"9963": {
	    "name": "Cyprus",
	    "ranges": [["0", "2"], ["30", "54"], ["550", "749"], ["7500", "9999"]]
	},
	"9964": {
	    "name": "Ghana",
	    "ranges": [["0", "6"], ["70", "94"], ["950", "999"]]
	},
	"9965": {
	    "name": "Kazakhstan",
	    "ranges": [["00", "39"], ["400", "899"], ["9000", "9999"]]
	},
	"9966": {
	    "name": "Kenya",
	    "ranges": [["000", "199"], ["20", "69"], ["7000", "7499"], ["750", "959"], ["9600", "9999"]]
	},
	"9967": {
	    "name": "Kyrgyzstan",
	    "ranges": [["00", "39"], ["400", "899"], ["9000", "9999"]]
	},
	"9968": {
	    "name": "Costa Rica",
	    "ranges": [["00", "49"], ["500", "939"], ["9400", "9999"]]
	},
	"9970": {
	    "name": "Uganda",
	    "ranges": [["00", "39"], ["400", "899"], ["9000", "9999"]]
	},
	"9971": {
	    "name": "Singapore",
	    "ranges": [["0", "5"], ["60", "89"], ["900", "989"], ["9900", "9999"]]
	},
	"9972": {
	    "name": "Peru",
	    "ranges": [["00", "09"], ["1"], ["200", "249"], ["2500", "2999"], ["30", "59"], ["600", "899"], ["9000", "9999"]]
	},
	"9973": {
	    "name": "Tunisia",
	    "ranges": [["00", "05"], ["060", "089"], ["0900", "0999"], ["10", "69"], ["700", "969"], ["9700", "9999"]]
	},
	"9974": {
	    "name": "Uruguay",
	    "ranges": [["0", "2"], ["30", "54"], ["550", "749"], ["7500", "9499"], ["95", "99"]]
	},
	"9975": {
	    "name": "Moldova",
	    "ranges": [["0", "0"], ["100", "399"], ["4000", "4499"], ["45", "89"], ["900", "949"], ["9500", "9999"]]
	},
	"9976": { "name": "Tanzania", "ranges": [["0", "5"], ["60", "89"],
						 ["900", "989"], ["9990", "9999"]] },
	"9977": {
	    "name": "Costa Rica",
	    "ranges": [["00", "89"], ["900", "989"], ["9900", "9999"]]
	},
	"9978": {
	    "name": "Ecuador",
	    "ranges": [["00", "29"], ["300", "399"], ["40", "94"], ["950", "989"], ["9900", "9999"]]
	},
	"9979": {
	    "name": "Iceland",
	    "ranges": [["0", "4"], ["50", "64"], ["650", "659"], ["66", "75"], ["760", "899"], ["9000", "9999"]]
	},
	"9980": {
	    "name": "Papua New Guinea",
	    "ranges": [["0", "3"], ["40", "89"], ["900", "989"], ["9900", "9999"]]
	},
	"9981": {
	    "name": "Morocco",
	    "ranges": [["00", "09"], ["100", "159"], ["1600", "1999"], ["20", "79"], ["800", "949"], ["9500", "9999"]]
	},
	"9982": {
	    "name": "Zambia",
	    "ranges": [["00", "79"], ["800", "989"], ["9900", "9999"]]
	},
	"9983": {
	    "name": "Gambia",
	    "ranges": [["80", "94"], ["950", "989"], ["9900", "9999"]]
	},
	"9984": {
	    "name": "Latvia",
	    "ranges": [["00", "49"], ["500", "899"], ["9000", "9999"]]
	},
	"9985": {
	    "name": "Estonia",
	    "ranges": [["0", "4"], ["50", "79"], ["800", "899"], ["9000", "9999"]]
	},
	"9986": {
	    "name": "Lithuania",
	    "ranges": [["00", "39"], ["400", "899"], ["9000", "9399"], ["940", "969"], ["97", "99"]]
	},
  "9987": {
      "name": "Tanzania",
      "ranges": [["00", "39"], ["400", "879"], ["8800", "9999"]]
  },
	"9988": {
	    "name": "Ghana",
	    "ranges": [["0", "2"], ["30", "54"], ["550", "749"], ["7500", "9999"]]
	},
	"9989": {
	    "name": "Macedonia",
	    "ranges": [["0", "0"], ["100", "199"], ["2000", "2999"], ["30", "59"], ["600", "949"], ["9500", "9999"]]
	},
	"99901": {
	    "name": "Bahrain",
	    "ranges": [["00", "49"], ["500", "799"], ["80", "99"]]
	},
	"99902": {
	    "name": "Gabon - no ranges fixed yet",
	    "ranges": []
	},
	"99903": {
	    "name": "Mauritius",
	    "ranges": [["0", "1"], ["20", "89"], ["900", "999"]]
	},
	"99904": {
	    "name": "Netherlands Antilles; Aruba, Neth. Ant",
	    "ranges": [["0", "5"], ["60", "89"], ["900", "999"]]
	},
	"99905": {
	    "name": "Bolivia",
	    "ranges": [["0", "3"], ["40", "79"], ["800", "999"]]
	},
	"99906": {
	    "name": "Kuwait",
	    "ranges": [["0", "2"], ["30", "59"], ["600", "699"], ["70", "89"], ["9", "9"]]
	},
	"99908": {
	    "name": "Malawi",
	    "ranges": [["0", "0"], ["10", "89"], ["900", "999"]]
	},
	"99909": {
	    "name": "Malta",
	    "ranges": [["0", "3"], ["40", "94"], ["950", "999"]]
	},
	"99910": {
	    "name": "Sierra Leone",
	    "ranges": [["0", "2"], ["30", "89"], ["900", "999"]]
	},
	"99911": {
	    "name": "Lesotho",
	    "ranges": [["00", "59"], ["600", "999"]]
	},
	"99912": {
	    "name": "Botswana",
	    "ranges": [["0", "3"], ["400", "599"], ["60", "89"], ["900", "999"]]
	},
	"99913": {
	    "name": "Andorra",
	    "ranges": [["0", "2"], ["30", "35"], ["600", "604"]]
	},
	"99914": {
	    "name": "Suriname",
	    "ranges": [["0", "4"], ["50", "89"], ["900", "949"]]
	},
	"99915": {
	    "name": "Maldives",
	    "ranges": [["0", "4"], ["50", "79"], ["800", "999"]]
	},
	"99916": {
	    "name": "Namibia",
	    "ranges": [["0", "2"], ["30", "69"], ["700", "999"]]
	},
	"99917": {
	    "name": "Brunei Darussalam",
	    "ranges": [["0", "2"], ["30", "89"], ["900", "999"]]
	},
	"99918": {
	    "name": "Faroe Islands",
	    "ranges": [["0", "3"], ["40", "79"], ["800", "999"]]
	},
	"99919": {
	    "name": "Benin",
	    "ranges": [["0", "2"], ["300", "399"], ["40", "69"], ["900", "999"]]
	},
	"99920": {
	    "name": "Andorra",
	    "ranges": [["0", "4"], ["50", "89"], ["900", "999"]]
	},
	"99921": {
	    "name": "Qatar",
	    "ranges": [["0", "1"], ["20", "69"], ["700", "799"], ["8", "8"], ["90", "99"]]
	},
	"99922": {
	    "name": "Guatemala",
	    "ranges": [["0", "3"], ["40", "69"], ["700", "999"]]
	},
	"99923": {
	    "name": "El Salvador",
	    "ranges": [["0", "1"], ["20", "79"], ["800", "999"]]
	},
	"99924": {
	    "name": "Nicaragua",
	    "ranges": [["0", "1"], ["20", "79"], ["800", "999"]]
	},
	"99925": {
	    "name": "Paraguay",
	    "ranges": [["0", "3"], ["40", "79"], ["800", "999"]]
	},
	"99926": {
	    "name": "Honduras",
	    "ranges": [["0", "0"], ["10", "59"], ["600", "999"]]
	},
	"99927": {
	    "name": "Albania",
	    "ranges": [["0", "2"], ["30", "59"], ["600", "999"]]
	},
	"99928": {
	    "name": "Georgia",
	    "ranges": [["0", "0"], ["10", "79"], ["800", "999"]]
	},
	"99929": {
	    "name": "Mongolia",
	    "ranges": [["0", "4"], ["50", "79"], ["800", "999"]]
	},
	"99930": {
	    "name": "Armenia",
	    "ranges": [["0", "4"], ["50", "79"], ["800", "999"]]
	},
	"99931": {
	    "name": "Seychelles",
	    "ranges": [["0", "4"], ["50", "79"], ["800", "999"]]
	},
  "99932": {
      "name": "Malta",
      "ranges": [["0", "0"], ["10", "59"], ["600", "699"], ["7", "7"], ["80", "99"]]
  },
	"99933": {
	    "name": "Nepal",
	    "ranges": [["0", "2"], ["30", "59"], ["600", "999"]]
	},
	"99934": {
	    "name": "Dominican Republic",
	    "ranges": [["0", "1"], ["20", "79"], ["800", "999"]]
	},
	"99935": {
	    "name": "Haiti",
	    "ranges": [["0", "2"], ["7", "8"], ["30", "59"], ["600", "699"], ["90", "99"]]
	},
	"99936": {
	    "name": "Bhutan",
	    "ranges": [["0", "0"], ["10", "59"], ["600", "999"]]
	},
	"99937": {
	    "name": "Macau",
	    "ranges": [["0", "1"], ["20", "59"], ["600", "999"]]
	},
	"99938": {
	    "name": "Srpska",
	    "ranges": [["0", "1"], ["20", "59"], ["600", "899"], ["90", "99"]]
	},
	"99939": {
	    "name": "Guatemala",
	    "ranges": [["0", "5"], ["60", "89"], ["900", "999"]]
	},
	"99940": {
	    "name": "Georgia",
	    "ranges": [["0", "0"], ["10", "69"], ["700", "999"]]
	},
	"99941": {
	    "name": "Armenia",
	    "ranges": [["0", "2"], ["30", "79"], ["800", "999"]]
	},
	"99942": {
	    "name": "Sudan",
	    "ranges": [["0", "4"], ["50", "79"], ["800", "999"]]
	},
	"99943": {
	    "name": "Alsbania",
	    "ranges": [["0", "2"], ["30", "59"], ["600", "999"]]
	},
	"99944": {
	    "name": "Ethiopia",
	    "ranges": [["0", "4"], ["50", "79"], ["800", "999"]]
	},
	"99945": {
	    "name": "Namibia",
	    "ranges": [["0", "5"], ["60", "89"], ["900", "999"]]
	},
	"99946": {
	    "name": "Nepal",
	    "ranges": [["0", "2"], ["30", "59"], ["600", "999"]]
	},
	"99947": {
	    "name": "Tajikistan",
	    "ranges": [["0", "2"], ["30", "69"], ["700", "999"]]
	},
	"99948": {
	    "name": "Eritrea",
	    "ranges": [["0", "4"], ["50", "79"], ["800", "999"]]
	},
	"99949": {
	    "name": "Mauritius",
	    "ranges": [["0", "1"], ["20", "89"], ["900", "999"]]
	},
	"99950": {
	    "name": "Cambodia",
	    "ranges": [["0", "4"], ["50", "79"], ["800", "999"]]
	},
	"99951": {
	    "name": "Congo - no ranges fixed yet",
	    "ranges": []
	},
	"99952": {
	    "name": "Mali",
	    "ranges": [["0", "4"], ["50", "79"], ["800", "999"]]
	},
	"99953": {
	    "name": "Paraguay",
	    "ranges": [["0", "2"], ["30", "79"], ["800", "999"]]
	},
	"99954": {
	    "name": "Bolivia",
	    "ranges": [["0", "2"], ["30", "69"], ["700", "999"]]
	},
	"99955": {
	    "name": "Srpska",
	    "ranges": [["0", "1"], ["20", "59"], ["600", "899"], ["90", "99"]]
	},
	"99956": {
	    "name": "Albania",
	    "ranges": [["00", "59"], ["600", "999"]]
	},
	"99957": {
	    "name": "Malta",
	    "ranges": [["0", "1"], ["20", "79"], ["800", "999"]]
	},
	"99958": {
	    "name": "Bahrain",
	    "ranges": [["0", "4"], ["50", "94"], ["950", "999"]]
	},
  "99959": {
      "name": "Luxembourg",
      "ranges": [["0", "2"], ["30", "59"], ["600", "999"]]
  },
	"99960": {
	    "name": "Malawi",
	    "ranges": [["0", "0"], ["10", "94"], ["950", "999"]]
	},
	"99961": {
	    "name": "El Salvador",
	    "ranges": [["0", "3"], ["40", "89"], ["900", "999"]]
	},
	"99962": {
	    "name": "Mongolia",
	    "ranges": [["0", "4"], ["50", "79"], ["800", "999"]]
	},
	"99963": {
	    "name": "Cambodia",
	    "ranges": [["00", "49"], ["500", "999"]]
	}
    };
}());

//
// Ende importiertes isbn.js
//