finitedomain
Version:
A fast feature rich finite domain solver
2 lines • 69 kB
JavaScript
"use strict";function _classCallCheck(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(exports,"__esModule",{value:!0});var _createClass=function(){function a(a,b){for(var c=0;c<b.length;c++){var d=b[c];d.enumerable=d.enumerable||!1,d.configurable=!0,"value"in d&&(d.writable=!0),Object.defineProperty(a,d.key,d)}}return function(b,c,d){return c&&a(b.prototype,c),d&&a(b,d),b}}(),_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(a){return typeof a}:function(a){return a&&"function"==typeof Symbol&&a.constructor===Symbol&&a!==Symbol.prototype?"symbol":typeof a},Solver=function(){function a(){var a={_class:"$config",allVarNames:[],_varNamesTrie:re(),varStratConfig:l(),valueStratName:"min",targetedVars:"all",varDistOptions:{},timeoutCallback:void 0,rngCode:"",_defaultRng:void 0,allConstraints:[],constantCache:{},initialDomains:[],_propagators:[],_varToPropagators:[],_constrainedAway:[],_constraintHash:{}};return a}function b(a,b){var c=a.varStratConfig,d=a.valueStratName,e=a.targetedVars,f=a.varDistOptions,g=a.timeoutCallback,h=a.constantCache,i=a.allVarNames,j=a.allConstraints,k=a.initialDomains,l=a._propagators,m=a._varToPropagators,n=a._constrainedAway,o={_class:"$config",_varNamesTrie:re(i),varStratConfig:c,valueStratName:d,targetedVars:e instanceof Array?e.slice(0):e,varDistOptions:JSON.parse(JSON.stringify(f)),timeoutCallback:g,rngCode:a.rngCode,_defaultRng:a.rngCode?void 0:a._defaultRng,constantCache:h,allVarNames:i.slice(0),allConstraints:j.slice(0),initialDomains:b?b.map(oc):k,_propagators:l&&l.slice(0),_varToPropagators:m&&m.slice(0),_constrainedAway:n&&n.slice(0),_constraintHash:{}};return o}function c(a){return d(a,!0)}function d(a,b){return j(a,b,ac($e,_e))}function e(a,b,c){return b===c?h(a,b):f(a,!0,b,c)}function f(a,b,c,d){var e=ac(c,d);return j(a,b,e)}function g(a,b,c,d,e){return j(a,b,pc(c),d,e)}function h(a,b){return void 0!==a.constantCache[b]?a.constantCache[b]:i(a,!0,b)}function i(a,b,c){var d=ac(c,c);return j(a,b,d)}function j(a,b,c,d){var e=arguments.length>4&&void 0!==arguments[4]&&arguments[4];if(e){var f=De(a._varNamesTrie,b);return void(a.initialDomains[f]=c)}var g=a.allVarNames,h=g.length;b===!0?b="__"+String(h)+"__":("string"!=typeof b&&Xc("Var names should be a string or anonymous, was: "+JSON.stringify(b)),b||Xc("Var name cannot be empty string"),String(parseInt(b,10))===b&&Xc("Don't use numbers as var names ("+b+")")),h<100&&Fe(a._varNamesTrie,b)&&Xc("Var name already part of this config. Probably a bug?",b);var i=oa(c);return i===af||a.constantCache[i]||(a.constantCache[i]=h),a.initialDomains[h]=c,a.allVarNames.push(b),xe(a._varNamesTrie,b,h),h}function k(a,b){var c=M(b);for(var d in c)m(a,d,c[d])}function l(a){return{_class:"$var_strat_config",type:a&&a.type||"naive",priorityByName:a&&a.priorityList,_priorityByIndex:void 0,inverted:!(!a||!a.inverted),fallback:a&&a.fallback}}function m(a,b,c,d){switch("varStratOverride"===b&&Xc("deprecated, should be wiped internally"),b){case"varStrategy":"function"==typeof c&&Xc("functions no longer supported",c),"string"==typeof c&&Xc("strings should be passed on as {type:value}",c),"object"!==("undefined"==typeof c?"undefined":_typeof(c))&&Xc("varStrategy should be object",c),c.name&&Xc("name should be type"),c.dist_name&&Xc("dist_name should be type");var e=l(c);for(a.varStratConfig=e;e.fallback;)e.fallback=l(e.fallback),e=e.fallback;break;case"valueStrategy":a.valueStratName=c;break;case"targeted_var_names":c&&c.length||Xc("ONLY_USE_WITH_SOME_TARGET_VARS"),a.targetedVars=c;break;case"varStratOverrides":for(var f in c)m(a,"varValueStrat",c[f],f);break;case"varValueStrat":if(a.varDistOptions||(a.varDistOptions={}),a.varDistOptions[d]=c,"markov"===c.valtype){var g=c.matrix;g||(c.expandVectorsWith?g=c.matrix=[{vector:[]}]:Xc("Solver: markov var missing distribution (needs matrix or expandVectorsWith)"));for(var h=0,i=g.length;h<i;++h){var j=g[h];j["boolean"]&&Xc("row.boolean was deprecated in favor of row.boolVarName"),void 0!==j.booleanId&&Xc("row.booleanId is no longer used, please use row.boolVarName");var k=j.boolVarName;"function"==typeof k&&(k=k(c)),k&&("string"!=typeof k&&Xc("row.boolVarName, if it exists, should be the name of a var or a func that returns that name, was/got: "+k+" ("+("undefined"==typeof k?"undefined":_typeof(k))+")"),j._boolVarIndex=De(a._varNamesTrie,k))}}break;case"timeoutCallback":a.timeoutCallback=c;break;case"var":return Xc("REMOVED. Replace `var` with `varStrategy`");case"val":return Xc("REMOVED. Replace `var` with `valueStrategy`");case"rng":"string"==typeof c?a.rngCode=c:"number"==typeof c?a.rngCode="return "+c+";":a._defaultRng=c;break;default:Xc("unknown option")}}function n(a,b){b&&(b.varStrategy&&m(a,"varStrategy",b.varStrategy),b.valueStrategy&&m(a,"valueStrategy",b.valueStrategy),b.targeted_var_names&&m(a,"targeted_var_names",b.targeted_var_names),b.varStratOverrides&&m(a,"varStratOverrides",b.varStratOverrides),b.varStratOverride&&(console.warn('deprecated "varStratOverride" in favor of "varValueStrat"'),m(a,"varValueStrat",b.varStratOverride,b.varStratOverrideName)),b.varValueStrat&&m(a,"varValueStrat",b.varValueStrat,b.varStratOverrideName),b.timeoutCallback&&m(a,"timeoutCallback",b.timeoutCallback))}function o(a,b){a._propagators.push(b)}function p(a){for(var b=new Array(a.allVarNames.length),c=a._propagators,d=a.initialDomains,e=0,f=c.length;e<f;++e){var g=c[e];q(g.index1,d,b,e),g.index2>=0&&q(g.index2,d,b,e),g.index3>=0&&q(g.index3,d,b,e)}a._varToPropagators=b}function q(a,b,c,d){var e=b[a];wb(e)||(c[a]?c[a].indexOf(d)<0&&c[a].push(d):c[a]=[d])}function r(a,b,d,f){var g=b,i=void 0,j=!1;switch(b){case"reifier":j=!0,g=f;case"plus":case"min":case"ring-mul":case"ring-div":case"mul":case"sum":case"product":var k="product"===b||"sum"===b;i=k?f:d[2];var l=void 0;void 0===i?(l=j?e(a,0,1):c(a),i=a.allVarNames[l]):"number"==typeof i?(l=h(a,i),i=a.allVarNames[l]):"string"!=typeof i?Xc("expecting result var name to be absent or a number or string: `"+i+"`"):(l=De(a._varNamesTrie,i),l<0&&Xc("Vars must be defined before using them ("+i+")")),k?f=l:d[2]=i;break;case"distinct":case"eq":case"neq":case"lt":case"lte":case"gt":case"gte":break;default:Xc("UNKNOWN_PROPAGATOR "+b)}if(s(a,d),u(a,g+"|"+d.join(","),i))return i;var m=t(a,d);if(!v(a,b,m,f)){var n=L(b,m,f);a.allConstraints.push(n)}return i}function s(a,b){for(var c=0,d=b.length;c<d;++c)if("number"==typeof b[c]){var e=h(a,b[c]);b[c]=a.allVarNames[e]}}function t(a,b){for(var c=[],d=0,e=b.length;d<e;++d){var f=b[d],g=De(a._varNamesTrie,f);c[d]=g}return c}function u(a,b,c){a._constraintHash||(a._constraintHash={});var d=a._constraintHash[b];if(d===!0){if(void 0!==c)throw new Error("How is this possible?");return!0}return void 0!==d?(r(a,"eq",[c,d]),!0):(a._constraintHash[b]=c||!0,!1)}function v(a,b,c,d){return"lte"===b||"lt"===b?w(a,b,c):"gte"===b||"gt"===b?x(a,b,c):"eq"===b?y(a,b,c):"neq"===b?z(a,b,c):"reifier"===b?A(a,b,c,d):"sum"===b?F(a,b,c,d):"product"===b&&F(a,b,c,d)}function w(a,b,c){var d=a.initialDomains,e=c[0],f=c[1],g=d[e],h=d[f],i=oa(g);if(i!==ef){var j=i-("lt"===b?0:1);return d[f]=Hb(h,j),a._constrainedAway.push(e,f),!0}if(i=oa(h),i!==ef){var k=i+("lt"===b?0:1);return d[e]=Bb(g,k),a._constrainedAway.push(e,f),!0}var l=rb(h)+("lt"===b?0:1),m=d[e]=Bb(g,l),n=mb(g)-("lt"===b?0:1),o=d[f]=Hb(h,n);return(g!==m||h!==o)&&w(a,b,c)}function x(a,b,c){var d=a.initialDomains,e=c[0],f=c[1],g=d[e],h=d[f],i=oa(g);if(i!==ef){var j=i+("gt"===b?0:1);return d[f]=Bb(h,j,!0),a._constrainedAway.push(e,f),!0}if(i=oa(h),i!==ef){var k=i-("gt"===b?0:1);return d[e]=Hb(g,k),a._constrainedAway.push(e,f),!0}var l=mb(h)-("gt"===b?0:1),m=d[e]=Hb(g,l),n=rb(g)+("gt"===b?0:1),o=d[f]=Bb(h,n);return(g!==m||h!==o)&&x(a,b,c)}function y(a,b,c){var d=a.initialDomains,e=c[0],f=c[1],g=d[e],h=d[f],i=oa(g);if(i===ef&&(i=oa(h)),i!==ef){var j=Ka(g,h);return d[e]=j,d[f]=j,a._constrainedAway.push(e,f),!0}return!1}function z(a,b,c){var d=a.initialDomains,e=c[0],f=c[1],g=oa(d[e]);return g!==ef?(d[f]=Mb(d[f],g),a._constrainedAway.push(e,f),!0):(g=oa(d[f]),g!==ef&&(d[e]=Mb(d[e],g),a._constrainedAway.push(e,f),!0))}function A(a,b,c,d){var e=a.initialDomains,f=c[0],g=c[1],h=c[2],i=e[f],j=e[g],k=e[h],l=oa(e[f]),m=oa(e[g]),n=l!==ef,o=m!==ef;if(n&&o)return C(a,c,d,l,m);var p=xb(k),q=yb(k);if(p!==q){if(n)return D(a,d,g,l,q,i,j);if(o)return E(a,d,f,m,q,i,j)}if("eq"!==d&&"neq"!==d){var r=!0,s=!1;if("lt"===d){if(rb(i)<mb(j))return B(a,f,g,h,k,r);if(mb(i)>=rb(j))return B(a,f,g,h,k,s)}else if("lte"===d){if(rb(i)<=mb(j))return B(a,f,g,h,k,r);if(mb(i)>rb(j))return B(a,f,g,h,k,s)}else if("gt"===d){if(mb(i)>rb(j))return B(a,f,g,h,k,r);if(rb(i)<=mb(j))return B(a,f,g,h,k,s)}else if("gte"===d){if(mb(i)>=rb(j))return B(a,f,g,h,k,r);if(rb(i)<mb(j))return B(a,f,g,h,k,s)}else Xc("UNKNOWN_OP")}return!1}function B(a,b,c,d,e,f){return a.initialDomains[d]=zb(e,f),a._constrainedAway.push(b,c,d),!0}function C(a,b,c,d,e){var f=a.initialDomains,g=b[2],h=!1;switch(c){case"lt":h=d<e;break;case"lte":h=d<=e;break;case"gt":h=d>e;break;case"gte":h=d>=e;break;case"eq":h=d===e;break;case"neq":h=d!==e;break;default:return!1}return f[g]=zb(f[g],h),a._constrainedAway.push(g),!0}function D(a,b,c,d,e,f,g){var h=a.initialDomains,i=h[c];switch(b){case"lt":i=e?Hb(i,d):Bb(i,d+1);break;case"lte":i=e?Hb(i,d-1):Bb(i,d);break;case"gt":i=e?Bb(i,d):Hb(i,d-1);break;case"gte":i=e?Bb(i,d+1):Hb(i,d);break;case"eq":i=e?Ka(f,g):Mb(i,d);break;case"neq":i=e?Mb(i,d):Ka(f,g);break;default:return!1}return h[c]=i,a._constrainedAway.push(c),!0}function E(a,b,c,d,e,f,g){var h=a.initialDomains,i=h[c];switch(b){case"lt":i=e?Bb(i,d):Hb(i,d-1);break;case"lte":i=e?Bb(i,d+1):Hb(i,d);break;case"gt":i=e?Hb(i,d):Bb(i,d+1);break;case"gte":i=e?Hb(i,d-1):Bb(i,d);break;case"eq":i=e?Ka(f,g):Mb(i,d);break;case"neq":i=e?Mb(i,d):Ka(f,g);break;default:return!1}return h[c]=i,a._constrainedAway.push(c),!0}function F(a,b,c,d){var e=a.initialDomains,f=0,g=1,i="product"===b?g:f;if(e.length&&c.length){for(var j=e[c[0]],k=1,l=c.length;k<l;++k){var m=c[k],n=e[m];j="sum"===b?Hc(j,n):Xa(j,n)}e[d]=Ka(j,e[d])}if(c.length>1){for(var o=[],p=i,q=0,r=c.length;q<r;++q){var s=c[q],t=e[s],u=oa(t);u===ef?o.push(s):"sum"===b?p+=u:"product"===b&&(p*=u)}if(!o.length||"sum"===b&&p!==f||"product"===b&&p!==g){var v=h(a,p);o.push(v)}for(var w=0,x=o.length;w<x;++w)c[w]=o[w];c.length=o.length}if(0===c.length)return a.initialDomains[d]=Ka(a.initialDomains[d],_b(0)),!0;if(1===c.length){var y=Ka(a.initialDomains[d],a.initialDomains[c[0]]);if(a.initialDomains[d]=y,a.initialDomains[c[0]]=y,wb(y))return a._constrainedAway.push(c[0],d),!0}return!1}function G(a){var b=a.allConstraints;a._propagators=[];for(var c=0,d=b.length;c<d;++c){var e=b[c];if(e.varNames){console.warn("saw constraint.varNames, converting to varIndexes, log out result and update test accordingly"),e.varIndexes=e.varNames.map(function(b){return De(a._varNamesTrie,b)});var f=e.param;delete e.param,delete e.varNames,e.param=f}H(a,e.name,e.varIndexes,e.param,e)}}function H(a,b,c,d,e){switch(b){case"plus":return pd(a,c[0],c[1],c[2]);case"min":return qd(a,c[0],c[1],c[2]);case"ring-mul":return rd(a,c[0],c[1],c[2]);case"ring-div":return jd(a,c[0],c[1],c[2]);case"mul":return hd(a,c[0],c[1],c[2]);case"sum":return sd(a,c.slice(0),d);case"product":return td(a,c.slice(0),d);case"distinct":return md(a,c.slice(0));case"reifier":return cd(a,d,c[0],c[1],c[2]);case"neq":return ld(a,c[0],c[1]);case"eq":return dd(a,c[0],c[1]);case"gte":return kd(a,c[0],c[1]);case"lte":return gd(a,c[0],c[1]);case"gt":return fd(a,c[0],c[1]);case"lt":return ed(a,c[0],c[1]);default:Xc("UNEXPECTED_NAME: "+b)}}function I(a){var b=a.varDistOptions;for(var c in b){var d=De(a._varNamesTrie,c);d<0&&Xc("Found markov var options for an unknown var name ("+c+")");var e=b[c];if(e&&"markov"===e.valtype)return ud(a,d)}}function J(a){for(var b=a.varStratConfig;b;){if(b.priorityByName){for(var c={},d=b.priorityByName,e=0,f=d.length;e<f;++e){var g=De(a._varNamesTrie,d[e]);c[g]=f-e}b._priorityByIndex=c}b=b.fallback}}function K(a){a._varNamesTrie||(a._varNamesTrie=re(a.allVarNames)),a._defaultRng||(a._defaultRng=a.rngCode?Function(a.rngCode):Math.random),G(a),I(a),p(a),J(a)}function L(a,b,c){return{_class:"$constraint",name:a,varIndexes:b,param:c}}function M(a){return Ie[a]?Ie[a]:void Xc("distribution.get_defaults: Unknown preset: "+a)}function N(a,b,c,d){for(var e=!(arguments.length>4&&void 0!==arguments[4])||arguments[4],f=[],g=[],h=0,i=0;i<b.length;i++){var j=b[i];if(j>0){var k=c[i];ia(a,k)&&(h+=j,g.push(h),f.push(k))}}if(0!==g.length)return 1===g.length?f[0]:O(d,h,g,f,e)}function O(a,b,c,d,e){var f=a(),g=f;e&&(g=f*b);for(var h=0;h<c.length;h++){var i=c[h];if(i>g)break}return d[h]}function P(a,b,c,d){var e=b.valueStratName,f=b.varDistOptions,g=b.allVarNames[c],h=f[g]&&f[g].valtype;return h&&(e=h),"function"==typeof e?e(a,c,d):Q(e,a,b,c,d)}function Q(a,b,c,d,e){switch(a){case"max":return T(b,d,e);case"markov":return Z(b,c,d,e);case"mid":return U(b,d,e);case"min":return S(b,d,e);case"minMaxCycle":return X(b,d,e);case"list":return R(b,c,d,e);case"naive":return _b(mb(b.vardoms[d]));case"splitMax":return W(b,d,e);case"splitMin":return V(b,d,e);case"throw":return ASSERT(!1,"not expecting to pick this distributor")}Xc("unknown next var func",a)}function R(a,b,c,d){var e=a.vardoms[c],f=b.allVarNames[c],g=b.varDistOptions,h=g[f],i=h.list,j="";h.fallback&&(j=h.fallback.valtype);var k=i;switch("function"==typeof i&&(k=i(a,f,d)),d){case Je:var l=Ca(e,k);return l===ef?j?Q(j,a,b,c,d):Le:(a._lastChosenValue=l,_b(l));case Ke:return a._lastChosenValue>=0?Mb(e,a._lastChosenValue):j?Q(j,a,b,c,d):Le}return Le}function S(a,b,c){var d=a.vardoms[b];switch(c){case Je:var e=mb(d);return a._lastChosenValue=e,_b(e);case Ke:return Mb(d,a._lastChosenValue)}return Le}function T(a,b,c){var d=a.vardoms[b];switch(c){case Je:var e=rb(d);return a._lastChosenValue=e,_b(e);case Ke:return Mb(d,a._lastChosenValue)}return Le}function U(a,b,c){var d=a.vardoms[b];switch(c){case Je:var e=kb(d);return a._lastChosenValue=e,_b(e);case Ke:return Mb(d,a._lastChosenValue)}return Le}function V(a,b,c){var d=a.vardoms[b],e=rb(d);switch(c){case Je:var f=mb(d),g=f+Math.floor((e-f)/2);return a._lastChosenValue=g,Ka(d,ac(f,g));case Ke:return Ka(d,ac(a._lastChosenValue+1,e))}return Le}function W(a,b,c){var d=a.vardoms[b],e=mb(d);switch(c){case Je:var f=rb(d),g=e+Math.floor((f-e)/2);return a._lastChosenValue=g,Ka(d,ac(g+1,f));case Ke:return Ka(d,ac(e,a._lastChosenValue))}return Le}function X(a,b,c){return Y(b)?S(a,b,c):T(a,b,c)}function Y(a){return a%2===0}function Z(a,b,c,d){var e=a.vardoms[c];switch(d){case Je:var f=b.allVarNames[c],g=b.varDistOptions,h=g[f],i=h.expandVectorsWith,j=h.random||b._defaultRng,k=$c("number"==typeof i,h.legend,e),l=k.length;if(!l)return Le;var m=ad(a,h.matrix,i,l),n=N(e,m,k,j);return null==n?Le:(a._lastChosenValue=n,_b(n));case Ke:var o=a._lastChosenValue,p=Mb(e,o);return p}return Le}function $(a,b){var c=b.varStratConfig,d=_(c.type),e=aa(a,b,d,c);return e}function _(a){switch(a){case"naive":return null;case"size":return ba;case"min":return ca;case"max":return da;case"markov":return ea;case"list":return fa;case"throw":return Xc("not expecting to pick this distributor")}return Xc("unknown next var func",a)}function aa(a,b,c,d){var e=0,f=a._unsolved,g=f[e++];if(c)for(var h=f.length;e<h;e++){var i=f[e];Me===c(a,b,i,g,d)&&(g=i)}return g}function ba(a,b,c,d){var e=gb(a.vardoms[c])-gb(a.vardoms[d]);return e<0?Me:e>0?Oe:Ne}function ca(a,b,c,d){var e=mb(a.vardoms[c])-mb(a.vardoms[d]);return e<0?Me:e>0?Oe:Ne}function da(a,b,c,d){var e=rb(a.vardoms[c])-rb(a.vardoms[d]);return e>0?Me:e<0?Oe:Ne}function ea(a,b,c,d,e){var f=b.varDistOptions,g=b.allVarNames[c];if(f[g]&&"markov"===f[g].valtype)return Me;var h=b.allVarNames[d];return f[h]&&"markov"===f[h].valtype?Oe:ga(a,b,c,d,e.fallback)}function fa(a,b,c,d,e){var f=e._priorityByIndex,g=f[c],h=f[d];if(!g&&!h)return ga(a,b,c,d,e.fallback);var i=e.inverted;return h?g&&g>h?i?Oe:Me:i?Me:Oe:i?Oe:Me}function ga(a,b,c,d,e){if(!e)return Ne;var f=e.type;switch(f){case"size":return ba(a,b,c,d);case"min":return ca(a,b,c,d);case"max":return da(a,b,c,d);case"markov":return ea(a,b,c,d,e);case"list":return fa(a,b,c,d,e);case"throw":return Xc("nope")}return Xc("Unknown var dist fallback name: "+f)}function ha(a,b,c){var d=(1<<1+(0|c)-(0|b))-1<<b;return a|d}function ia(a,b){return"number"==typeof a?ja(a,b):ma(a,b)}function ja(a,b){return a>=hf?ka(a,b):la(a,b)}function ka(a,b){return(a^hf)===b}function la(a,b){return!(b<$e||b>gf)&&0!==(a&1<<b)}function ma(a,b){return na(a,b)!==af}function na(a,b){for(var c=a.length,d=0;d<c;d+=We){var e=ta(a,d);if(!(e<=b))break;var f=ta(a,d+Ve);if(f>=b)return d}return af}function oa(a){return"number"==typeof a?pa(a):sa(a)}function pa(a){return a>=hf?qa(a):ra(a)}function qa(a){return a^hf}function ra(a){var b=pb(a);return a===1<<b?b:ef}function sa(a){if(a.length!==We)return ef;var b=ta(a,Pe),c=ta(a,Qe);return b===c?b:ef}function ta(a,b){return a.charCodeAt(b)<<16|a.charCodeAt(b+1)}function ua(a){return String.fromCharCode(a>>>16&65535,65535&a)}function va(a,b){return String.fromCharCode(a>>>16&65535,65535&a,b>>>16&65535,65535&b)}function wa(a){if(!a.length)return[];a=a.slice(0),a.sort(function(a,b){return a-b});for(var b=[],c=void 0,d=void 0,e=0;e<a.length;e++){var f=a[e];0===e?(d=f,c=f):(f>c+1&&(b.push(d,c),d=f),c=f)}return b.push(d,c),b}function xa(a){return"number"==typeof a?ya(a):Ba(a)}function ya(a){return a>=hf?za(a):Aa(a)}function za(a){return[a^hf]}function Aa(a){for(var b=[],c=0;c<gf;++c)(a&1<<c>>>0)>0&&b.push(c);return b}function Ba(a){for(var b=[],c=0,d=a.length;c<d;c+=We)for(var e=ta(a,c),f=ta(a,c+Ve);e<=f;++e)b.push(e);return b}function Ca(a,b){return"number"==typeof a?Da(a,b):Ga(a,b)}function Da(a,b){return a>=hf?Ea(a,b):Fa(a,b)}function Ea(a,b){var c=a^hf;return b.indexOf(c)>=0?c:ef}function Fa(a,b){for(var c=0;c<b.length;++c){var d=b[c];if(d<=gf&&(a&1<<d)>0)return d}return ef}function Ga(a,b){for(var c=0;c<b.length;c++){var d=b[c];if(ma(a,d))return d}return ef}function Ha(a){return a?a.length===We?oc(a):(a=Ia(a),a=Ja(a),oc(a)):Xe}function Ia(a){if(!a)return Ye;var b=a.length;if(b<=We)return a;for(var c=0,d=ta(a,c),e=ta(a,c+Ve),f=Ye,g=Ye,h=We;h<b;h+=We){var i=ta(a,h);i<d||i===d&&ta(a,h+Ve)<e?f+=a[h]+a[h+1]+a[h+2]+a[h+3]:g+=a[h]+a[h+1]+a[h+2]+a[h+3]}return""+Ia(f)+a[c]+a[c+1]+a[c+Ve]+a[c+Ve+1]+Ia(g)}function Ja(a){if(!a)return Ye;var b=a.length;if(b===We)return a;for(var c=a[Pe]+a[Pe+1],d=ta(a,Qe),e=Qe,f=We;f<b;f+=We){var g=ta(a,f),h=ta(a,f+Ve);g<=d+1?h>d&&(d=h,e=f+Ve):(c+=a[e]+a[e+1]+a[f]+a[f+1],d=h,e=f+Ve)}return c+a[e]+a[e+1]}function Ka(a,b){if(a===b)return a;var c="number"==typeof a,d="number"==typeof b;return c&&d?La(a,b):c?Pa(a,b):d?Pa(b,a):Sa(a,b)}function La(a,b){var c=a>=hf,d=b>=hf;return c?d?Na(a,b):Ma(a,b):d?Ma(b,a):Oa(a,b)}function Ma(a,b){var c=a^hf;return c<=gf&&b&1<<c?a:Xe}function Na(a,b){return a===b?a:Xe}function Oa(a,b){return rc(a&b)}function Pa(a,b){return a>=hf?Qa(a,b):Ra(a,b)}function Qa(a,b){for(var c=a^hf,d=0,e=b.length;d<e;d+=We){var f=ta(b,d),g=ta(b,d+Ve);if(c<f)break;if(c<=g)return a}return Xe}function Ra(a,b){for(var c=Xe,d=0,e=b.length;d<e;d+=We){var f=ta(b,d);if(f>gf)break;for(var g=ta(b,d+Ve),h=f,i=Re(gf,g);h<=i;++h){var j=1<<h;a&j&&(c|=j)}}return rc(c)}function Sa(a,b){var c=a.length,d=b.length;if(0===(c|d))return Xe;for(var e=Ye,f=0,g=0,h=ta(a,Pe),i=ta(a,Qe),j=ta(b,Pe),k=ta(b,Qe);;)if(i<j){if(f+=We,f>=c)break;h=ta(a,f),i=ta(a,f+Ve)}else if(k<h){if(g+=We,g>=d)break;j=ta(b,g),k=ta(b,g+Ve)}else{var l=Re(i,k);if(e+=va(Se(h,j),l),l+=2,h=j=l,i<l){if(f+=We,f>=c)break;h=ta(a,f),i=ta(a,f+Ve)}if(k<l){if(g+=We,g>=d)break;j=ta(b,g),k=ta(b,g+Ve)}}return e===Ye?Xe:oc(e)}function Ta(a){return"number"==typeof a?a>=hf?"soldom(["+(a^hf)+","+(a^hf)+"])":"numdom(["+fc(a)+"])":"string"==typeof a?"strdom(["+ic(a)+"])":a instanceof Array?"arrdom(["+a+"])":"???dom("+a+")"}function Ua(a,b){if(a&&b){var c=void 0;do{if(c=0,a.length>We){var d=Wa(b),e=Va(a,d);c+=a.length-e.length,a=e}if(b.length>We){var f=Wa(a),g=Va(b,f);c+=b.length-g.length,b=g}}while(0!==c)}return[a,b]}function Va(a,b){for(var c=a[Pe]+a[Pe+1],d=ta(a,Qe),e=Qe,f=We,g=a.length;f<g;f+=We){var h=ta(a,f),i=ta(a,f+Ve);h-d>b&&(c+=a[e]+a[e+1]+a[f]+a[f+1]),d=i,e=f+Ve}return c+=a[e]+a[e+1]}function Wa(a){for(var b=_e,c=0,d=a.length;c<d;c+=We){var e=ta(a,c),f=ta(a,c+Ve),g=1+f-e;g<b&&(b=g)}return b}function Xa(a,b){return"number"==typeof a&&(a=kc(a)),"number"==typeof b&&(b=kc(b)),Ya(a,b)}function Ya(a,b){for(var c=Ye,d=0,e=a.length;d<e;d+=We){var f=ta(a,d),g=ta(a,d+Ve);c+=Za(b,f,g)}return Ha(c)}function Za(a,b,c){for(var d=Ye,e=0,f=a.length;e<f;e+=We){var g=ta(a,e),h=ta(a,e+Ve);d+=va(Re(_e,b*g),Re(_e,c*h))}return d}function $a(a,b){return"number"==typeof a&&(a=kc(a)),a=Za(a,b,b),Ha(a)}function _a(a,b){var c=!(arguments.length>2&&void 0!==arguments[2])||arguments[2];return"number"==typeof a&&(a=kc(a)),"number"==typeof b&&(b=kc(b)),ab(a,b,c)}function ab(a,b){for(var c=!(arguments.length>2&&void 0!==arguments[2])||arguments[2],d=Ye,e=0,f=b.length;e<f;e+=We){var g=ta(b,e),h=ta(b,e+Ve);d+=bb(a,g,h,c)}return Ha(d)}function bb(a,b,c,d){for(var e=Ye,f=0,g=a.length;f<g;f+=We){var h=ta(a,f),i=ta(a,f+Ve);if(c>0){var j=h/c,k=b>0?i/b:_e,l=Ue(j),m=Te(k);l<=m?e+=va(l,m):d&&(e+=va(m,m))}}return e}function cb(a,b){return"number"==typeof a&&(a=kc(a)),"number"==typeof b&&(b=kc(b)),db(a,b)}function db(a,b){for(var c=Ye,d=0,e=b.length;d<e;d+=We){var f=ta(b,d),g=ta(b,d+Ve);c+=eb(a,f,g)}return Ha(c)}function eb(a,b,c){for(var d=Ye,e=0,f=a.length;e<f;e+=We){var g=ta(a,e),h=ta(a,e+Ve),i=c?g/c:$e,j=b?h/b:_e,k=Ue(i),l=Te(j);k<=l&&(d+=va(k,l))}return d}function fb(a,b){"number"==typeof a&&(a=kc(a));var c=eb(a,b,b);return Ha(c)}function gb(a){return"number"==typeof a?hb(a):jb(a)}function hb(a){return a>=hf?1:ib(a)}function ib(a){switch(a){case 0:return 0;case 1:return 1;case 2:return 1;case 3:return 2}return(1&a)+(a>>1&1)+(a>>2&1)+(a>>3&1)+(a>>4&1)+(a>>5&1)+(a>>6&1)+(a>>7&1)+(a>>8&1)+(a>>9&1)+(a>>10&1)+(a>>11&1)+(a>>12&1)+(a>>13&1)+(a>>14&1)+(a>>15&1)+(a>>16&1)+(a>>17&1)+(a>>18&1)+(a>>19&1)+(a>>20&1)+(a>>21&1)+(a>>22&1)+(a>>23&1)+(a>>24&1)+(a>>25&1)+(a>>26&1)+(a>>27&1)+(a>>28&1)+(a>>29&1)+(a>>30&1)+(a>>31&1)|0}function jb(a){for(var b=0,c=0,d=a.length;c<d;c+=We)b+=1+ta(a,c+Ve)-ta(a,c);return b}function kb(a){if("number"==typeof a){if(a>=hf)return a^hf;a=kc(a)}return lb(a)}function lb(a){if(!a)return ef;for(var b=jb(a),c=Te(b/2),d=void 0,e=void 0,f=0,g=a.length;f<g;f+=We){d=ta(a,f),e=ta(a,f+Ve);var h=1+e-d;if(c<h)break;c-=h}return d+c}function mb(a){return"number"==typeof a?nb(a):qb(a)}function nb(a){return a>=hf?ob(a):pb(a)}function ob(a){return a^hf}function pb(a){if(1===(0|a))return 0;if(2===(0|a))return 1;if(3===(0|a))return 0;switch((a&-a)%37|0){case 0:return-1;case 1:return 0;case 2:return 1;case 3:return 26;case 4:return 2;case 5:return 23;case 6:return 27;case 7:return 0;case 8:return 3;case 9:return 16;case 10:return 24;case 11:return 30;case 12:return 28;case 13:return 11;case 14:return 0;case 15:return 13;case 16:return 4;case 17:return 7;case 18:return 17;case 19:return 0;case 20:return 25;case 21:return 22;case 22:return-1;case 23:return 15;case 24:return 29;case 25:return 10;case 26:return 12;case 27:return 6;case 28:return 0;case 29:return 21;case 30:return 14;case 31:return 9;case 32:return 5;case 33:return 20;case 34:return 8;case 35:return 19}return 18}function qb(a){return a?ta(a,Pe):ef}function rb(a){return"number"==typeof a?sb(a):vb(a)}function sb(a){return a>=hf?tb(a):ub(a)}function tb(a){return a^hf}function ub(a){var b=30;switch(0|a){case 0:return-1;case 1:return 0;case 2:return 1;case 3:return 1}do{if(a&1<<b)break;b=b-1|0}while((0|b)>=0);return 0|b}function vb(a){return a?ta(a,a.length-Ve):ef}function wb(a){return"number"==typeof a&&a>=hf}function xb(a){return void 0===Ze&&(Ze=_b(0)),a===Ze}function yb(a){return!(0===mb(a))}function zb(a,b){return b?Mb(a,0):Gb(a,0)}function Ab(a){return a===Xe}function Bb(a,b){return"number"==typeof a?Cb(a,b):Fb(a,b)}function Cb(a,b){return a>=hf?Db(a,b):rc(Eb(a,b))}function Db(a,b){var c=a^hf;return c>=b?Xe:a}function Eb(a,b){switch(b){case 0:return 0;case 1:return 1&a;case 2:return 3&a;case 3:return 7&a;case 4:return 15&a;case 5:return 31&a;case 6:return 63&a;case 7:return 127&a;case 8:return 255&a;case 9:return 511&a;case 10:return 1023&a;case 11:return 2047&a;case 12:return 4095&a;case 13:return 8191&a;case 14:return 16383&a;case 15:return 32767&a;case 16:return 65535&a;case 17:return 131071&a;case 18:return 262143&a;case 19:return 524287&a;case 20:return 1048575&a;case 21:return 2097151&a;case 22:return 4194303&a;case 23:return 8388607&a;case 24:return 16777215&a;case 25:return 33554431&a;case 26:return 67108863&a;case 27:return 134217727&a;case 28:return 268435455&a;case 30:return a}return a}function Fb(a,b){for(var c=0,d=a.length;c<d;c+=We){var e=ta(a,c),f=ta(a,c+Ve);if(e>=b)return c?oc(a.slice(0,c)):Xe;if(b<=f){if(0===c&&b===e+1){var g=a.slice(0,Ve);return oc(g+g)}var h=a.slice(0,c+Ve)+ua(b-1);return oc(h)}}return a}function Gb(a,b){return b>=_e?a:b<$e?cc():Bb(a,b+1)}function Hb(a,b){return"number"==typeof a?Ib(a,b):Lb(a,b)}function Ib(a,b){return a>=hf?Jb(a,b):oc(Kb(a,b))}function Jb(a,b){var c=a^hf;return c<=b?Xe:a}function Kb(a,b){switch(b){case 0:return 2147483646&a;case 1:return 2147483644&a;case 2:return 2147483640&a;case 3:return 2147483632&a;case 4:return 2147483616&a;case 5:return 2147483584&a;case 6:return 2147483520&a;case 7:return 2147483392&a;case 8:return 2147483136&a;case 9:return 2147482624&a;case 10:return 2147481600&a;case 11:return 2147479552&a;case 12:return 2147475456&a;case 13:return 2147467264&a;case 14:return 2147450880&a;case 15:return 2147418112&a;case 16:return 2147352576&a;case 17:return 2147221504&a;case 18:return 2146959360&a;case 19:return 2146435072&a;case 20:return 2145386496&a;case 21:return 2143289344&a;case 22:return 2139095040&a;case 23:return 2130706432&a;case 24:return 2113929216&a;case 25:return 2080374784&a;case 26:return 2013265920&a;case 27:return 1879048192&a;case 28:return 1610612736&a;case 29:return 1073741824&a;case 30:return 0}return b<0?a:0}function Lb(a,b){for(var c=0,d=a.length;c<d;c+=We){var e=ta(a,c),f=ta(a,c+Ve);if(e>b)return oc(c?a.slice(c):a);if(f===b)return c>=d-We?Xe:oc(a.slice(c+We));if(b<=f)return oc(ua(b+1)+a.slice(c+Ve))}return Xe}function Mb(a,b){return"number"==typeof a?Nb(a,b):oc(Qb(a,b))}function Nb(a,b){return a>=hf?Ob(a,b):Pb(a,b)}function Ob(a,b){return b===(a^hf)?Xe:a}function Pb(a,b){if(b>30)return oc(a);var c=1<<b;return rc((a|c)^c)}function Qb(a,b){for(var c=-1,d=-1,e=0,f=a.length;e<f;e+=We){var g=ta(a,e);if(b<g)break;var h=ta(a,e+Ve);if(b<=h)return Rb(a,f,e,g,h,b,c,d);c=g,d=h}return a}function Rb(a,b,c,d,e,f,g,h){if(b===We){if(e-d===1)return((d===f?e:d)|hf)>>>0;if(d===e)return Xe}else if(c&&b===2*We&&d===e&&g===h)return(g|hf)>>>0;if(c===b-We&&f===e){if(d===e&&h<=gf){var i=b-We;return tc(a.slice(0,i),i)}if(e-1<=gf)return tc(a.slice(0,-Ve)+ua(e-1),b)}var j=a.slice(0,c),k=a.slice(c+We);return e===f?d===f?j+k:j+va(d,e-1)+k:d===f?j+va(d+1,e)+k:j+va(d,f-1)+va(f+1,e)+k}function Sb(a,b){var c="number"==typeof a,d="number"==typeof b;return c&&d?Tb(a,b):c?Xb(a,b):d?Xb(b,a):$b(a,b)}function Tb(a,b){return a>=hf?b>=hf?Ub(a,b):Vb(a,b):b>=hf?Vb(b,a):Wb(a,b)}function Ub(a,b){return a!==b}function Vb(a,b){var c=a^hf;return c>gf||0===(b&1<<c)}function Wb(a,b){return 0===(a&b)}function Xb(a,b){return a>=hf?Yb(a,b):Zb(a,b)}function Yb(a,b){for(var c=a^hf,d=0,e=b.length;d<e;d+=We){var f=ta(b,d),g=ta(b,d+Ve);if(c<f)return!0;if(c<=g)return!1}return!0}function Zb(a,b){for(var c=0,d=b.length,e=0;e<=gf;++e)if(a&1<<e){for(;c<d;){var f=ta(b,c),g=ta(b,c+Ve);if(e>=f&&e<=g)return!1;if(f>gf)return!0;if(f>e)break;c+=We}if(c>=d)return!0}return!0}function $b(a,b){for(var c=a.length,d=b.length,e=0,f=0,g=ta(a,Pe),h=ta(a,Qe),i=ta(b,Pe),j=ta(b,Qe);;)if(h<i){if(e+=We,e>=c)break;g=ta(a,e),h=ta(a,e+Ve)}else{if(!(j<g))return!1;if(f+=We,f>=d)break;i=ta(b,f),j=ta(b,f+Ve)}return!0}function _b(a){return(a|hf)>>>0}function ac(a,b){return a===b?_b(a):b<=gf?bc(a,b):va(a,b)}function bc(a,b){return(1<<1+b-a)-1<<a}function cc(){return Xe}function dc(a){return a|=a>>1,a|=a>>2,a|=a>>4,a|=a>>8,a|=a>>16}function ec(a,b){return"number"==typeof a?fc(a):"string"==typeof a?ic(a):b?a.slice(0):a}function fc(a){return a>=hf?gc(a):hc(a)}function gc(a){var b=a^hf;return[b,b]}function hc(a){if(a===Xe)return[];var b=[],c=-1,d=-1;if(1&a&&(c=0,d=0),2&a&&(0!==c&&(c=1),d=1),4&a&&(0===d?(b.push(0,0),c=2):1!==d&&(c=2),d=2),8&a&&(d<0?c=3:2!==d&&(b.push(c,d),c=3),d=3),a>=16)for(var e=4;e<=gf;++e)a&1<<e&&(d<0?c=e:d!==e-1&&(b.push(c,d),c=e),d=e);return b.push(c,d),b}function ic(a){if(a===Xe)return[];for(var b=[],c=0,d=a.length;c<d;c+=We){var e=ta(a,c),f=ta(a,c+Ve);b.push(e,f)}return b}function jc(a){return"number"==typeof a?kc(a):"string"==typeof a?a:nc(a)}function kc(a){return a>=hf?lc(a):mc(a)}function lc(a){var b=a^hf;return va(b,b)}function mc(a){if(a===Xe)return Ye;var b=Ye,c=-1,d=-1;if(1&a&&(c=0,d=0),2&a&&(0!==c&&(c=1),d=1),4&a&&(0===d?(b=va(0,0),c=2):1!==d&&(c=2),d=2),8&a&&(d<0?c=3:2!==d&&(b+=va(c,d),c=3),d=3),a>=16)for(var e=4;e<=gf;++e)a&1<<e&&(d<0?c=e:d!==e-1&&(b+=va(c,d),c=e),d=e);return b+=va(c,d)}function nc(a){for(var b=Ye,c=0,d=a.length;c<d;c+=ff){var e=a[c],f=a[c+1];b+=va(e,f)}return b}function oc(a){return"number"==typeof a?qc(a):sc(a)}function pc(a){return a instanceof Array&&(a=nc(a)),oc(a)}function qc(a){return a>=hf?a:rc(a)}function rc(a){var b=oa(a);return b===ef?a:_b(b)}function sc(a){var b=a.length;if(!b)return Xe;var c=ta(a,0),d=ta(a,b-Ve);return b===We&&c===d?_b(c):d<=gf?tc(a,b):a}function tc(a,b){if(0===b)return Xe;for(var c=ta(a,0),d=ta(a,0+Ve),e=ha(Xe,c,d),f=We;f<b;f+=We){var g=ta(a,f),h=ta(a,f+Ve);e=ha(e,g,h)}return e}function uc(a,b){if(!a)return Xe;if(!b)return Xe;if(0===mb(a)&&0===mb(b))return ac(0,rb(a));var c="number"==typeof a,d="number"==typeof b;if(c)return d?wc(a,b):yc(a,b);var e=void 0;return e=d?Bc(a,b):vc(a,b),oc(Ha(e))}function vc(a,b){var c=Ua(a,b);a=c[0],b=c[1];for(var d=Ye,e=0,f=a.length;e<f;e+=We){var g=ta(a,e),h=ta(a,e+Ve);d+=Dc(g,h,b)}return d}function wc(a,b){if(a>=hf){var c=a^hf;if(b>=hf){var d=c-(b^hf);return d<0?Xe:_b(d)}return c<=gf?Ac(c,c,b):Cc(c,c,b)}return xc(a,b)}function xc(a,b){if(ja(a,0)&&ja(b,0))return dc(a);for(var c=0;0===(a&1<<c);)++c;for(var d=c,e=c,f=1<<++c,g=Xe;f<=a&&c<=gf;)(f&a)>0&&(e!==c-1&&(g|=Ac(d,e,b),d=c),e=c),f=1<<++c;return g|Ac(d,e,b)}function yc(a,b){if(a>=hf){var c=a^hf;return c<=gf?Ec(c,c,b):Dc(c,c,b)}return zc(a,b)}function zc(a,b){if(a>=hf){var c=a^hf;return Ec(c,c,b)}if(ja(a,0)&&0===mb(b))return dc(a);for(var d=0;0===(a&1<<d);)++d;for(var e=d,f=d,g=1<<++d,h=Xe;g<=a&&d<=gf;)(g&a)>0&&(f!==d-1&&(h|=Ec(e,f,b),e=d),f=d),g=1<<++d;return h|Ec(e,f,b)}function Ac(a,b,c){if(c>=hf){var d=c^hf;return Gc(a,b,d,d)}for(var e=0;0===(c&1<<e);)++e;for(var f=e,g=e,h=1<<++e,i=Xe;h<=c&&e<=gf;)(h&c)>0&&(g!==e-1&&(i|=Gc(a,b,f,g),f=e),g=e),h=1<<++e;return i|Gc(a,b,f,g)}function Bc(a,b){if(0===mb(a)&&0===mb(b))return ac(0,rb(a));for(var c=Ye,d=0,e=a.length;d<e;d+=We){var f=ta(a,d),g=ta(a,d+Ve);c+=Cc(f,g,b)}return c}function Cc(a,b,c){if(c===Xe)return Xe;if(c>=hf){var d=c^hf;return Fc(a,b,d,d)}for(var e=0;0===(c&1<<e);)++e;for(var f=e,g=e,h=1<<++e,i=Ye;h<=c&&e<=gf;)(h&c)>0&&(g!==e-1&&(i+=Fc(a,b,f,g),f=e),g=e),h=1<<++e;return i+Fc(a,b,f,g)}function Dc(a,b,c){for(var d=Ye,e=0,f=c.length;e<f;e+=We){var g=ta(c,e),h=ta(c,e+Ve);d+=Fc(a,b,g,h)}return d}function Ec(a,b,c){for(var d=Xe,e=0,f=c.length;e<f;e+=We){var g=ta(c,e),h=ta(c,e+Ve);d|=Gc(a,b,g,h)}return d}function Fc(a,b,c,d){var e=b-c;if(e>=$e){var f=Se($e,a-d);return va(f,e)}return Ye}function Gc(a,b,c,d){var e=b-c;if(e>=$e){var f=Se($e,a-d),g=bc(f,e);return g}return Xe}function Hc(a,b){if(!a)return Xe;if(!b)return Xe;var c="number"==typeof a,d="number"==typeof b,e=void 0;if(c&&d){if(Jc(a,b))return Lc(a,b);e=Kc(a,b)}else e=c?Nc(a,b):d?Nc(b,a):Ic(a,b);return oc(Ha(e))}function Ic(a,b){var c=Ua(a,b);a=c[0],b=c[1];for(var d=Ye,e=0,f=a.length;e<f;e+=We){var g=ta(a,e),h=ta(a,e+Ve);
d+=Pc(g,h,b)}return d}function Jc(a,b){return rb(a)+rb(b)<=gf}function Kc(a,b){if(a>=hf){var c=a^hf;return Oc(c,c,b)}for(var d=0;0===(a&1<<d);)++d;for(var e=d,f=d,g=1<<++d,h=Ye;g<=a&&d<=gf;)(g&a)>0&&(f!==d-1&&(h+=Oc(e,f,b),e=d),f=d),g=1<<++d;return h+Oc(e,f,b)}function Lc(a,b){if(a>=hf){var c=a^hf;return Mc(c,c,b)}for(var d=0;0===(a&1<<d);)++d;for(var e=d,f=d,g=1<<++d,h=Xe;g<=a&&d<=gf;)(g&a)>0&&(f!==d-1&&(h|=Mc(e,f,b),e=d),f=d),g=1<<++d;return h|Mc(e,f,b)}function Mc(a,b,c){if(c>=hf){var d=c^hf;return Rc(a,b,d,d)}for(var e=0;0===(c&1<<e);)++e;for(var f=e,g=e,h=1<<++e,i=Xe;h<=c&&e<=gf;)(h&c)>0&&(g!==e-1&&(i|=Rc(a,b,f,g),f=e),g=e),h=1<<++e;return i|Rc(a,b,f,g)}function Nc(a,b){if(a>=hf){var c=a^hf;return Pc(c,c,b)}for(var d=0;0===(a&1<<d);)++d;for(var e=d,f=d,g=1<<++d,h=Ye;g<=a&&d<=gf;)(g&a)>0&&(f!==d-1&&(h+=Pc(e,f,b),e=d),f=d),g=1<<++d;return h+Pc(e,f,b)}function Oc(a,b,c){if(c>=hf){var d=c^hf;return Qc(a,b,d,d)}for(var e=0;0===(c&1<<e);)++e;for(var f=e,g=e,h=1<<++e,i=Ye;h<=c&&e<=gf;)(h&c)>0&&(g!==e-1&&(i+=Qc(a,b,f,g),f=e),g=e),h=1<<++e;return i+Qc(a,b,f,g)}function Pc(a,b,c){for(var d=Ye,e=0,f=c.length;e<f;e+=We){var g=ta(c,e),h=ta(c,e+Ve);d+=Qc(a,b,g,h)}return d}function Qc(a,b,c,d){var e=a+c;if(e<=_e){var f=Re(_e,b+d);return va(e,f)}return Ye}function Rc(a,b,c,d){var e=bc(a+c,b+d);return e}function Sc(a,b,c,d,e,f){var g=a.varDistOptions,h=b||a.initialDomains,i=a.allVarNames,j=f?function(a){return Tc(i[a])}:d?Vc:Uc,k=a.allVarNames.map(function(a,b){var c=Wc(h[b]),d=": "+j(b)+" = "+c;f||a===String(b)||(d+=" alias("+Tc(a)+")");var e=g[a];if(e&&("list"!==e.valtype||e.list&&e.list.length))switch(d+=" @"+e.valtype,e.valtype){case"markov":"expandVectorsWith"in e&&(d+="expand("+(e.expandVectorsWith||0)+")"),"legend"in e&&(d+=" legend("+e.legend.join(" ")+")"),"matrix"in e&&(d+=" matrix("+JSON.stringify(e.matrix).replace(/"/g,"")+")");break;case"list":d+="function"==typeof e.list?" prio(???func???)":" prio("+e.list.join(" ")+")";break;case"max":case"mid":case"min":case"minMaxCycle":case"naive":case"splitMax":case"splitMin":break;default:console.warn("Unknown value strategy override: "+e.valtype),d+=" @? "+JSON.stringify(e)}return d}),l=c?[]:a.allConstraints.map(function(a){var b=a.varIndexes,c=b.map(j);b.forEach(function(a,b){var d=oa(h[a]);d>=0&&(c[b]=d)});var g="";if("number"==typeof a.param){var i=oa(h[a.param]);g=i>=0?i:j(a.param)}var k="",l="";switch(a.name){case"reifier":var m=void 0;switch(a.param){case"eq":m="==";break;case"neq":m="!=";break;case"lt":m="<";break;case"lte":m="<=";break;case"gt":m=">";break;case"gte":m=">=";break;default:Xc("what dis param: "+m)}k+=c[2]+" = "+c[0]+" "+m+"? "+c[1];break;case"plus":k+=c[2]+" = "+c[0]+" + "+c[1];break;case"min":k+=c[2]+" = "+c[0]+" - "+c[1];break;case"ring-mul":k+=c[2]+" = "+c[0]+" * "+c[1];break;case"ring-div":k+=c[2]+" = "+c[0]+" / "+c[1];break;case"mul":k+=c[2]+" = "+c[0]+" * "+c[1];break;case"sum":k+=g+" = sum("+c.join(" ")+")";break;case"product":k+=g+" = product("+c.join(" ")+")";break;case"markov":k+="# markov("+c+")";break;case"distinct":k+="distinct("+c+")";break;case"eq":k+=c[0]+" == "+c[1];break;case"neq":k+=c[0]+" != "+c[1];break;case"lt":k+=c[0]+" < "+c[1];break;case"lte":k+=c[0]+" <= "+c[1];break;case"gt":k+=c[0]+" > "+c[1];break;case"gte":k+=c[0]+" >= "+c[1];break;default:console.warn("unknown constraint: "+a.name),k+="unknown = "+JSON.stringify(a)}var n=k;if((k.indexOf(f?"'":"$")<0||"distinct"===a.name&&c.length<=1||("product"===a.name||"sum"===a.name)&&0===c.length)&&(d||(l+=(l?", ":" # ")+"dropped; constraint already solved ("+k+") ("+b.map(j)+", "+j(a.param)+")"),k=""),!d||e){if(c.forEach(function(a,c){"string"==typeof a&&(n=n.replace(a,Wc(h[b[c]])))}),"number"==typeof a.param&&"string"==typeof g&&(n=n.replace(g,Wc(h[a.param]))),k||!d){for(var o=Math.max(0,30-k.length);o>=0;--o)k+=" ";k+=" # "+n}k+=l}return k}).filter(function(a){return!!a}),m=c?a._propagators.map(function(a){var b=a.index1,c=a.index2,e=a.index3,f=b>=0?oa(h[b]):-1,g=f>=0?f:b<0?void 0:j(b),i=c>=0?oa(h[c]):-1,k=i>=0?i:c<0?void 0:j(c),l=e>=0?oa(h[e]):-1,m=l>=0?l:e<0?void 0:j(e),n="",o="";switch(a.name){case"reified":var p=void 0;switch(a.arg3){case"eq":p="==";break;case"neq":p="!=";break;case"lt":p="<";break;case"lte":p="<=";break;case"gt":p=">";break;case"gte":p=">=";break;default:Xc("what dis param: "+p)}n+=m+" = "+g+" "+p+"? "+k;break;case"eq":n+=g+" == "+k;break;case"lt":n+=g+" < "+k;break;case"lte":n+=g+" <= "+k;break;case"mul":n+=m+" = "+g+" * "+k;break;case"div":n+=m+" = "+g+" / "+k;break;case"neq":n+=g+" != "+k;break;case"min":n+=m+" = "+g+" - "+k;break;case"ring":switch(a.arg1){case"plus":n+=m+" = "+g+" + "+k;break;case"min":n+=m+" = "+g+" - "+k;break;case"ring-mul":n+=m+" = "+g+" * "+k;break;case"ring-div":n+=m+" = "+g+" / "+k;break;default:throw new Error("Unexpected ring op:"+a.arg1)}break;case"markov":return"";default:console.warn("unknown propagator: "+a.name),n+="unknown = "+JSON.stringify(a)}var q=n;return n.indexOf("$")<0&&(d||(o+=(o?", ":" # ")+"dropped; constraint already solved ("+n+")"),n=""),d||("string"==typeof g&&(q=q.replace(g,Wc(h[b]))),"string"==typeof k&&(q=q.replace(k,Wc(h[c]))),"string"==typeof m&&(q=q.replace(m,Wc(h[e]))),n+=" ".repeat(Math.max(0,30-n.length))+" # initial: "+q,n+=o),n}).filter(function(a){return!!a}):[];return["## constraint problem export","@custom var-strat = "+JSON.stringify(a.varStratConfig),"@custom val-strat = "+a.valueStratName,k.join("\n")||"# no vars",l.join("\n")||m.join("\n")||"# no constraints","@custom targets "+("all"===a.targetedVars?" = all":"("+a.targetedVars.map(function(b){return j(De(a._varNamesTrie,b))}).join(" ")+")"),"## end of export"].join("\n\n")}function Tc(a){return"number"==typeof a?a:"'"+a+"'"}function Uc(a){return"$"+a+"$"}function Vc(a){var b=a.toString(36);return b[0]<"a"&&(b="$"+b),b}function Wc(a){var b=ec(a);if(2===b.length&&b[0]===b[1])return String(b[0]);if(b.length>2){for(var c=[],d=0,e=b.length;d<e;d+=2)c.push("["+b[d]+" "+b[d+1]+"]");b=c}return"["+b.join(" ")+"]"}function Xc(){for(var a=arguments.length,b=Array(a),c=0;c<a;c++)b[c]=arguments[c];throw new Error(b.join(": "))}function Yc(a,b,c){function d(){return a[aa]}function e(){++aa}function f(a,b){d()!==a&&_("Expected "+(b+" "||"")+"`"+a+"`, found `"+d()+"`"),e()}function g(){for(;aa<ba&&i(d());)e()}function h(){for(;!n();){var a=d();if(l(a))e();else{if(!k(a))break;z()}}}function i(a){return" "===a||"\t"===a}function j(a){return"\n"===a||"\r"===a}function k(a){return"#"===a}function l(a){return i(a)||j(a)}function m(){if(g(),aa<ba){var a=d();"#"===a?z():j(a)?e():_("Expected EOL but got `"+d()+"`")}}function n(){return aa>=ba}function o(){switch(h(),d()){case":":return p();case"#":return z();case"@":return V();default:if(!n())return A()}}function p(){e(),g();var c=q();g();var d=v();g();for(var f=void 0;"alias("===a.slice(aa,aa+6);)f||(f=[]),f.push(u(aa+=6)),g();var h=w();m(),b.decl(c,d,h,!0),f&&f.map(function(a){return b.decl(a,d,h,!0)})}function q(){return"'"===d()?r():s()}function r(){f("'");for(var b=aa;!n()&&"'"!==d();)e();return n()&&_("Quoted identifier must be closed"),b===aa&&_("Expected to parse identifier, found none"),e(),a.slice(b,aa-1)}function s(){var b=aa;for(d()>="0"&&d()<="9"&&_("Unquoted ident cant start with number");!n()&&t(d());)e();return n()&&_("Quoted identifier must be closed"),b===aa&&_("Expected to parse identifier, found none"),a.slice(b,aa)}function t(a){switch(a){case"(":case")":case",":case"[":case"]":case"'":case"#":return!1}return!l(a)}function u(){g();for(var b=aa;;){var c=d();if(")"===c)break;j(c)&&_("Alias must be closed with a `)` but wasnt (eol)"),n()&&_("Alias must be closed with a `)` but wasnt (eof)"),e()}var h=a.slice(b,aa);return h||_("The alias() can not be empty but was"),g(),f(")","`alias` to be closed by `)`"),h}function v(){var a=d();"="===a&&(e(),g(),a=d());var b=void 0;switch(a){case"[":if(f("[","domain start"),g(),b=[],"["===d()){do{e(),g();var c=K();g(),","===d()&&(e(),g());var h=K();g(),f("]","range-end"),g(),b.push(c,h),","===d()&&(e(),g())}while("["===d())}else if("]"!==d())do{g();var i=K();g(),","===d()&&(e(),g());var j=K();g(),b.push(i,j),","===d()&&(e(),g())}while("]"!==d());return f("]","domain-end"),b;case"*":return e(),[$e,_e];case"0":case"1":case"2":case"3":case"4":case"5":case"6":case"7":case"8":case"9":var k=K();return g(),[k,k]}_("Expecting valid domain start, found `"+a+"`")}function w(){if("@"===d()){e();for(var b={},c=aa;d()>="a"&&d()<="z";)e();var f=a.slice(c,aa);switch(f){case"list":x(b);break;case"markov":y(b);break;case"max":case"mid":case"min":case"minMaxCycle":case"naive":case"splitMax":case"splitMin":break;default:_("Expecting a strategy name after the `@` modifier (`"+f+"`)")}return b.valtype=f,b}}function x(b){g(),"prio("!==a.slice(aa,aa+5)&&_("Expecting the priorities to follow the `@list`"),aa+=5,b.list=S(),f(")","list end")}function y(b){for(;;){if(g(),"matrix("===a.slice(aa,aa+7)){var c=a.slice(aa+7,aa=a.indexOf(")",aa)),d="return "+c,h=Function(d);b.matrix=h(),aa===-1&&_("The matrix must be closed by a `)` but did not find any")}else if("legend("===a.slice(aa,aa+7))aa+=7,b.legend=S(),g(),f(")","legend closer");else{if("expand("!==a.slice(aa,aa+7))break;aa+=7,b.expandVectorsWith=K(),g(),f(")","expand closer")}e()}}function z(){for(f("#","comment start");!n()&&!j(d());)e();n()||e()}function A(){if(!F()){var a=I();g();var c=D();switch(g(),c){case"=":B(a);break;case"==":b.eq(a,I());break;case"!=":b.neq(a,I());break;case"<":b.lt(a,I());break;case"<=":b.lte(a,I());break;case">":b.gt(a,I());break;case">=":b.gte(a,I());break;case"&":b.neq(b.mul(a,I()),b.num(0));break;case"|":b.neq(b.plus(a,I()),b.num(0));break;case"^":b.eq(b.plus(b.isEq(a,0),b.isEq(I(),0)),1);break;case"!&":b.mul(a,I(),b.num(0));break;case"!^":b.eq(b.isEq(a,b.num(0)),b.isEq(I(),b.num(0)));break;default:c&&_("Unknown constraint op: ["+c+"]")}m()}}function B(a){var c="string"==typeof a&&!b.hasVar(a);c&&(a=b.decl(a));var e=I(a,c);g();var f=d();return n()||j(f)||k(f)?e:C(e,a,c)}function C(a,c,d){var e=E();switch(g(),e){case"==?":return d&&b.decl(c,[0,1],void 0,!1,!0),b.isEq(a,I(),c);case"!=?":return d&&b.decl(c,[0,1],void 0,!1,!0),b.isNeq(a,I(),c);case"<?":return d&&b.decl(c,[0,1],void 0,!1,!0),b.isLt(a,I(),c);case"<=?":return d&&b.decl(c,[0,1],void 0,!1,!0),b.isLte(a,I(),c);case">?":return d&&b.decl(c,[0,1],void 0,!1,!0),b.isGt(a,I(),c);case">=?":return d&&b.decl(c,[0,1],void 0,!1,!0),b.isGte(a,I(),c);case"+":return b.plus(a,I(),c);case"-":return b.minus(a,I(),c);case"*":return b.times(a,I(),c);case"/":return b.div(a,I(),c);default:return void 0!==e&&_("Unknown rop: `"+e+"`"),a}}function D(){var a=d();switch(a){case"=":return e(),"="===d()?(e(),"=="):"=";case"!":return e(),a=d(),"="===a?(e(),"!="):"&"===a?(e(),"!&"):"^"===a?(e(),"!^"):"!";case"<":return e(),"="===d()?(e(),"<="):"<";case">":return e(),"="===d()?(e(),">="):">";case"&":case"|":case"^":return e(),a;case"#":_("Expected to parse a cop but found a comment instead");break;default:n()&&_("Expected to parse a cop but reached eof instead"),_("Unknown cop char: `"+a+"`")}}function E(){var a=d();switch(a){case"=":e();var b=d();return"="===b?(e(),f("?","reifier suffix"),"==?"):"=";case"!":return e(),f("=","middle part of !=? op"),f("?","reifier suffix"),"!=?";case"<":return e(),"="===d()?(e(),f("?","reifier suffix"),"<=?"):(f("?","reifier suffix"),"<?");case">":return e(),"="===d()?(e(),f("?","reifier suffix"),">=?"):(f("?","reifier suffix"),">?");case"+":case"-":case"*":case"/":return e(),a;default:_("Wanted to parse a rop but next char is `"+a+"`")}}function F(){if("distinct("===a.slice(aa,aa+9))G();else{if("nall("!==a.slice(aa,aa+5))return!1;Q()}return!0}function G(){aa+=9,g();var a=H();b.distinct(a),g(),f(")","distinct call closer"),m()}function H(){var a=[];for(g();!n()&&")"!==d();){var b=I();a.push(b),g(),","===d()&&(e(),g())}return a}function I(a,c){var e=d(),f=void 0;if("("===e)f=J();else if("["===e){var g=v();f=g[0]===g[1]&&2===g.length?g[0]:b.decl(void 0,g)}else if(e>="0"&&e<="9")f=K();else{var h=q();"("===d()?"sum"===h?f=L(a):"product"===h?f=M(a):"all?"===h?(c&&b.decl(a,[0,1],void 0,!1,!0),f=N(a)):"nall?"===h?(c&&b.decl(a,[0,1],void 0,!1,!0),f=O(a)):"none?"===h?(c&&b.decl(a,[0,1],void 0,!1,!0),f=P(a)):_("Unknown constraint func: "+h):f=h}return f}function J(){f("(","group open"),g();var a=I();if(g(),"="===d()&&"="!==d())return B(a),g(),f(")","group closer"),a;if(")"===d())return e(),a;var b=C(a);return g(),f(")","group closer"),b}function K(){for(var b=aa;d()>="0"&&d()<="9";)e();return b===aa&&_("Expecting to parse a number but did not find any digits ["+b+","+aa+"]["+d()+"]"),parseInt(a.slice(b,aa),10)}function L(a){f("(","sum call opener"),g();var c=H(),d=b.sum(c,a);return g(),f(")","sum closer"),d}function M(a){f("(","product call opener"),g();var c=H(),d=b.product(c,a);return g(),f(")","product closer"),d}function N(a){f("(","isall call opener"),g();var c=H(),d=b.decl();b.product(c,d);var e=b.isNeq(d,b.num(0),a);return g(),f(")","isall closer"),e}function O(a){f("(","isnall call opener"),g();var c=H(),d=b.decl();b.product(c,d);var e=b.isEq(d,b.num(0),a);return g(),f(")","isnall closer"),e}function P(a){f("(","isnone call opener"),g();var c=H(),d=b.decl();b.sum(c,d);var e=b.isEq(d,b.num(0),a);return g(),f(")","isnone closer"),e}function Q(){aa+=5,g();var a=H();b.product(a,b.num(0)),g(),f(")","nall closer"),m()}function R(){for(var b=aa;d()>="0"&&d()<="9";)e();return a.slice(b,aa)}function S(){var a=[];g();for(var b=R();b;)a.push(parseInt(b,10)),g(),","===d()&&(++aa,g()),b=R();return a.length||_("Expected to parse a list of at least some numbers but found none"),a}function T(){for(var a=[];;){if(g(),")"===d())break;","===d()&&(e(),g());var b=q();a.push(b)}return a.length||_("Expected to parse a list of at least some identifiers but found none"),a}function U(){for(var a="";!n()&&!j(d());)a+=d(),e();return a}function V(){if(f("@"),"custom"===a.slice(aa,aa+6)){aa+=6,g();var c=q();switch(g(),"="===d()&&(e(),g()),c){case"var-strat":W();break;case"val-strat":X();break;case"set-valdist":g();var h=q(),i=Y();b.setValueDistributionFor(h,JSON.parse(i));break;case"targets":Z();break;default:_("Unsupported custom rule: "+c)}}else"mode"===a.slice(aa,aa+4)?(aa+=4,$()):_("Unknown atrule");m()}function W(){var a=U();m(),b.varStratConfig=JSON.parse(a)}function X(){var a=q();m(),b.valueStratName=a}function Y(){return g(),"="===d()&&(e(),g()),U()}function Z(){if(g(),"="===d()&&(e(),g()),"all"===a.slice(aa,aa+3))aa+=3,b.config.targetedVars="all";else{f("(");var c=T();c.length&&(b.config.targetedVars=c),f(")")}m()}function $(){g(),"="===d()&&(e(),g()),"constraints"===a.slice(aa,aa+"constraints".length)?aa+="constraints".length:"propagators"===a.slice(aa,aa+"propagators".length)&&(aa+="propagators".length)}function _(b){throw c&&console.log(a.slice(0,aa)+"##|PARSER_IS_HERE["+b+"]|##"+a.slice(aa)),b="Importer parser error: "+b+", source at #|#: `"+a.slice(Math.max(0,aa-20),aa)+"#|#"+a.slice(aa,Math.min(a.length,aa+20))+"`",new Error(b)}b||(b=new jf);for(var aa=0,ba=a.length;!n();)o();return b}function Zc(a,b){for(var c=a.vardoms,d=0;d<b.length;d++){var e=b[d],f=c[e._boolVarIndex];if(void 0===f||1===oa(f))break}return e}function $c(a,b,c){return a?_c(b,c):b}function _c(a,b){var c=void 0;c=a?a.slice(0):[];for(var d=xa(b),e=0;e<d.length;++e){var f=d[e];c.indexOf(f)<0&&c.push(f)}return c}function ad(a,b,c,d){var e=Zc(a,b),f=e.vector;if(null!=c){f=f?f.slice(0):[];var g=d-f.length;if(g>0)for(var h=0;h<g;++h)f.push(c);return f}return f&&f.length===d||Xc("E_EACH_MARKOV_VAR_MUST_HAVE_PROB_VECTOR_OR_ENABLE_EXPAND_VECTORS"),f}function bd(a,b,c,d,e,f,g,h,i,j,k){return{_class:"$propagator",name:a,stepper:b,index1:void 0===c?-1:c,index2:void 0===d?-1:d,index3:void 0===e?-1:e,arg1:void 0===f?"":f,arg2:void 0===g?"":g,arg3:void 0===h?"":h,arg4:void 0===i?"":i,arg5:void 0===j?"":j,arg6:void 0===k?"":k}}function cd(a,b,c,d,e){var f=a.initialDomains,g=f[c],h=f[d],i=f[e],j=oa(g),k=j>=0,l=oa(h),m=l>=0,n=xb(i),p=yb(i),q=n||p;if(!(k&&m&&q)){var r=mb(g),s=rb(g),t=mb(h),u=rb(h),v=rb(i),w=void 0,x=void 0,y=void 0,z=void 0,A=void 0;switch(b){case"eq":if(q)return void(j>=0?p?f[d]=Ka(g,h):f[d]=Mb(h,j):l>=0?p?f[c]=Ka(g,h):f[c]=Mb(g,l):p?dd(a,c,d):ld(a,c,d));if(j>=0&&l>=0)return void(f[e]=zb(i,j===l));if(v<=1){if(s<=1&&1===u){if(0===j)return ld(a,d,e);if(1===j)return dd(a,d,e)}if(u<=1&&1===s){if(0===l)return ld(a,c,e);if(1===l)return dd(a,c,e)}}w="neq",x=xd,y=Md,z=yd,A=Nd;break;case"neq":if(q)return void(j>=0?p?f[d]=Mb(h,j):f[d]=g:l>=0?p?f[c]=Mb(g,l):f[c]=h:p?ld(a,c,d):dd(a,c,d));if(j>=0&&l>=0)return void(f[e]=zb(i,j!==l));if(v<=1){if(s<=1&&1===u){if(0===j)return dd(a,d,e);if(1===j)return ld(a,d,e)}if(u<=1&&1===s){if(0===l)return dd(a,c,e);if(1===l)return ld(a,c,e)}}w="eq",x=Md,y=xd,z=Nd,A=yd;break;case"lt":if(q){if(p){if(s<t)return;return ed(a,c,d)}if(r>=u)return;return kd(a,c,d)}if(s<t)return f[e]=zb(i,!0);if(r>=u)return f[e]=zb(i,!1);if(v<=1){if(0===j&&u<=1)return dd(a,d,e);if(0===l&&s<=1)return dd(a,c,e)}x=Md,z=Bd,w="gte",y=Ed,A=Gd;break;case"lte":if(q){if(p){if(s<=t)return;return gd(a,c,d)}if(r>u)return;return fd(a,c,d)}if(s<=t)return f[e]=zb(i,!0);if(r>u)return f[e]=zb(i,!1);if(v<=1){if(1===j&&u<=1)return dd(a,d,e);if(1===l&&s<=1)return dd(a,c,e)}x=Dd,z=Fd,w="gt",y=Ad,A=Cd;break;case"gt":return cd(a,"lt",d,c,e);case"gte":return cd(a,"lte",d,c,e);default:Xc("UNKNOWN_REIFIED_OP")}o(a,bd("reified",Od,c,d,e,x,y,b,w,z,A))}}function dd(a,b,c){var d=a.initialDomains,e=d[b];if(oa(e)>=0)return d[c]=e;var f=d[c];return oa(f)>=0?d[b]=f:(d[b]=d[c]=Ka(e,f),void o(a,bd("eq",xd,b,c)))}function ed(a,b,c){var d=a.initialDomains,e=d[b],f=d[c],g=rb(e),h=mb(f);if(!(g<h)){var i=mb(e),j=rb(f);if(i>=j)return d[b]=d[c]=cc();g>=j&&(d[b]=Bb(e,j)),h<=i&&(d[c]=Hb(f,i)),o(a,bd("lt",zd,b,c))}}function fd(a,b,c){ed(a,c,b)}function gd(a,b,c){var d=a.initialDomains,e=d[b],f=d[c],g=rb(e),h=mb(f);if(!(g<h)){var i=mb(e),j=rb(f);if(i>j)return d[b]=d[c]=cc();g>=j&&(d[b]=Bb(e,j+1)),h<=i&&(d[c]=Hb(f,i-1)),o(a,bd("lte",Dd,b,c))}}function hd(a,b,c,d