Caml1999I022  %F  	8    V(Belt_Map#Int@A@+Belt_MapIntA@&_none_A@ A@&String@A@.Belt_MapStringA@@$Dict@A@,Belt_MapDictA@@!t@  , #key  %value  (identity  @C@A@GGG@@,@@@@A"id@  , #key  "id  @B@A@'Belt_IdA*comparable @@    @@I@@A$make@"id&!k  "id  @@  󰳐L!v  @@  @  @k@'isEmpty@@@      @@  𰳐E$bool@@@  @  @@#has@@)!k  頰!v  砰"id  @@  @!@@  @  @  @@$cmpU@@H!k  ۠!v  ݠ"id  @@  ٰ@\@@  ܰ@@"JsA"Fn@&arity2 @ @"A#int@@@  @  @  @@  ᰳ@@  @  @  @  @@#cmp@@!k  Ϡ!v  Ѡ"id  @@  Ͱ@@@  а@@@2@@  @  @  ԰6@@  @  @  @  @@#eqU@@!k   !v  Ġ"id  @@  @Ǡ@@  ð@@kAj@&arity2 @@ @@  @  @  @@  Ȱ@@  @  @  @  @D@"eq@@렰!k  !v  "id  @@  @@@  @@@@@  @  @  @@  @  @  @  @s@,findFirstByU@@!k  !v  "id  @@  @@A@&arity2 @@@@  @  @  @@  J&option@+'@  @@  @  @  @@+findFirstBy@@Q!k  !v  "id  @@  @@@M@@  @  @  . @  @@  @  @  @@(forEachU@@}!k  !v  "id  @@  @@-A,@&arity2 @@F$unit@@@  @  @  @@  @@  @  @  @@'forEach@@!k  !v  "id  @@  @@@*@@  @  @  .@@  @  @  @/@'reduceU@@֠!k ~!v "id |@@ }@#acc  @@A@&arity3 @@#@ @  @  @  @@  @  @  @  @_@&reduce@@!k s!v t"id q@@ r@#acc x@@@@@ u@ v@ w@ y@ z@ {@@&everyU@@-!k h!v i"id f@@ g@@A@&arity2 @@1@@ j@ k@ l@@ m6@@ n@ o@ p@@%every@@]!k ^!v _"id \@@ ]@@@Y@@ `@ a@ b]@@ c@ d@ e@@%someU@@!k S!v T"id Q@@ R@@4A3@&arity2 @@@@ U@ V@ W@@ X@@ Y@ Z@ [@@$some@@!k I!v J"id G@@ H@@@@@ K@ L@ M@@ N@ O@ P@4@$size@@۠!k C!v B"id A@@ D{@@ E@ F@Q@'toArray@@!k =!v <"id :@@ ;H%array@@ >@@ ?@ @@u@&toList@@!k 6!v 5"id 3@@ 4I$list@@ 7@@ 8@ 9@@)fromArray@@6!k /!v .@ *@@ +"idc"id -@@ ,^
@@ 0@ 1@ 2@@+keysToArray@@k!k '!v %"id $@@ &s@@ (@ )@@-valuesToArray@@!k !v !"id @@  @@ "@ #@ @&minKey@@!k   @@ t@@ @ @@/minKeyUndefined@@!k   @@ @"JsA)undefined @@ @ @4@&maxKey@@۠!k   @@ @@ @ @L@/maxKeyUndefined@@󠰐!k 	  @@ @"JsA)undefined @@ 
@ @h@'minimum@@!k !v  @@  ߠ@ @@ @ @@,minUndefined@@.!k !v & @@ @"JsA)undefined @ @@ @ @@'maximum@@Q!k !v I @@ 򰳐!@ @@ @ @@,maxUndefined@@p!k !v 젰h @@ 밳@"JsA)undefined @ @@ @ @@#get@@!k 堰!v 栰"id @@ @h@@ @ @ @@,getUndefined@@!k ޠ!v ߠ"id @@ ݰ@@"JsA)undefined @@ @ @ @0@ .getWithDefault@@נ!k נ!v ؠ"id @@ ְ@@@ @ @ @M@&getExn@@!k Ѡ!v Ҡ"id @@ а@@ @ @h@&remove@@!k ˠ!v ʠ"id @@ Ȱ@#@@ @ @ @@*removeMany@@0!k Ġ!v à"id @@ @:@@ I@@ @ @ @@#set@@V!k !v "id @@ @@l@@ @ @ @ @@'updateU@@y!k !v "id @@ @@@+A*@&arity1 @Z@@ _!@@ @ @@ +'#@@ @ @ @ @
@&update@@!k !v "id @@ @@@@@ @@ @ Ӡ"@@ @ @ @ @9@)mergeMany@@࠰!k !v "id @@ @꠰@ @@ @@ @ @ @c@&mergeU@@
!k !v "id @@ @"v2 @@ @@A@&arity3 @'@(@@ @@@ "v3 @@ @ @ @ @@ LB
:@@ @ @ @ @@	%merge@@Y!k !v w"id @@ u@m"v2 y@@ v@@@> @@ x@E@@ zJ"v3 @@ {@ |@ }@ ~9	1@@ @ @ @ @@
%keepU@@!k q!v p"id o@@ j@@OAN@&arity2 @@@@ k@ l@ m@@ nĠ%!@@ r@ s@ t@*@$keep@@Ѡ!k f!v e"id d@@ `@@@@@ a@ b@ c@@ g@ h@ i@S@*partitionU@@!k [!v Z"id Y@@ S@@A@&arity2 @@@@ T@ U@ V@@ W"($ @@ \)/+'@@ X@ ]@ ^@ _@@)partition@@6!k N!v M"id L@@ G@@@2@@ H@ I@ JU@@ O\&"@@ K@ P@ Q@ R@@%split@@i!k A!v @"id ?@@ <@@@ B!@@ >@ CR$@@ =@ D@ E@ F@@$mapU@@!k 8!v 3"id 6@@ 2@@MAL@&arity1 @"v2 7@ 4@@ 5#	@@ 9@ :@ ;@&@#map@@͠!k .!v *"id ,@@ )@@"v2 -@ +@@ /@ 0@ 1@M@+mapWithKeyU@@!k %!v "id #@@ @@A@&arity2 @@"v2 $@  @ !@@ "%	@@ &@ '@ (@@*mapWithKey@@&!k !v "id @@ @@@"v2 @ @ B@@ @ @ @@'getData@@O!k !v "id @@ @,Belt_MapDictA!t @@ @ @@%getId@@s!k !v "id 
@@ 		@@ @ @@*packIdData@"id!k "id @@  $data@,Belt_MapDictA!t !v @@  
@@ @ @ @	@6checkInvariantInternal@@   @@ ,@@ @ @	-@@         n   [(Belt_Map0	V4~f/pL"Js09"!]cAȠ.Bs_stdlib_mini0<2Vتz<X.Belt_MapString@+Belt_MapInt@,Belt_MapDict01dT[/+nsi'Belt_Id05`2Ɨp@               @Caml1999T022 v  $  Y    4 (Belt_Map*ocaml.text&_none_A@ A
  \ A {i immutable} sorted map module which allows customize {i compare} behavior.

   The implementation uses balanced binary trees, and therefore searching
   and insertion take time logarithmic in the size of the map.

  For more info on this module's usage of identity, `make` and others, please see
  the top level documentation of Belt, {b A special encoding for collection safety}.

  Example usage:

   @example {[
    module PairComparator = Belt.Id.MakeComparable(struct
      type t = int * int
      let cmp (a0, a1) (b0, b1) =
        match Pervasives.compare a0 b0 with
        | 0 -> Pervasives.compare a1 b1
        | c -> c
    end)

    let myMap = Belt.Map.make ~id:(module PairComparator)
    let myMap2 = Belt.Map.set myMap (1, 2) "myValue"
  ]}

  The API documentation below will assume a predeclared comparator module for integers, IntCmp
@3others/belt_Map.mliOg"$@@@@  8 @@@@Q*floatarray@  , @@@A@@@2@@@@P5extension_constructor@A#int@  , @@@A@@@8@AB$char@O&string@D%float@E$bool@  , @@а^%false@@@G@а_$true@@@L@@A@@@L@AF$unit@  , @@а`"()@@@U@@A@@@U@A#G#exn@  , @@AA@@@X@@&H%array@  , @ M@A@A@ @@_@@-I$list@  , @ N@Aаa"[]@@@k@аb"::@@@ O@@w@@A@Y@@x@@FJ&option@  , @ P@Aаc$None@@@@аd$Some@@@@@A@@@@XN&lazy_t@  , @ Q@A@A@@@@^K)nativeint@aL%int32@cM%int64@e]:Undefined_recursive_moduleCE@h@@ Jr@@ @@ V@@A=ocaml.warn_on_literal_pattern@@\.Assert_failureC@@ X@@A@Y0Division_by_zeroC%@@@A@X+End_of_fileC,@@@AƠ@W)Sys_errorC3@/@@AΠ%$@[.Sys_blocked_ioC;@@@Aՠ,+@V)Not_foundCB@@@Aܠ32@U'FailureCI@E@@A䠠;:@T0Invalid_argumentCQ@M@@A젠CB@Z.Stack_overflowCY@@@A󠠠JI@S-Out_of_memoryC`@@@AQP@R-Match_failureCg@fbc@ c@@A^
]@C%bytes@ې@.Bs_stdlib_miniA@@Aа#Int@mm@Х@+Belt_MapIntAmm@A	@@)ocaml.doc)	 Specalized when key type is [int], more efficient
    than the generic type, its compare behavior is fixed using the built-in comparison
@&j'''l@@@@@)m@'@а&String@3qdk4qdq@Х@.Belt_MapStringA=qdt>qd@A	  8 =========@=;,*@@A@@+S	 specalized when key type is [string], more efficient
    than the generic type, its compare behavior is fixed using the built-in comparison @PoQp
c@@@@@Sqdd@@а$Dict@]y	f	m^y	f	q@Х@,Belt_MapDictAgy	f	thy	f	@A	  8 ggggggggg@+=.)@@A@@U}	 This module seprate identity from data, it is a bit more verboe but slightly
    more efficient due to the fact that there is no need to pack identity and data back
    after each operation

    {b Advanced usage only}
@zs{x	c	e@@@@@}y	f	f@@A  ( !t@|		|		@А#key    8 @*<-(  , @  Š@  Ơ@  @C@A@   @@|		@	 [('key, 'identity) t]

    ['key] is the field type

    ['value] is the element type

    ['identity] the identity of the collection
@}		 D
.
0@@@@@@@@A|		|		@@BА%value  ,|		|		@@BА(identity  7|		|		@@B@  , ?
@C@A@GGG@@0.@@@A@0.@  8 @@@@A1L@A  ( "id@ G
3
D G
3
F@А#key    8 @Wg  , @  Ϡ@  @B@A@/@0@@1 Π  @@ G
3
3 G
3
g@	, The identity needed for making an empty map@ H
h
h H
h
@@@@@@@@A G
3
9 G
3
=@@BА"id  5 G
3
? G
3
B@@B@  , =	@B@A@'Belt_IdA*comparable I !@@ $  @@30@@@Aг; G
3
U9@А#keyXA G
3
JB G
3
N@@А"id_H G
3
PI G
3
S@@@&bK G
3
II@@KH@  8 IIIIIIIII@c@@ALK@$make@V bW b@б"idг"idc bd b@А!k fO  8 kkkkkkkkk@P@@Aq br b
@@А"id dP} b~ b@@@#@@ S b"@@г!t b% b&@А!k*% b b@@А!v hX1 b b@@А"id/8 b  b#@@@#C7@@ \A b#@@Y4
@ bE b'@@@ b*@ǐ	 [make ~id] creates a new map by taking in the comparator
    @example {[
      let m = Belt.Map.make ~id:(module IntCmp)
    ]}
 @ c'' g@@@@@@9@Y'isEmpty@ j j@б@гR!t j j@@@ i  8 @s-@@A j j@@@@ j	@@@ k@@
@@ o@@гŠ$bool j j@@	@@ u @@@@ x#!@@@ j@	 [isEmpty m] checks whether a map m is empty
    @example {[
      isEmpty (fromArray [|1,"1"|] ~id:(module IntCmp)) = false
    ]}
@ k oQS@@@@@@@6#has@ qUY qU\@б@г!t) qUl* qUm@А!k y  8 111111111@Uk2@@A7 qU_8 qUa@@А!v zC qUcD qUe@@А"id {O qUgP qUj@@@/%@@ #X qU^/@@б@А!k/*_ qUq` qUs@@г2$boolh qUxi qU|@@	@@ 9@@@A@ <@@@"@ ?@@@v qUU@^	 [has m k] checks whether m has the key k
    @example {[
      has (fromArray [|1,"1"|] ~id:(module IntCmp)) 1 = true
    ]}
  @ r}} v@@@@@@@R$cmpU@ x x@б@г!t y  y!@А!k E  8 @q2@@A y y@@А!v G y y@@А"id C y y@@@/%@@ # y/@@б@гJ!t z%7 z%8@А!k94 z%* z%,@@А!v2; z%. z%0@@А"id-B z%2 z%5@@@M@5@@ K z%)@@б@г@"JsA"Fn@&arity2  {<A {<P@б@А!v\e	
 {<C@@б@А!vcl {<G {<I@@г#int {<M@@@@ 2z@@@t@ 5} @@@w@ 6$@@1@@ 84@г#int/ |[`0 |[c@@	@@ <@@@@ ?8 {<@	@@@R@ @L@@@}@ Aw@@@A x@@@@@#cmp@K }dhL }dk@б@гΠ!tV ~mW ~m@А!k kH  8 ^^^^^^^^^@$@@Ad ~mre ~mt@@А!v mIp ~mvq ~mx@@А"id iJ| ~mz} ~m}@@@/%@@ N# ~mq/@@б@г!t  @А!k94  @@А!v2;  @@А"id-B  @@@M@5@@ WK @@б@б@А!vKT  @@б@А!vS\  @@г#int  @@	@@ ]k@@@e@ `n@@@h@ aq@@г#int  @@	@@ b~@@@@ e 	@@@@@ f:@@@k@ ge@@@ }dd@	 [cmp m0 m1 vcmp]

    Total ordering of map given total ordering of value function.

    It will compare size first and each element following the order one by one.
@  gi@@@@@@!@#eqU@ ko kr@б@г!t t t@А!k n  8 @2@@A ty t{@@А!v o) t}* t@@А"id p5 t6 t@@@/%@@ t#> tx/@@б@г!tH I @А!k94O P @@А!v2;V W @@А"id-B] ^ @@@M@5@@ }Kf @@б@г@vAu@&arity2 ts t @б@А!vXa	| @@б@А!v_h  @@гV$bool @@@@ v@@@p@ y @@@s@ |$@@-@@ @гk$bool  @@	@@ @@@@  	@@@N@ H@@@y@ s@@@ kk@@@@@"eq@  @б@г@!t  @А!k   8 @$@@A  @@А!v   @@А"id   @@@/%@@ # /@@б@гy!t  @А!k94 	 @@А!v2;  @@А"id-B  @@@M@5@@ K @@б@б@А!vKT( ) @@б@А!vS\0 1 @@г$bool9 : @@	@@ k@@@e@ n@@@h@ q@@г$boolL M #@@	@@ ~@@@@ U 	@@@@@ :@@@k@ e@@@^ @Fn	 [eq m1 m2 veq] tests whether the maps [m1] and [m2] are
    equal, that is, contain equal keys and associate them with
    equal data.  [veq] is the equality predicate used to compare
    the data associated with the keys. @k $$l 	@@@@@@!@,findFirstByU@v w @б@г!t , -@А!k   8 @2@@A  !@@А!v  # %@@А"id  ' *@@@/%@@ # /@@б@г@A@&arity2  2 B@б@А!k>9	 4@@б@А!v7@ 8 :@@г$bool >@@@@ N@@@H@ Q @@@Y@ T$@@-@@ X@г{&option W ]@ВА!kmh N P@@А!vfo S U@@@zm@ v@@@@@ { M@@@+@  1!@@@f@ `$@@@ '@@@(@@ +findFirstBy@ ^b ^m@б@г!t' ^~( ^@А!k    8 /////////@$@@A5 ^q6 ^s@@А!v  A ^uB ^w@@А"id  M ^yN ^|@@@/%@@ #V ^p/@@б@б@А!k1,_ ^` ^@@б@А!v+4g ^h ^@@г:$boolp ^q ^@@	@@ C@@@=@ F@@@N@ I@@г&option ^ ^@ВА!k_Z ^ ^@@А!vXa ^ ^@@@l_@ h@@@@@ m ^@@@*@ q ^!@@@X@ uR$@@@ ^^'@	 [findFirstBy m p] uses funcion [f] to find the first key value pair
    to match predicate [p].

    @example {[
      let s0 = fromArray ~id:(module IntCmp) [|4,"4";1,"1";2,"2,"3""|];;
      findFirstBy s0 (fun k v -> k = 4 ) = option (4, "4");;
    ]}
@  @@@@@@6@(forEachU@  @б@гE!t  @А!k    8 @2@@A  @@А!v "  @@А"id   @@@/%@@ # /@@б@г@A@&arity2 
	 
 @б@А!k>9	 @@б@А!v7@  @@гޠ$unit" @@@@ N@@@H@ Q @@@Y@ T$@@-@@ X<@г$unit7 8 @@	@@ d@@@@ g@ 	@@@N@ kH@@@F @@@@@p'forEach@P Q @б@гӠ!t[ \ @А!k <#  8 ccccccccc@$@@Ai j @@А!v >$u v 	@@А"id :%  @@@/%@@ )# /@@б@б@А!k1,  @@б@А!v+4  @@г`$unit " &@@	@@ /C@@@=@ 2F@@@N@ 3I@@гs$unit + /@@	@@ 4V@@@@ 7Y 	@@@@@ 8]:@@@ @֐
   [forEach m f] applies [f] to all bindings in map [m].
    [f] receives the 'k as first argument, and the associated value
    as second argument.  The bindings are passed to [f] in increasing
    order with respect to the ordering over the type of the keys.

    @example {[
      let s0 = fromArray ~id:(module IntCmp) [|4,"4";1,"1";2,"2,"3""|];;
      let acc = ref [] ;;
      forEach s0 (fun k v -> acc := (k,v) :: !acc);;

      !acc = [4,"4"; 3,"3"; 2,"2"; 1,"1"]
    ]}
@ 00 @@@@@@@p'reduceU@   @б@гa!t 0 1@А!k \?  8 @2@@A # %@@А!v ^@	 '	 )@@А"id ZA	 +	 .@@@/%@@ E#	 "/@@б@А#acc XK/	$ 5	% 9@@б@г@5A4@&arity3 3	2 >	3 V@б@А#accF		; B@@б@А!kRM	B F	C H@@б@А!vLU	J L	K N@@А#acc1[	P R@@@V5@ L_
!@@@g@ Mb$@@@;@ Ne(@@1@@ Pi	i@А#accBl	a a	b e@@@G@ Tq	f =@@@K@ UuF@@@[@ VxU@@@	o @@@@@}&reduce@	y fj	z fp@б@г!t	 f	 f@А!k w_  8 									@$@@A	 fs	 fu@@А!v y`	 fw	 fy@@А"id ua	 f{	 f~@@@/%@@ e#	 fr/@@б@А#acc sk/	 f	 f@@б@б@А#acc9	 f	 f@@б@А!kFA	 f	 f@@б@А!v@I	 f	 f@@А#acc%O	 f	 f@@@K*@ lT@@@\@ mW@@@0@ nZ!
@@А#acc4^	 f	 f@@@9@ oc	 f@@@=@ pg8@@@M@ qjG@@@	 ff@

  e [reduce m a f] computes [(f kN dN ... (f k1 d1 a)...)],
    where [k1 ... kN] are the keys of all bindings in [m]
    (in increasing order), and [d1 ... dN] are the associated data.

    @example {[
      let s0 = fromArray ~id:(module IntCmp) [|4,"4";1,"1";2,"2,"3""|];;
      reduce s0 [] (fun acc k v -> (k,v) acc ) = [4,"4";3,"3";2,"2";1,"1"];;
    ]}
@
	 

 @@@@@@@}&everyU@
  
 &@б@г!t
 6
  7@А!k z  8 
'
'
'
'
'
'
'
'
'@2@@A
- )
. +@@А!v {
9 -
: /@@А"id |
E 1
F 4@@@/%@@ #
N (/@@б@г@^A]@&arity2 \
[ <
\ L@б@А!k>9	
d >@@б@А!v7@
k B
l D@@г
>$bool
t H@@@@ N@@@H@ Q @@@Y@ T$@@-@@ X
@г
S$bool
 X
 \@@	@@ d@@@@ g
 ;	@@@N@ kH@@@
 @@@@@p%every@
 ]a
 ]f@б@г	%!t
 ]v
 ]w@А!k   8 








@$@@A
 ]i
 ]k@@А!v 
 ]m
 ]o@@А"id 
 ]q
 ]t@@@/%@@ #
 ]h/@@б@б@А!k1,
 ]|
 ]~@@б@А!v+4
 ]
 ]@@г
$bool
 ]
 ]@@	@@ C@@@=@ F@@@N@ I@@г
Ӡ$bool	 ]
 ]@@	@@ V@@@@ Y ]{	@@@@@ ]:@@@ ]]@
 (	d [every m p] checks if all the bindings of the map
    satisfy the predicate [p]. Order unspecified @% &  @@@@@@@p%someU@0 1 @б@г	!t; < @А!k   8 CCCCCCCCC@2@@AI J @@А!v U V @@А"id a b @@@/%@@ #j /@@б@г@zAy@&arity2 xw !x 1@б@А!k>9	 #@@б@А!v7@ ' )@@гZ$bool -@@@@ N@@@H@ Q @@@Y@ T$@@-@@ X@гo$bool = A@@	@@ d@@@@ g  	@@@N@ kH@@@ @@@@@p$some@ BF BJ@б@г
A!t BZ B[@А!k   8 @$@@A BM BO@@А!v  BQ BS@@А"id  BU BX@@@/%@@ # BL/@@б@б@А!k1, B` Bb@@б@А!v+4	 Bf
 Bh@@гܠ$bool Bl Bp@@	@@ C@@@=@ F@@@N@ I@@г$bool% Bv& Bz@@	@@ V@@@@ Y. B_	@@@@@ ]:@@@4 BB@D	g [some m p] checks if at least one binding of the map
    satisfy the predicate [p]. Order unspecified @A {{B @@@@@@@p	$size@L M @б@г
Ϡ!tW X @А!k 	  8 _________@2@@Ae f @@А!v 		q r @@А"id 	} ~ @@@/%@@ # /@@гa#int  	@@	@@  1@@@@ 4@@@ @	j [size s]

    @example {[
      size (fromArray [2,"2"; 2,"1"; 3,"3"] ~id:(module IntCmp)) = 2 ;;
    ]}
@ 

 wy@@@@@@@G
'toArray@ { {@б@г4!t { {@А!k  

  8 @f2@@A { {@@А!v "
 { {@@А"id 
 { {@@@/%@@ # {/@@г%array { {@ВА!k:5 { {@@А!v3< { {@@@G:@ C@@@@@ H {@@@/@ L) @@@ {{#@&	 [toArray s]

    @example {[
      toArray (fromArray [2,"2"; 1,"1"; 3,"3"] ~id:(module IntCmp)) = [1,"1";2,"2";3,"3"]
    ]}

@# $ .0@@@@@@2@_&toList@. 26/ 2<@б@г!t9 2L: 2M@А!k 9#  8 AAAAAAAAA@~2@@AG 2?H 2A@@А!v ;$S 2CT 2E@@А"id 7%_ 2G` 2J@@@/%@@ )#h 2>/@@г$listp 2[q 2_@ВА!k:5z 2R{ 2T@@А!v3< 2W 2Y@@@G:@ /C@@@@@ 1H 2Q@@@/@ 5L) @@@ 22#@{	- In increasing order

    {b See} {!toArray}
@ `` @@@@@@2@_)fromArray@  @б@гf%array  @ВА!k Z<  8 @5@@A  @@А!v \=  @@@@ >@@@+@@ @ )@@б"idг"id  @А!k2-  @@А"id XD9  @@@D@@ GA @@г!t  @А!kUP  @@А!vNW  @@А"id*^# $ @@@i\2@@ Og, @@M/
@ Uk0 "@@@Y@ VoU%@@@6 (@F	 [fromArray kvs ~id]
    @example {[
      toArray (fromArray [2,"2"; 1,"1"; 3,"3"] ~id:(module IntCmp)) = [1,"1";2,"2";3,"3"]
    ]}
@C D ac@@@@@@7@+keysToArray@N eiO et@б@гѠ!tY eZ e@А!k r]  8 aaaaaaaaa@2@@Ag ewh ey@@А!v t^s e{t e}@@А"id p_ e e@@@/%@@ c# ev/@@г@%array e e@А!k72 e e@@@=@@ j9@@@@ n<@@@ ee@	 [keysToArray s]
    @example {[
      keysToArray (fromArray [2,"2"; 1,"1"; 3,"3"] ~id:(module IntCmp)) =
      [|1;2;3|];;
    ]}
@  @@@@@@"@O-valuesToArray@ " /@б@г>!t ? @@А!k u  8 @n2@@A 2 4@@А!v v 6 8@@А"id w : =@@@/%@@ {# 1/@@г%array H M@А!v)2 D F@@@/@@ 9@@@@ <@@@ @ 	 [valuesToArray s]
    @example {[
      valuesToArray (fromArray [2,"2"; 1,"1"; 3,"3"] ~id:(module IntCmp)) =
      [|"1";"2";"3"|];;
    ]}

@ NN @@@@@@"@O&minKey@( ) @б@г!t3 4 @А!k   8 ;;;;;;;;;@n2@@AA B @@@@ 	H I @@@@ O P @@@%
@@ X %@@г&option` a 	@А!k-(g  h @@@3@@ /@@@@ 2@@@s @[	; [minKey s]
    @return the minimum key, None if not exist
@ 

 HJ@@@@@@"@E/minKeyUndefined@ LP L_@б@г!t Ll Lm@А!k   8 @d2@@A Lb Ld@@@@ 	 Lf Lg@@@@  Li Lj@@@%
@@  La%@@г@"JsA)undefined  Lt L@А!k1, Lq Ls@@@7@@ 3@@@#@ 6@@@ LL@ꐠ2 {b See} {!minKey}@  @@@@@@"@I&maxKey@@б@гu!t@А!k   8 @h2@@A@@@@ 	@@@@ @@@%
@@ "%@@г&option*+@А!k-(12@@@3@@ /@@@@ 2@@@=@%M	; [maxKey s]
    @return the maximum key, None if not exist
@JK  @@@@@@"@E/maxKeyUndefined@U  V  @б@гؠ!t`  "a  #@А!k   8 hhhhhhhhh@d2@@An  o  @@@@ 	u  v  @@@@ |  }   @@@%
@@   %@@г@"JsA)undefined   *  6@А!k1,  '  )@@@7@@ 3@@@#@ 6@@@  @3 {b See} {!maxKey} @ 7 7 7 O@@@@@@"@I'minimum@	 Q U	 Q \@б@г?!t	 Q k	 Q l@А!k   8 @h2@@A	 Q _	 Q a@@А!v 	 Q c	 Q e@@@@ 	 Q h	 Q i@@@* 
@@ 	 Q ^*@@г&option	 Q z	 Q @ВА!k50	 Q q	 Q s@@А!v.7
	 Q v	 Q x@@@B5@ >@@@@@ C	 Q p@@@/@ G) @@@	 Q Q#@,	G [minimum s]
    @return the minimum key value pair, None if not exist
@)
  *  @@@@@@2@Z,minUndefined@4  5  @б@г!t?  @  @А!k   8 GGGGGGGGG@y2@@AM  N  @@А!v 
Y  Z  @@@@ `  a  @@@* 
@@ i  *@@г@"JsA)undefined u  v !@ВА!k94    @@А!v2;    @@@F9@  B@@@#@@ G  @@@3@ K- @@@  #@4 {b See} {!minimum} @!	!	!	!"@@@@@@2@^'maximum@!$!(!$!/@б@г3!t!$!=!$!>@А!k   8 @}2@@A!$!2!$!4@@А!v !!$!6!$!8@@@@ !$!:!$!;@@@* 
@@ !$!1*@@г}&option!$!L!$!R@ВА!k50!$!C!$!E@@А!v.7!$!H!$!J@@@B5@ >@@@@@ C
!$!B@@@/@ G) @@@!$!$#@ 	G [maximum s]
    @return the maximum key value pair, None if not exist
@!S!S!!@@@@@@2@Z,maxUndefined@(!!)!!@б@г!t3!!4!!@А!k 6"  8 ;;;;;;;;;@y2@@AA!!B!!@@А!v 8#M!!N!!@@@@ $T!!U!!@@@* 
@@ (]!!*@@г@"JsA)undefined i!!j!!@ВА!k94s!!t!!@@А!v2;z!!{!!@@@F9@ .B@@@#@@ 0G!!@@@3@ 4K- @@@!!#@t4 {b See} {!maximum}
@!!!!@@@@@@2@^#get@!!!!@б@г'!t!"!"@А!k O9  8 @}2@@A!" !"@@А!v Q:!"!"@@А"id M;!"!"@@@/%@@ ?#!!/@@б@А!k/*!"!"@@г~&option!"!"!@А!v1:!"!"@@@7@@ FA@@@I@ JD@@@*@ KG$@@@!!@	 [get s k]

    @example {[
      get (fromArray [2,"2"; 1,"1"; 3,"3"] ~id:(module IntCmp)) 2 =
      Some "2";;
      get (fromArray [2,"2"; 1,"1"; 3,"3"] ~id:(module IntCmp)) 2 =
      None;;
    ]}
@""""#""@@@@@@%@Z,getUndefined@%""%"#@б@г!t'%"#(%"#@А!k hR  8 /////////@y2@@A5%"#6%"#@@А!v jSA%"#	B%"#@@А"id fTM%"#N%"#@@@/%@@ X#V%"#/@@б@А!k/*]%"#^%"#@@г@"JsA)undefined j%"#!k%"#-@А!v5>q%"#r%"# @@@;@@ _E@@@M@ cH@@@.@ dK(@@@%""@h	8 {b See} {!get}

    @return [undefined] when not found
@&#.#.)#i#k@@@@@@%@^.getWithDefault@+#m#q+#m#@б@г!t,##,##@А!k }k  8 @}2@@A,##,##@@А!v l,##,##@@А"id {m,##,##@@@/%@@ q#,##/@@б@А!k/*,##,##@@б@А!v)2,##,##@@А!v/8,##,##@@@44@ w=@@@E@ x@@@@&@ yC 
@@@+#m#m@	_ [getWithDefault s k default]

   {b See} {!get}

    @return [default] when [k] is not found

@-##3$
$@@@@@@@V&getExn@5$$5$$@б@г!t5$$)5$$*@А!k   8 @u2@@A%5$$&5$$@@А!v 15$$ 25$$"@@А"id =5$$$>5$$'@@@/%@@ #F5$$/@@б@А!k/*M5$$.N5$$0@@А!v'0S5$$4T5$$6@@@:,@ 5@@@@ 8@@@]5$$
@Em	F [getExn s k]

   {b See} {!getExn}

    {b raise} when [k] not exist
@j6$7$7k;$$@@@@@@@K&remove@u?$$v?$$@б@г!t?$$?$$@А!k   8 @j2@@A?$$?$$@@А!v ?$$?$$@@А"id ?$$?$$@@@/%@@ #?$$/@@б@А!k/*?$$?$$@@г7!t?$%?$%	@А!k?:?$$?$$@@А!v8A?$$?$%@@А"id3H?$%?$%@@@SF;@@ Q?$$@@@Z
@ U+!@@@;@ X5$@@@?$$'@
   [remove m x] when [x] is not in [m], [m] is returned reference unchanged.

    @example {[
      let s0 =  (fromArray [2,"2"; 1,"1"; 3,"3"] ~id:(module IntCmp));;

      let s1 = remove s0 1;;
      let s2 = remove s1 1;;
      s1 == s2 ;;
      keysToArray s1 = [|2;3|];;
    ]}

@@%
%
K&'&)@@@@@@6@k*removeMany@M&+&/M&+&9@б@г!t	M&+&I
M&+&J@А!k   8 @2@@AM&+&<M&+&>@@А!v #M&+&@$M&+&B@@А"id /M&+&D0M&+&G@@@/%@@ #8M&+&;/@@б@г%arrayBM&+&QCM&+&V@А!k94IM&+&NJM&+&P@@@?@@ ;@@гϠ!tWM&+&hXM&+&i@А!kNI^M&+&[_M&+&]@@А!vGPeM&+&_fM&+&a@@А"idBWlM&+&cmM&+&f@@@bUJ@@ `uM&+&Z@@@-
@ d0!@@@J@ gD$@@@~M&+&+'@f	 [removeMany s xs]

    Removing each of [xs] to [s], note unlike {!remove},
    the reference of return value might be changed even if none in [xs]
    exists [s]
@N&j&jS''@@@@@@6@z#set@U''U''@б@г!tV''0V''1@А!k   8 @2@@AV''#V''%@@А!v V'''V'')@@А"id V''+V''.@@@/%@@ #V''"/@@б@А!k/*V''5V''7@@б@А!v)2V'';V''=@@г`!tV''PV''Q@А!kGBV''CV''E@@А!v@IV''GV''I@@А"id;PV''KV''N@@@[NC@@ YV''B@@@T
@ ]+!@@@e@ `6$@@@F@ c@'@@@U''*@"
  W [set m x y ] returns a map containing the same bindings as
    [m], with a new binding of [x] to [y]. If [x] was already bound
    in [m], its previous binding disappears.

    @example {[
      let s0 =  (fromArray [2,"2"; 1,"1"; 3,"3"] ~id:(module IntCmp));;

      let s1 = set s0 2 "3";;

      valuesToArray s1 =  ["1";"3";"3"];;
    ]}
@W'R'R b((@@@@@@9@v'updateU@*d((+d((@б@г!t5d((6d((@А!k   8 =========@2@@ACd((Dd((@@А!v Od((Pd((@@А"id [d((\d((@@@/%@@ #dd((/@@б@А!k/*kd((ld((@@б@г@|A{@&arity1 zyd((zd((@б@г&optiond((d((@А!vBKd((@@@G@@ Q@@г)&optiond(( @А!vU^d((d((@@@[@@ e,@@@@ h0@@9@@ 	l@г+!td()d()@А!k~yd((d((@@А!vwd((d((@@А"idrd()d()@@@z@@ d((@@@,
@ d(("@@@@ n%@@@~@ x(@@@d((+@@@,@@&update@e))e))@б@гk!te))"e))#@А!k E  8 @$@@Ae))e))@@А!v G e))e))@@А"id C!e))e)) @@@/%@@ %#"e))/@@б@А!k/*)e))'*e)))@@б@б@гƠ&option6e))17e))7@А!v5>=e)).>e))0@@@;@@ ,E@@г۠&optionKe))>Le))D@А!vJSRe));Se))=@@@P@@ 1Z@@@@ 5]@@г۠!tce))Wde))X@А!kpkje))Jke))L@@А!virqe))Nre))P@@А"iddyxe))Rye))U@@@wl@@ 9e))I@@@+
@ ?e))-"@@@@ @`%@@@p@ Aj(@@@e))+@v
  n [update m x f] returns a map containing the same bindings as
    [m], except for the binding of [x].
    Depending on the value of
    [y] where [y] is [f (get x m)], the binding of [x] is
    added, removed or updated. If [y] is [None], the binding is
    removed if it exists; otherwise, if [y] is [Some z] then [x]
    is associated to [z] in the resulting map.
@f)Y)Ym**@@@@@@:@ )mergeMany@o**o**@б@г)!tp**p**@А!k h H  8 @2@@Ap**p**@@А!v j Ip**p**@@А"id f Jp**p**@@@/%@@ N#p**/@@б@г%arrayp**p*+@ВА!k<7p**p**@@А!v5>p**p**@@@I<@ TE@@@@@ VJp**@@г!tp*+p*+@А!k^Yp*+	p*+@@А!vW`p*+p*+@@А"idRg$p*+%p*+@@@reZ@@ ]p-p*+@@@.
@ ct*!@@@Z@ dwT$@@@6o**'@F	 [mergeMany s xs]

    Adding each of [xs] to [s], note unlike {!add},
    the reference of return value might be changed even if all values in [xs]
    exist [s]
@Cq++Dv++@@@@@@6@!&mergeU@Nx++Ox++@б@гѠ!tYy++Zy++@А!k !k  8 aaaaaaaaa@2@@Agy++hy++@@А!v !lsy++ty++@@А"id !my++y++@@@/%@@ q#y++/@@б@г
!tz++z++@А!k94z++z++@@А"v2 !w@z++z++@@А"id2Gz++z++@@@#R:@@ {Pz++#@@б@г@A@&arity3 {+, {+,+@б@А!kkf	{+,@@б@гe&option{+,	{+,@А!vnw{+,{+,@@@t@@ ~@@б@г|&option{+,{+,@А"v2S{+,{+,@@@Y@@ @@г&option{+,%?@А"v3 !{+,!{+,$@@@@@ P@@@ @ #S@@@:@ =V@@@@ Z@@c@@ +@г!t&|,6,H'|,6,I@А!kȰ-|,6,:.|,6,<@@А"v3-ϰ4|,6,>5|,6,A@@А"idְ;|,6,C<|,6,F@@@;@@ ߰D|,6,9@@@,
@ H{++"@@@@ %@@@@ (@@@Qx+++@@@,@@"%merge@[},J,N\},J,S@б@гޠ!tf~,U,gg~,U,h@А!k "  8 nnnnnnnnn@)$@@At~,U,Yu~,U,[@@А!v "~,U,]~,U,_@@А"id "~,U,a~,U,d@@@/%@@ #~,U,X/@@б@г!t,l,~,l,@А!k94,l,p,l,r@@А"v2 "@,l,t,l,w@@А"id2G,l,y,l,|@@@#R:@@ P,l,o#@@б@б@А!k^Y,,,,@@б@гf&option,,,,@А!vbk,,,,@@@h@@ r@@б@г}&option,,,,@А"v2G,,,,@@@M@@ @@г&option,,,,@А"v3 ",,,,@@@@@ @@@!@ $@@@;@ >@@@@ S@@г!t%,,&,,@А!k,,,-,,@@А"v3*3,,4,,@@А"idȰ:,,;,,@@@Ӡ8@@ ѰC,,@@@+
@ հG,,"@@@@ ٰ%@@@@ ܰ(@@@P},J,J+@8`	 [merge m1 m2 f] computes a map whose keys is a subset of keys of [m1]
    and of [m2]. The presence of each such binding, and the corresponding
    value, is determined with the function [f].
@],,^--@@@@@@:@#%keepU@h--i--@б@г렐!ts--t--@А!k #  8 {{{{{{{{{@)2@@A----@@А!v #----@@А"id #----@@@/%@@ #--/@@б@г@A@&arity2 ----@б@А!k>9	--@@б@А!v7@----@@г$bool--@@@@ N@@@H@ Q @@@Y@ T$@@-@@  X@гU!t----@А!kje----@@А!vcl----@@А"id^s----@@@~qf@@ |--@@@,
@ --"@@@g@ a%@@@--(@@@)@@$$keep@----@б@г!t-.-.@А!k 4$  8 """""""""@$@@A(--)--@@А!v 6$4--5--@@А"id 2$@-.A-.@@@/%@@ #I--/@@б@б@А!k1,R..S..@@б@А!v+4Z..[..@@г-$boolc..d.. @@	@@ !C@@@=@ $F@@@N@ %I@@г!tv.%.7w.%.8@А!k\W}.%.*~.%.,@@А!vU^.%...%.0@@А"idPe.%.2.%.5@@@pcX@@ )n.%.)@@@+
@ /r.."@@@Y@ 0vS%@@@--(@	Y [keep m p] returns the map with all the bindings in [m]
    that satisfy predicate [p]. @.9.9.u.@@@@@@7@%*partitionU@....@б@г9!t....@А!k e%7  8 @2@@A....@@А!v g%8....@@А"id c%9....@@@/%@@ =#../@@б@г@ A@&arity2 ....@б@А!k>9	..@@б@А!v7@....@@гࠐ$bool..@@@@ CN@@@H@ FQ @@@Y@ GT$@@-@@ IX0@Вг!t.../..@А!kmh5..6..@@А!vfo<..=..@@А"idavC..D..@@@ti@@ PL..@@г͠!tU./V./@А!k\..]..@@А!vc..d..@@А"idj..k./@@@@@ Ys..@@@2@ _-#@@@[@ `|..'@@@@ a*@@@..-@@@.@@&)partition@//
//@б@г!t//'//(@А!k &h  8 @$@@A////@@А!v &i//// @@А"id &j//"//%@@@/%@@ n#///@@б@б@А!k1,/,/1/,/3@@б@А!v+4/,/7/,/9@@г$bool/,/=/,/A@@	@@ tC@@@=@ wF@@@N@ xI@@Вгn!t/F/X/F/Y@А!k_Z/F/K/F/M@@А!vXa/F/O/F/Q@@А"idSh/F/S/F/V@@@sf[@@ |q/F/J@@г!t/F/j/F/k@А!k$/F/]%/F/_@@А!v+/F/a,/F/c@@А"idz2/F/e3/F/h@@@@@ ;/F/\@@@2@ -#@@@Z@ D/,/0'@@@@ *@@@J//-@2Z	 [partition m p] returns a pair of maps [(m1, m2)], where
    [m1] contains all the bindings of [s] that satisfy the
    predicate [p], and [m2] is the map with all the bindings of
    [s] that do not satisfy [p].
@W/l/lX0E0G@@@@@@<@'%split@b0I0Mc0I0R@б@г堐!tm0T0fn0T0g@А!k '  8 uuuuuuuuu@2@@A{0T0Y|0T0[@@А!v '0T0]0T0_@@А"id '0T0a0T0d@@@/%@@ #0T0X/@@б@А!k/*0T0k0T0m@@ВВг*!t0q00q0@А!kE@0q0w0q0y@@А!v>G0q0{0q0}@@А"id9N0q00q0@@@YLA@@ W0q0v@@гQ!t0q00q0@А!klg0q00q0@@А!ven0q00q0@@А"id`u0q00q0@@@sh@@ ~0q0@@@2@ -#@@г&option0q00q0@А!v0q00q0@@@@@ @@@	@ 0q0u@@@@ y@@@@ @@@!0I0I@	1
  O [split x m] returns a tuple [(l r), data], where
      [l] is the map with all the bindings of [m] whose 'k
    is strictly less than [x];
      [r] is the map with all the bindings of [m] whose 'k
    is strictly greater than [x];
      [data] is [None] if [m] contains no binding for [x],
      or [Some v] if [m] binds [v] to [x].
@.00/11@@@@@@+@($mapU@911:12@б@г!tD12E12@А!k (  8 LLLLLLLLL@2@@AR12S12@@А!v (^12
_12@@А"id (j12k12@@@/%@@ #s12/@@б@г@A@&arity1 1212"@б@А!v09	12@@А"v2 (C12@@@>	@ G@@ @@ K@г!t12=12>@А!k]X12/121@@А"v2!_123126@@А"idQf12812;@@@q/Y@@ o12.@@@,
@ s12"@@@Z@ wT%@@@11(@@@)@@|)#map@2?2C2?2F@б@гV!t2?2V2?2W@А!k )  8 @$@@A2?2I2?2K@@А!v )2?2M2?2O@@А"id )2?2Q2?2T@@@/%@@ #2?2H/@@б@б@А!v#,2?2\2?2^@@А"v2 )7!2?2b"2?2e@@@3
@ <@@г!t-2?2z.2?2{@А!kOJ42?2l52?2n@@А"v2Q;2?2p<2?2s@@А"idCXB2?2uC2?2x@@@c-K@@ aK2?2k@@@+
@ eO2?2["@@@L@ iF%@@@U2?2?(@=e
  % [map m f] returns a map with same domain as [m], where the
    associated value [a] of all bindings of [m] has been
    replaced by the result of the application of [f] to [a].
    The bindings are passed to [f] in increasing order
    with respect to the ordering over the type of the keys. @b2|2|c3h3@@@@@@7@|*+mapWithKeyU@m33n33@б@г!tx33y33@А!k **  8 @2@@A3333@@А!v ,*	3333@@А"id (*
3333@@@/%@@ #33/@@б@г@A@&arity2 3333@б@А!k>9	33@@б@А!v7@3333@@А"v2 .*K33@@@F	@ O@@@W@ R"@@+@@ V@гX!t3333@А!khc3333@@А"v2$j3333@@А"id\q3333@@@|2d@@ z33@@@,
@ %~ 33"@@@e@ &_%@@@ 33(@@@)@@+*mapWithKey@ 33 34@б@г!t 34 34@А!k L+/  8  % % % % % % % % %@$@@A +34	 ,34@@А!v N+0 734 834@@А"id J+1 C34 D34@@@/%@@ 5# L34/@@б@б@А!k1, U34 V34@@б@А!v+4 ]34" ^34$@@А"v2 P+;? h34( i34+@@@;
@ <D@@@L@ =G@@г!t w34? x34@@А!kZU ~341 343@@А"v2"\ 345 348@@А"idNc 34: 34=@@@n0V@@ Al 340@@@+
@ Gp 34"@@@W@ HtQ%@@@ 33(@ 	f [mapWithKey m f]

    The same as {!map} except that [f] is supplied with one more argument: the key
@ 4A4A 44@@@@@@7@,'getData@ 44 44@б@г:!t 44 44@А!k 
},Q  8          @2@@A 44 44@@А!v 
,R 44 44@@А"id 
{,S 44 44@@@/%@@ W# 44/@@г@,Belt_MapDictA!t  44 44@А!k;6!44!44@@А!v4=!44!44@@А"id/D!44!44@@@"OB7@@ 
sM!44@@@4
@ 
yQ.!@@@!!44$@ 	!1	 [getData s0]

    {b Advanced usage only}

    @return the raw data (detached from comparator),
    but its type is still manifested, so that user can pass identity directly
    without boxing
@!.44!/55@@@@@@3@d-%getId@!955!:55@б@г!t!D55!E55@А!k 
-
  8 !L!L!L!L!L!L!L!L!L@2@@A!R55!S55@@А!v 
-
!^55!_55@@А"id 
-
!j55!k55@@@/%@@ 
#!s55/@@г"id!{55!|55@А!k72!55!55@@А"id$9!55!55@@@D+@@ 
A!55@@@(	@ 
E"@@@!55@ !	K [getId s0]

    {b Advanced usage only}

    @return the identity of [s0]
@!55!6/61@@@@@@+@X.*packIdData@!6367!636A@б"idгޠ"id!636P!636R@А!k 
.
  8 !!!!!!!!!@y4@@A!636G!636I@@А"id 
.
!636K!636N@@@#@@ 
!636F"@@б$dataг@,Belt_MapDictA!t !636i!636w@А!k2-!636\!636^@@А!v 
.
9"636`"636b@@А"id7@"636d"	636g@@@'K?@@ 
I"636[#@@г !t"636"636@А!k]X" 636|"!636~@@А!v+_"'636"(636@@А"id]f".636"/636@@@q9e@@ 
o"7636{@@Y0
@ 
s";636V"@@f@ 
w"?636C&@@@"B6363)@!*"R	X [packIdData ~id ~data]

    {b Advanced usage only}

    @return the packed collection
@"O66"P66@@@@@@8@"d"c"/*@"`66"a66@@@@  8 "_"_"_"_"_"_"_"_"_@$@@A/6checkInvariantInternal@"l66"m67@б@г !t"w67"x67@@@ 
"~67"67@@@@ 
"@@@ 
&@@
@@ 
,@@г"R$unit"67"67@@	@@ 
9@@@@ 
<!@@@"66@!"	)
   {b raise} when invariant is not held
@"77"7F7H@@@@@@@O"""/*@"7I7I"7I7P@@@@  8 """""""""@`[$@@A@!!@!![@!p!4@!G A  A }  ͠_K("k͠7#xrSMՠ;5ZFߠdPàXDx'ƠaM렠q]m}1	?9}
렠
	Ҡ	ՠ"w㠠hbޠ-'@  8 #:#:#:#:#:#:#:#:#:@|@@A@	E*********************************************************************#BA@@#CA@ I@	E                                                                     #HB J J#IB J @	E                                OCaml                                #NC  #OC  @	E                                                                     #TD  #UD '@	E            Xavier Leroy, projet Cristal, INRIA Rocquencourt         #ZE((#[E(q@	E                                                                     #`Frr#aFr@	E  Copyright 1996 Institut National de Recherche en Informatique et   #fG#gG@	E  en Automatique.  All rights reserved.  This file is distributed    #lH#mHO@	E  under the terms of the GNU Library General Public License, with    #rIPP#sIP@	E  the special exception on linking described in file ../LICENSE.     #xJ#yJ@	E                                                                     #~K#K-@	E  Adapted by authors of BuckleScript without using functors          #L..#L.w@	E*********************************************************************#Mxx#Mx@
  ]* A {i immutable} sorted map module which allows customize {i compare} behavior.

   The implementation uses balanced binary trees, and therefore searching
   and insertion take time logarithmic in the size of the map.

  For more info on this module's usage of identity, `make` and others, please see
  the top level documentation of Belt, {b A special encoding for collection safety}.

  Example usage:

   @example {[
    module PairComparator = Belt.Id.MakeComparable(struct
      type t = int * int
      let cmp (a0, a1) (b0, b1) =
        match Pervasives.compare a0 b0 with
        | 0 -> Pervasives.compare a1 b1
        | c -> c
    end)

    let myMap = Belt.Map.make ~id:(module PairComparator)
    let myMap2 = Belt.Map.set myMap (1, 2) "myValue"
  ]}

  The API documentation below will assume a predeclared comparator module for integers, IntCmp
#	* Specalized when key type is [int], more efficient
    than the generic type, its compare behavior is fixed using the built-in comparison
"m	* specalized when key type is [string], more efficient
    than the generic type, its compare behavior is fixed using the built-in comparison "F	* This module seprate identity from data, it is a bit more verboe but slightly
    more efficient due to the fact that there is no need to pack identity and data back
    after each operation

    {b Advanced usage only}
"	* [('key, 'identity) t]

    ['key] is the field type

    ['value] is the element type

    ['identity] the identity of the collection
!렠	-* The identity needed for making an empty map!
  
    How we retain soundness:
    The only way to create a value of type [_ t] from scratch
    is through [empty] which requires [_ Belt_Id.t]
    The only way to create [_ Belt_Id.t] is using [Belt_Id.Make] which
    will create a fresh type [id] per module

    Generic operations over tree without [cmp] are still exported
    (for efficient reasons) so that [data] does not need be boxed and unboxed.

    The soundness is guaranteed in two aspects:
    When create a value of [_ t] it needs both [_ Belt_Id.t] and [_ t0].
    [_ Belt_Id.t] is an abstract type. Note [add0] requires [_ Belt_Id.cmp] which
    is also an abstract type which can only come from [_ Belt_Id.t]

    When destructing a value of [_ t], the ['id] parameter is threaded.

# K

# \@	a should not export [Belt_Id.compare].
   should only export [Belt_Id.t] or [Belt_Id.cmp] instead # ^# _@	* [make ~id] creates a new map by taking in the comparator
    @example {[
      let m = Belt.Map.make ~id:(module IntCmp)
    ]}
  ꠠ	* [isEmpty m] checks whether a map m is empty
    @example {[
      isEmpty (fromArray [|1,"1"|] ~id:(module IntCmp)) = false
    ]}
 	* [has m k] checks whether m has the key k
    @example {[
      has (fromArray [|1,"1"|] ~id:(module IntCmp)) 1 = true
    ]}
   1	* [cmp m0 m1 vcmp]

    Total ordering of map given total ordering of value function.

    It will compare size first and each element following the order one by one.
	* [eq m1 m2 veq] tests whether the maps [m1] and [m2] are
    equal, that is, contain equal keys and associate them with
    equal data.  [veq] is the equality predicate used to compare
    the data associated with the keys. O
   * [findFirstBy m p] uses funcion [f] to find the first key value pair
    to match predicate [p].

    @example {[
      let s0 = fromArray ~id:(module IntCmp) [|4,"4";1,"1";2,"2,"3""|];;
      findFirstBy s0 (fun k v -> k = 4 ) = option (4, "4");;
    ]}

  * [forEach m f] applies [f] to all bindings in map [m].
    [f] receives the 'k as first argument, and the associated value
    as second argument.  The bindings are passed to [f] in increasing
    order with respect to the ordering over the type of the keys.

    @example {[
      let s0 = fromArray ~id:(module IntCmp) [|4,"4";1,"1";2,"2,"3""|];;
      let acc = ref [] ;;
      forEach s0 (fun k v -> acc := (k,v) :: !acc);;

      !acc = [4,"4"; 3,"3"; 2,"2"; 1,"1"]
    ]}

  f* [reduce m a f] computes [(f kN dN ... (f k1 d1 a)...)],
    where [k1 ... kN] are the keys of all bindings in [m]
    (in increasing order), and [d1 ... dN] are the associated data.

    @example {[
      let s0 = fromArray ~id:(module IntCmp) [|4,"4";1,"1";2,"2,"3""|];;
      reduce s0 [] (fun acc k v -> (k,v) acc ) = [4,"4";3,"3";2,"2";1,"1"];;
    ]}
	e* [every m p] checks if all the bindings of the map
    satisfy the predicate [p]. Order unspecified 	h* [some m p] checks if at least one binding of the map
    satisfy the predicate [p]. Order unspecified 	k* [size s]

    @example {[
      size (fromArray [2,"2"; 2,"1"; 3,"3"] ~id:(module IntCmp)) = 2 ;;
    ]}
&	* [toArray s]

    @example {[
      toArray (fromArray [2,"2"; 1,"1"; 3,"3"] ~id:(module IntCmp)) = [1,"1";2,"2";3,"3"]
    ]}

	.* In increasing order

    {b See} {!toArray}
2	* [fromArray kvs ~id]
    @example {[
      toArray (fromArray [2,"2"; 1,"1"; 3,"3"] ~id:(module IntCmp)) = [1,"1";2,"2";3,"3"]
    ]}
	* [keysToArray s]
    @example {[
      keysToArray (fromArray [2,"2"; 1,"1"; 3,"3"] ~id:(module IntCmp)) =
      [|1;2;3|];;
    ]}
(	* [valuesToArray s]
    @example {[
      valuesToArray (fromArray [2,"2"; 1,"1"; 3,"3"] ~id:(module IntCmp)) =
      [|"1";"2";"3"|];;
    ]}

	<* [minKey s]
    @return the minimum key, None if not exist
^3* {b See} {!minKey}	<* [maxKey s]
    @return the maximum key, None if not exist
4* {b See} {!maxKey} 6	H* [minimum s]
    @return the minimum key value pair, None if not exist
5* {b See} {!minimum} H	H* [maximum s]
    @return the maximum key value pair, None if not exist
Ӡ5* {b See} {!maximum}
Z	* [get s k]

    @example {[
      get (fromArray [2,"2"; 1,"1"; 3,"3"] ~id:(module IntCmp)) 2 =
      Some "2";;
      get (fromArray [2,"2"; 1,"1"; 3,"3"] ~id:(module IntCmp)) 2 =
      None;;
    ]}
堠	9* {b See} {!get}

    @return [undefined] when not found
l	`* [getWithDefault s k default]

   {b See} {!get}

    @return [default] when [k] is not found

	G* [getExn s k]

   {b See} {!getExn}

    {b raise} when [k] not exist
	J**************************************************************************$=$$$=$$@
  * [remove m x] when [x] is not in [m], [m] is returned reference unchanged.

    @example {[
      let s0 =  (fromArray [2,"2"; 1,"1"; 3,"3"] ~id:(module IntCmp));;

      let s1 = remove s0 1;;
      let s2 = remove s1 1;;
      s1 == s2 ;;
      keysToArray s1 = [|2;3|];;
    ]}

	* [removeMany s xs]

    Removing each of [xs] to [s], note unlike {!remove},
    the reference of return value might be changed even if none in [xs]
    exists [s]

  X* [set m x y ] returns a map containing the same bindings as
    [m], with a new binding of [x] to [y]. If [x] was already bound
    in [m], its previous binding disappears.

    @example {[
      let s0 =  (fromArray [2,"2"; 1,"1"; 3,"3"] ~id:(module IntCmp));;

      let s1 = set s0 2 "3";;

      valuesToArray s1 =  ["1";"3";"3"];;
    ]}

  o* [update m x f] returns a map containing the same bindings as
    [m], except for the binding of [x].
    Depending on the value of
    [y] where [y] is [f (get x m)], the binding of [x] is
    added, removed or updated. If [y] is [None], the binding is
    removed if it exists; otherwise, if [y] is [Some z] then [x]
    is associated to [z] in the resulting map.
v	* [mergeMany s xs]

    Adding each of [xs] to [s], note unlike {!add},
    the reference of return value might be changed even if all values in [xs]
    exist [s]
Ѡ	* [merge m1 m2 f] computes a map whose keys is a subset of keys of [m1]
    and of [m2]. The presence of each such binding, and the corresponding
    value, is determined with the function [f].
		Z* [keep m p] returns the map with all the bindings in [m]
    that satisfy predicate [p]. o	* [partition m p] returns a pair of maps [(m1, m2)], where
    [m1] contains all the bindings of [s] that satisfy the
    predicate [p], and [m2] is the map with all the bindings of
    [s] that do not satisfy [p].
Ơ
  P* [split x m] returns a tuple [(l r), data], where
      [l] is the map with all the bindings of [m] whose 'k
    is strictly less than [x];
      [r] is the map with all the bindings of [m] whose 'k
    is strictly greater than [x];
      [data] is [None] if [m] contains no binding for [x],
      or [Some v] if [m] binds [v] to [x].

  &* [map m f] returns a map with same domain as [m], where the
    associated value [a] of all bindings of [m] has been
    replaced by the result of the application of [f] to [a].
    The bindings are passed to [f] in increasing order
    with respect to the ordering over the type of the keys. 	g* [mapWithKey m f]

    The same as {!map} except that [f] is supplied with one more argument: the key
z	* [getData s0]

    {b Advanced usage only}

    @return the raw data (detached from comparator),
    but its type is still manifested, so that user can pass identity directly
    without boxing
	L* [getId s0]

    {b Advanced usage only}

    @return the identity of [s0]
	Y* [packIdData ~id ~data]

    {b Advanced usage only}

    @return the packed collection
ࠠ#*/*Ҡ	**
   {b raise} when invariant is not held
#*/*y@  \ 1../darwin/bsc.exe'-bs-cmi'-bs-cmj--no-keep-locs.-no-alias-deps5-bs-no-version-header8-bs-no-check-div-by-zero)-nostdlib4-bs-cross-module-opt--make-runtime--nopervasives'-unsafe"-w#+50+-warn-error!A%-open.Bs_stdlib_mini"-I)./runtime"-I&others$M$N	)/Users/hongbozhang/git/ocamlscript/jscomp	;/Users/hongbozhang/git/ocamlscript/jscomp/../jscomp/runtime	>/Users/hongbozhang/git/ocamlscript/jscomp/../jscomp/stdlib-406	:/Users/hongbozhang/git/ocamlscript/jscomp/../jscomp/others@0	v1n /AEF  8 $W$W$W$W$W$W$W$W$W@$V@@@"405`2Ɨp٠$v0	V4~f/pL#01dT[/+nsi#X@#2@#k0<2Vتz<X"Js09"!]cA@0	V4~f/pLA