["^ ","~:output",["^ ","~:js","goog.provide('clojure.set');\ngoog.require('cljs.core');\nclojure.set.bubble_max_key = (function clojure$set$bubble_max_key(k,coll){\n\nvar max = cljs.core.apply.cljs$core$IFn$_invoke$arity$3(cljs.core.max_key,k,coll);\nreturn cljs.core.cons(max,cljs.core.remove.cljs$core$IFn$_invoke$arity$2((function (p1__32935_SHARP_){\nreturn (max === p1__32935_SHARP_);\n}),coll));\n});\n/**\n * Return a set that is the union of the input sets\n */\nclojure.set.union = (function clojure$set$union(var_args){\nvar G__32941 = arguments.length;\nswitch (G__32941) {\ncase 0:\nreturn clojure.set.union.cljs$core$IFn$_invoke$arity$0();\n\nbreak;\ncase 1:\nreturn clojure.set.union.cljs$core$IFn$_invoke$arity$1((arguments[(0)]));\n\nbreak;\ncase 2:\nreturn clojure.set.union.cljs$core$IFn$_invoke$arity$2((arguments[(0)]),(arguments[(1)]));\n\nbreak;\ndefault:\nvar args_arr__4810__auto__ = [];\nvar len__4789__auto___33026 = arguments.length;\nvar i__4790__auto___33027 = (0);\nwhile(true){\nif((i__4790__auto___33027 < len__4789__auto___33026)){\nargs_arr__4810__auto__.push((arguments[i__4790__auto___33027]));\n\nvar G__33028 = (i__4790__auto___33027 + (1));\ni__4790__auto___33027 = G__33028;\ncontinue;\n} else {\n}\nbreak;\n}\n\nvar argseq__4811__auto__ = (new cljs.core.IndexedSeq(args_arr__4810__auto__.slice((2)),(0),null));\nreturn clojure.set.union.cljs$core$IFn$_invoke$arity$variadic((arguments[(0)]),(arguments[(1)]),argseq__4811__auto__);\n\n}\n});\n\n(clojure.set.union.cljs$core$IFn$_invoke$arity$0 = (function (){\nreturn cljs.core.PersistentHashSet.EMPTY;\n}));\n\n(clojure.set.union.cljs$core$IFn$_invoke$arity$1 = (function (s1){\nreturn s1;\n}));\n\n(clojure.set.union.cljs$core$IFn$_invoke$arity$2 = (function (s1,s2){\nif((cljs.core.count(s1) < cljs.core.count(s2))){\nreturn cljs.core.reduce.cljs$core$IFn$_invoke$arity$3(cljs.core.conj,s2,s1);\n} else {\nreturn cljs.core.reduce.cljs$core$IFn$_invoke$arity$3(cljs.core.conj,s1,s2);\n}\n}));\n\n(clojure.set.union.cljs$core$IFn$_invoke$arity$variadic = (function (s1,s2,sets){\nvar bubbled_sets = clojure.set.bubble_max_key(cljs.core.count,cljs.core.conj.cljs$core$IFn$_invoke$arity$variadic(sets,s2,cljs.core.prim_seq.cljs$core$IFn$_invoke$arity$2([s1], 0)));\nreturn cljs.core.reduce.cljs$core$IFn$_invoke$arity$3(cljs.core.into,cljs.core.first(bubbled_sets),cljs.core.rest(bubbled_sets));\n}));\n\n/** @this {Function} */\n(clojure.set.union.cljs$lang$applyTo = (function (seq32938){\nvar G__32939 = cljs.core.first(seq32938);\nvar seq32938__$1 = cljs.core.next(seq32938);\nvar G__32940 = cljs.core.first(seq32938__$1);\nvar seq32938__$2 = cljs.core.next(seq32938__$1);\nvar self__4776__auto__ = this;\nreturn self__4776__auto__.cljs$core$IFn$_invoke$arity$variadic(G__32939,G__32940,seq32938__$2);\n}));\n\n(clojure.set.union.cljs$lang$maxFixedArity = (2));\n\n/**\n * Return a set that is the intersection of the input sets\n */\nclojure.set.intersection = (function clojure$set$intersection(var_args){\nvar G__32947 = arguments.length;\nswitch (G__32947) {\ncase 1:\nreturn clojure.set.intersection.cljs$core$IFn$_invoke$arity$1((arguments[(0)]));\n\nbreak;\ncase 2:\nreturn clojure.set.intersection.cljs$core$IFn$_invoke$arity$2((arguments[(0)]),(arguments[(1)]));\n\nbreak;\ndefault:\nvar args_arr__4810__auto__ = [];\nvar len__4789__auto___33034 = arguments.length;\nvar i__4790__auto___33035 = (0);\nwhile(true){\nif((i__4790__auto___33035 < len__4789__auto___33034)){\nargs_arr__4810__auto__.push((arguments[i__4790__auto___33035]));\n\nvar G__33036 = (i__4790__auto___33035 + (1));\ni__4790__auto___33035 = G__33036;\ncontinue;\n} else {\n}\nbreak;\n}\n\nvar argseq__4811__auto__ = (new cljs.core.IndexedSeq(args_arr__4810__auto__.slice((2)),(0),null));\nreturn clojure.set.intersection.cljs$core$IFn$_invoke$arity$variadic((arguments[(0)]),(arguments[(1)]),argseq__4811__auto__);\n\n}\n});\n\n(clojure.set.intersection.cljs$core$IFn$_invoke$arity$1 = (function (s1){\nreturn s1;\n}));\n\n(clojure.set.intersection.cljs$core$IFn$_invoke$arity$2 = (function (s1,s2){\nwhile(true){\nif((cljs.core.count(s2) < cljs.core.count(s1))){\nvar G__33037 = s2;\nvar G__33038 = s1;\ns1 = G__33037;\ns2 = G__33038;\ncontinue;\n} else {\nreturn cljs.core.reduce.cljs$core$IFn$_invoke$arity$3(((function (s1,s2){\nreturn (function (result,item){\nif(cljs.core.contains_QMARK_(s2,item)){\nreturn result;\n} else {\nreturn cljs.core.disj.cljs$core$IFn$_invoke$arity$2(result,item);\n}\n});})(s1,s2))\n,s1,s1);\n}\nbreak;\n}\n}));\n\n(clojure.set.intersection.cljs$core$IFn$_invoke$arity$variadic = (function (s1,s2,sets){\nvar bubbled_sets = clojure.set.bubble_max_key((function (p1__32942_SHARP_){\nreturn (- cljs.core.count(p1__32942_SHARP_));\n}),cljs.core.conj.cljs$core$IFn$_invoke$arity$variadic(sets,s2,cljs.core.prim_seq.cljs$core$IFn$_invoke$arity$2([s1], 0)));\nreturn cljs.core.reduce.cljs$core$IFn$_invoke$arity$3(clojure.set.intersection,cljs.core.first(bubbled_sets),cljs.core.rest(bubbled_sets));\n}));\n\n/** @this {Function} */\n(clojure.set.intersection.cljs$lang$applyTo = (function (seq32944){\nvar G__32945 = cljs.core.first(seq32944);\nvar seq32944__$1 = cljs.core.next(seq32944);\nvar G__32946 = cljs.core.first(seq32944__$1);\nvar seq32944__$2 = cljs.core.next(seq32944__$1);\nvar self__4776__auto__ = this;\nreturn self__4776__auto__.cljs$core$IFn$_invoke$arity$variadic(G__32945,G__32946,seq32944__$2);\n}));\n\n(clojure.set.intersection.cljs$lang$maxFixedArity = (2));\n\n/**\n * Return a set that is the first set without elements of the remaining sets\n */\nclojure.set.difference = (function clojure$set$difference(var_args){\nvar G__32952 = arguments.length;\nswitch (G__32952) {\ncase 1:\nreturn clojure.set.difference.cljs$core$IFn$_invoke$arity$1((arguments[(0)]));\n\nbreak;\ncase 2:\nreturn clojure.set.difference.cljs$core$IFn$_invoke$arity$2((arguments[(0)]),(arguments[(1)]));\n\nbreak;\ndefault:\nvar args_arr__4810__auto__ = [];\nvar len__4789__auto___33040 = arguments.length;\nvar i__4790__auto___33041 = (0);\nwhile(true){\nif((i__4790__auto___33041 < len__4789__auto___33040)){\nargs_arr__4810__auto__.push((arguments[i__4790__auto___33041]));\n\nvar G__33042 = (i__4790__auto___33041 + (1));\ni__4790__auto___33041 = G__33042;\ncontinue;\n} else {\n}\nbreak;\n}\n\nvar argseq__4811__auto__ = (new cljs.core.IndexedSeq(args_arr__4810__auto__.slice((2)),(0),null));\nreturn clojure.set.difference.cljs$core$IFn$_invoke$arity$variadic((arguments[(0)]),(arguments[(1)]),argseq__4811__auto__);\n\n}\n});\n\n(clojure.set.difference.cljs$core$IFn$_invoke$arity$1 = (function (s1){\nreturn s1;\n}));\n\n(clojure.set.difference.cljs$core$IFn$_invoke$arity$2 = (function (s1,s2){\nif((cljs.core.count(s1) < cljs.core.count(s2))){\nreturn cljs.core.reduce.cljs$core$IFn$_invoke$arity$3((function (result,item){\nif(cljs.core.contains_QMARK_(s2,item)){\nreturn cljs.core.disj.cljs$core$IFn$_invoke$arity$2(result,item);\n} else {\nreturn result;\n}\n}),s1,s1);\n} else {\nreturn cljs.core.reduce.cljs$core$IFn$_invoke$arity$3(cljs.core.disj,s1,s2);\n}\n}));\n\n(clojure.set.difference.cljs$core$IFn$_invoke$arity$variadic = (function (s1,s2,sets){\nreturn cljs.core.reduce.cljs$core$IFn$_invoke$arity$3(clojure.set.difference,s1,cljs.core.conj.cljs$core$IFn$_invoke$arity$2(sets,s2));\n}));\n\n/** @this {Function} */\n(clojure.set.difference.cljs$lang$applyTo = (function (seq32949){\nvar G__32950 = cljs.core.first(seq32949);\nvar seq32949__$1 = cljs.core.next(seq32949);\nvar G__32951 = cljs.core.first(seq32949__$1);\nvar seq32949__$2 = cljs.core.next(seq32949__$1);\nvar self__4776__auto__ = this;\nreturn self__4776__auto__.cljs$core$IFn$_invoke$arity$variadic(G__32950,G__32951,seq32949__$2);\n}));\n\n(clojure.set.difference.cljs$lang$maxFixedArity = (2));\n\n/**\n * Returns a set of the elements for which pred is true\n */\nclojure.set.select = (function clojure$set$select(pred,xset){\nreturn cljs.core.reduce.cljs$core$IFn$_invoke$arity$3((function (s,k){\nif(cljs.core.truth_((pred.cljs$core$IFn$_invoke$arity$1 ? pred.cljs$core$IFn$_invoke$arity$1(k) : pred.call(null,k)))){\nreturn s;\n} else {\nreturn cljs.core.disj.cljs$core$IFn$_invoke$arity$2(s,k);\n}\n}),xset,xset);\n});\n/**\n * Returns a rel of the elements of xrel with only the keys in ks\n */\nclojure.set.project = (function clojure$set$project(xrel,ks){\nreturn cljs.core.set(cljs.core.map.cljs$core$IFn$_invoke$arity$2((function (p1__32959_SHARP_){\nreturn cljs.core.select_keys(p1__32959_SHARP_,ks);\n}),xrel));\n});\n/**\n * Returns the map with the keys in kmap renamed to the vals in kmap\n */\nclojure.set.rename_keys = (function clojure$set$rename_keys(map,kmap){\nreturn cljs.core.reduce.cljs$core$IFn$_invoke$arity$3((function (m,p__32965){\nvar vec__32966 = p__32965;\nvar old = cljs.core.nth.cljs$core$IFn$_invoke$arity$3(vec__32966,(0),null);\nvar new$ = cljs.core.nth.cljs$core$IFn$_invoke$arity$3(vec__32966,(1),null);\nif(cljs.core.contains_QMARK_(map,old)){\nreturn cljs.core.assoc.cljs$core$IFn$_invoke$arity$3(m,new$,cljs.core.get.cljs$core$IFn$_invoke$arity$2(map,old));\n} else {\nreturn m;\n}\n}),cljs.core.apply.cljs$core$IFn$_invoke$arity$3(cljs.core.dissoc,map,cljs.core.keys(kmap)),kmap);\n});\n/**\n * Returns a rel of the maps in xrel with the keys in kmap renamed to the vals in kmap\n */\nclojure.set.rename = (function clojure$set$rename(xrel,kmap){\nreturn cljs.core.set(cljs.core.map.cljs$core$IFn$_invoke$arity$2((function (p1__32973_SHARP_){\nreturn clojure.set.rename_keys(p1__32973_SHARP_,kmap);\n}),xrel));\n});\n/**\n * Returns a map of the distinct values of ks in the xrel mapped to a\n *   set of the maps in xrel with the corresponding values of ks.\n */\nclojure.set.index = (function clojure$set$index(xrel,ks){\nreturn cljs.core.reduce.cljs$core$IFn$_invoke$arity$3((function (m,x){\nvar ik = cljs.core.select_keys(x,ks);\nreturn cljs.core.assoc.cljs$core$IFn$_invoke$arity$3(m,ik,cljs.core.conj.cljs$core$IFn$_invoke$arity$2(cljs.core.get.cljs$core$IFn$_invoke$arity$3(m,ik,cljs.core.PersistentHashSet.EMPTY),x));\n}),cljs.core.PersistentArrayMap.EMPTY,xrel);\n});\n/**\n * Returns the map with the vals mapped to the keys.\n */\nclojure.set.map_invert = (function clojure$set$map_invert(m){\nreturn cljs.core.reduce.cljs$core$IFn$_invoke$arity$3((function (m__$1,p__32980){\nvar vec__32981 = p__32980;\nvar k = cljs.core.nth.cljs$core$IFn$_invoke$arity$3(vec__32981,(0),null);\nvar v = cljs.core.nth.cljs$core$IFn$_invoke$arity$3(vec__32981,(1),null);\nreturn cljs.core.assoc.cljs$core$IFn$_invoke$arity$3(m__$1,v,k);\n}),cljs.core.PersistentArrayMap.EMPTY,m);\n});\n/**\n * When passed 2 rels, returns the rel corresponding to the natural\n *   join. When passed an additional keymap, joins on the corresponding\n *   keys.\n */\nclojure.set.join = (function clojure$set$join(var_args){\nvar G__32990 = arguments.length;\nswitch (G__32990) {\ncase 2:\nreturn clojure.set.join.cljs$core$IFn$_invoke$arity$2((arguments[(0)]),(arguments[(1)]));\n\nbreak;\ncase 3:\nreturn clojure.set.join.cljs$core$IFn$_invoke$arity$3((arguments[(0)]),(arguments[(1)]),(arguments[(2)]));\n\nbreak;\ndefault:\nthrow (new Error([\"Invalid arity: \",cljs.core.str.cljs$core$IFn$_invoke$arity$1(arguments.length)].join('')));\n\n}\n});\n\n(clojure.set.join.cljs$core$IFn$_invoke$arity$2 = (function (xrel,yrel){\nif(((cljs.core.seq(xrel)) && (cljs.core.seq(yrel)))){\nvar ks = clojure.set.intersection.cljs$core$IFn$_invoke$arity$2(cljs.core.set(cljs.core.keys(cljs.core.first(xrel))),cljs.core.set(cljs.core.keys(cljs.core.first(yrel))));\nvar vec__32993 = (((cljs.core.count(xrel) <= cljs.core.count(yrel)))?new cljs.core.PersistentVector(null, 2, 5, cljs.core.PersistentVector.EMPTY_NODE, [xrel,yrel], null):new cljs.core.PersistentVector(null, 2, 5, cljs.core.PersistentVector.EMPTY_NODE, [yrel,xrel], null));\nvar r = cljs.core.nth.cljs$core$IFn$_invoke$arity$3(vec__32993,(0),null);\nvar s = cljs.core.nth.cljs$core$IFn$_invoke$arity$3(vec__32993,(1),null);\nvar idx = clojure.set.index(r,ks);\nreturn cljs.core.reduce.cljs$core$IFn$_invoke$arity$3((function (ret,x){\nvar found = (function (){var G__33008 = cljs.core.select_keys(x,ks);\nreturn (idx.cljs$core$IFn$_invoke$arity$1 ? idx.cljs$core$IFn$_invoke$arity$1(G__33008) : idx.call(null,G__33008));\n})();\nif(cljs.core.truth_(found)){\nreturn cljs.core.reduce.cljs$core$IFn$_invoke$arity$3((function (p1__32985_SHARP_,p2__32986_SHARP_){\nreturn cljs.core.conj.cljs$core$IFn$_invoke$arity$2(p1__32985_SHARP_,cljs.core.merge.cljs$core$IFn$_invoke$arity$variadic(cljs.core.prim_seq.cljs$core$IFn$_invoke$arity$2([p2__32986_SHARP_,x], 0)));\n}),ret,found);\n} else {\nreturn ret;\n}\n}),cljs.core.PersistentHashSet.EMPTY,s);\n} else {\nreturn cljs.core.PersistentHashSet.EMPTY;\n}\n}));\n\n(clojure.set.join.cljs$core$IFn$_invoke$arity$3 = (function (xrel,yrel,km){\nvar vec__33009 = (((cljs.core.count(xrel) <= cljs.core.count(yrel)))?new cljs.core.PersistentVector(null, 3, 5, cljs.core.PersistentVector.EMPTY_NODE, [xrel,yrel,clojure.set.map_invert(km)], null):new cljs.core.PersistentVector(null, 3, 5, cljs.core.PersistentVector.EMPTY_NODE, [yrel,xrel,km], null));\nvar r = cljs.core.nth.cljs$core$IFn$_invoke$arity$3(vec__33009,(0),null);\nvar s = cljs.core.nth.cljs$core$IFn$_invoke$arity$3(vec__33009,(1),null);\nvar k = cljs.core.nth.cljs$core$IFn$_invoke$arity$3(vec__33009,(2),null);\nvar idx = clojure.set.index(r,cljs.core.vals(k));\nreturn cljs.core.reduce.cljs$core$IFn$_invoke$arity$3((function (ret,x){\nvar found = (function (){var G__33014 = clojure.set.rename_keys(cljs.core.select_keys(x,cljs.core.keys(k)),k);\nreturn (idx.cljs$core$IFn$_invoke$arity$1 ? idx.cljs$core$IFn$_invoke$arity$1(G__33014) : idx.call(null,G__33014));\n})();\nif(cljs.core.truth_(found)){\nreturn cljs.core.reduce.cljs$core$IFn$_invoke$arity$3((function (p1__32987_SHARP_,p2__32988_SHARP_){\nreturn cljs.core.conj.cljs$core$IFn$_invoke$arity$2(p1__32987_SHARP_,cljs.core.merge.cljs$core$IFn$_invoke$arity$variadic(cljs.core.prim_seq.cljs$core$IFn$_invoke$arity$2([p2__32988_SHARP_,x], 0)));\n}),ret,found);\n} else {\nreturn ret;\n}\n}),cljs.core.PersistentHashSet.EMPTY,s);\n}));\n\n(clojure.set.join.cljs$lang$maxFixedArity = 3);\n\n/**\n * Is set1 a subset of set2?\n */\nclojure.set.subset_QMARK_ = (function clojure$set$subset_QMARK_(set1,set2){\nreturn (((cljs.core.count(set1) <= cljs.core.count(set2))) && (cljs.core.every_QMARK_((function (p1__33015_SHARP_){\nreturn cljs.core.contains_QMARK_(set2,p1__33015_SHARP_);\n}),set1)));\n});\n/**\n * Is set1 a superset of set2?\n */\nclojure.set.superset_QMARK_ = (function clojure$set$superset_QMARK_(set1,set2){\nreturn (((cljs.core.count(set1) >= cljs.core.count(set2))) && (cljs.core.every_QMARK_((function (p1__33019_SHARP_){\nreturn cljs.core.contains_QMARK_(set1,p1__33019_SHARP_);\n}),set2)));\n});\n","~:ns-info",["^ ","~:rename-macros",null,"~:renames",["^ "],"~:meta",["^ ","~:file","clojure/set.cljs","~:line",11,"~:column",8,"~:end-line",11,"~:end-column",19,"~:doc","Set operations such as union/intersection.","~:author","Rich Hickey"],"~:ns-aliases",["^ ","~$cljs.loader","~$shadow.loader"],"~:use-macros",null,"~:excludes",["~#set",[]],"~:name","~$clojure.set","~:op","~:ns","~:imports",null,"~:requires",["^ ","~$cljs.core","^I","~$goog","^J"],"~:seen",["^B",[]],"~:uses",null,"~:require-macros",["^ ","^I","^I"],"~:form",["~#list",["~$ns","^D"]],"~:flags",["^ "],"~:js-deps",["^ "],"~:deps",["^J","^I"]],"^F","^D","~:resource-id",["~:shadow.build.classpath/resource","clojure/set.cljs"],"~:compiled-at",1584073477506,"~:resource-name","clojure/set.cljs","~:warnings",[],"~:source",";   Copyright (c) Rich Hickey. All rights reserved.\n;   The use and distribution terms for this software are covered by the\n;   Eclipse Public License 1.0 (http://opensource.org/licenses/eclipse-1.0.php)\n;   which can be found in the file epl-v10.html at the root of this distribution.\n;   By using this software in any fashion, you are agreeing to be bound by\n;   the terms of this license.\n;   You must not remove this notice, or any other, from this software.\n\n(ns ^{:doc \"Set operations such as union/intersection.\"\n       :author \"Rich Hickey\"}\n       clojure.set)\n\n(defn- bubble-max-key [k coll]\n  \"Move a maximal element of coll according to fn k (which returns a number) \n   to the front of coll.\"\n  (let [max (apply max-key k coll)]\n    (cons max (remove #(identical? max %) coll))))\n\n(defn union\n  \"Return a set that is the union of the input sets\"\n  ([] #{})\n  ([s1] s1)\n  ([s1 s2]\n     (if (< (count s1) (count s2))\n       (reduce conj s2 s1)\n       (reduce conj s1 s2)))\n  ([s1 s2 & sets]\n     (let [bubbled-sets (bubble-max-key count (conj sets s2 s1))]\n       (reduce into (first bubbled-sets) (rest bubbled-sets)))))\n\n(defn intersection\n  \"Return a set that is the intersection of the input sets\"\n  ([s1] s1)\n  ([s1 s2]\n     (if (< (count s2) (count s1))\n       (recur s2 s1)\n       (reduce (fn [result item]\n                   (if (contains? s2 item)\n\t\t     result\n                     (disj result item)))\n\t       s1 s1)))\n  ([s1 s2 & sets] \n     (let [bubbled-sets (bubble-max-key #(- (count %)) (conj sets s2 s1))]\n       (reduce intersection (first bubbled-sets) (rest bubbled-sets)))))\n\n(defn difference\n  \"Return a set that is the first set without elements of the remaining sets\"\n  ([s1] s1)\n  ([s1 s2] \n     (if (< (count s1) (count s2))\n       (reduce (fn [result item] \n                   (if (contains? s2 item) \n                     (disj result item) \n                     result))\n               s1 s1)\n       (reduce disj s1 s2)))\n  ([s1 s2 & sets] \n     (reduce difference s1 (conj sets s2))))\n\n\n(defn select\n  \"Returns a set of the elements for which pred is true\"\n  [pred xset]\n    (reduce (fn [s k] (if (pred k) s (disj s k)))\n            xset xset))\n\n(defn project\n  \"Returns a rel of the elements of xrel with only the keys in ks\"\n  [xrel ks]\n    (set (map #(select-keys % ks) xrel)))\n\n(defn rename-keys\n  \"Returns the map with the keys in kmap renamed to the vals in kmap\"\n  [map kmap]\n    (reduce\n     (fn [m [old new]]\n       (if (contains? map old)\n         (assoc m new (get map old))\n         m))\n     (apply dissoc map (keys kmap)) kmap))\n\n(defn rename\n  \"Returns a rel of the maps in xrel with the keys in kmap renamed to the vals in kmap\"\n  [xrel kmap]\n    (set (map #(rename-keys % kmap) xrel)))\n\n(defn index\n  \"Returns a map of the distinct values of ks in the xrel mapped to a\n  set of the maps in xrel with the corresponding values of ks.\"\n  [xrel ks]\n    (reduce\n     (fn [m x]\n       (let [ik (select-keys x ks)]\n         (assoc m ik (conj (get m ik #{}) x))))\n     {} xrel))\n   \n(defn map-invert\n  \"Returns the map with the vals mapped to the keys.\"\n  [m] (reduce (fn [m [k v]] (assoc m v k)) {} m))\n\n(defn join\n  \"When passed 2 rels, returns the rel corresponding to the natural\n  join. When passed an additional keymap, joins on the corresponding\n  keys.\"\n  ([xrel yrel] ;natural join\n   (if (and (seq xrel) (seq yrel))\n     (let [ks (intersection (set (keys (first xrel))) (set (keys (first yrel))))\n           [r s] (if (<= (count xrel) (count yrel))\n                   [xrel yrel]\n                   [yrel xrel])\n           idx (index r ks)]\n       (reduce (fn [ret x]\n                 (let [found (idx (select-keys x ks))]\n                   (if found\n                     (reduce #(conj %1 (merge %2 x)) ret found)\n                     ret)))\n               #{} s))\n     #{}))\n  ([xrel yrel km] ;arbitrary key mapping\n   (let [[r s k] (if (<= (count xrel) (count yrel))\n                   [xrel yrel (map-invert km)]\n                   [yrel xrel km])\n         idx (index r (vals k))]\n     (reduce (fn [ret x]\n               (let [found (idx (rename-keys (select-keys x (keys k)) k))]\n                 (if found\n                   (reduce #(conj %1 (merge %2 x)) ret found)\n                   ret)))\n             #{} s))))\n\n(defn subset? \n  \"Is set1 a subset of set2?\"\n  [set1 set2]\n  (and (<= (count set1) (count set2))\n       (every? #(contains? set2 %) set1)))\n\n(defn superset? \n  \"Is set1 a superset of set2?\"\n  [set1 set2]\n  (and (>= (count set1) (count set2))\n       (every? #(contains? set1 %) set2)))\n\n(comment\n(refer 'set)\n(def xs #{{:a 11 :b 1 :c 1 :d 4}\n         {:a 2 :b 12 :c 2 :d 6}\n         {:a 3 :b 3 :c 3 :d 8 :f 42}})\n\n(def ys #{{:a 11 :b 11 :c 11 :e 5}\n         {:a 12 :b 11 :c 12 :e 3}\n         {:a 3 :b 3 :c 3 :e 7 }})\n\n(join xs ys)\n(join xs (rename ys {:b :yb :c :yc}) {:a :a})\n\n(union #{:a :b :c} #{:c :d :e })\n(difference #{:a :b :c} #{:c :d :e})\n(intersection #{:a :b :c} #{:c :d :e})\n\n(index ys [:b]))\n\n","~:reader-features",["^B",["~:cljs"]],"~:cljc",false,"~:source-map-compact",["^ ","mappings","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","names",["clojure.set/bubble-max-key","k","coll","max","cljs.core.apply","cljs.core/max-key","cljs.core/cons","p1__32935#","cljs.core.remove","var_args","G__32941","clojure.set/union","args-arr__4810__auto__","len__4789__auto__","i__4790__auto__","argseq__4811__auto__","cljs.core/IndexedSeq","seq32938","G__32939","cljs.core/first","cljs.core/next","G__32940","self__4776__auto__","s1","s2","cljs.core/count","cljs.core.reduce","cljs.core/conj","sets","bubbled-sets","cljs.core.conj","cljs.core/into","cljs.core/rest","G__32947","clojure.set/intersection","seq32944","G__32945","G__32946","result","item","cljs.core/contains?","cljs.core.disj","p1__32942#","G__32952","clojure.set/difference","seq32949","G__32950","G__32951","cljs.core/disj","clojure.set/select","pred","xset","s","clojure.set/project","xrel","ks","cljs.core/set","p1__32959#","cljs.core.map","cljs.core/select-keys","clojure.set/rename-keys","map","kmap","p__32965","vec__32966","cljs.core.nth","m","old","new","cljs.core.assoc","cljs.core.get","cljs.core/dissoc","cljs.core/keys","clojure.set/rename","p1__32973#","clojure.set/index","x","ik","clojure.set/map-invert","p__32980","vec__32981","v","G__32990","clojure.set/join","js/Error","yrel","cljs.core/seq","vec__32993","clojure.set.intersection","r","idx","ret","found","G__33008","p1__32985#","p2__32986#","cljs.core.merge","km","vec__33009","cljs.core/vals","G__33014","p1__32987#","p2__32988#","clojure.set/subset?","set1","set2","p1__33015#","cljs.core/every?","clojure.set/superset?","p1__33019#"]],"~:used-vars",["^B",["~$cljs.core/rest","~$clojure.set/intersection","~$clojure.set/project","~$clojure.set/index","~$cljs.core/keys","~$clojure.set/bubble-max-key","~$cljs.core/count","~$cljs.core/reduce","~$cljs.core/seq","~$cljs.core/apply","~$cljs.core/dissoc","~$cljs.core/set","~$cljs.core/contains?","~$cljs.core/into","~$cljs.core/conj","~$cljs.core/map","~$clojure.set/rename-keys","~$cljs.core/get","~$cljs.core/remove","~$clojure.set/difference","~$clojure.set/superset?","~$clojure.set/subset?","~$cljs.core/select-keys","~$cljs.core/disj","~$cljs.core/cons","~$cljs.core/assoc","~$clojure.set/union","~$clojure.set/rename","~$clojure.set/map-invert","~$cljs.core/first","~$clojure.set/join","~$cljs.core/merge","~$cljs.core/every?","~$clojure.set/select","~$js/Error"]]],"~:cache-keys",["~#cmap",[["^U","goog/dom/tagname.js"],[1579837703000,"~:shadow.build.compiler/resolve",["^ ","~:require-id",null,"~:deps-ids",["^B",[]],"~:deps-syms",["^J","~$goog.dom.HtmlElement"]]],["^U","goog/math/math.js"],[1579837703000,"^1Z",["^ ","^1[",null,"^20",["^B",[]],"^21",["^J","~$goog.array","~$goog.asserts"]]],["^U","goog/html/trustedtypes.js"],[1579837703000,"^1Z",["^ ","^1[",null,"^20",["^B",[]],"^21",["^J"]]],["^U","goog/labs/useragent/browser.js"],[1579837703000,"^1Z",["^ ","^1[",null,"^20",["^B",[]],"^21",["^J","^23","~$goog.labs.userAgent.util","~$goog.object","~$goog.string.internal"]]],["^U","goog/html/safeurl.js"],[1579837703000,"^1Z",["^ ","^1[",null,"^20",["^B",[]],"^21",["^J","^24","~$goog.fs.url","~$goog.html.TrustedResourceUrl","~$goog.i18n.bidi.Dir","~$goog.i18n.bidi.DirectionalString","~$goog.string.Const","~$goog.string.TypedString","^27"]]],["^U","goog/array/array.js"],[1579837703000,"^1Z",["^ ","^1[",null,"^20",["^B",[]],"^21",["^J","^24"]]],["^U","goog/debug/error.js"],[1579837703000,"^1Z",["^ ","^1[",null,"^20",["^B",[]],"^21",["^J"]]],["^U","goog/dom/nodetype.js"],[1579837703000,"^1Z",["^ ","^1[",null,"^20",["^B",[]],"^21",["^J"]]],["^U","goog/string/typedstring.js"],[1579837703000,"^1Z",["^ ","^1[",null,"^20",["^B",[]],"^21",["^J"]]],["^U","goog/object/object.js"],[1579837703000,"^1Z",["^ ","^1[",null,"^20",["^B",[]],"^21",["^J"]]],["^U","goog/dom/asserts.js"],[1579837703000,"^1Z",["^ ","^1[",null,"^20",["^B",[]],"^21",["^J","^24"]]],"~:SHADOW-TIMESTAMP",[1582949620000,1579838325000],["^U","goog/math/long.js"],[1579837703000,"^1Z",["^ ","^1[",null,"^20",["^B",[]],"^21",["^J","^24","~$goog.reflect"]]],["^U","goog/html/trustedresourceurl.js"],[1579837703000,"^1Z",["^ ","^1[",null,"^20",["^B",[]],"^21",["^J","^24","~$goog.html.trustedtypes","^2:","^2;","^2<","^2="]]],["^U","goog/string/internal.js"],[1579837703000,"^1Z",["^ ","^1[",null,"^20",["^B",[]],"^21",["^J"]]],["^U","goog/functions/functions.js"],[1579837703000,"^1Z",["^ ","^1[",null,"^20",["^B",[]],"^21",["^J"]]],["^U","goog/html/safestyle.js"],[1579837703000,"^1Z",["^ ","^1[",null,"^20",["^B",[]],"^21",["^J","^23","^24","~$goog.html.SafeUrl","^2<","^2=","^27"]]],["^U","goog/dom/safe.js"],[1579837703000,"^1Z",["^ ","^1[",null,"^20",["^B",[]],"^21",["^J","^24","~$goog.dom.asserts","~$goog.functions","~$goog.html.SafeHtml","~$goog.html.SafeScript","~$goog.html.SafeStyle","^2A","^29","~$goog.html.uncheckedconversions","^2<","^27"]]],["^U","goog/structs/map.js"],[1579837703000,"^1Z",["^ ","^1[",null,"^20",["^B",[]],"^21",["^J","~$goog.iter.Iterator","~$goog.iter.StopIteration"]]],["^U","goog/html/safehtml.js"],[1579837703000,"^1Z",["^ ","^1[",null,"^20",["^B",[]],"^21",["^J","^23","^24","~$goog.dom.TagName","~$goog.dom.tags","^2E","^2F","~$goog.html.SafeStyleSheet","^2A","^29","^2@","^2:","^2;","~$goog.labs.userAgent.browser","^26","^2<","^2=","^27"]]],["^U","goog/dom/tags.js"],[1579837703000,"^1Z",["^ ","^1[",null,"^20",["^B",[]],"^21",["^J","^26"]]],["^U","goog/asserts/asserts.js"],[1579837703000,"^1Z",["^ ","^1[",null,"^20",["^B",[]],"^21",["^J","~$goog.debug.Error","~$goog.dom.NodeType"]]],["^U","goog/uri/uri.js"],[1579837703000,"^1Z",["^ ","^1[",null,"^20",["^B",[]],"^21",["^J","^23","^24","~$goog.string","~$goog.structs","~$goog.structs.Map","~$goog.uri.utils","~$goog.uri.utils.ComponentIndex","~$goog.uri.utils.StandardQueryParam"]]],["^U","goog/i18n/bidi.js"],[1579837703000,"^1Z",["^ ","^1[",null,"^20",["^B",[]],"^21",["^J"]]],["^U","goog/fs/url.js"],[1579837703000,"^1Z",["^ ","^1[",null,"^20",["^B",[]],"^21",["^J"]]],["^U","goog/base.js"],[1579837703000,"^1Z",["^ ","^1[",null,"^20",["^B",[]],"^21",[]]],["^U","goog/structs/structs.js"],[1579837703000,"^1Z",["^ ","^1[",null,"^20",["^B",[]],"^21",["^J","^23","^26"]]],["^U","goog/string/string.js"],[1579837703000,"^1Z",["^ ","^1[",null,"^20",["^B",[]],"^21",["^J","~$goog.dom.safe","^2G","^2<","^27"]]],["^U","goog/reflect/reflect.js"],[1579837703000,"^1Z",["^ ","^1[",null,"^20",["^B",[]],"^21",["^J"]]],["^U","goog/labs/useragent/util.js"],[1579837703000,"^1Z",["^ ","^1[",null,"^20",["^B",[]],"^21",["^J","^27"]]],["^U","goog/string/stringbuffer.js"],[1579837703000,"^1Z",["^ ","^1[",null,"^20",["^B",[]],"^21",["^J"]]],["^U","goog/iter/iter.js"],[1579837703000,"^1Z",["^ ","^1[",null,"^20",["^B",[]],"^21",["^J","^23","^24","^2C","~$goog.math"]]],["^U","goog/html/uncheckedconversions.js"],[1579837703000,"^1Z",["^ ","^1[",null,"^20",["^B",[]],"^21",["^J","^24","^2D","^2E","^2F","^2L","^2A","^29","^2<","^27"]]],["^U","goog/dom/htmlelement.js"],[1579837703000,"^1Z",["^ ","^1[",null,"^20",["^B",[]],"^21",["^J"]]],["^U","cljs/core.cljs"],[1579838325000,"^1Z",["^ ","^1[",null,"^20",["^B",[]],"^21",["^J","~$goog.math.Long","~$goog.math.Integer","^2P","^26","^23","~$goog.Uri","~$goog.string.StringBuffer"]]],["^U","goog/html/safescript.js"],[1579837703000,"^1Z",["^ ","^1[",null,"^20",["^B",[]],"^21",["^J","^24","^2@","^2<","^2="]]],["^U","goog/html/safestylesheet.js"],[1579837703000,"^1Z",["^ ","^1[",null,"^20",["^B",[]],"^21",["^J","^23","^24","^2F","^26","^2<","^2=","^27"]]],["^U","goog/math/integer.js"],[1579837703000,"^1Z",["^ ","^1[",null,"^20",["^B",[]],"^21",["^J","^2?"]]],["^U","clojure/set.cljs"],[1579838325000,"^1Z",["^ ","^1[",null,"^20",["^B",[]],"^21",["^J","^I"]]],["^U","goog/uri/utils.js"],[1579837703000,"^1Z",["^ ","^1[",null,"^20",["^B",[]],"^21",["^J","^23","^24","^2P"]]],["^U","goog/string/const.js"],[1579837703000,"^1Z",["^ ","^1[",null,"^20",["^B",[]],"^21",["^J","^24","^2="]]]]],"~:clj-info",["^ ","jar:file:/Users/clojure/.m2/repository/org/clojure/tools.reader/1.3.2/tools.reader-1.3.2.jar!/clojure/tools/reader/reader_types.clj",1569150464000,"jar:file:/Users/clojure/.m2/repository/org/clojure/clojurescript/1.10.597/clojurescript-1.10.597.jar!/cljs/source_map/base64_vlq.clj",1579838325000,"jar:file:/Users/clojure/.m2/repository/org/clojure/clojure/1.10.1/clojure-1.10.1.jar!/clojure/core.clj",1569048150000,"jar:file:/Users/clojure/.m2/repository/org/clojure/clojurescript/1.10.597/clojurescript-1.10.597.jar!/cljs/source_map/base64.clj",1579838325000,"jar:file:/Users/clojure/.m2/repository/org/clojure/clojure/1.10.1/clojure-1.10.1.jar!/clojure/edn.clj",1569048150000,"jar:file:/Users/clojure/.m2/repository/org/clojure/clojurescript/1.10.597/clojurescript-1.10.597.jar!/cljs/source_map.clj",1579838325000,"jar:file:/Users/clojure/.m2/repository/org/clojure/clojure/1.10.1/clojure-1.10.1.jar!/clojure/string.clj",1569048150000,"jar:file:/Users/clojure/.m2/repository/org/clojure/tools.reader/1.3.2/tools.reader-1.3.2.jar!/clojure/tools/reader/impl/inspect.clj",1569150464000,"jar:file:/Users/clojure/.m2/repository/org/clojure/clojure/1.10.1/clojure-1.10.1.jar!/clojure/instant.clj",1569048150000,"jar:file:/Users/clojure/.m2/repository/org/clojure/clojure/1.10.1/clojure-1.10.1.jar!/clojure/pprint.clj",1569048150000,"jar:file:/Users/clojure/.m2/repository/org/clojure/clojure/1.10.1/clojure-1.10.1.jar!/clojure/set.clj",1569048150000,"jar:file:/Users/clojure/.m2/repository/org/clojure/clojure/1.10.1/clojure-1.10.1.jar!/clojure/java/io.clj",1569048150000,"jar:file:/Users/clojure/.m2/repository/org/clojure/tools.reader/1.3.2/tools.reader-1.3.2.jar!/clojure/tools/reader.clj",1569150464000,"jar:file:/Users/clojure/.m2/repository/org/clojure/clojurescript/1.10.597/clojurescript-1.10.597.jar!/cljs/env.cljc",1579838325000,"jar:file:/Users/clojure/.m2/repository/org/clojure/clojurescript/1.10.597/clojurescript-1.10.597.jar!/cljs/compiler.cljc",1579838325000,"jar:file:/Users/clojure/.m2/repository/org/clojure/clojurescript/1.10.597/clojurescript-1.10.597.jar!/cljs/util.cljc",1579838325000,"jar:file:/Users/clojure/.m2/repository/org/clojure/clojurescript/1.10.597/clojurescript-1.10.597.jar!/cljs/tagged_literals.cljc",1579838325000,"jar:file:/Users/clojure/.m2/repository/org/clojure/clojurescript/1.10.597/clojurescript-1.10.597.jar!/cljs/externs.clj",1579838325000,"jar:file:/Users/clojure/.m2/repository/org/clojure/tools.reader/1.3.2/tools.reader-1.3.2.jar!/clojure/tools/reader/default_data_readers.clj",1569150464000,"jar:file:/Users/clojure/.m2/repository/org/clojure/data.json/0.2.6/data.json-0.2.6.jar!/clojure/data/json.clj",1569048105000,"jar:file:/Users/clojure/.m2/repository/org/clojure/clojurescript/1.10.597/clojurescript-1.10.597.jar!/cljs/analyzer.cljc",1579838325000,"jar:file:/Users/clojure/.m2/repository/org/clojure/clojurescript/1.10.597/clojurescript-1.10.597.jar!/cljs/core.cljc",1579838325000,"jar:file:/Users/clojure/.m2/repository/org/clojure/clojurescript/1.10.597/clojurescript-1.10.597.jar!/cljs/js_deps.cljc",1579838325000,"jar:file:/Users/clojure/.m2/repository/org/clojure/tools.reader/1.3.2/tools.reader-1.3.2.jar!/clojure/tools/reader/impl/errors.clj",1569150464000],"~:analyzer",["^ ","^3",null,"^4",["^ "],"^5",["^ ","^6","clojure/set.cljs","^7",11,"^8",8,"^9",11,"^:",19,"^;","Set operations such as union/intersection.","^<","Rich Hickey"],"^=",["^ ","^>","^?"],"^@",null,"^A",["^B",[]],"^C","^D","^G",null,"^H",["^ ","^I","^I","^J","^J"],"^K",["^B",[]],"~:shadow/js-access-global",["^B",["Error"]],"^L",null,"~:defs",["^ ","~$union",["^ ","~:protocol-inline",null,"^5",["^ ","^6","clojure/set.cljs","^7",19,"^8",7,"^9",19,"^:",12,"~:arglists",["^O",["~$quote",["^O",[[],["~$s1"],["^3P","~$s2"],["^3P","^3Q","~$&","~$sets"]]]]],"^;","Return a set that is the union of the input sets","~:top-fn",["^ ","~:variadic?",true,"~:fixed-arity",2,"~:max-fixed-arity",2,"~:method-params",["^O",[[],["^3P"],["^3P","^3Q"]]],"^3N",["^O",[[],["^3P"],["^3P","^3Q"],["^3P","^3Q","~$&","^3R"]]],"~:arglists-meta",["^O",[null,null,null,null]]]],"^C","^1O","^6","clojure/set.cljs","^:",12,"^3S",["^ ","^3T",true,"^3U",2,"^3V",2,"^3W",["^O",[[],["^3P"],["^3P","^3Q"]]],"^3N",["^O",[[],["^3P"],["^3P","^3Q"],["^3P","^3Q","~$&","^3R"]]],"^3X",["^O",[null,null,null,null]]],"^3W",["^O",[[],["^3P"],["^3P","^3Q"]]],"~:protocol-impl",null,"^3U",2,"^3X",["^O",[null,null,null,null]],"^8",1,"^3T",true,"~:methods",[["^ ","^3U",0,"^3T",false,"~:tag","~$cljs.core/ISet"],["^ ","^3U",1,"^3T",false],["^ ","^3U",2,"^3T",false,"^3[",["^B",[null,"~$any"]]],["^ ","^3U",2,"^3T",true,"^3[",["^B",[null,"^41"]]]],"^7",19,"^9",19,"^3V",2,"~:fn-var",true,"^3N",["^O",[[],["^3P"],["^3P","^3Q"],["^3P","^3Q","~$&","^3R"]]],"^;","Return a set that is the union of the input sets"],"~$map-invert",["^ ","^3M",null,"^5",["^ ","^6","clojure/set.cljs","^7",97,"^8",7,"^9",97,"^:",17,"^3N",["^O",["^3O",["^O",[["~$m"]]]]],"^;","Returns the map with the vals mapped to the keys."],"^C","^1Q","^6","clojure/set.cljs","^:",17,"^3W",["^O",[["~$m"]]],"^3Y",null,"^3X",["^O",[null,null]],"^8",1,"^3T",false,"^7",97,"~:ret-tag",["^B",[null,"^41"]],"^9",97,"^3V",1,"^42",true,"^3N",["^O",["^3O",["^O",[["~$m"]]]]],"^;","Returns the map with the vals mapped to the keys."],"~$join",["^ ","^3M",null,"^5",["^ ","^6","clojure/set.cljs","^7",101,"^8",7,"^9",101,"^:",11,"^3N",["^O",["^3O",["^O",[["~$xrel","~$yrel"],["^46","^47","~$km"]]]]],"^;","When passed 2 rels, returns the rel corresponding to the natural\n  join. When passed an additional keymap, joins on the corresponding\n  keys.","^3S",["^ ","^3T",false,"^3U",3,"^3V",3,"^3W",["^O",[["^46","^47"],["^46","^47","^48"]]],"^3N",["^O",[["^46","^47"],["^46","^47","^48"]]],"^3X",["^O",[null,null]]]],"^C","^1S","^6","clojure/set.cljs","^:",11,"^3S",["^ ","^3T",false,"^3U",3,"^3V",3,"^3W",["^O",[["^46","^47"],["^46","^47","^48"]]],"^3N",["^O",[["^46","^47"],["^46","^47","^48"]]],"^3X",["^O",[null,null]]],"^3W",["^O",[["^46","^47"],["^46","^47","^48"]]],"^3Y",null,"^3U",3,"^3X",["^O",[null,null]],"^8",1,"^3T",false,"^3Z",[["^ ","^3U",2,"^3T",false,"^3[",["^B",[null,"^41","^40"]]],["^ ","^3U",3,"^3T",false,"^3[",["^B",[null,"^41"]]]],"^7",101,"^9",101,"^3V",3,"^42",true,"^3N",["^O",[["^46","^47"],["^46","^47","^48"]]],"^;","When passed 2 rels, returns the rel corresponding to the natural\n  join. When passed an additional keymap, joins on the corresponding\n  keys."],"~$select",["^ ","^3M",null,"^5",["^ ","^6","clojure/set.cljs","^7",61,"^8",7,"^9",61,"^:",13,"^3N",["^O",["^3O",["^O",[["~$pred","~$xset"]]]]],"^;","Returns a set of the elements for which pred is true"],"^C","^1V","^6","clojure/set.cljs","^:",13,"^3W",["^O",[["^4:","^4;"]]],"^3Y",null,"^3X",["^O",[null,null]],"^8",1,"^3T",false,"^7",61,"^44",["^B",[null,"^41"]],"^9",61,"^3V",2,"^42",true,"^3N",["^O",["^3O",["^O",[["^4:","^4;"]]]]],"^;","Returns a set of the elements for which pred is true"],"~$intersection",["^ ","^3M",null,"^5",["^ ","^6","clojure/set.cljs","^7",31,"^8",7,"^9",31,"^:",19,"^3N",["^O",["^3O",["^O",[["^3P"],["^3P","^3Q"],["^3P","^3Q","~$&","^3R"]]]]],"^;","Return a set that is the intersection of the input sets","^3S",["^ ","^3T",true,"^3U",2,"^3V",2,"^3W",["^O",[["^3P"],["^3P","^3Q"]]],"^3N",["^O",[["^3P"],["^3P","^3Q"],["^3P","^3Q","~$&","^3R"]]],"^3X",["^O",[null,null,null]]]],"^C","^16","^6","clojure/set.cljs","^:",19,"^3S",["^ ","^3T",true,"^3U",2,"^3V",2,"^3W",["^O",[["^3P"],["^3P","^3Q"]]],"^3N",["^O",[["^3P"],["^3P","^3Q"],["^3P","^3Q","~$&","^3R"]]],"^3X",["^O",[null,null,null]]],"^3W",["^O",[["^3P"],["^3P","^3Q"]]],"^3Y",null,"^3U",2,"^3X",["^O",[null,null,null]],"^8",1,"^3T",true,"^3Z",[["^ ","^3U",1,"^3T",false],["^ ","^3U",2,"^3T",false,"^3[",["^B",[null,"^41"]]],["^ ","^3U",2,"^3T",true,"^3[",["^B",[null,"^41"]]]],"^7",31,"^9",31,"^3V",2,"^42",true,"^3N",["^O",[["^3P"],["^3P","^3Q"],["^3P","^3Q","~$&","^3R"]]],"^;","Return a set that is the intersection of the input sets"],"~$superset?",["^ ","^3M",null,"^5",["^ ","^6","clojure/set.cljs","^7",137,"^8",7,"^9",137,"^:",16,"^3N",["^O",["^3O",["^O",[["~$set1","~$set2"]]]]],"^;","Is set1 a superset of set2?"],"^C","^1I","^6","clojure/set.cljs","^:",16,"^3W",["^O",[["^4>","^4?"]]],"^3Y",null,"^3X",["^O",[null,null]],"^8",1,"^3T",false,"^7",137,"^44","~$boolean","^9",137,"^3V",2,"^42",true,"^3N",["^O",["^3O",["^O",[["^4>","^4?"]]]]],"^;","Is set1 a superset of set2?"],"~$index",["^ ","^3M",null,"^5",["^ ","^6","clojure/set.cljs","^7",87,"^8",7,"^9",87,"^:",12,"^3N",["^O",["^3O",["^O",[["^46","~$ks"]]]]],"^;","Returns a map of the distinct values of ks in the xrel mapped to a\n  set of the maps in xrel with the corresponding values of ks."],"^C","^18","^6","clojure/set.cljs","^:",12,"^3W",["^O",[["^46","^4B"]]],"^3Y",null,"^3X",["^O",[null,null]],"^8",1,"^3T",false,"^7",87,"^44",["^B",[null,"^41"]],"^9",87,"^3V",2,"^42",true,"^3N",["^O",["^3O",["^O",[["^46","^4B"]]]]],"^;","Returns a map of the distinct values of ks in the xrel mapped to a\n  set of the maps in xrel with the corresponding values of ks."],"~$bubble-max-key",["^ ","^3M",null,"^5",["^ ","^6","clojure/set.cljs","^7",13,"^8",8,"^9",13,"^:",22,"~:private",true,"^3N",["^O",["^3O",["^O",[["~$k","~$coll"]]]]]],"^4D",true,"^C","^1:","^6","clojure/set.cljs","^:",22,"^3W",["^O",[["~$k","^4E"]]],"^3Y",null,"^3X",["^O",[null,null]],"^8",1,"^3T",false,"^7",13,"^44","~$clj","^9",13,"^3V",2,"^42",true,"^3N",["^O",["^3O",["^O",[["~$k","^4E"]]]]]],"~$subset?",["^ ","^3M",null,"^5",["^ ","^6","clojure/set.cljs","^7",131,"^8",7,"^9",131,"^:",14,"^3N",["^O",["^3O",["^O",[["^4>","^4?"]]]]],"^;","Is set1 a subset of set2?"],"^C","^1J","^6","clojure/set.cljs","^:",14,"^3W",["^O",[["^4>","^4?"]]],"^3Y",null,"^3X",["^O",[null,null]],"^8",1,"^3T",false,"^7",131,"^44","^4@","^9",131,"^3V",2,"^42",true,"^3N",["^O",["^3O",["^O",[["^4>","^4?"]]]]],"^;","Is set1 a subset of set2?"],"~$rename",["^ ","^3M",null,"^5",["^ ","^6","clojure/set.cljs","^7",82,"^8",7,"^9",82,"^:",13,"^3N",["^O",["^3O",["^O",[["^46","~$kmap"]]]]],"^;","Returns a rel of the maps in xrel with the keys in kmap renamed to the vals in kmap"],"^C","^1P","^6","clojure/set.cljs","^:",13,"^3W",["^O",[["^46","^4I"]]],"^3Y",null,"^3X",["^O",[null,null]],"^8",1,"^3T",false,"^7",82,"^44",["^B",["^4F","^41","^40","~$cljs.core/MetaFn","~$clj-nil"]],"^9",82,"^3V",2,"^42",true,"^3N",["^O",["^3O",["^O",[["^46","^4I"]]]]],"^;","Returns a rel of the maps in xrel with the keys in kmap renamed to the vals in kmap"],"~$rename-keys",["^ ","^3M",null,"^5",["^ ","^6","clojure/set.cljs","^7",72,"^8",7,"^9",72,"^:",18,"^3N",["^O",["^3O",["^O",[["~$map","^4I"]]]]],"^;","Returns the map with the keys in kmap renamed to the vals in kmap"],"^C","^1E","^6","clojure/set.cljs","^:",18,"^3W",["^O",[["^4M","^4I"]]],"^3Y",null,"^3X",["^O",[null,null]],"^8",1,"^3T",false,"^7",72,"^44",["^B",[null,"^41"]],"^9",72,"^3V",2,"^42",true,"^3N",["^O",["^3O",["^O",[["^4M","^4I"]]]]],"^;","Returns the map with the keys in kmap renamed to the vals in kmap"],"~$project",["^ ","^3M",null,"^5",["^ ","^6","clojure/set.cljs","^7",67,"^8",7,"^9",67,"^:",14,"^3N",["^O",["^3O",["^O",[["^46","^4B"]]]]],"^;","Returns a rel of the elements of xrel with only the keys in ks"],"^C","^17","^6","clojure/set.cljs","^:",14,"^3W",["^O",[["^46","^4B"]]],"^3Y",null,"^3X",["^O",[null,null]],"^8",1,"^3T",false,"^7",67,"^44",["^B",["^4F","^41","^40","^4J","^4K"]],"^9",67,"^3V",2,"^42",true,"^3N",["^O",["^3O",["^O",[["^46","^4B"]]]]],"^;","Returns a rel of the elements of xrel with only the keys in ks"],"~$difference",["^ ","^3M",null,"^5",["^ ","^6","clojure/set.cljs","^7",46,"^8",7,"^9",46,"^:",17,"^3N",["^O",["^3O",["^O",[["^3P"],["^3P","^3Q"],["^3P","^3Q","~$&","^3R"]]]]],"^;","Return a set that is the first set without elements of the remaining sets","^3S",["^ ","^3T",true,"^3U",2,"^3V",2,"^3W",["^O",[["^3P"],["^3P","^3Q"]]],"^3N",["^O",[["^3P"],["^3P","^3Q"],["^3P","^3Q","~$&","^3R"]]],"^3X",["^O",[null,null,null]]]],"^C","^1H","^6","clojure/set.cljs","^:",17,"^3S",["^ ","^3T",true,"^3U",2,"^3V",2,"^3W",["^O",[["^3P"],["^3P","^3Q"]]],"^3N",["^O",[["^3P"],["^3P","^3Q"],["^3P","^3Q","~$&","^3R"]]],"^3X",["^O",[null,null,null]]],"^3W",["^O",[["^3P"],["^3P","^3Q"]]],"^3Y",null,"^3U",2,"^3X",["^O",[null,null,null]],"^8",1,"^3T",true,"^3Z",[["^ ","^3U",1,"^3T",false],["^ ","^3U",2,"^3T",false,"^3[",["^B",[null,"^41"]]],["^ ","^3U",2,"^3T",true,"^3[",["^B",[null,"^41"]]]],"^7",46,"^9",46,"^3V",2,"^42",true,"^3N",["^O",[["^3P"],["^3P","^3Q"],["^3P","^3Q","~$&","^3R"]]],"^;","Return a set that is the first set without elements of the remaining sets"]],"^M",["^ ","^I","^I"],"^Q",["^ "],"^R",["^ "],"^S",["^J","^I"]],"^F","^D","~:ns-specs",["^ "],"~:ns-spec-vars",["^B",[]],"~:compiler-options",["^1Y",[["^4R","~:static-fns"],true,["^4R","~:shadow-tweaks"],null,["^4R","~:source-map-inline"],null,["^4R","~:elide-asserts"],false,["^4R","~:optimize-constants"],null,["^4R","^X"],null,["^4R","~:external-config"],null,["^4R","~:tooling-config"],null,["^4R","~:emit-constants"],null,["^4R","~:load-tests"],null,["^4R","~:form-size-threshold"],null,["^4R","~:infer-externs"],true,["^4R","^Z"],null,["~:js-options","~:js-provider"],"~:require",["~:mode"],"~:dev",["^4R","~:fn-invoke-direct"],null,["^4R","~:source-map"],"/dev/null"]]]