Caml1999I0311Y #&"R.Stdlib__String!t8@@@A&stringO@@@g@@@@*string.mliRR@@@@@A@$make@#intA@@@h@$charB@@@i @@@j@@k@@l@UU@@/A@$init@@@@m@@%@@@n!@@@o@@p?@@@q@@r@@s@=[||>[|@@NB@%emptyL@@@t@JbKb@@[C@(of_bytes@%bytesC@@@ua@@@v@@w@_h`h@@pD@(to_bytes@p@@@x@@@y@@z@roNNsoNl@@E@&length@@@@{u@@@|@@}.%string_lengthAA @@@vv @@F@#get@@@@~@@@@@@@@@@@0%string_safe_getBA@@@@yRRyR@@G@&concat@@@@@$listI@@@@@@@@@@@@@@@@H@#cat@@@@@@@@@@@@@@@@@@I@%equal@@@@@@@@$boolE@@@@@@@@@@ J@'compare@@@@@@@@@@@@@@@@:::U@@#K@+starts_with&prefix%@@@@+@@@4@@@@@@@@-.P@@>L@)ends_with&suffix@@@@@F@@@O@@@@@@@@HI@@YM@-contains_from@Y@@@@M@@@@K@@@n@@@@@@@@@@gh@@xN@.rcontains_from@x@@@@l@@@@j@@@@@@@@@@@@@eee@@O@(contains@@@@@@@@@@@@@@@@___@@P@#sub@@@@@@@@@@@@@@@@@@@@@@@@Q@-split_on_char@@@@@@@@@@@@@@@@@@@4@@R@#map@@@@@@@@@@@@@@@@@@@@@@VVV@@ S@$mapi@@@@@@@@@@@@@@@@@@@@"@@@@@@@@ !<@@1T@)fold_left@@!a@@@@@ @@@@@ @A@@@@@@@@@@?@@@PU@*fold_right@@8@@@@!a@@@@@@^@@@@  @@@@@@@^ v v_ v @@oV@'for_all@@W@@@z@@@@@@{@@@@@@@@@@@}!C!C~!C!q@@W@&exists@@v@@@@@@@@@@@@@@@@@@@@!!!"@@X@$trim@@@@@@@@@@"s"s"s"@@Y@'escaped@@@@@@@@@@#;#;#;#Y@@Z@/uppercase_ascii@@@@@@@@@@ %l%l %l%@@[@/lowercase_ascii@@@@@@@@@@&<&<&<&b@@\@0capitalize_ascii@@@@@@@@@@' ' ' '3@@ ]@2uncapitalize_ascii@ @@@@@@@@@''''@@^@$iter@@@@@$unitF@@@@@@-@@@ @@@@@@@@/#((0#((@@@_@%iteri@@0@@@ @.@@@ '@@@ @@ @@ @R@@@1@@@@@@@@T'))U'))@@e`@*index_from @e@@@@Y@@@@W@@@c@@@@@@@@@@s/*U*Ut/*U*@@a@.index_from_opt @@@@@x@@@@v@@@&optionJ@@@@@@@@@@@@ @7+t+t7+t+@@b@+rindex_from @@@@!@@@@"@@@@#@@@$@@%@@&@@'@>,t,t>,t,@@c@/rindex_from_opt @@@@(@@@@)@@@@*E@@@+@@@,@@-@@.@@/@E--E--@@d@%index @@@@0@@@@1@@@2@@3@@4@L..L..@@e@)index_opt@@@@5@@@@6|@@@7@@@8@@9@@:@O..O./$@@$f@&rindex@$@@@;@@@@<@@@=@@>@@?@,T/s/s-T/s/@@=g@*rindex_opt@=@@@@@)@@@A9@@@B@@@C@@D@@E@JW//KW/0@@[h@&to_seq@i@@@F&Stdlib#Seq!tN@@@G@@@H@@I@g^00h^00@@xi@'to_seqi@@@@J#Seq!ts@@@Lp@@@K@@M@@@N@@O@e1~1~e1~1@@j@&of_seq@<#Seq!t@@@P@@@Q@@@R@@S@j22j22 @@k@/get_utf_8_uchar@@@@T@@@@U_%Uchar*utf_decode@@@V@@W@@X@u22u22@@l@.is_valid_utf_8@@@@Y@@@Z@@[@y3O3Oy3O3m@@m@2get_utf_16be_uchar@@@@\@@@@]%Uchar*utf_decode@@@^@@_@@`@3334@@n@1is_valid_utf_16be@ @@@a@@@b@@c@4q4q4q4@@o@2get_utf_16le_uchar@@@@d@@@@e%Uchar*utf_decode@@@f@@g@@h@5555C@@)p@1is_valid_utf_16le@7@@@i1@@@j@@k@*55+55@@;q@&create@)@@@l@@@m@@n2caml_create_stringAA@@@A6G6GB6}6@0ocaml.deprecatedH6}6I6}6@ ,Use Bytes.create/BytesLabels.create instead.S6}6T6}6@@V6}6W6}6@@@@@Y6}6@@ir@#set@@@@o@]@@@p@[@@@qT@@@r@@s@@t@@u0%string_safe_setCA@@@@@}77~8(8g@0ocaml.deprecated8(8-8(8=@ &Use Bytes.set/BytesLabels.set instead.8(8?8(8e@@8(8>8(8f@@@@@8(8*@@s@$blit@@@@v@@@@w@V@@@x@@@@y@@@@z@@@{@@|@@}@@~@@@@@9999@@t@$copy@@@@@@@@@@;;;;;W;@0ocaml.deprecated;W;\;W;l@ &Strings now immutable: no need to copy;W;n;W;@@;W;m;W;@@@@@;W;Y@@u@$fill@@@@@@@@@@@@@@@@@@@@@@@@@@@@<3<3>K@0ocaml.deprecated?==@=>@ @Use String.uppercase_ascii/StringLabels.uppercase_ascii instead.J>> K>>I@@M>>N>>J@@@@@P==@@`w@)lowercase @`@@@d@@@@@@b?C?Cc?z?@0ocaml.deprecatedi?d?ij?d?y@ @Use String.lowercase_ascii/StringLabels.lowercase_ascii instead.t?z?u?z?@@w?z?~x?z?@@@@@z?d?f@@x@*capitalize!@@@@@@@@@@@@@A:@0ocaml.deprecated@@@@@ BUse String.capitalize_ascii/StringLabels.capitalize_ascii instead.@@@A8@@@@@A9@@@@@@@@@y@,uncapitalize"@@@@@@@@@@BBBHB@0ocaml.deprecatedB2B7B2BG@ FUse String.uncapitalize_ascii/StringLabels.uncapitalize_ascii instead.BHBMBHB@@BHBLBHB@@@@@B2B4@@z@)get_uint8#@@@@@@@@@@@@@@@@GGGG<@@{@(get_int8$@@@@@@@@@@@@@@@@GGGG@@|@-get_uint16_ne%@@@@@@@@@@@@@@@@H>H>H>Hf@@)}@-get_uint16_be&@)@@@@@@@!@@@@@@@@1HH2HI@@B~@-get_uint16_le'@B@@@@6@@@:@@@@@@@@JIIKII@@[@,get_int16_ne(@[@@@@O@@@S@@@@@@@@cJ?J?dJ?Jf@@t@@,get_int16_be)@t@@@@h@@@l@@@@@@@@|#JJ}#JK@@A@,get_int16_le*@@@@@@@@@@@@@@@@*KK*KK@@B@,get_int32_ne+@@@@@@@@%int32L@@@@@@@@1L4L41L4L]@@C@,get_int32_be,@@@@@@@@@@@@@@@@8LL8LM@@D@,get_int32_le-@@@@@@@@4@@@@@@@@?MwMw?MwM@@E@,get_int64_ne.@@@@@@@@%int64M@@@@@@@@FNNFNNC@@F@,get_int64_be/@@@@@@@@@@@@@@@@MNNMNN@@'G@,get_int64_le0@'@@@@@@@4@@@@@@@@/TO]O]0TO]O@@@H@*unsafe_get1@@@@@@4@@@0@@@@@@@2%string_unsafe_getBAà@@@@M_PLPLN_PLP@@^I@*unsafe_set2@@@@@R@@@@P@@@I@@@@@@@@@2%string_unsafe_setCA@@@@@r`PPsaPP@0ocaml.deprecatedyaPPzaPP@@}aPP @@J@+unsafe_blit3@@@@@@@@@>@@@@@@@@@@@@@@@@@@@@@@@@0caml_blit_stringE@"@@@@@@@bPPdQ1QZ@'noallocdQ1QRdQ1QY@@dQ1QO @@K@+unsafe_fill4@o@@@@@@@@@@@@@@@@@@@@@@@@@@0caml_fill_stringD@Y@@@@@@eQ[Q[gQQ@'noallocfQrQfQrQ@@fQrQfQrQ@0ocaml.deprecatedgQQgQQ@@gQQ@@ L@@r[.Stdlib__String0I3UK# -Stdlib__Uchar0*Ujmyc6]]W+Stdlib__Seq05"g1<)b.Stdlib__Either0&]XF&Stdlib0yӶ~*8CamlinternalFormatBasics0cEXy= 0] and [start], [start+len] are positions of [s]. {b Unicode text.} Strings being arbitrary sequences of bytes, they can hold any kind of textual encoding. However the recommended encoding for storing Unicode text in OCaml strings is UTF-8. This is the encoding used by Unicode escapes in string literals. For example the string ["\u{1F42B}"] is the UTF-8 encoding of the Unicode character U+1F42B. {b Past mutability.} OCaml strings used to be modifiable in place, for instance via the {!String.set} and {!String.blit} functions. This use is nowadays only possible when the compiler is put in "unsafe-string" mode by giving the [-unsafe-string] command-line option. This compatibility mode makes the types [string] and [bytes] (see {!Bytes.t}) interchangeable so that functions expecting byte sequences can also accept strings as arguments and modify them. The distinction between [bytes] and [string] was introduced in OCaml 4.02, and the "unsafe-string" compatibility mode was the default until OCaml 4.05. Starting with 4.06, the compatibility mode is opt-in; we intend to remove the option in the future. The labeled version of this module can be used as described in the {!StdLabels} module. *string.mliXNfh@@@@@@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@A6G5 {1:strings Strings} BPjjCPj@@@@@@AA(!t AMRNR@@8@@@A@@@@@@@VRWR@)ocaml.doch7 The type for strings. eSfS@@@@@@@@@}@@@Aг&stringoR@@0mllmmmmm@l)8@@@A0@@B@B@@@@@%"@@@A $@@&#@x&%@$make UU@б@г9#intUU@@ @@@0@MG@A@@б@г^$charUU@@ @@@@@г &stringUU@@ @@@@@@@@!@@@'@@$* @@@U@d [make n c] is a string of length [n] with each index holding the character [c]. @raise Invalid_argument if [n < 0] or [n > ]{!Sys.max_string_length}. VY.z@@@@@@@A@@7$init [|[|@б@г#int[|[|@@ @@@0@Pe,@A@@б@б@г#int[|[|@@ @@@@@г$char[|[|@@ @@@ @@@@@#@@гk&string[|[|@@ @@@0@@@@@3[| @@@:@@7= @@@[||@Ɛ [init n f] is a string of length [n] with index [i] holding the character [f i] (called in increasing index order). @raise Invalid_argument if [n < 0] or [n > ]{!Sys.max_string_length}. @since 4.02.0 )\*`m@@@@@@@AB@@J%empty5b6b@г&string>b?b@@ @@@0@??@@@@@@av*@A@@@Hb @񐠠 & The empty string. @since 4.13.0 TcUf@@@@@@@lC@@(of_bytes`hah@б@г9%byteskhlh@@ @@@0mllmmmmm@.A,@A@@гנ&stringzh{h@@ @@@@@@@@@@@h @. e Return a new string that contains the same bytes as the given byte sequence. @since 4.13.0 imJL@@@@@@@D@@%(to_bytesoNRoNZ@б@г&stringoN]oNc@@ @@@0@>S,@A@@г%bytesoNgoNl@@ @@@@@@@@@@@oNN @k e Return a new byte sequence that contains the same bytes as the given string. @since 4.13.0 pmmt@@@@@@@E@@%&lengthvv@б@гB&stringvv@@ @@@0@>S,@A@@г#intvv@@ @@@@@@@@@@.%string_lengthAA @@@vv @ ? [length s] is the length (number of bytes/characters) of [s]. w  w P@@@@@@@)F@@,#getyR[yR^@б@г&string)yRa*yRg@@ @@@0+**+++++@EZ3@A@@б@г䠐#int:yRk;yRn@@ @@@@@г$charGyRrHyRv@@ @@@@@@@@!@@@'@@$* @@0%string_safe_getBAV@@@@ZyRR[yR@ [get s i] is the character at index [i] in [s]. This is the same as writing [s.[i]]. @raise Invalid_argument if [i] not an index of [s]. gzh}$@@@@@@@G@@>~ k {1:concat Concatenating} {b Note.} The {!Stdlib.( ^ )} binary operator concatenates two strings. y&&z@@@@@@0xwwxxxxx@Nc*@A&concat@б@г&string@@ @@@@@б@г4$list@г&string@@ @@@3@@@@@@8 @@г&string@@ @@@E@@@@@H@@@4@@K7 @@@@r [concat sep ss] concatenates the list of strings [ss], inserting the separator string [sep] between each. @raise Invalid_argument if the result is longer than {!Sys.max_string_length} bytes. q@@@@@@@H@@^#cat@б@гI&string@@ @@@0@wr,@A@@б@гZ&string@@ @@@@@гg&string  @@ @@@@@@@@!@@@'@@$* @@@@ [cat s1 s2] concatenates s1 and s2 ([s1 ^ s2]). @raise Invalid_argument if the result is longer than {!Sys.max_string_length} bytes. @since 4.13.0 $%ce@@@@@@@:E@б@гL!t:H:I@@ @@@0@hc,@A@@б@г]!t:M:N@@ @@@@@гa#int:R:U@@ @@@@@@@@!@@@'@@$* @@@::@n [compare s0 s1] sorts [s0] and [s1] in lexicographical order. [compare] behaves like {!Stdlib.compare} on strings but may be more efficient. VV@@@@@@@K@@7+starts_with@б&prefixгG&string8>@@ @@@0@Rg.@A@@б@гX&stringBH@@ @@@@@гנ$boolL P@@ @@@@@@@@!@@2'@@$ @@@@ e [starts_with ][~prefix s] is [true] if and only if [s] starts with [prefix]. @since 4.13.0 #QQ$@@@@@@@;L@@8)ends_with/0@б&suffixг&string<= @@ @@@0>==>>>>>@Sj.@A@@б@г&stringMN@@ @@@@@г)$boolZ[@@ @@@@@@@@!@@2'@@$f @@@i@ ] [ends_with ][~suffix s] is [true] if and only if [s] ends with [suffix]. @since 4.13.0 uvk@@@@@@@M@@8-contains_from@б@г預&string@@ @@@0@Qh,@A@@б@гG#int@@ @@@@@б@гj$char@@ @@@ @@г$bool@@ @@@-@@@@@0@@@%@@3( @@@9@@6<@@@@s [contains_from s start c] is [true] if and only if [c] appears in [s] after position [start]. @raise Invalid_argument if [start] is not a valid position in [s]. c@@@@@@@N@ @I.rcontains_fromeiew@б@гJ&stringeze@@ @@@0@bw,@A@@б@г#intee@@ @@@@@б@гˠ$char ee@@ @@@ @@г預$boolee@@ @@@-@@@@@0@@@%@@3( @@@9@@6<@@@+ee@Ԑ [rcontains_from s stop c] is [true] if and only if [c] appears in [s] before position [stop+1]. @raise Invalid_argument if [stop < 0] or [stop+1] is not a valid position in [s]. 78F]@@@@@@@OO@ @I(containsC_cD_k@б@г&stringN_nO_t@@ @@@0POOPPPPP@bw,@A@@б@г$char__x`_|@@ @@@@@г;$booll_m_@@ @@@@@@@@!@@@'@@$* @@@z__@# 4 [contains s c] is {!String.contains_from}[ s 0 c]. @@@@@@@P@@7 # {1:extract Extracting substrings} @@@@@@0@G\#@A#sub@б@г &string@@ @@@@@б@гg#int@@ @@@)@@б@гv#int@@ @@@8@@г6&string @@ @@@E@@@@@H@@@%@@K( @@@7@@N:@@@@ [sub s pos len] is a string of length [len], containing the substring of [s] that starts at position [pos] and has length [len]. @raise Invalid_argument if [pos] and [len] do not designate a valid substring of [s]. @@@@@@@Q@ @a-split_on_char@б@гˠ$char @@ @@@0@zu,@A@@б@г{&string%@@ @@@@@г$list+0,4@г&string5)6/@@ @@@(@@@@@@- @@@"@@0%@@@6@@ 39@@@H@񐠠  [split_on_char sep s] is the list of all (possibly empty) substrings of [s] that are delimited by the character [sep]. The function's result is specified by the following invariants: {ul {- The list is not empty.} {- Concatenating its elements using [sep] as a separator returns a string equal to the input ([concat (make 1 sep) (split_on_char sep s) = s]).} {- No string in the result contains the [sep] character.}} @since 4.04.0 (4.05.0 in StringLabels) T55U.@@@@@@@lR@,@Fj? {1:transforming Transforming} e00f0T@@@@@@0dccddddd@Vk#@A#mapqVZrV]@б@б@г<$char~VaVe@@ @@@ @@гI$charViVm@@ @@@ )@@@@@ ,@@б@г&stringVrVx@@ @@@ ;@@г&stringV|V@@ @@@H@@@@@K@@@$@@NV` @@@VV@b ~ [map f s] is the string resulting from applying [f] to all the characters of [s] in increasing order. @since 4.00.0 @@@@@@@S@@b$mapi @б@б@г#int@@ @@@0@}x.@A@@б@г$char@@ @@@@@г$char#'@@ @@@@@@@@!@@@'@@$* @@б@гn&string,2@@ @@@3@@г{&string6<@@ @@@@@@@@@C@@@$@@F* @@@-@֐ h [mapi f s] is like {!map} but the index of the character is also passed to [f]. @since 4.02.0 9==:@@@@@@@QT@@Z)fold_left EF@б@б@А!a@#B@0POOPPPPP@q*@AVW@@б@г$charab@@ @@@@@А!akl@@@ !@@@@@$@@@@б@А!a*%yz@@б@г᠐&string@@ @@@6@@А!a?:@@@ D@@?@@@G@@ B@@@(@@!E @@@@E [fold_left f x s] computes [f (... (f (f x s.[0]) s.[1]) ...) s.[n-1]], where [n] is the length of the string [s]. @since 4.13.0  ` t@@@@@@@U@@Y*fold_right! v z v @б@б@г$char v  v @@ @@@$0@t.@A@@б@А!a@-B@%  v  v @@А!a  v  v @@@@@& @@@@@'!@@б@гH&string v  v @@ @@@(*@@б@А!a(0 v  v @@А!a.6 v  v @@@33@@); @@@@@*>@@@(@@+A  v  @@@  v v@ [fold_right f s x] computes [f s.[0] (f s.[1] ( ... (f s.[n-1] x) ...))], where [n] is the length of the string [s]. @since 4.13.0     !-!A@@@@@@@ /V@@U'for_all" #!C!G $!C!N@б@б@г$char 0!C!R 1!C!V@@ @@@.0 2 1 1 2 2 2 2 2@p.@A@@г $bool ?!C!Z @!C!^@@ @@@/@@@@@0@@б@г&string Q!C!c R!C!i@@ @@@1!@@г -$bool ^!C!m _!C!q@@ @@@2.@@@@@31@@@$@@44 j!C!Q @@@ m!C!C@ \ [for_all p s] checks if all characters in [s] satisfy the predicate [p]. @since 4.13.0  y!r!r z!!@@@@@@@ W@@H&exists# !! !!@б@б@г P$char !! !!@@ @@@50        @cz.@A@@г p$bool !! !!@@ @@@6@@@@@7@@б@г &string !! !!@@ @@@8!@@г $bool !! !"@@ @@@9.@@@@@:1@@@$@@;4 !! @@@ !!@x i [exists p s] checks if at least one character of [s] satisfies the predicate [p]. @since 4.13.0  "" "]"q@@@@@@@ X@@H$trim$ "s"w "s"{@б@г O&string "s"~ "s"@@ @@@<0        @ax,@A@@г ^&string "s" "s"@@ @@@=@@@@@>@@@ "s"s @ [trim s] is [s] without leading and trailing whitespace. Whitespace characters are: [' '], ['\x0C'] (form feed), ['\n'], ['\r'], and ['\t']. @since 4.00.0  "" #%#9@@@@@@@ 0Y@@%'escaped% $#;#? %#;#F@б@г &string /#;#I 0#;#O@@ @@@?0 1 0 0 1 1 1 1 1@>S,@A@@г &string >#;#S ?#;#Y@@ @@@@@@@@@A@@@ I#;#; @򐠠  [escaped s] is [s] with special characters represented by escape sequences, following the lexical conventions of OCaml. All characters outside the US-ASCII printable range \[0x20;0x7E\] are escaped, as well as backslash (0x2F) and double-quote (0x22). The function {!Scanf.unescaped} is a left inverse of [escaped], i.e. [Scanf.unescaped (escaped s) = s] for any string [s] (unless [escaped s] fails). @raise Invalid_argument if the result is longer than {!Sys.max_string_length} bytes.  U#Z#Z V%D%j@@@@@@@ mZ@@%/uppercase_ascii& a %l%p b %l%@б@г ɠ&string l %l% m %l%@@ @@@B0 n m m n n n n n@>S,@A@@г ؠ&string { %l% | %l%@@ @@@C@@@@@D@@@  %l%l @ / [uppercase_ascii s] is [s] with all lowercase letters translated to uppercase, using the US-ASCII character set. @since 4.03.0 (4.05.0 in StringLabels)   %%  & &:@@@@@@@ [@@%/lowercase_ascii' &<&@ &<&O@б@г &string &<&R &<&X@@ @@@E0        @>S,@A@@г &string &<&\ &<&b@@ @@@F@@@@@G@@@ &<&< @ l [lowercase_ascii s] is [s] with all uppercase letters translated to lowercase, using the US-ASCII character set. @since 4.03.0 (4.05.0 in StringLabels)  &c&c &' @@@@@@@ \@@%0capitalize_ascii( ' ' ' ' @б@г C&string ' '# ' ')@@ @@@H0        @>S,@A@@г R&string ' '- ' '3@@ @@@I@@@@@J@@@ ' '  @ [capitalize_ascii s] is [s] with the first character set to uppercase, using the US-ASCII character set. @since 4.03.0 (4.05.0 in StringLabels)  '4'4 ''@@@@@@@ $]@@%2uncapitalize_ascii) '' ''@б@г &string #'' $''@@ @@@K0 % $ $ % % % % %@>S,@A@@г &string 2'' 3''@@ @@@L@@@@@M@@@ ='' @ 搠 [uncapitalize_ascii s] is [s] with the first character set to lowercase, using the US-ASCII character set. @since 4.03.0 (4.05.0 in StringLabels)  I'' J(s(@@@@@@@ a^@@% _; {1:traversing Traversing}  Z!(( [!((@@@@@@0 Y X X Y Y Y Y Y@5J#@A$iter* f#(( g#((@б@б@г 1$char s#(( t#((@@ @@@N@@г ٠$unit #(( #((@@ @@@O)@@@@@P,@@б@г &string #(( #((@@ @@@Q;@@г $unit #(( #((@@ @@@RH@@@@@SK@@@$@@TN #(( @@@ #((@ W [iter f s] applies function [f] in turn to all the characters of [s]. It is equivalent to [f s.[0]; f s.[1]; ...; f s.[length s - 1]; ()].  $(( %):)@@@@@@@ _@@b%iteri+ ')) '))@б@б@г }#int ')) '))@@ @@@U0        @}x.@A@@б@г $char ')) '))@@ @@@V@@г J$unit ')) '))@@ @@@W@@@@@X!@@@'@@Y$* @@б@г c&string ')) '))@@ @@@Z3@@г l$unit ')) '))@@ @@@[@@@@@@\C@@@$@@]F ')) @@@ "'))@ ː s [iteri] is like {!iter}, but the function is also given the corresponding character index. @since 4.00.0  .()) /+**3@@@@@@@ F`@@Z D9 {1:searching Searching}  ?-*5*5 @-*5*S@@@@@@0 > = = > > > > >@j#@A*index_from, K/*U*Y L/*U*c@б@г &string V/*U*f W/*U*l@@ @@@^@@б@г #int e/*U*p f/*U*s@@ @@@_)@@б@г 2$char t/*U*w u/*U*{@@ @@@`8@@г +#int /*U* /*U*@@ @@@aE@@@@@bH@@@%@@cK( @@@7@@dN:@@@ /*U*U@ ; [index_from s i c] is the index of the first occurrence of [c] in [s] after position [i]. @raise Not_found if [c] does not occur in [s] after position [i]. @raise Invalid_argument if [i] is not a valid position in [s].  0** 4+,+q@@@@@@@ a@ @a.index_from_opt- 7+t+x 7+t+@б@г &string 7+t+ 7+t+@@ @@@e0        @zu,@A@@б@г p#int 7+t+ 7+t+@@ @@@f@@б@г $char 7+t+ 7+t+@@ @@@g @@г V&option 7+t+ 7+t+@г #int 7+t+ 7+t+@@ @@@h7@@@@@@j< @@@"@@k?%@@@4@@lB7@@@H@@mEK@@@ 7+t+t @ [index_from_opt s i c] is the index of the first occurrence of [c] in [s] after position [i] (if any). @raise Invalid_argument if [i] is not a valid position in [s]. @since 4.05  8++ <,`,r@@@@@@@ &b@/@X+rindex_from. >,t,x >,t,@б@г &string %>,t, &>,t,@@ @@@n0 ' & & ' ' ' ' '@q,@A@@б@г ࠐ#int 6>,t, 7>,t,@@ @@@o@@б@г $char E>,t, F>,t,@@ @@@p @@г #int R>,t, S>,t,@@ @@@q-@@@@@r0@@@%@@s3( @@@9@@t6<@@@ c>,t,t@ [rindex_from s i c] is the index of the last occurrence of [c] in [s] before position [i+1]. @raise Not_found if [c] does not occur in [s] before position [i+1]. @raise Invalid_argument if [i+1] is not a valid position in [s].  o?,, pC-R-@@@@@@@ c@ @I/rindex_from_opt/ {E-- |E--@б@г 㠐&string E-- E--@@ @@@u0        @bw,@A@@б@г A#int E-- E--@@ @@@v@@б@г d$char E-- E--@@ @@@w @@г '&option E-- E--@г g#int E-- E--@@ @@@x7@@@@@@z< @@@"@@{?%@@@4@@|B7@@@H@@}EK@@@ E-- @ | [rindex_from_opt s i c] is the index of the last occurrence of [c] in [s] before position [i+1] (if any). @raise Invalid_argument if [i+1] is not a valid position in [s]. @since 4.05  F-- J..@@@@@@@ d@/@X%index0 L.. L..@б@г S&string L.. L..@@ @@@~0        @q,@A@@б@г Š$charL..L..@@ @@@@@г #intL..L..@@ @@@@@@@@!@@@'@@$* @@@"L..@ ː . [index s c] is {!String.index_from}[ s 0 c]. .M../M..@@@@@@@Fe@@7)index_opt1:O..;O./@б@г &stringEO./FO./@@ @@@0GFFGGGGG@Pe,@A@@б@г$charVO./WO./@@ @@@@@г נ&optioncO./dO./$@г#intmO./nO./@@ @@@(@@@@@@- @@@"@@0%@@@6@@39@@@O..@ ) G [index_opt s c] is {!String.index_from_opt}[ s 0 c]. @since 4.05 P/%/%R/_/q@@@@@@@f@,@F&rindex2T/s/wT/s/}@б@г&stringT/s/T/s/@@ @@@0@_t,@A@@б@гr$charT/s/T/s/@@ @@@@@гk#intT/s/T/s/@@ @@@@@@@@!@@@'@@$* @@@T/s/s@ x = [rindex s c] is {!String.rindex_from}[ s (length s - 1) c]. U//U//@@@@@@@g@@7*rindex_opt3W//W//@б@гO&stringW//W//@@ @@@0@Pe,@A@@б@г$charW//W//@@ @@@@@г&optionW/0W/0@гĠ#intW//W/0@@ @@@(@@@@@@- @@@"@@0%@@@6@@39@@@-W//@ ֐ V [rindex_opt s c] is {!String.rindex_from_opt}[ s (length s - 1) c]. @since 4.05 9X00:Z0Q0c@@@@@@@Qh@,@FO; {1 Strings and Sequences} J\0e0eK\0e0@@@@@@0IHHIIIII@Vk#@A&to_seqoV^00W^00@б@г!ta^00b^00@@ @@@@@г9#Seq!tq^00r^00@г9$char{^00|^00@@ @@@ 4@@@@@@ 9 @@@%@@ <(@@@^00@4 [to_seq s] is a sequence made of the string's characters in increasing order. In ["unsafe-string"] mode, modifications of the string during iteration will be reflected in the sequence. @since 4.07 _00c1j1|@@@@@@@i@)@O'to_seqipe1~1e1~1@б@гa!te1~1e1~1@@ @@@ 0@hc,@A@@г#Seq!te1~1e1~1@Вгw#inte1~1e1~1@@ @@@ @@г$chare1~1e1~1@@ @@@ -@@@@@ 2 @@@0@@@ 7e1~1+@@@>@@ ;A.@@@e1~1~1@ Y [to_seqi s] is like {!to_seq} but also tuples the corresponding index. @since 4.07 f11h12@@@@@@@j@@@N&of_seqq j22 j22@б@г#Seq!tj22j22@гߠ$char!j22"j22@@ @@@ 0#""#####@t9@A@@@ @@@  @@г蠐!t5j226j22 @@ @@@ @@@@@ @@@@j22 @鐠 L [of_seq s] is a string made of the sequence's characters. @since 4.07 Lk2!2!Mm2`2r@@@@@@@dk@@*b 7 {1:utf UTF decoding and validations} @since 4.14 ]o2t2t^q22@@@@@@0\[[\\\\\@:\#@As1 {2:utf_8 UTF-8} ns22os22@@@@@@/get_utf_8_ucharxu22yu22@б@г6!tu22u22@@ @@@ )@@б@г<#intu22u22@@ @@@ 8@@гj%Uchar*utf_decodeu22u22@@ @@@ %H@@@@@ &K@@@(@@ 'N+ @@@u22@Y K [get_utf_8_uchar b i] decodes an UTF-8 character at index [i] in [b]. v22w3B3M@@@@@@@l@@a.is_valid_utf_8y3O3Sy3O3a@б@г!ty3O3dy3O3e@@ @@@ (0@zf,@A@@г$booly3O3iy3O3m@@ @@@ )@@@@@ *@@@y3O3O @ P [is_valid_utf_8 b] is [true] if and only if [b] contains valid UTF-8 data. z3n3n{33@@@@@@@m@@%7 {2:utf_16be UTF-16BE}  }33 }33@@@@@@0      @5J#@A2get_utf_16be_uchar3333@б@гԠ!t!33"33@@ @@@ +@@б@гڠ#int034134@@ @@@ ,)@@г%Uchar*utf_decode@34A34@@ @@@ -9@@@@@ .<@@@(@@ /?+ @@@N33@ Q [get_utf_16be_uchar b i] decodes an UTF-16BE character at index [i] in [b]. Z44[4]4o@@@@@@@rn@@R1is_valid_utf_16bef4q4ug4q4@б@г$!tq4q4r4q4@@ @@@ 00srrsssss@kf,@A@@гO$bool4q44q4@@ @@@ 1@@@@@ 2@@@4q4q @4 V [is_valid_utf_16be b] is [true] if and only if [b] contains valid UTF-16BE data. 4444@@@@@@@o@@%7 {2:utf_16le UTF-16LE} 4445 @@@@@@0@5J#@A2get_utf_16le_uchar5555$@б@гr!t55'55(@@ @@@ 3@@б@гx#int55,55/@@ @@@ 4)@@г%Uchar*utf_decode55355C@@ @@@ 59@@@@@ 6<@@@(@@ 7?+ @@@55@ Q [get_utf_16le_uchar b i] decodes an UTF-16LE character at index [i] in [b]. 5D5D55@@@@@@@p@@R1is_valid_utf_16le5555@б@г !t5555@@ @@@ 80@kf,@A@@г$bool5555@@ @@@ 9@@@@@ :@@@)55 @Ґ V [is_valid_utf_16le b] is [true] if and only if [b] contains valid UTF-16LE data. 555666@@@@@@@Mq@@%K % {1:deprecated Deprecated functions} F66G66E@@@@@@0EDDEEEEE@5J#@A&createR6G6PS6G6V@б@г#int]6G6Y^6G6\@@ @@@ ;@@г8%bytesj6G6`k6G6e@@ @@@ <'@@@@@ =*@@2caml_create_stringAAv@@@y6G6Gz6}6@0ocaml.deprecated6}66}6@ ,Use Bytes.create/BytesLabels.create instead.6}66}6@@6}66}6@@@@@6}6@:  [create n] returns a fresh byte sequence of length [n]. The sequence is uninitialized and contains arbitrary bytes. @raise Invalid_argument if [n < 0] or [n > ]{!Sys.max_string_length}. @deprecated This is a deprecated alias of {!Bytes.create}/{!BytesLabels.create}. 6677@@@@@@@r+@)(@'Z*#set7777@б@г%bytes7777@@ @@@ >0@snI@A@@б@гp#int7778@@ @@@ ?@@б@г$char7878 @@ @@@ @ @@г;$unit7878@@ @@@ A-@@@@@ B0@@@%@@ C3( @@@9@@ D6<@@0%string_safe_setCA@@@@@778(8g@0ocaml.deprecated8(8-8(8=@ &Use Bytes.set/BytesLabels.set instead. 8(8? 8(8e@@8(8>8(8f@@@@@8(8*@ 0 [set s n c] modifies byte sequence [s] in place, replacing the byte at index [n] with [c]. You can also write [s.[n] <- c] instead of [set s n c]. @raise Invalid_argument if [n] is not a valid index in [s]. @deprecated This is a deprecated alias of {!Bytes.set}/{!BytesLabels.set}. 8h8h9v9@@@@@@@5s-@)(@'h*$blit*99+99@б@г&string599699@@ @@@ E076677777@K@A@@б@г#intF99G99@@ @@@ F@@б@г#%bytesU99V99@@ @@@ G @@б@г#intd99e99@@ @@@ H/@@б@г#ints99t99@@ @@@ I>@@г٠$unit9999@@ @@@ JK@@@@@ KN@@@%@@ LQ( @@@7@@ MT:@@@I@@ NWL@@@]@@ OZ`@@@99@@ [ [blit src src_pos dst dst_pos len] copies [len] bytes from the string [src], starting at index [src_pos], to byte sequence [dst], starting at character number [dst_pos]. @raise Invalid_argument if [src_pos] and [len] do not designate a valid range of [src], or if [dst_pos] and [len] do not designate a valid range of [dst]. 99; ;9@@@@@@@t@&@m$copy;;;?;;;C@б@г&string;;;F;;;L@@ @@@ P0@,@A@@г&&string;;;P;;;V@@ @@@ Q@@@@@ R@@@;;;;;W;@0ocaml.deprecated;W;\;W;l@ &Strings now immutable: no need to copy;W;n;W;@@;W;m;W;@@@@@;W;Y@ Return a copy of the given string. @deprecated Because strings are immutable, it doesn't make much sense to make identical copies of them. ;;<<1@@@@@@@u@('@&=)$fill<3<7<3<;@б@гݠ%bytes<3<><3<3>K@0ocaml.deprecated===>@ @Use String.uppercase_ascii/StringLabels.uppercase_ascii instead.>> >>I@@>>>>J@@@@@==@u Return a copy of the argument, with all lowercase letters translated to uppercase, including accented letters of the ISO Latin-1 (8859-1) character set. @deprecated Functions operating on Latin-1 character set are deprecated. >L>L>?A@@@@@@@w@('@&=))lowercase?C?G?C?P@б@гL&string?C?S?C?Y@@ @@@ _0@VkD@A@@г[&string?C?]?C?c@@ @@@ `@@@@@ a@@@ ?C?C ?z?@0ocaml.deprecated?d?i?d?y@ @Use String.lowercase_ascii/StringLabels.lowercase_ascii instead.?z??z?@@?z?~?z?@@@@@!?d?f@ʐ Return a copy of the argument, with all uppercase letters translated to lowercase, including accented letters of the ISO Latin-1 (8859-1) character set. @deprecated Functions operating on Latin-1 character set are deprecated. -??.@h@@@@@@@@Ex@('@&=)*capitalize9@@:@@@б@г&stringD@@E@@@@ @@@ b0FEEFFFFF@VkD@A@@г&stringS@@T@@@@ @@@ c@@@@@ d@@@^@@_@A:@0ocaml.deprecatede@@f@@@ BUse String.capitalize_ascii/StringLabels.capitalize_ascii instead.p@@q@A8@@s@@t@A9@@@@@v@@@ Return a copy of the argument, with the first character set to uppercase, using the ISO Latin-1 (8859-1) character set.. @deprecated Functions operating on Latin-1 character set are deprecated. A;A;AB @@@@@@@y@('@&=),uncapitalizeBBBB@б@г&stringBB!BB'@@ @@@ e0@VkD@A@@г&stringBB+BB1@@ @@@ f@@@@@ g@@@BBBHB@0ocaml.deprecatedB2B7B2BG@ FUse String.uncapitalize_ascii/StringLabels.uncapitalize_ascii instead.BHBMBHB@@BHBLBHB@@@@@B2B4@t Return a copy of the argument, with the first character set to lowercase, using the ISO Latin-1 (8859-1) character set. @deprecated Functions operating on Latin-1 character set are deprecated. BBCCf@@@@@@@z@('@&=)퐠 ! {1 Binary decoding of integers} ChChChC@@@@@@0@Mb;@A  The functions in this section binary decode integers from strings. All following functions raise [Invalid_argument] if the characters needed at index [i] to decode the integer are not available. Little-endian (resp. big-endian) encoding means that least (resp. most) significant bytes are stored first. Big-endian is also known as network byte order. Native-endian encoding is either little-endian or big-endian depending on {!Sys.big_endian}. 32-bit and 64-bit integers are represented by the [int32] and [int64] types, which can be interpreted either as signed or unsigned numbers. 8-bit and 16-bit integers are represented by the [int] type, which has more bits than the binary encoding. These extra bits are sign-extended (or zero-extended) for functions which decode 8-bit or 16-bit integers and represented them with [int] values. CCGG@@@@@@)get_uint8GGGG%@б@гk&stringGG(GG.@@ @@@ h)@@б@гǠ#intGG2GG5@@ @@@ i8@@гԠ#int*GG9+GG<@@ @@@ jE@@@@@ kH@@@%@@ lK( @@@8GG@ᐠ i [get_uint8 b i] is [b]'s unsigned 8-bit integer starting at character index [i]. @since 4.13.0 DG=G=EGG@@@@@@@\{@@^(get_int8PGGQGG@б@г&string[GG\GG@@ @@@ m0]\\]]]]]@wc,@A@@б@г#intlGGmGG@@ @@@ n@@г##intyGGzGG@@ @@@ o@@@@@ p!@@@'@@ q$* @@@GG@0 f [get_int8 b i] is [b]'s signed 8-bit integer starting at character index [i]. @since 4.13.0 GGH:H<@@@@@@@|@@7-get_uint16_neH>HBH>HO@б@г&stringH>HRH>HX@@ @@@ r0@Pe,@A@@б@гe#intH>H\H>H_@@ @@@ s@@гr#intH>HcH>Hf@@ @@@ t@@@@@ u!@@@'@@ v$* @@@H>H>@ | [get_uint16_ne b i] is [b]'s native-endian unsigned 16-bit integer starting at character index [i]. @since 4.13.0 HgHg HH@@@@@@@}@@7-get_uint16_beHHHH@б@гV&stringHHHI@@ @@@ w0@Pe,@A@@б@г#int HI HI @@ @@@ x@@г#intHIHI@@ @@@ y@@@@@ z!@@@'@@ {$* @@@%HH@ΐ y [get_uint16_be b i] is [b]'s big-endian unsigned 16-bit integer starting at character index [i]. @since 4.13.0 1II2II@@@@@@@I~@@7-get_uint16_le=II>II@б@г&stringHIIIII@@ @@@ |0JIIJJJJJ@Pe,@A@@б@г#intYIIZII@@ @@@ }@@г#intfIIgII@@ @@@ ~@@@@@ !@@@'@@ $* @@@tII@ | [get_uint16_le b i] is [b]'s little-endian unsigned 16-bit integer starting at character index [i]. @since 4.13.0 IIJ;J=@@@@@@@@@7,get_int16_neJ?JCJ?JO@б@г&stringJ?JRJ?JX@@ @@@ 0@Pe,@A@@б@гR#intJ?J\J?J_@@ @@@ @@г_#intJ?JcJ?Jf@@ @@@ @@@@@ !@@@'@@ $* @@@J?J?@l y [get_int16_ne b i] is [b]'s native-endian signed 16-bit integer starting at character index [i]. @since 4.13.0 JgJg!JJ@@@@@@@@@@7,get_int16_be#JJ#JJ@б@гC&string#JJ#JK@@ @@@ 0@Pe,@A@@б@г#int#JK#JK@@ @@@ @@г#int#JK #JK@@ @@@ @@@@@ !@@@'@@ $* @@@#JJ@ v [get_int16_be b i] is [b]'s big-endian signed 16-bit integer starting at character index [i]. @since 4.13.0 $KK(KK@@@@@@@6A@@7,get_int16_le**KK+*KK@б@г&string5*KK6*KK@@ @@@ 076677777@Pe,@A@@б@г#intF*KKG*KK@@ @@@ @@г#intS*KKT*KK@@ @@@ @@@@@ !@@@'@@ $* @@@a*KK@ y [get_int16_le b i] is [b]'s little-endian signed 16-bit integer starting at character index [i]. @since 4.13.0 m+KKn/L0L2@@@@@@@B@@7,get_int32_ney1L4L8z1L4LD@б@г᠐&string1L4LG1L4LM@@ @@@ 0@Pe,@A@@б@г?#int1L4LQ1L4LT@@ @@@ @@гH%int321L4LX1L4L]@@ @@@ @@@@@ !@@@'@@ $* @@@1L4L4@Y r [get_int32_ne b i] is [b]'s native-endian 32-bit integer starting at character index [i]. @since 4.13.0 2L^L^6LL@@@@@@@C@@7,get_int32_be8LL8LL@б@г0&string8LL8LL@@ @@@ 0@Pe,@A@@б@г#int8LL8LL@@ @@@ @@г%int328LL8LM@@ @@@ @@@@@ !@@@'@@ $* @@@8LL@ o [get_int32_be b i] is [b]'s big-endian 32-bit integer starting at character index [i]. @since 4.13.0  9MM =MsMu@@@@@@@#D@@7,get_int32_le?MwM{?MwM@б@г&string"?MwM#?MwM@@ @@@ 0$##$$$$$@Pe,@A@@б@гݠ#int3?MwM4?MwM@@ @@@ @@г栐%int32@?MwMA?MwM@@ @@@ @@@@@ !@@@'@@ $* @@@N?MwMw@ r [get_int32_le b i] is [b]'s little-endian 32-bit integer starting at character index [i]. @since 4.13.0 Z@MM[DNN@@@@@@@rE@@7,get_int64_nefFNNgFNN*@б@гΠ&stringqFNN-rFNN3@@ @@@ 0srrsssss@Pe,@A@@б@г,#intFNN7FNN:@@ @@@ @@г1%int64FNN>FNNC@@ @@@ @@@@@ !@@@'@@ $* @@@FNN@F r [get_int64_ne b i] is [b]'s native-endian 64-bit integer starting at character index [i]. @since 4.13.0 GNDNDKNN@@@@@@@F@@7,get_int64_beMNNMNN@б@г&stringMNNMNN@@ @@@ 0@Pe,@A@@б@г{#intMNNMNN@@ @@@ @@г%int64MNNMNN@@ @@@ @@@@@ !@@@'@@ $* @@@MNN@ o [get_int64_be b i] is [b]'s big-endian 64-bit integer starting at character index [i]. @since 4.13.0 NNNROYO[@@@@@@@G@@7,get_int64_leTO]OaTO]Om@б@гl&stringTO]OpTO]Ov@@ @@@ 0@Pe,@A@@б@гʠ#int TO]Oz!TO]O}@@ @@@ @@гϠ%int64-TO]O.TO]O@@ @@@ @@@@@ !@@@'@@ $* @@@;TO]O]@䐠 r [get_int64_le b i] is [b]'s little-endian 64-bit integer starting at character index [i]. @since 4.13.0 GUOOHYOO@@@@@@@_H@@7]"/*X[PPY[PP@@@@@@0WVVWWWWW@G\#@A*unsafe_getd_PLPUe_PLP_@б@г̠&stringo_PLPbp_PLPh@@ @@@ @@б@г(#int~_PLPl_PLPo@@ @@@ )@@гI$char_PLPs_PLPw@@ @@@ 6@@@@@ 9@@@%@@ <( @@2%string_unsafe_getBA@@@@_PLPL_PLP@@I@@@I*unsafe_set`PP`PP@б@г%bytes`PP`PP@@ @@@ 0@b]&@A@@б@гq#int`PP`PP@@ @@@ @@б@г$char`PP`PP@@ @@@  @@г<$unit`PP`PP@@ @@@ -@@@@@ 0@@@%@@ 3( @@@9@@ 6<@@2%string_unsafe_setCA@@@@@`PPaPP@0ocaml.deprecatedaPPaPP@@aPP @@J@@ N+unsafe_blitbPPbPQ@б@гy&stringcQQ cQQ@@ @@@ 0@g|1@A@@б@гנ#int-cQQ.cQQ@@ @@@ @@б@г %bytes<cQQ=cQQ@@ @@@  @@б@г#intKcQQ#LcQQ&@@ @@@ /@@б@г#intZcQQ*[cQQ-@@ @@@ >@@г$unitgdQ1Q5hdQ1Q9@@ @@@ K@@@@@ N@@@%@@ Q( @@@7@@ T:@@@I@@ WL@@@]@@ Z`@@0caml_blit_stringE@@@@@@@@bPPdQ1QZ@'noallocdQ1QRdQ1QY@@dQ1QO @@K@@ t+unsafe_filleQ[QdeQ[Qo@б@гv%bytesfQrQtfQrQy@@ @@@ 0@3@A@@б@гc#intfQrQ}fQrQ@@ @@@ @@б@гr#intfQrQfQrQ@@ @@@  @@б@г$charfQrQfQrQ@@ @@@ /@@г=$unitfQrQfQrQ@@ @@@ <@@@@@ ?@@@%@@ B( @@@7@@ E:@@@K@@ HN@@0caml_fill_stringD@@@@@@@eQ[Q[gQQ@'noallocfQrQfQrQ@@ fQrQ fQrQ@0ocaml.deprecatedgQQgQQ@@gQQ@@,L@@l@A@d@P@@@e@Q*@@d@P@@n@Z@ @o@[@@U@A@@v@@>@*@~@jC@/@@@~W@C@@;@@_@K@@~E@1 @  @  @@  @  @ l 3@  @  @ e +@  @  @ } V@ 1 @  @ ]@@*@@@X1@@[@G@@t@`'@@@y@@,@@Y@E @@r@M@@5@@@0@@A@ H************************************************************************A@@A@L@ H BMMBM@ H OCaml CC@ H DD3@ H Xavier Leroy, projet Cristal, INRIA Rocquencourt E44E4@ H FF@ H Copyright 1996 Institut National de Recherche en Informatique et GG@ H en Automatique. HHg@ H IhhIh@ H All rights reserved. This file is distributed under the terms of JJ@ H the GNU Lesser General Public License version 2.1, with the KKN@ H special exception on linking described in the file LICENSE. LOOLO@ H MM@ H************************************************************************NN5@ NOTE: If this file is stringLabels.mli, run tools/sync_stdlib_docs after editing it to generate string.mli. If this file is string.mli, do not edit it directly -- edit stringLabels.mli instead.  P77V  @ V* Strings. A string [s] of length [n] is an indexable and immutable sequence of [n] bytes. For historical reasons these bytes are referred to as characters. The semantics of string functions is defined in terms of indices and positions. These are depicted and described as follows. {v positions 0 1 2 3 4 n-1 n +---+---+---+---+ +-----+ indices | 0 | 1 | 2 | 3 | ... | n-1 | +---+---+---+---+ +-----+ v} {ul {- An {e index} [i] of [s] is an integer in the range \[[0];[n-1]\]. It represents the [i]th byte (character) of [s] which can be accessed using the constant time string indexing operator [s.[i]].} {- A {e position} [i] of [s] is an integer in the range \[[0];[n]\]. It represents either the point at the beginning of the string, or the point between two indices, or the point at the end of the string. The [i]th byte index is between position [i] and [i+1].}} Two integers [start] and [len] are said to define a {e valid substring} of [s] if [len >= 0] and [start], [start+len] are positions of [s]. {b Unicode text.} Strings being arbitrary sequences of bytes, they can hold any kind of textual encoding. However the recommended encoding for storing Unicode text in OCaml strings is UTF-8. This is the encoding used by Unicode escapes in string literals. For example the string ["\u{1F42B}"] is the UTF-8 encoding of the Unicode character U+1F42B. {b Past mutability.} OCaml strings used to be modifiable in place, for instance via the {!String.set} and {!String.blit} functions. This use is nowadays only possible when the compiler is put in "unsafe-string" mode by giving the [-unsafe-string] command-line option. This compatibility mode makes the types [string] and [bytes] (see {!Bytes.t}) interchangeable so that functions expecting byte sequences can also accept strings as arguments and modify them. The distinction between [bytes] and [string] was introduced in OCaml 4.02, and the "unsafe-string" compatibility mode was the default until OCaml 4.05. Starting with 4.06, the compatibility mode is opt-in; we intend to remove the option in the future. The labeled version of this module can be used as described in the {!StdLabels} module. 6* {1:strings Strings} Ԡ8* The type for strings.  * [make n c] is a string of length [n] with each index holding the character [c]. @raise Invalid_argument if [n < 0] or [n > ]{!Sys.max_string_length}. U * [init n f] is a string of length [n] with index [i] holding the character [f i] (called in increasing index order). @raise Invalid_argument if [n < 0] or [n > ]{!Sys.max_string_length}. @since 4.02.0  '* The empty string. @since 4.13.0 Π f* Return a new string that contains the same bytes as the given byte sequence. @since 4.13.0  f* Return a new byte sequence that contains the same bytes as the given string. @since 4.13.0 Z @* [length s] is the length (number of bytes/characters) of [s].  * [get s i] is the character at index [i] in [s]. This is the same as writing [s.[i]]. @raise Invalid_argument if [i] not an index of [s]. Ǡ l* {1:concat Concatenating} {b Note.} The {!Stdlib.( ^ )} binary operator concatenates two strings.  * [concat sep ss] concatenates the list of strings [ss], inserting the separator string [sep] between each. @raise Invalid_argument if the result is longer than {!Sys.max_string_length} bytes. _ * [cat s1 s2] concatenates s1 and s2 ([s1 ^ s2]). @raise Invalid_argument if the result is longer than {!Sys.max_string_length} bytes. @since 4.13.0  ,* {1:predicates Predicates and comparisons}  * [equal s0 s1] is [true] if and only if [s0] and [s1] are character-wise equal. @since 4.03.0 (4.05.0 in StringLabels)  * [compare s0 s1] sorts [s0] and [s1] in lexicographical order. [compare] behaves like {!Stdlib.compare} on strings but may be more efficient. o ( comment thwarts tools/sync_stdlib_docs C D6@ f* [starts_with ][~prefix s] is [true] if and only if [s] starts with [prefix]. @since 4.13.0 & ( comment thwarts tools/sync_stdlib_docs LM@ ^* [ends_with ][~suffix s] is [true] if and only if [s] ends with [suffix]. @since 4.13.0 ݠ * [contains_from s start c] is [true] if and only if [c] appears in [s] after position [start]. @raise Invalid_argument if [start] is not a valid position in [s].  * [rcontains_from s stop c] is [true] if and only if [c] appears in [s] before position [stop+1]. @raise Invalid_argument if [stop < 0] or [stop+1] is not a valid position in [s]. ! 5* [contains s c] is {!String.contains_from}[ s 0 c]. ՠ $* {1:extract Extracting substrings} Ǡ * [sub s pos len] is a string of length [len], containing the substring of [s] that starts at position [pos] and has length [len]. @raise Invalid_argument if [pos] and [len] do not designate a valid substring of [s]. k * [split_on_char sep s] is the list of all (possibly empty) substrings of [s] that are delimited by the character [sep]. The function's result is specified by the following invariants: {ul {- The list is not empty.} {- Concatenating its elements using [sep] as a separator returns a string equal to the input ([concat (make 1 sep) (split_on_char sep s) = s]).} {- No string in the result contains the [sep] character.}} @since 4.04.0 (4.05.0 in StringLabels)  * {1:transforming Transforming}  * [map f s] is the string resulting from applying [f] to all the characters of [s] in increasing order. @since 4.00.0  i* [mapi f s] is like {!map} but the index of the character is also passed to [f]. @since 4.02.0 4 * [fold_left f x s] computes [f (... (f (f x s.[0]) s.[1]) ...) s.[n-1]], where [n] is the length of the string [s]. @since 4.13.0 Ƞ * [fold_right f s x] computes [f s.[0] (f s.[1] ( ... (f s.[n-1] x) ...))], where [n] is the length of the string [s]. @since 4.13.0 \ ]* [for_all p s] checks if all characters in [s] satisfy the predicate [p]. @since 4.13.0  j* [exists p s] checks if at least one character of [s] satisfies the predicate [p]. @since 4.13.0  * [trim s] is [s] without leading and trailing whitespace. Whitespace characters are: [' '], ['\x0C'] (form feed), ['\n'], ['\r'], and ['\t']. @since 4.00.0 d  * [escaped s] is [s] with special characters represented by escape sequences, following the lexical conventions of OCaml. All characters outside the US-ASCII printable range \[0x20;0x7E\] are escaped, as well as backslash (0x2F) and double-quote (0x22). The function {!Scanf.unescaped} is a left inverse of [escaped], i.e. [Scanf.unescaped (escaped s) = s] for any string [s] (unless [escaped s] fails). @raise Invalid_argument if the result is longer than {!Sys.max_string_length} bytes. * * [uppercase_ascii s] is [s] with all lowercase letters translated to uppercase, using the US-ASCII character set. @since 4.03.0 (4.05.0 in StringLabels)  * [lowercase_ascii s] is [s] with all uppercase letters translated to lowercase, using the US-ASCII character set. @since 4.03.0 (4.05.0 in StringLabels)  * [capitalize_ascii s] is [s] with the first character set to uppercase, using the US-ASCII character set. @since 4.03.0 (4.05.0 in StringLabels) | * [uncapitalize_ascii s] is [s] with the first character set to lowercase, using the US-ASCII character set. @since 4.03.0 (4.05.0 in StringLabels) B<* {1:traversing Traversing} 4 * [iter f s] applies function [f] in turn to all the characters of [s]. It is equivalent to [f s.[0]; f s.[1]; ...; f s.[length s - 1]; ()]. נ t* [iteri] is like {!iter}, but the function is also given the corresponding character index. @since 4.00.0 f:* {1:searching Searching} X * [index_from s i c] is the index of the first occurrence of [c] in [s] after position [i]. @raise Not_found if [c] does not occur in [s] after position [i]. @raise Invalid_argument if [i] is not a valid position in [s].  * [index_from_opt s i c] is the index of the first occurrence of [c] in [s] after position [i] (if any). @raise Invalid_argument if [i] is not a valid position in [s]. @since 4.05  * [rindex_from s i c] is the index of the last occurrence of [c] in [s] before position [i+1]. @raise Not_found if [c] does not occur in [s] before position [i+1]. @raise Invalid_argument if [i+1] is not a valid position in [s]. 1 * [rindex_from_opt s i c] is the index of the last occurrence of [c] in [s] before position [i+1] (if any). @raise Invalid_argument if [i+1] is not a valid position in [s]. @since 4.05 Ġ /* [index s c] is {!String.index_from}[ s 0 c]. x H* [index_opt s c] is {!String.index_from_opt}[ s 0 c]. @since 4.05  >* [rindex s c] is {!String.rindex_from}[ s (length s - 1) c]. Ѡ W* [rindex_opt s c] is {!String.rindex_from_opt}[ s (length s - 1) c]. @since 4.05 v<* {1 Strings and Sequences} h * [to_seq s] is a sequence made of the string's characters in increasing order. In ["unsafe-string"] mode, modifications of the string during iteration will be reflected in the sequence. @since 4.07  Z* [to_seqi s] is like {!to_seq} but also tuples the corresponding index. @since 4.07  M* [of_seq s] is a string made of the sequence's characters. @since 4.07  o 8* {1:utf UTF decoding and validations} @since 4.14  a2* {2:utf_8 UTF-8}  S L* [get_utf_8_uchar b i] decodes an UTF-8 character at index [i] in [b].   Q* [is_valid_utf_8 b] is [true] if and only if [b] contains valid UTF-8 data.  Π8* {2:utf_16be UTF-16BE}  R* [get_utf_16be_uchar b i] decodes an UTF-16BE character at index [i] in [b].  s W* [is_valid_utf_16be b] is [true] if and only if [b] contains valid UTF-16BE data.  98* {2:utf_16le UTF-16LE}  + R* [get_utf_16le_uchar b i] decodes an UTF-16LE character at index [i] in [b].  ޠ W* [is_valid_utf_16le b] is [true] if and only if [b] contains valid UTF-16LE data.  &* {1:deprecated Deprecated functions}  * [create n] returns a fresh byte sequence of length [n]. The sequence is uninitialized and contains arbitrary bytes. @raise Invalid_argument if [n < 0] or [n > ]{!Sys.max_string_length}. @deprecated This is a deprecated alias of {!Bytes.create}/{!BytesLabels.create}.  B 1* [set s n c] modifies byte sequence [s] in place, replacing the byte at index [n] with [c]. You can also write [s.[n] <- c] instead of [set s n c]. @raise Invalid_argument if [n] is not a valid index in [s]. @deprecated This is a deprecated alias of {!Bytes.set}/{!BytesLabels.set}.  Š \* [blit src src_pos dst dst_pos len] copies [len] bytes from the string [src], starting at index [src_pos], to byte sequence [dst], starting at character number [dst_pos]. @raise Invalid_argument if [src_pos] and [len] do not designate a valid range of [src], or if [dst_pos] and [len] do not designate a valid range of [dst].  B * Return a copy of the given string. @deprecated Because strings are immutable, it doesn't make much sense to make identical copies of them.  #* [fill s pos len c] modifies byte sequence [s] in place, replacing [len] bytes by [c], starting at [pos]. @raise Invalid_argument if [pos] and [len] do not designate a valid substring of [s]. @deprecated This is a deprecated alias of {!Bytes.fill}/{!BytesLabels.fill}.  h * Return a copy of the argument, with all lowercase letters translated to uppercase, including accented letters of the ISO Latin-1 (8859-1) character set. @deprecated Functions operating on Latin-1 character set are deprecated.   * Return a copy of the argument, with all uppercase letters translated to lowercase, including accented letters of the ISO Latin-1 (8859-1) character set. @deprecated Functions operating on Latin-1 character set are deprecated. Ġ * Return a copy of the argument, with the first character set to uppercase, using the ISO Latin-1 (8859-1) character set.. @deprecated Functions operating on Latin-1 character set are deprecated. r * Return a copy of the argument, with the first character set to lowercase, using the ISO Latin-1 (8859-1) character set. @deprecated Functions operating on Latin-1 character set are deprecated.  "* {1 Binary decoding of integers}  * The functions in this section binary decode integers from strings. All following functions raise [Invalid_argument] if the characters needed at index [i] to decode the integer are not available. Little-endian (resp. big-endian) encoding means that least (resp. most) significant bytes are stored first. Big-endian is also known as network byte order. Native-endian encoding is either little-endian or big-endian depending on {!Sys.big_endian}. 32-bit and 64-bit integers are represented by the [int32] and [int64] types, which can be interpreted either as signed or unsigned numbers. 8-bit and 16-bit integers are represented by the [int] type, which has more bits than the binary encoding. These extra bits are sign-extended (or zero-extended) for functions which decode 8-bit or 16-bit integers and represented them with [int] values.  j* [get_uint8 b i] is [b]'s unsigned 8-bit integer starting at character index [i]. @since 4.13.0  g* [get_int8 b i] is [b]'s signed 8-bit integer starting at character index [i]. @since 4.13.0 p }* [get_uint16_ne b i] is [b]'s native-endian unsigned 16-bit integer starting at character index [i]. @since 4.13.0 $ z* [get_uint16_be b i] is [b]'s big-endian unsigned 16-bit integer starting at character index [i]. @since 4.13.0 ؠ }* [get_uint16_le b i] is [b]'s little-endian unsigned 16-bit integer starting at character index [i]. @since 4.13.0  z* [get_int16_ne b i] is [b]'s native-endian signed 16-bit integer starting at character index [i]. @since 4.13.0 @ w* [get_int16_be b i] is [b]'s big-endian signed 16-bit integer starting at character index [i]. @since 4.13.0  z* [get_int16_le b i] is [b]'s little-endian signed 16-bit integer starting at character index [i]. @since 4.13.0  s* [get_int32_ne b i] is [b]'s native-endian 32-bit integer starting at character index [i]. @since 4.13.0 \ p* [get_int32_be b i] is [b]'s big-endian 32-bit integer starting at character index [i]. @since 4.13.0  s* [get_int32_le b i] is [b]'s little-endian 32-bit integer starting at character index [i]. @since 4.13.0 Ġ s* [get_int64_ne b i] is [b]'s native-endian 64-bit integer starting at character index [i]. @since 4.13.0 x p* [get_int64_be b i] is [b]'s big-endian 64-bit integer starting at character index [i]. @since 4.13.0 , s* [get_int64_le b i] is [b]'s little-endian 64-bit integer starting at character index [i]. @since 4.13.0 ࠠ#*/*Ҡ = The following is for system use only. Do not call directly. -]P P .]P PJ@@D)../ocamlc0-strict-sequence(-absname"-w8+a-4-9-41-42-44-45-48-70"-g+-warn-error"+A*-bin-annot)-nostdlib*-principal,-safe-string/-strict-formats"-o2stdlib__String.cmi"-c?@ :/home/barsac/ci/builds/workspace/step-by-step-build/stdlib @0Jy3+-Kb=0CBBCCCCC@A@@8CamlinternalFormatBasics0cEXy