Caml1999T036I*#C,Shape_reduceР%Shape%Shape6typing/shape_reduce.mlRR@@ 3@@@@@@#intA;@@@A@@@@@&_none_@@A@A@$charB;@@A@@@@@@A@&stringQ;@@ A@@@@@ @@@%bytesC;@@A@@@@@@@@%floatD;@@A@@@@@@@@$boolE;@@%falsec@@@$trued@@#@@@A@@@@@$@A@$unitF;@@"()e@@.@@@A@@@@@/@A@ #exnG;@@@A@@@@@3@@@#effH;@@O@A@A@@@@@@<@@@,continuationI;@@Q@@P@B@A@nY@@@@@@K@@@%arrayJ;@@R@A@A@@@@@@U@@@ $listK;@@S@A"[]f@@b@"::g@@@T@@o@ @@A@Y@@@@@r@@@&optionL;@@V@A$Noneh@@@$Somei@@@@@A@Y@@@@@@@@)nativeintM;@@A@@@@@@@@%int32N;@@A@@@@@@@@%int64O;@@A@@@@@@@@&lazy_tP;@@X@AJA@Y@@@@@@@@5extension_constructorR;@@A@@@@@@@@*floatarrayS;@@A@@@@@@@@&iarrayT;@@Y@A[A@Y@@@@@@@@*atomic_locU;@@Z@AdA@@@@@@@@@.Assert_failure`#@@@@@J@@@@@@@@[@@AϠ=ocaml.warn_on_literal_patternӐ@@0Division_by_zero]#@@@A٠  @+End_of_file\#$@@@Aᠰ@'FailureY#,@'@@A꠰@0Invalid_argumentX#5@0@@A󠰠$#@-Match_failureV#>@@=@9@;@@a@@A54@)Not_foundZ#O@@@A =<@-Out_of_memoryW#W@@@AED@.Stack_overflow^#_@@@AML@.Sys_blocked_io_#g@@@A$U'T'@)Sys_error[#o@j@@A-^0]0@:Undefined_recursive_modulea#x@@w@s@u@@h@@A>oAnA@:Continuation_already_takenb#@@@AFwIvI@&Stdlib@@@@A3wvvwwwww@v@@R~@@@3|{{|||||@z@@A+&result*ATT@@;@@(Resolved+#Uid!t@@@@@UU@@BA.Resolved_alias<#Uid!t@@@Ӡ*@@@@@VV'@@CA*Unresolved=!t@@@@@W(*W(;@@DA,Approximated>,#Uid!t@@@@@@@@X<>X<\@@EA:Internal_error_missing_uid?@@Y]_Y]{@@FA@@A@@@@@T@@@@@A@#YYUU@O@г[]UU@`U^@_@@h3@x;@@@A@@@@@@@@@@ d@@@@f@#bbVV@S@гdfVV@iVV@@@r@@гl&result V!m@@s$n@@@@p@#ll&W(,'W(6@d@гno/W(:m@@t3n@@@@p@#ll5X<@6X<L@]@гn&option?X<Vg@гrtHX<PIX<S@wLX<TMX<U@@@R@@@S x@@@@z@#vvUY]at@s@@@w@@A@s@@sv@3SRRSSSSS@@@Aఠ,print_result@d[}e[}@wGA@@@&Stdlib&Format)formatter@@@ B@@@@@B@$unitF@@@B@@@@@3@ @@@࣠@#fmtAA[}[}@HA@@-3@9@4@("@@@@C@@9@:@@@@ @@&resultBA[}[}@IA@@63@$G@@@@@@@@ఐ&result\\@G@@@@H3@@@@Ġ(Resolved]]@;=U@@@@>A@AD@A7@@4ఠ#uidC]]@JA@@I@@@3@!@@@@@@@k@@k@@@డp&Format'fprintf^^@ ^^@@@@@@ @&Stdlib&format!a@{@@@ @@@ @@@  @@ @@ @*format.mli.....k@@.Stdlib__Format@+&@@@@@@B@#@@@@@NF@O@%Shape#Uid!T!t@@@F@TF@KB@OF@N@@[@@ZF@Q@F@U@@VF@R@@SF@>@@@@@@@A@@@?2@@=@@<3RQQRRRRR@|@}@~@@@@ఐԠ#fmtd^e^@@@@@ภ8CamlinternalFormatBasicsB&FormatDt^u^A;&Format8CamlinternalFormatBasics'format6!a@Š!b@Ơ!c@Ǡ!d@Ƞ!e@ɠ!f@@@@@'#fmt$ @@@&stringQ@@@@B@@A@A*@@@r@ภ(Open_box;(Open_box%!a@͠!b@Π!c@Ϡ!d@Р!e@Ѡ!f@@@@D@"@@@E@AA@BAAH Q SI  @@@O@ภ&Format֠ภ$-End_of_format&;-End_of_format!f@u!b@v!c@w!e@x@@@7@@@@AYAA.../!@@@y@@@ؠUH@VF@F@G@G@GF@G@G@G@ H@kH@@@@G@ <@ %@%@@@@G@G@H@@,@)H@(!"#H@H@@@@G@W@@;@ H@Ѡ5./2F@ G@Π-G@@@@G@h@ภV.String_literalU;.String_literal+!a@͠!b@Π!c@Ϡ!d@Р!e@Ѡ!f@@@@@A@@@R'#@@@@BKAYAAI$}$}J$%@@@k@)Resolved:@@@@@!G@$G@#@ภ.Formatting_lit;.Formatting_litw!a@!b@!c@!d@!e@ !f@!@@@@.formatting_lit@@@($ @@@@BQAYAA)()())@@@q@ภ$%Break&;%Break@@@A@@@@;#intA@@@<@@@=@C@GC@A|  |  9@@@@@"@ @@@@@>G@BG@A%@A @$@@@?G@DG@C0@@@(@@@@G@FG@E;@@@\@@@5G@=@@ภ.o%Alphaq-;%Alpha@@!b@ @!x@!c@ @@@@@ !a@@@ @@  !d@ !e@!f@@@@ @1+"@@@@AOAYAA('')(.(j@@@ao@ภusҠภ})Close_box|;)Close_box@@@@GC@A@z Az @@@y~@@@@@@nG@s@ภӠ@@fSF@4F@VH@cF@F@3F@UH@dH@eH@fH@gH@h@@@oG@{@@@ F@J"H@P$H@Q&H@R@@@aG@m@@@H@&(/H@)23@@@6G@\@@@ H@4H@@@@"G@2@@@Ӡ̠Π@@@G@@@@9H@ޠנؠ٠@@@G@@1@[Resolved:@ %a@]@@@@@G@}G@|@@@@vSJ4@@@MG@$@@డ#Uid%print^^@ ^^@@@&Stdlib&Format)formatter@@@@g@@@$unitF@@@@@@@@0typing/shape.mliI  I  @@,IdentifiableD@&!@@F@Z@@ఐ᠐#uid^^@d@@F@i@@@@Cj@Ġ.Resolved_alias__@;+@)BAAD@A@@ఠ#uidD__@KA@@4@@@3@@@@ఠ!rE__@LA@@;@@@@@@"_@@v@@v@@@డ{&Format'fprintf`!'`!-@ `!.`!5@@ @@@@@@@ @@B@ B@B@B@pB@yB@PB@YB@F@@@@@3F@F@F@@@@@F@@ @@(F@@F@F@F@@@ @@ F@@F@@@F@@@F@@@F@@@F@̠@@@Π@@@@@@J@@@@3RQQRRRRR@@@zs@t@u@@@@ఐ֠#fmtf`!6g`!9@@@@@ภCDt`!:u`!QAภ NO ภVvWuภ^C_ภ%fBg#A@#@H@KF@"F@6G@GG@X}F@#G@7G@HG@Y H@OH@P@@@ZG@e]@!E@E@@@@[G@hG@gh@@L@IH@;' !"H@?H@@@@@IG@Ww@@[@H@)4-.1F@xG@&,G@'@@@8G@F@ภv t&Alias:y@y@@@@yG@|G@{@ภˠภӠ@@@@@G@G@@A@@@@G@G@@@@@@@G@G@@@@@@@G@@ภภ & %ภSR@@ @@@G@@ภ# ->@@k@@@G@G@@ภ2O3Nภ:;@@@@@G@G@@A@@@@G@G@)@@@!@@@G@G@4@@@U@@@G@9@ภ'hi%ภ/pLq-K@-@F@F@F@nhH@ H@H@@@@G@_@@C@H@ݠ$F@wF@F@H@ޠ"H@ߠH@'H@*H@@@@G@ {@@_@5H@͠H@Π8H@Ϡ3H@Р=H@Ѡ@H@@@@G@@@u@KH@2H@NH@IH@SH@VH@@@@G@@@@aF@ؠaH@cH@eH@@@@G@@@@qH@~Tn?H@qr@@@G@@@@H@j`JMH@mMN@@@zG@@@@RY@@@9G@v@@@-H@@@@$G@5@5@[Alias:@ %a@] ->@ %a@@@@@%G@G@@@@@RG>@@@G@!@@డ e#Uid%print eaRZ faR]@  iaR^ jaRc@@ܰ@@\F@0@@ఐ#uid yaRd zaRg@!@@RF@5'@@ఐ$,print_result aRh aRt@@@RF@86@@ఐ!r aRu aRv@>@@"G@:E@@@@F@Ġ*Unresolved bw{ bw@;@ABAD@A@@ఠ%shapeF bw bw@ MA@@@@@3        @@@@@@@@C@@C@@@డH&Format'fprintf c c@  c c@@ذ@@@f@@@B@ؠ@@x@@@NF@@!t@@@XF@TF@vF@OF@@@@@F@Q@F@U@@VF@R@@SF@>@@@@@@@A@@@?,@@=@@<3        @GZS@T@U@@@@ఐ#fmt c c@e@@@@ภ   !c "cAภ l  kภ # "ภ  Šภ  #@#@nH@oF@F@G@G@ĠgF@G@G@G@Š H@H@@@@G@[@E@E@@@@G@G@f@@L@H@' !"H@H@@@@G@u@@[@H@4-.1F@G@,G@@@@G@@ภ# d et̠+Unresolved:y@y@@@@G@G@@ภ7 x yภ? \ [@@@]@@@G@G@@A@c@@@G@G@@@@g@@@G@ G@ @@@@@@G@@ภm ? >ภu  Ҡภ}  @@@@@2G@7@ภ ˠ @@^~F@F@H@'F@F@F@H@(H@)H@*H@+H@,@@@3G@?@@@~ F@@1"H@$H@&H@@@@%G@1$@@ @UH@(/H@23@@@G@ 2@@@cH@֠4H@٠@@@G@@@@&@Ƞ@@@G@K@@1@|H@n@@@G@X@3@[Unresolved:@ %a@]C@C@@@@G@AG@@d@@JI@@n~@@@MG@m@@డ %print }c ~c@@&Stdlib&Format)formatter@@@ @@@@$unitF@@@@@@@@___@@\C@@@F@U@@ఐ%shape c c@@@G@Z@@@@ 0@Ġ,Approximated d d@; @ ACAD@A @@ Ġ$Some d d@;  ' $@@W@ A@AA@A @@ ఠ#uidG d d@ NA@@ @@@ @@@ d d@@  @@@@@@ #@@@, @@ l $@@ l $@@@డ q&Format'fprintf e e@  e e@@ @@@ @@@b@ @@ @@@nF@3@@@@xF@tF@/ F@oF@2@@?@@>F@q@ F@u@@vF@r@@sF@^ @@@` @@@a@@@_*@@]@@\3 ( ' ' ( ( ( ( (@ naZ@[@\@@@@ఐ #fmt :e ;e@ @@ @@ภ   He IeAԠภ " # ภ *J +Iภ 2 3ภ : ;#@#@͠lH@נmF@F@G@G@gF@G@G@G@ H@۠H@@@@G@[@E@E@@@@G@G@f@@L@ H@Ǡ' !"H@ˠH@@@@G@u@@[@H@4-.1F@G@,G@@@@G@@ภ J  t-Approximated:y@y@@@@G@G@@ภ ^  ภ f  g@@@@@"G@&G@%@A@@@@#G@(G@'@@@@@@$G@*G@)@@@@@@G@!@ภ  ՠf eภ  ݠ ภ  ' &@@@@@RG@W@ภ   @@ ~F@F@:H@GF@F@F@9H@HH@IH@JH@KH@L@@@SG@_@@@  F@.>1"H@4$H@5&H@6@@@EG@Q$@@ @ SH@ (/H@ 23@@@G@@2@@@  aH@4H@@@@G@@@@&@ РȠ@@@G@K@@1@ ۠zH@@@@G@X@5@[Approximated:@ %a@]C@C@ @@@G@aG@`d@@JI@@ ~@@@mG@m@@డ #Uid%print e e@  e e#@@@@F@u@@ఐꠐ#uid e$ e'@@@F@z@@@@ D@Ġ,Approximated f(, f(8@Ġ$None f(9 f(=@; ,@@@@AA@A @@ +@@@@  @@@@@@ !@@@ @@ j "@@ j "@@@డ o&Format'fprintf gAG gAM@  gAN gAU@@ @@@ @@@@  F@F@ @@@ @@@@@@ @@@@~ N@@ఐ #fmtgAVgAY@ j@@  [@@ภ    &gAZ'gApA ภ  i  h4Approximated: No uid@@ M@@@G@G@ |@ภ   @@ LF@F@H@Ϡ @@@G@G@ܠ  @@@G@ @@6@ H@@@@G@ @7F@F@ @@@G@G@ @@ML@@ vw&w@@@G@ @@U@@  @Ġ:Internal_error_missing_uidhquhq@;  @@@@AD@A @@ @@@@  @@  @@@డ &Format'fprintfii@ ii@@ @@@ 6@@@ @  .F@ F@  C@@@  3@@@ @@@  @@ @@  @@ఐ 1#fmtii@ @@ Z @@ภ ] \iiA [ภ h   +Missing uid@@ @@@ cG@ fG@ e %@ภ |  @@ PLF@ PF@ bH@ T @@@ G@ OG@ a  @@@ dG@ p D@@6@ gH@ /@@@ QG@ ` P@7F@F@ m@@@ RG@ sG@ r [@@ML@@ w&w@@@ G@ N d@@U@@  e@@@A&\W@@ 3"!!"""""@ g@@@ YA@@ @  @@ @@ B@  @@@0[}}a@@b@ @ఠ*find_shape=l>l@POA@@@#Env!t@@@*B@ @%Ident!t@@@+B@ %Shape!t@@@*B@ @@ B@ @@ B@ 3baabbbbb@ @@@࣠@#envAsltl@PA@@23rqqrrrrr@ ?{l|n 7@@@@@  @@"idAll@QA@@83@!I@@@@@@@@@ఠ)namespacemm@RA@@ g2Sig_component_kind!t@@@ E@ 3@)W@ @!@@@ภ%Shapemm@2Sig_component_kindmm@@&Modulemm@@;&Module$@@@ @@@DI@@A RW[ !RWc@@@ Z@@ @@-@@@ )@A@m@@డ#Env-shape_of_path#Envn  n @ n n @@)namespace2Sig_component_kind!t@@@&@@@@&@$Path!t@@@&@@@&@@&@@&@@&@.typing/env.mlitu@@C@,'@@$"@@@*@@@@*@@@@*@@@*@@*@@*@@*3@y@@@@@9ఐ)namespace,n -n '@ @@F@@@*E@*E@*@@ఐР#env@n (An +@@@$@@ภ&PidentLn -Mn 3@;&Pident$Path!t@@@+D@@@@+=@A@@D@A/typing/path.mliSTVSTi@@@ B@ఐ栐"idjn 4kn 6@ð@@N@@nn ,@@u@@@*E@+U@@@@V@@@@A@6B@,@A@@@$MakeBp9@p9D@A@Т&ParamsCp9Ep9K@Б$fuelqRXqR\@гw#intqR_qRb@@ @@@,3@tm@n@o@A @@@qRT @@VA@ @@ /read_unit_shapercircx@б)unit_nameг&stringrcrc@@ @@@,3@$7!@A@@г2&optionrcrc@г!trcrc@@ @@@,@@@@@@, @@/$@@,!rc{@@@rce@@WA@@@(@_I@B @@3@-D @A3@R@@p9Ns@@БA+"nfD w  w  @@;@@#uid@@v$#Uid!t@@@,@@@,˰"w  !#w  3@@5]A$desc@@'nf_descD@@@,ΰ0w  41w  B@@C^A,approximated@@@@@,ѰK!@@#@@o"@3@I@@@ఠ)approx_nf ]](@jA@@@@@@;OE@;4@@@;ME@;5@@;6E@;33@lSg[@@@࣠@"nfA])]+@kA@@3@,]]M@@@@@  @@ະ3*@@@;2@@@3@@A@A@3@@B@A@@A@Ѡ@@@;H@@@;GF@;D@ @@@;LF@;J@,approximated ]8 ]D@ภ$true]G]K@;@@@M@@@AB@@A@@@ @@@@@;?F@;C3@AMb@D@E@@@@ఐR"nf-]0.]2@ @@m@1].K@@i@ULA@tE@;QS@A@P@PO@h@ఠ-in_memo_tableA_OUB_Ob@TlA@@@'Hashtbl!t@@>E@<@@>9E@<@@@>E@;S@E@;X@@@@>E@>A@>E@;]@ E@;bE@;c@@;dE@;^@@;_E@;Y@@;ZE@;T@@;UE@;R3onnooooo@@@@@@࣠@*memo_tableA_Oc_Om@mA@@=3@J_OQe)4@@@@@  @@(memo_keyA_On_Ov@nA@@:3@!T@@@@@@@@!fA_Ow_Ox@oA@@F3@N@@@@@@@@#argA_Oy_O|@pA@@K3@Z@@@@@@@@డP'Hashtbl$find``@ ``@@@!a@<!b@<@@@<=@ @@<<@@<;@+hashtbl.mli@@/Stdlib__HashtblF@ @@@@@@<@@@<@@<3@>J@A@B@@@@ఐ*memo_table``@l@@@@ఐ(memo_key``@h@@@@G@@@ఠ#rese!a"a@4qA@@3      @,@@@@@@@ఐ #res-a.a@@ @ @@3,++,,,,,@9@@@Ġ)Not_found=b>b@;)Not_found#exnG@@@@@@ A@A&_none_@@A@@I@@@@@e@@@> X@Rb@@Z@@@@ఠ#resf]c^c@prA@@ E@>E@>?@ఐɠ!fmcnc@@@ K@@ఐŠ#argzc{c@@@ X@@@@Y@A@c@@ డ'Hashtbl'replacedd@ dd@@@N!a@;!b@;@@@@j@]@@@>@@>@@>@@>3@le@f@g@@@@ఐQ*memo_tabledd@6@@@@ఐJ(memo_keydd#@2@@@@ఐ#resd$d'@'@@*@@_@@@@@>8L@>)1@ఐ#rese)1q@7r@@:@os@@;@t@@@@@A`v@@3@@@@xA@E@>A@A@|@|{@A+#envgEg6=g6@@@;@@$fuelh@@#ref@@@>B@@@>D"hEI#hEW@@5tA*global_envi@@U!t@@@>G0iX\1iXn@@CuA)local_envj@@@@@>J<jos=jo@@OvA1reduce_memo_tablek@@'Hashtbl!t@@@@>M@^!t@@@>N@@>OT@@@>P@@@>S`kak@@swA4read_back_memo_tablel@@'Hashtbl!th@@@>V}!t@@@>W@@@>Zzl{l@@xA@@A@@@@@~g68m@@@@sA@#oodhEM@c@@Ш@гrshEShEV@гu#inthEOhER@@}3@'_X@Y@Z;@@@A@@@@@"@@@@@ @@@ @@@@>E @@#~~wiXf@v@@Ш@г#EnviXhiXk@iXliXm@@@ @@@@>H#@@#jo|@@@Ш@г)local_envjo~jo@@2@@@@>K5@@#rk@q@@Ш@гkk@kk@@В@г)local_envkk@@W@@@гkk@@a@@@b@@г"nfkk@@l@@@mk'@@@@>Tq@@#l@@@Ш@гll@ll@@г"nf&l'l@@@@г/l0l@@@@@3l@@@@>[@@@A@@@@321122222@@@@ఠ$bindmCoDo@VyA@@@E@@@?F@>@%Ident#Map#key@@@>F@>@@@@?0@@?/F@>&@@@?F@>@@>F@>@@>F@>@@>F@>3qppqqqqq@mg@@@࣠@#envoAoo@zA@@<3@Iop N@@@@@  @@#varpAoo@{A@@F3@!S@@@@@@@@%shapeqAoo @|A@@G3@Z@@@@@@@@Р3i@@@>@@@3@@A@A@3@@B@A@~3{z@@C@A^@[3XW@@D@AE@B@A@@@@?b@@@?aI@?^@@@@?fI@?d@)local_envp p $@డj#Map#add%Identp 'p ,@ p -p 0@@p 1p 4@ @@@@@1K@!a@1;@!t @@@1J@@@1I@@1H@@1G@@1F@0typing/ident.mliTaiTa@@+Stdlib__MapF@+!@@@@@@>@F@>@@@@> @@@>@@>@@>@@>3      @z@}@~@@@@ఐ#var2p 53p 8@@@@@ఐ%shape?p 9@p >@@@@@ఐΠ#envNp ?Op B@@@,@)local_envUp CVp L@ @@!@@?*5@@s@@YD@@@>:@@@@@?r@@@@?s@@?qI@?k@@@?tI@?n@@@?j@@@@?I@?@@@?I@?@@@?~@@ఐ#envp p @@@Jp@p  @@&r@ A@QF@?@A@@@%Aఠ'reduce_xrPZrPa@}A@@@a@@@@F@?@!t@@@@!F@?@@@HF@?@@?@@?3@K|@}@~@@@࣠@#env~ArPbrPe@CA@@&3@7@2@-&@@?@@?G@?@7@8%forcey@@@@@vF@?@{@@@@0F@?:F@?@@?@@?G@?@@@ ~A(reduce__z@TF@?@N@@@?LF@?@@?@@?G@?@;A ;I@@A)read_back{@+F@?@Z@@@?#!t@@@?@@?@@?G@?@'+'1 '+':@@2@A*read_back_|@F@?@&@@@?:!t@@@?@@?@@?G@?@6((7((@@IAA.read_back_desc}@.F@?@@@@HRF@?$desc@@@HFF@?@@?@@?G@?@P) )Q) )@@cBA@@@@@@!tA]rPf^rPg@pDA@@3\[[\\\\\@@@@@@@@@@ఠ)local_envpsjrqsj{@EA@@?@@@?I@?3tssttttt@%@@@@@ఐ#envsj~sj@$@@@)local_envsjsj@Ӱ @@@A@sjn@@@ఠ(memo_keytt@FA@@@p@@@?I@?ؠ@F@?F@?@@?I@?3@7E>@?@@@@@@ఐM)local_envtt@@@@@ఐo!ttt@P@@@@tt@@@,@"@@?&@A@t @@ఐ-in_memo_tableuu@F@@@@@@@?@E@@?H@?dF@HF@EF@EF@EF@EF@E~F@EzF@DRF@D^F@CF@CF@CF@CF@CF@CF@CF@CxF@CF@BF@AIF@@H@?@@@?@:@@sH@?4A@?@7@@?@@?@@?@@?3&%%&&&&&@}@@@@@@ఐo#env:u;u@ٰ@@@1reduce_memo_tableAuBu@ @@]R@@@?@@ఐ(memo_keySuTu@(@@nH@@-@@ఐg(reduce__dueu@k@@@i@@@@@h@@@@@@C@@ఐ#envxuyu@@@P@@|u}u@@@@@@@}@@@X@@ఐ3!tuu@@@e@@@@f@@@@@@@A@@@@@@)@@@(F@@&@@@rPR@@@@@@@?@@?3@@@@࣠@#envA@GA@@3@@@@@@@%paramAĠ%Thunk@;@@@;0@B@@A@A@@~ఠ)local_env @HA@@@@@@33@/@&@'@@@ఠ!t@IA@@@@@@4@@@@@@@@@ఐQ'reduce_ @ @@@P@KD@@@:@@@93@(4-@.@/$@@@@@@РU@@@@W@@@@VJ@@S@[@@@@[J@@Y@a)local_env!,"5AఐY @(@@@@@FJ@@Q0@s@@@@@g@@@@@h@@@fJ@@`@@@@iJ@@c@@@@_@@@@@xJ@@t@@@@yJ@@u@@@@s@@ఐ#enva#b&@@@}f@e!f7@@i@@ఐ!tq8r9@q@@J@@x@@@@y@A@@@@@@@@@F@@@@@@~}@|@@@@@@?@@?@@?3@@@@࣠@#envAঠ$fuelJPJTAఠ@JA@@@@@@@@@H@@3@@@@*global_envJVJ`Aఠ@KA@@@@@H@@@)local_envJbJkAఠ@LA@@@@@H@@'@@AJOJo@@*@HHJsJv@MA@@@@I@@JNJw@@7@@@@!tA@JyJz@@>@@@@3@)YV@X@WB?@A@@0-@/@.m!@%@"@@@@NAP@@@@I@@гWJ}J~@@@@@@@@JxJ@@@d@@@@%@@@@@ఠ&reduce()@;OA@@@I@@@I@@I@@@@@I@@@@@I@@343344444@CQI@L@:@@@࣠@#envAGH@ZPA@@3FEEFFFFF@(OP@@@@@  @@!tA[\@nQA@@)3ZYYZZZZZ@!2@@@@@@@@ఐǠ'reduce_mn@@@@@@@@@@@3onnooooo@"A@@@@@@ఐ=#env@"@@T@@ఐ6!t?@@@@Z@@$A@@@KBA@fI@@I@A@F@@ఠ,delay_reduce@RA@@@[@@@AI@@@ l@@@AI@@@@@@I@@@@@I@@@@@I@@3@@@@@@࣠@#envA@SA@@%3@2@@@@@  @@!tA@TA@@03@!<@@@@@@@@ภ%Thunk@'ఐ2#env@@@S3@'M@@@@@)local_env@G @@ @@@AK@AK@A@ఐ:!t@@@f@@,F@@&@@@A @SJA@xI@AQ@A@N@@ఠ&return&'@9UA@@@ @@@A0I@A p@@@A I@A@@AI@A332233333@@@@@@࣠@$descAFG@YVA@@3EDDEEEEE@)NO-@@@@@  @@ະ h#uid[\@ఐx!tfg@-@@~@@@A)@A&3ihhiiiii@%1C@(@)@@@#uiduv@3#uid@@@&optionLI!t@@@ @@@ @@@3$descA@@@ @@A@Aykyk@@Sx@3,approximated$boolE@@@ @@B@Aykyk@@_y@@Aykvyk@@cw@=-@@  @@@A$@@@A#J@A'>@ $desc Aఐx @J@L@ ǡ,approximated@ఐݠ!t@@@@@@A:@A8e@,approximated+@G@@ @@@A6J@A9q@@@@@s@A@I@A=@A@@Aఠ-force_aliases1=1J@WA@@@I@A@I@A?@@AB3@@@@@@࣠@"nfA1K1M@XA@@3@ @@@AAJ@A>@@@@@@  @@ఐ"nf1V1X@+@@@@,3@%@@@$desc&1Y'1]@ 5 @@ @@@AH @Ġ&NAlias6ck7cq@;  @@@;1@ !ADAH@A @@ ఠ*delayed_nfEcrFc|@XYA@@ ,@@@AN,@@@@@ $@@@AO0@@ '@@@AP3@@@@ఠ"nf]^@pZA@@kM@AV3]\\]]]]]@C#@@@@@ఐ%forceno@@@@@@@AY@@AX@@ఐ預#env@@@N@A`"@@ఐI*delayed_nf@,@@N@Aa1@@&@@2@A@@@ఐ-force_aliases@@@@@@Ac3@CMF@G@H@@@@ఐT"nf@ @@S@@@@@!@@T@@@@ @@@AR@@ @@@AS@@@ఐʠ"nf@@@@@@A1P@@3@@@@A@@@@AmI@Al@@@15 @@@ఠ8reset_uid_if_new_binding@[A@@@ '@@@AI@AoI@Ap@@AqI@An3@@@@࣠@"t'A@\A@@3@#-U@@@@@  @@ఐ%!t@ڰ@@+@@@Ay@Av3@(4@@ @@@#uid"#@@@@@@Ax@@@Aw@Ġ$None6"7&@a@@@@@@@A@@@A3;::;;;;;@%@@@ @Š@@@A@@@A@@@ఐV"t'O*P,@4@@c@Ġ$Some^-5_-9@@c-:d-;@@@@@AM@@@ @@@@@A@@@AU@#uidt-?u-B@]AN@A@@@A  @@c@@@@@A@@@Aj@@@ະ #uid-P-SAఐ# @ @$@!@@@@A@@@AL@A3@2 @@@ }@@@AL@A@ v@@@AL@A@@ఐ"t'-H-J@@@@-F@@@@@A @@@A@I@A@A@@డP!<]j]k@@!a@@$boolE@@@-@@,@@+)%lessthanBA @@@@*stdlib.mli @@wS@@@@ @@@AH@A@@@@A@@A@@A3@@@@@@@డ!! ]d ]e@@#ref!a@@@@i@@h'%field0AA6@@@45@@@@@@6I@A@@@A@@A/@@ఐ$fuel) /]i@4+@@+@@@AJ@AJ@AC@@5 @@D@@@ A]l B]m@@WI@AO@@A@@ @@@AI@AV@ఐ )approx_nf U]s V]|@ @@@ @@@A @@@A@@Aj@@ఐF&return l]~ m]@v@@@H@@@A @@@A@@A@@ภ&NError ] ]@;.J@,AGAH@A(@@&*NoFuelLeft ] ]@@ ] ]@@;@@@AJ@AJ@A@@ ] ]@@r@@@AJ@A@@ ]} ]@@ @@@A@AJ@A@@T @@I@A@ఐȠ!t  @}@@@@@A@A@$desc  @;@@{@@@A@Ġ)Comp_unit  @;)Comp_unit@@@@&stringQ@@@@AFAH@A924:2I@@@A@ఠ)unit_name  @ ^A@@@@@A3        @@@@@@#@@@@@A@@@@@A@@@డx/read_unit_shape&Params! ! @ !!@@TR@@@BLF!$?@@@BK@@@BJ@@BI@-@+@@b`@@@BPT@@@BO@@@BN@@BM3!'!&!&!'!'!'!'!'@7F?@@@A@@@qఐM)unit_name!9 !:@ @@~@@@BYL@B[L@BZ@@: @@s-@@@BX@@@BW@Ġ$Some!U%!V)@ఠ!t!^*!_+@!qiA@@H@@@Bb9@@@@@O@@@Bd@@@BcA@@V@@@Bf@@@BeH@@@ఐU&reduce!}/!~5@İ@@@R@NL@@Bu@@Bt3!!~!~!!!!!@Y,%@&@'@@@@ఐ#env!6!9@@@M@B|@@ఐB!t!:!;@@@M@B}!@@)@@"@Ġ$None!<H!<L@@@@@@@@Bn@@@Bm@@@@@Bp@@@Bo@@@ఐ&return!<P!<V@԰@@@@@@B @@@B@@B@@ภ*NComp_unit!<X!<b@;@AFAH@A@@ఐ)unit_name!<c!<l@@@@@@BM@BM@B@@!<W!<m@@@@@BM@B@@3@@@@@A!!n{@@3!!!!!!!!@@@@Ġ#App" |" |@;#App9@#@@@'@@@@BBAH@Ap}q}@@@|@ఠ!f"#|"$|@"6_A@@:@@@B3"%"$"$"%"%"%"%"%@4@@@ఠ#arg"2|"3|@"E`A@@I@@@B@@@/":|@@@@@B@@@@@B@@@@ఠ!f"K"L@"^jA@@QK@B3"K"J"J"K"K"K"K"K@\4-@.@/&@ @!@@@ఐp-force_aliases"^"_@V@@@on@@B@@ఐG&reduce"o"p@@@@D@@>@@B@@B&@@ఐꠐ#env""@@@ M@B5@@ఐl!f""@>@@ M@BD@@&@@]E@@'7@@F@A@"9@@ఐX!f""@W@X@Y@@X3""""""""@Xb@@@$desc""@ @@@@@B @Ġ$NAbs""@;@DBAH@A@@àఠ(clos_env""@"kA@@@@@B3""""""""@(@@@ఠ#var""@"lA@@@@@B@ఠ$body"" @"mA@@@@@B@ఠ(_body_nf""@#nA@@@@@B+@@@>"@@@@@B0@@@@@B3@@@@ఠ#arg# -# 0@#oA@@ "@@@BM@B3########@rVO@P@QHA@B@C;4@5@6.'@(@)@@@ఐ,delay_reduce#'3#(?@@@@ @@@B@@@@B D@@@B@@B@@B"@@ఐ#env#A@#BC@D@@ @@@BN@BN@B6@@ఐ##arg#UD#VG@@@@@@BN@BN@BJ@@9 @@NK@A@#a) @@@ఠ#env#lK]#mK`@#pA@@ %@@@BM@B3#p#o#o#p#p#p#p#p@aoh@i@j@@@ఐ >$bind#Kc#Kg@ @@@ 9@@@B@ 4@@@B@@@@B@@@B J@@@B@@B@@B@@B%@@Р   @@@C@@@CN@C@  @@@C!N@C@ )local_env#Ks#K|@ఐ(clos_env#K#K@@@ @@@CN@CT@  @ @@@C.@ @@@C/@@C-N@C' @@@C0N@C*@@@C&@ ' ~ |@@@C@N@C< }@@@CAN@C=@@@C;@@ఐf#env#Kj#Km@@@ @@@C>N@C+N@C@$Kh$K@@ @@@CN@CL@@ఐA#var$K$K@@@0@@@CQ@@ภ$Some$'K$(K@dఐ%#arg$1K$2K@@@@@@BN@CcN@CeN@Cd@@$>K$?K@@ɠ @@@BN@Cb@@@@@A@$HKY @@ఐp8reset_uid_if_new_binding$R$S@\@@@@@@Cs@@Cr3$U$T$T$U$U$U$U$U@@@@@@@ఐA&reduce$i$j@@@@>@:8@@C{@@Cz@@ఐ#env$z${@ @@ N@C%@@ఐ$body$$@o@@ N@C4@@&@@W5@@'=@@ 6@I>@@ @1?@@ }@@$$@@q@@@B@@t@@@B@@@@ఠ#arg$$@$qA@@ M@C@ఐ&reduce$$@@@@@@@C@@C@@ఐ 3#env$$ @̰@@ N@C@@ఐ#arg$ $ @@@ (N@C@@&@@@A@$@@ఐà&return$$%@@@@@@@C,@@@C@@C3$$$$$$$$@NPI@J@K@@@@ภ$NApp%'%+@;3@1BAAH@A(@@%ఐ!f% ,% -@i@@@ఐm#arg%/%2@#@@l&@@%&%4@@@@@CM@C.@@:@@ M@C1@G @@ W@@@A%'%(5B@@ #3%$%#%#%$%$%$%$%$@@@@@@ %@Ġ$Proj%5CK%6CO@;$Projc@M@@@"$Item!t@@@@BEAH@A1@@@" @@ఠ#str%QCP%RCS@%daA@@h@@@B 3%S%R%R%S%S%S%S%S@b@@@ఠ$item%`CU%aCY@%sbA@@&@@@B @@@3%hCZ@@ @@@B @@ "@@@B @@@@ఠ#str%y^l%z^o@%rA@@ uK@C3%y%x%x%y%y%y%y%y@4-@.@/&@ @!@@@ఐ-force_aliases%^%^@@@@@@C@@ఐ u&reduce%^r%^x@@@@ r@ n l@@C@@C&@@ఐ #env%^y%^|@ @@ M@C5@@ఐl#str%^}%^@>@@ M@CD@@&@@ E@@'7@@F@A@%^h9@@@ఠ%nored%%@%sA@@@%@@@CK@C@@@CK@C@@CK@C3%%%%%%%%@fpi@j@k@@@࣠@ 0AĠ"()%%@;%@@@N@@@@A@@A%@@%@@@@"3%%%%%%%%@/%%@@@@@@@ఐ堐&return& & @@@@@@@CN@@@C@@C@@ภ%NProj&& @;@BEAH@A@@ఐ#str&+&,@H@@4@ఐ֠$item&6&7@@@ @@@CN@CN@CF@@&AC@@@@@CN@CM@@=I@@hN@WJA@uK@CQ@A@N@ఐݠ#str&V&W@s@@3&T&S&S&T&T&T&T&T@w@@@@@$desc&`&a@o @@:@@@C @Ġ'NStruct&p&q @;q:@oACAH@Aa@@^ఠ%items&{ &| @&tA& & @@|v@@@C@@@C/@@@ @@`@@@C3@@c@@@C6@@@డ&$Item#Map$find &  (&  ,@ &  -&  0@@&  1&  5@ @@t#Map#key@@@.@ !t!a@. @@@.@@.@@.@'map.mli@@+Stdlib__MapU@)@@@@@@D@@@@D%M@C@@@D@@C@@C3&&&&&&&&@f]@`@a@@@@ఐ$item&  6&  :@h@@@@@D@@ఐ}%items&  ;&  @@@@E-@@@D N@D&N@D$(@@b @@/)@Ġ)Not_found' F `' F i@@@@@&(@@@D*3''''''''@9@@@' F V@@ @@@D+@@@ఐS%nored'# F m'$ F r@ʰ@@@N@@@D4f@@@D3@@D2@@ภE'6 F s'7 F u@D@@@a@@@D;O@D?*@@@@9+@ఠ"nf'I v 'J v @'\uA@@?@@@D-u@@B@@@D.x@@@ఐz8reset_uid_if_new_binding'\ v '] v @f@@@@@@DM@@DL3'_'^'^'_'_'_'_'_@!@@@@@@ఐ%force's v 't v @@@@@@@DU@@DT@@ఐ #env' v ' v @ @@P@D\%@@ఐJ"nf' v ' v @/@@P@D]4@@&@@5@@'=@@6@@@A'  '  @@@@'  '  @@|@@@CO@@@@@CR@@@ఐ䠐%nored'  '  @[@@@@@@Dc@@@Db@@Daf@@ภְ'  '  @@@@@@@DjM@Dnv@@@@w@@@A''  @@3''''''''@z@@@@@@@@X@Ġ#Abs' !' !@;#Abs@$#var@@@@@@@BAAH@A!G|!H|@@@${@ఠ#var' ! ' ! @( cA@@@@@B3''''''''@ @@@ఠ$body(  !(  !@(dA@@ @@@B@@@1( !@@@@@B@@@@@B@@@@ఠ'body_nf("!!%(#!!,@(5vA@@8@@@DK@Ds3(&(%(%(&(&(&(&(&@781@2@3*#@$@%@@@ఐ ,delay_reduce(9!!/(:!!;@ @@@@@@Dy@@@@DxV@@@Dw@@Dv@@Du@@ఐ$bind(U!!=(V!!A@@@@ @@@D@@@@D@@@@D@@@D@@@D@@D@@D@@DC@@ఐ ⠐#env(x!!B(y!!E@ {@@2@@@DM@DM@DW@@ఐ#var(!!F(!!I@`@@@@@Dg@@ภ$None(!!J(!!N@@@@'&@@@D@@@DM@D|@@(!!<(!!O@@a@@@D@DM@D@@ఐ$body(!!P(!!T@@@}@@@DL@DL@D@@ @@@A@(!!! @@ఐ &return(!X!b(!X!h@ ۰@@@@@@D@@@D@@D3((((((((@@@@@@@ภ$NAbs(!X!j(!X!n@+ఐ )local_env(!X!o(!X!x@ @@@@@DK@DK@D @ఐ #var)!X!z)!X!}@ذ@@ @@@DK@DK@D2@ఐ $body)!X!)!X!@@@,@@@DK@DK@DD@ఐ'body_nf)(!X!))!X!@L@@8@@@DK@DK@DV@@)3!X!i)4!X!@@@@@DK@D^@@j@@-K@Da@w @@8@Ġ#Var)H!!)I!!@;#Varv@h@@@@A@AH@A"{"{@@@&z@ఠ"id)\!!)]!!@)oeA@@{@@@B3)^)])])^)^)^)^)^@ m@@@@@@@@@@B@@@@@B@@@డ#Map$find%Ident)~!!)!!@ )!!)!!@@)!!)!!@ @@6@@@1@!a@0@@@1@@1@@1@@U@@@@G@@@D@/.@@@E@@EK@D@@@D @@D@@D3))))))))@ ]V@W@X@@@@ఐd"id)!!)!!@ @@@@@D@@ఐ )local_env)!!)!!@ ԰@@@&@E"@@X@@0#@Ġ$None)##)##@ @@@@ji@@@E/@@@E.3))))))))@7@@@ @rq@@@E1@@@E0@@@ఐ ՠ&return)##)##@ @@@@@@EI>@@@EH@@EG@@ภ$NVar*##*##@;Q @OA@AH@AJ@@Gఐ"id*##*##@h@@^@@@EVM@EZM@EY;@@*&##*'##@@@@@EPM@EUC@@3@@(D@Ġ$Some*8##*9#$@uఠ#def*A#$*B#$@*TwA@@@@@E83*C*B*B*C*C*C*C*C@@@@@@@@Ѡ@@@E:@@@E9 @@ؠ@@@E<@@@E;@@@ఐ%force*c$ $%*d$ $*@@@@@|v@@E^@@E]3*e*d*d*e*e*e*e*e@/(@)@*@@@@ఐ᠐#env*w$ $+*x$ $.@z@@N@Ee@@ఐE#def*$ $/*$ $2@@@N@Ef!@@)@@"@ঠ#uid*$8$J*$8$M@Ġ$Some*$8$P*$8$T@ߠ@*$8$U*$8$V@@@@@EsO@En3********@D@@@@@@@@@@Ep@@@Eo @@A*$8$H*$8$\@@ @"nf*$8$`*$8$b@*xA@@@E|P@Eq@@@@@@@ఐ"nf*$8$f*$8$h@@@@@3********@i@@@ঠ#uid*$$*$$@Ġ$None*$$*$$@@@@@ؠ@@@E@@@E@@A*$$*$$@@@"nf*$$*$$@+yA;@@@EP@E@@@@@@@ະ#uid+ $$+$$@ఐ*!t+$$+$$@߰@@!0@@@E@E3++++++++@+%@)@&@@@#uid+'$$+($$@ @@@@@E@@@EN@E@A@@@EN@E@G@@@EN@E@@ఐN"nf+I$$+J$$@)@@@@@EN@EN@E3@+T$$+U$$@@P6@@@A+W$ $+X%%*@@S3+T+S+S+T+T+T+T+T@@@@Ġ)Not_found+d%+%A+e%+%J@'@@@@*~@@@EA@+k%+%7@@@@@EC@@@EB@@@ఐA*find_shape+~%N%^+%N%h@Ӱ@@@<@@@E@3@@@E,@@@E@@E@@E@@ఐ٠*global_env+%N%i+%N%s@@@X@@@EN@EN@E@@ఐP"id+%N%t+%N%v@@@@@@E@@5@@T@@@E@Ġ)Not_found+%|%+%|%@@@@@*@@@E~@+%|%@@i@@@E@@@ఐ&return+%|%+%|%@ ް@@@@@@E@@@E@@E@@ภ$NVar+%|%+%|%@٠ఐ"id+%|%+%|%@?@@5@@@EO@FO@F@@+%|%+%|%@@@@@EO@E@@1@@@ఠ#res,%%,%%@,"zA@@@@@E3,,,,,,,,@c@@@@@@@E@@డ*!=,$%%,%%%@@!a@@ W@@@'@@&@@%&%equalBA U@@@@ Ty Uy@@)Q@@@@@@@FN@F@@@@F@@F@@F3,D,C,C,D,D,D,D,D@@9@:@;@@@@ఐG#res,V%%,W%%@ @@@@ఐu!t,c%%,d%%@*@@'O@F@@@@ #@@@FO@F%@ఐQ&return,w%%,x%%@@@@S@@@F@@@F@@F9@@ภ$NVar,%%,%%@|ఐ9"id,%%,%%@@@@@@F#O@F'O@F&V@@,%%,%%@@{@@@FO@F"^@@1@@_@ఠ#res,%%,%%@,{A@@W@@@E@@Z@@@E @@@ డ+J$decr,%&,%&@@  #intA@@@u@@@t$unitF@@@s@@r%%decrAA @@@  E@@*r@@@@ ݠ@@@F-@@@F,@@@F+@@F*3,,,,,,,,@?E>@?@@@@@@ఐW$fuel,%&,%& @@@ 9@@@F6@@@F5P@F9P@F7@@F@@@@@F;O@F4!@ఐ&reduce-& &-& &!@b@@@@@@F>@@F=1@@ఐ#env-,& &"--& &%@/@@O@FE@@@ఐ#res-;& &&-<& &)@J@@O@FFO@@&@@ P@{@@<Q@@@A-C%N%X@@>@@@A-E!!-F&*&7@@A]@Ġ$Leaf-Q&8&@-R&8&D@;$Leaf @@@@AH@A&&@@@*@@@  @@@@@B!@@@@@B"@@@ఐD&return-j&8&H-k&8&N@t@@@F@@@Fr@@@Fq@@Fp@@ภ%NLeaf-~&8&O-&8&T@;CH@@@@AH@AB@@?@@@\@@@FyK@F}%@@ @@&@Ġ&Struct-&U&]-&U&c@;&Struct @[#Map!t#@@@@@@@ACAH@A&~&~@@@*i}@ఠ!m-&U&d-&U&e@-fA@@#@@@B)@@@B(3--------@ @@@@@) @@r@@@B*@@u@@@B+@@@@ఠ#mnf-&i&w-&i&z@-|A@@@@@FK@F@@@FK@F~3--------@ 2+@,@-@@@డ-$Item#Map#map -&i&}-&i&@ -&i&-&i&@@-&i&-&i&@ @@@!a@-!b@-@@/@P @@@/T @@@/@@/@@/@N(e(iO(e(@@M]@(@@@@@@@FK@FK@@F@h @@@FlT@@@F@@F@@FO@@ఐ,delay_reduce.6&i&.7&i&@@@@@@@F@@@@FS@@@F@@F@@Fk@@ఐ#env.P&i&.Q&i&@S@@ @@@FN@FN@F@@.[&i&.\&i&@@@@@@Fr@@@F@@F@@ఐ!m.o&i&.p&i&@@@^@@@FL@FL@F@@ @@@A@.|&i&s @@ఐ`&return.&&.&&@@@@b@@@F@@@F@@F3........@@@@@@@ภ'NStruct.&&.&&@-ఐ۠#mnf.&&.&&@@@@@@F@@@FK@FK@F$@@.&&.&&@@@@@FK@F,@@8@@K@F/@E @@@Ġ%Alias.&&.&&@;%Alias @$@@@@ADAH@A(,(-@@@+~@ఠ!t.&&.&&@.gA@@$@@@B03........@@@@@@@@@@@B1@@@@@B2@@@ఐѠ&return.&&.&&@@@@@@@F:@@@F@@F3........@ )"@#@$@@@@ภ&NAlias/&&/&&@ؠఐ|,delay_reduce/&&/&&@@@@@@@F@@@@F7@@@F@@F@@F(@@ఐ#env/4&&/5&&@7@@@@@FL@FL@F<@@ఐi!t/H&&/I&&@F@@ @@@FL@FL@FP@@/S&&/T&&@@<@@@F@FL@FZ@@/]&&/^&&@@8@@@FK@Fb@@n@@_c@Ġ%Error/o&'/p&'@;%Error@@@@@AGAH@A(JL(J]@@@,>B@ఠ!s/&'/&'@/hA@@@@@B7@@@@@B@@@B8@@E@@@B9@@@ఐࠐ)approx_nf/&' /&'@'@@@@@@F@@@F@@F3////////@(!@"@#@@@@ఐ&return/&'/&'@@@@@@@F@@@F@@F@@ภ&NError/&'/&'%@IఐO!s/&'&/&''@-@@@@@G L@G L@G 7@@/&'/&'(@@@@@GL@G ?@@/&'/&')@@'@@@F@GL@GI@@U @@J@@@A/ @@3////////@@@@/]a@@L@@@M@ @@N@@@O@*@@P@@@@Q@A@@@L@@@G@@G@@GF@GT@@@0;=@@@@@T@@@?@@@?@@?@@?300000000@V@@@࣠@#envA0"'+';0#'+'>@05}A@@30!0 0 0!0!0!0!0!@T@@@@@@"nfA@01'+'@02'+'B@@-@@@G30201010202020202@f(@@@@@  @0M~A@@@GI@Gг"nf0K'+'E0L'+'G@@@@@G@@0R'+'?0S'+'H@@@@@@G @@@@ఐ!-in_memo_table0b'O'S0c'O'`@Ȱ@@@@@@GH@GǠ0~[@@@GH@HH@G@@@G@@@U@@@HH@GA@G@@@G@@G@@G@@G300000000@Q_W@Z@N@@@@ఐw#env0'O'a0'O'd@_@@@4read_back_memo_table0'O'e0'O'y@ @@974H@G@@@G@@ఐ"nf0'O'z0'O'|@)@@II@G.@@ఐ*read_back_0'O'~0'O'@@@@@@@@G@@@G@@G@@GG@@ఐ#env0'O'0'O'@@@T@@0'O'}0'O'@@@@@@H@@@H@@H_@@ఐ "nf0'O'0'O'@i@@tI@Hn@@@г0'+'K0'+'L@@@@@H@G~@@@@@A@@@Q@@@H@@@H@@H@@HF@H@@@1'+'-$@@@@@@@@?@@@?@@?@@?31 111 1 1 1 1 @e@@@࣠@#envA11((12((@1DA@@ 3101/1/1010101010@c@@@@@@"nfA@1@((1A((@@ <@@@H*31A1@1@1A1A1A1A1A@u @@@@@  @1\A"@@@H)I@H(г"nf1Z((1[((@@@@@H&@@1a((1b((@@@7@@@H+ @@@@ະ#uid1q((1r((@ఐ?"nf1|((1}((@=@@@4@@@@@H>@H;311111111@@N @@@#uid1((1((@@@@@@H9@@@H8H@H<@$desc1((1((@ఐk.read_back_desc1((1((@o@@@m@lg@@HI@@HH*@@ఐ#env1((1((@s@@7@@ఐ"nf1((1((@L@@@@@HS@HQK@$desc1((1((@@@R@@0@@S@G,approximated1((1((@ఐ"nf1((1((@m@@)@@@H^@H\l@,approximated1((1()@@@f@@@HZH@H]x@@@1((1() @г2 Ӡհ2 ((2 ((@@@@@Hc@H/@@@@@A@@@@@@Hs@@@Hr@@Hq@@HpF@Hl@@@2((!@@@@@@@?@@?32%2$2$2%2%2%2%2%@j@@@࣠@#envA26) ) 27) )#@2IA@@32524242525252525@h@@@@@@$descA2E) )$2F) )(@2XA@@32D2C2C2D2D2D2D2D@x @@@@@@@@@ఠ)read_backŠ2X)+)32Y)+)<@2kA@@@@@@HI@H}N@@@HI@H~@@HI@H|32e2d2d2e2e2e2e2e@".*@%@&@@@࣠@"nfA2x)+)=2y)+)?@2A@@@@@@ఐx)read_back2)+)B2)+)K@|@@@z@@@@Hx@@@H@@H@@H322222222@+%7@@@@@@ఐn#env2)+)L2)+)O@X@@d@@ఐ9"nf2)+)P2)+)R@@@Q@@+@@K@;A@WI@HK@A@2)+)/@@@ఠ/read_back_forceǠ2)V)^2)V)m@2A@@@I@H@@@HI@H@@HI@H322222222@g~w@x@y@@@࣠@#dnfA2)V)n2)V)q@2A@@322222222@&2)V)Z2)V)@@@@@  @@ఐ)read_back2)V)t2)V)}@#@@@<@@@H@@@H@@H322222222@)8@ @!@@@@ఐ)%force3 )V)3)V)@-@@@+@& @@H@@H@@ఐ렐#env3)V)3)V)@հ@@#@@ఐP#dnf3+)V)3,)V)@-@@e0@@3/)V)~I@@<2@@>J@@d3@TKA@mI@HR@A@O@ఐ$desc3=))3>))@Ӱ@@33;3:3:3;3;3;3;3;@q~@@@@@Ġ$NVar3M))3N))@ >ఠ!vʠ3V))3W))@3iA@@!@@@H33X3W3W3X3X3X3X3X@@@@@@@@@@@@@ภ#Var3e))3f))@ ఐ!v3o))3p))@@@@@ @@@HJ@HJ@H33u3t3t3u3u3u3u3u@;* @@@@ @@5@Ġ$NApp3))3))@ఠ#nftˠ3))3))@3A@@!@@@H333333333@W@@@ఠ#nfu̠3))3))@3A@@!@@@H@@@ 3))@@e@@e@@@ภ#App3))3))@ఐb)read_back3))3))@@@@@@@H@@@H@@H333333333@<5@6@7.'@(@)@@@@ఐD#nft3))3))@@@@@@HK@IK@I@@% @@)@@@H@IK@H!@ఐ)read_back3))3)*@ @@@9@@@I@@@I@@I6@@ఐf#nfu4)*4)*@>@@P@@@I K@IK@IJ@@  @@*'@@@H@IK@I R@@j4)*@@T@Ġ$NAbs4#** 4$**@fఠ$_env͠4,**4-**@4?A@@"J@@@H34.4-4-4.4.4.4.4.@@@@ఠ!xΠ4;**4<**@4NA@@"T@@@H@ఠ"_tϠ4I**4J**@4\A@@"\@@@H@ఠ"nfР4W**4X**!@4jA@@"d@@@H+@@@<4_**"@@-@@-@@@ภ#Abs4f*&*.4g*&*1@ ఐ5!x4p*&*24q*&*3@4@5@6@@ @@@IJ@IJ@I34v4u4u4v4v4v4v4v@?XQ@R@SJ<5@6@7/(@)@*@@@ఐ̠/read_back_force4*&*54*&*D@M@@@y@@@I@@I@@ఐH"nf4*&*E4*&*G@@@K@I$)@@@@*@@@I@I%K@I#1@@G4*&*H@@f3@Ġ'NStruct4 *I*O4 *I*V@Hఠ$nstrѠ4 *I*W4 *I*[@4A@@""@@@H@@@H344444444@@@@@@ @@@@@@@ภ&Struct4 *_*g4 *_*m@Aడ4$Item#Map#map 4 *_*o4 *_*s@ 4 *_*t4 *_*w@@4 *_*x4 *_*{@ @ @@@@ J@I3+@@@I,J@ILJ@IGJ@I1@@I4@L@@@I2P@@@I0@@I/@@I.35 555 5 5 5 5 @SL@M@N@@@@ఐZ/read_back_force5 *_*|5 *_*@۰@@@W@@@IE@@ID@@ఐl$nstr5- *_*5. *_*@@@z>@@@I?K@IJK@IH*@@59 *_*n5: *_*@@A@@@I+J@IKK@I>5@@p @@6@Ġ&NAlias5N **5O **@ఠ"nfҠ5W **5X **@5jA@@#>@@@H35Y5X5X5Y5Y5Y5Y5Y@@@@@@@@@@@@@ภ%Alias5f **5g **@ఐ/read_back_force5r **5s **@2@@@^@@@IT@@IS35u5t5t5u5u5u5u5u@;)"@#@$@@@@ఐ0"nf5 **5 **@ @@K@IZ@@5 **5 **@@+@@@IQ@I[K@IY@@1 @@O@Ġ%NProj5 **5 **@ఠ"nfӠ5 **5 **@5A@@#@@@H355555555@q@@@ఠ$itemԠ5 **5 **@5A@@#@@@H@@@ 5 **@@@@@@@ภ$Proj5 **5 **@ఐ|)read_back5 **5 **@@@@@@@If@@@Ie@@Id355555555@<5@6@7.'@(@)@@@@ఐD"nf5 **5 **@@@9@@@ImK@IoK@In@@% @@,@@@Ia@IpK@Il!@ఐO$item6 **6  **@'@@@@@IbJ@IvJ@Iu3@@K6 **@@5@Ġ%NLeaf6*+6*+@@@@@p@@p@@@ภ$Leaf6'*+ 6(*+@@@@y@Ġ*NComp_unit64++65++ @Vఠ!sՠ6=++!6>++"@6PA@@#@@@H36?6>6>6?6?6?6?6?@@@@@@@@@@@@@ภ)Comp_unit6L++&6M++/@zఐ!s6V++06W++1@@@@@@@@I~J@IJ@I36\6[6[6\6\6\6\6\@"* @@@@ @@@Ġ&NError6n+2+86o+2+>@ఠ!s֠6w+2+?6x+2+@@6A@@$#@@@H>@@@@@<?@@<?@@@ภ%Error6+2+D6+2+I@ఐ!s6+2+J6+2+K@@@@@#@@@IJ@IJ@I366666666@[) @@@@ @@U@@@A6))@@W366666666@_@@@@@Y@@@Z8@mA@@g@fa@@JV@@JUF@JSo@@@6) ) @@@젰@ఠ1reduce_memo_tableנ6++6++@6A@@&Stdlib#ref"|@ @@E@N!@ @@E@N"@E@N E@J @@E@N#E@J@@@JF@J@@@JF@JW366666666@@@@డ+Local_store's_table+Local_store6++6++@ 6++6++@@@@!a@Jl!b@Jk@@Jv@ I @@@Ju@@Jt@@Js@5utils/local_store.mli^GG^Go@@+Local_storeA@!@@@@#intA@@@JF@JX@@J@ b]@@@J@@J@@J377777777@Q@@@@@ఠ#arg77AA7@&random&optionL$boolE@@@J@@@J@-@@@J"r@@@J@@J@@Jl@డ5'Hashtbl&create7W++7X++@ 7[++7\++@@.,)@@@<,@@@<+@S@@@<*#"!a@<!b@<@@@<)@@<(@@<'@"A ! !"B c @@"A@(#@@N@A@7P@@ఠ#etaߠ7Z7A7[@ug@@@ఐbc7ba@7c@b7c@a377777777@g@@@cภ$None7m)@@gd@@@J@@@J377777777@@@@@ఐ$%7}@7~@$7~@377777777@)@@@@7@377777777@@@@@A*77A@@7@@@@JG@J@7@@@j7++7++@@G@J@@@@@A@7++@@@䠰@ఠ4read_back_memo_table7+,7+,@7A@@#!q@@E@NNE@JȠ!r@@E@NOE@J@@@JF@J@@@JF@J377777777@92@3@4@@@డ 's_table+Local_store7+,7+,"@ 7+,#7+,*@@ @@@@@@@JF@J3@@J@P8@@@J@@J@@J38 8 8 8 8 8 8 8 @'@@@@@ఠ78.A7@@@@J@@@J@@@@J#RM@@@J@@J@@JG@డ6'Hashtbl&create8<+,+8=+,2@ 8@+,38A+,9@@@@&Z@A@8@@ఠ88^A8@H=@@@ఐ8'8&8@8'@98'@838Q8P8P8Q8Q8Q8Q8Q@m=@@@'ภ80*@@*'@@@J@@@J38a8`8`8a8a8a8a8a@|@@@@ఐ"8@j@8A@#8A@j38k8j8j8k8k8k8k8k@'@@@@8C@38m8l8l8m8m8m8m8m@@@@@A(8D8DA@@8E@@r@@JG@J@5@@@j8+,:8+,<@@{G@Jr@@@@@A@8++@@@@ఠ&reduce8,>,D8,>,J@8A@@@"s@@@K F@J@@@@KF@J@@@KF@J@@JF@J@@JF@J388888888@@@@@@࣠@*global_envA8,>,K8,>,U@8A@@%388888888@28,>,@8!-M-o@@@@@  @@!tA8,>,V8,>,W@8A@@0388888888@!<@@@@@@@@@ఠ$fuel8,Z,b8,Z,f@8A@@ޠ(N@@@JI@J@@@JI@J388888888@+Q@"@#@@@డ7#ref8,Z,i8,Z,l@@!a@@@@g@@f,%makemutableAA,@@@*dd+d@@6@@@@* -@@@J@@J(@@డ($fuel&Params9',Z,m9(,Z,s@ 9+,Z,t9,,Z,x@@(@@@BH@(@( @@FB@@7@@LC@A@95,Z,^ @@@ఠ)local_env9@,|,9A,|,@9SA@@!D$@J@@@JI@J39F9E9E9F9F9F9F9F@[oh@i@j@@@డ%#Map%empty%Ident9],|,9^,|,@ 9a,|,9b,|,@@9f,|,9g,|,@ @!h!a@1?@@@1E@!f@!bE@ @@.)@A@9u,|,@@@ఠ#env9,,9,,@9A@@"9@@@JI@J399999999@?OH@I@J@@@Р!ۡ$fuel9,,9,,Aఐ @P@##@@@K@@@KI@K@!*global_env9,,9,,Aఐ @@+@!)local_env9-3-99-3-BAఐ @7@!&P&O@@@K3@@K2I@K(I@K@@@KK@"1reduce_memo_table9,,9,,@డ8hࠐ9,,9,,@߰@@@ߠ%'@@@KYI@KQ@@@KR@@KPk@@ఐG1reduce_memo_table9,,@@@@@@KWJ@KZJ@KX@@% @@@"M4read_back_memo_table:,-:,-@డ8:,-:,-@@@@%ؠID@@@KI@K}@@@K~@@K|@@ఐd4read_back_memo_table:3,-1@@@/@@@KJ@KJ@K@@% @@@@@:?,,:@ -D-I@@@A@:B,,@@ఐ!?)read_back:N!-M-b:O!-M-k@!C@@@#@@@K@!@@@K!B@@@K@@K@@K3:Y:X:X:Y:Y:Y:Y:Y@@@@@@@ఐ렐#env:k!-M-l@ @@#$@@@KK@KK@K@@'@@@!@@@K!a@@@K@@K@@ఐ!㠐'reduce_:!-M-Q:!-M-X@!@@@#A@@@K@!@@@K!@@@K@@K@@K;@@ఐ##env:!-M-Y:!-M-\@E@@#]@@@KJ@KJ@KO@@ఐ렐!t:!-M-]:!-M-^@ư@@\@@2@@"@@@K@KJ@Kd@@:@@e@@@;@P@@z@@@@ A@1F@K @A@@@Aఠ5is_stuck_on_comp_unit:#-q-{:#-q-@:A@@@)@@@K&@@@L8F@K@@K3::::::::@8XQ@R@S@@@࣠@"nfA@:#-q-:#-q-@@)@@@K3::::::::@)@$@@@K#@@KG@K@*@+@@@@;A,@@@KH@Kг"nf;#-q-;#-q-@@!@@@K @@;#-q-;#-q-@@@A@@@K'@@@@ఐ="nf;,$--;-$--@;@>@+@@'m@@@K@K3;0;/;/;0;0;0;0;0@>L @@@$desc;;$--;<$--@'J@@*@@@K @Ġ$NVar;K%--;L%--@<@;P%--;Q%--@@)@@@K3;P;O;O;P;P;P;P;P@ @@@@@ @@*.@@@K@@*1@@@K@@@ภ%false;c'..;d'..@;;'O@@@@B@@A;8@@;@@@@Ġ$NApp;t(..;u(.. @tఠ"nf;}(..";~(..$@;A@@)X@@@LK@KQ@@;(..&;(..'@@)@@@KY@@@;(..(@@*g@@@K^@@^@Ġ%NProj;(..+;(..0@|'"nf;(..2;(..4@;A@@$r@@;(..6;(..7@@)|@@@Lz@@@;(..8@@*@@@L@@@@A@@*@@@L@@@ఐ점5is_stuck_on_comp_unit;(..<;(..Q@ɰ@@@@@@L<@@L;3;;;;;;;;@RK@L@M@@@@ఐY"nf;(..R;(..T@ @@@@@LAJ@LCJ@LB@@  @@@Ġ'NStruct;).U.[;).U.b@}@;).U.c;).U.d@@))@@@L @@@L @@@ @@*@@@L @@@Ġ$NAbs<).U.g<).U.k@J@< ).U.l< ).U.m@@*(@@@L@@@*(@@@L@@ @*'@@@L@@@*&@@@L@@@@@*@@@L@@@@8@@*@@@L@@@ภ˰<-).U.q<.).U.v@@@@Q@Ġ&NAlias<:*.w.}<;*.w.@@@@A=1//!=1//_@@@@@LK@LF@@@@@LI@@@@ఠ&result=2/c/o=2/c/u@=A@@F@M^F@M23========@ha@b@cB;@<@=@@@ఐ6reduce_aliases_for_uid=2/c/x=2/c/@ܰ@@@@@@@M6@@M5@@M4@@ఐ#env=2/c/=2/c/@԰@@%@@ఐ% %force=2/c/=2/c/@%@@@&@@@MD@% @@@MC%B@@@MB@@MA@@M@A@@ఐ #env> 2/c/> 2/c/@@@<N@@ఐ#dnf>2/c/>2/c/@V@@%/@@@MOM@MSM@MRb@@>#2/c/>$2/c/@@P@@@M>@MTM@MNl@@_ @@Pm@A@>.2/c/k @@ภ.Resolved_alias>53//>63//@7jఐࠐ#uid>?3//>@3//@~@@<@@@MZJ@M]J@M\3>D>C>C>D>D>D>D>D@@@@@@ఐ&result>T3//>U3//@ @@@@#>X3//@@;@@@MY@/@@@ঠ#uid>i4//>j4//@*}Ġ$Some>q4//>r4//@2ఠ#uid>z4//>{4//@>A@@-e@@@L3>|>{>{>|>|>|>|>|@A@@@@@@@-n-m@@@L@@@L @,approximated>4//>4//@*Ġ5>4//>4//@4@@@@-c@@@M@@A>4//>4//@@@@@MK@M$@@@@@M'@@@ภ(Resolved>4/0>4/0@;ఐ>#uid>4/0 >4/0 @=@>@?@@=+@@@McJ@MeJ@Md3>>>>>>>>@O @@@@ @@@ঠ#uid>50 0>50 0A*ఠ@>A@-Š-@@@M@@@M @,approximated>50 0>50 0&@*Ġ*۰>50 0)>50 0-@*@@@@-@@@M@@@>50 0>50 0/@@@@@MK@M@@@@@M@@@ภ,Approximated?50 03?50 0?@3Mఐ5#uid?50 0@?50 0C@8@:@9@@=L=K@@@Ml@@@MkJ@MoJ@Mm3????????@J@@@@@@D@ঠ#uid?-60D0L?.60D0O@+AĠ$None?560D0R?660D0V@1`@@@@.#."@@@M#@@@M"@,approximated?E60D0X?F60D0d@+SĠ?L60D0g?M60D0l@@@@@.@@@M)@@A?S60D0J?T60D0q@@M@@@M+K@M*@@P@@@M,@@@ภ:Internal_error_missing_uid?c<11?d<11@0@@@&@@@A?g0/ / @@3?c?b?b?c?c?c?c?c@(@@@|A@@@@@@M@@M@@MF@M@@@?t/..@@@@ఠ.reduce_for_uid?>11?>11@?A@@@)b@@@MF@M@&@@@NF@M=@@@NF@M@@MF@M@@MF@M3????????@@@@࣠@*global_envA?>11?>11@?A@@#3????????@0?>11?L3I3l@@@@@  @@!tA?>11?>11@?A@@.3????????@!:@@@@@@@@@ఠ$fuel??11??11@?A@@ˠ/;@@@MI@M@@@MI@M3????????@+O@"@#@@@డ>m#ref??11??11@@@@@@@M@@M@@డ/o$fuel&Params@?11@?11@ @?12@?12@@ڰ@@/+@@ @@5,@A@@ ?11@@@ఠ)local_env@@22@@22@@)A@@(+@M@@@MI@M3@@@@@@@@@DXQ@R@S@@@డ,#Map%empty%Ident@3@22@4@22!@ @7@22"@8@22%@@@<@22&@=@22+@ @ְ @@$@A@@A@22 @@@ఠ#env@LA2/27@MA2/2:@@_A@@)@@@MI@M3@P@O@O@P@P@P@P@P@5E>@?@@@@@Р($fuel@aB2?2E@bB2?2IAఐ @F@*T*R@@@M@@@MI@M@(*global_env@xC2K2Q@yC2K2[Aఐܠ @@+@(ơ)local_env@F22@F22Aఐy @7@(--@@@N @@N I@NI@M@@@MK@(塠1reduce_memo_table@D2]2c@D2]2t@డ?4  @D2]2w@D2]2x@ @@@ ,o  @@@N2I@N*@@@N+@@N)k@@ఐ 1reduce_memo_table@D2]2@߰@@ Ơ@@@N0J@N3J@N1@@% @@@)4read_back_memo_table@E22@E22@డ?i ᠐ @E22@E22@ @@@ ,  @@@N^I@NV@@@NW@@NU@@ఐ 04read_back_memo_table@E22@Q@@ @@@N\J@N_J@N]@@% @@@@@A A2/2=A G22@@@A@AA2/23@@@ఠ"nfAH22AH22@A,A@@(c@@@NI@No3AAAAAAAA@@@@@@ఐ('reduce_A.H22A/H22@(W@@@)@@@Nu@(@@@Nt(@@@Ns@@Nr@@Nq@@ఐ#envAHH22AIH22@&@@*@@@NJ@NJ@N0@@ఐ!tA\H22A]H22@~@@=@@2@@A>@A@AaH22@@ఐ5is_stuck_on_comp_unitAmI22AnI23@u@@@@@@N-^@@@N@@N3AsArArAsAsAsAsAs@We^@_@`@@@@ఐl"nfAI23AI23@ @@@@@NI@NI@N@@# @@!J@@@NI@N@ภ*UnresolvedAJ33"AJ33,@7ఐ()read_backAJ33.AJ337@(@@@*_@@@N@(@@@N(@@@N@@N@@N?@@ఐu#envAJ338AJ33;@@@*{@@@NI@NI@NS@@ఐ"nfAJ33<AJ33>@]@@) @@@NI@NI@Ng@@AJ33-AJ33?@@@*@@@N@NI@Nq@@O @@Qr@ఐ(6reduce_aliases_for_uidAL3I3OAL3I3e@@@@*@@@N@%@@@N@S@@@N@@N@@N@@ఐ #envBL3I3fBL3I3i@@@*@@@NI@NI@N@@ఐ "nfB"L3I3jr@s@@O@@@NI@NI@N@@8{@@F@NI@N@B0I22@@@@@@%@@@@@@*@@W@A@F@N@A@@@@121,A@10B@0/B@0.B@.-@.+@,<,6A@+ )@))r@)m)k@)V)T@)F)D@)1)/@))@  k@  @ u@c@k@@@@@3B]B\B\B]B]B]B]B]@q@@BesBfM3m3p@/3BcBbBbBcBcBcBcBc@1@@@1@11p3BgBfBfBgBgBgBgBg@1@@@@Bnp99 @ @,Local_reduceFBzO3r3yB{O3r3@BA@гР2$MakeBP33BP33@@211@11@@11A@1i0B@1/_B@1/-B@..%@.`,@,,A@+b)@*)@))@))@))@))@)t)r@  @  @ %@@@<X@@3BBBBBBBB@22<@242(2@2 1@@11A@11 B@1R/B@1L/`B@/.X@.,4@,,A@+*@*4)@))@))@))@))@))@ / @  5@ X@@"@o@@@2f@@@Б@ఠ$fuelBQ33BQ33@C A@@B@@@NG@N3BBBBBBBB@J@@@JCQ33C Q33@@ @A@C Q33@@@ @ఠ/read_unit_shapeCR33CR33@C+A@@)unit_name@@NG@N7b.@N@@@NG@N@@NG@N3C(C'C'C(C(C(C(C(@u92@3@4@@@࣠(zA@C8R33C9R33@@3C5C4C4C5C5C5C5C5@'C>R33C?R33@@@@@CAR33 @@ภ$NoneCIR33 @5s@ @@7#@@@N@A@4G@N@A@@@&@_&@C<@=@>@@3CSCRCRCSCSCSCSCS@,F@@C[P33C\S33@ 3CYCXCXCYCYCYCYCY@@@@@C`S33@2[G;@@2V@@2TCw2S2R@@@OW@@@OV2Q@2N2M@@2KG@@@OX2J@2G2F@@2D@@@OY2C@2@@@A@@@@@2?@@@2,@@@OEB,@@@O@@O@@O@ @ @ m@@@@O1.@@@O@@O@ p@ q@@@@@O@@@@OC@@@O@@O@@O@@@@/6/5@@@O@Eo,@@@OB@@@O@@O@@O@@@@@@EmO3r3r@@@ఠ,local_reduceEzU33E{U33@EA@@@/Y/X@@@Q@E,@@@QE,s@@@Q@@Q@@QH@QK3EEEEEEEE@@21A@!B@B@B@@@zyA@98@@ @@@@@@@@zy@po@a`@@@P@@@@డK&reduce,Local_reduceEU33EU33@ EU33EU34@@@O@@@Q@N@@@QM@@@Q@@Q@@Q@ G@ H@@]M@A@EU33@@@P@ఠ4local_reduce_for_uidEV44EV44@EA@@@//@@@Q@F-D@@@QC@@@Q@@Q@@QH@Q3EEEEEEEE@q@@@@@డ.reduce_for_uid,Local_reduceFV44FV44*@ FV44+FV449@@@%@@@Q@$@@@QC@@@Q@@Q@@Q@@@@3$@A@F%V44@@@'@DDA@CC@65@5@@5@@@@@@3@PI@J@K@@3F3F2F2F3F3F3F3F3@9S@@@O,Shape_reduceQ@@ıP@@5O@@ñ N@@  M@A5XI@A5H@@CG@@Do@@A>5dA^5@ H************************************************************************F^A@@F_A@L@ H FdBMMFeBM@ H OCaml FjCFkC@ H FpDFqD3@ I Ulysse Gérard, Thomas Refis, Tarides FvE44FwE4@ I Nathanaëlle Courant, OCamlPro F|FF}F@ H Gabriel Scherer, projet Picube, INRIA Paris FGFG@ H FHFHi@ H Copyright 2021 Institut National de Recherche en Informatique et FIjjFIj@ H en Automatique. FJFJ@ H FKFKP@ H All rights reserved. This file is distributed under the terms of FLQQFLQ@ H the GNU Lesser General Public License version 2.1, with the FMFM@ H special exception on linking described in the file LICENSE. FNFN7@ H FO88FO8@ H************************************************************************FPFP@ e We implement a strong call-by-need reduction, following an evaluator from Nathanaelle Courant. FtFu @ J A type of normal forms for strong call-by-need evaluation. The normal form of an abstraction Abs(x, t) is a closure NAbs(env, x, t, dnf) when [env] is the local environment, and [dnf] is a delayed normal form of [t]. A "delayed normal form" is morally equivalent to (nf Lazy.t), but we use a different representation that is compatible with memoization (lazy values are not hashable/comparable by default comparison functions): we represent a delayed normal form as just a not-yet-computed pair [local_env * t] of a term in a local environment -- we could also see this as a term under an explicit substitution. This delayed thunked is "forced" by calling the normalization function as usual, but duplicate computations are precisely avoided by memoization. FC [ ]FT  @  When reducing in the body of an abstraction [Abs(x, body)], we bind [x] to [None] in the environment. [Some v] is used for actual substitutions, for example in [App(Abs(x, body), t)], when [v] is a thunk that will evaluate to the normal form of [t]. FX F[@  Memoization is absolutely essential for performance on this problem, because the normal forms we build can in some real-world cases contain an exponential amount of redundancy. Memoization can avoid the repeated evaluation of identical subterms, providing a large speedup, but even more importantly it implicitly shares the memory of the repeated results, providing much smaller normal forms (that blow up again if printed back as trees). A functor-heavy file from Irmin has its shape normal form decrease from 100Mio to 2.5Mio when memoization is enabled. Note: the local environment is part of the memoization key, while it is defined using a type Ident.Map.t of non-canonical balanced trees: two maps could have exactly the same items, but be balanced differently and therefore hash differently, reducing the effectivenss of memoization. This could in theory happen, say, with the two programs (fun x -> fun y -> ...) and (fun y -> fun x -> ...) having "the same" local environments, with additions done in a different order, giving non-structurally-equal trees. Should we define our own hash functions to provide robust hashing on environments? We believe that the answer is "no": this problem does not occur in practice. We can assume that identifiers are unique on valid typedtree fragments (identifier "stamps" distinguish binding positions); in particular the two program fragments above in fact bind *distinct* identifiers x (with different stamps) and different identifiers y, so the environments are distinct. If two environments are structurally the same, they must correspond to the evaluation evnrionments of two sub-terms that are under exactly the same scope of binders. So the two environments were obtained by the same term traversal, adding binders in the same order, giving the same balanced trees: the environments have the same hash. FvF@  Note: instead of binding abstraction-bound variables to [None], we could unify it with the [Some v] case by binding the bound variable [x] to [NVar x]. One reason to distinguish the situations is that we can provide a different [Uid.t] location; for bound variables, we use the [Uid.t] of the bound occurrence (not the binding site), whereas for bound values we use their binding-time [Uid.t]. F!!F##@ $ This var already has a binding uid F$i${F$i$@; Set the var's binding uid F$$F$%@ The [nf] normal form we receive may contain a lot of internal sharing due to the use of memoization in the evaluator. We have to memoize here again, otherwise the sharing is lost by mapping over the term as a tree. F''F(^(~@ f Sharing the memo tables is safe at the level of a compilation unit since idents should be unique F+M+OF++@ 7 This should not happen if we only reduce closed terms F&--F&-.@  A missing Uid after a complete reduction means the Uid was first missing in the shape which is a code error. Having the [Missing_uid] reported will allow Merlin (or another tool working with the index) to ask users to report the issue if it does happen. F70u0{F;11@@*./ocamlopt)-nostdlib"-I(./stdlib"-I1otherlibs/dynlink"-g0-strict-sequence*-principal(-absname"-w8+a-4-9-40-41-42-44-45-48+-warn-error"+a*-bin-annot/-strict-formats"-I&typing"-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(toplevel"-I%tools"-I'runtime"-I1otherlibs/dynlink"-I-otherlibs/str"-I4otherlibs/systhreads"-I.otherlibs/unix"-I8otherlibs/runtime_events2-function-sections"-cG8G9 ;/builds/workspace/main/flambda/false/label/ocaml-freebsd-64 ?>3210/.-,+*)('&%$#"! @@0W9џP5,.:;3GRGQGQGRGRGRGRGR@GP@@(Asttypes0E\eǥ]k6e5Build_path_prefix_map0gMOBnM`8CamlinternalFormatBasics0oZ2t,ݠ0CamlinternalLazy0;x#5䢜hLm*Cmi_format0KuEB젠*Data_types0-k(.I770؞X:Fݗ)*Format_doc0Mv9630A %Ident0y43a$+,Identifiable0XnAZ4eҠ)Load_path02&9Q҄;L0|;Y t B 5(Location0nݹV 2f-V )Longident0@#j,6.Nt蠠$Misc0  =73 Z +Outcometree0yl4>Yfܠ)Parsetree0Z<4$PC$Path09{ְZsv)Primitive0{mV|{J G0OĸT>bGː0]:]wuf&Stdlib0y{x!O!.Stdlib__Buffer0_?K|/V>O}~Nࠠ.Stdlib__Digest0 Jjrڵ6.Stdlib__Domain0iW',P6wz.Stdlib__Either0FԤ) 4'>.Stdlib__Format0)n[-Ob/Stdlib__Hashtbl0^iaxG$+,Stdlib__Lazy0OM>x9