!function(a){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=a();else if("function"==typeof define&&define.amd)define([],a);else{var b;b="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this,b.Molecules=a()}}(function(){return function a(b,c,d){function e(g,h){if(!c[g]){if(!b[g]){var i="function"==typeof require&&require;if(!h&&i)return i(g,!0);if(f)return f(g,!0);var j=new Error("Cannot find module '"+g+"'");throw j.code="MODULE_NOT_FOUND",j}var k=c[g]={exports:{}};b[g][0].call(k.exports,function(a){var c=b[g][1][a];return e(c?c:a)},k,k.exports,a,b,c,d)}return c[g].exports}for(var f="function"==typeof require&&require,g=0;gb.index?1:0});for(var c=0;c1){for(var g=0,h=0;h=0&&250>i&&void 0!==a[j]){var k=i-a[j].protons;if(k>=0){a[j].neutrons=k;break}}break;case"charge":var l=-1!==h.indexOf("+")?1:-1,m=h.match(/(?:[^H])[0-9]+/g);if(null!==m&&void 0!==a[e]){m=m[0].substr(1),a[e].properties.charge=m*l;break}if(m=h.match(/([+]+|[-]+)/g),null!==m&&void 0!==a[e]){a[e].properties.charge=m[0].length*l;break}}}return a}function f(a,b,c){if(0===c.bonds.length||void 0===c.bonds.length)return[a,b,c];for(var d=0;d-1;)f=a[c.atoms[i]],i-=1;i=c.all.indexOf(f.id)}if(!(0>i)){void 0!==g&&null!==g&&(l=c.all.indexOf(g.id));var m=0;if(l>h&&h>i&&void 0!==b[c.all[h-1]]){var n=b[c.all[h-1]].value,o=b[e].value;switch(n){case")":case"(":switch(o){case"-":case"=":case"#":case".":m=1}}}switch(b[e].name){case"single":if(1===m||void 0===f||void 0===g)continue;b[e].order=1,b[e].atoms=[f.id,g.id];break;case"double":if(1===m||void 0===f||void 0===g)continue;if("H"===g.name)continue;b[e].order=2,b[e].atoms=[f.id,g.id];break;case"triple":if(1===m||void 0===f||void 0===g)continue;if("H"===g.name)continue;b[e].order=3,b[e].atoms=[f.id,g.id];break;case"dot":if(1===m||void 0===f||void 0===g)continue;b[e].order=0;break;case"branch":var p=c.all.slice(0,h).reverse(),q=c.all.slice(h+1,c.all.length);switch(b[e].value){case"(":for(var r=0,s=0;r=-1;)z-=1;for(;void 0===a[y]&&y>=-1;)y-=1;if(-1===z||-1===y)break;var t=1;1===a[z].properties.aromatic&&1===a[y].properties.aromatic&&(t=1.5),b[e].order=t,b[e].atoms=[z.toString(),y.toString()];break}if(r===w.length-1)for(var A=0;A=-1;)D-=1;for(;void 0===a[C]&&C>=-1;)C-=1;if(-1===D||-1===C)break;var t=1;1===a[D].properties.aromatic&&1===a[C].properties.aromatic&&(t=1.5),b[e].order=t,b[e].atoms=[D.toString(),C.toString()];break}}}}}}for(var d=0;d=a?2:a>2&&12>=a?12:a>12&&18>=a?18:void 0},e=function(a,b){return b>0?a-=b:void 0},f=function(a,b,c){return a>12&&b>10&&0>=c?c+=4:c},g=function(b,c,d,e){a[b].bonds.id.push(d),a[c].bonds.id.push(d),a[b].bonds.atoms.push(c),a[c].bonds.atoms.push(b),a[b].bonds.electrons+=e,a[c].bonds.electrons+=e},j=0;j-1;)k=a[c.atoms[m]],m-=1;if(-1!==m){var o=e(d(k.group)-k.bonds.electrons,k.properties.charge),p=e(d(l.group)-l.bonds.electrons,l.properties.charge);if(o=f(o),p=f(p),!(0>=o||0>=p)&&-1===k.bonds.atoms.indexOf(l.id)){var q=c.all.indexOf(l.id)-c.all.indexOf(k.id),r=0;if(q>1)for(var s=c.all.slice(c.all.indexOf(k.id)+1,c.all.indexOf(l.id)),t=0;t1)){var A=k.bonds.atoms.length;if("H"!==k.name&&A>0)for(var t=0;A>t;t++){var B=k.bonds.atoms[t],l=a[B];if("H"===l.name){var C=parseInt(l.value.match(/[0-9]+/g));if(C>1&&CD;D++)z(D,k.id,k.name)}}else"H"===k.name&&0===k.properties.charge&&0===A&&z(j,k.id,k.name);var E=18-k.group-k.bonds.electrons,F=k.properties.charge;if(!(0>=E||1===k.group||(F>0?E-=F:0>F&&(E+=F,1===E&&(E-=1,a[k.id].bonds.electrons+=1)),0>=E)))for(var t=0;E>t;t++)1===k.properties.aromatic&&t>1||z(t,k.id,k.name)}}return[a,b,c]}function o(a,b){for(var c=Object.keys(a),d=Object.keys(b),e=0;e-1?1:0;return c}function h(a,b,c){var d=arguments.length<=3||void 0===arguments[3]?0:arguments[3],e=arguments.length<=4||void 0===arguments[4]?0:arguments[4],f=arguments.length<=5||void 0===arguments[5]?0:arguments[5],g=arguments.length<=6||void 0===arguments[6]?0:arguments[6];return{id:a,name:b,value:c,group:d,protons:e,neutrons:f,electrons:g,bonds:{id:[],atoms:[],electrons:0},properties:{chiral:0,charge:0,aromatic:0}}}function i(a,b,c){var d=arguments.length<=3||void 0===arguments[3]?0:arguments[3],e=arguments.length<=4||void 0===arguments[4]?[]:arguments[4];return{id:a,name:b,value:c,order:d,atoms:e}}function j(a,b,c){var d=b.indexOf(a);if(-1!==d){b=b.slice(d,b.length);for(var e=1,f=b.length;f>e;e++)if(void 0!==c[b[e]])return b[e]}return null}function k(a,b,c){if("0"===a&&void 0!==c[0])return"0";var d=b.indexOf(a);if(-1!==d){b=b.slice(0,d).reverse();for(var e=0,f=b.length;f>e;e++)if(void 0!==c[b[e]])return b[e]}return null}Object.defineProperty(c,"__esModule",{value:!0});var l=function(){function a(a,b){var c=[],d=!0,e=!1,f=void 0;try{for(var g,h=a[Symbol.iterator]();!(d=(g=h.next()).done)&&(c.push(g.value),!b||c.length!==b);d=!0);}catch(i){e=!0,f=i}finally{try{!d&&h["return"]&&h["return"]()}finally{if(e)throw f}}return c}return function(b,c){if(Array.isArray(b))return b;if(Symbol.iterator in Object(b))return a(b,c);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}(),m=a("./../utilities/reference"),n=d(m),o=[{type:"atom",term:"H",tag:"H",expression:/(?=[A-Z])H(?=[^efgos]|$)([0-9]?)+/g},{type:"atom",term:"D",tag:"H",expression:/(?=[A-Z])D(?=[^bsy]|$)([0-9]?)+/g},{type:"atom",term:"He",tag:"He",expression:/He/g},{type:"atom",term:"Li",tag:"Li",expression:/Li/g},{type:"atom",term:"Be",tag:"Be",expression:/Be/g},{type:"atom",term:"B",tag:"B",expression:/B(?=[^aehikr]|$)/g},{type:"atom",term:"C",tag:"C",expression:/C(?=[^adeflmnorsu]|$)/g},{type:"atom",term:"N",tag:"N",expression:/N(?=[^abdeiop]|$)/g},{type:"atom",term:"O",tag:"O",expression:/O(?=[^s]|$)/g},{type:"atom",term:"F",tag:"F",expression:/F(?=[^elmr]|$)/g},{type:"atom",term:"Ne",tag:"Ne",expression:/Ne/g},{type:"atom",term:"Na",tag:"Na",expression:/Na/g},{type:"atom",term:"Mg",tag:"Mg",expression:/Mg/g},{type:"atom",term:"Al",tag:"Al",expression:/Al/g},{type:"atom",term:"Si",tag:"Si",expression:/Si/g},{type:"atom",term:"P",tag:"P",expression:/P(?=[^abdmortu]|$)/g},{type:"atom",term:"S",tag:"S",expression:/S(?=[^bcegimnr]|$)/g},{type:"atom",term:"Cl",tag:"Cl",expression:/Cl/g},{type:"atom",term:"Ar",tag:"Ar",expression:/Ar/g},{type:"atom",term:"As",tag:"As",expression:/As/g},{type:"atom",term:"Se",tag:"Se",expression:/Se/g},{type:"atom",term:"Br",tag:"Br",expression:/Br/g},{type:"atom",term:"I",tag:"I",expression:/I(?=[^nr]|$)/g},{type:"atom",term:"*",tag:"*",expression:/[*]/g},{type:"atom",term:"b",tag:"B",expression:/b(?=[^e]|$)/g},{type:"atom",term:"c",tag:"C",expression:/c(?=[^l]|$)/g},{type:"atom",term:"n",tag:"N",expression:/n(?=[^ae]|$)/g},{type:"atom",term:"o",tag:"O",expression:/o(?=[^s]|$)/g},{type:"atom",term:"p",tag:"P",expression:/p/g},{type:"atom",term:"s",tag:"S",expression:/s(?=[^ei]|$)/g},{type:"atom",term:"se",tag:"Se",expression:/se/g},{type:"bond",term:"-",tag:"single",expression:/(?=([^0-9]))[-](?=[^0-9-\]])/g},{type:"bond",term:"=",tag:"double",expression:/[=]/g},{type:"bond",term:"#",tag:"triple",expression:/[#]/g},{type:"bond",term:"(",tag:"branch",expression:/[(]/g},{type:"bond",term:")",tag:"branch",expression:/[)]/g},{type:"bond",term:"%",tag:"ring",expression:/(?=[^+-])(?:[a-zA-Z]{1,2}[@]{1,2})?(?:[a-zA-Z]|[a-zA-Z]*.?[\]])[%]?\d+(?=([^+]|$))/g},{type:"bond",term:".",tag:"dot",expression:/(?:[A-Z][+-]?[\[])?[.]/g},{type:"property",term:"+",tag:"charge",expression:/[a-zA-Z]{1,2}[0-9]*[+]+[0-9]*(?=[\]])/g},{type:"property",term:"-",tag:"charge",expression:/[a-zA-Z]{1,2}[0-9]*[-]+[0-9]*(?=[\]])/g},{type:"property",term:"n",tag:"isotope",expression:/(?:[\[])[0-9]+[A-Z]{1,2}(?=.?[^\[]*[\]])/g},{type:"property",term:"S",tag:"chiral",expression:/[A-Z][a-z]?[@](?![A-Z]{2}[0-9]+|[@])/g},{type:"property",term:"R",tag:"chiral",expression:/[A-Z][a-z]?[@]{2}(?![A-Z]{2}[0-9]+)/g}];c.grammar=o,c.tokenize=e,c.decode=f},{"./../utilities/reference":6}],2:[function(a,b,c){"use strict";function d(){var a=arguments.length<=0||void 0===arguments[0]?{}:arguments[0],b=arguments.length<=1||void 0===arguments[1]?{}:arguments[1],c=arguments.length<=2||void 0===arguments[2]?0:arguments[2],d=g(a),h=e(a),i=f(h);return{id:c,name:i,atoms:a,bonds:b,properties:{mass:d,formula:h}}}function e(a){var b=arguments.length<=1||void 0===arguments[1]?{}:arguments[1];if("object"!=typeof a)return null;for(var c=Object.keys(a),d=0;d0)for(var f=0;fd&&(b+=c[d][e]+Math.pow(c[d][e],2));return b/2},f=function(a){var b=arguments.length<=1||void 0===arguments[1]?0:arguments[1];if("reciprocal"!==a.id)return null;for(var c=a.matrix,d=0;d0&&(c[g][k]=1,c[k][g]=1)}return{id:"adjacency",header:b,matrix:c}},h=function(a){function b(a){for(var c=arguments.length<=1||void 0===arguments[1]?[]:arguments[1],d=arguments.length<=2||void 0===arguments[2]?[]:arguments[2],e=f["default"].multiply(a,a),g=0;g0)?c[g][h]=1:c[g][h]=0}for(var i=0,g=0;g=j[g][h]*l[h]?d[g][h]=2*j[g][h]:k[g][h]d;d++){c[d]=[];for(var e=0;b>e;e++)c[d][e]=0}return c},add:function(a){var b=arguments.length<=1||void 0===arguments[1]?0:arguments[1],c=arguments.length<=2||void 0===arguments[2]?[]:arguments[2];switch(typeof b){case"object":for(var d=0;d