["^ ","~:resource-id",["~:shadow.build.classpath/resource","com/cognitect/transit/eq.js"],"~:js","goog.provide(\"com.cognitect.transit.eq\");\ngoog.require(\"com.cognitect.transit.util\");\ngoog.scope(function() {\n var eq = com.cognitect.transit.eq, util = com.cognitect.transit.util;\n eq.hashCodeProperty = \"transit$hashCode$\";\n eq.hashCodeCounter = 1;\n eq.equals = function(x, y) {\n if (x == null) {\n return y == null;\n } else if (x === y) {\n return true;\n } else if (typeof x === \"object\") {\n if (util.isArray(x)) {\n if (util.isArray(y)) {\n if (x.length === y.length) {\n for (var i = 0; i < x.length; i++) {\n if (!eq.equals(x[i], y[i])) {\n return false;\n }\n }\n return true;\n } else {\n return false;\n }\n } else {\n return false;\n }\n } else if (x.com$cognitect$transit$equals) {\n return x.com$cognitect$transit$equals(y);\n } else if (y != null && typeof y === \"object\") {\n if (y.com$cognitect$transit$equals) {\n return y.com$cognitect$transit$equals(x);\n } else {\n var xklen = 0, yklen = util.objectKeys(y).length;\n for (var p in x) {\n if (!x.hasOwnProperty(p)) {\n continue;\n }\n xklen++;\n if (!y.hasOwnProperty(p)) {\n return false;\n } else {\n if (!eq.equals(x[p], y[p])) {\n return false;\n }\n }\n }\n return xklen === yklen;\n }\n } else {\n return false;\n }\n } else {\n return false;\n }\n };\n eq.hashCombine = function(seed, hash) {\n return seed ^ hash + 2654435769 + (seed << 6) + (seed >> 2);\n };\n eq.stringCodeCache = {};\n eq.stringCodeCacheSize = 0;\n eq.STR_CACHE_MAX = 256;\n eq.hashString = function(str) {\n var cached = eq.stringCodeCache[str];\n if (cached != null) {\n return cached;\n }\n var code = 0;\n for (var i = 0; i < str.length; ++i) {\n code = 31 * code + str.charCodeAt(i);\n code %= 4294967296;\n }\n eq.stringCodeCacheSize++;\n if (eq.stringCodeCacheSize >= eq.STR_CACHE_MAX) {\n eq.stringCodeCache = {};\n eq.stringCodeCacheSize = 1;\n }\n eq.stringCodeCache[str] = code;\n return code;\n };\n eq.hashMapLike = function(m) {\n var code = 0;\n if (m.forEach != null) {\n m.forEach(function(val, key, m) {\n code = (code + (eq.hashCode(key) ^ eq.hashCode(val))) % 4503599627370496;\n });\n } else {\n var keys = util.objectKeys(m);\n for (var i = 0; i < keys.length; i++) {\n var key = keys[i];\n var val = m[key];\n code = (code + (eq.hashCode(key) ^ eq.hashCode(val))) % 4503599627370496;\n }\n }\n return code;\n };\n eq.hashArrayLike = function(arr) {\n var code = 0;\n if (util.isArray(arr)) {\n for (var i = 0; i < arr.length; i++) {\n code = eq.hashCombine(code, eq.hashCode(arr[i]));\n }\n } else if (arr.forEach) {\n arr.forEach(function(x, i) {\n code = eq.hashCombine(code, eq.hashCode(x));\n });\n }\n return code;\n };\n eq.hashCode = function(x) {\n if (x == null) {\n return 0;\n } else {\n switch(typeof x) {\n case \"number\":\n return x;\n break;\n case \"boolean\":\n return x === true ? 1 : 0;\n break;\n case \"string\":\n return eq.hashString(x);\n break;\n case \"function\":\n var code = x[eq.hashCodeProperty];\n if (code) {\n return code;\n } else {\n code = eq.hashCodeCounter;\n if (typeof Object.defineProperty != \"undefined\") {\n Object.defineProperty(x, eq.hashCodeProperty, {value:code, enumerable:false});\n } else {\n x[eq.hashCodeProperty] = code;\n }\n eq.hashCodeCounter++;\n return code;\n }\n break;\n default:\n if (x instanceof Date) {\n return x.valueOf();\n } else if (util.isArray(x)) {\n return eq.hashArrayLike(x);\n }\n if (x.com$cognitect$transit$hashCode) {\n return x.com$cognitect$transit$hashCode();\n } else {\n return eq.hashMapLike(x);\n }\n break;\n }\n }\n };\n eq.extendToEQ = function(obj, opts) {\n obj.com$cognitect$transit$hashCode = opts[\"hashCode\"];\n obj.com$cognitect$transit$equals = opts[\"equals\"];\n return obj;\n };\n});\n","~:source","// Copyright 2014 Cognitect. All Rights Reserved.\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS-IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\ngoog.provide(\"com.cognitect.transit.eq\");\ngoog.require(\"com.cognitect.transit.util\");\n\ngoog.scope(function() {\n\nvar eq = com.cognitect.transit.eq,\n util = com.cognitect.transit.util;\n\n/**\n * @const\n * @type {string}\n */\neq.hashCodeProperty = \"transit$hashCode$\";\n\n/**\n * @type {number}\n */\neq.hashCodeCounter = 1;\n\neq.equals = function (x, y) {\n if(x == null) {\n return y == null;\n } else if(x === y) {\n return true;\n } else if(typeof x === \"object\") {\n if(util.isArray(x)) {\n if(util.isArray(y)) {\n if(x.length === y.length) {\n for(var i = 0; i < x.length; i++) {\n if(!eq.equals(x[i], y[i])) {\n return false;\n }\n }\n return true;\n } else {\n return false;\n }\n } else {\n return false;\n }\n } else if(x.com$cognitect$transit$equals) {\n return x.com$cognitect$transit$equals(y);\n } else if((y != null) && (typeof y === \"object\")) {\n if(y.com$cognitect$transit$equals) {\n return y.com$cognitect$transit$equals(x);\n } else {\n var xklen = 0,\n yklen = util.objectKeys(y).length;\n for(var p in x) {\n if(!x.hasOwnProperty(p)) continue;\n xklen++;\n if(!y.hasOwnProperty(p)) {\n return false;\n } else {\n if(!eq.equals(x[p], y[p])) {\n return false;\n }\n }\n }\n return xklen === yklen;\n }\n } else {\n return false;\n }\n } else {\n return false\n }\n};\n\neq.hashCombine = function(seed, hash) {\n return seed ^ (hash + 0x9e3779b9 + (seed << 6) + (seed >> 2));\n};\n\neq.stringCodeCache = {};\neq.stringCodeCacheSize = 0;\n\n/**\n * @const\n * @type {number}\n */\neq.STR_CACHE_MAX = 256;\n\neq.hashString = function(str) {\n // a la goog.string.HashCode\n // http://docs.closure-library.googlecode.com/git/local_closure_goog_string_string.js.source.html#line1206\n var cached = eq.stringCodeCache[str];\n if(cached != null) {\n return cached;\n }\n var code = 0;\n for (var i = 0; i < str.length; ++i) {\n code = 31 * code + str.charCodeAt(i);\n code %= 0x100000000;\n }\n eq.stringCodeCacheSize++;\n if(eq.stringCodeCacheSize >= eq.STR_CACHE_MAX) {\n eq.stringCodeCache = {};\n eq.stringCodeCacheSize = 1;\n }\n eq.stringCodeCache[str] = code;\n return code;\n};\n\neq.hashMapLike = function(m) {\n var code = 0;\n // ES6 Map-like case\n if(m.forEach != null) {\n m.forEach(function(val, key, m) {\n code = (code + (eq.hashCode(key) ^ eq.hashCode(val))) % 4503599627370496;\n });\n } else {\n // JS Object case\n var keys = util.objectKeys(m);\n for(var i = 0; i < keys.length; i++) {\n var key = keys[i];\n var val = m[key];\n code = (code + (eq.hashCode(key) ^ eq.hashCode(val))) % 4503599627370496;\n }\n }\n return code;\n};\n\neq.hashArrayLike = function(arr) {\n var code = 0;\n if(util.isArray(arr)) {\n for(var i = 0; i < arr.length; i++) {\n code = eq.hashCombine(code, eq.hashCode(arr[i]));\n }\n } else if(arr.forEach) {\n arr.forEach(function(x, i) {\n code = eq.hashCombine(code, eq.hashCode(x));\n });\n }\n return code;\n};\n\neq.hashCode = function(x) {\n if(x == null) {\n return 0;\n } else {\n switch(typeof x) {\n case 'number':\n return x;\n break;\n case 'boolean':\n return x === true ? 1 : 0;\n break;\n case 'string':\n return eq.hashString(x);\n break;\n case 'function':\n var code = x[eq.hashCodeProperty];\n if(code) {\n return code;\n } else {\n code = eq.hashCodeCounter;\n if(typeof Object.defineProperty != \"undefined\") {\n Object.defineProperty(x, eq.hashCodeProperty, {\n value: code,\n enumerable: false\n });\n } else {\n x[eq.hashCodeProperty] = code;\n }\n eq.hashCodeCounter++; \n return code;\n }\n break;\n default:\n if(x instanceof Date) {\n return x.valueOf();\n } else if(util.isArray(x)) {\n return eq.hashArrayLike(x);\n } if(x.com$cognitect$transit$hashCode) {\n return x.com$cognitect$transit$hashCode();\n } else {\n return eq.hashMapLike(x);\n }\n break;\n }\n }\n}\n\neq.extendToEQ = function(obj, opts) {\n obj.com$cognitect$transit$hashCode = opts[\"hashCode\"];\n obj.com$cognitect$transit$equals = opts[\"equals\"];\n return obj;\n}\n\n});\n","~:compiled-at",1684858198096,"~:source-map-json","{\n\"version\":3,\n\"file\":\"com.cognitect.transit.eq.js\",\n\"lineCount\":160,\n\"mappings\":\"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\",\n\"sources\":[\"com/cognitect/transit/eq.js\"],\n\"sourcesContent\":[\"// Copyright 2014 Cognitect. All Rights Reserved.\\n//\\n// Licensed under the Apache License, Version 2.0 (the \\\"License\\\");\\n// you may not use this file except in compliance with the License.\\n// You may obtain a copy of the License at\\n//\\n// http://www.apache.org/licenses/LICENSE-2.0\\n//\\n// Unless required by applicable law or agreed to in writing, software\\n// distributed under the License is distributed on an \\\"AS-IS\\\" BASIS,\\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\\n// See the License for the specific language governing permissions and\\n// limitations under the License.\\n\\ngoog.provide(\\\"com.cognitect.transit.eq\\\");\\ngoog.require(\\\"com.cognitect.transit.util\\\");\\n\\ngoog.scope(function() {\\n\\nvar eq = com.cognitect.transit.eq,\\n util = com.cognitect.transit.util;\\n\\n/**\\n * @const\\n * @type {string}\\n */\\neq.hashCodeProperty = \\\"transit$hashCode$\\\";\\n\\n/**\\n * @type {number}\\n */\\neq.hashCodeCounter = 1;\\n\\neq.equals = function (x, y) {\\n if(x == null) {\\n return y == null;\\n } else if(x === y) {\\n return true;\\n } else if(typeof x === \\\"object\\\") {\\n if(util.isArray(x)) {\\n if(util.isArray(y)) {\\n if(x.length === y.length) {\\n for(var i = 0; i < x.length; i++) {\\n if(!eq.equals(x[i], y[i])) {\\n return false;\\n }\\n }\\n return true;\\n } else {\\n return false;\\n }\\n } else {\\n return false;\\n }\\n } else if(x.com$cognitect$transit$equals) {\\n return x.com$cognitect$transit$equals(y);\\n } else if((y != null) && (typeof y === \\\"object\\\")) {\\n if(y.com$cognitect$transit$equals) {\\n return y.com$cognitect$transit$equals(x);\\n } else {\\n var xklen = 0,\\n yklen = util.objectKeys(y).length;\\n for(var p in x) {\\n if(!x.hasOwnProperty(p)) continue;\\n xklen++;\\n if(!y.hasOwnProperty(p)) {\\n return false;\\n } else {\\n if(!eq.equals(x[p], y[p])) {\\n return false;\\n }\\n }\\n }\\n return xklen === yklen;\\n }\\n } else {\\n return false;\\n }\\n } else {\\n return false\\n }\\n};\\n\\neq.hashCombine = function(seed, hash) {\\n return seed ^ (hash + 0x9e3779b9 + (seed << 6) + (seed >> 2));\\n};\\n\\neq.stringCodeCache = {};\\neq.stringCodeCacheSize = 0;\\n\\n/**\\n * @const\\n * @type {number}\\n */\\neq.STR_CACHE_MAX = 256;\\n\\neq.hashString = function(str) {\\n // a la goog.string.HashCode\\n // http://docs.closure-library.googlecode.com/git/local_closure_goog_string_string.js.source.html#line1206\\n var cached = eq.stringCodeCache[str];\\n if(cached != null) {\\n return cached;\\n }\\n var code = 0;\\n for (var i = 0; i < str.length; ++i) {\\n code = 31 * code + str.charCodeAt(i);\\n code %= 0x100000000;\\n }\\n eq.stringCodeCacheSize++;\\n if(eq.stringCodeCacheSize >= eq.STR_CACHE_MAX) {\\n eq.stringCodeCache = {};\\n eq.stringCodeCacheSize = 1;\\n }\\n eq.stringCodeCache[str] = code;\\n return code;\\n};\\n\\neq.hashMapLike = function(m) {\\n var code = 0;\\n // ES6 Map-like case\\n if(m.forEach != null) {\\n m.forEach(function(val, key, m) {\\n code = (code + (eq.hashCode(key) ^ eq.hashCode(val))) % 4503599627370496;\\n });\\n } else {\\n // JS Object case\\n var keys = util.objectKeys(m);\\n for(var i = 0; i < keys.length; i++) {\\n var key = keys[i];\\n var val = m[key];\\n code = (code + (eq.hashCode(key) ^ eq.hashCode(val))) % 4503599627370496;\\n }\\n }\\n return code;\\n};\\n\\neq.hashArrayLike = function(arr) {\\n var code = 0;\\n if(util.isArray(arr)) {\\n for(var i = 0; i < arr.length; i++) {\\n code = eq.hashCombine(code, eq.hashCode(arr[i]));\\n }\\n } else if(arr.forEach) {\\n arr.forEach(function(x, i) {\\n code = eq.hashCombine(code, eq.hashCode(x));\\n });\\n }\\n return code;\\n};\\n\\neq.hashCode = function(x) {\\n if(x == null) {\\n return 0;\\n } else {\\n switch(typeof x) {\\n case 'number':\\n return x;\\n break;\\n case 'boolean':\\n return x === true ? 1 : 0;\\n break;\\n case 'string':\\n return eq.hashString(x);\\n break;\\n case 'function':\\n var code = x[eq.hashCodeProperty];\\n if(code) {\\n return code;\\n } else {\\n code = eq.hashCodeCounter;\\n if(typeof Object.defineProperty != \\\"undefined\\\") {\\n Object.defineProperty(x, eq.hashCodeProperty, {\\n value: code,\\n enumerable: false\\n });\\n } else {\\n x[eq.hashCodeProperty] = code;\\n }\\n eq.hashCodeCounter++; \\n return code;\\n }\\n break;\\n default:\\n if(x instanceof Date) {\\n return x.valueOf();\\n } else if(util.isArray(x)) {\\n return eq.hashArrayLike(x);\\n } if(x.com$cognitect$transit$hashCode) {\\n return x.com$cognitect$transit$hashCode();\\n } else {\\n return eq.hashMapLike(x);\\n }\\n break;\\n }\\n }\\n}\\n\\neq.extendToEQ = function(obj, opts) {\\n obj.com$cognitect$transit$hashCode = opts[\\\"hashCode\\\"];\\n obj.com$cognitect$transit$equals = opts[\\\"equals\\\"];\\n return obj;\\n}\\n\\n});\\n\"],\n\"names\":[\"goog\",\"provide\",\"require\",\"scope\",\"eq\",\"com\",\"cognitect\",\"transit\",\"util\",\"hashCodeProperty\",\"hashCodeCounter\",\"equals\",\"eq.equals\",\"x\",\"y\",\"isArray\",\"length\",\"i\",\"com$cognitect$transit$equals\",\"xklen\",\"yklen\",\"objectKeys\",\"p\",\"hasOwnProperty\",\"hashCombine\",\"eq.hashCombine\",\"seed\",\"hash\",\"stringCodeCache\",\"stringCodeCacheSize\",\"STR_CACHE_MAX\",\"hashString\",\"eq.hashString\",\"str\",\"cached\",\"code\",\"charCodeAt\",\"hashMapLike\",\"eq.hashMapLike\",\"m\",\"forEach\",\"val\",\"key\",\"hashCode\",\"keys\",\"hashArrayLike\",\"eq.hashArrayLike\",\"arr\",\"eq.hashCode\",\"Object\",\"defineProperty\",\"value\",\"enumerable\",\"Date\",\"valueOf\",\"com$cognitect$transit$hashCode\",\"extendToEQ\",\"eq.extendToEQ\",\"obj\",\"opts\"]\n}\n"]