Caml1999T031hءmS<)Rec_check*ocaml.text&_none_@@A ' Static checking of recursive declarations Some recursive definitions are meaningful {[ let rec factorial = function 0 -> 1 | n -> n * factorial (n - 1) let rec infinite_list = 0 :: infinite_list ]} but some other are meaningless {[ let rec x = x let rec x = x+1 |} Intuitively, a recursive definition makes sense when the body of the definition can be evaluated without fully knowing what the recursive name is yet. In the [factorial] example, the name [factorial] refers to a function, evaluating the function definition [function ...] can be done immediately and will not force a recursive call to [factorial] -- this will only happen later, when [factorial] is called with an argument. In the [infinite_list] example, we can evaluate [0 :: infinite_list] without knowing the full content of [infinite_list], but with just its address. This is a case of productive/guarded recursion. On the contrary, [let rec x = x] is unguarded recursion (the meaning is undetermined), and [let rec x = x+1] would need the value of [x] while evaluating its definition [x+1]. This file implements a static check to decide which definitions are known to be meaningful, and which may be meaningless. In the general case, we handle a set of mutually-recursive definitions {[ let rec x1 = e1 and x2 = e2 ... and xn = en ]} Our check (see function [is_valid_recursive_expression] is defined using two criteria: Usage of recursive variables: how does each of the [e1 .. en] use the recursive variables [x1 .. xn]? Static or dynamic size: for which of the [ei] can we compute the in-memory size of the value without evaluating [ei] (so that we can pre-allocate it, and thus know its final address before evaluation). The "static or dynamic size" is decided by the classify_* functions below. The "variable usage" question is decided by a static analysis looking very much like a type system. The idea is to assign "access modes" to variables, where an "access mode" [m] is defined as either m ::= Ignore (* the value is not used at all *) | Delay (* the value is not needed at definition time *) | Guard (* the value is stored under a data constructor *) | Return (* the value result is directly returned *) | Dereference (* full access and inspection of the value *) The access modes of an expression [e] are represented by a "context" [G], which is simply a mapping from variables (the variables used in [e]) to access modes. The core notion of the static check is a type-system-like judgment of the form [G |- e : m], which can be interpreted as meaning either of: - If we are allowed to use the variables of [e] at the modes in [G] (but not more), then it is safe to use [e] at the mode [m]. - If we want to use [e] at the mode [m], then its variables are used at the modes in [G]. In practice, for a given expression [e], our implementation takes the desired mode of use [m] as *input*, and returns a context [G] as *output*, which is (uniquely determined as) the most permissive choice of modes [G] for the variables of [e] such that [G |- e : m] holds. 3typing/rec_check.mlScHJ@@@@@@0@@@@@@%arrayH8@@M@A@A@@@@@@8@@@$boolE8@@%false^@@B@$true_@@H@@@A@@@@@I@A@$charB8@@@A@@@@@M@A@#exnG8@@AA@@@@@Q@@@5extension_constructorP8@@@A@@@@@U@@@%floatD8@@@A@@@@@Y@@@*floatarrayQ8@@@A@@@@@]@@@#intA8@@@A@@@@@a@A@%int32L8@@@A@@@@@e@@@%int64M8@@@A@@@@@i@@@&lazy_tN8@@O@A@A@Y@@@@@r@@@$listI8@@P@A"[]a@@@"::b@@@Q@@@ @@A@Y@@@@@@@@)nativeintK8@@@A@@@@@@@@&optionJ8@@S@A$Nonec@@@$Somed@@@@@A@Y@@@@@@@@&stringO8@@@A@@@@@@@@$unitF8@@"()`@@@@@A@@@@@@A@ .Assert_failure\ p@@@@Jm@@@@@@V@@A͠=ocaml.warn_on_literal_patternѐ@@0Division_by_zeroY @@@Aנ  @+End_of_fileX !@@@Aߠ@'FailureU )@%@@A蠰@0Invalid_argumentT 2@.@@A񠰠$#@-Match_failureR ;@:67@@\@@A21@ )Not_foundV I@@@A: 9 @-Out_of_memoryS Q@@@ABA@.Stack_overflowZ Y@@@AJI@.Sys_blocked_io[ a@@@AR"Q"@)Sys_errorW i@e@@A([+Z+@:Undefined_recursive_module] r@qmn@@c@@A6i9h9@ %bytesC8@@@A@@@@@=@@@&Stdlib@@Р(Asttypes(AsttypesBeLQCeLY@@ 0CBBCCCCC@A@@@@A0DCCDDDDD@C@@JeLL@@ @IР)Typedtree)TypedtreeYfZ_ZfZh@@ 0ZYYZZZZZ@@@@@A0[ZZ[[[[[@@@afZZ@@ @0`__`````@@@Р%Types%Typesqginrgis@@ 0rqqrrrrr@@@@@A0srrsssss@@@ygii@@ @0xwwxxxxx@@@,Illegal_exprAiuiu@ @@@Aiuu@@D@@@@@ @0@@@< {1 Static or dynamic size} kk@@@@@@0@* @@A("sdBmm@@8@@&Static@@mm@@F'Dynamic@@mm@@G@@A@@@@@m@@A@E@@@@@@m@@@@@@A@@@@1@ࠠ&is_refoo@@Ш@б@г~1value_description%Typesoo@@ @@@i0@VPJ@@@@г͠$booloo@@ @@@j@@@@@k@@@@l A@0 A@@@*@@@u@@@t@@s@@r!@@%paramঠ%Types(val_kind%p &p@,(val_kind%Types1value_description@@@$*value_kind@@@ @A,(val_type)type_expr@@@@@@A0typing/types.mlir3@3Dr3@3X@@t,'val_loc(Location!t@@@!@B@At33t33@@#v,.val_attributes*)Parsetree*attributes@@@"@C%@Au33u33@@1w,'val_uid89#Uid!t@@@#@D2@A*v33+v33@@>x@A.s33/s33@@BuĠ%Types(Val_primxq#yq1@8(Val_primK@@@1@)Primitive+description@@@%@A@AD@AK{4C4EL{4C4h@@@_zঠ)Primitive)prim_nameq4qG@,)prim_name)Primitive+description@@@&stringO@@@@@,*prim_arity#intA@@@@A @@4typing/primitive.mli^^@@K,*prim_alloc$boolE@@@@B@@ __ @@#L,0prim_native_name*"@@@@C @@`9=`9V@@-M,5prim_native_repr_args4$listI:+native_repr@@@@@@@D2@@)a*a@@?N,4prim_native_repr_resF @@@@E;@@2b3b@@HO@@6]y}7]y@@LJ,%makemutableqKqW@@qJqX@@U@@F@F@@l*prim_arityrZtrZ~@YArZ rZ@@_@@F@F@@@@q2rZ@@@@F@F@#@@@@@@@F@'@@@prZ@@;@@F@F@1@@ภ$true+s,s@8@@@N@@@AB@@A?@@@ @@ @@D@+D@$F@@>t?t@@ @@F@O@@ภ%falseItJt@8@@@@B@@AY@@@@@D@*\@@AQo@б@г7o@9@@@vhf@г&d@(@@@wm^@@ @@xo]@@@@YC@yr@@go@@@u@ࠠ1is_abstracted_argtxux@@Ш@б@ВгI)arg_labelxx%@@ @@@G0@@@@@q@@@p@@o@@H@@@@г&optionx3x9@гV*expressionx(x2@@ @@@H$@@@@@@J) @@@0 @@K.4@@г$boolx=xA@@ @@@L;@@@@@M>D@@@@NAG A@\ A@@@V@@@[@9@@@]@@@\@@Z&@@@Y@@X@@WX@@#@yMRyMS@@p@@F@h@Ġ$NoneyMUyMY@8mzw@@T@@@@AA@A@@p@@ @@d@@F@@@F@@@yMQyMZ@@#@F@@@ภyM^yMb@@@@@@D@D@@@*zch+zci@@;@@F@@Ġ$Some6zck7zco@8:@A@AA@AF@@@=zcp>zcq@@6@@F@@@@ @@>=@@F@@@F@@@KzcgLzcr@@$@F@@@ภVzcvWzc{@ @@@@3@@@T@@@V@@@U@@S@@@R@@Q@L@I@@@@г!"sd|}|}@@ @@@#Z$@@@*@@#['-@@@@#\*0 A@E A@@@?@@@#e@@@#d@@#c@@#b6@Aࠠ3classify_expression%+5+H@@@@%Ident#tblZ@@@%D@K7classify_value_bindings&@(Asttypes(rec_flag@@@%D@#w@KD@#x@$listIA-value_binding@@@%@@@%D@#y\D@#z@@#{@@#|@@#}E@#p@OBHPB_@@gL-classify_path'@hD@#~@$Path!t@@@%D@#XD@#@@#@@#E@#q@hi@@M@@@@@!e)u+Mv+N@@@vD@#D@#0yxxyyyyy@`l@c@N@@@@ఐ!e+W+X@@@O@@0@%@@@(exp_desc+Y+a@,(exp_desc@@@ /expression_desc@@@ @@ ,'exp_loc (Location!t@@@ @A @A4typing/typedtree.mliVZVn@@l,)exp_extras)exp_extra@@@ ʠ!t@@@ ˠ*attributes@@@ @@ @@@ @B,@A!os"o@@m,(exp_type:%Types)type_expr@@@ @C:@A/0@@n,'exp_envH#Env!t@@@ @DH@A=>@@o,.exp_attributesV(@@@ @EQ@AFG@@p@AJ7;K7U@@kqe@@_@@@#o@Ġ(Texp_let  @8(Texp_letp@@@ S@@@@ ޠԠ@@@ @@@ ߠ@@@ @CBA`@AtIKuI@@@wࠠ(rec_flag*,-@@@@@@#0/../////@@@@ࠠ"vb+:;@@@@@@#@@@#@ࠠ!e,KL@@@H@@@#@@@IR@@@@G@#$@@$@@@ࠠ#env6`a@@@)D@%0baabbbbb@A;@<@P5/@0@Q& @!@R@@@ఐK7classify_value_bindingsxy@O@@@M@C@B4@F@%@F@%@F@%@@ఐ_(rec_flag@$@@\)@@ఐ#env@@@6@@ఐk"vb@<@@gC@@1@@\D@@@@ఐȠ3classify_expression@@@@@@E@%@E@%0@Wa[@\@S@@@@ఐi#env  @@@i@@ఐ!e @k@@@@&@@@1@@D@%D@%y@Ġ*Texp_ident@8*Texp_ident@@@@ ٠#loc)Longident!t@@@ @@@ ڠ,1value_description@@@ @C@A`@AZ[@@@uࠠ$path-!%@@@@@@#0@@@@@'(@@-+@@G@#@@G@# @@(*)+@@*@@G@#@@@F.,@@@@G@#@@@@ఐ堐-classify_path;08<0E@@@@@@E@%@E@%0?>>?????@60@1@[T@@@@ఐ:#envP0FQ0I@԰@@b@@ఐK$path]0J^0N@@@@@&@@UD@#D@%"@Ġ)Texp_opentlrul{@8)Texp_openk@s0open_declaration@@@ Qy@@@ R@B_A`@A((()@@@|@l}l~@@@@J@#0@@@@ࠠ!e.ll@@@@@@#I@#@@@,l@@@@J@#@@@Ġ.Texp_letmodule@8.Texp_letmodule@&optionJ%Ident!t@@@ 8@@@ 7#loc&stringO@@@ ;@@@ :@@@ 9/module_presence@@@ <+module_expr@@@ =@@@ >@EWA`@A7&&8 ''&@@@@@@<9@@J@#@@J@#e@@@@865@@J@#@@J@#@@J@#u@@@@6@@J@#}@@@@7@@J@#@!e@@@G@#H@#@@@u!@@@@J@#@@@@@@@@I@#@Ġ-Texp_sequence12@8-Texp_sequence(@0@@@ 4@@@ @BOA`@A$$$$@@@7@EF@@A@@I@#@!ePQ@@@4@@@#T@@@@I@#@@@@@@@@H@#@Ġ1Texp_letexceptionde@81Texp_letexception[@c5extension_constructor@@@ ?i@@@ @@BXA`@A ''') '''b@@@l@z{@@@@H@#@!e@@@@@@%@@@@H@#@@@@@@@@G@#@@ఐ3classify_expression@{@@@@@E@%@E@%0@ @ @U@@@@ఐ#env@3@@@@ఐ%!e@@@F@% @@(@@aD@%#@Ġ.Texp_construct@8.Texp_construct@#loc!t@@@ @@@  7constructor_description@@@ @@@ @@@ @CHA`@AC + -D A @@@@@@&$@@G@#@@G@#0@p@@@ঠ(cstr_tag " *@,(cstr_tag7constructor_description@@@/constructor_tag@@@@E8,)cstr_name &stringO@@@@@ @A{TT{TT@@(,(cstr_res@@@@A@A|TT|TT@@),1cstr_existentials"$listI@@@@@@@B"@A}U%U)}U%UK@@*,)cstr_args2 @@@@@@@C0@A ~UhUl ~UhU@@+,*cstr_arity@#intA@@@@D<@AUUUU@@*,L,+cstr_constsL @@@@FF@A V0V4!V0VE@@4.,.cstr_nonconstsV@@@@GP@A*V~V+V~V@@>/,0cstr_generalized`$boolE@@@@H\@A6VV7VV@@J0,,cstr_privatel(Asttypes,private_flag@@@@Ij@ADWWEWW3@@X1,(cstr_loczC!t@@@@Jv@APWYW]QWYWr@@d2,/cstr_attributesA*attributes@@@@K@A\WsWw]WsW@@p3,,cstr_inlined&optionJ}0type_declaration@@@@@@@L@AnWWoWW@@4,(cstr_uidQ!t@@@@M@AyWWzWW@@5@A}UU~UV @@-Ġ,Cstr_unboxed - 9@8,Cstr_unboxed@@@@@@@AC@AXXXX@@@8@@  @@@@G@#@@@ ! :@@@@G@#G@#@Ġ":: = ?A8 p  @@R@ rB@AA@A @@ lࠠ!e2 >@@@@@@#@Ġ"[] A8 @@@@AA@A @@ @@A@ @@G@#@@G@# @@@ <&@@$@@G@#@@G@#@@@E @@@w@@G@#@@@@ఐ43classify_expression DL !D_@@@@4@#@E@%@E@%0 $ # # $ $ $ $ $@:5@6@ @V@@@@ఐ#env 5D` 6Dc@@@G@@ఐO!e BDd CDe@@@AF@% @@(@@D@%"@Ġ.Texp_construct Sfl Tfz@@ Xf{ Yf|@@@@G@$ @@G@$a@@ @@@G@$ f@@@e@@G@$ @@G@$ o@@@@@@@G@$ s@@s@@ภ&Static y z@8@@@g@@@@B@@A@@@@@D@%@Ġ+Texp_record  @8+Texp_record@@@@ W@AJA`@A!-!/!!@@8@@&fieldsj@%arrayH1label_description@@@ 7record_label_definition@@@ @@ @@@  !B!H !B!@@.representationk@5record_representation@@@ !!!!@@3extended_expressionl@@@@ @@@ (!!)!!@@@JA@@@@@ @@@ Aঠ&fields  @,HV@@@$J@@,/.@AA(@%,"!@BA@A7@4@  @@N@@G@$*0        @k@@@Ġ*Overridden  @8*OverriddenV@@@ h@#loc!t@@@ f@@@ e@@@ g@BA@B@Ao)*:*<p)*:*h@@@@ # $@@@@G@$1@@G@$01@ࠠ!e3 3 4@@@0@@@$2>@@@7 :@@@@G@$3C@@I@@J@G@$4H@@ D E@@@@G@$7@@G@$8@G@$6@@G@$5Y@.representation Z [@,@@@$@A,@@A@,@BA@A@Ġ.Record_unboxed i j@8.Record_unboxed D5record_representation@@@e@@@@b@A@BC@A :EVEX ;EVEp@@@ NǠ@  @@@@G@$?@@@@@@@G@$@@@@  @@@@G@$BG@$A@@@@@@@G@$C@@@@ఐ3classify_expression   @~@@@@@E@%@E@%0        @wq@r@ W@@@@ఐ#env  "@6@@@@ఐ!e # $@@@F@% @@(@@!@Ġ+Texp_record %+ %6@B@ %7 %8@@D@@G@$H@@@ @@=@@G@$I@@@@ภ&Static <D <J@j@@@D@%D@%@Ġ*Texp_apply LR L\@8*Texp_apply@@@@ )arg_label@@@ Y@@@ @@@ @@ @@@ @BDA`@AghC@@@ }ঠ(exp_desc !L_ "Lg@Ġ*Texp_ident )Lj *Lt@A@ .Lv /Lw@@@@G@$]0 0 / / 0 0 0 0 0@@@@@ 7Ly 8Lz@@HF@@G@$_@@G@$^ @ࠠ"vd4 GL| HL~@@@J@@@$`@@@% NL@@@@G@$a@@@ SL^ TL@@Q@@G@$cG@$b'@@ ]L ^L@@ba@@G@$f_f@@G@$h@@G@$g@G@$e@@G@$d>@@@~ rL@@@@G@$iC@@C@ఐ &is_ref  @@@@ @@E@% @@E@%@E@%0        @JD@E@ X@@@@ఐR"vd  @@@ @@F@%F@%F@%@@$ @@ |@@E@%F@%@ภ&Static  @7@@@D@%D@%,@Ġ*Texp_apply  @͠@  @@@@G@$s;@ࠠ$args5  @@@ؠ@@@$vՠ@@@$x@@@$w@@$u@@@$tW@@@' @@L@@G@$y\@@\@డ $List&exists  @@@!a@&$boolE@@@(@@(@$listI@@@(@@@(@@(@@(@(list.mli$8$8$8$d@@,Stdlib__Listc%$@@@@ @@E@)Z  @@E@)\@@E@)[@E@)YE@)9.@@E@);@E@):@+@@E@)8(@@E@)7@E@)6@E@)50 ; : : ; ; ; ; ;@rl@m@ WY@@@@ఐ ؠ1is_abstracted_arg L M@@@@ @@F@)T  @@F@)V@@F@)U@F@)S @@F@)R@F@)Q$@@ఐ$args l m@.@@gT@@F@)GF@)bF@)]9@@ @@@@E@)dF@)F?@ภ&Static  @ @@@D@)fD@%L@Ġ*Texp_apply   @@  @@@@G@$@@@@@G@$@@G@$@@G@$@G@$@@G@$"@@@@@@@G@$&@@&@@ภ'Dynamic $ +@8 C@@@AB@@A @@ @@@D@)jD@)h5@Ġ(Texp_for -3 -;@8(Texp_for@;!t@@@ )Parsetree'pattern@@@ @@@  @@@ .direction_flag@@@  @@@ @FQA`@Ag%%h%{%@@@ @-<-=@@+@@V@$@@@)@@V@$@@ @ !@@V@$@@@ &@@V@$@@@'@@V@$@@@ 0@@V@$@@@M@@@@V@$@@@Ġ-Texp_constantE>DF>Q@8-Texp_constant<@ (constant@@@ @AAA`@A@@@ Iv@W>RX>S@@@@V@$@@@@@@@V@$@@@@t @@@@U@$@Ġ(Texp_newlTZmTb@8(Texp_newc@ !t@@@ # F#loc!t@@@ %@@@ $1class_declaration@@@ &@CSA`@A%%%%@@@ @TcTd@@$@@U@$ @@@" @@U@$@@U@$ @@@@@U@$ @@@;@@ @@U@$ @@ @@@@ @@T@$ @Ġ,Texp_instvarekew@8,Texp_instvar@ ]!t@@@ ' d!t@@@ ( #loc@@@ *@@@ )@CTA`@A '%% (%&$@@@ @exey@@"@@T@$ P@@@ @@T@$ U@@ @@@T@$@@T@$ ^@@@9@@ R@@T@$ b@@ b@@@@ V@@S@$ f@Ġ*Texp_tuplezz@8*Texp_tuple@   @@@ @@@ @AGA`@A _ ` @@@ @zz@@ @@S@$@@S@$ @@@ @@ @@S@$ @@ @@4 @@ @@R@$ @Ġ*Texp_array,-@8*Texp_array #@  /@@@ @@@ @AMA`@A $`$b $`$@@@ 3@AB@@ @@@R@$@@R@$ @@@ @@ @@R@$ @@ @@b @@ @@Q@$ @Ġ,Texp_variantZ[@8,Texp_variant Q@ -%label@@@  c@@@ @@@ @BIA`@A  !  !,@@@ g@uv@@@@Q@$ @@@ y@@Q@$@@Q@$ @@@*@@ @@Q@$ @@ @@@@ @@P@$ @Ġ-Texp_setfield@8-Texp_setfield @ @@@  j#loc!t@@@ @@@  1label_description@@@  @@@ @DLA`@A $$ $$_@@@ @@@ @@P@$ 0@@@&$@@P@$@@P@$ 9@@@"@@P@$ >@@@ @@P@$ C@@@A@@ 7@@P@$ G@@ G@@@@ ;@@O@$ K@Ġ*Texp_while@8*Texp_while @ @@@  @@@ @BPA`@A C$$ D$%@@@ @@@ @@O@$ l@@@ @@O@$ q@@@ @@ e@@O@$ u@@ u@@@@ i@@N@$ y@Ġ/Texp_setinstvar@8/Texp_setinstvar @ !t@@@ + !t@@@ , #loc_@@@ .@@@ - )@@@ /@DUA`@A &%&' &%&e@@@ ,@:;@@&@@N@$ @@@$@@N@$ @@ @" @@N@$@@N@$ @@@ I@@N@$ @@@B@@ @@N@$ @@ @@j@@ @@M@$ @Ġ)Texp_packbc@8)Texp_pack Y@@@@ F@A\A`@A '' ''@@@ d@rs@@@@M@$ @@@@@ @@M@$ @@ @@ @@ @@L@$ @Ġ+Texp_object@8+Texp_object ~@ /class_structure@@@ C Q@@@ E@@@ D@B[A`@A  ''  ''@@@ @@@@@L@% @@@@@L@%@@L@% !@@@+@@ @@L@% %@@ %@@@@ @@K@% )@Ġ-Texp_function"/@8-Texp_function @ *@@@ Y@ACA`@A ') f@@8@@)arg_label_@ )arg_label@@@  -'> .'T@@ x%param`@ +!t@@@  ;'U <'e@@ y%casesa@  $case %value@@@ @@@ @@@  Sfl Tf@@ z'partialb@ 'partial@@@  `f af@@ {@CA@@@@@@@@(B |@01@@S@@K@%  @@@\@@ @@K@%  @@ @@4 @@ @@J@%  @Ġ)Texp_lazy,28-2A@8)Texp_lazy #@ +@@@ B@AZA`@A  ''  ''@@@ .@<2B=2C@@ 8@@J@% @@@@@ @@J@% @@ @@Y @@ @@I@% @Ġ0Texp_unreachableQDJRDZ@80Texp_unreachable H@@@@A`@A (( ((@@@ O@@  @@ @@I@% @@ @@r @@ @@H@% @Ġ:Texp_extension_constructorj[ak[{@8:Texp_extension_constructor a@ =#loc ~!t@@@ O@@@ N !t@@@ P@B^A`@A (( ((@@@ |@[|[}@@@@H@%@@H@% @@ @@@H@% @@@/@@ @@H@% @@ @@@@ @@G@% @@ภ&Static@-@@@ D@)nD@)l @Ġ*Texp_match@8*Texp_match @ @@@  ޠ +computation@@@ @@@ @@@ @@@ @CEA`@A 4OQ 5O@@@ ~@@@ @@N@%( ]@@@! @@N@%+@@N@%*@@N@%) j@@@@@N@%, o@@@;@@ c@@N@%- s@@ s@Ġ/Texp_ifthenelse  @8/Texp_ifthenelse @ @@@  @@@  g @@@ @@@ @CNA`@A t$$ u$$@@@ @()@@ $@@N@%4 @@@ )@@N@%5 @@ @ 1@@N@%7@@N@%6 @@@1@@ @@N@%8 @@ @@{@@ @@M@%9 @Ġ)Texp_sendKL@8)Texp_send B@ J@@@ ! N$meth@@@ "@BRA`@A %% %%@@@ S@ab@@ ]@@M@%> @@@@@M@%? @@@! @@ @@M@%@ @@ @@@@ @@L@%A @Ġ*Texp_field{|@8*Texp_field r@ z@@@  R#loc !t@@@ @@@  1label_description@@@ @CKA`@A ## #$@@@ @@@ @@L@%H @@@" @@L@%J@@L@%I @@@@@L@%K "@@@8@@ @@L@%L &@@ &@@@@ @@K@%M *@Ġ+Texp_assert@8+Texp_assert @ @@@ A@AYA`@A  'c'e  'c'@@@ @@@ @@K@%Q G@@@@@ ;@@K@%R K@@ K@@ @@ ?@@J@%S O@Ġ(Texp_try@8(Texp_try @ @@@  @@@ @@@ @@@ @BFA`@A P Q@@@ @@@@@J@%Z y@@@@@J@%]@@J@%\@@J@%[ @@@0@@ z@@J@%^ @@ @@V@@ ~@@I@%_ @Ġ-Texp_override& '@8-Texp_override @ !t@@@ 0  !t@@@ 3#loc {@@@ 5@@@ 4E@@@ 6@@ 2@@@ 1@BVA`@A &f&h &f&@@@I@WX@@.@@I@%i @@@,+@@I@%l(&@@I@%n@@I@%mj@@I@%o@I@%k@@I@%j @@@O@@ @@I@%p @@ @@!@@ @@H@%q @Ġ*Texp_letop",@8*Texp_letop {@ @@@ U@A]A`@A '' ((@@8@@$let_@*binding_op@@@ G '( '(@@$ands@d@@@ I@@@ H((((5@@%param@ !t@@@ J(6(<(6(L@@$body@Ϡ@@@ L@@@ K(M(S(M(e@@'partial@@@@ M((f(l)(f(~@@@]A@@@@@@@@@@-.@@X@@H@%uT@@@a@@H@@H@%vX@@X@@$ @@L@@G@%w\@@ภ'Dynamic2:2A@6@@@D@)rD@)pi@@A+Q@@ 0@k@@@@A A@D@#D@#0@@@@@AA@@@@;0@@@@@+-@@@@@@@@#@@#@D@#0@h@@@@(rec_flag5B` Bh@@@0@@@@@@#env6-Bi.Bl@@@CD@D@;021122222@ @@N\@@@@@(bindings7CBmDBu@@@ D@<0D@;0GFFGGGGG@'@@c]@@@@డ#&ignoreY Z @@!a@$unitF@@@f@@e'%ignoreAA @@@*stdlib.mliiiii@@&Stdlibv@@@FE@;@@E@;@E@;0xwwxxxxx@2B8@9@^@@@@ఐn(rec_flag   @T@@\@@4@@@@D@;E@;@@ࠠ'old_env8"*"1@@@ID@;0@'@@@ఐ#env"4"7@`@@} @@"&@@@ࠠ1add_value_binding9;C;T@@@@ϠF@;@@@<E@;@@@@;E@;E@;@@;E@;@@;E@;0@Y<6@7@_@@@@#env;;U;X@@@$0@0;?Yf@@@@@@"vb<;Y;[@@@+0@ :@@a@@@@ఐ"vb^j ^l@?@@!b@@A0        @#@@@&vb_pat^m^s@,&vb_pat@@@ 'pattern@@@ @@ ,'vb_expr @@@ @A@Ax::y::@@,-vb_attributesc@@@ @B@A::::@@',&vb_loc!t@@@ @C@A:::;@@3@A::::@@7;/@@)@@@;9@(pat_descJ^tK^|@,(pat_descH,pattern_data!a@ 0@@@ a@@ ,'pat_loc !t@@@ X@A @Aqq@@ZU,)pat_extra&h)pat_extra@@@ [!t@@@ \@@@ ]@@ Z@@@ Y@B'@Arr0@@xV,(pat_type7)type_expr@@@ ^@C3@As15s1O@@W,'pat_envC!t@@@ _@D?@AtPTtPc@@X,.pat_attributesO@@@ `@EH@Audhud@@Y@App@@T^@@,pattern_desc@q@;@;@@@;F@;@Ġ(Tpat_var@8(Tpat_var@@@ n@@@ m@!t@@@ o#loc@@@ q@@@ p@B@ALAA4N  5N  @@@_ࠠ"id=@@@ @@@;@ࠠ$_loc>@@@&$@@@;@@@;@@@A@@Z@@H@;@@H@;@ @@@@ࠠ$size?@@@G@;0@60@1@5c+%@&@7d@@@ఐ?3classify_expression+,@ @@@?@.$@G@;@G@;@@ఐ'old_env<=@i@@$@@ఐ["vbKL@C@@3@'vb_exprRS@4 @@QH@;<@@-@@J=@@Y@@డ%Ident#add%Identhi@@z!t@@@9@!a@8k@ @@@9 @@@9 @@9 @@9 @@9 @0typing/ident.mliE  E  @@V @@@@@F@;@@@@F@;@@F@;@F@;@F@;@F@;0@@@e@@@@ఐ"id@@@A@@G@<G@<G@<@@ఐ$size@"@@%@@ఐ렐#env@Ѱ@@ 2@@d@@ 3@t@@ E@;@@ @@,@@H@;@@H@;@ @@@ఐ#envYc@@@)E@<E@< @@A^d@@,E@;0@@@@@AA@(E@;0@@@@@A A@@6.@@<0@@@@@@డ$List)fold_leftnrn@@@!a@'@!b@' @@(I@@(H@ @  @@@(G@@(F@@(E@@(D@  @@ [@@@@D@<@D@D@@@@_C@#i@@:|}}B@@C@N " {1 Usage of recursive variables} I$H$HJ$H$o@@@@@@0HGGHHHHH@@@@@#a@@@#`@@#_@@lJ@@$ModeWCa$q$xb$q$|@@БA(!tCDo %@%Gp %@%H@@8@@&IgnoreD@@y %K%Oz %K%W@)ocaml.doc [Ignore] is for subexpressions that are not used at all during the evaluation of the whole program. This is the mode of a variable in an expression in which it does not occur.  %X%\%& @@@@@@@i%DelayE@@&"&&&"&-@ A [Delay] context can be fully evaluated without evaluating its argument , which will only be needed at a later point of program execution. For example, [fun x -> ?] or [lazy ?] are [Delay] contexts. &.&2&'@@@@@@@j%GuardF@@''''@.  A [Guard] context returns the value as a member of a data structure, for example a variant constructor or record. The value can safely be defined mutually-recursively with their context, for example in [let rec li = 1 :: li]. When these subexpressions participate in a cyclic definition, this definition is productive/guarded. The [Guard] mode is also used when a value is not dereferenced, it is returned by a sub-expression, but the result of this sub-expression is discarded instead of being returned. For example, the subterm [?] is in a [Guard] context in [let _ = ? in e] and in [?; e]. When these subexpressions participate in a cyclic definition, they cannot create a self-loop. ''"$*6*<@@@@@@@k&ReturnG@@&*>*B&*>*J@D  A [Return] context returns its value without further inspection. This value cannot be defined mutually-recursively with its context, as there is a risk of self-loop: in [let rec x = y and y = x], the two definitions use a single variable in [Return] context. '*K*O*+++p@@@@@@@l+DereferenceH@@,+r+v,+r+@Z A [Dereference] context consumes, inspects and uses the value in arbitrary ways. Such a value must be fully defined at the point of usage, it cannot be defined mutually-recursively with its context. -++/,,e@@@@@@@m@@A@@@@@ %@%B@j For an expression in a program, its "usage mode" represents static information about how the value produced by the expression will be used by the context around it. $$ %%?@@@@@@@A@h@ %K%Q@@@@oo&"&(m@@@@pm__'']@@@@`]OO &*>*DM@@@@PM??,+r+x=@@@@@=@A@/-@/?@0@@@@@1,g,m1,g,r@@@@@@<@@@@<@@@<@@<@@<0,++,,,,,@@@@%equalI@б@г!t@1,g,|A1,g,}@@!@@@<@@б@г!!tN1,g,O1,g,@@)@@@<$@@г)$boolZ1,g,[1,g,@@1@@@<0@@@@@<3@@@#@@<6& @@JIA@@@H@@@<@G@@@<F@@@<@@<@@<E@డE!={1,g,v|1,g,y@@!a@@$boolE@@@'@@&@@%&%equalBA$@@@@$y%y@@#Q@б@г3b@@@@<r\@б@г;\@@@@<zV@гV@@@@<P@@ @@<O@@@@<N@1,g,u1,g,@@@QE@<@@1,g,i@@@@ࠠ$rankJ8-H-N8-H-R@@@@g@@@=E.^.lE.^.n@@!a@@4@@@6@@5@@4-%greaterequalBAV@@@@V..W.b@@UV@@@@@E@=>E@=,@@@E@=+@E@=*@E@=)0@5A_@8@r@@@@ఐ$rankE.^.eE.^.i@h@@@@@F@=80@@F@=7@F@=6@@ఐs!mE.^.jE.^.k@Y@@(@@@@1)@@ఐC$rank E.^.o E.^.s@@@@?@@F@=EU@@F@=D@F@=C@@@ఐ"m'E.^.tE.^.v@J@@M@@@@XG@=KP@@A@@@@E@=PF@=4V@ఐ!m1E.^.|2E.^.}@@@`@ఐ"m'<E.^.@g@@j@?E.^.b@@E@='n@@AA@E@=!0BAABBBBB@@@@@AA@@@@=T0FEEFFFFF@@@@@@@Ϡ@ࠠ'composeQVO00WO00@@@@@@@=lE@=V@@@@=rE@=\@@@=E@=]@@=^E@=W@@=XE@=U0mllmmmmm@@ @p@@@@"m'S~O00O00@@@$0~}}~~~~~@0O00 V11:@@@@@@!mTO00O00@@@.0@ :@@t@@@@ఐ*"m'O00#O00%@@@J0@ D@@u@@@ఐ&!mO00'O00(@ @@P@@@@]U@@=f@Ġ&IgnoreP0.04P0.0:@@@@@p@=h0@'@@@@P0.0<P0.0=@@pE@=d@=i @@@@@I@=m@@@@P0.0@P0.0A@@@=n@Ġ&IgnoreP0.0CP0.0I@@@@@@=o$@@@@@I@=s)@@)@@. @@@H@=t.@@ภ&IgnoreP0.0MP0.0S@@@@E@=9@Ġ+DereferenceQ0T0ZQ0T0e@@@@@@=vK@@Q0T0gQ0T0h@@@=wR@@ @@ @H@={W@@W@@ภ+Dereference+Q0T0l,Q0T0w@@@@E@=E@=d@Ġ%Delay?R0x0~@R0x0@:@@@@@=}v@@GR0x0HR0x0@@@=~}@@ @@ @H@=@@@@ภ%DelayVR0x0WR0x0@Q@@@E@=E@=@Ġ%GuardjS00kS00@N@@@@@=@Ġ&ReturnvS00wS00@C@@@@@=@@@@@H@=@@@@ภ%GuardS00S00@j@@@ E@=E@=@Ġ%GuardT00T00@~@@@@@@=0@@@@Ġ+DereferenceT00T00@c@@@@J@=@Ġ%GuardT00T00@@@@@ @@@@ @Ġ%DelayT00T00@@@@@&@@T00T00@@)@!mUT00T00@T00T00@@!2@@8@@8&@H@=7@@7@@ఐ!mT00T00@@@@=@@v@@|E@=E@=0@C# @@@Ġ&ReturnU00U00@@@@@@=^@Ġ&ReturnU00U00@@@@@@=j@@@@@H@=o@@o@@ภ&ReturnU00U01@@@@E@=E@=|@Ġ&Return(V11 )V11@@@@@@=@Ġ+Dereference:V11;V11@@@@@@=@Ġ%GuardEV11!FV11&@)@@@@ @@@@ @Ġ%DelayOV11)PV11.@J@@@@@@SV11TV11/@@@!mVYV113ZV114@\V11]V115@@!@@7@@7&@H@=@@@@ఐ!mjV119@@@@=@@w@@E@=E@=0rqqrrrrr@" @@@@AxO00@@E@=a@@AA@E@=[0{zz{{{{{@@@@@AA@@% @@>0~~@@@@@@@@A@W@ @(@<6@7@s@@0@!@@@$q$W1;1>@K@@$q$q@@NA($modeXEY1@1EY1@1I@@8@@&IgnoreY@@Y1@1UY1@1[@@z%DelayZ@@Y1@1\Y1@1c@@{%Guard[@@Y1@1dY1@1k@@|&Return\@@Y1@1lY1@1t@@}+Dereference]@@Y1@1uY1@1@@~@@A|!t@@@>-@@@@Y1@1@ @@A@y@8865@@@@8@44Y1@1^2@@@@5@11Y1@1f/@@@@2@..Y1@1n,@@@@/@++Y1@1w)@@@@,@@Aг($Mode*Y1@1LY1@1R@@10@@A@4@N@@@@@~*xw8@@@A~@@F@>/F@>@@@@C@@@A@@@@D@@DN@0@@@#EnvtF*[11+[11@@Б!MG;66<66@@гР#Map$MakeK66L66@@ 0LKKLLLLL@J@@@#Ord+Stdlib__Map+OrderedType#key@8@@@A!t@@@@@@@@'map.mlig78g78*@@@@oA@!t@8!a@@@A@A+Stdlib__Map$Make/@@@I@B@@@F ; ?F ; J@@@@0DA@%empty"!a@@@@@@@/I  0I  @@BE@(is_empty@!a@@@@@@$boolE@@@@@@?@HL  IL  @@[F@#mem@`@@@?@3!a@?@@@?@@@?@@?@@?@eO  fO  $@@xG@#add@@@@?@!a@?@U @@@?Y @@@?@@?@@?@@?@S  S  @@H@&update@;@@@?@@&optionJ!a@?@@@?  @@@?@@?@@@@?@@@?@@?@@?@@?@\dh\d@@I@)singleton@g@@@?@!a@?@@@?@@?@@?@ii9@@J@&remove@@@@?@!a@?@@@?@@@?@@?@@?@oo@@K@%merge@@@@@?@`!a@?@@@?@k!b@?@@@?t!c@?@@@?@@?@@?@@?@@@@?@@@@?@@@?@@?@@?@@?@"v#xb@@5L@%union@@@@@?@!a@?@ @@@?@@?@@?@@?@@@@?@!@@@?%@@@?@@?@@?@@?@O48P4y@@bM@'compare@@!a@?@#intA@@@?@@?@@?@D@@@?@J@@@?@@@?@@?@@?@@?@xy@@N@%equal@@!a@?@I@@@?@@?@@?@k@@@?@q@@@?Y@@@?@@?@@?@@?@X\X@@O@$iter@@Y@@@?@!a@?$unitF@@@?@@?@@?@@@@? @@@?@@?@@?@@@P@$fold@@@@@?@!a@?@!b@?@@?@@?@@?@@@@?@  @@?@@?@@?@ @@Q@'for_all@@@@@?@!a@?@@@?@@?@@?@ߠ @@@?@@@?@@?@@?@  @@ R@&exists@@@@@?@!a@?@@@?@@?@@?@ @@@?@@@?@@?@@?@12@@DS@&filter@@@@@?@!a@?@@@?@@?@@?@' @@@?+@@@?@@?@@?@U@DV@s@@hT@*filter_map@@@@@?~@!a@?z֠!b@?x@@@?}@@?|@@?{@P@@@?yT@@@?w@@?v@@?u@~@@U@)partition@@8@@@?t@!a@?nR@@@?s@@?r@@?q@t @@@?p{@@@?m@@@?o@@?l@@?k@@?j@!!!!@@V@(cardinal@!a@?i@@@?h[@@@?g@@?f@"""# @@W@(bindings@!a@?d@@@?e$listI@@@?c@@?b@@@?a@@?`@#]#a#]#@@X@+min_binding@Ǡ!a@?^@@@?_@@@?] @@?\@@?[@$$$$@@Y@/min_binding_opt@!a@?Y@@@?Zz@@@?X@@?W@@@?V@@?U@%%%%@@.Z@+max_binding@!a@?S@@@?T@@@?R @@?Q@@?P@5&l&p6&l&@@H[@/max_binding_opt@!a@?N@@@?O@@@?M@@?L@@@?K@@?J@T''U''L@@g\@&choose@9!a@?H@@@?I@@@?G @@?F@@?E@n''o''@@]@*choose_opt@S!a@?C@@@?D5@@@?B@@?A@@@?@@@??@((()@@^@%split@E@@@?>@w!a@?:@@@?= @@@?9@@@?;@@@?<@@?8@@?7@@?6@ )) )* @@_@$find@o@@@?5@!a@?3@@@?4@@?2@@?1@++++@@`@(find_opt@@@@?0@!a@?.@@@?/R @@@?-@@?,@@?+@,7,;,7,a@@a@*find_first@@@@@?*@@@?)@@?(@ܠ!a@?&@@@?'@@@?% @@?$@@?#@@?"@ -- --6@@$b@.find_first_opt@@@@@?!@@@? @@?@!a@?@@@?@@@?@@?@@@?@@?@@?@;-//!<-//_@@Nc@)find_last@@@@@? @@@?@@?@+!a@?@@@? @@@? @@?@@?@@?@`40W0[a40W0@@sd@-find_last_opt@@@@@?.@@@? @@? @P!a@? @@@? 2@@@? @@?@@@?@@?@@?@;1v1z;1v1@@e@#map@@!a@?!b@?@@?@{ @@@? @@@?@@>@@>@C22C22@@f@$mapi@@c@@@>@!a@>!b@>@@>@@>@ @@@> @@@>@@>@@>@J44J44I@@g@&to_seq@!a@>@@@>&Stdlib#Seq!t@@@>@@>@@@>@@>@P44P45#@@h@*to_rev_seq@נ!a@>@@@>%#Seq!t@@@>@@>@@@>@@>@T5y5}T5y5@@'i@+to_seq_from@@@@>@!a@>@@@>L#Seq!t@@@>@@>@@@>@@>@@>@;X56<X562@@Nj@'add_seq@f#Seq!t@@@>!a@>@@>@@@>@5 @@@>9@@@>@@>@@>@c]66d]66@@vk@&of_seq@#Seq!t%@@@>ؠ!a@>@@>@@@>[@@@>@@>@a7M7Qa7M7v@@l@@@@@Р%Ident$66$66@@^8@@@A@@@>@@@@RYYRY_@@@@ @A@Ӡ!T_@@TaiTa@,Identifiables@@%equal`@!t@@@>@@@@>$boolE@@@>@@>@@>@@/Stdlib__Hashtbl`@$hasha@@@@>#intA@@@>@@>@1@a@&outputb@&Stdlib+out_channel@@@>@76@@@>$unitF@@@>@@>@@>@M@JC@%printc@&Format)formatter@@@>@RQ@@@>@@@>@@>@@>@f@cD@Ӡ#Setd@@nku@@Ӡ#Mape@@vsv@@Ӡ#Tblf@@~{w@@0print_with_scopeg@&Stdlib&Format)formatter@@@>@@@@>$unitF@@@>@@>@@>@,[((-[(\@@ B@-create_scopedh%scope#intA@@@>@&stringO@@@>%@@@>@@>@@>@J`K`@@ C@,create_locali@@@@>7@@@>@@>@\a]a%@@ D@1create_persistentj@&@@@>I@@@>@@>@nb&&ob&H@@ E@-create_predefk@8@@@>[@@@>@@>@cIIcIg@@!F@&renamel@i@@@>l@@@>@@>@eiiei{@@!G@$namem@z@@@>^@@@>@@>@j77j7L@@!1H@+unique_namen@@@@>p@@@>@@>@kMMkMi@@!CI@4unique_toplevel_nameo@@@@>@@@>@@>@ljjlj@@!UJ@*persistentp@@@@>$boolE@@@>@@>@mm@@!iK@$sameq@@@@>@@@@>@@@>@@>@@>@nn@@!L@'comparer@@@@>@@@@>@@@>@@>@@>@ u u@@!M@&globals@@@@>B@@@>@@>@ww @@!N@)is_predeft@@@@>T@@@>@@>@-x  .x  '@@!O@%scopeu@@@@>@@@>@@>@?z ) )@z ) <@@!P@,lowest_scopev@@@>@L| > >M| > T@@!Q@-highest_scopew@@@>@Y} U UZ} U k@@!R@&reinitx@>@@@>B@@@>@@>@l m mm m @@!S@!y8!a@>@A@A " @@>ҠG@B@@@A  A  @@@@"TA@%emptyz@>@@@>@@ @#add{@t@@@>@@>@@@@> @@@>~@@>}@@>|@@>{@@@)find_same|@@@@>z@)A@>x@@@>y@@>w@@>v@>@;@)find_name}@}@@@>u@;!a@>s@@@>t@@@>r @@>q@@>p@@>o@G * *G * S@@"aX@(find_all~@@@@>n@[!a@>l@@@>m$listI@@@>k@@>j@@@>i@@>h@@>g@H T TH T @@"Y@)fold_name@@@@@>f@!a@>b@!b@>`@@>e@@>d@@>c@@@@>a@  @@>_@@>^@@>]@I  I  @@"Z@(fold_all@@ @@@>\@!a@>X@!b@>V@@>[@@>Z@@>Y@@@@>W@  @@>U@@>T@@>S@BJ  CJ  @@"[@$iter@@-@@@>R@!a@>N2@@@>Q@@>P@@>O@ՠ @@@>M<@@@>L@@>K@@>J@fK  gK  &@@"\@&remove@O@@@>I@!a@>G@@@>H@@@>F@@>E@@>D@L ' 'L ' H@@#]@2make_key_generator@g@@@>C@q@@@>Bt@@@>A@@>@@@>?@P i iP i @@#'^@@@S@@G@F@E@@@@(+66@H8@@@A@@@@A&@@@@@@@A@H8@A@ALР@@@A%@@@@@A@@@@A$@@@@ @@@A#@@@A"@@A!@@@@3@@@A @@@@A@@@A@@A@@A@@@@@@@A@@2@@@A6@@@A@@A@@A@@A@@@@(@@@A@@@@@A@@@A@@A@Q@@@AU@@@A@@A@@A@@A @@@@G@@@A @d@@@A @@A @@A @@|@{@V@@@A@sz@@@Aw~@@@A@@A@@A@v@s@r@@k@@@A@qp@@@A@lk@@@Agf@@@A@@@@@@@@@@@@@@@{@@@@v@@@@@@@@@@@@@@b@_@^@@@@@@@]@_Yb@@@@@@@@@@@@@@h@@@@@n@@@@Šr@@@@@@@@@@@@@@X@U@T@@S@UO@@@@@@@@@@@ؠ]@@@@@ޠc@@@@L@@@@@@@@@@@@@@K@H@G@@F@HB@@@@@@@@@@@P@@@@@V@@@@A@@@@@@@@@@@@@@@@=@<@@@@@@@;7@@@@@@@@@@@C@@@@4@@@@@@@@@@@3@0@/@@ @@@@@.@**@@@@@@@@@@+5@@@@@22@@@@@@@@@@&@#@"@@!@@@@@!@@@@@@@@@@@C)@@@@@@@@@@@@@@@@@@@:@@@@@@@@@@@@@@@@\@@@@@@@@@@@@@@@@ @ @@S@@@@@ @@@@@@@@@@@u@@@@y@@@@@@@@@@@@@@@m@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@͠@@@@۠@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@Ơ@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@.@@@@@@@@@@@@@@@@@@?@@@@1@@@@@@@@@@@~@@@}@@@@<@@@@|@Y@@@@{`@@@@x@@@@yj@@@@z@@@w@@@v@@@u@@@@\@@@@t@y@@@@s@@@r@@@q@@@@k@@@@p@@@@@o@@@@n@@@m@@@l@@@~@@@@@@k}@@@@j@@@i@|@@@@h@@@@g@@@f@@@e@@@d@x@u@t@@@@@@cs@@@@b@@@a@r@@@@`n@@@@_}@@@^@@@@]@@@\@@@[@m@j@i@@@@@@Zh@@@@Y@@@X@ڠg@@@@W@@@@Vo@@@U@@@T@@@S@c@`@_@@@@@@R^@@@@Q@@@P@]@@@@OY@@@@Nh@@@M@@@@L@@@K@@@J@X@U@T@@SO@@@I@X@@@@HX@@@@G@@@F@@@E@K@H@G@@@@@@D@FB@@@C@@@B@%K@@@@A)K@@@@@@@@?@@@>@>@;@:@39@@@@=521'@@@@<F@@@;@@@@:@@@9@0@-@,@J+@@@@8L'&>@@@@78@@@6@@@@5@@@4@%@"@!@I@@@@3@f @@@@2hZ@@@@1-@@@0@@@@/@@@.@@@-@@@@{m@@@@,@@@+@@@@*@@@@@)@@@@(@@@'@@@&@@ @ @  @@@@%@@@$@@@@# @@@@"@@@!@@@@ @@+66@@ A(!tI+66+66@@8@@@A !t!t@@@B.@@@B0@@@@,66,67@ 8 A "t" maps each rec-bound variable to an access status ,66,66@@@@@@@@@,5@@@Aг!M!,(66@г"$Mode$,166,266@@+0,0,/,/,0,0,0,0,0@  @  A@A@@@@@@@@@_^@>=@$#@  @@@@@@~@_^@TS@A@@21@@@@@@@@@@ih@PO@32@#"@ @@@@@@@,8@@@A@@J@B1J@A'@@@@@@v@@ed@@@cf@@@@0,,,,,,,,@d@@@ࠠ%equal9,77 ,77@@@@ y >ZJ@@@EJ@E@@@E@ @@@E @@@E@@E@@EJ@E0,,,,,,,,@@@@డ %equal!M,77,77@@@ @  @@@At@@As@@Ar@2 @@@Aq@8 @@@Ap @@@Ao@@An@@Am@@Al@ @ ߰@@@@?@A @@J@E@J@E@J@E@KI@@J@E@QO@@J@E @@J@E@J@E@J@E@J@EB@@డ%equal$Mode-77-77$@@c@@@>!@h@@@> @@@>@@>@@>@@E@@@q@@K@E@v@@K@E@@K@E@K@E@K@Em@@`@@n@@-077 @@!@q@ࠠ$find:-=7&7,->7&70@@@@!t@@@EJ@E@[@@@EJ@E@@@EJ@E@@EJ@E@@EJ@E0-Y-X-X-Y-Y-Y-Y-Y@@@-uA@@@@"id<@-j7&72-k7&74@@&@@@E0-l-k-k-l-l-l-l-l@7-s7&7(-t7J7x@@@@  @г4%Ident6-7&76-7&7=@@=@@@E@@-7&71-7&7>@@@D@@@#tbl=@-7&7@-7&7C@@D@@@E0--------@+90@3@-C@@@  @ гP!t-7&7E-7&7F@@X@@@E@@-7&7?-7&7G@@@_@@డ$find!M-7J7R-7J7X@@g@@@A@ @@@A @@A@@A@ @ @@@ @@J@E@+J@EJ@E@@J@E@J@E@J@E0--------@FTK@N@-D@@@@ఐ"id-7J7Y-7J7[@S@@-@@K@EK@E@@ఐn#tbl-7J7\-7J7_@ @@@@K@E&@@F@@,'@Ġ)Not_found. 7J7e.7J7n@@@@@-a@@M@E5@@ภ&Ignore.7J7r@8r@@@>:@@@@E@@At@@q@@@J@ED@@.#7J7N@@IJ@EG@@AwA@J@E0.%.$.$.%.%.%.%.%@@@@@AA@@@@F0.).(.(.).).).).)@@@@@@@Ҡ@ࠠ%empty>.97z7.:7z7@@@@@F @@@FJ@F0.A.@.@.A.A.A.A.A@ @@.]B@@@డ%empty!M.R7z7.S7z7@@@@A*@@@@@@.[7z7| @@ @@ࠠ$join?.h77.i77@@@@z@@@FJ@F @@@@FJ@F@@@FbJ@F@@FJ@F @@F J@F 0........@BRL@M@.E@@@@!xA@.77.77@@$@@@F0........@5.77.818:@@@@  @г2!t.77.77@@:@@@F@@.77.77@@@A@@@!yB@.77.77@@C@@@F0........@*8/@2@.G@@@  @ гO!t.77.77@@W@@@F@@.77.77@@@^@@డ$fold!M.77.77@@@(@@@A@ @  @@A@@A@@A@J @@@A@  @@A@@A~@@A}@ @ @@@@<@@J@F)@!t@@J@FXJ@F%@J@F#@J@F(@J@F'@J@F&@h@@J@F$@  @J@F"@J@F!@J@F 0////////@Yg^@a@/2H@@@@@"idC@/*77/+77@@!t@@@FL@  @ г %Ident />77/?77@@@@@FF*@@/E77/F77@@@@@M@FIM@FH3@@@!vD@/V77/W77@@Q@@@FY0/X/W/W/X/X/X/X/X@C;2@5@/tI@@@  @ г]$Mode_/k77/l77@@f@@@FV@@/r77/s77@@@m@@@#tblE@/~77/77@@@@@Fc0////////@)7.@1@/J@@@  @ г !t/77/77@@@@@F`@@/77/77@@@@@@ࠠ"v'F/77/77@@@R@@@F{L@Fg0////////@+90@3@/K@@@ఐ}$find/77/77@v@@@y@@L@Fm@r@@L@Flo@@L@Fk@L@Fj@L@Fi@@ఐ"id/77/78@y@@@@M@F}M@FM@F1@@ఐn#tbl/78/78@;@@@@M@F|M@FM@FE@@9 @@IF@@/77 @@డ#add!M08 808 8@@B@@@A8@-@b2@@@A7f6@@@A6@@A5@@A4@@A3@)@&@@@T@@K@F@@@@FK@F@y @@K@F}@@K@F@K@F@K@F@K@F00)0(0(0)0)0)0)0)@@@0EL@@@@ఐ"id0:8 80;8 8@߰@@{@@L@FL@F@@డ$join$Mode0Q8 80R8 8%@@@@@>'@@@>&@@>%@@  @@@@@L@F@@L@F@L@F7@@ఐ!v0m8 8&0n8 8'@@@WM@FM@FM@FJ@@ఐ۠"v'08 8(08 8*@T@@dW@@08 808 8+@@Z@@ఐ#tbl08 8,08 8/@@@@@L@Fj@@@@}@@J@Fo@ @@J@Ff@@AA@@$J@FRJ@FQ@K@FK@F000000000@$@@@@A7A@@@@K@F@K@FK@F000000000@T@@@@A07708 80@@@@@K@F<@@@K@F;@K@F:@K@F9K@F000000000@@@@@ఐ:!x0818708188@@@[@@K@F@@ఐ!!y08189=@>@@`@@J@G@@B@@`J@F#@@A EA@mJ@F000000000@#@@@@A6IA@@ys@@G000000000@P@@@@N@NM@e@ࠠ)join_listG08<8B08<8K@@@@@@@GCJ@G@@@G,J@G@@@GDJ@G@@GJ@G01 111 1 1 1 1 @@@1%F@@@@"liI18<8L18<8N@@@!011111111@-1!8<8>1"8<8m@@@@@డ/$List)fold_left1/8<8Q108<8_@,@@@@/J@G@9@J@G@J@G@@&@@@J@G @J@G@J@G@J@G01?1>1>1?1?1?1?1?@&2I@)@1[N@@@@ఐ蠐$join1P8<8`1Q8<8d@D@@@@@K@G?@@@K@G>@@K@G=@K@G<@K@G;@@ఐ1%empty1j8<8e1k8<8j@@@ j@k@GGJ@GL@@J@GK5@@ఐk"li18<8k`@>a@@A@@Ub@@}J@GD@@AmeA@@@@GS011111111@l@@@@j@ji@@ࠠ'composeJ18o8u18o8|@@@@@@@GJ@GU@@@@GJ@Gg@@@GJ@G[@@@GJ@Ge@@@GxJ@G\@@G]J@GV@@GWJ@GT011111111@@@1M@@@@!mL18o8}18o8~@@@0011111111@<18o8q188@@@@@@#envM18o818o8@@@:011111111@ F@@1P@@@@డ#map!M188188@@@  @@B @N @@@BR @@@B@@B@@B@ @ @@@@[P@J@Gh@]`@@J@GfaY@@J@Gd@J@Gc@J@Gb02 2 2 2 2 2 2 2 @1=m@4@2)Q@@@@డ'compose$Mode2#882$88@@v@@@>,@{@@@>+~@@@>*@@>)@@>(@@@@@@@L@G@@@L@G@@L@G@L@G@L@G1@@ఐ!m2K882L88@k@@>@@2O882P88@@@@@K@G@@K@G@K@GI@@ఐ#env2c88@R@@U@@v@@J@G`X@@AA@J@GZ02h2g2g2h2h2h2h2h@@@@@AA@@@@G02l2k2k2l2l2l2l2l@@@@@@@@ࠠ&singleN2|882}88@@@@@@@GJ@G@M@GJ@G@@@GJ@G@@GJ@G@@GJ@G022222222@@@2O@@@@"idP288288@@@#022222222@/288288@@@@@@$modeQ288288@@@-022222222@ 9@@2S@@@@డ#add!M288288@Ȱ@@@ @@J@G@E@*J@@J@G.N@@J@G@J@G@J@G@J@G022222222@%1T@(@2T@@@@ఐL"id288288@2@@k@@ఐF$mode288288@@@o@@ఐ̠%empty388[@\@@\~K@G@@K@G0@@Ec@@J@G3@@A[fA@J@G033333333@Z@@@@ArjA@@@@G033333333@q@@@@o@on@@ࠠ)unguardedR3$883%88@@@@@@@HBJ@G@&*@@@HCJ@G@@@H J@G&6 @@@H J@G@@GJ@G@@GJ@G03D3C3C3D3D3D3D3D@@@3`R@@@@#envT3U883V88@@@-03U3T3T3U3U3U3U3U@93\883]892@@@@@@"liU3h883i88@@@703h3g3g3h3h3h3h3h@ C@@3V@@@@డ2C$List&filter3{883|88@@@!a@&&@@@(@@(@V @@@(N@@@(@@(@@(@&}G**&~G**@@&|k@@@@c@@J@H@J@G@lk@@J@Gdo@@J@G@J@G@J@G033333333@@Ly@C@3W@@@@@"idV388389@@@@@డ2!>389389@@!a@@L@@@0@@/@@.,%greaterthanBAn@@@@no%@@mT@@@3(@@K@H,K@H@@@K@H@K@H@K@H033333333@C;@2@4X@@@@డ$rank$Mode389489@@R@@@>$3K@@@>#@@>"@B@  @@@[@@L@H&3T@@L@H%@L@H$'@@ఐ⠐$find4894 89@۰@@@@@M@H3@@@M@H2@@M@H1@M@H0@M@H/C@@ఐ"id49894:89@M@@P@@ఐ#env4F894G89@۰@@]@@4J894K89@@@@M@HAc@@Q@@ld@@డ$rank$Mode4_894`89(@`@@@@@L@HT3@@L@HS@L@HR~@@ภ%Guard4s89)4t89.@8[@@@BE@@A@@@@@ @@M@Ha@@@@M@HZ@@ @@@@K@HhK@Hg@@A488489/@@@Q@@K@H@K@H K@Hj044444444@@@@@ఐ5"li4890=@>@@g@@!?@@\J@G@@A7BA@oJ@G044444444@6@@@@ANFA@@zu@@Hq044444444@M@@@@K@KJ@`@ࠠ)dependentW4949:4949C@@@@i@@@HJ@Hs@@@@HJ@H@@@HJ@Hy @@@HJ@Hz@@H{J@Ht@@HuJ@Hr044444444@@@4U@@@@#envY4949D4949G@@@+044444444@74949649M9@@@@@@"liZ4949H4949J@@@5044444444@ A@@5Z@@@@డ3$List&filter59M9Q59M9\@@@@@G@@J@H@J@H@ݠO@@J@HՠS@@J@H@J@H@J@H055555555@%1\@(@54[@@@@@"id[5,9M9b5-9M9d@@@h@@డ4qs579M9589M9@p@@@4@@K@HK@H@q@@K@H@K@H@K@H05C5B5B5C5C5C5C5C@,$@@5_\@@@@డ$rank$Mode5Y9M9h5Z9M9q@Z@@@@@L@H4@@L@H@L@H@@ఐ3$find5p9M9s5q9M9w@,@@@/@@M@H@(@@M@H%@@M@H@M@H@M@H:@@ఐb"id59M9x59M9z@D@@G@@ఐ#env59M9{59M9~@@@T@@59M9r59M9@@E@@M@HZ@@H@@c[@@డN$rank$Mode59M959M9@@@@ @@L@H4@@L@H@L@Hu@@ภ&Ignore59M959M9@@@@o@@M@H@@@@M@H@@u @@J@@K@HK@H@@A59M9]59M9@@@T@@K@H@K@HK@H055555555@@@@@ఐ"li59M9@̰@@(@@@@J@H~@@AA@0J@Hx055555555@@@@@A A@@;6@@H055555555@@@@@@ @#@ࠠ&remove\699699@@@@D@@@H@ b@H@@@H g@@@H@@H@@HJ@H066666666@Djd@e@6/Y@@@డ&remove!M6$996%99@@e@@@AJ@ @@@AI @@@AH@@AG@@AF@@@@1!@@6899@@@$@ࠠ$take]6E996F99@@@@@@@INJ@I@ @@@I#J@I @@@I"J@I   d@@IYJ@I4@@@IFJ@I @@IJ@I@@IJ@I@@IJ@H06n6m6m6n6n6n6n6n@\vp@q@6]@@@@"id_699699@@@6066~6~66666@B699699@@@@@@#env`699699@@@@066666666@ L@@6_@@@@ఐ h$find699699@a@@@ d@@J@I@ ]@@J@I Z@@J@I@J@I@J@I066666666@!-c@$@6`@@@@ఐH"id699699@.@@z@@ఐB#env699699@@@~@@/@@s@ఐݠ&remove699699@m@@@ @@J@I6@ =@@J@I5 A@@J@I3@J@I2@J@I1;@@ఐ"id699699@e@@H@@ఐy#env799799@R@@U@@-@@V@@7 99@@J@I Z@@A~A@J@I077777777@}@@@@AA@@@@Ih077777777@@@@@@@@ࠠ+remove_lista7#997$99@@@@  m@@@IJ@I|@@@IJ@Ij@ @I@@@IJ@IpJ@Iq@@IrJ@Ik@@IlJ@Ii07?7>7>7?7?7?7?7?@@@7[^@@@@!lc7P997Q99@@@)07P7O7O7P7P7P7P7P@57W997X9:5@@@@@@#envd7c997d99@@@-07c7b7b7c7c7c7c7c@ ?@@7b@@@@డ6>$List)fold_left7v9:7w9:@ s@@@@DJ@Iz@R@J@I~@J@I}@@ mY@@J@I{ @J@Iy@J@Ix@J@Iw077777777@$0S@'@7c@@@@@#enve79:79:@@@ @@@"idf79:79:@@@{J@I077777777@$2@@7d@@@@డ&remove!M79:79:'@@@@ @@K@I@ @@K@I @@K@I@K@I@K@I077777777@#1'@(@7e@@@@ఐ9"id79:(79:*@@@5@@ఐS#env79:+79:.@=@@o@@1@@ D@@J@IJ@I%@@AM A@@{@K@IK@I077777777@L@@@@A79:79:/@@@@@K@I@K@IK@I077777777@y@@@@ఐ#env8 9:089:3@@@@@ఐΠ!l89:4@@@@@@@J@Iu@@AA@J@Io088888888@@@@@AA@@@@I08#8"8"8#8#8#8#8#@@@@@@@@@@ 9 @@ 3 -A@  @  @  @ '@Fy@@@h@'@D@@& @!@8\a@@08D8C8C8D8D8D8D8D@*@@8J668K:6:9@%08J8I8I8J8J8J8J8J@@@@!tgJ8@@@A@@@@@8U]118V]11@@@@8mfA@&singleh@"!t@@@I@!t@@@I@@@I@@I@@I@8r_118s_11@ J Create an environment with a single identifier used with a given mode. 8`118a22@@@@@@@8g@%emptyi9@@@I@8c228c22'@ * An environment with no used identifiers. 8d2(2*8d2(2Y@@@@@@@8h@$findj@"G!t@@@I@]@@@IW!t@@@I@@I@@I@8f2[2]8f2[2~@= V Find the mode of an identifier in an environment. The default mode is Ignore. 8g228h22@@@@@@@8i@)unguardedk@@@@I@8o"{!t@@@I@@@I8z"!t@@@I@@@I@@I@@I@8j228j23@q o unguarded e l: the list of all identifiers in l that are dereferenced or returned in the environment e. 8k338l3a3@@@@@@@9j@)dependentl@@@@I@8"!t@@@I@@@I8"!t@@@I@@@I@@I@@I@9n339n33@ Y dependent e l: the list of all identifiers in l that are used in e (not ignored). 9+o339,p44@@@@@@@9Ck@$joinm@@@@I@@@@I@@@I@@I@@I@9Dr4 4"9Er4 48@@9\l@)join_listn@8@@@I@@@I @@@I@@I@9\s494;9]s494V@㐠 > Environments can be joined pointwise (variable per variable) 9it4W4Y9jt4W4@@@@@@@9m@'composeo@ !t@@@I@-@@@J1@@@J@@J@@J@9v449v44@ j Environment composition m[G] extends mode composition m1[m2] by composing each mode in G pointwise 9w449x550@@@@@@@9n@&removep@#?!t@@@J@U@@@JY@@@J@@J@@J@9z52549z525R@ 3 + Remove an identifier from an environment. 9{5S5U9{5S5@@@@@@@9o@$takeq@#g!t@@@J @}@@@J  z!t@@@J @@@J @@J @@J@@J@9}559}55@ e ? Remove an identifier from an environment, and return its mode 9~559~55@@@@@@@:p@+remove_listr@9#!t@@@J@@@J@@@@J@@@J@@J@@J@: 55: 56 @ ; Remove all the identifiers of a list from an environment. :6!6#:6!6c@@@@@@@:0q@%equals@@@@J@@@@J:@@@J@@J@@J@:16e6g:26e6@@:Ir@@БA(:?]11@@@@A@@@0:=:<:<:=:=:=:=:=@@A@:H_11:I_11@б@г%Ident:S_11:T_11@@0:R:Q:Q:R:R:R:R:R@@A@@б@г󠡐$Mode:a_11:b_11@@@@г!t:j_11@@@@ @@@@@@:uc22:vc22#@г!t:}c22&@@0:{:z:z:{:{:{:{:{@*&$@A@@@@:f2[2a:f2[2e@б@г頡%Ident:f2[2h:f2[2o@@0::::::::@@A@@б@г!t:f2[2s:f2[2t@@ @@г$Mode:f2[2x@@@@ @@ @@@@:j22:j22@б@г점!t:j22:j22@@0::::::::@-%#@A@@б@г$list:j22:j23@г%Ident:j22:j22@@@@@ @@г$list:j23 @г%Ident:j23:j23 @@ *@@@+@@,@@#-0@@%@@/:n33:n33@б@г!t;n33;n33@@0::::::::@B<:@A@@б@г$list; n33;n33@г%Ident;n33;n33@@@@@ @@г $list;!n33@г %Ident;*n33;+n33@@*@@@+@@),@@0-0@@2@@/;7r4 4&;8r4 4*@б@г!t;Ar4 4-;Br4 4.@@0;@;?;?;@;@;@;@;@@BIG@A@@б@г !t;Nr4 42;Or4 43@@ @@г!t;Wr4 47@@@@  @@'@@)@@@;bs494?;cs494H@б@г$list;ls494M;ms494Q@г!t;us494K;vs494L@@%0;t;s;s;t;t;t;t;t@5IG@A@@@,@@г$!t;s494U%@@+ &@@7 '@@9@)(@'*;v44;v44@б@г$Mode;v44;v44@@%0;;;;;;;;@"QO@A@@б@г"!t;v44;v44@@* @@г'!t;v44(@@.)@@5 *@@>+@@@@-,@+.;z5258;z525>@б@г %Ident";z525A;z525H@@)0;;;;;;;;@-XV@A@@б@г&!t;z525L;z525M@@. @@г+!t;z525Q,@@2-@@9 .@@B/@@D@10@/2##;}55;}55@б@г$%Ident&;}55;}55@@-0;;;;;;;;@-\Z@A@@б@г*!t;}55;}55@@2 @@Вг/$Mode1<}55< }55@@8@@г3!t<}554@@:#5@@@E$ 6@@L%7@@U&)8@@W@:9@8(;,,<55<56@б@г-$list<(56<)56@г2%Ident4<256 <356@@;0<1<0<0<1<1<1<1<1@Exv@A@@@B@@б@г8!t<@56@@D?@@K @@@YA@@[@CB@AD550<]<\<\<]<]<]<]<]@-rp@A@@б@г=!tx@@@@డ<$List*fold_right> ::> ::@@@!a@'@!b@'@@(O@@(N@^@@@(M@  @@(L@@(K@@(J@1hh1h@@1 \@@@@i@_K@M @K@M$@K@M#@sr@@K@M!@  @K@M@K@M@K@M0>7>6>6>7>7>7>7>7@?Kl@B@>Sy@@@@ఐ*remove_pat>H::>I::@p@@@@@L@M?@@@L@M>@@L@M=@L@M<@L@M;@@ఐ$pats>c::>d::@g@@,@@ఐ{#env>p::@5@@8@@g@@K@M;@@A}A@K@M0>u>t>t>u>u>u>u>u@|@@@@AA@@@@MJ0>y>x>x>y>y>y>y>y@@@@@@@A()term_judg}K>@"@'>@"@0@@8@@@A@%5!t@@@MLr!t@@@MM@@MN@@@@>@"@">@"@B@@@@>z@@Aб@г$Mode>@"@3>@"@9@@0>>>>>>>>@@@>w+8@@@A2@@L@MOL@MK@@@@@@@@@@@г$#Env&>@"@=$@@,%@@5&@@(@@('@0>>>>>>>>@@@A()bind_judg~L>@C@H>@C@Q@@8@@@A@%z!t@@@M\@!t@@@M]!t@@@M^@@M_@@M`@@@@>@C@C>@C@l@@@@>{@@Aб@г$Mode>@C@T>@C@Z@@$0>>>>>>>>@Nvp18@@@A8@@M@MaM@M[@@@@@@@@@ @@б@г*#Env,? @C@^? @C@c@@3@@г.#Env0?@C@g.@@6 /@@?! 0@@H"%1@@3@@32@0????????@#@@@ࠠ&option?&@n@r?'@n@x@@Ш!a@б@б@А!a @Ms0?7?6?6?7?7?7?7?7@Dtn@@?=@n@?>@n@@@г)term_judg?F@n@?G@n@@@ @@@Mt@@@@@Mu@@б@г>̠&option?X@n@?Y@n@@А!a'$?_@n@?`@n@@@@-@@@Mw+ @@г栐)term_judg?m@n@?n@n@@@ @@@Mx8@@@@@My;@@@,@@Mz>?y@n@ @@F@@M{C?~@n@{A@ZA@@@@O@MH@@@M@@M@; @@@M*@@@M@@M@@M@@MZ@@!f?@@?@@@@@@l@M@N@M0????????@l?@n@n?@@@@@@@@!o?@@?@@@@@gM@M@@N@M0????????@*@ <@@M@#@?}@@@@@!m?@@?@@@@@H@G@MM@MM@M0????????@.$@@@M@)@?~@@@@ఐ9!o?@@?@@@@@5@@@M0????????@-#@$@@ @@@Ġ$None?@@@@@@<@@@@J@@P@M0@@@@@@@@@@@@@@@డ %empty#Env@@@@@@@T@@@L@|@@@@MM@MM@M@Ġ$Some@*@@@+@@@;ࠠ!v@3@@@4@@@@@{Q@MF@@@@@@@P@MK@@K@@ఐ!f@E@@@F@@@@@@@N@M0@G@F@F@G@G@G@G@G@Z@@@c@@@@ఐ%!v@X@@@Y@@@@@%@@ఐ!m@e@@@s@@@@#@@RM@MM@M"@@A@m@@@@VM@Mj@@AA@M@MM@M0@r@q@q@r@r@r@r@r@@@@@AA@@*@@M@M@M@MM@M0@|@{@{@|@|@|@|@|@@@@@A@@@@@@@@@M@7@@@M@@M@@M0@@@@@@@@@@@@@@@T@ࠠ$list@@@@@@@@Ш!a@б@б@А!a @N 0@@@@@@@@@t@@}@Mw@@@M@@M@j @@@MY@@@M@@M@@M@@@|@@@@A@@A @@гF)term_judg@@A @@A@@ @@@N%@@@+@@N(@@б@г@t$list@@A@@A"@А!a;8@@A@@A@@@A@@@N? @@гm)term_judg@@A&@@A/@@ @@@NL@@@@@NO@@@,@@NRA@A @@Z@@NWA@AA@nA@@@@c@N%H@@@N+@@N*@; @@@N)*@@@N(@@N'@@N&@@N$n@@!fA%A2A8A&A2A9@@@@@NVM@N, @N@N;0A+A*A*A+A+A+A+A+@A2@@A3ABA@@@@@@"liA>A2A:A?A2A<@@@iM@NA@@N@NF0ADACACADADADADAD@,@">@@N:@%@Ab@@@@@!mAWA2A=AXA2A>@@@@I@NM@NM@NJ0A_A^A^A_A_A_A_A_@.$@@@NE@)@A@@@@డ@>$List)fold_leftAvABAFAwABAT@*s@@@@@l@NM@NM@NT@[ @M@NX@M@NW@ @*sb@@M@NU@M@NS@M@NR@M@NQ0AAAAAAAA@.B8@9@A@@@@@#envAABAZAABA]@@@&@@@$itemAABA^AABAb@@@M@Np0AAAAAAAA@$8@@A@@@@డ"$join#EnvAABAfAABAn@@@@@L@ @@@L@@@L@@L@@L@@@@@@@N@Nz@@@N@Ny@@N@Nx@N@Nw@N@Nv0AAAAAAAA@/=3@4@A@@@@ఐR#envAABAoAABAr@<@@t@@ఐܠ!fAABAtAABAu@@@@@O@N"@@ఐc$itemB ABAvB ABAz@,@@_/@@ఐƠ!mBABA{BABA|@@@<@@BABAsBABA}@@c@@M@NM@NM@NF@@e @@M@NM@NtK@@AA@@@N@NN@N0B-B,B,B-B-B-B-B-@~@@@@AB2ABAUB3ABA~@@@@@N@Ng@N@NfN@N0B7B6B6B7B7B7B7B7@@@@@డ#%empty#EnvBHABABIABA@7@@N@N@@ఐ"liBWABA%@&@@+E4@@N@NeN@NN@N@@/@@M@NO*@@A2A@RM@NLM@NI0BfBeBeBfBfBfBfBf@@@@@A-8A@@H@@M@N\@M@NM@N0BpBoBoBpBpBpBpBp@,@@@@ABuA2A4C@@@@Pl@@N@U@@@Ni@@N@@N0B}B|B|B}B}B}B}B}@R@@@@P@PO@ՠ@ࠠ%arrayBAABAA@@Ш!a@б@б@А!a @N0BBBBBBBB@@@@N@@@N@@N#@נ @@@N"@@@N@@N!@@N @@B@@BAABAA@@г:)term_judgBAABAA@@ @@@N%@@@+@@N(@@б@гB%arrayBAABAA@А!a;8BAABAA@@@A@@@N? @@гa)term_judgBAABAA@@ @@@NL@@@@@NO@@@,@@NRBAA @@Z@@NWBAAA@nA@@@@c@NH@@@N@@N@; @@@N*@@@N@@N@@N@@Nn@@!fCAACAA@@@@@QcM@N @N@O0CCCCCCCC@C&AAC'AB#@@@@@@"arC2AAC3AA@@@iM@O@@N@O 0C8C7C7C8C8C8C8C8@,@">@@O@%@CV@@@@@!mCKAACLAA@@@@I@QM@QM@O0CSCRCRCSCSCSCSCS@.$@@@O @)@Cs@@@@డB2%Array)fold_leftCjAACkAA@@@!a@O@!b@O @@P@@P@ @%arrayH@@@P@@P@@P@@P@)array.mli@@-Stdlib__ArrayW#"@@@@@@QM@QM@Qa@{ @M@Qe@M@Qd@ @ @@M@Qb@M@Q`@M@Q_@M@Q^0CCCCCCCC@NbX@Y@C@@@@@#envCAACAA@@@&@@@$itemCAACAA@@@M@Q}0CCCCCCCC@$8@@C@@@@డ$$join#EnvCAACAB@@@@@@N@Q@ @@N@Q#@@N@Q@N@Q@N@Q0CCCCCCCC@!/%@&@C@@@@ఐD#envCABCAB @.@@f@@ఐ!fDAB DAB @Ȱ@@@@O@Q"@@ఐU$itemDABDAB@,@@Q/@@ఐؠ!mDABD AB@|@@<@@D#AB D$AB@@i@@M@QM@QM@QF@@W @@M@QM@QK@@AqA@@@N@QN@Q0D3D2D2D3D3D3D3D3@p@@@@AD8AAD9AB@@@@ @N@Qt@N@QsN@Q0D=D<D<D=D=D=D=D=@@@@@డ%#%empty#EnvDNABDOAB @=@@N@Q@@ఐ/"arD]AB!7@8@@F@@N@QrN@QN@Q@@A@@M@O*@@A DA@dM@OM@O0DlDkDkDlDlDlDlDl@@@@@A?JA@@Z@@M@Qn@M@QM@Q0DvDuDuDvDvDvDvDv@>@@@@AD{AAU@@@@b~@@Q@g@@@Q{@@Q@@Q0DDDDDDDD@d@@@@b@ba@砰@ࠠ&single DB%B)DB%B/@@Ш@б@г.A!t%IdentDB%B2DB%B9@@ @@@Q0DDDDDDDD@ %@@@N@@@N@@N@ @@@N@@@N@@N@@N@2@D@@@@гC)term_judgDB%B=DB%BF@@ @@@Q#@@@)@@Q&,@@@@Q)/ A@D A@@@>@@@Q@@@Q@@Q@@Q5@డ%&single#EnvDB%BIDB%BS@@  @@@L@  @@@L:@@@L@@L@@L@   |@б@г.fe@@@@Q^H@гG@@@@QdA@@ @@Qf@@'@@@ @@@@R;AA@`A@@@ZS@@@R@@@R@1@@@R'@@@R@@R@@R@@RP@@#idsȠFBBFBB@@@F0p@@N@R@@N@R0GGGGGGGG@g@@@@@!fɠGBBGBB@@@@@N@R0GGGGGGGG@z)@@@R@@@R@'@G;@@@@@!mʠG0BBG1BB@@@@@N@S 0G3G2G2G3G3G3G3G3@,"@@@R@&@GR@@@@డ(+remove_list#EnvGIBBGJBC@ 0@@@ Y 0@@M@S@@M@S@ @@M@S @@M@S@M@S@M@S0GZGYGYGZGZGZGZGZ@(7@@@S@1@Gy@@@@ఐv#idsGnBCGoBC @S@@  W@@N@S!@@N@S N@S$N@S"@@ఐx!fGBC GBC @R@@t@@N@S'1@@ఐl!mGBCGBC@;@@ @@O@S6O@S8O@S7G@@GBC GBC@@ @@N@SN@S:O@S5Q@@f @@ @@M@S>M@S=W@@AA@ 7@@M@SDM@SC0GGGGGGGG@@@@@AA@@@@M@SN @@M@SM@M@SLM@SI0GGGGGGGG@@@@@AGBB$@б@гEг<@@@@R5$@@ؠ@@@R9#@б@г!@@@@R@@г+@-@@@RE@@ @@RG@@@@RI@mF@@@ M@RL@@GBBJ@@K@O@ࠠ$joinˠGCCGCC@@Ш@б@гG$listH CC'HCC+@г )term_judgHCCHCC&@@ @@@Sk0HHHHHHHH@{@@@@R@@@R@o@@@Re@@@R@@R@@R@@HF@@@@@,@@@Sm )@@г )term_judgH>CC/H?CC8@@ @@@Sn'@@@@@So*0@@@@Sp-3 A@O A@@@IB@@@S{@@@Sz@@@Sy@@Sx@@Sw=@@"li̠HcC;CAHdC;CC@@@H @@N@S@@N@S0HlHkHkHlHlHlHlHl@S@@@@@!m͠HzC;CDH{C;CE@@@ @@N@S0H}H|H|H}H}H}H}H}@e'@@@S@@@S@%@H@@@@డ)l)join_list#EnvHC;CIHC;CV@@N @@@L@@@L @@@L@@L@KH;@@@[ @@M@S@@M@S @@M@S@M@S0HHHHHHHH@4C )@@@S@=@H@@@@డG$List#mapHC;CXHC;C`@@@!a@'O!b@'M@@("@;Π@@@(!;Ӡ@@@( @@(@@(@;;@@;U @@@@@@N@SN@S 8@@N@SN@SN@SN@S@N@S@#@@N@S"@@N@S@N@S@N@SR@@@!fΠIC;CfIC;Cg@@@(b@@ఐ!fIC;CkIC;Cl@4@ @I7@@60I III I I I I @q@@@@ఐ!mI/C;CmI0C;Cn@|@@ @GN@SN@S@@ @@IN@S@@AI<C;CaI=C;Co@@@UP@O@SO@S0I?I>I>I?I?I?I?I?@@@@@ఐ"liIMC;CpINC;Cr@Ͱ@@zj@@O@SO@SO@S@@IYC;CWIZC;Cs@@j@@N@SN@SN@S!@@ @@ @@M@SM@S'@@AA@ @@M@SM@S0ImIlIlImImImImIm@@@@@AIrC;C=@б@гqгj@@@@S|dO@@@@@S~hN@гL@@@@SmF@@ @@SoE@2@@@AM@Sr@@ICC6@@7@u@ࠠ%emptyϠICuCyICuC~@@@@@@SM@S @@@TM@S@@SM@S0IIIIIIII@@@@@Sv@@@Su@@@St@@Ss@@I@@@@GѠ@ICuCICuC@@"0IIIIIIII@.ICuCuICuC@@@@@డ*%empty#EnvICuC @ ð @@0M@T@@AICuC@@@:6@@T@@@@2@ࠠ"<<ҠIDdDhIDdDl@@Ш@б@г s)term_judgIDdDoIDdDx@@ @@@T0IIIIIIII@Tic@d@J@@  @@б@г0!t$ModeJDdD|JDdD@@ @@@T@@г )term_judgJDdDJDdD@@ @@@T#@@@@@T&@@@,@@T )/ @@@@T ,2A@DA@@@>@@@T@0@@@T#@@@T@@T@@T@@T=@@!fӠJFDDJGDD@@@ @@N@T30JJJIJIJJJJJJJJJJ@N@@@@@*inner_modeԠJXDDJYDD@@@1U@@N@T>0J]J\J\J]J]J]J]J]@b$@@@T2@@J|@@@@@*outer_modeՠJqDDJrDD@@@ @@N@TI0JtJsJsJtJtJtJtJt@)@@@T=@#@J@@@@ఐE!fJDDJDD@'@@A@@M@TN0JJJJJJJJ@& @@@TH@ @J@@@@డ1A'compose$ModeJDDJDD@@@@@@N@Tc@@@N@Tb@@N@Ta@N@T`@N@T_&@@ఐP*outer_modeJDDJDD@0@@@@O@ToO@TqO@Tp:@@ఐ}*inner_modeJDDJDD@Z@@&@@O@TnO@TsO@TrN@@JDDJDD@@ U@@N@T]N@TuO@TmZ@@a @@ W@@M@TyM@Tx`@@AJDD@@ q@@M@TM@T~0JJJJJJJJ@~@@@@AA@@@@M@T @@M@T@M@TM@T0JJJJJJJJ@@@@@AKDD'@б@г@@@@T @б@г@@@@T@г$@&@@@T@@ @@T@@@@T@6B@@@M@T"@@K"DdDdF@@G@%@ࠠ">>֠K/EEK0EE@@Ш@б@г t)bind_judgK@EEKAEE@@ @@@T0KBKAKAKBKBKBKBKB@Gb@W@@@T@I@@@T<@@@T@@T@@T @j@Kk@@@@б@г ٠)term_judgK`EEKaEE@@ @@@T @@г 栐)term_judgKmEEKnEE@@ @@@T-@@@@@T0@@@6@@T39 @@@@T6<A@NA@@@H@@@T@-@@@T#@@@T@@T@@T@@TG@@&binderנKEEKEF@@@ @@N@T0KKKKKKKK@X@@@@@$termؠKEFKEF@@@ +@@N@T0KKKKKKKK@k#@@@T@@K@@@@@$mode٠KEFKEF @@@ 6@@N@T0KKKKKKKK@(@@@T@"@K@@@@ఐD&binderKEFKEF@'@@@@@M@T0KKKKKKKK@& R@@@T@ @K@@@@ఐ1$modeKEFKEF@@@ "@@N@UN@UN@U@@ఐa$termLEFLEF@?@@]@@N@U/@@ఐY$modeLEF LEF$@9@@ @@O@UO@UO@UE@@L"EFL#EF%@@ N@4N@UN@UO@UP@@W @@ @@M@UM@UV@@AsA@ @@M@U"M@U!0L6L5L5L6L6L6L6L6@s@@@@AA@@@@M@U, @@M@U+@M@U*M@U'0LBLALALBLBLBLBLB@@@@@ALGEE%@б@г@@@@T @б@г@@@@T@г$@&@@@T@@ @@T@@@@T@4@@@@M@T @@LfEED@@E@#Aࠠ*expressionڠLsFFLtFF@@Ш@б@гK.*expression)TypedtreeLFFLFF@@ @@@UV0LLLLLLLL@Hc@X@@@T@=@@@T3@@@T@@T@@T@k@L@@@@г)term_judgLFFLFF@@ @@@UW@@@$@@UX!'@@@@UY$* A@? A@@@9@@@V9@@@V@@V@@V1@@#exp젰LFGLFG@@@K{M@@N@Wd0LLLLLLLL@Us@l@@@U^N@V13@@@V2@@V3N@U\@z@M*binding_op@K*binding_op@@@UgN@V7@@@V8@@V9N@Ue@M5k#k'M5k#k1@@M/class_structure@K/class_structure@@@UpN@V=@@@V>@@V?N@Un@M9kkM9kk@@M3+class_field@K+class_field@@@UyN@VC@@@VD@@VEN@Uw@M2<l lM3<l l@@MJ0class_field_kind@K0class_field_kind@@@UN@VI@@@VJ@@VKN@U@MIKmmMJKmm@@Ma&modexp@L+module_expr@@@UN@VO@@@VP@@VQN@U@M`RnnMaRnn@@Mx$path@$Path!t@@@UN@VU@@@VV@@VWN@U@MyxssMzxss@@M)structure@L6)structure@@@UN@V] @@@V^@@V_N@U@MuuMuu@@M.structure_item@LM.structure_item@@@UN@Vo@@@Vp@@VqN@U@MwwMww@@M.module_binding@M17^!t@@@U@@@ULs+module_expr@@@U@@UN@V@@@V@@VN@U@MPTMPb@@M0open_declaration@L0open_declaration@@@UN@V@@@V@@VN@U@MZ^MZn@@M9recursive_module_bindings@MMr7!t@@@U@@@UРL+module_expr@@@U@@U@@@UN@VE@@@V@@VN@U@NswNs@@N'*class_expr@L*class_expr@@@UN@V@@@V@@VN@U@N&txN't@@N>5extension_constructor@L5extension_constructor@@@UN@V@@@V@@VN@U@N=NRN>Ng@@NU.value_bindings@M(rec_flag@@@UN@V@MM-value_binding@@@U@@@UN@V@@@V@@V@@VN@U@Nb:>Nc:L@@Nz$case@M$case!k@V @@@V @/@@@VN@V/c!t@@@VN@V/@@@VN@V@@V@@VN@V@@V @Nzy}Nzy@@N'pattern@MK/general_pattern!k@V@@@V@/!t@@@V0@@@V@@V@@V@NN@@N8is_destructuring_pattern@Mj/general_pattern!k@V+@@@V-N@@@V)@@V,@NN@@N@@@@ఐ#expNFGNFG@@@@Wc@@N@@I@@N@Wl@Wj0NNNNNNNN@& @@@(exp_descNFGNFG@IS@@IO@@@Wk @Ġ*Texp_identNG$G*NG$G4@Hࠠ#pthOG$G6OG$G9@@@I@@@Wt0OOOOOOOO@%@@@@O G$G;O G$G<@@HH@@P@Wv@@P@Wu @@OG$G>OG$G?@@H@@P@Ww@@@%OG$G@@@I@@P@Wx@@@@ఐĠ$pathO+GDGJO,GDGN@Ȱ@@@@@N@Y@@N@Y@N@Y0O3O2O2O3O3O3O3O3@T:4@5@OO@@@@ఐB#pthODGDGOOEGDGR@@@@@O@YO@YO@Y@@$ @@@@N@uN@Y@Ġ(Texp_letO_ GSGYO` GSGa@IVࠠ(rec_flagOh GSGcOi GSGk@@@J9@@@W0OkOjOjOkOkOkOkOk@@@@ࠠ(bindingsOv GSGmOw GSGu@@@J8J5@@@W@@@W@ࠠ$bodyO GSGwO GSG{@@@J@@@W@@@/O GSG|@@I@@P@W$@@$@@ఐl">>OH HGOH HI@@@@g@@N@Y@L@@N@YB@@N@Y@N@Y@N@Y0OOOOOOOO@KE@F@O?9@:@O0*@+@O@@@@ఐ}.value_bindingsOH H&OH H4@@@@}@@P@Y@yx@@P@Y@@P@Yu@@P@Y@P@Y@P@Y*@@ఐw(rec_flagOH H5OH H=@2@@@@Q@YQ@YQ@Y>@@ఐ}(bindingsOH H>OH HF@D@@@@Q@Y@@Q@YQ@ZQ@ZV@@A@@@@O@Z Z@@ఐ*expressionPH HJPH HT@1@@@@@P@Z`@@P@Z@P@Zq@@ఐ$bodyP&H HUP'H HY@u@@@@Q@Z%Q@Z+Q@Z*@@  @@x@@O@Z1@@t@@N@Z9@Ġ.Texp_letmodulePAHZH`PBHZHn@Hࠠ!xPJHZHpPKHZHq@@@HH@@@W@@@W0PQPPPPPQPQPQPQPQ@q@@@@PXHZHsPYHZHt@@HHH@@P@W@@P@W@@P@W@@PhHZHvPiHZHw@@H@@P@W@ࠠ$mexpPtHZHyPuHZH}@@@H@@@W&@ࠠ!ePHZHPHZH@@@K~@@@W3@@@GPHZH@@J@@P@W8@@8@@ఐf">>PHHPHH@ @@@a@@N@Z@@F@@N@Z?<@@N@Z>@N@Z=@N@Z<0PPPPPPPP@c]@^@P;5@6@P0*@+@P@@@@ఐ .module_bindingPHHPHH@@@@  @@P@Zf@@P@Ze @@P@Zg@P@Zd@@P@Zc@P@Zb,@@ఐ!xPHHPHH@7@@/.@@Q@Z@@Q@ZQ@ZQ@ZG@ఐ$mexpPHHPHH@K@@9@@Q@ZQ@ZQ@ZY@@PHHQHH@@! @Q@ZQ@Zb@@M@@@@@O@Zf@@ఐ*expressionQHHQHH@7@@@@@P@Zf@@P@Z@P@Z}@@ఐ!eQ,HHQ-HH@@@@@Q@ZQ@ZQ@Z@@  @@~@@O@Z@@@@N@Z@Ġ*Texp_matchQGHHQHHH@?ࠠ!eQPHHQQHH@@@LM@@@W0QSQRQRQSQSQSQSQS@s@@@ࠠ%casesQ^HHQ_HH@@@?@p?@@@W@@@W@@@W@@QoHHQpHH@@@i@@P@W@@@.QuHH@@K@@P@W#@@#@@@$mode(QIIQII@@@@@O@Z0QQQQQQQQ@@:@;@Q4.@/@Q@@@@@ࠠ(pat_envs)QIIQII@@@D$@@@[$O@Z@@@ZO@Z0QQQQQQQQ@$3"@@@Z@-@Q@@@ࠠ)pat_modes*QIIQII@@@D8@@@[%O@Z@@@ZO@Z@@-@@-@@Z"@డP$List%splitQIIQII@@DӠ!a@&*!b@&,@@)@@@)Q@@@)9@@@)@@(@@(@D7e7eD7e7@@Dx'&@@@$cG@O@Z@@O@Zlk@@O@ZTS@@O@Z@O@Z@O@Z0RRRRRRRR@k@@@@డP$List#mapR'IIR(II@ ^@@@@Ơ@`@@P@[6P@[@@P@['P@Z@P@ZP@[:P@[#P@Z@P@Z@ k@@P@Z j@@P@Z@P@Z@P@Z6@@@!c+RZIIR[II@@@/F@@ఐ$caseRfIIRgII@@@@;@@Q@[@@@Q@[@@Q@[@@Q@[@Q@[@Q@[@Q@[0R{RzRzR{R{R{R{R{@.S@%@R@@@@ఐ6!cRIIRII@@@a@@ఐ$modeRIIRIJ@@@#@@R@[,R@[+#@@<@@iP@[&@@ARIIRIJ@@@}r@Q@[ Q@[3@@ఐW%casesRIJRIJ @)@@ @@Q@[Q@[7Q@[4@@RIIRIJ @@@@P@ZP@[9P@[@@ @@O@Z"@@RII@@@ࠠ%env_e,RJJRJJ@@@L@@@[SO@[<0RRRRRRRR@:NH@I@R3-@.@S@@@ఐ*expressionRJJ"RJJ,@@@@|@@O@[@C@@O@[?@O@[>@@ఐ!eS JJ-S JJ.@@@@@P@[PP@[VP@[U/@@డQ$List)fold_leftS"JJ0S#JJ>@<@@@@%@@@[zP@[[@P@[]@P@[_@P@[^@ @<@@P@[\@P@[Z@P@[Y@P@[XU@@డ9$join$ModeSFJJ?SGJJH@"@@@&@@Q@[u@@Q@[t@Q@[sl@@ภ&IgnoreSYJJISZJJO@%A@@@&@@P@[}{@@ఐ)pat_modesSiJJPSjJJY@@@ @@P@\=@P@\<@P@\;@@ఐ{*expression'T)KK@ )@@@u@@R@\a<@@R@\`@R@\_@@ఐꠐ$highU)KKU)KK@@@@@S@\qS@\wS@\v@@F @@T@@Q@\}@@ภ+DereferenceU)KKU)KK@c@@@'@@Q@\@@Y@@ @@O@\@ภǰU(*KKAKCఐ J"<<U3*KKU4*KK@ @@@ E@@P@\@ 7@@P@\ *@@P@\@P@\@P@\@@ఐܠ*expression'UO*KK@n)@@@@@R@\@@R@\@R@\ @@ఐ6$bodyUc*KKUd*KK@ @@@@S@\S@\S@\@@F @@@@Q@\!@@ภ%GuardUz*KKU{*KK@!@@@(%@@Q@\0@@Y@@ k@@O@\4@ภ"[]U+KK(AK@)A@U @@O@[O@[O@\3O@\@@O@\O@\L@@u9A@U$@@O@\4O@\S@@@A@U+@@O@[O@\2Z@@U'KrK}H@@ @@O@[O@[b@@rO@@dN@\e@Ġ-Texp_constantU,KKU,KL @Gz@U,KL U,KL @@G|@@P@W@@@ @@P-@@P@W@@@@ఐ 8%emptyU-LLU-LL@ հ@@N@]@Ġ(Texp_newU.LL#U.LL+@Gwࠠ#pthU.LL-U.LL0@@@G~@@@W0UUUUUUUU@@@@@U.LL2U.LL3@@GG~@@P@W@@P@W @@V.LL5V.LL6@@G@@P@W@@@%V.LL7@@Pl@@P@W@@@@ఐ ,"<<V4LLV4LL@ а@@@ '@@N@] @ @@N@]  @@N@] @N@] @N@] 0V"V!V!V"V"V"V"V"@C?9@:@V>@@@@ఐΠ$pathV54LLV64LL@Ұ@@@@@P@]/@@P@].@P@]-@@ఐ^#pthVJ4LLVK4LL@%@@@@Q@]?Q@]EQ@]D/@@  @@@@O@]K3@@ภ+DereferenceVa4LLVb4LL@@@@) @@O@]RB@@3@@N@][E@Ġ,Texp_instvarVt5LLVu5LL@Gࠠ)self_pathV}5LLV~5LL@@@G@@@W0VVVVVVVV@@@@ࠠ#pthV5LLV5LL@@@G@@@W@ࠠ)_inst_varV5LLV5LL@@@GҠG@@@W@@@W@@@/V5LL@@Q@@P@W$@@$@@ఐ$joinV6LLV6LL@ @@@@@N@]a@@N@]`@@N@]_@N@]^0VVVVVVVV@JD@E@V>8@9@V3-@.@V@@@@ภoV6LMV6LM(ALఐ "<<V6LMV6LM@ @@@ @@P@]@ @@P@] @@P@]@P@]@P@]-@@ఐ $path(V6LM@ *@@@ @@R@] @@R@]@R@]C@@ఐ)self_pathW 6LMW 6LM@K@@ @@S@]S@]S@]W@@G @@ @@Q@][@@ภ+DereferenceW#6LMW$6LM@m@@@)@@Q@]j@@Z@@ @@O@]n@ภѰW26LMbAMMఐ ֠$path W=6LM#@ ٰ @@@ @@P@] @@P@]@P@]@@ఐƠ#pthWQ6LM$WR6LM'@@@ @@Q@]Q@^Q@^@@* @@ @@O@^@ภ۰AMe@A@V^@@O@]sO@]O@]@@O@]O@^@@AA@V @@O@]O@]@@Wz6LL@@w@@O@]rO@]~@@@@3N@^@Ġ*Texp_applyW7M)M/W7M)M9@Kঠ(exp_descW7M)M<W7M)MD@RĠ*Texp_identW7M)MGW7M)MQ@P@W7M)MSW7M)MT@@RJ@@P@W0WWWWWWWW@@@@@W7M)MVW7M)MW@@PP@@P@W@@P@W @ࠠ"vdW7M)MYW7M)M[@@@P@@@W@@@%W7M)M\@@R*@@P@W@@@W7M)M;W7M)M]@@R@@P@WP@W'@ĠMW7M)M`W7M)MlAM@W7M)Ma@@K@@P@W8@Ġ$SomeW7M)McW7M)Mg@Sࠠ#argW7M)MhW7M)Mk@@@R@@@XN@@@@@KR@@P@X@@P@XV@@+@@% @P@X[@ĠN3AN @@4A@WL@@P@XL S@@P@X@@P@X@P@X@@P@Xs@@@X7M)M_H@@L#L"@@P@XL S'@@P@X@@P@X@P@X@@P@X@@@X37M)Mm@@R@@P@X@@@ఐVf&is_refXA8MnMyXB8MnM@T@@@Va@@N@^VR@@N@^@N@^0XIXHXHXIXIXIXIXI@ k@@Xfb\@]@Xh@@@@ఐ"vdX]8MnMX^8MnM@@@V@@O@^!O@^#O@^"@@' @@K@@N@^%O@^ !@ఐ"<<Xv>MMXw>MM@ 1@@@@@N@^+@z@@N@^*m@@N@^)@N@^(@N@^':@@ఐ *expressionX>MMX>MM@ @@@ @@P@^M @@P@^L@P@^KQ@@ఐ#argX>MMX>MM@X@@ 1@@Q@^]Q@^cQ@^be@@  @@ @@O@^ii@@ภ%GuardX>MMX>MM@$K@@@+i@@O@^px@@3@@ vN@^y{@Ġ*Texp_applyX?NNX?NN@Lݠࠠ!eX?NNX?NN@@@S@@@X"0XXXXXXXX@ @@@ࠠ$argsX?NNX?NN@@@LL@@@X%LS@@@X'@@@X&@@X$@@@X#@@@-X?NN@@Sb@@P@X("@@"@@@ࠠ#arg-Y @NN+Y @NN.@@@@@@^̠ @@@^O@^@@@^O@^@@^O@^|@@@^O@^}@@^~O@^{0Y(Y'Y'Y(Y(Y(Y(Y(@ JXR@S@YELF@G@YG@@@@W0@Y<@NN0Y=@NN1@@&0Y;Y:Y:Y;Y;Y;Y;Y;@7YB@NN'YC@NNM@@@@ࠠ"eo/YK@NN3YL@NN5@@@3@@YO@NN/YP@NN6@@<:@Q@^@@ఐ8&optionY^@NN9Y_@NN?@@@@@E&@@O@^@O@^@M@@O@^@@O@^@O@^@O@^0YnYmYmYnYnYnYnYn@4,Y@'@Y@@@@ఐ *expressionY@NN@Y@NNJ@ @@@ @@P@^ @@P@^@P@^@@ఐI"eoY@NNKR@"S@@{%@@9T@@qO@^(@@AKWA@@v@@^0YYYYYYYY@^@@@@\@@ࠠ(app_mode1YANQN]YANQNe@@@,T@@@^O@^0YYYYYYYY@@@Y@@@డX$List&existsYANQNkYANQNv@LȰ@@@@VL@@O@^V6V/@@O@^@@O@^@O@^O@^L@@O@^@O@^@LѠ@@O@^L@@O@^@O@^@O@^5@@ఐVz1is_abstracted_argYANQNwYANQN@UB@@@Vu@@P@^V_VX@@P@^@@P@^@P@^VE@@P@^@P@^U@@ఐ&$argsZANQNZANQN@@@M P@@P@^P@^P@^j@@Y @@Mv@@O@^P@^p@ภ%GuardZ%EOUOaZ&EOUOf@%@@@,@@@^|@ภ+DereferenceZ2FOgOvZ3FOgO@|@@@O@^@Z8ANQNh@@@@Z:ANQNY@@ఐ["<<ZDHOOZEHOO@@@@V@@N@^@H@@N@^;@@N@^@N@^@N@^0ZQZPZPZQZQZQZQZQ@@@Zm@@@@ఐh$joinZdHOOZeHOO@@@@c\@@P@_@@P@_9@@P@_@P@_@@ภZzHOOZ{HOOAPఐ*expression ZHOO@ @@@ @@R@_G @@R@_F@R@_E<@@ఐ!eZHOOZHOO@n@@$@@S@_WS@_]S@_\P@@+ @@ @@Q@_cT@ภLZHOO3APȠఐ$list ZHOO@ @@@@N@@R@_R@_xO@@R@_@@R@_@R@_R@_x @@R@_z@R@_y@@@R@_w@@R@_v@R@_u@R@_t@@ఐڠ#argZHOOZHOO@7@@@+u@@S@_@@S@_@S@_@@S@_@S@_@@ఐ$args[HOO[HOO@հ@@2O@@S@_S@_S@_@@b @@"@@Q@_@ภAQ@A@Z@@Q@_1Q@_=Q@_l@@Q@_mQ@_@@yA@Z @@Q@_>Q@_k@@[-HOO@@*@@Q@_0Q@_<@@@@@@O@_@@ఐ(app_mode[BHOO[CHOO@@@-@@O@_@@@@3@@N@_@ @@@  @@ N@_%@Ġ*Texp_tuple[ZIOO[[IOO@L\ࠠ%exprs[cIOO[dIOO@@@LcVc@@@X/@@@X.0[j[i[i[j[j[j[j[j@ @@@@@ @@U@@P@X0@@@@ఐ"<<[{JOO[|JOO@6@@@@@N@_@@@N@_r@@N@_@N@_@N@_0[[[[[[[[@ .(@)@[@@@@ఐ$list[JOO[JOO@@@@@'@@P@`-P@_@@P@`@P@_@Ԡ @@P@_@@P@_@P@_@P@_(@@ఐJ*expression[JOO[JOO@ݰ@@@E@@Q@`* @@Q@`)@Q@`(=@@ఐo%exprs[JOO[JOO@G@@:@@Q@`Q@`0Q@`.R@@C @@@@O@`6V@@ภ%Guard[JOO[JOP@'w@@@.@@O@`=e@@V@@ N@`Fh@Ġ*Texp_array[KPP [KPP@LѠࠠ%exprs\KPP\KPP@@@LؠW@@@X7@@@X60\ \ \ \ \ \ \ \ @ -@@@@@ @@Vu@@P@X8@@@@@ࠠ*array_mode2\LPP'\ LPP1@@@.@@@dO@`H0\$\#\#\$\$\$\$\$@ E'!@"@\@@@@డ'Typeopt*array_kind'Typeopt\;LPP:\<LPPL@@)Typedtree*expression@@@`&Lambda*array_kind@@@`@@`@2typing/typeopt.mli[[6@@'TypeoptK@@@@@P@`@@P@`@P@`8@@ఐ#exp\iLPPM\jLPPP@ @@0@@Q@dQ@dQ@dL@@9 @@,@@@dP@Ġ&Lambda+Pfloatarray\MPVP`\MPVPr@8+Pfloatarray&Lambda*array_kind@@@b@@@CD@@A1lambda/lambda.mliaa@@@ @@@@N@@R@dr@@r@@ภ+Dereference\OPP\OPP@@@@O@d}@Ġ&Lambda)Pgenarray\PPP\PPP@8)Pgenarray-@@@@D@@A%ae&an@@@-@@  @@r@@R@d@@@@ภ+Dereference\SQQ\SQQ@ @@@O@dO@d@Ġ&Lambda*Paddrarray\TQQ\TQQ@8*PaddrarrayU@@@AD@@AMaoNa{@@@U@@  @@@@S@d@@@Ġ&Lambda)Pintarray\TQQ\TQQ@8)Pintarrayl@@@BD@@Ada|ea@@@l@@  @@@@S@d@@@@% @@@@R@d@@ภ%Guard]VRR]VRR @(@@@O@dO@d@@A]LPP4@@@@]LPP# @@ఐ1"<<]XR*RF]XR*RH@հ@@@,@@N@d@@@N@d@@N@d@N@d@N@d0]']&]&]']']']']'@ @ @]C@@@@ఐ$list]:XR*R0];XR*R4@@@@@@@P@eP@d@@P@d@P@d@s @@P@db@@P@d@P@d@P@d(@@ఐ預*expression]\XR*R5]]XR*R?@|@@@@@Q@e@@Q@e@Q@e=@@ఐk%exprs]qXR*R@]rXR*RE@J@@:@@Q@dQ@eQ@eR@@C @@@@O@eV@@ఐk*array_mode]XR*RI]XR*RS@`@@05@@O@e f@@W@@{@@N@dj@ @@FN@e*p@Ġ.Texp_construct]YRTRZ]YRTRh@TӠ@]YRTRj]YRTRk@@TՠT@@P@XB@@P@XA0]]]]]]]]@@@@ࠠ$desc]YRTRm]YRTRq@@@T@@@XC@ࠠ%exprs]YRTRs]YRTRx@@@TX@@@XE@@@XD@@@.]YRTRy@@X3@@P@XF$@@$@@@ࠠ2access_constructor]ZR}R]ZR}R@@@@@@eWO@e,0]]]]]]]]@5/@0@]*$@%@^@@@ఐ@$desc][RR][RR@@@T@@P@e1@e/0]]]]]]]]@@@@(cstr_tag^[RR^[RR@T@@T@@@e0 @Ġ.Cstr_extension^\RR^\RR@8.Cstr_extensionTO@$Path!t@@@T@@@@BBAC@A[XX[XY@@@[9ࠠ#pth^2\RR^3\RR@@@@@@e79@@^;\RR^<\RR@@@@R@e8A@@@-^A\RR@@U/@@R@e9F@@F@@ఐe"<<^N]RR^O]RR@ @@@`@@P@eD@R@@P@eCE@@P@eB@P@eA@P@e@0^[^Z^Z^[^[^[^[^[@z2,@-@^w@@@@ఐ$path^n]RR^o]RR@ @@@@@R@ef@@R@ee@R@ed@@ఐQ#pth^]RR^]RR@%@@@@S@evS@e|S@e{/@@  @@@@Q@e3@@ภ+Dereference^]RR^]RS@ @@@1E@@Q@eB@@3@@O@e>E@@^^SS^^SS@@U@@R@e;@@@@ఐ%empty^^SS^^SS@@@O@eO@e@@A^[RR@@@@^ZR}R @@@ࠠ"m'^`S"S,^`S"S.@@@1w@@@eO@e0^^^^^^^^@@@^@@@ఐ*$desc^`S"S7^`S"S;@@@U@@P@e@e@(cstr_tag^`S"S<^`S"SD@U@@U@@@e!@Ġ,Cstr_unboxed^aSJST^aSJS`@U8@@@@U@@R@e1@@1@@ภ&Return_ bSdSn_ bSdSt@8@H0@@@CE@@A@G@@@D@@@AO@e>@Ġ-Cstr_constant_cSuS_cSuS@8-Cstr_constantUY@U@@@@A@AC@A\WW\WX@@@\6@_/cSuS_0cSuS@@@@T@eb@@@@@V"@@T@ef@@f@Ġ*Cstr_block_@cSuS_AcSuS@8*Cstr_blockU{@U@@@@AAAC@A] XFXH] XFX[@@@] 7@_QcSuS_RcSuS@@@@T@e@@@@@VD@@T@e@@@@= @@VH@@S@e@Ġ.Cstr_extension_fcSuS_gcSuS@R@_kcSuS_lcSuS@@T@@S@e@@@P@@S@e@@@ @@Vc@@S@e@@@@\@@Vg@@R@e@@ภ%Guard_dSS_dSS@+@@@O@eO@e@@A_`S"S1@@@@_`S"S( @@ఐ$join_fSS_fSS@@@@@@N@e@@N@el@@N@e@N@e0________@@@_@@@@ภ P_gSS_iTT!AU͠ఐޠ2access_constructor _gSS@ @@@@O@e@ภ d_hSSAUఐ砐"<<_hST_hST@@@@@@P@f @@@P@f@@P@f@P@f@P@f:@@ఐS$list'_hST@J)@@@@w@@R@f\R@f-1@@R@f/@R@f.@$ @@R@f,@@R@f+@R@f*@R@f)]@@ఐ*expression` hST`hST @-@@@@@S@fY\@@S@fX@S@fWr@@ఐ^%exprs`"hST`#hST@:@@Q:@@S@fDS@f_S@f]@@i @@A@@Q@fe@@ఐq"m'`;hST`<hST@@@2@@Q@fg@@}@@,@@O@fp@ภ `JiTT AVL@A@_ӠE@@O@eO@eO@e@@O@eO@fw@@A@_ @@O@eO@e@@`afSS@@^@@O@eO@e@@@@2@@N@e@@@@@@N@f~@Ġ,Texp_variant`zjT"T(`{jT"T4@Q @`jT"T6`jT"T7@@Q"@@P@XM0````````@@@@ࠠ"eo`jT"T9`jT"T;@@@Q*[@@@XO@@@XN@@@`jT"T<@@Z@@P@XP@@@@ఐ"<<`pTT`pTT@_@@@@@N@f@@@N@f@@N@f@N@f@N@f0````````@.(@)@`@@@@ఐ!&option`pTT`pTT@ @@@@P@@P@fP@f!@@P@f@P@f@! @@P@f!s@@P@f@P@f@P@f(@@ఐs*expression`pTT`pTT@@@@n@@Q@f5@@Q@f@Q@f=@@ఐo"eo`pTT`pTT@G@@!:@@Q@fQ@fQ@fR@@C @@!@@O@fV@@ภ%GuardapTTapTT@,@@@3@@O@fe@@V@@N@fh@Ġ+Texp_recorda&qTTa'qTT@Vঠ&fieldsa1qTTa2qTT@,VV@@@XWV@@,V{Vz@AV`AVt@Vq,VnVm@BVaAVe@VbVaAV@Vࠠ"esa@qTTaAqTU@@@VV@@@XeV@@@Xf@@Xd@@@Xc0aNaMaMaNaNaNaNaN@n@@@.representationaXrUU0aYrUU>@,VV@@@X[V@A,VV@@VAV@V,VV@BVAV@VVAV@Vࠠ#repagrUUAahrUUD@@@V@@@Xj@3extended_expressionasqTUatqTU@,VV@@@XYV@B,VV@@VAV@V,VV@AVAV@VVAV@Vࠠ"eoaqTUaqTU@@@V\@@@Xp@@@Xo;@@@aqTTarUUF@@V@@P@XrP@XqC@@@o@@[@@P@XsG@@G@@@ࠠ*field_modeasUJUVasUJU`@@@4O@@@gO@f0aaaaaaaa@rl@m@aMG@H@a4.@/@a@@@ఐV#repasUJUiasUJUl@@@W@@@f@Ġ,Record_floatatUrU~atUrU@8,Record_floatVd@@@ABC@A_EE_EE"@@@_@@  @@W@@R@f0@@0@@ภ+DereferenceatUrUatUrU@ *@@@>O@g;@Ġ.Record_unboxedauUUauUU@V@auUUauUU@@V@@R@fO@@@ @@W;@@R@fS@@S@@ภ&ReturnbuUUbuUU@@@@cO@gO@g`@Ġ.Record_regularbvUUbvUU@8.Record_regularV@@@@BC@A_DD_DD@@@_@@  @@Wc@@T@g{@@{@Ġ.Record_inlinedb-vUUb.vUU@8.Record_inlinedV@X@@@c@AABC@A_EE_EE@@@` Ƞ@b>vUUb?vUU@@@@T@g@@@@@W@@T@g@@@@0 @@W@@S@g @Ġ0Record_extensionbSwUUbTwUV @80Record_extensionV@?!t@@@d@ABBC@A`!EE`"EF@@@`5ɠ@bfwUV bgwUV @@@@S@g @@@@@W@@S@g@@@@X @@W@@R@g@@ภ%GuardbywUVbzwUV@.@@@O@gO@g@@AbsUJUc@@@@bsUJUR @@@ࠠ%fieldbyV"V.byV"V3@@@@@@g*W@@@g3O@g+@@g,O@g'@@@gVO@g(@@g)O@g&0bbbbbbbb@ @@b@@@@`ࠠ&_labelbyV"V5byV"V;@@@"0bbbbbbbb@3byV"V*b{V{V@@@@ࠠ)field_defbyV"V=byV"VF@@@/@@byV"V4byV"VG@@86@Q@g-@@ఐ)field_defbyV"VPbyV"VY@B@@b@@D0bbbbbbbb@'/K@*@b!@@@Ġ$KeptbzV_VkbzV_Vo@8$KeptW@]!)type_expr@@@ d@A@@B@A]O(** ]P(**9@@@]@czV_VpczV_Vq@@@@R@g50cccccccc@'@@@@@@@m@@m@@ఐu%emptyczV_VuczV_Vz@@@tO@g@O@g?@Ġ*Overriddenc"{V{Vc#{V{V@X@c'{V{Vc({V{V@@XX@@R@g;@@R@g:O@ࠠ!ec7{V{Vc8{V{V@@@^4@@@g<\@@@c>{V{V@@^@@^@@ఐՠ*expressioncH{V{VcI{V{V@h@@@@@P@gG@@P@gF@P@gE0cPcOcOcPcPcPcPcP@s"@@cl@@@@ఐ*!eca{V{V@ @@@@Q@gWQ@g]Q@g\@@#@@O@gC@@AcnyV"VJ@@YO@g1h@@AA@@@@hM0cpcococpcpcpcpcp@@@@@@ఐ$joinc}}VVc~}VV@Ѱ@@@|u@@N@hR@@N@hQR@@N@hP@N@hO0cccccccc@@@c@@@@ภ6c~VVcWW"AYఐ"<<c~VVc~VV@^@@@@@P@h|@@@P@h{@@P@hz@P@hy@P@hx'@@ఐ!2%array(c~VV@*@@@@Y"@@R@hR@hƠY@@R@h@R@hR@h!@@R@h@R@h@! @@R@h @@R@h@R@h@R@hS@@ఐ[%fieldc~VVc~VV@]@@@'YA@@S@h@S@h<@@S@h@S@hl@@ఐ "esd~VVd~VV@V@@!=G@@S@hS@hS@h@@w @@!-@@Q@h@@ఐy*field_moded~VVd~VV@t@@6@@Q@h@@@@ @@O@h@ภɰd*VVAZEఐL"<<d5VW d6VW @@@@G@@P@h@9@@P@h,@@P@h@P@h@P@h@@ఐ%+&option'dQVV@#)@@@@@@R@iQR@i"%@@R@i$@R@i#@% @@R@i!$@@R@i @R@i@R@i@@ఐ*expressiondrVVdsVW@@@@@@S@iN@@S@iM@S@iL@@ఐ"eodVWdVW @װ@@%=:@@S@i9S@iTS@iR@@i @@%-@@Q@iZ @@ภ+DereferencedVW dVW@@@@7J@@Q@ia@@|@@@@O@ii@ภ%dWW!AZ@A@d7@@O@hdO@hpO@h@@O@hO@ip1@@&A@dE @@O@hqO@h8@@d}VV.@@ @@O@hcO@ho@@@P5@@@@N@hbD@9@@*@O:@@N@iw*@Ġ/Texp_ifthenelsedW#W)dW#W8@RӠࠠ$cond dW#W:dW#W>@@@_@@@X{0dddddddd@ @@@ࠠ$ifso dW#W@dW#WD@@@_@@@X|@ࠠ%ifnot eW#WFeW#WK@@@R`@@@X~@@@X}@@@/e W#WL@@_q@@P@X$@@$@@ఐ$joineXVX\eXVX`@n@@@@@N@i}@@N@i|@@N@i{@N@iz0e&e%e%e&e&e&e&e&@IJD@E@eD>8@9@eF3-@.@eH@@@@ภٰe:XcXke;XXA[Vఐ]"<<eFXcX{eGXcX}@@@@X@@P@i@J@@P@i=@@P@i@P@i@P@i-@@ఐ*expression(ebXcXu@*@@@@@R@i@@R@i@R@iC@@ఐ$condevXcXvewXcXz@K@@@@S@iS@iS@iW@@G @@@@Q@i[@@ภ+DereferenceeXcX~eXcX@@@@88@@Q@ij@@Z@@~@@O@in@ภ;eXXbA[ఐ4*expression eXX@ư @@@.@@P@j@@P@j@P@j@@ఐƠ$ifsoeXXeXX@@@E@@Q@jQ@jQ@j@@* @@ @@O@j#@ภmeXXA[ఐ&&option eXX@%+ @@@@d@@P@jgP@j8&@@P@j:@P@j9@& @@P@j7&@@P@j6@P@j5@P@j4@@ఐ*expressioneXXeXX@@@@@@Q@jdI@@Q@jc@Q@jb@@ఐ %ifnotfXXfXX@@@&Š:@@Q@jOQ@jjQ@jh@@M @@&@@O@jp@ภf#XXA\%@A@e @@O@iO@iO@iO@j,@@O@j-O@jw @@gA@e@@O@iO@j+@@A@eà@@O@iO@i@@fCXVXa @@@@@O@iO@i!@@1@@N@j~$@Ġ-Texp_setfieldfWXXfXXX@VĠࠠ"e1 f`XXfaXX@@@a]@@@X0fcfbfbfcfcfcfcfc@@@@@fjXXfkXX@@VРV@@P@X@@P@X @@fvXXfwXX@@V@@P@X@ࠠ"e2 fXXfXX@@@a@@@X"@@@2fXX@@`@@P@X'@@'@@ఐ$joinfZ3Z9fZ3Z=@@@@@@N@j@@N@jk@@N@j@N@j0ffffffff@LF@G@f,&@'@f@@@@ภRfZ@ZHfZZA\Ϡఐ֠"<<fZ@ZVfZ@ZX@z@@@@@P@j@@@P@j@@P@j@P@j@P@j*@@ఐh*expression(fZ@ZR@*@@@b@@R@j)@@R@j@R@j@@@ఐ"e1fZ@ZSfZ@ZU@I@@y@@S@jS@jS@jT@@G @@A@@Q@jX@@ภ+DereferencegZ@ZYgZ@Zd@P@@@9@@Q@jg@@Z@@@@O@jk@ภgZfZnbA]0ఐ7"<<g ZfZ|g!ZfZ~@۰@@@2@@P@k@$@@P@k@@P@k@P@k @P@k @@ఐɠ*expression'g<ZfZx@[)@@@@@R@k2@@R@k1@R@k0@@ఐΠ"e2gPZfZygQZfZ{@@@@@S@kBS@kHS@kG@@F @@@@Q@kN@@ภ+DereferenceggZfZghZfZ@@@@:@@Q@kU@@Y@@X@@O@k]@ภgvZZA]x@A@fq@@O@jO@jO@k@@O@kO@kd@@qA@g  @@O@jO@k@@gZ3Z>@@@@O@jO@j@@@@FN@kk@Ġ-Texp_sequencegZZgZZ@_pࠠ"e1gZZgZZ@@@b@@@X0gggggggg@@@@ࠠ"e2gZZgZZ@@@b@@@X@@@gZZ@@b#@@P@X@@@@ఐР$joing[x[~g[x[@ @@@ˠ@@N@kq@@N@kp@@N@ko@N@kn0gggggggg@82@3@g,&@'@g@@@@ภg[[g[[A^ఐ "<<g[[g[[@@@@@@P@k@@@P@k@@P@k@P@k@P@k*@@ఐ*expression(h[[@0*@@@@@R@k_@@R@k@R@k@@@ఐ{"e1h%[[h&[[@I@@@@S@kS@kS@kT@@G @@w@@Q@kX@@ภ%Guardh<[[h=[[@3@@@:@@Q@kg@@Z@@-@@O@kk@ภhK[[bA^fఐ㠐*expression hV[[@u @@@@@P@k@@P@k@P@k@@ఐ"e2hj[[hk[[@@@@@Q@l Q@lQ@l@@* @@@@O@l@ภh}[[A^@A@h x@@O@kO@kO@k@@O@kO@l@@BA@h @@O@kO@k@@h[x[@@ @@O@kO@k@@@@MN@l%@Ġ*Texp_whileh[[h[[@XŠࠠ$condh[[h[[@@@c@@@X0hhhhhhhh@@@@ࠠ$bodyh[[h[[@@@c@@@X@@@h[[@@c*@@P@X@@@@ఐ נ$joinh\\h\\@'@@@ Ҡ @@N@l+@@N@l* @@N@l)@N@l(0hhhhhhhh@82@3@h,&@'@h@@@@ภh\\h\\A_ ఐ"<<h\\h\\@@@@@@P@lU@@@P@lT@@P@lS@P@lR@P@lQ*@@ఐ*expression(i\\@7*@@@@@R@lwf@@R@lv@R@lu@@@ఐ{$condi,\\i-\\@I@@@@S@lS@lS@lT@@G @@~@@Q@lX@@ภ+DereferenceiC\\iD\\@@@@;@@Q@lg@@Z@@4@@O@lk@ภiR\\bA_mఐt"<<i]\\i^\\@@@@o@@P@l@a@@P@lT@@P@l@P@l@P@l@@ఐ*expression'iy\\@)@@@@@R@l@@R@l@R@l@@ఐΠ$bodyi\\i\\@@@@@S@lS@lS@l@@F @@@@Q@l@@ภ%Guardi\\i\\@51@@@'@@ఐӠ*expression(jF]]@e*@@@@@R@md@@R@mc@R@mb=@@ఐs"e1jZ]]j[]]@G@@@@S@mtS@mzS@myQ@@G @@@@Q@mU@@ภ+Dereferencejq]]jr]]@@@@=@@Q@md@@Z@@ b@@O@mh@ภj]]bA`@cA@j "y@@O@m*O@m6@@O@m7O@mz@@j]]p@@" @@O@m)O@m5@@w@@GN@m@Ġ*Texp_fieldj]]j]]@X'ࠠ!ej]]j]]@@@e@@@X0jjjjjjjj@@@@@j]]j]]@@X3X1@@P@X@@P@X @@j]]j]]@@X2@@P@X@@@%j]]@@e+@@P@X@@@@ఐ 렐"<<j^C^Vj^C^X@@@@ @@N@m@ @@N@m @@N@m@N@m@N@m0jjjjjjjj@?9@:@j@@@@ఐ*expressionj^C^Ij^C^S@@@@|@@P@mC@@P@m@P@m@@ఐ^!ek ^C^Tk ^C^U@%@@@@Q@mQ@mQ@m/@@  @@[@@O@m3@@ภ+Dereferencek ^C^Yk!^C^d@j@@@=@@O@mB@@3@@N@mE@Ġ/Texp_setinstvark3^e^kk4^e^z@["ࠠ#pthk<^e^|k=^e^@@@[)@@@X0k?k>k>k?k?k?k?k?@_@@@@kF^e^kG^e^@@[+@@P@X @@kN^e^kO^e^@@[,[*@@P@X@@P@X@ࠠ!ek^^e^k_^e^@@@f[@@@X"@@@2ke^e^@@e@@P@X'@@'@@ఐ#v$joinkr^^ks^^@!ư@@@#q#j@@N@m@@N@m#G@@N@m@N@m0k~k}k}k~k~k~k~k~@LF@G@k,&@'@k@@@@ภ.k^_k_D_KAaఐ!"<<k^_k^_@ V@@@!@@P@n"@!@@P@n!!@@P@n @P@n@P@n*@@ఐP$path(k^_ @S*@@@O@@R@nDJ@@R@nC@R@nB@@@ఐ#pthk^_ k^_@I@@f@@S@nTS@nZS@nYT@@G @@b@@Q@n`X@@ภ+Dereferencek^_k^_@,@@@>@@Q@ngg@@Z@@!@@O@nok@ภk__'bAb ఐ""<<k__4k__6@ @@@"@@P@n@"@@P@n!@@P@n@P@n@P@n@@ఐ*expression'l__1@7)@@@@@R@nf@@R@n@R@n@@ఐΠ!el,__2l-__3@@@@@S@nS@nS@n@@F @@~@@Q@n@@ภ+DereferencelC__7lD__B@@@@>@@Q@n@@Y@@"4@@O@n@ภɰlR_D_JAbT@A@k۠$M@@O@n O@nO@nx@@O@nyO@n@@qA@k @@O@nO@nw@@li^^@@$f@@O@n O@n@@@@"N@n@Ġ1Texp_letexceptionl}_L_Rl~_L_c@dঠ&ext_idl_L_fl_L_lA,&ext_idd#@@@ Cd!t@@@ <@@ ,(ext_name gf#locd@@@ >@@@ =@A @AfT*T.fT*TC@@g,(ext_typef5extension_constructor@@@ ?@B@AgTDTHgTDTo@@g,(ext_kind(g:extension_constructor_kind@@@ @@C$@Ag TpTtg TpT@@g,'ext_loc3g!t@@@ A@D0@AgTTgTT@@g,.ext_attributes?g@@@ B@E9@Ag!TTg"TT@@g@Ag%TTg&TT)@@gࠠSTSR@@L@@@X0llllllll@@@@@@l_L_el_L_m@@d{@@P@XP@X @ࠠ!el_L_ol_L_p@@@g@@@X@@@xl_L_q@@gY@@P@X@@@@ఐ'ߠ)remove_idm__m__@&`@@@'@@N@n@'@@N@n'@@N@n@N@n@N@n0mmmmmmmm@1=;@<@m,-'@(@m.@@@@ఐG&ext_idm#__m$__@@@'@@O@nO@oO@o@@ఐ Ơ*expressionm9__m:__@ Y@@@ @@P@o  @@P@o @P@o2@@ఐ`!emN_`mO_`@9@@ @@Q@oQ@o Q@oF@@mY__mZ_`@@ @@O@o&L@@]@@N@o.O@Ġ+Texp_assertmk`` ml``@Zࠠ!emt``mu``@@@hq@@@X0mwmvmvmwmwmwmwmw@@@@@@@@g@@P@X@@@@ఐ#"<<m``m``@"C@@@#@@N@o5@#@@N@o4#@@N@o3@N@o2@N@o10mmmmmmmm@*$@%@m@@@@ఐ!5*expressionm``m``@ Ȱ@@@!0@@P@oW @@P@oV@P@oU@@ఐI!em``m``@%@@!G@@Q@ogQ@omQ@ol/@@  @@!@@O@os3@@ภ+Dereferencem``m``@@@@@@@O@ozB@@3@@N@oE@Ġ)Texp_packm``m``@]ࠠ$mexpm``m`a@@@f@@@X0mmmmmmmm@@@@@@@@h[@@P@X@@@@ఐ &modexpna]acna]ai@ @@@ @@N@o @@N@o@N@o0n n n n n n n n @-%@ @n(@@@@ఐ-$mexpna]ajna]an@@@ @@O@oO@oO@o@@$ @@N@o@Ġ+Texp_objectn4aoaun5aoa@]ࠠ(clsstrctn=aoan>aoa@@@]@@@X0n@n?n?n@n@n@n@n@@`@@@@nGaoanHaoa@@]]@@P@X@@P@X @@@nQaoa@@h@@P@X@@@@ఐ!S/class_structuren^aan_aa@!W@@@!S@@N@o!P@@N@o@N@o0nfnenenfnfnfnfnf@2,@-@n@@@@ఐ:(clsstrctnwaanxaa@@@!n@@O@oO@oO@o@@$ @@3N@o@Ġ(Texp_trynaanaa@[ࠠ!enaanaa@@@i@@@X0nnnnnnnn@@@@ࠠ%casesnaanaa@@@[]]@@@X@@@X@@@X@@@&naa@@i@@P@X@@@@@ࠠ(case_envnccncc@@@@ a@@o@@@oO@o@ [@@@oO@o W@@@oO@o@@oO@o@@oO@o0nnnnnnnn@NH@I@nB<@=@n@@@@!cnccncc@@@)0nnnnnnnn@5ncc ncc.@@@@@@!moccocc@@@10oooooooo@ ?@@o@@@@డm#fstocc occ#@@!a@q!b@s@@ @@'%field0AAZ@@@Z.vvZ.vv@@Z@@@XO@oؠ @@O@oO@o@O@o@O@o0o6o5o5o6o6o6o6o6@5Ah@8@oR@@@@ఐ ࠐ$caseoIcc%oJcc)@ @@@ @@P@o@ @@P@o @@P@o @@P@o@P@o@P@o@P@o(@@ఐ!cokcc*olcc+@f@@5@@ఐz!moxcc,oycc-@?@@B@@o|cc$@@SQ@P@oP@oP@oL@@t@@O@oO@@AA@O@o0oooooooo@@@@@AA@@@@p0oooooooo@@@@@@ఐ'$joinoc2c8oc2c<@%@@@''@@N@p@@N@p'n@@N@p@N@p0oooooooo@@@o@@@@ภRoc?cGocrcyAeϠఐ#L*expression oc?cQ@"ް@@@#F@@P@p0# @@P@p/@P@p.!@@ఐ<:@Q@p@@ఐ$*expressionq eeq ee@$*@@@$@@O@p$Y@@O@p@O@p0qqqqqqqq@2%Q@ @q.@@@@ఐ-#argq#ee;@ <@@^@@=@@ZO@p@@A/@A@@o_@@p0q(q'q'q(q(q(q(q(@G@@@@E@ఐ)9$joinq5eeq6ee@'@@@)4)-@@N@p@@N@p) @@N@p@N@p0qAq@q@qAqAqAqAqA@t@@q]@@@@ภqOeeqPffAgkఐ'r"<<q[eeq\ee@&@@@'m@@P@q @'_@@P@q'R@@P@q@P@q@P@q'@@ఐ$$path(qwee@$*@@@$@@R@q+$ @@R@q*@R@q)=@@ఐ #pthqeeqee@@@$&@@S@q;S@qAS@q@Q@@G @@$"@@Q@qGU@@ภ+Dereferenceqeeqee@@@@DM@@Q@qNd@@Z@@'@@O@qVh@ภPqeebAg̠ఐ'Ӡ"<<qefqef@&w@@@'@@P@qk@'@@P@qj'@@P@qi@P@qh@P@qg@@ఐ1?$list'qee@/6)@@@@^@@R@qR@q^^@@R@q@@R@qR@q%v@@R@q@R@qR@q10@@R@q@R@q@1# @@R@q1@@R@q@R@q@R@q@@ఐW%fieldr eer ee@Ȱ@@@1,%@@S@q@S@q%`@@S@q@S@q@@ఐ&fieldsr&eer'ef@R@@1UR@@S@qS@qS@q@@ @@1E@@Q@q@@ภ+Dereferencer>efr?ef@@@@D@@Q@q@@@@(/@@O@q@ภİrMffAhO@A@q֠*H@@O@pO@pO@q_@@O@q`O@q@@ A@q @@O@pO@q^@@rdee@@*a@@O@pO@p'@@7@@*5@@N@p+@ @@#!N@q@Ġ-Texp_functionr| ff r} ff-@aঠ%casesr ff0r ff5A,aa@@@Ya@B,aa@@a~Aa@a,aa@AaAa@a,aa@CaAa@aaAa@aࠠ@@aaa@@@Y@@@Y@@@Y0rrrrrrrr@#@@@@@r ff.r ff7@@a@@P@YP@Y @@@/@@m@@P@Y @@ @@@ࠠ(case_envrgygrgyg@@@@$WD@r@@@rO@q@$Q@@@rO@q$M@@@rO@q@@qO@q@@qO@q0rrrrrrrr@#CA@B@r@@@@!crgygrgyg@@@&0rrrrrrrr@2rgygrgyg@@@@@@!mrgygrgyg@@@.0rrrrrrrr@ <@@s@@@@డq#fstsgygsgyg@@@@>O@q$@@O@rO@r@O@q@O@q0ssssssss@*N@!@s.@@@@ఐ$$cases%gygs&gyg@$@@@$i@@P@r @$@@P@r $@@P@r $@@P@r @P@r @P@r@P@r(@@ఐi!csGgygsHgyg@O@@5@@ఐc!msTgygsUgyg@?@@B@@sXgygo@@SQ@P@rP@r$P@rL@@]x@@O@qO@@Ap{A@O@q0sdscscsdsdsdsdsd@o@@@@AA@@@@r)0shsgsgshshshshsh@@@@@@ఐ)"<<suggsvgg@(0@@@)@@N@r/@)y@@N@r.)l@@N@r-@N@r,@N@r+0ssssssss@@@s@@@@ఐ2$listsggsgg@0@@@@%4b@@P@rP@r{@@P@rP@rS2@@P@rU@P@rT@2Ԡ@@P@rR2@@P@rQ@P@rP@P@rO.@@ఐ(case_envsggsgg@8@@@%X$@@Q@r@%M@@Q@r%G@@Q@r~@Q@r}@Q@r|I@@ఐA%casessggsgg@@@3F@@Q@rjQ@rQ@r^@@O @@2@@O@rb@@ภ%Delaysggsgg@8UAE@@@AE@@AU@@@U=@@@F@@O@rs@@d@@)@@N@rBw@ @@$N@r+@Ġ)Texp_lazyt ggt gg@bݠࠠ!e tggtgg@@@o@@@Y0tttttttt@%5@@@@@@@n}@@P@Y@@@@@ࠠ)lazy_modet'hdhnt(hdhw@@@F@@@sO@r0t,t+t+t,t,t,t,t,@%M#@@tH@@@డ6classify_lazy_argument'TypeopttAhdhtBhdh@@*expression@@@`Р%Other@4Constant_or_function@=Float_that_cannot_be_shortcut@*IdentifierР%Other@-Forward_value@@@@`A@@@`@@@`A@@@`@@`@bzzfj@@P10@@@.@@P@rР+@*@)@(Р'@&@@@P@rA@@P@r@@P@rA@@P@r@P@rc@@ఐ!ethdhthdh@m@@]@@Q@rQ@rQ@rw@@f @@Р[@Z@Y@XРW@V@@@@rA@@@r@@@rA@@@r@4Constant_or_function@Р@@~@}Р|@{@@@S@rA@@S@r@@S@rA@@thhthh@@S@r@@@*Identifier@thhthh@@Р@@@@S@rA@@S@r@Р@@@Р@@@@S@rA@@S@r@@S@rA@@uhh'@@S@r@@@@7*@@РӐ@Ґ@ѐ@АРϐ@ΐ@@@R@rA@@R@r@@R@rA@@R@r @=Float_that_cannot_be_shortcut@Р@@@Р@@@@R@rA@@R@r@@R@rA@@uZhhu[hi@@R@r/@@/@@w@@Р@@@Р@@@@Q@rA@@Q@r@@Q@rA@@Q@rK@@ภ&Returnui iui i@w@@@YO@sV@%Other@Р?@>@=@<Р;@:@@@Q@s A@@Q@s @@Q@s A@@u ii%u ii+@@Q@s |@@|@@ภ%Delayu!i/i9u!i/i>@@@@O@sO@s@@Auhdhz@@@@uhdhj @@ఐ+ܠ"<<u#iHi[u#iHi]@*@@@+@@N@s%@+@@N@s$+@@N@s#@N@s"@N@s!0uuuuuuuu@@@u@@@@ఐ)r*expressionu#iHiNu#iHiX@)@@@)m@@P@sG)4@@P@sF@P@sE@@ఐ蠐!eu#iHiYu#iHiZ@˰@@)@@Q@sWQ@s]Q@s\/@@  @@)L@@O@sc3@@ఐ렐)lazy_modev#iHi^v#iHig@=@@H@@O@seC@@4@@,@@N@s8G@b @@&N@so@Ġ*Texp_letopv)$ihinv*$ihix@bঠ$let_v4$ihiyv5$ihi}A,bb@@@Y!b@@,bb@AbcAb@b,bb@BbdAb@b,b|b{@CbeAbt@bq,bnbm@DbfAbj@bgbfAb@bࠠ!@@b@@@Y*0vDvCvCvDvDvDvDvD@'d@@@$andsvN$ihivO$ihiA,bb@@@Y#b@A,bb@@b}Ab@b,bb@Bb~Ab@b,bb@CbAb@b,bb@DbAb@bbAb@bࠠ"@@bb@@@Y0@@@Y/@$bodyvk$ihivl$ihiA,bb@@@Y%b@C,bb@@bAb@b,bb@AbAb@b,bb@BbAb@b,bb@DbAb@bbAb@bࠠ#@@ee@@@Y6@@@Y5;@@AYv$ihi@@b@@P@Y8P@Y7B@@@a@@p@@P@Y9F@@F@@@ࠠ(case_envv%iiv%ii@@@@(6Hb@s@@@sO@sr@(0@@@sO@sx(,@@@sO@sy@@szO@ss@@stO@sq0vvvvvvvv@'vt@u@v^\@]@vCA@B@v@@@@!cv%iiv%ii@@@,0vvvvvvvv@8v%iiv%ii@@@@@@!mv%iiv%ii@@@40vvvvvvvv@ B@@v @@@@డu#fstv%iiv%ii@ذ@@@DO@s(j@@O@sO@s@O@s@O@s0vvvvvvvv@*T@!@w @@@@ఐ($casew %iiw %ii@(@@@(o@@P@s@(@@P@s(@@P@s(@@P@s@P@s@P@s@P@s(@@ఐi!cw,%iiw-%ii@O@@5@@ఐc!mw9%iiw:%ii@?@@B@@w=%iio@@SQ@P@sP@sP@sL@@]x@@O@s}O@@Ap{A@O@sw0wIwHwHwIwIwIwIwI@o@@@@AA@@@@s0wMwLwLwMwMwMwMwM@@@@@@ఐ/^$joinwZ&iiw[&ii@-@@@/Y/R@@N@s@@N@s//@@N@s@N@s0wfwewewfwfwfwfwf@@@w @@@@ภ#wt'iiwu)j'j0Amఐ-"<<w'iiw'ii@,;@@@-@@P@s@-@@P@s-w@@P@s@P@s@P@s'@@ఐ7$list(w'ii@4*@@@@*@@R@t-R@s6@@R@t@R@s@6Ԡ @@R@s6@@R@s@R@s@R@sJ@@ఐ*ɠ*binding_opw'iiw'ii@*Ͱ@@@*@@S@t**@@S@t)@S@t(_@@ภ$/w'iiw'ii@mఐ$let_w'iiw'ii@$@@:S@t5u@ఐ$andsw'iiw'ii@/@@wrNT@t/@@S@t4S@t8S@t6@@w'iiw'ii@@7 Y@@S@tS@t3@@@@7@@Q@t>@@ภ+Dereferencex 'iix 'ij@#S@@@J@@Q@tE@@@@-@@O@tM@ภ#x(jjAn3ఐ.:"<<x#(jjx$(jj @,ް@@@.5@@P@tb@.'@@P@ta.@@P@t`@P@t_@P@t^@@ఐ(case_env'x?(jj@հ)@@@)٠gO@@R@tR@t@@R@t@)@@R@t)@@R@t@R@t@R@t@@ఐ⠐$bodyx^(jjx_(jj@@@)"@@S@tS@tS@t@@R @@@)@@Q@t)@@Q@t@Q@t @@ภ%Delayx{(jj!x|(jj&@@@@K&@@Q@t@@j@@.l@@O@t@ภ#x)j'j/An@A@x0@@O@sO@sO@tV@@O@tWO@t0@@%A@x! @@O@sO@tU7@@x&ii-@@0@@O@sO@s?@@O4@@0r@@N@sC@8@@)^N@t@Ġ0Texp_unreachablex*j1j7x*j1jG@gh@@@@s@@P@Y=x@@x@@ఐ/*%emptyx/jjx/jj@.ǰ@@)zN@t@Ġ:Texp_extension_constructorx0jjx0jj@gkࠠ$_lid$x0jjx0jj@@@grgp@@@YE@@@YD0xxxxxxxx@*@@@ࠠ#pth%x0jjx0jj@@@gw@@@YF@@@"x0jj@@s[@@P@YG@@@@ఐ/"<<y1jjy1jj@-@@@/@@N@t@/@@N@t.@@N@t@N@t@N@t0yyyyyyyy@*3=7@8@y. -'@(@y0 @@@@ఐ+$pathy'1jjy(1jj@+İ@@@+@@P@t+@@P@t@P@t@@ఐL#pthy<1jjy=1jj@%@@+@@Q@uQ@uQ@u2@@  @@+@@O@u6@@ภ+DereferenceyS1jjyT1jj@$@@@K@@O@uE@@3@@* N@uH@Ġ)Texp_openyf2jjyg2jj@qࠠ"od&yo2jjyp2jj@@@q@@@YM*@ࠠ!e'y|2jjy}2jj@@@ty@@@YN*@@@y2jj@@s@@P@YO*@@*@@ఐ.a">>y3jky3jk@-@@@.\@@N@u%@.A@@N@u$.7@@N@u#@N@u"@N@u!0yyyyyyyy@*82@3@y-'@(@y@@@@ఐ+ߠ0open_declarationy3jjy3jk@+@@@+@@P@uI+@@P@uH@P@uG@@ఐY"ody3jky3jk@'@@+@@Q@u^Q@uiQ@uh2@@  @@+@@O@uq6@@ఐ-o*expressiony3jky3jk@-@@@-j@@P@u{-1@@P@uz@P@uyM@@ఐ{!ey3jk y3jk!@T@@-@@Q@uQ@uQ@ua@@  @@-I@@O@ue@@S@@*N@uh@@Az FG @@*@@M@M@0z z z z z z z z @+,@@@@AzFG@б@г-M-@-O@@@WS0zzzzzzzz@-M@@-@г*-~@*@@@WT-x@@ @@WU-w@--@@@-sM@WV @@z(FF1@-=-=-+-*@-,Ш@б@г-=)Typedtree-?z=5k#k4z>5k#kH@@-F@@@U_0z?z>z>z?z?z?z?z?@-@@@@г;Ġ)term_judgzK5k#kLzL5k#kU@@ @@@U`@@@@@Ua@@@@Ub A@-T A@@@-c@@@V-`@@@V@@V@@V @@#bopzl6kXk^zm6kXka@@@y -v@@N@0zqzpzpzqzqzqzqzq@-@@@@ఐ2$joinz~7kekiz7kekm@0Ұ@@@2}2v@@M@@@M@2S@@M@@M@0zzzzzzzz@-+!@@@@%@z@@@@ภ&:z7kekoz7kekApఐ-@$path z7keks@-C@@@-?@@O@-:@@O@@O@$@@ఐU#bopz7kektz7kekw@0@@g*@@P@,@*8@+bop_op_pathz7kekxz7kek@,+bop_op_pathg5@@@ pur!t@@@ i@@ ,+bop_op_name u#locs@@@ k@@@ j@A @Au6.**u7.**@@u,*bop_op_valu1value_description@@@ l@B@AuB/**uC/**@@u,+bop_op_type(u!)type_expr@@@ m@C%@AuN0**uO0*+@@u,'bop_exp4u@@@ n@D.@AuW3+x+|uX3+x+@@u,'bop_loc=ue!t@@@ o@E:@Auc4++ud4++@@v @Aug-**uh-**@@v \O@@-@@P@$P@-P@+@@W@@-@@N@3@ภ&Ȱ{)7kekAqDఐ.*expression {47kek@.S @@@.@@O@F.@@O@E@O@D@@ఐ⠐#bop{J7kek{K7kek@@@g@@P@^@\@'bop_exp{V7kek{W7kek@Y@@.@@P@VP@_P@]@@8 @@.@@N@e@ภ%Aqj@A@z3c@@N@N@ N@<@@N@=N@l@@OA@z @@N@ N@;@@{7kekn@@3|@@N@N@ @@ @@= @@M@tM@s@@A{6kXkZ@б@г%^@'@@@0{{{{{{{{@.@@W@гU@@@@O@@ @@N@.@@@JM@ @@{5k#k# @....@.Ш@б@г.)Typedtree.{9kk{9kk@@.@@@Uh0{{{{{{{{@/3@@@@г=A)term_judg{9kk{9kk@@ @@@Ui@@@@@Uj@@@@Uk A@. A@@@.@@@W.@@@W@@W@@W @@"cs{:kk{:kk@@@z.@@N@0{{{{{{{{@/"@@@@ఐ;b$list{:kk{:kk@9Z@@@@.@@M@M@;A@@M@@M@@;4 @@M@;#@@M@@M@@M@0||||||||@/E4*@@@@.@|/@@@@ఐ/+class_field|$:kk|%:kk@/@@@/@@N@.@@N@@N@@@ఐV"cs|;:kk|<:kk@(@@k@@N@@0@+cstr_fields|G:kk|H:kl@,+cstr_fieldsk@@@ w wL+class_field@@@ @@@ @A,)cstr_selfgA@@@ @@@AvS/ /vS/ /!@@wW,)cstr_typev/class_signature@@@ @B@AvU/D/GvU/D/h@@wc,*cstr_meths%v%Meths!tt!t@@@ @@@ @C'@AvV/i/lvV/i/@@wx@AvT/"/%vT/"/C@@w|M@@@;@@N@N@N@}@@I@@>@@M@M@@@A|:kkQ@б@г@@@@y0||||||||@/@@@г@@@@z@@ @@{@/d@@@M@| @@|9kkh@////@/Ш@б@г/)Typedtree/|<l l|<l l1@@/@@@Uq0||||||||@0=@@@@г>K)term_judg|<l l5|<l l>@@ @@@Ur@@@@@Us@@@@Ut A@/ A@@@/@@@W/@@@W@@W@@W @@"cf|=lAlG|=lAlI@@@{/@@N@0||||||||@0,@@@@ఐ"cf}=lAlS}=lAlU@@@@@@}#@@@@N@@0}}}}}}}}@0F+ @@@'cf_desc}=lAlV}=lAl]@,'cf_desc@@@ x0class_field_desc@@@ @@ ,&cf_loc w!t@@@ @A @Aw\//w\//@@x(,-cf_attributeswm@@@ @B@Aw]//w]/0@@x1@Aw[//w[//@@x5:&@@ @@@0@Ġ+Tcf_inherit}N>lcli}O>lclt@8+Tcf_inherit1@@@ @x$-override_flag@@@ xV*class_expr@@@ uu@@@ @@@ x+u@@@ u!t@@@ @@ @@@ x?u@@@ u!t@@@ @@ @@@ @E@@F@Awe00wg01@@@xŠ@}>lclv}>lclw@@G@@P@0}}}}}}}}@@@@ࠠ"ce}>lcly}>lcl{@@@O@@@@ࠠ&_super}>lcl}}>lcl@@@VU@@@@@@@ࠠ)_inh_vars}>lcl}>lcl@@@]\@@@[@@@@@@@@7@ࠠ*_inh_meths}>lcl}>lcl@@@a`@@@_@@@ @@@@@O@@@}>lcl@@@@P@ T@@T@@ఐ4"<<}?ll}?ll@2@@@4@@N@K@4@@N@J3@@N@I@N@H@N@G0~ ~ ~ ~ ~ ~ ~ ~ @nh@i@~)c]@^@~+TN@O@~->8@9@~/@@@@ఐ0*class_expr~&?ll~'?ll@0@@@0@@P@m0 @@P@l@P@k$@@ఐ"ce~;?ll~<?ll@+@@0'@@Q@}Q@Q@8@@  @@0%@@O@<@@ภ+Dereference~R?ll~S?ll@)@@@P@@O@K@@3@@?@@N@GN@R@Ġ'Tcf_val~i@ll~j@ll@8'Tcf_val@y<#locv@@@ @@@ yG,mutable_flag@@@ v!t@@@ y0class_field_kind@@@ $boolE@@@ @EA@F@Axi1?1Axi1?1@@@yƠࠠ$_lab~@ll~@ll@@@31@@@@@@0~~~~~~~~@@@@ࠠ$_mut~@ll~@ll@@@:@@@@@~@ll~@ll@@<@@P@@ࠠ#cfk~@ll~@ll@@@B@@@#@@~@ll~@ll@@D@@P@+@@@k~@ll@@@@P@0@@0@@ఐ10class_field_kind~All~Alm@1@@@1@@N@1@@N@@N@0~~~~~~~~@VP@Q@F@@A@ 3-@.@ @@@@ఐ;#cfkAlmAlm@@@1@@O@O@O@@@* @@N@!@Ġ*Tcf_methodBmm Bmm@8*Tcf_method@y#locwW@@@ @@@ y,private_flag@@@ @@@ @CB@F@Ayj11yj11@@@z*Ǡ@8Bmm9Bmm@@@@P@#@@P@"0>==>>>>>@-@@@@EBmmFBmm@@ @@P@$ @ࠠ#cfkQBmmRBmm!@@@@@@%@@@AXBmm"@@8@@P@&@@@@ఐ2,0class_field_kindeCm&m,fCm&m<@20@@@2,@@N@2)@@N@@N@0mllmmmmm@]%@ @@@@@ఐ-#cfk~Cm&m=Cm&m@@@@2G@@O@O@O@@@$ @@0N@@Ġ.Tcf_constraintDmAmGDmAmU@8.Tcf_constraintG@z)core_type@@@ à@@@ @BC@F@Ayk11yk11@@@zȠ@DmAmVDmAmW@@@@P@,o@@@@@P@-t@@@! @@@@P@.x@@x@@ఐ6$%emptyEm[maEm[mf@5@@jN@@Ġ/Tcf_initializerFmgmmFmgm|@8/Tcf_initializer@z@@@ @AD@F@Az+l11z,l12@@@zɠࠠ!eFmgm}Fmgm~@@@z@@@3@@@@@@@P@4@@@@ఐ6 "<<GmmGmm@4@@@6@@N@@5@@N@5@@N@@N@@N@0@)#@$@@@@@ఐ3*expressionGmmGmm@36@@@3@@P@3e@@P@@P@@@ఐH!e+Gmm,Gmm@%@@3@@Q@ Q@&Q@%/@@  @@3}@@O@,3@@ภ+DereferenceBGmmCGmm@+@@@R@@O@3B@@3@@N@<E@Ġ-Tcf_attributeUHmmVHmm@8-Tcf_attribute@{T)attribute@@@ @AE@F@Azm22zm227@@@{Yʠ@gHmmhHmm@@@@P@9X@@@@@L@@P@:\@@\@@ఐ6۠%emptywImmxImm@6x@@!N@Fh@@A}=lAlM@@%@@M@bM@a0@o@@@@A=lAlC@б@г@@@@0@3@@@г6@8@@@@@ @@@3g!@@@M@ @@<l l %@3l3l3Z3Y@3[Ш@б@г3l)Typedtree3nKmmKmm@@3u@@@Uz0@4*@@@@гB8)term_judgKmmKmn@@ @@@U{@@@@@U|@@@@U} A@3 A@@@3@@@W 3@@@W @@W @@W @@#cfkLn nLn n@@@3@@N@x0@4@@@@ఐ#cfkLn nLn n!@@@@w@@@@@@@}0@4/' @@@Ġ,Tcfk_virtual Mn'n- Mn'n9@8,Tcfk_virtual@@@ @w@@@ @A@@B@A{ha00{ia00:@@@|à@Mn'n:Mn'n;@@@@P@0@$@@@@@@@@@@P@@@@@ఐ7%empty-Nn?nE.Nn?nJ@7.@@B@@N@N@@Ġ-Tcfk_concrete@OnKnQAOnKn^@8-Tcfk_concrete7@|-override_flag@@@ |E@@@ @BA@B@A{b0;0={b0;0j@@@|HĠ@VOnKn`WOnKna@@@@P@^@ࠠ!e bOnKnccOnKnd@@@|_@@@k@@@)iOnKne@@@@P@p@@p@@ఐ7"<<vPnin|wPnin~@61@@@7@@N@@7z@@N@7m@@N@@N@@N@0@*$@%@@@@@ఐ5#*expressionPninoPniny@4@@@5@@P@4@@P@@P@@@ఐI!ePninzPnin{@%@@55@@Q@Q@Q@/@@  @@4@@O@3@@ภ+DereferencePninPnin@- @@@Tm@@O@B@@3@@N@E@@ALn n @@@@M@lM@k@@ALn n @б@г/@@@@g0@5@@(@г&@@@@h @@ @@i@4$@@@M@j @@Kmm(@4444@4Ш@б@г4)Typedtree4RnnRnn@@4@@@U0@5x@@@@гC)term_judg RnnRnn@@ @@@U@@@@@U@@@@U A@4 A@@@4@@@W4@@@W@@W @@W  @@$mexp .Snn/Snn@@@4@@N@032233333@5g@@@@ఐ$mexpBSnnCSnn@@@@@@^@@zr@@N@@0LKKLLLLL@5+ @@@(mod_descUSnnVSnn@,(mod_descz@@@ }V0module_expr_desc@@@ @@ ,'mod_loc |!t@@@ @A @A|s22|s22@@}c,(mod_type|+module_type@@@ @B@A|t22|t22@@}o,'mod_env#|!t@@@ @C!@A|u22|u22@@}{,.mod_attributes/|@@@ @D*@A|v22|v23 @@}@A|r2|2|r2|2@@}˰R>@@8@@@H@Ġ*Tmod_identTnnTnn@8*Tmod_identI@@@ @}K!t@@@ נ}~#loc{!t@@@ @@@ @B@@F@A}44}44@@@}Ԡࠠ#pth TnnTnn@@@"@@@0@@@@@TnnTnn@@$"@@P@@@P@ @@@;Tnn@@@@P@@@@@ఐ5$pathUooUoo @5@@@5@@N@5}@@N@@N@0@2,@-@ @@@@ఐ:#pthUoo Uoo@@@5@@O@O@O@@@$ @@D@@N@MN@@Ġ.Tmod_structureVooVoo%@8.Tmod_structure|@~)structure@@@ @AA@F@A}{44}|44@@@~!ՠࠠ!s 3Voo&4Voo'@@@@@@065566666@@@@@@@@@@P@@@@@ఐ5Ǡ)structureGWo+o1HWo+o:@5˰@@@5@@N@5@@N@@N@0ONNOOOOO@%@ @k @@@@ఐ-!s`Wo+o;aWo+o<@@@5@@O@O@O@@@$ @@^N@ @Ġ,Tmod_functorwXo=oCxXo=oO@8,Tmod_functor@~v1functor_parameter@@@ ۠{@@@ @BB@F@A}44}45@@@~֠@Xo=oQXo=oR@@@@P@0@C@@@ࠠ!e Xo=oTXo=oU@@@{@@@@@@*Xo=oV@@F@@P@@@@@ఐ9Š"<<YoZoiYoZok@8i@@@9@@N@@9@@N@9@@N@@N@@N@0@p*$@%@!@@@@ఐ6~&modexpYoZo`YoZof@6@@@6~@@P@66{@@P@5@P@4@@ఐI!eYoZogYoZoh@%@@6@@Q@FQ@LQ@K/@@  @@6@@O@R3@@ภ%DelayYoZolYoZoq@ @@@V@@O@YB@@3@@N@bE@Ġ*Tmod_apply ZoroxZoro@8*Tmod_applyl@|8@@@ ݠ|<@@@ ޠ/module_coercion@@@ @CC@F@A~s55 ~t55E@@@נࠠ!f+Zoro,Zoro@@@|T@@@0.--.....@@@@ࠠ!p9Zoro:Zoro@@@|b@@@@@BZoroCZoro@@*@@P@@@@;HZoro@@@@P@@@@@ఐmr-rR@@u@@u@@ఐ٠(coercionprrprr@@@@@@P@@P@0@,&@'@)!@@*@@@@ఐ)#coeprrprr@@@Q@0@@@@@@!mprrprr@@@'@@ఐ=ߠ"<<prsprs @<@@@=@@Q@@=@@Q@=@@Q@@Q@@Q@0@A&@@+@@@@ఐ:$pathprrprs@:@@@:@@S@:|@@S@@S@@@ఐ#pthprsprs@d@@:@@T@T@T@/@@  @@:@@R@3@@ఐ]!mprs prs @=@@P@@@1@@LO@C@@Aprrprs @@ZO@r@@@@O@u@@A$`pp1@@@@A* A@hO@^O@[0'&&'''''@'@@@@AGA@@ql@@0+**+++++@F@@@@0`pp@@ఐ(coercion:rss;rss%@R@@@%@@N@@@Z@@N@>3@@N@@N@@N@@N@0IHHIIIII@d@@@@ఐ#coeWrss&Xrss)@@@D@@O@O@O@y@@@!mnrss/orss0@@@[@@P@(@@ఐ>"<<}rss@~rssB@=8@@@>@@O@@>@@O@>t@@O@@O@@O@0@)[8@@@@#@,@@@@ఐ;P&modexprss4rss:@;T@@@;P@@Q@;M@@Q@@Q@@@ఐ0$mexprss;rss?@@@;g@@R@ R@R@2@@  @@;e@@P@6@@ఐc!mrssCrssD@@@@[x@@P@F@@4@@>@@O@#O@"L@@Arss*rssE@@@[@@O@@@N@)O@@O@O@%@@@@@@@N@*@Ġ+Tmod_unpackssFsLssFsW@8+Tmod_unpackU@@@@ ++module_type@@@ @BE@F@AY6#6%Z6#6T@@@٠ࠠ!essFsYssFsZ@@@@@@@@ssFs\ssFs]@@@@P@@@@* ssFs^@@@@P@@@@@ఐ<*expression-tsbsh.tsbsr@tt?tt@@@r@@@0A@@AAAAA@p@@@@HttItt@@q@@P@ @@@Ntu@@@@P@@@@@ఐ@r"<<[uu\uu@?@@@@m@@N@@@_@@N@@R@@N@@N@@N@0hgghhhhh@3-@.@0@@@@ఐ=$path{uu |uu@=@@@=@@P@=@@P@@P@@@ఐR!tuuuu@%@@=+@@Q@,Q@2Q@1/@@  @@='@@O@83@@ภ+Dereferenceuuuu!@5@@@]R@@O@?B@@3@@N@HE@Ġ$Path&Papplyu"u(u"u3@r%ࠠ!fu"u5u"u6@@@s@@@@ࠠ!pu"u8u"u9@@@s'@@@@@@u"u:@@ @@P@ @@ @@ఐBꠐ$joinu>uFu>uJ@A:@@@BB@@N@N@@N@MB@@N@L@N@K0@#71@2@1,&@'@2@@@@ภ6uMuWuuAఐA&"<<uMu^uMu`@?ʰ@@@A!@@P@x@A@@P@wA@@P@v@P@u@P@t*@@ఐ=Ġ$path(+uMu[@=ǰ*@@@=@@R@=@@R@@R@@@@ఐz!f?uMu\@uMu]@I@@=@@S@S@S@T@@G @@=@@Q@X@@ภ+DereferenceVuMuaWuMul@6@@@^@@Q@g@@Z@@AG@@O@k@ภ7eunuxbAఐA"<<punuqunu@@+@@@A@@P@@At@@P@Ag@@P@@P@@P@@@ఐ>%$path'unu|@>()@@@>$@@R@>@@R@@R@@@ఐΠ!punu}unu~@@@>;@@S@ S@S@@@F @@>7@@Q@@@ภ+Dereferenceunuunu@7@@@^b@@Q@@@Y@@A@@O@'@ภ6=uuA@A@OC@@O@`O@lO@@@O@O@.@@qA@] @@O@mO@@@u>uK@@Cڠ@@O@_O@k@@@@N@5@@Att@@@@M@IM@H0@@@@@Att@б@г<u@>@@@0@?,@@n@гl@@@@f@@ @@e@>@@@aM@ @@xss@>>>~>}@>Ш@б@г>)Typedtree>uuuu@@>@@@U0@?@@@@гM)term_judg*uu+uu@@ @@@U@@@@@U@@@@U A@> A@@@>@@@W>@@@W@@W@@W @@!sKvvLvv@@@>@@N@_0POOPPPPP@?@@@@@!m ^vv_vv@@@M@@N@j0a``aaaaa@?#@@@^@@3@@@@డ?$List*fold_rightwvvxvw@Nk@@@@>@@M@M@t@M@@M@M@M@r@M@v@M@u@N͠@@M@s@@M@q@M@p@M@o0@1@N @@@i@:@4@@@@@"it!vw vw @@@-@@@#env"vw vw@@@3M@0@'?@@5@@@@ఐ?0.structure_itemvwvw"@?4@@@?0@@N@?-@@N@@N@0@'@@6@@@@ఐ<"itvw#vw%@&@@e@@ఐ!mvw&vw'@Y@@N"@@O@O@O@'@@ఐR#envvw(vw+@1@@N4@@@@@M@M@9@@AWA@@@N@N@0        @V@@@@Avwvw,@@@@@N@@N@N@0@@@@@ఐࠐ!s'w-w3(w-w4@ð@@ @@N@@@)str_items3w-w54w-w>@,)str_items @@@ 8.structure_item@@@ @@@ @@,(str_types)signature@@@ @A @A6666@@F,-str_final_envq!t@@@ @B@A6666@@R@A6h6j6h6@@Vڰ;.@@O@@N@N@N@@@డnL%empty#Envww-w?xw-wH@Mf@@N@@@@@N@@M@M@h@@A% A@O@@M@M@0@%@@@@Avv@б@гC|@E@@@N0@@@@u@гs@@@@Om@@ @@Pl@@'@@@hM@Q @@uu+@@@@@@@Ш@б@г@)Typedtree@wwww@@@@@@U0@A0@@@@гN)bind_judgwwww@@ @@@U@@@@@U@@@@U A@@+ A@@@@:@@@W@7@@@W@@W@@W @@!s#wwww@@@@M@@N@0@A@@@@@!m$wwww@@@O*@@N@0@A1#@@@@@7@@@@@#env%wwww@@@O9@@N@0@'OG@@@@!@28@@@@ఐF!s(ww)ww@)@@@@N@@0-,,-----@*OY@@@@$@L9@@@(str_desc;ww<ww@,(str_desc@@@ <3structure_item_desc@@@ @@ ,'str_loc !t@@@ @A @A6767@@I,'str_envt!t@@@ @B@A7777+@@U@A6666@@Yݰ=)@@#@@@8@Ġ)Tstr_evalrxxsxx@8)Tstr_eval4@@@ @t@@@ @@@ @B@@N@A7K7O7K7s@@@{ࠠ!e&xxxx@@@@@@ 0@c@@@@xxxx@@@@P@  @@@+xx@@\@@P@ @@@@@ࠠ&judg_e2xyxy@@@D@@@O@0@,&@'@:@@@ఐDנ"<<xyxy@C{@@@D@@O@@D@@O@D@@O@@O@@O@@@ఐBi*expressionxy xy@A@@@Bd@@Q@B+@@Q@@Q@4@@ఐd!exyxy@>@@B{@@R@R@R@H@@  @@BC@@P@L@@ภ%Guardxy xy @Z@@@a@@P@[@@3@@_\@@xx@@డo$join#Envy$y*y$y2@M[@@@Rb@@N@@Rg@@N@Rj@@N@@N@@N@0*))*****@{@@F;@@@@ఐ&judg_e=y$y4>y$y:@@@E*@@O@@@ఐX!mMy$y;Ny$y<@7@@P@@P@$P@&P@%,@@Zy$y3[y$y=@@R@@O@O@(P@#6@@ఐa#envmy$y>ny$yA@=@@R@@O@O@*O@)J@@[ @@P@@N@,O@P@n@@P@@N@N@-@Ġ*Tstr_valueyByHyByR@8*Tstr_value@`(rec_flag@@@ WU@@@ @@@ @BA@N@A7t7v7t7@@@ࠠ(rec_flag'yByTyBy\@@@@@@0@@@@ࠠ(bindings(yBy^yByf@@@%y@@@@@@@@@8yByg@@@@P@@@@@ఐA.value_bindingsykyqyky@A@@@A@@N@5@AA@@N@4@@N@3A@@N@2@N@1@N@00@A;@<@<5/@0@=@@@@ఐK(rec_flagykyyky@@@A@@O@QO@YO@X@@ఐQ(bindings yky yky@"@@AA@@O@P@@O@OO@\O@Z3@@ఐ.!m#yky$yky@ @@QX@@O@WO@_O@^I@@ఐ-#env9yky:yky@ @@Qf@O@VO@aO@`^@@s @@N@da@Ġ+Tstr_moduleQyyRyy@8+Tstr_module@P.module_binding@@@ @AF@N@A8E8G8E8f@@@Uঠ%mb_idiyyjyyA,%mb_id@@@ !t@@@ @@@ @@,'mb_nameL#locҠ@@@ @@@ @@@ @A@A999:@@,+mb_presence&/module_presence@@@ @B@A:: ::-@@,'mb_expr2@@@ @C'@A:.:3:.:H@@,-mb_attributes;@@@ @D0@A:I:N:I:h@@,&mb_locD !t@@@ @E<@A :i:n :i:@@@A9999@@ࠠ[)\[Z@@TS@@@!@@@ 0@@@@'mb_expryyyyA7ࠠ*@@@@@%@@@yyyy@@@@P@'P@&@@@@@@@P@(@@@@ఐCC.module_bindingyyyy@CG@@@CCCB@@N@k@@N@jC?@@N@l@N@iC<@@N@h@N@g0@IG@H@!>64@5@#?@@@@ఐV%mb_idyyyy@@@ClCk@@O@@@O@O@O@"@ఐW'mb_expr1yy2yy@'@@Cv@@O@O@O@4@@<yy=yy@@! @O@O@=@@ఐY!mNyyOyy@8@@R@@O@O@O@S@@ఐX#envdyyeyy@4@@R@O@O@O@h@@ @@N@k@Ġ.Tstr_recmodule|yy}yy@8.Tstr_recmodule @@/@@@ @@@ @AG@N@A8g8i8g8@@@ࠠ#mbs+yyyz@@@E@@@/@@@.0@o@@@@@% @@_@@P@0@@@@@ࠠ(bindings3zzzz@@@HԠML@@@@@@O@Ƞ@@@O@@@O@@@@O@0@<6@7@@@@@డ$List#mapzzzz#@I@@@@@@O@O@1@O@@I @@O@I:@@O@@O@@O@0@&@@@@@6ঠ%mb_idzz*zz/Aࠠ4@@@@@@@@@'mb_exprzz1zz8A{ࠠ5@@C@@@/@@@!zz)"zz9@@AR@4@@ఐ%%mb_id/zz>0zzC@)@*@HB@@w010011111@k1@@NC@@@ఐ#'mb_exprAzzEBzzL@ @@}@@Ezz=FzzM@@O@@@AJzz$KzzN@@@n@P@P@@@ఐŠ#mbsZzzO[zzR@@@I@@P@P@P@t@@ @@@@gzz  @@ఐD9recursive_module_bindingsqzVz\rzVzu@D@@@DDD@@N@@@N@ڠD@@N@@N@@@N@D~@@N@@N@0@@@A@@@@ఐ렐(bindingszVzvzVz~@@@DDD@@O@@@O@D@@O@@O@@@O@O@O@'@@ఐǠ!mzVzzVz@@@S@@O@O@ O@ =@@ఐƠ#envzVzzVz@@@S@O@O@ O@ R@@m @@T@@N@O@X@}@@fN@@Ġ.Tstr_primitivezzzz@8.Tstr_primitive~@1value_description@@@ @AB@N@AN77O77@@@@zzzz@@@@P@5h@@@@@@@P@6l@@l@@ఐ#envzzzz@@@N@x@Ġ)Tstr_type!zz"zz@8)Tstr_type@(rec_flag@@@ *0type_declaration@@@ @@@ @BC@N@A7777@@@0@>zz?zz@@@@P@=@@@@@P@?@@P@>@@@,@@ @@P@@@@@@ఐK#envW{{X{{@'@@N@@Ġ+Tstr_typextf{{g{{#@8+Tstr_typext@e.type_extension@@@ @AD@N@A7878@@@jঠ2tyext_constructors~{{%{{7@,2tyext_constructors@@@ 6D @@@ 2@@@ 1@C,*tyext_path2!t@@@ (@@ @ARZR^RZRq@@,)tyext_txtj#loc!t@@@ *@@@ )@A@ARrRvRrR@@,,tyext_params,m@@@ -(variance@@@ /+injectivity@@@ 0@@ .@@ ,@@@ +@B;@ARRRR@@L,-tyext_privateL,private_flag@@@ 3@DF@A&SS 'SS%@@,)tyext_locW4!t@@@ 4@ER@A2S&S*3S&S@@@,0tyext_attributesc@@@ 5@F[@A;SASE<SASb@@@A?RR@RS@@ࠠ$exts,{{:{{>@@@t@@@K@@@J0@@@@@A{{${{B@@@@P@MP@L @@@@@@@P@N @@ @@@ࠠ'ext_ids7{F{P{F{W@@@K='@@@8O@@@@,O@0"!!"""""@5/@0@>D@@@డ$List#map5{F{Z6{F{b@Kl@@@@@@O@3O@!"@O@"@Ki @@O@ Kh+@@O@@O@@O@0HGGHHHHH@&@@@@@:9ঠ&ext_id\{F{i]{F{o@'ࠠ"id8d{F{re{F{t@@@'@@@4@@Ak{F{hl{F{x@@1R@1$@@ఐ"idv{F{|w{F{~@@@F@@\O@70zyyzzzzz@Y@@@@A{F{c{F{@@@Jg@P@.P@:a@@ఐ$exts{F{{F{@k@@K^@@P@-P@=P@;P@@g @@w@@{F{L @@డu$join#Env{{{{@R@@@W@@N@D@W@@N@CW@@N@B@N@A@N@@0@@@E@@@@ఐT1$list{{{{@R)@@@@F@@O@O@VT@@O@X@O@W@T @@O@US@@O@T@O@S@O@R(@@ఐF5extension_constructor{{{{@Fð@@@F@@P@F@@P@@P@=@@ఐ $exts{{{{@ܰ@@T0:@@P@mP@P@R@@ఐ!!m{{{{@@@V@@P@sP@P@h@@#{{${{@@Xi@@O@PO@P@rr@@డv+remove_list#Env;{{<{{@X"@@@[KX"@@O@@@O@@X@@O@X@@O@@O@@O@@@ఐB'ext_idsY{{Z{{@@@[kXB@@P@@@P@P@P@@@ఐe#envq{{r{{@A@@X@@P@P@P@@@|{{}{{@@X@@O@OO@P@@@ @@V@@N@O@N@@@N@i@Ġ.Tstr_exception{{{{@8.Tstr_exception&@.type_exception@@@ @AE@N@A8 8"8 8D@@@ঠ1tyexn_constructor{{{|@,1tyexn_constructor@@@ ;N@@@ 7@@ ,)tyexn_loc !t@@@ 8@A @ASSSS@@,0tyexn_attributess@@@ :@@@ 9@B@A$SS%SS@@@A(SS)SS@@ࠠ#ext-{|{|@@@y@@@W0@@@@@A{{{|@@N@@P@YP@X @@@W@@@@P@Z @@ @@డv$join#Env||$||,@T<@@@YC@@N@@YH@@N@YK@@N@@N@@N@0        @5/@0@'G@@@@ఐG5extension_constructor|-|6|-|K@G@@@G@@O@G@@O@@O@@@ఐT#ext3|-|L4|-|O@%@@H@@P@P@P@/@@ఐR!mG|-|PH|-|Q@1@@W@@P@P@P@E@@T|-|5U|-|R@@Y@@O@O@P@O@@డwA&remove#Envl|S|\m|S|f@P@@@P@@O@@Y@@O@Y@@O@@O@@O@n@@ఐ#ext|S|g|S|j@z@@$@@P@@@&ext_id|S|k|S|q@* @@P@@P@P@P@@@ఐ#env|S|r|S|u@x@@Y@@P@P@P@@@|S|[|S|v@@Y@@O@O@P@@@ @@?N@@Ġ,Tstr_modtype|w|}|w|@8,Tstr_modtype[@7module_type_declaration@@@ @AH@N@A+88,88@@@@|w||w|@@@@R@_@@@@@@@R@`@@@Ġ/Tstr_class_type||||@8/Tstr_class_type~@E!t@@@ #loc>@@@ @@@ 6class_type_declaration@@@ @@ @@@ @AK@N@Ah99i99c@@@@||||@@)(@@R@k%#@@R@m@@R@l"@@R@n@R@j@@R@iO@@@E@@@@R@oS@@S@@l@@@@Q@pW@Ġ.Tstr_attributeD||E||@8.Tstr_attribute@@@@ @AM@N@A9999@@@F@T||U||@@@@Q@tt@@@@@ @@Q@ux@@x@@ @@ @@P@v|@@ఐ \#envh||i||@ 8@@N@@Ġ)Tstr_openw||x||@8)Tstr_open @@@@ @AI@N@A8888@@@yࠠ"od.||||@@@@@@{0@ a@@@@@@@ Q@@P@|@@@@ఐIˠ0open_declaration||||@Iϰ@@@I@@N@I@@N@@N@0@ {%@ @H@@@@ఐ-"od||||@@@I@@O@O@$O@#@@ఐ נ!m||||@ @@Y@@O@O@&O@%.@@ఐ ֠#env||||@ @@Y@O@O@(O@'C@@O @@pN@+F@Ġ*Tstr_class|}|}@8*Tstr_class @1class_declaration@@@ ˠF@@@ @@@ @@ @@@ @AJ@N@Aj88k89@@@ࠠ'classes/"|}#|}@@@&%@@@#"@@@@@@@@@@@043344444@ @@@@@?@@ @@P@@@@@@ࠠ)class_ids:F}}&G}}/@@@Ol!t@@@aO@E@@@RO@-0TSSTTTTT@ (;5@6@pI@@@@ࠠ(class_id;e}2}@f}2}H@@@@m+class_infosj7@8@@@7P@2@@3@@4P@//@@@>P@0@@1P@.+@@m>ঠ+ci_id_class}2}K}2}V@,+ci_id_class#!a@W@@@ N@@@ @C0,'ci_virtr,virtual_flag@@@ @@@AYYYY@@,)ci_paramsn@@@ (variance@@@ +injectivity@@@ @@ @@ @@@ @A(@AYYYZ)@@,*ci_id_name9#loc @@@ @@@ @B8@A,Z*Z.-Z*ZF@@I,0ci_id_class_typeI(!t@@@ @DD@A8ZaZe9ZaZ@@,,ci_id_objectU4!t@@@ @EP@ADZZEZZ@@,.ci_id_typehasha@!t@@@ @F\@APZZQZZ@@,'ci_exprmj@Gb@AVZZWZZ@@,'ci_decls51class_declaration@@@ @Hn@AbZZcZZ@@,,ci_type_declA6class_type_declaration@@@ @Iz@AnZZoZ["@@,&ci_loc|!t@@@ @J@Az[#['{[#[:@@ ,-ci_attributese@@@ @K@A[;[?[;[Y@@)@AZGZKZGZ`@@-ࠠ"id=>}2}Y?}2}[@@@@@@90A@@AAAAA@䐰H}2}<I}2}h@@@@@AK}2}JL}2}_@@R@5 @@R}2}aS}2}b@@@@U}2}IV}2}c@@ @R@:@@ఐ$"idb}2}f@#@$@zL@@P@=0eddeeeee@%0@@@@A"A@@@@@0jiijjjjj@)@@@@'@డB$List#mapz}l}v{}l}~@P@@@@@@O@fO@c@@O@h@@O@gO@[@O@bO@GG@O@H@P@@O@FPP@@O@D@O@C@O@B0@I@:@;@K@@@@ఐH(class_id}l}}l}@@@@B^@4O@lO@Z@@P@_4@P@^p@@P@]@P@\$@@ఐ'classes}l}}l}@v@@PV@@P@SP@iP@d9@@_ @@:@ @@@@}}"@@@ࠠ1class_declaration?}}}}@@@@K@@@O@v@@@wO@r@@s@@tO@o@[y@@@O@|]M@@@O@}@@~O@p@@qO@n0        @@@)J@@@@Cঠ'ci_expr$}}%}}A%ࠠA@@40(''(((((@J/}}0}~@@@@@A2}}3}}@@BQ@u @@9}}:}}@@=@@<}}=}}@@ D@Q@x@@@!mBL}}M}}@@@K0LKKLLLLL@%)[@(@hN@@@@డ{4+remove_list#Env_}}`}}@]F@@@`o]F@@O@@@O@@]@@O@]@@O@@O@@O@0pooppppp@%1r@(@O@@@@ఐ;)class_ids}}}}@q@@`]j@@P@@@P@P@P@@@ఐL*class_expr}}}}@L@@@L@@P@L@@P@@P@3@@ఐ'ci_expr}}}}@a@@@@@ఐu!m}}}~@J@@M@@}}@@^@@@Q@T@@i@@O@W@@AA@O@{0@~@@@@AA@@@@0@@@@@@డ{$join#Env~~ ~~@Y@@@^#@@N@@^(@@N@^+@@N@@N@@N@0@@ @M@@@@ఐZe$list~~!~~%@X]@@@@@@O@O@ @@O@@@O@O@@O@ O@ZS@@O@@O@@ZF@@O@Z5@@O@@O@@O@7@@ఐI1class_declaration/~~&0~~7@A@@@ĠM@@P@@@P@/@P@@\@@P@^@@P@@P@@P@Y@@ఐ/'classesQ~~8R~~?@@@ZV@@P@P@P@n@@ఐ q!mf~~@g~~A@ P@@\@@P@P@P@@@s~~ t~~B@@^@@O@O@P@@@డ|`+remove_list#Env~C~N~C~]@^r@@@a^r@@O@#@@O@"@^@@O@!^@@O@ @O@@O@@@ఐc)class_ids~C~^~C~g@@@a^@@P@1@@P@0P@4P@2@@ఐ #env~C~h~C~k@ @@_@@P@/P@7P@6@@~C~M~C~l@@_@@O@O@9P@.@@ @@\@@N@;O@@@@@@@ _N@<@Ġ,Tstr_include~m~s~m~@8,Tstr_include w@3include_declaration@@@ @AL@N@AG9d9fH9d9@@@ঠ(incl_mod~m~~m~@,(incl_mod-include_infos!a@-@@@ @@ ,)incl_type >)signature@@@ @A @Ak)EEl)EF@@9,(incl_locy!t@@@ @B@Aw*FFx*FF1@@:,/incl_attributes%@@@ @@@ @C#@A+F2F7+F2FW@@+;@A(EE(EE@@/8ࠠ$mexp0@~m~A~m~@@@i@@@@)incl_typeL~m~M~m~@>ࠠ#mty1T~m~U~m~@@@E@@@*@@A[~m~\~m~@@q@@P@P@2@@@z@@!@@P@6@@6@@@ࠠ,included_idsDp~~q~~@@@S%Ident!t@@@[O@C@@@PO@>0@UJD@E@P82@3@Q@@@డ^$List#map~~~~@SͰ@@@@v.signature_item@@O@\O@E,@O@F@S̠ @@O@DSˠ5@@O@B@O@A@O@@+@@డJ1signature_item_id%Types~~~~@@!@@@I@@@@@@^G^G^G^x@@I@@@.@@P@YV@@P@X@P@WP@@ఐ#mty~~~~@W@@@@P@]`@@N@@oa@@~~@@డ}$join#Env~~~~@[0@@@`7@@N@h@`<@@N@g`?@@N@f@N@e@N@d0@@@R@@@@ఐO &modexp~~~@Oư@@@O@@O@xO@@O@w@O@v@@ఐ砐$mexp'~(~@@@O@@P@P@P@/@@ఐF!m;~<~ @%@@^@@P@P@P@E@@H~~I~ @@`@@O@tO@P@O@@డ~5+remove_list#Env`~ a~@`G@@@cp`G@@O@@@O@@`@@O@`@@O@@O@@O@r@@ఐ,included_ids~~~(@|@@c`g@@P@@@P@P@P@@@ఐ#env~)~,@f@@`@@P@P@P@@@~ ~-@@`@@O@sO@P@@@ @@^@@N@O@r@@@3N@0@@Aww@@^@@M@M@0@@@@@AA@@^@@M@^@@M@@M@M@0@@@@@A&A@_@@M@M@0@@@@@Aww/@б@г&@@@@0@Q @@@г@@@@@@ @@@P=B@@@M@ @@wwF@PBPBP!P @P"Ш@б@ВгPB&optionPnPt@гPG%IdentPIPf Pm@@PP@@@U0        @Q@@@@@PY@@@U @@гPS)TypedtreePUPwP@@P\@@@U@@@@@U @@г_b)bind_judg.P/P@@ @@@U&@@@@@U)7Pe @@@@U- A@Po A@@@PP@@@W!@@@W P@@@W"@@WP@@@W@@W@@WD@@<Oࠠ"idE_`@@@ݠ P@@@@@@0ihhiiiii@Q@@@ࠠ$mexpFtu@@@(P@@@ @@}~@@  @O@ @@@!mG@@@_@@N@0@Q;5@6@S("@#@T@@@@@#envH@@@_@@N@#0@'_@@@@!@U@@@@@ࠠ&judg_EIDNDT@@@T@@@_N@(0@,_@@@"@&@V@@@ࠠ#envJDVDY@@@_@@@N@)@@@@ @@,@ఐ"id\j\l@V@@@@@/@@@.0@.@@@Ġ$Noner|r@@@@@@@Q@7@@Q@6C@@C@@ఐU,"<<rr@Sа@@@U'@@O@L@U@@O@KU @@O@J@O@I@O@H_@@ఐQ᠐&modexp1r2r@Q@@@Q@@Q@nQ@@Q@m@Q@lv@@ఐҠ$mexpFrGr@@@Q@@R@~R@R@@@  @@Q@@P@@@ภ%Guard]r^r@j@@@r@@P@@@3@@@ఐ̠#envlrmr@@@@@?@@N@FN@C@Ġ$Some~@Hࠠ"idK@@@$@@@>@@@@@,+@@Q@@@@Q@?@@@@@ࠠ"mML@@@ee@@@P@0@*$@%@Y@@@ࠠ#envM@@@b@@@P@@@@@ @@@డ$take#Env@@ff@@@L@c@@@L9@@@LǠc$@@@L@@L@@L@@L@f fe@@@@@P@@c/@@P@N@@P@c9@@P@@P@@P@@P@Q@@ఐ"id@[@@9@@Q@Q@Q@e@@ఐz#env@T@@ca@@Q@Q@Q@y@@V @@hP@|@@(@@@ࠠ&judg_EN34@@@V"@@@P@087788888@@@UZ@@W[@@@ఐVb"<<KL@U@@@V]@@P@@VO@@P@VB@@P@@P@@P@ @@ఐS&modexpgh@S@@@S@@R@S@@R@@R@7@@ఐ$mexp|}@@@S.@@S@S@S@K@@  @@S,@@Q@O@@డ7$join$Mode@pH@@@s@@Q@@@Q@@Q@h@@ఐ "mM@q@@s^@@Q@R@ R@R@ ~@@ภ%Guard@lO@@@@@@@@@b@@@@@@ఐ&judg_E&,@@@\@@N@0@@@@ఐ0#env.1@@@N@@@@@@O@@' @@@ @@N@N@K@@A\d@@2@@DJ@@డ$join#Env;A;I@_D@@@dK@@M@-@dP@@M@,dS@@M@+@M@*@M@)0@R_Y@Z@0WKE@F@2X@@@@ఐk&judg_E);K*;Q@@@W@@N@;@@ఐ!m9;R:;S@@@b@@O@JO@LO@K/@@F;JG;T@@d@@N@9N@NO@I9@@ఐ#envY;UZ;X@@@@d@@N@8N@PN@OM@@^ @@b@@M@RN@7S@q@@b@@M@TM@S@@AA@@b@@M@^b@@M@]@M@\M@Y0wvvwwwww@@@@@A"A@b@@M@fM@e0~~@@@@@A+@б@Вг+г*@,@@@0@T@@@@4@@@@г$@&@@@ @@ @@~@г&|@(@@@v@@ @@u@SR@@@pM@@@PPV@SSSS@SӠШ@б@гS䠡)TypedtreeSZqZ@@S@@@U0@U=@@@@гc)bind_judgZZ@@ @@@U@@@@@U@@@@U A@S A@@@T @@@W&T@@@W%@@W$@@W# @@Vঠ)open_expr@,)open_expr*open_infos!a@9@@@ @@ ,0open_bound_items 3)signature@@@ @A @A`DDaDD@@3,-open_override-override_flag@@@ @B@AkDDlDD@@4,(open_env$+@@N@@N@@N@&@@డ1signature_item_id%Types./1@s@@@@@O@@@O@@O@>@@ఐ⠐"sgC2D4@@@?@@O@N@@?@@XO@@K@@డ-$join#EnvX8>Y8F@a@@@f@@M@@f@@M@f@@M@@M@@M@0eddeeeee@n{@|@b@@@@ఐϠ&judg_Ex8Hy8N@}@@V @@N@@@ఐ!m8O8P@@@e@@O@O@O@,@@8G8Q@@f@@N@N@O@6@@డ+remove_list#Env8S8b@f@@@if@@N@@@N@@f@@N@f@@N@@N@@N@Y@@ఐޠ)bound_ids8c8l@c@@iݠf@@O@+@@O@*O@.O@,q@@ఐU#env8m8p@2@@g*@@O@)O@1O@0@@8R8q@@g4@@N@N@3O@(@@ @@e@@M@5N@@@@@@@e!@@M@7M@6S@@AsA@@e/@@M@Ae,@@M@@@M@?M@<0        @w@@@@A"A@eN@@M@IM@H0@@@@@A+@б@гb@@@@n0!  !!!!!@WU@@[@гY@@@@oS@@ @@pR@VI>@@@NM@q @@0ZZB@VNVNV(V'@V)Ш@б@гVN$listDE@ВгVS&optionPQ@гVX%IdentVZZ[@@Va@@@U0\[[\\\\\@W@@@@@Vj@@@U @@гVd)TypedtreeVfno@@Vm@@@U@@@@@U @@@V@@@U~:@@гe)bind_judg@@ @@@U,@@@@@U/@@@@U2 A@V A@@@VVV@@@W-@@@W,V@@@W.@@W+@@@W*V@@@W)@@W(@@W'M@@*m_bindingsW@@@U;hV@@N@@@N@|V@@N@@N@~@@N@}0@X@@@@@!mX@@@f @@N@0@X6,+*@@@{@@@z(@@@|@@y@@@x@?@ c@@@@@#envY@@@f+@@N@0@'6f9@@@@0@$d@@@@@ࠠ$midsZ@@@`@@@N@@@@N@0%$$%%%%%@!0fQ@@@@*@De@@@డ$List*filter_map;< @@@!a@'7&optionJ!b@'5@@@(4@@(3@G@@@(2:@@@(1@@(0@@(/@EhhFh@@DX&%@@@@&M@@N@N@@@N@N@@N@N@0W@@N@@N@@)@@N@ba@@N@@N@@N@\@@డX#fst @6|@@@,&@O@-@O@o@@ఐ*m_bindings@@@UF@@O@O@O@@@r @@@@ @@@ࠠ'binding[%,@@@@Ƞm)m(@@@@N@@@@N@ɠX@@@|N@@@N@@gP@@@N@i$@@@N@@@N@@@N@0@@@f@@@@cࠠ#mid].1@@@70@H!'@@@@ࠠ$mexp^ 3 7@@@:@@ -8@@MA@P@@@@!m_9:@@@E0@&._@)@:h T@@<i@@@@@ࠠ&judg_E`1=G2=M@@@\ @@@O@065566666@&a@@Rj@@@ఐM#midFP^GPa@%@@0FEEFFFFF@@@@Ġ$NoneTgqUgu@X@@@@@@@@ఐ\w"<<`gag@[@@@\r@@P@@\d@@P@\W@@P@@P@@P@7@@ఐY,&modexp|gy}g@Y0@@@Y,@@R@Y)@@R@@R@N@@ఐ$mexpgg@n@@[@@@@Y:@@Q@"_@@ภ%Guardgg@r.@@@yL@@Q@)n@@,@@tO@q@Ġ$Some@~ࠠ#mida@@@N@AN@z@@@@@{@@{@@@ࠠ"mMb@@@n$n#@@@>Q@.0@ @@l@@@డ$find#Env@@ @@@L@j1@@@L!@@@L@@L@@L@nBn?n2@@@.@@Q@4@j?@@Q@3/@@Q@2@Q@1@Q@0.@@ఐR#mid@8@@R;@@ఐ#env@@@jc@@R@?R@CR@BO@@@ @@TP@@( @@ఐ]I"<<23@[@@@]D@@P@J@]6@@P@I])@@P@H@P@G@P@F0?>>?????@lzt@u@[m@@@@ఐZ&modexpRS@Z@@@Z@@R@lY@@R@k@R@j@@ఐ^$mexpgh@D@@(@@@@Z@@Q@,@@డ$join$Mode}~@w,@@@z@@Q@@@Q@@Q@E@@ఐà"mM@O@@zB@@Q@R@R@R@[@@ภ%Guard@s3@@@g@@@@j@@[@@]@@O@]n@@@O@-@@APX @@|@@=C @@డ+remove_list#Env@j@@@mӠj@@N@@@N@@k@@N@k@@N@@N@@N@0@@@k@@@@ఐ̠$mids@@@mj@@O@@@O@O@O@@@ఐΠ&judg_E$@(@@]@@O@.@@ఐ!m%&@ְ@@7;@@@@kV@@@P@B@@W@@6C@e@@9N@@@AA@GN@0@@@@@A!A@@dM@@0!  !!!!!@(@@@@&@డ$join#Env1/32/;@fo@@@kv@@M@@k{@@M@k~@@M@@M@@M@0>==>>>>>@[@@Zg@@@@ఐg$listQ/=R/A@e@@@@^@@N@4@@N@3[@@N@5@N@2N@g@@N@@N@@g@@N@g@@N@@N@@N@3@@ఐŠ'binding~/B/I@=@@@@@O@,@@O@+[9@@O@-@O@*@j@@O@)k@@O@(@O@'@O@&X@@ఐ*m_bindings/J/T@@@gҠU@@O@O@?O@:m@@ఐࠐ!m/U/V@@@j2@@O@O@AO@@@@/</W@@l @@N@N@CO@@@డ+remove_list#Env/Y/h@kİ@@@nk@@N@J@@N@I@l+@@N@Hl.@@N@G@N@F@N@E@@ఐ⠐$mids/i/m@@@o k@@O@X@@O@WO@[O@Y@@ఐ#env/n/q@@@lZ@@O@VO@^O@]@@/X/r@@ld@@N@N@`O@U@@ @@jJ@@M@bN@@.@@G@@@jQ@@M@dM@c @@A3A@@j_@@M@nj\@@M@m@M@lM@i0<;;<<<<<@7@@@@Ae"A@j~@@M@vM@u0DCCDDDDD@e@@@@AI+@б@гВг г@@@@N0ZYYZZZZZ@\@@@@@@@P@г@@@@Q @@ @@R@@@@@T@г-@/@@@U@@ @@V@[iY@@@M@W@@{ss]@[n[n[\[[@[]Ш@б@г[n)Typedtree[ptt@@[w@@@U0@] @@@@гk)term_judgtt@@ @@@U@@@@@U@@@@U A@[ A@@@[@@@W2[@@@W1@@W0@@W/ @@"ced@@@s[@@N@0@\@@@@ఐ"ce@@@@@@n@@,@@N@@0@]+ @@@'cl_desc@,'cl_desc,@@@ v/class_expr_desc@@@ q@@ ,&cl_loc P!t@@@ r@A @AN<,,O<,,/@@,'cl_type-*class_type@@@ s@B@AZ=,0,5[=,0,O@@,&cl_env#+!t@@@ t@C!@Af>,P,Ug>,P,c@@ ,-cl_attributes/Q@@@ u@D*@Ao?,d,ip?,d,@@@As;++t;+,@@R>@@8@@@H@Ġ)Tcl_ident23@8)Tcl_identI@@@ @!t@@@ w#locP!t@@@ y@@@ x *@@@ {@@@ z@C@@G@AC,,C,,@@@Pࠠ#pthebc@@@+@@@0eddeeeee@@@@@lm@@-+@@P@@@P@ @@xy@@,*@@P@@@P@@@@P@@@@P@@@@@ఐ`"<<@_J@@@`@@N@@`@@N@`@@N@@N@@N@0@C=@>@o@@@@ఐ]H$path@]L@@@]H@@P@5]C@@P@4@P@3@@ఐb#pth@%@@]_@@Q@EQ@KQ@J/@@  @@][@@O@Q3@@ภ+Dereference @V%@@@}@@O@XB@@3@@ld@@N@WN@aI@Ġ-Tcl_structure  @8-Tcl_structure@k@@@ |@AA@G@AND,,OD,-@@@ࠠ"csf   @@@}@@@0      @,@@@@@@@!@@P@@@@@ఐ^/class_structure$,$;@^@@@^@@N@f^ @@N@e@N@d0"!!"""""@F%@ @>p@@@@ఐ-"cs3$<4$>@@@^*@@O@vO@|O@{@@$ @@\N@@Ġ'Tcl_funJ?EK?L@8'Tcl_fun@)arg_label@@@ };@@@ ~!t@@@ a@@@ @@ @@@ .@@@ h@@@ @EB@G@AE--G-H-d@@@m@{?N|?O@@.@@P@0}||}}}}}@@@@@?Q?R@@l@@P@ @ࠠ$argsg?T?X@@@:9@@@@@@@@@@@!@ࠠ"ceh?Z?\@@@.O@@@.@@?^?_@@@@P@6@@@m?`@@@@P@;@@;@@@ࠠ#idspdpds@@@bo@@@O@@@@O@0@JD@E@q4.@/@r@@@డ$List#mapdvd~@c@@@@%O@@@O@O@@O@O@,@O@@c!@@O@c 5@@O@@O@@O@0@@డ#fst dd@<@@@'G@P@P@A@@ఐ$argsdd@J@@cK;@@P@P@P@V@@D @@`W@@+dl @@ఐe*remove_ids5 6 @d@@@ee@@N@@@N@@e@@N@e~@@N@@N@@N@0FEEFFFFF@w@@bs@@@@ఐ#idsW X @@@eՠe@@O@@@O@O@O@@@ఐb"<<q r @a,@@@b@@P@@bu@@P@bh@@P@@P@@P@8@@ఐ^w*class_expr  @^{@@@^w@@R@^t@@R@@R@O@@ఐ"ce  @̰@@^@@S@ S@S@c@@  @@^@@Q@g@@ภ%Delay  @8@@@d@@Q@v@@  @@b@@O@$|@@@@e@@N@@ @@N@,@Ġ)Tcl_apply  @8)Tcl_apply@/@@@ )arg_label@@@ ;@@@ @@@ @@ @@@ @BC@G@AIH-e-gJH-e-@@@ࠠ"cei  @@@/@@@0@'@@@ࠠ$argsj  @@@32@@@͠0@@@@@@@@@@@@@@O% @@9@@P@"@@"@@@ࠠ#argq3 4 @@@@@@2m`@@@nO@?@@@VO@3@@4O@/m@@@UO@0@@1O@.0ONNOOOOO@tXR@S@ltLF@G@nu@@@@Duࠠ&_labelsg h @@@+0gffggggg@<n o  @@@@ࠠ"eotw x @@@8@@{ | @@A?@Q@5@@ఐnd&option  @lݰ@@@@JnR@@O@A@O@@@nER@@O@>n4@@O@=@O@<@O@;0@5=b@8@w/a@*@x@@@@ఐa;*expression   @`ΰ@@@a6@@P@k`@@P@j@P@i@@ఐL"eo  U@"V@@(@@<W@@yO@9+@@ANZA@@~@@r0@a@@@@_@ఐe٠$join  @d)@@@eԠe@@N@w@@N@ve@@N@u@N@t0@@@v@@@@ภY )oxA ఐd"<< 7 9@b@@@d @@P@@c@@P@c@@P@@P@@P@'@@ఐ`*class_expr( 3@`*@@@`@@R@_@@R@@R@=@@ఐ*"ce+ 4, 6@ذ@@`@@S@S@S@Q@@G @@`@@Q@U@@ภ+DereferenceB :C E@Y@@@@@Q@d@@Z@@d3@@O@h@ภYQGQbAlఐds"<<\G_]Ga@c@@@dn@@P@@d`@@P@dS@@P@@P@@P@@@ఐmߠ$list'xGU@kְ)@@@@@@R@`R@Mo8b@@R@]@@R@\@R@[R@'m@@R@)@R@(@m@@R@&m@@R@%@R@$@R@#@@ఐs#argGVGY@°@@@+o^b5@@S@X@@S@W@S@VoP@@S@U@S@T@@ఐ$argsGZG^@n@@mO@@S@>S@cS@^@@~ @@m@@Q@i@@ภ+DereferenceGbGm@Z%@@@@@Q@p@@@@d@@O@x@ภYaowA@A@sf@@O@O@O@@@O@O@@@ A@ @@O@O@@@ @@f@@O@O@$@@4@@f@@N@(@@@+N@@Ġ'Tcl_letyy@8'Tcl_let@(rec_flag@@@ @@@ @@@ }!t@@@ 5@@@ @@ @@@ 1@@@ @DD@G@AI--J-.@@@=ࠠ(rec_flagkOyPy@@@4@@@0RQQRRRRR@u@@@ࠠ(bindingsl]y^y@@@<@@@@@@@@jyky@@?>@@P@p@@P@@P@@@P@%@ࠠ"cemyy@@@2(@@@2@@@oy@@@@P@7@@7@@ఐdf">>@c @@@da@@N@@dF@@N@d<@@N@@N@@N@0@^X@Y@yRL@M@z0*@+@{@@@@ఐaw.value_bindings@a{@@@aw@@P@@asar@@P@@@P@ao@@P@@P@@P@*@@ఐ(rec_flag@2@@a@@Q@Q@Q@>@@ఐ(bindings@D@@aa@@Q@@@Q@Q@Q@V@@A@@a@@O@Z@@ఐa*class_expr  @a@@@a@@P@a@@P@@P@q@@ఐ"ce !@u@@b @@Q@Q@Q@@@  @@b @@O@ @@t@@MN@@Ġ.Tcl_constraint;<@8.Tcl_constraint @2@@@ B*class_type@@@ @@@ @@@ @@@ @@@ @@@ 'MethSet!t@@@ @EE@G@AK..M.i.@@@eࠠ"cenwx@@@3@@@0zyyzzzzz@@@@@@@?>@@P@@@P@ @@@@@?@@P@@@P@@@@@BA@@P@@@P@%@@@@D@@P@-@@@p@@@@P@2@@2@@ఐb*class_expr@b@@@b@@N@b@@N@@N@0@RL@M@|@@@@ఐZ"ce@@@b@@O@'O@-O@,@@$ @@N@4@Ġ(Tcl_open#+@8(Tcl_open@0open_description@@@ 3@@@ @BF@G@AJO..KO..@@@@-.@@@@P@#@ࠠ"ceo 0 2@@@3@@@0@@@)3@@%@@P@5@@5@@ఐc*class_expr7?7I@c @@@c@@N@9c@@N@8@N@70&%%&&&&&@J%@ @B}@@@@ఐ-"ce77J87L@@@c#@@O@IO@OO@N@@$ @@`N@V@@AE@@d@@M@M@0HGGHHHHH@k@@@@AM@б@г@@@@0UTTUUUUU@d@@@гu@w@@@@@ @@@c;)@@@M@ @@dtt-@c@c@c.c-@c/Ш@б@гc@)TypedtreecByNjzN@@cI@@@U0{zz{{{{{@d@@@@гs)term_judgNN@@ @@@U@@@@@U@@@@U A@cW A@@@cf@@@W6cc@@@W5@@W4@@W3 @@"ec@@@\cy@@N@40@d@@@@ఐ"ec@@@@3@@~@@]@@N@<@:0@d+ @@@(ext_kind@E@@E@@@; @Ġ)Text_decl@8)Text_declE/@@@ M@#loc&@@@ F@@@ E@@@ D5constructor_arguments@@@ GL2g@@@ I@@@ H@C@@B@AYTTZTUF@@@@ @@('%@@P@H@@P@G@@P@F0@Q@@@@@&@@P@I@@@%2@@P@K@@P@J@@@K@@Ev@@P@L@@@@ఐh%empty45@h5@@s@@N@N@c#@Ġ+Text_rebindGH@8+Text_rebindh@!t@@@ J!#locb!t@@@ L@@@ K@BA@B@AUGUIUGUr@@@Yࠠ#pthkl@@@"@@@S@ࠠ$_lidxy@@@(&@@@U@@@T@@@<@@E@@P@V@@@@ఐe)$path@e-@@@e)@@N@he$@@N@g@N@f0@71@2@,&@'@@@@@ఐA#pth  @@@eG@@O@xO@~O@}@@' @@N@@@A@@@@M@M@@@A@б@гU@@@@#0@e@@N@гL@@@@$F@@ @@%E@d(@@@AM@& @@NN,@ddd}d|@d~Ш@б@гdd:O:W@@d@@@U0@fd@@@@б@гd$list:s:w@гd)Typedtreed:[:r@@d@@@U@@@d@@@U @@гtJ)bind_judg:{:@@ @@@U+@@@@@U.@@@4@@U17 @@@@U4:A@dA@@@d@@@W=@dݠd@@@W<@@@W;d@@@W:@@W9@@W8@@W7I@@(rec_flagC D @@@d@@N@&0GFFGGGGG@f{@@@@@(bindingsU V @@@ e@@N@6@@N@50_^^_____@f)@@@%@#@~@@@@@$modes t @@@t@@N@C0vuuvvvvv@.$#@@@4@@@3@,@@@@@@)bound_env  @@@t@@N@N0@+t@@@B@%@@@@@@ࠠ.all_bound_pats!!@@@jˠ@@@mN@W@@@dN@R0@ /t@@@M@)@@@@డ$List#map!!@j@@@@@@N@nN@Y%@N@Z@j @@N@Xj.@@N@V@N@U@N@T0@)@@@@@"vb!!@@@ @@ఐ"vb!!@,@ @@@.0@I@@@&vb_pat!!@@@WN@k @@A!!@@@@`@O@fO@pZ@@ఐƠ(bindings!!@@@kDT@@O@eO@sO@qF@@] @@yp@@$! @@@ࠠ)outer_env/"0"@@@wt@@@N@u043344444@@@P@@@ఐv.remove_patlistD" E"@u@@@vwX@@N@N@|@@N@{@@N@z@w@@N@y@N@x@N@w&@@ఐ .all_bound_patsg"h"&@0@@vw%@@O@@@O@O@O@?@@ఐ)bound_env"'"0@Ͱ@@SO@O@P@@D@@TQ@@" @@@ࠠ,bindings_env#4<#4H@@@v@@@tN@0@huo@p@@@@ఐl(rec_flag$KW$K_@I@@h@@@0@@@@Ġ,Nonrecursive%em%ey@8,Nonrecursive(Asttypes(rec_flag@@@@@@@B@@A4parsing/asttypes.mli``@@@ I@@@@@@Q@0@4@@@@@@@ࠠ+binding_env+Zh+Zs@@@@@@@P@@=@@@P@x4@@@P@@@P@@@P@Y@@ঠ&vb_pat+Zu+Z{Aࠠ@@@@@0        @q6+Zd-@@@@'vb_expr+Z}+ZAࠠ@@@@@@@A%+Zt&+Z@@CR@@@@!m3+Z4+Z@@@I032233333@*1/@0@P@@R@@@@@ࠠ"m'G,H,@@@@@@Q@0LKKLLLLL@&e@@h@@@డ'compose$Mode_,`,@<@@@@@Q@@@@Q@@@Q@@Q@@Q@ @@ఐJ!my,z,@*@@-@@ఐf'pattern,,@f@@@f@@R@R@@@R@@f@@R@f@@R@@R@@R@Q@@ఐ&vb_pat,,@s@@@S@`@@ఐ/)bound_env,,@@@g@@S@S@S@t@@,,@@g@@R@z@@k@@~{@@,@@ఐy+*remove_pat--@w@@@y'@@P@#P@@@P@ @y'@@P@ y*@@P@ @P@ @P@ 0@@@@@@@ఐ&vb_pat--@İ@@@Q@@@ఐi*expression - -@i,@@@i@@Q@3i[@@Q@2@Q@1*@@ఐ'vb_expr!-"-@@@i@@R@CR@IR@H>@@ఐ"m'5-6-@H@@w@@R@GR@KR@JT@@B-0@@y@@Q@Q@MR@F]@@v8@@W^@9@@ZP@@@A8@9@j& @!@l@@@ఐhǠ'pattern`YYsaYYz@h˰@@@hˠq@@Q@Q@@@Q@@h@@Q@h@@Q@@Q@@Q@(@@ఐi#x_iYY{YY~@1@@k@R@7@@ఐ)bound_envYYYY@ް@@h@@R@R@R@K@@< @@OL@@YYe @@@ࠠ)rhs_env_i[[@@@y@@@Q@0@cpj@k@@@@ఐkL*expression[[@j߰@@@kG@@Q@k@@Q@@Q@@@ఐ#e_i[[@@@k^@@R@R@R@,@@డ'compose$Mode[[@ʰ@@@@@@R@@E@@R@H@@R@@R@@R@K@@ఐ$mode[[@s@@\@@S@S@S@_@@ఐӠ'mbody_i[[@i@@ir@@S@o@@"[#[@@y@{@R@ S@z@@n @@{@@.[ @@@ࠠ,mutual_modes9]+;:]+G@@@o_i@@@iQ@O@@@\Q@ 0DCCDDDDD@@@`@@@@ࠠ'mdef_ijU^J\V^Jc@@@@@@@R@i@@@,R@@@R@ @@Qঠ&vb_pats^Jet^Jk@`ࠠ#x_j{^Jn|^Jq@@@d@@@0~}}~~~~~@;1^JX^J@@@@@A^Jd^Ju@@.T@ @@ఐi'pattern^Jx^J@j@@@j@@R@9R@@@R@@j@@R@i@@R@@R@@R@0@-82@3@@@@@ఐ@#x_j^J^J@@@@S@5@@ఐ")rhs_env_i^JE@F@@j*@@S@-S@GS@F&@@?N@@sR@)@@AOQA@@}x@@J0@X@@@@V@డ$List#map__@p@@@@@@Q@jQ@Q@Q@R@p @@Q@Pp@@Q@N@Q@M@Q@L0@@@@@@@ఐ'mdef_ij _ _@@@@@@R@gjf@@R@f@R@e@@ఐΠ(bindings_ _@@@pL<@@R@]R@mR@k.@@E @@/@ @@@@-]+7@@@ࠠ%env_i8a9a@@@|}@@@Q@o0=<<=====@ @@Y@@@ఐ{.remove_patlistMaNa@z@@@{|a@@Q@Q@v@@Q@u@@Q@t@|@@Q@s@Q@r@Q@q&@@ఐˠ.all_bound_patspaqa@9@@{|Ǡ%@@R@@@R@R@R@?@@ఐ᠐)rhs_env_iaa@B@@SR@R@P@@D@@TQ@@a @@ఐe%env_ic8Ec8J@e@f@@@0@cp@@@ఐs,mutual_modesc8Lc8X@l@@ @@c8D@@@P@@$@@v@@@p@@@@@@P@k@@AA@@@@0@@@@@@@ࠠ#envd]kd]n@@@h/}@@@P@@@@P@0@=@@@@@ࠠ$mdef d]pd]t@@@h+qkF@@@@@@P@@@@P@@@,@@,@@"@డ$List%splitew ew@h.@@@h.?'@P@@@P@hvG@@P@h^3@@P@@P@@P@G@@డ$List#map0ew1ew@qg@@@@@@Q@Q@qY@Q@Q@Q@Q@@Q@@qn@@Q@qm@@Q@@Q@@Q@v@@ఐv+binding_envZew[ew@@@@@@R@}@@R@۠qk@@R@@@R@@R@@R@@@ఐ)(bindingszew{ew@@@qM@@R@R@R@@@ewew@@hM@@Q@Q@Q@@@ @@P@@@d]g@@Aࠠ2transitive_closureàff@@@@}@@@P@@@@P@}@@@@@@P@@P@0@@@@@@@@@#envĠff@@@*0@5@1%@@Q@@4@@@@@@ࠠ/transitive_depsŠgg@@@@~)@@@Q@@@@@PS@+@@@>Q@~?@@@Q@@@Q@@@Q@0@5Aa@8@@@@@%env_iǠgg@@@,0@8gjf@@@@@@&mdef_iȠ#g$g@@@60#""#####@ B@@?@@@@డ $join#Env6iIW7iI_@yt@@@~{@@Q@@~@@Q@~@@Q@@Q@@Q@0CBBCCCCC@!-Y@$@_@@@@ఐH%env_iTiI`UiIe@.@@p@@డ;)join_list#Envfjfwgjf@rϰ@@@~@@R@@@R@~@@R@@R@/@@డL$List$map2jfjf@@@!a@'@!b@&!c@&@@(`@@(_@@@@(^@@@@(]@@@(\@@([@@(Z@@(Y@[@@^+*@@@@@P@P@OS@)@@S@!S@US@NS@'@S@-@S@,@Ԡ@@S@*@+@@S@(@@S@&@S@%@S@$@S@#@@డ'compose#Envjfjf@@@@@L@+@@@L.@@@L@@L@@L@nk^@@@@@T@K@9@@T@J<@@T@I@T@H@T@G@@ఐꠐ&mdef_i jf jf@ð@@@@ఐO#envjfjf@@@u@@jfjf@@Ҡb@@S@ S@TS@<@@%jfv@@j@@R@R@WS@@@@@1Q@@@AA@EQ@00//00000@ @@@@A%A@@PK@@\043344444@$@@@@"@@ࠠ$env'ɠBkCk@@@@@@Q@c@@@xQ@]0MLLMMMMM@Ovp@q@i@@@డ($List$map2`kak@ܰ@@@@Q@g@{m@@Q@Q@@@Q@Q@e,@Q@i@Q@h@@@Q@f@ݠ@@Q@dР;@@Q@b@Q@a@Q@`@Q@_6@@ఐ/transitive_depskk@@@@@@@R@@@@R@@@R@@@R@@R@@R@T@@ఐ砐#envkk@@@ a@@ఐ֠$mdefkk@@@!Z@@R@yR@R@v@@g @@w@@k @@డ$List(for_all2ll@@@!a@&@!b@&@@@(@@(@@(@H@@@(@@@@(@@@(@@(@@(@@(@%G%G%G%@@d+*@@@@\@J@@P@P@%@@P@@P@@P@@lk@@P@@$@@P@#@@P@@P@@P@@P@0@@@8@@@@డ%equal#Env0l1l@@u@@@L@z@@@L@@@L@@L@@L@@ @@@@@Q@@@@Q@@@Q@@Q@@Q@/@@ఐ#envXlYl@V@@<@@ఐ#$env'elfl@F@@xg@@Q@Q@Q@Q@@ @@@@P@Q@W@ఐ;$env'}m*~m.@^@@a@ఐ렐2transitive_closuren/@n/R@@@@@P@p@@ఐW$env'n/Sn/W@z@@P@@@@@@l@@@@@R@ @@P@@@A A@@@@0@@@@@f@@@ࠠ&env'_iʠpespey@@@@@@@@@P@@ఐ+2transitive_closurepe|pe@@@@)@@P@@@P@$@@P@@@P@@P@@@ఐ#envpepe@,@@H1@@Q@@@Q@Q@Q@'@@,@@<(@@peo@@డ)join_list#Envqq@um@@@L@@O@@@O@P@@O@@O@0@Fd^@_@,@@@@ఐl&env'_i!q"q@@@ڠk@@P@@@P@P@P@@@,@@ N@@<@@e@@@z@@@[@@@N@ f@@A9$KQ@@  @@;#48@@డ$join#EnvHrIr@|@@@@@M@@@@M@@@M@ @M@ @M@ 0UTTUUUUU@   @ @q@@@@ఐ Ҡ,bindings_envfrgr@@@@@N@N@N@@@ఐ K)outer_envzr{r@ ܰ@@@@N@N@N@,@@= @@@@M@!N@2@P@@ @ @@ U@ i@@@@M@#M@" @@A A@@@@M@-@@M@,@M@+M@(0@ @@@@A ,$A@@@M@5M@40@ ,@@@@A R,A@@ S R@@M@B@@M@A@@M@@@M@?M@;0@ S@@@@A =@б@г w @ y@@@0@q@@ @б@г m Ѡг l @ n@@@  @@ u@@@ @г0 @2@@@  @@ @@  @@@@  @py`@@@ M@ @@::d@p~p~pSpR@pTШpx@б@гp)Typedtreep{{@А!kp@U0@rp@@{{@@@p @@@U@@б@гp$mode {{@@p@@@U@@Вгp#Envp{{@@p@@@U&@@гp$mode*{+{@@p@@@U3@@@@@U8 @@@(@@U;+ @@@:@@U>=@@D@@UB?{A@pA@@@p۠N@W?@@@WF@p@@@WEp@@@WCp@@@WD@@WB@@WA@@W@@@W>^@@EѠঠ)Typedtree%c_lhsi|j|A,%c_lhsy!k@F@@@ c @@@ _@@,'c_guardˠz@@@ a@@@ `@A @A#))#))@@},%c_rhs@@@ b@B@A$))$))@@@A"))"))@@ࠠ1ˠ210@@q1@›M@`P@T@@@W0@r@@@D'c_guard||A3̠ࠠ@@6@@@^@@@]@X%c_rhs||A9ࠠ͠@@@@@c%@@@||@@qd2M@J@@O@eO@d/@@@ࠠ$judgΠ@@@w@@@N@k0@sRP@Q@<:@;@*(@)@@@@ఐw$join@vL@@@ww@@N@p@@N@ow@@N@n@N@m"@@ภk A*ఐv1"<<@tհ@@@v,@@P@@v@@P@v@@P@@P@@P@E@@ఐ&option(6@*@@@@s@@R@R@@@R@@R@@ @@R@@@R@@R@@R@h@@ఐs䠐*expressionWX@sw@@@s@@S@s@@S@@S@}@@ఐ'c_guardlm@@@":@@S@S@S@@@j @@@@Q@@@ภ+Dereference@k@@@/@@Q@@@}@@vu@@O@@ภl2Aఐt+*expression @s @@@t%@@P@s@@P@@P@@@ఐ렐%c_rhs@ǰ@@t<@@Q@(Q@.Q@-@@* @@t@@O@4@ภk< A@A@Nx@@O@O@O@@@O@O@;@@BA@\ @@O@O@ @@@@x٠@@O@O@@@@@@@@@@!mϠ@@@M@“M@=0@ @@@@@@@ࠠ#envР),@@@w@@@SN@C0        @)@ @(@@@ఐ?$judg/3@%@@x@@N@E@@ఐ@!m,4-5@@@< @@@@&!@@1%@@ఐ*remove_pat>9A?9K@f@@@@@M@_@@@M@^@@M@]@M@\@M@[0LKKLLLLL@APJ@K@h@@@@ఐ %c_lhs]9L^9Q@v@@@@N@q@@ఐi#envn9Ro9U@@@@@N@kN@€N@)@@y9@z9V@@+M@j.@డ('compose$Mode9X9d@g@@@@@M@‡@@@M@†@@M@…@M@„@M@ƒK@@ఐ!m9e9f@@@X@@ఐs'pattern9h9o@s@@@s@@N@š@s@@N@™s@@N@˜@N@—@N@–u@@ఐ3%c_lhs9p9u@@@7@@O@²@@ఐڠ#env9v9y@@@s@@@O@ªO@O@@@9g9z@@s@@@N@©@@f@@M@‘@@z@@{@M@@ @@M@YM@B@@A9{@@@ M@>@M@0@ @@@ @@M@?M@j$@@A | @@@s?@@@@@0  @uB@@@@zyy@sssish@sjШs~@б@гss'(@А!ks@V 0,++,,,,,@u@@12@@@s @@@V@@б@гs#EnvsAB@@s@@@V@@гs$modeMN @@s@@@V#@@@@@V&@@@%@@V)( @@/@@V-s]A@sA@@@sɠ9@WH@@@WM@s@@@WLs@@@WK@@WJ@@WI @@WGB@@#patӠ{'|*@@@/ssO@@P@@@P@0…„„……………@u8@@@A@@@A@s/@@@@¢@@@@@#envԠ—+˜.@@@ys@@P@0œ››œœœœœ@.$#@@@@@@@,@¿@@@@@ࠠ%m_patՠ´µ@@@a@@@*P@0¹¸¸¹¹¹¹¹@/%@@@@)@@@@ఐt8is_destructuring_pattern@t@@@tV@@P@P@ @@P@ t@@P@ @P@ #@@ఐr#pat #@J@@n@@Q@4@@#@@M@@P@(Q@:@ภ+Dereference$7$B@nF@@@@@@+F@ภ%Guard CV C[@@@@P@.R@@@T@@@@@ࠠ%m_env֠agal@@@@@@oP@/0!  !!!!!@ivp@q@=@@@డ$List)fold_left67@3@@@@@@P@_R@@@R@B@R@D@R@C@ @1@@R@A@R@?@R@>@R@=0JIIJJJJJ@)@@@@డ$join$Mode[\@ @@@@@S@Z@@S@Y@S@X@@ภ&Ignoreno@V@@@@@R@b'@@?@@@_6@@P@Q>@P@P.@@డT$List#mapÌÍ@zð@@@@@@Q@éS@Å@@Q@çS@Ã@S@Æ@zŠ@@S@ÄzĠ@@S@Â@S@Á@S@ÀZ@@@"idנôõ@@@$j@@డ$find#Env@ܰ@@@@@T@Ý@ @@T@Ü@@T@Û@T@Ú@T@Ù0@)C@ @@@@@ఐ1"id@@@Q@@ఐ[#env@2@@5@@U@èU@ìU@ë%@@6 @@aS@×(@@A@@@oj@T@ÒT@ï@@w@@@{+u@@Q@Ñ{*t@@Q@Ð@Q@Ï@@డ0pat_bound_identsoso@ɰ@@@k@@R@R@@@R@ʠ@@R@ÿ@@R@þ@R@ý @@ఐ#pat8o9o@@@@@S@@@'@@{j{@@R@û@@R@úR@R@'@@3O@@82@@Q@pQ@Q@ø0@@<@@41@@Vac@@డ$join$Modecd@@@@@@O@@@O@@O@0jiijjjjj@JWQ@R@Ć@@@@ఐǠ%m_pat{|@W@@&@@O@@@ఐo%m_envċ/@0@@5@@P@#@@.4@@P@&@>7@@p@8@@@@O@O@@@A?A@@@@O@  @@O@ @O@ O@0ģĢĢģģģģģ@@@@@Av@б@г1г0@@5@@@0ķĶĶķķķķķ@2@@@@=@@@@б@г'@)@@@ @г/@1@@@y@@ @@x@@@@w@vs@@@@v:v8@@@@#r@@"M@ @@@v,v,vv@vШv'@б@гv1v2#2@А!kv7@V0@xk@@!"@@@vB @@@V!@@гv=$bool6:@@vE@@@V"@@@@@V#@@@@V$vK\A@vMA@@@v`'@WO@@@WRv[@@@WQ@@WP@@WN+@@#pat٠,=C-=F@@@vvvvO@@P@K@@P@J065566666@xk8@@@A@@@A@vu*@@@@S@@@@ఐ!#patI=PJ=S@@@@I@@@H@%@i  @@&%@@@R@@@Q0YXXYYYYY@$:@@@(pat_descb=Tc=\@@@@T@@VP@W@Ġ(Tpat_anyxbhybp@8(Tpat_anyѠ@@@ l@@@ k@@@@ALAAL s uL s @@@}^@@@@ޠY@@R@e@@R@d0ōŌŌōōōōō@4@]8@@@A@@@c@@APŤ@@@Ů@A@@@ @@ภVŞbtşby@U@@@y@@P@uP@q@Ġ(Tpat_varűzŲz@@Ŷzŷz@@@@R@t0ŸŷŷŸŸŸŸŸ@_@8@@@A@@@s@@AP@@@@A@@@zz@@@@R@v@@R@u@@@ z@@'@@R@x@@R@w@ @@@ภ–zz@•@@@@P@w(@Ġ*Tpat_alias@8*Tpat_aliasF@@@ s@@@ r@F@@@ u@@@ tJ!t@@@ v#locC@@@ x@@@ w@CAALAAfP  gQ  J@@@ `ࠠ#patڠ@@@n+@@@Ċ@@@ĉ0%$$%%%%%@@8@@@A&3@@@Ĉ@@AP<@@@F@A@@@45@@5@@R@ċ@@<=@@64@@R@č@@R@Č@@@YF@@@@R@ď@@R@Ď&@ @&@@ఐw8is_destructuring_patternWX@w@@@wh@@P@ŊP@}@@P@|w@@P@{@P@z0eddeeeee@ PJ@K@ƁC@@@ఐX#patvw@@@Ơ@@Q@ʼn@@'@@P@Ş@Ġ-Tpat_constantƊƋ@8-Tpat_constant@@@ z@@@ y@d(constant@@@ {@ABALAAS a cS a @@@a@ƣƤ@@@@R@Ĝ0ƥƤƤƥƥƥƥƥ@L@u8@@@A@@@ě@@APƼ@@@@A@@@@(@@@@R@Ğ@@R@ĝ@@@@ภÔƾƿ@Ó@@@ P@Ť@Ġ*Tpat_tuple@8*Tpat_tuple&@@@ }@@@ |@*@@@ @@@ @@@ ~@ACALAA9U  :U  @@@b@@@?@@R@į@@R@Į@@R@ĭ0@@8@@@A@@@Ĭ@@AP@@@@A@@@@7@@Y@@R@ı@@R@İ@@@@ภ @@@@rP@Ū@Ġ.Tpat_construct #@8.Tpat_constructx-@@@ @@@ @#loc:!t@@@ @@@ d7constructor_description@@@ M@@@ @@@ @@@ %#loc!t@@@ @@@ @@@ G@@@ @@ @@@ @DDALAAZ J L]  @@@cc@q$r%@@HF@@R@@@R@0wvvwwwww@@G8@@@Ax@@@@@APǎ@@@ǘ@A@@@@M@@R@@@@Kڠ@@R@@@R@@@R@@@'@KJIG@@R@@@R@@@R@ѠH@@R@@R@@@R@3@@@<@@~@@R@@@R@;@@;@@ภĐǺ)ǻ-@ď@@@P@ŰE@Ġ,Tpat_variant.4.@@8,Tpat_variant"@@@ @@@ @£%label@@@ *,@@@ @@@ @@@ &Stdlib#ref(row_desc@@@ @@@ @CEALAAKfLh2@@@d@.A.B@@,@@R@0@@8@@@A@@@@@AP@@@"@A@@@@4_@@R@@@R@@@R@@@@4/@@R@@@R@@@@[$@@y@@R@@@R@'@@'@@ภ0.F1.J@@@@P@Ŷ1@Ġ+Tpat_record?KQ@K\@8+Tpat_recordM@@@ @@@ @  #loca!t@@@ @@@ ‹1label_description@@@ p@@@ @@@ @@ @@@ =+closed_flag@@@ @BFALAAnqLd@@@ne@|K^}K_@@320@@R@@@R@-@@R@ݠ@@R@ @@R@@R@@@R@0ȕȔȔȕȕȕȕȕ@<@e8@@@AÖ@@@@@APȬ@@@ȶ@A@@@ȤKaȥKb@@7@@R@ @@@kȪKc@@{@@R@ @@R@ @ @@@ภōȷKgȸKk@Ō@@@P@ż$@Ġ*Tpat_arraylrl|@8*Tpat_array@@@ @@@ @Ñ#@@@ @@@ @@@ @AGALAA2w3w:@@@f@l}l~@@8@@R@@@R@@@R@0@@8@@@A@@@@@AP@@@@A@@@@7@@R@@R@@@R@@@@@ภ߰ l l@@@@kP@@Ġ)Tpat_lazy@8)Tpat_lazyq&@@@ @@@ @q.@@@ @@@ @AHALAAy\^Ày\@@@%g@34@@?@@R@.@@R@-098899999@@ 8@@@A:G@@@,@@APP@@@Z@A@@@@.@@@@R@0@@R@/@@@@ภ(RS@'@@@P@@Ġ*Tpat_valueab@8*Tpat_value@@@ @@@ @g3tpat_value_argument@@@ @AIALAA|| @@@lhࠠ#pat۠~@@@@@@=0ɁɀɀɁɁɁɁɁ@(@Q8@@@AĂ@@@<@@APɘ@@@ɢ@A@@@@-@@^@@R@?@@R@>@@@@ఐz栐8is_destructuring_patternɞɟ@z@@@z@@P@P@@@P@z@@P@@P@0ɮɭɭɮɮɮɮɮ@V93@4@0@@@ఐA#patɿ@@@гv'pattern@@ @@@ @@@@@@+Q@&@@:@@7P@)@Ġ.Tpat_exception@8.Tpat_exception=@@@ @@@ @=@@@ @@@ @AJALAAKqsLq@@@i@@@N @@R@N@@R@M0@@8@@@A7@@@L@@AP@@@&@A@@@@.@@g@@R@P@@R@O@@@@ภְ@@@@P@@Ġ'Tpat_or- .@8'Tpat_or!k@ "@@@ @ @@@ @@@ “t(row_desc@@@ @@@ @CKALAAģĤH]@@@Ijࠠ!lܠ[\@@@.@@@`@@@_ @ࠠ!rݠlm@@@?@@@b@@@a@@yz@@76@@R@d@@R@c&@@@Vʃ@@٠T@@R@f@@R@e/@ @/@@డ^"||ʔ?ʕA@@@@@U@@@@T@@@S@@R@@Q'%sequorBA?@@@@?%%@%%F@@>_@@@@@P@#@@@P@"@@P@!@P@ @P@0ʻʺʺʻʻʻʻʻ@djd@e@[U@V@@@@@ఐ|8is_destructuring_pattern$<@|@@@|@@Q@AQ@4@@Q@3|@@Q@2@Q@1$@@ఐ!l=>@-@@<@@R@@5@@#@@_@@Q@/Q@PR@:=@@ఐ|O8is_destructuring_patternBZ@|S@@@|S@@Q@bQ@U@@Q@T|R@@Q@S@Q@RZ@@ఐ!r"[@`@@q@@R@aj@@"@@@@Q@.Q@qR@[r@@`@@P@tu@@A4=J"@@@@O@̹O@̸076677777@@@@@A|}@б@гYгVRQ@@@@@10KJJKKKKK@@@W@@ @@@3T@гS@@@@4 M@@ @@5 L@|H@@@@||@,@@@G@@M@@@fT@@Q@U@~ܠ@ࠠ=is_valid_recursive_expressionޠs^bt^@@@@uts@@@@@@M@@ @@@ΔM@a@@@M@@@M@@@M@0ˏˎˎˏˏˏˏˏ@~@@@@&idlist࠰˝^˞^@@@&0˝˜˜˝˝˝˝˝@~2ˤ^^˥@@@@@@@$exprᠰ˰^˱^@@@+0˰˯˯˰˰˰˰˰@ <@@@@@@ఐ$expr@=@@̰@@?0@!@@@(exp_desc@7@@3@@@ @Ġ-Texp_function@@@@@@P@ 0@ @@@@@ @@L@@P@ @@@@ภǰ  @@@@gM@@@@@a@@P@:@@:@@ఐy3classify_expression * =@@@@t@@O@P@@O@@O@P@@ఐu$expr!>"B@_@@]@@@@a@@@a@Ġ&Static2HO3HU@@@@@q@@Q@&054455555@q@@@@@@@ࠠ"tyCD@@@@@@DP@-f@ఐ㠐*expressionVW@v@@@@@P@1@@P@0@P@/z@@ఐ$exprkl@@@@@ภ&Returnwx@mn@@@"@@@L@@(@@6@@@@డS!=̉̊@@@@@@O@q@@O@pO@T@ @@O@S@O@R@O@Q0̙̙̚̚̚̚̚̚@`Z@[@̶@@@@డ)unguarded#Env̰̱@@@@@L@@@@L@@@L2@@@L@@@L@@L@@L@а@@@ @@P@d@@@P@c@@P@bH@@P@a@@P@`@P@_@P@^B@@ఐ"ty@L@@0@@Q@tQ@vQ@uV@@ఐd&idlist@J@@c@@Q@@qd@@ภ"[]  @ @@@O@}r@@`@@M@\u@@@M@,.@Ġ'Dynamic @c@@@@^@@Q@*^@@^@@@ࠠ"ty/!0#@@@@@@ΗP@΀@ఐϠ*expressionB&C0@b@@@@@P@΄@@P@΃@P@΂@@ఐ$exprW1X5@@@"@@ภ&Returnc6d<@nZ@@@@@@Ο1@@(@@62@@k@@డ?"&&u@ev@g@@@@@K@@@@J@@@I@@H@@G(%sequandBA @@@@ ##!##3@@]@@@@@O@Ψ@@@O@Χ@@O@Φ@O@Υ@O@Τ0͛͛͜͜͜͜͜͜@vp@q@͸@@@@డy&(ͮ@`ͯ@a@3@@@נ%@@P@@@P@P@ι@ 8@@P@θ@P@η@P@ζ"@@డ)unguarded#Env@H@U@ @@@@@Q@@ @@Q@@@Q@Q@@Q@@@Q@@Q@@Q@I@@ఐà"ty@V@X@S@@9@@R@R@R@]@@ఐm&idlist@Y@_@S@@j@@:@@Uk@@ภ @b@d@@@@bP@x@@H@@@@P@δP@Q@@@డ*@+@@@@@@@P@@@P@P@@ @@P@@P@@P@@@డ")dependent#EnvM@hN@u@@@@@L@P@@@L@@@LL-@@@L@@@L@@L@@L@HE8@@@@@Q@@f@@Q@@@Q@bC@@Q@@@Q@@Q@@Q@@@ఐV"ty΅@vΆ@x@@@@@R@ R@ R@ @@ఐ&idlistΙ@yΚ@@@@"@@P@@l@@ภΥ@@ħ@@@xP@ @@]@@.@@P@γP@Q@@@ @@M@β@J@@M@@@Aθ$@@M@@@Aμ@@0M@@@AA@@@@L@@@@KU&@@@J@@I@@H@@G?@@$mode頰υφ@@@@@O@h0ωψψωωωωω@Ql@e@@@@5^t6^u@@@@Q@ώF@@@ @@&N@@Q@ϏJ@@J@@డ%empty#EnvHI@7@@,O@Y@Ġ'Tcl_funWX@% @\]@@%@@Q@ϛm@@de@@L@@Q@Ϝu@@lm@@%%@@Q@ϟr@@Q@Ϡ@Q@Ϟ@@Q@ϝ@@Ѐ@@S%@@Q@ϡ@@ЇЈ@@@@Q@Ϣ@@@6Ѝ@@&@@Q@ϣ@@@@డp%empty#EnvЛМ@@@O@@Ġ)Tcl_applyЪt|Ыt@#Ԡ@Яtаt@@SU@@Q@ϭ@@зtиt@@#ڠ#@@Q@ϰ#נ@@Q@ϲ@@Q@ϱ@Q@ϯ@@Q@Ϯ@@@"t@@&@@Q@ϳ@@@@డ%empty#Envtt@ɰ@@O@@Ġ'Tcl_let@!Рࠠ(rec_flag@@@!@@@Ͽ0@$@@@ࠠ(bindings@@@!ߠ˿@@@@@@@@ @@!!@@Q@Ġ@@Q@@Q@@@Q@%@ࠠ"ce$%@@@S@@@2@@@B+@@'?@@Q@7@@7@@ఐ.value_bindings89@@@@@@O@@@@O@@@O@@@O@@O@@O@0IHHIIIII@{b\@]@gVP@Q@i4.@/@k@@@@ఐn(rec_flag`a@@@@@P@P@%P@$@@ఐt(bindingstu@$@@)(@@P@@@P@P@(P@&6@@ఐ $modeьэ@װ@@@@P@*F@@ఐx*class_exprўџ@@@@s@@P@3@@@P@25@@P@1@P@0@P@/b@@ఐ7$modeѸѹ@@@@@Q@?Q@CQ@Bv@@ఐ"ce @z@@@@Q@>Q@EQ@D@@ @@@@P@"P@GQ@=@@ @@O@J@Ġ.Tcl_constraint  "@!ࠠ"ce $ &@@@T@@@0@*@@@@ ( )@@!!@@Q@@@Q@ @@ + ,@@!!@@Q@@@Q@@@ . /@@!à!@@Q@@@Q@%@@& 1' 2@@!@@Q@-@@@=, 3@@(@@@Q@2@@2@@ఐ*class_expr97?:7I@@@@@@O@Q@Z@@O@P@@O@O@O@N@O@M0FEEFFFFF@vWQ@R@b@@@@ఐ֠$modeW7JX7N@@@.@@P@]P@aP@`@@ఐs"cek7Ol7Q@"@@@@P@\P@cP@b,@@= @@WO@f/@Ġ(Tcl_open҂RZ҃Rb@!@҇Rd҈Re@@!@@Q@@ࠠ"ceғRgҔRi@@@U:@@@@@@ҚRj@@(@@Q@@@@@ఐ*class_exprҧnvҨn@@@@|@@O@m@@@O@l>@@O@k@O@j@O@i0ҴҳҳҴҴҴҴҴ@*$@%@@@@@ఐD$modenn@@@@@P@yP@}P@|@@ఐF"cenn@"@@@@P@xP@P@~,@@= @@O@Ђ/@@A@@@@N@ՍN@Ռ@@AAA@@B@@N@՗@@N@Ֆ@N@ՕN@Ւ0@C@@@@A!@б@гx@z@@@M0@y@@@б@гX@Z@@@N@г@@@@O @@ @@P@@@@Q@=@@@N@R@@A@@డ)unguarded#Env)*@y@@@n@@N@շ@`y@@N@ն@@N@յ\@@N@մ@@N@ճ@N@ղ@N@ձ@@ఐ'*class_exprMN@@@@"@@O@@n@@O@@@O@@O@@O@@@ภ&Returnfg@t]@@@;@@P@P@@@ఐg"cexy@<@@@@|}@@@@O@O@P@@@ఐ&idlistӏӐ@w@@@@j@@@@@@@@@ĠӣӤ@ɦ@@@@Ƞ@@P@@@P@!@@!@@ภЈӲӳ@Ї@@@M@+@Ġ"::@ݠ@@@5@@P@?@@@@U@@@P@@@P@K@@@ @@H@@P@@@P@S@@S@@ภМ@К@@@M@M@^@@A@@M@.b@@@@@AA@ M@(0@@@@@AA@@@@0@@@@@@@@ysB@VPA@'o@АR@s@@p@o@@icA@@@n"@@f2@Zb@A@JDA@e@s@j@@x@@(r@!@?@@F@:8@%#@@@@@@@@lj@WU@.,@@@@@@V@y@z@e@@0MLLMMMMM@]@@@$listI%Ident!t@@@@@@@)Typedtree*class_expr@@@$boolE@@@@@@@@4typing/rec_check.mliSTTST@@)Rec_checkE@*(!t@@@@@@@&*expression@@@$@@@@@@@@"Q#QR@@!D@[^⠠1 6]x䠠j+,kX:@!t@@@@@ @@@@@ @@@@ @@@ @@@@_v`v@@rA@ H************************************************************************A@@A@L@ H BMMBM@ H OCaml CC@ H DD3@ H Jeremy Yallop, University of Cambridge E44E4@ H Gabriel Scherer, Project Parsifal, INRIA Saclay FF@ H Alban Reynaud, ENS Lyon GG@ H HHg@ H Copyright 2017 Jeremy Yallop IhhIh@ H Copyright 2018 Alban Reynaud JJ@ H Copyright 2018 INRIA  K KN@ H LOOLO@ H All rights reserved. This file is distributed under the terms of MM@ H the GNU Lesser General Public License version 2.1, with the NN5@ H special exception on linking described in the file LICENSE. $O66%O6@ H *P+P@ H************************************************************************0Q1Q@ (* Static checking of recursive declarations Some recursive definitions are meaningful {[ let rec factorial = function 0 -> 1 | n -> n * factorial (n - 1) let rec infinite_list = 0 :: infinite_list ]} but some other are meaningless {[ let rec x = x let rec x = x+1 |} Intuitively, a recursive definition makes sense when the body of the definition can be evaluated without fully knowing what the recursive name is yet. In the [factorial] example, the name [factorial] refers to a function, evaluating the function definition [function ...] can be done immediately and will not force a recursive call to [factorial] -- this will only happen later, when [factorial] is called with an argument. In the [infinite_list] example, we can evaluate [0 :: infinite_list] without knowing the full content of [infinite_list], but with just its address. This is a case of productive/guarded recursion. On the contrary, [let rec x = x] is unguarded recursion (the meaning is undetermined), and [let rec x = x+1] would need the value of [x] while evaluating its definition [x+1]. This file implements a static check to decide which definitions are known to be meaningful, and which may be meaningless. In the general case, we handle a set of mutually-recursive definitions {[ let rec x1 = e1 and x2 = e2 ... and xn = en ]} Our check (see function [is_valid_recursive_expression] is defined using two criteria: Usage of recursive variables: how does each of the [e1 .. en] use the recursive variables [x1 .. xn]? Static or dynamic size: for which of the [ei] can we compute the in-memory size of the value without evaluating [ei] (so that we can pre-allocate it, and thus know its final address before evaluation). The "static or dynamic size" is decided by the classify_* functions below. The "variable usage" question is decided by a static analysis looking very much like a type system. The idea is to assign "access modes" to variables, where an "access mode" [m] is defined as either m ::= Ignore (* the value is not used at all *) | Delay (* the value is not needed at definition time *) | Guard (* the value is stored under a data constructor *) | Return (* the value result is directly returned *) | Dereference (* full access and inspection of the value *) The access modes of an expression [e] are represented by a "context" [G], which is simply a mapping from variables (the variables used in [e]) to access modes. The core notion of the static check is a type-system-like judgment of the form [G |- e : m], which can be interpreted as meaning either of: - If we are allowed to use the variables of [e] at the modes in [G] (but not more), then it is safe to use [e] at the mode [m]. - If we want to use [e] at the mode [m], then its variables are used at the modes in [G]. In practice, for a given expression [e], our implementation takes the desired mode of use [m] as *input*, and returns a context [G] as *output*, which is (uniquely determined as) the most permissive choice of modes [G] for the variables of [e] such that [G |- e : m] holds. 6=* {1 Static or dynamic size} Ӝ X See the note on abstracted arguments in the documentation for Typedtree.Texp_apply <v=w@ p We need to keep track of the size of expressions bound by local declarations, to be able to predict the size of variables. Compare: let rec r = let y = fun () -> r () in y and let rec r = let y = if Random.bool () then ignore else fun () -> r () in y In both cases the final address of `r` must be known before `y` is compiled, and this is only possible if `r` has a statically-known size. The first definition can be allowed (`y` has a statically-known size) but the second one is unsound (`y` has no statically-known size). B}C&*@< binding and variable cases HgkIg@3 non-binding cases NPTOPk@  We use a non-recursive classification, classifying each binding with respect to the old environment (before all definitions), even if the bindings are recursive. Note: computing a fixpoint in some way would be more precise, as the following could be allowed: let rec topdef = let rec x = y and y = fun () -> topdef () in x Tx|U @ = Note: we don't try to compute any size for complex patterns Z [ X@  an identifier will be missing from the map if either: - it is a non-local identifier (bound outside the letrec-binding we are analyzing) - or it is bound by a complex (let p = e in ...) local binding - or it is bound within a module (let module M = ... in ...) that we are not traversing for size computation For non-local identifiers it might be reasonable (although not completely clear) to consider them Static (they have already been evaluated), but for the others we must under-approximate with Dynamic. This could be fixed by a more complete implementation. ` ( 4a##@ local modules could have such paths to local definitions; classify_expression could be extend to compute module shapes more precisely f#e#mg#$@ #* {1 Usage of recursive variables} # * For an expression in a program, its "usage mode" represents static information about how the value produced by the expression will be used by the context around it.  * [Ignore] is for subexpressions that are not used at all during the evaluation of the whole program. This is the mode of a variable in an expression in which it does not occur. ꠠ * A [Delay] context can be fully evaluated without evaluating its argument , which will only be needed at a later point of program execution. For example, [fun x -> ?] or [lazy ?] are [Delay] contexts. נ * A [Guard] context returns the value as a member of a data structure, for example a variant constructor or record. The value can safely be defined mutually-recursively with their context, for example in [let rec li = 1 :: li]. When these subexpressions participate in a cyclic definition, this definition is productive/guarded. The [Guard] mode is also used when a value is not dereferenced, it is returned by a sub-expression, but the result of this sub-expression is discarded instead of being returned. For example, the subterm [?] is in a [Guard] context in [let _ = ? in e] and in [?; e]. When these subexpressions participate in a cyclic definition, they cannot create a self-loop. Ġ * A [Return] context returns its value without further inspection. This value cannot be defined mutually-recursively with its context, as there is a risk of self-loop: in [let rec x = y and y = x], the two definitions use a single variable in [Return] context.  * A [Dereference] context consumes, inspects and uses the value in arbitrary ways. Such a value must be fully defined at the point of usage, it cannot be defined mutually-recursively with its context.  Lower-ranked modes demand/use less of the variable/expression they qualify -- so they allow more recursive definitions. Ignore < Delay < Guard < Return < Dereference Ձ3,,Ղ7-C-G@ Returns the more conservative (highest-ranking) mode of the two arguments. In judgments we write (m + m') for (join m m'). Շ?--ՈC.G.K@ z If x is used with the mode m in e[x], and e[x] is used with mode m' in e'[e[x]], then x is used with mode m'[m] (our notation for "compose m' m") in e'[e[x]]. Return is neutral for composition: m[Return] = m = Return[m]. Composition is associative and [Ignore] is a zero/annihilator for it: (compose Ignore m) and (compose m Ignore) are both Ignore. ՍG..ՎN/0@ K* Create an environment with a single identifier used with a given mode.  +* An environment with no used identifiers.  W* Find the mode of an identifier in an environment. The default mode is Ignore. ֠ p* unguarded e l: the list of all identifiers in l that are dereferenced or returned in the environment e.  Z* dependent e l: the list of all identifiers in l that are used in e (not ignored). t ?* Environments can be joined pointwise (variable per variable) 9 k* Environment composition m[G] extends mode composition m1[m2] by composing each mode in G pointwise  ,* Remove an identifier from an environment.  @* Remove an identifier from an environment, and return its mode  <* Remove all the identifiers of a list from an environment.  9* A "t" maps each rec-bound variable to an access status  V Usage mode judgments. There are two main groups of judgment functions: - Judgments of the form "G |- ... : m" compute the environment G of a subterm ... from its mode m, so the corresponding function has type [... -> Mode.t -> Env.t]. We write [... -> term_judg] in this case. - Judgments of the form "G |- ... : m -| G'" correspond to binding constructs (for example "let x = e" in the term "let x = e in body") that have both an exterior environment G (the environment of the whole term "let x = e in body") and an interior environment G' (the environment at the "in", after the binding construct has introduced new names in scope). For example, let-binding could be given the following rule: G |- e : m + m' ----------------------------------- G+G' |- (let x = e) : m -| x:m', G' Checking the whole term composes this judgment with the "G |- e : m" form for the let body: G |- (let x = e) : m -| G' G' |- body : m ------------------------------- G |- let x = e in body : m To this judgment "G |- e : m -| G'" our implementation gives the type [... -> Mode.t -> Env.t -> Env.t]: it takes the mode and interior environment as inputs, and returns the exterior environment. We write [... -> bind_judg] in this case. մ::յ@@!@ A judgment [judg] takes a mode from the context as input, and returns an environment. The judgment [judg << m], given a mode [m'] from the context, evaluates [judg] in the composed mode [m'[m]]. պCCջDDc@ A binding judgment [binder] expects a mode and an inner environment, and returns an outer environment. [binder >> judg] computes the inner environment as the environment returned by [judg] in the ambient mode. DDEE@ Expression judgment: G |- e : m where (m) is an input of the code and (G) is an output; in the Prolog mode notation, this is (+G |- -e : -m). F'F'FF@ G |- : m -| G' G' |- body : m ------------------------------- G |- let in body : m  GGHH@ (Gi; mi |- pi -> ei : m)^i G |- e : sum(mi)^i ---------------------------------------------- G + sum(Gi)^i |- match e with (pi -> ei)^i : m HHII@ G1 |- low: m[Dereference] G2 |- high: m[Dereference] G3 |- body: m[Guard] --- G1 + G2 + G3 |- for _ = low to high do body done: m  JJ&KiKq@ \ G |- c: m[Dereference] ----------------------- G |- new c: m /L;LA3LL@ Q G |- e: m[Guard] ------------------ G |- ref e: m 9MM=MM@ see the comment on Texp_apply in typedtree.mli; the non-abstracted arguments are bound to local variables, which corresponds to a Guard mode. BNNDOOT@ * (flat) float arrays unbox their elements NPvPNPvP@ This is counted as a use, because constructing a generic array involves inspecting to decide whether to unbox (PR#6939). QPPRQ5Q@ 3 non-generic, non-float arrays act as constructors UQQUQR@ r G |- e: m[Guard] ------------------ ----------- G |- `A e: m [] |- `A: m kT@TFoTT@ Gc |- c: m[Dereference] G1 |- e1: m G2 |- e2: m --- Gc + G1 + G2 |- if c then e1 else e2: m Note: `if c then e1 else e2` is treated in the same way as `match c with true -> e1 | false -> e2` WPWV XMXU@ 5 G1 |- e1: m[Dereference] G2 |- e2: m[Dereference] --- G1 + G2 |- e1.x <- e2: m Note: e2 is dereferenced in the case of a field assignment to a record of unboxed floats in that case, e2 evaluates to a boxed float and it is unboxed on assignment. XXZ*Z2@ G1 |- e1: m[Guard] G2 |- e2: m -------------------- G1 + G2 |- e1; e2: m Note: `e1; e2` is treated in the same way as `let _ = e1 in e2` ZZ[o[w@ G1 |- cond: m[Dereference] G2 |- body: m[Guard] --------------------------------- G1 + G2 |- while cond do body done: m [[\\@ r G |- e: m[Dereference] ---------------------- (plus weird 'eo' option) G |- e#x: m  ] ]!]}]@ Z G |- e: m[Dereference] ----------------------- G |- e.x: m &]]'^:^B@ \ G |- e: m[Dereference] ---------------------- G |- x <- e: m ,^^-^^@ ] G |- e: m ---------------------------- G |- let exception A in e: m 2_u_{3__@ G |- e: m[Dereference] ----------------------- G |- assert e: m Note: `assert e` is treated just as if `assert` was a function. 8`` 9``@ K G |- M: m ---------------- G |- module M: m >aa ?aTa\@ . G |- e: m (Gi; _ |- pi -> ei : m)^i -------------------------------------------- G + sum(Gi)^i |- try e with (pi -> ei)^i : m Contrarily to match, the patterns p do not inspect the value of e, so their mode does not influence the mode of e. DaaEbc@  G |- pth : m (Gi |- ei : m[Dereference])^i ---------------------------------------------------- G + sum(Gi)^i |- {< (xi = ei)^i >} (at path pth) : m Note: {< .. >} is desugared to a function application, but the function implementation might still use its arguments in a guarded way only -- intuitively it should behave as a constructor. We could possibly refine the arguments' Dereference into Guard here. JccKee@ 3 (Gi; _ |- pi -> ei : m[Delay])^i -------------------------------------- sum(Gi)^i |- function (pi -> ei)^i : m Contrarily to match, the value that is pattern-matched is bound locally, so the pattern modes do not influence the final environment. P f;fAQgpgx@ } G |- e: m[Delay] ---------------- (modulo some subtle compiler optimizations) G |- lazy e: m VggWh[hc@ - ---------- [] |- .: m \+jKjQ].jzj@ These coercions perform a shallow copy of the input module, by creating a new module with fields obtained by accessing the same fields in the input module. beppcgq;qo@ a This corresponds to 'external' declarations, and the coercion ignores its argument hjqqikqr@ y Alias coercions ignore their arguments, but they evaluate their alias module 'pth' under another coercion. nnrVr`oorr@. G |- pth : m twswswuwsws@ ------------ x: m |- x: m G |- A: m[Dereference] ----------------------- G |- A.x: m G1 |- A: m[Dereference] G2 |- B: m[Dereference] ------------------------ (as for term application) G1 + G2 |- A(B): m zyss{tt@9 G |- struct ... end : m րuuցuu@ G1, {x: _, x in vars(G1)} |- item1: G2 + ... + Gn in m G2, {x: _, x in vars(G2)} |- item2: G3 + ... + Gn in m ... Gn, {x: _, x in vars(Gn)} |- itemn: [] in m --- (G1 + ... + Gn) - V |- struct item1 ... itemn end: m ֆuuևvv@ N G |- : m -| G' where G is an output and m, G' are inputs ֌wJwJ֍wmw@ Ge |- e: m[Guard] G |- items: m -| G' --------------------------------- Ge + G |- (e;; items): m -| G' The expression `e` is treated in the same way as let _ = e ֒xx!֓xx@ ? ------------------- G |- type t: m -| G ֘zz֙z{@< G |- module M = E : m -| G ֞//֟/O@ GE |- E: m[mM + Guard] ------------------------------------- GE + G |- module M = E : m -| M:mM, G ֤֥;C@ ' G |- let (rec?) (pi = ei)^i : m -| G' ֪֫9@ (Gi, pi:_ |- ei : m[mbody_i])^i (pi : mbody_i -| D)^i ------------------------------------------------------------ Sum(Gi) + (D - (pi)^i) |- let (pi=ei)^i : m -| D ְ&}ֱ*OY@ b (Gi, (xj : mdef_ij)^j |- ei : m[mbody_i])^i (xi : mbody_i -| D)^i G'i = Gi + mdef_ij[G'j] ------------------------------------------------------------------- Sum(G'i) + (D - (pi)^i) |- let rec (xi=ei)^i : m -| D The (mdef_ij)^i,j are a family of modes over two indices: mdef_ij represents the mode of use, within e_i the definition of x_i, of the mutually-recursive variable x_j. The (G'i)^i are defined from the (Gi)^i as a family of equations, whose smallest solution is computed as a least fixpoint. The (Gi)^i are the "immediate" dependencies of each (ei)^i on the outer context (excluding the mutually-defined variables). The (G'i)^i contain the "transitive" dependencies as well: if ei depends on xj, then the dependencies of G'i of xi must contain the dependencies of G'j, composed by the mode mdef_ij of use of xj in ei. For example, consider: let rec z = let rec x = ref y and y = ref z in f x this definition should be rejected as the body [f x] dereferences [x], which can be used to access the yet-unitialized value [z]. This requires realizing that [x] depends on [z] through [y], which requires the transitive closure computation. An earlier version of our check would take only the (Gi)^i instead of the (G'i)^i, which is incorrect and would accept the example above. ֶ0FNַU@ X [binding_env] takes a binding (x_i = e_i) and computes (Gi, (mdef_ij)^j). ּVֽW@6 Gi, (x_j:mdef_ij)^j ZZ@= (mdef_ij)^j (for a fixed i) \ \*@$ Gi ``@3 (Gi, (mdef_ij)^j) b b7@ + Gi, (mdef_ij)^j => Gi + Sum_j mdef_ij[Gj] h h H@ G; m' |- (p -> e) : m with outputs G, m' and input m m' is the mode under which the scrutinee of p (the value matched against p) is placed. tyvx@ Ge |- e : m Gg |- g : m[Dereference] G := Ge+Gg p : mp -| G ---------------------------------------- G - p; m[mp] |- (p (when g)? -> e) : m }@ e p : m -| G with output m and input G m is the mode under which the scrutinee of p is placed. }}@ mp := | Dereference if p is destructuring | Guard otherwise me := sum{G(x), x in vars(p)} -------------------------------------------- p : (mp + me) -| G 24@ B Fast path: functions can never have invalid recursive references  @? The expression has known size YaY@ ! The expression has unknown size @  A class declaration may contain let-bindings. If they are recursive, their validity will already be checked by [is_valid_recursive_expression] during type-checking. This function here prevents a different kind of invalid recursion, which is the unsafe creations of objects of this class in the let-binding. For example, {|class a = let x = new a in object ... end|} is forbidden, but {|class a = let x () = new a in object ... end|} is allowed.   ^`@ 3 ---------- [] |- a: m  AK@ M ----------------------- [] |- struct ... end: m y@ U --------------------------- [] |- fun x1 ... xn -> C: m is@@*./ocamlopt"-g)-nostdlib"-I&stdlib"-I1otherlibs/dynlink0-strict-sequence*-principal(-absname"-w>+a-4-9-40-41-42-44-45-48-66-70+-warn-error"+a*-bin-annot,-safe-string/-strict-formats"-I%utils"-I'parsing"-I&typing"-I(bytecomp"-I,file_formats"-I&lambda"-I*middle_end"-I2middle_end/closure"-I2middle_end/flambda"-I=middle_end/flambda/base_types"-I'asmcomp"-I&driver"-I(toplevel2-function-sections"-cK"-I&typingN 3/home/barsac/ci/builds/workspace/step-by-step-build 0/$#"! @0G3 ;uJ!0a``aaaaa@_@@'0'$O~75Build_path_prefix_map0xөvĠ8CamlinternalFormatBasics0cEXy*Su}Ck.Type_immediacy0dV^25b)̓ԆSjǐ0r&/ĤVD dˠ{0,gqH _ V-R%Types0lm?ƈ(Warnings0zdͦkUe$@@AJ@@@@@ `{Z@J @@@ @@ֱֳ@*@@@@Ӏ@hj@ N а|ưQ@@!@@t$@EH@հ5@g@@C@@@y;@k@Ȱհh@Z@@AD@fp@@@b<@F@@@w@@!@AD֪֨@@;@@@@@_b+L֕@Td@@r@@@7:@@LI@"@@@Pؓ@D@@ @9@@A @ @@BC