/* Project: IP address range - CIDR converter Copyright (c) 2019 tokkonopapa (tokkonopapa@yahoo.com) The following libraries are ported to this program. - S1lentium/IPTools (https://github.com/S1lentium/IPTools) - kvz/locutus (https://github.com/kvz/locutus) - MikeMcl/big.js (https://github.com/MikeMcl/big.js/) - jQuery (https://jquery.com/) This software is released under the MIT License. */ (function(B,S,y){function aa(){function a(c){if(!(this instanceof a))return void 0===c?aa():new a(c);if(c instanceof a)this.s=c.s,this.e=c.e,this.c=c.c.slice();else{var b,e;if(0===c&&0>1/c)c="-0";else if(!ia.test(c+=""))throw Error("Invalid number");"-"==c.charAt(0)?(c=c.slice(1),this.s=-1):this.s=1;-1<(b=c.indexOf("."))&&(c=c.replace(".",""));0<(e=c.search(/e/i))?(0>b&&(b=e),b+=+c.slice(e+1),c=c.substring(0,e)):0>b&&(b=c.length);var f=c.length;for(e=0;eg||void 0!==f[g+1]||f[g-1]&1);else if(3===b)e=e||void 0!==f[g]||0>g;else if(e=!1,0!==b)throw Error("Invalid rounding mode");if(1>g)f.length=1,e?(a.e=-c,f[0]=1):f[0]=a.e=0;else{f.length=g--;if(e)for(;9<++f[g];)f[g]=0,g--||(++a.e,f.unshift(1));for(g=f.length;!f[--g];)f.pop()}}else if(0>b||3++e&&N(a,b,f.RM);for(2===c&&(e=a.e+b+1);a.c.length=f.PE))k=k.charAt(0)+(1h?"e":"e+")+h;else if(0>h){for(;++h;)k="0"+k;k="0."+k}else if(0b)for(h-=b;h--;)k+="0";else ha.s&&(!g||4===c)?"-"+k:k}function ba(a){var c=Object.getPrototypeOf,b={},e=b.toString,f=b.hasOwnProperty;b=f.toString;if(!a||"[object Object]"!==e.call(a))return!1;a=c(a);if(!a)return!0;a=f.call(a,"constructor")&&a.constructor;return"function"===typeof a&&b.call(a)===b.call(Object)}function H(){var a,c,b,e=arguments[0]||{},f=1,g=arguments.length,h=!1;"boolean"===typeof e&&(h=e,e=arguments[f]||{},f++);"object"===typeof e||"function"===typeof e&&"number"!==typeof e.nodeType||(e={});f===g&&(e=this,f--);for(;f=b?"":Array(1+b-a.length>>>0).join(c);return e?a+b:b+a},g=function(a,b,c,e,g){var h=e-a.length;0>>0).toString(b),h||0,"0",!1);return g(a,"",c,e,k)},k=function(a,b,c,e,f){null!==e&&e!==y&&(a=a.slice(0,e));return g(a,"",b,c,f)},m=function(a,e,m,l,n,t){if("%%"===a)return"%";a=" ";var D=!1;var p="";var u;var F=0;for(u=m.length;F=c.length)throw Error("Too few arguments");e=e?c[+e]:c[b++];switch(t){case "%":return"%";case "s":return k(e+"",D,l,n,a);case "c":return k(String.fromCharCode(+e),D,l,n,a);case "b":return h(e,2,D,l,n,a);case "o":return h(e,8,D,l,n,a);case "x":return h(e,16,D,l,n,a);case "X":return h(e,16,D,l,n,a).toUpperCase();case "u":return h(e,10,D,l,n,a);case "i":case "d":return e=+e||0,e=Math.round(e-e%1),p=0>e?"-":p,e=p+f(String(Math.abs(e)),n,"0",!1),D&&"0"===a&&(a=" "),g(e,p,D,l,a);case "e":case "E":case "f":case "F":case "g":case "G":return e=+e,p=0>e?"-":p,m=["toExponential","toFixed","toPrecision"]["efg".indexOf(t.toLowerCase())],t=["toString","toUpperCase"]["eEfFgG".indexOf(t)%2],e=p+Math.abs(e)[m](n),g(e,p,D,l,a)[t]();default:return""}};try{return e.replace(a,m)}catch(D){return!1}}function da(){var a=arguments,c=a.length,b=0;if(0===c)throw Error("Empty isset");for(;b!==c;){if(a[b]===y||null===a[b])return!1;b++}return!0}function ea(a){return("number"===typeof a||"string"===typeof a&&-1===" \n\r\t\f\x0B\u00a0\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u200b\u2028\u2029\u3000".indexOf(a.slice(-1)))&&""!==a&&!isNaN(a)}function v(a,c){return a===c?0:a>c?1:-1}function E(a,c,b){a=(a+"").indexOf(c,b||0);return-1===a?!1:a}function K(a,c,b){a+="";var e=a.length;0>c&&(c+=e);b!==y&&(e=0>b?b+e:b+c);return c>=a.length||0>c||c>e?!1:a.slice(c,e)}function T(a,c){var b,e=0;if(null===a||a===y)return 0;if(a.constructor!==Array&&a.constructor!==Object)return 1;"COUNT_RECURSIVE"===c&&(c=1);1!==c&&(c=0);for(b in a)a.hasOwnProperty(b)&&(e++,1!==c||!a[b]||a[b].constructor!==Array&&a[b].constructor!==Object||(e+=T(a[b],1)));return e}function U(a,c){var b="",e="",f="";1===arguments.length&&(c=a,a="");if("object"===typeof c){if("[object Array]"===Object.prototype.toString.call(c))return c.join(a);for(b in c)e+=f+c[b],f=a;return e}return c}function P(a,c,b){if(2>arguments.length||a===y||c===y)return null;if(""===a||!1===a||null===a)return!1;if("function"===typeof a||"object"===typeof a||"function"===typeof c||"object"===typeof c)return{0:""};!0===a&&(a="1");a+="";var e=(c+"").split(a);if(b===y)return e;0===b&&(b=1);if(0=e.length?e:e.slice(0,b-1).concat([e.slice(b-1).join(a)]);if(-b>=e.length)return[];e.splice(e.length+b);return e}function fa(a,c){null===c&&(c=1);if(null===a||1>c)return!1;a+="";for(var b=[],e=0,f=a.length;ea&&(a=4294967295+a+1);return parseInt(a,10).toString(2)}function W(a){var c,b="";a+="";var e=0;for(c=a.length;ef.length?"0"+f:f}return b}function X(a){a+="";var c=[],b=0,e;for(e=a.length;bf.length)throw Error("pack(): Type "+k+": not enough characters in string");for(g=0;g=m||f[g+1]===y?l+"0":l+f[g+1],"h"===k&&(l=l[1]+l[0]),e+=String.fromCharCode(parseInt(l,16));b++;break;case "c":case "C":"*"===m&&(m=arguments.length-b);if(m>arguments.length-b)throw Error("pack(): Type "+k+": too few arguments");for(g=0;garguments.length-b)throw Error("pack(): Type "+k+": too few arguments");for(g=0;g>8&255),b++;break;case "n":"*"===m&&(m=arguments.length-b);if(m>arguments.length-b)throw Error("pack(): Type "+k+": too few arguments");for(g=0;g>8&255),e+=String.fromCharCode(arguments[b]&255),b++;break;case "i":case "I":case "l":case "L":case "V":"*"===m&&(m=arguments.length-b);if(m>arguments.length-b)throw Error("pack(): Type "+k+": too few arguments");for(g=0;g>8&255),e+=String.fromCharCode(arguments[b]>>16&255),e+=String.fromCharCode(arguments[b]>>24&255),b++;break;case "N":"*"===m&&(m=arguments.length-b);if(m>arguments.length-b)throw Error("pack(): Type "+k+": too few arguments");for(g=0;g>24&255),e+=String.fromCharCode(arguments[b]>>16&255),e+=String.fromCharCode(arguments[b]>>8&255),e+=String.fromCharCode(arguments[b]&255),b++;break;case "f":case "d":l=23;n=8;"d"===k&&(l=52,n=11);"*"===m&&(m=arguments.length-b);if(m>arguments.length-b)throw Error("pack(): Type "+k+": too few arguments");for(g=0;g(u=0!==t?0:u);u=Math.abs(u);x=Math.floor(u);u-=x;for(f=w;f;)C[--f]=0;for(f=k+2;x&&f;)C[--f]=x%2,x=Math.floor(x/2);for(f=k+1;0=h&&v<=p?f+1:k+1-(v=h-1)))+1;if(C[z]){if(!(A=C[u]))for(z=u+2;!A&&zf-2?-1:f-3;++f=h&&v<=p?++f:v>=1;z=u=0;f=(k=(B?"1":"0")+k+C.slice(f,f+l).join("")).length;for(h=[];f;)u+=(1<e.length)for(l=m-e.length,g=0;gc;c++)e.push(((a.charCodeAt(c++)<<8)+a.charCodeAt(c)).toString(16));return e.join(":").replace(/((^|:)0(?=:|$))+:?/g,function(a){b=a.length>b.length?a:b;return a}).replace(b||" ","::")}return!1}function na(a){a+="";var c,b;var e=String.fromCharCode;if(c=a.match(/^(?:\d{1,3}(?:\.|$)){4}/))return c=c[0].split("."),c=e(c[0])+e(c[1])+e(c[2])+e(c[3]),4===c.length?c:!1;if(c=a.match(/^((?:[\da-f]{1,4}(?::|)){0,8})(::)?((?:[\da-f]{1,4}(?::|)){0,8})$/)){for(b=1;4>b;b++)if(2!==b&&0!==c[b].length){c[b]=c[b].split(":");for(a=0;a>8)+e(c[b][a]&255)}c[b]=c[b].join("")}e=c[1].length+c[3].length;if(16===e)return c[1]+c[3];if(16>e&&0c;c+=1)a[0]+=!!(a[c]||"").length,a[c]=parseInt(a[c])||0;a.push(256,256,256,256);a[4+a[0]]*=Math.pow(256,4-a[0]);return a[1]>=a[5]||a[2]>=a[6]||a[3]>=a[7]||a[4]>=a[8]?!1:a[1]*(1===a[0]||16777216)+a[2]*(2>=a[0]||65536)+a[3]*(3>=a[0]||256)+1*a[4]}function l(a){this.__construct(a)}function A(a,c){this.__construct(a,c)}function x(a,c){this.__construct(a,c)}function R(a,c,b){var e=[].slice.call(arguments).slice(3);a&&a.addEventListener?a.addEventListener(c,function(){b.apply(a,e)},!1):a&&a.attachEvent&&a.attachEvent("on"+c,function(){b.apply(a,e)})}function ha(a){return a.trim().replace(",","\n").split("\n").map(function(a){return a.trim()})}function I(a){for(;t.g.firstChild;)t.g.removeChild(t.g.firstChild);t.g.appendChild(a?S.createTextNode(a+""):pa)}"function"!==typeof Object.assign&&Object.defineProperty(Object,"assign",{value:function(a,c){if(null==a)throw Error("Cannot convert undefined or null to object");var b,e,f=Object(a);for(e=1;e>>0;if("[object Function]"!=={}.toString.call(a))throw Error(a+" is not a function");c&&(b=c);for(e=0;ee;if(g!==h)return g>h^a?1:-1;f=(g=c.length)<(h=b.length)?g:h;for(e=-1;++eb[e]^a?1:-1;return g===h?0:g>h^a?1:-1};n.div=function(a){var c=this.constructor,b=this.c,e=(a=new c(a)).c,f=this.s==a.s?1:-1,g=c.DP;if(g!==~~g||0>g||1E6d?0:d;for(k.unshift(0);rl++h;h++){if(n!=(rl=r.length))var t=n>rl?1:-1;else{var p=-1;for(t=0;++pr[p]?1:-1;break}}if(0>t){for(a=rl==n?e:k;rl;){if(r[--rl]d&&N(q,g,c.RM,void 0!==r[0]);return q};n.eq=function(a){return!this.cmp(a)};n.gt=function(a){return 0this.cmp(a)};n.lte=function(a){return 1>this.cmp(a)};n.minus=n.sub=function(a){var c=this.constructor;var b=this.s,e=(a=new c(a)).s;if(b!==e)return a.s=-e,this.plus(a);var f=this.c.slice();var g=this.e;var h=a.c,k=a.e;if(!f[0]||!h[0])return h[0]?(a.s=-e,a):new c(f[0]?this:0);if(b=g-k){c=b;0>b?(b=-b,g=f):(k=g,g=h);g.reverse();for(e=b;e--;)g.push(0);g.reverse()}else for(g=((c=f.lengthb;){if(f[--g]f.length-h.length&&(c=h,h=f,f=c);b=h.length;for(e=0;b;f[b]%=10)e=(f[--b]=f[b]+h[b]+e)/10|0;e&&(f.unshift(e),++g);for(b=f.length;0===f[--b];)f.pop();a.c=f;a.e=g;return a};n.pow=function(a){var c=this,b=new c.constructor(1),e=b,f=0>a;for(f&&(a=-a);;){a&1&&(e=e.times(c));a>>=1;if(!a)break;c=c.times(c)}return f?b.div(e):e};n.round=function(a,c){var b=this.constructor;if(void 0===a)a=0;else if(a!==~~a||0>a||1E6c)throw Error("No square root");c=Math.sqrt(this.toString());0===c||c===1/0?(c=this.c.join(""),c.length+b&1||(c+="0"),c=new a(Math.sqrt(c).toString()),c.e=((b+1)/2|0)-(0>b||b&1)):c=new a(c.toString());b=c.e+(a.DP+=4);do{var f=c;c=e.times(f.plus(this.div(f)))}while(f.c.slice(0,b).join("")!==c.c.slice(0,b).join(""));return N(c,a.DP-=4,a.RM)};n.times=n.mul=function(a){var c=this.constructor;var b=this.c,e=(a=new c(a)).c,f=b.length,g=e.length,h=this.e,k=a.e;a.s=this.s===a.s?1:-1;if(!b[0]||!e[0])return new c(0*a.s);a.e=h+k;fh;)g=c[k]+e[h]*b[k-h-1]+g,c[k--]=g%10,g=g/10|0;c[k]=(c[k]+g)%10}g?++a.e:c.shift();for(h=c.length;!c[--h];)c.pop();a.c=c;return a};n.toExponential=function(a){return J(this,1,a,a)};n.toFixed=function(a){return J(this,2,a,this.e+a)};n.toPrecision=function(a){return J(this,3,a,a-1)};n.toString=function(){return J(this)};n.valueOf=n.toJSON=function(){return J(this,4)};var p=aa();p["default"]=p.Big=p;B.Big=p;l.prototype={IP_V4:"IPv4",IP_V6:"IPv6",IP_V4_MAX_PREFIX_LENGTH:32,IP_V6_MAX_PREFIX_LENGTH:128,IP_V4_OCTETS:4,IP_V6_OCTETS:16,$in_addr:null,__construct:function(a){if(!Z(a,275))throw Error("Invalid IP address format: "+a);this.$in_addr=na(a)},toString:function(){return w(this.$in_addr)},parse:function(a){return 0===E(a,"0x")?(a=K(a,2),this.parseHex(a)):0===E(a,"0b")?(a=K(a,2),this.parseBin(a)):ea(a)?this.parseLong(a):new l(a)},parseBin:function(a){if(!Q(/^([0-1]{32}|[0-1]{128})$/,a))throw Error("Invalid binary IP address format: "+a);var c="";ka(la,fa(a,8)).forEach(function(a){c+=L("C*",a)});return new l(w(c))},parseHex:function(a){if(!Q(/^([0-9a-fA-F]{8}|[0-9a-fA-F]{32})$/,a))throw Error("Invalid hexadecimal IP address format: "+a);return new l(w(L("H*",a)))},parseLong:function(a,c){if(c===this.IP_V4){var b=a;b=isFinite(b)?[b>>>24,b>>>16&255,b>>>8&255,b&255].join("."):!1;b=new this(b)}else{var e=[];for(b=0;ba)throw Error("Number must be greater than 0");var c,b,e=M("C*",this.$in_addr);for(c=0;ce[b]){e[b]++;break}else e[b]=0;e[0]="C*";return new l(w(Y(L,e)))},prev:function(a){a=a||1;if(0>a)throw Error("Number must be greater than 0");var c,b,e=M("C*",this.$in_addr);for(c=0;cv(a.getLastIP().inAddr(),this.getFirstIP().inAddr()))throw Error("Exclude subnet not within target network");var c=[],b=this.getPrefixLength()+1;var e=H(!0,{},this);e.setPrefixLength(b);var f=H(!0,{},e);for(f.setIP(e.getLastIP().next());b<=a.getPrefixLength();){var g=new x(e.getFirstIP(),e.getLastIP());if(g.contains(a)){g=e;var h=f}else g=f,h=e;c.push(H(!0,{},h));if(++b>this.getNetwork().getMaxPrefixLength())break;g.setPrefixLength(b);h.setPrefixLength(b);h.setIP(g.getLastIP().next())}return A.prototype.sort(c)},moveTo:function(a){var c=this.$ip.getMaxPrefixLength();if(a<=this.getPrefixLength()||a>c)throw Error("Invalid prefix length");c=this.prefix2netmask(a,this.$ip.getVersion());var b=[];var e=H(!0,{},this);for(e.setPrefixLength(a);e.$ip.inAddr()=v(this.getFirstIP().next(this.$position).inAddr(),this.getLastIP().inAddr())},count:function(){return parseInt(this.getBlockSize())}};x.prototype={$firstIP:null,$lastIP:null,$position:0,__construct:function(a,c){this.setFirstIP(a);this.setLastIP(c)},parse:function(a){if(E(a,"/")||E(a," ")){a=A.prototype.parse(a);var c=a.getFirstIP();a=a.getLastIP()}else E(a,"*")?(c=l.prototype.parse(a.replace("*","0")),a=l.prototype.parse(a.replace("*","255"))):E(a,"-")?(a=P("-",a,2),c=l.prototype.parse(a[0]),a=l.prototype.parse(a[1])):(c=l.prototype.parse(a),a=H(!0,{},c));return new x(c,a)},contains:function(a){if(a instanceof l)a=0<=v(a.inAddr(),this.$firstIP.inAddr())&&0>=v(a.inAddr(),this.$lastIP.inAddr());else if(a instanceof x||a instanceof A)a=0<=v(a.getFirstIP().inAddr(),this.$firstIP.inAddr())&&0>=v(a.getLastIP().inAddr(),this.$lastIP.inAddr());else throw Error("Invalid type");return a},setFirstIP:function(a){if(this.$lastIP&&0v(a.inAddr(),this.$firstIP.inAddr()))throw Error("Last IP is less than first");this.$lastIP=a},getFirstIP:function(){return this.$firstIP},getLastIP:function(){return this.$lastIP},getNetworks:function(){var a=this.getSpanNetwork(),c=[];if(a.getFirstIP().inAddr()===this.$firstIP.inAddr()&&a.getLastIP().inAddr()===this.$lastIP.inAddr())c.push(a);else{if(a.getFirstIP().inAddr()!==this.$firstIP.inAddr()){var b=a.exclude(this.$firstIP.prev());var e=this.$firstIP.inAddr();b.forEach(function(a){0<=v(a.getFirstIP().inAddr(),e)&&c.push(a)})}a.getLastIP().inAddr()!==this.$lastIP.inAddr()&&(c.length?(b=ja(c),b=b.exclude(this.$lastIP.next())):b=a.exclude(this.$lastIP.next()),e=this.$lastIP.inAddr(),b.forEach(function(a){a.getLastIP().inAddr()<=e&&c.push(a)}))}return A.prototype.sort(c)},getSpanNetwork:function(){var a=this.getFirstIP().inAddr()+"",c=this.getLastIP().inAddr()+"",b,e=a.length,f=[];for(b=0;b=v(W(this.$firstIP.next(this.$position).inAddr()),W(this.$lastIP.inAddr()))},count:function(){var a=this.$lastIP.toLong();var c=this.$firstIP.toLong();a=p(a).minus(c);return O(a,1)}};B.IP=l;B.Network=A;B.Range=x;var t={};"abcdefg".split("").map(function(a){t[a]=S.getElementById(a)});var pa=t.g?t.g.firstChild.cloneNode(!1):null;R(t.a,"click",function(a){a.value="";I()},t.c);R(t.b,"click",function(a){a.value="";I()},t.d);R(t.e,"click",function(a,c){var b=ha(a.value);console.log(b);if(b[0])try{var e,f=[];var g=0;for(e=b.length;g