From 79250506009057fc85aa22d472093fee2866e10c Mon Sep 17 00:00:00 2001 From: Serdar Dogruyol <990485+sdogruyol@users.noreply.github.com> Date: Mon, 9 Nov 2026 20:44:48 +0300 Subject: [PATCH 1/2] re-record wasm, diagnostics, the agent loop, highlighting and the stdlib at 0.21.0 --- records/agent.json | 14 +- records/diagnostics.json | 8 +- records/highlight.json | 10 +- records/stdlib.json | 266 ++++++++++-------- records/wasm/arrays.wasm | Bin 145881 -> 145688 bytes records/wasm/blocks.wasm | Bin 127866 -> 127703 bytes records/wasm/bounds.wasm | Bin 129541 -> 129394 bytes records/wasm/case.wasm | Bin 127806 -> 127643 bytes records/wasm/classes.wasm | Bin 124398 -> 124267 bytes records/wasm/conditions.wasm | Bin 124828 -> 124697 bytes records/wasm/constants.wasm | Bin 160443 -> 160313 bytes records/wasm/conversions.wasm | Bin 187416 -> 187251 bytes records/wasm/defaults.wasm | Bin 127100 -> 126953 bytes records/wasm/defer.wasm | Bin 128138 -> 127975 bytes records/wasm/dispatch.wasm | Bin 136069 -> 135890 bytes records/wasm/errors.wasm | Bin 160371 -> 160221 bytes records/wasm/exports.wasm | Bin 124838 -> 124708 bytes records/wasm/functions.wasm | Bin 125184 -> 125021 bytes records/wasm/generic-functions.wasm | Bin 151699 -> 151511 bytes records/wasm/generic-types.wasm | Bin 135597 -> 135418 bytes records/wasm/hashes.wasm | Bin 165179 -> 164991 bytes records/wasm/hello.wasm | Bin 123087 -> 122956 bytes records/wasm/iyi-basics.wasm | Bin 213443 -> 213228 bytes records/wasm/iyi-calc.wasm | Bin 200618 -> 200374 bytes records/wasm/iyi-collections.wasm | Bin 228588 -> 228254 bytes records/wasm/iyi-config.wasm | Bin 177376 -> 177188 bytes records/wasm/iyi-derive.wasm | Bin 128268 -> 128075 bytes records/wasm/iyi-enums.wasm | Bin 151146 -> 150944 bytes records/wasm/iyi-errors.wasm | Bin 138685 -> 138398 bytes records/wasm/iyi-files.wasm | Bin 125156 -> 124986 bytes records/wasm/iyi-format.wasm | Bin 308041 -> 307790 bytes records/wasm/iyi-formatting.wasm | Bin 143143 -> 142929 bytes records/wasm/iyi-generics.wasm | Bin 143824 -> 143623 bytes records/wasm/iyi-grid.wasm | Bin 187747 -> 187554 bytes records/wasm/iyi-hello.wasm | Bin 130696 -> 130494 bytes records/wasm/iyi-immutable.wasm | Bin 197267 -> 196966 bytes records/wasm/iyi-init_order.wasm | Bin 124809 -> 124600 bytes records/wasm/iyi-inventory.wasm | Bin 218027 -> 217819 bytes records/wasm/iyi-io.wasm | Bin 131609 -> 131423 bytes records/wasm/iyi-modules.wasm | Bin 126751 -> 126558 bytes records/wasm/iyi-sessions.wasm | Bin 139540 -> 139354 bytes records/wasm/iyi-shapes.wasm | Bin 197147 -> 196953 bytes records/wasm/iyi-socket.wasm | Bin 413767 -> 413416 bytes records/wasm/iyi-std_iterator.wasm | Bin 208688 -> 208409 bytes records/wasm/iyi-std_text.wasm | Bin 195805 -> 195601 bytes records/wasm/iyi-std_time.wasm | Bin 275376 -> 275128 bytes records/wasm/iyi-visited.wasm | Bin 176116 -> 175905 bytes records/wasm/iyi-webapp.wasm | Bin 171353 -> 170915 bytes records/wasm/loops.wasm | Bin 126424 -> 126245 bytes records/wasm/manifest.json | 238 ++++++++-------- records/wasm/methods.wasm | Bin 161051 -> 160906 bytes records/wasm/modules.wasm | Bin 124842 -> 124712 bytes records/wasm/nil.wasm | Bin 125476 -> 125313 bytes records/wasm/ranges.wasm | Bin 141760 -> 141565 bytes records/wasm/returns.wasm | Bin 127402 -> 127223 bytes records/wasm/strings.wasm | Bin 160621 -> 160417 bytes records/wasm/structs.wasm | Bin 125572 -> 125409 bytes records/wasm/traits.wasm | Bin 160535 -> 160405 bytes records/wasm/tuples.wasm | Bin 127759 -> 127580 bytes records/wasm/types.wasm | Bin 158793 -> 158647 bytes records/wasm/unions.wasm | Bin 135190 -> 135017 bytes records/wasm/variables.wasm | Bin 156061 -> 155931 bytes .../learn/_H2.astro => components/H2.astro} | 0 .../learn/_H3.astro => components/H3.astro} | 0 .../Heading.astro} | 0 65 files changed, 278 insertions(+), 258 deletions(-) rename src/{pages/learn/_H2.astro => components/H2.astro} (100%) rename src/{pages/learn/_H3.astro => components/H3.astro} (100%) rename src/{pages/learn/_Heading.astro => components/Heading.astro} (100%) diff --git a/records/agent.json b/records/agent.json index 6447e61..d740855 100644 --- a/records/agent.json +++ b/records/agent.json @@ -1,10 +1,10 @@ { "recorded": { - "compiler": "iyi 0.20.1 (built on Crystal 1.22.0-dev [91d012b1e] (2026-11-04))", - "commit": "91d012b1ed978c7df5cc033624ec161a2daf01b6", + "compiler": "iyi 0.21.0 (built on Crystal 1.22.0-dev [08ce6c1cb] (2026-11-09))", + "commit": "08ce6c1cb2ba5768b15485dbbd6413fcb17df19a", "machine": "Linux 7.0.0-38-generic x86_64, QEMU Virtual CPU version 2.5+", "command": "npm run record:agent", - "when": "2026-11-04T04:32:53.960Z" + "when": "2026-11-09T17:40:45.851Z" }, "project": [ { @@ -44,7 +44,7 @@ "command": "iyi mod context --json app.iyi", "exitCode": 0, "payload": "stdout", - "stdout": "{\"file\":\"agent/app.iyi\",\"imports\":[{\"import\":\"app/greeter\",\"api\":{\"module\":\"app/greeter\",\"interface_hash\":\"f2f9576ba7e3996e204d5c93ccf5f42d\",\"functions\":[{\"name\":\"polite\",\"parameters\":[\"name : String\"],\"returns\":\"String\",\"doc\":\"The exported surface carries its doc comment, so the grounding pack an agent\\nreads says what the function is for and not only what it takes.\",\"rendered\":\"def polite(name : String) : String\"},{\"name\":\"shout\",\"parameters\":[\"name : String\"],\"returns\":\"String\",\"rendered\":\"def shout(name : String) : String\"}],\"types\":[{\"name\":\"Greet\",\"kind\":\"trait\",\"visibility\":\"pub\",\"methods\":[{\"name\":\"greet\",\"parameters\":[],\"returns\":\"String\",\"required\":true,\"rendered\":\"abstract def greet : String\"}]}],\"impls\":[]}}]}\n", + "stdout": "{\"file\":\"agent/app.iyi\",\"imports\":[{\"import\":\"app/greeter\",\"api\":{\"module\":\"app/greeter\",\"interface_hash\":\"dadbf4541512680f291862fd67e8fbcf\",\"functions\":[{\"name\":\"polite\",\"parameters\":[\"name : String\"],\"returns\":\"String\",\"doc\":\"The exported surface carries its doc comment, so the grounding pack an agent\\nreads says what the function is for and not only what it takes.\",\"rendered\":\"def polite(name : String) : String\"},{\"name\":\"shout\",\"parameters\":[\"name : String\"],\"returns\":\"String\",\"rendered\":\"def shout(name : String) : String\"}],\"types\":[{\"name\":\"Greet\",\"kind\":\"trait\",\"visibility\":\"pub\",\"methods\":[{\"name\":\"greet\",\"parameters\":[],\"returns\":\"String\",\"required\":true,\"rendered\":\"abstract def greet : String\"}]}],\"impls\":[]}}]}\n", "stderr": "" }, { @@ -104,7 +104,7 @@ "command": "iyi test --json .", "exitCode": 0, "payload": "stdout", - "stdout": "{\"tests\":[{\"file\":\"./app_test.iyi\",\"status\":\"pass\",\"seconds\":0.281}],\"passed\":1,\"failed\":0,\"skipped\":0}\n", + "stdout": "{\"tests\":[{\"file\":\"./app_test.iyi\",\"status\":\"pass\",\"seconds\":0.336}],\"passed\":1,\"failed\":0,\"skipped\":0}\n", "stderr": "" }, { @@ -135,7 +135,7 @@ "bytes": 731, "sourceBytes": 707, "interfaceHashes": { - "app/greeter": "f2f9576ba7e3996e204d5c93ccf5f42d" + "app/greeter": "dadbf4541512680f291862fd67e8fbcf" } }, "suggested": [ @@ -167,7 +167,7 @@ }, "serverInfo": { "name": "iyi", - "version": "0.20.1" + "version": "0.21.0" } }, "tools": [ diff --git a/records/diagnostics.json b/records/diagnostics.json index 029a842..7a2842e 100644 --- a/records/diagnostics.json +++ b/records/diagnostics.json @@ -1,10 +1,10 @@ { "recorded": { - "compiler": "iyi 0.20.1 (built on Crystal 1.22.0-dev [91d012b1e] (2026-11-04))", - "commit": "91d012b1ed978c7df5cc033624ec161a2daf01b6", + "compiler": "iyi 0.21.0 (built on Crystal 1.22.0-dev [08ce6c1cb] (2026-11-09))", + "commit": "08ce6c1cb2ba5768b15485dbbd6413fcb17df19a", "machine": "Linux 7.0.0-38-generic x86_64, QEMU Virtual CPU version 2.5+", "command": "npm run record:diagnostics", - "when": "2026-11-04T04:32:47.944Z" + "when": "2026-11-09T17:40:39.969Z" }, "cases": [ { @@ -122,7 +122,7 @@ "path": "records/break/share_reach.iyi", "command": "IYI_PATH=/src iyi build --no-codegen --no-color --error-on-warnings records/break/share_reach.iyi", "exitCode": 1, - "stderr": "In records/break/share_reach.iyi:19:24\n\n 19 | Server.serve(listener) do |req|\n ^\nWarning: the block Server.serve keeps, which may run on other threads reaches `GREETING : Array(String)` (not Share) through `greeting` → `GREETING.join`: Array(String)'s field @size is assigned in `append`. If it is only read, make it a `List(String)` (std/list), which is Share. Keep the value behind a `Mutex` (std/mutex), or, when every thread may reach it safely - it is set once and then only read, or guarded some other way - say why on the constant: `@[SafeReach(\"...\")]` (SPEC.md III.4.4)\n\nA total of 1 warnings were found.\n" + "stderr": "In records/break/share_reach.iyi:19:24\n\n 19 | Server.serve(listener) do |req|\n ^\nWarning: the block Server.serve keeps, which may run on other threads reaches `GREETING : Array(String)` (not Share) through `greeting` → `GREETING.join`: Array(String)'s field @size is assigned in `append`. If it is only read, make it a `List(String)` (std/list), which is Share. Keep the value behind a `Mutex` (std/mutex), or, when every thread may reach it safely - every write is before the first parallel task starts, or behind one `Mutex#lock` on a constant or a class variable - say why on the constant: `@[SafeReach(\"...\")]`, which the compiler proves (SPEC.md III.4.4)\n\nA total of 1 warnings were found.\n" } ] } diff --git a/records/highlight.json b/records/highlight.json index f2a119a..3aa1249 100644 --- a/records/highlight.json +++ b/records/highlight.json @@ -1,10 +1,10 @@ { "recorded": { - "compiler": "iyi 0.20.1 (built on Crystal 1.22.0-dev [91d012b1e] (2026-11-04))", - "commit": "91d012b1ed978c7df5cc033624ec161a2daf01b6", + "compiler": "iyi 0.21.0 (built on Crystal 1.22.0-dev [08ce6c1cb] (2026-11-09))", + "commit": "08ce6c1cb2ba5768b15485dbbd6413fcb17df19a", "machine": "Linux 7.0.0-38-generic x86_64, QEMU Virtual CPU version 2.5+", "command": "npm run record:highlight", - "when": "2026-11-04T04:32:57.045Z" + "when": "2026-11-09T17:40:49.124Z" }, "files": { "samples/iyi/app/formal.iyi": "# A second module, exporting a `title` of its own. See `../modules.iyi`.\nmodule app/formal\n\npub def title : String\n "esteemed colleague"\nend\n\npub def address(name : String) : String\n "Good day, #{name}."\nend\n", @@ -15,10 +15,10 @@ "samples/iyi/calc/ast.iyi": "module calc/ast\n\n# What an evaluated program can go wrong with. Both are ordinary members of the\n# union an evaluation returns (SPEC.md III.1), so a caller either handles them\n# or propagates with `!`.\npub struct UnknownName\n getter name : String\n\n def initialize(@name : String)\n end\nend\n\nimpl Error for UnknownName\n def message : String\n "unknown name '#{name}'"\n end\nend\n\npub struct DividedByZero\n def initialize\n end\nend\n\nimpl Error for DividedByZero\n def message : String\n "divided by zero"\n end\nend\n\n# The one thing every node can do. A trait rather than a base class, because\n# there is nothing to inherit and R-3 has no opinion to break here.\npub trait Node\n abstract def evaluate(scope : Hash(String, Int32)) : Int32 | UnknownName | DividedByZero\nend\n\npub struct Number\n getter value : Int32\n\n def initialize(@value : Int32)\n end\nend\n\nimpl Node for Number\n def evaluate(scope : Hash(String, Int32)) : Int32 | UnknownName | DividedByZero\n value\n end\nend\n\npub struct Name\n getter name : String\n\n def initialize(@name : String)\n end\nend\n\nimpl Node for Name\n def evaluate(scope : Hash(String, Int32)) : Int32 | UnknownName | DividedByZero\n return UnknownName.new(name) unless scope.has_key?(name)\n scope[name]\n end\nend\n\npub class Binary\n getter op : Char\n getter left : Number | Name | Binary\n getter right : Number | Name | Binary\n\n def initialize(@op : Char, @left : Number | Name | Binary, @right : Number | Name | Binary)\n end\nend\n\nimpl Node for Binary\n def evaluate(scope : Hash(String, Int32)) : Int32 | UnknownName | DividedByZero\n a = left.evaluate(scope)!\n b = right.evaluate(scope)!\n\n if op == '+'\n a + b\n elsif op == '-'\n a - b\n elsif op == '*'\n a * b\n else\n return DividedByZero.new if b == 0\n a // b\n end\n end\nend\n", "samples/iyi/calc/lexer.iyi": "module calc/lexer\n\n# What the scanner produces. A token is its kind, the text it covers and where\n# it started, because an error that cannot say where is half an error.\npub struct Token\n getter kind : String\n getter text : String\n getter at : Int32\n\n def initialize(@kind : String, @text : String, @at : Int32)\n end\nend\n\npub struct BadCharacter\n getter at : Int32\n getter found : Char\n\n def initialize(@at : Int32, @found : Char)\n end\nend\n\nimpl Error for BadCharacter\n def message : String\n "unexpected character at #{at}"\n end\nend\n\npub def scan(source : String) : Array(Token) | BadCharacter\n tokens = [] of Token\n index = 0\n\n while index < source.size\n c = source[index]\n\n # A line ends in CRLF on Windows: `echo 2 + 3 * 4| iyi run\n # samples\\iyi\\calc.iyi` in cmd answered "unexpected character at 9",\n # the `\\r`.\n if c == ' ' || c == '\\n' || c == '\\t' || c == '\\r'\n index = index + 1\n elsif digit?(c)\n start = index\n while index < source.size && digit?(source[index])\n index = index + 1\n end\n tokens << Token.new("number", source[start, index - start], start)\n elsif letter?(c)\n start = index\n while index < source.size && (letter?(source[index]) || digit?(source[index]))\n index = index + 1\n end\n tokens << Token.new("name", source[start, index - start], start)\n elsif operator?(c)\n tokens << Token.new("op", source[index, 1], index)\n index = index + 1\n else\n return BadCharacter.new(index, c)\n end\n end\n\n tokens << Token.new("end", "", index)\n tokens\nend\n\ndef digit?(c : Char) : Bool\n c >= '0' && c <= '9'\nend\n\ndef letter?(c : Char) : Bool\n (c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z') || c == '_'\nend\n\ndef operator?(c : Char) : Bool\n c == '+' || c == '-' || c == '*' || c == '/' || c == '(' || c == ')' || c == '='\nend\n", "samples/iyi/calc/parser.iyi": "module calc/parser\n\nimport calc/lexer::{Token}\nimport calc/ast::{Number, Name, Binary}\n\npub struct SyntaxError\n getter at : Int32\n getter wanted : String\n\n def initialize(@at : Int32, @wanted : String)\n end\nend\n\nimpl Error for SyntaxError\n def message : String\n "expected #{wanted} at #{at}"\n end\nend\n\n# One statement: `name = expression`, or an expression on its own, which the\n# runner prints. Kept as a pair rather than a node type, because a statement is\n# not something this language evaluates twice.\npub struct Statement\n getter target : String\n getter body : Number | Name | Binary\n\n def initialize(@target : String, @body : Number | Name | Binary)\n end\nend\n\n# A cursor over the tokens. A struct with an index rather than a shifting array,\n# because backing up one token is the parser's whole trick.\npub class Reader\n getter tokens : Array(Token)\n getter at : Int32\n\n def initialize(@tokens : Array(Token))\n @at = 0\n end\n\n def peek : Token\n tokens[at]\n end\n\n def advance : Token\n token = tokens[at]\n @at = at + 1\n token\n end\nend\n\npub def parse(tokens : Array(Token)) : Array(Statement) | SyntaxError\n reader = Reader.new(tokens)\n statements = [] of Statement\n\n while reader.peek.kind != "end"\n statements << statement(reader)!\n end\n\n statements\nend\n\ndef statement(reader : Reader) : Statement | SyntaxError\n first = reader.peek\n\n if first.kind == "name" && reader.tokens[reader.at + 1].text == "="\n reader.advance\n reader.advance\n Statement.new(first.text, expression(reader)!)\n else\n Statement.new("", expression(reader)!)\n end\nend\n\ndef expression(reader : Reader) : Number | Name | Binary | SyntaxError\n left = term(reader)!\n\n while reader.peek.kind == "op" && (reader.peek.text == "+" || reader.peek.text == "-")\n op = reader.advance.text[0]\n left = Binary.new(op, left, term(reader)!)\n end\n\n left\nend\n\ndef term(reader : Reader) : Number | Name | Binary | SyntaxError\n left = factor(reader)!\n\n while reader.peek.kind == "op" && (reader.peek.text == "*" || reader.peek.text == "/")\n op = reader.advance.text[0]\n left = Binary.new(op, left, factor(reader)!)\n end\n\n left\nend\n\ndef factor(reader : Reader) : Number | Name | Binary | SyntaxError\n token = reader.advance\n\n if token.kind == "number"\n Number.new(token.text.to_i)\n elsif token.kind == "name"\n Name.new(token.text)\n elsif token.text == "("\n inside = expression(reader)!\n closing = reader.advance\n return SyntaxError.new(closing.at, "')'") unless closing.text == ")"\n inside\n else\n SyntaxError.new(token.at, "a number, a name or '('")\n end\nend\n", - "samples/iyi/calc.iyi": "# A language, in the language — the biggest program this prelude can hold.\n#\n# echo "x = 2 + 3 * 4\n# x * 10" | ./bin/iyi run samples/iyi/calc.iyi\n#\n# The other samples each document a rule. This one documents nothing and is\n# here for a different reason: everything else in `samples/iyi` is a page long,\n# and a language that has only been used for pages has not been used. This is\n# three modules and a scanner, a parser and an evaluator, the shape of every\n# real program that reads something, written against iyi's own 25,763-line\n# library and nothing else.\n#\n# What it cost to write is recorded where it landed. `String#[]`, `String#[](start,\n# count)`, `String#to_i` and `read_input` are in the prelude because this file\n# asked for them, which is the rule the prelude grows by (SPEC.md "0.1.0",\n# item 3). Nothing else was missing.\nmodule samples/calc\n\nimport calc/lexer::{scan, BadCharacter}\nimport calc/parser::{parse, Statement, SyntaxError}\nimport calc/ast::{Number, Name, Binary, UnknownName, DividedByZero}\n\n# What runs when nothing is piped in, so that the sample is a program rather\n# than a prompt. CI runs it this way. Its last two lines are errors on\n# purpose, and the demo exits 0 with them.\nDEMO = "x = 2 + 3 * 4\ny = (x - 4) / 2\nx + y * 10\nmissing + 1\n1 / 0"\n\n# Whether every statement answered. An error goes to standard error, and\n# input with one makes the program exit 1: all of them went to standard\n# output at exit 0, so `echo 1 / 0 | iyi run samples/iyi/calc.iyi && next`\n# ran `next`.\npub def run(source : String) : Bool\n tokens = scan(source)\n if tokens.is_a?(BadCharacter)\n stderr.puts "error: #{tokens.message}"\n return false\n end\n\n program = parse(tokens)\n if program.is_a?(SyntaxError)\n stderr.puts "error: #{program.message}"\n return false\n end\n\n answered = true\n scope = {} of String => Int32\n program.each do |statement|\n value = statement.body.evaluate(scope)\n\n if value.is_a?(Int32)\n if statement.target.empty?\n puts value\n else\n scope[statement.target] = value\n end\n else\n # `value` is an error member of the union, and every one of them answers\n # `message` because they implement `Error` (SPEC.md III.1).\n stderr.puts "error: #{value.message}"\n answered = false\n end\n end\n answered\nend\n\n# Input that is only line ends is nothing piped in: PowerShell's `"" |`\n# sends a CRLF. And its pipe starts what it sends with a byte order mark,\n# which is not part of the program: "unexpected character at 0".\ntyped = read_input.lchop('\\uFEFF')\nif typed.strip.empty?\n run(DEMO)\nelsif !run(typed)\n exit 1\nend\n", + "samples/iyi/calc.iyi": "# A language, in the language — the biggest program this prelude can hold.\n#\n# echo "x = 2 + 3 * 4\n# x * 10" | ./bin/iyi run samples/iyi/calc.iyi\n#\n# The other samples each document a rule. This one documents nothing and is\n# here for a different reason: everything else in `samples/iyi` is a page long,\n# and a language that has only been used for pages has not been used. This is\n# three modules and a scanner, a parser and an evaluator, the shape of every\n# real program that reads something, written against iyi's own 28,806-line\n# library and nothing else.\n#\n# What it cost to write is recorded where it landed. `String#[]`, `String#[](start,\n# count)`, `String#to_i` and `read_input` are in the prelude because this file\n# asked for them, which is the rule the prelude grows by (SPEC.md "0.1.0",\n# item 3). Nothing else was missing.\nmodule samples/calc\n\nimport calc/lexer::{scan, BadCharacter}\nimport calc/parser::{parse, Statement, SyntaxError}\nimport calc/ast::{Number, Name, Binary, UnknownName, DividedByZero}\n\n# What runs when nothing is piped in, so that the sample is a program rather\n# than a prompt. CI runs it this way. Its last two lines are errors on\n# purpose, and the demo exits 0 with them.\nDEMO = "x = 2 + 3 * 4\ny = (x - 4) / 2\nx + y * 10\nmissing + 1\n1 / 0"\n\n# Whether every statement answered. An error goes to standard error, and\n# input with one makes the program exit 1: all of them went to standard\n# output at exit 0, so `echo 1 / 0 | iyi run samples/iyi/calc.iyi && next`\n# ran `next`.\npub def run(source : String) : Bool\n tokens = scan(source)\n if tokens.is_a?(BadCharacter)\n stderr.puts "error: #{tokens.message}"\n return false\n end\n\n program = parse(tokens)\n if program.is_a?(SyntaxError)\n stderr.puts "error: #{program.message}"\n return false\n end\n\n answered = true\n scope = {} of String => Int32\n program.each do |statement|\n value = statement.body.evaluate(scope)\n\n if value.is_a?(Int32)\n if statement.target.empty?\n puts value\n else\n scope[statement.target] = value\n end\n else\n # `value` is an error member of the union, and every one of them answers\n # `message` because they implement `Error` (SPEC.md III.1).\n stderr.puts "error: #{value.message}"\n answered = false\n end\n end\n answered\nend\n\n# Input that is only line ends is nothing piped in: PowerShell's `"" |`\n# sends a CRLF. And its pipe starts what it sends with a byte order mark,\n# which is not part of the program: "unexpected character at 0".\ntyped = read_input.lchop('\\uFEFF')\nif typed.strip.empty?\n run(DEMO)\nelsif !run(typed)\n exit 1\nend\n", "samples/iyi/collections.iyi": "# The `Enumerable` port, exercised — SPEC.md II.6.\n#\n# ./bin/iyi run samples/iyi/collections.iyi\n#\n# `std/enumerable.iyi` holds the trait. This file implements it twice and calls\n# every method it defines. Both matter: a default method is only typed when it\n# is called, so a trait that merely compiles has proved nothing about whether\n# its bodies are sound.\n#\n# `Nums` and `Words` answer `Elem` differently — `Int32` and `String` — and each\n# gets the same 57 default methods from one `each`. That is the claim II.6\n# makes, running.\n\nmodule samples/collections\n\nimport std/enumerable::{Enumerable}\n\npub struct Nums\n def initialize(@a : Array(Int32))\n end\nend\n\nimpl Enumerable for Nums\n type Elem = Int32\n\n def each(& : Int32 -> Nil) : Nil\n @a.each { |x| yield x }\n end\nend\n\npub struct Words\n def initialize(@a : Array(String))\n end\nend\n\nimpl Enumerable for Words\n type Elem = String\n\n def each(& : String -> Nil) : Nil\n @a.each { |x| yield x }\n end\nend\n\nn = Nums.new([3, 1, 4, 1, 5])\nw = Words.new(["pear", "fig", "plum", "kiwi"])\n\nputs "to_a #{n.to_a.join(",")}"\nputs "size #{n.size}"\nputs "empty? #{n.empty?} #{Nums.new([] of Int32).empty?}"\nputs "all? #{n.all? { |x| x > 0 }}"\nputs "any? #{n.any? { |x| x > 4 }}"\nputs "none? #{n.none? { |x| x > 9 }}"\nputs "one? #{n.one? { |x| x == 4 }}"\nputs "count #{n.count { |x| x == 1 }}"\nputs "find #{n.find { |x| x > 3 }} #{n.find { |x| x > 9 }.inspect}"\nputs "index #{n.index { |x| x == 4 }} #{n.index { |x| x == 9 }.inspect}"\nputs "first?/first #{n.first?} #{n.first}"\nputs "map #{n.map { |x| x * 2 }.join(",")}"\nputs "flat_map #{n.flat_map { |x| [x, x] }.join(",")}"\nputs "map_with_index #{n.map_with_index { |x, i| x * i }.join(",")}"\nputs "select #{n.select { |x| x > 2 }.join(",")}"\nputs "reject #{n.reject { |x| x > 2 }.join(",")}"\nputs "partition #{n.partition { |x| x > 2 }.map(&.join("+")).join(" | ")}"\nputs "take/skip #{n.take(2).join(",")} #{n.skip(3).join(",")}"\nputs "take_while #{n.take_while { |x| x < 4 }.join(",")}"\nputs "skip_while #{n.skip_while { |x| x < 4 }.join(",")}"\nputs "reduce #{n.reduce(0) { |a, x| a + x }}"\nputs "each_with_index #{n.map_with_index { |x, i| i }.join(",")}"\nputs "each_with_object #{n.each_with_object([] of Int32) { |e, o| o << e * 10 }.join(",")}"\nputs "join #{n.join("-")}"\nputs "includes? #{n.includes?(4)} #{n.includes?(9)}"\nputs "max?/max #{n.max?} #{n.max}"\nputs "min?/min #{n.min?} #{n.min}"\nputs "sum/product #{n.sum} #{n.product}"\nputs "sum of nothing #{Nums.new([] of Int32).sum}"\nputs "tally #{n.tally[1]}"\nputs "sorted #{n.sorted.join(",")}"\nputs "max_by #{w.max_by { |s| s.size }}"\nputs "group_by #{w.group_by { |s| s.size }[4].join(",")}"\nputs "index_by #{w.index_by { |s| s.size }[3]}"\n\nputs "each_slice #{n.each_slice(2).map(&.join("+")).join(" ")}"\nputs "each_cons #{n.each_cons(2).map(&.join("+")).join(" ")}"\nputs "chunk_while #{n.chunk_while { |a, b| b >= a }.map(&.join("+")).join(" ")}"\nputs "first(n) #{n.first(3).join(",")}"\nputs "compact_map #{n.compact_map { |x| x > 2 ? x * 10 : nil }.join(",")}"\nputs "find_value #{n.find_value { |x| x > 3 ? "big" : nil }}"\nputs "accumulate #{n.accumulate(0) { |a, x| a + x }.join(",")}"\nputs "reduce? #{n.reduce? { |a, x| a + x }}"\nputs "in_groups_of #{n.in_groups_of(2, 0).map(&.join("+")).join(" ")}"\nputs "min_by #{w.min_by { |s| s.size }}"\nputs "max_of/min_of #{w.max_of { |s| s.size }} #{w.min_of { |s| s.size }}"\nputs "minmax #{n.minmax[0]},#{n.minmax[1]}"\nputs "tally_by #{w.tally_by { |s| s.size }[4]}"\nputs "sum_by #{w.sum_by { |s| s.size }}"\n\n# SPEC II.6 finding 6: one bound replaces `Indexable | Iterable | Iterator`,\n# and `O::Elem` names what the other collection yields. Four numbers for\n# four words: a shorter other collection is refused, as the other library\n# refuses it.\nputs "zip #{Nums.new([3, 1, 4, 1]).zip(w).map { |pair| "#{pair[0]}#{pair[1]}" }.join(" ")}"\n\ncycled = [] of Int32\nNums.new([1, 2]).cycle(2) { |x| cycled << x }\nputs "cycle #{cycled.join(",")}"\n\n# A trait with an associated type used as a type: one function, any implementer.\ndef describe(e : Enumerable) : String\n "#{e.size} items"\nend\n\nputs "as a type #{describe(n)} / #{describe(w)}"\n\n# ---------------------------------------------------------------------------\n# What this sample would report as an error\n# ---------------------------------------------------------------------------\n#\n# * `Words.new([...]).sum` — `sum` is bounded `where Elem : Num` and\n# `String` implements `Comparable` but not `Num`. The error names the element\n# type and the bound rather than failing somewhere inside the method body.\n#\n# * A second `impl Enumerable for Nums` — a trait with an associated type is\n# implementable once per type, because a second answer for `Elem` would make\n# every call on `Nums` ambiguous.\n#\n# * `impl Num for X` with no `impl Comparable for X` before it —\n# `Num : Comparable` requires it, and the impls have to be written in\n# dependency order.\n", "samples/iyi/config.iyi": "# The first program that reads text - a `key = value` file, with the line\n# number in its error.\n#\n# ./bin/iyi run samples/iyi/config.iyi\n#\n# Text comes apart into lines, a line into its two halves around a `=`, and\n# each half loses its whitespace; a line that does not parse is an error\n# value carrying where it was (SPEC.md III.1), not a printed message. Like\n# `basics` and `inventory`, this documents no rule: it is here because the\n# prelude grows only when a program in this repository needs something\n# (SPEC.md 0.1.0 item 3), and cutting text is what the third program does.\nmodule samples/config\n\nstruct ParseError\n property line : Int32\n property message : String\n\n def initialize(@line : Int32, @message : String)\n end\nend\n\nimpl Error for ParseError\n def message : String\n "line #{@line}: #{@message}"\n end\nend\n\ndef parse(text : String) : Hash(String, String) | ParseError\n config = {} of String => String\n text.lines.each_with_index do |raw, index|\n line = raw.strip\n next if line.empty? || line.starts_with?('#')\n eq = line.index('=')\n return ParseError.new(index + 1, "no '=' in #{line.inspect}") unless eq\n key = line[0, eq].strip\n return ParseError.new(index + 1, "empty key") if key.empty?\n config[key] = line[eq + 1, line.size - eq - 1].strip\n end\n config\nend\n\ngood = "# the service\\nname = iyi\\nport= 8080\\n\\nmode =fast\\n"\ncase parse(good)\nin Hash(String, String)\n puts it # => {"name" => "iyi", "port" => "8080", "mode" => "fast"}\n puts it["port"].to_i + 1 # => 8081\n puts it.keys.join(", ") # => name, port, mode\nin ParseError then puts "error: #{it.message}"\nend\n\nbad = "name = iyi\\nbroken line\\n"\ncase parse(bad)\nin Hash(String, String) then puts "parsed"\nin ParseError then puts "error: #{it.message}" # => error: line 2: no '=' in "broken line"\nend\n\n# The pieces a parser cuts, on their own.\nputs "a,,b".split(',') # => ["a", "", "b"]\nputs "one\\ntwo\\n".lines # => ["one", "two"]\nputs " padded\\t".strip.inspect # => "padded"\nputs "config.iyi".ends_with?(".iyi") # => true\n", - "samples/iyi/cores.iyi": "# Work on every core - SPEC.md III.4.13, as a person writes it.\n#\n# ./bin/iyi run samples/iyi/cores.iyi\n#\n# `spawn` is a task on the thread that spawned it, and its block may touch\n# anything; `spawn_parallel` is a task a pool of workers runs on any core,\n# and its block may capture only what is `Share` (III.4.4). std/http's\n# `Server.serve` puts each connection on that pool, so its block is checked\n# the same way. When a block reaches module state through a call, the\n# compiler warns, and `@[SafeReach("why")]` on the state says why it is safe.\nmodule samples/cores\n\nimport std/http::{HTTP, Response, Server}\nimport std/socket::{IyiSocket}\nimport std/mutex::{Mutex}\n\ndef collatz_steps(n : Int64) : Int64\n steps = 0_i64\n while n != 1\n n = n % 2 == 0 ? n // 2 : 3 * n + 1\n steps += 1\n end\n steps\nend\n\n# 1. `spawn` and `spawn_parallel`.\n#\n# The tasks `spawn` starts share their spawner's thread, so they may append\n# to an `Array` they captured. The tasks `spawn_parallel` starts run on\n# whichever core is free; each answers its own value, and a task's answer\n# need not be `Share`, because it is handed over once, after the task ends.\nseen = [] of Int64\ngroup do |g|\n (1..3).each do |n|\n g.spawn do\n seen << collatz_steps(n.to_i64)\n 0\n end\n end\nend\nputs seen.sorted # => [0, 1, 7]\n\nlongest = 0_i64\ngroup do |g|\n handles = [] of IyiTask(Int64)\n 4.times do |part|\n handles << g.spawn_parallel do\n best = 0_i64\n start = part.to_i64 * 25_000 + 1\n (start..start + 24_999).each { |n| best = collatz_steps(n) if collatz_steps(n) > best }\n best\n end\n end\n handles.each do |handle|\n steps = handle.value\n longest = steps if steps.is_a?(Int64) && steps > longest\n end\nend\nputs longest # => 350, the longest chain below 100,000\n\n# 2. State the pool may share.\n#\n# A counter that every core adds to is an `Atomic`; an `Array` that every\n# core appends to sits behind a `Mutex`. Both are `Share`, so a parallel\n# block may capture them.\nhits = Atomic(Int64).new(0_i64)\npaths = Mutex.new { [] of String }\n\n# 3. Module state a call reaches.\n#\n# A parallel block that names `GREETING` is refused, because an `Array` is\n# not `Share`. One that only calls `greeting` used to compile with nothing\n# said; now the compiler warns at the block, naming the path. This constant\n# is set before the server starts and only read afterwards, so it says so.\n@[SafeReach("set once before the server starts, then only read")]\nGREETING = ["hello", "from", "every", "core"]\n\ndef greeting : String\n GREETING.join(" ")\nend\n\n# 4. A server on every core.\n#\n# `Server.serve` runs each connection on the pool's workers, so its block is\n# checked as `spawn_parallel`'s is. It stops through a channel: closing the\n# listener from inside the block would capture it, and `/stop` may arrive on\n# any worker. `workers: 1` keeps the one-thread server, whose block may\n# capture anything.\nlistener = IyiSocket.listen("127.0.0.1", 0)\nbase = "http://127.0.0.1:#{listener.local_port}"\nstop = Channel(Int32).new(1)\ngroup do |g|\n g.spawn do\n stop.receive\n listener.close\n 0\n end\n g.spawn do\n Server.serve(listener) do |req|\n hits.add(1_i64)\n path = req.path\n paths.lock { |list| list << path }\n if path == "/stop"\n stop.send(0)\n Response.new(200, "bye")\n else\n Response.new(200, greeting)\n end\n end\n 0\n end\n g.spawn do\n puts HTTP.get(base + "/").or_panic.body # => hello from every core\n HTTP.get(base + "/stop").or_panic\n 0\n end\nend\nputs hits.get # => 2\npaths.lock { |list| puts list.sorted } # => ["/", "/stop"]\n", + "samples/iyi/cores.iyi": "# Work on every core - SPEC.md III.4.13, as a person writes it.\n#\n# ./bin/iyi run samples/iyi/cores.iyi\n#\n# `spawn` is a task the compiler places: on a pool of workers, on any core,\n# where it can prove that safe, and on the thread that spawned it otherwise\n# (III.4.15, III.4.16). `spawn(unit: :new)` asks for the pool, and its\n# block may capture only what is `Share` (III.4.4); `spawn(unit: :same)`\n# keeps the task on its spawner's thread whatever it captures. std/http's\n# `Server.serve` puts each connection on that pool, so its block is checked\n# the same way. When a block reaches module state through a call, the\n# compiler warns, and `@[SafeReach("why")]` on the state says why it is\n# safe - a claim the compiler proves, or refuses naming the write.\nmodule samples/cores\n\nimport std/http::{HTTP, Response, Server}\nimport std/socket::{IyiSocket}\nimport std/mutex::{Mutex}\n\ndef collatz_steps(n : Int64) : Int64\n steps = 0_i64\n while n != 1\n n = n % 2 == 0 ? n // 2 : 3 * n + 1\n steps += 1\n end\n steps\nend\n\n# 1. `spawn` and `spawn(unit: :new)`.\n#\n# These `spawn`s append to an `Array` they captured, which is not `Share`, so\n# the compiler keeps them on their spawner's thread, where they take turns\n# and nothing is raced; `iyi check` notes each one, with why. The tasks\n# `spawn(unit: :new)` starts run on whichever core is free; each answers\n# its own value, and a task's answer need not be `Share`, because it is\n# handed over once, after the task ends.\nseen = [] of Int64\ngroup do |g|\n (1..3).each do |n|\n g.spawn do\n seen << collatz_steps(n.to_i64)\n 0\n end\n end\nend\nputs seen.sorted # => [0, 1, 7]\n\nlongest = 0_i64\ngroup do |g|\n handles = [] of IyiTask(Int64)\n 4.times do |part|\n handles << g.spawn(unit: :new) do\n best = 0_i64\n start = part.to_i64 * 25_000 + 1\n (start..start + 24_999).each { |n| best = collatz_steps(n) if collatz_steps(n) > best }\n best\n end\n end\n handles.each do |handle|\n steps = handle.value\n longest = steps if steps.is_a?(Int64) && steps > longest\n end\nend\nputs longest # => 350, the longest chain below 100,000\n\n# 2. State the pool may share.\n#\n# A counter that every core adds to is an `Atomic`; an `Array` that every\n# core appends to sits behind a `Mutex`. Both are `Share`, so a parallel\n# block may capture them.\nhits = Atomic(Int64).new(0_i64)\npaths = Mutex.new { [] of String }\n\n# 3. Module state a call reaches.\n#\n# A parallel block that names `GREETING` is refused, because an `Array` is\n# not `Share`. One that only calls `greeting` used to compile with nothing\n# said; now the compiler warns at the block, naming the path. This constant\n# is set before the server starts and only read afterwards, so it says so,\n# and the compiler checks it: nothing writes `GREETING` once a parallel\n# task can start (SPEC.md III.4.4).\n@[SafeReach("set once before the server starts, then only read")]\nGREETING = ["hello", "from", "every", "core"]\n\ndef greeting : String\n GREETING.join(" ")\nend\n\n# 4. A server on every core.\n#\n# `Server.serve` runs each connection on the pool's workers, so its block is\n# checked as `spawn(unit: :new)`'s is. It stops through a channel: closing the\n# listener from inside the block would capture it, and `/stop` may arrive on\n# any worker. `workers: 1` keeps the one-thread server, whose block may\n# capture anything.\nlistener = IyiSocket.listen("127.0.0.1", 0)\nbase = "http://127.0.0.1:#{listener.local_port}"\nstop = Channel(Int32).new(1)\ngroup do |g|\n g.spawn do\n stop.receive\n listener.close\n 0\n end\n g.spawn do\n Server.serve(listener) do |req|\n hits.add(1_i64)\n path = req.path\n paths.lock { |list| list << path }\n if path == "/stop"\n stop.send(0)\n Response.new(200, "bye")\n else\n Response.new(200, greeting)\n end\n end\n 0\n end\n g.spawn do\n puts HTTP.get(base + "/").or_panic.body # => hello from every core\n HTTP.get(base + "/stop").or_panic\n 0\n end\nend\nputs hits.get # => 2\npaths.lock { |list| puts list.sorted } # => ["/", "/stop"]\n", "samples/iyi/derive.iyi": "# `derive`, and where it runs (SPEC.md R-5, II.4).\n#\n# ./bin/iyi run samples/iyi/derive.iyi\n#\n# A derive runs once, in the module that declares the type. What it generates is\n# an ordinary declaration of that module, so it travels in the module's\n# `.iyimod` and a consumer calls the derived method without running the macro\n# and without this module's source. `bench/samples_roundtrip.sh` builds this\n# sample from its artifacts with `std/derives` deleted, which is that claim\n# taken literally.\n#\n# The macro is handed the facts R-5 lets it read: the declaration's name, and\n# the fields written in its body, each with the type it was written as. It\n# cannot enumerate a type it was not given, which is what keeps a derive\n# bounded and cacheable.\n\nmodule samples/derive\n\nimport std/derives::*\n\npub struct Point\n @x : Int32\n @y : Int32\n\n def initialize(@x : Int32, @y : Int32)\n end\n\n derive described\nend\n\n# One derive, two declarations. The macro reads each one's own fields, so\n# neither type had to be written down inside the macro.\npub struct Span\n @from : Int32\n @to : Int32\n @label : String\n\n def initialize(@from : Int32, @to : Int32, @label : String)\n end\n\n derive described\nend\n\nputs Point.new(3, 4).described\nputs Span.new(1, 9, "range").described\n\n# The field type is a type, not a name, so a derive can ask what it implements.\n# `Name` and `Show` both belong to `std/derives`, and both arrive from that\n# module's artifact when its source is gone: `@label` is rendered through the\n# trait, and `@count` is skipped because `Int32` does not implement it.\n#\n# `getter label : Name` is a macro call, so the field it declares exists only\n# once it has run. A derive reads the declarations above it, which is why\n# `derive` goes last. Below `getter`, this would be an error rather than a\n# method generated over no fields.\n#\n# One line, two derives: each macro reads the same declaration and adds its own\n# methods.\npub struct Tag\n getter label : Name\n @count : Int32\n\n def initialize(@label : Name, @count : Int32)\n end\n\n derive described, shown\nend\n\nputs Tag.new(Name.new("hi"), 2).described\nputs Tag.new(Name.new("hi"), 2).shown\n\n# ---------------------------------------------------------------------------\n# What this sample would report as an error\n# ---------------------------------------------------------------------------\n#\n# * `derive missing` where nothing exports a `missing` macro. The error names\n# the macro and the declaration it would have to be written as, rather than\n# failing as an undefined method on the type's metaclass.\n#\n# * `derive` outside a class or struct body. There is no declaration to read,\n# so there is nothing for the macro to be handed.\n#\n# * A `derive` inside a reopened type from another module. That is refused\n# before the derive is reached, by R-3: iyi has no open classes, so a module\n# cannot add to a type it does not declare.\n#\n# * A `getter` (or any macro call that declares a field) written below the\n# `derive` that should read it. The derive names the call and says which way\n# to move, rather than generating a method over the fields it happened to see.\n", "samples/iyi/enums.iyi": "# An `enum`, used the way a program uses one — SPEC.md IV.2.\n#\n# ./bin/iyi run samples/iyi/enums.iyi\n#\n# The compiler gives an enum two methods: `value`, the integer the member was\n# numbered with, and `new`, which wraps one. Everything below is the prelude's\n# (`src/iyi/enum.iyi`), and until this sample asked for it none of it was\n# there: `Level::Warn == Level::Warn` was false, `"#{Level::Warn}"` printed\n# `Samples::Enums::Level`, and a `case` over the members matched nothing —\n# because a `when` that names a member lowers to `Level::Warn === level`, and\n# `===` is `==`.\n#\n# Two enums, because the compiler writes different code for each: a plain one\n# whose `case` the exhaustiveness checker holds to every member, and a\n# `@[Flags]` one, where it synthesizes `None`, `All` and question methods that\n# ask `includes?`.\n\nmodule samples/enums\n\n# A level is an order as well as a name, which is why the threshold below\n# works: `Warn >= Info` is the whole reason a program writes one.\nenum Level : Int32\n Debug = 0\n Info = 1\n Warn = 2\n Error = 3\nend\n\n# A set of bits, one per member, which is what `@[Flags]` numbers them as.\n@[Flags]\nenum Mode\n Read\n Write\n Append\nend\n\n# 1. A member prints as its name, in interpolation and out of `to_s`.\nlevel = Level::Warn\nputs "level: #{level}"\nputs "spelled: " + Level::Error.to_s\n\n# 2. Equality, and the `case` that is built on it — a `when` naming a member\n# lowers to `===`, which is `==`.\nputs "same: #{level == Level::Warn}"\nputs "other: #{level == Level::Debug}"\n\n# `in` rather than `when`, which is the form the exhaustiveness checker holds\n# to every member: the day a member is added this sample stops compiling\n# rather than falling through, and the answer is a `String` rather than a\n# `String | Nil` because there is nothing left for an `else` to catch.\nverdict = case level\n in Level::Debug then "quiet"\n in Level::Info then "ordinary"\n in Level::Warn then "loud"\n in Level::Error then "loudest"\n end\nputs "verdict: #{verdict}"\n\n# 3. The question methods the compiler writes, which call the prelude's `==`.\nputs "warn? #{level.warn?}"\nputs "error? #{level.error?}"\n\n# 4. An order, so a level can be a threshold.\nputs "at least info: #{level >= Level::Info}"\nputs "below error: #{level < Level::Error}"\n\n# 5. The members, as a list — a menu, a validation table, a loop over all of\n# them. `names` is the same list said in text.\nLevel.values.each do |candidate|\n print candidate.to_s\n print " "\nend\nputs ""\nputs "names: #{Level.names.size}"\n\n# 6. A name read back, which is what a program does with an argument or a\n# configuration line. Unknown text answers `nil` rather than a panic, and the\n# lenient form takes the spelling a person types.\nputs "parsed: #{Level.parse?("Error").to_s}"\nputs "lenient: #{Level.parse?("warn").to_s}"\nputs "unknown: #{Level.parse?("shout").inspect}"\n\n# 7. The value, for a wire format or a C call, and the way back.\nputs "value: #{Level::Error.value}"\nputs "from 1: #{Level.from_value?(1).to_s}"\nputs "from 9: #{Level.from_value?(9).inspect}"\n\n# 8. A flags enum: the two set operators, membership, and a `to_s` that says\n# which bits are in it.\nmode = Mode::Read | Mode::Write\nputs "mode: #{mode}"\nputs "read: #{mode.includes?(Mode::Read)}"\nputs "append: #{mode.append?}"\nputs "none: #{Mode::None.to_s}"\nputs "masked: #{(mode & Mode::Write).to_s}"\n\n# 9. As a `Hash` key, which needs `hash` as well as `==`.\ncounts = {} of Level => Int32\ncounts[Level::Warn] = 2\ncounts[Level::Error] = 1\nputs "warns: #{counts[Level::Warn]}"\nputs "errors: #{counts[Level::Error]}"\n", "samples/iyi/errors.iyi": "# Errors are ordinary union members — SPEC.md III.1.\n#\n# ./bin/iyi run samples/iyi/errors.iyi\n#\n# No `Result` wrapper, no exception hierarchy, no new type machinery: unions\n# already exist and already carry a type id. What makes a member an *error*\n# member is that its type implements `Error`, a trait the compiler owns.\n\nmodule samples/errors\n\npub struct IOError\n getter path : String\n\n def initialize(@path : String)\n end\nend\n\n# `Error` is not declared here. It is the compiler's, so that `!` can ask\n# whether a member implements it without a name in scope deciding the answer.\nimpl Error for IOError\n def message : String\n "no such file: #{path}"\n end\nend\n\npub struct ParseError\n getter text : String\n\n def initialize(@text : String)\n end\nend\n\nimpl Error for ParseError\n def message : String\n "not a number: #{text}"\n end\nend\n\npub def read(path : String) : String | IOError\n return IOError.new(path) if path == "missing"\n path == "bad" ? "twelve" : "12"\nend\n\npub def to_number(text : String) : Int32 | ParseError\n return ParseError.new(text) unless text == "12"\n 12\nend\n\n# `!` propagates. If the value is a non-error member the expression evaluates to\n# it — narrowed, so `to_number` sees a `String` and not the union. If it is an\n# error member it is returned from here, which is why `load` has to admit both\n# errors in its own return type. Nothing enforces that separately: it is the\n# ordinary return-type check on the return the operator writes.\npub def load(path : String) : Int32 | IOError | ParseError\n text = read(path)!\n to_number(text)!\nend\n\n# Handling needs nothing new. An exhaustive `case` already checks totality, so\n# adding an error member to `load` turns every incomplete `case` on it into a\n# compile error. That is the main ergonomic argument for the whole approach and\n# it cost nothing to build.\n["config", "missing", "bad"].each do |path|\n case load(path)\n in Int32 then puts "read #{it}"\n in IOError then puts "io: #{it.message}"\n in ParseError then puts "parse: #{it.message}"\n end\nend\n\n# `it` is the value being matched, and it is narrowed per branch: the first sees\n# an `Int32`, the other two see one error type each, which is how `.message`\n# resolves without anything asking what the union holds. It is an assignment the\n# compiler writes into each branch, not new machinery — so `it` outlives the\n# `case` the way any variable assigned inside an `if` does, and a nested `case`\n# shadows it.\n\n# Where a `case` is overkill, `.or` takes a default and `.or_panic` takes the\n# value or dies (III.1.3). These cannot be ordinary methods: by II.1 a real\n# method call on `Int32 | IOError` would demand it from *both* members, and a\n# method every error type has to supply is what this design avoids. So the\n# compiler knows them by name — which is also why `or` and `or_panic` are not\n# names an iyi program can use for anything else.\n["config", "missing", "bad"].each do |path|\n puts "or: #{load(path).or(0)}"\nend\n\n# `.or` is an `is_a?(::Error)` and nothing more, so the result type falls out\n# instead of being computed: the default's type unioned with the non-error\n# members. Here that is `Int32`, and the default is only evaluated when there is\n# an error to recover from.\nputs "or: #{load("missing").or(-1)}"\n\n# `.or_panic` yields the non-error members alone, because what it calls never\n# returns. It reaches `message` on a value narrowed to `IOError | ParseError` —\n# two unrelated types — which resolves by II.1: both implement `Error`, so their\n# union does. Until panics exist (III.1.4), this unwinds as a Crystal exception.\nputs "panic: #{load("config").or_panic}"\n\n# ---------------------------------------------------------------------------\n# defer — III.1.4\n# ---------------------------------------------------------------------------\n#\n# Once errors are values returned early, the interesting exit from a body is an\n# ordinary `return` in the middle of it, and `begin`/`ensure` makes you wrap\n# everything after the acquisition to cover it. `defer` names the cleanup at the\n# acquisition instead. It expands to that same `ensure`, so it runs on a normal\n# exit, on a `!` propagation, and on an unwind — no new runtime machinery, only\n# a different shape.\npub def session(path : String) : Int32 | IOError | ParseError\n puts " open outer"\n defer puts " close outer"\n\n text = read(path)!\n\n puts " open inner"\n defer puts " close inner"\n\n to_number(text)!\nend\n\n# Cleanup is LIFO, and that is the nesting rather than a rule: the second\n# `defer` expands inside the first one's body, so its `ensure` is the inner one.\n# The failing run proves the part that matters — `read(path)!` returns from the\n# middle of the body and the cleanup still happens.\nputs "success:"\nputs session("config").or(-1)\nputs "propagating:"\nputs session("missing").or(-1)\n\n# The scope is the block, not the function. This is the departure from Go, and\n# it is what the expansion does rather than an extra rule: the cleanup lands\n# inside the loop body, so it runs each iteration instead of piling up until the\n# function returns — Go's best-known wart with the feature.\n2.times do |i|\n defer puts " iteration #{i} closed"\n puts " iteration #{i}"\nend\n\n# ---------------------------------------------------------------------------\n# What this sample would report as an error\n# ---------------------------------------------------------------------------\n#\n# * Dropping the `in ParseError` branch — `case is not exhaustive`.\n#\n# * `def go : String` with `read(p)!` in it — the error names the return type\n# and the error being propagated into it.\n#\n# * `!` on something with no error member, such as an `Int32?`. Rejected rather\n# than given a surprising meaning: `Nil` does not implement `Error` (III.1.5),\n# so without the check this would compile and silently do nothing.\n#\n# * `!` on a value whose every member is an error. It could never produce one,\n# and a function that genuinely never succeeds returns `NoReturn`.\n#\n# * `def sort!` — `!` is not part of a name (III.1.7). This is the one place\n# that still explains the naming convention, because after a `def` name there\n# is nothing to propagate.\n#\n# * `.or` and `.or_panic` on the same two operands `!` rejects. With no error\n# member there is nothing to recover; with every member an error, `.or` can\n# only return its default and `.or_panic` can only panic.\n#\n# * `.or 0` without parentheses — `.or` takes the default in parentheses, so\n# the shape cannot be confused with a call to a method of that name.\n#\n# * `it` in a `case` over a tuple, such as `case {a, b}` — there is no single\n# value to name, so `it` stays undefined rather than being bound to one of\n# the elements.\n#\n# * `defer close(f)!` — a `defer` runs while the scope is already being left,\n# possibly carrying an error of its own, so a second one leaving from there\n# is the error-during-error problem. Handle it in the `defer` body.\n#\n# * `impl Error for String` here — the orphan rule (R-3). `Error` is the\n# compiler's and `String` is the prelude's, so neither belongs to a module\n# this impl could be at home in, and every module that can name both would be\n# free to write its own.\n#\n# ---------------------------------------------------------------------------\n# Not yet implemented\n# ---------------------------------------------------------------------------\n#\n# * Panics (III.1.4). They are meant to be catchable only at task boundaries,\n# and what a task boundary is belongs to Part V.5. Until then `.or_panic`\n# raises a Crystal exception, and `defer` runs on that unwind either way.\n", diff --git a/records/stdlib.json b/records/stdlib.json index 74348df..d7d9124 100644 --- a/records/stdlib.json +++ b/records/stdlib.json @@ -1,22 +1,22 @@ { "recorded": { - "compiler": "iyi 0.20.1 (built on Crystal 1.22.0-dev [91d012b1e] (2026-11-04))", - "commit": "91d012b1ed978c7df5cc033624ec161a2daf01b6", + "compiler": "iyi 0.21.0 (built on Crystal 1.22.0-dev [08ce6c1cb] (2026-11-09))", + "commit": "08ce6c1cb2ba5768b15485dbbd6413fcb17df19a", "machine": "Linux 7.0.0-38-generic x64, QEMU Virtual CPU version 2.5+", "command": "npm run record:stdlib", - "when": "2026-11-04T04:32:59.606Z" + "when": "2026-11-09T17:40:51.224Z" }, "modules": [ { "name": "std/acme", "path": "src/std/acme.iyi", - "sourceSha256": "3182946f098dcd1fcc2e03165324b06abc43d96ddd45a34d8b13c36df821ed19", + "sourceSha256": "5eee5cf4cef59fa1c1dd1cacecc58bc6806a3722e85d3778d43301cc68b24e90", "surface": "module std/acme\n\n# An authorization (section 7.1.4): the identifier, its status, and the\n# challenges by which it can be proved.\npub struct AcmeAuthorization\n # The challenge of *kind* offered, or why there is none.\n def challenge(kind : String) : AcmeChallenge | AcmeError\n def challenges : Array(AcmeChallenge)\n def self.from(url : String, object : Hash(String, Any)) : AcmeAuthorization | AcmeError\n def identifier : String\n def initialize(url : String, identifier : String, status : String, wildcard : Bool, challenges : Array(AcmeChallenge))\n def status : String\n def url : String\n def wildcard : Bool\nend\n\n# A challenge (section 8): its type (`http-01`, `dns-01`, `tls-alpn-01`),\n# where to answer it, its token, and its status, with the problem that\n# made it invalid.\npub struct AcmeChallenge\n def error : AcmeError | ::Nil\n def self.from(object : Hash(String, Any)) : AcmeChallenge | AcmeError\n def initialize(kind : String, url : String, token : String, status : String, error : AcmeError | ::Nil)\n def kind : String\n def status : String\n def token : String\n def url : String\nend\n\n# A session with an ACME server under one account key.\npub class AcmeClient\n protected def account=(url : String | ::Nil) : String | ::Nil\n # The account's URL, the `kid` every request after newAccount carries.\n def account_url : String | ::Nil\n # The authorization at *url*, read (POST-as-GET).\n def authorization(url : String) : AcmeAuthorization | AcmeError\n # `badNonce` answers sent again, over this session.\n def bad_nonce_retries : Int32\n # The certificate chain of a valid *order*, PEM, leaf first (section\n # 7.4.2): every block std/x509 reads, or why one does not read.\n def certificate(order : AcmeOrder) : String | AcmeError\n # How long to wait, in milliseconds, before polling again, as\n # *retry_after* - a Retry-After value - says (RFC 9110 section 10.2.3:\n # seconds, or an HTTP-date, judged against *now*), or *fallback_ms*\n # when there is none or it is neither. A date already past is no wait.\n def self.delay(retry_after : String | ::Nil, fallback_ms : Int32, now : Time) : Int64\n def directory : AcmeDirectory\n # The name dns-01's TXT record is put under for *domain*: a wildcard's\n # base domain, with `_acme-challenge.` before it.\n def self.dns_name(domain : String) : String\n # The dns-01 TXT record's value for *token* (section 8.4).\n def dns_txt(token : String) : String\n # One HTTP exchange, its answer read whole up to `MAX_BODY`; nothing\n # sent to a URL that is not `https://`.\n protected def self.exchange(method : String, url : String, body : String, accept : String | ::Nil, timeout_ms : Int32) : AcmeResponse | AcmeError\n # The order finalized with a certificate request for its names that\n # *key* signs (section 7.4): polled until its authorizations make it\n # ready, finalized, and polled until it is valid, with the certificate's\n # URL; or the error that made it invalid.\n def finalize(order : AcmeOrder, key : SigningKey) : AcmeOrder | AcmeError\n # Nil when *url* is an `https://` URL with a host, else the error that\n # refuses it as *what*: RFC 8555 section 6.1 requires HTTPS of every\n # ACME request, and anything else is plaintext an attacker on the path\n # can answer as the CA.\n def self.https(url : String, what : String) : AcmeError | ::Nil\n def initialize(directory_url : String, key : SigningKey, directory : AcmeDirectory, timeout_ms : Int32)\n def key : SigningKey\n # *token*'s key authorization (section 8.1): `token.thumbprint`.\n def key_authorization(token : String) : String\n # The most polls one wait makes, and the most milliseconds it takes.\n def max_polls : Int32\n # The most polls one wait makes, and the most milliseconds it takes.\n def max_polls=(value : Int32) : Int32\n # A session with the server whose directory is at *url*, signing with\n # *key*: the directory read, or why it could not be. *account_url*, an\n # account `register` answered before, is the `kid` from the start, so a\n # session that kept it need not register again. Both are `https://`.\n def self.new(url : String, key : SigningKey, timeout_ms : Int32 = 30000, account_url : String | ::Nil = nil) : AcmeClient | AcmeError\n # A new order for *names*, DNS identifiers (section 7.4).\n def new_order(names : Array(String)) : AcmeOrder | AcmeError\n # The order at *url*, read (POST-as-GET).\n def order(url : String) : AcmeOrder | AcmeError\n # How long to wait between polls when an answer has no Retry-After.\n def poll_ms : Int32\n # How long to wait between polls when an answer has no Retry-After.\n def poll_ms=(value : Int32) : Int32\n # The account for this key, made if there is none (section 7.3) - with\n # *contact*'s URLs (`mailto:`), the terms agreed to when\n # *terms_agreed* - or only found when *only_existing*: its URL, which\n # every request after this carries as `kid`.\n def register(contact : Array(String) = [] of String, terms_agreed : Bool = false, only_existing : Bool = false) : String | AcmeError\n # Tells the server *challenge* is ready to be checked (section 7.5.1):\n # its URL posted `{}`. Put the answer in place first.\n def respond(challenge : AcmeChallenge) : AcmeChallenge | AcmeError\n # The account moved to *new_key* (section 7.3.5): keyChange's inner JWS\n # signed by the new key, carrying its `jwk`, inside one the old key\n # signs as the account.\n def roll_key(new_key : SigningKey) : Nil | AcmeError\n # The account key's JWK thumbprint (RFC 7638), SHA-256 and base64url.\n def thumbprint : String\n # Each HTTP exchange's connect, and each read and write in it.\n def timeout_ms : Int32\n # Each HTTP exchange's connect, and each read and write in it.\n def timeout_ms=(value : Int32) : Int32\n # The authorization at *url* polled until it is no longer pending: the\n # valid authorization, or the error that made it something else.\n def wait_authorization(url : String) : AcmeAuthorization | AcmeError\n def wait_ms : Int32\n def wait_ms=(value : Int32) : Int32\nend\n\n# The directory's URLs (section 7.1.1).\npub struct AcmeDirectory\n def external_account_required : Bool\n def initialize(new_nonce : String, new_account : String, new_order : String, key_change : String | ::Nil, revoke_cert : String | ::Nil, terms_of_service : String | ::Nil, external_account_required : Bool)\n def key_change : String | ::Nil\n def new_account : String\n def new_nonce : String\n def new_order : String\n def self.parse(text : String) : AcmeDirectory | AcmeError\n def revoke_cert : String | ::Nil\n def terms_of_service : String | ::Nil\nend\n\n# What a request answered that it should not have, or could not do: a\n# problem document's `type` and `detail` (RFC 7807), or, with\n# `problem_type` empty, what failed beneath ACME.\npub struct AcmeError\n def detail : String\n # The identifier a subproblem is about (section 6.7.1), \"\" otherwise.\n def identifier : String\n def initialize(detail : String, problem_type : String = \"\", status : Int32 = 0, identifier : String = \"\", subproblems : Array(AcmeError) = [] of AcmeError)\n # Whether this came from a problem document.\n def problem? : Bool\n def problem_type : String\n # The HTTP status the problem came with; 0 when there was no answer.\n def status : Int32\n def subproblems : Array(AcmeError)\n def to_s : String\nend\n\n# http-01's answers (section 8.3), by token, for a std/http server: GET\n# `/.well-known/acme-challenge/` is answered with the token's key\n# authorization, a token not held with 404, any other path with nil - the\n# server's own to answer.\n#\n# responder = AcmeHttp01.new\n# Server.serve(listener, workers: 1) { |request| responder.answer(request) || app(request) }\n#\n# The table of answers is written as orders run, so it is one thread's:\n# the server that answers from it serves on that thread (`workers: 1`).\npub class AcmeHttp01\n def add(token : String, key_authorization : String) : Nil\n def answer(request : Request) : Response | ::Nil\n def initialize\n def remove(token : String) : Nil\nend\n\n# JWS (RFC 7515) as ACME signs it: the flattened JSON serialization, the\n# account's key as RFC 7638's canonical JWK, and the signature in the\n# form JWA (RFC 7518) gives each algorithm.\npub struct AcmeJws\n # The JWS algorithm *key* signs under: ES256, ES384, RS256 or EdDSA.\n def self.alg(key : SigningKey) : String\n # *data* in base64url without padding (RFC 7515 section 2).\n def self.b64u(data : String | Array(UInt8)) : String\n def self.bytes(text : String) : Array(UInt8)\n # The protected header: `alg`, then `jwk` when *kid* is nil and `kid`\n # when it is not, `nonce` when there is one, and `url`.\n def self.header(key : SigningKey, nonce : String | ::Nil, url : String, kid : String | ::Nil) : String\n def initialize\n # *key* as a JWK holding its required members alone, sorted, without\n # whitespace (RFC 7638 section 3): the text its thumbprint is taken of,\n # and the `jwk` a request carries.\n def self.jwk(key : RsaPublicKey | EcdsaPublicKey | Ed25519PublicKey) : String\n # A big-endian number without its leading zero bytes, as JWA writes\n # one (RFC 7518 section 6.3.1).\n def self.minimal(bytes : Array(UInt8)) : Array(UInt8)\n # An Ecdsa-Sig-Value's DER as R || S, each *size* bytes.\n def self.raw(der : Array(UInt8), size : Int32) : Array(UInt8)\n # The flattened JSON serialization (RFC 7515 section 7.2.2) of *payload*\n # - nil for the empty payload of POST-as-GET - under *header*.\n def self.sign(key : SigningKey, header : String, payload : String | ::Nil) : String\n # *key*'s JWS signature of *input*: R || S for ECDSA, each at the\n # curve's width (RFC 7518 section 3.4), where std/p256 and std/p384 sign\n # in X.509's DER; RSA's and Ed25519's as they are.\n def self.signature(key : SigningKey, input : Array(UInt8)) : Array(UInt8)\n # *key*'s JWK thumbprint (RFC 7638): base64url of the SHA-256 of `jwk`.\n def self.thumbprint(key : RsaPublicKey | EcdsaPublicKey | Ed25519PublicKey) : String\nend\n\n# An order (section 7.1.3): its URL, status, names, the authorizations to\n# prove, where to finalize it, and, once it is valid, its certificate.\npub struct AcmeOrder\n def authorizations : Array(String)\n def certificate_url : String | ::Nil\n def error : AcmeError | ::Nil\n def finalize_url : String\n def self.from(url : String, object : Hash(String, Any)) : AcmeOrder | AcmeError\n def identifiers : Array(String)\n def initialize(url : String, status : String, identifiers : Array(String), authorizations : Array(String), finalize_url : String, certificate_url : String | ::Nil, error : AcmeError | ::Nil)\n def status : String\n def url : String\nend\n\n# tls-alpn-01 (RFC 8737): the certificate a TLS server shows to a client\n# whose ALPN offers `acme-tls/1`, and a std/tls config that shows it.\npub struct AcmeTlsAlpn01\n # The self-signed certificate for *domain* (section 3): its one dNSName\n # *domain*, and the critical acmeIdentifier extension, an OCTET STRING\n # of the SHA-256 of *key_authorization*; signed by *key*, valid from a\n # day before *now* to a week after. A *domain* past 64 characters is\n # refused, as std/x509 refuses its common name.\n def self.certificate(domain : String, key_authorization : String, key : SigningKey, now : Time = Time.utc) : Array(UInt8) | AcmeError\n # A std/tls server config that shows `certificate` for *domain*, under a\n # P-256 key made for it, and speaks `acme-tls/1` alone by ALPN.\n def self.config(domain : String, key_authorization : String) : TlsServerConfig | AcmeError\n def initialize\nend\n\nimpl Error for AcmeError\n def message : String\nend\n" }, { "name": "std/aead", "path": "src/std/aead.iyi", - "sourceSha256": "6b1bdaac65733c8d4b3cd6630ddc53535b7196378b048ebdaf7dcea1f75535a1", + "sourceSha256": "78766eb35ab70429a50e37ca813f2c84f7702cc92f36402ac55d8340ac79cca8", "surface": "module std/aead\n\n# The AES block cipher, FIPS 197: a 16, 24 or 32-byte key (10, 12 or 14\n# rounds), one 16-byte block at a time, either way. On its own it is a\n# building block; a message wants a mode, `AesGcm`.\npub class AES\n # FIPS 197's InvCipher: the block `encrypt_block` answered, back.\n def decrypt_block(block : String | Array(UInt8)) : String\n # FIPS 197's Cipher: 16 bytes in, 16 out.\n def encrypt_block(block : String | Array(UInt8)) : String\n def initialize(key : String | Array(UInt8))\nend\n\n# What `open` answers for sealed bytes it will not open: shorter than a\n# tag, or whose tag does not match.\npub struct AeadError\n def initialize(message : String)\n def to_s : String\nend\n\n# AES in Galois/Counter Mode, NIST SP 800-38D: CTR encryption from the\n# counter after the nonce's own, and a 128-bit tag that is GHASH over the\n# additional data and the ciphertext, each padded to a block, and their\n# lengths in bits, XORed with the key stream of the nonce's counter\n# block. The nonce is 12 bytes, and the counter block is it and a 32-bit\n# counter that starts at 1 (§7.1).\npub class AesGcm\n def initialize(key : String | Array(UInt8))\n # The plaintext *sealed* came from, when its tag is the one this key,\n # *nonce* and *aad* give; else an `AeadError`, and nothing decrypted.\n def open(nonce : String | Array(UInt8), sealed : String | Array(UInt8), aad : String | Array(UInt8) = \"\") : String | AeadError\n # The ciphertext of *plaintext*, as long as it, and the 16-byte tag.\n def seal(nonce : String | Array(UInt8), plaintext : String | Array(UInt8), aad : String | Array(UInt8) = \"\") : String\nend\n\n# The ChaCha20 stream cipher, RFC 8439 §2.4: a 32-byte key, a 12-byte\n# nonce and a 32-bit block counter, which starts at *counter*. `xor`\n# answers its data XORed with the key stream and carries on from where\n# it stopped, so a message XORed in pieces is the message XORed whole;\n# the same call decrypts. The counter is the RFC's 32 bits, 256 GiB of\n# key stream; a stream run past block 2^32 - 1 is refused rather than\n# wrapped onto key stream already used.\npub class ChaCha20\n def initialize(key : String | Array(UInt8), nonce : String | Array(UInt8), counter : UInt32 = 0_u32)\n # *count* bytes from *src* to *dst*, which may be the same bytes.\n def xor(src : Pointer(UInt8), dst : Pointer(UInt8), count : Int32) : Nil\n def xor(data : String | Array(UInt8)) : String\nend\n\n# ChaCha20 and Poly1305 as an AEAD, RFC 8439 §2.8: the Poly1305 key is\n# the first 32 bytes of block 0's key stream, the plaintext is encrypted\n# from block 1, and the tag covers the additional data and the\n# ciphertext, each padded with zeros to 16 bytes, then their lengths as\n# 64-bit little-endian numbers.\npub class ChaCha20Poly1305\n def initialize(key : String | Array(UInt8))\n # The plaintext *sealed* came from, when its tag is the one this key,\n # *nonce* and *aad* give; else an `AeadError`, and nothing decrypted.\n def open(nonce : String | Array(UInt8), sealed : String | Array(UInt8), aad : String | Array(UInt8) = \"\") : String | AeadError\n # The ciphertext of *plaintext*, as long as it, and the 16-byte tag.\n def seal(nonce : String | Array(UInt8), plaintext : String | Array(UInt8), aad : String | Array(UInt8) = \"\") : String\nend\n\n# Poly1305, RFC 8439 §2.5: a 16-byte MAC under a 32-byte one-time key, r\n# (clamped) and s. One key authenticates one message: a second message\n# under it lets whoever sees both tags forge a third, which is why the\n# AEAD derives a fresh key from each nonce, and why there is no `reset`.\n# `Poly1305.mac(key, data)` is one piece; `new`, `update` as the message\n# arrives, `final` once is the same in pieces. A tag someone sent is\n# compared with std/crypto's `Subtle.constant_time_compare`, not `==`.\npub class Poly1305\n # The 16-byte tag. A last block shorter than 16 bytes carries its own\n # 1 bit after its bytes (§2.5.1), rather than the 2^128 of a whole one.\n def final : String\n def initialize(key : String | Array(UInt8))\n def self.mac(key : String | Array(UInt8), data : String | Array(UInt8)) : String\n def update(data : Pointer(UInt8), count : Int32) : self\n def update(data : String | Array(UInt8)) : self\nend\n\nimpl Error for AeadError\n def message : String\nend\n" }, { @@ -28,31 +28,31 @@ { "name": "std/asn1", "path": "src/std/asn1.iyi", - "sourceSha256": "d8a5c75bdde73037027287b62ecc89ffc83595fdee77713cfce3d451f46645e4", + "sourceSha256": "24f026d27ed4b5cd126acdd1cab59ba4a44c9fc97e0125df8794d4d3f71a3cc4", "surface": "module std/asn1\n\n# What `Der.parse`, `children` and the typed readers answer for bytes that\n# are not the DER they were asked for: a sentence, and the offset in the\n# bytes `Der.parse` was given where the trouble is.\npub struct Asn1Error\n def initialize(message : String, offset : Int32)\n def offset : Int32\n def to_s : String\nend\n\npub struct Der\n def initialize\n # The one value *bytes* hold, and nothing after it.\n def self.parse(bytes : Array(UInt8)) : DerValue | Asn1Error\n # Every value under *value*, *value* first, in the order they are\n # written, each with its depth below it: the whole tree read and every\n # length and tag checked. Primitive contents are not decoded; that is\n # the typed readers' job, asked of the values a schema names.\n def self.walk(value : DerValue, & : (DerValue, Int32 -> Nil)) : Nil | Asn1Error\nend\n\n# The two bits at the top of an identifier byte.\npub enum DerClass : Int32\n Universal = 0\n Application = 1\n ContextSpecific = 2\n Private = 3\nend\n\n# The universal tag numbers this module reads (X.680 section 8.6).\npub struct DerTag\n def initialize\nend\n\n# One value: its identifier, and where its header and content are in the\n# bytes it was read from.\npub struct DerValue\n # A BIT STRING whose bits fill whole bytes: a key, a signature.\n def bit_string : Array(UInt8) | Asn1Error\n # A BIT STRING's bytes and how many bits at the end of the last are not\n # part of it, which DER sets to zero: a flags field such as keyUsage.\n def bit_string_bits : ::Tuple(Array(UInt8), Int32) | Asn1Error\n def boolean : Bool | Asn1Error\n # The values a constructed value holds, read one level down.\n def children : Array(DerValue) | Asn1Error\n def constructed? : Bool\n # The content bytes, copied.\n def content : Array(UInt8)\n # The offset of the first content byte, and of the byte after the value.\n def content_offset : Int32\n def content_size : Int32\n def context?(tag : Int32) : Bool\n # The identifier, said the way an error names it: `INTEGER`,\n # `[0] constructed`, `APPLICATION 3`.\n def describe : String\n def end_offset : Int32\n # An ENUMERATED that fits an Int64: a CRL entry's reason code, an\n # OCSP response's status.\n def enumerated : Int64 | Asn1Error\n # An ENUMERATED's two's-complement bytes, held to INTEGER's rules.\n def enumerated_bytes : Array(UInt8) | Asn1Error\n # The one value inside an explicit context tag `[n]`, as X.509 writes a\n # certificate's version and extensions.\n def explicit(tag : Int32) : DerValue | Asn1Error\n def header_size : Int32\n def initialize(data : Array(UInt8), tag_class : DerClass, constructed : Bool, tag : Int32, offset : Int32, header_size : Int32, content_size : Int32)\n # An INTEGER that fits an Int64.\n def integer : Int64 | Asn1Error\n # An INTEGER's two's-complement bytes, as written: checked to be the\n # fewest that hold it. Only an INTEGER: an ENUMERATED is written the same\n # way under another tag, and reading one here took an Ecdsa-Sig-Value\n # whose r or s was tagged ENUMERATED - a signature no DER reader accepts.\n def integer_bytes : Array(UInt8) | Asn1Error\n def null : Nil | Asn1Error\n def octet_string : Array(UInt8) | Asn1Error\n def offset : Int32\n # An OBJECT IDENTIFIER in dotted form, `\"2.5.4.3\"`. A subidentifier past\n # an Int64 is refused: no algorithm or attribute is one.\n def oid : String | Asn1Error\n # The whole value as it was written, header included: what a signature\n # over a certificate's `tbsCertificate` is computed on.\n def raw : Array(UInt8)\n # One value's header at *at*, its content within *stop*.\n def self.read(data : Array(UInt8), at : Int32, stop : Int32) : DerValue | Asn1Error\n # A SEQUENCE's elements: `children`, after checking it is one.\n def sequence : Array(DerValue) | Asn1Error\n # A SET's elements.\n def set : Array(DerValue) | Asn1Error\n # Any of the string types X.509 names are written in, as UTF-8.\n def string : String | Asn1Error\n def tag : Int32\n def tag_class : DerClass\n # A UTCTime or a GeneralizedTime, in the one form DER writes each.\n def time : Time | Asn1Error\n def universal?(tag : Int32) : Bool\n def self.universal_name(tag : Int32) : String\n # A non-negative INTEGER's magnitude, big-endian, without the 0x00 a\n # high bit makes DER write: an RSA modulus, a serial number. A negative\n # one is refused.\n def unsigned_integer : Array(UInt8) | Asn1Error\nend\n\nimpl Error for Asn1Error\n def message : String\nend\n" }, { "name": "std/atomic", "path": "src/std/atomic.iyi", - "sourceSha256": "3d1c544d3770dfa4b48136cda61ea466fc8ce6ea670fbe91b370f8ff21eda336", + "sourceSha256": "2fc9ae2d5bc23f8f76a6f2e043f29034020cf547069b913fb6b5ce9dc5a7a516", "surface": "module std/atomic\n\nstruct ::Atomic(T)\n def add_acq_rel(value : T) : T\n def add_acquire(value : T) : T\n def add_relaxed(value : T) : T\n def add_release(value : T) : T\n # `word &= value`; answers what the word held before.\n def and(value : T) : T\n # `word |= value`; answers what the word held before.\n def bitwise_or(value : T) : T\n def compare_and_set_acq_rel(expected : T, desired : T) : Tuple(T, Bool)\n def compare_and_set_acquire(expected : T, desired : T) : Tuple(T, Bool)\n # `compare_and_set` at each weaker ordering: if the word holds\n # `expected` it now holds `desired`; answers what the word held and\n # whether the exchange happened.\n def compare_and_set_relaxed(expected : T, desired : T) : Tuple(T, Bool)\n def compare_and_set_release(expected : T, desired : T) : Tuple(T, Bool)\n # A full fence: nothing crosses it in either direction.\n def self.fence : Nil\n # Both halves, without the total order of `fence`.\n def self.fence_acq_rel : Nil\n # Nothing after this fence moves before it.\n def self.fence_acquire : Nil\n # Nothing before this fence moves after it.\n def self.fence_release : Nil\n # The word, read once; nothing after the read moves before it.\n def get_acquire : T\n # The word, read once, atomic and nothing more.\n def get_relaxed : T\n # `word = max(word, value)`, signed or unsigned as `T` is; answers what\n # the word held before.\n def max(value : T) : T\n # `word = min(word, value)`, signed or unsigned as `T` is; answers what\n # the word held before.\n def min(value : T) : T\n # `word = ~(word & value)`; answers what the word held before.\n def nand(value : T) : T\n # The word, written once, atomic and nothing more.\n def set_relaxed(value : T) : Nil\n # The word, written once; nothing before the write moves after it.\n def set_release(value : T) : Nil\n def sub_acq_rel(value : T) : T\n def sub_acquire(value : T) : T\n def sub_relaxed(value : T) : T\n def sub_release(value : T) : T\n def swap_acq_rel(value : T) : T\n def swap_acquire(value : T) : T\n def swap_relaxed(value : T) : T\n def swap_release(value : T) : T\n # `word ^= value`; answers what the word held before.\n def xor(value : T) : T\nend\n\nstruct ::IyiAtomic\n def self.fence(ordering : Symbol, singlethread : Bool) : Nil\nend\n" }, { "name": "std/autocert", "path": "src/std/autocert.iyi", - "sourceSha256": "7342edc6a46dfb8bf30eaed23fc23d7b9fed3ecbd477ea88dadbe157a94e755e", + "sourceSha256": "7c3ad0f9bf39f109a6f834ed9bebbd5ea54ea5cabcbb5b3a91bd0602e763131c", "surface": "module std/autocert\n\n# Where a manager keeps its account key and its certificates: text by\n# key, nil for a key not held. Every value it is given holds a private\n# key.\npub trait AutocertCache\n abstract def delete(key : String) : AutocertError | ::Nil\n abstract def get(key : String) : String | AutocertError | Nil\n abstract def put(key : String, data : String) : AutocertError | ::Nil\nend\n\n# A cache in a directory: an entry a file named by its key. The directory\n# is made, 0700, the first time it is written to where it is not there;\n# an entry is written to a file of its own in it, created 0600 (the\n# umask may take more away, never less), then renamed over the old one.\npub class AutocertDirCache\n def dir : String\n def initialize(dir : String)\nend\n\n# Why a certificate could not be had, or the cache not read or written.\npub struct AutocertError\n def detail : String\n def initialize(detail : String)\n def to_s : String\nend\n\n# A certificate a manager holds for a name: the identity handshakes are\n# shown, its dates, and when renewal is next tried.\npub class AutocertHeld\n # Whether a handshake at *now_ms* may be shown it.\n def current?(now_ms : Int64) : Bool\n def failures : Int32\n def failures=(value : Int32) : Int32\n def identity : TlsIdentity\n def initialize(identity : TlsIdentity, renew_at_ms : Int64)\n def not_after_ms : Int64\n def not_before_ms : Int64\n # When renewal is next tried: its due time, later after failures.\n def renew_at_ms : Int64\n # When renewal is next tried: its due time, later after failures.\n def renew_at_ms=(value : Int64) : Int64\nend\n\n# Gets, keeps and renews certificates for a server's names from an ACME\n# CA, and shows them to std/tls handshakes by server_name.\npub class AutocertManager\n # Whether the CA's terms of service are agreed to when the account is\n # made: a CA that has terms refuses an account without.\n def accept_terms : Bool\n # Whether the CA's terms of service are agreed to when the account is\n # made: a CA that has terms refuses an account without.\n def accept_terms=(value : Bool) : Bool\n # Puts up the answers to *name*'s challenge: tls-alpn-01's certificate\n # for *key_authorization*, shown under `acme-tls/1`, and http-01's\n # answer for *token* (`answer`). An order puts them up while the CA\n # checks; a program answering a challenge of its own can too.\n def add_challenge(name : String, token : String, key_authorization : String) : AutocertError | ::Nil\n # http-01's answer to a request on port 80\n # (`/.well-known/acme-challenge/`), or nil for any other path:\n # `Server.serve(listener, workers: 1) { |r| manager.answer(r) || ... }`,\n # on one thread, since the manager's state is that thread's.\n def answer(request : Request) : Response | ::Nil\n def cache : AutocertCache\n # The certificate for *name*, normalized as `normalize` does: the one\n # held while it is current; else one the cache holds for it, or a new\n # one from the CA - by one order however many ask at once, waited for\n # *left_ms* at most when it is given - unless the host policy refuses\n # the name or its last order failed too recently.\n def certificate(name : String, left_ms : Int32 | ::Nil = nil) : AutocertHeld | AutocertError\n # The challenges offered, in the order tried.\n def challenges : Array(String)\n # The challenges offered, in the order tried.\n def challenges=(value : Array(String)) : Array(String)\n def directory_url : String\n # The account's contact address, without `mailto:`; none when empty.\n def email : String\n # The account's contact address, without `mailto:`; none when empty.\n def email=(value : String) : String\n # *config* - `tls_config`'s, or one the program got from it and set\n # more of, a `min_version` or `groups` - frozen for std/http's\n # `Server.serve(tls:)` on more than one worker: its identity source\n # runs on every worker, answers what this manager holds there, and\n # asks `run` for the rest (the header says how). `run` must run while\n # it serves.\n def frozen_tls_config(config : TlsServerConfig = tls_config) : TlsFrozenServerConfig\n # Whether a name may have a certificate; asked before the cache or the\n # CA. The names given to `new` and no other, unless replaced.\n def host_policy : Proc(String, Bool)\n # Whether a name may have a certificate; asked before the cache or the\n # CA. The names given to `new` and no other, unless replaced.\n def host_policy=(value : Proc(String, Bool)) : Proc(String, Bool)\n # The identity a handshake for *server_name*, offering *alpn*, is shown:\n # tls-alpn-01's certificate to a client offering `acme-tls/1` alone, the\n # name's certificate - got now if it must be, waiting *left_ms* at most\n # - to any other; or why there is none, as the error the handshake is\n # refused with: unrecognized_name for a name not answered for,\n # internal_error for one whose certificate could not be had in time.\n def identity_for(server_name : String | ::Nil, alpn : Array(String) | ::Nil, left_ms : Int32 | ::Nil = nil) : TlsIdentity | TlsError\n # A manager for the CA whose directory is at *directory_url*, keeping\n # its keys and certificates in *cache*, that answers for *hosts* alone.\n def initialize(directory_url : String, cache : AutocertCache, hosts : Array(String))\n # *host* as a server_name is compared: IDNA's A-labels for a Unicode\n # name, no trailing dot, lower case. A name IDNA refuses is compared as\n # it is written.\n def self.normalize(host : String) : String\n # Certificates ordered, and renewed, by this manager.\n def orders : Int32\n def remove_challenge(name : String, token : String) : Nil\n # How long before expiry a certificate is renewed.\n def renew_before : Span\n # How long before expiry a certificate is renewed.\n def renew_before=(value : Span) : Span\n # When a certificate valid from *not_before_ms* to *not_after_ms* is\n # due for renewal: `renew_before` ahead of its end, or two thirds into\n # a life no longer than `renew_before`.\n def renew_time(not_before_ms : Int64, not_after_ms : Int64) : Int64\n def renewals : Int32\n # How long a failed order is remembered, and a failed renewal put off;\n # doubled for each failure after, to `MAX_RETRY_MS`.\n def retry_ms : Int32\n # How long a failed order is remembered, and a failed renewal put off;\n # doubled for each failure after, to `MAX_RETRY_MS`.\n def retry_ms=(value : Int32) : Int32\n # The roots a chain the CA issues, or the cache holds, must reach to be\n # kept and shown: the system's when nil.\n def roots : Array(Certificate) | ::Nil\n # The roots a chain the CA issues, or the cache holds, must reach to be\n # kept and shown: the system's when nil.\n def roots=(value : Array(Certificate) | ::Nil) : Array(Certificate) | ::Nil\n # Renews certificates as they come due, until `stop`: run it in a task\n # of a group that lives as long as the server. Each held certificate is\n # looked at when it is due and whenever one is added; a renewal that\n # fails is tried again `retry_ms` later, doubling to an hour. While it\n # runs, the orders handshakes ask for run in its group too, so that one\n # outlives the handshake that asked; `stop` cancels those still running.\n # It answers a `frozen_tls_config`'s workers too, each ask in a task of\n # its group.\n def run : Nil\n # Ends `run`.\n def stop : Nil\n # A std/tls server config that shows this manager's certificates, and\n # speaks *alpn*'s protocols with `acme-tls/1` after them. Its own\n # `identity` is a self-signed certificate for `autocert.invalid` that\n # no handshake is shown: the manager answers each one itself.\n def tls_config(alpn : Array(String) = [\"http/1.1\"]) : TlsServerConfig\n # The longest a handshake waits for an order - less when its deadline\n # is nearer - and an order for the CA's polls.\n def wait_ms : Int32\n # The longest a handshake waits for an order - less when its deadline\n # is nearer - and an order for the CA's polls.\n def wait_ms=(value : Int32) : Int32\nend\n\nimpl Error for AutocertError\n def message : String\nend\n\nimpl AutocertCache for AutocertDirCache\n def get(key : String) : String | AutocertError | Nil\n def put(key : String, data : String) : AutocertError | ::Nil\n def delete(key : String) : AutocertError | ::Nil\nend\n" }, { "name": "std/base32", "path": "src/std/base32.iyi", - "sourceSha256": "f9b1992e89458803b9a096d9855dcb689258b6439f0f439499bc36f2e320dc4b", + "sourceSha256": "c4b5625277e958d088be569b2a557a95dca14407c260deadd43a2cbcb3536a42", "surface": "module std/base32\n\n# RFC 4648 section 6, the alphabet authenticator secrets are written in.\npub struct Base32\n def self.decode(text : String) : Array(UInt8) | Base32Error\n def self.encode(data : String | Array(UInt8), padding : Bool = true) : String\n def initialize\nend\n\n# What `decode` answers for a text that is not base32.\npub struct Base32Error\n def initialize(message : String)\n def to_s : String\nend\n\n# RFC 4648 section 7, the extended-hex alphabet: what DNSSEC's NSEC3\n# records (RFC 5155) write their hashed names in.\npub struct Base32Hex\n def self.decode(text : String) : Array(UInt8) | Base32Error\n def self.encode(data : String | Array(UInt8), padding : Bool = true) : String\n def initialize\nend\n\nimpl Error for Base32Error\n def message : String\nend\n" }, { "name": "std/base64", "path": "src/std/base64.iyi", - "sourceSha256": "ac315bc8855107def67fc606bffbc46414ce9327e30e22a96e462a4b1898d4fd", + "sourceSha256": "c7e6580b4fb0444710ff5f49390ec88d27dc408ff7eb7bef11c3df0910b1de2d", "surface": "module std/base64\n\npub struct Base64\n def self.decode(text : String) : String\n protected def self.decode_values : Array(Int32)\n def self.encode(data : String) : String\n def initialize\n protected def self.pairs_of(alphabet : String) : Array(Int32)\n def self.urlsafe_encode(data : String) : String\nend\n" }, { @@ -64,13 +64,13 @@ { "name": "std/big", "path": "src/std/big.iyi", - "sourceSha256": "979cc358dd97fd15026b0251c74420c2c3a6ddc1c6210d2d099c0105af7bbb6f", + "sourceSha256": "f04f68120f7ca38d5b5bfc2a33cc3b9ca4fe1034181d7d4a13d1dcf2004e65a9", "surface": "module std/big\n\npub struct BigDecimal\n def !=(other : BigDecimal) : Bool\n def %(other : BigDecimal) : BigDecimal\n def *(other : BigDecimal) : BigDecimal\n def *(other : Int32 | Int64) : BigDecimal\n def +(other : BigDecimal) : BigDecimal\n def +(other : Int32 | Int64) : BigDecimal\n def + : BigDecimal\n def -(other : BigDecimal) : BigDecimal\n def -(other : Int32 | Int64) : BigDecimal\n def - : BigDecimal\n def /(other : BigDecimal) : BigDecimal\n def /(other : Int32 | Int64) : BigDecimal\n def //(other : BigDecimal) : BigDecimal\n def abs : BigDecimal\n protected def self.align(a : BigDecimal, b : BigDecimal) : Tuple(BigInt, BigInt, Int32)\n # `self / other` rounded to `precision` fractional digits, half away from\n # zero. A quotient that is exact within `precision` digits is answered with\n # the fewest digits that write it: `1/4` is `0.25`, `6/3` is `2`. One that\n # is not keeps all `precision` digits, so the reader sees where it was cut.\n def div(other : BigDecimal, precision : Int32) : BigDecimal\n # The same value at another scale is the same key: `1.10`, `1.1` and\n # `11e-1` hash alike because `==` says they are equal. The digits without\n # their trailing zeros and the exponent that goes with them name the value;\n # multiplying a negative scale out made `1e1000000.hash` take 2.6 s.\n def hash : Int32\n def initialize(value : BigInt, scale : Int32 = 0)\n def initialize(num : Int32 = 0, scale : Int32 = 0)\n def initialize(num : Int64, scale : Int32 = 0)\n # Parses `[+-]digits[.digits][e[+-]digits]`; anything else is refused.\n def initialize(str : String)\n def inspect : String\n # Bounds on the place of the leading digit, from the limb count alone:\n # 10^(lo - 1) <= |self| < 10^hi. 30102 and 30103 in 100,000 bracket\n # log10(2) for each 32-bit limb.\n protected def magnitude_bounds : Tuple(Int64, Int64)\n def negate : BigDecimal\n def negative? : Bool\n # The same value with the smallest non-negative scale: trailing zeros of\n # the fraction are dropped and a negative scale is multiplied out.\n def normalized : BigDecimal\n def positive? : Bool\n def scale : Int32\n # The value without its trailing zeros, at most `limit` of them, and how\n # many went. Counted once in the digits and divided out once: one divmod\n # by ten per zero was quadratic, and the hash of `1.` and 40,000 zeros, or\n # `3.div(3, 40000)`, took 725 ms. A value that does not end in zero is\n # answered by one division by ten, without printing it.\n protected def strip_zeros(limit : Int32) : Tuple(BigInt, Int32)\n def to_big_d : BigDecimal\n def to_big_i : BigInt\n def to_f : Float64\n def to_f64 : Float64\n def to_i32 : Int32\n def to_i64 : Int64\n # Zero is `0` whatever its scale; every other value prints every digit of\n # its scale, so `1.10` stays `1.10`.\n def to_s : String\n def value : BigInt\n def zero? : Bool\nend\n\n# A binary floating-point number of any precision: `±mantissa · 2^exponent`,\n# the mantissa exactly *precision* bits long (128 unless asked), every\n# result rounded once, to the nearest value of that many bits, ties to even\n# - the rounding IEEE 754 gives a double, at any width. The other library's\n# BigFloat is GMP's `mpf`, which truncates and keeps more bits than it was\n# asked for; this one answers what MPFR does.\n#\n# a = BigFloat.new(2, 256)\n# a.sqrt.to_s\n# # => \"1.4142135623730950488016887242096980785696718753769480731766797379907324784621\"\n# BigFloat.new(\"0.1\", 24).to_f64 # => 0.10000000149011612\n#\n# An operation between two answers at the larger precision; with an\n# integer, at the BigFloat's. `to_s` writes the fewest decimal digits that\n# read back to the same value at its precision, positional from 1e-4 to\n# below 1e15 and with an exponent outside, as `Float64#to_s` writes. There\n# is no NaN or infinity: dividing by zero, the square root of a negative\n# number, a NaN or an infinite double, a precision under 1 and a string\n# that is no number are refused.\npub struct BigFloat\n def *(other : BigFloat) : BigFloat\n def *(other : Int32 | Int64 | BigInt) : BigFloat\n # The power, its exact value rounded once; a negative exponent is the\n # reciprocal of the power, rounded once.\n def **(exponent : Int32) : BigFloat\n def +(other : BigFloat) : BigFloat\n def +(other : Int32 | Int64 | BigInt) : BigFloat\n def + : BigFloat\n def -(other : BigFloat) : BigFloat\n def -(other : Int32 | Int64 | BigInt) : BigFloat\n def - : BigFloat\n def /(other : BigFloat) : BigFloat\n def /(other : Int32 | Int64 | BigInt) : BigFloat\n def ==(other : BigFloat) : Bool\n def abs : BigFloat\n def ceil : BigFloat\n protected def self.check(precision : Int32) : Nil\n # An integer at exactly the bits it has.\n protected def self.exactly(value : Int32 | Int64 | BigInt) : BigFloat\n protected def exponent : Int64\n def floor : BigFloat\n # Equal values hash alike whatever their precision: the mantissa without\n # its trailing zero bits.\n def hash : Int32\n def initialize(negative : Bool, mantissa : BigInt, exponent : Int64, precision : Int32)\n def inspect : String\n # The largest integer whose square is at most *value*, by Newton's\n # method from above.\n protected def self.isqrt(value : BigInt) : BigInt\n protected def mantissa : BigInt\n def negative? : Bool\n def self.new(value : Int32, precision : Int32 = DEFAULT_PRECISION) : BigFloat\n def self.new(value : Int64, precision : Int32 = DEFAULT_PRECISION) : BigFloat\n def self.new(value : BigInt, precision : Int32 = DEFAULT_PRECISION) : BigFloat\n # The double's exact value, rounded to *precision* bits.\n def self.new(value : Float64, precision : Int32 = DEFAULT_PRECISION) : BigFloat\n def self.new(value : BigRational, precision : Int32 = DEFAULT_PRECISION) : BigFloat\n def self.new(value : BigDecimal, precision : Int32 = DEFAULT_PRECISION) : BigFloat\n # A decimal - `-12.5`, `1e-30`, `6.02214076E23` - rounded to *precision*\n # bits; anything else is refused.\n def self.new(text : String, precision : Int32 = DEFAULT_PRECISION) : BigFloat\n # As `new`, nil for a string that is no number.\n def self.parse?(text : String, precision : Int32 = DEFAULT_PRECISION) : BigFloat | ::Nil\n # *digits* with its first digit at 10^*point*, as `Float64#to_s` puts\n # a point: positional from 10^-4 to 10^14, an exponent outside.\n protected def self.place(digits : String, point : Int64) : String\n def positive? : Bool\n def precision : Int32\n # Under one half is zero; from there the fraction is at most\n # *precision* bits, compared with one half exactly.\n def round : BigFloat\n # *num*/*den* · 2^*shift* (both non-negative, *den* not zero), rounded to\n # *precision* bits, ties to even: every value here is made by this, from\n # an exact one.\n protected def self.rounded(negative : Bool, num : BigInt, den : BigInt, shift : Int64, precision : Int32) : BigFloat\n # The square root, rounded once. The mantissa is widened to at least\n # 2·precision + 4 bits over an even power of two, so the integer root\n # has two bits past the ones kept, and a root that is not exact carries a\n # half below its last bit into the rounding, which no tie can be.\n def sqrt : BigFloat\n # The exact sum, rounded once. An addend more than *precision* + 2 bits\n # below the other cannot move it - it is under a quarter of the larger's\n # last place, even where that place halves below a power of two - and\n # is not shifted out to a size it would only be rounded away from.\n protected def sum(other : BigFloat, precision : Int32) : BigFloat\n # Toward zero, floor, ceiling, and to the nearest integer, ties to even.\n def to_big_i : BigInt\n # The exact value as a fraction.\n def to_big_r : BigRational\n # The double nearest, ties to even; past the largest double, infinite,\n # and below the smallest, zero.\n def to_f64 : Float64\n # The fewest decimal digits that read back as this value at its\n # precision, the nearest such when there are two; written as\n # `Float64#to_s` writes a double.\n def to_s : String\n # The place above the leading bit: 2^(top - 1) <= |self| < 2^top.\n protected def top : Int64\n def trunc : BigFloat\n protected def trunc_whole : BigInt\n # This value at another precision, rounded if it is fewer bits.\n def with_precision(bits : Int32) : BigFloat\n def zero? : Bool\nend\n\npub struct BigInt\n # Three-way comparison is `<=>`, from `impl Comparable` below.\n def !=(other : BigInt) : Bool\n def !=(other : Int64) : Bool\n def !=(other : Int32) : Bool\n def %(other : BigInt) : BigInt\n def %(other : Int64) : BigInt\n def %(other : Int32) : BigInt\n # Bitwise AND (&) with two's complement semantics\n def &(other : BigInt) : BigInt\n # Multiplication\n def *(other : BigInt) : BigInt\n def *(other : Int64) : BigInt\n def *(other : Int32) : BigInt\n # Exponentiation by squaring: a ** exp\n def **(exp : Int32) : BigInt\n def **(exp : Int64) : BigInt\n def **(exp : BigInt) : BigInt\n # Addition\n def +(other : BigInt) : BigInt\n def +(other : Int64) : BigInt\n def +(other : Int32) : BigInt\n def + : BigInt\n # Subtraction: the sum with the other's sign turned, without copying it.\n def -(other : BigInt) : BigInt\n def -(other : Int64) : BigInt\n def -(other : Int32) : BigInt\n def - : BigInt\n def //(other : BigInt) : BigInt\n def //(other : Int64) : BigInt\n def //(other : Int32) : BigInt\n def <(other : Int64) : Bool\n def <(other : Int32) : Bool\n # Bitwise Left Shift: a << count\n def <<(count : Int32) : BigInt\n def <=(other : Int64) : Bool\n def <=(other : Int32) : Bool\n # Comparison overloads for Int64 and Int32\n def <=>(other : Int64) : Int32\n def <=>(other : Int32) : Int32\n def ==(other : Int64) : Bool\n def ==(other : Int32) : Bool\n def >(other : Int64) : Bool\n def >(other : Int32) : Bool\n def >=(other : Int64) : Bool\n def >=(other : Int32) : Bool\n # Bitwise Right Shift (arithmetic): a >> count\n def >>(count : Int32) : BigInt\n # Bitwise XOR (^) with two's complement semantics\n def ^(other : BigInt) : BigInt\n # Returns the absolute value of self.\n def abs : BigInt\n def abs2 : BigInt\n # The digits of this value's magnitude, least significant first, onto\n # `sink`: exactly `width` of them when `width` is positive, zeros above.\n #\n # A long value is split by `powers[level]`, a power of the chunk about\n # half its size, and each half is written by the level below - the low\n # half to exactly the digits that power stands for, so its leading zeros\n # are kept. Dividing by one chunk at a time is a hardware division per\n # limb per nine digits, n^2 / 9 of them; the split does that only for the\n # short pieces at the bottom and multiplies its way through the rest,\n # dividing by `divmod_recursive`.\n protected def append_digits(radix : UInt64, chunk : UInt64, per : Int32, powers : Array(BigInt), level : Int32, width : Int32, sink : Array(UInt8)) : Nil\n # The bits |value| takes to write.\n protected def self.bit_length(value : BigInt) : Int32\n # `count` bits of this value, not negative, from bit `from` up, in one\n # copy.\n protected def bits(from : Int32, count : Int32) : BigInt\n # The bits one digit of a power-of-two base takes; for any other base,\n # the fewest bits a digit can carry, so that a limb's worth of bits\n # bounds how many digits it makes.\n protected def self.bits_per_digit(base : Int32) : Int32\n # Magnitude comparison: compares |self| and |other|.\n # Returns -1 if |self| < |other|, 0 if |self| == |other|, 1 if |self| > |other|.\n def cmp_abs(other : BigInt) : Int32\n protected def self.digit_byte(value : UInt64) : UInt8\n # A digit byte's value in any base up to 36, or 36 for a byte that is a\n # digit in none.\n protected def self.digit_value(byte : UInt8) : Int32\n # This value's `2n` bits and `low`'s `n` by `b`, `top` and `bottom` its\n # halves of `n` bits each.\n protected def div_three_by_two(low : BigInt, b : BigInt, top : BigInt, bottom : BigInt, n : Int32) : Tuple(BigInt, BigInt)\n # This value, under `divisor * 2^n`, by `divisor`, exactly `n` bits long\n # and `n` even until it is short enough for long division: the top\n # `n + n/2` bits by the divisor, then the remainder and the next `n/2`.\n # Each is a division by the divisor's top half, a product by its bottom\n # half, and at most two corrections, the divisor's top bit being set.\n protected def div_two_by_one(divisor : BigInt, n : Int32) : Tuple(BigInt, BigInt)\n # Division and Modulo. Returns {quotient, remainder}.\n # Division truncates towards zero; remainder follows the sign of the dividend (self).\n #\n # A long divisor and a long quotient go to `divmod_recursive`, the\n # recursive division `to_s` splits its digits with, on the magnitudes,\n # and take their signs after. Long division costs the product of the\n # quotient's length and the divisor's, and every division went to it: a\n # value twice a divisor of 524,288 bits took 282 ms in a release build\n # and one of 2,097,152 bits 4,929 ms, four times over per doubling,\n # where these take 179 and 1,964.\n def divmod(other : BigInt) : Tuple(BigInt, BigInt)\n # Knuth's Algorithm D, with the signs `divmod` gives.\n protected def divmod_long(other : BigInt) : Tuple(BigInt, BigInt)\n # |self| divided by |other|, two limbs or more, for a quotient under\n # 2^32: *shift* is the divisor's bit length less 32, and |self| over\n # 2^shift, A, fits 63 bits. With B the divisor's top 32 bits, the\n # quotient is estimated as A / (B + 1), which is never more than the\n # quotient and short of it by less than A / B^2 + 1, at most three; a - q\n # b is taken in one pass and the divisor taken off what is left while it\n # is not below it.\n protected def divmod_one_limb(other : BigInt, shift : Int32, q_sign : Int32, r_sign : Int32) : Tuple(BigInt, BigInt)\n # The quotient and remainder of this value, not negative, by `divisor`,\n # positive, for the time a few products of half the length take: long\n # division costs the product of the two lengths, and the split print\n # divides by a power half as long as the value, so `to_s` was quadratic -\n # 787 ms for 381,698 digits and 3,107 ms for twice as many. Burnikel and\n # Ziegler's recursive division, in the form Python's `_pylong` writes it,\n # by bits. A value past twice the divisor's length has its top divided\n # first, as long division takes a digit at a time; the rest is shifted so\n # that the divisor's length halves evenly down to where long division is\n # the faster, and the remainder shifted back.\n protected def divmod_recursive(divisor : BigInt) : Tuple(BigInt, BigInt)\n # Returns true if this number is even.\n def even? : Bool\n # The big-endian *bytes* as a non-negative BigInt: a key, a signature, a\n # coordinate as cryptography writes them. Four bytes a limb, the low\n # limb from the last four.\n def self.from_bytes(bytes : Array(UInt8)) : BigInt\n # The value of `digits`, most significant first, in `base`: the inverse\n # of `to_s(base)`, and built the same way. A power-of-two base packs the\n # digits' bits into limbs directly. Any other splits the digits at a\n # power of the chunk (`append_digits`), so that the halves meet in one\n # Karatsuba product each, and runs the short pieces at the bottom through\n # one multiply-add per chunk in place. This had shifted or multiplied a\n # whole new BigInt per digit - per nine digits in decimal - and 80,000\n # hex digits took more than a second.\n protected def self.from_digits(digits : Array(UInt8), base : Int32) : BigInt\n # Parses a hexadecimal string (with or without '0x' prefix).\n def self.from_hex(str : String) : BigInt\n # Greatest Common Divisor (Euclidean algorithm)\n def gcd(other : BigInt) : BigInt\n def gcd(other : Int64) : BigInt\n def gcd(other : Int32) : BigInt\n # FNV-1a over the sign and every limb, folded to 31 bits. Wrapping\n # multiplication (`&*`) is the point: a checked product would overflow on\n # the second limb, and a hash has to answer for any size.\n def hash : Int32\n # Raw constructor from sign and limbs. Trims leading zero limbs to enforce\n # the canonical representation invariant: zero has empty limbs and sign 0.\n def initialize(sign : Int32, limbs : Array(UInt64))\n # The inverse of self modulo an odd *mod*, in 0...mod, or nil when the\n # two share a factor (Python's `pow(self, -1, mod)`, which raises\n # there): for a value that is a secret, such as RSA's blinding factor.\n # The steps taken, their branches and the words they read depend on the\n # modulus' length alone (`Montgomery#inverse`); an even modulus is a\n # misuse, refused. As with `pow_mod_secret`, self is reduced by `%`\n # first, whose time depends on it: a caller hands in a value below the\n # modulus.\n def inverse_mod_secret(mod : BigInt) : BigInt | ::Nil\n # Least Common Multiple\n def lcm(other : BigInt) : BigInt\n def lcm(other : Int64) : BigInt\n def lcm(other : Int32) : BigInt\n def limbs : Array(UInt64)\n # Whether the *n* limbs at *r* are at least the *m* at *v*.\n protected def self.limbs_at_least(r : Pointer(UInt64), n : Int32, v : Pointer(UInt64), m : Int32) : Bool\n # Returns the negated value of self (-self).\n def negate : BigInt\n # Returns true if this number is strictly negative (< 0).\n def negative? : Bool\n # Constructs a BigInt from an Int64.\n def self.new(val : Int64) : BigInt\n # Constructs a BigInt from an Int32.\n def self.new(val : Int32) : BigInt\n # Parses a BigInt from a string in the given base (2..36, default 10).\n # Supports leading whitespace, optional sign ('+' or '-'), and base prefixes\n # (0x/0X for hex, 0b/0B for binary, 0o/0O for octal).\n def self.new(str : String, base : Int32 = 10) : BigInt\n # Returns true if this number is odd.\n def odd? : Bool\n # Parses a string with full error checking.\n def self.parse(str : String, base : Int32 = 10) : BigInt\n # Returns true if this number is strictly positive (> 0).\n def positive? : Bool\n # Modular exponentiation: (self ** exp) % mod, in 0...mod whatever the\n # base's sign. An odd modulus, which is every modulus RSA, Diffie-Hellman\n # and DSA work in, goes to `Montgomery` with a sliding window; an even one\n # keeps square-and-multiply with a division per step.\n #\n # Each step here was a product and a long division of twice the\n # modulus' length, and a 2048-bit modulus with a 2048-bit exponent took\n # 19.0 ms in a --release build where Python 3.14's `pow` took 13.3 (3072\n # bits: 63.2 and 42.3, 4096: 168.7 and 100.3). Montgomery's takes 2.5 ms,\n # 8.5 and 20.6 in the run of bench/std_big_exercise.sh that measured\n # Python at 13.7, 45.4 and 102.1, which prints these each run.\n def pow_mod(exp : BigInt, mod : BigInt) : BigInt\n def pow_mod(exp : Int64, mod : Int64) : BigInt\n def pow_mod(exp : Int32, mod : Int32) : BigInt\n # `pow_mod` for an exponent that is a secret, a private key's: a fixed\n # window, every entry of its table read for each window and the one\n # wanted kept by a mask, so neither a branch nor a memory address depends\n # on the exponent's bits, and as many windows as the longer of the\n # exponent and the modulus takes, so the exponent's length does not show\n # either. The modulus has to be odd (a Montgomery modulus): an even one\n # is a misuse, refused.\n #\n # What it does not hide: the base is reduced by `%`, whose time depends\n # on the base and the modulus, so a caller with a secret base (RSA's\n # CRT halves of a message) blinds it first, as std/rsa's signing does.\n def pow_mod_secret(exp : BigInt, mod : BigInt) : BigInt\n def sign : Int32\n # Number of limbs currently allocated.\n def size : Int32\n def to_big : BigInt\n def to_big_d : BigDecimal\n def to_big_i : BigInt\n def to_big_r : BigRational\n # The value big-endian in exactly *size* bytes, zeros in front: the\n # inverse of `from_bytes` at a fixed width, which is how a signature or a\n # coordinate is written. Nil for a negative value or one that does not\n # fit, never a value cut short.\n def to_bytes(size : Int32) : Array(UInt8) | ::Nil\n def to_i : Int32\n # Converts to Int32, raising an overflow error if the value exceeds Int32 range.\n def to_i32 : Int32\n # Converts to Int32 if the value fits, or nil if it overflows.\n def to_i32? : Int32 | ::Nil\n # Converts to Int64, raising an overflow error if the value exceeds Int64 range.\n def to_i64 : Int64\n # Converts to Int64 if the value fits, or nil if it overflows.\n def to_i64? : Int64 | ::Nil\n # Converts this BigInt to a string in the given base (default 10).\n # Bases 2..36 supported. Digits above 9 are lowercase 'a'..'z'.\n #\n # The digits are gathered least significant first and written into the\n # string once. A base that is a power of two reads them straight off the\n # limbs' bits; any other divides a copy of the limbs in place by the\n # largest power of the base a limb holds - 10^9 for decimal - and takes\n # that many digits from each remainder. This had built the text with\n # `res = res + s`, a copy of everything so far per chunk, and divided by\n # a fresh one-limb BigInt per chunk, or per digit outside bases 2, 10\n # and 16: 3 ** 400000 took a second in decimal and in binary, and nine\n # and a half in base 7.\n def to_s(base : Int32) : String\n def to_s : String\n # Helper: bitwise magnitude operation with sign inversion\n protected def twos_mag : BigInt\n # The value of `count` digits from `from`: the high part times the power\n # of the chunk that the low part's digits stand for, plus the low part.\n protected def self.value_of_digits(digits : Array(UInt8), from : Int32, count : Int32, base : UInt64, per : Int32, powers : Array(BigInt)) : BigInt\n # |value| over 2^shift, for one under 2^64: the limbs from bit *shift*.\n protected def self.window(limbs : Array(UInt64), shift : Int32) : UInt64\n # Returns true if this number is zero.\n def zero? : Bool\n # Bitwise OR (|) with two's complement semantics\n def |(other : BigInt) : BigInt\n # Bitwise NOT (~a = -a - 1 in two's complement)\n def ~ : BigInt\nend\n\npub struct BigRational\n def !=(other : BigRational) : Bool\n def *(other : BigRational) : BigRational\n def *(other : Int32 | Int64 | BigInt) : BigRational\n def **(exp : Int32) : BigRational\n def +(other : BigRational) : BigRational\n def +(other : Int32 | Int64 | BigInt) : BigRational\n def + : BigRational\n def -(other : BigRational) : BigRational\n def -(other : Int32 | Int64 | BigInt) : BigRational\n def - : BigRational\n def /(other : BigRational) : BigRational\n def /(other : Int32 | Int64 | BigInt) : BigRational\n def abs : BigRational\n def denominator : BigInt\n # A rational is stored reduced, so equal values have equal parts.\n def hash : Int32\n def initialize(numerator : BigInt, denominator : BigInt)\n def initialize(num : Int64 = 0_i64, den : Int64 = 1_i64)\n def initialize(num : Int32, den : Int32 = 1)\n def initialize(str : String)\n def inspect : String\n def inv : BigRational\n def negate : BigRational\n def negative? : Bool\n def numerator : BigInt\n def positive? : Bool\n def to_big_d : BigDecimal\n def to_big_i : BigInt\n def to_big_r : BigRational\n # The Float64 nearest this value, ties to even, as python's\n # `float(Fraction)` answers. This had gone through `to_big_d`, twenty\n # fractional digits: every value under 5e-21 was 0.0 and every one under\n # 1e-3 lost significant digits. The quotient is taken to 55 or 56 bits -\n # 55 at the smallest exponent, where the subnormals start - with a sticky\n # low bit for a nonzero remainder, rounded to the bits a Float64 keeps (53,\n # fewer as a subnormal), and scaled by the power of two it was shifted by,\n # which is exact: a value past the largest Float64 is Infinity.\n def to_f64 : Float64\n def to_s : String\n def zero? : Bool\nend\n\nimpl Std::Traits::Comparable for BigInt\n def <=>(other : self) : Int32\nend\n\nimpl Std::Traits::Num for BigInt\n def self.zero : self\n def self.one : self\n def add(other : self) : self\n def mul(other : self) : self\nend\n\nimpl Std::Traits::Hashable for BigInt\n def hash_key : Int32\nend\n\nimpl Std::Traits::Comparable for BigDecimal\n def <=>(other : self) : Int32\nend\n\nimpl Std::Traits::Num for BigDecimal\n def self.zero : self\n def self.one : self\n def add(other : self) : self\n def mul(other : self) : self\nend\n\nimpl Std::Traits::Hashable for BigDecimal\n def hash_key : Int32\nend\n\nimpl Std::Traits::Comparable for BigRational\n def <=>(other : self) : Int32\nend\n\nimpl Std::Traits::Num for BigRational\n def self.zero : self\n def self.one : self\n def add(other : self) : self\n def mul(other : self) : self\nend\n\nimpl Std::Traits::Hashable for BigRational\n def hash_key : Int32\nend\n\nimpl Std::Traits::Comparable for BigFloat\n def <=>(other : self) : Int32\nend\n\nimpl Std::Traits::Hashable for BigFloat\n def hash_key : Int32\nend\n\nstruct ::Int32\n def *(other : Std::Big::BigInt) : Std::Big::BigInt\n def +(other : Std::Big::BigInt) : Std::Big::BigInt\n def -(other : Std::Big::BigInt) : Std::Big::BigInt\n def <=>(other : Std::Big::BigInt) : Int32\n def ==(other : Std::Big::BigInt) : Bool\n def to_big : Std::Big::BigInt\n def to_big_d : Std::Big::BigDecimal\n def to_big_i : Std::Big::BigInt\n def to_big_r : Std::Big::BigRational\nend\n\nstruct ::Int64\n def *(other : Std::Big::BigInt) : Std::Big::BigInt\n def +(other : Std::Big::BigInt) : Std::Big::BigInt\n def -(other : Std::Big::BigInt) : Std::Big::BigInt\n def <=>(other : Std::Big::BigInt) : Int32\n def ==(other : Std::Big::BigInt) : Bool\n def to_big : Std::Big::BigInt\n def to_big_d : Std::Big::BigDecimal\n def to_big_i : Std::Big::BigInt\n def to_big_r : Std::Big::BigRational\nend\n\nclass ::String\n def to_big_d : Std::Big::BigDecimal\n def to_big_i : Std::Big::BigInt\n def to_big_r : Std::Big::BigRational\nend\n" }, { "name": "std/bit_array", "path": "src/std/bit_array.iyi", - "sourceSha256": "8010f7fd4ea052dda095999ec86125161f4755c63056f3940adf0303cf6041cc", + "sourceSha256": "486ae94e306d0dd415163a66f4d9e063beaee36aaffc2533ddacef1f807a676e", "surface": "module std/bit_array\n\npub alias BitArray = ::BitArray\n\nstruct ::BitArray\n def ==(other : BitArray) : Bool\n def ==(other : Object) : Bool\n def [](index : Int) : Bool\n def []=(index : Int, value : Bool) : Bool\n def []?(index : Int) : Bool | ::Nil\n def all? : Bool\n def any? : Bool\n def clone : self\n def count(item : Bool) : Int32\n def count : Int32\n def dup : self\n def each(& : (Bool -> Nil)) : Nil\n def each_with_index(offset : Int = 0, & : (Bool, Int32 -> Nil)) : Nil\n def empty? : Bool\n def fill(value : Bool, start : Int, count : Int) : self\n def fill(value : Bool) : self\n def first : Bool\n def first? : Bool | ::Nil\n def hash : Int32\n def includes?(obj : Bool) : Bool\n def index(obj : Bool, offset : Int = 0) : Int32 | ::Nil\n def initialize(size : Int, initial : Bool = false)\n def inspect(io : IyiIO) : Nil\n def inspect : String\n def invert : Nil\n def last : Bool\n def last? : Bool | ::Nil\n def self.new(size : Int, & : (Int32 -> _)) : self\n def none? : Bool\n def one? : Bool\n def reverse_in_place : self\n def rindex(obj : Bool, offset : Int = @size - 1) : Int32 | ::Nil\n def rotate_in_place(n : Int = 1) : self\n def size : Int32\n def to_s(io : IyiIO) : Nil\n # Into one builder: a string grown by a character per bit copied it per\n # bit, and 200,000 bits took 46 s to print.\n def to_s : String\n def to_slice : Std::Slice::Bytes\n def toggle(index : Int) : Nil\n def unsafe_fetch(index : Int) : Bool\n def unsafe_put(index : Int, value : Bool) : Bool\nend\n" }, { @@ -82,19 +82,19 @@ { "name": "std/box", "path": "src/std/box.iyi", - "sourceSha256": "f34ecb7faa9c79a4035274e255ae6ce0231a97a27be6f2954acb1ab23e47c9a8", + "sourceSha256": "01edf14c2f152a14a83181424c041788c314b50b117392856f849e6e9d4b950e", "surface": "module std/box\n\npub class Box(T)\n # Turns object into a Void*.\n #\n # Copies object to the heap inside a Box container if needed.\n def self.box(object : T) : ::Pointer(Void)\n def initialize(object : T)\n def object : T\n # Unboxes a Void* into an object of type T.\n #\n # Specifying T is required: `Box(T).unbox(data)`. A null pointer is nil\n # when T admits nil, as the other library answers it for `String?` and\n # every other union of references and nil, and is refused otherwise. It\n # was refused for every T, so `Box(String?).unbox` of the null a C\n # callback is handed when there is no data panicked \"Unboxing null\n # pointer\" where nil is the answer the type has room for.\n def self.unbox(pointer : ::Pointer(Void)) : T\nend\n" }, { "name": "std/bzip2", "path": "src/std/bzip2.iyi", - "sourceSha256": "e6ddde4436c552246e884befc9e59a8614c3c60ba2878550af35f2d6a53baa97", + "sourceSha256": "d1b80e3d12da6c0581ea495159c8b422a6dab2c5d2c61115f293412599e84a18", "surface": "module std/bzip2\n\npub struct Bzip2\n # *data* as one bzip2 stream with blocks of *level* * 100,000 bytes,\n # 1 to 9 (bzip2's -1 to -9); any other level is a panic.\n def self.compress(data : String, level : Int32 = 9) : String\n # Every byte *data*'s streams hold, or the error the first wrong thing in\n # them is. Bytes after the last stream that do not start another are\n # ignored, as bzip2(1) ignores them.\n def self.decompress(data : String) : String | Bzip2Error\n def initialize\nend\n\n# What `Bzip2Reader#read` and `Bzip2.decompress` answer for a stream they\n# cannot read: one that is corrupt, whose CRC does not match, or that ends\n# early.\npub struct Bzip2Error\n def initialize(message : String)\n def to_s : String\nend\n\n# A bzip2 stream read a piece at a time: the compressed bytes come from\n# the block, the decompressed ones go out through `read`, and memory\n# stays at one block's links and a 64 KiB buffer.\n#\n# ```\n# body = Bzip2Reader.new { file.read_bytes(65536) }\n# while (piece = body.read(65536)!) != \"\"\n# ...\n# end\n# ```\npub class Bzip2Reader\n # Whether every stream has ended, its CRCs checked, and every byte been\n # read: the next `read` answers \"\".\n def finished? : Bool\n # *source* answers the next bytes of the compressed stream, nil (or \"\")\n # when there are no more. It is called only when the decoder has no\n # bytes in hand for what it must read next, so it is never asked for\n # anything past a stream's end - except that the input ends only where\n # no stream follows, which takes a look at the next four bytes.\n def initialize(&source : (-> String | ::Nil))\n # Bytes the source gave beyond the last stream, for a caller that frames\n # other data after it; \"\" before the input has ended.\n def leftover : String\n # Up to *max* decompressed bytes, 64 KiB at most; \"\" once every stream\n # has ended and its CRCs been checked. A read that has bytes when a\n # block ends answers them rather than reading the next block, so it can\n # answer fewer than *max* before the end.\n #\n # A corrupt stream, a CRC that does not match, or input that ends early\n # is a `Bzip2Error`, after which every read answers the same error. A\n # block's bytes are given out before its CRC is known, as the CRC is\n # over them; the read that gives its last byte checks it, and answers\n # the error instead of those bytes. A *max* below 1 is a panic.\n def read(max : Int32 = 65536) : String | Bzip2Error\nend\n\nimpl Error for Bzip2Error\n def message : String\nend\n" }, { "name": "std/capsule", "path": "src/std/capsule.iyi", - "sourceSha256": "58b69bec13b3e4c432f8bcb087b7b304614bab4ee0e7c6eb64663174e1077330", + "sourceSha256": "10b7d3dbc95376b49ec94e091b12c0775a83a7057acbe4f4f9d7692bbf9bd76c", "surface": "module std/capsule\n\npub struct Capsule\n def capsule_type : UInt64\n def close_webtransport_session? : Bool\n def datagram? : Bool\n # Decodes a single capsule from bytes starting at offset, raising on error.\n def self.decode(bytes : Bytes, offset : Int32 = 0, strict : Bool = false) : ::Tuple(Capsule, Int32)\n # Decodes a single capsule from bytes starting at offset.\n # Returns {Capsule, total_bytes_consumed}.\n # Refuses truncated capsules or lengths that overrun the buffer.\n # Decodes a single capsule, returning nil if truncated or length overruns buffer.\n def self.decode?(bytes : Bytes, offset : Int32 = 0, strict : Bool = false) : ::Tuple(Capsule, Int32) | ::Nil\n def drain_webtransport_session? : Bool\n # Encodes the capsule to stream wire format:\n # Capsule Type (i)\n # Capsule Length (i)\n # Capsule Value (..)\n def encode : Bytes\n def initialize(capsule_type : UInt64, value : Bytes)\n # Returns true if this capsule type is unrecognized by base specifications.\n def unknown? : Bool\n def value : Bytes\nend\n\npub struct CapsuleProtocol\n HEADER_NAME = \"Capsule-Protocol\"\n HEADER_VALUE = \"?1\"\n def self.header_name : String\n def self.header_value : String\n def initialize\n # True when the value, parsed as an Item Structured Field (RFC 8941\n # Section 4.2), is the Boolean true. Its parameters are parsed and then\n # ignored, as RFC 9297 Section 3.4 requires of unknown ones; a value that\n # does not parse as an Item is as if the field were absent.\n def self.is_capsule_protocol_header?(value : String) : Bool\n # Checks if a header key-value pair enables the Capsule Protocol.\n def self.valid_header?(name : String, value : String) : Bool\nend\n\n# Capsule stream processing enforcing RFC 9297 Section 3.2 rules:\n# - Unknown capsule types are skipped rather than erroring (extensibility).\n# - Truncated capsules and length overruns are strictly refused.\npub struct CapsuleReader\n def initialize\n # Decodes all capsules in buffer into an array.\n # Preserves unknown capsules in the list for inspection.\n def self.read_all(bytes : Bytes, strict : Bool = false) : Array(Capsule)\n # Decodes capsules from stream buffer, actively skipping unknown types\n # and returning only recognized capsules, demonstrating RFC 9297 extensibility.\n def self.read_known(bytes : Bytes, strict : Bool = false) : Array(Capsule)\n # Decodes capsules and reports both known capsules and the count of skipped unknown types.\n def self.read_with_skip_count(bytes : Bytes, strict : Bool = false) : ::Tuple(Array(Capsule), Int32)\nend\n\n# Standard and extended capsule types.\npub struct CapsuleType\n DATAGRAM = 0_u64\n CLOSE_WEBTRANSPORT_SESSION = 10307_u64\n DRAIN_WEBTRANSPORT_SESSION = 30894_u64\n def initialize\nend\n\npub struct ExtendedConnect\n SETTINGS_ENABLE_CONNECT_PROTOCOL = 8_u64\n HEADER_METHOD = \":method\"\n HEADER_PROTOCOL = \":protocol\"\n HEADER_SCHEME = \":scheme\"\n HEADER_AUTHORITY = \":authority\"\n HEADER_PATH = \":path\"\n HEADER_STATUS = \":status\"\n METHOD_CONNECT = \"CONNECT\"\n PROTOCOL_WEBTRANSPORT = \"webtransport\"\n PROTOCOL_WEBSOCKET = \"websocket\"\n def initialize\n def self.settings_id : UInt64\n # Validates whether the given parameters form a valid Extended CONNECT request.\n def self.valid_request?(method : String, protocol : String | ::Nil, scheme : String | ::Nil, authority : String | ::Nil, path : String | ::Nil) : Bool\n # Validates whether a response status code establishes the Extended CONNECT tunnel (2xx).\n def self.valid_response?(status : Int32) : Bool\nend\n\npub struct HttpDatagram\n MAX_QUARTER_STREAM_ID = 1152921504606846975_u64\n # Decodes an HTTP Datagram from a byte slice, raising on truncation or on\n # a Quarter Stream ID past 2^60 - 1.\n # Overlong quarter-stream IDs in strict mode raise the varint overlong\n # sentence rather than pretending the buffer was truncated.\n def self.decode(bytes : Bytes, offset : Int32 = 0, strict : Bool = false) : ::Tuple(HttpDatagram, Int32)\n # Decodes an HTTP Datagram from a byte slice.\n # Decodes an HTTP Datagram, returning nil if truncated or if the Quarter\n # Stream ID is past 2^60 - 1, which RFC 9297 Section 2.1 makes an error.\n def self.decode?(bytes : Bytes, offset : Int32 = 0, strict : Bool = false) : ::Tuple(HttpDatagram, Int32) | ::Nil\n # Encodes this datagram into the wire format:\n # Quarter Stream ID (i)\n # HTTP Datagram Payload (..)\n def encode : Bytes\n # Creates an HTTP Datagram associated with the given HTTP/3 stream ID,\n # which is a client-initiated bidirectional stream: RFC 9297 Section 2.1\n # associates a datagram with no other kind, and that is why the division\n # by four always comes out even. Any other stream ID is refused. It was\n # divided down instead, so `from_stream_id(19_u64, payload)` was a\n # datagram for stream 16 - another request's - and `stream_id` answered\n # 16. A stream ID past 2^62 - 1 is left to `new`, whose sentence names\n # the quarter it would be.\n def self.from_stream_id(stream_id : UInt64, payload : Bytes) : self\n def initialize(quarter_stream_id : UInt64, payload : Bytes)\n def payload : Bytes\n def quarter_stream_id : UInt64\n # Maps the quarter stream ID back to the associated HTTP/3 stream ID.\n # Stream ID = Quarter Stream ID * 4.\n def stream_id : UInt64\nend\n\npub struct VarInt\n MAX = 4611686018427387903_u64\n MAX_1BYTE = 63_u64\n MAX_2BYTE = 16383_u64\n MAX_4BYTE = 1073741823_u64\n MAX_8BYTE = 4611686018427387903_u64\n # Decodes a QUIC variable-length integer from *bytes* starting at *offset*.\n # Raises on truncated buffers, reserved values, or overlong encodings (if strict).\n def self.decode(bytes : Bytes, offset : Int32 = 0, strict : Bool = false) : ::Tuple(UInt64, Int32)\n # Decodes a QUIC variable-length integer, returning nil if truncated, overlong, or reserved.\n def self.decode?(bytes : Bytes, offset : Int32 = 0, strict : Bool = false) : ::Tuple(UInt64, Int32) | ::Nil\n # Strict decoding shorthand: refuses overlong and reserved encodings.\n def self.decode_strict(bytes : Bytes, offset : Int32 = 0) : ::Tuple(UInt64, Int32)\n def self.decode_strict?(bytes : Bytes, offset : Int32 = 0) : ::Tuple(UInt64, Int32) | ::Nil\n # Encodes value using an explicit length (1, 2, 4, or 8 bytes).\n # Used to produce canonical encodings or explicit multi-byte encodings as\n # specified in RFC 9000 Appendix A (e.g. 37 encoded in 2, 4, or 8 bytes).\n def self.encode(value : UInt64, length : Int32) : Bytes\n # Encodes value into its canonical (minimum-length) QUIC varint representation.\n def self.encode(value : UInt64) : Bytes\n # Calculates the minimum number of bytes required to canonically encode value.\n def self.encoded_size(value : UInt64) : Int32\n def initialize\n # Checks if value can be represented as a 62-bit QUIC varint.\n def self.valid_value?(value : UInt64) : Bool\nend\n" }, { @@ -112,43 +112,43 @@ { "name": "std/compress", "path": "src/std/compress.iyi", - "sourceSha256": "e0bdcae3d05fb329e3c1561ac6b51291081f287121309e0c313ca2d342fc603b", + "sourceSha256": "5720c6b5cb786da0be2c4c29367d3037d9bc43fc432149cab26e5093bcfc96c0", "surface": "module std/compress\n\n# What `Inflater#read` answers for a stream it cannot read: one that is\n# corrupt, whose checksum or length does not match, or that ends early.\n# `message` is the sentence the whole-string calls panic with.\npub struct CompressError\n def initialize(message : String)\n def to_s : String\nend\n\npub struct Deflate\n # *data* as a DEFLATE stream, at *level*: 1 is fastest, 9 smallest, 6\n # (the default) zlib's own balance, 0 stored blocks only; anything else\n # is a panic. The same level writes what zlib's would size for size,\n # within the margins the exercise records.\n def self.compress(data : String, level : Int32 = 6) : String\n def self.decompress(data : String) : String\n # The bytes, and how many of the stream's bytes they took: an envelope\n # reads its trailer from there.\n #\n # *expected* is how long the caller thinks the result is, so that the\n # result is one allocation rather than a guess grown by doubling; -1,\n # the default, is no idea, and the guess is three times the stream's\n # bytes. Held to what the stream could expand to, so a length that lies\n # is not an allocation it asked for.\n def self.inflate(data : String, start : Int32, expected : Int64 = -1_i64) : ::Tuple(String, Int32)\n def initialize\nend\n\n# A compressed stream written a piece at a time. Each `compress` codes its\n# piece in blocks as `Deflate.compress` does and ends in zlib's sync\n# flush: an empty stored block, so everything written so far ends on a\n# byte boundary and decodes without waiting for more. The window is kept\n# from piece to piece - the next piece's matches reach back into the last\n# 32 KiB of the ones before it, as zlib's do across a sync flush - so a\n# stream written in pieces costs little more than the same bytes written\n# whole. `finish` writes the final block, empty, and the envelope's\n# trailer.\npub class Deflater\n # The compressed bytes for *data*: the envelope's header on first use,\n # then *data* as complete non-final blocks and the sync flush. \"\" for\n # empty data after the first call. After `finish`, a panic.\n def compress(data : String) : String\n # The final block and the envelope's trailer. Once only: a second call\n # is a panic.\n def finish : String\n # *level* is `Deflate.compress`'s: 0 stores, 1 is fastest, 9 smallest,\n # 6 the default. *window_bits* is the base-2 logarithm of how far back a\n # match may reach, 8 to 15: 15 is DEFLATE's whole 32 KiB, and a smaller\n # one is what a decoder that keeps less can read - RFC 7692's\n # `max_window_bits`. Anything else for either is a panic.\n def initialize(envelope : Envelope, level : Int32 = 6, window_bits : Int32 = 15)\nend\n\n# What a DEFLATE stream travels in: nothing (RFC 1951), zlib's two-byte\n# header and Adler-32 (RFC 1950), or gzip's header and CRC-32 and length\n# (RFC 1952).\npub enum Envelope : Int32\n Raw = 0\n Zlib = 1\n Gzip = 2\nend\n\npub struct Gzip\n # The ten-byte header with nothing optional set, an mtime of zero, the\n # level's XFL and an unknown OS; then the CRC-32 and the length modulo\n # 2^32, little-endian. *level* as `Deflate.compress`.\n def self.compress(data : String, level : Int32 = 6) : String\n # Every member of the file, one after another; bytes after the last\n # that do not start another are left as zlib leaves them.\n #\n # The last member's trailer names its length, which for a file of one\n # member is the length of the answer, so that is the size the output\n # starts at; a file of several grows past it by doubling. Every member\n # had been sized on its own, by the last trailer or by three times the\n # bytes after it, so each allocated what the rest of the file could\n # hold, and a hundred two-byte members ahead of one of 64 MB took 2.5 s\n # to read where Python's gzip took 0.15.\n def self.decompress(data : String) : String\n def initialize\nend\n\n# A compressed stream read a piece at a time: the compressed bytes come\n# from the block, the decompressed ones go out through `read`, and memory\n# stays at the 32 KiB window and what is waiting to be read.\n#\n# ```\n# body = Inflater.new(Envelope::Gzip) { socket_read }\n# while (piece = body.read(65536)!) != \"\"\n# ...\n# end\n# ```\n#\n# `Inflater.flushed` is the same decoder for a raw stream that comes as\n# pieces each ending between blocks - zlib's sync flush, what each\n# `Deflater#compress` ends with - and is decoded a piece at a time, the\n# window kept from one to the next: RFC 7692's permessage-deflate, whose\n# messages are such pieces with the flush's last four bytes left off.\npub class Inflater\n # Whether the stream has ended, its trailer checked, and every byte been\n # read: the next `read` answers \"\".\n def finished? : Bool\n # A raw stream decoded by `inflate`, a piece at a time.\n def self.flushed : Inflater\n # The next piece of a `flushed` stream, decoded whole: the blocks it\n # holds, which may refer back to the 32 KiB before it, and may be final\n # (RFC 7692 §7.2.1 lets a final block be followed by more). A piece\n # that does not end between blocks, or is not DEFLATE, is a\n # `CompressError`, and so is every piece after it. More than *limit*\n # bytes out is nil, found as they come - a piece that would decode to\n # gigabytes stops 64 KiB past *limit* - and fails the stream the same\n # way. On another `Inflater`, a panic.\n def inflate(piece : String, limit : Int32 = 2147483647) : String | CompressError | Nil\n # *source* answers the next bytes of the compressed stream, nil (or \"\")\n # when there are no more. It is called only when the decoder has no\n # bytes in hand for what it must read next, so it is never asked for\n # anything past the end of the stream - except that a gzip stream ends\n # only where no member follows, which takes a look at the next two\n # bytes.\n def initialize(envelope : Envelope, &source : (-> String | ::Nil))\n def initialize(core : Inflate)\n # Bytes the source gave beyond the end of the stream (gzip: after the\n # last member), for a caller that frames other data after it; \"\" before\n # the stream has ended.\n def leftover : String\n # Up to *max* decompressed bytes; \"\" once the stream and its trailer\n # (CRC-32 and length, or Adler-32) have ended and been checked. A read\n # answers as soon as it has bytes and going on would call the source,\n # so it can answer fewer than *max* before the end; and never more than\n # 64 KiB less a match at once, the room ahead of the window.\n #\n # A corrupt stream, a bad checksum, or input that ends early is a\n # `CompressError`, after which every read answers the same error. What\n # the same read decoded before the error is not handed out. A *max*\n # below 1 is a panic.\n def read(max : Int32 = 65536) : String | CompressError\nend\n\npub struct Zlib\n # CMF 0x78 (deflate, a 32 KiB window), FLG with the level's band and the\n # check bits that make the pair a multiple of 31 (no dictionary), then\n # the Adler-32 of the bytes, big-endian. *level* as `Deflate.compress`.\n def self.compress(data : String, level : Int32 = 6) : String\n def self.decompress(data : String) : String\n def self.hex(w : UInt32) : String\n def initialize\nend\n\nimpl Error for CompressError\n def message : String\nend\n" }, { "name": "std/cookie", "path": "src/std/cookie.iyi", - "sourceSha256": "0218a073aba1d8715700b1935bd4dd8fa6c86ce4748c71d0af43c9931ae7043f", + "sourceSha256": "bbcd3942b912a4a0389212bd87f75b15fd9f56f27daaec472a6d63d8e9b4c3eb", "surface": "module std/cookie\n\n# A cookie (RFC 6265): what a `Set-Cookie` line says, and what a jar\n# keeps. `Cookie.parse(line)` reads a `Set-Cookie` value as RFC 6265 §5.2\n# has a user agent read one - a name and value, then attributes in any\n# case, an unknown attribute ignored - and answers nil for a line that\n# has no name-value pair. `to_set_cookie` writes one, refusing a name or\n# value that would break the line. `expires` is the instant it lapses,\n# from `Max-Age` before `Expires` (§5.3, step 3); nil is a session cookie.\npub class Cookie\n def domain : String | ::Nil\n # Whether the cookie has lapsed at *now*.\n def expired?(now : Time) : Bool\n def expires : Time | ::Nil\n # The cookies an answer's `Set-Cookie` lines set, a line each.\n def self.from_response(response : Response) : Array(Cookie)\n def http_only : Bool\n def initialize(name : String, value : String, path : String | ::Nil = nil, domain : String | ::Nil = nil, expires : Time | ::Nil = nil, max_age : Int64 | ::Nil = nil, secure : Bool = false, http_only : Bool = false, same_site : String | ::Nil = nil)\n def max_age : Int64 | ::Nil\n def name : String\n def self.parse(line : String) : Cookie | ::Nil\n # The pairs of a request's `Cookie` header: `a=1; b=2`.\n def self.parse_header(value : String) : Hash(String, String)\n def path : String | ::Nil\n def same_site : String | ::Nil\n # `Max-Age`'s digits, with a sign (§5.2.2); nil for anything else.\n protected def self.seconds(text : String) : Int64 | ::Nil\n def secure : Bool\n # The `Set-Cookie` value a server writes (§4.1). A name is a token, and a\n # value the cookie-octets: a space, a comma, a semicolon, a backslash or\n # a quote inside one would end it or another field early.\n def to_set_cookie : String\n def value : String\nend\n\n# The cookies a client keeps between requests (RFC 6265 §5.3, §5.4): what\n# each answer's `Set-Cookie` lines set, by domain and path, and what a\n# request to a URL sends back. A cookie without `Domain` goes back to its\n# own host alone; one with a `Domain` the host is not within is refused,\n# and so is a `Domain` of one label, `com` - there is no public-suffix\n# list here, so a cookie for `co.uk` would be taken, which a browser would\n# refuse. A cookie that has lapsed, or is set lapsed, is gone. A `Secure`\n# cookie is taken from an `https://` answer only, and goes back over\n# `https://` only (§5.4 step 1). A jar may be shared by tasks on one\n# thread, not across threads.\npub class CookieJar\n # *cookie*, as set by an answer from *url*: it replaces one of the same\n # name, domain and path, and one set already lapsed removes it.\n def add(url : String, cookie : Cookie) : Nil\n # The cookies a request to *url* carries: domain and path matching,\n # unexpired, `Secure` only over `https://`; longer paths first, then\n # older (§5.4, step 2).\n def cookies_for(url : String) : Array(Cookie)\n # §5.1.4: the request path up to its last `/`, or `/`.\n protected def self.default_path(path : String) : String\n # §5.1.3: the host is the domain, or ends with it after a dot, and is\n # not an IP address.\n protected def self.domain_match?(host : String, domain : String) : Bool\n # The `Cookie` header for a request to *url*, nil when nothing goes.\n def header_for(url : String) : String | ::Nil\n def initialize\n # §5.1.4.\n protected def self.path_match?(request : String, cookie : String) : Bool\n # Whether *uri* is over a secure protocol: `https://` (and `wss://`).\n protected def self.secure?(uri : URI) : Bool\n def size : Int32\n # The `Set-Cookie` lines of *response*, from *url*, taken in.\n def update(url : String, response : Response) : Nil\nend\n\nimpl Std::Http::CookieStore for CookieJar\nend\n" }, { "name": "std/crypto", "path": "src/std/crypto.iyi", - "sourceSha256": "1e1376924f69f5b29c8fbda357872a3bceb3a85e9d0227c950ba6ef699b8473a", + "sourceSha256": "a6c0ecdda675af34c5ad2f32ca2b5f836d50aab1c050ccf7fc19f34e8f8602e7", "surface": "module std/crypto\n\n# HKDF, RFC 5869: `extract` concentrates input keying material into a\n# pseudorandom key, `expand` stretches that key into as many bytes as are\n# asked for, bound to an `info` that names their use; `derive` is both.\n# An empty salt is the RFC's default, a hash's length of zeros, which is\n# the same key to HMAC.\npub struct HKDF\n def self.derive(algorithm : H.class, ikm : String | Array(UInt8), salt : String | Array(UInt8), info : String | Array(UInt8), length : Int32) : Array(UInt8) forall H\n # At most 255 hashes' worth of bytes, which is what a one-byte block\n # counter can number.\n def self.expand(algorithm : H.class, prk : String | Array(UInt8), info : String | Array(UInt8), length : Int32) : Array(UInt8) forall H\n def self.extract(algorithm : H.class, salt : String | Array(UInt8), ikm : String | Array(UInt8)) : Array(UInt8) forall H\n def initialize\nend\n\npub class HMAC\n def self.digest(algorithm : H.class, key : String | Array(UInt8), data : String | Array(UInt8)) : Array(UInt8) forall H\n # Bytes in a MAC: the hash's digest size.\n def digest_size : Int32\n # The MAC, into the first `digest_size` bytes of *dst*, with nothing\n # allocated.\n def final(dst : Array(UInt8)) : Nil\n def final : Array(UInt8)\n def self.hexdigest(algorithm : H.class, key : String | Array(UInt8), data : String | Array(UInt8)) : String forall H\n def hexfinal : String\n def initialize(algorithm : H.class, key : String | Array(UInt8)) forall H\n # Ready for the next message under the same key.\n def reset : Nil\n def update(data : Pointer(UInt8), count : Int32) : self\n def update(data : String | Array(UInt8)) : self\nend\n\n# PBKDF2, RFC 8018 §5.2, with HMAC as its pseudorandom function: a key\n# from a password, made deliberately slow by *iterations*. OWASP's figure\n# for HMAC-SHA256 is 600,000.\npub struct PBKDF2\n def self.derive(algorithm : H.class, password : String | Array(UInt8), salt : String | Array(UInt8), iterations : Int32, length : Int32) : Array(UInt8) forall H\n def initialize\nend\n\npub struct Subtle\n # Whether *a* and *b* hold the same bytes, in a time that depends on\n # their sizes and not on their contents: every byte is read, and the\n # differences are gathered with `|` rather than tested one at a time.\n # Byte strings of different sizes answer false at once, so the size is\n # not a secret this keeps.\n def self.constant_time_compare(a : String | Array(UInt8), b : String | Array(UInt8)) : Bool\n def initialize\nend\n" }, { "name": "std/csv", "path": "src/std/csv.iyi", - "sourceSha256": "25190d666cdcf9fbb325221a59be13fff7a6da56a199fb44916523e58719bee6", + "sourceSha256": "60418210c97b24d0ecfc98edf6ed84280d3a10f034aed964f0d145e83c95cca8", "surface": "module std/csv\n\npub struct CSV\n # Into one builder: adding each field to the text so far copied that\n # text once per field, and 20,000 rows of five took 12.8 seconds.\n def self.build(rows : Array(Array(String))) : String\n def initialize\n def self.parse(text : String) : Array(Array(String))\nend\n\n# What is wrong with a document, and where: *line* and *column* count from\n# 1, the column in characters.\npub struct CSVError\n def column : Int32\n def initialize(message : String, line : Int32, column : Int32)\n def line : Int32\n def to_s : String\nend\n\n# Rows read one at a time from a `String` or an `IyiIO`.\n#\n# ```\n# reader = CSVReader.new(File.open(\"people.csv\"), headers: true)\n# while row = reader.next.or_panic\n# puts row[\"name\"]\n# end\n# ```\npub class CSVReader\n # Each row left, in order; the error that stopped them, if one did.\n def each(& : (CSVRow -> Nil)) : Nil | CSVError\n # The header row, read now if no row has been. Only for a reader made\n # with `headers: true`: on any other, the first row is a row.\n def headers : Array(String) | CSVError\n def initialize(text : String, separator : Char = ',', quote : Char = '\"', headers : Bool = false, strip : Bool = false, same_size : Bool = false)\n # Reads *io* as far as each row needs, CHUNK bytes at a time; it is not\n # closed.\n def initialize(io : IyiIO, separator : Char = ',', quote : Char = '\"', headers : Bool = false, strip : Bool = false, same_size : Bool = false)\n # The next row with its header's names, nil past the last.\n def next : CSVRow | CSVError | Nil\n # The next row's fields, nil past the last, or what is wrong with the\n # document there. A blank line is a row of no fields, except under a\n # header, where it is passed over.\n def next_row : Array(String) | CSVError | Nil\nend\n\n# One row as `CSVReader#next` gives it: its fields, by position or by the\n# header's names.\npub class CSVRow\n def [](at : Int32) : String\n # The field under the header *name*: \"\" when this row is too short to\n # have one, which is the document's doing. A name the header does not\n # have is the program's, and panics.\n def [](name : String) : String\n def []?(at : Int32) : String | ::Nil\n # The field under the header *name*, or nil when the header has no such\n # name or this row is too short to reach it.\n def []?(name : String) : String | ::Nil\n def fields : Array(String)\n # The header row, or none when the reader was made without one.\n def headers : Array(String)\n def initialize(fields : Array(String), headers : Array(String), index : Hash(String, Int32), line : Int32)\n # The line the row starts on.\n def line : Int32\n def size : Int32\n # The header's names to this row's fields, as far as both go.\n def to_h : Hash(String, String)\nend\n\n# Rows written to an `IyiIO`, quoted where a reader needs them to be.\n#\n# ```\n# out = CSVWriter.new(STDOUT, line_end: \"\\r\\n\")\n# out.row([\"name\", \"says\"])\n# out.row([\"Ada\", \"\\\"hello\\\", she said\"])\n# ```\npub class CSVWriter\n def flush : Nil\n def initialize(io : IyiIO, separator : Char = ',', quote : Char = '\"', quote_all : Bool = false, line_end : String = \"\\n\")\n # One row, and its line end.\n def row(fields : Array(String)) : Nil\n # The rows written so far.\n def rows : Int32\nend\n\nimpl Error for CSVError\n def message : String\nend\n" }, { "name": "std/curve25519", "path": "src/std/curve25519.iyi", - "sourceSha256": "b1b7fdcd424af5a7d8484a2b984f886c45231a74f396566691a5976113c67132", + "sourceSha256": "1519c4e25ac7019bbe7888e727db316b884046ecfb81e17417108a00f1374414", "surface": "module std/curve25519\n\n# What is wrong with a peer's key: `message` is the sentence.\npub struct CurveError\n def initialize(message : String)\n def to_s : String\nend\n\n# Ed25519, RFC 8032 §5.1: the seed is the 32-byte private key; SHA-512 of\n# it gives the secret scalar (its first half, clamped) and the prefix the\n# per-message nonce is hashed from (its second half). Signing is\n# deterministic: one seed and one message give one signature.\npub struct Ed25519\n def initialize\n # The 32-byte public key of *seed*, RFC 8032 §5.1.5.\n def self.public_key(seed : String | Array(UInt8)) : String\n # The 64-byte signature of *message* under *seed*, RFC 8032 §5.1.6:\n # R = [r]B for r = SHA-512(prefix || M) mod L, then\n # S = (r + SHA-512(R || A || M) * s) mod L. The public key A is worked\n # out again from the seed, which costs a second multiplication of the\n # base point; the two are each a fixed-window constant-time one.\n def self.sign(seed : String | Array(UInt8), message : String | Array(UInt8)) : String\n # Whether *signature* is *public_key*'s signature of *message*, RFC 8032\n # §5.1.7 with the cofactorless equation (the header says why). False,\n # not a panic, for a key or signature of the wrong size, a key that is\n # not a canonical encoding of a point on the curve, and an S of L or\n # more.\n def self.verify(public_key : String | Array(UInt8), message : String | Array(UInt8), signature : String | Array(UInt8)) : Bool\nend\n\n# An Ed25519 public key held as a value, as a certificate carries one (RFC\n# 8410): the 32 bytes, checked once to be the canonical encoding of a point\n# on the curve, so a key read from outside that is not one is refused where\n# it is read rather than failing every signature later.\npub struct Ed25519PublicKey\n def bytes : Array(UInt8)\n # The key *bytes* encode, or a `CurveError`: not 32 bytes, or not a\n # canonical encoding of a point on the curve (RFC 8032 §5.1.3).\n def self.from_bytes(bytes : String | Array(UInt8)) : Ed25519PublicKey | CurveError\n def initialize(bytes : Array(UInt8))\n # Whether *signature* is this key's signature of *message*, as\n # `Ed25519.verify` answers it.\n def verify(message : String | Array(UInt8), signature : String | Array(UInt8)) : Bool\nend\n\n# X25519, RFC 7748 §5: the u-coordinate of a clamped scalar times a point\n# on Curve25519. The private key is any 32 bytes; it is clamped here\n# (bits 0 to 2 and 255 cleared, bit 254 set), so the caller need not.\npub struct X25519\n def initialize\n # The public key of *private_key*: its multiple of the base point, u = 9.\n # That point is edwards25519's B under RFC 7748 §4.1's map, which keeps\n # multiples, so the clamped scalar times B on the Edwards curve, by the\n # fixed-base table, gives the same u as the ladder from 9 does: 8\n # microseconds where the ladder took 20.\n def self.public_key(private_key : String | Array(UInt8)) : String\n # The secret *private_key* shares with the owner of *peer_public*. A\n # peer key that is not 32 bytes, and a secret of all zeros (a peer key of\n # small order, RFC 7748 §6.1), are a `CurveError`. Whether the secret was\n # zero is the one thing that leaves the ladder by a branch, and it says\n # nothing of the private key: which keys give zero depends on the peer's.\n def self.shared(private_key : String | Array(UInt8), peer_public : String | Array(UInt8)) : String | CurveError\nend\n\nimpl Error for CurveError\n def message : String\nend\n" }, { "name": "std/debug", "path": "src/std/debug.iyi", - "sourceSha256": "21ad11724eee0f9a4e3c59e2684abf48702f9456a89b7cdf3e4bac543d223965", + "sourceSha256": "64e05b3d51e17dc9b6e49544e5adfe4ea5908d1ed1f2e6a2439095c62f836e94", "surface": "module std/debug\n" }, { "name": "std/deque", "path": "src/std/deque.iyi", - "sourceSha256": "3c10d9b4c1cb53f818d290d48773cb05cc5138909db71a1492dc0c74dee8c21e", + "sourceSha256": "3ee029b104c7f9f58d9747481efde5e387c850ebd35a435c9a34325d2f7abd4c", "surface": "module std/deque\n\npub class Deque(T)\n # A new deque: this one's elements, then other's.\n def +(other : Deque(T)) : Deque(T)\n def <<(value : T) : Deque(T)\n # The same elements in the same order, where one element type holds the\n # other, as tuples compare (src/iyi/object.iyi). Restricted to\n # `Deque(T)`, a `Deque(Int32)` was taken for a `Deque(Int32?)` and not\n # back: the one equality answered true one way and false the other.\n def ==(other : Deque(U)) : Bool forall U\n def []=(index : Int32, value : T) : T\n # Slots allocated, live or not.\n def capacity : Int32\n # Forgets every element; the capacity stays.\n def clear : Deque(T)\n # Appends every element of other; answers the deque. The count is read\n # once: walking `other.size` while pushing grew it along with this deque\n # when the two were one, so `d.concat(d)` never ended.\n def concat(other : Deque(T)) : Deque(T)\n def concat(items : Array(T)) : Deque(T)\n # Removes and answers the element at index; the shorter side closes\n # the gap.\n def delete_at(index : Int32) : T\n # A copy with the same elements, contiguous from slot 0.\n def dup : Deque(T)\n # size copies of value.\n def initialize(size : Int32, value : T)\n # An empty deque with room for initial_capacity elements before it grows.\n def initialize(initial_capacity : Int32)\n # An empty deque; the first push allocates.\n def initialize\n # Inserts value before index; `size` appends, `-1` appends too (the\n # position after the last). The shorter side moves.\n def insert(index : Int32, value : T) : Deque(T)\n def inspect : String\n # The array's elements, in its order.\n def self.new(items : Array(T)) : Deque(T)\n # size elements, each what the block answers for its index.\n def self.new(size : Int32, & : (Int32 -> T)) : Deque(T)\n # Removes the last n elements, or all of them when there are fewer.\n def pop(n : Int32) : Nil\n # Removes and answers the last element.\n def pop : T\n def pop? : T | ::Nil\n # Appends value; answers the deque.\n def push(value : T) : Deque(T)\n # Rotates in place so that the element at position n comes first; a\n # negative n rotates the other way. A full buffer only moves `@start`;\n # otherwise the shorter end is walked around.\n def rotate_in_place(n : Int32 = 1) : Deque(T)\n # A copy rotated by n, this deque untouched.\n def rotated(n : Int32 = 1) : Deque(T)\n # Removes the first n elements, or all of them when there are fewer.\n def shift(n : Int32) : Nil\n # Removes and answers the first element.\n def shift : T\n def shift? : T | ::Nil\n def size : Int32\n # `Deque{1, 2, 3}`, elements inspected.\n def to_s : String\n # The element at a logical index, no bounds check; `Indexable#[]` does\n # the checking.\n def unsafe_fetch(index : Int32) : T\n # Prepends value; answers the deque.\n def unshift(value : T) : Deque(T)\nend\n\nimpl Std::Indexable::Indexable for Deque(T) forall T\nend\n\nimpl Std::Indexable::IndexableMutable for Deque(T) forall T\n def unsafe_put(index : Int32, value : T) : T\nend\n\nimpl Std::Enumerable::Enumerable for Deque(T) forall T\nend\n" }, { @@ -160,31 +160,31 @@ { "name": "std/digest", "path": "src/std/digest.iyi", - "sourceSha256": "3a86961eb013ee516204d7f8e65615cc592e1ee624e570d8f49345d00894ab26", + "sourceSha256": "78f1b6ed44aabbe2590c5709ec115b2ebc48ea6cac61cb30362b935ecf4c2d43", "surface": "module std/digest\n\n# The same convention as `CRC32`: `update(sum, data, count)` goes on from a\n# finished Adler-32, and 1 is the start (the Adler-32 of nothing), as in\n# zlib's `adler32(adler, buf, len)`.\npub struct Adler32\n def self.checksum(data : String) : UInt32\n def self.hexdigest(data : String) : String\n def initialize\n def self.update(sum : UInt32, data : Pointer(UInt8), count : Int32) : UInt32\nend\n\n# `checksum(data)` is the CRC-32 of *data*. `update(crc, data, count)` goes\n# on from a CRC-32 already taken, zlib's `crc32(crc, buf, len)` convention:\n# what goes in and what comes out are finished checksums, the inversion\n# before and after done inside, so 0 is the start (the CRC-32 of nothing)\n# and `update(update(0, a), b)` is the CRC-32 of *a* then *b*, the same\n# number `checksum` answers for the two joined.\npub struct CRC32\n def self.checksum(data : String) : UInt32\n def self.hexdigest(data : String) : String\n def initialize\n # Eight bytes a step through eight tables (slicing-by-8), where it had\n # been one bit a step: twenty megabytes took 105 ms, which was most of\n # what `Gzip.decompress` spent, the inflating itself taking 30.\n def self.update(crc : UInt32, data : Pointer(UInt8), count : Int32) : UInt32\nend\n\n# CRC-64 with ECMA-182's polynomial, reflected (0xc96c5795d7870f42), and\n# inverted before and after: the CRC-64 the .xz format checks a block\n# with (xz file format 1.0.4 §3.4, check ID 0x04), which reveng's\n# catalogue names CRC-64/XZ. The same convention as `CRC32`: `update(crc,\n# data, count)` goes on from a finished checksum, 0 is the start (the\n# CRC-64 of nothing), and `hexdigest` writes the number most significant\n# digit first, as `xz --robot --list` does; the stream stores it\n# little-endian.\npub struct CRC64\n def self.checksum(data : String) : UInt64\n def self.hexdigest(data : String) : String\n def initialize\n # Eight bytes a step through eight tables, as `CRC32` goes: the bytes\n # loaded as one little-endian word, xored into the checksum, and each\n # of the eight looked up in the table for how many bytes of zeros\n # follow it in the step.\n def self.update(crc : UInt64, data : Pointer(UInt8), count : Int32) : UInt64\nend\n\n# What every block hash shares: the message is cut into blocks, the last\n# one padded with a one bit, zeros and the message's length in bits, and\n# each block is compressed into the state. A subclass is the state and\n# its compression; this is the cutting and the padding.\npub abstract class Digest\n # Bytes compressed at a time: 64, or 128 for SHA-384 and SHA-512. HMAC\n # pads its key to this.\n def block_size : Int32\n # Becomes *other*: the same bytes taken, the same state, the same\n # `final` given or not. Nothing is allocated. *other* must be the same\n # algorithm, and a different one is refused by name.\n def copy_from(other : Digest) : Nil\n # Bytes in a digest: 16 for MD5, 20 for SHA-1, 28, 32, 48 and 64 for\n # the SHA-2s.\n abstract def digest_size : Int32\n def dup : self\n # The digest, into the first `digest_size` bytes of *dst*: no array is\n # made, which is what a loop that hashes a hash wants.\n def final(dst : Array(UInt8)) : Nil\n def final : Array(UInt8)\n def self.hash_bytes(data : String | Array(UInt8)) : Array(UInt8)\n def self.hexdigest(data : String | Array(UInt8)) : String\n def hexfinal : String\n def initialize(block_size : Int32)\n # The digest of no bytes yet, ready again after a `final`.\n def reset : Nil\n def update(data : Pointer(UInt8), count : Int32) : self\n def update(data : String) : self\n def update(data : Array(UInt8)) : self\nend\n\npub class MD5 < Digest\n def digest_size : Int32\n def initialize\n # The type's own name, which is what a value that has said nothing about\n # itself can honestly print. A type that wants better defines its own.\n def to_s : String\nend\n\npub class SHA1 < Digest\n def digest_size : Int32\n def initialize\n # The type's own name, which is what a value that has said nothing about\n # itself can honestly print. A type that wants better defines its own.\n def to_s : String\nend\n\npub class SHA224 < SHA256\n def digest_size : Int32\n # The type's own name, which is what a value that has said nothing about\n # itself can honestly print. A type that wants better defines its own.\n def to_s : String\nend\n\n# SHA-256, FIPS 180-4 §6.2. SHA-224 is the same compression from another\n# starting state, its digest the first 28 bytes.\npub class SHA256 < Digest\n def digest_size : Int32\n def initialize\n # The type's own name, which is what a value that has said nothing about\n # itself can honestly print. A type that wants better defines its own.\n def to_s : String\nend\n\n# SHA-3, FIPS 202 section 6.1: Keccak[c] with a capacity twice the\n# digest, so a rate (the `block_size`) of 200 bytes less two digests.\n# The sponge has no length field, so the base's cutting into blocks is\n# kept and its padding is replaced. The digest is shorter than the rate\n# in all four, so it is the first bytes of the state after the last\n# block, with no further permutation.\npub abstract class SHA3 < Digest\n def initialize(rate : Int32)\n # The type's own name, which is what a value that has said nothing about\n # itself can honestly print. A type that wants better defines its own.\n def to_s : String\nend\n\npub class SHA384 < SHA512\n def digest_size : Int32\n # The type's own name, which is what a value that has said nothing about\n # itself can honestly print. A type that wants better defines its own.\n def to_s : String\nend\n\npub class SHA3_224 < SHA3\n def digest_size : Int32\n def initialize\n # The type's own name, which is what a value that has said nothing about\n # itself can honestly print. A type that wants better defines its own.\n def to_s : String\nend\n\npub class SHA3_256 < SHA3\n def digest_size : Int32\n def initialize\n # The type's own name, which is what a value that has said nothing about\n # itself can honestly print. A type that wants better defines its own.\n def to_s : String\nend\n\npub class SHA3_384 < SHA3\n def digest_size : Int32\n def initialize\n # The type's own name, which is what a value that has said nothing about\n # itself can honestly print. A type that wants better defines its own.\n def to_s : String\nend\n\npub class SHA3_512 < SHA3\n def digest_size : Int32\n def initialize\n # The type's own name, which is what a value that has said nothing about\n # itself can honestly print. A type that wants better defines its own.\n def to_s : String\nend\n\n# SHA-512, FIPS 180-4 §6.4: 64-bit words, 128-byte blocks, 80 rounds.\n# SHA-384 is the same compression from another starting state, its digest\n# the first 48 bytes.\npub class SHA512 < Digest\n def digest_size : Int32\n def initialize\n # The type's own name, which is what a value that has said nothing about\n # itself can honestly print. A type that wants better defines its own.\n def to_s : String\nend\n\npub class SHAKE128 < Shake\n def initialize\n # The type's own name, which is what a value that has said nothing about\n # itself can honestly print. A type that wants better defines its own.\n def to_s : String\nend\n\npub class SHAKE256 < Shake\n def initialize\n # The type's own name, which is what a value that has said nothing about\n # itself can honestly print. A type that wants better defines its own.\n def to_s : String\nend\n\n# SHAKE128 and SHAKE256, FIPS 202 section 6.2: the sponge at a capacity of\n# 256 and 512 bits, as much output as is asked for. `update` absorbs;\n# the first `read` pads and every `read` squeezes on from where the last\n# stopped, so reads of 3 and 5 bytes are the first 8 bytes of one read.\n# Absorbing after squeezing would be a different function, not more\n# input, and is refused until `reset`.\npub abstract class Shake\n # Bytes absorbed at a time: 168 for SHAKE128, 136 for SHAKE256.\n def block_size : Int32\n # *count* bytes of the output for *data*.\n def self.hash_bytes(data : String | Array(UInt8), count : Int32) : Array(UInt8)\n def self.hexdigest(data : String | Array(UInt8), count : Int32) : String\n def initialize(rate : Int32)\n # The next `dst.size` bytes of output into *dst*, with no array made.\n # While squeezing, `@fill` counts the bytes of the state given out.\n def read(dst : Array(UInt8)) : Nil\n def read(count : Int32) : Array(UInt8)\n def reset : Nil\n def update(data : Pointer(UInt8), count : Int32) : self\n def update(data : String) : self\n def update(data : Array(UInt8)) : self\nend\n\n# XXH64, the 64-bit xxHash (Yann Collet; the algorithm as xxhash's\n# `doc/xxhash_spec.md` gives it): the hash whose low 32 bits are a\n# Zstandard frame's content checksum (RFC 8878 §3.1.1), which is what\n# std/zstd takes it for. Not a cryptographic hash - a fast check that\n# bytes arrived as they left, with nothing to keep anyone from making two\n# messages that collide.\n#\n# `checksum(data, seed)` hashes one piece. `new(seed)`, then `update` as\n# the data arrives, then `digest`, hashes it in pieces; `digest` leaves\n# the state as it was, as xxhash's `XXH64_digest` does, so it can be\n# asked midway and the hash go on. `hexdigest` is xxhash's canonical form,\n# most significant byte first. A word of the message is loaded as one\n# little-endian load, which is what every target iyi builds for is.\npub class XXH64\n def self.checksum(data : String, seed : UInt64 = 0_u64) : UInt64\n # The hash of everything given since the start or `reset`; the state is\n # left as it was.\n def digest : UInt64\n def self.hexdigest(data : String, seed : UInt64 = 0_u64) : String\n def initialize(seed : UInt64 = 0_u64)\n def self.merge(acc : UInt64, v : UInt64) : UInt64\n # Back to the hash of nothing, under the same seed.\n def reset : Nil\n def self.rotl(x : UInt64, n : Int32) : UInt64\n def self.round(acc : UInt64, input : UInt64) : UInt64\n def update(data : Pointer(UInt8), count : Int32) : Nil\n def update(data : String) : Nil\nend\n" }, { "name": "std/dir", "path": "src/std/dir.iyi", - "sourceSha256": "05d924d2c84ce21c8c566beaa058822b50fb1a4e5547b588a111f7085dbd2356", + "sourceSha256": "b0c2c4f708c001f4ff74f8ef696e06b5f58c2027b88c2604e9067de48b261771", "surface": "module std/dir\n\npub class Dir\n def self.[](patterns : String | Array(String)) : Array(String)\n protected def self.c_str(str : String) : ::Pointer(UInt8)\n def self.cd(path : String | Path) : String\n def self.cd(path : String | Path, &block : (-> Nil)) : Nil\n def children : Array(String)\n def self.children(dirname : String | Path) : Array(String)\n def close : Nil\n def closed? : Bool\n # One implementation, in the prelude: `Path#expand` needs the same\n # answer and cannot import this module (`std/dir` imports `std/path`),\n # so the platform arms live beside `Program.args` and `Program.env`,\n # which are the process's other facts.\n def self.current : String\n def self.current=(path : String | Path) : String\n def self.delete(path : String | Path) : Nil\n def self.delete?(path : String | Path) : Bool\n def each(&block : (String -> Nil)) : Nil\n def self.each(dirname : String | Path, &block : (String -> Nil)) : Nil\n def each_child(&block : (String -> Nil)) : Nil\n def self.each_child(dirname : String | Path, &block : (String -> Nil)) : Nil\n def self.empty?(path : String | Path) : Bool\n def entries : Array(String)\n def self.entries(dirname : String | Path) : Array(String)\n def self.exists?(path : String | Path) : Bool\n def self.glob(patterns : String | Array(String)) : Array(String)\n def self.glob(patterns : String | Array(String), &block : (String -> Nil)) : Nil\n def initialize(path : String | Path)\n def inspect : String\n def self.mkdir(path : String | Path, mode : Int32 = 511) : Nil\n def self.mkdir_p(path : String | Path, mode : Int32 = 511) : Nil\n def self.open(path : String | Path) : Dir\n def self.open(path : String | Path, &block : (Dir -> Nil)) : Nil\n def path : String\n def read : String | ::Nil\n def rewind : self\n def self.rmdir(path : String | Path) : Nil\n def self.tempdir : String\n def to_s : String\n # One trailing separator off, as Crystal's `Dir.tempdir` answers: darwin\n # sets TMPDIR to `/var/folders/.../T/`, and every path joined onto it had\n # two separators and a `dirname` that was not the directory it came from.\n # The root alone is left as it is - and on Windows a drive's root is\n # `C:\\`, whose separator is the root: without it `C:` is the current\n # directory on that drive, and a TMP of `C:\\` answered the directory\n # the program happened to be in.\n def self.without_trailing_separator(dir : String) : String\nend\n\n# Linux: the kernel's own calls (SPEC.md III.9), in libc's shape so the\n# callers below read the same. A directory stream is a descriptor and\n# a buffer of `linux_dirent64` records from `getdents64`, which is the\n# record libc's `readdir` hands back: the name sits at byte 19 either way.\npub struct LibC\n def self.chdir(path : ::Pointer(UInt8)) : Int32\n def self.closedir(dirp : ::Pointer(Void)) : Int32\n def self.getcwd(buf : ::Pointer(UInt8), size : UInt64) : ::Pointer(UInt8)\n def initialize\n def self.mkdir(path : ::Pointer(UInt8), mode : Int32) : Int32\n def self.opendir(name : ::Pointer(UInt8)) : ::Pointer(Void)\n def self.readdir(dirp : ::Pointer(Void)) : ::Pointer(Void)\n def self.rewinddir(dirp : ::Pointer(Void)) : Nil\n def self.rmdir(path : ::Pointer(UInt8)) : Int32\n def self.sys(number : Int64, a : Int64, b : Int64, c : Int64) : Int64\nend\n" }, { "name": "std/dns", "path": "src/std/dns.iyi", - "sourceSha256": "bb493ba2b8a8be515c2c05d1f388ea1650a49d239c9f7973483a16b1e85f06ae", + "sourceSha256": "c46ce5eb44ce7ce573761ce81f50c1eafe60fec972ed69dacfd1f08b2b1d099a", "surface": "module std/dns\n\n# Why a name was not resolved. One type with a question per answer, as\n# `SocketError` has, so a caller tells a name that does not exist\n# (`not_found?`, NXDOMAIN - authoritative, not worth asking again) from a\n# server that failed (`server_failure?`, SERVFAIL - maybe worth asking\n# again later) without reading a sentence.\npub struct DnsError\n # The same failure, said about *name*: a failure found while reading\n # bytes knows no name, and the resolver that asked does.\n def about(name : String, server : String) : DnsError\n def detail : String\n def initialize(kind : Int32, name : String, server : String = \"\", detail : String = \"\")\n # Not a host name at all, so nothing was asked.\n def invalid_name? : ::Bool\n def kind : Int32\n # An answer that carried the query's ID and question and could not be\n # read: a compression loop, a pointer past the end, a record running off\n # the message, an alias chain that does not end.\n def malformed? : ::Bool\n # The name as the caller wrote it.\n def name : String\n # The name exists and has no address of the kind asked for (NOERROR\n # with no records, \"NODATA\").\n def no_address? : ::Bool\n # NXDOMAIN: the name does not exist.\n def not_found? : ::Bool\n def reason : String\n # REFUSED, FORMERR or NOTIMP: the server would not answer this query.\n def refused? : ::Bool\n # The server whose answer this is, `address:port`; empty when no server\n # was asked.\n def server : String\n # SERVFAIL from every server asked.\n def server_failure? : ::Bool\n # No server answered within the timeout, on any attempt.\n def timed_out? : ::Bool\n # The server could not be reached: nothing listens on its port (an ICMP\n # refusal), no route to it, or the TCP connection the truncated answer\n # needed failed.\n def unreachable? : ::Bool\nend\n\n# A query, and the reading of an answer to one.\npub struct DnsMessage\n # The addresses of *type* this answer gives *name*, following CNAMEs:\n # the records for the end of the chain, the name the chain ended at, and\n # how many links it took. No addresses and a different name is a chain\n # that left this answer before it ended, which the resolver asks about\n # next. A chain of more than *budget* links is malformed.\n def addresses(name : String, type : Int32, budget : Int32 = MAX_CNAMES) : Tuple(Array(Bytes), String, Int32) | DnsError\n def answers : Array(DnsRecord)\n # Whether this is the answer to query *id* for *name* and *type*: a\n # response, a standard query's, with the ID, and repeating the question.\n # A refusal of the query (SERVFAIL, REFUSED, FORMERR, NOTIMP) may come\n # without the question, as some servers send it; an answer that says\n # anything about the name - NOERROR or NXDOMAIN - must carry it.\n def answers?(id : UInt16, name : String, type : Int32) : ::Bool\n # Where the message at the start of *packet* ends: past its header, its\n # questions and every record of its three sections, as their counts\n # say; -1 when they run past the bytes or a name cannot be read. Over a\n # stream the frame is the message, so an answer whose frame holds bytes\n # past this point is refused as oversized there (`Resolver`'s encrypted\n # upstreams); a datagram is not held to it.\n def self.ends_at(packet : Bytes) : Int32\n def flags : Int32\n def id : UInt16\n # The ID in a datagram's first two bytes, or -1 when it is too short to\n # be a message: what the resolver reads before it reads anything else.\n def self.id_of(packet : Bytes) : Int32\n # *extended_rcode* is the upper eight bits of the RCODE, from the\n # answer's OPT record (RFC 6891 6.1.3); 0 without one.\n def initialize(id : UInt16, flags : Int32, question_name : String, question_type : Int32, question_class : Int32, answers : Array(DnsRecord), extended_rcode : Int32 = 0)\n def self.malformed(why : String) : DnsError\n def opcode : Int32\n # The message in *packet*: its header, its one question, and - unless it\n # is truncated - its answer section, and the RCODE's upper bits from the\n # OPT record in its additional section. The authority and additional\n # sections are walked to find that record, so their records must fit\n # the bytes too; one OPT record at most (RFC 6891 6.1.1), owned by the\n # root. Anything that does not fit the bytes is `DnsError` with\n # `malformed?`, never a read past them.\n def self.parse(packet : Bytes) : DnsMessage | DnsError\n # The query for *name*'s records of *type*, class IN, with recursion\n # desired: a 12-byte header and one question. *name* is a host name\n # (`DnsName.valid?`); a trailing dot is dropped.\n #\n # A *block* above 0 pads it (RFC 7830): an OPT record follows the\n # question - the root for its name, `EDNS_PAYLOAD` for its class,\n # extended RCODE, version and flags all 0 (RFC 6891 6.1.2-6.1.4) - and\n # holds a single Padding option of zero bytes (RFC 7830 3's SHOULD), as\n # many as bring the message to the next multiple of *block*. The length\n # brought there is the message's own, without the two bytes that frame\n # it over TCP (RFC 8467 3), so a question pads to the same length over\n # TLS as over HTTPS. With no *block* there is no OPT record: that is the\n # query that goes out in the clear, where RFC 7830 6 forbids padding.\n def self.query(id : UInt16, name : String, type : Int32, block : Int32 = 0) : Bytes\n def question_class : Int32\n # The question the answer repeats; empty with `question_type` 0 when it\n # repeats none.\n def question_name : String\n def question_type : Int32\n # The whole twelve-bit RCODE: the header's four bits under the OPT\n # record's eight. An answer that says BADVERS (16) has 0 in its header,\n # and read from the header alone it would be NOERROR without records.\n def rcode : Int32\n # The name at *at* in *packet*, and the offset just past it where it\n # sits; nil when it cannot be read. Labels are 1 to 63 bytes, a label may\n # not hold a `.` (it would read as two), the name is at most 255 bytes on\n # the wire, and each compression pointer must point before the place the\n # name was last read from - RFC 1035 4.1.4's \"prior occurrence\" - so the\n # positions strictly fall and a loop cannot be written.\n def self.read_name(packet : Bytes, at : Int32) : Tuple(String, Int32) | ::Nil\n def response? : ::Bool\n # TC: the answer did not fit in the datagram and is to be asked again\n # over TCP. Its records are not read: what is there is a fragment.\n def truncated? : ::Bool\nend\n\n# What a host name may be, and the names a short one stands for.\npub struct DnsName\n # The fully qualified names a lookup of *name* asks for, in order, as\n # resolv.conf(5) says: a name ending in `.` is only itself; one with at\n # least *ndots* dots is tried as it is first and then under each search\n # domain; one with fewer is tried under each search domain first and as\n # it is last. A candidate longer than a name can be is left out.\n def self.candidates(name : String, search : Array(String), ndots : Int32) : Array(String)\n def initialize\n # *name* without the trailing dot that makes it absolute.\n def self.relative(name : String) : String\n # Two names are the same name in any case (RFC 4343), with or without\n # the trailing dot.\n def self.same?(a : String, b : String) : ::Bool\n # A host name as RFC 1123 and glibc's `res_hnok` read one: labels of 1 to\n # 63 letters, digits, `-` and `_`, no label starting with `-`, at most\n # 253 characters, one trailing dot allowed. The last label must not be\n # all digits (RFC 3696 2: no top-level domain is), so `999.1.1.1` and\n # `1.2.3` stay what the numeric parser refuses rather than becoming\n # questions to a name server.\n def self.valid?(name : String) : ::Bool\n # Why *name* is not a host name, or nil when it is.\n def self.why(name : String) : String | ::Nil\nend\n\n# One resource record from an answer section.\npub struct DnsRecord\n # The character-strings of a TXT record's data (RFC 1035 3.3.14), each\n # a length byte and that many bytes; nil when the last one runs past the\n # data. A record holds one or more, and `Resolver#txt` joins them, as\n # SPF (RFC 7208 3.3) and DKIM read a record of several.\n def self.character_strings(data : Bytes) : Array(String) | ::Nil\n # The record's data as it came: four bytes for an A record, sixteen for\n # an AAAA, the encoded name for a CNAME.\n def data : Bytes\n def initialize(name : String, type : Int32, record_class : Int32, ttl : UInt32, data : Bytes, target : String)\n def name : String\n def record_class : Int32\n # A CNAME's target, read with compression; empty for any other type.\n def target : String\n def ttl : UInt32\n def type : Int32\nend\n\n# The hosts file: an address, then the names it answers for.\npub struct HostsFile\n def initialize\n # The addresses *text* gives *name*, as written and in the file's order:\n # every line whose names include it, in any case and with or without a\n # trailing dot. A line with an address and no name says nothing.\n def self.lookup(text : String, name : String) : Array(String)\nend\n\n# `/etc/resolv.conf`, as resolv.conf(5) describes it and glibc reads it.\npub struct ResolvConf\n def attempts : Int32\n def initialize(nameservers : Array(String) = [] of String, search : Array(String) = [] of String, ndots : Int32 = 1, timeout_ms : Int32 = 5000, attempts : Int32 = 2)\n # Each an address as written - IPv4, or IPv6 without a zone - optionally\n # with a port (`192.0.2.1:5353`, `[2001:db8::1]:5353`), which\n # resolv.conf itself never has and a resolver built in a program may.\n def nameservers : Array(String)\n def ndots : Int32\n # The keywords glibc reads: `nameserver`, `domain`, `search` (the later\n # of `domain` and `search` wins, as there) and `options` with `ndots:`,\n # `timeout:` (seconds) and `attempts:`, each held to glibc's bounds - 15,\n # 30 and 5. A `#` or `;` starts a comment. Anything else is ignored, as\n # glibc ignores it: a file other programs read too is not this module's\n # to refuse.\n def self.parse(text : String) : ResolvConf\n def search : Array(String)\n def timeout_ms : Int32\nend\n\n# What SVCB resolution (RFC 9460 section 3) of a service came to: the\n# ServiceMode records found, by priority, and the name they were asked\n# at - the service's own, or the target of the last AliasMode record\n# followed (`aliases` of them). No records is resolution that found no\n# endpoint; where `aliases` is above 0 the name is still one to connect\n# to (section 3's last endpoint), and \".\" says the service is not there\n# (section 2.5.1). `Resolver#https_records` answers one.\npub struct SvcbAnswer\n def aliases : Int32\n def initialize(name : String, aliases : Int32, records : Array(SvcbRecord))\n def name : String\n def records : Array(SvcbRecord)\n # An AliasMode record's target was \".\": the service says it is not there.\n def unavailable? : ::Bool\nend\n\n# One SVCB or HTTPS record's data (RFC 9460 section 2.2): its SvcPriority,\n# its TargetName, and its SvcParams by key.\n#\n# A priority of 0 is AliasMode - the service is at *target*'s records of\n# the same type, and the params mean nothing (section 2.4.2) - and any\n# other ServiceMode, *target* an endpoint and the params how to reach it,\n# a smaller priority preferred. The target is written out without its\n# trailing dot, and is \".\" for the root, which in ServiceMode stands for\n# the record's owner (`endpoint`, section 2.5.2) and in AliasMode says\n# the service is not there (section 2.5.1).\n#\n# What `parse` refuses as malformed, with `DnsError#malformed?`: what\n# section 2.2 has a client refuse - a param cut short by the end of the\n# data, keys out of strictly increasing order, a key twice - a target\n# that is compressed (it must not be, section 2.2) or holds a label with\n# a dot in it (see `DnsMessage.read_name`), and a value of a key it\n# reads that is not of its key's form (sections 7.1 to 7.4, and RFC 9848\n# 3's ech): mandatory a list of keys in increasing order that does not\n# list itself, alpn one or more ids of 1 to 255 bytes filling the value,\n# no-default-alpn empty, port two bytes, ipv4hint and ipv6hint one or\n# more addresses, ech an ECHConfigList whose length prefix is its own.\n# So is a record that is not self-consistent (section 2.4.3): a key\n# mandatory lists that it does not carry, no-default-alpn without alpn.\n# Section 2.2 then has the whole RRset refused, which `Resolver` does.\n# A key past ech is kept as its bytes, whatever they are.\n#\n# `to_s` is the record's data in presentation format as dig 9.20 prints it,\n# for reading the record while debugging: bench/std_dns_exercise.sh holds\n# the two to the same text, record by record.\npub struct SvcbRecord\n # AliasMode: the service is at the target's records of the same type.\n def alias? : ::Bool\n # The alpn-ids of `alpn` (section 7.1), in their order; none without it.\n def alpn : Array(String)\n # The ECHConfigList of `ech` (RFC 9848 3), length prefix and all, as\n # std/tls's `TlsConfig#ech_configs` takes it; nil without it.\n def ech : Bytes | ::Nil\n # The host a ServiceMode record's endpoint is: the target, or the\n # record's owner when the target is \".\" (section 2.5.2).\n def endpoint : String\n def initialize(owner : String, priority : Int32, target : String, keys : Array(Int32), values : Array(Bytes))\n # The addresses of `ipv4hint` and `ipv6hint` (section 7.3), four bytes\n # and sixteen each, as they came.\n def ipv4hint : Array(Bytes)\n # Sixteen bytes as BIND's inet_ntop writes them, which is RFC 5952's\n # form with one more rule: the longest run of two or more zero groups,\n # the first of equal ones, as `::`; and an address whose first six\n # groups are zero, or five zero and then ffff, ending in its last four\n # bytes dotted - `::1.2.3.4`, `::ffff:192.0.2.1` - though not `::` and\n # `::1`, whose run of zeros is longer.\n def self.ipv6_text(address : Bytes) : String\n def ipv6hint : Array(Bytes)\n # *key*'s name in presentation format: one of `NAMES`, or `keyNNNNN`\n # (section 2.1).\n def self.key_name(key : Int32) : String\n # The keys in their order, which is increasing, and each one's value as\n # it came.\n def keys : Array(Int32)\n # The keys `mandatory` lists (section 8); none without it.\n def mandatory : Array(Int32)\n # Whether the scheme's default protocols are left out of the record's\n # (section 7.1): http/1.1, for HTTPS.\n def no_default_alpn? : ::Bool\n # The name the record was found at: what a ServiceMode target of \".\"\n # stands for.\n def owner : String\n # The record in *data*, found at *owner*; or why it is malformed (see\n # the struct).\n def self.parse(data : Bytes, owner : String = \"\") : SvcbRecord | DnsError\n # The port the endpoint is reached on (section 7.2); nil for the\n # origin's own.\n def port : Int32 | ::Nil\n def priority : Int32\n # *data* in pieces of *width* bytes; none for nil.\n def self.split(data : Bytes | ::Nil, width : Int32) : Array(Bytes)\n def target : String\n # The record's data in presentation format (section 2.1), as dig 9.20\n # writes it: the priority; the target, absolute, its bytes escaped as\n # BIND escapes a name's; then each param in the order it came, by its\n # name - alpn's ids quoted and joined by commas, a comma in one written\n # `\\\\,` and a backslash `\\\\\\\\`; port in decimal; the hints as addresses,\n # IPv6 as BIND's inet_ntop writes one (`SvcbRecord.ipv6_text`); ech in\n # Base64; a key this module does not read as `keyNNNNN` and its value\n # quoted, or alone when it is empty. Inside quotes a byte outside\n # printable ASCII is `\\DDD`, in decimal; alpn's ids take a space so too,\n # and the generic form takes it as it is (dig 9.20.24, measured).\n def to_s : String\n # The value of *key*, or nil when the record does not carry it.\n def value(key : Int32) : Bytes | ::Nil\n def values : Array(Bytes)\n # One byte of an alpn-id, inside the quotes: the list's own escapes (RFC\n # 9460 appendix A.1) under the quoted string's.\n def self.write_alpn_byte(text : String::Builder, byte : UInt8) : Nil\n # *name*, absolute, as BIND writes one: `\"`, `(`, `)`, `;`, `\\`, `@`\n # and `$` after a backslash, a byte outside printable ASCII as `\\DDD`.\n def self.write_name(text : String::Builder, name : String) : Nil\n # One byte of a value in the generic form, inside the quotes.\n def self.write_quoted_byte(text : String::Builder, byte : UInt8) : Nil\nend\n\nimpl Error for DnsError\n def message : String\nend\n" }, { "name": "std/ecdsa", "path": "src/std/ecdsa.iyi", - "sourceSha256": "29ecb1c042308053d33ee2fc0289839f8a96ca4e5c6f36815c8f379fb3c57399", + "sourceSha256": "cf27f05f03926a1e3fda1e6589bafa58ddcb5d4c05118c52bebf319e7c07fa35", "surface": "module std/ecdsa\n\n# The curves a key can be on.\npub enum EcdsaCurve : Int32\n P256 = 0\n P384 = 1\n P521 = 2\n # The length of the group's order n in bits.\n def bits : Int32\n def self.from_oid(oid : String) : EcdsaCurve | ::Nil\n # The curve's OID, as a key's AlgorithmIdentifier names it.\n def oid : String\n # The bytes a coordinate, or a scalar, is written in.\n def size : Int32\nend\n\n# What reading a key answers for bytes that are not an ECDSA public key.\npub struct EcdsaError\n def initialize(message : String)\n def to_s : String\nend\n\n# The hashes a signature is made over.\npub enum EcdsaHash : Int32\n SHA256 = 0\n SHA384 = 1\n SHA512 = 2\n def digest(data : Array(UInt8)) : Array(UInt8)\nend\n\npub struct EcdsaPublicKey\n def curve : EcdsaCurve\n # The key from a point in SEC 1's uncompressed encoding (section 2.3.3):\n # 0x04, then x and y big-endian at the curve's width.\n def self.from_point(curve : EcdsaCurve, point : Array(UInt8)) : EcdsaPublicKey | EcdsaError\n # A SubjectPublicKeyInfo (RFC 5280 section 4.1.2.7) naming\n # id-ecPublicKey and one of the three curves (RFC 5480 section 2.1.1).\n def self.from_spki(der : Array(UInt8)) : EcdsaPublicKey | EcdsaError\n def self.from_spki(value : DerValue) : EcdsaPublicKey | EcdsaError\n def initialize(curve : EcdsaCurve, x : BigInt, y : BigInt, group : EcdsaGroup)\n # Whether *signature*, the DER of an Ecdsa-Sig-Value, is this key's\n # signature of *message* under *hash*.\n def verify(hash : EcdsaHash, message : Array(UInt8) | String, signature : Array(UInt8)) : Bool\n def x : BigInt\n def y : BigInt\nend\n\nimpl Error for EcdsaError\n def message : String\nend\n" }, { "name": "std/eiy", "path": "src/std/eiy.iyi", - "sourceSha256": "83471e251f8bb471753b29caae9b6e066c9a9bfe2ebb1471b2b426ee48ab0fdc", + "sourceSha256": "18106009c1b8945d5eb6019e3c22b59177dde9cc579444f38815b9bfb0c4ad88", "surface": "module std/eiy\n\npub struct Eiy\n # Collects what a template prints, for `render` or for a caller that wants\n # the text rather than a stream.\n class Buffer\n def initialize\n def print(text : String) : Nil\n def print(value) : Nil\n # `print`, the one verb a template's target has, so a Buffer can be one.\n def to_s(io) : Nil\n def to_s : String\n end\n class Lexer\n class Token\n enum Type : Int32\n String = 0\n Output = 1\n Control = 2\n EOF = 3\n end\n def column_number : Int32\n def column_number=(value : Int32) : Int32\n def control? : Bool\n def eof? : Bool\n def initialize\n def line_number : Int32\n def line_number=(value : Int32) : Int32\n def output? : Bool\n def string? : Bool\n def suppress_leading : Bool\n def suppress_leading=(value : Bool) : Bool\n def suppress_leading? : Bool\n def suppress_trailing : Bool\n def suppress_trailing=(value : Bool) : Bool\n def suppress_trailing? : Bool\n def type : Type\n def type=(value : Type) : Type\n def value : String\n def value=(value : String) : String\n end\n # Why the last `next_token?` answered nil, or nil while it has not.\n def error : String | ::Nil\n def initialize(string : String)\n # The next token; the same `Token` object is reused, so copy what is\n # needed before asking again. Panics on a tag that is never closed.\n def next_token : Token\n # The next token, or nil on a tag that is never closed; `error` then says\n # where.\n def next_token? : Token | ::Nil\n end\n def initialize\n # Where `embed` reads *template* from when it is written in *caller*: the\n # template itself when absolute, otherwise beside the caller.\n def self.locate(template : String, caller : String) : String\n # `process_string` of the file at *filename*.\n def self.process_file(filename : String, io_name : String = DefaultIoName) : String\n # `process_string?` of the file at *filename*.\n def self.process_file?(filename : String, io_name : String = DefaultIoName) : String | ::Nil\n # The iyi source that prints the template *string* to *io_name*. Panics on\n # a tag that is never closed, naming *filename* when there is one.\n def self.process_string(string : String, filename : String = \"\", io_name : String = DefaultIoName) : String\n # The iyi source that prints the template *string* to *io_name*, or nil\n # for a tag that is never closed.\n def self.process_string?(string : String, filename : String = \"\", io_name : String = DefaultIoName) : String | ::Nil\n # Defines `to_s(io)` and `to_s` from the template at *filename*. The\n # parameter is `__io__`, a name no template means, so a template's own\n # `io` stays its own.\n macro def_to_s(filename)\n # Splices the template at *filename* here; its code prints to *io_name*.\n macro embed(filename, io_name)\n # The template at *filename*, rendered to a `String`. The buffer's name is\n # the macro's own, so a template that renders another one inside it does\n # not replace the buffer it is printing to.\n macro render(filename)\nend\n" }, { @@ -202,7 +202,7 @@ { "name": "std/env", "path": "src/std/env.iyi", - "sourceSha256": "06aec191c04fd2d11460e913ad83152c3fe48262bd53bb23a7a8a91bda74b4dc", + "sourceSha256": "ab7ed2c470f59e8777eed4dcc54e22b8beee8689c672170655f20aa74a16c6f5", "surface": "module std/env\n\npub struct ENV\n def self.[](key : String) : String\n def self.[]=(key : String, value : String | ::Nil) : String | ::Nil\n def self.[]?(key : String) : String | ::Nil\n def self.clear : Nil\n def self.delete(key : String) : String | ::Nil\n def self.each(&block : (String, String -> Nil)) : Nil\n def self.each_key(&block : (String -> Nil)) : Nil\n def self.each_value(&block : (String -> Nil)) : Nil\n def self.empty? : Bool\n def self.fetch(key : String, default : T) : String | T forall T\n def self.fetch(key : String) : String\n def self.fetch(key : String, &block : (String -> T)) : String | T forall T\n def self.has_key?(key : String) : Bool\n def initialize\n def self.keys : Array(String)\n def self.size : Int32\n def self.to_h : Hash(String, String)\n def self.values : Array(String)\nend\n\nmodule ::ENV\n def self.[](key : String) : String\n def self.[]=(key : String, value : String | ::Nil) : String | ::Nil\n def self.[]?(key : String) : String | ::Nil\n def self.clear : Nil\n def self.delete(key : String) : String | ::Nil\n def self.each(&block : (String, String -> Nil)) : Nil\n def self.each_key(&block : (String -> Nil)) : Nil\n def self.each_value(&block : (String -> Nil)) : Nil\n def self.empty? : Bool\n def self.fetch(key : String, default : T) : String | T forall T\n def self.fetch(key : String) : String\n def self.fetch(key : String, &block : (String -> T)) : String | T forall T\n def self.has_key?(key : String) : Bool\n def self.keys : Array(String)\n def self.size : Int32\n def self.to_h : Hash(String, String)\n def self.values : Array(String)\nend\n" }, { @@ -214,13 +214,13 @@ { "name": "std/file", "path": "src/std/file.iyi", - "sourceSha256": "356dadb8c25c92194b4438cb0c8891fc4758042e8c3d8e7c25c58952e94643bb", + "sourceSha256": "ce84d306b22a03fe5e99e5e760d62370de61df273581e192fa1bd4a762a28450", "surface": "module std/file\n\npub alias File = ::File\n\n# Linux: the kernel's own calls, as `socket` and the prelude make them\n# (SPEC.md III.9: an own-prelude object asks libc for nothing). The\n# shape is libc's, so the callers above read the same; a failure comes\n# back as the negative errno the kernel answers, which every caller\n# here reads as \"not zero\". `realpath` is a walk over `readlinkat` and\n# `newfstatat`, since libc's is a library function and not a call.\npub struct LibC\n # x86_64 `struct stat`, 144 bytes, the layout glibc shares with the kernel.\n struct Stat\n def initialize\n def st_atime : Timespec\n def st_blksize : Int64\n def st_blocks : Int64\n def st_ctime : Timespec\n def st_dev : UInt64\n def st_gid : Int32\n def st_ino : UInt64\n def st_mode : Int32\n def st_mtime : Timespec\n def st_nlink : UInt64\n def st_pad0 : Int32\n def st_rdev : UInt64\n def st_reserved0 : Int64\n def st_reserved1 : Int64\n def st_reserved2 : Int64\n def st_size : Int64\n def st_uid : Int32\n end\n struct Timespec\n def initialize\n def tv_nsec : Int64\n def tv_sec : Int64\n end\n def self.access(path : ::Pointer(UInt8), mode : Int32) : Int32\n def self.chmod(path : ::Pointer(UInt8), mode : Int32) : Int32\n def self.chown(path : ::Pointer(UInt8), owner : Int32, group : Int32) : Int32\n def self.fstat(fd : Int32, buf : ::Pointer(Stat)) : Int32\n def self.ftruncate(fd : Int32, length : Int64) : Int32\n def initialize\n def self.link(oldpath : ::Pointer(UInt8), newpath : ::Pointer(UInt8)) : Int32\n def self.lstat(path : ::Pointer(UInt8), buf : ::Pointer(Stat)) : Int32\n def self.readlink(path : ::Pointer(UInt8), buf : ::Pointer(UInt8), bufsiz : UInt64) : Int64\n # The absolute path with every `.`, `..` and symbolic link resolved, or\n # null when a component does not exist. Forty links deep is the limit,\n # as it is in libc.\n def self.realpath(path : ::Pointer(UInt8), resolved : ::Pointer(UInt8)) : ::Pointer(UInt8)\n def self.rename(oldpath : ::Pointer(UInt8), newpath : ::Pointer(UInt8)) : Int32\n def self.stat(path : ::Pointer(UInt8), buf : ::Pointer(Stat)) : Int32\n def self.symlink(target : ::Pointer(UInt8), linkpath : ::Pointer(UInt8)) : Int32\n def self.sys(number : Int64, a : Int64, b : Int64, c : Int64, d : Int64 = 0_i64, e : Int64 = 0_i64) : Int64\n def self.truncate(path : ::Pointer(UInt8), length : Int64) : Int32\n # *sec* 0 is \"now\" (a null timespec, as utimensat documents). Otherwise\n # atime and mtime are both that Unix second.\n def self.utimensat(path : ::Pointer(UInt8), sec : Int64) : Int32\nend\n\nclass ::File\n def self.basename(path : String | Path, suffix : String | ::Nil = nil) : String\n def self.chmod(path : String | Path, mode : Int32) : Nil\n def self.chown(path : String | Path, uid : Int32, gid : Int32) : Nil\n def self.directory?(path : String | Path) : Bool\n def self.dirname(path : String | Path) : String\n # A line at a time, off the file as it is read: it read the whole file\n # into an array of its lines first, so a log of any size was the\n # program's memory twice over before the first line was seen. Lines as\n # `read_lines` gives them, without their `\\n` or a `\\r` before it.\n def self.each_line(path : String | Path, &block : (String -> Nil)) : Nil\n def self.empty?(path : String | Path) : Bool\n # On Windows a file runs by its extension, one of PATHEXT's - what cmd\n # and `CreateProcess`'s search go by - and a directory is searchable\n # when it can be read. `cmd.exe` answered false: the made-up mode gave\n # the execute bit to directories alone.\n def self.executable?(path : String | Path) : Bool\n def self.expand_path(path : String | Path, base : String | ::Nil = nil) : String\n def self.extname(path : String | Path) : String\n def self.file?(path : String | Path) : Bool\n def self.info(path : String | Path, follow_symlinks : Bool = true) : Info\n def self.info?(path : String | Path, follow_symlinks : Bool = true) : Info | ::Nil\n def self.join(first : String | Path, second : String | Path, third : String | Path) : String\n def self.join(first : String | Path, second : String | Path) : String\n def self.join(parts : Array(String)) : String\n def self.link(old_path : String | Path, new_path : String | Path) : Nil\n # Whether *path* matches the shell-style *pattern*: `*` any run of\n # characters within a segment, `**` any run of segments (a whole\n # segment of the pattern), `?` one character but a separator, `[abc]`,\n # `[a-z]` and `[^...]` one character of a set, `{a,b}` one of the\n # branches (nested to ten), and `\\` the next character literally. Only\n # `/` in the pattern matches a separator. On Windows a name's `\\` is a\n # separator as well, and a pattern's `\\` is one too rather than an\n # escape: `Dir.glob` answers with either.\n #\n # The other library's algorithm (a port of the glob-match crate, after\n # research.swtch.com/glob), linear in the name but for braces. This\n # had `*` and `?` alone, byte by byte: `*` crossed separators, `?` took\n # half of a two-byte character, `[a]` and `{a,b}` were literal text,\n # and `*a*a*a*a*a*a*a*a*a*a*b` against forty `a`s did not finish.\n def self.match?(path : String | Path, pattern : String) : Bool\n def self.read_lines(path : String | Path) : Array(String)\n def self.readable?(path : String | Path) : Bool\n def self.readlink(path : String | Path) : String\n def self.real_path(path : String | Path) : String\n def self.rename(old_path : String | Path, new_path : String | Path) : Nil\n def self.same?(path1 : String | Path, path2 : String | Path) : Bool\n def self.same_content?(path1 : String | Path, path2 : String | Path) : Bool\n def self.size(path : String | Path) : Int64\n def self.symlink(old_path : String | Path, new_path : String | Path) : Nil\n def self.symlink?(path : String | Path) : Bool\n # A new, empty file in the temporary directory, and its path.\n #\n # Made with an exclusive create - `O_CREAT | O_EXCL`, `CREATE_NEW` on\n # Windows - which fails when anything is at the path, a symlink\n # included, rather than asked whether something is there and written\n # after. The name was the process id and a counter, and the file was\n # written wherever the path led if nothing was there when asked: a\n # symlink planted at the next name in a shared `/tmp` between the\n # question and the write sent an upload wherever its owner pointed it.\n # The name is sixteen hex digits of the system's randomness now, so it\n # cannot be planted in advance either; Windows' `%TEMP%` belongs to the\n # user, and there the create's refusal is the guarantee and the name\n # needs only to be new. The file is the owner's alone, mode 0600.\n def self.tempfile(prefix : String = \"tmp\", suffix : String = \"\") : String\n # The file is deleted after the block if it is still there: the block\n # may have renamed it into place - write to a temporary name, then\n # rename, is what the name is for - and `delete` of a path that is gone\n # panicked after the block had done its work.\n def self.tempfile(prefix : String = \"tmp\", suffix : String = \"\", &block : (String -> Nil)) : Nil\n # *time* 0 is \"now\"; any other value is the Unix second both atime and\n # mtime are set to.\n #\n # The darwin branch passed a null `times` to `utimes`, which is the\n # kernel's spelling of \"now\" — so `touch(path, 1)` set the clock's time\n # there and the epoch second on Linux, one name with two behaviours\n # decided by the platform (SPEC.md III.1.7a). It writes the pair now, in\n # the same shape the Linux branch writes its `timespec`s: `timeval` is an\n # `Int64` second and an `Int32` microsecond padded to eight, so four\n # `Int64` slots are the two structures and the odd slots are the\n # microseconds, zero.\n def self.touch(path : String | Path, time : Int64 = 0_i64) : Nil\n def self.touch?(path : String | Path, time : Int64 = 0_i64) : Bool\n def self.truncate(path : String | Path, size : Int64 = 0_i64) : Nil\n def self.writable?(path : String | Path) : Bool\nend\n\nstruct ::File::Flags\n def initialize(value : Int32 = 0)\n def set_group? : Bool\n def set_user? : Bool\n def sticky? : Bool\n def value : Int32\nend\n\nstruct ::File::Info\n def dev : Int64\n def directory? : Bool\n def executable? : Bool\n def file? : Bool\n def flags : Flags\n def group_id : String\n def initialize(size : Int64, permissions : Permissions, type : Type, flags : Flags, modification_time : Int64, owner_id : String, group_id : String, dev : Int64 = 0_i64, ino : UInt64 = 0_u64)\n def ino : UInt64\n def modification_time : Int64\n def owner_id : String\n def permissions : Permissions\n def readable? : Bool\n # An identity of 0 is none: Windows answers a path it could not open\n # with the attributes alone (`info?`), and two such files - different\n # sizes, different contents - were the same file.\n def same_file?(other : Info) : Bool\n def size : Int64\n def symlink? : Bool\n def type : Type\n def writable? : Bool\nend\n\nstruct ::File::Permissions\n def group_execute? : Bool\n def group_read? : Bool\n def group_write? : Bool\n def initialize(value : Int32)\n def other_execute? : Bool\n def other_read? : Bool\n def other_write? : Bool\n def owner_execute? : Bool\n def owner_read? : Bool\n def owner_write? : Bool\n def to_i : Int32\n def to_s(io : IO) : Nil\n def to_s : String\n def value : Int32\nend\n\nenum ::File::Type : UInt8\n # Returns `true` if this enum value equals `BlockDevice`\n def block_device? : Bool\n # Returns `true` if this enum value equals `CharacterDevice`\n def character_device? : Bool\n def device? : Bool\n # Returns `true` if this enum value equals `Directory`\n def directory? : Bool\n # Returns `true` if this enum value equals `File`\n def file? : Bool\n # Returns `true` if this enum value equals `Pipe`\n def pipe? : Bool\n # Returns `true` if this enum value equals `Socket`\n def socket? : Bool\n # Returns `true` if this enum value equals `Symlink`\n def symlink? : Bool\nend\n\nclass ::IyiIO\n # Advisory locks on the whole file, the other library's `flock_*`: a\n # shared one many holders may have at once, an exclusive one a single\n # holder. The holder is this open file - another `File.open` of the same\n # path, in this process or another, is another holder - until\n # `flock_unlock`, or until the file is closed.\n #\n # File.open(\"app.lock\", \"w\") do |f|\n # f.flock_exclusive { run_alone }.or_panic\n # end\n #\n # A lock another holder has is waited for a task at a time: tried again\n # after 1, 2, 4 ... 64 ms, the thread's other tasks running meanwhile,\n # and cancellable. `try_flock_*` answers at once whether it took it.\n #\n # Linux and darwin lock with `flock(2)`, which only other locks heed, and\n # turn a shared lock this file holds into an exclusive one in place.\n # Windows locks every byte with `LockFileEx`, which is mandatory - while\n # one handle holds it exclusively, another handle's reads and writes of\n # the file fail - and counts each lock a handle takes: unlock a shared\n # lock before taking the exclusive one.\n def flock_exclusive : Nil | Cancelled\n # The block's answer, run with the lock held and unlocked after it, even\n # when the block panics.\n def flock_exclusive(&block : (-> R)) : R | Cancelled forall R\n def flock_shared : Nil | Cancelled\n def flock_shared(&block : (-> R)) : R | Cancelled forall R\n # Gives the lock back; one this file does not hold is no error.\n def flock_unlock : Nil\n # The kernel's move: the new offset, or a negative error. A stream with\n # no descriptor - a `Memory` - is -1, which Windows' `to_u64` of it\n # panicked \"arithmetic overflow\" on; it is EBADF everywhere, as Linux's\n # kernel answers it.\n protected def self.lseek(fd : Int64, offset : Int64, whence : Int32) : Int64\n # Bytes from the start to where the next read or write happens.\n def pos : Int64\n def pos=(position : Int64) : Int64\n # Moves to *offset* from the start, from here, or from the end, and\n # answers the new position.\n def seek(offset : Int64, whence : Seek = Seek::Set) : Int64\n def seek(offset : Int32, whence : Seek = Seek::Set) : Int64\n def try_flock_exclusive : Bool\n def try_flock_shared : Bool\nend\n\nenum ::IyiIO::Seek : Int32\nend\n" }, { "name": "std/file_utils", "path": "src/std/file_utils.iyi", - "sourceSha256": "85e44de643e944770f11657a7f258c5b9bbdd73b62835ae0a9d2bcd68c7f2483", + "sourceSha256": "09f8d63d2971dfd7c43443d9c5ea37c33baa5afb093b0239902e92a41a6193d0", "surface": "module std/file_utils\n\npub struct FileUtils\n # Whether the files *a* and *b* hold the same bytes, read a piece at a\n # time up to the first difference.\n def self.compare_file(a : String | Path, b : String | Path) : Bool\n # Copies the file *src* to *dst*, its bytes and its permission bits. A\n # *dst* that is a directory receives the file under its own name.\n def self.cp(src : String | Path, dst : String | Path) : Nil\n # Copies *src* - a file, a link or a whole tree - to *dst*, links as\n # links. A *dst* that is a directory receives *src* under its own name;\n # a directory already at the target is filled, as `cp -R` fills one.\n # `link/`, with its separator, is the directory the link names, as\n # `cp -R link/ x` copies that directory: a copy takes nothing away.\n def self.cp_r(src : String | Path, dst : String | Path) : Nil\n def initialize\n # Moves *src* to *dst*: a rename on one device, a copy and a removal\n # across two. A *dst* that is a directory receives *src* under its own\n # name. `link/` moves the link, as `rm_r` removes it: moving takes the\n # source away, and the directory a link names is not the caller's.\n def self.mv(src : String | Path, dst : String | Path) : Nil\n # Removes *path*: a file, a link (not what it names), or a directory\n # and everything under it. A path that is not there is refused.\n def self.rm_r(path : String | Path) : Nil\n # `rm_r`, with a path that is not there accepted.\n def self.rm_rf(path : String | Path) : Nil\nend\n" }, { @@ -232,20 +232,20 @@ { "name": "std/float", "path": "src/std/float.iyi", - "sourceSha256": "929e6a66b049e71e229207c040b400e488861e761c29ff168ba86a9375cf63c9", + "sourceSha256": "04e8ff026a7f499873173e3c83eb2c73c4dfd6cbdc39fc9fb6d546a19cfa9b3a", "surface": "module std/float\n\nstruct ::Float32\n def !=(other : Float64) : Bool\n def !=(other : Float32) : Bool\n def !=(other : Int8) : Bool\n def !=(other : Int16) : Bool\n def !=(other : Int32) : Bool\n def !=(other : Int64) : Bool\n def !=(other : Int128) : Bool\n def !=(other : UInt8) : Bool\n def !=(other : UInt16) : Bool\n def !=(other : UInt32) : Bool\n def !=(other : UInt64) : Bool\n def !=(other : UInt128) : Bool\n # The floored modulo, the divisor's sign: `-7.5 % 2.0` is 0.5,\n # `7.5 % -2.0` is -0.5, and a zero takes the divisor's sign too -\n # `-0.0 % 1.0` is `0.0` - where it used to keep the dividend's.\n def %(other : Float32) : Float32\n def *(other : Int8) : self\n def *(other : Int16) : self\n def *(other : Int32) : self\n def *(other : Int64) : self\n def *(other : Int128) : self\n def *(other : UInt8) : self\n def *(other : UInt16) : self\n def *(other : UInt32) : self\n def *(other : UInt64) : self\n def *(other : UInt128) : self\n def *(other : Float64) : self\n def *(other : Float32) : self\n def **(exponent : Int32) : Float32\n def +(other : Int8) : self\n def +(other : Int16) : self\n def +(other : Int32) : self\n def +(other : Int64) : self\n def +(other : Int128) : self\n def +(other : UInt8) : self\n def +(other : UInt16) : self\n def +(other : UInt32) : self\n def +(other : UInt64) : self\n def +(other : UInt128) : self\n def +(other : Float64) : self\n def +(other : Float32) : self\n def -(other : Int8) : self\n def -(other : Int16) : self\n def -(other : Int32) : self\n def -(other : Int64) : self\n def -(other : Int128) : self\n def -(other : UInt8) : self\n def -(other : UInt16) : self\n def -(other : UInt32) : self\n def -(other : UInt64) : self\n def -(other : UInt128) : self\n def -(other : Float64) : self\n def -(other : Float32) : self\n # Multiplied rather than subtracted from zero, so `-(0.0)` is `-0.0`.\n def - : Float32\n def /(other : Float32) : Float32\n # The floored quotient, `divmod`'s other half: `7.5 // 2.0` is 3.0\n # and `-7.5 // 2.0` is -4.0. The exact remainder is taken off first\n # so the division is of a multiple of the divisor; it can still round,\n # so the quotient is floored and nudged up past a half. A zero\n # quotient has the sign of the division.\n #\n # A single's is the double's, narrowed. Run in 24 bits, `self - r`\n # can round once the quotient is past 2^23, and the division then\n # floored to the next integer: `-170277296.0_f32 // -13.303335_f32`\n # was 12799595.0 for 12799594.0, and `divmod`'s q * y + r missed x by\n # 13.3.\n def //(other : Float32) : Float32\n def <(other : Float64) : Bool\n def <(other : Float32) : Bool\n def <(other : Int8) : Bool\n def <(other : Int16) : Bool\n def <(other : Int32) : Bool\n def <(other : Int64) : Bool\n def <(other : Int128) : Bool\n def <(other : UInt8) : Bool\n def <(other : UInt16) : Bool\n def <(other : UInt32) : Bool\n def <(other : UInt64) : Bool\n def <(other : UInt128) : Bool\n def <=(other : Float64) : Bool\n def <=(other : Float32) : Bool\n def <=(other : Int8) : Bool\n def <=(other : Int16) : Bool\n def <=(other : Int32) : Bool\n def <=(other : Int64) : Bool\n def <=(other : Int128) : Bool\n def <=(other : UInt8) : Bool\n def <=(other : UInt16) : Bool\n def <=(other : UInt32) : Bool\n def <=(other : UInt64) : Bool\n def <=(other : UInt128) : Bool\n # A total order, so `Comparable` holds and a list of floats sorts:\n # NaN is after everything and equal to NaN. `<` and `==` keep IEEE's\n # answer, false against NaN; this is the one place NaN is placed.\n def <=>(other : Float32) : Int32\n def ==(other : Float64) : Bool\n def ==(other : Float32) : Bool\n # Against an integer, exact: on the double the single is exactly,\n # which holds every integer under 64 bits exactly too, and through\n # std/int's exact `<=>` for the wider ones, which the prelude's\n # `Int64 == Float64` agrees with. `16777217 == 16777216.0_f32` was true,\n # the integer rounded to a single first.\n def ==(other : Int8) : Bool\n def ==(other : Int16) : Bool\n def ==(other : Int32) : Bool\n def ==(other : Int64) : Bool\n def ==(other : Int128) : Bool\n def ==(other : UInt8) : Bool\n def ==(other : UInt16) : Bool\n def ==(other : UInt32) : Bool\n def ==(other : UInt64) : Bool\n def ==(other : UInt128) : Bool\n def >(other : Float64) : Bool\n def >(other : Float32) : Bool\n def >(other : Int8) : Bool\n def >(other : Int16) : Bool\n def >(other : Int32) : Bool\n def >(other : Int64) : Bool\n def >(other : Int128) : Bool\n def >(other : UInt8) : Bool\n def >(other : UInt16) : Bool\n def >(other : UInt32) : Bool\n def >(other : UInt64) : Bool\n def >(other : UInt128) : Bool\n def >=(other : Float64) : Bool\n def >=(other : Float32) : Bool\n def >=(other : Int8) : Bool\n def >=(other : Int16) : Bool\n def >=(other : Int32) : Bool\n def >=(other : Int64) : Bool\n def >=(other : Int128) : Bool\n def >=(other : UInt8) : Bool\n def >=(other : UInt16) : Bool\n def >=(other : UInt32) : Bool\n def >=(other : UInt64) : Bool\n def >=(other : UInt128) : Bool\n # Every single is a double, and the integer nearest a single is a\n # single: the prelude's `Float64` roundings are exact for it.\n # The sign cleared, by `Float64#abs`: a single widens to a double and\n # back exactly, and a comparison left `(-0.0_f32).abs` at `-0.0`.\n def abs : Float32\n def ceil : Float32\n def fdiv(other : Int8) : self\n def fdiv(other : Int16) : self\n def fdiv(other : Int32) : self\n def fdiv(other : Int64) : self\n def fdiv(other : Int128) : self\n def fdiv(other : UInt8) : self\n def fdiv(other : UInt16) : self\n def fdiv(other : UInt32) : self\n def fdiv(other : UInt64) : self\n def fdiv(other : UInt128) : self\n def fdiv(other : Float64) : self\n def fdiv(other : Float32) : self\n def finite? : Bool\n def floor : Float32\n def hash : Int32\n # 1 for +Infinity, -1 for -Infinity, nil for anything finite or NaN.\n def infinite? : Int32 | ::Nil\n def nan? : Bool\n # The remainder of the truncated division, the dividend's sign (C's\n # `fmod`), computed exactly: the divisor is doubled up to the dividend\n # and subtracted, and every such difference is exact.\n def remainder(other : Float32) : Float32\n def round(digits : Int32) : Float32\n def round(mode : Std::Number::RoundingMode) : Float32\n def round : Float32\n def to_f : Float64\n def to_f32 : Float32\n def to_f64 : Float64\n def to_i : Int32\n def to_i128 : Int128\n def to_i16 : Int16\n def to_i32 : Int32\n def to_i64 : Int64\n # Truncated first, then refused if the truncation does not fit:\n # `255.5_f32.to_u8` is 255 and `(-0.5_f32).to_u8` is 0. The instruction\n # is std/int's, on the double every single is exactly.\n def to_i8 : Int8\n def to_s : String\n def to_u : UInt32\n def to_u128 : UInt128\n def to_u16 : UInt16\n def to_u32 : UInt32\n def to_u64 : UInt64\n def to_u8 : UInt8\n # Toward zero. Past 2^24 every value is an integer already and is\n # answered as it is; NaN and the infinities likewise. A zero keeps the\n # sign of what was truncated - `(-0.5).trunc` is -0.0, as `floor` and\n # `ceil` answer - where the conversion through an integer lost it.\n def trunc : Float32\nend\n\nstruct ::Float64\n def !=(other : Float32) : Bool\n # The floored modulo, the divisor's sign: `-7.5 % 2.0` is 0.5,\n # `7.5 % -2.0` is -0.5, and a zero takes the divisor's sign too -\n # `-0.0 % 1.0` is `0.0` - where it used to keep the dividend's.\n def %(other : Float64) : Float64\n def *(other : Float32) : self\n def +(other : Float32) : self\n def -(other : Float32) : self\n # Multiplied rather than subtracted from zero, so `-(0.0)` is `-0.0`.\n def - : Float64\n # The floored quotient, `divmod`'s other half: `7.5 // 2.0` is 3.0\n # and `-7.5 // 2.0` is -4.0. The exact remainder is taken off first\n # so the division is of a multiple of the divisor; it can still round,\n # so the quotient is floored and nudged up past a half. A zero\n # quotient has the sign of the division.\n #\n # A single's is the double's, narrowed. Run in 24 bits, `self - r`\n # can round once the quotient is past 2^23, and the division then\n # floored to the next integer: `-170277296.0_f32 // -13.303335_f32`\n # was 12799595.0 for 12799594.0, and `divmod`'s q * y + r missed x by\n # 13.3.\n def //(other : Float64) : Float64\n def <(other : Float32) : Bool\n def <=(other : Float32) : Bool\n # A total order, so `Comparable` holds and a list of floats sorts:\n # NaN is after everything and equal to NaN. `<` and `==` keep IEEE's\n # answer, false against NaN; this is the one place NaN is placed.\n def <=>(other : Float64) : Int32\n def ==(other : Float32) : Bool\n def >(other : Float32) : Bool\n def >=(other : Float32) : Bool\n def fdiv(other : Float32) : self\n def finite? : Bool\n # 1 for +Infinity, -1 for -Infinity, nil for anything finite or NaN.\n def infinite? : Int32 | ::Nil\n def nan? : Bool\n # The remainder of the truncated division, the dividend's sign (C's\n # `fmod`), computed exactly: the divisor is doubled up to the dividend\n # and subtracted, and every such difference is exact.\n def remainder(other : Float64) : Float64\n # The instruction, unchecked: a double past the single's range\n # narrows to the infinity of its sign, as `Float32::MAX * 2.0_f32`\n # answers. It used to panic \"arithmetic overflow\" here alone.\n def to_f32 : Float32\n # Toward zero. Past 2^53 every value is an integer already and is\n # answered as it is; NaN and the infinities likewise. A zero keeps the\n # sign of what was truncated - `(-0.5).trunc` is -0.0, as `floor` and\n # `ceil` answer - where the conversion through an integer lost it.\n def trunc : Float64\nend\n\nstruct ::Int128\n def !=(other : Float32) : Bool\n def *(other : Float32) : Float32\n def +(other : Float32) : Float32\n def -(other : Float32) : Float32\n def /(other : Float32) : Float32\n # An integer over an integer is a double, as the other library\n # divides one, and written out so that an integer divisor matches\n # without a cast: beside `/(Float64)` and the `/(Float32)` above,\n # the literal in `7 / 2` cast to both, and importing this module\n # made that line \"ambiguous call\" where it had printed 3.5.\n def /(other : ::Int) : Float64\n def <(other : Float32) : Bool\n def <=(other : Float32) : Bool\n # The single's exact comparison, with the sides swapped.\n def ==(other : Float32) : Bool\n def >(other : Float32) : Bool\n def >=(other : Float32) : Bool\n def to_f32 : Float32\nend\n\nstruct ::Int16\n def !=(other : Float32) : Bool\n def *(other : Float32) : Float32\n def +(other : Float32) : Float32\n def -(other : Float32) : Float32\n def /(other : Float32) : Float32\n # An integer over an integer is a double, as the other library\n # divides one, and written out so that an integer divisor matches\n # without a cast: beside `/(Float64)` and the `/(Float32)` above,\n # the literal in `7 / 2` cast to both, and importing this module\n # made that line \"ambiguous call\" where it had printed 3.5.\n def /(other : ::Int) : Float64\n def <(other : Float32) : Bool\n def <=(other : Float32) : Bool\n # The single's exact comparison, with the sides swapped.\n def ==(other : Float32) : Bool\n def >(other : Float32) : Bool\n def >=(other : Float32) : Bool\n def to_f32 : Float32\nend\n\nstruct ::Int32\n def !=(other : Float32) : Bool\n def *(other : Float32) : Float32\n def +(other : Float32) : Float32\n def -(other : Float32) : Float32\n def /(other : Float32) : Float32\n # An integer over an integer is a double, as the other library\n # divides one, and written out so that an integer divisor matches\n # without a cast: beside `/(Float64)` and the `/(Float32)` above,\n # the literal in `7 / 2` cast to both, and importing this module\n # made that line \"ambiguous call\" where it had printed 3.5.\n def /(other : ::Int) : Float64\n def <(other : Float32) : Bool\n def <=(other : Float32) : Bool\n # The single's exact comparison, with the sides swapped.\n def ==(other : Float32) : Bool\n def >(other : Float32) : Bool\n def >=(other : Float32) : Bool\n def to_f32 : Float32\nend\n\nstruct ::Int64\n def !=(other : Float32) : Bool\n def *(other : Float32) : Float32\n def +(other : Float32) : Float32\n def -(other : Float32) : Float32\n def /(other : Float32) : Float32\n # An integer over an integer is a double, as the other library\n # divides one, and written out so that an integer divisor matches\n # without a cast: beside `/(Float64)` and the `/(Float32)` above,\n # the literal in `7 / 2` cast to both, and importing this module\n # made that line \"ambiguous call\" where it had printed 3.5.\n def /(other : ::Int) : Float64\n def <(other : Float32) : Bool\n def <=(other : Float32) : Bool\n # The single's exact comparison, with the sides swapped.\n def ==(other : Float32) : Bool\n def >(other : Float32) : Bool\n def >=(other : Float32) : Bool\n def to_f32 : Float32\nend\n\nstruct ::Int8\n def !=(other : Float32) : Bool\n def *(other : Float32) : Float32\n def +(other : Float32) : Float32\n def -(other : Float32) : Float32\n def /(other : Float32) : Float32\n # An integer over an integer is a double, as the other library\n # divides one, and written out so that an integer divisor matches\n # without a cast: beside `/(Float64)` and the `/(Float32)` above,\n # the literal in `7 / 2` cast to both, and importing this module\n # made that line \"ambiguous call\" where it had printed 3.5.\n def /(other : ::Int) : Float64\n def <(other : Float32) : Bool\n def <=(other : Float32) : Bool\n # The single's exact comparison, with the sides swapped.\n def ==(other : Float32) : Bool\n def >(other : Float32) : Bool\n def >=(other : Float32) : Bool\n def to_f32 : Float32\nend\n\nstruct ::UInt128\n def !=(other : Float32) : Bool\n def *(other : Float32) : Float32\n def +(other : Float32) : Float32\n def -(other : Float32) : Float32\n def /(other : Float32) : Float32\n # An integer over an integer is a double, as the other library\n # divides one, and written out so that an integer divisor matches\n # without a cast: beside `/(Float64)` and the `/(Float32)` above,\n # the literal in `7 / 2` cast to both, and importing this module\n # made that line \"ambiguous call\" where it had printed 3.5.\n def /(other : ::Int) : Float64\n def <(other : Float32) : Bool\n def <=(other : Float32) : Bool\n # The single's exact comparison, with the sides swapped.\n def ==(other : Float32) : Bool\n def >(other : Float32) : Bool\n def >=(other : Float32) : Bool\n def to_f32 : Float32\nend\n\nstruct ::UInt16\n def !=(other : Float32) : Bool\n def *(other : Float32) : Float32\n def +(other : Float32) : Float32\n def -(other : Float32) : Float32\n def /(other : Float32) : Float32\n # An integer over an integer is a double, as the other library\n # divides one, and written out so that an integer divisor matches\n # without a cast: beside `/(Float64)` and the `/(Float32)` above,\n # the literal in `7 / 2` cast to both, and importing this module\n # made that line \"ambiguous call\" where it had printed 3.5.\n def /(other : ::Int) : Float64\n def <(other : Float32) : Bool\n def <=(other : Float32) : Bool\n # The single's exact comparison, with the sides swapped.\n def ==(other : Float32) : Bool\n def >(other : Float32) : Bool\n def >=(other : Float32) : Bool\n def to_f32 : Float32\nend\n\nstruct ::UInt32\n def !=(other : Float32) : Bool\n def *(other : Float32) : Float32\n def +(other : Float32) : Float32\n def -(other : Float32) : Float32\n def /(other : Float32) : Float32\n # An integer over an integer is a double, as the other library\n # divides one, and written out so that an integer divisor matches\n # without a cast: beside `/(Float64)` and the `/(Float32)` above,\n # the literal in `7 / 2` cast to both, and importing this module\n # made that line \"ambiguous call\" where it had printed 3.5.\n def /(other : ::Int) : Float64\n def <(other : Float32) : Bool\n def <=(other : Float32) : Bool\n # The single's exact comparison, with the sides swapped.\n def ==(other : Float32) : Bool\n def >(other : Float32) : Bool\n def >=(other : Float32) : Bool\n def to_f32 : Float32\nend\n\nstruct ::UInt64\n def !=(other : Float32) : Bool\n def *(other : Float32) : Float32\n def +(other : Float32) : Float32\n def -(other : Float32) : Float32\n def /(other : Float32) : Float32\n # An integer over an integer is a double, as the other library\n # divides one, and written out so that an integer divisor matches\n # without a cast: beside `/(Float64)` and the `/(Float32)` above,\n # the literal in `7 / 2` cast to both, and importing this module\n # made that line \"ambiguous call\" where it had printed 3.5.\n def /(other : ::Int) : Float64\n def <(other : Float32) : Bool\n def <=(other : Float32) : Bool\n # The single's exact comparison, with the sides swapped.\n def ==(other : Float32) : Bool\n def >(other : Float32) : Bool\n def >=(other : Float32) : Bool\n def to_f32 : Float32\nend\n\nstruct ::UInt8\n def !=(other : Float32) : Bool\n def *(other : Float32) : Float32\n def +(other : Float32) : Float32\n def -(other : Float32) : Float32\n def /(other : Float32) : Float32\n # An integer over an integer is a double, as the other library\n # divides one, and written out so that an integer divisor matches\n # without a cast: beside `/(Float64)` and the `/(Float32)` above,\n # the literal in `7 / 2` cast to both, and importing this module\n # made that line \"ambiguous call\" where it had printed 3.5.\n def /(other : ::Int) : Float64\n def <(other : Float32) : Bool\n def <=(other : Float32) : Bool\n # The single's exact comparison, with the sides swapped.\n def ==(other : Float32) : Bool\n def >(other : Float32) : Bool\n def >=(other : Float32) : Bool\n def to_f32 : Float32\nend\n" }, { "name": "std/format", "path": "src/std/format.iyi", - "sourceSha256": "2240322c8d1e77427067c30c5316ef8a8b4911ea4841ec3d9fd5e459b6f579d1", + "sourceSha256": "6ca6771f01c883764e39cad55977226793520c4f63e3a955ad3c4dd77d5f5b98", "surface": "module std/format\n\n# The argument list as one array or tuple, as `sprintf` takes it.\npub def printf(format_string : String, args : Array) : Nil\n\npub def printf(format_string : String, args : Tuple) : Nil\n\npub def printf(format_string : String, *args : *T) : Nil forall T\n\n# The argument list may be one array or tuple, as the other library takes\n# it: `\"%s, %s, %s, D\" % ['A', 'B', 'C']`, its own example, panicked \"too\n# few arguments for format string\" here, and `\"[%s]\" % [\"A\"]` printed\n# `[[\"A\"]]` where it prints `[A]`. Two overloads rather than one taking\n# `Array | Tuple`: a union with Array in it cannot be written into an\n# artifact (\"can't use Array(T) in unions yet\").\npub def sprintf(format_string : String, args : Array) : String\n\npub def sprintf(format_string : String, args : Tuple) : String\n\npub def sprintf(format_string : String, *args : *T) : String forall T\n\nclass ::IyiBig\n # self / small for a `small` under 2^32, self reduced to the quotient,\n # the remainder answered. A limb is 32 bits in a 64-bit word, so the\n # running remainder shifted up by a limb still fits the word.\n def div_small(small : UInt64) : UInt64\n # Base ten, most significant digit first, nine digits per division.\n def to_decimal : String\nend\n\nmodule ::IyiFloatText\n # Extracts Dragon4 digits for a non-zero, finite double.\n # Returns {digits_pointer, count, k} where value = 0.d1 d2 ... dn * 10^k.\n def self.dragon4(value : Float64) : ::Tuple(Pointer(UInt8), Int32, Int32)\n # Scientific notation with exact places, half to even.\n def self.format_exp(value : Float64, uppercase : Bool, precision : Int32, hash_flag : Bool) : String\n # Fixed-point decimal format with exact places, half to even.\n def self.format_fixed(value : Float64, precision : Int32) : String\n # a * b as its high and low words, from 32-bit halves.\n def self.mul_wide(a : UInt64, b : UInt64) : ::Tuple(UInt64, UInt64)\n # Every digit the double has, not the shortest ones padded with zeros:\n # `round(f * 2^e * 10^places)`, half to even, as decimal digits. This is\n # what a fixed or scientific format prints, and what it did not print:\n # `%.0f` of 1e23 answered 100000000000000000000000 where the double is\n # 99999999999999991611392, `%.20f` of 0.1 answered twenty zeros where\n # the value's digits are 0.10000000000000000555, and `%e` of the\n # smallest denormal answered 5.000000e-324 for 4.940656e-324 - the\n # shortest digits, which round-trip, are not the value, and past them\n # there was nothing but zeros. `places` may be negative, a scale down.\n def self.scaled_digits(f : UInt64, e : Int32, places : Int32) : String\n # `scaled_digits` in two words, when they hold it: f * 10^places is\n # under 2^117 for the places a word of ten's powers reaches, and the\n # quotient by 2^-e and its half-to-even rounding are shifts and one\n # comparison of the remainder with the half. The same integer the\n # bignum's division gives - it is the same arithmetic, exact - where\n # that division made `%.2f` three times what Go's takes. nil when the\n # value, the places or the answer do not fit.\n def self.scaled_quick(f : UInt64, e : Int32, places : Int32) : UInt64 | ::Nil\nend\n\nmodule ::IyiFormat\n # Any integer: an `Int64` or a `UInt64`, whose top half `to_i64` refuses.\n def self.code_point(code) : Char\n # A width or a precision, which an `Int32` holds: read into one, the\n # digits of `%99999999999d` panicked \"arithmetic overflow\".\n def self.field_number(format_string : String, start : Int32, stop : Int32, what : String) : Int32\n def self.format_arg(val, verb : Char, minus : Bool, plus : Bool, space : Bool, zero : Bool, hash : Bool, width : Int32, precision : Int32) : String\n # A number is a code point, as Crystal's `%c` has it: `%c` of 233 is\n # `é`, where it panicked \"233 is out of char range\" (`chr` is ASCII).\n # Anything else is its first character, not its first byte, which cut\n # `é` in half.\n def self.format_char_arg(val, minus : Bool, width : Int32) : String\n # Digits as `to_s(base)` writes them, a `-` first when negative, given\n # the verb's sign, prefix, precision and width.\n def self.format_digits(text : String, verb : Char, base : Int32, minus : Bool, plus : Bool, space : Bool, zero : Bool, hash : Bool, width : Int32, precision : Int32) : String\n def self.format_float64(val : Float64, minus : Bool, plus : Bool, space : Bool, zero : Bool, hash : Bool, width : Int32, precision : Int32) : String\n def self.format_float_exp(val : Float64, uppercase : Bool, minus : Bool, plus : Bool, space : Bool, zero : Bool, hash : Bool, width : Int32, precision : Int32) : String\n # `%g`: the shorter of the two notations, C's rule. With P the precision\n # (6 when none is given, 1 when it is 0) and X the exponent `%e` would\n # write at P - 1 places, it is `%e` at P - 1 places when X < -4 or X >= P\n # and `%f` at P - 1 - X places otherwise; either way the trailing zeros\n # of the fraction go, and its point with them, unless `#` keeps them.\n # NaN and the infinities are written as `%e` writes them.\n def self.format_float_general(val : Float64, uppercase : Bool, minus : Bool, plus : Bool, space : Bool, zero : Bool, hash : Bool, width : Int32, precision : Int32) : String\n def self.format_int64(val : Int64, base : Int32, uppercase : Bool, signed : Bool, minus : Bool, plus : Bool, space : Bool, zero : Bool, hash : Bool, width : Int32, precision : Int32) : String\n # Width and precision in characters, because `size` is and because\n # `%-10s` is a column: counted in bytes, a multi-byte string came out\n # short by one space per extra byte, and a precision cut a character in\n # half. The prelude's `ljust`/`rjust` decided the same thing.\n #\n # The characters a precision keeps are written into one buffer, as\n # `each_char` decodes them and `size` counts them: added one at a time\n # onto a string of their own, the text was copied once per character,\n # and `%.800000s` of a megabyte took 12.8 s, four times as long for\n # every doubling.\n def self.format_string_arg(str : String, minus : Bool, width : Int32, precision : Int32) : String\n # A float under an integer verb is truncated, which is what Ruby, Python\n # and the other language answer to it. Past an `Int64` the truncation is\n # the double's own integer, f * 2^e, written whole as Python writes it:\n # `%d` of 1e30 is 1000000000000000019884624838656, where `to_i64`\n # panicked \"arithmetic overflow\". NaN and the infinities have no\n # integer, and the refusal says that rather than \"arithmetic overflow\".\n def self.format_truncated(val : Float64, verb : Char, minus : Bool, plus : Bool, space : Bool, zero : Bool, hash : Bool, width : Int32, precision : Int32) : String\n def self.format_uint64(val : UInt64, base : Int32, uppercase : Bool, signed : Bool, minus : Bool, plus : Bool, space : Bool, zero : Bool, hash : Bool, width : Int32, precision : Int32) : String\n # An `Int128` or `UInt128`: an integer verb writes its digits, which may\n # not fit 64 bits; a float verb its nearest double, as `%f` of an\n # `Int64` is.\n def self.format_wide(val, verb : Char, minus : Bool, plus : Bool, space : Bool, zero : Bool, hash : Bool, width : Int32, precision : Int32) : String\n # A numeric verb is a claim about the argument, and an argument that is\n # not a number contradicts it: `%d` of \"abc\" printed abc, `%f` of a\n # `Char` printed the character, and the caller who had mistyped the\n # argument order saw their strings where their numbers should be and\n # nothing said so.\n def self.not_a_number(val, verb : Char) : NoReturn\n # A decimal's fraction without its trailing zeros, and without its point\n # when nothing is left after it: `%g`'s trim.\n def self.trim_fraction(text : String) : String\nend\n\nclass ::String\n def %(args : Tuple) : String\n def %(arg) : String\n def %(*args : *T) : String forall T\n def self.format(format_string : String, *args : *T) : String forall T\nend\n" }, { "name": "std/gc", "path": "src/std/gc.iyi", - "sourceSha256": "dc56a7014fc7262d00e80c6bc39bc2b1e613f9476aa2f370df3bebb890529fc2", - "surface": "module std/gc\n\npub struct GC\n # What the collector can answer, read at one instant.\n struct Stats\n # Bytes the last sweep handed back, and bytes it found still live.\n def bytes_freed_by_last_sweep : UInt64\n def bytes_kept_by_last_sweep : UInt64\n # Bytes allocated since the last collection: the word the allocation\n # trigger reads, folded in per cache slice and reset by every\n # collection.\n def bytes_since_collection : UInt64\n # How many collections have run.\n def collections : UInt64\n def initialize(mapped_bytes : UInt64, bytes_since_collection : UInt64, bytes_freed_by_last_sweep : UInt64, bytes_kept_by_last_sweep : UInt64, collections : UInt64)\n # Bytes the arenas and large mappings hold from the machine. A\n # reservation, counted in whole mappings; not bytes in use.\n def mapped_bytes : UInt64\n def to_s : String\n end\n # Runs one collection now.\n def self.collect : Nil\n # The allocation trigger stops running collections until `enable`.\n def self.disable : Nil\n # The allocation trigger runs collections again. `collect` still works\n # while disabled.\n def self.enable : Nil\n # Hands a chunk back before the sweep would. A null pointer is nothing\n # to free.\n def self.free(pointer : ::Pointer(Void)) : Nil\n def initialize\n # Whether `pointer` points into a live chunk on the collector's heap:\n # its start or any byte inside it. Null, a stack address and a freed\n # chunk answer false.\n #\n # Under the runtime lock, as `stats` is: a word in no arena walks the\n # large-mapping list, and another thread's `free` or sweep unlinks and\n # unmaps those nodes under that lock. Walked without it, beside three\n # threads whose large chunks come and go, two seconds of `is_heap_ptr`\n # died of a memory fault in 10 runs of 10 (`bench/std_gc_exercise.iyi`).\n def self.is_heap_ptr(pointer : ::Pointer(Void)) : Bool\n # `size` zeroed bytes the collector scans for pointers. A negative size\n # is refused by name.\n def self.malloc(size : Int) : ::Pointer(Void)\n # `size` bytes the collector does not scan: for bytes that hold no\n # pointers, so the marker skips them. They are not cleared - a chunk the\n # sweep handed back comes out with its last owner's bytes, as Boehm's\n # `GC_malloc_atomic` hands them out - so the caller writes every byte\n # it reads. This said \"zeroed\" while 2000 chunks taken after a\n # collection freed 2000 filled ones came back dirty, every one.\n def self.malloc_atomic(size : Int) : ::Pointer(Void)\n # The chunk at `pointer`, resized to `size` bytes; the answer may be a\n # new address, with the old bytes copied.\n def self.realloc(pointer : ::Pointer(Void), size : Int) : ::Pointer(Void)\n # The numbers the collector keeps, read now.\n #\n # The walk holds the runtime lock, which a collection takes before it\n # stops anything and holds while the scavenge unlinks an arena or a\n # large mapping. Walked without it, a collection another thread's\n # allocation started could stop this walk on a mapping, unlink and unmap\n # it, and the walk's next read was of memory gone: beside three threads\n # allocating, two seconds of `stats` died of a memory fault in 10 runs\n # of 10 (`bench/std_gc_exercise.iyi`).\n def self.stats : Stats\nend\n" + "sourceSha256": "86f9dd461f500a4ee6ec3b4f60a6c2216ce762ed9bc1b8a01a3363e5f12b3f07", + "surface": "module std/gc\n\npub struct GC\n # What the collector can answer, read at one instant.\n struct Stats\n # Bytes the last sweep handed back, and bytes it found still live.\n def bytes_freed_by_last_sweep : UInt64\n def bytes_kept_by_last_sweep : UInt64\n # Bytes allocated since the last collection: the word the allocation\n # trigger reads, folded in per cache slice and reset by every\n # collection.\n def bytes_since_collection : UInt64\n # How many collections have run.\n def collections : UInt64\n def initialize(mapped_bytes : UInt64, bytes_since_collection : UInt64, bytes_freed_by_last_sweep : UInt64, bytes_kept_by_last_sweep : UInt64, collections : UInt64)\n # Bytes the arenas and large mappings hold from the machine. A\n # reservation, counted in whole mappings; not bytes in use.\n def mapped_bytes : UInt64\n def to_s : String\n end\n # Runs one collection now. Always inlined, as `IyiMark.collect` is, so\n # that the dead stack is cleared from the caller's frame. Out of line\n # this is a frame of its own above the cleared stretch, 40 bytes nothing\n # writes (its call's home space and an alignment word), and a dead\n # helper's address filling the stack under the caller was freed in 20\n # --release runs of 20 only because the collection's next frame pushes\n # five registers over exactly those 40 bytes (LLVM 20.1.7; Windows 11,\n # 12 logical processors, the user's machine).\n def self.collect : Nil\n # The allocation trigger stops running collections until `enable`.\n def self.disable : Nil\n # The allocation trigger runs collections again. `collect` still works\n # while disabled.\n def self.enable : Nil\n # Hands a chunk back before the sweep would. A null pointer is nothing\n # to free.\n def self.free(pointer : ::Pointer(Void)) : Nil\n def initialize\n # Whether `pointer` points into a live chunk on the collector's heap:\n # its start or any byte inside it. Null, a stack address and a freed\n # chunk answer false.\n #\n # Under the runtime lock, as `stats` is: a word in no arena walks the\n # large-mapping list, and another thread's `free` or sweep unlinks and\n # unmaps those nodes under that lock. Walked without it, beside three\n # threads whose large chunks come and go, two seconds of `is_heap_ptr`\n # died of a memory fault in 10 runs of 10 (`bench/std_gc_exercise.iyi`).\n def self.is_heap_ptr(pointer : ::Pointer(Void)) : Bool\n # `size` zeroed bytes the collector scans for pointers. A negative size\n # is refused by name.\n def self.malloc(size : Int) : ::Pointer(Void)\n # `size` bytes the collector does not scan: for bytes that hold no\n # pointers, so the marker skips them. They are not cleared - a chunk the\n # sweep handed back comes out with its last owner's bytes, as Boehm's\n # `GC_malloc_atomic` hands them out - so the caller writes every byte\n # it reads. This said \"zeroed\" while 2000 chunks taken after a\n # collection freed 2000 filled ones came back dirty, every one.\n def self.malloc_atomic(size : Int) : ::Pointer(Void)\n # The chunk at `pointer`, resized to `size` bytes; the answer may be a\n # new address, with the old bytes copied.\n def self.realloc(pointer : ::Pointer(Void), size : Int) : ::Pointer(Void)\n # The numbers the collector keeps, read now.\n #\n # The walk holds the runtime lock, which a collection takes before it\n # stops anything and holds while the scavenge unlinks an arena or a\n # large mapping. Walked without it, a collection another thread's\n # allocation started could stop this walk on a mapping, unlink and unmap\n # it, and the walk's next read was of memory gone: beside three threads\n # allocating, two seconds of `stats` died of a memory fault in 10 runs\n # of 10 (`bench/std_gc_exercise.iyi`).\n def self.stats : Stats\nend\n" }, { "name": "std/heap", @@ -256,26 +256,26 @@ { "name": "std/hpack", "path": "src/std/hpack.iyi", - "sourceSha256": "b360a4741701255597bd44285eab9b6577e63afd86cdc4425f8008b21a3a781c", + "sourceSha256": "c72de4348698bd74543373c703ca968a204b66bd169e61bc982273ff0f5492c9", "surface": "module std/hpack\n\npub alias Bytes = Std::Slice::Bytes\n\npub class Decoder\n def decode(payload : Bytes) : Array(HeaderField) | HpackError\n def dynamic_table : DynamicTable\n def initialize(max_table_size : Int32 = 4096, protocol_max_table_size : Int32 = 4096, max_header_list_size : Int32 = 65536, max_header_count : Int32 = 1000)\n def max_header_count : Int32\n def max_header_count=(value : Int32) : Int32\n def max_header_list_size : Int32\n def max_header_list_size=(value : Int32) : Int32\n def protocol_max_table_size : Int32\n # A SETTINGS_HEADER_TABLE_SIZE change reaches the table too: the limit\n # was only this field's, and the table went on refusing an update above\n # the size it was made with.\n def protocol_max_table_size=(limit : Int32) : Nil\nend\n\npub class DynamicTable\n def add(name : String, value : String, never_indexed : Bool = false) : Nil\n def add(field : HeaderField) : Nil\n def empty? : Bool\n def entries : Array(HeaderField)\n def find(name : String, value : String) : Tuple(Int32, Bool)\n def find_name(name : String) : Int32\n def get(relative_index : Int32) : HeaderField | ::Nil\n # A table is made within the limit it is resized within: made above it,\n # an encoder's table outgrew the peer's, and an Encoder made with 8192\n # sent blocks a default Decoder refused (\"Index 121 out of range (max:\n # 103)\") while `set_max_size(8192)` on it was refused.\n def initialize(max_size : Int32 = 4096, settings_max_size : Int32 = 4096)\n def length : Int32\n def max_size : Int32\n def set_max_size(new_max : Int32) : Nil | HpackError\n def settings_max_size : Int32\n # The protocol's limit (SETTINGS_HEADER_TABLE_SIZE) as it changes during\n # a connection; the size in use still moves only by `set_max_size`.\n def settings_max_size=(limit : Int32) : Nil\n def size : Int32\n def self.size_error(new_max : Int32, limit : Int32) : HpackError | ::Nil\nend\n\npub class Encoder\n def dynamic_table : DynamicTable\n def encode(headers : Array(HeaderField), force_huffman : Bool | ::Nil = nil) : Bytes\n def initialize(max_table_size : Int32 = 4096, protocol_max_table_size : Int32 = 4096, use_huffman : Bool = true)\n def protocol_max_table_size : Int32\n # A SETTINGS_HEADER_TABLE_SIZE change reaches the table too: the limit\n # was only this field's, so a raised one was refused by the table and a\n # lowered one left the table above it (RFC 7541 4.2), with no update.\n # A lowered limit is always signalled: the peer's table may still be the\n # size the old limit let it start at, which this encoder never sent.\n def protocol_max_table_size=(limit : Int32) : Nil\n def set_max_table_size(new_max : Int32) : Nil | HpackError\n def use_huffman : Bool\n def use_huffman=(value : Bool) : Bool\nend\n\npub struct HeaderField\n def ==(other : HeaderField) : Bool\n def indexing : IndexingMode\n def initialize(name : String, value : String, indexing : IndexingMode = IndexingMode::Incremental)\n def initialize(name : String, value : String, never_indexed : Bool)\n def name : String\n def never_indexed : Bool\n def size : Int32\n def to_s : String\n def value : String\nend\n\npub struct HpackError\n def initialize(message : String)\n def to_s : String\nend\n\npub class Huffman\n def self.decode(bytes : Bytes, offset : Int32, length : Int32) : String | HpackError\n def self.decode(bytes : Bytes) : String | HpackError\n def self.encode(input : String, buffer : Array(UInt8)) : Nil\n def self.encode(input : String) : Bytes\n def self.encode(input : Bytes) : Bytes\n def self.encoded_size(input : String) : Int32\nend\n\npub struct IndexingMode\n def ==(other : IndexingMode) : Bool\n def initialize(value : Int32)\n def value : Int32\nend\n\npub class Integer\n def self.decode(bytes : Bytes, offset : Int32, prefix_bits : Int32) : Tuple(UInt64, Int32) | HpackError\n def self.encode(val : UInt64, prefix_bits : Int32, prefix_byte : UInt8, buffer : Array(UInt8)) : Nil\n def self.encode(val : UInt64, prefix_bits : Int32, prefix_byte : UInt8 = 0_u8) : Bytes\nend\n\npub alias IntegerCodec = Integer\n\npub class StaticTable\n def self.find(name : String, value : String) : Tuple(Int32, Bool)\n def self.find_name(name : String) : Int32\n def self.get(index : Int32) : HeaderField | ::Nil\n def self.size : Int32\nend\n\npub class Table\n def self.find(dynamic_table : DynamicTable, name : String, value : String) : Tuple(Int32, Bool)\n def self.find_name(dynamic_table : DynamicTable, name : String) : Int32\n def self.get(dynamic_table : DynamicTable, global_index : Int32) : HeaderField | ::Nil\nend\n\nimpl Error for HpackError\n def message : String\nend\n" }, { "name": "std/hpke", "path": "src/std/hpke.iyi", - "sourceSha256": "5435d94d48664066af94dd296f2ca5dad22025223f78530a40001a6863f66ccc", + "sourceSha256": "51924376d3ea7ea37f3e3ac541cd1066e3af7119f0e4da417cb573ee29794f8b", "surface": "module std/hpke\n\n# The AEADs, by their code points (section 7.3, table 5).\npub enum HpkeAead : Int32\n Aes128Gcm = 1\n Aes256Gcm = 2\n ChaCha20Poly1305 = 3\n ExportOnly = 65535\n # Nk: the bytes of a key; none for export-only.\n def key_size : Int32\n def name : String\n # Nn: the bytes of a nonce; none for export-only.\n def nonce_size : Int32\n # Nt: the bytes of a tag; none for export-only.\n def tag_size : Int32\nend\n\n# What is wrong with an encapsulation, a key, a ciphertext or a suite from\n# outside, or a context out of nonces: `message` is the sentence.\npub struct HpkeError\n def initialize(message : String)\n def to_s : String\nend\n\n# The KDFs, by their code points (section 7.2, table 3).\npub enum HpkeKdf : Int32\n HkdfSha256 = 1\n HkdfSha384 = 2\n HkdfSha512 = 3\n # HKDF-Expand (RFC 5869 section 2.3) of *prk* to *length* bytes.\n def expand(prk : Array(UInt8), info : Array(UInt8), length : Int32) : Array(UInt8)\n # Nh: the bytes of the hash's output.\n def hash_size : Int32\n # HMAC under the hash, keyed with *key*.\n def mac(key : String | Array(UInt8)) : HMAC\n def name : String\nend\n\n# The KEMs, by their code points (section 7.1, table 2).\npub enum HpkeKem : Int32\n P256Sha256 = 16\n P384Sha384 = 17\n X25519Sha256 = 32\n # Decap, or AuthDecap when *sender_public* is given (section 4.1): the\n # shared secret *enc* carries to *key*, or an `HpkeError` for an *enc*\n # of the wrong length, not a point of the curve, or of small order.\n def decapsulate(key : HpkePrivateKey, enc : String | Array(UInt8), sender_public : HpkePublicKey | Nil = nil) : Array(UInt8) | HpkeError\n # Encap, or AuthEncap when *sender_key* is given (section 4.1): the\n # encapsulation, enc, and the shared secret, from the ephemeral key\n # DeriveKeyPair makes of *randomness* (at least Nsk bytes). An\n # `HpkeError` when a Diffie-Hellman step is refused: *recipient* is an\n # X25519 key of small order.\n def encapsulate(recipient : HpkePublicKey, randomness : String | Array(UInt8), sender_key : HpkePrivateKey | Nil = nil) : ::Tuple(Array(UInt8), Array(UInt8)) | HpkeError\n # The KDF the KEM's own steps use (section 4.1), whatever the suite's.\n def kdf : HpkeKdf\n # RFC 9180's name for it.\n def name : String\n # Nsk: the bytes of a serialised private key.\n def private_key_size : Int32\n # Nenc and Npk, which are the same: a serialised public key.\n def public_key_size : Int32\n # Nsecret: the bytes of a shared secret, the KEM's hash's.\n def secret_size : Int32\nend\n\n# The four modes of section 5, by the byte the key schedule binds.\npub enum HpkeMode : Int32\n Base = 0\n Psk = 1\n Auth = 2\n AuthPsk = 3\nend\n\n# A KEM's private key and the public key that goes with it.\npub struct HpkePrivateKey\n # DH(sk, pk) of section 4.1 with the serialised public key *peer*: the\n # X25519 secret, or the x-coordinate of the product on P-256 and P-384.\n # An `HpkeError` for a peer of the wrong length, a point not on the\n # curve, or an all-zero X25519 secret (section 7.1.4).\n def agree(peer : String | Array(UInt8)) : Array(UInt8) | HpkeError\n # SerializePrivateKey: the 32 bytes of an X25519 key, clamped; the\n # scalar of a P-256 or P-384 key, 32 or 48 bytes big-endian.\n def bytes : Array(UInt8)\n # DeriveKeyPair (section 7.1.3): the key pair of *ikm*, at least Nsk\n # bytes, under the KEM's own KDF. For P-256 and P-384, candidates are\n # drawn until one is in [1, n - 1].\n def self.derive(kem : HpkeKem, ikm : String | Array(UInt8)) : HpkePrivateKey\n # DeserializePrivateKey: the key *bytes* are, or an `HpkeError` for the\n # wrong length or, on P-256 and P-384, a scalar not in [1, n - 1]. An\n # X25519 key is clamped (section 7.1.2).\n def self.from_bytes(kem : HpkeKem, bytes : String | Array(UInt8)) : HpkePrivateKey | HpkeError\n def initialize(kem : HpkeKem, public_key : HpkePublicKey, secret : Array(UInt8), curve : P256PrivateKey | P384PrivateKey | Nil)\n def kem : HpkeKem\n def public_key : HpkePublicKey\nend\n\n# A KEM's public key, serialised as section 7.1.1 has it.\npub struct HpkePublicKey\n # SerializePublicKey: 32 bytes for X25519, the uncompressed point for\n # P-256 (65) and P-384 (97).\n def bytes : Array(UInt8)\n # DeserializePublicKey, validated: the key *bytes* are, or an\n # `HpkeError` for the wrong length or a point not on the curve.\n def self.from_bytes(kem : HpkeKem, bytes : String | Array(UInt8)) : HpkePublicKey | HpkeError\n def initialize(kem : HpkeKem, bytes : Array(UInt8))\n def kem : HpkeKem\nend\n\n# The recipient's context (section 5.2): messages opened at sequence 0, 1,\n# 2 and on, and secrets exported, the same ones the sender's exports.\npub class HpkeRecipient\n # Skips the sequence forward to *sequence*, never back: a message lost\n # in between is not opened.\n def advance_to(sequence : UInt128) : Nil\n # Context.Export (section 5.3).\n def export(exporter_context : String | Array(UInt8), length : Int32) : Array(UInt8)\n def initialize(cipher : HpkeCipher)\n # The mode the context was set up in, by the inputs given.\n def mode : HpkeMode\n # ContextR.Open: the plaintext of *ciphertext* at the next nonce, or an\n # `HpkeError` - its tag does not match, or the sequence is at 2^96 - 1 -\n # with the sequence left where it was.\n def open(ciphertext : String | Array(UInt8), aad : String | Array(UInt8) = \"\") : String | HpkeError\n # The sequence number the next message is opened at.\n def sequence : UInt128\nend\n\n# The sender's context (section 5.2): `enc` for the recipient, then\n# messages sealed at sequence 0, 1, 2 and on, and secrets exported.\npub class HpkeSender\n # Skips the sequence forward to *sequence*, never back, so no nonce is\n # used twice: for a protocol that numbers its messages itself.\n def advance_to(sequence : UInt128) : Nil\n # The encapsulation the recipient sets its context up from.\n def enc : Array(UInt8)\n # Context.Export (section 5.3): *length* bytes, at most 255 hashes,\n # bound to *exporter_context*.\n def export(exporter_context : String | Array(UInt8), length : Int32) : Array(UInt8)\n def initialize(enc : Array(UInt8), cipher : HpkeCipher)\n # The mode the context was set up in, by the inputs given.\n def mode : HpkeMode\n # ContextS.Seal: *plaintext* sealed under the next nonce, *aad*\n # authenticated with it; or an `HpkeError` once the sequence is at\n # 2^96 - 1, with nothing sealed.\n def seal(plaintext : String | Array(UInt8), aad : String | Array(UInt8) = \"\") : String | HpkeError\n # The sequence number the next message is sealed at.\n def sequence : UInt128\nend\n\n# A KEM, a KDF and an AEAD: what the two ends agree on before anything is\n# sealed, and what every function of sections 5 and 6 runs under.\npub struct HpkeSuite\n def aead : HpkeAead\n # The suite named by its three code points, or an `HpkeError` naming the\n # one this module does not have.\n def self.from_ids(kem_id : Int32, kdf_id : Int32, aead_id : Int32) : HpkeSuite | HpkeError\n def initialize(kem : HpkeKem, kdf : HpkeKdf, aead : HpkeAead)\n def kdf : HpkeKdf\n def kem : HpkeKem\n # Single-shot Open (section 6.1): the plaintext, or an `HpkeError`.\n def open(key : HpkePrivateKey, enc : String | Array(UInt8), info : String | Array(UInt8), aad : String | Array(UInt8), ciphertext : String | Array(UInt8), psk : String | Array(UInt8) | Nil = nil, psk_id : String | Array(UInt8) | Nil = nil, sender_public : HpkePublicKey | Nil = nil) : String | HpkeError\n # Single-shot ReceiveExport (section 6.2): what `send_export`\n # exported, or an `HpkeError` when *enc* is refused.\n def receive_export(key : HpkePrivateKey, enc : String | Array(UInt8), info : String | Array(UInt8), exporter_context : String | Array(UInt8), length : Int32, psk : String | Array(UInt8) | Nil = nil, psk_id : String | Array(UInt8) | Nil = nil, sender_public : HpkePublicKey | Nil = nil) : Array(UInt8) | HpkeError\n # SetupBaseR, SetupPSKR, SetupAuthR or SetupAuthPSKR (section 5.1): the\n # recipient's context for *enc*, or an `HpkeError` when *enc* is refused.\n # The mode is chosen as `sender`'s is, by *sender_public* in place of\n # the sender's key.\n def recipient(key : HpkePrivateKey, enc : String | Array(UInt8), info : String | Array(UInt8), psk : String | Array(UInt8) | Nil = nil, psk_id : String | Array(UInt8) | Nil = nil, sender_public : HpkePublicKey | Nil = nil) : HpkeRecipient | HpkeError\n # Single-shot Seal (section 6.1): enc and *plaintext* sealed, the\n # context's first message.\n def seal(recipient : HpkePublicKey, info : String | Array(UInt8), aad : String | Array(UInt8), plaintext : String | Array(UInt8), randomness : String | Array(UInt8), psk : String | Array(UInt8) | Nil = nil, psk_id : String | Array(UInt8) | Nil = nil, sender_key : HpkePrivateKey | Nil = nil) : ::Tuple(Array(UInt8), String) | HpkeError\n # Single-shot SendExport (section 6.2): enc and *length* bytes\n # exported under *exporter_context*.\n def send_export(recipient : HpkePublicKey, info : String | Array(UInt8), exporter_context : String | Array(UInt8), length : Int32, randomness : String | Array(UInt8), psk : String | Array(UInt8) | Nil = nil, psk_id : String | Array(UInt8) | Nil = nil, sender_key : HpkePrivateKey | Nil = nil) : ::Tuple(Array(UInt8), Array(UInt8)) | HpkeError\n # SetupBaseS, SetupPSKS, SetupAuthS or SetupAuthPSKS (section 5.1), by\n # which of *psk* and *psk_id*, and *sender_key*, are given: the sender's\n # context, whose `enc` goes to the recipient. An `HpkeError` when the\n # encapsulation is refused (*recipient* is an X25519 key of small order).\n def sender(recipient : HpkePublicKey, info : String | Array(UInt8), randomness : String | Array(UInt8), psk : String | Array(UInt8) | Nil = nil, psk_id : String | Array(UInt8) | Nil = nil, sender_key : HpkePrivateKey | Nil = nil) : HpkeSender | HpkeError\n def to_s : String\nend\n\nimpl Error for HpkeError\n def message : String\nend\n" }, { "name": "std/html", "path": "src/std/html.iyi", - "sourceSha256": "c0835a0e91d257c890403854675e0101ae51958f61abe453d812279515af40cc", + "sourceSha256": "1401e9af685296c118933d3bccb6999493877485adf307a6e9b036091c02f2ac", "surface": "module std/html\n\npub struct HTML\n # Escapes the five predefined HTML characters:\n # & -> &\n # < -> <\n # > -> >\n # \" -> "\n # ' -> '\n #\n # Every other byte is copied as it is, by the run: writing each byte as a\n # `Char` wrote a UTF-8 lead or continuation byte as the two-byte encoding\n # of that code point, so \"café\" came out as \"café\".\n def self.escape(string : String, io : IyiIO) : Nil\n def self.escape(string : String) : String\n def initialize\n # Returns Unicode codepoint for standard HTML named entity, or -1 if unknown.\n def self.named_entity_codepoint(name : String) : Int32\n # Unescapes HTML character references.\n # Handles:\n # - 253 standard named entities (e.g. &, ©, €); only the\n # legacy ones (&, ©, the other Latin-1 names) without the `;`\n # - Decimal numeric entities (e.g. <)\n # - Hexadecimal numeric entities (e.g. <, <)\n # - Bare & that is not an entity is preserved unchanged\n # - Unterminated entities are handled safely\n # - Out of range numeric entities are replaced with U+FFFD\n def self.unescape(string : String) : String\nend\n" }, { "name": "std/http", "path": "src/std/http.iyi", - "sourceSha256": "c7ddc59f99e543868102459ccd62385e941d6ac8e85de415eb34e30e57f71dcd", - "surface": "module std/http\n\n# A body as it arrives: from a connection, framed by its length, by chunks\n# or by the connection's close, or from a string already in hand. `read`\n# answers the next piece, \"\" once the body is done; what the other end\n# does wrong is an `HTTPError`, and a connection that fails or is\n# cancelled answers that. The first failure is kept: every read after it\n# answers the same. A body coded `gzip`, `deflate` or `zstd` is decoded\n# as it is read when the client asked for that.\n#\n# A body has a limit: past it a read answers an `HTTPError` with status\n# 413. The server's is `Server::MAX_BODY`; a client's is none.\npub class BodyReader\n # The body's coding undone from here on: `Envelope::Gzip` for gzip,\n # `Envelope::Zlib` for HTTP's deflate - which some servers send as the\n # bare stream instead, without zlib's two bytes of header, so the first\n # two bytes are looked at first, and a pair that is not a zlib header\n # (RFC 1950 §2.2: method 8, a multiple of 31) is read as the bare\n # stream. A body that does not decode is an `HTTPError` naming the\n # coding and why.\n def decode(envelope : Envelope) : Nil\n # The body's `zstd` coding (RFC 8878) undone from here on, by std/zstd's\n # `ZstdReader` as the pieces arrive, frames one after another. A frame\n # that asks for a window past *max_window* bytes is refused rather than\n # given the memory (a window outside 1 KiB to 512 MiB is a panic), and a\n # body that does not decode is an `HTTPError` naming the coding and why.\n def decode_zstd(max_window : Int32 = Zstd::WINDOW_LIMIT) : Nil\n # Reads past the rest of the body, *limit* bytes at most: whether it\n # ended within them. A server reads past what a block left unread, so\n # the next request on the connection starts where it should.\n def drain(limit : Int64) : Bool\n # Whether every byte of the body has been read, the framing's end too.\n def finished? : Bool\n # A body that arrives as an HTTP/2 stream's DATA: refused past *limit*.\n protected def self.frames(h2 : H2Connection, id : Int32, limit : Int64) : BodyReader\n def initialize(conn : Conn | ::Nil, kind : Int32, length : Int64, limit : Int64, text : String = \"\", hello : Proc(Bool) | ::Nil = nil)\n # Whether a server reading past the rest of this body, so that the next\n # request starts where it should, would close instead: its length says\n # more than *limit* bytes are left, or its client still waits for the\n # `100 Continue` its `Expect` asked for - which, written after the\n # answer, the client reads as its next request's, and the body it\n # holds back is then waited for. A chunked body's rest is not known\n # until it is read.\n def left_past?(limit : Int64) : Bool\n protected def on_frames(h2 : H2Connection, id : Int32) : Nil\n # The body's bytes as the framing delivers them, before any decoding.\n protected def raw(max : Int32) : String | Cancelled | SocketError | HTTPError\n # The next piece of the body, at most *max* bytes; \"\" when it is done.\n def read(max : Int32 = 65536) : String | Cancelled | SocketError | HTTPError\n # The rest of the body as one string, refused past *limit* bytes (413).\n # The pieces are kept as they arrive and joined once: a builder of the\n # length a head declared was made before any of it had come, and a head\n # that declared 64 MB and sent two bytes cost the server 64 MB.\n def read_all(limit : Int64 = 2147483647_i64) : String | Cancelled | SocketError | HTTPError\n protected def remember(fault : HTTPError | Cancelled | SocketError) : HTTPError | Cancelled | SocketError\n # A body that is a string already in hand.\n def self.text(text : String) : BodyReader\n # Whether the body ends where the connection does: nothing can follow\n # it on the connection.\n def to_close? : Bool\nend\n\n# What a streamed body is written to: an answer's `Response.stream`\n# block's, and a client's upload from an `IyiIO`. Each `write` goes out as\n# one chunk (RFC 9112 §7.1), or as it is where the connection's close ends\n# the body, so a block that writes a line a second is read a line a\n# second. Under a server's `compress`, each write is a gzip piece flushed\n# whole (std/compress's `Deflater`), which decodes as it arrives too. The\n# first failure is kept, and every write after it answers it; `finish`,\n# which the server calls when the block returns, writes the end.\npub class BodyWriter\n # The end of the body: the gzip trailer, and the last chunk with the\n # blank line after it. Once; the server's call after a block that\n # finished its own body writes nothing.\n def finish : Nil | Cancelled | SocketError\n def initialize(socket : IyiSocket | TlsStream | H2Out, chunked : Bool, deflater : Deflater | ::Nil = nil)\n def write(text : String) : Nil | Cancelled | SocketError\n # Bytes of the body written so far, before any framing or coding.\n def written : Int64\nend\n\n# What `HTTP.request`'s `jar:` keeps cookies in: the `Cookie` header a\n# request to a URL carries, and an answer's `Set-Cookie` lines taken in.\n# std/cookie's `CookieJar` is one; std/http itself reads no clock, so the\n# expiry of a cookie is the store's to keep.\npub trait CookieStore\n abstract def header_for(url : String) : String | ::Nil\n abstract def update(url : String, response : Response) : Nil\nend\n\npub struct HTTP\n # For a request target in absolute form (RFC 9112 §3.2.2), where its\n # authority starts: after `http://` or `https://`, in any case.\n def self.absolute_form(target : String) : Int32 | ::Nil\n # Whether a list of codings a client accepts (`Accept-Encoding`, RFC\n # 9110 §12.5.3) takes *coding*: named, or `*`, with a `q` above 0.\n def self.accepts?(list : String, coding : String) : Bool\n # A 1xx, 204 or 304: an answer with no content (RFC 9110 §15).\n def self.bodiless?(status : Int32) : Bool\n # Where a chunked body that starts at *from* ends in `text` — the byte\n # after the last chunk's terminating CRLF (trailers included) — nil when\n # it has not all arrived, or why it is not a chunked body. What\n # `decode_chunked` will then read whole.\n def self.chunked_end(text : String, from : Int32 = 0) : Int32 | String | Nil\n # How much a list of codings a client accepts wants *coding*, as its\n # `q` in thousandths: the weight it is named with, else `*`'s, else 0 -\n # and 0 refuses it.\n def self.coding_weight(list : String, coding : String) : Int32\n # A `Content-Length` as a number, or nil when it is not one. Repeated\n # lines arrive joined, and are one length only when every one says the\n # same (RFC 9112 §6.3). A length past 2147483647 is still a length, too\n # large for either side, and is read as one past it: `to_i?` answered\n # nil for it, and 3000000000 was refused as \"not a number\".\n def self.content_length(value : String) : Int64 | ::Nil\n # A control character other than a tab, or DEL: what a field value may\n # not hold (RFC 9110 §5.5), nor a request target or a reason phrase.\n def self.control?(text : String) : Bool\n # The pairs of a request's `Cookie` header, `a=1; b=2` (RFC 6265 §4.2),\n # a value's quotes taken off; the first of a name is kept, as a server\n # reads the most specific cookie first.\n def self.cookie_pairs(value : String) : Hash(String, String)\n # A chunked body (RFC 9112 §7.1) as one string: each chunk's size line\n # is hexadecimal, extensions after `;` are ignored, and a zero-length\n # chunk ends it. What follows the last chunk is trailers, which nothing\n # here reads.\n def self.decode_chunked(text : String) : String\n def self.delete(url : String, headers : Hash(String, String) = {} of String => String) : Response | Cancelled | SocketError | HTTPError\n def self.find_headers_end(text : String, from : Int32 = 0) : Int32 | ::Nil\n # The request as it goes on the wire, whole. `Host`, `Connection` and\n # `Content-Length` are the request's own lines; a caller's header of\n # that name is refused rather than sent twice. A body's length is\n # always written for the methods a body belongs to, so `POST` with\n # nothing to say still says `Content-Length: 0`. A byte of the path past\n # 127 goes as `%` and two hex digits: a request target is ASCII (RFC\n # 9112 §3.2, RFC 3986 §2.1), and `/ü` went out as its UTF-8 bytes, raw.\n def self.format_request(method : String, path : String, host : String, body : String = \"\", headers : Hash(String, String) = {} of String => String) : String\n def self.get(url : String, headers : Hash(String, String) = {} of String => String) : Response | Cancelled | SocketError | HTTPError\n # *text* in gzip, whole: an answer's body under a server's `compress`.\n def self.gzip(text : String) : String\n # A writer whose body goes out in gzip as it is written.\n def self.gzip_writer(socket : IyiSocket | TlsStream | H2Out, chunked : Bool) : BodyWriter\n def self.has_break?(text : String) : Bool\n # Whether a list of tokens (RFC 9110 §5.6.1), its repeated lines joined\n # with \", \", holds *token*, in any case.\n def self.has_token?(list : String, token : String) : Bool\n def self.head(url : String, headers : Hash(String, String) = {} of String => String) : Response | Cancelled | SocketError | HTTPError\n # The value of a chunk size's hex digits, nil for anything else or for\n # one past what an Int32 holds.\n def self.hex(text : String) : Int32 | ::Nil\n # *n* in lowercase hexadecimal: a chunk's size line.\n def self.hex_text(n : Int64) : String\n # A Host value - the `a` of `Host: a` - or an absolute-form target's\n # authority, made of what a host and its port are spelled with (RFC 3986\n # §3.2.2, §3.2.3): a name, an IPv4 address or an IPv6 one in brackets,\n # and digits after a colon. Empty is one too, for a target with no\n # authority (RFC 9112 §3.2). A blank, a `/`, an `@` - the bytes another\n # host or a path begins with - are not.\n def self.host?(text : String) : Bool\n # The endpoints *answer*'s ServiceMode records name for a client whose\n # configuration offers *alpn* by ALPN (none: it speaks http/1.1 alone),\n # to an origin on *port*, in the order to try them: a record whose\n # mandatory keys are not all ones std/dns reads, or whose protocols -\n # alpn, and http/1.1 unless no-default-alpn - hold none of the client's,\n # names none (RFC 9460 sections 7.1.2 and 8), and neither does one whose\n # target is not a host name. Each is the record's target, or its owner\n # for \".\"; its port, or *port*; its `ech` where the ECHConfigList holds\n # a config std/tls can use (RFC 9849 section 6.1), nil otherwise; and\n # *alpn* with the protocols the record's alpn lists first, in *alpn*'s\n # order otherwise.\n def self.https_endpoints(answer : SvcbAnswer, alpn : Array(String), port : Int32) : Array(HttpsEndpoint)\n def initialize\n # One request, and the block's answer to the response, its body still\n # arriving: `response.body_io.read` takes it a piece at a time, and\n # `response.body` all of it. The connection closes when the block\n # returns. A body of *body* is a string, sent with its length, or an\n # `IyiIO`, sent chunked as it is read - which a redirect that keeps the\n # method (307, 308) cannot send again, so that answer is handed to the\n # block as it is.\n #\n # The redirects followed are RFC 9110 §15.4's: 301 and 302 make a POST a\n # GET, 303 makes anything but a HEAD a GET, and 307 and 308 keep the\n # method and the body. `Authorization`, `Proxy-Authorization` and\n # `Cookie` written by the caller are not sent to another scheme, host or\n # port - `https://` to `http://` at one host included, as curl does (Go\n # strips them for another host) - and a jar's `Secure` cookies go over\n # `https://` alone. The downgrade itself is followed, as Go's client and\n # `curl -L` follow it; any other header the caller wrote, and a 307 or\n # 308's body, go on in the clear. One more than *redirects* is an\n # `HTTPError`; with 0 the first answer is the block's.\n #\n # *timeout_ms* bounds the connect, and each read and write after it -\n # a pause, not the whole exchange, as Python's `timeout` is: a body that\n # keeps arriving is read for as long as it takes. One that runs out is a\n # `SocketError` whose `timed_out?` is true. 0, the default, waits as\n # long as the server does, as Go's and Python's clients do; a client\n # that talks to servers it does not control should give one.\n #\n # *proxy* is a proxy's URL - `http://user:password@host:port`, or\n # `host:port` alone - and every request goes through it, every redirect\n # too: `http://` as an absolute-form request to the proxy (RFC 9112\n # §3.2.2), which carries `Proxy-Authorization: Basic` when the URL has\n # a user; `https://` through a tunnel the proxy opens with `CONNECT\n # host:port` (RFC 9110 §9.3.6), the credential on the CONNECT alone and\n # TLS to the server inside it, its certificate checked as without a\n # proxy. A caller's own `Proxy-Authorization` is the proxy's too: sent\n # on the CONNECT when the URL has no user, and never inside the tunnel.\n # A CONNECT answered with anything but a 2xx - 407 when the proxy wants\n # credentials, 403, 502 - is an `HTTPError` naming the proxy and its\n # answer. `http://` through a proxy is HTTP/1.1 whatever\n # *prior_knowledge* says. Which proxy, if any, a URL's environment\n # names is `proxy_for`'s, and std/http_proxy's `HTTPProxy.from_env`.\n def self.open(method : String, url : String, headers : Hash(String, String) = {} of String => String, body : String | IyiIO = \"\", redirects : Int32 = 10, jar : CookieStore | ::Nil = nil, decompress : Bool = true, client : HTTPClient | ::Nil = nil, timeout_ms : Int32 = 0, proxy : String | ::Nil = nil, &block : (Response -> R)) : R | Cancelled | SocketError | HTTPError forall R\n # The field lines after the first, or why they are not fields. A name\n # repeated, in any case, is one field, its values joined in order with\n # \", \" (RFC 9110 §5.3): into a Hash by name, a second line spelled the\n # same replaced the first and one spelled otherwise was an entry\n # `header` never reached, so two different `Content-Length`s were read\n # as whichever came first or last. A value with a control character in\n # it - a CR or LF that ends no line, a NUL - is refused (§5.5) rather than\n # handed to whoever reads it or echoes it into a header.\n #\n # *unfold*, for an answer: a line that begins with a blank continues the\n # field above it (obs-fold, RFC 9112 §5.2), and a user agent joins it on\n # with one space; read as a field of its own, `HTTP.get` panicked with\n # \"header without a colon: \\\" b\\\"\". A server may refuse one, and this\n # one does.\n #\n # *apart*, when given, is handed each repeated field's values by the\n # name in the answer, a line each, before they are joined.\n def self.parse_fields(lines : Array(String), unfold : Bool = false, apart : Hash(String, Array(String)) | ::Nil = nil) : Hash(String, String) | String\n # The response as it came off the wire, whole. `head` says the request\n # was a `HEAD`, whose answer carries the headers of a body it does not\n # send. An interim answer - `100 Continue`, `103 Early Hints` - is read\n # past to the final one after it (RFC 9110 §15.2). A `101` switches\n # protocols, and HTTP ends with it. What is not a response panics with\n # why: this is the text a program has in hand; the client answers the\n # same sentences as `HTTPError`s.\n def self.parse_response(text : String, head : Bool = false) : Response\n # A response's head - the text before its blank line - read: status,\n # reason, the fields, and the lines of those on more than one. A line\n # that begins with a blank continues the field above it (obs-fold, RFC\n # 9112 §5.2), which a user agent joins on with one space.\n def self.parse_response_head(text : String) : ::Tuple(Int32, String, Hash(String, String), Hash(String, Array(String)) | ::Nil) | HTTPError\n # Where *text* goes on at *from* past the empty lines there: what a\n # server skips before a request line (RFC 9112 §2.2).\n def self.past_empty_lines(text : String, from : Int32) : Int32\n def self.post(url : String, body : String | IyiIO = \"\", headers : Hash(String, String) = {} of String => String) : Response | Cancelled | SocketError | HTTPError\n # The proxy a request for *url* goes through, given the values of\n # `HTTP_PROXY`, `HTTPS_PROXY` and `NO_PROXY` - nil when it goes\n # direct. Go's `golang.org/x/net/http/httpproxy` is the rule, line for\n # line, as its documentation and tests state it:\n #\n # * `https://` takes *https_proxy*, `http://` *http_proxy*, any other\n # scheme none. A proxy written without a scheme is `http://`'s, and is\n # answered with it, ready for `open`'s *proxy*.\n # * `localhost` (in lower case: Go's comparison) and a loopback address\n # (127.0.0.0/8, ::1, the first as IPv4-mapped too) never go through a\n # proxy.\n # * *no_proxy* is a comma-separated list, each entry trimmed and read\n # without regard to case: `*` alone sends everything direct; an IP\n # address or a CIDR range (`10.0.0.0/8`, `2001:db8::/32`) matches the\n # addresses in it, IPv4 and its IPv4-mapped form alike, and a CIDR\n # range of one family never the other's; a domain matches itself and\n # every name under it (`foo.com`: `foo.com`, `bar.foo.com`, not\n # `barfoo.com`); with a leading dot, or `*.`, only the names under it\n # (`.y.com`: `x.y.com`, not `y.com`). An address or domain may carry\n # a port (`1.2.3.4:80`, `[::1]:443`, `foo.com:8080`), and matches\n # then on that port alone, the URL's own or its scheme's default.\n # An entry that is none of these (`:80`) is passed over.\n # * A host is compared as IDNA's ASCII form, as Go compares it.\n #\n # Pure: the values are the caller's, so std/http reaches no environment;\n # std/http_proxy reads them from it.\n def self.proxy_for(url : String, http_proxy : String | ::Nil, https_proxy : String | ::Nil, no_proxy : String | ::Nil = nil) : String | ::Nil\n def self.put(url : String, body : String | IyiIO = \"\", headers : Hash(String, String) = {} of String => String) : Response | Cancelled | SocketError | HTTPError\n # The reason phrase a status carries (RFC 9110 §15), for a response the\n # server writes; a status this table does not know gets its class's.\n def self.reason_for(status : Int32) : String\n # One request and its whole answer: the answer as `open` hands it, its\n # body read. Redirects are followed, *redirects* at most; *jar* keeps\n # the cookies the answers set and sends them back; *decompress* asks\n # for gzip, deflate and zstd and undoes them. A refused or reset\n # connection answers `SocketError`; a task cancelled answers\n # `Cancelled`; what the server does wrong answers `HTTPError`. `!`\n # passes any of them up, `.or_panic` refuses it.\n def self.request(method : String, url : String, headers : Hash(String, String) = {} of String => String, body : String | IyiIO = \"\", redirects : Int32 = 10, jar : CookieStore | ::Nil = nil, decompress : Bool = true, timeout_ms : Int32 = 0, proxy : String | ::Nil = nil) : Response | Cancelled | SocketError | HTTPError\n # A request's head: the request line, `Host`, `Connection` (*connection*:\n # `close`, or `Upgrade`), the caller's headers, and the body's framing -\n # *length*, chunks, or none.\n def self.request_head(method : String, path : String, host : String, headers : Hash(String, String), length : Int64 | ::Nil, chunked : Bool, connection : String) : String\n # Two field names for the same field: ASCII case is the only difference\n # a name may carry.\n def self.same_name?(a : String, b : String) : Bool\n def self.split_crlf(text : String) : Array(String)\n # A status line read: the status and its reason, or why it is not one.\n def self.status_line(line : String) : ::Tuple(Int32, String) | HTTPError\n # What an `https://` request is checked against and offers: the\n # system's roots, and ALPN's `http/1.1`, unless a program sets its own -\n # roots of its own for a server it runs, say.\n def self.tls_config : TlsConfig\n def self.tls_config=(config : TlsConfig) : TlsConfig\n # A token (RFC 9110 §5.6.2): what a method or a field name is made of.\n def self.token?(text : String) : Bool\n # Without the blanks at either end (RFC 9112 §5.1: field values are\n # trimmed of the whitespace around them).\n def self.trim(s : String) : String\n # The 101 an upgrade to *protocol* is answered with, and the connection,\n # which is the caller's from then on: std/websocket's handshake. Any\n # other answer is an `HTTPError` naming it.\n #\n # *proxy* is `open`'s, and so is its credential, on the CONNECT alone;\n # but an upgrade goes through a tunnel for `http://` as for `https://`,\n # the handshake inside it in origin form. `Upgrade` belongs to the\n # connection it is sent on (RFC 9110 §7.8), and a proxy forwarding a\n # request removes `Connection` and every field it names (§7.6.1), so a\n # handshake handed to a forward proxy in absolute form reaches the\n # server, at best, as a plain GET: the gate's proxy, which drops\n # `Connection`, leaves std/websocket's server a request it answers 400.\n def self.upgrade(url : String, protocol : String, headers : Hash(String, String) = {} of String => String, timeout_ms : Int32 = 0, proxy : String | ::Nil = nil) : Upgraded | Cancelled | SocketError | HTTPError\nend\n\n# Requests that keep their connections: an `HTTPClient` holds the connections\n# its answers left open, by host and port, and the next request to that\n# server goes over one of them instead of a new one - the TCP handshake,\n# and the slow start after it, paid once rather than per request. Its\n# methods are `HTTP`'s, redirects, cookies and decoding included:\n#\n# ```\n# client = HTTPClient.new\n# client.get(\"http://127.0.0.1:8080/a\")\n# client.get(\"http://127.0.0.1:8080/b\") # the same connection\n# client.close\n# ```\n#\n# A connection goes back once its answer has been read to the end (inside\n# `open`, up to 64 KiB left unread is read past for it) and the answer\n# allows it; at most *idle* wait per server, and the rest close. A server\n# may close an idle connection whenever it likes (RFC 9112 §9.3.1), so a\n# request whose kept connection turns out closed - the write fails, or it\n# ends before a byte of an answer - is sent again once on a new one, when\n# its method is idempotent (RFC 9110 §9.2.2) and its body a string;\n# anything else answers the failure. One task at a time per request: two\n# tasks sending at once take two connections, and a client is not for\n# sharing across threads. An `https://` connection is kept under the\n# `HTTP.tls_config` it was made with, and handed only to a request made\n# under the same one (`TlsMadeUnder`): after `HTTP.tls_config=` the next\n# request makes a connection of its own, checked against the new roots.\n# A client made with *tls* uses that configuration instead of\n# `HTTP.tls_config`, and one made with *resolver* finds its hosts by it\n# instead of `Resolver.system` - an encrypted resolver, or a hosts text\n# that pins a name to an address: std/secure_dns's `DnsOverHttps` is a\n# client of its own with both, so its server is checked against the roots\n# it was given and reached at the address it was given.\n#\n# A client resumes TLS sessions (RFC 8446 §2.2): the tickets an\n# `https://` server sends are kept for its origin - scheme, host and\n# port, whichever proxy's tunnel they came through - under the TLS\n# configuration they came under, the client's own *tls* or else\n# `HTTP.tls_config` (`TlsMadeUnder`, as a kept connection is), and a new\n# connection to that origin offers the newest, each once.\n# A resumed handshake checks no certificate - the ticket stands for the\n# check the first one made - so a ticket is never offered to another\n# origin, nor under another configuration: after `HTTP.tls_config=`, or\n# roots, an identity, `now`, `min_version` or `require_staple` assigned\n# in place - in `HTTP.tls_config` or in the client's own *tls* - the next\n# connection is a full handshake under the new ones, and that origin's\n# tickets from under the old one are dropped. (std/tls's `TlsSession`\n# holds each ticket to its configuration too; this client drops them\n# where that one would only pass them over.) At most *origin_tickets* are\n# kept an origin - 4 by default, so that as many connections as *idle*\n# keeps by default can resume at once, where std/tls's server and\n# OpenSSL's send 2 a handshake - and *tickets* in all, 256 by default: as\n# many origins as that leaves room for at *origin_tickets* each, the one\n# longest unused dropped first. 0 for either keeps none, and nothing\n# resumes. `close`\n# leaves them. Nothing goes early (0-RTT), whatever a ticket allows: the\n# module's header says why. `connections_resumed`, `tickets_held` and\n# `Response#tls_resumed?` say what was kept and used. What it saves, by\n# bench/std_http_resume.iyi built --release on a 12-core machine other\n# jobs shared (medians of 200, the middle of three runs): the handshake\n# took 0.96 ms full and 0.51 resumed against std/http's server, 1.03 and\n# 0.57 against OpenSSL 3.5's s_server - and a GET on a new connection,\n# which waits about 40 ms at each iyi end that is not the handshake's,\n# 82.98 ms and 82.00, and 42.04 and 40.96.\n#\n# Over HTTP/2 - `https://` where ALPN chose `h2`, or `http://` with\n# *prior_knowledge* (h2c, RFC 9113 §3.3) - a kept connection carries the\n# next request on a new stream, until the server says GOAWAY.\n#\n# HTTPS records (RFC 9460), when `use_https_records` is set: before a new\n# connection to an `https://` origin - not through a proxy, and not for\n# an upgrade - the client asks its resolver for the origin's HTTPS\n# records (`Resolver#https_records`, AliasMode followed) and connects by\n# the first ServiceMode record it can use: one whose mandatory keys it\n# knows - the seven std/dns reads, port and no-default-alpn mandatory by\n# being there (section 9) - and whose protocols (alpn, and http/1.1\n# unless no-default-alpn) hold one of the configuration's `alpn`, or\n# http/1.1 where that is empty. Its target - the record's owner for \".\"\n# - and its port, or the origin's, are where the connection goes; its\n# `ech` is the connection's `ech_configs` (RFC 9848); and the protocols\n# it lists go first in the ClientHello's ALPN, which still offers every\n# one the configuration does (section 7.1.2: a record says which\n# protocols the endpoint has, and cannot take one away). The certificate\n# is checked, and the server named inside, for the origin's host,\n# whatever the target (section 2.3). An `ech` whose ECHConfigList holds\n# no config std/tls can use is passed over, as RFC 9849 section 6.1 has\n# it. The address hints are not read: the target's addresses are asked\n# for as any host's are.\n#\n# An endpoint that does not connect gives way to the next, then to the\n# last AliasMode target and to the origin itself (section 3) - unless\n# every endpoint carries `ech`, when the request fails rather than name\n# the server in the clear (RFC 9848 section 5.1). A TLS refusal is the\n# request's failure, but for one: a server that turned the encrypted\n# ClientHello down, its certificate checked for the config's\n# public_name, is asked once more on a new connection to the same\n# address, under the retry_configs it sent, or without ECH where it sent\n# none, which turns ECH off there (RFC 9849 section 6.1.6); a refusal of\n# that is the failure. No records (NXDOMAIN, NODATA), a set section 2.2\n# refuses, an AliasMode \".\" (the service says it is not there), or no\n# record the client can use: the connection is made as without records.\n# So is one whose lookup failed through a resolver that asks in the\n# clear, as section 3.1 lets a client choose; through encrypted\n# upstreams the failure is the request's, as section 3.1 asks, for\n# there the one who can drop the answer is an attacker taking the\n# records away. `localhost` and addresses are not asked about, and an\n# `http://` URL is not made `https://` by its records (section 9.5's\n# SHOULD): the program wrote the scheme.\n#\n# A record's `ech` and protocols make a configuration of their own - a\n# copy of the client's, made once and kept for the origin while the same\n# ones come under the same configuration - so that a kept connection and\n# a ticket are handed on only under the record they were made by\n# (`TlsMadeUnder` holds `ech_configs`). Off by default: every new\n# connection then waits on one DNS answer or more before its ClientHello\n# (RFC 9848 section 5.3 forbids sending it sooner), with no cache to\n# spare the next, and the records may move a connection to another host\n# and port, which is the program's to ask for.\npub class HTTPClient\n # Every idle connection closed. The client may be used after; it opens\n # new ones.\n def close : Nil\n # Connections this client has opened, and requests sent over one it\n # kept: what a program reads to see that its connections are kept.\n def connections_made : Int32\n # Connections this client opened whose TLS handshake resumed a session\n # by a ticket it kept.\n def connections_resumed : Int32\n def connections_reused : Int32\n def delete(url : String, headers : Hash(String, String) = {} of String => String) : Response | Cancelled | SocketError | HTTPError\n def get(url : String, headers : Hash(String, String) = {} of String => String) : Response | Cancelled | SocketError | HTTPError\n protected def give_back(key : String, conn : Conn) : Nil\n def head(url : String, headers : Hash(String, String) = {} of String => String) : Response | Cancelled | SocketError | HTTPError\n # The configuration a connection to *origin* is made under by a record\n # whose `ech` is *ech* (nil: none) and whose protocols put *alpn* in its\n # order, *base* being the client's own or `HTTP.tls_config`: *base*\n # itself where those are its own, and otherwise a copy of it with them -\n # the same object every time while *base* is the same (`TlsMadeUnder`),\n # so that a connection kept and a ticket held under it serve the next\n # connection by the same record. It becomes the one the origin's kept\n # connections are taken under (`https_current`). The origin's\n # configurations from under another *base* go.\n protected def https_config(origin : String, base : TlsConfig, ech : Array(UInt8) | ::Nil, alpn : Array(String)) : TlsConfig\n # The configuration *origin*'s last connection by HTTPS records was made\n # under, while *base* is the one it came from - *base* itself where it\n # was made as without records: what a kept connection to the origin\n # must have been made under to be taken. Nil when none was made by them\n # under *base*, and then none is taken.\n protected def https_current(origin : String, base : TlsConfig) : TlsConfig | ::Nil\n # *timeout_ms* and *proxy* are `HTTP.open`'s, for every request the\n # client sends; *tls* and *resolver* are this client's own (above);\n # *origin_tickets* and *tickets* bound the TLS tickets kept, by origin\n # and in all.\n def initialize(idle : Int32 = 4, timeout_ms : Int32 = 0, prior_knowledge : Bool = false, proxy : String | ::Nil = nil, tls : TlsConfig | ::Nil = nil, resolver : Resolver | ::Nil = nil, origin_tickets : Int32 = 4, tickets : Int32 = 256)\n protected def made : Nil\n def open(method : String, url : String, headers : Hash(String, String) = {} of String => String, body : String | IyiIO = \"\", redirects : Int32 = 10, jar : CookieStore | ::Nil = nil, decompress : Bool = true, &block : (Response -> R)) : R | Cancelled | SocketError | HTTPError forall R\n def post(url : String, body : String | IyiIO = \"\", headers : Hash(String, String) = {} of String => String) : Response | Cancelled | SocketError | HTTPError\n # `http://` spoken as HTTP/2 from the first byte, without asking: for a\n # server known to take it.\n def prior_knowledge : Bool\n # The proxy every request goes through, `HTTP.open`'s *proxy*; its\n # connections are kept under it.\n def proxy : String | ::Nil\n def put(url : String, body : String | IyiIO = \"\", headers : Hash(String, String) = {} of String => String) : Response | Cancelled | SocketError | HTTPError\n def request(method : String, url : String, headers : Hash(String, String) = {} of String => String, body : String | IyiIO = \"\", redirects : Int32 = 10, jar : CookieStore | ::Nil = nil, decompress : Bool = true) : Response | Cancelled | SocketError | HTTPError\n # What turns a host name into addresses for this client's connections,\n # instead of `Resolver.system`: encrypted upstreams, or a hosts text\n # alone that pins a name to an address, as std/secure_dns's\n # `DnsOverHttps` pins its server's.\n def resolver : Resolver | ::Nil\n protected def resumed : Nil\n # The session a new connection to *origin* under *tls* offers a ticket\n # from and keeps the server's new ones in; nil when the client keeps\n # none. The origin's tickets from under another configuration are\n # dropped, not left to take room that `TlsSession` would never offer\n # them from. The session handed out is the newest used; past the room\n # *tickets* leaves, the oldest goes.\n protected def session_for(origin : String, tls : TlsConfig) : TlsSession | ::Nil\n # A kept connection to *key*, nil when none waits. An HTTP/2 connection\n # that can take no more requests is closed rather than handed out, and\n # so is an `https://` one made under another TLS configuration than\n # *tls*, the one the request is made under (`TlsMadeUnder`): keyed by\n # scheme, host and port alone, a connection whose server was checked\n # against one set of roots carried requests after `HTTP.tls_config=`\n # named others that would have refused it.\n protected def take(key : String, tls : TlsConfig | ::Nil = nil) : Conn | ::Nil\n # The TLS tickets held for *origin* - `https://host:port`, the host in\n # lower case and the port written even where it is 443 - or for every\n # origin when nil.\n def tickets_held(origin : String | ::Nil = nil) : Int32\n # What this client's `https://` requests are checked against and offer,\n # instead of `HTTP.tls_config`: roots of its own, or ALPN's `h2` first.\n def tls : TlsConfig | ::Nil\n # Whether a new `https://` connection is made by the origin's HTTPS\n # records (the class's header); off by default.\n def use_https_records : Bool\n # Whether a new `https://` connection is made by the origin's HTTPS\n # records (the class's header); off by default.\n def use_https_records=(value : Bool) : Bool\nend\n\n# What the other end did that HTTP does not allow, as a value: `reason` is\n# the sentence, `status` the answer a server gives a request that did it\n# (400, or 413 and 431 for the limits). `message` says it is HTTP's.\npub struct HTTPError\n def initialize(reason : String, status : Int32 = 400)\n def reason : String\n def status : Int32\n def to_s : String\nend\n\n# One endpoint an origin's HTTPS records name, as `HTTP.https_endpoints`\n# reads it: the host and port to connect to, the ECHConfigList to encrypt\n# the ClientHello under (nil: none), and the protocols to offer by ALPN,\n# in order.\npub struct HttpsEndpoint\n def alpn : Array(String)\n def ech : Array(UInt8) | ::Nil\n def host : String\n def initialize(host : String, port : Int32, ech : Array(UInt8) | ::Nil, alpn : Array(String))\n def port : Int32\nend\n\n# A `multipart/form-data` body (RFC 7578) read a part at a time, as it\n# arrives: `next_part` answers the next `Part`, nil after the last, and a\n# part's `read` answers its bytes up to the boundary, \"\" at its end. A part\n# not read to its end is read past by the next `next_part`. The body of a\n# request is `Request#multipart`'s; any `BodyReader` and boundary will do.\n# A part's head is refused past 16 KiB, and a body that ends before its\n# closing boundary is an `HTTPError`.\npub class Multipart\n # The boundary a `Content-Type` of `multipart/...` names, nil when it\n # names none - or one of a length RFC 2046 §5.1.1 does not allow, 1 to\n # 70 characters, which `new` refuses with a panic. The type is the\n # peer's: `Request#multipart` handed a client's 90-character boundary\n # through to that panic (found by bench/std_fuzz_exercise.sh).\n def self.boundary(content_type : String) : String | ::Nil\n # Where *pattern* is in what is held, -1 when it is not there yet.\n protected def find(pattern : String) : Int32\n def initialize(body : BodyReader, boundary : String)\n # The next part, nil after the last.\n def next_part : Part | Nil | Cancelled | SocketError | HTTPError\n # Up to *max* bytes of the part being read, \"\" at its boundary. What is\n # held back is what may yet be the start of the boundary.\n protected def part_read(max : Int32) : String | Cancelled | SocketError | HTTPError\n # One more piece of the body onto what is held: false at its end.\n protected def pull : Bool | Cancelled | SocketError | HTTPError\nend\n\n# A multipart/form-data body to send: fields and files in order. Its\n# boundary is chosen when the body is first asked for - `finish`,\n# `content_type` or `boundary`, whichever comes first, after which no\n# part is added - as `iyi-` and 32 hex digits of the parts' SHA-1, made\n# again from itself in the rare case a part holds it: so it is none of\n# the parts' bytes by construction rather than by chance, the same\n# fields make the same body, and std/http reaches no source of\n# randomness for it. A boundary given to `new` is used as it is, and a\n# part that holds it is refused.\npub class MultipartBuilder\n def boundary : String\n def content_type : String\n def field(name : String, value : String) : self\n def file(name : String, filename : String, data : String, content_type : String = MIME.from_extension(filename)) : self\n # The body, closing boundary and all.\n def finish : String\n # The boundary ends a part where it follows a CRLF, the part's first\n # bytes included, which follow the head's blank line.\n protected def self.holds?(data : String, mark : String) : Bool\n def initialize(boundary : String | ::Nil = nil)\n # A name inside quotes, as browsers write one: a quote and a line break\n # percent-encoded (the WHATWG form encoding), so no field can end the\n # parameter or the line early.\n protected def self.quoted(text : String) : String\nend\n\n# One part of a multipart body: its head's fields, its name and file name\n# from `Content-Disposition`, and its bytes, read up to its boundary.\npub class Part\n def content_type : String | ::Nil\n # The file name a browser sent the part under, `filename=`.\n def filename : String | ::Nil\n def finished? : Bool\n def header(name : String) : String | ::Nil\n def headers : Hash(String, String)\n def initialize(owner : Multipart, headers : Hash(String, String))\n # The form field's name, `name=` of `Content-Disposition`.\n def name : String | ::Nil\n # The part's next bytes, at most *max*; \"\" at its end.\n def read(max : Int32 = 65536) : String | Cancelled | SocketError | HTTPError\n # The rest of the part as one string, refused past *limit* bytes.\n def read_all(limit : Int64 = 2147483647_i64) : String | Cancelled | SocketError | HTTPError\nend\n\n# What a server's block is handed: one request. Its body is `body`, read\n# whole before the block ran, or under `stream_bodies` read by the block\n# from `body_io` as it arrives; `body` then reads the rest itself, and a\n# body that cannot be read - the client went, or sent one that is not\n# HTTP - ends the connection with that sentence rather than be answered as\n# if it were whole.\npub class Request\n def body : String\n def body_io : BodyReader\n # The pairs of the request's `Cookie` header, the first of a name kept.\n def cookies : Hash(String, String)\n # The fields of a form: the query's, and an\n # `application/x-www-form-urlencoded` body's after them. The body is\n # read for it.\n def form : Params\n def header(name : String) : String | ::Nil\n def headers : Hash(String, String)\n # A request whose body is in hand: what `parse_request` answers.\n def initialize(method : String, path : String, query : String | ::Nil, headers : Hash(String, String), body : String, version : String = \"HTTP/1.1\", remote_address : String | ::Nil = nil)\n # A request whose body is still on the connection.\n def initialize(method : String, path : String, query : String | ::Nil, headers : Hash(String, String), version : String, reader : BodyReader, remote_address : String | ::Nil = nil)\n def method : String\n # The body as `multipart/form-data` parts, read as they arrive; nil when\n # the `Content-Type` is not multipart or names no boundary\n # (`Multipart.boundary`).\n def multipart : Multipart | ::Nil\n def path : String\n # The client's certificate chain, leaf first, as std/tls checked it:\n # under `serve(tls:)` with `client_roots` set, the certificate the\n # client presented; empty otherwise.\n def peer_certificates : Array(Certificate)\n # The client's certificate chain, leaf first, as std/tls checked it:\n # under `serve(tls:)` with `client_roots` set, the certificate the\n # client presented; empty otherwise.\n def peer_certificates=(value : Array(Certificate)) : Array(Certificate)\n def query : String | ::Nil\n # The client's address, as the server's socket saw it (no port): nil\n # for a request a program made, or when the client had already gone. A\n # proxy in front is what this names; `X-Forwarded-For` is the proxy's\n # word, and a header any client can write.\n def remote_address : String | ::Nil\n def tls_resumed=(resumed : Bool) : Bool\n # Whether the TLS connection the request came over resumed a session by\n # a ticket, under `serve(tls:)`: its `peer_certificates` are then the\n # ticket's. False in the clear.\n def tls_resumed? : Bool\n def version : String\nend\n\n# A response: what a server's block answers, and what a client is handed.\n#\n# To write one: `Response.new(200, \"hello\")`, a status and a string;\n# `Response.new(200, io)`, a stream the server copies out and closes, with\n# the caller's `Content-Length` when it gives one and chunked otherwise;\n# `Response.stream(200) { |w| w.write(\"...\") }`, whose block writes as it\n# goes; `Response.upgrade(headers) { |socket, leftover| ... }`, a 101 after\n# which the connection is the block's. `add_header` writes a field on a\n# line of its own, as each `Set-Cookie` must be.\n#\n# What a client is handed: the status, reason and headers, and the body -\n# `body` whole, or `body_io` as it arrives inside `HTTP.open`'s block.\npub class Response\n # One more line of the field *name*, written on a line of its own: what\n # two `Set-Cookie`s need, since the \", \" a field's lines are joined with\n # is part of a cookie's date.\n def add_header(name : String, value : String) : Nil\n # The lines of each field written on more than one, by its name in\n # `headers`; nil when every field is on one line.\n def apart : Hash(String, Array(String)) | ::Nil\n # The body: whole. Inside `HTTP.open`'s block it is read here, the first\n # time it is asked for, and a body that cannot be read panics with why;\n # `body_io` answers that as a value.\n def body : String\n # The body as it arrives. For a response a program made, its string.\n def body_io : BodyReader\n # Whether the client undid the body's `gzip`, `deflate` or `zstd`\n # coding; the `Content-Encoding` and `Content-Length` that described it\n # are gone from the headers then.\n def decoded? : Bool\n # A header by name, as the server spelled it or otherwise: a field\n # name is case-insensitive (RFC 9110 §5.1), and `content-length` is as\n # common on the wire as `Content-Length`.\n def header(name : String) : String | ::Nil\n # A field's lines apart, in the order they came: `header` joins them\n # with \", \", and `Set-Cookie` is the field that join breaks (RFC 9110\n # §5.3), since a cookie's `Expires` date has a comma in it - two cookies\n # read as \"a=1; Expires=Wed, 21 Oct 2026 07:28:00 GMT, b=2\", which no\n # split takes back apart. Empty for a field that is not there.\n def header_values(name : String) : Array(String)\n def headers : Hash(String, String)\n # A response a client read: its body comes from *reader*, and *url* is\n # where it came from.\n def initialize(status : Int32, reason : String, headers : Hash(String, String), apart : Hash(String, Array(String)) | ::Nil, reader : BodyReader, url : String, decoded : Bool)\n def initialize(status : Int32, reason : String, headers : Hash(String, String), body : String, apart : Hash(String, Array(String)) | ::Nil = nil)\n # A response to write: the reason is the status's own, the headers the\n # caller's. `Response.new(200, \"hello\")` is the common shape.\n def initialize(status : Int32, body : String = \"\", headers : Hash(String, String) = {} of String => String)\n # A response whose body is *source*, copied out by the server and\n # closed after.\n def initialize(status : Int32, source : IyiIO, headers : Hash(String, String) = {} of String => String)\n # The body read whole into the response, which is answered; why not,\n # when it cannot be.\n def load : Response | Cancelled | SocketError | HTTPError\n def reason : String\n def source : IyiIO | ::Nil\n def status : Int32\n # A response whose body the block writes as it goes, chunked.\n def self.stream(status : Int32, headers : Hash(String, String) = {} of String => String, &writer : (BodyWriter -> Nil)) : Response\n def success? : Bool\n def takeover : Proc(IyiSocket | TlsStream, String, Nil) | ::Nil\n protected def takeover=(takeover : Proc(IyiSocket | TlsStream, String, Nil)) : Proc(IyiSocket | TlsStream, String, Nil)\n def tls_resumed=(resumed : Bool) : Bool\n # Whether the `https://` connection the answer came over resumed a TLS\n # session by a ticket an `HTTPClient` kept, rather than a full\n # handshake; false in the clear and for one a program made.\n def tls_resumed? : Bool\n # A 101 Switching Protocols with *headers* (`Upgrade` and the\n # protocol's own), after which the connection is the block's: it is\n # handed the connection - the socket, or under `serve(tls:)` the\n # `TlsStream` over it - and the bytes the client sent after its request,\n # and the connection closes when it returns.\n def self.upgrade(headers : Hash(String, String), &takeover : (IyiSocket | TlsStream, String -> Nil)) : Response\n # The URL the answer came from, after any redirects; nil for one a\n # program made.\n def url : String | ::Nil\n def writer : Proc(BodyWriter, Nil) | ::Nil\n protected def writer=(writer : Proc(BodyWriter, Nil)) : Proc(BodyWriter, Nil)\nend\n\npub struct Server\n # The headers a coded body goes with: the coding, and `Vary` so that a\n # cache keeps the answers apart. A `Content-Length` the block gave is\n # the plain body's, and goes.\n protected def self.coded(response : Response, coding : String) : Response\n # The coding *response* goes in to the client of *req*, or nil: one the\n # client takes (RFC 9110 §12.5.3, a `q` of 0 refusing it), for an\n # answer with a body and a type worth compressing, and no coding of its\n # own. A whole body goes `zstd` when the client's `q` for it is at least\n # its `q` for gzip, and `gzip` otherwise. The tie goes to zstd for the\n # server's time: measured on this machine, release builds, on\n # src/std/http.iyi (199,134 bytes) `Gzip.compress` wrote 54,484 bytes in\n # 5 ms and `Zstd.compress` 61,753 in 1 ms, and on CHANGELOG.md (1.5 MB)\n # 552,446 in 58 ms against 589,785 in 13 ms - a quarter of the time, for\n # an eighth more bytes at most. A stream - an `IyiIO` or a\n # `Response.stream` - goes gzip or as it is: std/compress's `Deflater`\n # writes each piece as it comes, where std/zstd's compressor takes its\n # input whole, and a frame a write would code each piece alone.\n def self.coding_for(req : Request, response : Response) : String | ::Nil\n # A string body compressed whole in *coding*, `zstd` or `gzip`, with\n # the headers that say so. `Zstd.compress`'s frame needs a window of\n # 1 MiB at most, inside the 8 MB RFC 9659 §3 holds an encoder to.\n protected def self.compressed(response : Response, coding : String) : Response\n # A response's head. `Content-Length` is *length*'s - the caller's own\n # line is checked against it, and kept only where no body follows it: a\n # HEAD, or a 304 that names the length a 200 would have (RFC 9110 §8.6) -\n # or `Transfer-Encoding: chunked` when *chunked*, or neither for a body\n # the connection's close ends. `Connection` says what the connection will\n # do next, except on an *upgrade*, whose own line says it. A 1xx, 204 or\n # 304 has no content (RFC 9110 §15), and writes neither a body nor a\n # length of its own (§8.6): the body was read by the client as the start\n # of the next answer, and `Content-Length: 0` on a 304 told a cache that\n # the resource had become empty. A field added on lines of its own\n # (`add_header`) is written a line each.\n def self.format_head(response : Response, head : Bool, close : Bool, length : Int64 | ::Nil, chunked : Bool, upgrade : Bool = false) : String\n # The response as it goes on the wire, whole: `format_head` for its\n # string body, and the body.\n def self.format_response(response : Response, head : Bool, close : Bool) : String\n # One connection: requests until the client is done. A request that is\n # not HTTP is answered with why and the connection closed, since the\n # bytes after it cannot be trusted to be a request either. Requests that\n # came in one read are read where they lie, one after another. A\n # connection that opens with HTTP/2's preface is served as HTTP/2. Under\n # *tls* the handshake comes first, and the connection ends with\n # close_notify. A connection this side wrote last on - an answer, a\n # refusal, a GOAWAY - closes by lingering (`Conn#close`), so the reset\n # a close with the client's bytes unread is cannot take what was\n # written from the client before it reads it. One that timed out or was\n # cancelled, with nothing of this side's waiting to be read, closes at\n # once, and so does one whose client said `close` and sent nothing past\n # its request (`serve_h1`).\n def self.handle(client : IyiSocket, handler : Proc(Request, Response), listener : IyiSocket | ServeStop | Nil = nil, idle : Hash(UInt64, Conn) | ::Nil = nil, stream_bodies : Bool = false, compress : Bool = false, timeout_ms : Int32 = 0, tls : TlsServerConfig | TlsFrozenServerConfig | Nil = nil, request_timeout_ms : Int32 = 0) : Nil\n def initialize\n # A request's head - the text before its blank line - read and checked,\n # or why it is not one.\n def self.parse_head(text : String) : RequestHead | HTTPError\n # A request at *from* in `text`, if a whole one is there. No request and\n # no error means \"not yet\". `consumed` counts from the start of `text`.\n def self.parse_request(text : String, from : Int32 = 0) : ParsedRequest\n # Serve `listener` until it is closed, on *workers* threads: each\n # connection is a task on the pool `spawn_parallel` starts (SPEC.md\n # III.4.13), started by whichever worker is free and served there to\n # its end, while the thread that called this accepts. The block runs on\n # the connection's worker, once per request, on several workers at\n # once; what it answers is written back.\n # The close ends a connection waiting on its client too, for its next\n # request or for the rest of one, and one that is answering ends when its\n # answer is written: a keep-alive client that sat idle kept `serve` from\n # returning for as long as it stayed, and so did one that had sent\n # what has arrived of a request so far - one byte of it was enough.\n #\n # *stream_bodies*: the block reads each request's body from `body_io`\n # rather than being handed it whole. *compress*: an answer whose type\n # std/mime calls compressible goes zstd or gzip to a client that\n # accepts one (`coding_for`).\n #\n # *timeout_ms*: a request's head must have arrived within it, counted\n # from when the server starts waiting for one - a kept-alive connection's\n # idle time included - and no read of a body nor write of an answer may\n # wait longer; a connection that does is closed. Without it, a client\n # that sends a byte of its head every few seconds (Slowloris) holds a\n # connection and its fiber for as long as it likes, and so does one that\n # reads none of its answer. A minute by default, nginx's\n # `client_header_timeout`; 0 for none. A connection handed over by\n # `Response.upgrade` waits as its protocol likes.\n #\n # *request_timeout_ms*: the whole request - head and body - must have\n # arrived within it, counted from the same moment as *timeout_ms*, as\n # Go's `ReadTimeout` beside its `ReadHeaderTimeout`; the head is held to\n # the sooner of the two. Without it a body sent a byte every few seconds\n # was bounded per read alone, and held its connection for as long as it\n # dripped. A block that reads the body itself (*stream_bodies*) reads\n # under it until the block returns, and what it leaves unread is read\n # past under it too. Over HTTP/2 the wait for each request and its body\n # is held to it on the connection the same way, the head to the sooner\n # of the two. Five minutes by default, which a 64 MiB body (`MAX_BODY`)\n # meets at 224 KB/s; a server taking large uploads over slow links\n # raises it. 0 for none. A connection past it is closed, unanswered, as\n # one past *timeout_ms* is.\n #\n # *max_connections*: at most this many connections are served at once;\n # 1024 by default, 0 for no limit. Past it the server stops accepting\n # until one ends, so the next connection waits in the kernel's listen\n # queue - queued, not refused, as Go's `netutil.LimitListener` does - and\n # is served in its turn; a client that gives up waiting goes unserved.\n # Each served connection holds its place until it closes, a kept-alive\n # one between requests too, which *timeout_ms* bounds. The process's\n # own limit on descriptors may come first.\n #\n # *tls*: each connection is TLS (std/tls's `TlsServer`, 1.3 or 1.2) under this\n # configuration, its handshake held to *timeout_ms* too and run on the\n # worker that serves it; one whose handshake fails is closed, the\n # client told why by an alert. Inside it a connection that opens with\n # HTTP/2's preface - as a client whose ALPN chose `h2` does, when\n # `tls.alpn` offers it - is served HTTP/2, and any other HTTP/1.1. A\n # `Response.upgrade` block over TLS is handed the `TlsStream`, so a\n # WebSocket is `wss://`. On more than one worker the config is a\n # `TlsFrozenServerConfig` - `config.frozen` - since every worker reads\n # it at once: its ticket keys are one set behind a lock, so a ticket a\n # connection on one worker was sent resumes on any other, and an\n # identity source given to `frozen` is a block the compiler checked. A\n # `TlsServerConfig` itself is refused at the call (\"Server.serve hands\n # `tls : TlsServerConfig` to other threads, several at once, and it is\n # not Share: ... Pass `config.frozen` ...\"), not frozen here: `frozen`\n # is a copy, so a property assigned after the server started would be\n # served by no worker and nothing would say so, and a config with an\n # `identity_source` cannot be frozen without its source given again as\n # a block the compiler checks. Under `workers: 1` either is served.\n #\n # *workers*: the pool's size, `IyiWorkers.count` by default - `IYI_WORKERS`\n # from the environment, else the cores this process may run on. The\n # pool is the process's one, and it does not grow or shrink once it has\n # started, so a count other than the one it started with panics. Every\n # worker runs the block at once, so the compiler checks it where it is\n # written as it checks a parallel task's (`@[Share]`, SPEC.md III.4.4):\n # every value it captures must be `Share` - a table behind a `Mutex`\n # (std/mutex), a count in an `Atomic`, a `SharedRouter` (std/router) -\n # every captured local assigned once, and the constants and class\n # variables it names `Share`. The refusal names the variable, why its\n # type is not `Share`, and the two ways out: the lock, or `workers: 1`.\n # `workers: 1`, written as the literal, serves on the calling thread\n # alone - each connection a task beside the accept loop, as `spawn`\n # makes one - and its block is not checked: a block that calls a\n # `Router`, appends to an `Array` or keeps a handle that is not `Share`\n # is served there. A count in a variable is checked whatever it holds,\n # since the compiler cannot know it is 1. A count of 1 from the default\n # (`IYI_WORKERS=1`, one core) serves on the calling thread too.\n #\n # A connection stays on the worker that started it (III.4.13, part 1):\n # connections spread over the workers free as they arrive, and one kept\n # alive is not moved later. A block that computes without parking holds\n # its worker meanwhile, as any task does. The listener is the calling\n # thread's, and a close of it is made there: a block that stops the\n # server sends on a `Channel` a task beside the server receives from,\n # and that task closes it. At the stop each connection waiting on its\n # client is closed on its own worker, sent close_notify there first\n # under *tls*.\n def self.serve(listener : IyiSocket, stream_bodies : Bool = false, compress : Bool = false, timeout_ms : Int32 = 60000, tls : C = nil, request_timeout_ms : Int32 = REQUEST_TIMEOUT, max_connections : Int32 = MAX_CONNECTIONS, workers : Int32 = IyiWorkers.count, &handler : (Request -> Response)) : Nil forall C\n # `serve` with a value for its handler rather than a block: a\n # `SharedProc`, a `SharedRouter` (std/router), or one of the program's\n # own, whose `call(request : Request) : Response` answers each request,\n # as Go's `http.Handler` does. On more than one worker it must be\n # `Share` (SPEC.md III.4.4), since every connection on every worker\n # calls the one value at once: the compiler refuses one that is not at\n # the argument, naming the field that failed and the two ways out - a\n # count in an `Atomic`, a pool or a cache behind a `Mutex`, a\n # `SharedRouter` for a `Router`, or `workers: 1`, under which any value\n # with that `call` is served on the calling thread, a `Router`\n # included. What the check does not see is the edge `spawn_parallel`\n # has too: a method the handler calls that writes a module's state. A\n # struct handler is copied into each connection's task, and an `Atomic`\n # in it with it: what the connections share is a class, or held by\n # one.\n #\n # The rest is the block form's: *stream_bodies*, *compress*,\n # *timeout_ms*, *tls* (`config.frozen` on more than one worker),\n # *request_timeout_ms*, *max_connections* and *workers*, HTTP/2 by its\n # preface, `Response.upgrade`, and a close of *listener* - on the\n # thread that called this - ending every connection waiting on its\n # client and returning once the others have answered.\n def self.serve(listener : IyiSocket, handler : H, stream_bodies : Bool = false, compress : Bool = false, timeout_ms : Int32 = 60000, tls : C = nil, request_timeout_ms : Int32 = REQUEST_TIMEOUT, max_connections : Int32 = MAX_CONNECTIONS, workers : Int32 = IyiWorkers.count) : Nil forall H, C\n protected def self.writer_for(socket : IyiSocket | TlsStream, chunked : Bool, gzip : Bool) : BodyWriter\nend\n\n# A TLS connection used as a socket is: read into a buffer, written to,\n# closed, its timeouts set - by a `Conn`, a `BodyWriter`, and a connection\n# handed over by an upgrade (`wss://` at either end). What TLS refuses is a\n# `SocketError` carrying TLS's own sentence (`layer_reason`), so answers\n# keep the types they have over a plain socket.\npub class TlsStream\n # The socket closed at once, nothing sent or read first.\n def abort : Nil\n # close_notify, the sending half shut, and what the peer still sends\n # read past for a bounded time before the socket closes\n # (`TlsConnection#close`).\n def close : Nil\n # close_notify and the sending half shut; reads go on until the peer's\n # own (`TlsConnection#close_write`).\n def close_write : SocketError | ::Nil\n def closed? : Bool\n def initialize(tls : TlsConnection, host : String)\n # The peer's certificate chain, leaf first, as the handshake checked it:\n # the server's, at a client; the client's, at a server that asked.\n def peer_certificates : Array(Certificate)\n # Up to *count* bytes into *buffer*: 0 once the peer closed with\n # close_notify.\n def read(buffer : Pointer(UInt8), count : Int32) : Int32 | Cancelled | SocketError\n # Up to *max_bytes* as a string, what is held first: \"\" once the peer\n # closed with close_notify. `IyiSocket#read`'s form, for a block an\n # upgrade hands either.\n def read(max_bytes : Int32 = 4096) : String | Cancelled | SocketError\n # How long a read or a write of the connection under it may wait.\n def read_timeout_ms=(ms : Int32 | ::Nil) : Int32 | ::Nil\n # Whether the handshake resumed a session (`TlsConnection#resumed?`).\n def resumed? : Bool\n def write(text : String) : Int32 | Cancelled | SocketError\n def write_timeout_ms=(ms : Int32 | ::Nil) : Int32 | ::Nil\nend\n\n# What `HTTP.upgrade` answers: the 101, and the connection, which is the\n# caller's now - the socket, and the bytes the server sent after its head.\npub class Upgraded\n def initialize(response : Response, socket : IyiSocket | TlsStream, leftover : String)\n def leftover : String\n def response : Response\n # The connection: the socket, or for `https://` the `TlsStream` over it.\n def socket : IyiSocket | TlsStream\nend\n\nimpl Error for HTTPError\n def message : String\nend\n" + "sourceSha256": "64b03ff04cf05a0b7915ba30233f4194d25d78d2a26c44a934c3dc50361a2133", + "surface": "module std/http\n\n# A body as it arrives: from a connection, framed by its length, by chunks\n# or by the connection's close, or from a string already in hand. `read`\n# answers the next piece, \"\" once the body is done; what the other end\n# does wrong is an `HTTPError`, and a connection that fails or is\n# cancelled answers that. The first failure is kept: every read after it\n# answers the same. A body coded `gzip`, `deflate` or `zstd` is decoded\n# as it is read when the client asked for that.\n#\n# A body has a limit: past it a read answers an `HTTPError` with status\n# 413. The server's is `Server::MAX_BODY`; a client's is none.\npub class BodyReader\n # The body's coding undone from here on: `Envelope::Gzip` for gzip,\n # `Envelope::Zlib` for HTTP's deflate - which some servers send as the\n # bare stream instead, without zlib's two bytes of header, so the first\n # two bytes are looked at first, and a pair that is not a zlib header\n # (RFC 1950 §2.2: method 8, a multiple of 31) is read as the bare\n # stream. A body that does not decode is an `HTTPError` naming the\n # coding and why.\n def decode(envelope : Envelope) : Nil\n # The body's `zstd` coding (RFC 8878) undone from here on, by std/zstd's\n # `ZstdReader` as the pieces arrive, frames one after another. A frame\n # that asks for a window past *max_window* bytes is refused rather than\n # given the memory (a window outside 1 KiB to 512 MiB is a panic), and a\n # body that does not decode is an `HTTPError` naming the coding and why.\n def decode_zstd(max_window : Int32 = Zstd::WINDOW_LIMIT) : Nil\n # Reads past the rest of the body, *limit* bytes at most: whether it\n # ended within them. A server reads past what a block left unread, so\n # the next request on the connection starts where it should.\n def drain(limit : Int64) : Bool\n # Whether every byte of the body has been read, the framing's end too.\n def finished? : Bool\n # A body that arrives as an HTTP/2 stream's DATA: refused past *limit*.\n protected def self.frames(h2 : H2Connection, id : Int32, limit : Int64) : BodyReader\n def initialize(conn : Conn | ::Nil, kind : Int32, length : Int64, limit : Int64, text : String = \"\", hello : Proc(Bool) | ::Nil = nil)\n # Whether a server reading past the rest of this body, so that the next\n # request starts where it should, would close instead: its length says\n # more than *limit* bytes are left, or its client still waits for the\n # `100 Continue` its `Expect` asked for - which, written after the\n # answer, the client reads as its next request's, and the body it\n # holds back is then waited for. A chunked body's rest is not known\n # until it is read.\n def left_past?(limit : Int64) : Bool\n protected def on_frames(h2 : H2Connection, id : Int32) : Nil\n # The body's bytes as the framing delivers them, before any decoding.\n protected def raw(max : Int32) : String | Cancelled | SocketError | HTTPError\n # The next piece of the body, at most *max* bytes; \"\" when it is done.\n def read(max : Int32 = 65536) : String | Cancelled | SocketError | HTTPError\n # The rest of the body as one string, refused past *limit* bytes (413).\n # The pieces are kept as they arrive and joined once: a builder of the\n # length a head declared was made before any of it had come, and a head\n # that declared 64 MB and sent two bytes cost the server 64 MB.\n def read_all(limit : Int64 = 2147483647_i64) : String | Cancelled | SocketError | HTTPError\n protected def remember(fault : HTTPError | Cancelled | SocketError) : HTTPError | Cancelled | SocketError\n # A body that is a string already in hand.\n def self.text(text : String) : BodyReader\n # Whether the body ends where the connection does: nothing can follow\n # it on the connection.\n def to_close? : Bool\nend\n\n# What a streamed body is written to: an answer's `Response.stream`\n# block's, and a client's upload from an `IyiIO`. Each `write` goes out as\n# one chunk (RFC 9112 §7.1), or as it is where the connection's close ends\n# the body, so a block that writes a line a second is read a line a\n# second. Under a server's `compress`, each write is a gzip piece flushed\n# whole (std/compress's `Deflater`), which decodes as it arrives too. The\n# first failure is kept, and every write after it answers it; `finish`,\n# which the server calls when the block returns, writes the end.\npub class BodyWriter\n # The end of the body: the gzip trailer, and the last chunk with the\n # blank line after it. Once; the server's call after a block that\n # finished its own body writes nothing.\n def finish : Nil | Cancelled | SocketError\n def initialize(socket : IyiSocket | TlsStream | H2Out, chunked : Bool, deflater : Deflater | ::Nil = nil)\n def write(text : String) : Nil | Cancelled | SocketError\n # Bytes of the body written so far, before any framing or coding.\n def written : Int64\nend\n\n# What `HTTP.request`'s `jar:` keeps cookies in: the `Cookie` header a\n# request to a URL carries, and an answer's `Set-Cookie` lines taken in.\n# std/cookie's `CookieJar` is one; std/http itself reads no clock, so the\n# expiry of a cookie is the store's to keep.\npub trait CookieStore\n abstract def header_for(url : String) : String | ::Nil\n abstract def update(url : String, response : Response) : Nil\nend\n\npub struct HTTP\n # For a request target in absolute form (RFC 9112 §3.2.2), where its\n # authority starts: after `http://` or `https://`, in any case.\n def self.absolute_form(target : String) : Int32 | ::Nil\n # Whether a list of codings a client accepts (`Accept-Encoding`, RFC\n # 9110 §12.5.3) takes *coding*: named, or `*`, with a `q` above 0.\n def self.accepts?(list : String, coding : String) : Bool\n # A 1xx, 204 or 304: an answer with no content (RFC 9110 §15).\n def self.bodiless?(status : Int32) : Bool\n # Where a chunked body that starts at *from* ends in `text` — the byte\n # after the last chunk's terminating CRLF (trailers included) — nil when\n # it has not all arrived, or why it is not a chunked body. What\n # `decode_chunked` will then read whole.\n def self.chunked_end(text : String, from : Int32 = 0) : Int32 | String | Nil\n # How much a list of codings a client accepts wants *coding*, as its\n # `q` in thousandths: the weight it is named with, else `*`'s, else 0 -\n # and 0 refuses it.\n def self.coding_weight(list : String, coding : String) : Int32\n # A `Content-Length` as a number, or nil when it is not one. Repeated\n # lines arrive joined, and are one length only when every one says the\n # same (RFC 9112 §6.3). A length past 2147483647 is still a length, too\n # large for either side, and is read as one past it: `to_i?` answered\n # nil for it, and 3000000000 was refused as \"not a number\".\n def self.content_length(value : String) : Int64 | ::Nil\n # A control character other than a tab, or DEL: what a field value may\n # not hold (RFC 9110 §5.5), nor a request target or a reason phrase.\n def self.control?(text : String) : Bool\n # The pairs of a request's `Cookie` header, `a=1; b=2` (RFC 6265 §4.2),\n # a value's quotes taken off; the first of a name is kept, as a server\n # reads the most specific cookie first.\n def self.cookie_pairs(value : String) : Hash(String, String)\n # A chunked body (RFC 9112 §7.1) as one string: each chunk's size line\n # is hexadecimal, extensions after `;` are ignored, and a zero-length\n # chunk ends it. What follows the last chunk is trailers, which nothing\n # here reads.\n def self.decode_chunked(text : String) : String\n def self.delete(url : String, headers : Hash(String, String) = {} of String => String) : Response | Cancelled | SocketError | HTTPError\n def self.find_headers_end(text : String, from : Int32 = 0) : Int32 | ::Nil\n # The request as it goes on the wire, whole. `Host`, `Connection` and\n # `Content-Length` are the request's own lines; a caller's header of\n # that name is refused rather than sent twice. A body's length is\n # always written for the methods a body belongs to, so `POST` with\n # nothing to say still says `Content-Length: 0`. A byte of the path past\n # 127 goes as `%` and two hex digits: a request target is ASCII (RFC\n # 9112 §3.2, RFC 3986 §2.1), and `/ü` went out as its UTF-8 bytes, raw.\n def self.format_request(method : String, path : String, host : String, body : String = \"\", headers : Hash(String, String) = {} of String => String) : String\n def self.get(url : String, headers : Hash(String, String) = {} of String => String) : Response | Cancelled | SocketError | HTTPError\n # *text* in gzip, whole: an answer's body under a server's `compress`.\n def self.gzip(text : String) : String\n # A writer whose body goes out in gzip as it is written.\n def self.gzip_writer(socket : IyiSocket | TlsStream | H2Out, chunked : Bool) : BodyWriter\n def self.has_break?(text : String) : Bool\n # Whether a list of tokens (RFC 9110 §5.6.1), its repeated lines joined\n # with \", \", holds *token*, in any case.\n def self.has_token?(list : String, token : String) : Bool\n def self.head(url : String, headers : Hash(String, String) = {} of String => String) : Response | Cancelled | SocketError | HTTPError\n # The value of a chunk size's hex digits, nil for anything else or for\n # one past what an Int32 holds.\n def self.hex(text : String) : Int32 | ::Nil\n # *n* in lowercase hexadecimal: a chunk's size line.\n def self.hex_text(n : Int64) : String\n # A Host value - the `a` of `Host: a` - or an absolute-form target's\n # authority, made of what a host and its port are spelled with (RFC 3986\n # §3.2.2, §3.2.3): a name, an IPv4 address or an IPv6 one in brackets,\n # and digits after a colon. Empty is one too, for a target with no\n # authority (RFC 9112 §3.2). A blank, a `/`, an `@` - the bytes another\n # host or a path begins with - are not.\n def self.host?(text : String) : Bool\n # The endpoints *answer*'s ServiceMode records name for a client whose\n # configuration offers *alpn* by ALPN (none: it speaks http/1.1 alone),\n # to an origin on *port*, in the order to try them: a record whose\n # mandatory keys are not all ones std/dns reads, or whose protocols -\n # alpn, and http/1.1 unless no-default-alpn - hold none of the client's,\n # names none (RFC 9460 sections 7.1.2 and 8), and neither does one whose\n # target is not a host name. Each is the record's target, or its owner\n # for \".\"; its port, or *port*; its `ech` where the ECHConfigList holds\n # a config std/tls can use (RFC 9849 section 6.1), nil otherwise; and\n # *alpn* with the protocols the record's alpn lists first, in *alpn*'s\n # order otherwise.\n def self.https_endpoints(answer : SvcbAnswer, alpn : Array(String), port : Int32) : Array(HttpsEndpoint)\n def initialize\n # One request, and the block's answer to the response, its body still\n # arriving: `response.body_io.read` takes it a piece at a time, and\n # `response.body` all of it. The connection closes when the block\n # returns. A body of *body* is a string, sent with its length, or an\n # `IyiIO`, sent chunked as it is read - which a redirect that keeps the\n # method (307, 308) cannot send again, so that answer is handed to the\n # block as it is.\n #\n # The redirects followed are RFC 9110 §15.4's: 301 and 302 make a POST a\n # GET, 303 makes anything but a HEAD a GET, and 307 and 308 keep the\n # method and the body. `Authorization`, `Proxy-Authorization` and\n # `Cookie` written by the caller are not sent to another scheme, host or\n # port - `https://` to `http://` at one host included, as curl does (Go\n # strips them for another host) - and a jar's `Secure` cookies go over\n # `https://` alone. The downgrade itself is followed, as Go's client and\n # `curl -L` follow it; any other header the caller wrote, and a 307 or\n # 308's body, go on in the clear. One more than *redirects* is an\n # `HTTPError`; with 0 the first answer is the block's.\n #\n # *timeout_ms* bounds the connect, and each read and write after it -\n # a pause, not the whole exchange, as Python's `timeout` is: a body that\n # keeps arriving is read for as long as it takes. One that runs out is a\n # `SocketError` whose `timed_out?` is true. 0, the default, waits as\n # long as the server does, as Go's and Python's clients do; a client\n # that talks to servers it does not control should give one.\n #\n # *proxy* is a proxy's URL - `http://user:password@host:port`, or\n # `host:port` alone - and every request goes through it, every redirect\n # too: `http://` as an absolute-form request to the proxy (RFC 9112\n # §3.2.2), which carries `Proxy-Authorization: Basic` when the URL has\n # a user; `https://` through a tunnel the proxy opens with `CONNECT\n # host:port` (RFC 9110 §9.3.6), the credential on the CONNECT alone and\n # TLS to the server inside it, its certificate checked as without a\n # proxy. A caller's own `Proxy-Authorization` is the proxy's too: sent\n # on the CONNECT when the URL has no user, and never inside the tunnel.\n # A CONNECT answered with anything but a 2xx - 407 when the proxy wants\n # credentials, 403, 502 - is an `HTTPError` naming the proxy and its\n # answer. `http://` through a proxy is HTTP/1.1 whatever\n # *prior_knowledge* says. Which proxy, if any, a URL's environment\n # names is `proxy_for`'s, and std/http_proxy's `HTTPProxy.from_env`.\n def self.open(method : String, url : String, headers : Hash(String, String) = {} of String => String, body : String | IyiIO = \"\", redirects : Int32 = 10, jar : CookieStore | ::Nil = nil, decompress : Bool = true, client : HTTPClient | ::Nil = nil, timeout_ms : Int32 = 0, proxy : String | ::Nil = nil, &block : (Response -> R)) : R | Cancelled | SocketError | HTTPError forall R\n # The field lines after the first, or why they are not fields. A name\n # repeated, in any case, is one field, its values joined in order with\n # \", \" (RFC 9110 §5.3): into a Hash by name, a second line spelled the\n # same replaced the first and one spelled otherwise was an entry\n # `header` never reached, so two different `Content-Length`s were read\n # as whichever came first or last. A value with a control character in\n # it - a CR or LF that ends no line, a NUL - is refused (§5.5) rather than\n # handed to whoever reads it or echoes it into a header.\n #\n # *unfold*, for an answer: a line that begins with a blank continues the\n # field above it (obs-fold, RFC 9112 §5.2), and a user agent joins it on\n # with one space; read as a field of its own, `HTTP.get` panicked with\n # \"header without a colon: \\\" b\\\"\". A server may refuse one, and this\n # one does.\n #\n # *apart*, when given, is handed each repeated field's values by the\n # name in the answer, a line each, before they are joined.\n def self.parse_fields(lines : Array(String), unfold : Bool = false, apart : Hash(String, Array(String)) | ::Nil = nil) : Hash(String, String) | String\n # The response as it came off the wire, whole. `head` says the request\n # was a `HEAD`, whose answer carries the headers of a body it does not\n # send. An interim answer - `100 Continue`, `103 Early Hints` - is read\n # past to the final one after it (RFC 9110 §15.2). A `101` switches\n # protocols, and HTTP ends with it. What is not a response panics with\n # why: this is the text a program has in hand; the client answers the\n # same sentences as `HTTPError`s.\n def self.parse_response(text : String, head : Bool = false) : Response\n # A response's head - the text before its blank line - read: status,\n # reason, the fields, and the lines of those on more than one. A line\n # that begins with a blank continues the field above it (obs-fold, RFC\n # 9112 §5.2), which a user agent joins on with one space.\n def self.parse_response_head(text : String) : ::Tuple(Int32, String, Hash(String, String), Hash(String, Array(String)) | ::Nil) | HTTPError\n # Where *text* goes on at *from* past the empty lines there: what a\n # server skips before a request line (RFC 9112 §2.2).\n def self.past_empty_lines(text : String, from : Int32) : Int32\n def self.post(url : String, body : String | IyiIO = \"\", headers : Hash(String, String) = {} of String => String) : Response | Cancelled | SocketError | HTTPError\n # The proxy a request for *url* goes through, given the values of\n # `HTTP_PROXY`, `HTTPS_PROXY` and `NO_PROXY` - nil when it goes\n # direct. Go's `golang.org/x/net/http/httpproxy` is the rule, line for\n # line, as its documentation and tests state it:\n #\n # * `https://` takes *https_proxy*, `http://` *http_proxy*, any other\n # scheme none. A proxy written without a scheme is `http://`'s, and is\n # answered with it, ready for `open`'s *proxy*.\n # * `localhost` (in lower case: Go's comparison) and a loopback address\n # (127.0.0.0/8, ::1, the first as IPv4-mapped too) never go through a\n # proxy.\n # * *no_proxy* is a comma-separated list, each entry trimmed and read\n # without regard to case: `*` alone sends everything direct; an IP\n # address or a CIDR range (`10.0.0.0/8`, `2001:db8::/32`) matches the\n # addresses in it, IPv4 and its IPv4-mapped form alike, and a CIDR\n # range of one family never the other's; a domain matches itself and\n # every name under it (`foo.com`: `foo.com`, `bar.foo.com`, not\n # `barfoo.com`); with a leading dot, or `*.`, only the names under it\n # (`.y.com`: `x.y.com`, not `y.com`). An address or domain may carry\n # a port (`1.2.3.4:80`, `[::1]:443`, `foo.com:8080`), and matches\n # then on that port alone, the URL's own or its scheme's default.\n # An entry that is none of these (`:80`) is passed over.\n # * A host is compared as IDNA's ASCII form, as Go compares it.\n #\n # Pure: the values are the caller's, so std/http reaches no environment;\n # std/http_proxy reads them from it.\n def self.proxy_for(url : String, http_proxy : String | ::Nil, https_proxy : String | ::Nil, no_proxy : String | ::Nil = nil) : String | ::Nil\n def self.put(url : String, body : String | IyiIO = \"\", headers : Hash(String, String) = {} of String => String) : Response | Cancelled | SocketError | HTTPError\n # The reason phrase a status carries (RFC 9110 §15), for a response the\n # server writes; a status this table does not know gets its class's.\n def self.reason_for(status : Int32) : String\n # One request and its whole answer: the answer as `open` hands it, its\n # body read. Redirects are followed, *redirects* at most; *jar* keeps\n # the cookies the answers set and sends them back; *decompress* asks\n # for gzip, deflate and zstd and undoes them. A refused or reset\n # connection answers `SocketError`; a task cancelled answers\n # `Cancelled`; what the server does wrong answers `HTTPError`. `!`\n # passes any of them up, `.or_panic` refuses it.\n def self.request(method : String, url : String, headers : Hash(String, String) = {} of String => String, body : String | IyiIO = \"\", redirects : Int32 = 10, jar : CookieStore | ::Nil = nil, decompress : Bool = true, timeout_ms : Int32 = 0, proxy : String | ::Nil = nil) : Response | Cancelled | SocketError | HTTPError\n # A request's head: the request line, `Host`, `Connection` (*connection*:\n # `close`, or `Upgrade`), the caller's headers, and the body's framing -\n # *length*, chunks, or none.\n def self.request_head(method : String, path : String, host : String, headers : Hash(String, String), length : Int64 | ::Nil, chunked : Bool, connection : String) : String\n # Two field names for the same field: ASCII case is the only difference\n # a name may carry.\n def self.same_name?(a : String, b : String) : Bool\n def self.split_crlf(text : String) : Array(String)\n # A status line read: the status and its reason, or why it is not one.\n def self.status_line(line : String) : ::Tuple(Int32, String) | HTTPError\n # What an `https://` request is checked against and offers: the\n # system's roots, and ALPN's `http/1.1`, unless a program sets its own -\n # roots of its own for a server it runs, say.\n def self.tls_config : TlsConfig\n def self.tls_config=(config : TlsConfig) : TlsConfig\n # A token (RFC 9110 §5.6.2): what a method or a field name is made of.\n def self.token?(text : String) : Bool\n # Without the blanks at either end (RFC 9112 §5.1: field values are\n # trimmed of the whitespace around them).\n def self.trim(s : String) : String\n # The 101 an upgrade to *protocol* is answered with, and the connection,\n # which is the caller's from then on: std/websocket's handshake. Any\n # other answer is an `HTTPError` naming it.\n #\n # *proxy* is `open`'s, and so is its credential, on the CONNECT alone;\n # but an upgrade goes through a tunnel for `http://` as for `https://`,\n # the handshake inside it in origin form. `Upgrade` belongs to the\n # connection it is sent on (RFC 9110 §7.8), and a proxy forwarding a\n # request removes `Connection` and every field it names (§7.6.1), so a\n # handshake handed to a forward proxy in absolute form reaches the\n # server, at best, as a plain GET: the gate's proxy, which drops\n # `Connection`, leaves std/websocket's server a request it answers 400.\n def self.upgrade(url : String, protocol : String, headers : Hash(String, String) = {} of String => String, timeout_ms : Int32 = 0, proxy : String | ::Nil = nil) : Upgraded | Cancelled | SocketError | HTTPError\nend\n\n# Requests that keep their connections: an `HTTPClient` holds the connections\n# its answers left open, by host and port, and the next request to that\n# server goes over one of them instead of a new one - the TCP handshake,\n# and the slow start after it, paid once rather than per request. Its\n# methods are `HTTP`'s, redirects, cookies and decoding included:\n#\n# ```\n# client = HTTPClient.new\n# client.get(\"http://127.0.0.1:8080/a\")\n# client.get(\"http://127.0.0.1:8080/b\") # the same connection\n# client.close\n# ```\n#\n# A connection goes back once its answer has been read to the end (inside\n# `open`, up to 64 KiB left unread is read past for it) and the answer\n# allows it; at most *idle* wait per server, and the rest close. A server\n# may close an idle connection whenever it likes (RFC 9112 §9.3.1), so a\n# request whose kept connection turns out closed - the write fails, or it\n# ends before a byte of an answer - is sent again once on a new one, when\n# its method is idempotent (RFC 9110 §9.2.2) and its body a string;\n# anything else answers the failure. One task at a time per request: two\n# tasks sending at once take two connections, and a client is not for\n# sharing across threads. An `https://` connection is kept under the\n# `HTTP.tls_config` it was made with, and handed only to a request made\n# under the same one (`TlsMadeUnder`): after `HTTP.tls_config=` the next\n# request makes a connection of its own, checked against the new roots.\n# A client made with *tls* uses that configuration instead of\n# `HTTP.tls_config`, and one made with *resolver* finds its hosts by it\n# instead of `Resolver.system` - an encrypted resolver, or a hosts text\n# that pins a name to an address: std/secure_dns's `DnsOverHttps` is a\n# client of its own with both, so its server is checked against the roots\n# it was given and reached at the address it was given.\n#\n# A client resumes TLS sessions (RFC 8446 §2.2): the tickets an\n# `https://` server sends are kept for its origin - scheme, host and\n# port, whichever proxy's tunnel they came through - under the TLS\n# configuration they came under, the client's own *tls* or else\n# `HTTP.tls_config` (`TlsMadeUnder`, as a kept connection is), and a new\n# connection to that origin offers the newest, each once.\n# A resumed handshake checks no certificate - the ticket stands for the\n# check the first one made - so a ticket is never offered to another\n# origin, nor under another configuration: after `HTTP.tls_config=`, or\n# roots, an identity, `now`, `min_version` or `require_staple` assigned\n# in place - in `HTTP.tls_config` or in the client's own *tls* - the next\n# connection is a full handshake under the new ones, and that origin's\n# tickets from under the old one are dropped. (std/tls's `TlsSession`\n# holds each ticket to its configuration too; this client drops them\n# where that one would only pass them over.) At most *origin_tickets* are\n# kept an origin - 4 by default, so that as many connections as *idle*\n# keeps by default can resume at once, where std/tls's server and\n# OpenSSL's send 2 a handshake - and *tickets* in all, 256 by default: as\n# many origins as that leaves room for at *origin_tickets* each, the one\n# longest unused dropped first. 0 for either keeps none, and nothing\n# resumes. `close`\n# leaves them. Nothing goes early (0-RTT), whatever a ticket allows: the\n# module's header says why. `connections_resumed`, `tickets_held` and\n# `Response#tls_resumed?` say what was kept and used. What it saves, by\n# bench/std_http_resume.iyi built --release on a 12-core machine other\n# jobs shared (medians of 200, the middle of three runs): the handshake\n# took 0.96 ms full and 0.51 resumed against std/http's server, 1.03 and\n# 0.57 against OpenSSL 3.5's s_server - and a GET on a new connection,\n# which waits about 40 ms at each iyi end that is not the handshake's,\n# 82.98 ms and 82.00, and 42.04 and 40.96.\n#\n# Over HTTP/2 - `https://` where ALPN chose `h2`, or `http://` with\n# *prior_knowledge* (h2c, RFC 9113 §3.3) - a kept connection carries the\n# next request on a new stream, until the server says GOAWAY.\n#\n# HTTPS records (RFC 9460), when `use_https_records` is set: before a new\n# connection to an `https://` origin - not through a proxy, and not for\n# an upgrade - the client asks its resolver for the origin's HTTPS\n# records (`Resolver#https_records`, AliasMode followed) and connects by\n# the first ServiceMode record it can use: one whose mandatory keys it\n# knows - the seven std/dns reads, port and no-default-alpn mandatory by\n# being there (section 9) - and whose protocols (alpn, and http/1.1\n# unless no-default-alpn) hold one of the configuration's `alpn`, or\n# http/1.1 where that is empty. Its target - the record's owner for \".\"\n# - and its port, or the origin's, are where the connection goes; its\n# `ech` is the connection's `ech_configs` (RFC 9848); and the protocols\n# it lists go first in the ClientHello's ALPN, which still offers every\n# one the configuration does (section 7.1.2: a record says which\n# protocols the endpoint has, and cannot take one away). The certificate\n# is checked, and the server named inside, for the origin's host,\n# whatever the target (section 2.3). An `ech` whose ECHConfigList holds\n# no config std/tls can use is passed over, as RFC 9849 section 6.1 has\n# it. The address hints are not read: the target's addresses are asked\n# for as any host's are.\n#\n# An endpoint that does not connect gives way to the next, then to the\n# last AliasMode target and to the origin itself (section 3) - unless\n# every endpoint carries `ech`, when the request fails rather than name\n# the server in the clear (RFC 9848 section 5.1). A TLS refusal is the\n# request's failure, but for one: a server that turned the encrypted\n# ClientHello down, its certificate checked for the config's\n# public_name, is asked once more on a new connection to the same\n# address, under the retry_configs it sent, or without ECH where it sent\n# none, which turns ECH off there (RFC 9849 section 6.1.6); a refusal of\n# that is the failure. No records (NXDOMAIN, NODATA), a set section 2.2\n# refuses, an AliasMode \".\" (the service says it is not there), or no\n# record the client can use: the connection is made as without records.\n# So is one whose lookup failed through a resolver that asks in the\n# clear, as section 3.1 lets a client choose; through encrypted\n# upstreams the failure is the request's, as section 3.1 asks, for\n# there the one who can drop the answer is an attacker taking the\n# records away. `localhost` and addresses are not asked about, and an\n# `http://` URL is not made `https://` by its records (section 9.5's\n# SHOULD): the program wrote the scheme.\n#\n# A record's `ech` and protocols make a configuration of their own - a\n# copy of the client's, made once and kept for the origin while the same\n# ones come under the same configuration - so that a kept connection and\n# a ticket are handed on only under the record they were made by\n# (`TlsMadeUnder` holds `ech_configs`). Off by default: every new\n# connection then waits on one DNS answer or more before its ClientHello\n# (RFC 9848 section 5.3 forbids sending it sooner), with no cache to\n# spare the next, and the records may move a connection to another host\n# and port, which is the program's to ask for.\npub class HTTPClient\n # Every idle connection closed. The client may be used after; it opens\n # new ones.\n def close : Nil\n # Connections this client has opened, and requests sent over one it\n # kept: what a program reads to see that its connections are kept.\n def connections_made : Int32\n # Connections this client opened whose TLS handshake resumed a session\n # by a ticket it kept.\n def connections_resumed : Int32\n def connections_reused : Int32\n def delete(url : String, headers : Hash(String, String) = {} of String => String) : Response | Cancelled | SocketError | HTTPError\n def get(url : String, headers : Hash(String, String) = {} of String => String) : Response | Cancelled | SocketError | HTTPError\n protected def give_back(key : String, conn : Conn) : Nil\n def head(url : String, headers : Hash(String, String) = {} of String => String) : Response | Cancelled | SocketError | HTTPError\n # The configuration a connection to *origin* is made under by a record\n # whose `ech` is *ech* (nil: none) and whose protocols put *alpn* in its\n # order, *base* being the client's own or `HTTP.tls_config`: *base*\n # itself where those are its own, and otherwise a copy of it with them -\n # the same object every time while *base* is the same (`TlsMadeUnder`),\n # so that a connection kept and a ticket held under it serve the next\n # connection by the same record. It becomes the one the origin's kept\n # connections are taken under (`https_current`). The origin's\n # configurations from under another *base* go.\n protected def https_config(origin : String, base : TlsConfig, ech : Array(UInt8) | ::Nil, alpn : Array(String)) : TlsConfig\n # The configuration *origin*'s last connection by HTTPS records was made\n # under, while *base* is the one it came from - *base* itself where it\n # was made as without records: what a kept connection to the origin\n # must have been made under to be taken. Nil when none was made by them\n # under *base*, and then none is taken.\n protected def https_current(origin : String, base : TlsConfig) : TlsConfig | ::Nil\n # *timeout_ms* and *proxy* are `HTTP.open`'s, for every request the\n # client sends; *tls* and *resolver* are this client's own (above);\n # *origin_tickets* and *tickets* bound the TLS tickets kept, by origin\n # and in all.\n def initialize(idle : Int32 = 4, timeout_ms : Int32 = 0, prior_knowledge : Bool = false, proxy : String | ::Nil = nil, tls : TlsConfig | ::Nil = nil, resolver : Resolver | ::Nil = nil, origin_tickets : Int32 = 4, tickets : Int32 = 256)\n protected def made : Nil\n def open(method : String, url : String, headers : Hash(String, String) = {} of String => String, body : String | IyiIO = \"\", redirects : Int32 = 10, jar : CookieStore | ::Nil = nil, decompress : Bool = true, &block : (Response -> R)) : R | Cancelled | SocketError | HTTPError forall R\n def post(url : String, body : String | IyiIO = \"\", headers : Hash(String, String) = {} of String => String) : Response | Cancelled | SocketError | HTTPError\n # `http://` spoken as HTTP/2 from the first byte, without asking: for a\n # server known to take it.\n def prior_knowledge : Bool\n # The proxy every request goes through, `HTTP.open`'s *proxy*; its\n # connections are kept under it.\n def proxy : String | ::Nil\n def put(url : String, body : String | IyiIO = \"\", headers : Hash(String, String) = {} of String => String) : Response | Cancelled | SocketError | HTTPError\n def request(method : String, url : String, headers : Hash(String, String) = {} of String => String, body : String | IyiIO = \"\", redirects : Int32 = 10, jar : CookieStore | ::Nil = nil, decompress : Bool = true) : Response | Cancelled | SocketError | HTTPError\n # What turns a host name into addresses for this client's connections,\n # instead of `Resolver.system`: encrypted upstreams, or a hosts text\n # alone that pins a name to an address, as std/secure_dns's\n # `DnsOverHttps` pins its server's.\n def resolver : Resolver | ::Nil\n protected def resumed : Nil\n # The session a new connection to *origin* under *tls* offers a ticket\n # from and keeps the server's new ones in; nil when the client keeps\n # none. The origin's tickets from under another configuration are\n # dropped, not left to take room that `TlsSession` would never offer\n # them from. The session handed out is the newest used; past the room\n # *tickets* leaves, the oldest goes.\n protected def session_for(origin : String, tls : TlsConfig) : TlsSession | ::Nil\n # A kept connection to *key*, nil when none waits. An HTTP/2 connection\n # that can take no more requests is closed rather than handed out, and\n # so is an `https://` one made under another TLS configuration than\n # *tls*, the one the request is made under (`TlsMadeUnder`): keyed by\n # scheme, host and port alone, a connection whose server was checked\n # against one set of roots carried requests after `HTTP.tls_config=`\n # named others that would have refused it.\n protected def take(key : String, tls : TlsConfig | ::Nil = nil) : Conn | ::Nil\n # The TLS tickets held for *origin* - `https://host:port`, the host in\n # lower case and the port written even where it is 443 - or for every\n # origin when nil.\n def tickets_held(origin : String | ::Nil = nil) : Int32\n # What this client's `https://` requests are checked against and offer,\n # instead of `HTTP.tls_config`: roots of its own, or ALPN's `h2` first.\n def tls : TlsConfig | ::Nil\n # Whether a new `https://` connection is made by the origin's HTTPS\n # records (the class's header); off by default.\n def use_https_records : Bool\n # Whether a new `https://` connection is made by the origin's HTTPS\n # records (the class's header); off by default.\n def use_https_records=(value : Bool) : Bool\nend\n\n# What the other end did that HTTP does not allow, as a value: `reason` is\n# the sentence, `status` the answer a server gives a request that did it\n# (400, or 413 and 431 for the limits). `message` says it is HTTP's.\npub struct HTTPError\n def initialize(reason : String, status : Int32 = 400)\n def reason : String\n def status : Int32\n def to_s : String\nend\n\n# One endpoint an origin's HTTPS records name, as `HTTP.https_endpoints`\n# reads it: the host and port to connect to, the ECHConfigList to encrypt\n# the ClientHello under (nil: none), and the protocols to offer by ALPN,\n# in order.\npub struct HttpsEndpoint\n def alpn : Array(String)\n def ech : Array(UInt8) | ::Nil\n def host : String\n def initialize(host : String, port : Int32, ech : Array(UInt8) | ::Nil, alpn : Array(String))\n def port : Int32\nend\n\n# A `multipart/form-data` body (RFC 7578) read a part at a time, as it\n# arrives: `next_part` answers the next `Part`, nil after the last, and a\n# part's `read` answers its bytes up to the boundary, \"\" at its end. A part\n# not read to its end is read past by the next `next_part`. The body of a\n# request is `Request#multipart`'s; any `BodyReader` and boundary will do.\n# A part's head is refused past 16 KiB, and a body that ends before its\n# closing boundary is an `HTTPError`.\npub class Multipart\n # The boundary a `Content-Type` of `multipart/...` names, nil when it\n # names none - or one of a length RFC 2046 §5.1.1 does not allow, 1 to\n # 70 characters, which `new` refuses with a panic. The type is the\n # peer's: `Request#multipart` handed a client's 90-character boundary\n # through to that panic (found by bench/std_fuzz_exercise.sh).\n def self.boundary(content_type : String) : String | ::Nil\n # Where *pattern* is in what is held, -1 when it is not there yet.\n protected def find(pattern : String) : Int32\n def initialize(body : BodyReader, boundary : String)\n # The next part, nil after the last.\n def next_part : Part | Nil | Cancelled | SocketError | HTTPError\n # Up to *max* bytes of the part being read, \"\" at its boundary. What is\n # held back is what may yet be the start of the boundary.\n protected def part_read(max : Int32) : String | Cancelled | SocketError | HTTPError\n # One more piece of the body onto what is held: false at its end.\n protected def pull : Bool | Cancelled | SocketError | HTTPError\nend\n\n# A multipart/form-data body to send: fields and files in order. Its\n# boundary is chosen when the body is first asked for - `finish`,\n# `content_type` or `boundary`, whichever comes first, after which no\n# part is added - as `iyi-` and 32 hex digits of the parts' SHA-1, made\n# again from itself in the rare case a part holds it: so it is none of\n# the parts' bytes by construction rather than by chance, the same\n# fields make the same body, and std/http reaches no source of\n# randomness for it. A boundary given to `new` is used as it is, and a\n# part that holds it is refused.\npub class MultipartBuilder\n def boundary : String\n def content_type : String\n def field(name : String, value : String) : self\n def file(name : String, filename : String, data : String, content_type : String = MIME.from_extension(filename)) : self\n # The body, closing boundary and all.\n def finish : String\n # The boundary ends a part where it follows a CRLF, the part's first\n # bytes included, which follow the head's blank line.\n protected def self.holds?(data : String, mark : String) : Bool\n def initialize(boundary : String | ::Nil = nil)\n # A name inside quotes, as browsers write one: a quote and a line break\n # percent-encoded (the WHATWG form encoding), so no field can end the\n # parameter or the line early.\n protected def self.quoted(text : String) : String\nend\n\n# One part of a multipart body: its head's fields, its name and file name\n# from `Content-Disposition`, and its bytes, read up to its boundary.\npub class Part\n def content_type : String | ::Nil\n # The file name a browser sent the part under, `filename=`.\n def filename : String | ::Nil\n def finished? : Bool\n def header(name : String) : String | ::Nil\n def headers : Hash(String, String)\n def initialize(owner : Multipart, headers : Hash(String, String))\n # The form field's name, `name=` of `Content-Disposition`.\n def name : String | ::Nil\n # The part's next bytes, at most *max*; \"\" at its end.\n def read(max : Int32 = 65536) : String | Cancelled | SocketError | HTTPError\n # The rest of the part as one string, refused past *limit* bytes.\n def read_all(limit : Int64 = 2147483647_i64) : String | Cancelled | SocketError | HTTPError\nend\n\n# What a server's block is handed: one request. Its body is `body`, read\n# whole before the block ran, or under `stream_bodies` read by the block\n# from `body_io` as it arrives; `body` then reads the rest itself, and a\n# body that cannot be read - the client went, or sent one that is not\n# HTTP - ends the connection with that sentence rather than be answered as\n# if it were whole.\npub class Request\n def body : String\n def body_io : BodyReader\n # The pairs of the request's `Cookie` header, the first of a name kept.\n def cookies : Hash(String, String)\n # The fields of a form: the query's, and an\n # `application/x-www-form-urlencoded` body's after them. The body is\n # read for it.\n def form : Params\n def header(name : String) : String | ::Nil\n def headers : Hash(String, String)\n # A request whose body is in hand: what `parse_request` answers.\n def initialize(method : String, path : String, query : String | ::Nil, headers : Hash(String, String), body : String, version : String = \"HTTP/1.1\", remote_address : String | ::Nil = nil)\n # A request whose body is still on the connection.\n def initialize(method : String, path : String, query : String | ::Nil, headers : Hash(String, String), version : String, reader : BodyReader, remote_address : String | ::Nil = nil)\n def method : String\n # The body as `multipart/form-data` parts, read as they arrive; nil when\n # the `Content-Type` is not multipart or names no boundary\n # (`Multipart.boundary`).\n def multipart : Multipart | ::Nil\n def path : String\n # The client's certificate chain, leaf first, as std/tls checked it:\n # under `serve(tls:)` with `client_roots` set, the certificate the\n # client presented; empty otherwise.\n def peer_certificates : Array(Certificate)\n # The client's certificate chain, leaf first, as std/tls checked it:\n # under `serve(tls:)` with `client_roots` set, the certificate the\n # client presented; empty otherwise.\n def peer_certificates=(value : Array(Certificate)) : Array(Certificate)\n def query : String | ::Nil\n # The client's address, as the server's socket saw it (no port): nil\n # for a request a program made, or when the client had already gone. A\n # proxy in front is what this names; `X-Forwarded-For` is the proxy's\n # word, and a header any client can write.\n def remote_address : String | ::Nil\n def tls_resumed=(resumed : Bool) : Bool\n # Whether the TLS connection the request came over resumed a session by\n # a ticket, under `serve(tls:)`: its `peer_certificates` are then the\n # ticket's. False in the clear.\n def tls_resumed? : Bool\n def version : String\nend\n\n# A response: what a server's block answers, and what a client is handed.\n#\n# To write one: `Response.new(200, \"hello\")`, a status and a string;\n# `Response.new(200, io)`, a stream the server copies out and closes, with\n# the caller's `Content-Length` when it gives one and chunked otherwise;\n# `Response.stream(200) { |w| w.write(\"...\") }`, whose block writes as it\n# goes; `Response.upgrade(headers) { |socket, leftover| ... }`, a 101 after\n# which the connection is the block's. `add_header` writes a field on a\n# line of its own, as each `Set-Cookie` must be.\n#\n# What a client is handed: the status, reason and headers, and the body -\n# `body` whole, or `body_io` as it arrives inside `HTTP.open`'s block.\npub class Response\n # One more line of the field *name*, written on a line of its own: what\n # two `Set-Cookie`s need, since the \", \" a field's lines are joined with\n # is part of a cookie's date.\n def add_header(name : String, value : String) : Nil\n # The lines of each field written on more than one, by its name in\n # `headers`; nil when every field is on one line.\n def apart : Hash(String, Array(String)) | ::Nil\n # The body: whole. Inside `HTTP.open`'s block it is read here, the first\n # time it is asked for, and a body that cannot be read panics with why;\n # `body_io` answers that as a value.\n def body : String\n # The body as it arrives. For a response a program made, its string.\n def body_io : BodyReader\n # Whether the client undid the body's `gzip`, `deflate` or `zstd`\n # coding; the `Content-Encoding` and `Content-Length` that described it\n # are gone from the headers then.\n def decoded? : Bool\n # A header by name, as the server spelled it or otherwise: a field\n # name is case-insensitive (RFC 9110 §5.1), and `content-length` is as\n # common on the wire as `Content-Length`.\n def header(name : String) : String | ::Nil\n # A field's lines apart, in the order they came: `header` joins them\n # with \", \", and `Set-Cookie` is the field that join breaks (RFC 9110\n # §5.3), since a cookie's `Expires` date has a comma in it - two cookies\n # read as \"a=1; Expires=Wed, 21 Oct 2026 07:28:00 GMT, b=2\", which no\n # split takes back apart. Empty for a field that is not there.\n def header_values(name : String) : Array(String)\n def headers : Hash(String, String)\n # A response a client read: its body comes from *reader*, and *url* is\n # where it came from.\n def initialize(status : Int32, reason : String, headers : Hash(String, String), apart : Hash(String, Array(String)) | ::Nil, reader : BodyReader, url : String, decoded : Bool)\n def initialize(status : Int32, reason : String, headers : Hash(String, String), body : String, apart : Hash(String, Array(String)) | ::Nil = nil)\n # A response to write: the reason is the status's own, the headers the\n # caller's. `Response.new(200, \"hello\")` is the common shape.\n def initialize(status : Int32, body : String = \"\", headers : Hash(String, String) = {} of String => String)\n # A response whose body is *source*, copied out by the server and\n # closed after.\n def initialize(status : Int32, source : IyiIO, headers : Hash(String, String) = {} of String => String)\n # The body read whole into the response, which is answered; why not,\n # when it cannot be.\n def load : Response | Cancelled | SocketError | HTTPError\n def reason : String\n def source : IyiIO | ::Nil\n def status : Int32\n # A response whose body the block writes as it goes, chunked.\n def self.stream(status : Int32, headers : Hash(String, String) = {} of String => String, &writer : (BodyWriter -> Nil)) : Response\n def success? : Bool\n def takeover : Proc(IyiSocket | TlsStream, String, Nil) | ::Nil\n protected def takeover=(takeover : Proc(IyiSocket | TlsStream, String, Nil)) : Proc(IyiSocket | TlsStream, String, Nil)\n def tls_resumed=(resumed : Bool) : Bool\n # Whether the `https://` connection the answer came over resumed a TLS\n # session by a ticket an `HTTPClient` kept, rather than a full\n # handshake; false in the clear and for one a program made.\n def tls_resumed? : Bool\n # A 101 Switching Protocols with *headers* (`Upgrade` and the\n # protocol's own), after which the connection is the block's: it is\n # handed the connection - the socket, or under `serve(tls:)` the\n # `TlsStream` over it - and the bytes the client sent after its request,\n # and the connection closes when it returns.\n def self.upgrade(headers : Hash(String, String), &takeover : (IyiSocket | TlsStream, String -> Nil)) : Response\n # The URL the answer came from, after any redirects; nil for one a\n # program made.\n def url : String | ::Nil\n def writer : Proc(BodyWriter, Nil) | ::Nil\n protected def writer=(writer : Proc(BodyWriter, Nil)) : Proc(BodyWriter, Nil)\nend\n\npub struct Server\n # The headers a coded body goes with: the coding, and `Vary` so that a\n # cache keeps the answers apart. A `Content-Length` the block gave is\n # the plain body's, and goes.\n protected def self.coded(response : Response, coding : String) : Response\n # The coding *response* goes in to the client of *req*, or nil: one the\n # client takes (RFC 9110 §12.5.3, a `q` of 0 refusing it), for an\n # answer with a body and a type worth compressing, and no coding of its\n # own. A whole body goes `zstd` when the client's `q` for it is at least\n # its `q` for gzip, and `gzip` otherwise. The tie goes to zstd for the\n # server's time: measured on this machine, release builds, on\n # src/std/http.iyi (199,134 bytes) `Gzip.compress` wrote 54,484 bytes in\n # 5 ms and `Zstd.compress` 61,753 in 1 ms, and on CHANGELOG.md (1.5 MB)\n # 552,446 in 58 ms against 589,785 in 13 ms - a quarter of the time, for\n # an eighth more bytes at most. A stream - an `IyiIO` or a\n # `Response.stream` - goes gzip or as it is: std/compress's `Deflater`\n # writes each piece as it comes, where std/zstd's compressor takes its\n # input whole, and a frame a write would code each piece alone.\n def self.coding_for(req : Request, response : Response) : String | ::Nil\n # A string body compressed whole in *coding*, `zstd` or `gzip`, with\n # the headers that say so. `Zstd.compress`'s frame needs a window of\n # 1 MiB at most, inside the 8 MB RFC 9659 §3 holds an encoder to.\n protected def self.compressed(response : Response, coding : String) : Response\n # A response's head. `Content-Length` is *length*'s - the caller's own\n # line is checked against it, and kept only where no body follows it: a\n # HEAD, or a 304 that names the length a 200 would have (RFC 9110 §8.6) -\n # or `Transfer-Encoding: chunked` when *chunked*, or neither for a body\n # the connection's close ends. `Connection` says what the connection will\n # do next, except on an *upgrade*, whose own line says it. A 1xx, 204 or\n # 304 has no content (RFC 9110 §15), and writes neither a body nor a\n # length of its own (§8.6): the body was read by the client as the start\n # of the next answer, and `Content-Length: 0` on a 304 told a cache that\n # the resource had become empty. A field added on lines of its own\n # (`add_header`) is written a line each.\n def self.format_head(response : Response, head : Bool, close : Bool, length : Int64 | ::Nil, chunked : Bool, upgrade : Bool = false) : String\n # The response as it goes on the wire, whole: `format_head` for its\n # string body, and the body.\n def self.format_response(response : Response, head : Bool, close : Bool) : String\n # One connection: requests until the client is done. A request that is\n # not HTTP is answered with why and the connection closed, since the\n # bytes after it cannot be trusted to be a request either. Requests that\n # came in one read are read where they lie, one after another. A\n # connection that opens with HTTP/2's preface is served as HTTP/2. Under\n # *tls* the handshake comes first, and the connection ends with\n # close_notify. A connection this side wrote last on - an answer, a\n # refusal, a GOAWAY - closes by lingering (`Conn#close`), so the reset\n # a close with the client's bytes unread is cannot take what was\n # written from the client before it reads it. One that timed out or was\n # cancelled, with nothing of this side's waiting to be read, closes at\n # once, and so does one whose client said `close` and sent nothing past\n # its request (`serve_h1`).\n def self.handle(client : IyiSocket, handler : Proc(Request, Response), listener : IyiSocket | ServeStop | Nil = nil, idle : Hash(UInt64, Conn) | ::Nil = nil, stream_bodies : Bool = false, compress : Bool = false, timeout_ms : Int32 = 0, tls : TlsServerConfig | TlsFrozenServerConfig | Nil = nil, request_timeout_ms : Int32 = 0) : Nil\n def initialize\n # A request's head - the text before its blank line - read and checked,\n # or why it is not one.\n def self.parse_head(text : String) : RequestHead | HTTPError\n # A request at *from* in `text`, if a whole one is there. No request and\n # no error means \"not yet\". `consumed` counts from the start of `text`.\n def self.parse_request(text : String, from : Int32 = 0) : ParsedRequest\n # Serve `listener` until it is closed, on *workers* threads: each\n # connection is a task on the pool `spawn(unit: :new)` starts (SPEC.md\n # III.4.13), started by whichever worker is free and served there to\n # its end, while the thread that called this accepts. The block runs on\n # the connection's worker, once per request, on several workers at\n # once; what it answers is written back.\n # The close ends a connection waiting on its client too, for its next\n # request or for the rest of one, and one that is answering ends when its\n # answer is written: a keep-alive client that sat idle kept `serve` from\n # returning for as long as it stayed, and so did one that had sent\n # what has arrived of a request so far - one byte of it was enough.\n #\n # *stream_bodies*: the block reads each request's body from `body_io`\n # rather than being handed it whole. *compress*: an answer whose type\n # std/mime calls compressible goes zstd or gzip to a client that\n # accepts one (`coding_for`).\n #\n # *timeout_ms*: a request's head must have arrived within it, counted\n # from when the server starts waiting for one - a kept-alive connection's\n # idle time included - and no read of a body nor write of an answer may\n # wait longer; a connection that does is closed. Without it, a client\n # that sends a byte of its head every few seconds (Slowloris) holds a\n # connection and its fiber for as long as it likes, and so does one that\n # reads none of its answer. A minute by default, nginx's\n # `client_header_timeout`; 0 for none. A connection handed over by\n # `Response.upgrade` waits as its protocol likes.\n #\n # *request_timeout_ms*: the whole request - head and body - must have\n # arrived within it, counted from the same moment as *timeout_ms*, as\n # Go's `ReadTimeout` beside its `ReadHeaderTimeout`; the head is held to\n # the sooner of the two. Without it a body sent a byte every few seconds\n # was bounded per read alone, and held its connection for as long as it\n # dripped. A block that reads the body itself (*stream_bodies*) reads\n # under it until the block returns, and what it leaves unread is read\n # past under it too. Over HTTP/2 the wait for each request and its body\n # is held to it on the connection the same way, the head to the sooner\n # of the two. Five minutes by default, which a 64 MiB body (`MAX_BODY`)\n # meets at 224 KB/s; a server taking large uploads over slow links\n # raises it. 0 for none. A connection past it is closed, unanswered, as\n # one past *timeout_ms* is.\n #\n # *max_connections*: at most this many connections are served at once;\n # 1024 by default, 0 for no limit. Past it the server stops accepting\n # until one ends, so the next connection waits in the kernel's listen\n # queue - queued, not refused, as Go's `netutil.LimitListener` does - and\n # is served in its turn; a client that gives up waiting goes unserved.\n # Each served connection holds its place until it closes, a kept-alive\n # one between requests too, which *timeout_ms* bounds. The process's\n # own limit on descriptors may come first.\n #\n # *tls*: each connection is TLS (std/tls's `TlsServer`, 1.3 or 1.2) under this\n # configuration, its handshake held to *timeout_ms* too and run on the\n # worker that serves it; one whose handshake fails is closed, the\n # client told why by an alert. Inside it a connection that opens with\n # HTTP/2's preface - as a client whose ALPN chose `h2` does, when\n # `tls.alpn` offers it - is served HTTP/2, and any other HTTP/1.1. A\n # `Response.upgrade` block over TLS is handed the `TlsStream`, so a\n # WebSocket is `wss://`. On more than one worker the config is a\n # `TlsFrozenServerConfig` - `config.frozen` - since every worker reads\n # it at once: its ticket keys are one set behind a lock, so a ticket a\n # connection on one worker was sent resumes on any other, and an\n # identity source given to `frozen` is a block the compiler checked. A\n # `TlsServerConfig` itself is refused at the call (\"Server.serve hands\n # `tls : TlsServerConfig` to other threads, several at once, and it is\n # not Share: ... Pass `config.frozen` ...\"), not frozen here: `frozen`\n # is a copy, so a property assigned after the server started would be\n # served by no worker and nothing would say so, and a config with an\n # `identity_source` cannot be frozen without its source given again as\n # a block the compiler checks. Under `workers: 1` either is served.\n #\n # *workers*: the pool's size, `IyiWorkers.count` by default - `IYI_WORKERS`\n # from the environment, else the cores this process may run on. The\n # pool is the process's one, and its size does not change once it has\n # started, so a count other than the one it started with panics. Every\n # worker runs the block at once, so the compiler checks it where it is\n # written as it checks a parallel task's (`@[Share]`, SPEC.md III.4.4):\n # every value it captures must be `Share` - a table behind a `Mutex`\n # (std/mutex), a count in an `Atomic`, a `SharedRouter` (std/router) -\n # every captured local assigned once, and the constants and class\n # variables it names `Share`. The refusal names the variable, why its\n # type is not `Share`, and the two ways out: the lock, or `workers: 1`.\n # `workers: 1`, written as the literal, serves on the calling thread\n # alone - each connection a task beside the accept loop, as `spawn`\n # makes one - and its block is not checked: a block that calls a\n # `Router`, appends to an `Array` or keeps a handle that is not `Share`\n # is served there. A count in a variable is checked whatever it holds,\n # since the compiler cannot know it is 1. A count of 1 from the default\n # (`IYI_WORKERS=1`, one core) serves on the calling thread too.\n #\n # A connection stays on the worker that started it (III.4.13, part 1):\n # connections spread over the workers free as they arrive, and one kept\n # alive is not moved later. A block that computes without parking holds\n # its worker meanwhile, as any task does. The listener is the calling\n # thread's, and a close of it is made there: a block that stops the\n # server sends on a `Channel` a task beside the server receives from,\n # and that task closes it. At the stop each connection waiting on its\n # client is closed on its own worker, sent close_notify there first\n # under *tls*.\n def self.serve(listener : IyiSocket, stream_bodies : Bool = false, compress : Bool = false, timeout_ms : Int32 = 60000, tls : C = nil, request_timeout_ms : Int32 = REQUEST_TIMEOUT, max_connections : Int32 = MAX_CONNECTIONS, workers : Int32 = IyiWorkers.count, &handler : (Request -> Response)) : Nil forall C\n # `serve` with a value for its handler rather than a block: a\n # `SharedProc`, a `SharedRouter` (std/router), or one of the program's\n # own, whose `call(request : Request) : Response` answers each request,\n # as Go's `http.Handler` does. On more than one worker it must be\n # `Share` (SPEC.md III.4.4), since every connection on every worker\n # calls the one value at once: the compiler refuses one that is not at\n # the argument, naming the field that failed and the two ways out - a\n # count in an `Atomic`, a pool or a cache behind a `Mutex`, a\n # `SharedRouter` for a `Router`, or `workers: 1`, under which any value\n # with that `call` is served on the calling thread, a `Router`\n # included. What the check does not see is the edge `spawn(unit: :new)`\n # has too: a method the handler calls that writes a module's state. A\n # struct handler is copied into each connection's task, and an `Atomic`\n # in it with it: what the connections share is a class, or held by\n # one.\n #\n # The rest is the block form's: *stream_bodies*, *compress*,\n # *timeout_ms*, *tls* (`config.frozen` on more than one worker),\n # *request_timeout_ms*, *max_connections* and *workers*, HTTP/2 by its\n # preface, `Response.upgrade`, and a close of *listener* - on the\n # thread that called this - ending every connection waiting on its\n # client and returning once the others have answered.\n def self.serve(listener : IyiSocket, handler : H, stream_bodies : Bool = false, compress : Bool = false, timeout_ms : Int32 = 60000, tls : C = nil, request_timeout_ms : Int32 = REQUEST_TIMEOUT, max_connections : Int32 = MAX_CONNECTIONS, workers : Int32 = IyiWorkers.count) : Nil forall H, C\n protected def self.writer_for(socket : IyiSocket | TlsStream, chunked : Bool, gzip : Bool) : BodyWriter\nend\n\n# A TLS connection used as a socket is: read into a buffer, written to,\n# closed, its timeouts set - by a `Conn`, a `BodyWriter`, and a connection\n# handed over by an upgrade (`wss://` at either end). What TLS refuses is a\n# `SocketError` carrying TLS's own sentence (`layer_reason`), so answers\n# keep the types they have over a plain socket.\npub class TlsStream\n # The socket closed at once, nothing sent or read first.\n def abort : Nil\n # close_notify, the sending half shut, and what the peer still sends\n # read past for a bounded time before the socket closes\n # (`TlsConnection#close`).\n def close : Nil\n # close_notify and the sending half shut; reads go on until the peer's\n # own (`TlsConnection#close_write`).\n def close_write : SocketError | ::Nil\n def closed? : Bool\n def initialize(tls : TlsConnection, host : String)\n # The peer's certificate chain, leaf first, as the handshake checked it:\n # the server's, at a client; the client's, at a server that asked.\n def peer_certificates : Array(Certificate)\n # Up to *count* bytes into *buffer*: 0 once the peer closed with\n # close_notify.\n def read(buffer : Pointer(UInt8), count : Int32) : Int32 | Cancelled | SocketError\n # Up to *max_bytes* as a string, what is held first: \"\" once the peer\n # closed with close_notify. `IyiSocket#read`'s form, for a block an\n # upgrade hands either.\n def read(max_bytes : Int32 = 4096) : String | Cancelled | SocketError\n # How long a read or a write of the connection under it may wait.\n def read_timeout_ms=(ms : Int32 | ::Nil) : Int32 | ::Nil\n # Whether the handshake resumed a session (`TlsConnection#resumed?`).\n def resumed? : Bool\n def write(text : String) : Int32 | Cancelled | SocketError\n def write_timeout_ms=(ms : Int32 | ::Nil) : Int32 | ::Nil\nend\n\n# What `HTTP.upgrade` answers: the 101, and the connection, which is the\n# caller's now - the socket, and the bytes the server sent after its head.\npub class Upgraded\n def initialize(response : Response, socket : IyiSocket | TlsStream, leftover : String)\n def leftover : String\n def response : Response\n # The connection: the socket, or for `https://` the `TlsStream` over it.\n def socket : IyiSocket | TlsStream\nend\n\nimpl Error for HTTPError\n def message : String\nend\n" }, { "name": "std/http_proxy", @@ -286,31 +286,31 @@ { "name": "std/idna", "path": "src/std/idna.iyi", - "sourceSha256": "d4e0bdb1a38a20a56ef6638b39f6533347dec2b8f8bd30fb4a747256b654d693", + "sourceSha256": "1d67b14b54bc26e16b728e64a0ec946351cfcf9b16eab3b7f456cb0fd7030a1a", "surface": "module std/idna\n\n# Host names to and from the ASCII form DNS looks up, IDNA2008's way, label\n# by label; the header says what is checked and what is not.\npub struct IDNA\n def initialize\n # RFC 5892's derived property of *char* (section 3), computed in the\n # order the RFC gives: the exceptions (section 2.6), unassigned code\n # points, the LDH characters, the joiners, and then a letter, digit or\n # mark that neither case folding nor NFKC changes, that is not default\n # ignorable, white space or a noncharacter, and not in the ignorable\n # blocks or old Hangul jamo. Everything else is Disallowed.\n def self.property(char : Char) : IdnaProperty\n # The name as DNS looks it up: every U-label as its `xn--` A-label,\n # every ASCII label lower-cased.\n def self.to_ascii(name : String) : String | IdnaError\n # The name as a person reads it: every A-label decoded, every ASCII\n # label lower-cased; checked as `to_ascii` checks it.\n def self.to_unicode(name : String) : String | IdnaError\n # `U+00FC`: four hex digits at least, upper case.\n def self.u_plus(cp : Int64) : String\nend\n\n# What `IDNA.to_ascii`, `IDNA.to_unicode` and `URI.ascii_host` answer for a\n# name they cannot carry: the sentence names the label and why.\npub struct IdnaError\n def initialize(message : String)\n def to_s : String\nend\n\n# The derived property of RFC 5892 section 2: whether a code point may\n# appear in a U-label (PValid), only in a context (ContextJ, ContextO), not\n# at all (Disallowed), or is unassigned in the Unicode `std/unicode` holds.\npub enum IdnaProperty : Int32\n PValid = 0\n ContextJ = 1\n ContextO = 2\n Disallowed = 3\n Unassigned = 4\nend\n\n# RFC 3492's bootstring with its Punycode parameters (section 5).\npub struct Punycode\n # The string *text* is the Punycode of (section 6.2), or the reason it\n # is none. Digits are read in either case; basic code points are kept\n # in the case they were written.\n def self.decode(text : String) : String | PunycodeError\n # The Punycode of *text*'s code points (section 6.3). Total: every\n # string has one. Bytes that are not UTF-8 are read as `each_char` reads\n # them, U+FFFD each.\n def self.encode(text : String) : String\n def initialize\nend\n\n# What `Punycode.decode` answers for input that is not Punycode.\npub struct PunycodeError\n def initialize(message : String)\n def to_s : String\nend\n\nimpl Error for PunycodeError\n def message : String\nend\n\nimpl Error for IdnaError\n def message : String\nend\n" }, { "name": "std/indexable", "path": "src/std/indexable.iyi", - "sourceSha256": "150f44ac52d880972ddb618cffee1029ef10f3a5f562a472e6986735bb2bfb9d", + "sourceSha256": "b2842e5d053bf0356ee1019e9aaba651a7c18b2b4cc5efb1c9fd167a728f78cc", "surface": "module std/indexable\n\npub trait Indexable\n type Elem\n # Returns the element at the given index. Negative indices count from the\n # end, so `a[-1]` returns the last element. Raises when index is out of\n # bounds, naming the index as it was written and the size there was:\n # `index out of range` on its own told a caller with a computed index\n # nothing it did not already know. The wording is `Array`'s\n # (src/iyi/array.iyi), because one mistake gets one sentence.\n def [](index : Int32) : Elem\n # Returns the element at the given index, or nil when index is out of bounds.\n # Negative indices count from the end.\n def []?(index : Int32) : Elem | ::Nil\n # Binary search on a sorted collection. Returns the first element for which\n # the block returns true, or nil if no element matches.\n def bsearch(& : (Elem -> Bool)) : Elem | ::Nil\n # Binary search returning the index of the first element for which the block\n # returns true, or nil.\n def bsearch_index(& : (Elem -> Bool)) : Int32 | ::Nil\n # Single-index navigation.\n def dig(index : Int32) : Elem\n # Single-index nilable navigation.\n def dig?(index : Int32) : Elem | ::Nil\n # Default iteration yielding elements sequentially from 0 up to size - 1.\n # It answers `Enumerable`'s requirement for a type that also says `impl\n # Enumerable`, which is one more line than the ergonomics claim implies\n # (SPEC.md II.6) — the claim that this trait supplied it was false, and\n # `Array` went without `zip`, `take` and the rest until the line existed.\n def each(& : (Elem -> Nil)) : Nil\n # Yields consecutive overlapping windows of n elements each.\n def each_cons(n : Int32, & : (Array(Elem) -> Nil)) : Nil\n # Returns an Array of consecutive overlapping windows of n elements each.\n def each_cons(n : Int32) : Array(Array(Elem))\n # Yields each valid index from 0 up to size - 1.\n def each_index(& : (Int32 -> Nil)) : Nil\n # Yields slices of n elements each to the given block.\n def each_slice(n : Int32, & : (Array(Elem) -> Nil)) : Nil\n # Returns an Array of slices of n elements each.\n def each_slice(n : Int32) : Array(Array(Elem))\n # Returns true when the collection contains no elements.\n def empty? : Bool\n # Structural equality comparing collection size and element values.\n def equals?(other : self) : Bool\n # Structural equality comparing elements with a custom predicate block.\n def equals?(other : self, & : (Elem, Elem -> Bool)) : Bool\n # Returns the element at index. If out of bounds, returns the default value.\n def fetch(index : Int32, default : Elem) : Elem\n # Returns the element at index. If out of bounds, yields the original index\n # to the given block and returns its result.\n def fetch(index : Int32, & : (Int32 -> Elem)) : Elem\n # Returns the first element. Raises when the collection is empty.\n def first : Elem\n # Returns the first element, or nil when the collection is empty.\n def first? : Elem | ::Nil\n # Combines the elements' hashes. Wrapping arithmetic, because a hash is a\n # number modulo the word and nothing else: written with the checked `*` and\n # `+`, this panicked with \"arithmetic overflow\" the moment a collection was\n # long enough for `31 * h` to leave `Int32` - six elements of two digits\n # each was enough, while the five-element cases in the gates passed.\n #\n # Mixed as the prelude's `Array#hash` is, which is also what keeps an\n # array's and another indexable's hashes one function: `31 * h + e` gave\n # a grid of pairs a few hashes between many, and a table probing a slot\n # at a time merged their runs.\n def hash : Int32\n # Returns the first index where element equals value, or nil if not found.\n def index(value : Elem) : Int32 | ::Nil\n # Returns the first index for which the block returns true, or nil.\n def index(& : (Elem -> Bool)) : Int32 | ::Nil\n # Joins element string representations with the specified separator.\n #\n # Into one builder, as `Array#join` writes: adding each element to the\n # text so far copied that text once per element, and 20,000 elements\n # took 1.8 s where the same array's `join` took 1 ms.\n def join(separator : String = \"\") : String\n # Returns the last element. Raises when the collection is empty.\n def last : Elem\n # Returns the last element, or nil when the collection is empty.\n def last? : Elem | ::Nil\n # Yields elements in reverse order, from size - 1 down to 0.\n def reverse_each(& : (Elem -> Nil)) : Nil\n # Returns the last index where element equals value, or nil if not found.\n def rindex(value : Elem) : Int32 | ::Nil\n # Returns the last index for which the block returns true, or nil.\n def rindex(& : (Elem -> Bool)) : Int32 | ::Nil\n # One element, or *n* distinct ones, chosen by `random`, a fresh generator\n # when none is given, the way std/random's `Array#sample` chooses them:\n # so a `Deque` makes the other library's choices in its order, as an\n # array does. `sample(Int32)` was a seed here and a count there, so\n # `[10, 20, 30, 40, 50].sample(3)` answered 20 without std/random and\n # three elements with it, a `Deque`'s answered 20 either way, and\n # `sample` answered the middle element on every run.\n def sample(random : Random | ::Nil = nil) : Elem\n def sample(n : Int32, random : Random | ::Nil = nil) : Array(Elem)\n # Returns a sample element using the index returned by the caller's block.\n def sample(& : (Int32 -> Int32)) : Elem\n abstract def size : Int32\n # Copies elements into a newly allocated Array with pre-allocated capacity.\n def to_a : Array(Elem)\n abstract def unsafe_fetch(index : Int32) : Elem\n # Returns an Array containing elements at the given indices array.\n def values_at(indexes : Array(Int32)) : Array(Elem)\n # Returns an Array containing elements at the given indices.\n def values_at(*indexes : Int32) : Array(Elem)\nend\n\n# `Indexable` with one more requirement, `unsafe_put`, from which the\n# in-place operations follow. In-place variants are spelled `_in_place`;\n# the copies (`rotated`, `reversed`) live on the concrete type, since a\n# trait cannot build one without knowing how.\npub trait IndexableMutable : ::Std::Indexable::Indexable\n type Elem\n # The count elements from offset become value. A negative count is a\n # mistake; a window that runs past the end is refused by naming the\n # index that would have been written.\n def fill(value : Elem, offset : Int32, count : Int32) : self\n # Every element becomes value.\n def fill(value : Elem) : self\n # Every element becomes what the block answers for its index.\n def fill(& : (Int32 -> Elem)) : self\n # Reverses elements in place.\n def reverse_in_place : self\n # Rotates elements in place so that the element at position n comes\n # first; a negative n rotates the other way. Three reversals, no\n # scratch space.\n def rotate_in_place(n : Int32 = 1) : self\n # Swaps two elements in place.\n def swap(index0 : Int32, index1 : Int32) : self\n abstract def unsafe_put(index : Int32, value : Elem) : Elem\n # Replaces the element at index with what the block answers for it,\n # and answers the new value.\n def update(index : Int32, & : (Elem -> Elem)) : Elem\nend\n\nimpl Indexable for Array(T) forall T\n def unsafe_fetch(index : Int32) : T\nend\n\nimpl IndexableMutable for Array(T) forall T\n def unsafe_put(index : Int32, value : T) : T\nend\n\nclass ::Array(T)\n # Every pair with an element of the other array, this array's order\n # first. Not `product`: on an `Enumerable`, `product` is the\n # multiplicative fold, and one name means one thing.\n def cartesian(other : Array(U)) : Array(Tuple(T, U)) forall U\n # Forgets every element.\n def clear : Array(T)\n # Removes the nils in place.\n def compact_in_place : Array(T)\n # Removes and answers the element at index, shifting what follows left.\n def delete_at(index : Int32) : T\n # Removes every element the block answers true for, in place, keeping\n # the order of the rest; one pass, no per-element shifting.\n def delete_if(& : (T -> Bool)) : Array(T)\n # The same pairs, handed to a block in the same order, with no array of\n # them made - the other library's `each_cartesian`.\n def each_cartesian(other : Array(U), & : (T, U -> _)) : Nil forall U\n # Inserts value at index, shifting what follows right. An index of\n # `size` appends; `-1` also appends, as the position after the last.\n def insert(index : Int32, value : T) : Array(T)\n # Keeps only the elements the block answers true for, in place.\n def keep_if(& : (T -> Bool)) : Array(T)\n # A copy rotated so that the element at position n comes first; the\n # past participle names the copy, as `sorted` and `reversed` do, and\n # `rotate_in_place` is the one that moves this array.\n def rotated(n : Int32 = 1) : Array(T)\nend\n" }, { "name": "std/ini", "path": "src/std/ini.iyi", - "sourceSha256": "95cf42e3a57ffd9864fd1692bdcdbad9003b3ac1f0a75e4da0dad940b8b6fa03", + "sourceSha256": "6e4d743f1eb583c7c28a5f2ae49b293af9ca24bd21725727f8e71a6428067d52", "surface": "module std/ini\n\npub struct INI\n def self.build(ini : Hash(String, Hash(String, String)), space : Bool = false) : String\n def self.build(io : IO, ini : Hash(String, Hash(String, String)), space : Bool = false) : Nil\n def initialize\n # Past a byte order mark, which Windows PowerShell 5.1's `Set-Content\n # -Encoding UTF8` and older Notepad write: it panicked \"expected\n # declaration at line 1, column 8\" at a `[section]` behind one, and the\n # first key of a file without a section kept it and never matched.\n def self.parse(string : String) : Hash(String, Hash(String, String))\n def self.parse(io : IO) : Hash(String, Hash(String, String))\nend\n" }, { "name": "std/int", "path": "src/std/int.iyi", - "sourceSha256": "ac5815541443b344d8f4a81fe4786fd5402d92743b6d31a77fe6de256b476fcf", + "sourceSha256": "2aae1b4566101aa34d4e837711e75d73682c18e6fd7f279e3a076538635b1fbe", "surface": "module std/int\n\nstruct ::Float64\n def !=(other : Int8) : Bool\n def !=(other : Int16) : Bool\n def !=(other : Int128) : Bool\n def !=(other : UInt16) : Bool\n def !=(other : UInt32) : Bool\n def !=(other : UInt128) : Bool\n def *(other : Int8) : self\n def *(other : Int16) : self\n def *(other : Int128) : self\n def *(other : UInt16) : self\n def *(other : UInt32) : self\n def *(other : UInt128) : self\n def +(other : Int8) : self\n def +(other : Int16) : self\n def +(other : Int128) : self\n def +(other : UInt16) : self\n def +(other : UInt32) : self\n def +(other : UInt128) : self\n def -(other : Int8) : self\n def -(other : Int16) : self\n def -(other : Int128) : self\n def -(other : UInt16) : self\n def -(other : UInt32) : self\n def -(other : UInt128) : self\n def <(other : Int8) : Bool\n def <(other : Int16) : Bool\n def <(other : Int128) : Bool\n def <(other : UInt16) : Bool\n def <(other : UInt32) : Bool\n def <(other : UInt128) : Bool\n def <=(other : Int8) : Bool\n def <=(other : Int16) : Bool\n def <=(other : Int128) : Bool\n def <=(other : UInt16) : Bool\n def <=(other : UInt32) : Bool\n def <=(other : UInt128) : Bool\n # The integer's comparison, exact, with the sides swapped.\n def ==(other : Int8) : Bool\n # The integer's comparison, exact, with the sides swapped.\n def ==(other : Int16) : Bool\n # The integer's comparison, exact, with the sides swapped.\n def ==(other : Int128) : Bool\n # The integer's comparison, exact, with the sides swapped.\n def ==(other : UInt16) : Bool\n # The integer's comparison, exact, with the sides swapped.\n def ==(other : UInt32) : Bool\n # The integer's comparison, exact, with the sides swapped.\n def ==(other : UInt128) : Bool\n def >(other : Int8) : Bool\n def >(other : Int16) : Bool\n def >(other : Int128) : Bool\n def >(other : UInt16) : Bool\n def >(other : UInt32) : Bool\n def >(other : UInt128) : Bool\n def >=(other : Int8) : Bool\n def >=(other : Int16) : Bool\n def >=(other : Int128) : Bool\n def >=(other : UInt16) : Bool\n def >=(other : UInt32) : Bool\n def >=(other : UInt128) : Bool\n def fdiv(other : Int8) : self\n def fdiv(other : Int16) : self\n def fdiv(other : Int128) : self\n def fdiv(other : UInt16) : self\n def fdiv(other : UInt32) : self\n def fdiv(other : UInt128) : self\n def to_i128 : Int128\n def to_i16 : Int16\n def to_i8 : Int8\n def to_u : UInt32\n def to_u128 : UInt128\n def to_u16 : UInt16\n def to_u32 : UInt32\n # Not the instruction: a double to a 128-bit integer is a call\n # into compiler-rt (`__fixdfti`) on aarch64, which the floor\n # (SPEC.md III.9) does not link. The mantissa and exponent are\n # read off the bits and shifted into place instead; the caller\n # has already refused what does not fit.\n def unsafe_to_i128 : Int128\n # The prelude declares the unchecked form for its own five, as it\n # declares the checked one, so declaring it here too would be R-3's\n # duplicate.\n def unsafe_to_i16 : Int16\n # The conversions to the integers the prelude does not reach. The\n # unchecked form saturates, as the prelude's does - past the range it is\n # the nearest bound and NaN is 0, in every build and on every target -\n # but for the two 128-bit ones below; the checked form truncates first\n # and refuses what the truncation does not hold:\n # `127.9.to_i8` is 127 and `(-0.5).to_u16` is 0, where the range was\n # once checked on the untruncated value and both were refused. NaN and\n # the infinities are refused. The prelude's own five (`to_i`, `to_i32`,\n # `to_i64`, `to_u8`, `to_u64`) are the compiler's and say the same.\n # The prelude declares the unchecked form for its own five, as it\n # declares the checked one, so declaring it here too would be R-3's\n # duplicate.\n def unsafe_to_i8 : Int8\n # The prelude declares the unchecked form for its own five, as it\n # declares the checked one, so declaring it here too would be R-3's\n # duplicate.\n def unsafe_to_u : UInt32\n # Not the instruction: a double to a 128-bit integer is a call\n # into compiler-rt (`__fixdfti`) on aarch64, which the floor\n # (SPEC.md III.9) does not link. The mantissa and exponent are\n # read off the bits and shifted into place instead; the caller\n # has already refused what does not fit.\n def unsafe_to_u128 : UInt128\n # The prelude declares the unchecked form for its own five, as it\n # declares the checked one, so declaring it here too would be R-3's\n # duplicate.\n def unsafe_to_u16 : UInt16\n # The prelude declares the unchecked form for its own five, as it\n # declares the checked one, so declaring it here too would be R-3's\n # duplicate.\n def unsafe_to_u32 : UInt32\nend\n\nstruct ::Int\n # Against any integer, as the other library's `Int#<=>` is, the widths\n # compared exactly by the primitives above. Against `self` only, an\n # `Int64` beside an `Int32` did not type, and once `std/traits` added\n # `Int32#<=>(Int32)` the literal in `1 <=> 1_i64` cast to that and to\n # `Float64` both: \"ambiguous call\" where the other library answers 0.\n def <=>(other : ::Int) : Int32\n # Bit `n`, 0 or 1; a bit past the width is 0 (or the sign).\n def bit(n : Int32) : Int32\n def bits_set?(mask : self) : Bool\n # The character with this code point: the prelude's `Int32#chr` contract\n # for every integer type, every code point but the surrogates. It stopped\n # at ASCII after the prelude's had moved on, so `233.chr` was 'é' and\n # `233_i64.chr` panicked \"233 is out of char range\".\n def chr : Char\n # The digits, least significant first: `1234.digits` is `[4, 3, 2, 1]`.\n # A negative number has no digits in this sense and is refused.\n def digits(base : Int32 = 10) : Array(Int32)\n # Euclid on the side of zero where every magnitude fits, as `Math.gcd`\n # works: the non-positive side for a signed type, its minimum included.\n # Taking `abs` first refused the minimum, and `(-2147483648).gcd(6)`\n # panicked \"arithmetic overflow\" where `Math.gcd` answered 2. Only\n # gcd(minimum, 0), whose answer does not fit, overflows.\n def gcd(other : self) : self\n def lcm(other : self) : self\nend\n\nstruct ::Int128\n def !=(other : Int8) : Bool\n def !=(other : Int16) : Bool\n def !=(other : Int32) : Bool\n def !=(other : Int64) : Bool\n def !=(other : Int128) : Bool\n def !=(other : UInt8) : Bool\n def !=(other : UInt16) : Bool\n def !=(other : UInt32) : Bool\n def !=(other : UInt64) : Bool\n def !=(other : UInt128) : Bool\n def !=(other : Float64) : Bool\n def %(other : Int128) : Int128\n def &(other : Int8) : self\n def &(other : Int16) : self\n def &(other : Int32) : self\n def &(other : Int64) : self\n def &(other : Int128) : self\n def &(other : UInt8) : self\n def &(other : UInt16) : self\n def &(other : UInt32) : self\n def &(other : UInt64) : self\n def &(other : UInt128) : self\n def &*(other : Int8) : self\n def &*(other : Int16) : self\n def &*(other : Int32) : self\n def &*(other : Int64) : self\n def &*(other : Int128) : self\n def &*(other : UInt8) : self\n def &*(other : UInt16) : self\n def &*(other : UInt32) : self\n def &*(other : UInt64) : self\n def &*(other : UInt128) : self\n def &+(other : Int8) : self\n def &+(other : Int16) : self\n def &+(other : Int32) : self\n def &+(other : Int64) : self\n def &+(other : Int128) : self\n def &+(other : UInt8) : self\n def &+(other : UInt16) : self\n def &+(other : UInt32) : self\n def &+(other : UInt64) : self\n def &+(other : UInt128) : self\n def &-(other : Int8) : self\n def &-(other : Int16) : self\n def &-(other : Int32) : self\n def &-(other : Int64) : self\n def &-(other : Int128) : self\n def &-(other : UInt8) : self\n def &-(other : UInt16) : self\n def &-(other : UInt32) : self\n def &-(other : UInt64) : self\n def &-(other : UInt128) : self\n def *(other : Int8) : self\n def *(other : Int16) : self\n def *(other : Int32) : self\n def *(other : Int64) : self\n def *(other : Int128) : self\n def *(other : UInt8) : self\n def *(other : UInt16) : self\n def *(other : UInt32) : self\n def *(other : UInt64) : self\n def *(other : UInt128) : self\n def *(other : Float64) : Float64\n def +(other : Int8) : self\n def +(other : Int16) : self\n def +(other : Int32) : self\n def +(other : Int64) : self\n def +(other : Int128) : self\n def +(other : UInt8) : self\n def +(other : UInt16) : self\n def +(other : UInt32) : self\n def +(other : UInt64) : self\n def +(other : UInt128) : self\n def +(other : Float64) : Float64\n def -(other : Int8) : self\n def -(other : Int16) : self\n def -(other : Int32) : self\n def -(other : Int64) : self\n def -(other : Int128) : self\n def -(other : UInt8) : self\n def -(other : UInt16) : self\n def -(other : UInt32) : self\n def -(other : UInt64) : self\n def -(other : UInt128) : self\n def -(other : Float64) : Float64\n def - : Int128\n # An integer divided by a float is a float, as the prelude has it for\n # `Int32` and `Int64` - and for `UInt8` and `UInt64` too, which the\n # prelude does not write: `x / 3.0` did not type for them, and with a\n # literal divisor the `Float32` overload took it, so `1_u8 / 3.0` was a\n # single, 0.33333334.\n def /(other : Float64) : Float64\n # The zero is checked here rather than left to the processor, which\n # reports an integer division by zero as a floating-point fault.\n def //(other : Int128) : Int128\n def <(other : Int8) : Bool\n def <(other : Int16) : Bool\n def <(other : Int32) : Bool\n def <(other : Int64) : Bool\n def <(other : Int128) : Bool\n def <(other : UInt8) : Bool\n def <(other : UInt16) : Bool\n def <(other : UInt32) : Bool\n def <(other : UInt64) : Bool\n def <(other : UInt128) : Bool\n def <(other : Float64) : Bool\n # A shift by the width or more answers zero (or the sign, shifting a\n # negative value right), which the processor does not promise, and a\n # negative count shifts the other way, as the prelude's `Int32` does.\n def <<(count : Int32) : Int128\n def <=(other : Int8) : Bool\n def <=(other : Int16) : Bool\n def <=(other : Int32) : Bool\n def <=(other : Int64) : Bool\n def <=(other : Int128) : Bool\n def <=(other : UInt8) : Bool\n def <=(other : UInt16) : Bool\n def <=(other : UInt32) : Bool\n def <=(other : UInt64) : Bool\n def <=(other : UInt128) : Bool\n def <=(other : Float64) : Bool\n # Exact for every width: the double is placed against the type's\n # edges, then its floor - one of the type, once inside them - against\n # the value, then its fraction decides a tie. NaN is after every\n # number, as `Float64#<=>` places it. The prelude's `Int64 == Float64`\n # is exact too, and agrees with this on every number.\n def <=>(other : Float64) : Int32\n # The prelude compares six types and adds five: `UInt16` is in its\n # comparison cross (a wide character is compared against a\n # separator on every Windows path) and not in its arithmetic one,\n # so the comparisons for a pair it already declares are skipped\n # here and the arithmetic below is not. Redefining a prelude\n # method is refused by name (SPEC.md R-3), which is how the split\n # announced itself.\n def ==(other : Int8) : Bool\n # The prelude compares six types and adds five: `UInt16` is in its\n # comparison cross (a wide character is compared against a\n # separator on every Windows path) and not in its arithmetic one,\n # so the comparisons for a pair it already declares are skipped\n # here and the arithmetic below is not. Redefining a prelude\n # method is refused by name (SPEC.md R-3), which is how the split\n # announced itself.\n def ==(other : Int16) : Bool\n # The prelude compares six types and adds five: `UInt16` is in its\n # comparison cross (a wide character is compared against a\n # separator on every Windows path) and not in its arithmetic one,\n # so the comparisons for a pair it already declares are skipped\n # here and the arithmetic below is not. Redefining a prelude\n # method is refused by name (SPEC.md R-3), which is how the split\n # announced itself.\n def ==(other : Int32) : Bool\n # The prelude compares six types and adds five: `UInt16` is in its\n # comparison cross (a wide character is compared against a\n # separator on every Windows path) and not in its arithmetic one,\n # so the comparisons for a pair it already declares are skipped\n # here and the arithmetic below is not. Redefining a prelude\n # method is refused by name (SPEC.md R-3), which is how the split\n # announced itself.\n def ==(other : Int64) : Bool\n # The prelude compares six types and adds five: `UInt16` is in its\n # comparison cross (a wide character is compared against a\n # separator on every Windows path) and not in its arithmetic one,\n # so the comparisons for a pair it already declares are skipped\n # here and the arithmetic below is not. Redefining a prelude\n # method is refused by name (SPEC.md R-3), which is how the split\n # announced itself.\n def ==(other : Int128) : Bool\n # The prelude compares six types and adds five: `UInt16` is in its\n # comparison cross (a wide character is compared against a\n # separator on every Windows path) and not in its arithmetic one,\n # so the comparisons for a pair it already declares are skipped\n # here and the arithmetic below is not. Redefining a prelude\n # method is refused by name (SPEC.md R-3), which is how the split\n # announced itself.\n def ==(other : UInt8) : Bool\n # The prelude compares six types and adds five: `UInt16` is in its\n # comparison cross (a wide character is compared against a\n # separator on every Windows path) and not in its arithmetic one,\n # so the comparisons for a pair it already declares are skipped\n # here and the arithmetic below is not. Redefining a prelude\n # method is refused by name (SPEC.md R-3), which is how the split\n # announced itself.\n def ==(other : UInt16) : Bool\n # The prelude compares six types and adds five: `UInt16` is in its\n # comparison cross (a wide character is compared against a\n # separator on every Windows path) and not in its arithmetic one,\n # so the comparisons for a pair it already declares are skipped\n # here and the arithmetic below is not. Redefining a prelude\n # method is refused by name (SPEC.md R-3), which is how the split\n # announced itself.\n def ==(other : UInt32) : Bool\n # The prelude compares six types and adds five: `UInt16` is in its\n # comparison cross (a wide character is compared against a\n # separator on every Windows path) and not in its arithmetic one,\n # so the comparisons for a pair it already declares are skipped\n # here and the arithmetic below is not. Redefining a prelude\n # method is refused by name (SPEC.md R-3), which is how the split\n # announced itself.\n def ==(other : UInt64) : Bool\n # The prelude compares six types and adds five: `UInt16` is in its\n # comparison cross (a wide character is compared against a\n # separator on every Windows path) and not in its arithmetic one,\n # so the comparisons for a pair it already declares are skipped\n # here and the arithmetic below is not. Redefining a prelude\n # method is refused by name (SPEC.md R-3), which is how the split\n # announced itself.\n def ==(other : UInt128) : Bool\n # A value this wide may not be a double: `9007199254740993_i128 ==\n # 9007199254740992.0` was true, the integer rounded to the double\n # before the comparison. `<=>` below compares exactly.\n # IEEE against NaN: only `!=` is true. `<=>` places NaN for\n # sorting and would answer `<` here.\n def ==(other : Float64) : Bool\n def >(other : Int8) : Bool\n def >(other : Int16) : Bool\n def >(other : Int32) : Bool\n def >(other : Int64) : Bool\n def >(other : Int128) : Bool\n def >(other : UInt8) : Bool\n def >(other : UInt16) : Bool\n def >(other : UInt32) : Bool\n def >(other : UInt64) : Bool\n def >(other : UInt128) : Bool\n def >(other : Float64) : Bool\n def >=(other : Int8) : Bool\n def >=(other : Int16) : Bool\n def >=(other : Int32) : Bool\n def >=(other : Int64) : Bool\n def >=(other : Int128) : Bool\n def >=(other : UInt8) : Bool\n def >=(other : UInt16) : Bool\n def >=(other : UInt32) : Bool\n def >=(other : UInt64) : Bool\n def >=(other : UInt128) : Bool\n def >=(other : Float64) : Bool\n def >>(count : Int32) : Int128\n def ^(other : Int8) : self\n def ^(other : Int16) : self\n def ^(other : Int32) : self\n def ^(other : Int64) : self\n def ^(other : Int128) : self\n def ^(other : UInt8) : self\n def ^(other : UInt16) : self\n def ^(other : UInt32) : self\n def ^(other : UInt64) : self\n def ^(other : UInt128) : self\n def abs : Int128\n # Bits needed to write the value, the sign excluded: `255.bit_length`\n # is 8, `(-1).bit_length` is 0 and `(-2).bit_length` is 1.\n def bit_length : Int32\n def hash : Int32\n def leading_zeros_count : Int32\n # --- the bits, counted with a logical shift for every type ----------\n # A negative value has its sign bits counted: `(-1).popcount` is 32,\n # one loop of the type's width.\n def popcount : Int32\n def to_f : Float64\n def to_f64 : Float64\n def to_i : Int32\n def to_i128 : Int128\n def to_i128? : Int128 | ::Nil\n def to_i16 : Int16\n def to_i16? : Int16 | ::Nil\n def to_i32 : Int32\n def to_i32? : Int32 | ::Nil\n def to_i64 : Int64\n def to_i64? : Int64 | ::Nil\n # Conversions: the checked form panics \"arithmetic overflow\" when the\n # value does not fit; the `?` form answers nil instead; the unchecked\n # form is the instruction - truncated, or extended by the sign of the\n # type it leaves - as the prelude's `unsafe_to_u8` is. A pair the\n # prelude already declares is not declared twice.\n def to_i8 : Int8\n def to_i8? : Int8 | ::Nil\n def to_i? : Int32 | ::Nil\n def to_s(base : Int32) : String\n # Digits backward, the negative magnitude divided rather than\n # negated so the smallest value prints (its negation is not one of\n # the type).\n def to_s : String\n def to_u : UInt32\n def to_u128 : UInt128\n def to_u128? : UInt128 | ::Nil\n def to_u16 : UInt16\n def to_u16? : UInt16 | ::Nil\n def to_u32 : UInt32\n def to_u32? : UInt32 | ::Nil\n def to_u64 : UInt64\n def to_u64? : UInt64 | ::Nil\n def to_u8 : UInt8\n def to_u8? : UInt8 | ::Nil\n def to_u? : UInt32 | ::Nil\n def trailing_zeros_count : Int32\n def unsafe_chr : Char\n def unsafe_div(other : Int8) : self\n def unsafe_div(other : Int16) : self\n def unsafe_div(other : Int32) : self\n def unsafe_div(other : Int64) : self\n def unsafe_div(other : Int128) : self\n def unsafe_div(other : UInt8) : self\n def unsafe_div(other : UInt16) : self\n def unsafe_div(other : UInt32) : self\n def unsafe_div(other : UInt64) : self\n def unsafe_div(other : UInt128) : self\n def unsafe_mod(other : Int8) : self\n def unsafe_mod(other : Int16) : self\n def unsafe_mod(other : Int32) : self\n def unsafe_mod(other : Int64) : self\n def unsafe_mod(other : Int128) : self\n def unsafe_mod(other : UInt8) : self\n def unsafe_mod(other : UInt16) : self\n def unsafe_mod(other : UInt32) : self\n def unsafe_mod(other : UInt64) : self\n def unsafe_mod(other : UInt128) : self\n def unsafe_shl(other : Int8) : self\n def unsafe_shl(other : Int16) : self\n def unsafe_shl(other : Int32) : self\n def unsafe_shl(other : Int64) : self\n def unsafe_shl(other : Int128) : self\n def unsafe_shl(other : UInt8) : self\n def unsafe_shl(other : UInt16) : self\n def unsafe_shl(other : UInt32) : self\n def unsafe_shl(other : UInt64) : self\n def unsafe_shl(other : UInt128) : self\n def unsafe_shr(other : Int8) : self\n def unsafe_shr(other : Int16) : self\n def unsafe_shr(other : Int32) : self\n def unsafe_shr(other : Int64) : self\n def unsafe_shr(other : Int128) : self\n def unsafe_shr(other : UInt8) : self\n def unsafe_shr(other : UInt16) : self\n def unsafe_shr(other : UInt32) : self\n def unsafe_shr(other : UInt64) : self\n def unsafe_shr(other : UInt128) : self\n def unsafe_to_i : Int32\n def unsafe_to_i128 : Int128\n def unsafe_to_i16 : Int16\n def unsafe_to_i32 : Int32\n def unsafe_to_i64 : Int64\n def unsafe_to_i8 : Int8\n def unsafe_to_u : UInt32\n def unsafe_to_u128 : UInt128\n def unsafe_to_u16 : UInt16\n def unsafe_to_u32 : UInt32\n def unsafe_to_u64 : UInt64\n def unsafe_to_u8 : UInt8\n def |(other : Int8) : self\n def |(other : Int16) : self\n def |(other : Int32) : self\n def |(other : Int64) : self\n def |(other : Int128) : self\n def |(other : UInt8) : self\n def |(other : UInt16) : self\n def |(other : UInt32) : self\n def |(other : UInt64) : self\n def |(other : UInt128) : self\n def ~ : Int128\nend\n\nstruct ::Int16\n def !=(other : Int8) : Bool\n def !=(other : Int16) : Bool\n def !=(other : Int32) : Bool\n def !=(other : Int64) : Bool\n def !=(other : Int128) : Bool\n def !=(other : UInt8) : Bool\n def !=(other : UInt16) : Bool\n def !=(other : UInt32) : Bool\n def !=(other : UInt64) : Bool\n def !=(other : UInt128) : Bool\n def !=(other : Float64) : Bool\n def %(other : Int16) : Int16\n def &(other : Int8) : self\n def &(other : Int16) : self\n def &(other : Int32) : self\n def &(other : Int64) : self\n def &(other : Int128) : self\n def &(other : UInt8) : self\n def &(other : UInt16) : self\n def &(other : UInt32) : self\n def &(other : UInt64) : self\n def &(other : UInt128) : self\n def &*(other : Int8) : self\n def &*(other : Int16) : self\n def &*(other : Int32) : self\n def &*(other : Int64) : self\n def &*(other : Int128) : self\n def &*(other : UInt8) : self\n def &*(other : UInt16) : self\n def &*(other : UInt32) : self\n def &*(other : UInt64) : self\n def &*(other : UInt128) : self\n def &+(other : Int8) : self\n def &+(other : Int16) : self\n def &+(other : Int32) : self\n def &+(other : Int64) : self\n def &+(other : Int128) : self\n def &+(other : UInt8) : self\n def &+(other : UInt16) : self\n def &+(other : UInt32) : self\n def &+(other : UInt64) : self\n def &+(other : UInt128) : self\n def &-(other : Int8) : self\n def &-(other : Int16) : self\n def &-(other : Int32) : self\n def &-(other : Int64) : self\n def &-(other : Int128) : self\n def &-(other : UInt8) : self\n def &-(other : UInt16) : self\n def &-(other : UInt32) : self\n def &-(other : UInt64) : self\n def &-(other : UInt128) : self\n def *(other : Int8) : self\n def *(other : Int16) : self\n def *(other : Int32) : self\n def *(other : Int64) : self\n def *(other : Int128) : self\n def *(other : UInt8) : self\n def *(other : UInt16) : self\n def *(other : UInt32) : self\n def *(other : UInt64) : self\n def *(other : UInt128) : self\n def *(other : Float64) : Float64\n def +(other : Int8) : self\n def +(other : Int16) : self\n def +(other : Int32) : self\n def +(other : Int64) : self\n def +(other : Int128) : self\n def +(other : UInt8) : self\n def +(other : UInt16) : self\n def +(other : UInt32) : self\n def +(other : UInt64) : self\n def +(other : UInt128) : self\n def +(other : Float64) : Float64\n def -(other : Int8) : self\n def -(other : Int16) : self\n def -(other : Int32) : self\n def -(other : Int64) : self\n def -(other : Int128) : self\n def -(other : UInt8) : self\n def -(other : UInt16) : self\n def -(other : UInt32) : self\n def -(other : UInt64) : self\n def -(other : UInt128) : self\n def -(other : Float64) : Float64\n def - : Int16\n # An integer divided by a float is a float, as the prelude has it for\n # `Int32` and `Int64` - and for `UInt8` and `UInt64` too, which the\n # prelude does not write: `x / 3.0` did not type for them, and with a\n # literal divisor the `Float32` overload took it, so `1_u8 / 3.0` was a\n # single, 0.33333334.\n def /(other : Float64) : Float64\n # The zero is checked here rather than left to the processor, which\n # reports an integer division by zero as a floating-point fault.\n def //(other : Int16) : Int16\n def <(other : Int8) : Bool\n def <(other : Int16) : Bool\n def <(other : Int32) : Bool\n def <(other : Int64) : Bool\n def <(other : Int128) : Bool\n def <(other : UInt8) : Bool\n def <(other : UInt16) : Bool\n def <(other : UInt32) : Bool\n def <(other : UInt64) : Bool\n def <(other : UInt128) : Bool\n def <(other : Float64) : Bool\n # A shift by the width or more answers zero (or the sign, shifting a\n # negative value right), which the processor does not promise, and a\n # negative count shifts the other way, as the prelude's `Int32` does.\n def <<(count : Int32) : Int16\n def <=(other : Int8) : Bool\n def <=(other : Int16) : Bool\n def <=(other : Int32) : Bool\n def <=(other : Int64) : Bool\n def <=(other : Int128) : Bool\n def <=(other : UInt8) : Bool\n def <=(other : UInt16) : Bool\n def <=(other : UInt32) : Bool\n def <=(other : UInt64) : Bool\n def <=(other : UInt128) : Bool\n def <=(other : Float64) : Bool\n # Exact for every width: the double is placed against the type's\n # edges, then its floor - one of the type, once inside them - against\n # the value, then its fraction decides a tie. NaN is after every\n # number, as `Float64#<=>` places it. The prelude's `Int64 == Float64`\n # is exact too, and agrees with this on every number.\n def <=>(other : Float64) : Int32\n # The prelude compares six types and adds five: `UInt16` is in its\n # comparison cross (a wide character is compared against a\n # separator on every Windows path) and not in its arithmetic one,\n # so the comparisons for a pair it already declares are skipped\n # here and the arithmetic below is not. Redefining a prelude\n # method is refused by name (SPEC.md R-3), which is how the split\n # announced itself.\n def ==(other : Int8) : Bool\n # The prelude compares six types and adds five: `UInt16` is in its\n # comparison cross (a wide character is compared against a\n # separator on every Windows path) and not in its arithmetic one,\n # so the comparisons for a pair it already declares are skipped\n # here and the arithmetic below is not. Redefining a prelude\n # method is refused by name (SPEC.md R-3), which is how the split\n # announced itself.\n def ==(other : Int16) : Bool\n # The prelude compares six types and adds five: `UInt16` is in its\n # comparison cross (a wide character is compared against a\n # separator on every Windows path) and not in its arithmetic one,\n # so the comparisons for a pair it already declares are skipped\n # here and the arithmetic below is not. Redefining a prelude\n # method is refused by name (SPEC.md R-3), which is how the split\n # announced itself.\n def ==(other : Int32) : Bool\n # The prelude compares six types and adds five: `UInt16` is in its\n # comparison cross (a wide character is compared against a\n # separator on every Windows path) and not in its arithmetic one,\n # so the comparisons for a pair it already declares are skipped\n # here and the arithmetic below is not. Redefining a prelude\n # method is refused by name (SPEC.md R-3), which is how the split\n # announced itself.\n def ==(other : Int64) : Bool\n # The prelude compares six types and adds five: `UInt16` is in its\n # comparison cross (a wide character is compared against a\n # separator on every Windows path) and not in its arithmetic one,\n # so the comparisons for a pair it already declares are skipped\n # here and the arithmetic below is not. Redefining a prelude\n # method is refused by name (SPEC.md R-3), which is how the split\n # announced itself.\n def ==(other : Int128) : Bool\n # The prelude compares six types and adds five: `UInt16` is in its\n # comparison cross (a wide character is compared against a\n # separator on every Windows path) and not in its arithmetic one,\n # so the comparisons for a pair it already declares are skipped\n # here and the arithmetic below is not. Redefining a prelude\n # method is refused by name (SPEC.md R-3), which is how the split\n # announced itself.\n def ==(other : UInt8) : Bool\n # The prelude compares six types and adds five: `UInt16` is in its\n # comparison cross (a wide character is compared against a\n # separator on every Windows path) and not in its arithmetic one,\n # so the comparisons for a pair it already declares are skipped\n # here and the arithmetic below is not. Redefining a prelude\n # method is refused by name (SPEC.md R-3), which is how the split\n # announced itself.\n def ==(other : UInt16) : Bool\n # The prelude compares six types and adds five: `UInt16` is in its\n # comparison cross (a wide character is compared against a\n # separator on every Windows path) and not in its arithmetic one,\n # so the comparisons for a pair it already declares are skipped\n # here and the arithmetic below is not. Redefining a prelude\n # method is refused by name (SPEC.md R-3), which is how the split\n # announced itself.\n def ==(other : UInt32) : Bool\n # The prelude compares six types and adds five: `UInt16` is in its\n # comparison cross (a wide character is compared against a\n # separator on every Windows path) and not in its arithmetic one,\n # so the comparisons for a pair it already declares are skipped\n # here and the arithmetic below is not. Redefining a prelude\n # method is refused by name (SPEC.md R-3), which is how the split\n # announced itself.\n def ==(other : UInt64) : Bool\n # The prelude compares six types and adds five: `UInt16` is in its\n # comparison cross (a wide character is compared against a\n # separator on every Windows path) and not in its arithmetic one,\n # so the comparisons for a pair it already declares are skipped\n # here and the arithmetic below is not. Redefining a prelude\n # method is refused by name (SPEC.md R-3), which is how the split\n # announced itself.\n def ==(other : UInt128) : Bool\n # Every value of the type is a double exactly, so the double's own\n # comparison is the exact one.\n def ==(other : Float64) : Bool\n def >(other : Int8) : Bool\n def >(other : Int16) : Bool\n def >(other : Int32) : Bool\n def >(other : Int64) : Bool\n def >(other : Int128) : Bool\n def >(other : UInt8) : Bool\n def >(other : UInt16) : Bool\n def >(other : UInt32) : Bool\n def >(other : UInt64) : Bool\n def >(other : UInt128) : Bool\n def >(other : Float64) : Bool\n def >=(other : Int8) : Bool\n def >=(other : Int16) : Bool\n def >=(other : Int32) : Bool\n def >=(other : Int64) : Bool\n def >=(other : Int128) : Bool\n def >=(other : UInt8) : Bool\n def >=(other : UInt16) : Bool\n def >=(other : UInt32) : Bool\n def >=(other : UInt64) : Bool\n def >=(other : UInt128) : Bool\n def >=(other : Float64) : Bool\n def >>(count : Int32) : Int16\n def ^(other : Int8) : self\n def ^(other : Int16) : self\n def ^(other : Int32) : self\n def ^(other : Int64) : self\n def ^(other : Int128) : self\n def ^(other : UInt8) : self\n def ^(other : UInt16) : self\n def ^(other : UInt32) : self\n def ^(other : UInt64) : self\n def ^(other : UInt128) : self\n def abs : Int16\n # Bits needed to write the value, the sign excluded: `255.bit_length`\n # is 8, `(-1).bit_length` is 0 and `(-2).bit_length` is 1.\n def bit_length : Int32\n def hash : Int32\n def leading_zeros_count : Int32\n # --- the bits, counted with a logical shift for every type ----------\n # A negative value has its sign bits counted: `(-1).popcount` is 32,\n # one loop of the type's width.\n def popcount : Int32\n def to_f : Float64\n def to_f64 : Float64\n def to_i : Int32\n def to_i128 : Int128\n def to_i128? : Int128 | ::Nil\n def to_i16 : Int16\n def to_i16? : Int16 | ::Nil\n def to_i32 : Int32\n def to_i32? : Int32 | ::Nil\n def to_i64 : Int64\n def to_i64? : Int64 | ::Nil\n # Conversions: the checked form panics \"arithmetic overflow\" when the\n # value does not fit; the `?` form answers nil instead; the unchecked\n # form is the instruction - truncated, or extended by the sign of the\n # type it leaves - as the prelude's `unsafe_to_u8` is. A pair the\n # prelude already declares is not declared twice.\n def to_i8 : Int8\n def to_i8? : Int8 | ::Nil\n def to_i? : Int32 | ::Nil\n def to_s(base : Int32) : String\n # Fits an `Int64`: the prelude's printer.\n def to_s : String\n def to_u : UInt32\n def to_u128 : UInt128\n def to_u128? : UInt128 | ::Nil\n def to_u16 : UInt16\n def to_u16? : UInt16 | ::Nil\n def to_u32 : UInt32\n def to_u32? : UInt32 | ::Nil\n def to_u64 : UInt64\n def to_u64? : UInt64 | ::Nil\n def to_u8 : UInt8\n def to_u8? : UInt8 | ::Nil\n def to_u? : UInt32 | ::Nil\n def trailing_zeros_count : Int32\n def unsafe_chr : Char\n def unsafe_div(other : Int8) : self\n def unsafe_div(other : Int16) : self\n def unsafe_div(other : Int32) : self\n def unsafe_div(other : Int64) : self\n def unsafe_div(other : Int128) : self\n def unsafe_div(other : UInt8) : self\n def unsafe_div(other : UInt16) : self\n def unsafe_div(other : UInt32) : self\n def unsafe_div(other : UInt64) : self\n def unsafe_div(other : UInt128) : self\n def unsafe_mod(other : Int8) : self\n def unsafe_mod(other : Int16) : self\n def unsafe_mod(other : Int32) : self\n def unsafe_mod(other : Int64) : self\n def unsafe_mod(other : Int128) : self\n def unsafe_mod(other : UInt8) : self\n def unsafe_mod(other : UInt16) : self\n def unsafe_mod(other : UInt32) : self\n def unsafe_mod(other : UInt64) : self\n def unsafe_mod(other : UInt128) : self\n def unsafe_shl(other : Int8) : self\n def unsafe_shl(other : Int16) : self\n def unsafe_shl(other : Int32) : self\n def unsafe_shl(other : Int64) : self\n def unsafe_shl(other : Int128) : self\n def unsafe_shl(other : UInt8) : self\n def unsafe_shl(other : UInt16) : self\n def unsafe_shl(other : UInt32) : self\n def unsafe_shl(other : UInt64) : self\n def unsafe_shl(other : UInt128) : self\n def unsafe_shr(other : Int8) : self\n def unsafe_shr(other : Int16) : self\n def unsafe_shr(other : Int32) : self\n def unsafe_shr(other : Int64) : self\n def unsafe_shr(other : Int128) : self\n def unsafe_shr(other : UInt8) : self\n def unsafe_shr(other : UInt16) : self\n def unsafe_shr(other : UInt32) : self\n def unsafe_shr(other : UInt64) : self\n def unsafe_shr(other : UInt128) : self\n def unsafe_to_i : Int32\n def unsafe_to_i128 : Int128\n def unsafe_to_i16 : Int16\n def unsafe_to_i32 : Int32\n def unsafe_to_i64 : Int64\n def unsafe_to_i8 : Int8\n def unsafe_to_u : UInt32\n def unsafe_to_u128 : UInt128\n def unsafe_to_u16 : UInt16\n def unsafe_to_u32 : UInt32\n def unsafe_to_u64 : UInt64\n def unsafe_to_u8 : UInt8\n def |(other : Int8) : self\n def |(other : Int16) : self\n def |(other : Int32) : self\n def |(other : Int64) : self\n def |(other : Int128) : self\n def |(other : UInt8) : self\n def |(other : UInt16) : self\n def |(other : UInt32) : self\n def |(other : UInt64) : self\n def |(other : UInt128) : self\n def ~ : Int16\nend\n\nstruct ::Int32\n def !=(other : Int8) : Bool\n def !=(other : Int16) : Bool\n def !=(other : Int128) : Bool\n def !=(other : UInt32) : Bool\n def !=(other : UInt128) : Bool\n def &(other : Int8) : self\n def &(other : Int16) : self\n def &(other : Int128) : self\n def &(other : UInt16) : self\n def &(other : UInt32) : self\n def &(other : UInt128) : self\n def &*(other : Int8) : self\n def &*(other : Int16) : self\n def &*(other : Int128) : self\n def &*(other : UInt16) : self\n def &*(other : UInt32) : self\n def &*(other : UInt128) : self\n def &+(other : Int8) : self\n def &+(other : Int16) : self\n def &+(other : Int128) : self\n def &+(other : UInt16) : self\n def &+(other : UInt32) : self\n def &+(other : UInt128) : self\n def &-(other : Int8) : self\n def &-(other : Int16) : self\n def &-(other : Int128) : self\n def &-(other : UInt16) : self\n def &-(other : UInt32) : self\n def &-(other : UInt128) : self\n def *(other : Int8) : self\n def *(other : Int16) : self\n def *(other : Int128) : self\n def *(other : UInt16) : self\n def *(other : UInt32) : self\n def *(other : UInt128) : self\n def +(other : Int8) : self\n def +(other : Int16) : self\n def +(other : Int128) : self\n def +(other : UInt16) : self\n def +(other : UInt32) : self\n def +(other : UInt128) : self\n def -(other : Int8) : self\n def -(other : Int16) : self\n def -(other : Int128) : self\n def -(other : UInt16) : self\n def -(other : UInt32) : self\n def -(other : UInt128) : self\n def <(other : Int8) : Bool\n def <(other : Int16) : Bool\n def <(other : Int128) : Bool\n def <(other : UInt32) : Bool\n def <(other : UInt128) : Bool\n def <=(other : Int8) : Bool\n def <=(other : Int16) : Bool\n def <=(other : Int128) : Bool\n def <=(other : UInt32) : Bool\n def <=(other : UInt128) : Bool\n # Exact for every width: the double is placed against the type's\n # edges, then its floor - one of the type, once inside them - against\n # the value, then its fraction decides a tie. NaN is after every\n # number, as `Float64#<=>` places it. The prelude's `Int64 == Float64`\n # is exact too, and agrees with this on every number.\n def <=>(other : Float64) : Int32\n # The prelude compares six types and adds five: `UInt16` is in its\n # comparison cross (a wide character is compared against a\n # separator on every Windows path) and not in its arithmetic one,\n # so the comparisons for a pair it already declares are skipped\n # here and the arithmetic below is not. Redefining a prelude\n # method is refused by name (SPEC.md R-3), which is how the split\n # announced itself.\n def ==(other : Int8) : Bool\n # The prelude compares six types and adds five: `UInt16` is in its\n # comparison cross (a wide character is compared against a\n # separator on every Windows path) and not in its arithmetic one,\n # so the comparisons for a pair it already declares are skipped\n # here and the arithmetic below is not. Redefining a prelude\n # method is refused by name (SPEC.md R-3), which is how the split\n # announced itself.\n def ==(other : Int16) : Bool\n # The prelude compares six types and adds five: `UInt16` is in its\n # comparison cross (a wide character is compared against a\n # separator on every Windows path) and not in its arithmetic one,\n # so the comparisons for a pair it already declares are skipped\n # here and the arithmetic below is not. Redefining a prelude\n # method is refused by name (SPEC.md R-3), which is how the split\n # announced itself.\n def ==(other : Int128) : Bool\n # The prelude compares six types and adds five: `UInt16` is in its\n # comparison cross (a wide character is compared against a\n # separator on every Windows path) and not in its arithmetic one,\n # so the comparisons for a pair it already declares are skipped\n # here and the arithmetic below is not. Redefining a prelude\n # method is refused by name (SPEC.md R-3), which is how the split\n # announced itself.\n def ==(other : UInt32) : Bool\n # The prelude compares six types and adds five: `UInt16` is in its\n # comparison cross (a wide character is compared against a\n # separator on every Windows path) and not in its arithmetic one,\n # so the comparisons for a pair it already declares are skipped\n # here and the arithmetic below is not. Redefining a prelude\n # method is refused by name (SPEC.md R-3), which is how the split\n # announced itself.\n def ==(other : UInt128) : Bool\n def >(other : Int8) : Bool\n def >(other : Int16) : Bool\n def >(other : Int128) : Bool\n def >(other : UInt32) : Bool\n def >(other : UInt128) : Bool\n def >=(other : Int8) : Bool\n def >=(other : Int16) : Bool\n def >=(other : Int128) : Bool\n def >=(other : UInt32) : Bool\n def >=(other : UInt128) : Bool\n def ^(other : Int8) : self\n def ^(other : Int16) : self\n def ^(other : Int128) : self\n def ^(other : UInt16) : self\n def ^(other : UInt32) : self\n def ^(other : UInt128) : self\n # Bits needed to write the value, the sign excluded: `255.bit_length`\n # is 8, `(-1).bit_length` is 0 and `(-2).bit_length` is 1.\n def bit_length : Int32\n def leading_zeros_count : Int32\n # --- the bits, counted with a logical shift for every type ----------\n # A negative value has its sign bits counted: `(-1).popcount` is 32,\n # one loop of the type's width.\n def popcount : Int32\n def to_i128 : Int128\n def to_i128? : Int128 | ::Nil\n def to_i16 : Int16\n def to_i16? : Int16 | ::Nil\n def to_i32? : Int32 | ::Nil\n def to_i64? : Int64 | ::Nil\n # Conversions: the checked form panics \"arithmetic overflow\" when the\n # value does not fit; the `?` form answers nil instead; the unchecked\n # form is the instruction - truncated, or extended by the sign of the\n # type it leaves - as the prelude's `unsafe_to_u8` is. A pair the\n # prelude already declares is not declared twice.\n def to_i8 : Int8\n def to_i8? : Int8 | ::Nil\n def to_i? : Int32 | ::Nil\n def to_u : UInt32\n def to_u128 : UInt128\n def to_u128? : UInt128 | ::Nil\n def to_u16 : UInt16\n def to_u16? : UInt16 | ::Nil\n def to_u32 : UInt32\n def to_u32? : UInt32 | ::Nil\n def to_u64? : UInt64 | ::Nil\n def to_u8? : UInt8 | ::Nil\n def to_u? : UInt32 | ::Nil\n def trailing_zeros_count : Int32\n def unsafe_div(other : Int8) : self\n def unsafe_div(other : Int16) : self\n def unsafe_div(other : Int128) : self\n def unsafe_div(other : UInt16) : self\n def unsafe_div(other : UInt32) : self\n def unsafe_div(other : UInt128) : self\n def unsafe_mod(other : Int8) : self\n def unsafe_mod(other : Int16) : self\n def unsafe_mod(other : Int128) : self\n def unsafe_mod(other : UInt16) : self\n def unsafe_mod(other : UInt32) : self\n def unsafe_mod(other : UInt128) : self\n def unsafe_shl(other : Int8) : self\n def unsafe_shl(other : Int16) : self\n def unsafe_shl(other : Int128) : self\n def unsafe_shl(other : UInt16) : self\n def unsafe_shl(other : UInt32) : self\n def unsafe_shl(other : UInt128) : self\n def unsafe_shr(other : Int8) : self\n def unsafe_shr(other : Int16) : self\n def unsafe_shr(other : Int128) : self\n def unsafe_shr(other : UInt16) : self\n def unsafe_shr(other : UInt32) : self\n def unsafe_shr(other : UInt128) : self\n def unsafe_to_i128 : Int128\n def unsafe_to_i16 : Int16\n def unsafe_to_i8 : Int8\n def unsafe_to_u : UInt32\n def unsafe_to_u128 : UInt128\n def unsafe_to_u16 : UInt16\n def unsafe_to_u32 : UInt32\n def |(other : Int8) : self\n def |(other : Int16) : self\n def |(other : Int128) : self\n def |(other : UInt16) : self\n def |(other : UInt32) : self\n def |(other : UInt128) : self\n def ~ : Int32\nend\n\nstruct ::Int64\n def !=(other : Int8) : Bool\n def !=(other : Int16) : Bool\n def !=(other : Int128) : Bool\n def !=(other : UInt32) : Bool\n def !=(other : UInt128) : Bool\n def &(other : Int8) : self\n def &(other : Int16) : self\n def &(other : Int128) : self\n def &(other : UInt16) : self\n def &(other : UInt32) : self\n def &(other : UInt128) : self\n def &*(other : Int8) : self\n def &*(other : Int16) : self\n def &*(other : Int128) : self\n def &*(other : UInt16) : self\n def &*(other : UInt32) : self\n def &*(other : UInt128) : self\n def &+(other : Int8) : self\n def &+(other : Int16) : self\n def &+(other : Int128) : self\n def &+(other : UInt16) : self\n def &+(other : UInt32) : self\n def &+(other : UInt128) : self\n def &-(other : Int8) : self\n def &-(other : Int16) : self\n def &-(other : Int128) : self\n def &-(other : UInt16) : self\n def &-(other : UInt32) : self\n def &-(other : UInt128) : self\n def *(other : Int8) : self\n def *(other : Int16) : self\n def *(other : Int128) : self\n def *(other : UInt16) : self\n def *(other : UInt32) : self\n def *(other : UInt128) : self\n def +(other : Int8) : self\n def +(other : Int16) : self\n def +(other : Int128) : self\n def +(other : UInt16) : self\n def +(other : UInt32) : self\n def +(other : UInt128) : self\n def -(other : Int8) : self\n def -(other : Int16) : self\n def -(other : Int128) : self\n def -(other : UInt16) : self\n def -(other : UInt32) : self\n def -(other : UInt128) : self\n def <(other : Int8) : Bool\n def <(other : Int16) : Bool\n def <(other : Int128) : Bool\n def <(other : UInt32) : Bool\n def <(other : UInt128) : Bool\n def <=(other : Int8) : Bool\n def <=(other : Int16) : Bool\n def <=(other : Int128) : Bool\n def <=(other : UInt32) : Bool\n def <=(other : UInt128) : Bool\n # Exact for every width: the double is placed against the type's\n # edges, then its floor - one of the type, once inside them - against\n # the value, then its fraction decides a tie. NaN is after every\n # number, as `Float64#<=>` places it. The prelude's `Int64 == Float64`\n # is exact too, and agrees with this on every number.\n def <=>(other : Float64) : Int32\n # The prelude compares six types and adds five: `UInt16` is in its\n # comparison cross (a wide character is compared against a\n # separator on every Windows path) and not in its arithmetic one,\n # so the comparisons for a pair it already declares are skipped\n # here and the arithmetic below is not. Redefining a prelude\n # method is refused by name (SPEC.md R-3), which is how the split\n # announced itself.\n def ==(other : Int8) : Bool\n # The prelude compares six types and adds five: `UInt16` is in its\n # comparison cross (a wide character is compared against a\n # separator on every Windows path) and not in its arithmetic one,\n # so the comparisons for a pair it already declares are skipped\n # here and the arithmetic below is not. Redefining a prelude\n # method is refused by name (SPEC.md R-3), which is how the split\n # announced itself.\n def ==(other : Int16) : Bool\n # The prelude compares six types and adds five: `UInt16` is in its\n # comparison cross (a wide character is compared against a\n # separator on every Windows path) and not in its arithmetic one,\n # so the comparisons for a pair it already declares are skipped\n # here and the arithmetic below is not. Redefining a prelude\n # method is refused by name (SPEC.md R-3), which is how the split\n # announced itself.\n def ==(other : Int128) : Bool\n # The prelude compares six types and adds five: `UInt16` is in its\n # comparison cross (a wide character is compared against a\n # separator on every Windows path) and not in its arithmetic one,\n # so the comparisons for a pair it already declares are skipped\n # here and the arithmetic below is not. Redefining a prelude\n # method is refused by name (SPEC.md R-3), which is how the split\n # announced itself.\n def ==(other : UInt32) : Bool\n # The prelude compares six types and adds five: `UInt16` is in its\n # comparison cross (a wide character is compared against a\n # separator on every Windows path) and not in its arithmetic one,\n # so the comparisons for a pair it already declares are skipped\n # here and the arithmetic below is not. Redefining a prelude\n # method is refused by name (SPEC.md R-3), which is how the split\n # announced itself.\n def ==(other : UInt128) : Bool\n def >(other : Int8) : Bool\n def >(other : Int16) : Bool\n def >(other : Int128) : Bool\n def >(other : UInt32) : Bool\n def >(other : UInt128) : Bool\n def >=(other : Int8) : Bool\n def >=(other : Int16) : Bool\n def >=(other : Int128) : Bool\n def >=(other : UInt32) : Bool\n def >=(other : UInt128) : Bool\n def ^(other : Int8) : self\n def ^(other : Int16) : self\n def ^(other : Int128) : self\n def ^(other : UInt16) : self\n def ^(other : UInt32) : self\n def ^(other : UInt128) : self\n # Bits needed to write the value, the sign excluded: `255.bit_length`\n # is 8, `(-1).bit_length` is 0 and `(-2).bit_length` is 1.\n def bit_length : Int32\n def leading_zeros_count : Int32\n # --- the bits, counted with a logical shift for every type ----------\n # A negative value has its sign bits counted: `(-1).popcount` is 32,\n # one loop of the type's width.\n def popcount : Int32\n def to_i128 : Int128\n def to_i128? : Int128 | ::Nil\n def to_i16 : Int16\n def to_i16? : Int16 | ::Nil\n def to_i32? : Int32 | ::Nil\n def to_i64? : Int64 | ::Nil\n # Conversions: the checked form panics \"arithmetic overflow\" when the\n # value does not fit; the `?` form answers nil instead; the unchecked\n # form is the instruction - truncated, or extended by the sign of the\n # type it leaves - as the prelude's `unsafe_to_u8` is. A pair the\n # prelude already declares is not declared twice.\n def to_i8 : Int8\n def to_i8? : Int8 | ::Nil\n def to_i? : Int32 | ::Nil\n def to_u : UInt32\n def to_u128 : UInt128\n def to_u128? : UInt128 | ::Nil\n def to_u16 : UInt16\n def to_u16? : UInt16 | ::Nil\n def to_u32 : UInt32\n def to_u32? : UInt32 | ::Nil\n def to_u64? : UInt64 | ::Nil\n def to_u8? : UInt8 | ::Nil\n def to_u? : UInt32 | ::Nil\n def trailing_zeros_count : Int32\n def unsafe_div(other : Int8) : self\n def unsafe_div(other : Int16) : self\n def unsafe_div(other : Int128) : self\n def unsafe_div(other : UInt16) : self\n def unsafe_div(other : UInt32) : self\n def unsafe_div(other : UInt128) : self\n def unsafe_mod(other : Int8) : self\n def unsafe_mod(other : Int16) : self\n def unsafe_mod(other : Int128) : self\n def unsafe_mod(other : UInt16) : self\n def unsafe_mod(other : UInt32) : self\n def unsafe_mod(other : UInt128) : self\n def unsafe_shl(other : Int8) : self\n def unsafe_shl(other : Int16) : self\n def unsafe_shl(other : Int128) : self\n def unsafe_shl(other : UInt16) : self\n def unsafe_shl(other : UInt32) : self\n def unsafe_shl(other : UInt128) : self\n def unsafe_shr(other : Int8) : self\n def unsafe_shr(other : Int16) : self\n def unsafe_shr(other : Int128) : self\n def unsafe_shr(other : UInt16) : self\n def unsafe_shr(other : UInt32) : self\n def unsafe_shr(other : UInt128) : self\n def unsafe_to_i128 : Int128\n def unsafe_to_i16 : Int16\n def unsafe_to_i8 : Int8\n def unsafe_to_u : UInt32\n def unsafe_to_u128 : UInt128\n def unsafe_to_u16 : UInt16\n def unsafe_to_u32 : UInt32\n def |(other : Int8) : self\n def |(other : Int16) : self\n def |(other : Int128) : self\n def |(other : UInt16) : self\n def |(other : UInt32) : self\n def |(other : UInt128) : self\n def ~ : Int64\nend\n\nstruct ::Int8\n def !=(other : Int8) : Bool\n def !=(other : Int16) : Bool\n def !=(other : Int32) : Bool\n def !=(other : Int64) : Bool\n def !=(other : Int128) : Bool\n def !=(other : UInt8) : Bool\n def !=(other : UInt16) : Bool\n def !=(other : UInt32) : Bool\n def !=(other : UInt64) : Bool\n def !=(other : UInt128) : Bool\n def !=(other : Float64) : Bool\n def %(other : Int8) : Int8\n def &(other : Int8) : self\n def &(other : Int16) : self\n def &(other : Int32) : self\n def &(other : Int64) : self\n def &(other : Int128) : self\n def &(other : UInt8) : self\n def &(other : UInt16) : self\n def &(other : UInt32) : self\n def &(other : UInt64) : self\n def &(other : UInt128) : self\n def &*(other : Int8) : self\n def &*(other : Int16) : self\n def &*(other : Int32) : self\n def &*(other : Int64) : self\n def &*(other : Int128) : self\n def &*(other : UInt8) : self\n def &*(other : UInt16) : self\n def &*(other : UInt32) : self\n def &*(other : UInt64) : self\n def &*(other : UInt128) : self\n def &+(other : Int8) : self\n def &+(other : Int16) : self\n def &+(other : Int32) : self\n def &+(other : Int64) : self\n def &+(other : Int128) : self\n def &+(other : UInt8) : self\n def &+(other : UInt16) : self\n def &+(other : UInt32) : self\n def &+(other : UInt64) : self\n def &+(other : UInt128) : self\n def &-(other : Int8) : self\n def &-(other : Int16) : self\n def &-(other : Int32) : self\n def &-(other : Int64) : self\n def &-(other : Int128) : self\n def &-(other : UInt8) : self\n def &-(other : UInt16) : self\n def &-(other : UInt32) : self\n def &-(other : UInt64) : self\n def &-(other : UInt128) : self\n def *(other : Int8) : self\n def *(other : Int16) : self\n def *(other : Int32) : self\n def *(other : Int64) : self\n def *(other : Int128) : self\n def *(other : UInt8) : self\n def *(other : UInt16) : self\n def *(other : UInt32) : self\n def *(other : UInt64) : self\n def *(other : UInt128) : self\n def *(other : Float64) : Float64\n def +(other : Int8) : self\n def +(other : Int16) : self\n def +(other : Int32) : self\n def +(other : Int64) : self\n def +(other : Int128) : self\n def +(other : UInt8) : self\n def +(other : UInt16) : self\n def +(other : UInt32) : self\n def +(other : UInt64) : self\n def +(other : UInt128) : self\n def +(other : Float64) : Float64\n def -(other : Int8) : self\n def -(other : Int16) : self\n def -(other : Int32) : self\n def -(other : Int64) : self\n def -(other : Int128) : self\n def -(other : UInt8) : self\n def -(other : UInt16) : self\n def -(other : UInt32) : self\n def -(other : UInt64) : self\n def -(other : UInt128) : self\n def -(other : Float64) : Float64\n def - : Int8\n # An integer divided by a float is a float, as the prelude has it for\n # `Int32` and `Int64` - and for `UInt8` and `UInt64` too, which the\n # prelude does not write: `x / 3.0` did not type for them, and with a\n # literal divisor the `Float32` overload took it, so `1_u8 / 3.0` was a\n # single, 0.33333334.\n def /(other : Float64) : Float64\n # The zero is checked here rather than left to the processor, which\n # reports an integer division by zero as a floating-point fault.\n def //(other : Int8) : Int8\n def <(other : Int8) : Bool\n def <(other : Int16) : Bool\n def <(other : Int32) : Bool\n def <(other : Int64) : Bool\n def <(other : Int128) : Bool\n def <(other : UInt8) : Bool\n def <(other : UInt16) : Bool\n def <(other : UInt32) : Bool\n def <(other : UInt64) : Bool\n def <(other : UInt128) : Bool\n def <(other : Float64) : Bool\n # A shift by the width or more answers zero (or the sign, shifting a\n # negative value right), which the processor does not promise, and a\n # negative count shifts the other way, as the prelude's `Int32` does.\n def <<(count : Int32) : Int8\n def <=(other : Int8) : Bool\n def <=(other : Int16) : Bool\n def <=(other : Int32) : Bool\n def <=(other : Int64) : Bool\n def <=(other : Int128) : Bool\n def <=(other : UInt8) : Bool\n def <=(other : UInt16) : Bool\n def <=(other : UInt32) : Bool\n def <=(other : UInt64) : Bool\n def <=(other : UInt128) : Bool\n def <=(other : Float64) : Bool\n # Exact for every width: the double is placed against the type's\n # edges, then its floor - one of the type, once inside them - against\n # the value, then its fraction decides a tie. NaN is after every\n # number, as `Float64#<=>` places it. The prelude's `Int64 == Float64`\n # is exact too, and agrees with this on every number.\n def <=>(other : Float64) : Int32\n # The prelude compares six types and adds five: `UInt16` is in its\n # comparison cross (a wide character is compared against a\n # separator on every Windows path) and not in its arithmetic one,\n # so the comparisons for a pair it already declares are skipped\n # here and the arithmetic below is not. Redefining a prelude\n # method is refused by name (SPEC.md R-3), which is how the split\n # announced itself.\n def ==(other : Int8) : Bool\n # The prelude compares six types and adds five: `UInt16` is in its\n # comparison cross (a wide character is compared against a\n # separator on every Windows path) and not in its arithmetic one,\n # so the comparisons for a pair it already declares are skipped\n # here and the arithmetic below is not. Redefining a prelude\n # method is refused by name (SPEC.md R-3), which is how the split\n # announced itself.\n def ==(other : Int16) : Bool\n # The prelude compares six types and adds five: `UInt16` is in its\n # comparison cross (a wide character is compared against a\n # separator on every Windows path) and not in its arithmetic one,\n # so the comparisons for a pair it already declares are skipped\n # here and the arithmetic below is not. Redefining a prelude\n # method is refused by name (SPEC.md R-3), which is how the split\n # announced itself.\n def ==(other : Int32) : Bool\n # The prelude compares six types and adds five: `UInt16` is in its\n # comparison cross (a wide character is compared against a\n # separator on every Windows path) and not in its arithmetic one,\n # so the comparisons for a pair it already declares are skipped\n # here and the arithmetic below is not. Redefining a prelude\n # method is refused by name (SPEC.md R-3), which is how the split\n # announced itself.\n def ==(other : Int64) : Bool\n # The prelude compares six types and adds five: `UInt16` is in its\n # comparison cross (a wide character is compared against a\n # separator on every Windows path) and not in its arithmetic one,\n # so the comparisons for a pair it already declares are skipped\n # here and the arithmetic below is not. Redefining a prelude\n # method is refused by name (SPEC.md R-3), which is how the split\n # announced itself.\n def ==(other : Int128) : Bool\n # The prelude compares six types and adds five: `UInt16` is in its\n # comparison cross (a wide character is compared against a\n # separator on every Windows path) and not in its arithmetic one,\n # so the comparisons for a pair it already declares are skipped\n # here and the arithmetic below is not. Redefining a prelude\n # method is refused by name (SPEC.md R-3), which is how the split\n # announced itself.\n def ==(other : UInt8) : Bool\n # The prelude compares six types and adds five: `UInt16` is in its\n # comparison cross (a wide character is compared against a\n # separator on every Windows path) and not in its arithmetic one,\n # so the comparisons for a pair it already declares are skipped\n # here and the arithmetic below is not. Redefining a prelude\n # method is refused by name (SPEC.md R-3), which is how the split\n # announced itself.\n def ==(other : UInt16) : Bool\n # The prelude compares six types and adds five: `UInt16` is in its\n # comparison cross (a wide character is compared against a\n # separator on every Windows path) and not in its arithmetic one,\n # so the comparisons for a pair it already declares are skipped\n # here and the arithmetic below is not. Redefining a prelude\n # method is refused by name (SPEC.md R-3), which is how the split\n # announced itself.\n def ==(other : UInt32) : Bool\n # The prelude compares six types and adds five: `UInt16` is in its\n # comparison cross (a wide character is compared against a\n # separator on every Windows path) and not in its arithmetic one,\n # so the comparisons for a pair it already declares are skipped\n # here and the arithmetic below is not. Redefining a prelude\n # method is refused by name (SPEC.md R-3), which is how the split\n # announced itself.\n def ==(other : UInt64) : Bool\n # The prelude compares six types and adds five: `UInt16` is in its\n # comparison cross (a wide character is compared against a\n # separator on every Windows path) and not in its arithmetic one,\n # so the comparisons for a pair it already declares are skipped\n # here and the arithmetic below is not. Redefining a prelude\n # method is refused by name (SPEC.md R-3), which is how the split\n # announced itself.\n def ==(other : UInt128) : Bool\n # Every value of the type is a double exactly, so the double's own\n # comparison is the exact one.\n def ==(other : Float64) : Bool\n def >(other : Int8) : Bool\n def >(other : Int16) : Bool\n def >(other : Int32) : Bool\n def >(other : Int64) : Bool\n def >(other : Int128) : Bool\n def >(other : UInt8) : Bool\n def >(other : UInt16) : Bool\n def >(other : UInt32) : Bool\n def >(other : UInt64) : Bool\n def >(other : UInt128) : Bool\n def >(other : Float64) : Bool\n def >=(other : Int8) : Bool\n def >=(other : Int16) : Bool\n def >=(other : Int32) : Bool\n def >=(other : Int64) : Bool\n def >=(other : Int128) : Bool\n def >=(other : UInt8) : Bool\n def >=(other : UInt16) : Bool\n def >=(other : UInt32) : Bool\n def >=(other : UInt64) : Bool\n def >=(other : UInt128) : Bool\n def >=(other : Float64) : Bool\n def >>(count : Int32) : Int8\n def ^(other : Int8) : self\n def ^(other : Int16) : self\n def ^(other : Int32) : self\n def ^(other : Int64) : self\n def ^(other : Int128) : self\n def ^(other : UInt8) : self\n def ^(other : UInt16) : self\n def ^(other : UInt32) : self\n def ^(other : UInt64) : self\n def ^(other : UInt128) : self\n def abs : Int8\n # Bits needed to write the value, the sign excluded: `255.bit_length`\n # is 8, `(-1).bit_length` is 0 and `(-2).bit_length` is 1.\n def bit_length : Int32\n def hash : Int32\n def leading_zeros_count : Int32\n # --- the bits, counted with a logical shift for every type ----------\n # A negative value has its sign bits counted: `(-1).popcount` is 32,\n # one loop of the type's width.\n def popcount : Int32\n def to_f : Float64\n def to_f64 : Float64\n def to_i : Int32\n def to_i128 : Int128\n def to_i128? : Int128 | ::Nil\n def to_i16 : Int16\n def to_i16? : Int16 | ::Nil\n def to_i32 : Int32\n def to_i32? : Int32 | ::Nil\n def to_i64 : Int64\n def to_i64? : Int64 | ::Nil\n # Conversions: the checked form panics \"arithmetic overflow\" when the\n # value does not fit; the `?` form answers nil instead; the unchecked\n # form is the instruction - truncated, or extended by the sign of the\n # type it leaves - as the prelude's `unsafe_to_u8` is. A pair the\n # prelude already declares is not declared twice.\n def to_i8 : Int8\n def to_i8? : Int8 | ::Nil\n def to_i? : Int32 | ::Nil\n def to_s(base : Int32) : String\n # Fits an `Int64`: the prelude's printer.\n def to_s : String\n def to_u : UInt32\n def to_u128 : UInt128\n def to_u128? : UInt128 | ::Nil\n def to_u16 : UInt16\n def to_u16? : UInt16 | ::Nil\n def to_u32 : UInt32\n def to_u32? : UInt32 | ::Nil\n def to_u64 : UInt64\n def to_u64? : UInt64 | ::Nil\n def to_u8 : UInt8\n def to_u8? : UInt8 | ::Nil\n def to_u? : UInt32 | ::Nil\n def trailing_zeros_count : Int32\n def unsafe_chr : Char\n def unsafe_div(other : Int8) : self\n def unsafe_div(other : Int16) : self\n def unsafe_div(other : Int32) : self\n def unsafe_div(other : Int64) : self\n def unsafe_div(other : Int128) : self\n def unsafe_div(other : UInt8) : self\n def unsafe_div(other : UInt16) : self\n def unsafe_div(other : UInt32) : self\n def unsafe_div(other : UInt64) : self\n def unsafe_div(other : UInt128) : self\n def unsafe_mod(other : Int8) : self\n def unsafe_mod(other : Int16) : self\n def unsafe_mod(other : Int32) : self\n def unsafe_mod(other : Int64) : self\n def unsafe_mod(other : Int128) : self\n def unsafe_mod(other : UInt8) : self\n def unsafe_mod(other : UInt16) : self\n def unsafe_mod(other : UInt32) : self\n def unsafe_mod(other : UInt64) : self\n def unsafe_mod(other : UInt128) : self\n def unsafe_shl(other : Int8) : self\n def unsafe_shl(other : Int16) : self\n def unsafe_shl(other : Int32) : self\n def unsafe_shl(other : Int64) : self\n def unsafe_shl(other : Int128) : self\n def unsafe_shl(other : UInt8) : self\n def unsafe_shl(other : UInt16) : self\n def unsafe_shl(other : UInt32) : self\n def unsafe_shl(other : UInt64) : self\n def unsafe_shl(other : UInt128) : self\n def unsafe_shr(other : Int8) : self\n def unsafe_shr(other : Int16) : self\n def unsafe_shr(other : Int32) : self\n def unsafe_shr(other : Int64) : self\n def unsafe_shr(other : Int128) : self\n def unsafe_shr(other : UInt8) : self\n def unsafe_shr(other : UInt16) : self\n def unsafe_shr(other : UInt32) : self\n def unsafe_shr(other : UInt64) : self\n def unsafe_shr(other : UInt128) : self\n def unsafe_to_i : Int32\n def unsafe_to_i128 : Int128\n def unsafe_to_i16 : Int16\n def unsafe_to_i32 : Int32\n def unsafe_to_i64 : Int64\n def unsafe_to_i8 : Int8\n def unsafe_to_u : UInt32\n def unsafe_to_u128 : UInt128\n def unsafe_to_u16 : UInt16\n def unsafe_to_u32 : UInt32\n def unsafe_to_u64 : UInt64\n def unsafe_to_u8 : UInt8\n def |(other : Int8) : self\n def |(other : Int16) : self\n def |(other : Int32) : self\n def |(other : Int64) : self\n def |(other : Int128) : self\n def |(other : UInt8) : self\n def |(other : UInt16) : self\n def |(other : UInt32) : self\n def |(other : UInt64) : self\n def |(other : UInt128) : self\n def ~ : Int8\nend\n\nstruct ::UInt128\n def !=(other : Int8) : Bool\n def !=(other : Int16) : Bool\n def !=(other : Int32) : Bool\n def !=(other : Int64) : Bool\n def !=(other : Int128) : Bool\n def !=(other : UInt8) : Bool\n def !=(other : UInt16) : Bool\n def !=(other : UInt32) : Bool\n def !=(other : UInt64) : Bool\n def !=(other : UInt128) : Bool\n def !=(other : Float64) : Bool\n def %(other : UInt128) : UInt128\n def &(other : Int8) : self\n def &(other : Int16) : self\n def &(other : Int32) : self\n def &(other : Int64) : self\n def &(other : Int128) : self\n def &(other : UInt8) : self\n def &(other : UInt16) : self\n def &(other : UInt32) : self\n def &(other : UInt64) : self\n def &(other : UInt128) : self\n def &*(other : Int8) : self\n def &*(other : Int16) : self\n def &*(other : Int32) : self\n def &*(other : Int64) : self\n def &*(other : Int128) : self\n def &*(other : UInt8) : self\n def &*(other : UInt16) : self\n def &*(other : UInt32) : self\n def &*(other : UInt64) : self\n def &*(other : UInt128) : self\n def &+(other : Int8) : self\n def &+(other : Int16) : self\n def &+(other : Int32) : self\n def &+(other : Int64) : self\n def &+(other : Int128) : self\n def &+(other : UInt8) : self\n def &+(other : UInt16) : self\n def &+(other : UInt32) : self\n def &+(other : UInt64) : self\n def &+(other : UInt128) : self\n def &-(other : Int8) : self\n def &-(other : Int16) : self\n def &-(other : Int32) : self\n def &-(other : Int64) : self\n def &-(other : Int128) : self\n def &-(other : UInt8) : self\n def &-(other : UInt16) : self\n def &-(other : UInt32) : self\n def &-(other : UInt64) : self\n def &-(other : UInt128) : self\n def *(other : Int8) : self\n def *(other : Int16) : self\n def *(other : Int32) : self\n def *(other : Int64) : self\n def *(other : Int128) : self\n def *(other : UInt8) : self\n def *(other : UInt16) : self\n def *(other : UInt32) : self\n def *(other : UInt64) : self\n def *(other : UInt128) : self\n def *(other : Float64) : Float64\n def +(other : Int8) : self\n def +(other : Int16) : self\n def +(other : Int32) : self\n def +(other : Int64) : self\n def +(other : Int128) : self\n def +(other : UInt8) : self\n def +(other : UInt16) : self\n def +(other : UInt32) : self\n def +(other : UInt64) : self\n def +(other : UInt128) : self\n def +(other : Float64) : Float64\n def -(other : Int8) : self\n def -(other : Int16) : self\n def -(other : Int32) : self\n def -(other : Int64) : self\n def -(other : Int128) : self\n def -(other : UInt8) : self\n def -(other : UInt16) : self\n def -(other : UInt32) : self\n def -(other : UInt64) : self\n def -(other : UInt128) : self\n def -(other : Float64) : Float64\n # An integer divided by a float is a float, as the prelude has it for\n # `Int32` and `Int64` - and for `UInt8` and `UInt64` too, which the\n # prelude does not write: `x / 3.0` did not type for them, and with a\n # literal divisor the `Float32` overload took it, so `1_u8 / 3.0` was a\n # single, 0.33333334.\n def /(other : Float64) : Float64\n # The zero is checked here rather than left to the processor, which\n # reports an integer division by zero as a floating-point fault.\n def //(other : UInt128) : UInt128\n def <(other : Int8) : Bool\n def <(other : Int16) : Bool\n def <(other : Int32) : Bool\n def <(other : Int64) : Bool\n def <(other : Int128) : Bool\n def <(other : UInt8) : Bool\n def <(other : UInt16) : Bool\n def <(other : UInt32) : Bool\n def <(other : UInt64) : Bool\n def <(other : UInt128) : Bool\n def <(other : Float64) : Bool\n # A shift by the width or more answers zero (or the sign, shifting a\n # negative value right), which the processor does not promise, and a\n # negative count shifts the other way, as the prelude's `Int32` does.\n def <<(count : Int32) : UInt128\n def <=(other : Int8) : Bool\n def <=(other : Int16) : Bool\n def <=(other : Int32) : Bool\n def <=(other : Int64) : Bool\n def <=(other : Int128) : Bool\n def <=(other : UInt8) : Bool\n def <=(other : UInt16) : Bool\n def <=(other : UInt32) : Bool\n def <=(other : UInt64) : Bool\n def <=(other : UInt128) : Bool\n def <=(other : Float64) : Bool\n # Exact for every width: the double is placed against the type's\n # edges, then its floor - one of the type, once inside them - against\n # the value, then its fraction decides a tie. NaN is after every\n # number, as `Float64#<=>` places it. The prelude's `Int64 == Float64`\n # is exact too, and agrees with this on every number.\n def <=>(other : Float64) : Int32\n # The prelude compares six types and adds five: `UInt16` is in its\n # comparison cross (a wide character is compared against a\n # separator on every Windows path) and not in its arithmetic one,\n # so the comparisons for a pair it already declares are skipped\n # here and the arithmetic below is not. Redefining a prelude\n # method is refused by name (SPEC.md R-3), which is how the split\n # announced itself.\n def ==(other : Int8) : Bool\n # The prelude compares six types and adds five: `UInt16` is in its\n # comparison cross (a wide character is compared against a\n # separator on every Windows path) and not in its arithmetic one,\n # so the comparisons for a pair it already declares are skipped\n # here and the arithmetic below is not. Redefining a prelude\n # method is refused by name (SPEC.md R-3), which is how the split\n # announced itself.\n def ==(other : Int16) : Bool\n # The prelude compares six types and adds five: `UInt16` is in its\n # comparison cross (a wide character is compared against a\n # separator on every Windows path) and not in its arithmetic one,\n # so the comparisons for a pair it already declares are skipped\n # here and the arithmetic below is not. Redefining a prelude\n # method is refused by name (SPEC.md R-3), which is how the split\n # announced itself.\n def ==(other : Int32) : Bool\n # The prelude compares six types and adds five: `UInt16` is in its\n # comparison cross (a wide character is compared against a\n # separator on every Windows path) and not in its arithmetic one,\n # so the comparisons for a pair it already declares are skipped\n # here and the arithmetic below is not. Redefining a prelude\n # method is refused by name (SPEC.md R-3), which is how the split\n # announced itself.\n def ==(other : Int64) : Bool\n # The prelude compares six types and adds five: `UInt16` is in its\n # comparison cross (a wide character is compared against a\n # separator on every Windows path) and not in its arithmetic one,\n # so the comparisons for a pair it already declares are skipped\n # here and the arithmetic below is not. Redefining a prelude\n # method is refused by name (SPEC.md R-3), which is how the split\n # announced itself.\n def ==(other : Int128) : Bool\n # The prelude compares six types and adds five: `UInt16` is in its\n # comparison cross (a wide character is compared against a\n # separator on every Windows path) and not in its arithmetic one,\n # so the comparisons for a pair it already declares are skipped\n # here and the arithmetic below is not. Redefining a prelude\n # method is refused by name (SPEC.md R-3), which is how the split\n # announced itself.\n def ==(other : UInt8) : Bool\n # The prelude compares six types and adds five: `UInt16` is in its\n # comparison cross (a wide character is compared against a\n # separator on every Windows path) and not in its arithmetic one,\n # so the comparisons for a pair it already declares are skipped\n # here and the arithmetic below is not. Redefining a prelude\n # method is refused by name (SPEC.md R-3), which is how the split\n # announced itself.\n def ==(other : UInt16) : Bool\n # The prelude compares six types and adds five: `UInt16` is in its\n # comparison cross (a wide character is compared against a\n # separator on every Windows path) and not in its arithmetic one,\n # so the comparisons for a pair it already declares are skipped\n # here and the arithmetic below is not. Redefining a prelude\n # method is refused by name (SPEC.md R-3), which is how the split\n # announced itself.\n def ==(other : UInt32) : Bool\n # The prelude compares six types and adds five: `UInt16` is in its\n # comparison cross (a wide character is compared against a\n # separator on every Windows path) and not in its arithmetic one,\n # so the comparisons for a pair it already declares are skipped\n # here and the arithmetic below is not. Redefining a prelude\n # method is refused by name (SPEC.md R-3), which is how the split\n # announced itself.\n def ==(other : UInt64) : Bool\n # The prelude compares six types and adds five: `UInt16` is in its\n # comparison cross (a wide character is compared against a\n # separator on every Windows path) and not in its arithmetic one,\n # so the comparisons for a pair it already declares are skipped\n # here and the arithmetic below is not. Redefining a prelude\n # method is refused by name (SPEC.md R-3), which is how the split\n # announced itself.\n def ==(other : UInt128) : Bool\n # A value this wide may not be a double: `9007199254740993_i128 ==\n # 9007199254740992.0` was true, the integer rounded to the double\n # before the comparison. `<=>` below compares exactly.\n # IEEE against NaN: only `!=` is true. `<=>` places NaN for\n # sorting and would answer `<` here.\n def ==(other : Float64) : Bool\n def >(other : Int8) : Bool\n def >(other : Int16) : Bool\n def >(other : Int32) : Bool\n def >(other : Int64) : Bool\n def >(other : Int128) : Bool\n def >(other : UInt8) : Bool\n def >(other : UInt16) : Bool\n def >(other : UInt32) : Bool\n def >(other : UInt64) : Bool\n def >(other : UInt128) : Bool\n def >(other : Float64) : Bool\n def >=(other : Int8) : Bool\n def >=(other : Int16) : Bool\n def >=(other : Int32) : Bool\n def >=(other : Int64) : Bool\n def >=(other : Int128) : Bool\n def >=(other : UInt8) : Bool\n def >=(other : UInt16) : Bool\n def >=(other : UInt32) : Bool\n def >=(other : UInt64) : Bool\n def >=(other : UInt128) : Bool\n def >=(other : Float64) : Bool\n def >>(count : Int32) : UInt128\n def ^(other : Int8) : self\n def ^(other : Int16) : self\n def ^(other : Int32) : self\n def ^(other : Int64) : self\n def ^(other : Int128) : self\n def ^(other : UInt8) : self\n def ^(other : UInt16) : self\n def ^(other : UInt32) : self\n def ^(other : UInt64) : self\n def ^(other : UInt128) : self\n def abs : UInt128\n # Bits needed to write the value, the sign excluded: `255.bit_length`\n # is 8, `(-1).bit_length` is 0 and `(-2).bit_length` is 1.\n def bit_length : Int32\n def hash : Int32\n def leading_zeros_count : Int32\n # --- the bits, counted with a logical shift for every type ----------\n # A negative value has its sign bits counted: `(-1).popcount` is 32,\n # one loop of the type's width.\n def popcount : Int32\n def to_f : Float64\n def to_f64 : Float64\n def to_i : Int32\n def to_i128 : Int128\n def to_i128? : Int128 | ::Nil\n def to_i16 : Int16\n def to_i16? : Int16 | ::Nil\n def to_i32 : Int32\n def to_i32? : Int32 | ::Nil\n def to_i64 : Int64\n def to_i64? : Int64 | ::Nil\n # Conversions: the checked form panics \"arithmetic overflow\" when the\n # value does not fit; the `?` form answers nil instead; the unchecked\n # form is the instruction - truncated, or extended by the sign of the\n # type it leaves - as the prelude's `unsafe_to_u8` is. A pair the\n # prelude already declares is not declared twice.\n def to_i8 : Int8\n def to_i8? : Int8 | ::Nil\n def to_i? : Int32 | ::Nil\n def to_s(base : Int32) : String\n # Digits backward, the negative magnitude divided rather than\n # negated so the smallest value prints (its negation is not one of\n # the type).\n def to_s : String\n def to_u : UInt32\n def to_u128 : UInt128\n def to_u128? : UInt128 | ::Nil\n def to_u16 : UInt16\n def to_u16? : UInt16 | ::Nil\n def to_u32 : UInt32\n def to_u32? : UInt32 | ::Nil\n def to_u64 : UInt64\n def to_u64? : UInt64 | ::Nil\n def to_u8 : UInt8\n def to_u8? : UInt8 | ::Nil\n def to_u? : UInt32 | ::Nil\n def trailing_zeros_count : Int32\n def unsafe_chr : Char\n def unsafe_div(other : Int8) : self\n def unsafe_div(other : Int16) : self\n def unsafe_div(other : Int32) : self\n def unsafe_div(other : Int64) : self\n def unsafe_div(other : Int128) : self\n def unsafe_div(other : UInt8) : self\n def unsafe_div(other : UInt16) : self\n def unsafe_div(other : UInt32) : self\n def unsafe_div(other : UInt64) : self\n def unsafe_div(other : UInt128) : self\n def unsafe_mod(other : Int8) : self\n def unsafe_mod(other : Int16) : self\n def unsafe_mod(other : Int32) : self\n def unsafe_mod(other : Int64) : self\n def unsafe_mod(other : Int128) : self\n def unsafe_mod(other : UInt8) : self\n def unsafe_mod(other : UInt16) : self\n def unsafe_mod(other : UInt32) : self\n def unsafe_mod(other : UInt64) : self\n def unsafe_mod(other : UInt128) : self\n def unsafe_shl(other : Int8) : self\n def unsafe_shl(other : Int16) : self\n def unsafe_shl(other : Int32) : self\n def unsafe_shl(other : Int64) : self\n def unsafe_shl(other : Int128) : self\n def unsafe_shl(other : UInt8) : self\n def unsafe_shl(other : UInt16) : self\n def unsafe_shl(other : UInt32) : self\n def unsafe_shl(other : UInt64) : self\n def unsafe_shl(other : UInt128) : self\n def unsafe_shr(other : Int8) : self\n def unsafe_shr(other : Int16) : self\n def unsafe_shr(other : Int32) : self\n def unsafe_shr(other : Int64) : self\n def unsafe_shr(other : Int128) : self\n def unsafe_shr(other : UInt8) : self\n def unsafe_shr(other : UInt16) : self\n def unsafe_shr(other : UInt32) : self\n def unsafe_shr(other : UInt64) : self\n def unsafe_shr(other : UInt128) : self\n def unsafe_to_i : Int32\n def unsafe_to_i128 : Int128\n def unsafe_to_i16 : Int16\n def unsafe_to_i32 : Int32\n def unsafe_to_i64 : Int64\n def unsafe_to_i8 : Int8\n def unsafe_to_u : UInt32\n def unsafe_to_u128 : UInt128\n def unsafe_to_u16 : UInt16\n def unsafe_to_u32 : UInt32\n def unsafe_to_u64 : UInt64\n def unsafe_to_u8 : UInt8\n def |(other : Int8) : self\n def |(other : Int16) : self\n def |(other : Int32) : self\n def |(other : Int64) : self\n def |(other : Int128) : self\n def |(other : UInt8) : self\n def |(other : UInt16) : self\n def |(other : UInt32) : self\n def |(other : UInt64) : self\n def |(other : UInt128) : self\n def ~ : UInt128\nend\n\nstruct ::UInt16\n def !=(other : Int8) : Bool\n def !=(other : Int16) : Bool\n def !=(other : Int128) : Bool\n def !=(other : UInt32) : Bool\n def !=(other : UInt128) : Bool\n def !=(other : Float64) : Bool\n def %(other : UInt16) : UInt16\n def &(other : Int8) : self\n def &(other : Int16) : self\n def &(other : Int32) : self\n def &(other : Int64) : self\n def &(other : Int128) : self\n def &(other : UInt8) : self\n def &(other : UInt16) : self\n def &(other : UInt32) : self\n def &(other : UInt64) : self\n def &(other : UInt128) : self\n def &*(other : Int8) : self\n def &*(other : Int16) : self\n def &*(other : Int32) : self\n def &*(other : Int64) : self\n def &*(other : Int128) : self\n def &*(other : UInt8) : self\n def &*(other : UInt16) : self\n def &*(other : UInt32) : self\n def &*(other : UInt64) : self\n def &*(other : UInt128) : self\n def &+(other : Int8) : self\n def &+(other : Int16) : self\n def &+(other : Int32) : self\n def &+(other : Int64) : self\n def &+(other : Int128) : self\n def &+(other : UInt8) : self\n def &+(other : UInt16) : self\n def &+(other : UInt32) : self\n def &+(other : UInt64) : self\n def &+(other : UInt128) : self\n def &-(other : Int8) : self\n def &-(other : Int16) : self\n def &-(other : Int32) : self\n def &-(other : Int64) : self\n def &-(other : Int128) : self\n def &-(other : UInt8) : self\n def &-(other : UInt16) : self\n def &-(other : UInt32) : self\n def &-(other : UInt64) : self\n def &-(other : UInt128) : self\n def *(other : Int8) : self\n def *(other : Int16) : self\n def *(other : Int32) : self\n def *(other : Int64) : self\n def *(other : Int128) : self\n def *(other : UInt8) : self\n def *(other : UInt16) : self\n def *(other : UInt32) : self\n def *(other : UInt64) : self\n def *(other : UInt128) : self\n def *(other : Float64) : Float64\n def +(other : Int8) : self\n def +(other : Int16) : self\n def +(other : Int32) : self\n def +(other : Int64) : self\n def +(other : Int128) : self\n def +(other : UInt8) : self\n def +(other : UInt16) : self\n def +(other : UInt32) : self\n def +(other : UInt64) : self\n def +(other : UInt128) : self\n def +(other : Float64) : Float64\n def -(other : Int8) : self\n def -(other : Int16) : self\n def -(other : Int32) : self\n def -(other : Int64) : self\n def -(other : Int128) : self\n def -(other : UInt8) : self\n def -(other : UInt16) : self\n def -(other : UInt32) : self\n def -(other : UInt64) : self\n def -(other : UInt128) : self\n def -(other : Float64) : Float64\n # An integer divided by a float is a float, as the prelude has it for\n # `Int32` and `Int64` - and for `UInt8` and `UInt64` too, which the\n # prelude does not write: `x / 3.0` did not type for them, and with a\n # literal divisor the `Float32` overload took it, so `1_u8 / 3.0` was a\n # single, 0.33333334.\n def /(other : Float64) : Float64\n # The zero is checked here rather than left to the processor, which\n # reports an integer division by zero as a floating-point fault.\n def //(other : UInt16) : UInt16\n def <(other : Int8) : Bool\n def <(other : Int16) : Bool\n def <(other : Int128) : Bool\n def <(other : UInt32) : Bool\n def <(other : UInt128) : Bool\n def <(other : Float64) : Bool\n # A shift by the width or more answers zero (or the sign, shifting a\n # negative value right), which the processor does not promise, and a\n # negative count shifts the other way, as the prelude's `Int32` does.\n def <<(count : Int32) : UInt16\n def <=(other : Int8) : Bool\n def <=(other : Int16) : Bool\n def <=(other : Int128) : Bool\n def <=(other : UInt32) : Bool\n def <=(other : UInt128) : Bool\n def <=(other : Float64) : Bool\n # Exact for every width: the double is placed against the type's\n # edges, then its floor - one of the type, once inside them - against\n # the value, then its fraction decides a tie. NaN is after every\n # number, as `Float64#<=>` places it. The prelude's `Int64 == Float64`\n # is exact too, and agrees with this on every number.\n def <=>(other : Float64) : Int32\n # The prelude compares six types and adds five: `UInt16` is in its\n # comparison cross (a wide character is compared against a\n # separator on every Windows path) and not in its arithmetic one,\n # so the comparisons for a pair it already declares are skipped\n # here and the arithmetic below is not. Redefining a prelude\n # method is refused by name (SPEC.md R-3), which is how the split\n # announced itself.\n def ==(other : Int8) : Bool\n # The prelude compares six types and adds five: `UInt16` is in its\n # comparison cross (a wide character is compared against a\n # separator on every Windows path) and not in its arithmetic one,\n # so the comparisons for a pair it already declares are skipped\n # here and the arithmetic below is not. Redefining a prelude\n # method is refused by name (SPEC.md R-3), which is how the split\n # announced itself.\n def ==(other : Int16) : Bool\n # The prelude compares six types and adds five: `UInt16` is in its\n # comparison cross (a wide character is compared against a\n # separator on every Windows path) and not in its arithmetic one,\n # so the comparisons for a pair it already declares are skipped\n # here and the arithmetic below is not. Redefining a prelude\n # method is refused by name (SPEC.md R-3), which is how the split\n # announced itself.\n def ==(other : Int128) : Bool\n # The prelude compares six types and adds five: `UInt16` is in its\n # comparison cross (a wide character is compared against a\n # separator on every Windows path) and not in its arithmetic one,\n # so the comparisons for a pair it already declares are skipped\n # here and the arithmetic below is not. Redefining a prelude\n # method is refused by name (SPEC.md R-3), which is how the split\n # announced itself.\n def ==(other : UInt32) : Bool\n # The prelude compares six types and adds five: `UInt16` is in its\n # comparison cross (a wide character is compared against a\n # separator on every Windows path) and not in its arithmetic one,\n # so the comparisons for a pair it already declares are skipped\n # here and the arithmetic below is not. Redefining a prelude\n # method is refused by name (SPEC.md R-3), which is how the split\n # announced itself.\n def ==(other : UInt128) : Bool\n # Every value of the type is a double exactly, so the double's own\n # comparison is the exact one.\n def ==(other : Float64) : Bool\n def >(other : Int8) : Bool\n def >(other : Int16) : Bool\n def >(other : Int128) : Bool\n def >(other : UInt32) : Bool\n def >(other : UInt128) : Bool\n def >(other : Float64) : Bool\n def >=(other : Int8) : Bool\n def >=(other : Int16) : Bool\n def >=(other : Int128) : Bool\n def >=(other : UInt32) : Bool\n def >=(other : UInt128) : Bool\n def >=(other : Float64) : Bool\n def >>(count : Int32) : UInt16\n def ^(other : Int8) : self\n def ^(other : Int16) : self\n def ^(other : Int32) : self\n def ^(other : Int64) : self\n def ^(other : Int128) : self\n def ^(other : UInt8) : self\n def ^(other : UInt16) : self\n def ^(other : UInt32) : self\n def ^(other : UInt64) : self\n def ^(other : UInt128) : self\n def abs : UInt16\n # Bits needed to write the value, the sign excluded: `255.bit_length`\n # is 8, `(-1).bit_length` is 0 and `(-2).bit_length` is 1.\n def bit_length : Int32\n def hash : Int32\n def leading_zeros_count : Int32\n # --- the bits, counted with a logical shift for every type ----------\n # A negative value has its sign bits counted: `(-1).popcount` is 32,\n # one loop of the type's width.\n def popcount : Int32\n def to_f : Float64\n def to_f64 : Float64\n def to_i : Int32\n def to_i128 : Int128\n def to_i128? : Int128 | ::Nil\n def to_i16 : Int16\n def to_i16? : Int16 | ::Nil\n def to_i32 : Int32\n def to_i32? : Int32 | ::Nil\n def to_i64 : Int64\n def to_i64? : Int64 | ::Nil\n # Conversions: the checked form panics \"arithmetic overflow\" when the\n # value does not fit; the `?` form answers nil instead; the unchecked\n # form is the instruction - truncated, or extended by the sign of the\n # type it leaves - as the prelude's `unsafe_to_u8` is. A pair the\n # prelude already declares is not declared twice.\n def to_i8 : Int8\n def to_i8? : Int8 | ::Nil\n def to_i? : Int32 | ::Nil\n def to_s(base : Int32) : String\n # Fits an `Int64`: the prelude's printer.\n def to_s : String\n def to_u : UInt32\n def to_u128 : UInt128\n def to_u128? : UInt128 | ::Nil\n def to_u16 : UInt16\n def to_u16? : UInt16 | ::Nil\n def to_u32 : UInt32\n def to_u32? : UInt32 | ::Nil\n def to_u64 : UInt64\n def to_u64? : UInt64 | ::Nil\n def to_u8 : UInt8\n def to_u8? : UInt8 | ::Nil\n def to_u? : UInt32 | ::Nil\n def trailing_zeros_count : Int32\n def unsafe_chr : Char\n def unsafe_div(other : Int8) : self\n def unsafe_div(other : Int16) : self\n def unsafe_div(other : Int32) : self\n def unsafe_div(other : Int64) : self\n def unsafe_div(other : Int128) : self\n def unsafe_div(other : UInt8) : self\n def unsafe_div(other : UInt16) : self\n def unsafe_div(other : UInt32) : self\n def unsafe_div(other : UInt64) : self\n def unsafe_div(other : UInt128) : self\n def unsafe_mod(other : Int8) : self\n def unsafe_mod(other : Int16) : self\n def unsafe_mod(other : Int32) : self\n def unsafe_mod(other : Int64) : self\n def unsafe_mod(other : Int128) : self\n def unsafe_mod(other : UInt8) : self\n def unsafe_mod(other : UInt16) : self\n def unsafe_mod(other : UInt32) : self\n def unsafe_mod(other : UInt64) : self\n def unsafe_mod(other : UInt128) : self\n def unsafe_shl(other : Int8) : self\n def unsafe_shl(other : Int16) : self\n def unsafe_shl(other : Int32) : self\n def unsafe_shl(other : Int64) : self\n def unsafe_shl(other : Int128) : self\n def unsafe_shl(other : UInt8) : self\n def unsafe_shl(other : UInt16) : self\n def unsafe_shl(other : UInt32) : self\n def unsafe_shl(other : UInt64) : self\n def unsafe_shl(other : UInt128) : self\n def unsafe_shr(other : Int8) : self\n def unsafe_shr(other : Int16) : self\n def unsafe_shr(other : Int32) : self\n def unsafe_shr(other : Int64) : self\n def unsafe_shr(other : Int128) : self\n def unsafe_shr(other : UInt8) : self\n def unsafe_shr(other : UInt16) : self\n def unsafe_shr(other : UInt32) : self\n def unsafe_shr(other : UInt64) : self\n def unsafe_shr(other : UInt128) : self\n def unsafe_to_i : Int32\n def unsafe_to_i128 : Int128\n def unsafe_to_i16 : Int16\n def unsafe_to_i32 : Int32\n def unsafe_to_i64 : Int64\n def unsafe_to_i8 : Int8\n def unsafe_to_u : UInt32\n def unsafe_to_u128 : UInt128\n def unsafe_to_u16 : UInt16\n def unsafe_to_u32 : UInt32\n def unsafe_to_u64 : UInt64\n def unsafe_to_u8 : UInt8\n def |(other : Int8) : self\n def |(other : Int16) : self\n def |(other : Int32) : self\n def |(other : Int64) : self\n def |(other : Int128) : self\n def |(other : UInt8) : self\n def |(other : UInt16) : self\n def |(other : UInt32) : self\n def |(other : UInt64) : self\n def |(other : UInt128) : self\n def ~ : UInt16\nend\n\nstruct ::UInt32\n def !=(other : Int8) : Bool\n def !=(other : Int16) : Bool\n def !=(other : Int32) : Bool\n def !=(other : Int64) : Bool\n def !=(other : Int128) : Bool\n def !=(other : UInt8) : Bool\n def !=(other : UInt16) : Bool\n def !=(other : UInt32) : Bool\n def !=(other : UInt64) : Bool\n def !=(other : UInt128) : Bool\n def !=(other : Float64) : Bool\n def %(other : UInt32) : UInt32\n def &(other : Int8) : self\n def &(other : Int16) : self\n def &(other : Int32) : self\n def &(other : Int64) : self\n def &(other : Int128) : self\n def &(other : UInt8) : self\n def &(other : UInt16) : self\n def &(other : UInt32) : self\n def &(other : UInt64) : self\n def &(other : UInt128) : self\n def &*(other : Int8) : self\n def &*(other : Int16) : self\n def &*(other : Int32) : self\n def &*(other : Int64) : self\n def &*(other : Int128) : self\n def &*(other : UInt8) : self\n def &*(other : UInt16) : self\n def &*(other : UInt32) : self\n def &*(other : UInt64) : self\n def &*(other : UInt128) : self\n def &+(other : Int8) : self\n def &+(other : Int16) : self\n def &+(other : Int32) : self\n def &+(other : Int64) : self\n def &+(other : Int128) : self\n def &+(other : UInt8) : self\n def &+(other : UInt16) : self\n def &+(other : UInt32) : self\n def &+(other : UInt64) : self\n def &+(other : UInt128) : self\n def &-(other : Int8) : self\n def &-(other : Int16) : self\n def &-(other : Int32) : self\n def &-(other : Int64) : self\n def &-(other : Int128) : self\n def &-(other : UInt8) : self\n def &-(other : UInt16) : self\n def &-(other : UInt32) : self\n def &-(other : UInt64) : self\n def &-(other : UInt128) : self\n def *(other : Int8) : self\n def *(other : Int16) : self\n def *(other : Int32) : self\n def *(other : Int64) : self\n def *(other : Int128) : self\n def *(other : UInt8) : self\n def *(other : UInt16) : self\n def *(other : UInt32) : self\n def *(other : UInt64) : self\n def *(other : UInt128) : self\n def *(other : Float64) : Float64\n def +(other : Int8) : self\n def +(other : Int16) : self\n def +(other : Int32) : self\n def +(other : Int64) : self\n def +(other : Int128) : self\n def +(other : UInt8) : self\n def +(other : UInt16) : self\n def +(other : UInt32) : self\n def +(other : UInt64) : self\n def +(other : UInt128) : self\n def +(other : Float64) : Float64\n def -(other : Int8) : self\n def -(other : Int16) : self\n def -(other : Int32) : self\n def -(other : Int64) : self\n def -(other : Int128) : self\n def -(other : UInt8) : self\n def -(other : UInt16) : self\n def -(other : UInt32) : self\n def -(other : UInt64) : self\n def -(other : UInt128) : self\n def -(other : Float64) : Float64\n # An integer divided by a float is a float, as the prelude has it for\n # `Int32` and `Int64` - and for `UInt8` and `UInt64` too, which the\n # prelude does not write: `x / 3.0` did not type for them, and with a\n # literal divisor the `Float32` overload took it, so `1_u8 / 3.0` was a\n # single, 0.33333334.\n def /(other : Float64) : Float64\n # The zero is checked here rather than left to the processor, which\n # reports an integer division by zero as a floating-point fault.\n def //(other : UInt32) : UInt32\n def <(other : Int8) : Bool\n def <(other : Int16) : Bool\n def <(other : Int32) : Bool\n def <(other : Int64) : Bool\n def <(other : Int128) : Bool\n def <(other : UInt8) : Bool\n def <(other : UInt16) : Bool\n def <(other : UInt32) : Bool\n def <(other : UInt64) : Bool\n def <(other : UInt128) : Bool\n def <(other : Float64) : Bool\n # A shift by the width or more answers zero (or the sign, shifting a\n # negative value right), which the processor does not promise, and a\n # negative count shifts the other way, as the prelude's `Int32` does.\n def <<(count : Int32) : UInt32\n def <=(other : Int8) : Bool\n def <=(other : Int16) : Bool\n def <=(other : Int32) : Bool\n def <=(other : Int64) : Bool\n def <=(other : Int128) : Bool\n def <=(other : UInt8) : Bool\n def <=(other : UInt16) : Bool\n def <=(other : UInt32) : Bool\n def <=(other : UInt64) : Bool\n def <=(other : UInt128) : Bool\n def <=(other : Float64) : Bool\n # Exact for every width: the double is placed against the type's\n # edges, then its floor - one of the type, once inside them - against\n # the value, then its fraction decides a tie. NaN is after every\n # number, as `Float64#<=>` places it. The prelude's `Int64 == Float64`\n # is exact too, and agrees with this on every number.\n def <=>(other : Float64) : Int32\n # The prelude compares six types and adds five: `UInt16` is in its\n # comparison cross (a wide character is compared against a\n # separator on every Windows path) and not in its arithmetic one,\n # so the comparisons for a pair it already declares are skipped\n # here and the arithmetic below is not. Redefining a prelude\n # method is refused by name (SPEC.md R-3), which is how the split\n # announced itself.\n def ==(other : Int8) : Bool\n # The prelude compares six types and adds five: `UInt16` is in its\n # comparison cross (a wide character is compared against a\n # separator on every Windows path) and not in its arithmetic one,\n # so the comparisons for a pair it already declares are skipped\n # here and the arithmetic below is not. Redefining a prelude\n # method is refused by name (SPEC.md R-3), which is how the split\n # announced itself.\n def ==(other : Int16) : Bool\n # The prelude compares six types and adds five: `UInt16` is in its\n # comparison cross (a wide character is compared against a\n # separator on every Windows path) and not in its arithmetic one,\n # so the comparisons for a pair it already declares are skipped\n # here and the arithmetic below is not. Redefining a prelude\n # method is refused by name (SPEC.md R-3), which is how the split\n # announced itself.\n def ==(other : Int32) : Bool\n # The prelude compares six types and adds five: `UInt16` is in its\n # comparison cross (a wide character is compared against a\n # separator on every Windows path) and not in its arithmetic one,\n # so the comparisons for a pair it already declares are skipped\n # here and the arithmetic below is not. Redefining a prelude\n # method is refused by name (SPEC.md R-3), which is how the split\n # announced itself.\n def ==(other : Int64) : Bool\n # The prelude compares six types and adds five: `UInt16` is in its\n # comparison cross (a wide character is compared against a\n # separator on every Windows path) and not in its arithmetic one,\n # so the comparisons for a pair it already declares are skipped\n # here and the arithmetic below is not. Redefining a prelude\n # method is refused by name (SPEC.md R-3), which is how the split\n # announced itself.\n def ==(other : Int128) : Bool\n # The prelude compares six types and adds five: `UInt16` is in its\n # comparison cross (a wide character is compared against a\n # separator on every Windows path) and not in its arithmetic one,\n # so the comparisons for a pair it already declares are skipped\n # here and the arithmetic below is not. Redefining a prelude\n # method is refused by name (SPEC.md R-3), which is how the split\n # announced itself.\n def ==(other : UInt8) : Bool\n # The prelude compares six types and adds five: `UInt16` is in its\n # comparison cross (a wide character is compared against a\n # separator on every Windows path) and not in its arithmetic one,\n # so the comparisons for a pair it already declares are skipped\n # here and the arithmetic below is not. Redefining a prelude\n # method is refused by name (SPEC.md R-3), which is how the split\n # announced itself.\n def ==(other : UInt16) : Bool\n # The prelude compares six types and adds five: `UInt16` is in its\n # comparison cross (a wide character is compared against a\n # separator on every Windows path) and not in its arithmetic one,\n # so the comparisons for a pair it already declares are skipped\n # here and the arithmetic below is not. Redefining a prelude\n # method is refused by name (SPEC.md R-3), which is how the split\n # announced itself.\n def ==(other : UInt32) : Bool\n # The prelude compares six types and adds five: `UInt16` is in its\n # comparison cross (a wide character is compared against a\n # separator on every Windows path) and not in its arithmetic one,\n # so the comparisons for a pair it already declares are skipped\n # here and the arithmetic below is not. Redefining a prelude\n # method is refused by name (SPEC.md R-3), which is how the split\n # announced itself.\n def ==(other : UInt64) : Bool\n # The prelude compares six types and adds five: `UInt16` is in its\n # comparison cross (a wide character is compared against a\n # separator on every Windows path) and not in its arithmetic one,\n # so the comparisons for a pair it already declares are skipped\n # here and the arithmetic below is not. Redefining a prelude\n # method is refused by name (SPEC.md R-3), which is how the split\n # announced itself.\n def ==(other : UInt128) : Bool\n # Every value of the type is a double exactly, so the double's own\n # comparison is the exact one.\n def ==(other : Float64) : Bool\n def >(other : Int8) : Bool\n def >(other : Int16) : Bool\n def >(other : Int32) : Bool\n def >(other : Int64) : Bool\n def >(other : Int128) : Bool\n def >(other : UInt8) : Bool\n def >(other : UInt16) : Bool\n def >(other : UInt32) : Bool\n def >(other : UInt64) : Bool\n def >(other : UInt128) : Bool\n def >(other : Float64) : Bool\n def >=(other : Int8) : Bool\n def >=(other : Int16) : Bool\n def >=(other : Int32) : Bool\n def >=(other : Int64) : Bool\n def >=(other : Int128) : Bool\n def >=(other : UInt8) : Bool\n def >=(other : UInt16) : Bool\n def >=(other : UInt32) : Bool\n def >=(other : UInt64) : Bool\n def >=(other : UInt128) : Bool\n def >=(other : Float64) : Bool\n def >>(count : Int32) : UInt32\n def ^(other : Int8) : self\n def ^(other : Int16) : self\n def ^(other : Int32) : self\n def ^(other : Int64) : self\n def ^(other : Int128) : self\n def ^(other : UInt8) : self\n def ^(other : UInt16) : self\n def ^(other : UInt32) : self\n def ^(other : UInt64) : self\n def ^(other : UInt128) : self\n def abs : UInt32\n # Bits needed to write the value, the sign excluded: `255.bit_length`\n # is 8, `(-1).bit_length` is 0 and `(-2).bit_length` is 1.\n def bit_length : Int32\n def hash : Int32\n def leading_zeros_count : Int32\n # --- the bits, counted with a logical shift for every type ----------\n # A negative value has its sign bits counted: `(-1).popcount` is 32,\n # one loop of the type's width.\n def popcount : Int32\n def to_f : Float64\n def to_f64 : Float64\n def to_i : Int32\n def to_i128 : Int128\n def to_i128? : Int128 | ::Nil\n def to_i16 : Int16\n def to_i16? : Int16 | ::Nil\n def to_i32 : Int32\n def to_i32? : Int32 | ::Nil\n def to_i64 : Int64\n def to_i64? : Int64 | ::Nil\n # Conversions: the checked form panics \"arithmetic overflow\" when the\n # value does not fit; the `?` form answers nil instead; the unchecked\n # form is the instruction - truncated, or extended by the sign of the\n # type it leaves - as the prelude's `unsafe_to_u8` is. A pair the\n # prelude already declares is not declared twice.\n def to_i8 : Int8\n def to_i8? : Int8 | ::Nil\n def to_i? : Int32 | ::Nil\n def to_s(base : Int32) : String\n # Fits an `Int64`: the prelude's printer.\n def to_s : String\n def to_u : UInt32\n def to_u128 : UInt128\n def to_u128? : UInt128 | ::Nil\n def to_u16 : UInt16\n def to_u16? : UInt16 | ::Nil\n def to_u32 : UInt32\n def to_u32? : UInt32 | ::Nil\n def to_u64 : UInt64\n def to_u64? : UInt64 | ::Nil\n def to_u8 : UInt8\n def to_u8? : UInt8 | ::Nil\n def to_u? : UInt32 | ::Nil\n def trailing_zeros_count : Int32\n def unsafe_chr : Char\n def unsafe_div(other : Int8) : self\n def unsafe_div(other : Int16) : self\n def unsafe_div(other : Int32) : self\n def unsafe_div(other : Int64) : self\n def unsafe_div(other : Int128) : self\n def unsafe_div(other : UInt8) : self\n def unsafe_div(other : UInt16) : self\n def unsafe_div(other : UInt32) : self\n def unsafe_div(other : UInt64) : self\n def unsafe_div(other : UInt128) : self\n def unsafe_mod(other : Int8) : self\n def unsafe_mod(other : Int16) : self\n def unsafe_mod(other : Int32) : self\n def unsafe_mod(other : Int64) : self\n def unsafe_mod(other : Int128) : self\n def unsafe_mod(other : UInt8) : self\n def unsafe_mod(other : UInt16) : self\n def unsafe_mod(other : UInt32) : self\n def unsafe_mod(other : UInt64) : self\n def unsafe_mod(other : UInt128) : self\n def unsafe_shl(other : Int8) : self\n def unsafe_shl(other : Int16) : self\n def unsafe_shl(other : Int32) : self\n def unsafe_shl(other : Int64) : self\n def unsafe_shl(other : Int128) : self\n def unsafe_shl(other : UInt8) : self\n def unsafe_shl(other : UInt16) : self\n def unsafe_shl(other : UInt32) : self\n def unsafe_shl(other : UInt64) : self\n def unsafe_shl(other : UInt128) : self\n def unsafe_shr(other : Int8) : self\n def unsafe_shr(other : Int16) : self\n def unsafe_shr(other : Int32) : self\n def unsafe_shr(other : Int64) : self\n def unsafe_shr(other : Int128) : self\n def unsafe_shr(other : UInt8) : self\n def unsafe_shr(other : UInt16) : self\n def unsafe_shr(other : UInt32) : self\n def unsafe_shr(other : UInt64) : self\n def unsafe_shr(other : UInt128) : self\n def unsafe_to_i : Int32\n def unsafe_to_i128 : Int128\n def unsafe_to_i16 : Int16\n def unsafe_to_i32 : Int32\n def unsafe_to_i64 : Int64\n def unsafe_to_i8 : Int8\n def unsafe_to_u : UInt32\n def unsafe_to_u128 : UInt128\n def unsafe_to_u16 : UInt16\n def unsafe_to_u32 : UInt32\n def unsafe_to_u64 : UInt64\n def unsafe_to_u8 : UInt8\n def |(other : Int8) : self\n def |(other : Int16) : self\n def |(other : Int32) : self\n def |(other : Int64) : self\n def |(other : Int128) : self\n def |(other : UInt8) : self\n def |(other : UInt16) : self\n def |(other : UInt32) : self\n def |(other : UInt64) : self\n def |(other : UInt128) : self\n def ~ : UInt32\nend\n\nstruct ::UInt64\n def !=(other : Int8) : Bool\n def !=(other : Int16) : Bool\n def !=(other : Int128) : Bool\n def !=(other : UInt32) : Bool\n def !=(other : UInt128) : Bool\n def &(other : Int8) : self\n def &(other : Int16) : self\n def &(other : Int128) : self\n def &(other : UInt16) : self\n def &(other : UInt32) : self\n def &(other : UInt128) : self\n def &*(other : Int8) : self\n def &*(other : Int16) : self\n def &*(other : Int128) : self\n def &*(other : UInt16) : self\n def &*(other : UInt32) : self\n def &*(other : UInt128) : self\n def &+(other : Int8) : self\n def &+(other : Int16) : self\n def &+(other : Int128) : self\n def &+(other : UInt16) : self\n def &+(other : UInt32) : self\n def &+(other : UInt128) : self\n def &-(other : Int8) : self\n def &-(other : Int16) : self\n def &-(other : Int128) : self\n def &-(other : UInt16) : self\n def &-(other : UInt32) : self\n def &-(other : UInt128) : self\n def *(other : Int8) : self\n def *(other : Int16) : self\n def *(other : Int128) : self\n def *(other : UInt16) : self\n def *(other : UInt32) : self\n def *(other : UInt128) : self\n def +(other : Int8) : self\n def +(other : Int16) : self\n def +(other : Int128) : self\n def +(other : UInt16) : self\n def +(other : UInt32) : self\n def +(other : UInt128) : self\n def -(other : Int8) : self\n def -(other : Int16) : self\n def -(other : Int128) : self\n def -(other : UInt16) : self\n def -(other : UInt32) : self\n def -(other : UInt128) : self\n # An integer divided by a float is a float, as the prelude has it for\n # `Int32` and `Int64` - and for `UInt8` and `UInt64` too, which the\n # prelude does not write: `x / 3.0` did not type for them, and with a\n # literal divisor the `Float32` overload took it, so `1_u8 / 3.0` was a\n # single, 0.33333334.\n def /(other : Float64) : Float64\n def <(other : Int8) : Bool\n def <(other : Int16) : Bool\n def <(other : Int128) : Bool\n def <(other : UInt32) : Bool\n def <(other : UInt128) : Bool\n # A shift by the width or more answers zero (or the sign, shifting a\n # negative value right), which the processor does not promise, and a\n # negative count shifts the other way, as the prelude's `Int32` does.\n def <<(count : Int32) : UInt64\n def <=(other : Int8) : Bool\n def <=(other : Int16) : Bool\n def <=(other : Int128) : Bool\n def <=(other : UInt32) : Bool\n def <=(other : UInt128) : Bool\n # Exact for every width: the double is placed against the type's\n # edges, then its floor - one of the type, once inside them - against\n # the value, then its fraction decides a tie. NaN is after every\n # number, as `Float64#<=>` places it. The prelude's `Int64 == Float64`\n # is exact too, and agrees with this on every number.\n def <=>(other : Float64) : Int32\n # The prelude compares six types and adds five: `UInt16` is in its\n # comparison cross (a wide character is compared against a\n # separator on every Windows path) and not in its arithmetic one,\n # so the comparisons for a pair it already declares are skipped\n # here and the arithmetic below is not. Redefining a prelude\n # method is refused by name (SPEC.md R-3), which is how the split\n # announced itself.\n def ==(other : Int8) : Bool\n # The prelude compares six types and adds five: `UInt16` is in its\n # comparison cross (a wide character is compared against a\n # separator on every Windows path) and not in its arithmetic one,\n # so the comparisons for a pair it already declares are skipped\n # here and the arithmetic below is not. Redefining a prelude\n # method is refused by name (SPEC.md R-3), which is how the split\n # announced itself.\n def ==(other : Int16) : Bool\n # The prelude compares six types and adds five: `UInt16` is in its\n # comparison cross (a wide character is compared against a\n # separator on every Windows path) and not in its arithmetic one,\n # so the comparisons for a pair it already declares are skipped\n # here and the arithmetic below is not. Redefining a prelude\n # method is refused by name (SPEC.md R-3), which is how the split\n # announced itself.\n def ==(other : Int128) : Bool\n # The prelude compares six types and adds five: `UInt16` is in its\n # comparison cross (a wide character is compared against a\n # separator on every Windows path) and not in its arithmetic one,\n # so the comparisons for a pair it already declares are skipped\n # here and the arithmetic below is not. Redefining a prelude\n # method is refused by name (SPEC.md R-3), which is how the split\n # announced itself.\n def ==(other : UInt32) : Bool\n # The prelude compares six types and adds five: `UInt16` is in its\n # comparison cross (a wide character is compared against a\n # separator on every Windows path) and not in its arithmetic one,\n # so the comparisons for a pair it already declares are skipped\n # here and the arithmetic below is not. Redefining a prelude\n # method is refused by name (SPEC.md R-3), which is how the split\n # announced itself.\n def ==(other : UInt128) : Bool\n def >(other : Int8) : Bool\n def >(other : Int16) : Bool\n def >(other : Int128) : Bool\n def >(other : UInt32) : Bool\n def >(other : UInt128) : Bool\n def >=(other : Int8) : Bool\n def >=(other : Int16) : Bool\n def >=(other : Int128) : Bool\n def >=(other : UInt32) : Bool\n def >=(other : UInt128) : Bool\n def >>(count : Int32) : UInt64\n def ^(other : Int8) : self\n def ^(other : Int16) : self\n def ^(other : Int128) : self\n def ^(other : UInt16) : self\n def ^(other : UInt32) : self\n def ^(other : UInt128) : self\n def abs : UInt64\n # Bits needed to write the value, the sign excluded: `255.bit_length`\n # is 8, `(-1).bit_length` is 0 and `(-2).bit_length` is 1.\n def bit_length : Int32\n def leading_zeros_count : Int32\n # --- the bits, counted with a logical shift for every type ----------\n # A negative value has its sign bits counted: `(-1).popcount` is 32,\n # one loop of the type's width.\n def popcount : Int32\n def to_i128 : Int128\n def to_i128? : Int128 | ::Nil\n def to_i16 : Int16\n def to_i16? : Int16 | ::Nil\n def to_i32? : Int32 | ::Nil\n def to_i64? : Int64 | ::Nil\n # Conversions: the checked form panics \"arithmetic overflow\" when the\n # value does not fit; the `?` form answers nil instead; the unchecked\n # form is the instruction - truncated, or extended by the sign of the\n # type it leaves - as the prelude's `unsafe_to_u8` is. A pair the\n # prelude already declares is not declared twice.\n def to_i8 : Int8\n def to_i8? : Int8 | ::Nil\n def to_i? : Int32 | ::Nil\n def to_u : UInt32\n def to_u128 : UInt128\n def to_u128? : UInt128 | ::Nil\n def to_u16 : UInt16\n def to_u16? : UInt16 | ::Nil\n def to_u32 : UInt32\n def to_u32? : UInt32 | ::Nil\n def to_u64? : UInt64 | ::Nil\n def to_u8? : UInt8 | ::Nil\n def to_u? : UInt32 | ::Nil\n def trailing_zeros_count : Int32\n def unsafe_div(other : Int8) : self\n def unsafe_div(other : Int16) : self\n def unsafe_div(other : Int128) : self\n def unsafe_div(other : UInt16) : self\n def unsafe_div(other : UInt32) : self\n def unsafe_div(other : UInt128) : self\n def unsafe_mod(other : Int8) : self\n def unsafe_mod(other : Int16) : self\n def unsafe_mod(other : Int128) : self\n def unsafe_mod(other : UInt16) : self\n def unsafe_mod(other : UInt32) : self\n def unsafe_mod(other : UInt128) : self\n def unsafe_shl(other : Int8) : self\n def unsafe_shl(other : Int16) : self\n def unsafe_shl(other : Int128) : self\n def unsafe_shl(other : UInt16) : self\n def unsafe_shl(other : UInt32) : self\n def unsafe_shl(other : UInt128) : self\n def unsafe_shr(other : Int8) : self\n def unsafe_shr(other : Int16) : self\n def unsafe_shr(other : Int128) : self\n def unsafe_shr(other : UInt16) : self\n def unsafe_shr(other : UInt32) : self\n def unsafe_shr(other : UInt128) : self\n def unsafe_to_i128 : Int128\n def unsafe_to_i16 : Int16\n def unsafe_to_i8 : Int8\n def unsafe_to_u : UInt32\n def unsafe_to_u128 : UInt128\n def unsafe_to_u16 : UInt16\n def unsafe_to_u32 : UInt32\n def |(other : Int8) : self\n def |(other : Int16) : self\n def |(other : Int128) : self\n def |(other : UInt16) : self\n def |(other : UInt32) : self\n def |(other : UInt128) : self\n def ~ : UInt64\nend\n\nstruct ::UInt8\n def !=(other : Int8) : Bool\n def !=(other : Int16) : Bool\n def !=(other : Int128) : Bool\n def !=(other : UInt32) : Bool\n def !=(other : UInt128) : Bool\n def %(other : UInt8) : UInt8\n def &(other : Int8) : self\n def &(other : Int16) : self\n def &(other : Int128) : self\n def &(other : UInt16) : self\n def &(other : UInt32) : self\n def &(other : UInt128) : self\n def &*(other : Int8) : self\n def &*(other : Int16) : self\n def &*(other : Int128) : self\n def &*(other : UInt16) : self\n def &*(other : UInt32) : self\n def &*(other : UInt128) : self\n def &+(other : Int8) : self\n def &+(other : Int16) : self\n def &+(other : Int128) : self\n def &+(other : UInt16) : self\n def &+(other : UInt32) : self\n def &+(other : UInt128) : self\n def &-(other : Int8) : self\n def &-(other : Int16) : self\n def &-(other : Int128) : self\n def &-(other : UInt16) : self\n def &-(other : UInt32) : self\n def &-(other : UInt128) : self\n def *(other : Int8) : self\n def *(other : Int16) : self\n def *(other : Int128) : self\n def *(other : UInt16) : self\n def *(other : UInt32) : self\n def *(other : UInt128) : self\n def +(other : Int8) : self\n def +(other : Int16) : self\n def +(other : Int128) : self\n def +(other : UInt16) : self\n def +(other : UInt32) : self\n def +(other : UInt128) : self\n def -(other : Int8) : self\n def -(other : Int16) : self\n def -(other : Int128) : self\n def -(other : UInt16) : self\n def -(other : UInt32) : self\n def -(other : UInt128) : self\n # An integer divided by a float is a float, as the prelude has it for\n # `Int32` and `Int64` - and for `UInt8` and `UInt64` too, which the\n # prelude does not write: `x / 3.0` did not type for them, and with a\n # literal divisor the `Float32` overload took it, so `1_u8 / 3.0` was a\n # single, 0.33333334.\n def /(other : Float64) : Float64\n # The zero is checked here rather than left to the processor, which\n # reports an integer division by zero as a floating-point fault.\n def //(other : UInt8) : UInt8\n def <(other : Int8) : Bool\n def <(other : Int16) : Bool\n def <(other : Int128) : Bool\n def <(other : UInt32) : Bool\n def <(other : UInt128) : Bool\n # A shift by the width or more answers zero (or the sign, shifting a\n # negative value right), which the processor does not promise, and a\n # negative count shifts the other way, as the prelude's `Int32` does.\n def <<(count : Int32) : UInt8\n def <=(other : Int8) : Bool\n def <=(other : Int16) : Bool\n def <=(other : Int128) : Bool\n def <=(other : UInt32) : Bool\n def <=(other : UInt128) : Bool\n # Exact for every width: the double is placed against the type's\n # edges, then its floor - one of the type, once inside them - against\n # the value, then its fraction decides a tie. NaN is after every\n # number, as `Float64#<=>` places it. The prelude's `Int64 == Float64`\n # is exact too, and agrees with this on every number.\n def <=>(other : Float64) : Int32\n # The prelude compares six types and adds five: `UInt16` is in its\n # comparison cross (a wide character is compared against a\n # separator on every Windows path) and not in its arithmetic one,\n # so the comparisons for a pair it already declares are skipped\n # here and the arithmetic below is not. Redefining a prelude\n # method is refused by name (SPEC.md R-3), which is how the split\n # announced itself.\n def ==(other : Int8) : Bool\n # The prelude compares six types and adds five: `UInt16` is in its\n # comparison cross (a wide character is compared against a\n # separator on every Windows path) and not in its arithmetic one,\n # so the comparisons for a pair it already declares are skipped\n # here and the arithmetic below is not. Redefining a prelude\n # method is refused by name (SPEC.md R-3), which is how the split\n # announced itself.\n def ==(other : Int16) : Bool\n # The prelude compares six types and adds five: `UInt16` is in its\n # comparison cross (a wide character is compared against a\n # separator on every Windows path) and not in its arithmetic one,\n # so the comparisons for a pair it already declares are skipped\n # here and the arithmetic below is not. Redefining a prelude\n # method is refused by name (SPEC.md R-3), which is how the split\n # announced itself.\n def ==(other : Int128) : Bool\n # The prelude compares six types and adds five: `UInt16` is in its\n # comparison cross (a wide character is compared against a\n # separator on every Windows path) and not in its arithmetic one,\n # so the comparisons for a pair it already declares are skipped\n # here and the arithmetic below is not. Redefining a prelude\n # method is refused by name (SPEC.md R-3), which is how the split\n # announced itself.\n def ==(other : UInt32) : Bool\n # The prelude compares six types and adds five: `UInt16` is in its\n # comparison cross (a wide character is compared against a\n # separator on every Windows path) and not in its arithmetic one,\n # so the comparisons for a pair it already declares are skipped\n # here and the arithmetic below is not. Redefining a prelude\n # method is refused by name (SPEC.md R-3), which is how the split\n # announced itself.\n def ==(other : UInt128) : Bool\n def >(other : Int8) : Bool\n def >(other : Int16) : Bool\n def >(other : Int128) : Bool\n def >(other : UInt32) : Bool\n def >(other : UInt128) : Bool\n def >=(other : Int8) : Bool\n def >=(other : Int16) : Bool\n def >=(other : Int128) : Bool\n def >=(other : UInt32) : Bool\n def >=(other : UInt128) : Bool\n def >>(count : Int32) : UInt8\n def ^(other : Int8) : self\n def ^(other : Int16) : self\n def ^(other : Int128) : self\n def ^(other : UInt16) : self\n def ^(other : UInt32) : self\n def ^(other : UInt128) : self\n def abs : UInt8\n # Bits needed to write the value, the sign excluded: `255.bit_length`\n # is 8, `(-1).bit_length` is 0 and `(-2).bit_length` is 1.\n def bit_length : Int32\n def leading_zeros_count : Int32\n # --- the bits, counted with a logical shift for every type ----------\n # A negative value has its sign bits counted: `(-1).popcount` is 32,\n # one loop of the type's width.\n def popcount : Int32\n def to_i128 : Int128\n def to_i128? : Int128 | ::Nil\n def to_i16 : Int16\n def to_i16? : Int16 | ::Nil\n def to_i32? : Int32 | ::Nil\n def to_i64? : Int64 | ::Nil\n # Conversions: the checked form panics \"arithmetic overflow\" when the\n # value does not fit; the `?` form answers nil instead; the unchecked\n # form is the instruction - truncated, or extended by the sign of the\n # type it leaves - as the prelude's `unsafe_to_u8` is. A pair the\n # prelude already declares is not declared twice.\n def to_i8 : Int8\n def to_i8? : Int8 | ::Nil\n def to_i? : Int32 | ::Nil\n def to_u : UInt32\n def to_u128 : UInt128\n def to_u128? : UInt128 | ::Nil\n def to_u16 : UInt16\n def to_u16? : UInt16 | ::Nil\n def to_u32 : UInt32\n def to_u32? : UInt32 | ::Nil\n def to_u64? : UInt64 | ::Nil\n def to_u8? : UInt8 | ::Nil\n def to_u? : UInt32 | ::Nil\n def trailing_zeros_count : Int32\n def unsafe_div(other : Int8) : self\n def unsafe_div(other : Int16) : self\n def unsafe_div(other : Int128) : self\n def unsafe_div(other : UInt16) : self\n def unsafe_div(other : UInt32) : self\n def unsafe_div(other : UInt128) : self\n def unsafe_mod(other : Int8) : self\n def unsafe_mod(other : Int16) : self\n def unsafe_mod(other : Int128) : self\n def unsafe_mod(other : UInt16) : self\n def unsafe_mod(other : UInt32) : self\n def unsafe_mod(other : UInt128) : self\n def unsafe_shl(other : Int8) : self\n def unsafe_shl(other : Int16) : self\n def unsafe_shl(other : Int128) : self\n def unsafe_shl(other : UInt16) : self\n def unsafe_shl(other : UInt32) : self\n def unsafe_shl(other : UInt128) : self\n def unsafe_shr(other : Int8) : self\n def unsafe_shr(other : Int16) : self\n def unsafe_shr(other : Int128) : self\n def unsafe_shr(other : UInt16) : self\n def unsafe_shr(other : UInt32) : self\n def unsafe_shr(other : UInt128) : self\n def unsafe_to_i128 : Int128\n def unsafe_to_i16 : Int16\n def unsafe_to_i8 : Int8\n def unsafe_to_u : UInt32\n def unsafe_to_u128 : UInt128\n def unsafe_to_u16 : UInt16\n def unsafe_to_u32 : UInt32\n def |(other : Int8) : self\n def |(other : Int16) : self\n def |(other : Int128) : self\n def |(other : UInt16) : self\n def |(other : UInt32) : self\n def |(other : UInt128) : self\n def ~ : UInt8\nend\n" }, { "name": "std/io", "path": "src/std/io.iyi", - "sourceSha256": "010cf487070cc712605ec215b8d2768039b051b3de353789f35434529a143d53", + "sourceSha256": "1affb77bc71581778fd307af019a74f26770ea04c73b482fb74b1f0a2186051e", "surface": "module std/io\n\npub struct ByteFormat\n struct BigEndian\n def self.decode_int32(buffer : Pointer(UInt8)) : Int32\n def self.decode_int32(io : IyiIO) : Int32\n def self.decode_int64(buffer : Pointer(UInt8)) : Int64\n def self.decode_int64(io : IyiIO) : Int64\n def self.decode_uint64(buffer : Pointer(UInt8)) : UInt64\n def self.decode_uint64(io : IyiIO) : UInt64\n def self.decode_uint8(buffer : Pointer(UInt8)) : UInt8\n def self.decode_uint8(io : IyiIO) : UInt8\n def self.encode(value : Int32, buffer : Pointer(UInt8)) : Nil\n def self.encode(value : Int64, buffer : Pointer(UInt8)) : Nil\n def self.encode(value : UInt64, buffer : Pointer(UInt8)) : Nil\n def self.encode(value : UInt8, buffer : Pointer(UInt8)) : Nil\n def self.encode(value : Int32, io : IyiIO) : Nil\n def self.encode(value : Int64, io : IyiIO) : Nil\n def self.encode(value : UInt64, io : IyiIO) : Nil\n def self.encode(value : UInt8, io : IyiIO) : Nil\n def initialize\n end\n # Two's complement by arithmetic, so a negative value never meets an\n # unsigned conversion: the bit pattern of a signed integer as a UInt64\n # and back.\n struct Bits\n def self.get_big(buffer : Pointer(UInt8), count : Int32) : UInt64\n def self.get_little(buffer : Pointer(UInt8), count : Int32) : UInt64\n def initialize\n def self.of_int32(value : Int32) : UInt64\n def self.of_int64(value : Int64) : UInt64\n def self.put_big(bits : UInt64, buffer : Pointer(UInt8), count : Int32) : Nil\n # The low `count` bytes of `bits`, least significant first.\n def self.put_little(bits : UInt64, buffer : Pointer(UInt8), count : Int32) : Nil\n # `count` bytes out of `io`, or a refusal naming the shortfall.\n def self.take(io : IyiIO, count : Int32) : String\n def self.to_int32(bits : UInt64) : Int32\n def self.to_int64(bits : UInt64) : Int64\n end\n struct LittleEndian\n def self.decode_int32(buffer : Pointer(UInt8)) : Int32\n def self.decode_int32(io : IyiIO) : Int32\n def self.decode_int64(buffer : Pointer(UInt8)) : Int64\n def self.decode_int64(io : IyiIO) : Int64\n def self.decode_uint64(buffer : Pointer(UInt8)) : UInt64\n def self.decode_uint64(io : IyiIO) : UInt64\n def self.decode_uint8(buffer : Pointer(UInt8)) : UInt8\n def self.decode_uint8(io : IyiIO) : UInt8\n def self.encode(value : Int32, buffer : Pointer(UInt8)) : Nil\n def self.encode(value : Int64, buffer : Pointer(UInt8)) : Nil\n def self.encode(value : UInt64, buffer : Pointer(UInt8)) : Nil\n def self.encode(value : UInt8, buffer : Pointer(UInt8)) : Nil\n def self.encode(value : Int32, io : IyiIO) : Nil\n def self.encode(value : Int64, io : IyiIO) : Nil\n def self.encode(value : UInt64, io : IyiIO) : Nil\n def self.encode(value : UInt8, io : IyiIO) : Nil\n def initialize\n end\n alias NetworkEndian = BigEndian\n alias SystemEndian = LittleEndian\n def initialize\nend\n\n# Another stream up to a delimiter. The delimiter is consumed and not\n# answered; the inner stream is left just past it. Without a delimiter\n# the whole rest of the stream is answered.\npub class Delimited < Reader\n def delimiter : String\n # Exact, as the prelude's is: the inner stream is read until a content\n # byte is held or the delimiter (or the end) is met. Answering from the\n # inner stream alone said \"not yet\" with nothing but the delimiter left,\n # and the next read answered nil.\n def eof? : Bool\n def initialize(io : IyiIO, delimiter : String)\n def read_byte : UInt8 | ::Nil\n def write(bytes : Pointer(UInt8), count : Int32) : Nil\nend\n\n# Bytes printed sixteen to a line, `hexdump -C` style, on an `IyiIO`.\npub class Hexdump\n def dump(bytes : Pointer(UInt8), count : Int32) : Nil\n def dump(text : String) : Nil\n # Everything left in `source`.\n def dump(source : IyiIO) : Nil\n def initialize(out __arg0 : IyiIO)\nend\n\n# An `IyiIO` over bytes in memory. Writes land at the cursor and grow the\n# buffer; reads advance the cursor; `to_s` is the whole buffer.\npub class Memory < ::IyiIO\n # Forgets every byte; the cursor returns to the start.\n def clear : Nil\n def close : Nil\n def closed? : Bool\n def empty? : Bool\n def eof? : Bool\n def flush : Nil\n def initialize(capacity : Int32 = 64)\n # A buffer holding a copy of `text`'s bytes, the cursor at its start.\n def initialize(text : String)\n # The cursor, in bytes from the start. Int64, as a file's position is:\n # with `std/file` imported every `IyiIO` has a `pos : Int64`, and a\n # narrower answer here made `pos` on any `IyiIO` fail to compile.\n def pos : Int64\n def pos=(position : Int32) : Nil\n # The cursor moved through an `IyiIO`: the stream's own position, not\n # the descriptor's that `std/file` would move.\n def pos=(position : Int64) : Int64\n def read_all : String\n def read_byte : UInt8 | ::Nil\n def read_bytes(count : Int32) : String\n def read_line(chomp : Bool = false) : String | ::Nil\n def rewind : Nil\n # Bytes held, written or given.\n def size : Int32\n def to_s : String\n def write(bytes : Pointer(UInt8), count : Int32) : Nil\nend\n\n# One stream written to several. `close` closes this writer, not the\n# streams behind it.\npub class MultiWriter < ::IyiIO\n def close : Nil\n def closed? : Bool\n def eof? : Bool\n def flush : Nil\n def initialize(writers : Array(IyiIO))\n def read_all : String\n def read_byte : UInt8 | ::Nil\n def read_bytes(count : Int32) : String\n def read_line(chomp : Bool = false) : String | ::Nil\n def write(bytes : Pointer(UInt8), count : Int32) : Nil\nend\n\n# The reading end of `IyiIO.pipe`.\npub class PipeReader < ::IyiIO\n def initialize(channel : Channel(String))\nend\n\n# The writing end of `IyiIO.pipe`: every write is sent at once.\npub class PipeWriter < ::IyiIO\n def initialize(channel : Channel(String))\nend\n\n# At most `limit` bytes of another stream.\npub class Sized < Reader\n def eof? : Bool\n def initialize(io : IyiIO, limit : Int32)\n def read_all : String\n def read_byte : UInt8 | ::Nil\n # The inner stream is asked for at most 64 KB at a time: a descriptor\n # stream's `read_bytes` allocates the whole count before it reads, and\n # `read_all` under a limit of Int32::MAX took 2 GB to read two bytes.\n def read_bytes(count : Int32) : String\n # Bytes the limit still allows, whether or not the stream has them.\n def remaining : Int32\n def write(bytes : Pointer(UInt8), count : Int32) : Nil\nend\n\nclass ::IyiIO\n def <<(value) : self\n # Everything left in `source` (at most `limit` bytes) written to\n # `target`, which is flushed; answers the number of bytes moved.\n def self.copy(source : IyiIO, target : IyiIO, limit : Int32 | ::Nil = nil) : Int64\n def each_line(chomp : Bool = false, &block : (String -> Nil)) : Nil\n # Every remaining line, `chomp` dropping the line ends.\n def lines(chomp : Bool = false) : Array(String)\n # The two ends of a pipe between tasks: what is written to the writer is\n # read from the reader, in order.\n #\n # reader, writer = IyiIO.pipe\n # group do |g|\n # g.spawn { IyiIO.copy(file, writer); writer.close; 0 }\n # g.spawn { IyiIO.copy(reader, socket.io); 0 }\n # end\n #\n # Each write is delivered at once, as one piece, and a write waits while\n # *capacity* pieces are unread; a read waits for one. Closing the writer\n # ends the reader after the last piece; closing the reader refuses the\n # next write, as a pipe whose reader is gone does. The pipe is its\n # thread's, for the tasks on the thread that made it.\n def self.pipe(capacity : Int32 = 16) : ::Tuple(Std::Io::PipeReader, Std::Io::PipeWriter)\n # The next byte, or nil at the end.\n def read_byte : UInt8 | ::Nil\n # The next UTF-8 code point, or nil at the end. A lead byte that is not\n # one (a continuation byte, C0/C1, F5 and above), a continuation byte that\n # is not one, or a sequence the stream ends inside is refused. The first\n # continuation byte is held to the range its lead allows (Unicode Table\n # 3-7), so an overlong form, a surrogate and a code point past U+10FFFF\n # are refused at the byte that gives them away, not decoded into a Char\n # outside Unicode.\n def read_char : Char | ::Nil\n def write_byte(byte : UInt8) : Nil\nend\n" }, { @@ -322,7 +322,7 @@ { "name": "std/json", "path": "src/std/json.iyi", - "sourceSha256": "3ee61ca665e8c34ebf067b55952d565a6aaabc6b0282daa11b7901532a319703", + "sourceSha256": "03d79723649d01ee8c83b948fa958b0a765ef8a288f90e292587a1a7e2b7a985", "surface": "module std/json\n\n# `derive serializable`, in a struct or class whose fields are written with\n# their types: the type reads and writes itself as a JSON object, a key per\n# field, named as the field is.\n#\n# pub struct Coord\n# getter x : Float64\n# @[JSON::Field(key: \"label\")]\n# getter name : String\n# derive serializable\n# end\n#\n# Coord.from_json(%({\"x\": 1.5, \"label\": \"a\"})).x # => 1.5\n# coord.to_json # => {\"x\":1.5,\"label\":\"a\"}\n#\n# A field's value is read and written as `JSON.read_value` and\n# `JSON.write_value` read and write its type: the built-in values, an enum,\n# an `Array` or `Hash(String, V)` of them, an `Any`, another serializable\n# type, a union of those (`String | Int64`). A key the type has no field\n# for is passed over; a field with no key keeps its default when it is\n# written with one, as does a field with a default whose key holds `null`\n# where its type does not admit nil; a field with neither is refused by\n# name unless its type admits `nil`, which it then holds.\n# `@[JSON::Field(...)]` renames a field, leaves it out either way, leaves\n# a nil one out, or reads and writes it through a converter (see\n# `JSON::Field`). It is what the other library's `include\n# JSON::Serializable` writes, and the derive runs once, in the type's own\n# module (SPEC.md II.4), so a consumer calls the methods without the macro.\n#\n# Each field's options are read off the type when its methods are compiled,\n# in one `begin` so what a field's annotation says is known to every line\n# after it; and refused there, with the field named, when they do not make\n# sense.\npub macro serializable(declaration)\n\n# One JSON value of any kind, the result of `JSON.parse`. The `as_x` methods\n# panic when the value is of another kind; the `as_x?` ones answer `nil`.\npub struct Any\n alias Type = Nil | Bool | Int64 | Float64 | String | Array(Any) | Hash(String, Any)\n # Equal when the values are: an integer equals the float with the same\n # value, arrays element by element, objects key by key in any order.\n def ==(other : Any) : Bool\n def [](index : Int32) : Any\n def [](key : String) : Any\n def []?(index : Int32) : Any | ::Nil\n def []?(key : String) : Any | ::Nil\n def as_a : Array(Any)\n def as_a? : Array(Any) | ::Nil\n def as_bool : Bool\n def as_bool? : Bool | ::Nil\n # A float, or an integer read as one.\n def as_f : Float64\n def as_f? : Float64 | ::Nil\n def as_h : Hash(String, Any)\n def as_h? : Hash(String, Any) | ::Nil\n def as_i : Int32\n def as_i64 : Int64\n def as_i64? : Int64 | ::Nil\n def as_i? : Int32 | ::Nil\n def as_nil : Nil\n def as_s : String\n def as_s? : String | ::Nil\n def dig(key : String) : Any\n def dig(index : Int32) : Any\n def dig(k : String, *subkeys : String | Int32) : Any\n def dig(idx : Int32, *subkeys : String | Int32) : Any\n def dig?(key : String) : Any | ::Nil\n def dig?(index : Int32) : Any | ::Nil\n def dig?(k : String, *subkeys : String | Int32) : Any | ::Nil\n def dig?(idx : Int32, *subkeys : String | Int32) : Any | ::Nil\n protected def float_value? : Float64 | ::Nil\n # Consistent with `==`: a whole float hashes as the integer it equals, an\n # object's hash does not depend on the order its keys were written in.\n def hash : Int32\n def initialize(raw : Type)\n def inspect : String\n # The kind of value this is, in the word a refusal uses: `null`, `bool`,\n # `integer`, `float`, `string`, `array` or `object`.\n def kind : String\n def self.new(val : Int32) : Any\n def raw : Type\n # How many elements an array or an object holds. A scalar has no size.\n def size : Int32\n def size? : Int32 | ::Nil\n def to_ascii_json : String\n def to_json : String\n def to_pretty_json(indent : String = \" \") : String\n # A string as itself and null as nothing, as `YAML::Any#to_s` and the\n # other library answer them; a number, a boolean or a collection as its\n # JSON text. A string was its JSON text too, so `\"hello #{doc[\"name\"]}\"`\n # printed `hello \"Ada\"`, and null printed `null`.\n def to_s : String\nend\n\n# Writes a document one value at a time. `indent=` makes it pretty;\n# `ascii_only=` escapes every non-ASCII code point.\npub class Builder\n def array(& : (-> Nil)) : Nil\n def ascii_only : Bool\n def ascii_only=(value : Bool) : Bool\n def bool(val : Bool) : Nil\n # Whether no value has been written yet.\n def empty? : Bool\n def end_array : Nil\n def end_object : Nil\n def field(name : String, val : Any) : Nil\n def field(name : String, val : String) : Nil\n def field(name : String, val : Int32) : Nil\n def field(name : String, val : Int64) : Nil\n def field(name : String, val : Float64) : Nil\n def field(name : String, val : Bool) : Nil\n def field(name : String, val : Nil) : Nil\n # A key; the value that follows it is written by the next call. A key\n # whose text is one this object already holds is refused, naming both:\n # the reader refuses a duplicate key, and the builder wrote one - a key\n # given twice, or two Strings whose bytes are not UTF-8 and are both\n # written as U+FFFD (`{\"a\\xFF\" => 1, \"a\\xFE\" => 2}` was written\n # `{\"a\\uFFFD\":1,\"a\\uFFFD\":2}`, and `JSON.parse` refused it).\n def field(name : String) : Nil\n def field(name : String, & : (-> Nil)) : Nil\n def indent=(spaces : Int32) : Nil\n def indent=(str : String) : Nil\n def initialize\n def max_nesting : Int32\n def max_nesting=(value : Int32) : Int32\n def null : Nil\n def number(val : Int32) : Nil\n def number(val : Int64) : Nil\n def number(val : UInt8) : Nil\n def number(val : UInt64) : Nil\n def number(val : Float64) : Nil\n def object(& : (-> Nil)) : Nil\n # Text written as it is: the caller's own JSON.\n def raw(str : String) : Nil\n def start_array : Nil\n def start_object : Nil\n def string(val : String) : Nil\n # The document's text. A container still open or no value written at all\n # is not a document, and is refused.\n def to_s : String\nend\n\npub struct JSON\n # How `derive serializable` writes and reads one field, the other\n # library's `JSON::Field`:\n #\n # @[JSON::Field(key: \"userName\")]\n # getter user_name : String\n #\n # * `key:` the object key, where it is not the field's own name;\n # * `ignore: true` neither written nor read, `ignore_serialize: true` not\n # written, `ignore_deserialize: true` not read - a field that is not\n # read keeps its default, or is nil, and needs one or the other;\n # * `emit_null: false` a nil field left out of the object. A nil field is\n # written as `null` otherwise, where the other library leaves it out\n # unless asked;\n # * `converter:` a type whose `self.to_json(value, json : Builder)` writes\n # the field and `self.from_json(pull : PullParser)` reads it.\n #\n # An option it does not know, a key that is not a string, and two fields\n # written under one key are refused when the type is compiled.\n annotation Field\n end\n # Text written through a `Builder` the block is handed. `indent` is a\n # count of spaces or the string one level is indented by. A block that\n # writes no value, or leaves a container open, is refused.\n def self.build(indent : String | Int32 | Nil = nil, & : (Builder -> Nil)) : String\n # The document read into `type`: `Nil`, `Bool`, `Int32`, `Int64`, `UInt8`,\n # `UInt64`, `Float64`, `String`, `Any`, an enum, a type with `derive\n # serializable`, a union of them as `read_union` reads one, or an `Array`\n # or `Hash(String, V)` of those. An integer outside the type is refused,\n # as is anything after the root value.\n def self.from_json(str : String, type : T.class) : T forall T\n def initialize\n # The document as an `Any`; panics with the line and column of the first\n # thing it refuses.\n def self.parse(input : String) : Any\n # The document as an `Any`, or `nil` when it is not one.\n def self.parse?(input : String) : Any | ::Nil\n def self.read_value(pull : PullParser, type : Nil.class) : Nil\n def self.read_value(pull : PullParser, type : Bool.class) : Bool\n def self.read_value(pull : PullParser, type : Int32.class) : Int32\n def self.read_value(pull : PullParser, type : Int64.class) : Int64\n def self.read_value(pull : PullParser, type : UInt8.class) : UInt8\n # An integer past Int64 reaches the reader as a float that still carries\n # its digits; those are read here, so the whole UInt64 range comes back.\n def self.read_value(pull : PullParser, type : UInt64.class) : UInt64\n def self.read_value(pull : PullParser, type : Float64.class) : Float64\n def self.read_value(pull : PullParser, type : String.class) : String\n def self.read_value(pull : PullParser, type : Any.class) : Any\n def self.read_value(pull : PullParser, type : Array(T).class) : Array(T) forall T\n def self.read_value(pull : PullParser, type : Hash(String, V).class) : Hash(String, V) forall V\n # A type that reads itself: the `initialize(pull)` a `derive\n # serializable` wrote. A type that admits nil reads `null` as the nil and\n # anything else as the other type (`x || raise`, as the derive asks it),\n # the way `write_or_null` writes it. That was `T.new(pull)` too, and\n # `Int32 | Nil` has no such `new`, so `JSON.from_json(\"5\", Int32?)` and\n # `Array(Int32?)` did not build. Any other union is `read_union`'s.\n def self.read_value(pull : PullParser, type : T.class) : T forall T\n # Any value `write_value` knows: `nil`, a `Bool`, a prelude integer, a\n # `Float64`, a `String`, an `Any`, an enum, an `Array` or `Hash` of those,\n # or a type that implements `ToJSON`; a union of them, written as the\n # member it holds is.\n def self.to_json(obj : T) : String forall T\n def self.write_value(val : Nil, b : Builder) : Nil\n def self.write_value(val : Bool, b : Builder) : Nil\n def self.write_value(val : Int32, b : Builder) : Nil\n def self.write_value(val : Int64, b : Builder) : Nil\n def self.write_value(val : UInt8, b : Builder) : Nil\n def self.write_value(val : UInt64, b : Builder) : Nil\n def self.write_value(val : Float64, b : Builder) : Nil\n def self.write_value(val : String, b : Builder) : Nil\n def self.write_value(val : Any, b : Builder) : Nil\n def self.write_value(val : Array(T), b : Builder) : Nil forall T\n # A String key is written as it is, and two of them are never one text.\n def self.write_value(val : Hash(String, V), b : Builder) : Nil forall V\n # Any other key is written by its `to_s`, `nil` as `\"null\"`, the word a\n # JSON null is, so two keys can be one text: `{nil => 1, \"null\" => 2}`\n # was written `{\"null\":1,\"null\":2}`, which `JSON.parse` refuses\n # (\"duplicate key 'null' at line 1, column 11\"). The texts written are\n # kept, and a repeat is refused, naming both keys.\n def self.write_value(val : Hash(K, V), b : Builder) : Nil forall K, V\n # A `ToJSON` value writes itself. An enum member is written as the other\n # library writes one: its name underscored (`Color::DarkRed` is\n # `\"dark_red\"`), and a `@[Flags]` enum as the array of its members'\n # names; a value no member has is written as its number. Told apart here\n # and not by an overload restricted to `Enum`, which a program built\n # from this module's artifact read as a class and could not pass an enum\n # to.\n #\n # A union is matched here whole, `T` the union itself, so\n # `JSON.to_json(1.as(Int32 | String))` called `to_json` on an `Int32`\n # and did not build (issue #135). A member with an overload of its own,\n # an `Int32` or an `Array`, is sent there when the program runs, yet this\n # is still compiled for the whole union, and reached for the rest: an\n # enum, a `ToJSON` type. Each is written as it is alone, by\n # `Object#__json_write` below.\n def self.write_value(val : T, b : Builder) : Nil forall T\nend\n\n# Reads a whole document into an `Any`. Like the lexer it records the first\n# failure instead of panicking; `JSON.parse` and `JSON.parse?` decide what to\n# do with it.\npub class Parser\n def error : String | ::Nil\n def initialize(input : String)\n def parse : Any\nend\n\n# Reads a document one event at a time: `kind` names what the reader is on,\n# the `read_x` methods take it and move on. The grammar is checked as it is\n# read, so a missing comma or colon is refused where it is, with a panic.\npub class PullParser\n enum Kind : Int32\n Null = 0\n Bool = 1\n Int = 2\n Float = 3\n String = 4\n BeginArray = 5\n EndArray = 6\n BeginObject = 7\n EndObject = 8\n EOF = 9\n # Returns `true` if this enum value equals `BeginArray`\n def begin_array? : ::Bool\n # Returns `true` if this enum value equals `BeginObject`\n def begin_object? : ::Bool\n # Returns `true` if this enum value equals `Bool`\n def bool? : ::Bool\n # Returns `true` if this enum value equals `EndArray`\n def end_array? : ::Bool\n # Returns `true` if this enum value equals `EndObject`\n def end_object? : ::Bool\n # Returns `true` if this enum value equals `EOF`\n def eof? : ::Bool\n # Returns `true` if this enum value equals `Float`\n def float? : ::Bool\n # Returns `true` if this enum value equals `Int`\n def int? : ::Bool\n # Returns `true` if this enum value equals `Null`\n def null? : ::Bool\n # Returns `true` if this enum value equals `String`\n def string? : ::Bool\n end\n def bool_value : Bool\n def column_number : Int32\n def float_value : Float64\n def initialize(input : String)\n def int_value : Int64\n def kind : Kind\n def line_number : Int32\n def max_nesting : Int32\n def max_nesting=(value : Int32) : Int32\n # Reads an object, yields once at the value of `key`, and skips the rest.\n def on_key(key : String, & : (-> Nil)) : Nil\n # The number the reader is on, as it was written.\n def raw_value : String\n # The value the reader is on, as an `Any`.\n def read_any : Any\n def read_array(& : (-> Nil)) : Nil\n def read_begin_array : Nil\n def read_begin_object : Nil\n def read_bool : Bool\n def read_end_array : Nil\n def read_end_object : Nil\n # A float, or an integer read as one.\n def read_float : Float64\n def read_int : Int64\n def read_next : Kind\n def read_null : Nil\n def read_null? : Bool\n # Yields each key of the object the reader is on, with the reader at its\n # value. A key named twice is refused, as `JSON.parse` refuses it.\n def read_object(& : (String -> Nil)) : Nil\n def read_object_key : String\n # The value the reader is on, written into `json` as it is read. A number\n # is written as its own text, the text it was read from: rebuilt from the\n # Int64 or Float64 it parsed to, `12345678901234567890` came back as\n # `1.2345678901234567e+19` and `1E+2` as `100.0`, and a UInt64 id passed\n # through here did not read back as itself.\n def read_raw(json : Builder) : Nil\n # The value the reader is on, as JSON text.\n def read_raw : String\n def read_string : String\n # Passes over the value the reader is on, whole.\n def skip : Nil\n def string_value : String\nend\n\n# A type that can write itself into a `Builder`. `JSON.to_json` accepts any\n# value whose type implements it, as a `derive serializable` type does.\npub trait ToJSON\n abstract def to_json(json : Builder) : Nil\nend\n\nimpl ToJSON for Any\n def to_json(json : Builder) : Nil\nend\n\nclass ::Object\n def __json_write(json : ::Std::Json::Builder) : Nil\nend\n" }, { @@ -334,13 +334,13 @@ { "name": "std/levenshtein", "path": "src/std/levenshtein.iyi", - "sourceSha256": "dbf6aaec3fcb2b675100ca0bc5a50244a825b7a35b194a6a64cc58d671f28f4a", + "sourceSha256": "91c4bb5c56be998c453deba9edba400b581ea91526ab792b97cc8cd176de7264", "surface": "module std/levenshtein\n\nmodule ::Levenshtein\n # Computes the Levenshtein distance between two strings.\n def self.distance(string1 : String, string2 : String) : Int32\n def self.find(name : String, tolerance : Int32 | ::Nil = nil, &block : (Finder -> Nil)) : String | ::Nil\n def self.find(name : String, all_names, tolerance : Int32 | ::Nil = nil) : String | ::Nil\n # Optimal string alignment: Levenshtein plus an adjacent transposition as\n # one edit. `cuont` for `count` is two edits by `distance` and one here.\n def self.osa_distance(string1 : String, string2 : String) : Int32\nend\n\nstruct ::Levenshtein::Entry\n def distance : Int32\n def initialize(value : String, distance : Int32)\n def value : String\nend\n\nclass ::Levenshtein::Finder\n def best_match : String | ::Nil\n def self.find(name : String, tolerance : Int32 | ::Nil = nil, &block : (Finder -> Nil)) : String | ::Nil\n def self.find(name : String, all_names, tolerance : Int32 | ::Nil = nil) : String | ::Nil\n def initialize(target : String, tolerance : Int32 | ::Nil = nil)\n def target : String\n def test(name : String, value : String = name) : Nil\n def tolerance : Int32\nend\n" }, { "name": "std/list", "path": "src/std/list.iyi", - "sourceSha256": "c346ae704a3c0134897f35b15e7616c8ffabff4106c40ce5a34dd31e7afd1b1e", + "sourceSha256": "1d082414f483ef7522566d39c2995fd25288211235d108743d4cdc789155a65f", "surface": "module std/list\n\n# The store is built at construction and never handed out, so no method of this\n# type can be observed to change it. That is what makes the value shareable\n# under III.4.4 — every field immutable after construction — and it is why the\n# constructor **copies**.\n#\n# The copy is not defensive habit, it is the missing borrow checker. `List`\n# cannot express \"I own this array now\", so a caller that kept a reference to\n# what it passed in could mutate the list from underneath a task holding it.\n# Rust says this with ownership and pays nothing; here it costs one copy at the\n# boundary, once, and it is the honest price of not having that machinery.\npub struct List(T)\n # Two lists are the same value when they hold the same elements in the same\n # order, which is the whole of what a list is. Until this method, the one\n # answering was `Object#==` (src/iyi/object.iyi:37-39), the constant\n # `false` — not even reflexive, so `list == list` was false too, and every\n # collection that asks said no: `includes?`, `index` and `uniq` all go\n # through `==`, a list could never be found in a `Hash`, and a `case` over\n # a list matched no `when`, because a `when` is `===` and `===` is `==`.\n # That is the failure object.iyi:111-120 wrote up for `Tuple`, reproduced\n # by the one type III.4.7 added for handing a value between tasks — where\n # comparing what two tasks produced is the point.\n #\n # Sizes first, because that is the cheap half of the answer. No shared-store\n # fast path like `Slice#same?`: the constructor copies, so two lists never\n # share a store, and the comparison would pay for every call to fire only\n # when a list is compared with itself.\n #\n # Restricted to `List(T)`, so a list of another element type is unequal by\n # the prelude's default rather than a compile error — the reasoning\n # object.iyi:119-120 gives for restricting `Tuple#==` to its own shape.\n def ==(other : List(T)) : Bool\n # Indexed with `[]`, because every other sequence here is — `Slice`\n # (std/slice.iyi:107), the prelude's `Array` (src/iyi/array.iyi:78) and\n # everything under `Indexable` (std/indexable.iyi:75) — and III.1.7a says a\n # name shared with Crystal means the same thing here. A negative index\n # counts from the end, so `list[-1]` is the last element; that rule was\n # already true through the backing array and unwritten, which is worse than\n # either answer.\n #\n # The out-of-range sentence is raised here rather than left to the store.\n # The array's wording is the right wording — it names the index asked for\n # and how many elements there are, and names no receiver, so there is\n # nothing in it about an array the caller never handed over — but a message\n # this type promises is this file's, not one inherited by accident from a\n # field nobody can see.\n def [](index : Int32) : T\n # The nilable partner, which is the one question `[]` cannot answer: \"the\n # element there, or nothing\". Without it every caller probing a list past\n # its end rewrites the bounds rule above by hand against `size`, and two\n # copies of a rule is one too many.\n def []?(index : Int32) : T | ::Nil\n protected def adopt(items : Array(T)) : Nil\n # Every operation that would change a sequence returns a new one instead, so\n # by III.1.7's convention they are all participles. The plain verbs — `push`,\n # `sort`, `reverse` — name the mutating form, and this type has none. That the\n # naming rule falls out rather than being applied is the point of having\n # settled it before any library code existed.\n #\n # Each builds its array at the size it ends with, once. `dup` then `<<`\n # copied the list, grew the copy to twice its size and handed it to the\n # constructor, which copied it a third time: an append to a list of n\n # elements wrote 4n words where n + 1 is the whole of the work.\n def appended(item : T) : List(T)\n # `at` is the name this file had before `[]`, and samples/iyi/immutable.iyi\n # is written in it. It stays, spelled out, and delegates — so both names\n # exist but only one bounds rule does.\n def at(index : Int32) : T\n def concatenated(other : List(T)) : List(T)\n def empty? : Bool\n # Hashing follows equality, or the agreement above buys nothing: a `Hash`\n # finds a key by its slot first and compares second, so two equal lists in\n # different slots are still two keys. `Object#hash` answered with the type\n # id — every `List(Int32)` in one slot, \"correct and useless\" in exactly\n # the way object.iyi:20-23 says of a key type that never said how it\n # hashes.\n #\n # The array's own hash, which is `Indexable#hash`'s mixing (the prelude's\n # `Array#hash`): one function, so a list and the array it was built from\n # land in the same slot.\n def hash : Int32\n def initialize(items : Array(T))\n # Written down the same way it prints, because a list has no second form:\n # the elements inside it are already inspected. Stated rather than left to\n # `Object#inspect` so it is in this module's exported surface, which is\n # what a list nested in another collection is asked for — `List[List[1]]`\n # rather than a type name — and it is how `Slice` states it too.\n def inspect : String\n # A list over an array nothing else holds: the one `appended` or\n # `concatenated` has just built. The copy above is for a caller's array,\n # which the caller still has; one made here has no other owner.\n protected def self.owning(items : Array(T)) : List(T)\n def size : Int32\n # A list prints its elements, like both of its siblings: `Slice[10, 20, 30]`\n # and the array's `[10, 20, 30]`. Inherited, it printed\n # `Std::List::List(Int32)`, which object.iyi:7-8 calls what \"a value that\n # has said nothing about itself can honestly print\" — and a sequence has\n # plenty to say, so the default was the type failing to answer.\n #\n # The elements are *inspected* rather than printed, which is `Slice#to_s`'s\n # reasoning (std/slice.iyi:353-364): a list of strings reads back as\n # `List[\"pear\", \"fig\"]`, telling a reader the elements are strings, where\n # printing them loses that with no way to get it back.\n def to_s : String\nend\n\n# And the lazy half, for the same reason `std/slice` has one: a `List` could\n# only reach the iterator tower through `to_a`, which copies the sequence\n# the type exists to hand around without copying.\n#\n# A class, as `ArrayIterator` is (std/iterator.iyi): an adaptor keeps its\n# source by value, and this struct was copied into it, so\n# `it.first(2).to_a` and then `it.to_a` gave [1, 2] and [1, 2, 3, 4] where\n# an iterator over an array gives [1, 2] and [3, 4].\npub class ListIterator(T)\n def initialize(list : List(T))\n def next : T | Stop\nend\n\nimpl Std::Enumerable::Enumerable for List(T) forall T\n def each(& : (T -> Nil)) : Nil\nend\n\nimpl Std::Iterator::Iterator for ListIterator(T) forall T\nend\n" }, { @@ -352,32 +352,32 @@ { "name": "std/mail", "path": "src/std/mail.iyi", - "sourceSha256": "205af4ec59cbf503bcb8e22a51fdcaa90bdc89d86e281a67ee6b170fdbdc5d85", + "sourceSha256": "4315722a56c9016e972877b4e17054aa32552363282ab7564fc4ac21a8968025", "surface": "module std/mail\n\npub struct Mail\n # A mailbox: an address and the name shown with it.\n class Address\n def ==(other : Address) : Bool\n # The addr-spec: the local part quoted where it is not a dot-atom.\n def address : String\n def domain : String\n # What `parse` makes, already read.\n def initialize(local : String, domain : String, name : String, read : Bool)\n # *address* is an addr-spec: `user@example.com`, or\n # `\"john doe\"@example.com` with its local part quoted. Anything else\n # is a panic, as is a name with a line break in it.\n def initialize(address : String, name : String = \"\")\n # The local part, unquoted, and the domain as written.\n def local : String\n # The display name, decoded; \"\" when there is none.\n def name : String\n # The one mailbox *text* holds.\n def self.parse(text : String) : Address | MailError\n # The mailboxes of an address list, a group's members in its place.\n def self.parse_list(text : String) : Array(Address) | MailError\n # As a person reads it: `Name `, the name quoted\n # when it is not atoms, nothing encoded.\n def to_s : String\n # Whether the address is more than ASCII (RFC 6532), which only a\n # server that offers SMTPUTF8 takes.\n def utf8? : Bool\n end\n # A message to be written: its addresses, subject, date and identifier,\n # its text and HTML, and its attachments.\n class Message\n protected def self.addresses(name : String, list : Array(Address)) : String\n # A file sent with the message, under *filename*, as *content_type*:\n # the type its extension names (std/mime) when nil.\n def attach(filename : String, data : String, content_type : String | ::Nil = nil) : self\n protected def self.attachment(filename : String, kind : String, data : String) : MailEntity\n def bcc : Array(Address)\n def cc : Array(Address)\n def date : String | ::Nil\n # An RFC 5322 date-time - `Mail.date` writes one - refused when it is\n # not one.\n def date=(value : String) : String\n # `filename=\"...\"` for a short name of printable ASCII; RFC 2231's\n # `filename*=utf-8''...` for any other, in continuations of whole\n # characters when it is longer - 50 encoded bytes in the first, after\n # its charset, and 60 in the rest, so each fits a line. All but the\n # last end in `;`.\n protected def self.filename_params(filename : String) : Array(String)\n def from : Address | ::Nil\n def from=(value : Address | ::Nil) : Address | ::Nil\n # A header of the caller's own, written as unstructured text. The\n # headers the message writes itself are refused here.\n def header(name : String, value : String) : self\n def html : String | ::Nil\n def html=(value : String) : String\n def initialize\n def message_id : String | ::Nil\n # ``, the brackets added when they are not there.\n def message_id=(value : String) : String\n # The parts under one boundary, made from their own hash.\n protected def self.multipart(subtype : String, children : Array(MailEntity)) : MailEntity\n # Every address the message goes to - To, Cc and Bcc - once each.\n def recipients : Array(String)\n def reply_to : Array(Address)\n # ASCII without NUL, in lines of 78 or fewer.\n protected def self.seven_bit?(text : String) : Bool\n def subject : String | ::Nil\n def subject=(value : String) : String\n def text : String | ::Nil\n def text=(value : String) : String\n protected def self.text_part(subtype : String, text : String) : MailEntity\n def to : Array(Address)\n # The message, CRLF line breaks and all. A From and a Date are\n # required - set the Date with `msg.date = Mail.date(...)` - and the\n # Message-ID is optional. Writing a message the caller left incomplete\n # is a mistake, so it panics, with one of:\n #\n # - `mail: a message has no From` when no From was set;\n # - `mail: a message has no Date` when no Date was set.\n #\n # Those are the only panics here: every other value - a header, an\n # address, a Date, a Message-ID, a body, an attachment - is checked,\n # and refused with a panic, by the setter or method that takes it.\n def to_s : String\n # Whether an address in the message is RFC 6532's UTF-8.\n def utf8? : Bool\n end\n # A message or one of its parts, as read: its header fields unfolded and\n # in order, and its body - a multipart's parts, a `message/rfc822`'s\n # message, or bytes in a transfer encoding.\n class Part\n # The mailboxes of every field named *name* - `From`, `To`, `Cc` -\n # none when there is no such field.\n def addresses(name : String) : Array(Address) | MailError\n def attachment? : Bool\n # The parts whose disposition is `attachment`, in order.\n def attachments : Array(Part)\n # The bytes the body stands for, its transfer encoding undone.\n def body : String | MailError\n # The charset text is in: `us-ascii` when none is named (RFC 2045\n # section 5.2), in lower case.\n def charset : String\n # The disposition in lower case - `attachment`, `inline` - or nil.\n def disposition : String | ::Nil\n # The file name of Content-Disposition, or else Content-Type's `name`.\n def filename : String | ::Nil\n # The first part of *media_type* that is not an attachment, depth\n # first: `find(\"text/plain\")` is the text a reader shows.\n def find(media_type : String) : Part | ::Nil\n protected def self.first(headers : Array(::Tuple(String, String)), lower : String) : String | ::Nil\n # The first field named *name*, any case, its encoded-words decoded.\n def header(name : String) : String | ::Nil\n # Every field named *name*, in order, decoded.\n def header_values(name : String) : Array(String)\n # Each field's name as written and its value unfolded, whitespace at\n # either end dropped, nothing decoded.\n def headers : Array(::Tuple(String, String))\n def initialize(source : String, headers : Array(::Tuple(String, String)), media_type : String, params : Hash(String, String), body_at : Int32, body_end : Int32, parts : Array(Part))\n # `type/subtype` in lower case: `text/plain` when the part names none,\n # or names one that cannot be read (RFC 2045 section 5.2).\n def media_type : String\n def multipart? : Bool\n # A Content-Type parameter, RFC 2231's decoded.\n def param(name : String) : String | ::Nil\n def self.parse(text : String) : Part | MailError\n # The parts of a multipart, or the message a `message/rfc822` holds.\n def parts : Array(Part)\n protected def self.prefix?(a : Pointer(UInt8), b : Pointer(UInt8), size : Int32) : Bool\n # The first field named *name*, as written.\n def raw_header(name : String) : String | ::Nil\n protected def self.read(source : String, start : Int32, stop : Int32, depth : Int32, default_type : String) : Part | MailError\n # The parts of a multipart body: between `--boundary` lines, the line\n # break before each line its own; to the `--boundary--` line. The\n # preamble and the epilogue are passed over.\n protected def self.split(source : String, start : Int32, stop : Int32, boundary : String, media : String) : Array(::Tuple(Int32, Int32)) | MailError\n def subject : String | ::Nil\n # The body as text in UTF-8, from the part's charset, each CRLF an LF.\n def text : String | MailError\n # The transfer encoding in lower case: `7bit` when none is named.\n def transfer_encoding : String\n protected def self.trim(value : String) : String\n # This part, then each under it, depth first.\n def walk(&block : (Part -> Nil)) : Nil\n end\n # RFC 5322's date-time for *unix* seconds, at *offset* minutes east of\n # UTC: `Sat, 17 Oct 2026 14:00:00 +0200`, as `email.utils.format_datetime`\n # writes it.\n def self.date(unix : Int64, offset : Int32 = 0) : String\n # What base64 *text* stands for, characters outside the alphabet passed\n # over.\n def self.decode_base64(text : String) : String\n # *text* from *charset* in UTF-8.\n def self.decode_charset(text : String, charset : String) : String | MailError\n # What quoted-printable *text* stands for, hard breaks as CRLF.\n def self.decode_quoted_printable(text : String) : String\n # *text* with its RFC 2047 encoded-words decoded.\n def self.decode_words(text : String) : String\n # *data* in base64, lines of 76 and a CRLF after each.\n def self.encode_base64(data : String) : String\n # *data* in quoted-printable, lines of 76 or fewer; its line breaks\n # hard ones written as CRLF, or with *binary* escaped like any byte.\n def self.encode_quoted_printable(data : String, binary : Bool = false) : String\n # An unstructured header line, `name: value` folded and encoded as the\n # builder writes it, CRLF and all.\n def self.fold(name : String, value : String) : String\n def initialize\n # A message read from *text*: its header section, then its body.\n def self.parse(text : String) : Part | MailError\n # A date-time (RFC 5322 section 3.3, with section 4.3's obsolete years\n # and zones) as Unix seconds and the offset it was written at, in\n # minutes. The day of the week is not held to the date, as readers do\n # not hold it. A military zone is -0000, as section 4.3 says.\n def self.parse_date(text : String) : ::Tuple(Int64, Int32) | MailError\nend\n\n# What a message, a header or an address is that it should not be, as a\n# value: `reason` says what; `message` says it is mail's.\npub struct MailError\n def initialize(reason : String)\n def reason : String\n def to_s : String\nend\n\nimpl Error for MailError\n def message : String\nend\n" }, { "name": "std/math", "path": "src/std/math.iyi", - "sourceSha256": "c4a4757ccdfb7d46e982de1177ad20663690a0040f630cd33a3a822117819b36", + "sourceSha256": "d41a2f40aa4af8d64c60cdff5971d9b346296ca2026e171ed1143e46f2e0fb0e", "surface": "module std/math\n\npub struct Math\n def self.acos(value : Float64) : Float64\n def self.acos(value : Float32) : Float32\n def self.acos(value : T) : Float64 forall T\n # Correctly rounded (CORE-MATH, e_acosh.c): NaN below 1 (and for NaN),\n # acosh(1) = 0, acosh(inf) = inf.\n def self.acosh(value : Float64) : Float64\n def self.acosh(value : Float32) : Float32\n def self.acosh(value : T) : Float64 forall T\n def self.asin(value : Float64) : Float64\n def self.asin(value : Float32) : Float32\n def self.asin(value : T) : Float64 forall T\n # Correctly rounded (CORE-MATH, s_asinh.c): odd, asinh(+-0) = +-0,\n # +-inf and NaN come back as x + x.\n def self.asinh(value : Float64) : Float64\n def self.asinh(value : Float32) : Float32\n def self.asinh(value : T) : Float64 forall T\n def self.atan(value : Float64) : Float64\n def self.atan(value : Float32) : Float32\n def self.atan(value : T) : Float64 forall T\n # The angle of (x, y), with the zeros' and infinities' signs read the\n # way C's atan2 reads them: atan2(0.0, -0.0) is pi, atan2(-0.0, -1.0) is\n # -pi, atan2(inf, inf) is pi/4.\n def self.atan2(y : Float64, x : Float64) : Float64\n def self.atan2(y : Float32, x : Float32) : Float32\n def self.atan2(y : T, x : U) : Float64 forall T, U\n # Correctly rounded (CORE-MATH, e_atanh.c): odd, atanh(+-1) = +-inf, NaN\n # beyond 1 in magnitude (and for NaN).\n def self.atanh(value : Float64) : Float64\n def self.atanh(value : Float32) : Float32\n def self.atanh(value : T) : Float64 forall T\n # The Bessel function of the first kind of the given *order*,\n # Jn(*value*), as glibc computes it.\n def self.besselj(order : Int32, value : Float64) : Float64\n # The Bessel function of the first kind of the given *order*,\n # Jn(*value*), as glibc computes it.\n def self.besselj(order : Int32, value : Float32) : Float32\n # The Bessel function of the first kind of the given *order*,\n # Jn(*value*), as glibc computes it.\n def self.besselj(order : Int32, value : T) : Float64 forall T\n # The Bessel function of the first kind of order 0, J0(*value*), as glibc\n # computes it.\n def self.besselj0(value : Float64) : Float64\n # The Bessel function of the first kind of order 0, J0(*value*), as glibc\n # computes it.\n def self.besselj0(value : Float32) : Float32\n # The Bessel function of the first kind of order 0, J0(*value*), as glibc\n # computes it.\n def self.besselj0(value : T) : Float64 forall T\n # The Bessel function of the first kind of order 1, J1(*value*), as glibc\n # computes it.\n def self.besselj1(value : Float64) : Float64\n # The Bessel function of the first kind of order 1, J1(*value*), as glibc\n # computes it.\n def self.besselj1(value : Float32) : Float32\n # The Bessel function of the first kind of order 1, J1(*value*), as glibc\n # computes it.\n def self.besselj1(value : T) : Float64 forall T\n # The Bessel function of the second kind of the given *order*,\n # Yn(*value*), as glibc computes it: NaN for negative *value*, -infinity\n # at zero (+infinity for odd negative *order*).\n def self.bessely(order : Int32, value : Float64) : Float64\n # The Bessel function of the second kind of the given *order*,\n # Yn(*value*), as glibc computes it: NaN for negative *value*, -infinity\n # at zero (+infinity for odd negative *order*).\n def self.bessely(order : Int32, value : Float32) : Float32\n # The Bessel function of the second kind of the given *order*,\n # Yn(*value*), as glibc computes it: NaN for negative *value*, -infinity\n # at zero (+infinity for odd negative *order*).\n def self.bessely(order : Int32, value : T) : Float64 forall T\n # The Bessel function of the second kind of order 0, Y0(*value*), as glibc\n # computes it: NaN for negative *value*, -infinity at zero.\n def self.bessely0(value : Float64) : Float64\n # The Bessel function of the second kind of order 0, Y0(*value*), as glibc\n # computes it: NaN for negative *value*, -infinity at zero.\n def self.bessely0(value : Float32) : Float32\n # The Bessel function of the second kind of order 0, Y0(*value*), as glibc\n # computes it: NaN for negative *value*, -infinity at zero.\n def self.bessely0(value : T) : Float64 forall T\n # The Bessel function of the second kind of order 1, Y1(*value*), as glibc\n # computes it: NaN for negative *value*, -infinity at zero.\n def self.bessely1(value : Float64) : Float64\n # The Bessel function of the second kind of order 1, Y1(*value*), as glibc\n # computes it: NaN for negative *value*, -infinity at zero.\n def self.bessely1(value : Float32) : Float32\n # The Bessel function of the second kind of order 1, Y1(*value*), as glibc\n # computes it: NaN for negative *value*, -infinity at zero.\n def self.bessely1(value : T) : Float64 forall T\n def self.cbrt(value : Float64) : Float64\n def self.cbrt(value : Float32) : Float32\n def self.cbrt(value : T) : Float64 forall T\n # The magnitude of mag with the sign of sgn. Any other pair of numbers is\n # taken as two Float64s, as the other library's untyped overload takes\n # it: `copysign(3, -1)` was an ambiguous call between the two float\n # overloads, as `max(2, 5)` was.\n def self.copysign(mag : Float64, sgn : Float64) : Float64\n def self.copysign(mag : Float32, sgn : Float32) : Float32\n def self.copysign(mag : T, sgn : U) : Float64 forall T, U\n def self.cos(value : Float64) : Float64\n def self.cos(value : Float32) : Float32\n def self.cos(value : T) : Float64 forall T\n def self.cosh(value : Float64) : Float64\n def self.cosh(value : Float32) : Float32\n def self.cosh(value : T) : Float64 forall T\n # The error function, correctly rounded: glibc 2.43's CORE-MATH erf\n # (s_erf.c). NaN answers NaN, ±inf answer ±1, and ±0 keep their sign.\n def self.erf(value : Float64) : Float64\n # The single's: the double's answer rounded, which is the correctly\n # rounded single but where rounding twice meets a halfway point.\n def self.erf(value : Float32) : Float32\n def self.erf(value : T) : Float64 forall T\n # 1 - erf(value), correctly rounded: glibc 2.43's CORE-MATH erfc\n # (s_erfc.c). NaN answers NaN, -inf 2 and +inf 0; the answer underflows\n # to 0 from 0x1.b39dc41e48bfdp+4 (about 27.23) up.\n def self.erfc(value : Float64) : Float64\n # The single's: the double's answer rounded, which is the correctly\n # rounded single but where rounding twice meets a halfway point.\n def self.erfc(value : Float32) : Float32\n def self.erfc(value : T) : Float64 forall T\n def self.exp(value : Float64) : Float64\n def self.exp(value : Float32) : Float32\n def self.exp(value : T) : Float64 forall T\n def self.exp2(value : Float64) : Float64\n def self.exp2(value : Float32) : Float32\n def self.exp2(value : T) : Float64 forall T\n def self.expm1(value : Float64) : Float64\n def self.expm1(value : Float32) : Float32\n def self.expm1(value : T) : Float64 forall T\n # a * b + c rounded once, as IEEE 754 defines it and as the other\n # library's `Math.fma` answers through libm. The instruction where the\n # processor has one: every aarch64 processor (`fmadd`, LLVM's intrinsic),\n # and an x86_64 one with FMA3 and an operating system that saves its\n # registers, asked once by `cpuid` and `xgetbv` as `Float64#floor` asks\n # for `roundsd`. Elsewhere musl's `fma` (MIT; Copyright 2005-2020 Rich\n # Felker, et al.), in iyi: the significands as integers, their product's\n # 128 bits exact, the sum aligned with a sticky bit, one rounding at the\n # conversion back. This was Dekker's product and two more additions,\n # which round each, and answered the neighbour of the fused result for\n # arguments that cancel.\n def self.fma(a : Float64, b : Float64, c : Float64) : Float64\n # The single's: the instruction where there is one, and otherwise\n # musl's `fmaf` - the product of two singles is exact in a double and\n # the sum rounds once there, which is right unless that double sits on\n # a single's halfway point or among the subnormals; then the sum's\n # rounding error, which is exact, sends it to the odd neighbour, which\n # the conversion to a single cannot then misround.\n def self.fma(a : Float32, b : Float32, c : Float32) : Float32\n def self.fma(a : T, b : U, c : V) : Float64 forall T, U, V\n # value as m * 2^e with m in [0.5, 1) (or 0, NaN or an infinity as it\n # came, with 0), read from the bits: a subnormal is first scaled up by\n # 2^54 so that it has an exponent field of its own.\n def self.frexp(value : Float64) : ::Tuple(Float64, Int32)\n def self.gamma(value : Float64) : Float64\n # The single's: the double's answer rounded, which is the correctly\n # rounded single but where rounding twice meets a halfway point.\n def self.gamma(value : Float32) : Float32\n def self.gamma(value : T) : Float64 forall T\n # Euclid on the side of zero where every magnitude fits: the non-positive\n # side for a signed type, its minimum included - gcd(-2147483648, 6) is 2\n # - and the non-negative side, the only one there is, for an unsigned\n # type. Only gcd(minimum, 0), whose answer does not fit, overflows. The\n # two arguments are one type, as `%` takes one: the signature took any\n # two integers, and an unsigned pair (it has no unary minus) or a pair of\n # widths (no `%` between them) failed to compile inside this method. A\n # pair of widths is refused at the call now, and a literal takes the\n # other argument's type.\n def self.gcd(a : T, b : T) : T forall T\n def self.hypot(x : Float64, y : Float64) : Float64\n def self.hypot(x : Float32, y : Float32) : Float32\n def self.hypot(x : T, y : U) : Float64 forall T, U\n # The exponent of value as an integer, as C's ilogb and glibc answer it:\n # a subnormal's true exponent, -2147483648 for zero and NaN, 2147483647\n # for an infinity.\n def self.ilogb(value : Float64) : Int32\n def self.ilogb(value : Float32) : Int32\n def self.ilogb(value : T) : Int32 forall T\n def initialize\n # The largest r with r * r <= value, in the value's own type, by the\n # other library's bit-at-a-time method. A negative value panics, where\n # that library raises.\n def self.isqrt(value : ::Int) : ::Int\n def self.lcm(a : T, b : T) : T forall T\n # value * 2^exponent, with one rounding: the exponent field is rewritten\n # outright, and a result that lands among the subnormals is scaled down\n # from a normal one in a single step.\n def self.ldexp(value : Float64, exponent : Int32) : Float64\n # log|gamma(value)|, correctly rounded (CORE-MATH, as glibc 2.43): the\n # poles at the non-positive whole numbers and both infinities answer\n # +infinity, NaN answers NaN.\n def self.lgamma(value : Float64) : Float64\n # The single's: the double's answer rounded, which is the correctly\n # rounded single but where rounding twice meets a halfway point.\n def self.lgamma(value : Float32) : Float32\n def self.lgamma(value : T) : Float64 forall T\n def self.log(value : Float64, base : Float64) : Float64\n def self.log(value : T, base : U) : Float64 forall T, U\n def self.log(value : Float64) : Float64\n def self.log(value : Float32) : Float32\n def self.log(value : T) : Float64 forall T\n def self.log10(value : Float64) : Float64\n def self.log10(value : Float32) : Float32\n def self.log10(value : T) : Float64 forall T\n def self.log1p(value : Float64) : Float64\n def self.log1p(value : Float32) : Float32\n def self.log1p(value : T) : Float64 forall T\n def self.log2(value : Float64) : Float64\n def self.log2(value : Float32) : Float32\n def self.log2(value : T) : Float64 forall T\n # The exponent of value as a double: -inf for zero, +inf for an\n # infinity, NaN for NaN, as C's logb.\n def self.logb(value : Float64) : Float64\n def self.logb(value : Float32) : Float32\n def self.logb(value : T) : Float64 forall T\n def self.max(a : T, b : T) : T forall T\n # min and max take two values of one type, any type `<` compares, and\n # answer one of them. Each is one overload: they were a Float64 and a\n # Float32 one, which took no integer pair, and an integer overload beside\n # them ties with them wherever an integer variable can widen to a\n # double: with all three, `Math.max(1_i64, x)` with `x : Int32` is\n # \"ambiguous call, implicit cast of Int32 matches all of Float64,\n # Int64\". Two doubles or two singles are ordered as IEEE 754-2019's\n # minimumNumber and maximumNumber order them, as they were: the number\n # when one side is NaN, and -0.0 below 0.0. Every other type compares\n # with `<` alone and answers the first argument on a tie, as the other\n # library's untyped `Math.min` and `Math.max` do. The one type is the\n # first argument's that the other can be cast to, so `Math.max(2,\n # page - 1)` is an Int32, `Math.max(0, n)` with `n : Int64` an Int64,\n # `Math.max(2, 2.5)` the Float64 2.5, and `Math.max(n, 0.5)` with\n # `n : Int32` a Float64, as it was; a pair neither of which casts to the\n # other's type, an Int64 and a UInt64 or a number and a String, is\n # refused at the call.\n def self.min(a : T, b : T) : T forall T\n def self.pow(base : Float64, exp : Float64) : Float64\n def self.pow(base : Float32, exp : Float32) : Float32\n def self.pow(base : T, exp : U) : Float64 forall T, U\n # The least power of two not below v, 1 for v <= 1, in v's type; one\n # the type cannot hold panics \"arithmetic overflow\".\n def self.pw2ceil(v : ::Int) : ::Int\n # scalbn with an Int64 exponent: past the range an Int32 holds every\n # answer is zero or an infinity already, so the exponent is clamped.\n def self.scalbln(value : Float64, exp : Int64) : Float64\n def self.scalbln(value : Float32, exp : Int64) : Float32\n def self.scalbln(value : T, exp : U) : Float64 forall T, U\n # value * 2^exp, rounded once: `ldexp` under C's other name.\n def self.scalbn(value : Float64, exp : Int32) : Float64\n def self.scalbn(value : Float32, exp : Int32) : Float32\n def self.scalbn(value : T, exp : U) : Float64 forall T, U\n def self.sin(value : Float64) : Float64\n def self.sin(value : Float32) : Float32\n def self.sin(value : T) : Float64 forall T\n # sinh, cosh and tanh as glibc 2.43 computes them - fdlibm's\n # `e_sinh.c`, `e_cosh.c` and `s_tanh.c` (Sun's notice is at `expm1`), on\n # the `exp` and `expm1` above, which are glibc's to the last bit, so\n # these are too. Their branches are fdlibm's, at its thresholds, read off\n # the high word: a series near zero and `half_exp` past 709 answered\n # differently in the last bit for 952 arguments of sinh in 100,000, 217\n # of cosh and 4,863 of tanh.\n def self.sinh(value : Float64) : Float64\n def self.sinh(value : Float32) : Float32\n def self.sinh(value : T) : Float64 forall T\n def self.sqrt(value : Float64) : Float64\n def self.sqrt(value : Float32) : Float32\n def self.sqrt(value : T) : Float64 forall T\n def self.tan(value : Float64) : Float64\n def self.tan(value : Float32) : Float32\n def self.tan(value : T) : Float64 forall T\n def self.tanh(value : Float64) : Float64\n def self.tanh(value : Float32) : Float32\n def self.tanh(value : T) : Float64 forall T\n # gamma(value), correctly rounded (CORE-MATH, as glibc 2.43): +-0 answer\n # +-infinity, the negative whole numbers and -infinity NaN; past\n # 171.62 the answer overflows to infinity, and below -184 it is a zero\n # carrying gamma's sign.\n def self.tgamma(value : Float64) : Float64\n # The single's: the double's answer rounded, which is the correctly\n # rounded single but where rounding twice meets a halfway point.\n def self.tgamma(value : Float32) : Float32\n def self.tgamma(value : T) : Float64 forall T\nend\n" }, { "name": "std/mime", "path": "src/std/mime.iyi", - "sourceSha256": "a1cac6eb0a4b5a6da16cd36b295720e3d9b01abce0344518a311d168070f99c2", + "sourceSha256": "7d9220d8e14385345930b49861cb371c9882bc1d5a178d80934fa178abb147bd", "surface": "module std/mime\n\npub struct MIME\n # Whether a body of this type shrinks under gzip or deflate: text,\n # JSON, JavaScript, XML and their `+json`/`+xml` kin (SVG among them),\n # YAML, TOML, scripts, WebAssembly, uncompressed fonts and archives,\n # bitmaps and icons. Not images, audio and video that are already\n # compressed, nor zip, gzip and the other archives, nor WOFF and WOFF2,\n # which are compressed fonts. WebAssembly is included because its code\n # roughly halves under gzip, which is why servers compress it.\n def self.compressible?(media_type : String) : Bool\n # The extensions a media type is written with, dotted and sorted\n # (\"text/html\" is [\".htm\", \".html\"]). Parameters are ignored and case\n # does not matter; empty when the type is unknown. The array is a fresh\n # copy the caller may change.\n def self.extensions(media_type : String) : Array(String)\n # The same, falling back to *default*.\n def self.from_extension(name : String, default : String = \"application/octet-stream\") : String\n # The media type for a file name or extension: \".html\", \"html\",\n # \"index.HTML\" and \"a/b.tar.gz\" (by its last extension) all work, in\n # any case. A path whose base name has no dot has no extension; a bare\n # word is taken as the extension itself. Nil when unknown.\n def self.from_extension?(name : String) : String | ::Nil\n def initialize\n # RFC 9110 §8.3.1: `type/subtype` followed by `; name=value` parameters,\n # whitespace allowed around the semicolons and at either end, a value a\n # token or a quoted string whose backslash escapes are undone. Answers\n # the type lowercased and the parameters with lowercased names and\n # values as written; a name given twice keeps its last value. Nil when\n # any part is not a token, a parameter has no `=`, or a quote is left\n # open.\n def self.parse?(value : String) : ::Tuple(String, Hash(String, String)) | ::Nil\n # The media type with `; charset=utf-8` added when it is text, JSON,\n # JavaScript or XML (`+json` and `+xml` included) and names no charset\n # yet. Anything else, and anything that does not parse, comes back as\n # given.\n def self.with_charset(media_type : String) : String\nend\n" }, { "name": "std/mlkem", "path": "src/std/mlkem.iyi", - "sourceSha256": "8b6ae912b1eb37146021806f7dcfff82fc16d6f1d57f38ba723082bfb73cc106", + "sourceSha256": "b56a7fefc67fde1f1bee0124f0873e4f840762948cbdb80d71c2cc8a831b7727", "surface": "module std/mlkem\n\n# ML-KEM-768's encapsulation, and its sizes (FIPS 203 section 8, table 3).\npub struct MlKem768\n # The ciphertext for *encapsulation_key* and the 32-byte shared secret it\n # carries, FIPS 203 Algorithm 17 from the 32 random bytes *randomness*\n # (m), or an `MlKemError`: a key that is not 1,184 bytes or fails the\n # modulus check of section 7.2.\n def self.encapsulate(encapsulation_key : String | Array(UInt8), randomness : String | Array(UInt8)) : ::Tuple(Array(UInt8), Array(UInt8)) | MlKemError\n def initialize\nend\n\n# An ML-KEM-768 key pair: the decapsulation key and the encapsulation key\n# that goes with it. Holds the secret vector in the NTT domain, and the\n# public matrix and vector that decapsulation encrypts with again.\npub struct MlKem768PrivateKey\n # The 32-byte shared secret *ciphertext* carries, FIPS 203 Algorithm 18,\n # or an `MlKemError` for a ciphertext that is not 1,088 bytes. A\n # ciphertext that does not re-encrypt to itself is answered with the\n # implicit-rejection key J(z || c), chosen by masks: the caller cannot\n # tell the two apart, and neither can the time taken.\n def decapsulate(ciphertext : String | Array(UInt8)) : Array(UInt8) | MlKemError\n # The 2,400-byte decapsulation key, as `from_bytes` reads it.\n def decapsulation_key : Array(UInt8)\n # The 1,184 bytes a peer encapsulates to: ByteEncode12 of t, then rho.\n def encapsulation_key : Array(UInt8)\n # The key whose 2,400-byte decapsulation key is *bytes* (ByteEncode12 of\n # s, the encapsulation key, H of it, z), or an `MlKemError`: the wrong\n # size, or a stored H(ek) that is not the encapsulation key's hash (FIPS\n # 203 section 7.3).\n def self.from_bytes(bytes : String | Array(UInt8)) : MlKem768PrivateKey | MlKemError\n # The key pair of *seed*, d then z, 32 bytes each: FIPS 203 Algorithm 16\n # (ML-KEM.KeyGen_internal) over Algorithm 13 (K-PKE.KeyGen).\n def self.from_seed(seed : String | Array(UInt8)) : MlKem768PrivateKey\n def initialize(encapsulation_key : Array(UInt8), s : Pointer(UInt32), t : Pointer(UInt32), a : Pointer(UInt32), h : Array(UInt8), z : Array(UInt8))\nend\n\n# What is wrong with a key or a ciphertext from outside: `message` is the\n# sentence.\npub struct MlKemError\n def initialize(message : String)\n def to_s : String\nend\n\nimpl Error for MlKemError\n def message : String\nend\n" }, { "name": "std/mutex", "path": "src/std/mutex.iyi", - "sourceSha256": "e02a2548bfddd8681125bbb3c18272d4b266a1df4c1e04f3345d7c47109b2f3d", - "surface": "module std/mutex\n\npub class Mutex(T)\n # The program's one thread, with nothing on it to run but the waiting\n # task: no task runnable, asleep or waiting on I/O, and none another\n # thread has woken into its inbox (SPEC.md III.4.13). Nothing can\n # release or change the value then.\n protected def self.alone? : Bool\n protected def self.build(value : T) : Mutex(T)\n # The block's answer, worked out with the lock held. It must be `Share`,\n # because it leaves the lock.\n def get(&block : (T -> R)) : R | Cancelled forall R\n # Whether the holder, which took the lock on *thread*, may be running\n # now: another thread exists, and the holder is not on this one, which\n # is running the waiter.\n protected def self.holder_may_run?(thread : UInt64) : Bool\n # Runs the block with the value, the lock held; answers nil, or\n # `Cancelled` when the task was cancelled while it waited.\n def lock(&block : (T -> _)) : Nil | Cancelled\n # Whether some task holds it now: an answer that may be old by the time\n # it is read, for a report rather than a decision.\n def locked? : Bool\n # The value is the block's: made here, so nothing outside holds it. The\n # constructor that takes a value is private for that reason.\n def self.new(&block : (-> U)) : Mutex(U) forall U\n protected def self.task_id : UInt64\n protected def self.thread_id : UInt64\n # The value replaced by the block's answer, with the lock held: what a\n # number or any other value type wants, which a block cannot change in\n # place.\n def update(&block : (T -> T)) : Nil | Cancelled\n # Runs the block with the lock held each time the value changes, until it\n # answers something other than nil, and answers that: a condition and\n # what is done once it holds, in one step no other task can come between.\n #\n # queue = Mutex.new { [] of Int32 }\n # job = queue.wait_for { |q| q.empty? ? nil : q.shift }.or_panic\n #\n # A change is any lock, get, update or wait_for of this Mutex by another\n # task; between them the waiter holds no lock, and is parked on the count\n # of releases until another task's moves it. Cancellable, as `lock` is.\n # A wait nothing could end - one thread, and nothing else on it to run -\n # panics saying so.\n def wait_for(&block : (T -> R | ::Nil)) : R | Cancelled forall R\nend\n" + "sourceSha256": "d51acd021ce19a9fa53b70b864dd0af72b83593a89eb1adbddd1e17b017016ed", + "surface": "module std/mutex\n\npub class Mutex(T)\n # The program's one thread, with nothing on it to run but the waiting\n # task: no task runnable, asleep or waiting on I/O, and none another\n # thread has woken into its inbox (SPEC.md III.4.13). Nothing can\n # release or change the value then.\n protected def self.alone? : Bool\n protected def self.build(value : T) : Mutex(T)\n # The block's answer, worked out with the lock held. It must be `Share`,\n # because it leaves the lock.\n def get(&block : (T -> R)) : R | Cancelled forall R\n # Whether the holder, which took the lock on *thread*, may be running\n # now: another thread exists, and the holder is not on this one, which\n # is running the waiter.\n protected def self.holder_may_run?(thread : UInt64) : Bool\n # Runs the block with the value, the lock held; answers nil, or\n # `Cancelled` when the task was cancelled while it waited.\n def lock(&block : (T -> _)) : Nil | Cancelled\n # Whether some task holds it now: an answer that may be old by the time\n # it is read, for a report rather than a decision.\n def locked? : Bool\n # The value is the block's: made here, so nothing outside holds it. The\n # constructor that takes a value is private for that reason.\n def self.new(&block : (-> U)) : Mutex(U) forall U\n protected def self.relaxed_get(word : Pointer(Atomic(UInt64))) : UInt64\n protected def self.relaxed_set(word : Pointer(Atomic(UInt64)), value : UInt64) : Nil\n protected def self.task_id : UInt64\n protected def self.thread_id : UInt64\n # The value replaced by the block's answer, with the lock held: what a\n # number or any other value type wants, which a block cannot change in\n # place.\n def update(&block : (T -> T)) : Nil | Cancelled\n # Runs the block with the lock held each time the value changes, until it\n # answers something other than nil, and answers that: a condition and\n # what is done once it holds, in one step no other task can come between.\n #\n # queue = Mutex.new { [] of Int32 }\n # job = queue.wait_for { |q| q.empty? ? nil : q.shift }.or_panic\n #\n # A change is any lock, get, update or wait_for of this Mutex by another\n # task; between them the waiter holds no lock, and is parked on the count\n # of releases until another task's moves it. Cancellable, as `lock` is.\n # A wait nothing could end - one thread, and nothing else on it to run -\n # panics saying so.\n def wait_for(&block : (T -> R | ::Nil)) : R | Cancelled forall R\nend\n" }, { "name": "std/named_tuple", @@ -388,19 +388,19 @@ { "name": "std/netip", "path": "src/std/netip.iyi", - "sourceSha256": "86ea9f02692a33d9c50095a7db3ed2b72cb764f7b4386d176b35c8d531521297", + "sourceSha256": "6ff0290583115e39f7dc104ed5bd0ce451797d100397b77bfdacd7977358bd1f", "surface": "module std/netip\n\n# An IPv4 or IPv6 address, an IPv6 one with its zone (\"\" for none).\npub struct IP\n # IPv4 first, then by value, then by zone (none first).\n def <=>(other : IP) : Int32\n def ==(other : IP) : ::Bool\n # 32 or 128.\n def bit_length : Int32\n # Four or sixteen bytes, network order.\n def bytes : Array(UInt8)\n # Every IPv6 group in four digits (an IPv4-mapped tail kept dotted, as\n # Python writes it); IPv4 as `to_s` writes it.\n def exploded : String\n # Four bytes are an IPv4 address and sixteen an IPv6 one, network order,\n # as `bytes` answers them.\n def self.from_bytes(bytes : Array(UInt8)) : IP\n # Globally reachable by the IANA special-purpose registries, as Python\n # 3.14's `is_global` reads them.\n def global? : ::Bool\n def hash : Int32\n def initialize(*, value : UInt128, v6 : ::Bool, zone : String)\n def inspect : String\n # The IPv4 address inside an IPv4-mapped one (`::ffff:a.b.c.d`), or nil.\n def ipv4_mapped : IP | ::Nil\n # `::ffff:a.b.c.d` for an IPv4 address (RFC 4291 section 2.5.5.2).\n def ipv6_mapped : IP\n # 169.254.0.0/16 (RFC 3927), fe80::/10.\n def link_local? : ::Bool\n # 127.0.0.0/8, ::1.\n def loopback? : ::Bool\n protected def max_value : UInt128\n # 224.0.0.0/4, ff00::/8.\n def multicast? : ::Bool\n # The address after this one, nil after the family's last.\n def next : IP | ::Nil\n # Either family, as Python's `ip_address` reads it: IPv4 when it is\n # IPv4, else IPv6. Text with a colon can only be IPv6 and text without\n # one only IPv4, so the refusal is the one family's that applies.\n def self.parse(text : String) : IP | NetipError\n # Dotted decimal, four octets, Python's `IPv4Address`.\n def self.parse_v4(text : String) : IP | NetipError\n # RFC 4291 text with an optional `%zone`, Python's `IPv6Address`.\n def self.parse_v6(text : String) : IP | NetipError\n # The prefix of *length* bits holding this address, its host bits\n # cleared and its zone left behind.\n def prefix(length : Int32) : Prefix\n # The address before this one, nil before the family's first.\n def prev : IP | ::Nil\n # RFC 1918 (10/8, 172.16/12, 192.168/16) and RFC 4193 (fc00::/7): the\n # networks people number their own machines from, Go's `IsPrivate`.\n def private? : ::Bool\n # 240.0.0.0/4 (RFC 1112's class E), and for IPv6 the blocks RFC 4291\n # section 2.4 leaves unassigned: Python's `is_reserved`.\n def reserved? : ::Bool\n # The name a PTR record for this address is under: `4.3.2.1.in-addr.arpa`,\n # or thirty-two nibbles and `ip6.arpa`.\n def reverse_pointer : String\n # fec0::/10, deprecated by RFC 3879; read off the IPv6 bits alone, as\n # Python reads it, and never IPv4.\n def site_local? : ::Bool\n def to_s(io : IO) : Nil\n def to_s : String\n # The address's bits, network order, in the low 32 for IPv4.\n def to_u128 : UInt128\n # The IPv4 address inside an IPv4-mapped one, any other address itself.\n def unmap : IP\n # 0.0.0.0, ::.\n def unspecified? : ::Bool\n # The IPv4 address *a*.*b*.*c*.*d*.\n def self.v4(a : UInt8, b : UInt8, c : UInt8, d : UInt8) : IP\n # The IPv4 address whose 32 bits, network order, are *value*.\n def self.v4(value : UInt32) : IP\n def v4? : ::Bool\n # The IPv6 address whose 128 bits, network order, are *value*.\n def self.v6(value : UInt128) : IP\n def v6? : ::Bool\n # This address in *zone*, or with none for `\"\"`. Python's rules for a\n # zone hold: no `%` in it. IPv4 has no zones.\n def with_zone(zone : String) : IP\n # The zone, or nil for none (and always for IPv4).\n def zone : String | ::Nil\nend\n\n# Why a text is not an address or a prefix: `message` names the text.\npub struct NetipError\n def initialize(message : String)\n def to_s : String\nend\n\n# An address and a length: a CIDR block (RFC 4632), with the address's\n# host bits as it was given them.\npub struct Prefix\n # IPv4 first, then by first address, then shorter first, then by the\n # address as held - Python's order of networks, host bits after.\n def <=>(other : Prefix) : Int32\n def ==(other : Prefix) : ::Bool\n # 32 or 128.\n def bit_length : Int32\n # Whether *ip* is in the block: never across families, the zone not read.\n def contains?(ip : IP) : ::Bool\n # Whether all of *other* is in this block (Python's `supernet_of`).\n def contains?(other : Prefix) : ::Bool\n # The block's first address (Python's `network_address`).\n def first : IP\n def hash : Int32\n # The host bits as an address: `0.0.0.255` for a /24.\n def hostmask : IP\n # *ip* and *length* as they are, host bits and all; `IP#prefix` clears\n # them. A zoned address is refused: a block has no zone.\n def initialize(ip : IP, length : Int32)\n def inspect : String\n def ip : IP\n # The block's last address (Python's `broadcast_address`).\n def last : IP\n def length : Int32\n # This prefix with the address's host bits cleared.\n def masked : Prefix\n # The length as an address: `255.255.255.0` for a /24.\n def netmask : IP\n # Whether the two blocks share an address: as blocks nest or are\n # apart, one holds the other's first address or neither shares any.\n def overlaps?(other : Prefix) : ::Bool\n # Python's `ip_network(text, strict: !mask)`, a zone refused.\n def self.parse(text : String, mask : ::Bool = false) : Prefix | NetipError\n # The *index*th /*new_length* block of this one, from 0.\n def subnet(new_length : Int32, index : UInt128) : Prefix\n # Whether every address of this block is in *other*.\n def subnet_of?(other : Prefix) : ::Bool\n # The /*new_length* blocks this one splits into, in order.\n def subnets(new_length : Int32) : Array(Prefix)\n # The block of *new_length* holding this one.\n def supernet(new_length : Int32) : Prefix\n # The block one bit shorter; a /0 is its own.\n def supernet : Prefix\n def to_s(io : IO) : Nil\n def to_s : String\n def v4? : ::Bool\n def v6? : ::Bool\nend\n\n# Prefixes of both families in a binary trie, one node a bit: node 0 is\n# the IPv4 root and node 1 the IPv6 one, and a node's children are made\n# after it, so each has a larger index than its parent - which is what\n# lets `collapsed` decide a node from its children in one backward pass.\n# A removed prefix leaves its nodes behind, unmarked.\npub class PrefixSet\n # Adds *prefix*, masked; false when it was there.\n def add(prefix : Prefix) : ::Bool\n # The fewest prefixes holding exactly the addresses the set's do,\n # IPv4 first, in order: Python's `collapse_addresses`, per family.\n def collapsed : Array(Prefix)\n # Whether some prefix of the set holds *ip*.\n def contains?(ip : IP) : ::Bool\n # Removes *prefix*, masked; false when it was not there.\n def delete(prefix : Prefix) : ::Bool\n def empty? : ::Bool\n # Whether *prefix*, masked, is one of the set's - this prefix, not one\n # holding it; `lookup(prefix.first)` asks that.\n def includes?(prefix : Prefix) : ::Bool\n def initialize(prefixes : Array(Prefix))\n def initialize\n # The longest prefix of the set holding *ip*, or nil.\n def lookup(ip : IP) : Prefix | ::Nil\n # Every prefix of the set, IPv4 first, in `Prefix` order.\n def prefixes : Array(Prefix)\n # How many prefixes the set holds.\n def size : Int32\nend\n\nimpl Error for NetipError\n def message : String\nend\n\nimpl Std::Traits::Comparable for IP\n def <=>(other : self) : Int32\nend\n\nimpl Std::Traits::Comparable for Prefix\n def <=>(other : self) : Int32\nend\n" }, { "name": "std/number", "path": "src/std/number.iyi", - "sourceSha256": "b95c5cf83d5f3a2e15e6043b2a21b818ebcc90d66e78edcb9fcb7f7b7ce67040", + "sourceSha256": "57a76f31e6f832afe4ba9e9b890276b61a4178ff6cbca656ce8b93d78748ca6e", "surface": "module std/number\n\npub enum RoundingMode : Int32\n TiesEven = 0\n TiesAway = 1\n ToZero = 2\n ToPositive = 3\n ToNegative = 4\nend\n\nstruct ::Float64\n # To `digits` places in the mode asked for — Crystal's\n # `round(digits, mode: ...)`: `2.675.round(2, :ties_away)` spelled\n # `2.675.round(2, RoundingMode::TiesAway)`. A negative `digits` rounds to\n # tens, hundreds, ..., dividing by the scale first as the prelude's\n # `round(digits)` does.\n # Past a double's range the answer is at hand, as for the prelude's.\n def round(digits : Int32, mode : Std::Number::RoundingMode) : Float64\n def round(mode : Std::Number::RoundingMode) : Float64\nend\n\nstruct ::Number\n def + : self\n def abs : self\n def abs2 : self\n def self.additive_identity : self\n def divmod(number)\n def self.multiplicative_identity : self\n def negative? : ::Bool\n def positive? : ::Bool\n # An integer is already whole: every mode answers self. `Float64` names\n # the mode below; `round` with no arguments is the prelude's, a tie to\n # the even one, which is `TiesEven`.\n def round(mode : Std::Number::RoundingMode = Std::Number::RoundingMode.new(0)) : self\n def sign : Int32\n def self.zero : self\n def zero? : ::Bool\nend\n" }, { "name": "std/number_format", "path": "src/std/number_format.iyi", - "sourceSha256": "a40cfd087457929c1ee319de0306b8d72b2e4ded7dbc359dcf3085f0d5668a5b", + "sourceSha256": "bab228ed53b7dbbdbfd7c190d7d897b52e624b83b1cb0f08ca561bc2fee781dc", "surface": "module std/number_format\n\n# Which binary prefixes `humanize_bytes` writes.\npub enum BinaryPrefixFormat : Int32\n IEC = 0\n JEDEC = 1\nend\n\nstruct ::Int\n # A count of bytes scaled by powers of 1024, as `humanize` scales by\n # 1000.\n def humanize_bytes(precision : Int32 = 3, separator : ::Char = '.', *, significant : ::Bool = true, unit_separator : ::String = \"\", format : Std::NumberFormat::BinaryPrefixFormat = Std::NumberFormat::BinaryPrefixFormat::IEC) : ::String\nend\n\nstruct ::Number\n # The number with its integer digits in groups of *group*, *delimiter*\n # between them and *separator* before the fraction. *decimal_places*\n # rounds to that many places, half to even; nil keeps an integer whole\n # and a float's shortest digits. *only_significant* drops the fraction's\n # trailing zeros, and the separator if nothing is left.\n def format(separator : ::Char = '.', delimiter : ::Char = ',', decimal_places : Int32 | ::Nil = nil, *, group : Int32 = 3, only_significant : ::Bool = false) : ::String\n # The number scaled to an SI prefix, with *precision* significant\n # digits (or, with `significant: false`, places), *unit_separator*\n # between it and the prefix.\n def humanize(precision : Int32 = 3, separator : ::Char = '.', delimiter : ::Char = ',', *, significant : ::Bool = true, unit_separator : ::String = \"\") : ::String\nend\n" }, { @@ -412,91 +412,97 @@ { "name": "std/option_parser", "path": "src/std/option_parser.iyi", - "sourceSha256": "b394a198eeaf8219d011c903348a85a66773c12716dc160c19e20e3714f08cca", + "sourceSha256": "dcb71d0551ad2bfa2a78f9bcceab109b4e5f4e8e2e89432604bcf15d25075ed1", "surface": "module std/option_parser\n\npub class OptionParser\n # What a flag does with the argument after it: `--name VALUE` needs one,\n # `--color [WHEN]` takes one unless it is missing or is a flag itself,\n # and `--verbose` takes none.\n enum Value : Int32\n None = 0\n Required = 1\n Optional = 2\n end\n def banner : String | ::Nil\n # The help's first line, \"options:\" until it is set.\n def banner=(text : String) : Nil\n def help : String\n def initialize\n def invalid_option(&block : (String -> Nil)) : Nil\n def missing_option(&block : (String -> Nil)) : Nil\n # One flag spelled two ways, `-v` and `--verbose`: the value either\n # states, both take.\n def on(short : String, long : String, description : String, &block : (String -> Nil)) : Nil\n # A value is taken by `--name VALUE`, `--name=VALUE`, `-n VALUE` and\n # `-nVALUE`, the four spellings the other library reads. Only the space\n # form was: `--name=VALUE` was stored under the key `--name=VALUE`, which\n # no argument ever looks up, and `-nVALUE` refused itself as not a flag.\n # A short flag is one character, not one byte: `-é` was refused too.\n #\n # A bracketed value, `--color [WHEN]`, `-c [WHEN]` or `-c[WHEN]`, may be\n # left out, as the other library reads the brackets. It was a required\n # value: `--color` last panicked \"flag --color needs a value\", and\n # `--color -v` handed `-v` to `--color` instead of running it.\n def on(flag : String, description : String, &block : (String -> Nil)) : Nil\n def parse(args : Array(String)) : Array(String)\n def parse : Array(String)\n # A line of its own in the help, between the flags and commands\n # registered before it and after it.\n def separator(text : String) : Nil\n def to_s : String\nend\n" }, { "name": "std/otp", "path": "src/std/otp.iyi", - "sourceSha256": "c09b8e1edf7daa57ca7621ad8129b0b638927618a79c0dd14c4019fab15140b7", + "sourceSha256": "9b26764db8f8368f552392c142ee90f42ae9d279360fa5c3b686cbbfe7502024", "surface": "module std/otp\n\npub struct HOTP\n def self.code(secret : Array(UInt8), counter : Int64, digits : Int32 = 6, algorithm : OTPAlgorithm = OTPAlgorithm::SHA1) : String\n def initialize\nend\n\n# The HMAC hash, by the name RFC 6238 and the key URI format give it.\npub enum OTPAlgorithm : Int32\n SHA1 = 0\n SHA256 = 1\n SHA512 = 2\nend\n\n# A key URI: what an authenticator app needs to make the codes a server\n# will check. `counter` is nil for TOTP and the next counter for HOTP;\n# `period` is TOTP's step and 30, unused, for HOTP.\npub struct OTPAuth\n def account : String\n def algorithm : OTPAlgorithm\n def counter : Int64 | ::Nil\n def digits : Int32\n def self.hotp(secret : Array(UInt8), account : String, counter : Int64, issuer : String = \"\", algorithm : OTPAlgorithm = OTPAlgorithm::SHA1, digits : Int32 = 6) : OTPAuth\n def hotp? : Bool\n def initialize(secret : Array(UInt8), account : String, issuer : String, algorithm : OTPAlgorithm, digits : Int32, period : Int32, counter : Int64 | ::Nil)\n def issuer : String\n def self.parse(uri : String) : OTPAuth | OTPError\n def period : Int32\n def secret : Array(UInt8)\n def to_s : String\n # An empty *issuer* is none: the label is the account alone and no\n # `issuer` parameter is written.\n def self.totp(secret : Array(UInt8), account : String, issuer : String = \"\", algorithm : OTPAlgorithm = OTPAlgorithm::SHA1, digits : Int32 = 6, period : Int32 = 30) : OTPAuth\nend\n\n# What `OTPAuth.parse` answers for a URI it cannot read.\npub struct OTPError\n def initialize(message : String)\n def to_s : String\nend\n\npub struct TOTP\n def self.code(secret : Array(UInt8), unix_time : Int64, step : Int32 = 30, digits : Int32 = 6, algorithm : OTPAlgorithm = OTPAlgorithm::SHA1) : String\n def initialize\n # The code for this second by the wall clock.\n def self.now(secret : Array(UInt8), step : Int32 = 30, digits : Int32 = 6, algorithm : OTPAlgorithm = OTPAlgorithm::SHA1) : String\n # Whether *code* is the code for *unix_time*'s step or one of the\n # *window* steps either side of it. A code of the wrong length is false\n # at once; the length of the right one is not a secret.\n def self.verify(secret : Array(UInt8), code : String, unix_time : Int64, window : Int32 = 1, step : Int32 = 30, digits : Int32 = 6, algorithm : OTPAlgorithm = OTPAlgorithm::SHA1) : Bool\nend\n\nimpl Error for OTPError\n def message : String\nend\n" }, { "name": "std/p256", "path": "src/std/p256.iyi", - "sourceSha256": "fff30034b881b76ce3e290fc5952af15bf42391ebd61cd2149e1d7109422d551", + "sourceSha256": "c169b790a4fc66a2d022e75f4af90877c33a9a431902043970c79b213cf64b67", "surface": "module std/p256\n\n# A P-256 private key, and the public key that goes with it.\npub struct P256PrivateKey\n # The key whose d is *bytes*, 32 big-endian, or why it is not one: not\n # 32 bytes, or not in [1, n - 1].\n def self.from_bytes(bytes : String | Array(UInt8)) : P256PrivateKey | EcdsaError\n # A PKCS #8 OneAsymmetricKey (RFC 5958) holding a P-256 key: version 0 or\n # 1, the algorithm id-ecPublicKey with prime256v1, and an ECPrivateKey\n # inside the privateKey OCTET STRING.\n def self.from_pkcs8(der : Array(UInt8)) : P256PrivateKey | EcdsaError\n # SEC 1's ECPrivateKey (RFC 5915): version 1, the 32-byte private key,\n # then optionally the curve ([0], which must be prime256v1) and the\n # public key ([1], which must be the private key's).\n def self.from_sec1(der : Array(UInt8)) : P256PrivateKey | EcdsaError\n def initialize(d : P256Num, public_key : EcdsaPublicKey, public_point : Array(UInt8))\n def public_key : EcdsaPublicKey\n # The public key's point, uncompressed: 0x04, then x and y, 32 bytes each.\n def public_point : Array(UInt8)\n # ECDH: x of [d]Q for the peer's point Q, 32 bytes big-endian - or why\n # *peer* is not a point of P-256 (checked before d is used).\n def shared_secret(peer : Array(UInt8)) : Array(UInt8) | EcdsaError\n # The signature of *message* under *hash*: the DER of Ecdsa-Sig-Value,\n # SEQUENCE { r INTEGER, s INTEGER }, as X.509 and TLS 1.3 carry it. The\n # nonce is RFC 6979's, so the same key and message sign alike.\n def sign(hash : EcdsaHash, message : String | Array(UInt8)) : Array(UInt8)\nend\n" }, { "name": "std/p384", "path": "src/std/p384.iyi", - "sourceSha256": "bceeb1a2e690f13b5ab58010a40173ced4f43829058c224587d921dc643d53c1", + "sourceSha256": "74fa321a5b5b618d357e8a517f5dde6da4f44796e5b39ef9fe39167ca70223c7", "surface": "module std/p384\n\n# A P-384 private key, and the public key that goes with it.\npub struct P384PrivateKey\n # The key whose d is *bytes*, 48 big-endian, or why it is not one: not\n # 48 bytes, or not in [1, n - 1].\n def self.from_bytes(bytes : String | Array(UInt8)) : P384PrivateKey | EcdsaError\n # A PKCS #8 OneAsymmetricKey (RFC 5958) holding a P-384 key: version 0 or\n # 1, the algorithm id-ecPublicKey with secp384r1, and an ECPrivateKey\n # inside the privateKey OCTET STRING.\n def self.from_pkcs8(der : Array(UInt8)) : P384PrivateKey | EcdsaError\n # SEC 1's ECPrivateKey (RFC 5915): version 1, the 48-byte private key,\n # then optionally the curve ([0], which must be secp384r1) and the\n # public key ([1], which must be the private key's).\n def self.from_sec1(der : Array(UInt8)) : P384PrivateKey | EcdsaError\n def initialize(d : P384Num, public_key : EcdsaPublicKey, public_point : Array(UInt8))\n def public_key : EcdsaPublicKey\n # The public key's point, uncompressed: 0x04, then x and y, 48 bytes each.\n def public_point : Array(UInt8)\n # ECDH: x of [d]Q for the peer's point Q, 48 bytes big-endian - or why\n # *peer* is not a point of P-384 (checked before d is used), or why the\n # answer is no secret.\n def shared_secret(peer : Array(UInt8)) : Array(UInt8) | EcdsaError\n # The signature of *message* under *hash*: the DER of Ecdsa-Sig-Value,\n # SEQUENCE { r INTEGER, s INTEGER }, as X.509 and TLS 1.3 carry it. The\n # nonce is RFC 6979's, so the same key and message sign alike.\n def sign(hash : EcdsaHash, message : String | Array(UInt8)) : Array(UInt8)\n # The signature of a message whose digest under *hash* is *digest*, as\n # `sign` makes it - or why *digest* is not one of *hash*'s.\n def sign_digest(hash : EcdsaHash, digest : Array(UInt8)) : Array(UInt8) | EcdsaError\nend\n" }, + { + "name": "std/parallel", + "path": "src/std/parallel.iyi", + "sourceSha256": "fc94240d0df780804b0abb18b8dedc5e3429b0f301400f576f8ea645ca65592b", + "surface": "module std/parallel\n\n# The four verbs, on whatever can say how many elements it has and give\n# the sequence the chunks read (`ParallelRun.source`).\npub trait Parallel\n type Elem\n # The block on every element, in chunks the pool's tasks take one at a\n # time; nil, or the error the block answered for the lowest index that\n # answered one. A chunk is *grain* elements; 0 cuts `PIECES` chunks a\n # worker. The same for the three below.\n def each_parallel(grain : Int32 = 0, &block : (Elem -> R)) : R | ::Nil forall R\n # `map`'s answer, computed in chunks on the pool, in the elements' order.\n def map_parallel(grain : Int32 = 0, &block : (Elem -> U)) : Array(U) forall U\n # The elements folded with the block from *identity*, a chunk at a time.\n def reduce_parallel(identity : Elem, grain : Int32 = 0, &block : (Elem, Elem -> Elem)) : Elem\n # The sum of what the block answers for each element, and its type's\n # zero when there are none.\n def sum_parallel(grain : Int32 = 0, &block : (Elem -> U)) : U forall U\nend\n\n# :nodoc: - the engine the verbs share.\npub class ParallelRun\n # The chunk *at*'s bounds.\n def self.bounds(at : Int64, chunk : Int64, size : Int64) : ::Tuple(Int64, Int64)\n def self.each(source : S, grain : Int32, work : SharedProc(T, R)) : R | ::Nil forall S, T, R\n def self.each_here(source : S, size : Int64, chunk : Int64, work : SharedProc(T, R)) : R | ::Nil forall S, T, R\n # Each task answers the lowest index it saw fail, with its error, or\n # *size* and nothing. `failed_at` is the lowest any task has seen: no\n # chunk starting past it is begun, no element past it is run, and\n # every element before it still is.\n def self.each_tasks(source : S, size : Int64, chunk : Int64, chunks : Int64, tasks : Int32, work : SharedProc(T, R)) : Array(IyiTask(::Tuple(Int64, Array(R)))) forall S, T, R\n def self.fetch(list : List(T), index : Int64) : T forall T\n def self.fetch(range : Range(Int32, Int32), index : Int64) : Int32\n def self.fetch(range : Range(Int64, Int64), index : Int64) : Int64\n def self.map(source : S, grain : Int32, work : SharedProc(T, U)) : Array(U) forall S, T, U\n def self.map_here(source : S, size : Int64, chunk : Int64, work : SharedProc(T, U)) : Array(U) forall S, T, U\n # The tasks, each taking chunks until none is left, and each answering\n # the chunks it ran by number; joined before this answers.\n def self.map_tasks(source : S, size : Int64, chunk : Int64, chunks : Int64, tasks : Int32, work : SharedProc(T, U)) : Array(IyiTask(Array(::Tuple(Int64, Array(U))))) forall S, T, U\n # How the elements are cut: {elements a chunk, chunks, tasks to take\n # them}, and 0 tasks when the caller runs them itself - one worker, one\n # chunk, or a build with no threads.\n def self.plan(size : Int64, grain : Int32) : ::Tuple(Int64, Int64, Int32)\n def self.reduce(source : S, identity : T, grain : Int32, work : SharedProc(::Tuple(T, T), T)) : T forall S, T\n def self.reduce_here(source : S, identity : T, size : Int64, chunk : Int64, work : SharedProc(::Tuple(T, T), T)) : T forall S, T\n def self.reduce_tasks(source : S, identity : T, size : Int64, chunk : Int64, chunks : Int64, tasks : Int32, work : SharedProc(::Tuple(T, T), T)) : Array(IyiTask(Array(::Tuple(Int64, T)))) forall S, T\n def self.size(list : List(T)) : Int64 forall T\n def self.size(range : Range(B, E)) : Int64 forall B, E\n # The sequence the chunks read, which nothing may write while they do.\n def self.source(list : List(T)) : List(T) forall T\n def self.source(array : Array(T)) : List(T) forall T\n def self.source(range : Range(Int32, Int32)) : Range(Int32, Int32)\n def self.source(range : Range(Int64, Int64)) : Range(Int64, Int64)\n # The caller, cancelled while the chunks ran, does not see what they\n # left: it stops here, as a cancelled task joining another does.\n def self.stop_if_cancelled : Nil\n def self.sum(source : S, grain : Int32, work : SharedProc(T, U)) : U forall S, T, U\n def self.sum_here(source : S, size : Int64, chunk : Int64, work : SharedProc(T, U)) : U forall S, T, U\n def self.sum_tasks(source : S, size : Int64, chunk : Int64, chunks : Int64, tasks : Int32, work : SharedProc(T, U)) : Array(IyiTask(Array(::Tuple(Int64, U)))) forall S, T, U\nend\n\nimpl Parallel for Std::List::List(T) forall T\nend\n\nimpl Parallel for Array(T) forall T\nend\n\nimpl Parallel for Range(B, E) forall B, E\nend\n" + }, { "name": "std/password", "path": "src/std/password.iyi", - "sourceSha256": "f29e48291275b0af500b4635f7a1722ac6f425055ff97bb4db16950f5cc4e922", + "sourceSha256": "50ee9c764b7416547f10410e00c5c412414e22abcb69fdcd8fae2000b87760c5", "surface": "module std/password\n\n# bcrypt, Provos and Mazières (USENIX 1999), as OpenBSD's `bcrypt.c`\n# writes it and Crystal's `Crypto::Bcrypt::Password` reads it: a password\n# hashed into a 60-character string that carries its own cost and salt,\n#\n# $2b$11$ 22 characters of salt 31 characters of hash\n#\n# both in bcrypt's own base64 (`./A-Za-z0-9`, no padding). `hash` draws 16\n# bytes of salt from `Random::Secure` and writes `$2b$`; `verify` reads\n# `$2a$`, `$2b$` and `$2y$`, hashes the password again under the salt and\n# cost it finds, and compares the two strings with\n# `Subtle.constant_time_compare`, so how long a wrong guess takes does not\n# say how much of it was right.\n#\n# The password is OpenBSD's key: its bytes up to the first NUL, cut to 72\n# bytes, then a NUL, and only the first 72 bytes of that matter. So a\n# password's 73rd byte onwards changes nothing, and neither does anything\n# after a NUL: \"a\\0b\" hashes as \"a\" does, which is what OpenBSD's C, with\n# its `strlen`, does with it. OpenBSD's `$2a$` once counted the length in a\n# byte and wrapped at 255 (the reason for `$2b$`); this reads `$2a$` as\n# `$2b$`, so a `$2a$` hash that old code made of a password of 255 bytes or\n# more does not verify here.\n#\n# *cost* is the log2 of the number of key-schedule passes: each one more\n# doubles the time. 11 is Crystal's default and this one's; outside 4 to\n# 31 `hash` panics with a sentence. A stored hash is data, and a malformed\n# one, or one whose cost is outside 4 to 31, does not verify: `verify`\n# answers false for it rather than ending the task.\npub struct Bcrypt\n def self.hash(password : String | Array(UInt8), cost : Int32 = 11) : String\n def initialize\n def self.verify(password : String | Array(UInt8), hash : String) : Bool\nend\n\n# scrypt, RFC 7914: PBKDF2-HMAC-SHA256 spread into *p* blocks of `128 * r`\n# bytes, each block walked through a table of *n* versions of itself\n# (ROMix) by BlockMix, a chain of Salsa20/8 cores, and PBKDF2 once more\n# over what comes out. The table is what makes it costly to guess at: a\n# guess needs `128 * r * n` bytes of memory, or the time to recompute\n# what it did not keep. RFC 7914's interactive-login figure is n = 16384,\n# r = 8, p = 1, sixteen mebibytes.\n#\n# *max_memory* is a refusal, not a cap: the parameters ask for\n# `128 * r * p + 128 * r * (n + 2)` bytes, which is how OpenSSL counts\n# them, and past the limit the call panics rather than allocate. Its\n# default, 32 MiB, is OpenSSL's and so Python's, so a call one library\n# accepts the other accepts too. Refused with a sentence besides: an *n*\n# that is not a power of two above 1, or not below 2^(16r) (RFC 7914 §2;\n# OpenSSL refuses it too), an *r*, *p* or length below one, and a\n# `128 * r * p` that does not fit an `Int32` (p * r of 2^24 and up).\npub struct Scrypt\n def self.derive(password : String | Array(UInt8), salt : String | Array(UInt8), n : Int32, r : Int32, p : Int32, length : Int32, max_memory : Int64 = 33554432_i64) : Array(UInt8)\n def initialize\nend\n" }, { "name": "std/path", "path": "src/std/path.iyi", - "sourceSha256": "4dc17d742d5722934c344aa57cd8b82a25cf158a94a900467fc2955745f662ed", + "sourceSha256": "f23959d538f2e27eeff22ba53deee1ce66247f114a073a01bb8af31cf9a0354f", "surface": "module std/path\n\npub struct Path\n enum Kind : UInt8\n POSIX = 0_u8\n WINDOWS = 1_u8\n def self.native : Kind\n # Returns `true` if this enum value equals `POSIX`\n def posix? : Bool\n # Returns `true` if this enum value equals `WINDOWS`\n def windows? : Bool\n end\n def /(part : String | Path) : Path\n def <=>(other : Path) : Int32\n def ==(other : Path) : Bool\n def self.[](first : String | Path, second : String | Path, third : String | Path) : Path\n def self.[](first : String | Path, second : String | Path) : Path\n def self.[](name : String = \"\") : Path\n def self.[](parts : Array(String)) : Path\n # A share is absolute without a separator after it: `\\\\server\\share` is\n # the share's root, as Windows and Python read it. It was relative, so\n # after `Dir.cd` to a share every `expand` panicked \"base is not\n # absolute\".\n def absolute? : Bool\n def anchor : String | ::Nil\n # The last component; the anchor, or the empty name, is its own. A\n # *suffix* found at the end is left off.\n def basename(suffix : String | ::Nil = nil) : String\n def self.compare_strings(s1 : String, s2 : String) : Int32\n # As the two names' `windows_fold`s compare, read here without folding\n # either while both are ASCII.\n def self.compare_strings_ci(s1 : String, s2 : String) : Int32\n # Everything before the last component: `\".\"` for a bare name, the\n # anchor for a single component under it.\n def dirname : String\n def drive : String | ::Nil\n def each_parent(&block : (Path -> Nil)) : Nil\n def each_part(&block : (String -> Nil)) : Nil\n def empty? : Bool\n def ends_with_separator? : Bool\n # Absolute and normalized, under *base* when relative. *base* is\n # `Program.env(\"PWD\")` when not given (on Windows, never), the\n # process's own directory when nothing set that, and a relative path\n # with neither is refused.\n # `home: true` reads a leading `~` from the home directory the\n # platform names (see `home_directory`).\n def expand(base : Path | String | Nil = nil, home : Bool = false) : Path\n # The last `.suffix` of the basename, with its dot; none for a name\n # that starts with its only dot (`.bashrc`) or ends with one (`foo.`).\n def extension : String\n def hash : Int32\n def initialize(name : String = \"\", kind : Kind = Kind.native)\n def inspect(io : IO) : Nil\n # A path of the kind this platform does not use names its constructor,\n # as the other library writes it: `Path.posix(\"/usr/bin\")` on Windows\n # inspected as `Path[\"/usr/bin\"]`, a Windows path, which `==` tells\n # apart from it.\n def inspect : String\n def join(first : String | Path, second : String | Path, third : String | Path) : Path\n def join(first : String | Path, second : String | Path) : Path\n # `self` with *part* under it; a *part* with an anchor of its own is\n # the answer by itself, and an empty one changes nothing. A Windows\n # anchor can be half of one, and then the other half is `self`'s, as\n # ntpath joins and Windows reads the name: a root with no drive is on\n # `self`'s drive, and a drive-relative *part* on `self`'s drive goes\n # under `self`. Answered by itself, `C:\\a` joined with `\\b` was `\\b`,\n # a root on whatever drive is current, and with `C:b` it was `C:b`,\n # where `expand` read both on `C:\\a`.\n def join(part : String) : Path\n def join(part : Path) : Path\n def join(parts : Array(String)) : Path\n def kind : Kind\n def name : String\n def native? : Bool\n def self.new(path : Path) : Path\n # `.` dropped, `..` folded into the component before it (kept at the\n # front of a relative path, dropped under a root), separators collapsed.\n def normalize : Path\n def parent : Path\n # Every ancestor, the outermost first: `\"a/b/c\"` has `\".\"`, `\"a\"`,\n # `\"a/b\"`; `\"/a/b\"` has `\"/\"`, `\"/a\"`. Each is a `parent` of the one\n # after it, so it keeps the spelling `parent` keeps: rebuilt from\n # `parts` and joined with `separator`, `Path.windows(\"C:/a/b/c\")` had\n # `\"C:/a\\\\b\"` where its `parent` is `\"C:/a/b\"`.\n def parents : Array(Path)\n # The anchor, if any, then each non-empty component.\n def parts : Array(String)\n def self.posix(name : String = \"\") : Path\n def posix? : Bool\n def relative? : Bool\n def relative_to(base : Path | String) : Path\n # The path that reaches `self` from *base*, or nil where none can be\n # spelled: different anchors, or a *base* that climbs through `..`.\n def relative_to?(base : Path | String) : Path | ::Nil\n def root : String | ::Nil\n # The anchor with the root a share has whether written or not.\n protected def rooted_anchor : String\n def sibling(name : String | Path) : Path\n def stem : String\n def to_kind(kind : Kind) : Path\n def to_native : Path\n def to_posix : Path\n def to_s(io : IO) : Nil\n def to_s : String\n def to_windows : Path\n def self.windows(name : String = \"\") : Path\n def windows? : Bool\n # *s* as a Windows name compares: `/` written `\\`, ASCII letters lower\n # case, and on Windows every other letter in the case its file systems\n # fold it to - LCMAP_UPPERCASE without linguistic casing, measured to\n # make the same classes as CompareStringOrdinal's on every BMP unit. A\n # surrogate pair stays as written, as both leave it. ASCII alone folded,\n # `C:\\Ä` and `c:\\ä` were two paths where NTFS has one file; built for\n # another platform there is no table to ask, and ASCII alone is folded.\n def self.windows_fold(s : String) : String\nend\n\nimpl Std::Traits::Comparable for Path\n def <=>(other : self) : Int32\nend\n" }, { "name": "std/png", "path": "src/std/png.iyi", - "sourceSha256": "7be25c27293df2ca5e6f59d0e711e6316e23bd675d364534f45511b7c55a3ea9", + "sourceSha256": "20919d5887d367148d507a910c44987539064e7fa0059437e7b63cb063828d58", "surface": "module std/png\n\n# Pixels, row after row from the top, each pixel's samples in `layout`\n# order; a sample is one byte at depth 8, two (big-endian, as PNG stores\n# them) at depth 16. `transparent`, for a Gray or RGB image, is the one\n# color that is to be read as transparent (a gray value, or red, green and\n# blue), in the image's own depth.\npub class Image\n def channels : Int32\n def self.channels_of(layout : Layout) : Int32\n def depth : Int32\n def height : Int32\n def initialize(width : Int32, height : Int32, layout : Layout, depth : Int32, samples : String, transparent : Array(Int32) | ::Nil = nil)\n def layout : Layout\n def self.layout_name(layout : Layout) : String\n # Sample *c* of the pixel at column *x*, row *y*: 0 to 255, or to 65535\n # at depth 16. Outside the image, a panic.\n def sample(x : Int32, y : Int32, c : Int32) : Int32\n def samples : String\n # Four bytes a pixel, red, green, blue and alpha. A gray sample is all\n # three colors; a pixel of the transparent color has alpha 0, any other\n # without an alpha sample 255; a 16-bit sample is its high byte.\n def to_rgba8 : String\n def transparent : Array(Int32) | ::Nil\n def width : Int32\nend\n\n# Which samples a pixel has, in the order they are stored.\npub enum Layout : Int32\n Gray = 0\n GrayAlpha = 1\n RGB = 2\n RGBA = 3\nend\n\npub struct Png\n def self.assemble(width : Int32, height : Int32, depth : Int32, ctype : Int32, interlace : Bool, plte : String, trns : String, texts : Array(::Tuple(String, String)), filtered : String) : String\n def self.chunk(io : String::Builder, name : String, data : String) : Nil\n # The file in *data*, decoded; or what is wrong with it. A file whose\n # IHDR claims more than *max_pixels* pixels is refused before anything\n # is allocated for them.\n def self.decode(data : String, max_pixels : Int64 = MAX_PIXELS) : PngFile | PngError\n # *image* as a PNG file. *texts* are written as tEXt chunks, keyword\n # and text, or as iTXt where the text is not Latin-1.\n def self.encode(image : Image, interlace : Bool = false, texts : Array(::Tuple(String, String)) = [] of ::Tuple(String, String)) : String\n # A palette image: *indices* one byte a pixel, row after row, each an\n # entry of *palette*, whose entries are red, green, blue and alpha. The\n # bit depth is the smallest of 1, 2, 4 and 8 the palette fits; tRNS is\n # written up to the last entry that is not opaque.\n def self.encode_indexed(width : Int32, height : Int32, indices : String, palette : Array(::Tuple(Int32, Int32, Int32, Int32)), interlace : Bool = false, texts : Array(::Tuple(String, String)) = [] of ::Tuple(String, String)) : String\n # A zlib stream in a metadata chunk, inflated to at most MAX_METADATA.\n def self.inflate_metadata(stream : String, name : String) : String | PngError\n def initialize\n # The image data inflated into exactly the bytes IHDR promised, the\n # filters undone, and the pixels laid out.\n def self.pixels(d : PngDecode, data : String, idats : Array(::Tuple(Int32, Int32))) : Image | PngError\n # tEXt, zTXt or iTXt (sections 11.3.3.2-4).\n def self.read_text(name : String, p : Pointer(UInt8), body : Int32, len : Int32) : PngText | PngError\n # A keyword is 1 to 79 Latin-1 printable bytes, no space at either end\n # and no two together (section 11.3.3.2): anything else is a panic.\n def self.text_chunk(keyword : String, text : String) : ::Tuple(String, String)\nend\n\n# What is wrong with a PNG file: `message` names the chunk, and its offset\n# in the file where that helps.\npub struct PngError\n def initialize(message : String)\n def to_s : String\nend\n\n# A decoded file: the image and what the file said about it.\npub class PngFile\n def bit_depth : Int32\n # IHDR's color type (0, 2, 3, 4 or 6) and bit depth, as written.\n def color_type : Int32\n # gAMA's value, the gamma times 100,000; nil without one.\n def gamma : Int32 | ::Nil\n # iCCP's profile name and the profile inflated; nil without one.\n def icc_name : String | ::Nil\n def icc_profile : String | ::Nil\n def image : Image\n def initialize(image : Image, color_type : Int32, bit_depth : Int32, interlaced : Bool, palette : String, transparency : String, gamma : Int32 | ::Nil, srgb_intent : Int32 | ::Nil, icc_name : String | ::Nil, icc_profile : String | ::Nil, texts : Array(PngText), skipped : Array(String))\n def interlaced : Bool\n # PLTE's entries, red, green and blue a byte each; \"\" without one.\n def palette : String\n # The ancillary chunks skipped, by name, in file order.\n def skipped : Array(String)\n # sRGB's rendering intent, 0 to 3; nil without one.\n def srgb_intent : Int32 | ::Nil\n def texts : Array(PngText)\n # tRNS as written: an alpha byte per palette entry, or the transparent\n # gray or RGB sample(s) as two bytes each; \"\" without one.\n def transparency : String\nend\n\n# A tEXt, zTXt or iTXt chunk: `chunk` says which. `language` and\n# `translated_keyword` are iTXt's, \"\" for the other two.\npub class PngText\n def chunk : String\n def initialize(chunk : String, keyword : String, text : String, language : String = \"\", translated_keyword : String = \"\")\n def keyword : String\n def language : String\n def text : String\n def translated_keyword : String\nend\n\nimpl Error for PngError\n def message : String\nend\n" }, { "name": "std/process", "path": "src/std/process.iyi", - "sourceSha256": "afad6c79111206b02bfb15419101ae82c131cdabc51d6e268de0c20eb0e3da14", + "sourceSha256": "5c40c07b1e28f457575a1048916da99c7de894be1ecdfd37889e402027f9a8e5", "surface": "module std/process\n\n# The child's standard input, as a pipe this program writes.\npub class ChildInput\n # Closes the pipe: the child reads the end of its input.\n def close : Nil\n def initialize(child : ProcessChild)\n # Writes all of *text*, parking while the pipe is full. A child that\n # closed its input, or ended, is `ChildInputClosed`; `close` has made it\n # so too.\n def write(text : String) : Nil | ChildInputClosed | Cancelled\nend\n\n# A write to a child that had closed its input - or ended.\npub struct ChildInputClosed\n def initialize(pid : Int64)\n def pid : Int64\nend\n\n# One of the child's output streams, as a pipe this program reads. Each\n# read parks until the child has written, or its end of the pipe closed.\npub class ChildOutput\n def initialize(child : ProcessChild, output : ::Bool)\n # What the child has written that this program has not read, up to\n # *max* bytes, once there is some: nil at the end.\n def read(max : Int32 = 65536) : String | ::Nil | Cancelled\n # Everything the child writes from here to its end.\n def read_all : String | Cancelled\n # The next line, without its `\\n` (and a `\\r` before it) unless *chomp*\n # is false; the last one need not end in one. nil at the end.\n def read_line(chomp : ::Bool = true) : String | ::Nil | Cancelled\nend\n\n# A child started by `Process.spawn`, running beside this program.\npub class ChildProcess\n # Whether the child has ended, without waiting; once it has, `status`\n # says how.\n def ended? : ::Bool\n def initialize(child : ProcessChild, input : ::Bool, output : ::Bool, error : ::Bool)\n # Ends the child: SIGKILL on Linux and darwin, and on Windows the child\n # and every program it started. Nothing once it has ended.\n def kill : Nil\n # The child's process id, which the operating system may give another\n # process once this one has ended and been waited for.\n def pid : Int64\n # Sends *number* to the child, Linux and darwin. Windows has no signals,\n # and a call there panics: `terminate` and `kill` are what it has.\n def signal(number : Int32) : Nil\n # How the child ended, once it has; nil while it runs.\n def status : ProcessStatus | ::Nil\n # The child's standard error, asked for as `Redirect::Pipe`.\n def stderr : ChildOutput\n # The child's standard input, asked for as `Redirect::Pipe`.\n def stdin : ChildInput\n # The child's standard output, asked for as `Redirect::Pipe`.\n def stdout : ChildOutput\n # Asks the child to stop: SIGTERM on Linux and darwin, which it may\n # handle. Windows has no request to stop a program, and ends it and what\n # it started, as `kill` does. Nothing once it has ended.\n def terminate : Nil\n # Parks until the child has ended and answers how; at once if it had.\n # Its input, if a pipe, is closed first: a child reading to the end of\n # its input would otherwise wait for this program while this program\n # waits for it.\n def wait : ProcessStatus | Cancelled\nend\n\npub struct Process\n # Replaces this program with *command*, and answers only if it could not:\n # a `ProcessError`, with this program as it was, in the directory it was.\n #\n # On Linux and darwin the process becomes the program - the same pid,\n # this program's three standard streams and none of its other\n # descriptors (on Linux from 5.11, which marks them for the exec) - and\n # nothing after the call runs. Windows cannot replace a program: there\n # the program runs on this program's streams, this program waits for it\n # and ends with its exit code, and a pid is not kept.\n #\n # *command*, *args*, *chdir* and *env* are `run`'s. What this program had\n # written to its own buffered streams is flushed first.\n def self.exec(command : String, args : Array(String) = [] of String, chdir : String | ::Nil = nil, env : Hash(String, String) | Hash(String, String | ::Nil) | Hash(String, Nil) | Nil = nil) : ProcessError\n # This program's own executable, as a path; nil where the platform will\n # not say.\n def self.executable : String | ::Nil\n def initialize\n # This program's own process id.\n def self.pid : Int64\n # Runs *command* with *args* and answers once it has ended.\n #\n # *command* is a path, or a name looked for on `PATH` (on Windows also as\n # `NAME.exe` and `NAME.com`; a `.bat` or `.cmd` is refused). Each of\n # *args* reaches the child as one argument, and no shell reads them.\n # *input* is written to the child's standard input, and without it the\n # child reads nothing. *chdir* is the directory it runs in. *env* changes\n # the child's environment alone: a name given a value is set, a name\n # given `nil` removed. With *capture* false the child writes to this\n # program's own streams and the result's texts are empty.\n #\n # Answers a `ProcessResult` for a child that ran, whatever its exit code;\n # a `ProcessError` when it could not be started; and `Cancelled`, after\n # the child is ended, when the task running this is cancelled. Nothing\n # blocks the thread: the other tasks run while the child does.\n def self.run(command : String, args : Array(String) = [] of String, input : String | ::Nil = nil, chdir : String | ::Nil = nil, capture : ::Bool = true, env : Hash(String, String) | Hash(String, String | ::Nil) | Hash(String, Nil) | Nil = nil) : ProcessResult | ProcessError | Cancelled\n # Starts *command* and answers at once with the running child, which\n # this program then talks to and waits for: `ChildProcess`.\n #\n # *command*, *args*, *chdir* and *env* are `run`'s. Each of *input*,\n # *output* and *error* is a `Redirect`: `Pipe` to write the child's input\n # or read its output through the handle, `Inherit` to share this\n # program's own stream (which is flushed first), `Null` for the null\n # device. All three are inherited unless asked.\n #\n # Answers a `ProcessError` when the child could not be started.\n #\n # The child runs until it ends or is ended; `wait` collects its end and\n # is what a program owes every child it starts. A pipe nobody reads fills\n # and stops the child that writes it, so read what is asked for as a\n # pipe - on two tasks at once for both output and errors - before or\n # while waiting. A task cancelled in any of the handle's calls ends the\n # child before it answers `Cancelled`, as `run` does: a task that stops\n # leaves no program running.\n def self.spawn(command : String, args : Array(String) = [] of String, input : Redirect = Redirect::Inherit, output : Redirect = Redirect::Inherit, error : Redirect = Redirect::Inherit, chdir : String | ::Nil = nil, env : Hash(String, String) | Hash(String, String | ::Nil) | Hash(String, Nil) | Nil = nil) : ChildProcess | ProcessError\nend\n\n# A program that could not be started, and the platform's error number for\n# why. `directory` is set when it was the directory it was to run in.\npub struct ProcessError\n def code : Int32\n def command : String\n def denied? : ::Bool\n def directory : String | ::Nil\n def initialize(command : String, code : Int32, directory : String | ::Nil = nil)\n # Nothing by that name: not on PATH, no such file, no such directory.\n def not_found? : ::Bool\n def reason : String\nend\n\n# What a program that ran came back with. `exit_code` is the child's own;\n# on Linux and darwin a child ended by a signal has `signal` set and the\n# exit code a shell would report for it, 128 plus the signal. On Windows\n# `signal` is always 0 and a crash is its exception code, `0xC0000005` for\n# an access violation, read as an Int32.\npub struct ProcessResult\n def exit_code : Int32\n def initialize(exit_code : Int32, signal : Int32, stdout : String, stderr : String)\n def signal : Int32\n def stderr : String\n def stdout : String\n def success? : ::Bool\nend\n\n# How a child ended: `exit_code`, and on Linux and darwin the `signal`\n# that ended it, as `ProcessResult` says them.\npub struct ProcessStatus\n def exit_code : Int32\n def initialize(exit_code : Int32, signal : Int32)\n def signal : Int32\n def success? : ::Bool\nend\n\n# How one of a spawned child's standard streams is connected.\npub enum Redirect : Int32\n Pipe = 0\n Inherit = 1\n Null = 2\nend\n\nimpl Error for ProcessError\n def message : String\nend\n\nimpl Error for ChildInputClosed\n def message : String\nend\n" }, { "name": "std/random", "path": "src/std/random.iyi", - "sourceSha256": "63c494faac054e6f96737ebb73e0edcaeaba7222a07d15355db09ef154091f0c", + "sourceSha256": "86c85a4d3c05e929fdaa2c9055b93092ac941b3fd21747a41e1c1dad6ff78b2d", "surface": "module std/random\n\npub class Random\n # The operating system's randomness, for anything a guess must not reach:\n # tokens, keys, nonces, query IDs. It is a `Random`, so `rand(n)`,\n # `rand(range)`, `hex` and every other draw take their values from it, and\n # `Random::Secure.rand(n)` answers without an instance. There is no state to\n # seed: each draw is a fresh request to the kernel (or libSystem, or the\n # Windows or WASI host), and nothing is held between draws, so a `fork`\n # cannot hand the child the parent's next value.\n class Secure < ::Std::Random::Random\n # *count* bytes at *buffer*, every one from the platform's entropy source,\n # or a panic that says why there are none: a byte that only looks random\n # is never the answer.\n def self.fill(buffer : Pointer(UInt8), count : Int32) : Nil\n # The generator fields a `Random` carries, which nothing here reads.\n def initialize\n def next_u : UInt32\n # The whole buffer in one request rather than four bytes at a time.\n def random_bytes(buffer : Array(UInt8)) : Nil\n end\n # *n* random bytes in base64 with `+` `/` and `=` padding, no line breaks.\n def base64(n : Int32 = 16) : String\n def self.base64(n : Int32 = 16) : String\n # *n* random bytes as two lowercase hex digits each.\n def hex(n : Int32 = 16) : String\n def self.hex(n : Int32 = 16) : String\n # The stream came from the seed, and one seed was one stream: the other\n # library takes the stream apart from the seed, zero unless asked, and\n # the same seed gave two different sequences in the two libraries.\n def initialize(seed : UInt64, sequence : UInt64 = 0_u64)\n # Any integer seed and sequence, as the other library takes them. There\n # were two overloads, an `Int32` and an `Int64` seed with a `UInt64`\n # sequence, beside this class's own `UInt64` pair: `Random.new(7, 3)`,\n # the form the comment above writes, cast its literals to all three and\n # was an ambiguous call, and a `UInt32` seed matched none of them. A\n # negative seed or sequence panics in the conversion, as it raises there.\n def self.new(seed : ::Int, sequence : ::Int = 0_u64) : Random\n def self.new : Random\n def next_bool : Bool\n def self.next_bool : Bool\n # 2^53 values, the high draw first: two 32-bit draws make the integer,\n # and it is divided by 2^53 - 1, so both ends can come out.\n def next_float : Float64\n def next_u : UInt32\n # The same draws without a generator in hand, from one seeded the first\n # time it is asked, as the other library's `Random.rand` draws from its\n # default. `Random::Secure.rand(...)` and the rest are these, answered by\n # the operating system instead.\n def self.next_u : UInt32\n def rand(n : Int32) : Int32\n def rand(n : UInt32) : UInt32\n def rand(n : Int64) : Int64\n def rand(n : UInt64) : UInt64\n # In `[0, x)`: 2^53 evenly spaced values, scaled. Not `rand * x`, which\n # divides by 2^53 - 1 and can answer *x* itself.\n def rand(x : Float64) : Float64\n # The span is taken as the unsigned difference, so a range across zero\n # does not overflow on the way. The whole of `Int32` is one draw read as\n # an `Int32`, as the other library reads it, rather than added to the\n # bottom of the range, which would answer the same value with its top\n # bit turned over.\n def rand(range : Range(Int32, Int32)) : Int32\n # As the `Int32` range: the whole of `Int64` is 2^64 values, one more than\n # a `UInt64` span can count, and is two draws, high first, read as one.\n def rand(range : Range(Int64, Int64)) : Int64\n # An end left out is the other library's choice too: `rand(x)` cannot\n # reach *x*, and an inclusive range scales `rand`, which can.\n def rand(range : Range(Float64, Float64)) : Float64\n def rand : Float64\n def self.rand(n : Int32) : Int32\n def self.rand(n : UInt32) : UInt32\n def self.rand(n : Int64) : Int64\n def self.rand(n : UInt64) : UInt64\n def self.rand(x : Float64) : Float64\n def self.rand(range : Range(Int32, Int32)) : Int32\n def self.rand(range : Range(Int64, Int64)) : Int64\n def self.rand(range : Range(Float64, Float64)) : Float64\n def self.rand : Float64\n # Four bytes a draw, low byte first, the last draw cut short: a seeded\n # generator fills a buffer with the other library's bytes.\n #\n # The bytes are an `Array(UInt8)`, as `UUID#bytes` and std/digest's\n # `hash_bytes` are, rather than the other library's `Bytes`: std/slice\n # reaches this module through std/indexable's `sample`, and an import\n # back would be a cycle.\n def random_bytes(buffer : Array(UInt8)) : Nil\n def random_bytes(n : Int32 = 16) : Array(UInt8)\n def self.random_bytes(buffer : Array(UInt8)) : Nil\n def self.random_bytes(n : Int32 = 16) : Array(UInt8)\n # The bytes as a String, which is how std/base64 takes them.\n protected def self.text_of(bytes : Array(UInt8)) : String\n # *n* random bytes in the URL-safe alphabet, `-` and `_`; unpadded unless\n # asked, as the other library answers it, since a token in a URL or a\n # file name has no use for the `=`.\n def urlsafe_base64(n : Int32 = 16, padding : Bool = false) : String\n def self.urlsafe_base64(n : Int32 = 16, padding : Bool = false) : String\nend\n\nclass ::Array(T)\n def sample(random : Std::Random::Random | ::Nil = nil) : T\n # *n* distinct elements. One is `sample` in a list; more are a reservoir\n # (each element past the first *n* replaces a slot with probability\n # n/(i+1)) shuffled at the end - both as the other library does it.\n def sample(n : Int32, random : Std::Random::Random | ::Nil = nil) : Array(T)\n def shuffle(random : Std::Random::Random | ::Nil = nil) : Array(T)\n # Fisher-Yates from the back, `rand(i + 1)` a step: the other library's\n # `shuffle!`, so a seeded generator puts the elements where it would.\n def shuffle_in_place(random : Std::Random::Random | ::Nil = nil) : Array(T)\nend\n\nstruct ::StaticArray(T, N)\n def initialize\n # `Array#shuffle_in_place` for the array that holds its elements inline:\n # the other library's `StaticArray#shuffle!`, the same draws in the same\n # order, so a seeded generator puts the elements where it would. Its\n # sample of noise does exactly this to a 256-entry permutation table.\n def shuffle_in_place(random : Std::Random::Random | ::Nil = nil) : self\nend\n" }, { "name": "std/reference_storage", "path": "src/std/reference_storage.iyi", - "sourceSha256": "eeee691e8ebd184a7e654c2ee616aaee68d6d5d193de9c25853395a5a9bc5957", + "sourceSha256": "b047e709ee67ee8d747c01aad8046dd869ac1e30f46b8526a404ccbad4fa355f", "surface": "module std/reference_storage\n\npub struct ReferenceStorage(T) < Value\n # Field-wise, with class fields compared by identity. `T#==` on a\n # `String` field follows the pointer, so uninitialized storage died of\n # a memory fault; two storages with equal string contents at different\n # addresses compared equal while `hash` mixed the pointer bytes. Whole-\n # blob compare is also wrong: `other` is passed by value and padding\n # bytes are not copied, so two constructed `Node`s compared unequal.\n def ==(other : ReferenceStorage(T)) : Bool\n def ==(other : Object) : Bool\n # Field by field, exactly as `==` compares: a class field by its\n # identity, any other by its own `hash`, mixed with a wrapping step\n # (checked `h * 31` panicked once `instance_sizeof(T)` passed a few\n # bytes). Mixing the raw bytes disagreed with `==`: a `Float64` field\n # holding `0.0` and one holding `-0.0` compare equal and differ in their\n # sign bit, and a `String?` field compares by content while its bytes\n # are the pointer, so equal storages hashed apart.\n def hash : Int32\n def initialize\n def inspect : String\n def to_reference : T\n def to_s : String\nend\n\nclass ::Reference\n def self.pre_initialize(address : Pointer)\n def self.unsafe_construct(address : Pointer, *args, **opts) : self\nend\n" }, { "name": "std/regex", "path": "src/std/regex.iyi", - "sourceSha256": "a606bf1b00791cd897309faf04248074e1efafa47f1c7cb5e72538e2321fed35", + "sourceSha256": "172a184987ebe364aed92606428e63c78eb346f741d5a28e51cdab88bd524067", "surface": "module std/regex\n\npub struct Regex\n # One match: the text it was found in and where each group began and\n # ended, in bytes. A group that took no part in the match - the second\n # of `(a)|(b)` when `a` matched, `(x)?` when `x` did not - has no span,\n # and `[]?` answers nil for it.\n class MatchData\n # The text group *n* matched. A group the pattern does not have, or one\n # that took no part in this match, is a mistake the program made, and\n # it panics with the reason.\n def [](n : Int32) : String\n # The text the group called *name* matched; a name the pattern does not\n # have, or a group that took no part, panics with the reason.\n def [](name : String) : String\n # The text group *n* matched, or nil for a group that took no part or\n # that the pattern does not have.\n def []?(n : Int32) : String | ::Nil\n # The text the group called *name* matched, or nil for a group that\n # took no part or a name the pattern does not have.\n def []?(name : String) : String | ::Nil\n # Where group *n* begins, in characters, as the other library counts:\n # `\"クリスタル\".match(/リ(ス)/).begin(0)` is 1 where `byte_begin` is 3.\n def begin(n : Int32 = 0) : Int32\n # Where group *n* begins, in bytes: what `String#[]` and `index` count\n # in. A negative *n* counts from the last group.\n def byte_begin(n : Int32 = 0) : Int32\n # Where group *n* ends, in bytes.\n def byte_end(n : Int32 = 0) : Int32\n # What each unnamed group matched, in order, nil for one that took no\n # part; the named ones are `named_captures`, as in the other library.\n def captures : Array(String | ::Nil)\n # Where group *n* ends, in characters.\n def end(n : Int32 = 0) : Int32\n # *replacement* with its references filled from this match: `\\0` to\n # `\\9` are groups, `\\k` a named one, `\\\\` one backslash, and any\n # other `\\` is itself - how the other library reads the replacement\n # `String#sub` and `gsub` are given. A group that took no part is\n # empty; a name the pattern does not have panics.\n def expand(replacement : String) : String\n # How many capture groups the pattern has, the whole match not counted.\n def group_size : Int32\n def initialize(regex : Regex, string : String, slots : Array(Int32))\n # `Regex::MatchData(\"ab\" 1:\"a\" name:\"b\")`, as the other library writes it.\n def inspect : String\n # What each named group matched, nil for one that took no part.\n def named_captures : Hash(String, String | ::Nil)\n # The text after the match.\n def post_match : String\n # The text before the match.\n def pre_match : String\n # The pattern that matched.\n def regex : Regex\n # How many groups there are, the whole match counted: `(a)(b)` is 3.\n def size : Int32\n # The text the match was found in.\n def string : String\n # Every group, the whole match first.\n def to_a : Array(String | ::Nil)\n # The text the whole pattern matched.\n def to_s : String\n end\n # The flags a whole pattern is compiled with, combined with `|`. The\n # numbers are the other library's, which is what lets a literal's flags\n # (`/a/i`, `/a/mx`) reach this type unchanged.\n enum Options : Int32\n IGNORE_CASE = 1\n MULTILINE = 6\n DOTALL = 2\n MULTILINE_ONLY = 4\n EXTENDED = 8\n end\n # The same pattern with the same flags.\n def ==(other : Regex) : Bool\n # Whether the pattern occurs anywhere in *text*: what `case text when\n # /x/` asks.\n def ===(text : String) : Bool\n # Where the first match begins, in bytes, or nil. It sets nothing: the\n # other library's `=~` also fills `$~`, which iyi does not have, and a\n # program that wants the groups asks `match`.\n def =~(text : String) : Int32 | ::Nil\n # Where the first match at or after byte *offset* begins, in bytes, as\n # `String#byte_index` answers for a string.\n def byte_index(text : String, offset : Int32 = 0) : Int32 | ::Nil\n # How many capture groups the pattern has.\n def capture_count : Int32\n # The machine is compiled first either way: it is what refuses a pattern\n # this engine does not take, and the fast paths only ever see one it did.\n # They read the pattern's text as written, so a pattern with flags, which\n # change what that text means, is the machine's alone. So is one holding\n # U+FFFD: the machine reads a byte that begins no character as that\n # character, and comparing bytes would find only its three-byte spelling.\n def self.compile(pattern : String, options : Options = Options::None) : Regex\n # Every non-overlapping match with its groups, leftmost first, as `scan`\n # finds them.\n def each_match(text : String, & : (MatchData -> Nil)) : Nil\n # *text* with every character a pattern would read as an operator\n # escaped, so `Regex.compile(Regex.escape(text))` matches *text* and\n # nothing else - with `x` too, whose whitespace and `#` are escaped.\n def self.escape(text : String) : String\n def find(text : String) : String | ::Nil\n # The number of the group called *name*, or nil.\n def group_index(name : String) : Int32 | ::Nil\n # The name of group *n*, or nil for an unnamed group or one the pattern\n # does not have.\n def group_name(n : Int32) : String | ::Nil\n def initialize(nfa : RxNfa, literal : String | ::Nil, runs : RxRuns | ::Nil, source : String, options : Options, names : List(String | ::Nil))\n # The pattern as a literal would write it, `/a\\/b/ix`.\n def inspect : String\n # The first match at or after byte *pos*, with its groups; a negative\n # *pos* counts from the end. `^` and `\\A` still mean the start of the\n # text, not *pos*.\n def match(text : String, pos : Int32 = 0) : MatchData | ::Nil\n # Whether the pattern spans the whole of *text*. The other library's\n # `match?` asks whether it occurs anywhere, which is `===` and\n # `String#matches?` here.\n def match?(text : String) : Bool\n # The match that begins exactly at byte *pos*, with its groups, or nil:\n # the other library's `match_at_byte_index` with `MatchOptions::ANCHORED`,\n # Python's `pattern.match(text, pos)`, what a scanner asks at its\n # offset. As there, the text before *pos* is still the text: `^` and\n # `\\A` mean its start, not *pos*, and `\\b` sees the byte before *pos*.\n # A negative *pos* counts from the end, as `match`'s does.\n def match_at(text : String, pos : Int32) : MatchData | ::Nil\n # Each named group's number and name.\n def name_table : Hash(Int32, String)\n # The other library's name for `compile`.\n def self.new(pattern : String, options : Options = Options::None) : Regex\n # The flags the pattern was compiled with; inline ones are the\n # pattern's own text and are not here.\n def options : Options\n # Every match replaced, into one buffer: `out = out + ...` copied all of\n # the text so far at each match, and eleven substitutions over a 60 MB\n # sequence with a million matches each did not finish. The replacement\n # is taken as written; `String#gsub` is the one that reads `\\1` in it.\n def replace(text : String, replacement : String) : String\n # Every match replaced by what the block answers for it — the per-match\n # substitution (`gsub(pattern, hash)` in the other library) that a fixed\n # replacement cannot say.\n def replace(text : String, & : (String -> String)) : String\n def scan(text : String) : Array(String)\n # The pattern as written, the other library's `Regex#source`: what a\n # literal was compiled from, for a program that prints its patterns.\n def source : String\n def split(text : String) : Array(String)\n # The pattern with its flags inside it, `(?i-msx:a+)`, which compiles to\n # a pattern that matches as this one does: what `union` joins.\n def to_s : String\n # One pattern matching any of *patterns*: a string as its own text, a\n # `Regex` with its flags kept to itself (`(?i-msx:...)`, its `to_s`).\n # The groups of every pattern after the first are numbered after the\n # groups before them.\n def self.union(patterns : Array(T)) : Regex forall T\n def self.union(*patterns : String | Regex) : Regex\nend\n\nclass ::String\n def =~(pattern : Std::Regex::Regex) : Int32 | ::Nil\n def gsub(pattern : Std::Regex::Regex, replacement : String) : String\n def gsub(pattern : Std::Regex::Regex, & : (String, Std::Regex::Regex::MatchData -> String)) : String\n # Each match replaced by its entry in *table*; a match the table has no\n # entry for is dropped, as the other library drops it.\n def gsub(pattern : Std::Regex::Regex, table : Hash(String, String)) : String\n def index(pattern : Std::Regex::Regex, offset : Int32 = 0) : Int32 | ::Nil\n def match(pattern : Std::Regex::Regex, pos : Int32 = 0) : Std::Regex::Regex::MatchData | ::Nil\n def matches?(pattern : Std::Regex::Regex) : Bool\n def scan(pattern : Std::Regex::Regex) : Array(Std::Regex::Regex::MatchData)\n def scan(pattern : Std::Regex::Regex, & : (Std::Regex::Regex::MatchData -> Nil)) : String\n def sub(pattern : Std::Regex::Regex, replacement : String) : String\n def sub(pattern : Std::Regex::Regex, & : (String, Std::Regex::Regex::MatchData -> String)) : String\nend\n" }, { "name": "std/router", "path": "src/std/router.iyi", - "sourceSha256": "46616dc94ec6b99be5edc5ff896bba1aec8f66faaa5c65587d76d9fec69c9647", + "sourceSha256": "61e0deea649f0870a719a8f386af043a0394dd381514967b3511bc0a441034ac", "surface": "module std/router\n\n# A route's pattern, `[METHOD ][HOST]/[PATH]`, parsed: what `Router#handle`\n# registers. `match` reads a request path's wildcards; `relation` and\n# `conflict` are the comparisons that decide precedence and refuse two\n# patterns neither of which is more specific.\npub class Pattern\n # Two relations of parts (methods, then each segment) as the relation\n # of the whole: a superset in one part and a subset in another is\n # neither, an overlap.\n def self.combine(first : Int32, second : Int32) : Int32\n # The sentence refusing this pattern beside *other*, nil when the two\n # can be registered together: when they have the same host and match\n # the same requests, or some requests in common with neither more\n # specific. It names both and a request both match.\n def conflict(other : Pattern) : String | ::Nil\n # Whether this pattern matched *pieces* without its trailing wildcard\n # taking anything: `/x/` on `/x/`, not on `/x/y`. What decides whether\n # `/x` is redirected to `/x/`.\n def exact?(pieces : Array(String)) : Bool\n def host : String\n # A wildcard's name: an ASCII letter or `_`, then letters, digits, `_`.\n def self.identifier?(name : String) : Bool\n def initialize(text : String, method : String, host : String, kinds : Array(Int32), names : Array(String))\n protected def kinds : List(Int32)\n # The wildcards' values when *path* - a request path, rooted and clean,\n # still percent-encoded - matches this pattern's path; nil when it does\n # not. The method and host are not looked at.\n def match(path : String) : Hash(String, String) | ::Nil\n # `match` on a path already cut into `pieces`.\n def match_pieces(pieces : Array(String)) : Hash(String, String) | ::Nil\n # Whether a request of *method* is one this pattern's method takes.\n def matches_method?(method : String) : Bool\n def method : String\n # Whether this pattern matches a strict subset of *other*'s requests,\n # methods and paths together; hosts are not compared.\n def more_specific?(other : Pattern) : Bool\n protected def names : List(String)\n # *text* read as a pattern, or why it is not one: an invalid method, no\n # `/` to start the path, a `{` in the host, a path a request's cleaned\n # path never equals (`//`, `.`, `..`), a wildcard that is not a whole\n # segment, `{$}` or `{name...}` before the end, a name that is not an\n # identifier or is used twice, a malformed percent escape.\n def self.parse(text : String) : Pattern | RouterError\n # *path*'s segments after its first `/`, each percent-decoded: `/` is\n # one empty piece, and a trailing slash is a last empty one. Nil for a\n # path that is not rooted or holds a malformed escape. Decoded a segment\n # at a time, so `%2F` is inside a segment, never between two.\n def self.pieces(path : String) : Array(String) | ::Nil\n # How this pattern's requests relate to *other*'s, methods and paths\n # together: `EQUIVALENT`, `MORE_GENERAL`, `MORE_SPECIFIC`, `DISJOINT` or\n # `OVERLAPS`.\n def relation(other : Pattern) : Int32\n # The pattern as it was written.\n def to_s : String\nend\n\n# Requests sent to handlers by pattern, Go 1.22's `ServeMux`:\n#\n# router = Router.new\n# router.handle(\"GET /users/{id}\") { |req, params| Response.new(200, params[\"id\"]) }\n# router.handle(\"/static/\") { |req, params| FileServer.serve(root, req) }\n# Server.serve(listener, router, workers: 1)\n#\n# A `Router` is written as it is set up and holds procs nobody checked,\n# so it is not `Share`: it is served on one thread (`workers: 1`), as the\n# handler or from a block that calls it, and refused at the argument on\n# more than one worker; `SharedRouter` below routes on every worker.\n#\n# `handle` panics on a pattern that is not one, on one that conflicts with\n# a pattern already registered, and after the router has answered a\n# request. `call` answers with the most specific pattern's handler, or a\n# 307 (to the cleaned path, or to a subtree's `/`), a 405 with `Allow`, a\n# 400 for a malformed escape, a 404.\npub class Router\n # The answer to *req*: its handler's, or the router's own 307, 400, 404\n # or 405.\n def call(req : Request) : Response\n # *path* - rooted - with `.` and empty segments dropped and `..` taking\n # the one before it off, its trailing slash kept: Go's `cleanPath`.\n def self.clean(path : String) : String\n # Sends the requests *pattern* matches to the block, with the request\n # and the wildcards' values by name.\n def handle(pattern : String, &handler : (Request, Hash(String, String) -> Response)) : Nil\n # A `Host` value without its port, as Go's `stripHostPort` has it: an\n # IPv6 address in brackets loses the brackets with the port.\n def self.host_of(value : String) : String\n def initialize\n # *pattern* parsed, panicking on text that is not a pattern and on one\n # that conflicts with one of *known*: what `handle` registers, here and\n # in `SharedRouter`.\n def self.parse_against(pattern : String, known : P) : Pattern forall P\n # The patterns registered, in the order they were.\n def patterns : Array(Pattern)\n def self.plain(status : Int32, text : String) : Response\n def self.redirect(path : String, query : String | ::Nil) : Response\n # Which of *patterns* - a `Router`'s or a `SharedRouter`'s - takes *req*:\n # its index and the wildcards' values, or the router's own 307, 400, 404\n # or 405.\n def self.route(patterns : P, req : Request) : ::Tuple(Int32, Hash(String, String)) | Response forall P\nend\n\n# Why a pattern is refused: `Pattern.parse`'s answer for text that is not\n# a pattern. `Router#handle` panics with its `message`.\npub struct RouterError\n def initialize(reason : String)\n def reason : String\n def to_s : String\nend\n\n# `Router`'s table for `Server.serve` on every worker, which route at\n# once (SPEC.md III.4.13):\n#\n# routes = SharedRouter.new\n# .handle(\"GET /users/{id}\") { |req, params| Response.new(200, params[\"id\"]) }\n# .handle(\"/static/\") { |req, params| FileServer.serve(root, req) }\n# Server.serve(listener, routes)\n#\n# The same patterns, precedence, conflicts and answers as `Router`'s, by\n# the same code (`Router.route`). What differs is what a handler may\n# capture: `handle` is `@[Share]`, so each block is checked where it is\n# written as a parallel task's is - every value it captures `Share`, a\n# pool behind a `Mutex`, a count in an `Atomic` - and kept as a\n# `SharedProc`. A `Router` holds procs nobody checked, so `Server.serve`\n# takes one under `workers: 1` alone. A `SharedRouter` is never written:\n# `handle` answers a new router with the route added, so the one being\n# served is the table it was when the server was given it, with no\n# `handle` after the first request to refuse.\npub class SharedRouter\n # The answer to *req*: its handler's, or the router's own 307, 400, 404\n # or 405.\n def call(req : Request) : Response\n # This router with the requests *pattern* matches sent to the block,\n # with the request and the wildcards' values by name. Panics as\n # `Router#handle` does on a pattern that is not one or that conflicts.\n def handle(pattern : String, &handler : (Request, Hash(String, String) -> Response)) : SharedRouter\n def initialize(patterns : List(Pattern) = List(Pattern).new([] of Pattern), handlers : List(SharedProc(::Tuple(Request, Hash(String, String)), Response)) = List(SharedProc(::Tuple(Request, Hash(String, String)), Response)).new([] of SharedProc(::Tuple(Request, Hash(String, String)), Response)))\n # The patterns registered, in the order they were.\n def patterns : Array(Pattern)\nend\n\nimpl Error for RouterError\n def message : String\nend\n" }, { "name": "std/rsa", "path": "src/std/rsa.iyi", - "sourceSha256": "25ebe39e70765207e03dfb418ac251c7d7f3ecd0f3d419baf428add7cbc354bd", + "sourceSha256": "64732f8d8bd7ed6f9b201b275098e8b2ab8dbf30ba8fe0a38d27d07a07ddaee2", "surface": "module std/rsa\n\n# What reading a key answers for bytes that are not an RSA key.\npub struct RsaError\n def initialize(message : String)\n def to_s : String\nend\n\n# The hashes a signature is made over.\npub enum RsaHash : Int32\n SHA1 = 0\n SHA256 = 1\n SHA384 = 2\n SHA512 = 3\n def digest(data : Array(UInt8)) : Array(UInt8)\n # The DER of a DigestInfo up to the digest itself (RFC 8017 section 9.2,\n # note 1): the algorithm's OID with NULL parameters, then the OCTET\n # STRING's header.\n def digest_info_prefix : Array(UInt8)\n def size : Int32\nend\n\n# An RSA private key with its CRT parameters (RFC 8017 section 3.2, the\n# first representation and the second together), which signs.\npub struct RsaPrivateKey\n # The modulus's length in bits, and in bytes: a signature's length.\n def bits : Int32\n # The one key in a PEM text: an `RSA PRIVATE KEY` block (PKCS #1) or a\n # `PRIVATE KEY` block (PKCS #8).\n def self.from_pem(text : String) : RsaPrivateKey | RsaError\n # An RSAPrivateKey (appendix A.1.2) of two primes: version 0 and the\n # eight numbers.\n def self.from_pkcs1(der : Array(UInt8)) : RsaPrivateKey | RsaError\n # A PKCS #8 PrivateKeyInfo or OneAsymmetricKey (RFC 5958) naming\n # rsaEncryption, its privateKey an RSAPrivateKey. Attributes are passed\n # over; a public key, which version 1 may carry, must be the key's own.\n def self.from_pkcs8(der : Array(UInt8)) : RsaPrivateKey | RsaError\n def initialize(public_key : RsaPublicKey, p : BigInt, q : BigInt, dp : BigInt, dq : BigInt, qi : BigInt, prf : Array(UInt8))\n # The key from its eight numbers, each big-endian - n, e, d, p, q, dp,\n # dq, qi - or why they are not one.\n def self.new(modulus : Array(UInt8), exponent : Array(UInt8), d : Array(UInt8), p : Array(UInt8), q : Array(UInt8), dp : Array(UInt8), dq : Array(UInt8), qi : Array(UInt8)) : RsaPrivateKey | RsaError\n def public_key : RsaPublicKey\n # RSASSA-PKCS1-v1_5 (section 8.2.1) of *message* under *hash*: 0x00\n # 0x01, the 0xFF padding, 0x00, the hash's DigestInfo and the digest.\n def sign_pkcs1v15(hash : RsaHash, message : Array(UInt8) | String) : Array(UInt8)\n # RSASSA-PSS (section 8.1.1) of *message* under *hash*, MGF1 over the\n # same hash: EMSA-PSS-ENCODE (section 9.1.1) with a salt as long as the\n # digest, drawn as the module's header says.\n def sign_pss(hash : RsaHash, message : Array(UInt8) | String) : Array(UInt8)\n def size : Int32\nend\n\npub struct RsaPublicKey\n # The modulus's length in bits, and in bytes: a signature's length.\n def bits : Int32\n def exponent : BigInt\n # An RSAPublicKey (RFC 8017 appendix A.1.1): SEQUENCE { modulus, exponent }.\n def self.from_pkcs1(der : Array(UInt8)) : RsaPublicKey | RsaError\n # A SubjectPublicKeyInfo (RFC 5280 section 4.1.2.7) naming rsaEncryption.\n def self.from_spki(der : Array(UInt8)) : RsaPublicKey | RsaError\n def self.from_spki(value : DerValue) : RsaPublicKey | RsaError\n def initialize(modulus : BigInt, exponent : BigInt, bits : Int32)\n def modulus : BigInt\n # The key from a modulus and an exponent, each big-endian.\n def self.new(modulus : Array(UInt8), exponent : Array(UInt8)) : RsaPublicKey | RsaError\n def size : Int32\n # Whether *signature* is the PKCS #1 v1.5 signature (RSASSA-PKCS1-v1_5,\n # section 8.2.2) of *message* under *hash*.\n def verify_pkcs1v15(hash : RsaHash, message : Array(UInt8) | String, signature : Array(UInt8)) : Bool\n # Whether *signature* is an RSASSA-PSS signature (section 8.1.2) of\n # *message* under *hash*, MGF1 over the same hash, with a salt of\n # *salt_length* bytes (the digest's length when nil).\n def verify_pss(hash : RsaHash, message : Array(UInt8) | String, signature : Array(UInt8), salt_length : Int32 | ::Nil = nil) : Bool\nend\n\nimpl Error for RsaError\n def message : String\nend\n" }, { "name": "std/secure_dns", "path": "src/std/secure_dns.iyi", - "sourceSha256": "2ec99a10b574c9ffc740e71924e0db2bf74a7e3c884b2f69ca400f132d1acccf", + "sourceSha256": "40a8d8321c79083e1dffa4a3cfba10084bc271681a02248ae502ae27635f0305", "surface": "module std/secure_dns\n\n# DNS over HTTPS to one URL: see the module's header.\npub class DnsOverHttps\n # The message a response carries: a 200 of `application/dns-message`\n # (parameters after it allowed, the type in any case) of at most\n # `MAX_ANSWER` bytes. RFC 8484 4.2.1 calls any 2xx a success, but no\n # other 2xx carries an answer to a query: 204 has no body and 206 a part\n # of one.\n def self.answer(response : Response, label : String) : Bytes | DnsError | Cancelled\n # RFC 8484 4.1's `dns` parameter: base64url (RFC 4648 5) \"with padding\n # characters removed\".\n def self.base64url(message : String) : String\n def close : Nil\n # Connections the HTTP client has opened, and requests sent over one it\n # kept.\n def connections_made : Int32\n def connections_reused : Int32\n def exchange(queries : Array(Bytes), timeout_ms : Int32) : Array(Bytes) | DnsError | Cancelled\n # *url* is `https://`: an `http://` upstream would be plaintext with\n # extra steps, and is refused. *address*, when given, is where the URL's\n # host is, and nothing is asked to find it. *config* holds the roots the\n # server must chain to and the ALPN offered: by default the system's\n # roots, and `h2` before `http/1.1`.\n def initialize(url : String, address : String | ::Nil = nil, config : TlsConfig | ::Nil = nil, method : String = \"POST\")\n def label : String\n # \"POST\" or \"GET\".\n def method : String\n def url : String\n def zero_id? : Bool\nend\n\n# DNS over TLS to one server: see the module's header.\npub class DnsOverTls\n # The address connected to, IPv4 or IPv6.\n def address : String\n def close : Nil\n def config : TlsConfig\n # Connections this upstream has opened: what a program reads to see its\n # connection kept.\n def connections_made : Int32\n def exchange(queries : Array(Bytes), timeout_ms : Int32) : Array(Bytes) | DnsError | Cancelled\n def idle_ms : Int32\n # *name* is what the server's certificate is checked for and *address*\n # where it is; *config* holds the roots it must chain to (the system's\n # by default) and the versions spoken. A name that is not a host name,\n # or an address that is not one, is the program's mistake and refused\n # here.\n def initialize(name : String, address : String, port : Int32 = PORT, config : TlsConfig | ::Nil = nil, idle_ms : Int32 = IDLE_MS)\n def label : String\n # The authentication domain name: what the certificate must carry.\n def name : String\n def port : Int32\n def zero_id? : Bool\nend\n\nimpl Std::Socket::DnsUpstream for DnsOverTls\nend\n\nimpl Std::Socket::DnsUpstream for DnsOverHttps\nend\n" }, { "name": "std/semantic_version", "path": "src/std/semantic_version.iyi", - "sourceSha256": "32b113295e8a61d4d6a9c9387b07f521b684f7127f9ee97ef2ac6dfeb8968ff7", + "sourceSha256": "ae0f1608246ff1e37e047d4b9f20b9388eb9a3ad1ac340b3448a38ec2ce4dfe4", "surface": "module std/semantic_version\n\npub struct SemanticVersion\n # The dot-separated identifiers after `-`; a numeric identifier is held\n # as a number so that `beta.2 < beta.11`, and one too long for an Int32\n # is held as its digits and still ordered as a number.\n struct Prerelease\n # `Prerelease`, not `self`: spelled `self` it was the very method the\n # `impl Comparable` below defines, which replaced it, and that one's\n # `self <=> other` then called itself until the stack ran out.\n def <=>(other : Prerelease) : Int32\n def <=>(other : self) : Int32\n def ==(other : Prerelease) : Bool\n def empty? : Bool\n def hash : Int32\n def identifiers : Array(String | Int32)\n def initialize(identifiers : Array(String | Int32) = [] of String | Int32)\n def self.parse(str : String) : self\n def to_s(io : IO) : Nil\n def to_s : String\n end\n # Precedence, with build metadata ignored as the standard says. The\n # parameter is `SemanticVersion` for the reason `Prerelease#<=>` gives:\n # as `self` the `impl Comparable` replaced this, and every `<=>`, `==`,\n # `<` and sort recursed until the stack ran out (a hang under --release).\n def <=>(other : SemanticVersion) : Int32\n # Identity, with build metadata read: `1.0.0+a` is not `1.0.0+b`.\n def ==(other : SemanticVersion) : Bool\n def build : String | ::Nil\n def bump_major : self\n def bump_minor : self\n # A prerelease of a patch is bumped to that patch; a release to the next.\n def bump_patch : self\n def copy_with(major : Int32 = @major, minor : Int32 = @minor, patch : Int32 = @patch, prerelease : String | Prerelease | Nil = @prerelease, build : String | ::Nil = @build) : SemanticVersion\n def hash : Int32\n def initialize(major : Int32, minor : Int32, patch : Int32, prerelease : String | Prerelease | Nil = nil, build : String | ::Nil = nil)\n def major : Int32\n def minor : Int32\n def self.parse(str : String) : self\n def self.parse?(str : String) : self | ::Nil\n def patch : Int32\n def prerelease : Prerelease\n def to_s(io : IO) : Nil\n def to_s : String\n def self.valid?(str : String) : Bool\nend\n\nimpl Std::Traits::Comparable for SemanticVersion::Prerelease\n def <=>(other : self) : Int32\nend\n\nimpl Std::Traits::Comparable for SemanticVersion\n def <=>(other : self) : Int32\nend\n" }, { @@ -508,49 +514,49 @@ { "name": "std/shared_proc", "path": "src/std/shared_proc.iyi", - "sourceSha256": "a6654265e51523b44a081f94d9eb1b5603fa0b419697e1b45c5f1a7e90161949", + "sourceSha256": "74a3b3878e026d5cd88923212961c95270be210eaa4d7024f716950b98c74822", "surface": "module std/shared_proc\n\npub struct SharedProc(A, R)\n def call(argument : A) : R\n # The block, checked as a parallel task's block is, as a value any\n # thread may call.\n def self.of(&block : (A -> R)) : SharedProc(A, R)\nend\n" }, { "name": "std/shlex", "path": "src/std/shlex.iyi", - "sourceSha256": "b42d6ad9063539b09f7026ae3f12512628b927e2813b6272b3e3f9a24e6e740c", + "sourceSha256": "b8d3c6f8713495ba9ec90b85073b148c8bb338a3c4c11c5005eacd689adceef2", "surface": "module std/shlex\n\n# POSIX shell words: `split`, `quote` and `join`, as Python's `shlex`.\npub struct Shlex\n def initialize\n # The arguments quoted and joined with spaces: a command line that\n # `split` and `sh` read back as *args*.\n def self.join(args : Array(String)) : String\n # *arg* as one shell word: as it is when every byte is a letter, a\n # digit or one of `%+,-./:=@_`, `''` when empty, else single-quoted.\n def self.quote(arg : String) : String\n # The words of *text*, quotes and backslashes taken off as `sh` takes\n # them; with *comments*, `#` to the end of the line is skipped.\n def self.split(text : String, comments : ::Bool = false) : Array(String) | ShlexError\nend\n\n# Why a text does not split: an unclosed quote or a final backslash.\n# `offset` is the byte where the quote or the backslash stands.\npub struct ShlexError\n def initialize(message : String, offset : Int32)\n def offset : Int32\n def to_s : String\nend\n\nimpl Error for ShlexError\n def message : String\nend\n" }, { "name": "std/signal", "path": "src/std/signal.iyi", - "sourceSha256": "c2d35f9fe0952237ddd8df4c87b2c63520198d9bb1c71a3d76df2ec1779fc748", + "sourceSha256": "41721f5ed5c57f6e8ff66af546c9aa8c313ce6f42e6a895029a4cf6ef786bbc5", "surface": "module std/signal\n\npub enum Signal : Int32\n HUP = 1\n INT = 2\n QUIT = 3\n PIPE = 13\n ALRM = 14\n TERM = 15\n WINCH = 28\n USR1 = 10\n USR2 = 12\n CHLD = 17\n # Runs the block for each arrival of one of *signals*, in this task,\n # until the task is cancelled, and answers `Cancelled` then. Arrivals\n # while the block runs are kept, each signal once.\n def self.each(*signals : Signal, &block : (Signal -> _)) : Cancelled\n # Sets each of *signals* to be ignored by the process: its arrivals are\n # dropped, and one that was pending is forgotten. Windows can ignore\n # Ctrl-C (`INT`) alone; anything else is refused there.\n def self.ignore(*signals : Signal) : Nil\n # Gives each of *signals* its default action back: INT and TERM end the\n # process again, WINCH is ignored again. Windows: `INT` alone.\n def self.reset(*signals : Signal) : Nil\n # Parks until one of *signals* arrives; answers it.\n def self.wait(*signals : Signal) : Signal | Cancelled\nend\n" }, { "name": "std/slice", "path": "src/std/slice.iyi", - "sourceSha256": "1dda673c9cdfccf23aa89b30d80c0499132891714a3bf5c669a79e9ab35dcb7d", - "surface": "module std/slice\n\n# `pub`, because an alias is part of a module's surface like anything else: an\n# unexported one is unreachable from a consumer, which R-2 now says out loud.\npub alias Bytes = Slice(UInt8)\n\npub struct Slice(T)\n # Returns a subslice starting *offset* elements in, extending to the end.\n def +(offset : Int32) : Slice(T)\n # Returns true if sizes match and all elements are equal.\n #\n # A slice of its own element type, as `Array#==` takes an `Array(T)`. It\n # took any `Slice(U)`, and numbers that compare equal across types hash\n # apart: `Slice[-1, -2]` of `Int32` was `==` to the same of `Int64` with\n # hashes 204952928 and -1576659145, so a table missed one by the other.\n def ==(other : Slice(T)) : Bool\n def ==(other : Object) : Bool\n # Returns a subslice of *count* elements starting at *start*.\n def [](start : Int32, count : Int32) : Slice(T)\n # Element access with bounds checking. A negative index counts from the end,\n # so `s[-1]` is the last element; the message names the index as typed rather\n # than the wrapped one, and words it exactly as `Array#[]` and\n # `Indexable#[]` do — the same mistake reads the same way in all three.\n def [](index : Int32) : T\n # Returns a subslice covering *range*.\n def [](range : Range(Int32, Int32)) : Slice(T)\n # Element assignment with bounds checking and write-protection check.\n def []=(index : Int32, value : T) : T\n # Returns a subslice of *count* elements starting at *start*, or nil if out of bounds.\n def []?(start : Int32, count : Int32) : Slice(T) | ::Nil\n # Element access with bounds checking, returning nil if out of bounds.\n def []?(index : Int32) : T | ::Nil\n # Returns a subslice covering *range*, or nil if out of bounds.\n #\n # A range that ends before it begins is empty, not out of bounds, as the\n # other library counts it: `s[3..1]` is the empty slice at 3. The count is\n # taken only once the end is known to be past the start, and the\n # inclusive end is added only while the count can still fit, so an end\n # near the top of `Int32` answers nil instead of overflowing.\n def []?(range : Range(Int32, Int32)) : Slice(T) | ::Nil\n # Returns the total size in bytes of this slice's elements.\n def bytesize : Int32\n # Returns a copy of this slice.\n def clone : Slice(T)\n # Copies *count* elements from raw *source* pointer into this slice.\n def copy_from(source : Pointer(T), count : Int32) : Nil\n # Copies all elements from *source* slice into this slice.\n def copy_from(source : Slice(T)) : Nil\n # Copies *count* elements from this slice to raw *target* pointer.\n def copy_to(target : Pointer(T), count : Int32) : Nil\n # Copies all elements from this slice to *target* slice.\n def copy_to(target : Slice(T)) : Nil\n # Returns a new slice with copied contents. The copy is filled before it\n # takes this slice's read-only flag: `copy_from` into a read-only copy\n # refused, so a read-only slice could not be duplicated at all.\n def dup : Slice(T)\n # Yields each element and its index to the block.\n def each_with_index(& : (T, Int32 -> Nil)) : Nil\n # Returns an empty slice of size 0.\n def self.empty : self\n # Returns true if the slice contains no elements.\n def empty? : Bool\n # Fills *count* elements starting at *start* with *value*.\n def fill(value : T, start : Int32, count : Int32) : self\n # Fills the entire slice with *value*.\n def fill(value : T) : self\n # Fills the entire slice by yielding each index to the block.\n def fill(& : (Int32 -> T)) : self\n # Returns a lowercase hex string representation of Bytes.\n def hexstring : String\n # Creates a slice wrapping *pointer* bounded by *size*.\n #\n # `read_only` is named in this and every `Slice.new`, as in the other\n # library. Positional, it took the value's place when `T` is `Bool`:\n # `Slice(Bool).new(3, true)` was `Slice[false, false, false]`, read-only.\n def initialize(pointer : Pointer(T), size : Int32, *, read_only : Bool = false)\n def inspect : String\n # Moves *count* elements from *source* pointer into this slice, safely handling overlaps.\n def move_from(source : Pointer(T), count : Int32) : Nil\n # Moves all elements from *source* slice into this slice, safely handling overlaps.\n def move_from(source : Slice(T)) : Nil\n # Moves *count* elements from this slice into *target* pointer, safely handling overlaps.\n def move_to(target : Pointer(T), count : Int32) : Nil\n # Moves all elements from this slice into *target* slice, safely handling overlaps.\n def move_to(target : Slice(T)) : Nil\n # Allocates a slice of *size* elements initialized to *value*.\n #\n # These three answer `Slice(T)`, not `self`, as `Array.new` does: when the\n # element type is left to the value or the block, `self` is still the\n # unbound `Slice(T)` while the body builds `Slice(Int32)`, so\n # `Slice.new(3) { |i| i + 1 }` and `Slice.new(3, 7)` did not compile.\n def self.new(size : Int32, value : T, *, read_only : Bool = false) : Slice(T)\n # Allocates a slice of *size* elements on the heap.\n def self.new(size : Int32, *, read_only : Bool = false) : self\n # Allocates a slice of *size* elements initialized by yielding each index.\n def self.new(size : Int32, & : (Int32 -> T)) : Slice(T)\n def self.new(size : Int32, *, read_only : Bool, & : (Int32 -> T)) : Slice(T)\n def read_only? : Bool\n # Reverses the elements of the slice in-place.\n def reverse : self\n def reverse_in_place : self\n # Returns true if this slice and *other* point to the exact same memory and have the same size.\n def same?(other : Slice(T)) : Bool\n def size : Int32\n # Swaps elements at index *i* and index *j*.\n def swap(i : Int32, j : Int32) : self\n # Returns an Array containing all elements in this slice.\n def to_a : Array(T)\n # String representation: Bytes[...] for Slice(UInt8), Slice[...] for others.\n def to_s : String\n # Raw pointer to the underlying buffer.\n def to_unsafe : Pointer(T)\n # Raw element access without bounds checks (required for Indexable).\n def unsafe_fetch(index : Int32) : T\n # Raw element write without bounds checks.\n def unsafe_put(index : Int32, value : T) : T\nend\n\n# The lazy half, which `Slice` had no way into: `std/iterator`'s header says\n# a concrete collection provides its own iterator constructor and names this\n# type twice as one that should, and then the only route from a slice to a\n# lazy chain was `fs.to_a` — copying the whole sequence, which is the cost\n# the tower exists to avoid.\n#\n# A class, as `ArrayIterator` is (std/iterator): an adaptor keeps its source\n# by value, and a struct source was copied into it, so `it.first(2).to_a`\n# and then `it.to_a` gave [1, 2] and [1, 2, 3, 4] where an array's iterator\n# gives [1, 2] and [3, 4].\npub class SliceIterator(T)\n def initialize(slice : Slice(T))\n def next : T | Stop\nend\n\nimpl Std::Indexable::Indexable for Slice(T) forall T\nend\n\nimpl Std::Enumerable::Enumerable for Slice(T) forall T\n def each(& : (T -> Nil)) : Nil\nend\n\nimpl Std::Iterator::Iterator for SliceIterator(T) forall T\nend\n" + "sourceSha256": "19cbd017a0bb4d00081dfee7d2a78ce44221e60ea15662d33642d9149423d376", + "surface": "module std/slice\n\n# `pub`, because an alias is part of a module's surface like anything else: an\n# unexported one is unreachable from a consumer, which R-2 now says out loud.\npub alias Bytes = Slice(UInt8)\n\npub struct Slice(T)\n # Returns a subslice starting *offset* elements in, extending to the end.\n def +(offset : Int32) : Slice(T)\n # Returns true if sizes match and all elements are equal.\n #\n # A slice of its own element type, as `Array#==` takes an `Array(T)`. It\n # took any `Slice(U)`, and numbers that compare equal across types hash\n # apart: `Slice[-1, -2]` of `Int32` was `==` to the same of `Int64` with\n # hashes 204952928 and -1576659145, so a table missed one by the other.\n def ==(other : Slice(T)) : Bool\n def ==(other : Object) : Bool\n # Returns a subslice of *count* elements starting at *start*.\n def [](start : Int32, count : Int32) : Slice(T)\n # Element access with bounds checking. A negative index counts from the end,\n # so `s[-1]` is the last element; the message names the index as typed rather\n # than the wrapped one, and words it exactly as `Array#[]` and\n # `Indexable#[]` do — the same mistake reads the same way in all three.\n def [](index : Int32) : T\n # Returns a subslice covering *range*.\n def [](range : Range(Int32, Int32)) : Slice(T)\n # Element assignment with bounds checking and write-protection check.\n def []=(index : Int32, value : T) : T\n # Returns a subslice of *count* elements starting at *start*, or nil if out of bounds.\n def []?(start : Int32, count : Int32) : Slice(T) | ::Nil\n # Element access with bounds checking, returning nil if out of bounds.\n def []?(index : Int32) : T | ::Nil\n # Returns a subslice covering *range*, or nil if out of bounds.\n #\n # A range that ends before it begins is empty, not out of bounds, as the\n # other library counts it: `s[3..1]` is the empty slice at 3. The count is\n # taken only once the end is known to be past the start, and the\n # inclusive end is added only while the count can still fit, so an end\n # near the top of `Int32` answers nil instead of overflowing.\n def []?(range : Range(Int32, Int32)) : Slice(T) | ::Nil\n # Returns the total size in bytes of this slice's elements.\n def bytesize : Int32\n # Returns a copy of this slice.\n def clone : Slice(T)\n # Copies *count* elements from raw *source* pointer into this slice.\n def copy_from(source : Pointer(T), count : Int32) : Nil\n # Copies all elements from *source* slice into this slice.\n def copy_from(source : Slice(T)) : Nil\n # Copies *count* elements from this slice to raw *target* pointer.\n def copy_to(target : Pointer(T), count : Int32) : Nil\n # Copies all elements from this slice to *target* slice.\n def copy_to(target : Slice(T)) : Nil\n # Returns a new slice with copied contents. The copy is filled before it\n # takes this slice's read-only flag: `copy_from` into a read-only copy\n # refused, so a read-only slice could not be duplicated at all.\n def dup : Slice(T)\n # Yields each element and its index to the block.\n def each_with_index(& : (T, Int32 -> Nil)) : Nil\n # Returns an empty slice of size 0.\n def self.empty : self\n # Returns true if the slice contains no elements.\n def empty? : Bool\n # Fills *count* elements starting at *start* with *value*.\n def fill(value : T, start : Int32, count : Int32) : self\n # Fills the entire slice with *value*.\n def fill(value : T) : self\n # Fills the entire slice by yielding each index to the block.\n def fill(& : (Int32 -> T)) : self\n # Returns a lowercase hex string representation of Bytes.\n def hexstring : String\n # Creates a slice wrapping *pointer* bounded by *size*.\n #\n # `read_only` is named in this and every `Slice.new`, as in the other\n # library. Positional, it took the value's place when `T` is `Bool`:\n # `Slice(Bool).new(3, true)` was `Slice[false, false, false]`, read-only.\n def initialize(pointer : Pointer(T), size : Int32, *, read_only : Bool = false)\n def inspect : String\n # Moves *count* elements from *source* pointer into this slice, safely handling overlaps.\n def move_from(source : Pointer(T), count : Int32) : Nil\n # Moves all elements from *source* slice into this slice, safely handling overlaps.\n def move_from(source : Slice(T)) : Nil\n # Moves *count* elements from this slice into *target* pointer, safely handling overlaps.\n def move_to(target : Pointer(T), count : Int32) : Nil\n # Moves all elements from this slice into *target* slice, safely handling overlaps.\n def move_to(target : Slice(T)) : Nil\n # Allocates a slice of *size* elements initialized to *value*.\n #\n # These three answer `Slice(T)`, not `self`, as `Array.new` does: when the\n # element type is left to the value or the block, `self` is still the\n # unbound `Slice(T)` while the body builds `Slice(Int32)`, so\n # `Slice.new(3) { |i| i + 1 }` and `Slice.new(3, 7)` did not compile.\n def self.new(size : Int32, value : T, *, read_only : Bool = false) : Slice(T)\n # Allocates a slice of *size* elements on the heap.\n def self.new(size : Int32, *, read_only : Bool = false) : self\n # Allocates a slice of *size* elements initialized by yielding each index.\n def self.new(size : Int32, & : (Int32 -> T)) : Slice(T)\n def self.new(size : Int32, *, read_only : Bool, & : (Int32 -> T)) : Slice(T)\n # *text*'s bytes, read-only, without a copy: `Bytes.of(\"GET\")`. A string\n # is never written once it is made (it is `Share` by that), so the view is\n # read-only, and it is what a module that does not handle raw memory reads\n # a string's bytes through, where `Bytes.new(text.to_unsafe, ...)` needs\n # the module marked `@[Unsafe]` (SPEC.md III.13).\n def self.of(text : String) : Slice(UInt8)\n def read_only? : Bool\n # Reverses the elements of the slice in-place.\n def reverse : self\n def reverse_in_place : self\n # Returns true if this slice and *other* point to the exact same memory and have the same size.\n def same?(other : Slice(T)) : Bool\n def size : Int32\n # Swaps elements at index *i* and index *j*.\n def swap(i : Int32, j : Int32) : self\n # Returns an Array containing all elements in this slice.\n def to_a : Array(T)\n # String representation: Bytes[...] for Slice(UInt8), Slice[...] for others.\n def to_s : String\n # Raw pointer to the underlying buffer.\n def to_unsafe : Pointer(T)\n # Raw element access without bounds checks (required for Indexable).\n def unsafe_fetch(index : Int32) : T\n # Raw element write without bounds checks.\n def unsafe_put(index : Int32, value : T) : T\nend\n\n# The lazy half, which `Slice` had no way into: `std/iterator`'s header says\n# a concrete collection provides its own iterator constructor and names this\n# type twice as one that should, and then the only route from a slice to a\n# lazy chain was `fs.to_a` — copying the whole sequence, which is the cost\n# the tower exists to avoid.\n#\n# A class, as `ArrayIterator` is (std/iterator): an adaptor keeps its source\n# by value, and a struct source was copied into it, so `it.first(2).to_a`\n# and then `it.to_a` gave [1, 2] and [1, 2, 3, 4] where an array's iterator\n# gives [1, 2] and [3, 4].\npub class SliceIterator(T)\n def initialize(slice : Slice(T))\n def next : T | Stop\nend\n\nimpl Std::Indexable::Indexable for Slice(T) forall T\nend\n\nimpl Std::Enumerable::Enumerable for Slice(T) forall T\n def each(& : (T -> Nil)) : Nil\nend\n\nimpl Std::Iterator::Iterator for SliceIterator(T) forall T\nend\n\nclass ::IyiIO\n # Writes *bytes*, all of them.\n def write(bytes : Std::Slice::Slice(UInt8)) : Nil\nend\n\nclass ::String\n # A string holding a copy of *bytes*, as they are: what a module turns\n # bytes it read into text with, where `String.new(n) { |buffer| ... }`\n # hands it a `Pointer` (SPEC.md III.13).\n def self.new(bytes : Std::Slice::Slice(UInt8)) : String\nend\n" }, { "name": "std/smtp", "path": "src/std/smtp.iyi", - "sourceSha256": "2d705943fb25cab029ae3af971d812a1df1c514695545e451fa4e99eea77500c", + "sourceSha256": "3bebfcd67402514e080ffde76d979d9c34d0d51046066f6f99751aa6faab37a6", "surface": "module std/smtp\n\npub enum SmtpAuth : Int32\n Plain = 0\n Login = 1\n CramMd5 = 2\nend\n\n# A session with a mail server.\npub class SmtpClient\n def self.ascii?(text : String) : Bool\n # AUTH as *user* with *password*, by *mechanism*, or by the first the\n # server offers of PLAIN, LOGIN and CRAM-MD5.\n def auth(user : String, password : String, mechanism : SmtpAuth | ::Nil = nil) : SmtpError | ::Nil\n # Whether a password may go over a connection without TLS.\n def cleartext_auth : Bool\n # Whether a password may go over a connection without TLS.\n def cleartext_auth=(value : Bool) : Bool\n # The connection closed, without QUIT.\n def close : Nil\n def closed? : Bool\n # *line* sent, and its reply.\n def command(line : String) : SmtpReply | SmtpError\n # A session with *host* on *port*: connected, greeted, EHLO said, and\n # under TLS as *security* asks.\n def self.connect(host : String, port : Int32, security : SmtpSecurity = SmtpSecurity::StartTls, config : TlsConfig = TlsConfig.new, helo : String | ::Nil = nil, timeout_ms : Int32 = TIMEOUT_MS) : SmtpClient | SmtpError\n def self.digit?(b : UInt8) : Bool\n # What EHLO named, by its keyword in upper case: each extension's\n # parameters (\"\" when none). Empty after HELO.\n def extensions : Hash(String, String)\n # The server's 220.\n def greeting : SmtpReply\n def initialize(socket : IyiSocket, host : String, helo : String, timeout_ms : Int32)\n # `[192.0.2.1]`, or `[IPv6:2001:db8::1]` (section 4.1.3).\n def self.literal(address : String) : String\n def self.mechanism_name(mechanism : SmtpAuth) : String\n protected def open(security : SmtpSecurity, config : TlsConfig) : SmtpError | ::Nil\n # QUIT, its 221 read, and the connection closed.\n def quit : SmtpError | ::Nil\n # The next reply, every line of it.\n def reply : SmtpReply | SmtpError\n # *data*, a whole message, from *sender* to *recipients*; *utf8* when\n # the message is RFC 6532's, as SMTPUTF8 carries. *data* is sent as it\n # is, so a message written with `Mail::Message#to_s` must have had its\n # Date to get here. No recipients, or an address that holds a line break\n # or an angle bracket, panics (`SMTP: a message with no recipients`,\n # `SMTP: ... is not an address to put in angle brackets`); every other\n # failure is the `SmtpError` returned.\n def send(sender : String, recipients : Array(String), data : String, utf8 : Bool = false) : SmtpError | ::Nil\n # *message* to its recipients - To, Cc and Bcc - from its From. The\n # message must have a From and a Date, as `Mail::Message#to_s` asks\n # (`msg.date = Mail.date(...)`), and at least one recipient. A message\n # without them is the caller's mistake and panics: `SMTP: a message has\n # no From`, then `to_s`'s `mail: a message has no Date`, then `SMTP: a\n # message with no recipients`. Every other failure - the connection, the\n # server's replies, a size or extension the server refuses - is the\n # `SmtpError` returned.\n def send(message : Mail::Message) : SmtpError | ::Nil\n # *data* as DATA sends it (section 4.5.2): line breaks CRLF, a dot\n # doubled at a line's start, a CRLF at the end if it had none, and the\n # lone dot after.\n def self.stuffed(data : String) : String\n # Whether the session is under TLS.\n def tls? : Bool\n def self.unsafe?(text : String) : Bool\nend\n\n# What a session answered that it should not have, or could not do, as a\n# value. `code` is the reply's code, 0 when there was no reply to have\n# one; `reply` the reply's text, its lines joined with newlines.\npub struct SmtpError\n def cancelled? : Bool\n def code : Int32\n def initialize(reason : String, code : Int32 = 0, reply : String = \"\", timed_out : Bool = false, cancelled : Bool = false)\n def reason : String\n def reply : String\n # Whether a read or a write waited `timeout_ms` and nothing came.\n def timed_out? : Bool\n def to_s : String\nend\n\n# One reply: its code and its lines' text, the code and separator taken\n# off each.\npub struct SmtpReply\n def code : Int32\n def initialize(code : Int32, lines : Array(String))\n def lines : Array(String)\n def text : String\nend\n\n# How the connection is kept from the wire.\npub enum SmtpSecurity : Int32\n StartTls = 0\n Tls = 1\n Cleartext = 2\nend\n\nimpl Error for SmtpError\n def message : String\nend\n" }, { "name": "std/socket", "path": "src/std/socket.iyi", - "sourceSha256": "eff1d8cd1e03a482ece90494c957df9f6d962808444e75f56a8b4843b2d5c894", - "surface": "module std/socket\n\n# What a resolver answers and is built from, under the names a program\n# that connects by name already imports from here.\npub alias DnsError = Std::Dns::DnsError\n\n# An encrypted way to a name server, asked by a resolver `Resolver#encrypted`\n# made instead of its plaintext servers: std/secure_dns's `DnsOverTls`\n# (RFC 7858) and `DnsOverHttps` (RFC 8484). The trait is here and they are\n# there because they speak std/tls and std/http, which import this module,\n# and R-1 refuses the cycle - as std/http's `CookieStore` is std/cookie's\n# to implement.\npub trait DnsUpstream\n # Its connections closed; the next exchange opens new ones.\n abstract def close : Nil\n # The answer to each of *queries*, in their order, each one whole\n # message as it came; or why there are none. *timeout_ms* bounds each\n # wait on the server. An answer is matched to its query by the\n # transport - by ID over one connection, by request over HTTP - and the\n # resolver then reads it as it reads a datagram.\n abstract def exchange(queries : Array(Bytes), timeout_ms : Int32) : Array(Bytes) | DnsError | Cancelled\n # How a message names it: `dns.test (127.0.0.1:853) over TLS`.\n abstract def label : String\n # Whether its queries carry the ID 0: DNS over HTTPS's, which RFC 8484\n # 4.1 asks for so that an HTTP cache sees one request for one question.\n # The answer must carry the ID the query did all the same.\n abstract def zero_id? : Bool\nend\n\n# Either family's address: what a resolver answers for a name.\npub alias IPAddress = IPv4Address | IPv6Address\n\npub struct IPv4Address\n def b0 : UInt8\n def b1 : UInt8\n def b2 : UInt8\n def b3 : UInt8\n def initialize(b0 : UInt8, b1 : UInt8, b2 : UInt8, b3 : UInt8)\n def to_s : String\nend\n\n# Sixteen bytes in network order, held as two words: `high` is bytes 0 to\n# 7. Written the RFC 5952 way - lowercase, no leading zeros, the longest\n# run of two or more zero groups as `::`, the first of two equal runs -\n# and an IPv4-mapped address with its dotted tail, `::ffff:192.0.2.1`.\npub struct IPv6Address\n # Byte *index*, 0 to 15.\n def [](index : Int32) : UInt8\n # The 16-bit group *index*, 0 to 7. Not `group`: that name is the task\n # group's in iyi (SPEC.md III.4.9).\n def hextet(index : Int32) : Int32\n def high : UInt64\n def initialize(high : UInt64, low : UInt64)\n def low : UInt64\n # The sixteen bytes at *bytes*, network order.\n def self.new(bytes : Pointer(UInt8)) : IPv6Address\n def to_s : String\nend\n\npub class IyiSocket\n # Room for any family's `sockaddr`, zeroed, so a unix path the kernel\n # did not end with a NUL still ends.\n def self.__address_room : Pointer(UInt8)\n # A `sockaddr` the kernel filled, as text: dotted IPv4, IPv6 written as\n # RFC 5952 has it, or a unix socket's path.\n def self.__address_text(addr : Pointer(UInt8), family : Int32) : String\n # What every connected and accepted socket starts with: TCP_NODELAY, on\n # TCP; a unix socket has no Nagle.\n def self.__send_at_once(fd : Int32, family : Int32) : Nil\n def self.__sys3(number : Int64, a : Int64, b : Int64, c : Int64) : Int64\n def self.__sys5(number : Int64, a : Int64, b : Int64, c : Int64, d : Int64, e : Int64) : Int64\n def self.__sys6(number : Int64, a : Int64, b : Int64, c : Int64, d : Int64, e : Int64, f : Int64) : Int64\n def self.__sys_accept(fd : Int32, addr : Pointer(UInt8), addrlen : Pointer(UInt32), family : Int32) : Int32\n def self.__sys_addr_size(family : Int32) : Int64\n def self.__sys_bind(fd : Int32, addr : Pointer(UInt8), family : Int32) : Int32\n # Every close of a socket in this file goes through here. `__iyi_close` is\n # the descriptor close, and on Windows a socket is not a descriptor:\n # `CloseHandle` on a SOCKET releases the kernel handle and leaves Winsock's\n # half of it standing, and the graceful close that makes a peer's read\n # answer EOF rather than a reset is `closesocket`'s.\n def self.__sys_close(fd : Int32) : Nil\n # A raw syscall's negative errno, as the number.\n def self.__sys_code(result : Int64) : Int32\n # *ms* is `connect_to`'s wait's: the call answers EINPROGRESS at once.\n def self.__sys_connect(fd : Int32, addr : Pointer(UInt8), family : Int32, ms : Int32) : Int32\n def self.__sys_connects_blocking?(family : Int32) : ::Bool\n def self.__sys_dgram_connect(fd : Int32, addr : Pointer(UInt8), family : Int32) : Int32\n def self.__sys_dgram_send(fd : Int32, buf : Pointer(UInt8), len : UInt64) : Int64\n # The resolver's datagram socket: see the darwin arm. The raw call\n # answers the negative errno, which `__sys_code` reads.\n def self.__sys_dgram_socket(family : Int32) : Int32\n def self.__sys_dgram_wait(fd : Int32, ms : Int32) : ::Bool | Cancelled\n def self.__sys_getpeername(fd : Int32, addr : Pointer(UInt8), addrlen : Pointer(UInt32)) : Int32\n def self.__sys_getsockname(fd : Int32, addr : Pointer(UInt8), addrlen : Pointer(UInt32)) : Int32\n def self.__sys_in_progress?(result : Int32) : ::Bool\n def self.__sys_listen(fd : Int32, backlog : Int32) : Int32\n def self.__sys_no_sigpipe(fd : Int32) : Nil\n def self.__sys_nodelay?(fd : Int32) : ::Bool\n # `ppoll` on one descriptor for *ms* milliseconds - a timespec, or none\n # for -1 - and no signal mask. 0 when the time ran out.\n def self.__sys_poll(fd : Int32, events : Int32, ms : Int32) : Int32\n def self.__sys_recv(fd : Int32, buf : Pointer(UInt8), len : UInt64) : Int64\n # MSG_NOSIGNAL (0x4000): a write to a connection the peer closed answers\n # EPIPE instead of killing the process with SIGPIPE.\n def self.__sys_send(fd : Int32, buf : Pointer(UInt8), len : UInt64, ms : Int32) : Int64\n # TCP_NODELAY (1) at IPPROTO_TCP (6): Nagle's algorithm off when *on*.\n def self.__sys_set_nodelay(fd : Int32, on : ::Bool) : Int32\n # F_GETFL (3), then F_SETFL (4) with O_NONBLOCK (0x800) added.\n def self.__sys_set_nonblock(fd : Int32) : Int32\n def self.__sys_set_reuseaddr(fd : Int32) : Int32\n # IPV6_V6ONLY (26) at IPPROTO_IPV6 (41).\n def self.__sys_set_v6only(fd : Int32) : Int32\n def self.__sys_shutdown_write(fd : Int32) : Int64\n # SO_ERROR (4) at SOL_SOCKET (1): what a connect that was in progress\n # ended with, 0 when it went through.\n def self.__sys_sock_error(fd : Int32) : Int32\n def self.__sys_socket(family : Int32) : Int32\n # A raw syscall answers the negative errno: EAGAIN is 11, EINPROGRESS 115.\n def self.__sys_would_block?(result : Int64) : ::Bool\n def accept : IyiSocket | Cancelled | SocketError\n # The order `connect` tries a name's addresses in (RFC 8305 section 4):\n # one family's first address, then the other's, alternating, each family\n # in the resolver's order, and the longer family's rest at the end.\n # IPv6 goes first when this machine has a route to the first IPv6\n # address - RFC 6724's first rule, asked the way glibc's getaddrinfo\n # asks it, by connecting a UDP socket, which sends nothing - and IPv4\n # first when it has none, so a machine without IPv6 does not start every\n # connect with an attempt that cannot leave it. A name of one family is\n # left in the resolver's order, and asks nothing.\n def self.attempt_order(addresses : Array(IPAddress)) : Array(IPAddress)\n def self.await_readable(fd : Int32, ms : Int32 = -1) : ::Bool | Cancelled\n def self.await_writable(fd : Int32, ms : Int32 = -1) : ::Bool | Cancelled\n # A timeout as the waits take it: milliseconds, -1 for none.\n def self.bound(ms : Int32 | ::Nil) : Int32\n protected def bound_path(path : String) : Nil\n # *path* with the NUL a system call reads to.\n def self.c_path(path : String) : Pointer(UInt8)\n def close : Nil\n # The sending half ended, the receiving half kept: the peer reads the\n # end of the stream after what was written, and this end goes on reading\n # what the peer still sends until its own end. `shutdown(SHUT_WR)` on\n # POSIX, `shutdown(SD_SEND)` on Windows. A socket that is not connected\n # answers the platform's refusal as a `SocketError`; `close` is still\n # what gives the socket back.\n def close_write : SocketError | ::Nil\n def closed? : ::Bool\n # A host name is resolved by the machine's resolver (`Resolver.system`);\n # a name that does not resolve is a `SocketError` whose `unresolved?` is\n # true and whose sentence names the host. It panicked, \"cannot resolve\n # address: \\\"example.com\\\"\", for every name but `localhost`, so\n # `HTTP.get(\"http://example.com/\")` could not run.\n #\n # A name with more than one address is raced, Happy Eyeballs v2 (RFC\n # 8305): the first address is tried, the next `ATTEMPT_DELAY_MS` later\n # without waiting for the first to fail, or at once when an attempt\n # fails, and so on down the list (`attempt_order`'s: IPv6 first when\n # this machine has a route to it, the families alternating). The first\n # handshake to finish wins, and every other attempt is cancelled and its\n # socket closed before `connect` answers. The addresses were tried one\n # after another, IPv4 first, each with the whole timeout: a name whose\n # first address dropped SYNs cost all of *timeout_ms* - or the kernel's\n # two minutes of retries, unbounded - before the second was tried. Now\n # it costs the delay: 250 ms to a name whose first address is a full\n # listen queue and whose second listens (`bench/std_dns_exercise.sh`,\n # under a 5,000 ms bound).\n #\n # `localhost` is raced the same way, 127.0.0.1 and then ::1, without\n # asking the routing table: a listener here binds `localhost` at\n # 127.0.0.1, so it goes first, and Windows, which names ::1 first, has\n # dev servers that bind ::1 alone. This replaces the rule that tried\n # ::1 only after 127.0.0.1 refused: Windows takes 2 s to refuse a\n # connect, so a ::1-only listener was reached in 2017 ms and a port\n # nobody holds refused in 4059 ms, where now ::1 starts 250 ms after\n # 127.0.0.1 whatever 127.0.0.1 is still doing.\n #\n # *timeout_ms* bounds the whole connect, every attempt together (-1: as\n # long as the kernel waits, which on Linux is about two minutes of SYN\n # retries for a host that drops them). It bounded each address's\n # handshake, which a race has no use for: an attempt started 500 ms in\n # would have run 500 ms past the caller's bound. A connect that runs out\n # is a `SocketError` whose `timed_out?` is true. The name's lookup is\n # outside it, held by the resolver's own `timeout_ms` and `attempts`.\n #\n # A name none of whose addresses connects is one `SocketError` that\n # names each address in the order tried and how its attempt ended,\n # `tried`: `cannot connect to example.com:443: [2001:db8::1]:443 timed\n # out; 192.0.2.1:443 connection refused`. It answered the first\n # address's failure alone. Its `code` is the first attempt's, or a\n # timeout's when the time ran out first. A name with one address is\n # connected to as an address is, and fails with that address's error.\n def self.connect(host : String, port : Int32, timeout_ms : Int32 = -1) : IyiSocket | Cancelled | SocketError\n # The same, with a host name resolved by *resolver*: name servers, a\n # hosts file and search list of the program's choosing, rather than the\n # machine's. An address and `localhost` are what they are either way.\n def self.connect(host : String, port : Int32, resolver : Resolver, timeout_ms : Int32 = -1) : IyiSocket | Cancelled | SocketError\n # A connect to *addr*, waiting at most *ms* milliseconds for the\n # handshake (-1: as long as the kernel does). The resolver's TCP query\n # and `connect` to an address are its callers with a bound; a race's\n # attempts wait as the kernel does, and the race keeps the bound. The\n # bound reaches `__sys_connect` as well as the wait after it, because\n # on Windows that call is the wait: it parks in `ConnectEx` until the\n # handshake is over.\n def self.connect_to(addr : Pointer(UInt8), family : Int32, peer : String, ms : Int32 = -1) : IyiSocket | Cancelled | SocketError\n # The stream socket listening at *path*.\n def self.connect_unix(path : String) : IyiSocket | Cancelled | SocketError\n # *host* and *port* as a message names them: an IPv6 literal in its\n # brackets, as a URL writes it. Bare, `::1:57456` was an address with\n # no port, and `ff02::1:80` another address altogether.\n def self.endpoint(host : String, port : Int32) : String\n # The address family, the platform's number for it: an accepted\n # connection is its listener's, and on Windows the socket `AcceptEx`\n # fills in has to be made in it. With `fd`, what makes the socket again\n # on another thread (std/http's `Server.serve`, on its pool).\n def family : Int32\n def fd : Int32\n def initialize(fd : Int32, family : Int32 = AF_INET)\n def self.listen(host : String, port : Int32, backlog : Int32 = 128) : IyiSocket\n def self.listen(port : Int32, backlog : Int32 = 128) : IyiSocket\n # A stream socket at *path*. The path must not exist: a socket file an\n # earlier run left behind is refused rather than taken over, since\n # which program owns it is not something a bind can know. `close`\n # removes the file.\n def self.listen_unix(path : String, backlog : Int32 = 128) : IyiSocket\n def local_address : String\n # The port sits at the same two bytes of a `sockaddr_in` and a\n # `sockaddr_in6`.\n def local_port : Int32\n # `localhost` in any case, and with the one trailing dot of a name\n # written fully qualified: a host name's case is not part of it (RFC\n # 4343), and getaddrinfo, Python and curl all answer 127.0.0.1 for\n # `LOCALHOST` and `localhost.`. Matched exactly, these were \"cannot\n # resolve address: \\\"LOCALHOST\\\"\", and so were `Localhost` and\n # `localhost.`.\n def self.localhost?(host : String) : ::Bool\n # What `localhost` stands for, in the order `connect` tries it.\n def self.loopback : Array(IPAddress)\n def self.make_sockaddr_in(ip : IPv4Address, port : Int32) : Pointer(UInt8)\n # A `sockaddr_in6`: family, port, a zero flow label, the address, a zero\n # scope. The family's number and where it sits are the platform's.\n def self.make_sockaddr_in6(ip : IPv6Address, port : Int32) : Pointer(UInt8)\n # A `sockaddr_un`: the family, then the path and its NUL. The room for\n # the path is the platform's - 104 bytes on darwin, 108 elsewhere - and a\n # longer one is refused rather than cut, since a cut path is another\n # path.\n def self.make_sockaddr_un(path : String) : Pointer(UInt8)\n # Whether a small write goes at once (TCP_NODELAY) rather than waiting\n # for an earlier one's acknowledgement, as Nagle's algorithm (RFC 896)\n # has it wait. A connected or accepted TCP socket here sends at once, as\n # Go's net package sets its own; `nodelay = false` turns Nagle back on\n # for a program that writes in pieces it would rather have joined. With\n # Nagle on, a write behind an unacknowledged one waited out the peer's\n # delayed ACK, 40 ms on Linux: measured on loopback, --release, medians\n # of 200, a GET on a new https:// connection took 82.89 ms between\n # std/http's ends and 42.00 to OpenSSL's s_server, and takes 1.07 and\n # 1.10 now; wrk against a server answering a streamed body went from\n # 1,211 to 10,702 requests a second. A unix socket has no Nagle to turn\n # off: it answers false and is left alone.\n def nodelay=(on : ::Bool) : ::Bool\n # Whether TCP_NODELAY is on, as the socket's option reads.\n def nodelay? : ::Bool\n # Dotted-decimal IPv4 only: four octets of 0 to 255, no leading zero\n # (`\"010.1.1.1\"` is refused; glibc's `inet_aton` reads `010` as octal 8,\n # CVE-2021-29921, so it must not quietly be 10 here), plus `localhost`.\n # The refusal inspects the host so a stray space shows.\n def self.parse_ip(host : String) : IPv4Address\n # Eight groups of up to four hex digits, `::` once for a run of zero\n # groups, and a dotted IPv4 tail for the last two (`::ffff:1.2.3.4`). A\n # zone (`fe80::1%eth0`) is refused by name: it names an interface, and\n # this parser has no way to ask the platform which.\n def self.parse_ipv6(host : String) : IPv6Address\n def read(buffer : Pointer(UInt8), count : Int32) : Int32 | Cancelled | SocketError\n def read(max_bytes : Int32 = 4096) : String | Cancelled | SocketError\n # The dotted-decimal reading alone, with the refusal's sentence as the\n # answer instead of a panic: the resolver reads the addresses a hosts\n # file and a resolv.conf write, and a line it cannot read is skipped\n # there, not the end of the program.\n def self.read_ipv4(host : String) : IPv4Address | String\n # The reading alone, the refusal's sentence as the answer: see\n # `read_ipv4`.\n def self.read_ipv6(host : String) : IPv6Address | String\n # The bounds on a read's and a write's wait, in milliseconds; nil waits\n # as long as it takes.\n def read_timeout_ms : Int32 | ::Nil\n def read_timeout_ms=(ms : Int32 | ::Nil) : Int32 | ::Nil\n def recv(buffer : Pointer(UInt8), count : Int32) : Int32 | Cancelled | SocketError\n def recv(max_bytes : Int32 = 4096) : String | Cancelled | SocketError\n # The other end's address and port, as `local_address` and\n # `local_port` give this end's: what a server logs a client by. A unix\n # socket's peer has a path at most, often none (\"\"), and no port. Nil\n # when the other end is gone - the connection was reset or never made -\n # which is the peer's doing and no fault of the program's.\n def remote_address : String | ::Nil\n def remote_port : Int32 | ::Nil\n # Every address *host* stands for, by the machine's resolver, in the\n # resolver's order (see `Resolver#resolve`); `connect` tries them in\n # `attempt_order`'s.\n def self.resolve(host : String) : Array(IPAddress) | DnsError | Cancelled\n def send(buffer : Pointer(UInt8), count : Int32) : Int32 | Cancelled | SocketError\n def send(contents : String) : Int32 | Cancelled | SocketError\n # A host and port as the address a call takes, and its family: an IPv6\n # literal bare or in brackets, anything else IPv4.\n def self.sockaddr(host : String, port : Int32) : Tuple(Pointer(UInt8), Int32)\n # This socket as a stream (`SocketIO`), the same one every time, so\n # what one read took ahead the next reads. It was a stream over the\n # descriptor that read a socket with nothing yet to read as failed.\n def to_io : Std::Socket::SocketIO\n def to_unsafe : Int32\n # Whether this is a unix socket, which has a path where TCP has a port:\n # `remote_port` and `local_port` refuse it. std/tls asks before it keys\n # a session's tickets by the port they came from.\n def unix? : ::Bool\n def write(buffer : Pointer(UInt8), count : Int32) : Int32 | Cancelled | SocketError\n def write(contents : String) : Int32 | Cancelled | SocketError\n def write_timeout_ms : Int32 | ::Nil\n def write_timeout_ms=(ms : Int32 | ::Nil) : Int32 | ::Nil\nend\n\npub alias ResolvConf = Std::Dns::ResolvConf\n\n# A stub resolver: a host name's addresses, from a hosts file and then\n# from name servers, as the C library's resolver finds them - but iyi's,\n# so asking costs no library (see the header of this file).\n#\n# `Resolver.system` is the machine's: `/etc/resolv.conf` and `/etc/hosts`\n# on Linux and darwin, the registry and\n# `%SystemRoot%\\System32\\drivers\\etc\\hosts` on Windows (see\n# `__sys_dns_config` for what the registry can and cannot say). A\n# resolver built with `new` or `from_config` asks exactly what it was\n# given, which is how a test asks a server it runs itself.\n#\n# `resolve` answers every address for a name, IPv4 first and then IPv6,\n# each family in the order the hosts file or the server gave it;\n# `connect` races them in `IyiSocket.attempt_order`'s order:\n#\n# 1. An address, or `localhost` (127.0.0.1 and ::1: RFC 6761 6.3 keeps it\n# off the network), is itself. Anything that is not a host name is\n# `invalid_name?`.\n# 2. The hosts file: every line naming the host, in any case. A name\n# found there is not asked about.\n# 3. The names the search list and `ndots` make of it (`DnsName.candidates`),\n# in order. Each is asked for A and then AAAA records; NXDOMAIN or no\n# records moves on to the next, and any other failure ends the lookup\n# with that failure - a server that timed out on `db.corp.example` must\n# not turn the answer into `db.example`'s (musl's rule; glibc moves on).\n#\n# A and AAAA are asked one after the other, and `connect` starts its race\n# once both have answered. RFC 8305 section 3 asks both at once and\n# starts connecting on the A answer when AAAA is 50 ms behind it; that\n# makes a lookup answer in pieces, and saves the AAAA query's round trip\n# at most - 5 to 65 ms uncached for five names through systemd-resolved\n# on the machine this was written on, 0 to 1 ms cached (dig's query\n# times) - where the race saves what an address that drops SYNs costs,\n# the whole timeout. Asked in turn, an NXDOMAIN for A spares the AAAA\n# query, as it does for most of a search list's candidates.\n#\n# A query is one UDP datagram from a fresh socket (so a fresh source\n# port), with an ID from `Random::Secure`, to each server in turn, each\n# waited for `timeout_ms`, and the round repeated `attempts` times. A\n# datagram that does not carry the ID and the question is ignored and the\n# wait goes on; one from any other address never arrives, because the\n# socket is connected to the server. An answer with TC set is asked again\n# over TCP. SERVFAIL, REFUSED and a server that does not answer move on to\n# the next server; NXDOMAIN is the answer. An answer that cannot be read\n# is ignored like a forgery, and is the failure reported if nothing\n# better arrives before the timeout.\n#\n# Encrypted:\n# `encrypted(upstreams)` is the same resolver - hosts file, search list,\n# `ndots`, timeout and attempts - asking `DnsUpstream`s instead of its\n# plaintext servers: DNS over TLS or over HTTPS, std/secure_dns's\n# `DnsOverTls` and `DnsOverHttps`. Each upstream is asked in turn, the\n# round repeated `attempts` times, as the servers are; A and AAAA go in\n# one exchange. An answer over one is held to more than a datagram is:\n# the ID and the question as ever, and no TC and no byte past the message,\n# since a stream has room for any answer and its frame is the message.\n# The plaintext servers are not asked at all, not even when every\n# upstream is down, unless the caller passes *plaintext_fallback*: RFC\n# 8310 5's strict profile, where a lookup that cannot be private fails,\n# is the default, because falling back hands the very question the\n# program meant to keep private to anyone on the path, and a program\n# that would rather have an answer says so. With *plaintext_fallback*\n# (the opportunistic profile) the plaintext servers are asked only when\n# no upstream could be: one that answered, SERVFAIL included, has spoken.\n# One task at a time per resolver with upstreams: an upstream holds its\n# connection, as an `HTTPClient` does.\npub class Resolver\n protected def ask_upstreams_instead(upstreams : Array(DnsUpstream), plaintext_fallback : Bool) : Nil\n def attempts : Int32\n # *records* by ascending priority, those of one priority shuffled.\n def self.by_priority(records : Array(SvcbRecord)) : Array(SvcbRecord)\n # Every upstream's connections closed.\n def close : Nil\n # This resolver asking *upstreams* instead of its plaintext servers,\n # which are asked only with *plaintext_fallback*, and then only when no\n # upstream could be (see the class).\n def encrypted(upstreams : Array(DnsUpstream), plaintext_fallback : Bool = false) : Resolver\n def encrypted(upstream : DnsUpstream, plaintext_fallback : Bool = false) : Resolver\n # The machine's resolver - its hosts file and search list - asking\n # *upstreams*; its name servers only with *plaintext_fallback*.\n def self.encrypted(upstreams : Array(DnsUpstream), plaintext_fallback : Bool = false) : Resolver\n def self.encrypted(upstream : DnsUpstream, plaintext_fallback : Bool = false) : Resolver\n # A resolver from a parsed resolv.conf and a hosts file's text. A\n # `nameserver` line this resolver cannot use - an IPv6 address with a\n # zone, a typo - is skipped as glibc skips one; with none left, the\n # servers a machine without a configuration is assumed to run.\n def self.from_config(config : ResolvConf, hosts : String = \"\") : Resolver\n # A resolver from a resolv.conf and a hosts file at these paths. A file\n # that is not there reads as empty, as it does to the C library.\n def self.from_files(resolv_conf : String, hosts : String) : Resolver\n # The hosts file's text, read before any server is asked.\n def hosts : String\n # The HTTPS records (RFC 9460 section 9) of the origin `https://host:port`,\n # by SVCB resolution (section 3): the question is *host* for port 443\n # and `_port._https.host` for any other (section 9.1); an AliasMode\n # answer is followed to its target's HTTPS records, at most\n # `SvcbAnswer::MAX_ALIASES` of them, and CNAMEs on the way as `txt`\n # follows them; and the ServiceMode records found are answered by\n # priority, those of one priority in a random order (section 2.4.1).\n # The name is asked as written, as for `txt`, over the upstreams when\n # the resolver has them.\n #\n # Of an AliasMode set one record is followed, at random where there are\n # several (section 2.4.2), and any ServiceMode record beside it is\n # passed over (section 2.4.1). A target that has no HTTPS records ends\n # resolution there, with none: the answer's `name` is the target, which\n # section 3 still has a client connect to. An answer with a record\n # `SvcbRecord.parse` refuses is the whole set refused, `malformed?`, as\n # section 2.2 has it; so is a chain longer than the bound. NXDOMAIN and\n # NODATA for the origin's own name are `not_found?` and `no_address?`,\n # as they are for an address.\n def https_records(host : String, port : Int32 = 443) : SvcbAnswer | DnsError | Cancelled\n # *nameservers* are addresses, each with an optional port:\n # `\"192.0.2.1\"`, `\"192.0.2.1:5353\"`, `\"2001:db8::1\"`,\n # `\"[2001:db8::1]:5353\"`. One that is not is refused here, by name: it is\n # the program's own mistake. None at all is a resolver that reads only\n # *hosts*.\n def initialize(nameservers : Array(String), search : Array(String) = [] of String, ndots : Int32 = 1, timeout_ms : Int32 = 5000, attempts : Int32 = 2, hosts : String = \"\")\n # What NODATA for *type* says the name lacks: its records, by name, for\n # the types asked other than as addresses.\n def self.missing(type : Int32) : String\n def nameservers : Array(String)\n def ndots : Int32\n # The monotonic clock in milliseconds: the runtime's, which its sleep\n # queue keeps deadlines by. A target without the runtime has no socket\n # to wait on either (`__sys_dgram_socket` refuses there), so nothing\n # there reads a time.\n def self.now_ms : Int64\n # The answer to one question over plaintext: each server in turn, the\n # round repeated `attempts` times, until one answers NOERROR or\n # NXDOMAIN. The failure answered otherwise is the last server's.\n protected def plaintext(name : String, type : Int32) : Tuple(DnsMessage, String) | DnsError | Cancelled\n # Whether `nameservers` are asked when no upstream could be (RFC 8310's\n # opportunistic profile); false, the strict one, by default.\n def plaintext_fallback : Bool\n def self.rcode_name(rcode : Int32) : String\n # What an answer's RCODE makes of it: the message for NOERROR, and the\n # failure it says otherwise.\n def self.read_rcode(message : DnsMessage, name : String, label : String) : Tuple(DnsMessage, String) | DnsError\n # An answer that came over a stream, read: see `ask_upstream`.\n def self.read_streamed(bytes : Bytes, id : UInt16, name : String, type : Int32, label : String) : Tuple(DnsMessage, String) | DnsError\n # Every address *host* stands for: see the class's comment for the\n # order things are asked in.\n def resolve(host : String) : Array(IPAddress) | DnsError | Cancelled\n def search : Array(String)\n # A name server written as an address with an optional port, or the\n # sentence saying why it is not one.\n def self.server(text : String) : NameServer | String\n # The machine's resolver, read afresh each time: a configuration the\n # network manager rewrote is the one the next lookup uses.\n def self.system : Resolver\n def timeout_ms : Int32\n # The TXT records of *name*, each one's character-strings joined\n # (`DnsRecord.character_strings`), in the order the answer gave them,\n # CNAMEs followed as `resolve` follows them. The name is asked as\n # written - no hosts file, no search list - since a TXT name\n # (`_acme-challenge.example.com`, a domain's SPF) is written in full.\n def txt(name : String) : Array(String) | DnsError | Cancelled\n # The encrypted upstreams asked instead of `nameservers`; none for a\n # plaintext resolver.\n def upstreams : Array(DnsUpstream)\nend\n\n# A connection's own failure: which operation, and the platform's error\n# number for why - or, for a host name that could not be turned into an\n# address, the resolver's `DnsError`, and no number (`code` 0); or, for a\n# protocol layered on the connection (TLS), that protocol's own sentence,\n# and no number either; or, for a name whose addresses were all tried and\n# none connected, every one of them with how its attempt ended.\npub struct SocketError\n def code : Int32\n # The peer is gone: it reset the connection, or closed it and the write\n # found the pipe broken, or the connection was aborted.\n def disconnected? : ::Bool\n # Why the host's name did not resolve; nil for every other failure.\n def dns_error : DnsError | ::Nil\n # A connect to a name none of whose addresses took the connection:\n # *code* is what `refused?` and `timed_out?` read, and *tried* the\n # sentence naming every address.\n def self.every_address(operation : String, code : Int32, tried : String) : SocketError\n def initialize(operation : String, code : Int32, dns_error : DnsError | ::Nil, layer_reason : String | ::Nil, tried : String | ::Nil)\n def initialize(operation : String, code : Int32, dns_error : DnsError | ::Nil, layer_reason : String | ::Nil)\n def initialize(operation : String, code : Int32, dns_error : DnsError | ::Nil)\n def initialize(operation : String, code : Int32)\n # What the protocol over the connection said went wrong; nil otherwise.\n def layer_reason : String | ::Nil\n # A failure of the protocol over the connection, in its words: `cannot\n # read from example.com: tls: a record that does not decrypt`.\n def self.layered(operation : String, reason : String) : SocketError\n def operation : String\n def reason : String\n def refused? : ::Bool\n # A wait for the peer that ran past its socket's timeout, carrying the\n # platform's own number for it so `reason` and `timed_out?` read it as\n # they read the kernel's.\n def self.timed_out(operation : String) : SocketError\n # The peer did not answer in time: a connect the network timed out, or a\n # read or write past its socket's timeout.\n def timed_out? : ::Bool\n # For a connect to a name that stood for more than one address: each\n # address in the order it was tried and how its attempt ended -\n # `[2001:db8::1]:443 timed out; 192.0.2.1:443 connection refused` - which\n # `reason` answers. Nil for every other failure.\n def tried : String | ::Nil\n def unreachable? : ::Bool\n # The host was a name, and no address came of it: `dns_error` says why\n # (`not_found?` for NXDOMAIN, `server_failure?` for SERVFAIL, ...).\n def unresolved? : ::Bool\nend\n\n# A socket as a stream, for what is written against streams: `read_line`,\n# `puts`, `IyiIO.copy` between it and a file or a pipe. Its reads and\n# writes are the socket's own, which park the task and keep its\n# timeouts. A stream has no error to answer, so a read the socket refuses\n# ends the stream, `read_failed?` true, and a write it refuses panics,\n# naming the reason; a program that answers those reads the socket.\n# Writes are buffered: `flush`, or `IyiIO.copy`, which flushes, sends\n# them. Closing it closes the socket.\npub class SocketIO < ::IyiIO\n def initialize(socket : IyiSocket, buffer_size : Int32 = 4096)\n def socket : IyiSocket\nend\n\nimpl Error for SocketError\n def message : String\nend\n" + "sourceSha256": "e1aed6d7be317e86498164135754a78ca1535000053b26562db8b42d60780b0f", + "surface": "module std/socket\n\n# What a resolver answers and is built from, under the names a program\n# that connects by name already imports from here.\npub alias DnsError = Std::Dns::DnsError\n\n# An encrypted way to a name server, asked by a resolver `Resolver#encrypted`\n# made instead of its plaintext servers: std/secure_dns's `DnsOverTls`\n# (RFC 7858) and `DnsOverHttps` (RFC 8484). The trait is here and they are\n# there because they speak std/tls and std/http, which import this module,\n# and R-1 refuses the cycle - as std/http's `CookieStore` is std/cookie's\n# to implement.\npub trait DnsUpstream\n # Its connections closed; the next exchange opens new ones.\n abstract def close : Nil\n # The answer to each of *queries*, in their order, each one whole\n # message as it came; or why there are none. *timeout_ms* bounds each\n # wait on the server. An answer is matched to its query by the\n # transport - by ID over one connection, by request over HTTP - and the\n # resolver then reads it as it reads a datagram.\n abstract def exchange(queries : Array(Bytes), timeout_ms : Int32) : Array(Bytes) | DnsError | Cancelled\n # How a message names it: `dns.test (127.0.0.1:853) over TLS`.\n abstract def label : String\n # Whether its queries carry the ID 0: DNS over HTTPS's, which RFC 8484\n # 4.1 asks for so that an HTTP cache sees one request for one question.\n # The answer must carry the ID the query did all the same.\n abstract def zero_id? : Bool\nend\n\n# Either family's address: what a resolver answers for a name.\npub alias IPAddress = IPv4Address | IPv6Address\n\npub struct IPv4Address\n def b0 : UInt8\n def b1 : UInt8\n def b2 : UInt8\n def b3 : UInt8\n def initialize(b0 : UInt8, b1 : UInt8, b2 : UInt8, b3 : UInt8)\n def to_s : String\nend\n\n# Sixteen bytes in network order, held as two words: `high` is bytes 0 to\n# 7. Written the RFC 5952 way - lowercase, no leading zeros, the longest\n# run of two or more zero groups as `::`, the first of two equal runs -\n# and an IPv4-mapped address with its dotted tail, `::ffff:192.0.2.1`.\npub struct IPv6Address\n # Byte *index*, 0 to 15.\n def [](index : Int32) : UInt8\n # The 16-bit group *index*, 0 to 7. Not `group`: that name is the task\n # group's in iyi (SPEC.md III.4.9).\n def hextet(index : Int32) : Int32\n def high : UInt64\n def initialize(high : UInt64, low : UInt64)\n def low : UInt64\n # The sixteen bytes at *bytes*, network order.\n def self.new(bytes : Pointer(UInt8)) : IPv6Address\n def to_s : String\nend\n\npub class IyiSocket\n # Room for any family's `sockaddr`, zeroed, so a unix path the kernel\n # did not end with a NUL still ends.\n def self.__address_room : Pointer(UInt8)\n # A `sockaddr` the kernel filled, as text: dotted IPv4, IPv6 written as\n # RFC 5952 has it, or a unix socket's path.\n def self.__address_text(addr : Pointer(UInt8), family : Int32) : String\n # What every connected and accepted socket starts with: TCP_NODELAY, on\n # TCP; a unix socket has no Nagle.\n def self.__send_at_once(fd : Int32, family : Int32) : Nil\n def self.__sys3(number : Int64, a : Int64, b : Int64, c : Int64) : Int64\n def self.__sys5(number : Int64, a : Int64, b : Int64, c : Int64, d : Int64, e : Int64) : Int64\n def self.__sys6(number : Int64, a : Int64, b : Int64, c : Int64, d : Int64, e : Int64, f : Int64) : Int64\n def self.__sys_accept(fd : Int32, addr : Pointer(UInt8), addrlen : Pointer(UInt32), family : Int32) : Int32\n def self.__sys_addr_size(family : Int32) : Int64\n def self.__sys_bind(fd : Int32, addr : Pointer(UInt8), family : Int32) : Int32\n # Every close of a socket in this file goes through here. `__iyi_close` is\n # the descriptor close, and on Windows a socket is not a descriptor:\n # `CloseHandle` on a SOCKET releases the kernel handle and leaves Winsock's\n # half of it standing, and the graceful close that makes a peer's read\n # answer EOF rather than a reset is `closesocket`'s.\n def self.__sys_close(fd : Int32) : Nil\n # A raw syscall's negative errno, as the number.\n def self.__sys_code(result : Int64) : Int32\n # *ms* is `connect_to`'s wait's: the call answers EINPROGRESS at once.\n def self.__sys_connect(fd : Int32, addr : Pointer(UInt8), family : Int32, ms : Int32) : Int32\n def self.__sys_connects_blocking?(family : Int32) : ::Bool\n def self.__sys_dgram_connect(fd : Int32, addr : Pointer(UInt8), family : Int32) : Int32\n def self.__sys_dgram_send(fd : Int32, buf : Pointer(UInt8), len : UInt64) : Int64\n # The resolver's datagram socket: see the darwin arm. The raw call\n # answers the negative errno, which `__sys_code` reads.\n def self.__sys_dgram_socket(family : Int32) : Int32\n def self.__sys_dgram_wait(fd : Int32, ms : Int32) : ::Bool | Cancelled\n def self.__sys_getpeername(fd : Int32, addr : Pointer(UInt8), addrlen : Pointer(UInt32)) : Int32\n def self.__sys_getsockname(fd : Int32, addr : Pointer(UInt8), addrlen : Pointer(UInt32)) : Int32\n def self.__sys_in_progress?(result : Int32) : ::Bool\n def self.__sys_listen(fd : Int32, backlog : Int32) : Int32\n def self.__sys_no_sigpipe(fd : Int32) : Nil\n def self.__sys_nodelay?(fd : Int32) : ::Bool\n # `ppoll` on one descriptor for *ms* milliseconds - a timespec, or none\n # for -1 - and no signal mask. 0 when the time ran out.\n def self.__sys_poll(fd : Int32, events : Int32, ms : Int32) : Int32\n def self.__sys_recv(fd : Int32, buf : Pointer(UInt8), len : UInt64) : Int64\n # MSG_NOSIGNAL (0x4000): a write to a connection the peer closed answers\n # EPIPE instead of killing the process with SIGPIPE.\n def self.__sys_send(fd : Int32, buf : Pointer(UInt8), len : UInt64, ms : Int32) : Int64\n # TCP_NODELAY (1) at IPPROTO_TCP (6): Nagle's algorithm off when *on*.\n def self.__sys_set_nodelay(fd : Int32, on : ::Bool) : Int32\n # F_GETFL (3), then F_SETFL (4) with O_NONBLOCK (0x800) added.\n def self.__sys_set_nonblock(fd : Int32) : Int32\n def self.__sys_set_reuseaddr(fd : Int32) : Int32\n # IPV6_V6ONLY (26) at IPPROTO_IPV6 (41).\n def self.__sys_set_v6only(fd : Int32) : Int32\n def self.__sys_shutdown_write(fd : Int32) : Int64\n # SO_ERROR (4) at SOL_SOCKET (1): what a connect that was in progress\n # ended with, 0 when it went through.\n def self.__sys_sock_error(fd : Int32) : Int32\n def self.__sys_socket(family : Int32) : Int32\n # A raw syscall answers the negative errno: EAGAIN is 11, EINPROGRESS 115.\n def self.__sys_would_block?(result : Int64) : ::Bool\n def accept : IyiSocket | Cancelled | SocketError\n # The order `connect` tries a name's addresses in (RFC 8305 section 4):\n # one family's first address, then the other's, alternating, each family\n # in the resolver's order, and the longer family's rest at the end.\n # IPv6 goes first when this machine has a route to the first IPv6\n # address - RFC 6724's first rule, asked the way glibc's getaddrinfo\n # asks it, by connecting a UDP socket, which sends nothing - and IPv4\n # first when it has none, so a machine without IPv6 does not start every\n # connect with an attempt that cannot leave it. A name of one family is\n # left in the resolver's order, and asks nothing.\n def self.attempt_order(addresses : Array(IPAddress)) : Array(IPAddress)\n def self.await_readable(fd : Int32, ms : Int32 = -1) : ::Bool | Cancelled\n def self.await_writable(fd : Int32, ms : Int32 = -1) : ::Bool | Cancelled\n # A timeout as the waits take it: milliseconds, -1 for none.\n def self.bound(ms : Int32 | ::Nil) : Int32\n protected def bound_path(path : String) : Nil\n # *path* with the NUL a system call reads to.\n def self.c_path(path : String) : Pointer(UInt8)\n def close : Nil\n # The sending half ended, the receiving half kept: the peer reads the\n # end of the stream after what was written, and this end goes on reading\n # what the peer still sends until its own end. `shutdown(SHUT_WR)` on\n # POSIX, `shutdown(SD_SEND)` on Windows. A socket that is not connected\n # answers the platform's refusal as a `SocketError`; `close` is still\n # what gives the socket back.\n def close_write : SocketError | ::Nil\n def closed? : ::Bool\n # A host name is resolved by the machine's resolver (`Resolver.system`);\n # a name that does not resolve is a `SocketError` whose `unresolved?` is\n # true and whose sentence names the host. It panicked, \"cannot resolve\n # address: \\\"example.com\\\"\", for every name but `localhost`, so\n # `HTTP.get(\"http://example.com/\")` could not run.\n #\n # A name with more than one address is raced, Happy Eyeballs v2 (RFC\n # 8305): the first address is tried, the next `ATTEMPT_DELAY_MS` later\n # without waiting for the first to fail, or at once when an attempt\n # fails, and so on down the list (`attempt_order`'s: IPv6 first when\n # this machine has a route to it, the families alternating). The first\n # handshake to finish wins, and every other attempt is cancelled and its\n # socket closed before `connect` answers. The addresses were tried one\n # after another, IPv4 first, each with the whole timeout: a name whose\n # first address dropped SYNs cost all of *timeout_ms* - or the kernel's\n # two minutes of retries, unbounded - before the second was tried. Now\n # it costs the delay: 250 ms to a name whose first address is a full\n # listen queue and whose second listens (`bench/std_dns_exercise.sh`,\n # under a 5,000 ms bound).\n #\n # `localhost` is raced the same way, 127.0.0.1 and then ::1, without\n # asking the routing table: a listener here binds `localhost` at\n # 127.0.0.1, so it goes first, and Windows, which names ::1 first, has\n # dev servers that bind ::1 alone. This replaces the rule that tried\n # ::1 only after 127.0.0.1 refused: Windows takes 2 s to refuse a\n # connect, so a ::1-only listener was reached in 2017 ms and a port\n # nobody holds refused in 4059 ms, where now ::1 starts 250 ms after\n # 127.0.0.1 whatever 127.0.0.1 is still doing.\n #\n # *timeout_ms* bounds the whole connect, every attempt together (-1: as\n # long as the kernel waits, which on Linux is about two minutes of SYN\n # retries for a host that drops them). It bounded each address's\n # handshake, which a race has no use for: an attempt started 500 ms in\n # would have run 500 ms past the caller's bound. A connect that runs out\n # is a `SocketError` whose `timed_out?` is true. The name's lookup is\n # outside it, held by the resolver's own `timeout_ms` and `attempts`.\n #\n # A name none of whose addresses connects is one `SocketError` that\n # names each address in the order tried and how its attempt ended,\n # `tried`: `cannot connect to example.com:443: [2001:db8::1]:443 timed\n # out; 192.0.2.1:443 connection refused`. It answered the first\n # address's failure alone. Its `code` is the first attempt's, or a\n # timeout's when the time ran out first. A name with one address is\n # connected to as an address is, and fails with that address's error.\n def self.connect(host : String, port : Int32, timeout_ms : Int32 = -1) : IyiSocket | Cancelled | SocketError\n # The same, with a host name resolved by *resolver*: name servers, a\n # hosts file and search list of the program's choosing, rather than the\n # machine's. An address and `localhost` are what they are either way.\n def self.connect(host : String, port : Int32, resolver : Resolver, timeout_ms : Int32 = -1) : IyiSocket | Cancelled | SocketError\n # A connect to *addr*, waiting at most *ms* milliseconds for the\n # handshake (-1: as long as the kernel does). The resolver's TCP query\n # and `connect` to an address are its callers with a bound; a race's\n # attempts wait as the kernel does, and the race keeps the bound. The\n # bound reaches `__sys_connect` as well as the wait after it, because\n # on Windows that call is the wait: it parks in `ConnectEx` until the\n # handshake is over.\n def self.connect_to(addr : Pointer(UInt8), family : Int32, peer : String, ms : Int32 = -1) : IyiSocket | Cancelled | SocketError\n # The stream socket listening at *path*.\n def self.connect_unix(path : String) : IyiSocket | Cancelled | SocketError\n # *host* and *port* as a message names them: an IPv6 literal in its\n # brackets, as a URL writes it. Bare, `::1:57456` was an address with\n # no port, and `ff02::1:80` another address altogether.\n def self.endpoint(host : String, port : Int32) : String\n # The address family, the platform's number for it: an accepted\n # connection is its listener's, and on Windows the socket `AcceptEx`\n # fills in has to be made in it. With `fd`, what makes the socket again\n # on another thread (std/http's `Server.serve`, on its pool).\n def family : Int32\n def fd : Int32\n def initialize(fd : Int32, family : Int32 = AF_INET)\n def self.listen(host : String, port : Int32, backlog : Int32 = 128) : IyiSocket\n def self.listen(port : Int32, backlog : Int32 = 128) : IyiSocket\n # A stream socket at *path*. The path must not exist: a socket file an\n # earlier run left behind is refused rather than taken over, since\n # which program owns it is not something a bind can know. `close`\n # removes the file.\n def self.listen_unix(path : String, backlog : Int32 = 128) : IyiSocket\n def local_address : String\n # The port sits at the same two bytes of a `sockaddr_in` and a\n # `sockaddr_in6`.\n def local_port : Int32\n # `localhost` in any case, and with the one trailing dot of a name\n # written fully qualified: a host name's case is not part of it (RFC\n # 4343), and getaddrinfo, Python and curl all answer 127.0.0.1 for\n # `LOCALHOST` and `localhost.`. Matched exactly, these were \"cannot\n # resolve address: \\\"LOCALHOST\\\"\", and so were `Localhost` and\n # `localhost.`.\n def self.localhost?(host : String) : ::Bool\n # What `localhost` stands for, in the order `connect` tries it.\n def self.loopback : Array(IPAddress)\n def self.make_sockaddr_in(ip : IPv4Address, port : Int32) : Pointer(UInt8)\n # A `sockaddr_in6`: family, port, a zero flow label, the address, a zero\n # scope. The family's number and where it sits are the platform's.\n def self.make_sockaddr_in6(ip : IPv6Address, port : Int32) : Pointer(UInt8)\n # A `sockaddr_un`: the family, then the path and its NUL. The room for\n # the path is the platform's - 104 bytes on darwin, 108 elsewhere - and a\n # longer one is refused rather than cut, since a cut path is another\n # path.\n def self.make_sockaddr_un(path : String) : Pointer(UInt8)\n # Whether a small write goes at once (TCP_NODELAY) rather than waiting\n # for an earlier one's acknowledgement, as Nagle's algorithm (RFC 896)\n # has it wait. A connected or accepted TCP socket here sends at once, as\n # Go's net package sets its own; `nodelay = false` turns Nagle back on\n # for a program that writes in pieces it would rather have joined. With\n # Nagle on, a write behind an unacknowledged one waited out the peer's\n # delayed ACK, 40 ms on Linux: measured on loopback, --release, medians\n # of 200, a GET on a new https:// connection took 82.89 ms between\n # std/http's ends and 42.00 to OpenSSL's s_server, and takes 1.07 and\n # 1.10 now; wrk against a server answering a streamed body went from\n # 1,211 to 10,702 requests a second. A unix socket has no Nagle to turn\n # off: it answers false and is left alone.\n def nodelay=(on : ::Bool) : ::Bool\n # Whether TCP_NODELAY is on, as the socket's option reads.\n def nodelay? : ::Bool\n # Dotted-decimal IPv4 only: four octets of 0 to 255, no leading zero\n # (`\"010.1.1.1\"` is refused; glibc's `inet_aton` reads `010` as octal 8,\n # CVE-2021-29921, so it must not quietly be 10 here), plus `localhost`.\n # The refusal inspects the host so a stray space shows.\n def self.parse_ip(host : String) : IPv4Address\n # Eight groups of up to four hex digits, `::` once for a run of zero\n # groups, and a dotted IPv4 tail for the last two (`::ffff:1.2.3.4`). A\n # zone (`fe80::1%eth0`) is refused by name: it names an interface, and\n # this parser has no way to ask the platform which.\n def self.parse_ipv6(host : String) : IPv6Address\n def read(buffer : Pointer(UInt8), count : Int32) : Int32 | Cancelled | SocketError\n def read(max_bytes : Int32 = 4096) : String | Cancelled | SocketError\n # Reads into *buffer*, as many bytes as one read gives and at most its\n # size: the count, or why not. The checked spelling of\n # `read(buffer.to_unsafe, buffer.size)` (SPEC.md III.13).\n def read(buffer : Bytes) : Int32 | Cancelled | SocketError\n # The dotted-decimal reading alone, with the refusal's sentence as the\n # answer instead of a panic: the resolver reads the addresses a hosts\n # file and a resolv.conf write, and a line it cannot read is skipped\n # there, not the end of the program.\n def self.read_ipv4(host : String) : IPv4Address | String\n # The reading alone, the refusal's sentence as the answer: see\n # `read_ipv4`.\n def self.read_ipv6(host : String) : IPv6Address | String\n # The bounds on a read's and a write's wait, in milliseconds; nil waits\n # as long as it takes.\n def read_timeout_ms : Int32 | ::Nil\n def read_timeout_ms=(ms : Int32 | ::Nil) : Int32 | ::Nil\n def recv(buffer : Pointer(UInt8), count : Int32) : Int32 | Cancelled | SocketError\n def recv(max_bytes : Int32 = 4096) : String | Cancelled | SocketError\n # The other end's address and port, as `local_address` and\n # `local_port` give this end's: what a server logs a client by. A unix\n # socket's peer has a path at most, often none (\"\"), and no port. Nil\n # when the other end is gone - the connection was reset or never made -\n # which is the peer's doing and no fault of the program's.\n def remote_address : String | ::Nil\n def remote_port : Int32 | ::Nil\n # Every address *host* stands for, by the machine's resolver, in the\n # resolver's order (see `Resolver#resolve`); `connect` tries them in\n # `attempt_order`'s.\n def self.resolve(host : String) : Array(IPAddress) | DnsError | Cancelled\n def send(buffer : Pointer(UInt8), count : Int32) : Int32 | Cancelled | SocketError\n def send(contents : String) : Int32 | Cancelled | SocketError\n # A host and port as the address a call takes, and its family: an IPv6\n # literal bare or in brackets, anything else IPv4.\n def self.sockaddr(host : String, port : Int32) : Tuple(Pointer(UInt8), Int32)\n # This socket as a stream (`SocketIO`), the same one every time, so\n # what one read took ahead the next reads. It was a stream over the\n # descriptor that read a socket with nothing yet to read as failed.\n def to_io : Std::Socket::SocketIO\n def to_unsafe : Int32\n # Whether this is a unix socket, which has a path where TCP has a port:\n # `remote_port` and `local_port` refuse it. std/tls asks before it keys\n # a session's tickets by the port they came from.\n def unix? : ::Bool\n def write(buffer : Pointer(UInt8), count : Int32) : Int32 | Cancelled | SocketError\n def write(contents : String) : Int32 | Cancelled | SocketError\n # Writes all of *bytes*: the count, or why not.\n def write(bytes : Bytes) : Int32 | Cancelled | SocketError\n def write_timeout_ms : Int32 | ::Nil\n def write_timeout_ms=(ms : Int32 | ::Nil) : Int32 | ::Nil\nend\n\npub alias ResolvConf = Std::Dns::ResolvConf\n\n# A stub resolver: a host name's addresses, from a hosts file and then\n# from name servers, as the C library's resolver finds them - but iyi's,\n# so asking costs no library (see the header of this file).\n#\n# `Resolver.system` is the machine's: `/etc/resolv.conf` and `/etc/hosts`\n# on Linux and darwin, the registry and\n# `%SystemRoot%\\System32\\drivers\\etc\\hosts` on Windows (see\n# `__sys_dns_config` for what the registry can and cannot say). A\n# resolver built with `new` or `from_config` asks exactly what it was\n# given, which is how a test asks a server it runs itself.\n#\n# `resolve` answers every address for a name, IPv4 first and then IPv6,\n# each family in the order the hosts file or the server gave it;\n# `connect` races them in `IyiSocket.attempt_order`'s order:\n#\n# 1. An address, or `localhost` (127.0.0.1 and ::1: RFC 6761 6.3 keeps it\n# off the network), is itself. Anything that is not a host name is\n# `invalid_name?`.\n# 2. The hosts file: every line naming the host, in any case. A name\n# found there is not asked about.\n# 3. The names the search list and `ndots` make of it (`DnsName.candidates`),\n# in order. Each is asked for A and then AAAA records; NXDOMAIN or no\n# records moves on to the next, and any other failure ends the lookup\n# with that failure - a server that timed out on `db.corp.example` must\n# not turn the answer into `db.example`'s (musl's rule; glibc moves on).\n#\n# A and AAAA are asked one after the other, and `connect` starts its race\n# once both have answered. RFC 8305 section 3 asks both at once and\n# starts connecting on the A answer when AAAA is 50 ms behind it; that\n# makes a lookup answer in pieces, and saves the AAAA query's round trip\n# at most - 5 to 65 ms uncached for five names through systemd-resolved\n# on the machine this was written on, 0 to 1 ms cached (dig's query\n# times) - where the race saves what an address that drops SYNs costs,\n# the whole timeout. Asked in turn, an NXDOMAIN for A spares the AAAA\n# query, as it does for most of a search list's candidates.\n#\n# A query is one UDP datagram from a fresh socket (so a fresh source\n# port), with an ID from `Random::Secure`, to each server in turn, each\n# waited for `timeout_ms`, and the round repeated `attempts` times. A\n# datagram that does not carry the ID and the question is ignored and the\n# wait goes on; one from any other address never arrives, because the\n# socket is connected to the server. An answer with TC set is asked again\n# over TCP. SERVFAIL, REFUSED and a server that does not answer move on to\n# the next server; NXDOMAIN is the answer. An answer that cannot be read\n# is ignored like a forgery, and is the failure reported if nothing\n# better arrives before the timeout.\n#\n# Encrypted:\n# `encrypted(upstreams)` is the same resolver - hosts file, search list,\n# `ndots`, timeout and attempts - asking `DnsUpstream`s instead of its\n# plaintext servers: DNS over TLS or over HTTPS, std/secure_dns's\n# `DnsOverTls` and `DnsOverHttps`. Each upstream is asked in turn, the\n# round repeated `attempts` times, as the servers are; A and AAAA go in\n# one exchange. An answer over one is held to more than a datagram is:\n# the ID and the question as ever, and no TC and no byte past the message,\n# since a stream has room for any answer and its frame is the message.\n# The plaintext servers are not asked at all, not even when every\n# upstream is down, unless the caller passes *plaintext_fallback*: RFC\n# 8310 5's strict profile, where a lookup that cannot be private fails,\n# is the default, because falling back hands the very question the\n# program meant to keep private to anyone on the path, and a program\n# that would rather have an answer says so. With *plaintext_fallback*\n# (the opportunistic profile) the plaintext servers are asked only when\n# no upstream could be: one that answered, SERVFAIL included, has spoken.\n# One task at a time per resolver with upstreams: an upstream holds its\n# connection, as an `HTTPClient` does.\npub class Resolver\n protected def ask_upstreams_instead(upstreams : Array(DnsUpstream), plaintext_fallback : Bool) : Nil\n def attempts : Int32\n # *records* by ascending priority, those of one priority shuffled.\n def self.by_priority(records : Array(SvcbRecord)) : Array(SvcbRecord)\n # Every upstream's connections closed.\n def close : Nil\n # This resolver asking *upstreams* instead of its plaintext servers,\n # which are asked only with *plaintext_fallback*, and then only when no\n # upstream could be (see the class).\n def encrypted(upstreams : Array(DnsUpstream), plaintext_fallback : Bool = false) : Resolver\n def encrypted(upstream : DnsUpstream, plaintext_fallback : Bool = false) : Resolver\n # The machine's resolver - its hosts file and search list - asking\n # *upstreams*; its name servers only with *plaintext_fallback*.\n def self.encrypted(upstreams : Array(DnsUpstream), plaintext_fallback : Bool = false) : Resolver\n def self.encrypted(upstream : DnsUpstream, plaintext_fallback : Bool = false) : Resolver\n # A resolver from a parsed resolv.conf and a hosts file's text. A\n # `nameserver` line this resolver cannot use - an IPv6 address with a\n # zone, a typo - is skipped as glibc skips one; with none left, the\n # servers a machine without a configuration is assumed to run.\n def self.from_config(config : ResolvConf, hosts : String = \"\") : Resolver\n # A resolver from a resolv.conf and a hosts file at these paths. A file\n # that is not there reads as empty, as it does to the C library.\n def self.from_files(resolv_conf : String, hosts : String) : Resolver\n # The hosts file's text, read before any server is asked.\n def hosts : String\n # The HTTPS records (RFC 9460 section 9) of the origin `https://host:port`,\n # by SVCB resolution (section 3): the question is *host* for port 443\n # and `_port._https.host` for any other (section 9.1); an AliasMode\n # answer is followed to its target's HTTPS records, at most\n # `SvcbAnswer::MAX_ALIASES` of them, and CNAMEs on the way as `txt`\n # follows them; and the ServiceMode records found are answered by\n # priority, those of one priority in a random order (section 2.4.1).\n # The name is asked as written, as for `txt`, over the upstreams when\n # the resolver has them.\n #\n # Of an AliasMode set one record is followed, at random where there are\n # several (section 2.4.2), and any ServiceMode record beside it is\n # passed over (section 2.4.1). A target that has no HTTPS records ends\n # resolution there, with none: the answer's `name` is the target, which\n # section 3 still has a client connect to. An answer with a record\n # `SvcbRecord.parse` refuses is the whole set refused, `malformed?`, as\n # section 2.2 has it; so is a chain longer than the bound. NXDOMAIN and\n # NODATA for the origin's own name are `not_found?` and `no_address?`,\n # as they are for an address.\n def https_records(host : String, port : Int32 = 443) : SvcbAnswer | DnsError | Cancelled\n # *nameservers* are addresses, each with an optional port:\n # `\"192.0.2.1\"`, `\"192.0.2.1:5353\"`, `\"2001:db8::1\"`,\n # `\"[2001:db8::1]:5353\"`. One that is not is refused here, by name: it is\n # the program's own mistake. None at all is a resolver that reads only\n # *hosts*.\n def initialize(nameservers : Array(String), search : Array(String) = [] of String, ndots : Int32 = 1, timeout_ms : Int32 = 5000, attempts : Int32 = 2, hosts : String = \"\")\n # What NODATA for *type* says the name lacks: its records, by name, for\n # the types asked other than as addresses.\n def self.missing(type : Int32) : String\n def nameservers : Array(String)\n def ndots : Int32\n # The monotonic clock in milliseconds: the runtime's, which its sleep\n # queue keeps deadlines by. A target without the runtime has no socket\n # to wait on either (`__sys_dgram_socket` refuses there), so nothing\n # there reads a time.\n def self.now_ms : Int64\n # The answer to one question over plaintext: each server in turn, the\n # round repeated `attempts` times, until one answers NOERROR or\n # NXDOMAIN. The failure answered otherwise is the last server's.\n protected def plaintext(name : String, type : Int32) : Tuple(DnsMessage, String) | DnsError | Cancelled\n # Whether `nameservers` are asked when no upstream could be (RFC 8310's\n # opportunistic profile); false, the strict one, by default.\n def plaintext_fallback : Bool\n def self.rcode_name(rcode : Int32) : String\n # What an answer's RCODE makes of it: the message for NOERROR, and the\n # failure it says otherwise.\n def self.read_rcode(message : DnsMessage, name : String, label : String) : Tuple(DnsMessage, String) | DnsError\n # An answer that came over a stream, read: see `ask_upstream`.\n def self.read_streamed(bytes : Bytes, id : UInt16, name : String, type : Int32, label : String) : Tuple(DnsMessage, String) | DnsError\n # Every address *host* stands for: see the class's comment for the\n # order things are asked in.\n def resolve(host : String) : Array(IPAddress) | DnsError | Cancelled\n def search : Array(String)\n # A name server written as an address with an optional port, or the\n # sentence saying why it is not one.\n def self.server(text : String) : NameServer | String\n # The machine's resolver, read afresh each time: a configuration the\n # network manager rewrote is the one the next lookup uses.\n def self.system : Resolver\n def timeout_ms : Int32\n # The TXT records of *name*, each one's character-strings joined\n # (`DnsRecord.character_strings`), in the order the answer gave them,\n # CNAMEs followed as `resolve` follows them. The name is asked as\n # written - no hosts file, no search list - since a TXT name\n # (`_acme-challenge.example.com`, a domain's SPF) is written in full.\n def txt(name : String) : Array(String) | DnsError | Cancelled\n # The encrypted upstreams asked instead of `nameservers`; none for a\n # plaintext resolver.\n def upstreams : Array(DnsUpstream)\nend\n\n# A connection's own failure: which operation, and the platform's error\n# number for why - or, for a host name that could not be turned into an\n# address, the resolver's `DnsError`, and no number (`code` 0); or, for a\n# protocol layered on the connection (TLS), that protocol's own sentence,\n# and no number either; or, for a name whose addresses were all tried and\n# none connected, every one of them with how its attempt ended.\npub struct SocketError\n def code : Int32\n # The peer is gone: it reset the connection, or closed it and the write\n # found the pipe broken, or the connection was aborted.\n def disconnected? : ::Bool\n # Why the host's name did not resolve; nil for every other failure.\n def dns_error : DnsError | ::Nil\n # A connect to a name none of whose addresses took the connection:\n # *code* is what `refused?` and `timed_out?` read, and *tried* the\n # sentence naming every address.\n def self.every_address(operation : String, code : Int32, tried : String) : SocketError\n def initialize(operation : String, code : Int32, dns_error : DnsError | ::Nil, layer_reason : String | ::Nil, tried : String | ::Nil)\n def initialize(operation : String, code : Int32, dns_error : DnsError | ::Nil, layer_reason : String | ::Nil)\n def initialize(operation : String, code : Int32, dns_error : DnsError | ::Nil)\n def initialize(operation : String, code : Int32)\n # What the protocol over the connection said went wrong; nil otherwise.\n def layer_reason : String | ::Nil\n # A failure of the protocol over the connection, in its words: `cannot\n # read from example.com: tls: a record that does not decrypt`.\n def self.layered(operation : String, reason : String) : SocketError\n def operation : String\n def reason : String\n def refused? : ::Bool\n # A wait for the peer that ran past its socket's timeout, carrying the\n # platform's own number for it so `reason` and `timed_out?` read it as\n # they read the kernel's.\n def self.timed_out(operation : String) : SocketError\n # The peer did not answer in time: a connect the network timed out, or a\n # read or write past its socket's timeout.\n def timed_out? : ::Bool\n # For a connect to a name that stood for more than one address: each\n # address in the order it was tried and how its attempt ended -\n # `[2001:db8::1]:443 timed out; 192.0.2.1:443 connection refused` - which\n # `reason` answers. Nil for every other failure.\n def tried : String | ::Nil\n def unreachable? : ::Bool\n # The host was a name, and no address came of it: `dns_error` says why\n # (`not_found?` for NXDOMAIN, `server_failure?` for SERVFAIL, ...).\n def unresolved? : ::Bool\nend\n\n# A socket as a stream, for what is written against streams: `read_line`,\n# `puts`, `IyiIO.copy` between it and a file or a pipe. Its reads and\n# writes are the socket's own, which park the task and keep its\n# timeouts. A stream has no error to answer, so a read the socket refuses\n# ends the stream, `read_failed?` true, and a write it refuses panics,\n# naming the reason; a program that answers those reads the socket.\n# Writes are buffered: `flush`, or `IyiIO.copy`, which flushes, sends\n# them. Closing it closes the socket.\npub class SocketIO < ::IyiIO\n def initialize(socket : IyiSocket, buffer_size : Int32 = 4096)\n def socket : IyiSocket\nend\n\nimpl Error for SocketError\n def message : String\nend\n" }, { "name": "std/sse", "path": "src/std/sse.iyi", - "sourceSha256": "0655aa4b8fe9e1461e7ca318b7a6067435c790f2e52686897211abe79cb83269", + "sourceSha256": "6e80fccb4686258b20300faefc16c3e466feb7e834c208af77846818eac77af7", "surface": "module std/sse\n\n# One dispatched event: its type (`message` unless the stream named one\n# with `event:`), its data, and the last event ID as it stood when it was\n# dispatched, which an event without an `id:` field inherits.\npub struct Event\n def data : String\n def event : String\n def id : String\n def initialize(event : String, data : String, id : String)\nend\n\n# §9.2.6's interpretation of an event stream, fed its bytes as they come:\n# `feed(bytes) { |event| ... }` yields each event a blank line\n# dispatches, and keeps what a piece ended inside - a line, an event, the\n# CR of a CRLF - for the next. `finish` discards it, as the end of a\n# stream does. `last_event_id` is the source's last event ID string,\n# set at each blank line; `retry` the reconnection time the stream set,\n# nil until it sets one; `dispatched` the events yielded so far.\npub class EventParser\n # A `retry` value: ASCII digits and nothing else, base ten, saturating\n # at `MAX_RETRY`; nil for anything else, the empty value included.\n protected def self.digits(text : String) : Int32 | ::Nil\n def dispatched : Int64\n def feed(text : String, & : (Event -> Nil)) : Nil\n # The end of the stream: a line or an event not yet ended is discarded,\n # not dispatched. The last event ID and the reconnection time stay.\n def finish : Nil\n # A parser for a stream whose last event ID is *last_event_id* so far:\n # a reconnection's, which carries the one before it (see the module's\n # header for why).\n def initialize(last_event_id : String = \"\")\n def last_event_id : String\n def retry : Int32 | ::Nil\nend\n\n# What `SSE.stream`'s block writes with: an event a `send`, a comment a\n# `comment`, each one chunk sent at once. The first write that fails -\n# the client went - is kept, and it and every write after it answer it;\n# `gone?` says whether one has.\npub class EventWriter\n # A comment, a `:` line per line of *text*: read past by every client,\n # and a write that finds a client gone.\n def comment(text : String = \"\") : Nil | Cancelled | SocketError\n # Whether a write found the client gone.\n def gone? : Bool\n def initialize(writer : BodyWriter)\n # *text* cut at each CRLF, CR and LF: one line for a text without one,\n # an empty last line for a text that ends with one.\n protected def self.lines(text : String) : Array(String)\n # One event: `event:`, `id:` and `retry:` when given, *data* a `data:`\n # line per line (CRLF, CR and LF each end one, and each arrives as LF),\n # then the blank line that dispatches it. An empty *data* is an event\n # whose data is empty; an empty *id* resets the client's last event ID.\n def send(data : String, event : String | ::Nil = nil, id : String | ::Nil = nil, retry : Int32 | ::Nil = nil) : Nil | Cancelled | SocketError\n protected def self.utf8(text : String, what : String) : Nil\nend\n\npub struct SSE\n # Whether a `Content-Type` is `text/event-stream`, in any case, with any\n # parameters.\n def self.event_stream?(type : String) : Bool\n # One connection's answer read: true when the block stopped, false when\n # the stream ended, or why it could not be read.\n protected def self.follow(response : Response, parser : EventParser, block : Proc(Event, Bool)) : Bool | SSEError | Cancelled | SocketError | HTTPError\n def initialize\n # The event stream at *url*, each event handed to *block*, which answers\n # true to go on and false to stop (nil, the connection closed). A\n # connection that drops or ends is made again after the reconnection\n # time - *retry* ms until the stream sets its own - with the last event\n # ID (*last_event_id* to start with, to resume a stream) in\n # `Last-Event-ID`. Once *reconnects* + 1 connections in a row have\n # brought no event, the last one's failure is the answer. An answer\n # that is not a 200 `text/event-stream` is an `SSEError` at once.\n # *headers* go with every request; `Accept` and `Last-Event-ID` are the\n # stream's own and are refused there.\n def self.open(url : String, headers : Hash(String, String) = {} of String => String, last_event_id : String | ::Nil = nil, reconnects : Int32 = RECONNECTS, retry : Int32 = RETRY, &block : (Event -> Bool)) : Nil | Cancelled | SocketError | HTTPError | SSEError\n # The answer to a request for an event stream: a 200, `text/event-stream`,\n # `Cache-Control: no-cache` unless *headers* names its own, whose body\n # *block* writes through an `EventWriter` as it goes. The stream ends\n # when the block returns. A `Content-Type` in *headers* is refused.\n def self.stream(headers : Hash(String, String) = {} of String => String, &block : (EventWriter -> Nil)) : Response\nend\n\n# What the other end did that fails an event stream (§9.2.3), as a value:\n# an answer that is not a 200, one that is not `text/event-stream`, or a\n# stream that kept ending with no event until the client gave up.\n# `status` is the answer's. `message` says it is SSE's.\npub struct SSEError\n def initialize(reason : String, status : Int32 = 200)\n def reason : String\n def status : Int32\n def to_s : String\nend\n\nimpl Error for SSEError\n def message : String\nend\n" }, { "name": "std/static_array", "path": "src/std/static_array.iyi", - "sourceSha256": "71ecdb56f0e7a71d3fecc9fa5d825e11229689898ebf2ad2299f5121a5c49bba", + "sourceSha256": "20577aa636cdc2ab2897e4648e9e0a5c5b3aecbe9b61c9a3383cca1e32b7cb87", "surface": "module std/static_array\n\npub alias StaticArray = ::StaticArray\n\nstruct ::StaticArray(T, N)\n # Comparison based on lexicographical element order. Written out here: it\n # forwarded to `Slice#<=>`, which the slice module does not have, so any\n # call of this method failed to compile.\n def <=>(other : StaticArray(T, N)) : Int32\n # Equality. Returns true if corresponding elements are equal, where one\n # element type holds the other, as tuples compare (src/iyi/object.iyi).\n # Restricted to `StaticArray(T, N)`, a `StaticArray(Int32, 2)` was taken\n # for a `StaticArray(Int32?, 2)` and not back: the one equality answered\n # true one way and false the other.\n def ==(other : StaticArray(U, M)) : Bool forall U, M\n def ==(other : Object) : Bool\n # Returns the element at the given *index*. Negative indices count backward.\n def [](index : Int) : T\n # Sets the element at *index* to *value*.\n def []=(index : Int, value : T) : T\n # Returns the element at *index*, or nil if out of bounds.\n def []?(index : Int) : T | ::Nil\n def all? : Bool\n def any? : Bool\n def clone : self\n def count(item) : Int32\n def count : Int32\n # Duplicates this static array.\n def dup : self\n # Yields each element in order.\n def each(& : (T -> Nil)) : Nil\n # Yields each element alongside its index.\n def each_with_index(offset : Int = 0, & : (T, Int32 -> Nil)) : Nil\n # Returns true when the static array contains zero elements.\n def empty? : Bool\n # Fills *count* elements starting at *start* with *value*.\n #\n # A negative count and a start outside are refused before anything is\n # filled, as the other library and `Slice#fill` refuse them: an early\n # return for `c <= 0` came first, so `fill(7, 0, -1)` and `fill(7, 9, 0)`\n # of four elements answered the array untouched and said nothing.\n def fill(value : T, start : Int, count : Int) : self\n # Fills the entire static array with *value*.\n def fill(value : T) : self\n # Returns the first element. Raises if empty.\n def first : T\n # Returns the first element or nil if empty.\n def first? : T | ::Nil\n # Hashing follows the `==` above, mixed as `Array#hash` mixes. There was\n # only the other library's `hash(hasher)`, which no table here calls, so\n # `Object#hash` answered the type's id: every `StaticArray(Int32, 2)` was\n # one slot, and 40,000 of them took 13 s to insert where the same pairs\n # as tuples took 3 ms.\n def hash : Int32\n # Returns true if *object* is in the array.\n def includes?(object) : Bool\n # Returns the index of *object*, or nil if not found.\n def index(object, offset : Int = 0) : Int32 | ::Nil\n def inspect(io : IO) : Nil\n def inspect : String\n # Returns the last element. Raises if empty.\n def last : T\n # Returns the last element or nil if empty.\n def last? : T | ::Nil\n # Returns a new StaticArray with mapped elements.\n def map(&block : (T -> U)) : StaticArray(U, N) forall U\n # Returns a new StaticArray with mapped elements and indices.\n def map_with_index(offset : Int = 0, &block : (T, Int32 -> U)) : StaticArray(U, N) forall U\n # Creates a new StaticArray filled by invoking the block for each index.\n def self.new(& : (Int32 -> T)) : self\n # Creates a new StaticArray filled with the given value.\n def self.new(value : T) : self\n def none? : Bool\n def one? : Bool\n # Yields elements in reverse order.\n def reverse_each(& : (T -> Nil)) : Nil\n # Reverses elements in place.\n def reverse_in_place : self\n # Returns the last index of *object*, or nil if not found.\n def rindex(object, offset : Int = N - 1) : Int32 | ::Nil\n # Rotates elements in place by *n* positions. Reduced in `Int64` before it\n # is narrowed, as `index_within` and `BitArray`'s rotation count: `n.to_i`\n # panicked \"arithmetic overflow\" for 3000000001_i64, which rotates four\n # elements by one.\n def rotate_in_place(n : Int = 1) : self\n # Returns the size of self.\n def size : Int32\n # Returns a new sorted static array.\n def sort : StaticArray(T, N)\n def sort(&block : (T, T -> Int32)) : StaticArray(T, N)\n def sort_by(&block : (T -> _)) : StaticArray(T, N)\n # Each key computed once, by `Array#sort_in_place_by`, the merge sort of\n # key and element pairs: a comparison of `yield(a) <=> yield(b)` computed\n # it twice per comparison, 63,992,000 times for 8,000 elements.\n def sort_by_in_place(&block : (T -> _)) : self\n # Sorted by `Array#sort_in_place`, the stable merge sort, and copied\n # back. It was an insertion sort of its own, quadratic: 8,000 elements in\n # reverse order took 31,996,000 comparisons where the array's sort takes\n # under 100,000. Equal elements keep their order, as they did.\n def sort_in_place : self\n # In-place sort with custom block comparator, by the same merge sort.\n def sort_in_place(&block : (T, T -> Int32)) : self\n # Converts this static array into a heap Array.\n def to_a : Array(T)\n # The text `to_s` builds, written as `BitArray#to_s(io)` writes it. It\n # asked each element for `inspect(io)`, which no prelude type has, and\n # `IyiIO` for `<<`, which only `import std/io` gives it: `to_s(STDOUT)`\n # of a `StaticArray(Int32, 3)` did not compile, and `inspect(io)` with it.\n def to_s(io : IO) : Nil\n # Into one builder: adding each element to the text so far copied that\n # text once per element, and 10,000 elements took 1.4 s where `to_a.to_s`\n # of the same took 1 ms.\n def to_s : String\n # Returns a Slice backed by this static array.\n def to_slice : Std::Slice::Slice(T)\n # Returns a pointer to this static array's data.\n def to_unsafe : Pointer(T)\n # Returns the element at *index* without bounds checking.\n def unsafe_fetch(index : Int) : T\n # Sets the element at *index* to *value* without bounds checking.\n def unsafe_put(index : Int, value : T) : T\n def unstable_sort : StaticArray(T, N)\n def unstable_sort(&block : (T, T -> Int32)) : StaticArray(T, N)\n def unstable_sort_by(&block : (T -> _)) : StaticArray(T, N)\n def unstable_sort_by_in_place(&block : (T -> _)) : self\n def unstable_sort_in_place : self\n def unstable_sort_in_place(&block : (T, T -> Int32)) : self\n macro [](*args)\nend\n" }, { @@ -562,67 +568,67 @@ { "name": "std/string_pool", "path": "src/std/string_pool.iyi", - "sourceSha256": "82ac6a65e5005b1283ab9ac80a3331935d6c40ec9feb263bd91158f022812f03", + "sourceSha256": "65decd7c3975ef73b997d2c29575fed6b60eb2bb9018fc946d49746b65b33375", "surface": "module std/string_pool\n\npub alias Bytes = Std::Slice::Bytes\n\npub class StringPool\n def capacity : Int32\n def empty? : Bool\n def get(str : Pointer(UInt8), len : Int32) : String\n def get(slice : Bytes) : String\n def get(str : String) : String\n def get?(str : Pointer(UInt8), len : Int32) : String | ::Nil\n def get?(slice : Bytes) : String | ::Nil\n def get?(str : String) : String | ::Nil\n def initialize(initial_capacity : Int32 = 8)\n def rehash : Nil\n def size : Int32\nend\n" }, { "name": "std/string_scanner", "path": "src/std/string_scanner.iyi", - "sourceSha256": "2841a382ac9f90171e907ac3952c550f940a51443e417e3edb02ab1252b13dc4", + "sourceSha256": "73b743c7bb88929cc88d07649f2665b06dadc30fb614a4cb45fed3be9d7568e1", "surface": "module std/string_scanner\n\npub class StringScanner\n # Group *n* of the last match, the whole match being 0; a negative *n*\n # counts from the last group. No last match, a group it does not have and\n # one that took no part are mistakes, and panic with which.\n def [](n : Int32) : String\n # The group called *name* of the last match.\n def [](name : String) : String\n # Group *n* of the last match, or nil for any of the reasons `[]` panics.\n def []?(n : Int32) : String | ::Nil\n # The group called *name* of the last match, or nil.\n def []?(name : String) : String | ::Nil\n # What `scan` would answer, without moving; the match is still the last.\n def check(pattern : Regex | String | Char | Int32) : String | ::Nil\n # What `scan_until` would answer, without moving.\n def check_until(pattern : Regex | String | Char) : String | ::Nil\n # Whether the offset is at the end of the string.\n def eos? : Bool\n def initialize(string : String)\n # `#`, as the other library writes it: the\n # offset, the length, and five characters around the offset, two before\n # it where there are, with `‣` at the offset and `…` where the string\n # goes on. The two numbers are bytes here, as `offset` is.\n def inspect : String\n # Whether the last scan, skip, check or match matched.\n def matched? : Bool\n # How many bytes *pattern* matches at the offset, without moving, or nil.\n def matches?(pattern : Regex | String | Char) : Int32 | ::Nil\n # The offset, in bytes.\n def offset : Int32\n # Moves the offset to byte *position*: the end of the string is the\n # furthest it goes, and a position inside a character is refused, as\n # every read after it would start on half of one.\n def offset=(position : Int32) : Int32\n # Up to *count* characters from the offset, without moving: fewer at the\n # end of the string. The last match is left as it was.\n def peek(count : Int32) : String\n # Back to the start, with no last match.\n def reset : Nil\n # The string from the offset on.\n def rest : String\n # Matches *pattern* at the offset and moves past it, answering what\n # matched, or nil without moving.\n def scan(pattern : Regex | String | Char | Int32) : String | ::Nil\n # Searches for *pattern* from the offset and moves past the match,\n # answering everything from the offset to the match's end.\n def scan_until(pattern : Regex | String | Char) : String | ::Nil\n # `scan`, answering how many bytes the offset moved.\n def skip(pattern : Regex | String | Char | Int32) : Int32 | ::Nil\n # `scan_until`, answering how many bytes the offset moved.\n def skip_until(pattern : Regex | String | Char) : Int32 | ::Nil\n # The string being scanned.\n def string : String\n # On to the end, with no last match.\n def terminate : Nil\nend\n" }, { "name": "std/symbol", "path": "src/std/symbol.iyi", - "sourceSha256": "14fb4c4900a328c01fddc8924bded404524574c20d729c00c96bac261d74bb08", + "sourceSha256": "ed815a3b21404c27fb049aa5bfff5abbfbc08637d148741f1f28d0869c42e0e4", "surface": "module std/symbol\n\nstruct ::Symbol\n def <(other : Symbol) : ::Bool\n def <=(other : Symbol) : ::Bool\n # Compares symbol with other based on string ordering.\n def <=>(other : Symbol) : Int32\n def >(other : Symbol) : ::Bool\n def >=(other : Symbol) : ::Bool\n def clone : Symbol\n # Body of a double-quoted inspect/named-arg form, escaped the way the\n # other library's `String#inspect` escapes it: quotes and backslashes,\n # `#{` (which would interpolate), the named controls (`\\a \\b \\e \\f \\n\n # \\r \\t \\v`) and every other ASCII control or DEL as `\\u00XX`. Only\n # `\"`, `\\`, `\\n`, `\\r`, `\\t` and NUL were escaped, so `:\"a\\eb\".inspect`\n # carried a raw escape byte and NUL read `\\0` where the other says\n # `\\u0000`.\n def self.escape_quoted_body(string : String) : String\n def inspect(io : IyiIO) : ::Nil\n def inspect : String\n # True when *string* cannot be written as an unquoted symbol literal.\n # Identifiers may end in `?` or `!` (SPEC.md III.1.7 exempts symbol\n # literals from the identifier bang ban). Operators in the list below\n # are also unquoted.\n def self.needs_quotes?(string : String) : ::Bool\n def self.needs_quotes_for_named_argument?(string : String) : ::Bool\n def self.quote_for_named_argument(io : IyiIO, string : String) : ::Nil\n def self.quote_for_named_argument(string : String) : String\n def to_s(io : IyiIO) : ::Nil\nend\n" }, { "name": "std/system", "path": "src/std/system.iyi", - "sourceSha256": "9b5a4be0a353856e85b8658cd7133a87a98b4215caa6aebdf83ae2583f06761c", + "sourceSha256": "611b84f17fffc7a7d979ada725f14b26741e8404d05c2a5b8ccd832cfd9b5dee", "surface": "module std/system\n\npub struct System\n # How many CPUs this process may run on: never more than the machine\n # has, fewer when the process is held to some of them.\n def self.cpu_count : Int32\n # The name of the machine, as the kernel holds it: `\"build-07\"`, or\n # `\"host.example.org\"` where it was set to a fully qualified name.\n def self.hostname : String\n def initialize\n # The size of a memory page in bytes: 4096 on most machines, 16384 on\n # Apple silicon and on some aarch64 Linux kernels, 65536 on others.\n def self.page_size : Int32\nend\n" }, { "name": "std/system_roots", "path": "src/std/system_roots.iyi", - "sourceSha256": "cd7c8802a49ce259292e1d917cbcf5ef614874a8b5e21a7f528cb6830ea07ad6", + "sourceSha256": "c1119e7739201e8971c97a37e5d3a1ebfcbc51de13b5fac547a4c3e06d4aafdf", "surface": "module std/system_roots\n\npub struct SystemRoots\n # The certificates, each once, in the order the store gave them.\n def certificates : Array(Certificate)\n def initialize(certificates : Array(Certificate), unreadable : Int32, source : String)\n # The operating system's trusted roots, or why there are none.\n def self.load : SystemRoots | X509Error\n # Where they came from: files, or the platform's store by name.\n def source : String\n # How many entries std/x509 could not read.\n def unreadable : Int32\nend\n" }, { "name": "std/tar", "path": "src/std/tar.iyi", - "sourceSha256": "10b28dab507a035213abe820c3954816c7bbc86895e62bc9e4cf82d92e4d4f64", + "sourceSha256": "ddb70e77b793f1a0feca94122443002ea0beca540e22c10c8f02e7c6aa042192", "surface": "module std/tar\n\n# One entry's header, read by `TarReader#next_entry`; its data is read\n# with `read` and `read_all` until the reader moves on.\npub class TarEntry\n # How many bytes of data follow the header: the size, or none for a\n # type that carries none.\n def data_size : Int64\n def devmajor : Int64\n def devminor : Int64\n def directory? : Bool\n def file? : Bool\n def format : TarFormat\n def gid : Int64\n def gname : String\n def hardlink? : Bool\n def index : Int32\n def initialize(reader : TarReader, index : Int32, name : String, linkname : String, size : Int64, mode : Int32, uid : Int64, gid : Int64, uname : String, gname : String, mtime : Time, typeflag : UInt8, devmajor : Int64, devminor : Int64, pax : Hash(String, String), format : TarFormat, offset : Int64)\n # A link's target, the same way: pax `linkpath`, GNU `K`, the field.\n def linkname : String\n def mode : Int32\n def mtime : Time\n # The name: a pax `path`, a GNU long name, the ustar prefix and name\n # joined by `/`, or the name field, the first of these there is.\n def name : String\n # Where its header is, from the start of the (uncompressed) archive.\n def offset : Int64\n # Every pax record given to this entry, the global ones under the ones\n # of its own.\n def pax : Hash(String, String)\n # Up to *max* bytes of the data, \"\" at its end; or what is wrong with\n # the archive. Only until the reader's next `next_entry`: a read after\n # it is a panic, as is a *max* below 1.\n def read(max : Int32 = 65536) : String | TarError\n # The whole of the data (what is left of it).\n def read_all : String | TarError\n # The size the header (or a pax `size`) declares. Links, devices,\n # FIFOs and directories carry no data whatever it says, as POSIX\n # specifies and Go reads them.\n def size : Int64\n def symlink? : Bool\n def type : TarType\n # What the typeflag names, for a sentence: \"regular file\", \"FIFO\",\n # \"GNU sparse file\", \"type 'Q'\".\n def type_name : String\n # The typeflag byte as written.\n def typeflag : UInt8\n def uid : Int64\n def uname : String\nend\n\n# What is wrong with an archive: `message` is the sentence, which names\n# the entry, or the header's offset in the (uncompressed) stream.\npub struct TarError\n def initialize(message : String)\n def to_s : String\nend\n\n# Which header an entry was read from: `Pax` when a pax record was folded\n# into it, else by the header's magic.\npub enum TarFormat : Int32\n V7 = 0\n Ustar = 1\n Gnu = 2\n Pax = 3\nend\n\n# An archive read entry by entry.\n#\n# ```\n# tar = TarReader.new(File.open(\"src.tar.gz\"))\n# while entry = tar.next_entry.or_panic\n# puts \"#{entry.name} #{entry.size}\"\n# text = entry.read_all.or_panic if entry.name == \"README\"\n# end\n# ```\npub class TarReader\n # Whether the stream is bzip2; known once the first entry is asked for.\n def bzip2? : Bool\n # For `TarEntry#read`.\n def entry_read(entry : TarEntry, max : Int32) : String | TarError\n # For `TarEntry#read_all`.\n def entry_read_all(entry : TarEntry) : String | TarError\n # Every entry written under *dir* (made if it is not there), as it is\n # read; see the module's comment for what is refused. Answers the first\n # error, the archive's or the refusal's; a file cut short is deleted.\n def extract(dir : String) : Nil | TarError\n # Whether the stream is gzip; known once the first entry is asked for.\n def gzip? : Bool\n # The archive *io* holds from where it is, plain or gzip.\n def initialize(io : IyiIO)\n # The next entry, its header read and checked; nil at the end. The\n # data of the entry before, as much as was not read, is read past.\n def next_entry : TarEntry | Nil | TarError\n # *path*'s parts, without empty ones and `.`.\n def self.parts(path : String) : Array(String)\n # A pax header's records into *into*. A global record with no value\n # takes the key away; an entry's keeps it, empty, which stands for the\n # header's own field.\n def self.records(data : String, at : Int64, into : Hash(String, String), global : Bool) : Nil | TarError\n # Why a symbolic link *name* to *target* may not be made under a\n # directory, or nil when it may: the target must be relative, may climb\n # with `..` no higher than the link's own directory, and only before\n # its first other part - after one, the part could be a link itself and\n # the `..` would climb from wherever that points.\n def self.unsafe_link(name : String, target : String, windows : Bool = false) : String | ::Nil\n # Why *name* may not be written under a directory, or nil when it may.\n # *windows* refuses the separator and the drive Windows reads in it.\n def self.unsafe_name(name : String, windows : Bool = false) : String | ::Nil\n # A path Windows reads from a root rather than from where it is put:\n # `\\x`, or a drive with its separator, `C:\\x` and `C:/x`. Refused anyway\n # for its `\\` or its `:`, but the sentence names what it is. `C:x`, the\n # drive's own working directory, is not one, and is refused for its `:`.\n def self.windows_absolute?(path : String) : Bool\n # Whether the stream is xz; known once the first entry is asked for.\n def xz? : Bool\nend\n\n# What an entry is, by its typeflag. `Other` is any typeflag this module\n# has no name for; `TarEntry#type_name` names it.\npub enum TarType : Int32\n Regular = 0\n Hardlink = 1\n Symlink = 2\n CharDevice = 3\n BlockDevice = 4\n Directory = 5\n Fifo = 6\n Contiguous = 7\n Other = 8\nend\n\n# An archive written to an `IyiIO`, an entry at a time.\n#\n# ```\n# File.open(\"out.tar.gz\", \"w\") do |io|\n# tar = TarWriter.new(io, gzip: true)\n# tar.add(\"README\", text)\n# tar.add_directory(\"bin\")\n# tar.add(\"bin/run\", script, mode: 0o755)\n# tar.add_symlink(\"latest\", \"bin/run\")\n# tar.finish\n# end\n# ```\n#\n# What is wrong with the calls is a panic: a name that is empty, holds a\n# NUL or is absolute; a link without a target; a negative size, id or\n# a mode outside 0 to 0o7777; a source that ends before the size it was\n# said to hold; an `add` after `finish`, and `finish` twice.\npub class TarWriter\n # *data* as the regular file *name*.\n def add(name : String, data : String, mode : Int32 = 420, mtime : Time = Time.utc, uid : Int64 = 0_i64, gid : Int64 = 0_i64, uname : String = \"\", gname : String = \"\") : Nil\n # *size* bytes of *source* as the regular file *name*, copied as they\n # are read. *source* is not closed.\n def add(name : String, source : IyiIO, size : Int64, mode : Int32 = 420, mtime : Time = Time.utc, uid : Int64 = 0_i64, gid : Int64 = 0_i64, uname : String = \"\", gname : String = \"\") : Nil\n # A directory: *name* with a `/` after it if it has none.\n def add_directory(name : String, mode : Int32 = 493, mtime : Time = Time.utc, uid : Int64 = 0_i64, gid : Int64 = 0_i64, uname : String = \"\", gname : String = \"\") : Nil\n # A hard link *name* to the entry *target*, earlier in the archive.\n def add_hardlink(name : String, target : String, mode : Int32 = 420, mtime : Time = Time.utc, uid : Int64 = 0_i64, gid : Int64 = 0_i64, uname : String = \"\", gname : String = \"\") : Nil\n # A symbolic link *name* to *target*, which is written as it is given.\n def add_symlink(name : String, target : String, mode : Int32 = 511, mtime : Time = Time.utc, uid : Int64 = 0_i64, gid : Int64 = 0_i64, uname : String = \"\", gname : String = \"\") : Nil\n # The end: two zero blocks, then zeros to a 10,240-byte record; then\n # the gzip trailer, if gzip; then *io* is flushed. Once only.\n def finish : Nil\n # *gzip* writes the archive through `Deflater` in the gzip envelope.\n def initialize(io : IyiIO, gzip : Bool = false)\n # One pax record: its length counts its own digits.\n def self.record(key : String, value : String) : String\nend\n\nimpl Error for TarError\n def message : String\nend\n" }, { "name": "std/term", "path": "src/std/term.iyi", - "sourceSha256": "a9f1a8c375ec578a1ee1144a0097a2f0810f55fe8cbe5dbbf45943d074da1d54", - "surface": "module std/term\n\npub struct Term\n def initialize\n # Runs the block with echo off on *io*'s terminal and answers its value;\n # lines are still read as lines and Ctrl-C is still a signal. The\n # previous mode is restored when the block ends, however it ends. A\n # `TermError`, and the block not run, when *io* is not a terminal.\n def self.no_echo(io : IO = STDIN, &block : (-> T)) : T | TermError forall T\n # Runs the block with *io*'s terminal in raw mode and answers its value:\n # every byte is the program's as it is typed — no line to wait for, no\n # echo, no signal from Ctrl-C, no CR to NL — and output is written\n # without NL becoming CR NL. The previous mode is restored when the\n # block ends, however it ends. A `TermError`, and the block not run,\n # when *io* is not a terminal or the terminal refuses the change.\n def self.raw(io : IO = STDIN, &block : (-> T)) : T | TermError forall T\n # Writes *prompt* to standard error and reads a line from standard input\n # with echo off, then writes the newline the terminal did not echo.\n # Answers the line without its line ending, or nil at the end of the\n # input. Standard input that is not a terminal is read as it is.\n def self.read_password(prompt : String = \"\") : String | ::Nil\n # `{rows, columns}` of the terminal *io* is, or nil.\n def self.size(io : IO) : ::Tuple(Int32, Int32) | ::Nil\n def self.size(fd : Int32) : ::Tuple(Int32, Int32) | ::Nil\n def self.size(fd : Int64) : ::Tuple(Int32, Int32) | ::Nil\n # `{rows, columns}` of the terminal on standard output, standard error\n # or standard input, the first that is one; nil when none is, or when\n # the terminal does not know its size (0 by 0).\n def self.size : ::Tuple(Int32, Int32) | ::Nil\n # Whether *io* is a terminal.\n def self.tty?(io : IO) : Bool\n # Whether descriptor *fd* is a terminal — on Windows, a standard\n # stream's number or a handle's value, as `IO#handle` answers it.\n def self.tty?(fd : Int32) : Bool\n def self.tty?(fd : Int64) : Bool\nend\n\n# A terminal that could not be put in the mode asked for, and the\n# platform's error number for why: errno on Linux and darwin, the\n# `GetLastError` code on Windows.\npub struct TermError\n def code : Int32\n def fd : Int64\n def initialize(operation : String, fd : Int64, code : Int32, terminal : Bool)\n # The stream is not a terminal: ENOTTY (25 on Linux and darwin) from\n # TCGETS or `tcgetattr`; on Windows `GetConsoleMode` refusing it at all,\n # which is the test for a console whatever code it leaves.\n def not_a_terminal? : Bool\n def operation : String\n def reason : String\n def stream : String\nend\n\nimpl Error for TermError\n def message : String\nend\n" + "sourceSha256": "874ea1c686767570b1a9e389786aca5fba4775be73500d4856b0c0427966669a", + "surface": "module std/term\n\npub struct Term\n def initialize\n # Runs the block with echo off on *io*'s terminal and answers its value;\n # lines are still read as lines and Ctrl-C is still a signal. The\n # previous mode is restored when the block ends, however it ends. A\n # `TermError`, and the block not run, when *io* is not a terminal.\n def self.no_echo(io : IO = STDIN, &block : (-> T)) : T | TermError forall T\n # Runs the block with *io*'s terminal in raw mode and answers its value:\n # every byte is the program's as it is typed — no line to wait for, no\n # echo, no signal from Ctrl-C, no CR to NL — and output is written\n # without NL becoming CR NL. The previous mode is restored when the\n # block ends, however it ends. A `TermError`, and the block not run,\n # when *io* is not a terminal or the terminal refuses the change.\n def self.raw(io : IO = STDIN, &block : (-> T)) : T | TermError forall T\n # Turns echo off, writes *prompt* to standard error and reads a line\n # from standard input, then writes the newline the terminal did not\n # echo. Answers the line without its line ending, or nil at the end of\n # the input. Standard input that is not a terminal is read as it is.\n def self.read_password(prompt : String = \"\") : String | ::Nil\n # `{rows, columns}` of the terminal *io* is, or nil.\n def self.size(io : IO) : ::Tuple(Int32, Int32) | ::Nil\n def self.size(fd : Int32) : ::Tuple(Int32, Int32) | ::Nil\n def self.size(fd : Int64) : ::Tuple(Int32, Int32) | ::Nil\n # `{rows, columns}` of the terminal on standard output, standard error\n # or standard input, the first that is one; nil when none is, or when\n # the terminal does not know its size (0 by 0).\n def self.size : ::Tuple(Int32, Int32) | ::Nil\n # Whether *io* is a terminal.\n def self.tty?(io : IO) : Bool\n # Whether descriptor *fd* is a terminal — on Windows, a standard\n # stream's number or a handle's value, as `IO#handle` answers it.\n def self.tty?(fd : Int32) : Bool\n def self.tty?(fd : Int64) : Bool\nend\n\n# A terminal that could not be put in the mode asked for, and the\n# platform's error number for why: errno on Linux and darwin, the\n# `GetLastError` code on Windows.\npub struct TermError\n def code : Int32\n def fd : Int64\n def initialize(operation : String, fd : Int64, code : Int32, terminal : Bool)\n # The stream is not a terminal: ENOTTY (25 on Linux and darwin) from\n # TCGETS or `tcgetattr`; on Windows `GetConsoleMode` refusing it at all,\n # which is the test for a console whatever code it leaves.\n def not_a_terminal? : Bool\n def operation : String\n def reason : String\n def stream : String\nend\n\nimpl Error for TermError\n def message : String\nend\n" }, { "name": "std/text", "path": "src/std/text.iyi", - "sourceSha256": "e5ac6a08ed71d3404f2d07bdc5ed4dd67e1d9d0a2d29b5ee6056198e73276074", + "sourceSha256": "cb8f3075bc5976d7b644d273534fed32b3e969f71608d45fe3407d4e3e97c02d", "surface": "module std/text\n\nclass ::Array(T)\n def join(separator : Char) : String\nend\n\nstruct ::Char\n def ascii_alphanumeric? : Bool\n def ascii_letter? : Bool\n def ascii_lowercase? : Bool\n def ascii_number? : Bool\n def ascii_uppercase? : Bool\n def ascii_whitespace? : Bool\n def downcase : Char\n def to_i(base : Int32) : Int32\n def to_i : Int32\n def to_i?(base : Int32) : Int32 | ::Nil\n def to_i? : Int32 | ::Nil\n def upcase : Char\nend\n\nclass ::String\n # `s[1..3]`, `s[-3..-1]`: the bytes a range names, its ends counted from\n # the back when negative, as `[](start, count)` counts them.\n def [](range : Range(Int32, Int32)) : String\n # The whitespace `blank?`, `lstrip` and `rstrip` look through is the\n # prelude's `Char#whitespace?`, decoded, so `strip` with no argument agrees\n # with these and with the other library: `\"\\u3000\".blank?` was false.\n def blank? : Bool\n def bytes : Array(UInt8)\n def capitalize : String\n # The width is in characters, because `size` is and because a centred\n # column is a visual claim: padded by bytes, `\"héllo\".center(9, '.')` came\n # back seven characters wide on one side and eight long in all. The pad\n # travels as its own bytes, so a multi-byte one is a character rather than\n # its first byte three times.\n def center(width : Int32, pad : Char = ' ') : String\n def center(width : Int32, pad : String) : String\n def chars : Array(Char)\n # `\"\\n\"` is every line ending, as `chomp` with no argument reads it and as\n # the other library answers: `\"a\\r\\n\".chomp(\"\\n\")` is `\"a\"`.\n def chomp(suffix : String) : String\n def chomp : String\n def chop : String\n def count(char : Char) : Int32\n # The characters in every one of *sets*, a set read as the other\n # library's `Char#in_set?` reads one: `\"hello world\".count(\"a-z\")` is 10\n # and `\"hello\".count(\"^l\")` is 3. This counted *sets* as a substring, so\n # `\"banana\".count(\"an\")` was 2 here and 5 there, and a range or a `^`\n # was text: `count(\"a-z\")` was 0, and `delete` and `squeeze` took the\n # set as a list of the characters written.\n def count(*sets : String) : Int32\n def delete(char : Char) : String\n # The characters in every one of *sets*, as `count` reads them. Characters,\n # not bytes: a 256-entry byte mask cannot hold a character above ASCII,\n # and deleting one byte of one leaves the rest behind.\n def delete(*sets : String) : String\n def each_byte(& : (UInt8 -> Nil)) : Nil\n # Scanned, a line at a time: `lines` first built the whole array - 2.4\n # million strings for a 143 MB text - and `chomp` a second string for each.\n # The same lines, a final newline closing the last rather than opening an\n # empty one, and a `\\r` before a newline left off.\n def each_line(& : (String -> Nil)) : Nil\n def ends_with?(char : Char) : Bool\n # An empty search matches before every character and at the end, as\n # `sub` matches it at the start: `\"abc\".gsub(\"\", \"-\")` is `\"-a-b-c-\"`, the\n # other library's answer, where it was `\"abc\"`. A byte that begins no\n # character is kept, a unit of its own.\n def gsub(search : String, replacement : String) : String\n def gsub(search : Char, replacement : Char) : String\n def gsub(search : Char, replacement : String) : String\n def gsub(search : String, & : (String -> String)) : String\n def gsub(search : Char, & : (Char -> String)) : String\n def index(char : Char, offset : Int32) : Int32 | ::Nil\n def index(search : String, offset : Int32 = 0) : Int32 | ::Nil\n def self.join(items : Array(String), separator : String = \"\") : String\n # Into one builder, as `Enumerable#join` is and for its reason.\n def self.join(items, separator : String = \"\") : String\n # A `Char` above ASCII is more than one byte, and this family narrowed it\n # to one with a checked convert: `\"a☃b\".index('☃', 0)` panicked with\n # \"arithmetic overflow\", and so did nine of its siblings. Each asks the\n # character's own bytes now, which is what the string holds.\n def lstrip(char : Char) : String\n # Characters of *chars*, not bytes: a byte mask built from `\"©\"` (C2 A9)\n # took the last byte of `é` (C3 A9) with it and answered a lone C3, which\n # is not a string. ASCII is the mask; a wider character is looked up whole.\n def lstrip(chars : String) : String\n def lstrip : String\n def partition(separator : String) : Tuple(String, String, String)\n def partition(separator : Char) : Tuple(String, String, String)\n def presence : String | ::Nil\n # The characters in reverse, found from the back by `each_char`'s rule,\n # so each character's bytes are copied as they stand and a byte that\n # begins no character is one of its own: taking every `10xxxxxx` byte\n # with the lead before it kept `C0 80` and a stray byte after `é` whole.\n # It decoded the whole string into an array of `Char`s first - four\n # bytes each, 520 MB to reverse 130 MB of ASCII.\n def reverse : String\n def rindex(char : Char, offset : Int32) : Int32 | ::Nil\n def rindex(search : String, offset : Int32) : Int32 | ::Nil\n def rindex(char : Char) : Int32 | ::Nil\n def rindex(search : String) : Int32 | ::Nil\n def rpartition(separator : String) : Tuple(String, String, String)\n def rpartition(separator : Char) : Tuple(String, String, String)\n def rstrip(char : Char) : String\n def rstrip(chars : String) : String\n def rstrip : String\n def split(separator : Char, limit : Int32 | ::Nil) : Array(String)\n # No limit is `nil`, and one of 1 or less is the string whole, as the\n # other library answers both. A negative limit split everything, and 0\n # stood for none: `\"a,b\".split(\",\", -1)` was `[\"a\", \"b\"]` here and\n # `[\"a,b\"]` there. An empty string is one empty piece whatever the\n # limit, as it is without one: `\"\".split(\",\", -1)` was `[]`.\n def split(separator : String, limit : Int32 | ::Nil = nil) : Array(String)\n def split(limit : Int32 | ::Nil) : Array(String)\n def split : Array(String)\n def squeeze(char : Char) : String\n # A run of one character becomes one of it, a character being what\n # `each_char` yields, so a run of bytes that begin none is one U+FFFD, as\n # in the other library; grouped by their `10xxxxxx` bytes, C3 41 came back\n # as it was. A byte at a time, `\"耀\".squeeze` (E8 80 80) dropped a\n # continuation byte and answered two bytes that are not a string, and\n # `\"éé\"` stayed two.\n def squeeze : String\n # A run of the same character in every one of *sets* becomes one of it.\n # Compared per character, so a multi-byte one is a run rather than three\n # bytes that never match.\n def squeeze(*sets : String) : String\n def strip(char : Char) : String\n def strip(chars : String) : String\n def sub(search : String, replacement : String) : String\n def sub(search : Char, replacement : Char) : String\n def sub(search : Char, replacement : String) : String\n def sub(search : String, & : (String -> String)) : String\n # The character's own bytes, as the non-block form asks: narrowed to one\n # byte, `'☃'` panicked with \"arithmetic overflow\" and `'é'` matched nothing.\n def sub(search : Char, & : (Char -> String)) : String\n # The other library's reading, whitespace around it aside: a sign, then\n # `inf`, `infinity` or `nan` in any case (a `nan` may close with a `(...)`\n # of letters, digits and `_`), or decimal digits. Text whose value leaves\n # the range is nil, as that reader's ERANGE makes it: nonzero digits that\n # round to zero, or digits that round past the largest double. Here\n # `\"1e400\".to_f?` was Infinity, `\"1e-400\".to_f?` 0.0, and only `Infinity`\n # and `NaN` spelled so were words: `\"inf\".to_f?` was nil.\n def to_f? : Float64 | ::Nil\n def to_i(base : Int32) : Int32\n def to_i64(base : Int32) : Int64\n def to_i64 : Int64\n def to_i64?(base : Int32) : Int64 | ::Nil\n def to_i64? : Int64 | ::Nil\n # Whitespace before and after the number is not part of it, as the other\n # library reads one (`Char#whitespace?`, so a no-break space too); inside\n # it is still refused. `\" 42\".to_i64?`, `\"ff \".to_i?(16)` and a line\n # read with its `\\n` were nil here, and 42 and 255 there.\n def to_i?(base : Int32) : Int32 | ::Nil\n def to_u64(base : Int32) : UInt64\n # The unsigned 64-bit reading, for the checksums and hashes a port keeps\n # in `UInt64`: digits in *base*, an optional `+`, and nil for a sign,\n # anything that is not a digit, or a value past 18446744073709551615.\n def to_u64 : UInt64\n def to_u64?(base : Int32) : UInt64 | ::Nil\n def to_u64? : UInt64 | ::Nil\n # Mapped per character. The 256-entry byte table this used could not hold\n # a character above ASCII: `\"a☃\".tr(\"☃\", \"x\")` answered `\"axxx\"`, one `x`\n # per byte of the character it was asked to replace once. Both sets name\n # runs: `a-z` is the twenty-six letters, and a `-` at either end is\n # itself, as the other library's `delete` sets read them. Its `tr` pairs\n # the characters positionally, a `-` among them, so\n # `\"bab\".tr(\"a-c\", \"A-C\")` is `\"bAb\"` there and `\"BAB\"` here.\n #\n # Both sets in ASCII - the common case, and a DNA complement's - are one\n # 256-entry byte table built once and one pass over the bytes, which a\n # character above ASCII passes through untouched because none of its\n # bytes is under 0x80. A byte that begins no character is not one of\n # those: the table kept it as it stood where the per-character map\n # writes U+FFFD, so text holding one takes that map too. Otherwise the\n # map is per character. A `to` shorter than `from` repeats its last\n # character, which is the rule the other library follows; an empty one\n # deletes the character. Each character was looked up in an array of\n # one-character strings and the answer appended to a string rebuilt every\n # time, and a 130 MB `tr` did not finish.\n def tr(from : String, to : String) : String\nend\n" }, { "name": "std/time", "path": "src/std/time.iyi", - "sourceSha256": "5282622222a57554e3e1f9379004f3fdb2194b89ef3c8829a804b95da1091ac3", - "surface": "module std/time\n\npub struct DayOfWeek\n def ==(other : DayOfWeek) : Bool\n def ===(other : DayOfWeek) : Bool\n def friday? : Bool\n # Hashing follows `==`. Without it a day hashed to its type, `Object#hash`'s\n # default: `Monday.hash == Sunday.hash`, and every day a table held went to\n # one slot.\n def hash : Int32\n def initialize(value : Int32)\n def monday? : Bool\n def saturday? : Bool\n def sunday? : Bool\n def thursday? : Bool\n def to_s : String\n def tuesday? : Bool\n def value : Int32\n def wednesday? : Bool\nend\n\n# A time zone: the offsets from UTC a place has kept, and when it changed\n# from one to the next. `Location.load(\"Europe/Istanbul\")` reads the IANA\n# database the machine has; `Location.local` is the machine's own zone;\n# `Location.fixed(19800)` is an offset and nothing else; `Location::UTC` is\n# UTC. A `Time` carries one, and its date and clock are read in it.\n#\n# The database is the system's TZif files, RFC 8536: `$ZONEINFO` when it\n# names a directory, then `/usr/share/zoneinfo`, `/usr/share/lib/zoneinfo`\n# and `/etc/zoneinfo`. Versions 1 to 4 are read. A time before the first\n# change has the file's first offset, and one after the last has its POSIX\n# footer's rule, so a slim file answers for the year 2100 as a fat one does.\n# Leap seconds are not counted, as no clock this module reads counts them.\n#\n# `Location.local` is the `TZ` variable when it is set — the empty string\n# is UTC, a leading `:` is dropped, an absolute path is a TZif file, a name\n# is looked up in the database, and anything else is read as a POSIX TZ\n# string such as `EST5EDT,M3.2.0,M11.1.0` — and `/etc/localtime` when it is\n# not. Windows has no database to read: there `local` is the system's zone,\n# its rule from `GetTimeZoneInformation`, its zones named by their offsets,\n# and `load` reads `$ZONEINFO` alone. Where nothing answers, local is UTC.\n# The local zone is read once, the first time it is asked for.\n#\n# A location is built once and never changed, so a `Time` that holds one\n# can cross to another task.\npub class Location\n # One offset a location keeps: its abbreviation (`CEST`, `+03`), its\n # seconds east of UTC, and whether it is summer time.\n struct Zone\n def ==(other : Zone) : Bool\n def dst? : Bool\n def initialize(name : String, offset : Int32, dst : Bool)\n def name : String\n def offset : Int32\n def to_s : String\n end\n def ==(other : Location) : Bool\n def self.fixed(name : String, offset : Int32) : Location\n # An offset of *offset* seconds east of UTC and nothing else, named as\n # the offset is written: `+05:30`. Less than a day either way.\n def self.fixed(offset : Int32) : Location\n # One offset, never changing.\n def fixed? : Bool\n def hash : Int32\n def initialize(name : String, zones : Array(Zone), transitions : Array(Int64), transition_zones : Array(Int32), rule : TzRule | ::Nil)\n def inspect : String\n # The zone the IANA database names *name*: `Europe/Istanbul`,\n # `America/New_York`. `UTC` and the empty name are UTC and `Local` is\n # `Location.local`, without a file. A name that climbs out of the database\n # (`..`, a leading `/`, a `\\`) is refused, and so is one no directory has.\n def self.load(name : String) : Location | LocationError\n # The machine's zone; see the type's comment for where it comes from.\n def self.local : Location\n # The machine's own zone, the one `Location.local` answers.\n def local? : Bool\n # The zone *time* is in here.\n def lookup(time : Time) : Zone\n def lookup(unix_seconds : Int64) : Zone\n def name : String\n # A location from the 172 bytes of a Windows TIME_ZONE_INFORMATION, which\n # is what `Location.local` reads on Windows; it is pure so that every\n # platform can check the decoding with bytes made by hand. The struct is\n # the bias in minutes west of UTC (UTC = local + bias), then the standard\n # name, date and bias, then the daylight ones, all little-endian. The\n # three biases are signed LONGs: a zone east of UTC has a negative Bias\n # (Turkey's is -180) and a summer usually a DaylightBias of -60, so each\n # is read as the 32 bits' two's complement. Read as unsigned and then\n # converted, as it once was, -180 was 4294967116 and the conversion\n # panicked with an arithmetic overflow, issue #133.\n #\n # A date with a year of 0 is a rule - the wDay'th wDayOfWeek of wMonth,\n # 5 the last, at the wall time then in force - which is a POSIX\n # `Mm.w.d/time`; one with a month of 0 is no summer. A date with a year\n # is a single year's, which is not a rule at all, and it is read as no\n # summer rather than as every year's. The names are the offset's, `+03`\n # or `-05`, as tzdata writes a zone it has no letters for: the struct's\n # own are Windows' long names, \"Turkey Standard Time\", which are not\n # abbreviations and are localised.\n def self.read_windows_zone(name : String, data : String) : Location | LocationError\n # A location from the bytes of a TZif file, RFC 8536, named *name*.\n # Anything that is not one is refused with what was wrong and where.\n def self.read_zoneinfo(name : String, data : String) : Location | LocationError\n # The instant a wall clock here reads *wall* (seconds since 1970 as a\n # UTC clock would count them). A wall time a change repeats is the\n # earlier of the two instants; one a change skips is read on the clock\n # from before the change, which lands it past the gap: 02:30 on the\n # morning summer starts in Berlin is 03:30 CEST. Python's `fold=0` and\n # Go read them the same way. `Time.local` and a parse at a location ask\n # this.\n def resolve(wall : Int64) : Int64\n def to_s : String\n def utc? : Bool\nend\n\n# What `Location.load` and `Location.read_zoneinfo` answer when there is no\n# zone by that name, or the bytes are not a zone: a name the program was\n# handed or a file on the machine is not a bug in the program, so it is a\n# value and not a panic.\npub struct LocationError\n def initialize(message : String)\n def to_s : String\nend\n\npub struct Span\n def +(other : Span) : Span\n def -(other : Span) : Span\n def - : Span\n def <(other : Span) : Bool\n def <=(other : Span) : Bool\n def <=>(other : Span) : Int32\n def ==(other : Span) : Bool\n def >(other : Span) : Bool\n def >=(other : Span) : Bool\n # The seconds are an Int64, and a span that leaves it is refused here,\n # by name: `Span.seconds(Int64::MAX) + Span.seconds(1)` panicked with the\n # prelude's \"arithmetic overflow\", a sentence that named no span. The\n # wrapping sum is compared with an addend to see whether it wrapped; the\n # product is bounded before it is taken.\n def self.add_seconds(a : Int64, b : Int64) : Int64\n def days : Int64\n def self.days(n : Int64) : Span\n # Hashing follows `==`, the two parts mixed as a tuple's members are. Without\n # it every span hashed to its type: `Span.seconds(1).hash ==\n # Span.days(9).hash`, and a table of 16,000 spans took 0.95 s to fill where\n # the same pairs as tuples took 1 ms.\n def hash : Int32\n def hours : Int32\n def self.hours(n : Int64) : Span\n def initialize(seconds : Int64 = 0_i64, nanoseconds : Int32 = 0)\n def millisecond : Int32\n def milliseconds : Int32\n def self.milliseconds(n : Int64) : Span\n def minutes : Int32\n def self.minutes(n : Int64) : Span\n def self.mul_seconds(n : Int64, unit : Int64) : Int64\n def nanosecond : Int32\n def nanoseconds : Int32\n def self.nanoseconds(n : Int64) : Span\n def self.new(*, days : Int64 = 0_i64, hours : Int64 = 0_i64, minutes : Int64 = 0_i64, seconds : Int64 = 0_i64, milliseconds : Int64 = 0_i64, nanoseconds : Int64 = 0_i64) : Span\n def seconds : Int32\n def self.seconds(n : Int64) : Span\n def self.sub_seconds(a : Int64, b : Int64) : Int64\n def to_i : Int64\n def to_s : String\n def total_days : Float64\n def total_hours : Float64\n def total_milliseconds : Float64\n def total_minutes : Float64\n def total_nanoseconds : Float64\n def total_seconds : Float64\n def total_seconds_i64 : Int64\n def self.zero : Span\nend\n\npub struct Time\n alias DayOfWeek = Std::Time::DayOfWeek\n # A pattern of Crystal's directives, for writing a `Time` and reading one\n # back. Text that is not a directive is written as it is and must be\n # there, byte for byte, when reading; ASCII whitespace in the pattern is\n # written as it is and reads any run of whitespace, none included.\n #\n # %Y year, four digits or more, year -1 as -0001 %C year // 100\n # %y year % 100 %G %g %V the ISO 8601 week year, its last two digits,\n # and the week 01..53 %m month 01..12 %B January %b %h Jan\n # %d day 01..31 %e day \" 1\"..\"31\" %j day of the year 001..366\n # %H hour 00..23 %k \" 0\"..\"23\" %I 01..12 %l \" 1\"..\"12\" %p am %P AM\n # %M minute %S second %L milliseconds %3N %6N %9N the fraction to\n # 3, 6 and 9 digits %N nanoseconds, any number of digits when read\n # %A Sunday %a Sun %u day of the week, Monday 1..7 %w Sunday 0..6\n # %s seconds since the epoch %z +0530 %:z +05:30 %::z +05:30:00\n # %Z and %^Z: UTC at offset 0 and the offset, +05:30, at any other\n # %F %Y-%m-%d %T %X %H:%M:%S %R %H:%M %D %x %m/%d/%y\n # %r %I:%M:%S %P %c %a %b %e %H:%M:%S %Y %n newline %t tab %% %\n #\n # A number takes a flag between the `%` and its letter: `-` for no\n # padding (`%-d` is 5), `_` for spaces (`%_m` is \" 5\") and `0` for zeros\n # (`%0e` is 05); `^` upcases a name (`%^a` is SUN). The other library knows\n # `%-d`, `%-m`, `%_m` and the `^` names. The same flags on its other numbers\n # are this module's, where that library wrote the `%-` back out as text; a `%`\n # that starts no directive is text here as it is there.\n #\n # Reading takes up to a number's width in digits, fewer when the next byte\n # is not a digit, and a name in any case. `%Y` takes four digits when a\n # directive follows it (`%Y%m%d`), and when text or the end of the\n # pattern does (`%F`), an optional `-` and up to ten, so the years `to_s`\n # writes are the years it reads. A field outside its range, a day the\n # month does not have, a name that is not one and text after the pattern\n # are each a `TimeParseError`, never a panic. A day name is checked to be\n # one and not checked against the date, as Crystal, Go and Python read it.\n struct Format\n # The parts of an instant as they read at an offset, worked out once\n # per `format` rather than once per directive. *zone* is what `%Z`\n # writes, the location's abbreviation; with none it writes `UTC` at\n # offset 0 and the offset at any other.\n struct Fields\n def day : Int32\n def day_of_week : Int32\n def day_of_year : Int32\n def hour : Int32\n def initialize(time : Time, offset : Int32, zone : String | ::Nil)\n def minute : Int32\n def month : Int32\n def nanosecond : Int32\n def offset : Int32\n def second : Int32\n def unix : Int64\n def week : ::Tuple(Int64, Int32)\n def year : Int32\n def zone : String | ::Nil\n end\n # The HTTP date of RFC 9110 section 5.6.7. It is written as the\n # IMF-fixdate, always in GMT, `Sun, 06 Nov 1994 08:49:37 GMT`; it is\n # read in all three of the forms a recipient must accept: that one, the\n # obsolete RFC 850 `Sunday, 06-Nov-94 08:49:37 GMT`, and asctime's\n # `Sun Nov 6 08:49:37 1994`.\n module HTTP_DATE\n def self.format(time : Time) : String\n def self.parse(string : String) : Time | TimeParseError\n end\n # ISO 8601's calendar date, written `2016-02-15` as the date reads at\n # *offset* or in the time's own location; read extended or basic, and\n # as an ordinal or a week date, at *offset* since a date names no zone.\n module ISO_8601_DATE\n def self.format(time : Time, offset : Int32 | ::Nil = nil) : String\n def self.parse(string : String, offset : Int32 = 0) : Time | TimeParseError\n end\n # ISO 8601's date and time, written as RFC 3339 writes it and read with\n # every form of `ISO_8601_DATE` and `ISO_8601_TIME` joined by an\n # optional `T`. The zone is required, as Crystal requires it.\n module ISO_8601_DATE_TIME\n def self.format(time : Time, offset : Int32 | ::Nil = nil) : String\n def self.parse(string : String) : Time | TimeParseError\n end\n # ISO 8601's time of day and its zone, `04:35:50Z`; read as on\n # 0001-01-01, the day Crystal reads it on.\n module ISO_8601_TIME\n def self.format(time : Time, offset : Int32 | ::Nil = nil) : String\n def self.parse(string : String) : Time | TimeParseError\n end\n # Reads a text by a pattern or by one of the named grammars. Every step\n # answers whether it matched; the first that did not leaves its sentence\n # in `@error`, and `finish` answers that, so no text a program is handed\n # ends it in a panic.\n class Parser\n def accept(char : Char) : Bool\n def am_pm : Bool\n def at_end : Bool\n # RFC 5322's CFWS: whitespace and parenthesised comments, which nest\n # and in which `\\` quotes the next byte. Answers whether there was any;\n # a comment left open is the error, and the parse fails on it.\n def cfws : Bool\n def day_name : Bool\n def self.digit?(b : UInt8) : Bool\n # Up to *max* digits and at least one. Nil, with the sentence, when\n # there are none, or when they are past what an Int64 holds.\n def digits(max : Int32, what : String) : Int64 | ::Nil\n def directive(letter : Char, flag : Char, digits : Int32, wide : Bool) : Bool\n # Exactly *count* digits, or nil, reading nothing and saying nothing:\n # the caller names what was missing.\n def exact(count : Int32) : Int32 | ::Nil\n def expect(char : Char) : Bool\n def fail(what : String) : Bool\n # A numeric directive's field, read as its flag and its padding say.\n def field(width : Int32, pad : Char, flag : Char, what : String) : Int32 | ::Nil\n # The instant the fields name, or the first sentence a step left. The\n # fields are checked the way `Time.utc` checks them, with RFC 3339's\n # allowance: `:60` is a leap second, read as the second after `:59`,\n # the instant it names on every clock that has none. A text that\n # names no zone is read at *default_offset*, or failing that on\n # *location*'s wall clock; with a location the time answered is in it.\n def finish(default_offset : Int32 | ::Nil, location : Location | ::Nil = nil) : Time | TimeParseError\n # A fraction of a second: up to *max* digits, scaled to nanoseconds,\n # and for `%N` any digits past the ninth read and dropped.\n def fraction(max : Int32, rest : Bool) : Bool\n # RFC 9110 section 5.6.7's three forms of an HTTP date: the\n # IMF-fixdate `Sun, 06 Nov 1994 08:49:37 GMT`, the obsolete RFC 850\n # `Sunday, 06-Nov-94 08:49:37 GMT`, and asctime's `Sun Nov 6 08:49:37\n # 1994`, which has no zone and is GMT. Crystal's reading: a day name,\n # short or long, in any of the three; the four-digit year IIS writes\n # in the RFC 850 shape; and the zones RFC 2822 names where RFC 9110\n # writes GMT.\n def http_date : Bool\n def initialize(input : String)\n # ISO 8601's dates, extended or basic: 2016-02-15 and 20160215, the\n # ordinal 2016-046 and 2016046, and the week date 2016-W07-1 and\n # 2016W071.\n def iso_date : Bool\n def iso_date_time : Bool\n # ISO 8601's time of day, extended or basic: 04:35:50 and 043550, a\n # fraction of the second after `.` or `,`, or the minutes or the hour\n # alone with a fraction of their own (04:35.5 is 04:35:30).\n def iso_time : Bool\n def self.letter?(b : UInt8) : Bool\n def literal(b : UInt8) : Bool\n def month_name(short : Bool) : Bool\n # A run of ASCII letters and the index in *names* of the name it\n # spells, in any case: for *short*, the first three letters of a name\n # and no more; otherwise the start of a name, three letters or longer,\n # as Crystal reads `%B` and `%A`.\n def name(names : Array(String), short : Bool, what : String) : Int32 | ::Nil\n def need_cfws : Bool\n def number(max : Int32, what : String) : Int32 | ::Nil\n def offset_number(allow_colon : Bool, force_colon : Bool, allow_seconds : Bool) : Bool\n # A number blank padded, as `%e` writes \" 5\": one space stands for a\n # digit.\n def padded_number(max : Int32, what : String) : Int32 | ::Nil\n def pattern(pattern : String) : Bool\n # The byte *ahead* of the current one, or 0 past the end, as Crystal's\n # reader answers '\\0' there.\n def peek(ahead : Int32 = 0) : UInt8\n # RFC 9110's rule for a two-digit year (section 5.6.7): a year that\n # appears to be more than 50 years in the future is the most recent\n # past year with those last two digits. The candidate is taken in this\n # century and moved a century to land in the 100 years ending 50 years\n # from now, so the rule holds in 2090 too. The other library read 00..49 as 20xx\n # and the rest as 19xx, whatever the year it was read in.\n def self.recent_year(two_digits : Int64) : Int64\n # A sentence about fields that were all read, where no one byte is to\n # blame.\n def refuse(what : String) : TimeParseError\n # RFC 5322 section 3.3's date-time, with section 4.3's obsolete\n # two- and three-digit years and zone names, as Crystal's `RFC_2822`\n # reads it: `Mon, 15 Feb 2016 04:35:50 +0000`, the day name and the\n # seconds optional, comments anywhere whitespace goes.\n def rfc_2822 : Bool\n def same_letters?(start : Int32, name : String, size : Int32) : Bool\n def skip_spaces : Bool\n def self.space?(b : UInt8) : Bool\n def text(start : Int32, stop : Int32) : String\n # HH:MM:SS, as both HTTP and RFC 850 write the time of day.\n def time_of_day : Bool\n # One whitespace byte, as the HTTP grammars put between their parts.\n def whitespace : Bool\n # `%Y`: four digits when a directive follows it, and an optional `-`\n # and up to ten when text does, which is every year an Int32 holds.\n def year(wide : Bool) : Int64 | ::Nil\n # Exactly four digits, as the HTTP and ISO 8601 grammars write a year.\n def year4 : Bool\n # `%z`, `%:z` and `%::z` alike, as Crystal reads them: `Z`, `UTC`, or\n # an offset with or without its colons.\n def zone : Bool\n # `%Z`: an offset, or a name read up to the next whitespace. Only the\n # names of UTC itself are read: an abbreviation names no single zone\n # (CST is three of them), so any other is refused by name rather than\n # read as UTC or guessed at. A text whose zone is known is read at\n # that `Location` instead.\n def zone_name : Bool\n # RFC 5322's zone (section 3.3, and 4.3 for the obsolete names): an\n # offset of four digits, or a name. A military letter is read as\n # `-0000`, the offset of a time whose zone is not known, as section\n # 4.3 says to; a name the RFC does not give is refused, where Crystal\n # read it as UTC in silence. `UTC` is not the RFC's, and is read as\n # Crystal reads it.\n def zone_rfc2822 : Bool\n # ISO 8601's zone: `Z` or an offset.\n def zone_z_or_offset : Bool\n end\n # RFC 2822's date and time, `Mon, 15 Feb 2016 04:35:50 +0000`, as\n # Crystal writes it: the day of the month unpadded, the offset at the\n # end, the time's own unless another is given. RFC 2822 writes an offset\n # in whole minutes, so an offset with seconds is refused rather than\n # written as some other instant.\n module RFC_2822\n def self.format(time : Time, offset : Int32 | ::Nil = nil) : String\n def self.parse(string : String) : Time | TimeParseError\n end\n # RFC 3339, the module's own serialisation: `to_rfc3339` and\n # `parse_rfc3339` are this module's `format` and `parse`, and\n # `parse_rfc3339` panics with the sentence `parse` answers. Written at\n # *offset*, or at the time's own when it is whole minutes and in UTC\n # when it is not.\n module RFC_3339\n def self.format(time : Time, fraction_digits : Int32 = 0, offset : Int32 | ::Nil = nil) : String\n def self.parse(str : String) : Time | TimeParseError\n end\n # An offset is less than a day either side of UTC: the widest RFC 3339\n # and RFC 2822 write is 23:59, and a day or more is a date, not a zone.\n # An offset is the program's own, so a wrong one is a panic.\n def self.check_offset(offset : Int32) : Nil\n def format(time : Time, offset : Int32) : String\n def format(time : Time) : String\n # *offset*, seconds east of UTC, is the one a parse reads a text at when\n # the text names no zone, and the one `format` writes at. Nil, as for\n # Crystal's `Format.new(pattern)`, makes a text without a zone an error,\n # and `format` writes a time in its own location.\n def initialize(pattern : String, offset : Int32 | ::Nil = nil)\n # A text that names no zone is read on *location*'s wall clock, and\n # every time is read and written in *location*.\n def initialize(pattern : String, location : Location)\n # The directive at the `%` at byte *i* of *pattern*: the byte after it,\n # its letter, its flag, the colons of `%:z` and `%::z`, and the digits of\n # `%3N`. A `%` that starts no directive answers the letter '\\0' and the\n # byte after the `%`: it is text, and so is what follows it, as Crystal\n # writes `%Q` back out as `%Q`.\n def self.lex(pattern : String, i : Int32) : ::Tuple(Int32, Char, Char, Int32, Int32)\n def location : Location | ::Nil\n def self.name(io : String::Builder, text : String, flag : Char) : Nil\n # A number padded to *width* with *pad*, '\\0' for none, unless a flag\n # says otherwise. The sign of a negative year goes in front of the\n # padding, as `-0001`, the way `to_rfc3339` writes it.\n def self.number(io : String::Builder, value : Int64, width : Int32, pad : Char, flag : Char) : Nil\n def self.numeric?(letter : Char) : Bool\n def offset : Int32 | ::Nil\n # `+hh:mm` or `+hhmm`, and the seconds never (0), when there are any (1)\n # or always (2), the way Crystal's `Zone#format` writes an offset.\n def self.offset_text(offset : Int32, colon : Bool, seconds : Int32) : String\n def parse(string : String, offset : Int32 | ::Nil) : Time | TimeParseError\n def parse(string : String) : Time | TimeParseError\n def pattern : String\n def self.plain?(letter : Char) : Bool\n def self.textual?(letter : Char) : Bool\n def self.twelve(hour : Int32) : Int64\n def self.write(io : String::Builder, pattern : String, f : Fields) : Nil\n def self.write_directive(io : String::Builder, letter : Char, flag : Char, colons : Int32, digits : Int32, f : Fields) : Nil\n end\n struct KernelTimeSpec\n def initialize(tv_sec : Int64, tv_nsec : Int64)\n def tv_nsec : Int64\n def tv_nsec=(value : Int64) : Int64\n def tv_sec : Int64\n def tv_sec=(value : Int64) : Int64\n end\n alias Location = Std::Time::Location\n alias Span = Std::Time::Span\n # The sum is checked before it is taken, so a span too long for the\n # seconds is refused as one; a sum that fits but leaves the years an\n # Int32 names is refused by the constructor. A span is exact: a day\n # added across the night summer begins is 24 hours, and the clock reads\n # an hour later than it did.\n def +(span : Span) : Time\n def -(span : Span) : Time\n def -(other : Time) : Span\n def <(other : Time) : Bool\n def <=(other : Time) : Bool\n def <=>(other : Time) : Int32\n def ==(other : Time) : Bool\n def >(other : Time) : Bool\n def >=(other : Time) : Bool\n # The ISO 8601 week-numbering year and week this day falls in, as\n # Crystal's `calendar_week` answers: 2021-01-01 is in week 53 of 2020.\n def calendar_week : ::Tuple(Int32, Int32)\n # Converts days since 1970-01-01 into {year, month, day}.\n def self.civil_from_days(z : Int64) : ::Tuple(Int32, Int32, Int32)\n def day : Int32\n def day_of_week : DayOfWeek\n def day_of_year : Int32\n def self.days_from_civil(y : Int64, m : Int32, d : Int32) : Int64\n def self.days_in_month(year : Int32, month : Int32) : Int32\n def self.days_in_year(year : Int32) : Int32\n # Number of days between 1970-01-01 and the given civil date.\n # Follows Howard Hinnant's Gregorian calendar algorithm.\n def self.floor_div(a : Int64, b : Int64) : Int64\n def self.floor_mod(a : Int64, b : Int64) : Int64\n def self.from_unix(seconds : Int64, nanoseconds : Int32 = 0) : Time\n def self.from_unix_ms(milliseconds : Int64) : Time\n # Hashing follows `==`, as `Span`'s does. Without it every time hashed to its\n # type: `Time.unix(1).hash == Time.unix(1000000, 5).hash`, and a table of\n # 16,000 times took 1.2 s to fill where the same pairs as tuples took 1 ms.\n def hash : Int32\n def hour : Int32\n # The same instant read in *location*: `Time.utc(2024, 7, 1, 12).in(berlin)`\n # is 14:00 CEST.\n def in(location : Location) : Time\n def initialize(seconds : Int64, nanoseconds : Int32 = 0, location : Location = Location::UTC)\n # As the other library writes it: the date and time, the nanoseconds\n # when there are any, and `Z`. There was no `inspect`, so it was `to_s`,\n # and `Time.utc(2024, 1, 1, 0, 0, 0, nanosecond: 5)` inspected as\n # `2024-01-01 00:00:00 UTC`, the same as `Time.utc(2024, 1, 1)`, which\n # `==` tells apart from it. Out of UTC the offset follows, and the\n # location's name when it is more than an offset:\n # `2016-02-15 11:20:30 +01:00 Europe/Berlin`.\n def inspect : String\n # The ISO 8601 week-numbering year and week of a date, from its year, day\n # of the month, day of the year and day of the week (Monday is 1). This is\n # Crystal's computation: the week is the count of Mondays up to the day,\n # and the first days of January or the last of December can belong to a\n # week of the year next to it. The year is an Int64 because the first days\n # of the smallest Int32 year belong to the year before it.\n def self.iso_week(year : Int64, day : Int32, day_of_year : Int32, day_of_week : Int32) : ::Tuple(Int64, Int32)\n def self.kernel_clock_gettime(clock_id : Int64) : ::Tuple(Int64, Int64)\n def self.leap_year?(year : Int32) : Bool\n # The time a clock in *location* shows as the date and time given, the\n # machine's own zone when none is. Its fields are checked as `utc` checks\n # them. A wall time a change of offset repeats, the hour after summer\n # ends, is the earlier of the two; one a change skips, the hour summer\n # begins with, is read past the gap (see `Location#resolve`).\n def self.local(year : Int32, month : Int32, day : Int32, hour : Int32 = 0, minute : Int32 = 0, second : Int32 = 0, millisecond : Int32 = 0, nanosecond : Int32 = 0, location : Location = Location.local) : Time\n # Now, read in *location*.\n def self.local(location : Location) : Time\n # Now, in the machine's own zone (`Location.local`).\n def self.local : Time\n def local? : Bool\n # The zone the date and clock are read in, and its offset from UTC at\n # this instant in seconds east. `==`, `<=>` and `hash` are the instant's\n # and do not look at either: noon in London and 13:00 in Paris are the\n # same time.\n def location : Location\n def millisecond : Int32\n def milliseconds : Int32\n def minute : Int32\n def self.monotonic : Span\n def self.monotonic_nanoseconds : UInt64\n def month : Int32\n def nanosecond : Int32\n def nanoseconds : Int32\n def self.new(year : Int32, month : Int32, day : Int32, hour : Int32 = 0, minute : Int32 = 0, second : Int32 = 0, millisecond : Int32 = 0, nanosecond : Int32 = 0) : Time\n def offset : Int32\n def self.pad2(n : Int32) : String\n def self.pad3(n : Int32) : String\n # Four digits, and a negative year keeps its sign in front of them rather\n # than inside: written as `n < 10 ? \"000\" + n.to_s`, year -1 printed\n # `000-1-01-01`, which is neither a year nor a date. ISO 8601 spells it\n # `-0001`, and the conversions themselves were right all along - the epoch\n # round-trips through it.\n def self.pad4(n : Int32) : String\n def self.pad6(n : Int32) : String\n def self.pad9(n : Int32) : String\n # Reads *string* by *pattern*'s directives (see `Time::Format`). A text\n # that names no zone is read at *offset* seconds east of UTC, as Crystal's\n # `Time.parse` reads one at the location it is given.\n def self.parse(string : String, pattern : String, offset : Int32) : Time | TimeParseError\n # Reads *string* by *pattern* in *location*: a text that names no zone is\n # the wall clock there, its offset the one the location kept at that date\n # (a wall time a change repeats or skips is read as `Time.local` reads\n # it), and the time answered is in *location* whether the text named a\n # zone or not.\n def self.parse(string : String, pattern : String, location : Location) : Time | TimeParseError\n def self.parse_iso8601(string : String) : Time | TimeParseError\n # `parse` in the machine's own zone.\n def self.parse_local(string : String, pattern : String) : Time | TimeParseError\n # Any of RFC 9110's three HTTP date forms; see `Time::Format::HTTP_DATE`.\n def self.parse_rfc1123(string : String) : Time | TimeParseError\n def self.parse_rfc2822(string : String) : Time | TimeParseError\n # Parses an RFC 3339 / ISO 8601 string into a UTC Time, and panics with the\n # parser's sentence when it is not one. Handles forms like:\n # 2024-02-29T12:30:45Z\n # 2024-02-29T12:30:45.123Z\n # 2024-02-29T12:30:45.123456789Z\n # 2024-02-29 12:30:45Z\n # 2024-02-29T12:30:45+05:00\n # 2024-02-29T12:30:45-08:00\n # -0001-01-01T00:00:00Z and 12345-06-07T08:09:10Z, as `to_rfc3339` writes them\n # `Time::Format::RFC_3339.parse` reads the same grammar and answers a\n # `TimeParseError` instead, for text the program did not write itself.\n def self.parse_rfc3339(str : String) : Time\n # `parse` at UTC when the text names no zone.\n def self.parse_utc(string : String, pattern : String) : Time | TimeParseError\n def second : Int32\n def seconds : Int64\n # Moves the date by calendar years and months, then by weeks and days,\n # then by the smaller units, in that order, as Crystal's `shift` does. A\n # day the month does not have becomes its last: `Time.utc(2024, 1,\n # 31).shift(months: 1)` is 2024-02-29. The date moves on the wall clock\n # of the time's location, so the time of day is kept across a change of\n # offset - a day after 12:00 on the Saturday summer begins is 12:00 on\n # Sunday, 23 hours later - and the hours, minutes, seconds and\n # nanoseconds are exact. A year past an Int32 is refused with the\n # constructor's sentence, and a span the Int64 seconds do not hold with\n # `Span`'s.\n def shift(*, years : Int32 = 0, months : Int32 = 0, weeks : Int64 = 0_i64, days : Int64 = 0_i64, hours : Int64 = 0_i64, minutes : Int64 = 0_i64, seconds : Int64 = 0_i64, nanoseconds : Int64 = 0_i64) : Time\n def to_local : Time\n # RFC 1123's date as HTTP writes it, RFC 9110's IMF-fixdate, always in GMT:\n # `Sun, 06 Nov 1994 08:49:37 GMT`.\n def to_rfc1123 : String\n # RFC 2822's date, `Mon, 15 Feb 2016 04:35:50 +0000`, at *offset*, or at\n # the time's own offset when none is given.\n def to_rfc2822(offset : Int32 | ::Nil = nil) : String\n # RFC 3339 at the time's own offset: `Z` at UTC, `+02:00` in CEST. An\n # offset RFC 3339 cannot write, one with seconds in it as local mean time\n # before standard time had, is written as the same instant in UTC.\n def to_rfc3339(fraction_digits : Int32 = 0) : String\n # The instant written as it reads at *offset* seconds east of UTC:\n # `to_s(\"%F %T %:z\", 19800)` is the wall clock in India.\n def to_s(format : String, offset : Int32) : String\n # The time written by *format*'s directives (see `Time::Format`) as its\n # own location reads it; `%Z` is the zone's abbreviation, `CEST`.\n def to_s(format : String) : String\n # `2016-02-15 10:20:30 UTC`, and in any other location the offset in\n # place of `UTC`: `2016-02-15 11:20:30 +01:00`.\n def to_s : String\n def to_unix : Int64\n def to_unix_f : Float64\n # Refused with the module's sentence past the milliseconds an Int64\n # holds, some 292 million years either side of 1970, where the multiply\n # was the prelude's bare \"arithmetic overflow\" for a year `Time.utc`\n # accepts, 300,000,000. Both edges answer to the last millisecond that\n # fits: the lowest 808 an Int64 holds were refused, so\n # `Time.unix_ms(Int64::MIN).to_unix_ms` panicked. A negative second is\n # taken one up and its milliseconds from 1000 down, so the product fits\n # too.\n def to_unix_ms : Int64\n def to_utc : Time\n def self.unix(seconds : Int64, nanoseconds : Int32 = 0) : Time\n def self.unix_ms(milliseconds : Int64) : Time\n def self.utc(year : Int32, month : Int32, day : Int32, hour : Int32 = 0, minute : Int32 = 0, second : Int32 = 0, millisecond : Int32 = 0, nanosecond : Int32 = 0) : Time\n def self.utc : Time\n def utc? : Bool\n def self.wall_clock_nanoseconds : UInt64\n # The instant of a day of an ISO 8601 week, as Crystal's `week_date` makes\n # it: `Time.week_date(2016, 1, 1)` is Monday 2016-01-04. A week the year\n # does not have and a day past Sunday are refused, where the other library answered\n # a day of some other week.\n def self.week_date(year : Int32, week : Int32, day_of_week : Int32, hour : Int32 = 0, minute : Int32 = 0, second : Int32 = 0, nanosecond : Int32 = 0) : Time\n # Days since 1970-01-01 of a day of an ISO 8601 week. Week 1 is the week\n # holding January 4th, so its Monday is the Monday on or before that day.\n def self.week_date_days(year : Int32, week : Int32, day_of_week : Int32) : Int64\n # A year has 53 ISO 8601 weeks when it starts on a Thursday, or on a\n # Wednesday in a leap year: either way it has 53 Thursdays, and a week\n # belongs to the year that holds its Thursday.\n def self.weeks_in_year(year : Int32) : Int32\n def year : Int32\n # The zone this instant is in at its location: its abbreviation, offset\n # and whether it is summer time.\n def zone : Location::Zone\nend\n\n# What `Time::Format#parse` and the named parsers answer when the text is not\n# a time the pattern describes. Bad input is the caller's to handle, not a\n# panic: a header or a log line from somewhere else is not a bug in the\n# program reading it. `message` is the sentence, naming the byte the parser\n# stood at and the text; `position` is that byte, counted from 0.\npub struct TimeParseError\n def initialize(message : String, input : String, position : Int32)\n def input : String\n def position : Int32\n def to_s : String\nend\n\nimpl Error for TimeParseError\n def message : String\nend\n\nimpl Std::Traits::Comparable for Span\n def <=>(other : self) : Int32\nend\n\nimpl Error for LocationError\n def message : String\nend\n\nimpl Std::Traits::Comparable for Time\n def <=>(other : self) : Int32\nend\n" + "sourceSha256": "98656531b9416af7f2556cd367d2716d4b955b609a7ad2df35f48d8898d789e9", + "surface": "module std/time\n\npub struct DayOfWeek\n def ==(other : DayOfWeek) : Bool\n def ===(other : DayOfWeek) : Bool\n def friday? : Bool\n # Hashing follows `==`. Without it a day hashed to its type, `Object#hash`'s\n # default: `Monday.hash == Sunday.hash`, and every day a table held went to\n # one slot.\n def hash : Int32\n def initialize(value : Int32)\n def monday? : Bool\n def saturday? : Bool\n def sunday? : Bool\n def thursday? : Bool\n def to_s : String\n def tuesday? : Bool\n def value : Int32\n def wednesday? : Bool\nend\n\n# A time zone: the offsets from UTC a place has kept, and when it changed\n# from one to the next. `Location.load(\"Europe/Istanbul\")` reads the IANA\n# database the machine has; `Location.local` is the machine's own zone;\n# `Location.fixed(19800)` is an offset and nothing else; `Location::UTC` is\n# UTC. A `Time` carries one, and its date and clock are read in it.\n#\n# The database is the system's TZif files, RFC 8536: `$ZONEINFO` when it\n# names a directory, then `/usr/share/zoneinfo`, `/usr/share/lib/zoneinfo`\n# and `/etc/zoneinfo`. Versions 1 to 4 are read. A time before the first\n# change has the file's first offset, and one after the last has its POSIX\n# footer's rule, so a slim file answers for the year 2100 as a fat one does.\n# Leap seconds are not counted, as no clock this module reads counts them.\n#\n# `Location.local` is the `TZ` variable when it is set — the empty string\n# is UTC, a leading `:` is dropped, an absolute path is a TZif file, a name\n# is looked up in the database, and anything else is read as a POSIX TZ\n# string such as `EST5EDT,M3.2.0,M11.1.0` — and `/etc/localtime` when it is\n# not. Windows has no database to read: there `local` is the system's zone,\n# its rule from `GetTimeZoneInformation`, its zones named by their offsets,\n# and `load` reads `$ZONEINFO` alone. Where nothing answers, local is UTC.\n# The local zone is read once, the first time it is asked for.\n#\n# A location is built once and never changed, so a `Time` that holds one\n# can cross to another task.\npub class Location\n # One offset a location keeps: its abbreviation (`CEST`, `+03`), its\n # seconds east of UTC, and whether it is summer time.\n struct Zone\n def ==(other : Zone) : Bool\n def dst? : Bool\n def initialize(name : String, offset : Int32, dst : Bool)\n def name : String\n def offset : Int32\n def to_s : String\n end\n def ==(other : Location) : Bool\n def self.fixed(name : String, offset : Int32) : Location\n # An offset of *offset* seconds east of UTC and nothing else, named as\n # the offset is written: `+05:30`. Less than a day either way.\n def self.fixed(offset : Int32) : Location\n # One offset, never changing.\n def fixed? : Bool\n def hash : Int32\n def initialize(name : String, zones : Array(Zone), transitions : Array(Int64), transition_zones : Array(Int32), rule : TzRule | ::Nil)\n def inspect : String\n # The zone the IANA database names *name*: `Europe/Istanbul`,\n # `America/New_York`. `UTC` and the empty name are UTC and `Local` is\n # `Location.local`, without a file. A name that climbs out of the database\n # (`..`, a leading `/`, a `\\`) is refused, and so is one no directory has.\n def self.load(name : String) : Location | LocationError\n # The machine's zone; see the type's comment for where it comes from.\n def self.local : Location\n # The machine's own zone, the one `Location.local` answers.\n def local? : Bool\n # The zone *time* is in here.\n def lookup(time : Time) : Zone\n def lookup(unix_seconds : Int64) : Zone\n def name : String\n # A location from the 172 bytes of a Windows TIME_ZONE_INFORMATION, which\n # is what `Location.local` reads on Windows; it is pure so that every\n # platform can check the decoding with bytes made by hand. The struct is\n # the bias in minutes west of UTC (UTC = local + bias), then the standard\n # name, date and bias, then the daylight ones, all little-endian. The\n # three biases are signed LONGs: a zone east of UTC has a negative Bias\n # (Turkey's is -180) and a summer usually a DaylightBias of -60, so each\n # is read as the 32 bits' two's complement. Read as unsigned and then\n # converted, as it once was, -180 was 4294967116 and the conversion\n # panicked with an arithmetic overflow, issue #133.\n #\n # A date with a year of 0 is a rule - the wDay'th wDayOfWeek of wMonth,\n # 5 the last, at the wall time then in force - which is a POSIX\n # `Mm.w.d/time`; one with a month of 0 is no summer. A date with a year\n # is a single year's, which is not a rule at all, and it is read as no\n # summer rather than as every year's. The names are the offset's, `+03`\n # or `-05`, as tzdata writes a zone it has no letters for: the struct's\n # own are Windows' long names, \"Turkey Standard Time\", which are not\n # abbreviations and are localised.\n def self.read_windows_zone(name : String, data : String) : Location | LocationError\n # A location from the bytes of a TZif file, RFC 8536, named *name*.\n # Anything that is not one is refused with what was wrong and where.\n def self.read_zoneinfo(name : String, data : String) : Location | LocationError\n # The instant a wall clock here reads *wall* (seconds since 1970 as a\n # UTC clock would count them). A wall time a change repeats is the\n # earlier of the two instants; one a change skips is read on the clock\n # from before the change, which lands it past the gap: 02:30 on the\n # morning summer starts in Berlin is 03:30 CEST. Python's `fold=0` and\n # Go read them the same way. `Time.local` and a parse at a location ask\n # this.\n def resolve(wall : Int64) : Int64\n def to_s : String\n def utc? : Bool\nend\n\n# What `Location.load` and `Location.read_zoneinfo` answer when there is no\n# zone by that name, or the bytes are not a zone: a name the program was\n# handed or a file on the machine is not a bug in the program, so it is a\n# value and not a panic.\npub struct LocationError\n def initialize(message : String)\n def to_s : String\nend\n\npub struct Span\n def +(other : Span) : Span\n def -(other : Span) : Span\n def - : Span\n def <(other : Span) : Bool\n def <=(other : Span) : Bool\n def <=>(other : Span) : Int32\n def ==(other : Span) : Bool\n def >(other : Span) : Bool\n def >=(other : Span) : Bool\n # The seconds are an Int64, and a span that leaves it is refused here,\n # by name: `Span.seconds(Int64::MAX) + Span.seconds(1)` panicked with the\n # prelude's \"arithmetic overflow\", a sentence that named no span. The\n # wrapping sum is compared with an addend to see whether it wrapped; the\n # product is bounded before it is taken.\n def self.add_seconds(a : Int64, b : Int64) : Int64\n def days : Int64\n def self.days(n : Int64) : Span\n # Hashing follows `==`, the two parts mixed as a tuple's members are. Without\n # it every span hashed to its type: `Span.seconds(1).hash ==\n # Span.days(9).hash`, and a table of 16,000 spans took 0.95 s to fill where\n # the same pairs as tuples took 1 ms.\n def hash : Int32\n def hours : Int32\n def self.hours(n : Int64) : Span\n def initialize(seconds : Int64 = 0_i64, nanoseconds : Int32 = 0)\n def millisecond : Int32\n def milliseconds : Int32\n def self.milliseconds(n : Int64) : Span\n def minutes : Int32\n def self.minutes(n : Int64) : Span\n def self.mul_seconds(n : Int64, unit : Int64) : Int64\n def nanosecond : Int32\n def nanoseconds : Int32\n def self.nanoseconds(n : Int64) : Span\n def self.new(*, days : Int64 = 0_i64, hours : Int64 = 0_i64, minutes : Int64 = 0_i64, seconds : Int64 = 0_i64, milliseconds : Int64 = 0_i64, nanoseconds : Int64 = 0_i64) : Span\n def seconds : Int32\n def self.seconds(n : Int64) : Span\n def self.sub_seconds(a : Int64, b : Int64) : Int64\n def to_i : Int64\n def to_s : String\n def total_days : Float64\n def total_hours : Float64\n def total_milliseconds : Float64\n def total_minutes : Float64\n def total_nanoseconds : Float64\n def total_seconds : Float64\n def total_seconds_i64 : Int64\n def self.zero : Span\nend\n\npub struct Time\n alias DayOfWeek = Std::Time::DayOfWeek\n # A pattern of Crystal's directives, for writing a `Time` and reading one\n # back. Text that is not a directive is written as it is and must be\n # there, byte for byte, when reading; ASCII whitespace in the pattern is\n # written as it is and reads any run of whitespace, none included.\n #\n # %Y year, four digits or more, year -1 as -0001 %C year // 100\n # %y year % 100 %G %g %V the ISO 8601 week year, its last two digits,\n # and the week 01..53 %m month 01..12 %B January %b %h Jan\n # %d day 01..31 %e day \" 1\"..\"31\" %j day of the year 001..366\n # %H hour 00..23 %k \" 0\"..\"23\" %I 01..12 %l \" 1\"..\"12\" %p am %P AM\n # %M minute %S second %L milliseconds %3N %6N %9N the fraction to\n # 3, 6 and 9 digits %N nanoseconds, any number of digits when read\n # %A Sunday %a Sun %u day of the week, Monday 1..7 %w Sunday 0..6\n # %s seconds since the epoch %z +0530 %:z +05:30 %::z +05:30:00\n # %Z and %^Z: UTC at offset 0 and the offset, +05:30, at any other\n # %F %Y-%m-%d %T %X %H:%M:%S %R %H:%M %D %x %m/%d/%y\n # %r %I:%M:%S %P %c %a %b %e %H:%M:%S %Y %n newline %t tab %% %\n #\n # A number takes a flag between the `%` and its letter: `-` for no\n # padding (`%-d` is 5), `_` for spaces (`%_m` is \" 5\") and `0` for zeros\n # (`%0e` is 05); `^` upcases a name (`%^a` is SUN). The other library knows\n # `%-d`, `%-m`, `%_m` and the `^` names. The same flags on its other numbers\n # are this module's, where that library wrote the `%-` back out as text; a `%`\n # that starts no directive is text here as it is there.\n #\n # Reading takes up to a number's width in digits, fewer when the next byte\n # is not a digit, and a name in any case. `%Y` takes four digits when a\n # directive follows it (`%Y%m%d`), and when text or the end of the\n # pattern does (`%F`), an optional `-` and up to ten, so the years `to_s`\n # writes are the years it reads. A field outside its range, a day the\n # month does not have, a name that is not one and text after the pattern\n # are each a `TimeParseError`, never a panic. A day name is checked to be\n # one and not checked against the date, as Crystal, Go and Python read it.\n struct Format\n # The parts of an instant as they read at an offset, worked out once\n # per `format` rather than once per directive. *zone* is what `%Z`\n # writes, the location's abbreviation; with none it writes `UTC` at\n # offset 0 and the offset at any other.\n struct Fields\n def day : Int32\n def day_of_week : Int32\n def day_of_year : Int32\n def hour : Int32\n def initialize(time : Time, offset : Int32, zone : String | ::Nil)\n def minute : Int32\n def month : Int32\n def nanosecond : Int32\n def offset : Int32\n def second : Int32\n def unix : Int64\n def week : ::Tuple(Int64, Int32)\n def year : Int32\n def zone : String | ::Nil\n end\n # The HTTP date of RFC 9110 section 5.6.7. It is written as the\n # IMF-fixdate, always in GMT, `Sun, 06 Nov 1994 08:49:37 GMT`; it is\n # read in all three of the forms a recipient must accept: that one, the\n # obsolete RFC 850 `Sunday, 06-Nov-94 08:49:37 GMT`, and asctime's\n # `Sun Nov 6 08:49:37 1994`.\n module HTTP_DATE\n def self.format(time : Time) : String\n def self.parse(string : String) : Time | TimeParseError\n end\n # ISO 8601's calendar date, written `2016-02-15` as the date reads at\n # *offset* or in the time's own location; read extended or basic, and\n # as an ordinal or a week date, at *offset* since a date names no zone.\n module ISO_8601_DATE\n def self.format(time : Time, offset : Int32 | ::Nil = nil) : String\n def self.parse(string : String, offset : Int32 = 0) : Time | TimeParseError\n end\n # ISO 8601's date and time, written as RFC 3339 writes it and read with\n # every form of `ISO_8601_DATE` and `ISO_8601_TIME` joined by an\n # optional `T`. The zone is required, as Crystal requires it.\n module ISO_8601_DATE_TIME\n def self.format(time : Time, offset : Int32 | ::Nil = nil) : String\n def self.parse(string : String) : Time | TimeParseError\n end\n # ISO 8601's time of day and its zone, `04:35:50Z`; read as on\n # 0001-01-01, the day Crystal reads it on.\n module ISO_8601_TIME\n def self.format(time : Time, offset : Int32 | ::Nil = nil) : String\n def self.parse(string : String) : Time | TimeParseError\n end\n # Reads a text by a pattern or by one of the named grammars. Every step\n # answers whether it matched; the first that did not leaves its sentence\n # in `@error`, and `finish` answers that, so no text a program is handed\n # ends it in a panic.\n class Parser\n def accept(char : Char) : Bool\n def am_pm : Bool\n def at_end : Bool\n # RFC 5322's CFWS: whitespace and parenthesised comments, which nest\n # and in which `\\` quotes the next byte. Answers whether there was any;\n # a comment left open is the error, and the parse fails on it.\n def cfws : Bool\n def day_name : Bool\n def self.digit?(b : UInt8) : Bool\n # Up to *max* digits and at least one. Nil, with the sentence, when\n # there are none, or when they are past what an Int64 holds.\n def digits(max : Int32, what : String) : Int64 | ::Nil\n def directive(letter : Char, flag : Char, digits : Int32, wide : Bool) : Bool\n # Exactly *count* digits, or nil, reading nothing and saying nothing:\n # the caller names what was missing.\n def exact(count : Int32) : Int32 | ::Nil\n def expect(char : Char) : Bool\n def fail(what : String) : Bool\n # A numeric directive's field, read as its flag and its padding say.\n def field(width : Int32, pad : Char, flag : Char, what : String) : Int32 | ::Nil\n # The instant the fields name, or the first sentence a step left. The\n # fields are checked the way `Time.utc` checks them, with RFC 3339's\n # allowance: `:60` is a leap second, read as the second after `:59`,\n # the instant it names on every clock that has none. A text that\n # names no zone is read at *default_offset*, or failing that on\n # *location*'s wall clock; with a location the time answered is in it.\n def finish(default_offset : Int32 | ::Nil, location : Location | ::Nil = nil) : Time | TimeParseError\n # A fraction of a second: up to *max* digits, scaled to nanoseconds,\n # and for `%N` any digits past the ninth read and dropped.\n def fraction(max : Int32, rest : Bool) : Bool\n # RFC 9110 section 5.6.7's three forms of an HTTP date: the\n # IMF-fixdate `Sun, 06 Nov 1994 08:49:37 GMT`, the obsolete RFC 850\n # `Sunday, 06-Nov-94 08:49:37 GMT`, and asctime's `Sun Nov 6 08:49:37\n # 1994`, which has no zone and is GMT. Crystal's reading: a day name,\n # short or long, in any of the three; the four-digit year IIS writes\n # in the RFC 850 shape; and the zones RFC 2822 names where RFC 9110\n # writes GMT.\n def http_date : Bool\n def initialize(input : String)\n # ISO 8601's dates, extended or basic: 2016-02-15 and 20160215, the\n # ordinal 2016-046 and 2016046, and the week date 2016-W07-1 and\n # 2016W071.\n def iso_date : Bool\n def iso_date_time : Bool\n # ISO 8601's time of day, extended or basic: 04:35:50 and 043550, a\n # fraction of the second after `.` or `,`, or the minutes or the hour\n # alone with a fraction of their own (04:35.5 is 04:35:30).\n def iso_time : Bool\n def self.letter?(b : UInt8) : Bool\n def literal(b : UInt8) : Bool\n def month_name(short : Bool) : Bool\n # A run of ASCII letters and the index in *names* of the name it\n # spells, in any case: for *short*, the first three letters of a name\n # and no more; otherwise the start of a name, three letters or longer,\n # as Crystal reads `%B` and `%A`.\n def name(names : Array(String), short : Bool, what : String) : Int32 | ::Nil\n def need_cfws : Bool\n def number(max : Int32, what : String) : Int32 | ::Nil\n def offset_number(allow_colon : Bool, force_colon : Bool, allow_seconds : Bool) : Bool\n # A number blank padded, as `%e` writes \" 5\": one space stands for a\n # digit.\n def padded_number(max : Int32, what : String) : Int32 | ::Nil\n def pattern(pattern : String) : Bool\n # The byte *ahead* of the current one, or 0 past the end, as Crystal's\n # reader answers '\\0' there.\n def peek(ahead : Int32 = 0) : UInt8\n # RFC 9110's rule for a two-digit year (section 5.6.7): a year that\n # appears to be more than 50 years in the future is the most recent\n # past year with those last two digits. The candidate is taken in this\n # century and moved a century to land in the 100 years ending 50 years\n # from now, so the rule holds in 2090 too. The other library read 00..49 as 20xx\n # and the rest as 19xx, whatever the year it was read in.\n def self.recent_year(two_digits : Int64) : Int64\n # A sentence about fields that were all read, where no one byte is to\n # blame.\n def refuse(what : String) : TimeParseError\n # RFC 5322 section 3.3's date-time, with section 4.3's obsolete\n # two- and three-digit years and zone names, as Crystal's `RFC_2822`\n # reads it: `Mon, 15 Feb 2016 04:35:50 +0000`, the day name and the\n # seconds optional, comments anywhere whitespace goes.\n def rfc_2822 : Bool\n def same_letters?(start : Int32, name : String, size : Int32) : Bool\n def skip_spaces : Bool\n def self.space?(b : UInt8) : Bool\n def text(start : Int32, stop : Int32) : String\n # HH:MM:SS, as both HTTP and RFC 850 write the time of day.\n def time_of_day : Bool\n # One whitespace byte, as the HTTP grammars put between their parts.\n def whitespace : Bool\n # `%Y`: four digits when a directive follows it, and an optional `-`\n # and up to ten when text does, which is every year an Int32 holds.\n def year(wide : Bool) : Int64 | ::Nil\n # Exactly four digits, as the HTTP and ISO 8601 grammars write a year.\n def year4 : Bool\n # `%z`, `%:z` and `%::z` alike, as Crystal reads them: `Z`, `UTC`, or\n # an offset with or without its colons.\n def zone : Bool\n # `%Z`: an offset, or a name read up to the next whitespace. Only the\n # names of UTC itself are read: an abbreviation names no single zone\n # (CST is three of them), so any other is refused by name rather than\n # read as UTC or guessed at. A text whose zone is known is read at\n # that `Location` instead.\n def zone_name : Bool\n # RFC 5322's zone (section 3.3, and 4.3 for the obsolete names): an\n # offset of four digits, or a name. A military letter is read as\n # `-0000`, the offset of a time whose zone is not known, as section\n # 4.3 says to; a name the RFC does not give is refused, where Crystal\n # read it as UTC in silence. `UTC` is not the RFC's, and is read as\n # Crystal reads it.\n def zone_rfc2822 : Bool\n # ISO 8601's zone: `Z` or an offset.\n def zone_z_or_offset : Bool\n end\n # RFC 2822's date and time, `Mon, 15 Feb 2016 04:35:50 +0000`, as\n # Crystal writes it: the day of the month unpadded, the offset at the\n # end, the time's own unless another is given. RFC 2822 writes an offset\n # in whole minutes, so an offset with seconds is refused rather than\n # written as some other instant.\n module RFC_2822\n def self.format(time : Time, offset : Int32 | ::Nil = nil) : String\n def self.parse(string : String) : Time | TimeParseError\n end\n # RFC 3339, the module's own serialisation: `to_rfc3339` and\n # `parse_rfc3339` are this module's `format` and `parse`, and\n # `parse_rfc3339` panics with the sentence `parse` answers. Written at\n # *offset*, or at the time's own when it is whole minutes and in UTC\n # when it is not.\n module RFC_3339\n def self.format(time : Time, fraction_digits : Int32 = 0, offset : Int32 | ::Nil = nil) : String\n def self.parse(str : String) : Time | TimeParseError\n end\n # An offset is less than a day either side of UTC: the widest RFC 3339\n # and RFC 2822 write is 23:59, and a day or more is a date, not a zone.\n # An offset is the program's own, so a wrong one is a panic.\n def self.check_offset(offset : Int32) : Nil\n def format(time : Time, offset : Int32) : String\n def format(time : Time) : String\n # *offset*, seconds east of UTC, is the one a parse reads a text at when\n # the text names no zone, and the one `format` writes at. Nil, as for\n # Crystal's `Format.new(pattern)`, makes a text without a zone an error,\n # and `format` writes a time in its own location.\n def initialize(pattern : String, offset : Int32 | ::Nil = nil)\n # A text that names no zone is read on *location*'s wall clock, and\n # every time is read and written in *location*.\n def initialize(pattern : String, location : Location)\n # The directive at the `%` at byte *i* of *pattern*: the byte after it,\n # its letter, its flag, the colons of `%:z` and `%::z`, and the digits of\n # `%3N`. A `%` that starts no directive answers the letter '\\0' and the\n # byte after the `%`: it is text, and so is what follows it, as Crystal\n # writes `%Q` back out as `%Q`.\n def self.lex(pattern : String, i : Int32) : ::Tuple(Int32, Char, Char, Int32, Int32)\n def location : Location | ::Nil\n def self.name(io : String::Builder, text : String, flag : Char) : Nil\n # A number padded to *width* with *pad*, '\\0' for none, unless a flag\n # says otherwise. The sign of a negative year goes in front of the\n # padding, as `-0001`, the way `to_rfc3339` writes it.\n def self.number(io : String::Builder, value : Int64, width : Int32, pad : Char, flag : Char) : Nil\n def self.numeric?(letter : Char) : Bool\n def offset : Int32 | ::Nil\n # `+hh:mm` or `+hhmm`, and the seconds never (0), when there are any (1)\n # or always (2), the way Crystal's `Zone#format` writes an offset.\n def self.offset_text(offset : Int32, colon : Bool, seconds : Int32) : String\n def parse(string : String, offset : Int32 | ::Nil) : Time | TimeParseError\n def parse(string : String) : Time | TimeParseError\n def pattern : String\n def self.plain?(letter : Char) : Bool\n def self.textual?(letter : Char) : Bool\n def self.twelve(hour : Int32) : Int64\n def self.write(io : String::Builder, pattern : String, f : Fields) : Nil\n def self.write_directive(io : String::Builder, letter : Char, flag : Char, colons : Int32, digits : Int32, f : Fields) : Nil\n end\n alias Location = Std::Time::Location\n alias Span = Std::Time::Span\n # The sum is checked before it is taken, so a span too long for the\n # seconds is refused as one; a sum that fits but leaves the years an\n # Int32 names is refused by the constructor. A span is exact: a day\n # added across the night summer begins is 24 hours, and the clock reads\n # an hour later than it did.\n def +(span : Span) : Time\n def -(span : Span) : Time\n def -(other : Time) : Span\n def <(other : Time) : Bool\n def <=(other : Time) : Bool\n def <=>(other : Time) : Int32\n def ==(other : Time) : Bool\n def >(other : Time) : Bool\n def >=(other : Time) : Bool\n # The ISO 8601 week-numbering year and week this day falls in, as\n # Crystal's `calendar_week` answers: 2021-01-01 is in week 53 of 2020.\n def calendar_week : ::Tuple(Int32, Int32)\n # Converts days since 1970-01-01 into {year, month, day}.\n def self.civil_from_days(z : Int64) : ::Tuple(Int32, Int32, Int32)\n def day : Int32\n def day_of_week : DayOfWeek\n def day_of_year : Int32\n def self.days_from_civil(y : Int64, m : Int32, d : Int32) : Int64\n def self.days_in_month(year : Int32, month : Int32) : Int32\n def self.days_in_year(year : Int32) : Int32\n # Number of days between 1970-01-01 and the given civil date.\n # Follows Howard Hinnant's Gregorian calendar algorithm.\n def self.floor_div(a : Int64, b : Int64) : Int64\n def self.floor_mod(a : Int64, b : Int64) : Int64\n def self.from_unix(seconds : Int64, nanoseconds : Int32 = 0) : Time\n def self.from_unix_ms(milliseconds : Int64) : Time\n # Hashing follows `==`, as `Span`'s does. Without it every time hashed to its\n # type: `Time.unix(1).hash == Time.unix(1000000, 5).hash`, and a table of\n # 16,000 times took 1.2 s to fill where the same pairs as tuples took 1 ms.\n def hash : Int32\n def hour : Int32\n # The same instant read in *location*: `Time.utc(2024, 7, 1, 12).in(berlin)`\n # is 14:00 CEST.\n def in(location : Location) : Time\n def initialize(seconds : Int64, nanoseconds : Int32 = 0, location : Location = Location::UTC)\n # As the other library writes it: the date and time, the nanoseconds\n # when there are any, and `Z`. There was no `inspect`, so it was `to_s`,\n # and `Time.utc(2024, 1, 1, 0, 0, 0, nanosecond: 5)` inspected as\n # `2024-01-01 00:00:00 UTC`, the same as `Time.utc(2024, 1, 1)`, which\n # `==` tells apart from it. Out of UTC the offset follows, and the\n # location's name when it is more than an offset:\n # `2016-02-15 11:20:30 +01:00 Europe/Berlin`.\n def inspect : String\n # The ISO 8601 week-numbering year and week of a date, from its year, day\n # of the month, day of the year and day of the week (Monday is 1). This is\n # Crystal's computation: the week is the count of Mondays up to the day,\n # and the first days of January or the last of December can belong to a\n # week of the year next to it. The year is an Int64 because the first days\n # of the smallest Int32 year belong to the year before it.\n def self.iso_week(year : Int64, day : Int32, day_of_year : Int32, day_of_week : Int32) : ::Tuple(Int64, Int32)\n def self.leap_year?(year : Int32) : Bool\n # The time a clock in *location* shows as the date and time given, the\n # machine's own zone when none is. Its fields are checked as `utc` checks\n # them. A wall time a change of offset repeats, the hour after summer\n # ends, is the earlier of the two; one a change skips, the hour summer\n # begins with, is read past the gap (see `Location#resolve`).\n def self.local(year : Int32, month : Int32, day : Int32, hour : Int32 = 0, minute : Int32 = 0, second : Int32 = 0, millisecond : Int32 = 0, nanosecond : Int32 = 0, location : Location = Location.local) : Time\n # Now, read in *location*.\n def self.local(location : Location) : Time\n # Now, in the machine's own zone (`Location.local`).\n def self.local : Time\n def local? : Bool\n # The zone the date and clock are read in, and its offset from UTC at\n # this instant in seconds east. `==`, `<=>` and `hash` are the instant's\n # and do not look at either: noon in London and 13:00 in Paris are the\n # same time.\n def location : Location\n def millisecond : Int32\n def milliseconds : Int32\n def minute : Int32\n def self.monotonic : Span\n def self.monotonic_nanoseconds : UInt64\n def month : Int32\n def nanosecond : Int32\n def nanoseconds : Int32\n def self.new(year : Int32, month : Int32, day : Int32, hour : Int32 = 0, minute : Int32 = 0, second : Int32 = 0, millisecond : Int32 = 0, nanosecond : Int32 = 0) : Time\n def offset : Int32\n def self.pad2(n : Int32) : String\n def self.pad3(n : Int32) : String\n # Four digits, and a negative year keeps its sign in front of them rather\n # than inside: written as `n < 10 ? \"000\" + n.to_s`, year -1 printed\n # `000-1-01-01`, which is neither a year nor a date. ISO 8601 spells it\n # `-0001`, and the conversions themselves were right all along - the epoch\n # round-trips through it.\n def self.pad4(n : Int32) : String\n def self.pad6(n : Int32) : String\n def self.pad9(n : Int32) : String\n # Reads *string* by *pattern*'s directives (see `Time::Format`). A text\n # that names no zone is read at *offset* seconds east of UTC, as Crystal's\n # `Time.parse` reads one at the location it is given.\n def self.parse(string : String, pattern : String, offset : Int32) : Time | TimeParseError\n # Reads *string* by *pattern* in *location*: a text that names no zone is\n # the wall clock there, its offset the one the location kept at that date\n # (a wall time a change repeats or skips is read as `Time.local` reads\n # it), and the time answered is in *location* whether the text named a\n # zone or not.\n def self.parse(string : String, pattern : String, location : Location) : Time | TimeParseError\n def self.parse_iso8601(string : String) : Time | TimeParseError\n # `parse` in the machine's own zone.\n def self.parse_local(string : String, pattern : String) : Time | TimeParseError\n # Any of RFC 9110's three HTTP date forms; see `Time::Format::HTTP_DATE`.\n def self.parse_rfc1123(string : String) : Time | TimeParseError\n def self.parse_rfc2822(string : String) : Time | TimeParseError\n # Parses an RFC 3339 / ISO 8601 string into a UTC Time, and panics with the\n # parser's sentence when it is not one. Handles forms like:\n # 2024-02-29T12:30:45Z\n # 2024-02-29T12:30:45.123Z\n # 2024-02-29T12:30:45.123456789Z\n # 2024-02-29 12:30:45Z\n # 2024-02-29T12:30:45+05:00\n # 2024-02-29T12:30:45-08:00\n # -0001-01-01T00:00:00Z and 12345-06-07T08:09:10Z, as `to_rfc3339` writes them\n # `Time::Format::RFC_3339.parse` reads the same grammar and answers a\n # `TimeParseError` instead, for text the program did not write itself.\n def self.parse_rfc3339(str : String) : Time\n # `parse` at UTC when the text names no zone.\n def self.parse_utc(string : String, pattern : String) : Time | TimeParseError\n def second : Int32\n def seconds : Int64\n # Moves the date by calendar years and months, then by weeks and days,\n # then by the smaller units, in that order, as Crystal's `shift` does. A\n # day the month does not have becomes its last: `Time.utc(2024, 1,\n # 31).shift(months: 1)` is 2024-02-29. The date moves on the wall clock\n # of the time's location, so the time of day is kept across a change of\n # offset - a day after 12:00 on the Saturday summer begins is 12:00 on\n # Sunday, 23 hours later - and the hours, minutes, seconds and\n # nanoseconds are exact. A year past an Int32 is refused with the\n # constructor's sentence, and a span the Int64 seconds do not hold with\n # `Span`'s.\n def shift(*, years : Int32 = 0, months : Int32 = 0, weeks : Int64 = 0_i64, days : Int64 = 0_i64, hours : Int64 = 0_i64, minutes : Int64 = 0_i64, seconds : Int64 = 0_i64, nanoseconds : Int64 = 0_i64) : Time\n def to_local : Time\n # RFC 1123's date as HTTP writes it, RFC 9110's IMF-fixdate, always in GMT:\n # `Sun, 06 Nov 1994 08:49:37 GMT`.\n def to_rfc1123 : String\n # RFC 2822's date, `Mon, 15 Feb 2016 04:35:50 +0000`, at *offset*, or at\n # the time's own offset when none is given.\n def to_rfc2822(offset : Int32 | ::Nil = nil) : String\n # RFC 3339 at the time's own offset: `Z` at UTC, `+02:00` in CEST. An\n # offset RFC 3339 cannot write, one with seconds in it as local mean time\n # before standard time had, is written as the same instant in UTC.\n def to_rfc3339(fraction_digits : Int32 = 0) : String\n # The instant written as it reads at *offset* seconds east of UTC:\n # `to_s(\"%F %T %:z\", 19800)` is the wall clock in India.\n def to_s(format : String, offset : Int32) : String\n # The time written by *format*'s directives (see `Time::Format`) as its\n # own location reads it; `%Z` is the zone's abbreviation, `CEST`.\n def to_s(format : String) : String\n # `2016-02-15 10:20:30 UTC`, and in any other location the offset in\n # place of `UTC`: `2016-02-15 11:20:30 +01:00`.\n def to_s : String\n def to_unix : Int64\n def to_unix_f : Float64\n # Refused with the module's sentence past the milliseconds an Int64\n # holds, some 292 million years either side of 1970, where the multiply\n # was the prelude's bare \"arithmetic overflow\" for a year `Time.utc`\n # accepts, 300,000,000. Both edges answer to the last millisecond that\n # fits: the lowest 808 an Int64 holds were refused, so\n # `Time.unix_ms(Int64::MIN).to_unix_ms` panicked. A negative second is\n # taken one up and its milliseconds from 1000 down, so the product fits\n # too.\n def to_unix_ms : Int64\n def to_utc : Time\n def self.unix(seconds : Int64, nanoseconds : Int32 = 0) : Time\n def self.unix_ms(milliseconds : Int64) : Time\n def self.utc(year : Int32, month : Int32, day : Int32, hour : Int32 = 0, minute : Int32 = 0, second : Int32 = 0, millisecond : Int32 = 0, nanosecond : Int32 = 0) : Time\n def self.utc : Time\n def utc? : Bool\n # Both through the runtime's clock (`IyiClock`), the vDSO with the\n # syscall behind it.\n def self.wall_clock_nanoseconds : UInt64\n # The instant of a day of an ISO 8601 week, as Crystal's `week_date` makes\n # it: `Time.week_date(2016, 1, 1)` is Monday 2016-01-04. A week the year\n # does not have and a day past Sunday are refused, where the other library answered\n # a day of some other week.\n def self.week_date(year : Int32, week : Int32, day_of_week : Int32, hour : Int32 = 0, minute : Int32 = 0, second : Int32 = 0, nanosecond : Int32 = 0) : Time\n # Days since 1970-01-01 of a day of an ISO 8601 week. Week 1 is the week\n # holding January 4th, so its Monday is the Monday on or before that day.\n def self.week_date_days(year : Int32, week : Int32, day_of_week : Int32) : Int64\n # A year has 53 ISO 8601 weeks when it starts on a Thursday, or on a\n # Wednesday in a leap year: either way it has 53 Thursdays, and a week\n # belongs to the year that holds its Thursday.\n def self.weeks_in_year(year : Int32) : Int32\n def year : Int32\n # The zone this instant is in at its location: its abbreviation, offset\n # and whether it is summer time.\n def zone : Location::Zone\nend\n\n# What `Time::Format#parse` and the named parsers answer when the text is not\n# a time the pattern describes. Bad input is the caller's to handle, not a\n# panic: a header or a log line from somewhere else is not a bug in the\n# program reading it. `message` is the sentence, naming the byte the parser\n# stood at and the text; `position` is that byte, counted from 0.\npub struct TimeParseError\n def initialize(message : String, input : String, position : Int32)\n def input : String\n def position : Int32\n def to_s : String\nend\n\nimpl Error for TimeParseError\n def message : String\nend\n\nimpl Std::Traits::Comparable for Span\n def <=>(other : self) : Int32\nend\n\nimpl Error for LocationError\n def message : String\nend\n\nimpl Std::Traits::Comparable for Time\n def <=>(other : self) : Int32\nend\n" }, { "name": "std/tls", "path": "src/std/tls.iyi", - "sourceSha256": "6e485b1800591b3613e9bcb9b494f71ae0dbe9ecbeceafcc509475da662f98a2", + "sourceSha256": "d474c4c3462c72d5d68c240060f06f3979f99fad8e125ab880909924bd93b83d", "surface": "module std/tls\n\n# The alerts of RFC 8446 section 6, by the code each is sent as.\npub struct TlsAlert\n def initialize\nend\n\n# A connection to a server, its handshake done.\npub class TlsClient < TlsConnection\n # A CertificateStatus's body (RFC 6066 section 8): status_type ocsp (1),\n # then the OCSPResponse's DER, which is not empty.\n def self.certificate_status(data : Array(UInt8)) : Array(UInt8) | TlsError\n # A connection to *host* on *port*, its handshake done and the server's\n # certificate checked for *host* - or, with a *session* that holds a\n # ticket for *host* and *port* under *config* (`TlsSession` says which\n # fit), resumed, and the tickets the server sends kept there.\n # *early_data* goes with the ClientHello (0-RTT, RFC 8446 section 2.3)\n # when the ticket taken allows that much, and after the handshake when it\n # did not, or the server refused it - unless the server then chose\n # another protocol by ALPN than the ticket's, which section 4.2.10 says\n # it must not be resent for; `early_data` says which. Early data can be\n # replayed by whoever sees it (section 8): send nothing early that is not\n # safe to run twice.\n def self.connect(host : String, port : Int32, config : TlsConfig = TlsConfig.new, timeout_ms : Int32 = -1, session : TlsSession | ::Nil = nil, early_data : String | Array(UInt8) | Nil = nil) : TlsClient | TlsError\n protected def early_bytes=(bytes : Array(UInt8) | ::Nil) : Array(UInt8) | ::Nil\n # What became of the early data given to `connect` or `over`.\n def early_data : TlsEarlyData\n def handshake : TlsError | ::Nil\n def initialize(socket : IyiSocket, host : String, config : TlsConfig, session : TlsSession | ::Nil = nil)\n # The handshake over a connected *socket*, for *host*, done within\n # *timeout_ms* (none when 0); *session* and *early_data* as for\n # `connect`.\n def self.over(socket : IyiSocket, host : String, config : TlsConfig = TlsConfig.new, timeout_ms : Int32 = HANDSHAKE_TIMEOUT_MS, session : TlsSession | ::Nil = nil, early_data : String | Array(UInt8) | Nil = nil) : TlsClient | TlsError\n # *host* in the form RFC 6066 section 3 gives server_name: \"the\n # fully qualified DNS hostname\", ASCII, \"without a trailing dot\" - a\n # final dot dropped and a name in Unicode written as its A-labels by\n # IDNA, which is also the form `X509` matches a certificate's names in.\n # Before, `bücher.example.` went out as its UTF-8 bytes and its dot, and\n # a server that holds names to the RFC refused it (OpenSSL's s_server\n # with `-servername_fatal`: alert unrecognized_name). An ASCII name keeps\n # its case, as DNS ignores it. A name IDNA refuses, or nothing but a dot,\n # is an error before anything is sent.\n def self.server_name_for(host : String) : String | TlsError\n def server_side? : Bool\nend\n\n# What a connection is checked against and offers.\npub class TlsConfig\n # Protocols offered by ALPN (RFC 7301), most wanted first: `[\"h2\",\n # \"http/1.1\"]`. None offered when empty.\n def alpn : Array(String)\n # Protocols offered by ALPN (RFC 7301), most wanted first: `[\"h2\",\n # \"http/1.1\"]`. None offered when empty.\n def alpn=(value : Array(String)) : Array(String)\n # A new configuration holding what this one holds - the same roots and\n # identity objects, a copy of `alpn` - for a part to be changed in it\n # and not here: std/http's client makes the configuration an HTTPS\n # record's `ech` and protocols ask for so. It is another object, and\n # what was made under this one (`TlsMadeUnder`) is not carried under it.\n def dup : TlsConfig\n # An ECHConfigList (RFC 9849 section 4) - a DNS HTTPS record's `ech`\n # value, or a refusal's `TlsError#retry_configs` - to encrypt the\n # ClientHello under: the name connected to, ALPN and the ticket go in\n # the encrypted ClientHelloInner, and the ClientHelloOuter around it\n # names the config's public_name. The handshake holds only where the\n # server took it; one that did not is refused with ech_required (the\n # module's header). The first ECHConfig whose version, KEM and a suite\n # std/hpke has, and whose public_name is a host name, is taken; one list\n # holding none is refused before anything is sent, as is TLS 1.2 beside\n # it (`min_version`). A config is one server's: none when nil.\n def ech_configs : Array(UInt8) | ::Nil\n # An ECHConfigList (RFC 9849 section 4) - a DNS HTTPS record's `ech`\n # value, or a refusal's `TlsError#retry_configs` - to encrypt the\n # ClientHello under: the name connected to, ALPN and the ticket go in\n # the encrypted ClientHelloInner, and the ClientHelloOuter around it\n # names the config's public_name. The handshake holds only where the\n # server took it; one that did not is refused with ech_required (the\n # module's header). The first ECHConfig whose version, KEM and a suite\n # std/hpke has, and whose public_name is a host name, is taken; one list\n # holding none is refused before anything is sent, as is TLS 1.2 beside\n # it (`min_version`). A config is one server's: none when nil.\n def ech_configs=(value : Array(UInt8) | ::Nil) : Array(UInt8) | ::Nil\n # Whether a ClientHello without `ech_configs` carries a GREASE\n # encrypted_client_hello (RFC 9849 section 6.2): random bytes of an\n # encrypted one's shape, so that one that is real does not stand out.\n # On by default, as Chrome and Firefox send it.\n def ech_grease : Bool\n # Whether a ClientHello without `ech_configs` carries a GREASE\n # encrypted_client_hello (RFC 9849 section 6.2): random bytes of an\n # encrypted one's shape, so that one that is real does not stand out.\n # On by default, as Chrome and Firefox send it.\n def ech_grease=(value : Bool) : Bool\n # The certificate and key sent to a server that asks for one (mutual\n # TLS), when the request names its scheme; none sent when nil.\n def identity : TlsIdentity | ::Nil\n # The certificate and key sent to a server that asks for one (mutual\n # TLS), when the request names its scheme; none sent when nil.\n def identity=(value : TlsIdentity | ::Nil) : TlsIdentity | ::Nil\n def initialize\n # The oldest version spoken. TLS 1.3 by default, and then a server that\n # answers in 1.2 is refused as one that does not speak 1.3; `TLS12`\n # offers 1.2 beside it (see the module's header for what it requires).\n def min_version : TlsVersion\n # The oldest version spoken. TLS 1.3 by default, and then a server that\n # answers in 1.2 is refused as one that does not speak 1.3; `TLS12`\n # offers 1.2 beside it (see the module's header for what it requires).\n def min_version=(value : TlsVersion) : TlsVersion\n # The time certificates are checked at; now when nil.\n def now : Time | ::Nil\n # The time certificates are checked at; now when nil.\n def now=(value : Time | ::Nil) : Time | ::Nil\n # Whether X25519MLKEM768 is offered, its share sent beside X25519's (the\n # module's header has what it costs). On by default, as OpenSSL 3.5,\n # Chrome and Firefox have it; off, the ClientHello offers X25519 and\n # secp256r1 alone.\n def post_quantum : Bool\n # Whether X25519MLKEM768 is offered, its share sent beside X25519's (the\n # module's header has what it costs). On by default, as OpenSSL 3.5,\n # Chrome and Firefox have it; off, the ClientHello offers X25519 and\n # secp256r1 alone.\n def post_quantum=(value : Bool) : Bool\n # Whether a server's certificate must come with a stapled OCSP response\n # (RFC 6066's status_request, asked for by every ClientHello): with it,\n # a server that staples none is refused (bad_certificate_status_response),\n # as one whose certificate carries the TLS Feature extension's\n # status_request (RFC 7633, \"must staple\") always is. Off by default: a\n # staple that comes is checked either way (the module's header).\n def require_staple : Bool\n # Whether a server's certificate must come with a stapled OCSP response\n # (RFC 6066's status_request, asked for by every ClientHello): with it,\n # a server that staples none is refused (bad_certificate_status_response),\n # as one whose certificate carries the TLS Feature extension's\n # status_request (RFC 7633, \"must staple\") always is. Off by default: a\n # staple that comes is checked either way (the module's header).\n def require_staple=(value : Bool) : Bool\n # The roots a server's chain must reach; the system's when nil, read\n # once for the whole process and kept, since reading them is most of a\n # handshake's own cost.\n def roots : Array(Certificate) | ::Nil\n # The roots a server's chain must reach; the system's when nil, read\n # once for the whole process and kept, since reading them is most of a\n # handshake's own cost.\n def roots=(value : Array(Certificate) | ::Nil) : Array(Certificate) | ::Nil\n def trusted_roots : Array(Certificate) | TlsError\nend\n\n# What either end of a connection does once it has keys: records read and\n# written under them, alerts, KeyUpdate, close_notify. `TlsClient` and\n# `TlsServer` are its two ends; each runs its own half of the handshake.\npub abstract class TlsConnection\n # Closes the socket at once: no close_notify, and nothing read past.\n def abort : Nil\n # The protocol chosen by ALPN, if one was.\n def alpn_protocol : String | ::Nil\n def cipher_suite : String\n # The connection ended: `close_write` - close_notify, then the sending\n # half shut - and what the peer still sends read and dropped, until its\n # close_notify or the socket's end, as long as it keeps coming\n # (`DRAIN_GAP_MS`), `DRAIN_MS` and `DRAIN_BYTES` at most; then the\n # socket closed. A socket closed with bytes unread in it is reset rather\n # than ended, and the reset takes from the\n # peer what it had received and not yet read: closed at once on a\n # request body it had not read, an HTTPS server lost its whole answer to\n # Python's http.client in each of 50 runs, and curl the end of it in\n # each of 50 (bench/std_http_exercise.sh, \"a close while the client\n # still sends\"). Nothing is waited for once the peer's close_notify has\n # been read: nothing comes after it. A socket already closed under the\n # connection leaves only the close: no alert, and nothing read. `abort`\n # is the close without any of this.\n def close : Nil\n # RFC 8446 section 6.1's end of this side's writing: close_notify, then\n # the socket's sending half shut (`IyiSocket#close_write`), so the peer\n # reads the alert and then the end of the stream. The reading half\n # stays: `read` goes on answering what the peer sends, until its own\n # close_notify (\"\") or the socket's end. `write` and `key_update` are\n # refused after it, and `close` or `abort` still gives the socket back.\n # TLS 1.2 has no such half: RFC 5246 section 7.2.1 has a peer answer a\n # close_notify with its own and close at once, discarding what it had\n # yet to write, so after this a 1.2 connection reads what was already\n # on its way, then the peer's close_notify. An error when the alert or\n # the shutdown could not be made, or when the socket was already closed\n # under the connection; the connection is still to be closed. A flight\n # still held (`hold`) is a handshake cut short, and is dropped, as\n # `fail` drops it: the close_notify goes alone.\n def close_write : TlsError | ::Nil\n # Whether the connection is over: closed, or its socket closed under\n # it - std/http's server closes the sockets of the connections it waits\n # on when it stops, a connection handed over by an upgrade among them -\n # after which a read or a write answers that it is closed rather than\n # reaching the socket, whose own read and write refuse a closed socket\n # by panicking.\n def closed? : Bool\n # Whether the handshake ran on the ClientHelloInner an encrypted\n # ClientHello carried (RFC 9849): the client's ECH taken - so the name,\n # the protocols and the ticket it asked with went encrypted, and the\n # server read them, not the ClientHelloOuter's.\n def ech_accepted? : Bool\n # *length* bytes bound to this connection, for *label* and *context*\n # (RFC 8446 section 7.5, RFC 5705's interface): the same at both ends and\n # nowhere else - a channel binding, or keys for another protocol riding\n # on this one. No context is the empty one, as TLS 1.3 has it; in TLS\n # 1.2 (RFC 5705 section 4, over the extended master secret) an empty\n # context is none, as OpenSSL's exporter takes it when told of none.\n def export_keying_material(label : String, context : Array(UInt8) = [] of UInt8, length : Int32 = 32) : Array(UInt8)\n # The alert the error names (its last parenthesised word), sent before\n # the socket closes, by either end (RFC 8446 section 6.2): under the keys\n # this side writes with, or in the clear before there are any. None for\n # an alert the peer sent, whose sentence names no alert of this side's.\n # no_renegotiation goes as the warning it always is (RFC 5246 section\n # 7.2.2); every other, fatal.\n # Then either end shuts its sending half, so the peer reads the alert\n # and then the end of the stream, and reads and drops what the peer\n # sent or goes on sending until it closes, `LINGER_BYTES` and\n # `LINGER_MS` at most. A close with bytes unread, or one that bytes\n # still on their way reach, is a reset, and Windows throws away what a\n # reset connection received and had not read, the alert with it: a\n # client refused for its certificate read \"reset\", not why, and the\n # server lost a client's ech_required in 18 and 15 of 20 runs\n # (bench/std_tls_ech_oracle.go). A client closed at once on a server's\n # 0.5-RTT records reset the connection in each of 100 refusals on Linux\n # and on darwin (bench/std_tls_server.py's untrusted-late), where the\n # server still read the alert, even read 300 ms after the reset; shut\n # and lingering, the alert and then the end of the stream in each of\n # 100. A peer that closes once it has the alert ends the linger then -\n # OpenSSL's s_server 0.2 ms after it, on darwin - and one that goes on\n # sending and never closes holds a refusal for the second\n # (untrusted-hold: 1000 to 1001 ms on Linux, 1001 to 1005 on darwin).\n protected def fail(error : TlsError) : TlsError\n def self.group_name(group : Int32) : String\n def initialize(socket : IyiSocket, peer : String, place : String)\n # Records one write key carries before the next (RFC 8446 section 5.5:\n # AES-GCM's is 2^24.5 full records; ChaCha20-Poly1305's far more): past\n # it, the next write moves to new keys first - or, in TLS 1.2, which has\n # no KeyUpdate, is refused, and the connection with it. Settable, for a\n # test.\n def key_limit : UInt64\n # Records one write key carries before the next (RFC 8446 section 5.5:\n # AES-GCM's is 2^24.5 full records; ChaCha20-Poly1305's far more): past\n # it, the next write moves to new keys first - or, in TLS 1.2, which has\n # no KeyUpdate, is refused, and the connection with it. Settable, for a\n # test.\n def key_limit=(value : UInt64) : UInt64\n # Moves this side's writes to new keys (section 4.6.3), asking the peer\n # to move its own when *request*: what `write` does by itself at\n # `key_limit`, for a program that wants it sooner. TLS 1.2 has no\n # KeyUpdate: there it is a `TlsError`, and the connection stays open.\n def key_update(request : Bool = false) : TlsError | ::Nil\n # The milliseconds left of the deadline `within` set, 0 once it has\n # passed; nil when there is none.\n protected def left_ms : Int32 | ::Nil\n # The key exchange group the handshake agreed on: \"X25519MLKEM768\",\n # \"X25519\", \"secp256r1\" or \"secp384r1\". One name for it, the one RFC\n # 8446 gives the field (NamedGroup); `key_exchange`, which the P-384 work\n # first called it, is KeyShareEntry's name for the share's bytes.\n def named_group : String\n # The OCSP response stapled to the server's certificate (RFC 6066, RFC\n # 8446 section 4.4.2.1) and the status it gives - for a client, checked\n # (std/ocsp); for a server, the one it sent. Nil when none was.\n def ocsp_response : OcspResponse | ::Nil\n def ocsp_status : OcspCertStatus | ::Nil\n # The chain the peer's certificate was checked through, leaf first: the\n # server's, for a client; the client's, for a server that asked for one.\n def peer_certificates : Array(Certificate)\n # Up to *max* bytes the peer sent: \"\" once it has closed with\n # close_notify. The socket's read timeout bounds the whole call.\n def read(max : Int32 = 16384) : String | TlsError\n # How long a read or a write of the connection under it may wait.\n def read_timeout_ms=(ms : Int32 | ::Nil) : Int32 | ::Nil\n # Whether the handshake resumed a session (see `TlsSession`).\n def resumed? : Bool\n # Whether this is the server's end.\n abstract def server_side? : Bool\n # The version negotiated: \"TLSv1.3\", or \"TLSv1.2\" where one end asked\n # for it and the other spoke nothing newer.\n def version : String\n # *block* under a deadline *ms* from now (none when 0), cleared after.\n protected def within(ms : Int32, &block : (-> T)) : T forall T\n # Sends *data*, in records of at most 2^14 bytes; answers its size.\n # Refused once `close_write` has sent this side's close_notify, and in\n # TLS 1.2 once the peer's has been read (see `read_now`).\n def write(data : String | Array(UInt8)) : Int32 | TlsError\n def write_timeout_ms=(ms : Int32 | ::Nil) : Int32 | ::Nil\nend\n\n# What became of the early data a client was given (`TlsClient.connect`'s\n# *early_data*).\npub enum TlsEarlyData : Int32\n Unused = 0\n Accepted = 1\n Resent = 2\n Late = 3\n Withheld = 4\nend\n\n# One ECHConfig (RFC 9849 section 4), of version 0xfe0d, as read from an\n# ECHConfigList: what a client encrypts its ClientHello under, and what a\n# server's `TlsEchKey` publishes.\npub class TlsEchConfig\n def config_id : Int32\n # Its extensions (section 4.2), each its type and data.\n def extensions : Array(::Tuple(Int32, Array(UInt8)))\n # The suite a client seals under: the first of `suites` std/hpke has (the\n # export-only AEAD seals nothing), under the config's KEM - or nil for a\n # config this client passes over: a KEM std/hpke does not have, a\n # public_name that is not a host name (section 6.1.7), an extension\n # twice, or a mandatory one - its type's high bit set - which this does\n # not know (section 4.2; none is defined yet).\n def hpke_suite : HpkeSuite | ::Nil\n def initialize(raw : Array(UInt8), config_id : Int32, kem_id : Int32, public_key : Array(UInt8), suites : Array(::Tuple(Int32, Int32)), maximum_name_length : Int32, public_name : String, extensions : Array(::Tuple(Int32, Array(UInt8))))\n def kem_id : Int32\n def maximum_name_length : Int32\n # The ECHConfigs of version 0xfe0d an ECHConfigList holds, in its order -\n # one of another version passed over by its length, as section 4 says -\n # or a decode_error naming what does not read: a list cut short or with\n # bytes after it, an empty one, or a config of this version whose fields\n # break their bounds.\n def self.parse_list(list : Array(UInt8)) : Array(TlsEchConfig) | TlsError\n def public_key : Array(UInt8)\n def public_name : String\n # Whether *name* is a public_name a client takes (section 6.1.7): LDH\n # labels (RFC 5890 section 2.3.1) of 1 to 63 bytes, no hyphen at either\n # end of one, joined by dots, 255 bytes at most - and its last label\n # neither all digits nor \"0x\" and hexadecimal digits, which a URL parser\n # reads as an IPv4 address.\n def self.public_name?(name : String) : Bool\n # The whole ECHConfig - version, length and contents - as it came: what\n # the HPKE info is made of (section 6.1), and a list of them.\n def raw : Array(UInt8)\n # `parse_list`'s answer, its refusal a sentence.\n def self.read_list(list : Array(UInt8)) : Array(TlsEchConfig) | String\n # The HPKE KDF and AEAD a client may seal under, by their code points.\n def suites : Array(::Tuple(Int32, Int32))\nend\n\n# An ECH key a server holds (RFC 9849 section 7.1): an ECHConfig and the\n# HPKE private key for the public key in it. `TlsServerConfig#ech_keys`\n# holds several: the current one and the ones before it that clients may\n# still hold from DNS, each with a config_id of its own (section 4.1), so\n# that a ClientHello names the one to open it with.\npub class TlsEchKey\n def config : TlsEchConfig\n # The ECHConfigList of *keys*' configs, in their order: what a DNS HTTPS\n # record's `ech` carries (RFC 9848), and a client's `ech_configs`.\n def self.config_list(keys : Array(TlsEchKey)) : Array(UInt8)\n # The key a server kept as its `config.raw` and `private_key.bytes`: one\n # ECHConfig, not a list, of version 0xfe0d and a KEM std/hpke has, that\n # a client may use; and the KEM's private key (RFC 9180 section 7.1.2)\n # for the public key in it - or why not.\n def self.from_bytes(config : Array(UInt8), private_key : Array(UInt8)) : TlsEchKey | TlsError\n # A new key and its ECHConfig: *public_name* the name the server\n # answers for in the clear and has a certificate for (section 6.1.7\n # holds it to a host name); *config_id* random unless given - one the\n # server's other keys do not have (section 4.1); the KEM's key pair from\n # `Random::Secure`; the KDF and AEAD pairs a client may choose among, in\n # the server's order - HKDF-SHA256 with AES-128-GCM, then with\n # ChaCha20-Poly1305, unless given; and *maximum_name_length*, the\n # longest name it serves, which clients pad the name they ask for to\n # (section 6.1.3; 0 when not known). Its `config.raw` and\n # `private_key.bytes` are what `from_bytes` reads back.\n def self.generate(public_name : String, config_id : Int32 | ::Nil = nil, kem : HpkeKem = HpkeKem::X25519Sha256, suites : Array(::Tuple(HpkeKdf, HpkeAead)) = [{HpkeKdf::HkdfSha256, HpkeAead::Aes128Gcm}, {HpkeKdf::HkdfSha256, HpkeAead::ChaCha20Poly1305}], maximum_name_length : Int32 = 0) : TlsEchKey | TlsError\n def initialize(config : TlsEchConfig, private_key : HpkePrivateKey)\n def private_key : HpkePrivateKey\n # Whether the config goes in retry_configs, to a client whose encrypted\n # ClientHello this server turns down (section 7.1): true unless set; a\n # key kept only to open what holders of its old config still send is\n # set false, so that no client is told to retry with it.\n def retry : Bool\n # Whether the config goes in retry_configs, to a client whose encrypted\n # ClientHello this server turns down (section 7.1): true unless set; a\n # key kept only to open what holders of its old config still send is\n # set false, so that no client is told to retry with it.\n def retry=(value : Bool) : Bool\nend\n\n# What a connection answers when it cannot be made or kept, or a read that\n# came back with nothing yet.\npub struct TlsError\n # The alert this refusal sends the peer (`TlsAlert`), or nil: none for a\n # failure of the socket, or for an alert the peer sent.\n def alert : UInt8 | ::Nil\n def cancelled? : Bool\n # *message*, the alert's name after it when there is one: the sentence\n # shows the alert, and the alert is the field, not the sentence.\n def initialize(message : String, alert : UInt8 | ::Nil = nil, timed_out : Bool = false, cancelled : Bool = false, retry_configs : Array(UInt8) | ::Nil = nil)\n # The ECHConfigList a server that turned down this client's encrypted\n # ClientHello sent to retry with (RFC 9849 section 6.1.6), once its\n # certificate was checked for the config's public_name: on an\n # ech_required refusal, and nil on any other - and on an ech_required\n # refusal whose server sent none, which turned ECH off for it.\n def retry_configs : Array(UInt8) | ::Nil\n # A read that waited past its timeout, or that was cancelled: nothing was\n # lost and the connection is open - read again. Any other error ended it.\n def timed_out? : Bool\n def to_s : String\nend\n\n# A `TlsServerConfig` frozen (`TlsServerConfig#frozen`): what a server\n# whose connections run on several threads at once - std/http's\n# `Server.serve(tls:)` - reads on every worker. It is `Share`\n# (SPEC.md III.4.4), trusted rather than derived, and this is why it may\n# be. It holds a copy of the config it was made from (`dup`), which\n# nothing else holds and nothing writes after the constructor made it:\n# no method here assigns it or calls a setter on it, and it leaves only\n# for the `TlsServer` a handshake runs (`server`), which reads it and\n# has no getter for it. What the copy holds is `Share` itself or read\n# alone: its identities are `Share`, its ECH keys copied with it, its\n# arrays its own; the ticket keys and the replay guard it shares with\n# the config it was made from are `Share` by their fields, a `Mutex`\n# each, so a ticket one worker seals another opens and a replay one\n# refuses all refuse. Its identity source is a `SharedProc`, whose\n# block the compiler checked where it was written. The readers below\n# answer copies, a `List` or a new array, never the copy's own. What\n# changes while a server runs: an OCSP staple, through `staple`; the\n# ticket key, as it turns over; and whatever the identity source\n# answers, a certificate renewed (std/autocert). The rest - the\n# identities, the protocols, the ECH keys - is the server's for its\n# life: another set is another frozen config, served by another\n# `Server.serve`.\npub class TlsFrozenServerConfig\n def alpn : List(String)\n # `TlsServerConfig#ech_config_list`'s, of the keys frozen with it.\n def ech_config_list : Array(UInt8) | ::Nil\n def identity : TlsIdentity\n # *config* copied, its `identity_source` replaced by *source*. A config\n # with an `identity_source` and no *source* is refused by panicking, as\n # `TlsServerConfig#frozen` says.\n def initialize(config : TlsServerConfig, source : SharedProc(::Tuple(String | ::Nil, Array(String) | ::Nil, Int32 | ::Nil), TlsIdentity | TlsError | Nil) | ::Nil)\n def others : List(TlsIdentity)\n def replay_guard : TlsReplayGuard\n # The server's half of a connection on *socket* under this config, for\n # `TlsServer.over` to run the handshake of.\n def server(socket : IyiSocket) : TlsServer\n # *der* stapled for *identity*, as `TlsServerConfig#staple` does, from\n # any thread: the handshakes after it, on every worker, staple it.\n def staple(der : Array(UInt8), identity : TlsIdentity = @settings.identity) : TlsError | ::Nil\n def ticket_keys : TlsTicketKeys\nend\n\n# One ticket a client holds: the server's bytes, and the PSK, suite,\n# arrival (monotonic ms), lifetime, age_add, host, port, configuration,\n# protocol and certificates of the connection it came on, when the full\n# handshake that checked those certificates was made (monotonic ms; a\n# resumption's tickets carry the first one's), and the most early data it\n# allows (0 for none).\npub class TlsHeldTicket\n def age_add : Int64\n def alpn : String | ::Nil\n def authenticated_ms : Int64\n def host : String\n def initialize(ticket : Array(UInt8), psk : Array(UInt8), suite : Int32, received_ms : Int64, lifetime_ms : Int64, age_add : Int64, host : String, port : Int32, under : TlsMadeUnder, alpn : String | ::Nil, peer_certificates : Array(Certificate), authenticated_ms : Int64, max_early_data : Int64 = 0_i64)\n def lifetime_ms : Int64\n def max_early_data : Int64\n def peer_certificates : Array(Certificate)\n def port : Int32\n def psk : Array(UInt8)\n def received_ms : Int64\n def suite : Int32\n def ticket : Array(UInt8)\n def under : TlsMadeUnder\nend\n\n# A certificate chain, leaf first, and the key that signs for it -\n# Ed25519, ECDSA on P-256 or P-384 (std/p256, std/p384) or RSA (std/rsa),\n# each in constant time: what a server presents, and what a client\n# presents when a server asks.\n#\n# `Share` (SPEC.md III.4.4), trusted rather than derived: a server's\n# workers sign with one identity at once, and an `identity_source` that\n# runs on every worker answers identities it keeps. What the structural\n# rule cannot see is that nothing writes one after it is made: no method\n# here assigns a field, and none of std/x509's `Certificate`, std/p256's,\n# std/p384's and std/rsa's private keys does - a signature is computed\n# into new values, nothing is cached on the key - so what fails the rule\n# is only that the chain and the certificate are held in `Array`s. The\n# constructor copies the arrays it is given, so a caller that keeps them\n# writes its own. The one part that changes while a server runs, the OCSP\n# response it staples, is behind a `Mutex` (`staple`), which every\n# worker reads through. The edge is the one `List` closes by never\n# lending its array and this cannot: `chain`, `schemes` and the leaf's\n# fields are lent as arrays, read by every method of std, and a program\n# that writes into one writes what other threads read.\npub class TlsIdentity\n # The ClientCertificateType a TLS 1.2 CertificateRequest must list for\n # this key: rsa_sign (1), or ecdsa_sign (64) for P-256, P-384 and, by RFC\n # 8422 section 5.5, Ed25519.\n def certificate_type : UInt8\n # The chain as sent, leaf first, each certificate's DER.\n def chain : Array(Array(UInt8))\n # *chain*'s certificates, leaf first, and the 32-byte Ed25519 *seed*\n # that is the leaf's private key.\n def self.from_der(chain : Array(Array(UInt8)), seed : Array(UInt8)) : TlsIdentity | TlsError\n # *chain*'s certificates, leaf first, and the P-256 *key* that is the\n # leaf's.\n def self.from_der(chain : Array(Array(UInt8)), key : P256PrivateKey) : TlsIdentity | TlsError\n # *chain*'s certificates, leaf first, and the P-384 *key* that is the\n # leaf's.\n def self.from_der(chain : Array(Array(UInt8)), key : P384PrivateKey) : TlsIdentity | TlsError\n # *chain*'s certificates, leaf first, and the RSA *key* that is the\n # leaf's (2048 bits or more, std/rsa's floor for signing).\n def self.from_der(chain : Array(Array(UInt8)), key : RsaPrivateKey) : TlsIdentity | TlsError\n # The chain in *certificates*' CERTIFICATE blocks, leaf first, and the\n # leaf's private key in *private_key*: a PRIVATE KEY block (PKCS #8, an\n # Ed25519 key as RFC 8410 section 7 writes it, a P-256 or P-384 one as\n # RFC 5915 does, or an RSA one), an EC PRIVATE KEY block (SEC 1) or an\n # RSA PRIVATE KEY block (PKCS #1) - or why they are not a certificate\n # and key.\n def self.from_pem(certificates : String, private_key : String) : TlsIdentity | TlsError\n def initialize(chain : Array(Array(UInt8)), leaf : Certificate, schemes : Array(Int32), seed : Array(UInt8) | ::Nil, p256 : P256PrivateKey | ::Nil, p384 : P384PrivateKey | ::Nil, rsa : RsaPrivateKey | ::Nil)\n def leaf : Certificate\n # The OCSP response kept for this chain (`staple`), its DER; nil when\n # none is.\n def ocsp_staple : Array(UInt8) | ::Nil\n # Whether the key is RSA's: a TLS 1.2 server's ECDHE_RSA suites, and not\n # ECDHE_ECDSA's.\n def rsa? : Bool\n # The scheme a TLS 1.2 ServerKeyExchange is signed under for a client\n # that takes *offered*: `scheme_for`'s - for an RSA key, RSA-PSS by the\n # client's order - and for an RSA key whose client takes no RSA-PSS,\n # PKCS #1 v1.5 by its order, which 1.2 permits and which the clients that\n # never moved past it may take alone; nil when the key makes none.\n def scheme12_for(offered : Array(Int32)) : Int32 | ::Nil\n # The scheme to sign under for a peer that takes *offered* (its\n # signature_algorithms, in its order): the first of them this key makes,\n # or nil when it makes none.\n def scheme_for(offered : Array(Int32)) : Int32 | ::Nil\n # A scheme by the name RFC 8446 gives it.\n def self.scheme_name(scheme : Int32) : String\n # Schemes by name, for a sentence: \"a, b or c\".\n def self.scheme_names(schemes : Array(Int32)) : String\n # The schemes CertificateVerify can be signed under, by the key's kind:\n # ed25519 (0x0807), ecdsa_secp256r1_sha256 (0x0403),\n # ecdsa_secp384r1_sha384 (0x0503), or for an RSA key rsa_pss_rsae_sha256,\n # -384 and -512 (0x0804 to 0x0806). PKCS #1 v1.5 is never one: RFC 8446\n # section 4.2.3 keeps it out of CertificateVerify.\n def schemes : Array(Int32)\n # The leaf key's signature of *content* under *scheme*, one of\n # `schemes` - or for an RSA key in TLS 1.2, PKCS #1 v1.5's: what\n # CertificateVerify and a ServerKeyExchange carry.\n def sign(scheme : Int32, content : Array(UInt8)) : Array(UInt8)\n # *der* kept as this chain's OCSP response, to be stapled for a client\n # that asks: refused unless it is an OCSPResponse std/ocsp reads, with a\n # SingleResponse for the leaf - its serial number and its issuer name's\n # hash. Its signature and times are the client's to check; this server\n # only leaves one past its nextUpdate unsent. A later call replaces it,\n # from any thread, and a handshake on any worker staples the one held\n # when it asks.\n def staple(der : Array(UInt8)) : TlsError | ::Nil\n # The response to staple at *now*, with what it says; nil when there is\n # none, or it is past its nextUpdate.\n def staple_at(now : Time) : ::Tuple(Array(UInt8), OcspResponse, OcspSingleResponse) | ::Nil\nend\n\n# The key schedule of one connection (RFC 8446 section 7.1), over the\n# cipher suite's hash: SHA-384 for TLS_AES_256_GCM_SHA384, SHA-256 for the\n# other two.\npub class TlsKeySchedule\n # A PSK binder (section 4.2.11.2): a Finished keyed by the resumption's\n # binder key, over *transcript* - the messages before the ClientHello and\n # the ClientHello up to its binders.\n def binder(psk : Array(UInt8), transcript : Array(UInt8)) : Array(UInt8)\n # Derive-Secret over the messages so far.\n def derive_secret(secret : Array(UInt8), label : String, transcript : Array(UInt8)) : Array(UInt8)\n # The early secret of a resumption, from its PSK.\n def early_secret(psk : Array(UInt8)) : Array(UInt8)\n # The early secret with no PSK, and the \"derived\" salt for the next stage.\n def early_secret : Array(UInt8)\n # The client's early traffic secret (section 7.1), over the ClientHello\n # alone: what 0-RTT data and EndOfEarlyData go under.\n def early_traffic(psk : Array(UInt8), hello : Array(UInt8)) : Array(UInt8)\n # HKDF-Expand-Label: the label prefixed \"tls13 \", and the context, in an\n # HkdfLabel.\n def expand_label(secret : Array(UInt8), label : String, context : Array(UInt8), length : Int32) : Array(UInt8)\n def extract(salt : Array(UInt8), ikm : Array(UInt8)) : Array(UInt8)\n # A Finished message's verify_data under *secret* (section 4.4.4).\n def finished(secret : Array(UInt8), transcript : Array(UInt8)) : Array(UInt8)\n # The handshake secret over the key exchange's *shared* secret, and over\n # *psk* in a resumption.\n def handshake_secret(shared : Array(UInt8), psk : Array(UInt8) | ::Nil = nil) : Array(UInt8)\n def hash(data : Array(UInt8)) : Array(UInt8)\n def hash_size : Int32\n def hmac(key : Array(UInt8), data : Array(UInt8)) : Array(UInt8)\n def initialize(sha384 : Bool)\n def master_secret(handshake_secret : Array(UInt8)) : Array(UInt8)\n # The next generation of a traffic secret (section 7.2).\n def next_secret(secret : Array(UInt8)) : Array(UInt8)\n # TLS 1.2's PRF (RFC 5246 section 5): P_hash over this schedule's hash -\n # SHA-256, or SHA-384 for a suite that names it - keyed by *secret*, over\n # *label* and *seed*, *length* bytes of it.\n def prf(secret : Array(UInt8), label : String, seed : Array(UInt8), length : Int32) : Array(UInt8)\n # The PSK a NewSessionTicket's *nonce* makes of the resumption master\n # secret (section 4.6.1): one ticket's, and no other's.\n def resumption_psk(secret : Array(UInt8), nonce : Array(UInt8)) : Array(UInt8)\n def zeros : Array(UInt8)\nend\n\n# The `TlsConfig` a client connection was made under, and the parts of it\n# that decide whom the connection trusts, what it presented and whether\n# it named its server in the clear: the roots, the identity, the time\n# certificates were checked at, the oldest version spoken, whether an\n# OCSP staple was required, and the ECHConfigList it was encrypted under.\n# Whatever was made under it - a `TlsSession`'s ticket, std/http's kept\n# connection - is used again only under a configuration that is the same\n# object holding the same ones, so what one trust store, identity or\n# staple rule checked is never carried under another: set by assigning a\n# new configuration, or by assigning `roots`, `identity`, `now`,\n# `min_version`, `require_staple` or `ech_configs` on it in place. Objects\n# are told apart by `object_id`, and the references are held, so an\n# address freed and handed to a new configuration is never taken for the\n# old one. Certificates added to the same roots array in place are not\n# seen: such an array is still the same object. `ech_configs` is held to\n# its bytes, kept as they were: a connection made in the clear is not\n# handed a request made under a configuration that asks for ECH, nor its\n# ticket offered inside one, and a ticket that came inside one is not\n# offered in a ClientHello that names the server in the clear, where it\n# would tie the two connections together for anyone watching (RFC 9849\n# section 6.1.8 keeps ECH state to the source it came from). One\n# definition serves std/tls and std/http, so the two cannot come to\n# compare different parts.\npub class TlsMadeUnder\n def initialize(config : TlsConfig)\n def same?(config : TlsConfig) : Bool\nend\n\n# One direction's record protection (section 5.2): the AEAD keyed from a\n# traffic secret, and the record sequence number its nonces are made of -\n# or TLS 1.2's, keyed from its key block.\npub class TlsRecordCipher\n # TLS_AES_128_GCM_SHA256, TLS_AES_256_GCM_SHA384, TLS_CHACHA20_POLY1305_SHA256.\n def initialize(suite : Int32, schedule : TlsKeySchedule, secret : Array(UInt8))\n # TLS 1.2's (RFC 5246 section 6.2.3.3) for one of its AEAD suites, *key*\n # and *iv* from the key block: AES-GCM's four-byte salt, to which each\n # record's eight-byte explicit nonce is added (RFC 5288 section 3), or\n # ChaCha20-Poly1305's twelve bytes, XORed with the sequence number as TLS\n # 1.3 does it (RFC 7905 section 2).\n def initialize(suite : Int32, key : Array(UInt8), iv : Array(UInt8))\n def key_iv : Array(UInt8)\n # The type and content of a protected record whose 5-byte header is\n # *header* and body *body*.\n def open(header : Array(UInt8), body : Array(UInt8)) : ::Tuple(UInt8, Array(UInt8)) | TlsError\n # The whole record that carries *content* of *type*, protected.\n def seal(type : UInt8, content : Array(UInt8)) : Array(UInt8)\n def sequence : UInt64\nend\n\n# What keeps a server from taking the same early data twice (RFC 8446\n# sections 8.2 and 8.3). A ClientHello's early data is taken only if it is\n# fresh - the ticket age the client gives is within `WINDOW_MS` of the\n# time this server counts since it issued the ticket - and only once:\n# each ClientHello whose early data is taken is recorded by its PSK\n# binder, which nobody without the ticket's PSK can make for another\n# ClientHello, and a ClientHello whose binder is recorded has its early\n# data refused (its handshake goes on, the data then sent after it). A\n# replay that is still fresh comes within two windows of its original, so\n# a binder is held that long and then dropped; with `capacity` held, early\n# data is refused until some are - the guard fails closed. A refusal costs\n# the client a round trip, never its request.\n#\n# What it does not do. It holds in this process, as the ticket keys do, so\n# a ticket - and the early data under it - is taken by no other server\n# and by no later run of this one; servers that shared ticket keys would\n# need to share this too, and neither is offered. It cannot stop a client\n# from sending the same request again after a connection whose early data\n# was taken broke before the answer came (appendix E.5), so what comes\n# early must be safe to run twice; and taking early data at all lets\n# whoever recorded the ClientHello replay it within the window to a server\n# that has not seen it - none, here.\n#\n# The binders are behind a `Mutex`, as the ticket keys are, so every\n# worker of a `TlsFrozenServerConfig`'s server records into one guard and\n# a replay sent to another worker is refused there too.\npub class TlsReplayGuard\n # Whether early data may be taken, at *now_ms* (monotonic), for a\n # ClientHello whose PSK binder is *binder*: not one held already, and not\n # past `capacity`. It is recorded when it may; a task cancelled while it\n # waits for the guard is refused.\n def admit(binder : Array(UInt8), now_ms : Int64) : Bool\n def capacity : Int32\n # Whether a ticket age the client gives, *client_ms*, and this server's\n # count since it issued the ticket, *server_ms*, are within the window.\n def self.fresh?(client_ms : Int64, server_ms : Int64) : Bool\n def initialize(capacity : Int32 = 65536)\n # How many binders are held.\n def size : Int32\nend\n\n# A connection from a client, its handshake done: TLS 1.3 as a server -\n# or 1.2, when its config's `min_version` asks and the client speaks\n# nothing newer - its certificate's key (Ed25519, P-256, P-384 or RSA)\n# signing for it.\npub class TlsServer < TlsConnection\n # Whether the client's early data was taken (0-RTT): `read_early` reads\n # it, and `read` never does.\n def early_data? : Bool\n # The rest of a handshake whose early data was taken: the early data not\n # yet read, kept for `read_early`, then EndOfEarlyData and the client's\n # Finished. Nil once the handshake is done, at once when nothing was\n # early. `read` calls it first; a server that answers early data before\n # the client's Finished calls it before it closes.\n def finish : TlsError | ::Nil\n # The handshake, or why it failed - the client sent that alert first.\n def handshake : TlsError | ::Nil\n # The certificate and key this connection was shown under: the config's\n # `identity`, or one of its `others` the client asked for by name.\n def identity : TlsIdentity\n def initialize(socket : IyiSocket, config : TlsServerConfig, shared_source : SharedProc(::Tuple(String | ::Nil, Array(String) | ::Nil, Int32 | ::Nil), TlsIdentity | TlsError | Nil) | ::Nil = nil)\n # The ClientHelloOuter's server_name when its encrypted ClientHelloInner\n # was taken: the public_name the client named in the clear, where\n # `server_name` is the name it asked for inside. Nil otherwise.\n def outer_server_name : String | ::Nil\n # The handshake with the client on *socket*. A handshake that fails\n # sends the client the alert its error names, and the socket is closed.\n # Where the config allows early data (`max_early_data`) and *early_data*\n # is true, a ClientHello's early data may be taken: then the handshake\n # answers once this side's Finished is sent, `read_early` reads the\n # early data, a write goes at once (0.5-RTT), and `finish` - which\n # `read` calls - reads the client's Finished. Under a frozen config\n # (`TlsFrozenServerConfig`) the handshake may run on any thread, as many\n # at once as there are.\n def self.over(socket : IyiSocket, config : TlsServerConfig | TlsFrozenServerConfig, timeout_ms : Int32 = HANDSHAKE_TIMEOUT_MS, early_data : Bool = true) : TlsServer | TlsError\n # Up to *max* bytes the client sent after the handshake - never its early\n # data, which `read_early` reads - the handshake finished first.\n def read(max : Int32 = 16384) : String | TlsError\n # Up to *max* bytes of the early data the client sent with its\n # ClientHello, \"\" once it has all been read, or when none was taken.\n # Early data may be a replay (RFC 8446 section 8; `TlsReplayGuard` says\n # what this server refuses and what it cannot), which is why it is read\n # here and never by `read`: a program can tell it from what came after\n # the handshake, and act on it only where twice is safe.\n def read_early(max : Int32 = 16384) : String | TlsError\n # The host the client named (server_name, RFC 6066), if it named one.\n def server_name : String | ::Nil\n def server_side? : Bool\n protected def takes_early=(takes : Bool) : Bool\nend\n\n# What a server presents and asks: its identity, the protocols it speaks\n# by ALPN, the oldest version it speaks, and - for mutual TLS - the roots\n# a client's certificate must chain to.\n#\n# A config is written as a server runs - its properties are assigned, an\n# identity is added - and its `identity_source` is a `Proc`, which may\n# have captured anything; so it is not `Share` (SPEC.md III.4.4), and a\n# server whose connections run on several threads at once (std/http's\n# `Server.serve`) takes `frozen` instead: a copy no property of\n# which changes, that every worker reads at once. What must change while\n# such a server runs is shared rather than copied, and synchronised: the\n# ticket keys and the replay guard, whose state is behind a `Mutex`, so\n# a ticket one worker seals another opens; and each identity's OCSP\n# staple (`staple`), which a fresh response replaces from any thread.\npub class TlsServerConfig\n # *identity* shown to a client asking for a host its certificate names.\n def add_identity(identity : TlsIdentity) : TlsServerConfig\n # Protocols this server speaks by ALPN (RFC 7301), most wanted first; a\n # client that offers some and none of these is refused. None when empty.\n def alpn : Array(String)\n # Protocols this server speaks by ALPN (RFC 7301), most wanted first; a\n # client that offers some and none of these is refused. None when empty.\n def alpn=(value : Array(String)) : Array(String)\n def chain : Array(Array(UInt8))\n def client_required : Bool\n def client_required=(value : Bool) : Bool\n # When set, the server asks for a client's certificate (a\n # CertificateRequest) and checks it as std/x509 checks a client's\n # (clientAuth) against these roots, then its CertificateVerify; a client\n # that sends none is refused (certificate_required; in TLS 1.2,\n # handshake_failure) while `client_required`. Not asked when nil.\n def client_roots : Array(Certificate) | ::Nil\n # When set, the server asks for a client's certificate (a\n # CertificateRequest) and checks it as std/x509 checks a client's\n # (clientAuth) against these roots, then its CertificateVerify; a client\n # that sends none is refused (certificate_required; in TLS 1.2,\n # handshake_failure) while `client_required`. Not asked when nil.\n def client_roots=(value : Array(Certificate) | ::Nil) : Array(Certificate) | ::Nil\n # A copy, to be written apart from this one: the arrays copied - the\n # protocols, roots, identities, groups, and each ECH key, whose `retry`\n # is its own - and the ticket keys and the replay guard shared, so that\n # a ticket either seals the other opens, and early data either took\n # the other refuses.\n def dup : TlsServerConfig\n # `max_early_data`, held to 0 .. `MAX_EARLY_DATA`.\n def early_limit : Int64\n # The ECHConfigList of the `ech_keys` whose `retry` is set, in their\n # order: what this server publishes for clients (a DNS HTTPS record's\n # `ech`) and sends as retry_configs; nil when there are none.\n def ech_config_list : Array(UInt8) | ::Nil\n # The keys an encrypted ClientHello (RFC 9849) is opened with, as a\n # client-facing server in shared mode, which is its own backend: one\n # whose ECHClientHello names a key's config_id and suite and opens under\n # it is answered on its ClientHelloInner; one none opens, on the\n # ClientHelloOuter, for the public_name, with `ech_config_list` as\n # retry_configs. Several for rotation (`TlsEchKey`). None when empty: an\n # encrypted_client_hello is then passed over, unread past its type.\n def ech_keys : Array(TlsEchKey)\n # The keys an encrypted ClientHello (RFC 9849) is opened with, as a\n # client-facing server in shared mode, which is its own backend: one\n # whose ECHClientHello names a key's config_id and suite and opens under\n # it is answered on its ClientHelloInner; one none opens, on the\n # ClientHelloOuter, for the public_name, with `ech_config_list` as\n # retry_configs. Several for rotation (`TlsEchKey`). None when empty: an\n # encrypted_client_hello is then passed over, unread past its type.\n def ech_keys=(value : Array(TlsEchKey)) : Array(TlsEchKey)\n def self.from_der(chain : Array(Array(UInt8)), seed : Array(UInt8)) : TlsServerConfig | TlsError\n def self.from_der(chain : Array(Array(UInt8)), key : P256PrivateKey) : TlsServerConfig | TlsError\n def self.from_der(chain : Array(Array(UInt8)), key : P384PrivateKey) : TlsServerConfig | TlsError\n def self.from_der(chain : Array(Array(UInt8)), key : RsaPrivateKey) : TlsServerConfig | TlsError\n # `TlsIdentity.from_pem`'s identity, as a server's.\n def self.from_pem(certificates : String, private_key : String) : TlsServerConfig | TlsError\n # This config as it is now, for a server whose connections run on\n # several threads at once (`TlsFrozenServerConfig`). One with an\n # `identity_source` is refused by panicking: a `Proc` may have captured\n # anything, and nothing checked it - the source goes to the block form\n # below instead, where the compiler checks it.\n def frozen : TlsFrozenServerConfig\n # The same, with the block as its `identity_source`, asked with the\n # host, the protocols and the milliseconds left as that is. The def is\n # `@[Share]`, so the block is checked where it is written as a parallel\n # task's is (SPEC.md III.4.4, III.4.13): every value it captures must be\n # `Share` - identities, which are, a `Mutex` around a table of them, a\n # `Channel` to the thread that keeps them - every captured local\n # assigned once, and the constants and class variables it names\n # `Share`. It is called on whichever worker the handshake runs on,\n # several at once. `identity_source`, if set, is not asked.\n def frozen(&source : (String | ::Nil, Array(String) | ::Nil, Int32 | ::Nil -> TlsIdentity | TlsError | Nil)) : TlsFrozenServerConfig\n # `groups`' code points, those this module has, once each.\n def group_codes : Array(Int32)\n # The key exchange groups a TLS 1.3 handshake takes, by the names\n # `named_group` gives them, most wanted first: X25519MLKEM768, X25519,\n # secp256r1 and secp384r1 unless set. The first of them a client lists is\n # taken where it sent a share in it, or is X25519MLKEM768 - for which a\n # client that sent no share is asked by HelloRetryRequest - and the next\n # otherwise; a client that sent a share in none of them it lists is asked\n # for the first it lists. A name this module has no group of is passed\n # over. TLS 1.2's groups are its own, as the module's header says.\n def groups : Array(String)\n # The key exchange groups a TLS 1.3 handshake takes, by the names\n # `named_group` gives them, most wanted first: X25519MLKEM768, X25519,\n # secp256r1 and secp384r1 unless set. The first of them a client lists is\n # taken where it sent a share in it, or is X25519MLKEM768 - for which a\n # client that sent no share is asked by HelloRetryRequest - and the next\n # otherwise; a client that sent a share in none of them it lists is asked\n # for the first it lists. A name this module has no group of is passed\n # over. TLS 1.2's groups are its own, as the module's header says.\n def groups=(value : Array(String)) : Array(String)\n def identity : TlsIdentity\n # The identity at *index*, as `identity_index` counts; nil past them.\n def identity_at(index : Int32) : TlsIdentity | ::Nil\n # The identity a client asking for *name*, taking signatures under\n # *schemes*, is shown: the first of `others` that names the host and\n # signs under a scheme the client takes, else `identity` if it does; nil\n # when none of them does.\n def identity_for(name : String | ::Nil, schemes : Array(Int32)) : TlsIdentity | ::Nil\n # The place of *identity* among this server's, which a ticket carries:\n # 0 for `identity`, then `others` in order.\n def identity_index(identity : TlsIdentity) : Int32\n # Asked first, in TLS 1.3 and 1.2, for the identity a client is shown:\n # given the host the client named by server_name (nil when it named\n # none), the protocols its ALPN offered (nil when it offered none), and\n # the milliseconds left of the handshake's deadline (0 once it has\n # passed, nil when the handshake has none). An identity it answers is\n # shown where one of `others` would have been - so a scheme of its key\n # the client takes, and in 1.2 a suite and a curve for it, or the client\n # is refused as for `identity`; nil leaves the choice to `others` and\n # `identity` as without it; an error refuses the handshake, the client\n # sent the alert that error names. Asked of each ClientHello that lists\n # signature_algorithms - a second one after a HelloRetryRequest too, and\n # one offering a ticket, which may yet come to a full handshake; a\n # resumption shows no certificate, and its ticket counts the session as\n # `identity`'s (`identity_index`). The handshake waits for it, and its\n # deadline cuts only the reads after it: a source that may wait - for a\n # CA, say - keeps its waits within the time it is given, or holds the\n # connection past the deadline. Not asked when nil.\n def identity_source : Proc(String | ::Nil, Array(String) | ::Nil, Int32 | ::Nil, TlsIdentity | TlsError | Nil) | ::Nil\n # Asked first, in TLS 1.3 and 1.2, for the identity a client is shown:\n # given the host the client named by server_name (nil when it named\n # none), the protocols its ALPN offered (nil when it offered none), and\n # the milliseconds left of the handshake's deadline (0 once it has\n # passed, nil when the handshake has none). An identity it answers is\n # shown where one of `others` would have been - so a scheme of its key\n # the client takes, and in 1.2 a suite and a curve for it, or the client\n # is refused as for `identity`; nil leaves the choice to `others` and\n # `identity` as without it; an error refuses the handshake, the client\n # sent the alert that error names. Asked of each ClientHello that lists\n # signature_algorithms - a second one after a HelloRetryRequest too, and\n # one offering a ticket, which may yet come to a full handshake; a\n # resumption shows no certificate, and its ticket counts the session as\n # `identity`'s (`identity_index`). The handshake waits for it, and its\n # deadline cuts only the reads after it: a source that may wait - for a\n # CA, say - keeps its waits within the time it is given, or holds the\n # connection past the deadline. Not asked when nil.\n def identity_source=(value : Proc(String | ::Nil, Array(String) | ::Nil, Int32 | ::Nil, TlsIdentity | TlsError | Nil) | ::Nil) : Proc(String | ::Nil, Array(String) | ::Nil, Int32 | ::Nil, TlsIdentity | TlsError | Nil) | ::Nil\n def initialize(identity : TlsIdentity)\n def leaf : Certificate\n # The ticket lifetime in milliseconds, held to 1 s .. seven days.\n def lifetime_ms : Int64\n # The most early data (0-RTT, RFC 8446 section 2.3) a ticket lets a\n # client send with its ClientHello, which `TlsServer#read_early` reads\n # apart from what `read` does: none when 0, as unless set, and at most\n # `MAX_EARLY_DATA`. Early data can be replayed: `replay_guard` refuses\n # what it can (see `TlsReplayGuard` for what it does not), and what\n # comes early must still be safe to act on twice.\n def max_early_data : Int32\n # The most early data (0-RTT, RFC 8446 section 2.3) a ticket lets a\n # client send with its ClientHello, which `TlsServer#read_early` reads\n # apart from what `read` does: none when 0, as unless set, and at most\n # `MAX_EARLY_DATA`. Early data can be replayed: `replay_guard` refuses\n # what it can (see `TlsReplayGuard` for what it does not), and what\n # comes early must still be safe to act on twice.\n def max_early_data=(value : Int32) : Int32\n # The oldest version this server speaks: TLS 1.3 by default, and then a\n # client that does not offer it is refused (protocol_version); `TLS12`\n # answers a client that offers 1.2 and not 1.3 in 1.2, held to what the\n # module's header says. A client that offers 1.3 is answered in it\n # either way.\n def min_version : TlsVersion\n # The oldest version this server speaks: TLS 1.3 by default, and then a\n # client that does not offer it is refused (protocol_version); `TLS12`\n # answers a client that offers 1.2 and not 1.3 in 1.2, held to what the\n # module's header says. A client that offers 1.3 is answered in it\n # either way.\n def min_version=(value : TlsVersion) : TlsVersion\n # The time a client's certificate is checked at; now when nil.\n def now : Time | ::Nil\n # The time a client's certificate is checked at; now when nil.\n def now=(value : Time | ::Nil) : Time | ::Nil\n # More identities, each shown to a client that asks by server_name (RFC\n # 6066) for a host its certificate names; `identity` to any other.\n def others : Array(TlsIdentity)\n # What refuses early data a server has taken before (RFC 8446 section 8).\n def replay_guard : TlsReplayGuard\n def schemes : Array(Int32)\n protected def share_state(keys : TlsTicketKeys, guard : TlsReplayGuard) : Nil\n # *der*, an OCSP response for *identity*'s leaf, stapled to its\n # certificate for a client that asks (RFC 6066's status_request; in TLS\n # 1.3 the leaf's CertificateEntry carries it, in 1.2 a CertificateStatus):\n # see `TlsIdentity#staple` for what is refused. A later call replaces it,\n # as a server fetching fresh responses would.\n def staple(der : Array(UInt8), identity : TlsIdentity = @identity) : TlsError | ::Nil\n # The keys this server's tickets are sealed under.\n def ticket_keys : TlsTicketKeys\n # How long a ticket may be resumed by, in seconds, from 1 to seven days\n # (604800, section 4.6.1's most); the period the ticket key turns over\n # in, too (`TlsTicketKeys`).\n def ticket_lifetime : Int32\n # How long a ticket may be resumed by, in seconds, from 1 to seven days\n # (604800, section 4.6.1's most); the period the ticket key turns over\n # in, too (`TlsTicketKeys`).\n def ticket_lifetime=(value : Int32) : Int32\n # NewSessionTickets sent after each handshake, for a client to resume\n # by (RFC 8446 section 4.6.1); none when 0, and at most `MAX_TICKETS`.\n def tickets : Int32\n # NewSessionTickets sent after each handshake, for a client to resume\n # by (RFC 8446 section 4.6.1); none when 0, and at most `MAX_TICKETS`.\n def tickets=(value : Int32) : Int32\nend\n\n# What a client keeps to resume a server's sessions (RFC 8446 section\n# 2.2): the tickets its NewSessionTickets carry, each with the PSK its\n# nonce makes. The caller holds it and hands it to `TlsClient.connect` or\n# `over`; there is no store of the process's own. A connection offers the\n# newest ticket that fits it, and takes it out, for a ticket goes out once\n# (appendix C.4): two resumptions are not tied together by it. A resumed\n# handshake checks no certificate - the ticket stands for the check the\n# first one made, and its chain is the resumed connection's\n# `peer_certificates` - so a ticket fits only a connection that check\n# would stand for:\n# - to the host and port it came from: section 4.6.1 has a client resume\n# only for a name the first handshake's certificate was checked for, and\n# a ticket offered to another port names the client to whatever server\n# listens there;\n# - under the configuration it came under (`TlsMadeUnder`): one session\n# shared by two configurations resumed the first one's ticket under the\n# second, its roots, `now` and `require_staple` never applied, and with\n# mutual TLS the server took the ticket's client certificate for the\n# connection's, so a connection made under identity B was identity A's;\n# - while the server's certificate is valid at the configuration's `now`\n# (the clock's when nil), as Go's client has it: a session past its\n# leaf's notAfter is a full handshake, which refuses it;\n# - within its lifetime, and within seven days (`MAX_LIFETIME`, section\n# 4.6.1's most) of the full handshake that checked those certificates,\n# however many resumptions came between: a server that sent fresh\n# tickets on every resumed connection otherwise kept the session alive\n# for as long as the client came back.\npub class TlsSession\n # A session holding at most *limit* tickets, held to 0 ..\n # `MAX_TICKETS`: std/http's `HTTPClient` keeps fewer for each origin.\n def initialize(limit : Int32 = MAX_TICKETS)\n # *ticket* held, the oldest gone past the session's limit.\n def keep(ticket : TlsHeldTicket) : Nil\n # How many tickets are held.\n def size : Int32\n # The newest ticket for *host* and *port* under *config* (the class's\n # header says which fit), taken out, at *now_ms* by the monotonic clock.\n # Those past their lifetimes or seven days from their full handshake go\n # too, and so does one that fits but whose server certificate has\n # expired.\n def take(host : String, port : Int32, config : TlsConfig, now_ms : Int64) : TlsHeldTicket | ::Nil\nend\n\n# The session a server's ticket seals, for a resumption to take up: the\n# suite, when it was issued (monotonic ms) and for how long (seconds),\n# its age_add, the PSK, the name the client asked for, the protocol\n# chosen, the identity shown (`TlsServerConfig#identity_index`), the\n# client's certificates (DER, leaf first), and when the first handshake\n# checked the certificates the session rests on (monotonic ms). The name's\n# length is two bytes and the identity's place four: in version 1 each\n# was one, and a name past 255 bytes, which the ClientHello then let\n# through, sealed a ticket that never opened, and a place past 255 among\n# `others` wrapped round. The PSK (48 bytes at most), the protocol (one\n# byte long in ALPN itself) and the chain's count - a chain of 256\n# certificates is far past `TlsServerConfig::MAX_TICKET`, which no ticket\n# is sent beyond - keep one byte.\npub class TlsTicket\n def age_add : Int64\n def alpn : String | ::Nil\n def authenticated_ms : Int64\n def chain : Array(Array(UInt8))\n # The state *bytes* hold, or nil when they are not one this encodes.\n def self.decode(bytes : Array(UInt8)) : TlsTicket | ::Nil\n def encode : Array(UInt8)\n def identity : Int32\n def initialize(suite : Int32, issued_ms : Int64, lifetime : Int64, age_add : Int64, psk : Array(UInt8), server_name : String | ::Nil, alpn : String | ::Nil, identity : Int32, chain : Array(Array(UInt8)), authenticated_ms : Int64, max_early_data : Int64 = 0_i64)\n def issued_ms : Int64\n def lifetime : Int64\n def max_early_data : Int64\n # The session *ticket* seals, opened by *keys* at *now_ms*: nil when no\n # key held opens it, or when its lifetime is over by this server's own\n # count from its issue.\n def self.open(keys : TlsTicketKeys, ticket : Array(UInt8), now_ms : Int64, period_ms : Int64) : TlsTicket | ::Nil\n def psk : Array(UInt8)\n def server_name : String | ::Nil\n def suite : Int32\nend\n\n# The keys a server seals its tickets under. RFC 8446 section 4.6.1 leaves\n# a ticket's form to the server; this one is RFC 5077 section 4's shape:\n# the key's 8-byte name, a 12-byte nonce drawn at random, and the state\n# sealed by ChaCha20-Poly1305 (std/aead, constant-time) with the name as\n# its additional data. A key made at random in this process seals for one\n# period - the ticket lifetime - and then only opens, for one more: a\n# ticket opens for all its lifetime, and no key opens anything past two\n# periods. A key idle past both goes with the one before it. The keys live\n# in this process: a ticket outlives neither a restart nor a move to\n# another server, which would need the keys shared and is not offered.\n#\n# Every thread of the process may seal and open at once - a server's\n# workers under `TlsFrozenServerConfig` share one set, so a ticket one\n# sealed another opens - so the keys are behind a `Mutex`, which makes\n# this type `Share` by its fields: the current name and key, and the\n# previous ones, are read under the lock, the key turned over there when\n# it is due, and the seal or open done outside it with the key read.\n# The lock is held for a comparison and four reads, and for two random\n# draws when the key turns over.\npub class TlsTicketKeys\n def initialize(now_ms : Int64 = TlsTime.now_ms)\n # The state *ticket* seals, when a key still held at *now_ms* opens it;\n # nil for any other bytes.\n def open(ticket : Array(UInt8), now_ms : Int64, period_ms : Int64) : Array(UInt8) | ::Nil\n # A new key from *now_ms*: what the one before sealed still opens, and\n # what the one before that sealed no longer does.\n def rotate(now_ms : Int64 = TlsTime.now_ms) : Nil\n # *state* sealed at *now_ms* (monotonic) under the current key - a new\n # one first, when *period_ms* has passed since it was made. Empty only\n # when the task was cancelled while it waited for the keys.\n def seal(state : Array(UInt8), now_ms : Int64, period_ms : Int64) : Array(UInt8)\nend\n\n# The versions a connection may speak: TLS 1.3, or TLS 1.2 as well (RFC\n# 5246), for a peer that never moved past it.\npub enum TlsVersion : Int32\n TLS12 = 0\n TLS13 = 1\nend\n\nimpl Error for TlsError\n def message : String\nend\n" }, { "name": "std/toml", "path": "src/std/toml.iyi", - "sourceSha256": "cbcee8fd6268a7d7bd2f67d2eea7165f659c33bd311d9f06c8c933a82a8d7bb7", + "sourceSha256": "4c062fc395c687687316c73840acec7db0a963e24e8aeddad4816c8900e70fa6", "surface": "module std/toml\n\n# `derive toml_serializable`, in a struct or class whose fields are written\n# with their types: the type reads and writes itself as a TOML table, a\n# key per field, named as the field is.\n#\n# pub struct Coord\n# getter x : Float64\n# getter name : String\n# derive toml_serializable\n# end\n#\n# Coord.from_toml(\"x = 1.5\\nname = \\\"a\\\"\\n\").x # => 1.5\n# coord.to_toml # => \"x = 1.5\\nname = \\\"a\\\"\\n\"\n#\n# It is std/yaml's `derive yaml_serializable` over TOML, field for field:\n# a value is read and written as `TOML.read_value` and `TOML.to_any` take\n# its type (Bool, Int32, Int64, UInt8, UInt64, Float64, String,\n# `TOMLDateTime`, `Any`, an `Array` or a `Hash(String, _)` of them,\n# another derived type, each of them or nil). TOML has no null, so a nil\n# field is not written, and a missing key is read as YAML's derive reads\n# one: a field with a default keeps it, a nilable field holds nil, and any\n# other is refused by name. A key the type has no field for is passed\n# over. A type that is several writes `derive serializable,\n# yaml_serializable, toml_serializable`: what this one generates shares no\n# method with theirs (`to_toml`, `from_toml`, `to_toml_any` and\n# `initialize(toml : Any)` of this module's `Any`).\npub macro toml_serializable(declaration)\n\n# The value a document holds. A document is a table: `TOML.parse` answers\n# an `Any` whose `raw` is a `Hash(String, Any)`.\npub struct Any\n alias Type = Bool | Int64 | Float64 | String | TOMLDateTime | Array(Any) | Hash(String, Any)\n def !=(other : Any) : Bool\n # Structural: same kind, same value; a table equals a table with the\n # same pairs in any order. `1` and `1.0` are different values, two NaNs\n # the same one, and `0.0` equals `-0.0` as the doubles do. Arrays and\n # tables are compared in methods of their own and scalars in a third,\n # so the frames a deep value recurses through stay small: with all of\n # it here, comparing two arrays nested 100 deep overflowed a task's\n # stack in a plain build.\n def ==(other : Any) : Bool\n def [](key : String) : Any\n def [](index : Int32) : Any\n def []?(key : String) : Any | ::Nil\n def []?(index : Int32) : Any | ::Nil\n def as_a : Array(Any)\n def as_a? : Array(Any) | ::Nil\n def as_bool : Bool\n def as_bool? : Bool | ::Nil\n def as_datetime : TOMLDateTime\n def as_datetime? : TOMLDateTime | ::Nil\n # A float, or an integer widened to one.\n def as_f : Float64\n def as_f? : Float64 | ::Nil\n def as_h : Hash(String, Any)\n def as_h? : Hash(String, Any) | ::Nil\n def as_i : Int64\n def as_i? : Int64 | ::Nil\n def as_s : String\n def as_s? : String | ::Nil\n def dig(key : String | Int32) : Any\n def dig(key : String | Int32, *rest : String | Int32) : Any\n def dig?(key : String | Int32) : Any | ::Nil\n def dig?(key : String | Int32, *rest : String | Int32) : Any | ::Nil\n # Agrees with `==`: a table's hash does not depend on its order, `0.0`\n # and `-0.0` share one and so do all NaNs. Mixed as std/yaml's `Any`\n # mixes, for the spread that file measured.\n def hash : Int32\n def initialize(raw : Type)\n def initialize(value : Int32)\n # A value as TOML writes it inline: strings quoted and escaped, floats\n # as `dump` spells them, tables as inline tables.\n def inspect : String\n # Which member of the union `raw` is, as one of the KIND_ constants.\n # Reference types are tested first, for the reason std/yaml's header\n # gives.\n def kind : Int32\n # The name of the kind, for the sentences below.\n def kind_name : String\n def raw : Type\n # Items of an array, keys of a table, characters of a string.\n def size : Int32\n # A string as itself, anything else as `inspect` writes it.\n def to_s : String\nend\n\npub struct TOML\n # TOML for a table, ending in a line break unless the table is empty.\n def self.dump(value : Any) : String\n # The document `text` holds, read into `type`: `Bool`, `Int32`, `Int64`,\n # `UInt8`, `UInt64`, `Float64`, `String`, `TOMLDateTime`, `Any`, a type\n # with `derive toml_serializable`, one of those or nil, or an `Array` or a\n # `Hash(String, _)` of those. Text that is not TOML panics with the\n # `TOMLError`'s sentence; a value of another kind, or an integer outside\n # the type, is refused.\n def self.from_toml(text : String, type : T.class) : T forall T\n def initialize\n # The document `text` holds, a table, or what is wrong with it.\n def self.parse(text : String) : Any | TOMLError\n # The document, or nil where `parse` answers a `TOMLError`.\n def self.parse?(text : String) : Any | ::Nil\n def self.read_value(value : Any, type : Bool.class) : Bool\n def self.read_value(value : Any, type : Int32.class) : Int32\n def self.read_value(value : Any, type : Int64.class) : Int64\n def self.read_value(value : Any, type : UInt8.class) : UInt8\n def self.read_value(value : Any, type : UInt64.class) : UInt64\n # A float, or an integer widened to one: `y = 2` is the Float64 2.0.\n def self.read_value(value : Any, type : Float64.class) : Float64\n def self.read_value(value : Any, type : String.class) : String\n def self.read_value(value : Any, type : TOMLDateTime.class) : TOMLDateTime\n def self.read_value(value : Any, type : Any.class) : Any\n def self.read_value(value : Any, type : Array(T).class) : Array(T) forall T\n def self.read_value(value : Any, type : Hash(String, V).class) : Hash(String, V) forall V\n # A type that reads itself, the `initialize(toml)` a `derive\n # toml_serializable` wrote; a type that admits nil reads as the other\n # type, since a value that is there is never null.\n def self.read_value(value : Any, type : T.class) : T forall T\n # The `Any` a value is written as. TOML has no null: a nil is refused\n # here, named, and a derived type leaves a nil field out before it gets\n # this far. Taken out before the rest dispatches, for the reason\n # std/json's `write_or_null` gives.\n def self.to_any(val : T) : Any forall T\n # TOML for any table `to_any` makes of `obj`, as `dump` writes it.\n def self.to_toml(obj : T) : String forall T\n def self.write_value(val : Bool) : Any\n def self.write_value(val : Int32) : Any\n def self.write_value(val : Int64) : Any\n def self.write_value(val : UInt8) : Any\n # A TOML integer is an `Int64`: a `UInt64` past it cannot be written.\n def self.write_value(val : UInt64) : Any\n def self.write_value(val : Float64) : Any\n def self.write_value(val : String) : Any\n def self.write_value(val : TOMLDateTime) : Any\n def self.write_value(val : Any) : Any\n def self.write_value(val : Array(T)) : Any forall T\n # TOML keys are strings, so a hash is written when its keys are.\n def self.write_value(val : Hash(String, V)) : Any forall V\n def self.write_value(val : T) : Any forall T : ToTOML\nend\n\n# A TOML date, time or date-time, with its kind. An offset date-time has\n# every field and `offset_minutes` (0 for `Z`); a local date-time every\n# field but the offset; a local date the date fields alone, a local time\n# the time fields alone, the others 0. Two values are equal when their kind\n# and every field are: `07:32:00Z` and `08:32:00+01:00` are one instant\n# written two ways, and this keeps which way (`unix_seconds` says they are\n# the same instant).\npub struct TOMLDateTime\n def !=(other : TOMLDateTime) : Bool\n def ==(other : TOMLDateTime) : Bool\n def day : Int32\n def self.days_in_month(year : Int32, month : Int32) : Int32\n def hash : Int32\n def hour : Int32\n # Fields that do not make a value of the kind are the caller's mistake,\n # refused with what is wrong; `problem` says it without panicking.\n def initialize(kind : Int32, year : Int32, month : Int32, day : Int32, hour : Int32, minute : Int32, second : Int32, nanosecond : Int32, offset_minutes : Int32)\n def inspect : String\n def kind : Int32\n def kind_name : String\n def self.leap_year?(year : Int32) : Bool\n def self.local_date(year : Int32, month : Int32, day : Int32) : TOMLDateTime\n def local_date? : Bool\n def self.local_date_time(year : Int32, month : Int32, day : Int32, hour : Int32, minute : Int32, second : Int32, nanosecond : Int32 = 0) : TOMLDateTime\n def local_date_time? : Bool\n def self.local_time(hour : Int32, minute : Int32, second : Int32, nanosecond : Int32 = 0) : TOMLDateTime\n def local_time? : Bool\n def minute : Int32\n def month : Int32\n def nanosecond : Int32\n def offset? : Bool\n def self.offset_date_time(year : Int32, month : Int32, day : Int32, hour : Int32, minute : Int32, second : Int32, nanosecond : Int32 = 0, offset_minutes : Int32 = 0) : TOMLDateTime\n def offset_minutes : Int32\n # `value` in decimal with zeros in front to `width` digits.\n def self.pad(value : Int32, width : Int32) : String\n # Nil when the fields make a value of `kind`, else what is wrong with\n # them, as the reader and `new` both say it.\n def self.problem(kind : Int32, year : Int32, month : Int32, day : Int32, hour : Int32, minute : Int32, second : Int32, nanosecond : Int32, offset_minutes : Int32) : String | ::Nil\n def second : Int32\n # As TOML writes it (RFC 3339 for an offset date-time): `T` between\n # date and time, `Z` for a zero offset, the fraction with its trailing\n # zeros dropped and left out when it is zero.\n def to_s : String\n # Seconds since 1970-01-01T00:00:00Z of an offset date-time, the\n # fraction left in `nanosecond`. The other three kinds name no instant.\n def unix_seconds : Int64\n def year : Int32\nend\n\n# What is wrong with a document, and where: `line` and `column` count from\n# 1, a column in characters. `message` is \" at line L, column C\".\npub struct TOMLError\n def column : Int32\n def initialize(reason : String, line : Int32, column : Int32)\n def line : Int32\n def reason : String\n def to_s : String\nend\n\n# What `TOML.write_value` and `TOML.to_any` take besides the built-in\n# types: a value whose type implements it, as a `derive\n# toml_serializable` type does.\npub trait ToTOML\n abstract def to_toml_any : Any\nend\n\nimpl Error for TOMLError\n def message : String\nend\n" }, { @@ -634,85 +640,91 @@ { "name": "std/tuple", "path": "src/std/tuple.iyi", - "sourceSha256": "5a67030cf1aec1ddb1dd137df717cdb0d44df9e0edd3714ab92754c6a5a86e1a", + "sourceSha256": "49754c7a5af3d05017c89bbb20e3453d68a78ca64bb54f3381a681026a9f4d77", "surface": "module std/tuple\n\nstruct ::NamedTuple(T)\n # Compares the values by name.\n #\n # Any named tuple: the keys are sorted and compared, then the values in\n # that order as tuples compare (src/iyi/object.iyi), member by member\n # where one type holds the other. `self` took `{a: 1, b: 2}` for `{a: 1,\n # b: y}` (y : Int32?) and not back, so the pair answered true one way and\n # false the other, and `case` over them did not match.\n def ==(other : NamedTuple) : Bool\n # Yields each key symbol and corresponding value.\n def each : Nil\n # Yields each value in order.\n def each_value : Nil\n # Returns true when the named tuple contains zero entries.\n def empty? : Bool\n # Returns true if the named tuple contains the given key symbol.\n #\n # The keys here and below are written with `symbolize`, never as\n # `:{{key.id}}`: a quoted key such as `\"content-type\"` or `\"x y\"` pasted\n # that way is `:content-type`, a symbol minus a call, or `:x y`, which\n # does not parse, so every one of these methods failed to compile for\n # such a key. `std/named_tuple` already wrote them this way.\n def has_key?(key : Symbol) : Bool\n # Hashing follows the `==` below, mixed as `Tuple#hash` mixes the members\n # (src/iyi/object.iyi). `Object#hash` answered the type's id, so\n # `{a: 1}` and `{a: 2}` hashed alike and 20,000 keys took 1.4 s to insert\n # where the same pairs as tuples took 1 ms. The values go in by sorted\n # key, because `==` matches by name: `{x: 1, y: 2} == {y: 2, x: 1}`, so\n # the two have to hash alike although their types list the keys in\n # another order.\n def hash : Int32\n def initialize\n def inspect : String\n # Returns a Tuple containing the key symbols in order. Built with\n # `Tuple.new`, as `Tuple#map` is: for the named tuple with no keys,\n # braces are an empty hash literal.\n def keys\n # Value identity.\n def same?(other : self) : Bool\n # Number of key-value pairs in the named tuple.\n def size : Int32\n # The keys, and the values, in sorted key order: the order a type lists\n # its keys in is not part of the value.\n protected def sorted_keys\n protected def sorted_values\n # String representation: `{name: \"Alice\", age: 30}`. A key that is not a\n # name is quoted, as it is written: `{\"content-type\": \"text/plain\"}`.\n def to_s : String\n # Returns a Tuple containing the values in order.\n def values\nend\n\nstruct ::Tuple(*T)\n # Concatenates two tuples.\n def +(other : Tuple(*U)) forall U\n # Yields each element sequentially.\n def each : Nil\n # Yields each element alongside its index.\n def each_with_index : Nil\n # Returns true when the tuple contains zero elements.\n def empty? : Bool\n # Returns the first element. Raises if empty.\n def first\n # Returns the first element, or nil if empty.\n def first?\n # Returns the last element. Raises if empty.\n def last\n # Returns the last element, or nil if empty.\n def last?\n # Returns a new Tuple with each element mapped through the block.\n #\n # This, `+`, `reverse`, and `NamedTuple#keys` and `#values` build with\n # `Tuple.new(...)`, not braces: with no members `{ }` is an empty hash\n # literal, so on the empty tuple each failed to compile with \"for empty\n # hashes use '{} of KeyType => ValueType'\".\n def map\n # Creates a new Tuple containing the given arguments.\n def self.new(*args : *T)\n # Reverses elements in tuple.\n def reverse\n # Value identity.\n def same?(other : self) : Bool\n # Converts the tuple into an Array typed as the union of all element types.\n # The empty tuple's is `[] of NoReturn`, the union of no types: the\n # `typeof` below had no argument there, and `Tuple.new.to_a` did not\n # compile.\n def to_a\nend\n" }, { "name": "std/udp", "path": "src/std/udp.iyi", - "sourceSha256": "de67e123e5505406321b5f1cf7626e43fedf141ada0f9e89a667f3ab7cc0d858", + "sourceSha256": "b14d7adf6211f768389773c8eb6062368c4ee5f538dd0047a46f46402d89e96c", "surface": "module std/udp\n\npub alias Bytes = Std::Slice::Bytes\n\n# An incoming datagram with payload bytes and remote peer origin.\npub struct Datagram\n def [](i : Int32) : Bytes | String | Int32\n def data : Bytes\n def host : String\n def initialize(data : Bytes, host : String, port : Int32)\n def port : Int32\n # Decodes payload bytes as a String.\n def text : String\n def to_s : String\n def to_tuple : Tuple(Bytes, String, Int32)\nend\n\n# The address types, their parsers and the `sockaddr_in`/`sockaddr_in6`\n# writers are `std/socket`'s; this module had copies, and the copies had\n# drifted: its IPv6 parser read no dotted tail and its printer compressed\n# only `::` and `::1`.\npub alias IPv4Address = Std::Socket::IPv4Address\n\npub alias IPv6Address = Std::Socket::IPv6Address\n\npub class UdpSocket\n alias SockLen = Int64\n def self.__is_eagain(res : Int64) : ::Bool\n def self.__is_eintr(res : Int64) : ::Bool\n # No such refusal: a datagram larger than the buffer fills it, the\n # rest is dropped and the length answered is what fit.\n def self.__is_msgsize(res : Int64) : ::Bool\n # ECONNREFUSED (111): the ICMP port-unreachable a *connected* datagram\n # socket's earlier send provoked, which Linux and BSD report once, to\n # the next send or receive on it (udp(7)), and then forget; an\n # unconnected one is never told. It is something the peer did, not a\n # failure of this socket, so the shared bodies read it as nothing\n # queued and send again. Read as a failure, the next `send` or\n # `receive?` panicked here, where Windows, which has the report turned\n # off, answered the byte count and nil. A `poll_read` the report wakes\n # still answers true [INFERENCE], and the `receive?` after it nil.\n def self.__is_refused(res : Int64) : ::Bool\n def self.__is_unbound(res : Int64) : ::Bool\n def self.__sys3(number : Int64, a : Int64, b : Int64, c : Int64) : Int64\n def self.__sys5(number : Int64, a : Int64, b : Int64, c : Int64, d : Int64, e : Int64) : Int64\n def self.__sys6(number : Int64, a : Int64, b : Int64, c : Int64, d : Int64, e : Int64, f : Int64) : Int64\n def self.__sys_bind(fd : Int32, addr : Pointer(UInt8), len : Int64) : Int32\n def self.__sys_connect(fd : Int32, addr : Pointer(UInt8), len : Int64) : Int32\n def self.__sys_get_buffer_size(fd : Int32, level : Int32, optname : Int32) : Int32\n def self.__sys_getsockname(fd : Int32, addr : Pointer(UInt8), addrlen : Pointer(UInt32)) : Int32\n def self.__sys_poll_read(fd : Int32, timeout_ms : Int32) : ::Bool\n def self.__sys_recvfrom(fd : Int32, buf : Pointer(UInt8), len : UInt64, flags : Int32, addr : Pointer(UInt8), addrlen : Pointer(UInt32)) : Int64\n def self.__sys_send(fd : Int32, buf : Pointer(UInt8), len : UInt64) : Int64\n def self.__sys_sendto(fd : Int32, buf : Pointer(UInt8), len : UInt64, flags : Int32, addr : Pointer(UInt8), addrlen : Int64) : Int64\n def self.__sys_set_buffer_size(fd : Int32, level : Int32, optname : Int32, size : Int32) : Int32\n def self.__sys_socket(domain : Int32 = 2) : Int32\n def self.__unbound_now? : ::Bool\n # Binds a UDP socket to the specified host and port.\n # Automatically detects whether host is an IPv4 or IPv6 address.\n #\n # Without SO_REUSEADDR, on every platform. It waives TIME_WAIT for a\n # listener, and a datagram port never has one; what it does to a\n # datagram socket on Linux is let a second socket bind the same address\n # and port while the first holds it, and unicast then reaches only one\n # of them. The POSIX arms asked for it and the win32 arm did not, so a\n # second bind of a held port failed on Windows, measured, and went\n # through on Linux [INFERENCE: not run here].\n def self.bind(host : String, port : Int32) : UdpSocket\n # Binds a UDP socket to 0.0.0.0 and the specified port.\n def self.bind(port : Int32) : UdpSocket\n # Binds an IPv6 UDP socket to [::] and the specified port.\n def self.bind6(port : Int32) : UdpSocket\n # `bind`, with a refused bind answered rather than raised: the port\n # held, reserved (Windows' excluded ranges answer \"access denied\"), or\n # the address not this machine's - so a program can pick another. An\n # error's `message` is the sentence `bind` raises.\n def self.bind?(host : String, port : Int32) : UdpSocket | SocketError\n # Creates an unbound UDP client socket.\n def self.client(family : Int32 = 2) : UdpSocket\n # Creates an unbound IPv6 UDP client socket.\n def self.client_v6 : UdpSocket\n # Closes the socket file descriptor.\n def close : Nil\n def closed? : ::Bool\n # Connects the UDP socket to a remote host and port (sets default peer).\n def connect(host : String, port : Int32) : Nil\n def family : Int32\n def fd : Int32\n def self.format_address(addr : Pointer(UInt8)) : Tuple(String, Int32)\n def initialize(fd : Int32 = -1, family : Int32 = 2)\n # Reads back the locally bound IP address.\n def local_address : String\n # Reads back the locally bound port assigned by the OS.\n def local_port : Int32\n def self.make_sockaddr(host : String, port : Int32) : Tuple(Pointer(UInt8), SockLen, Int32)\n # Creates an unbound UDP socket.\n def self.open(family : Int32 = 2) : UdpSocket\n # Polls whether the socket is readable within timeout_ms milliseconds.\n # Returns true if a datagram is ready to be read, false on timeout.\n def poll_read(timeout_ms : Int32 = 0) : ::Bool\n # Receives payload bytes from the connected peer, parking until some arrive.\n def receive(max_bytes : Int32 = 65536) : Bytes | Cancelled\n # Payload bytes queued now from the connected peer, or nil.\n def receive?(max_bytes : Int32 = 65536) : Bytes | ::Nil\n # Returns the current receive buffer size (SO_RCVBUF).\n def receive_buffer_size : Int32\n # Sets the receive buffer size (SO_RCVBUF).\n def receive_buffer_size=(size : Int32) : Nil\n # Receives a Datagram struct containing data, host, and port.\n def receive_datagram(max_bytes : Int32 = 65536) : Datagram | Cancelled\n # A Datagram of what is queued now, or nil.\n def receive_datagram?(max_bytes : Int32 = 65536) : Datagram | ::Nil\n # Receives a datagram into a newly allocated Bytes slice up to max_bytes.\n # Answers {payload, peer_host, peer_port}, parking until one arrives.\n def receive_from(max_bytes : Int32 = 65536) : Tuple(Bytes, String, Int32) | Cancelled\n # Receives a datagram into a caller-supplied Bytes buffer.\n # Answers {subslice_of_received_bytes, peer_host, peer_port}.\n def receive_from(buffer : Bytes) : Tuple(Bytes, String, Int32) | Cancelled\n # What is queued now, or nil. Never parks.\n def receive_from?(max_bytes : Int32 = 65536) : Tuple(Bytes, String, Int32) | ::Nil\n # Into a buffer: what is queued now, or nil. Never parks.\n def receive_from?(buffer : Bytes) : Tuple(Bytes, String, Int32) | ::Nil\n # Why a call failed: `std/socket`'s sentence for the platform's\n # number (`SocketError#reason`), and the refusals only a datagram meets\n # named as well. Each refusal was a fixed sentence that dropped the\n # number, so a broadcast, a datagram past 65,507 bytes, a port in use\n # and an IPv6 address from an IPv4 socket all said only \"cannot send to\n # H:P\" or \"cannot bind UDP socket to H:P\" - measured on Windows.\n def self.refusal(res : Int64, sending : ::Bool) : String\n # Sends bytes to the connected peer.\n def send(bytes : Bytes) : Int32\n # Sends string to the connected peer.\n def send(str : String) : Int32\n # Returns the current send buffer size (SO_SNDBUF).\n def send_buffer_size : Int32\n # Sets the send buffer size (SO_SNDBUF).\n def send_buffer_size=(size : Int32) : Nil\n # Sends a raw buffer to a destination host and port.\n def send_to(buffer : Pointer(UInt8), count : Int32, host : String, port : Int32) : Int32\n # Sends bytes to a destination host and port.\n def send_to(bytes : Bytes, host : String, port : Int32) : Int32\n # Sends string contents as a datagram to a destination host and port.\n def send_to(str : String, host : String, port : Int32) : Int32\n def to_unsafe : Int32\n # Creates an unbound UDP socket.\n def self.unbound(family : Int32 = 2) : UdpSocket\nend\n" }, { "name": "std/unicode", "path": "src/std/unicode.iyi", - "sourceSha256": "2d49cc9a3d25a0d4f8045244297fa767c6794ef4f6c94a57b5429018cd76f79c", + "sourceSha256": "9992a2b616b097bbc49af0c92a7c5db71251162c2b028a67e88170dc4658d291", "surface": "module std/unicode\n\npub struct Unicode\n # Options the case mappings take; combine them with `|`.\n enum CaseOptions : Int32\n ASCII = 1\n Turkic = 2\n Fold = 4\n end\n # The normalization forms `normalize` writes.\n enum NormalizationForm : Int32\n NFD = 0\n NFC = 1\n NFKD = 2\n NFKC = 3\n end\n def self.ascii?(char : Char) : Bool\n # The first character in titlecase and the rest in lowercase: `\"džemal\"` is\n # `\"Džemal\"`, `\"STRASSE\"` is `\"Strasse\"`. The first character is still a\n # letter before the rest, so `\"ΑΣ\"` is `\"Ας\"`.\n def self.capitalize(text : String, options : CaseOptions = CaseOptions::None) : String\n # Every character whose simple case folding is this one's, itself among\n # them, in code point order: `k` answers `K`, `k` and the Kelvin sign\n # U+212A, `σ` answers `Σ`, `ς` and `σ`, and `ß` answers `ß` and `ẞ`. A\n # character without case answers itself alone. It is what a\n # case-insensitive comparison of one character has to accept, and folding\n # both sides is not enough to build it: a class holding the Kelvin sign\n # has to take `K` as well, and only the folding read backwards says so.\n #\n # The simple folding here is CaseFolding.txt's C and S rows, which is\n # RE2's. `foldcase` answers the other library's, which has no S rows:\n # there `ẞ` folds to itself.\n def self.case_orbit(char : Char) : Array(Char)\n # The string with every maximal ill-formed subpart replaced by U+FFFD; a\n # well-formed string is answered as it is.\n def self.clean(text : String) : String\n # The bytes as a string, every maximal ill-formed subpart replaced by U+FFFD.\n def self.clean(bytes : Array(UInt8)) : String\n # Category C: Cc, Cf, Cs and Co — controls, format characters,\n # surrogates and private use.\n def self.control?(char : Char) : Bool\n # The string the UTF-16 code units spell. An unpaired surrogate is refused\n # with its index: `unpaired surrogate 0xD800 at index 3`.\n def self.decode_utf16(units : Array(UInt16)) : String\n # The string the UTF-16 code units spell, or nil at an unpaired surrogate.\n def self.decode_utf16?(units : Array(UInt16)) : String | ::Nil\n # The lowercase of one character, the simple mapping: `İ` becomes `i`\n # under Turkic rules and stays `İ` otherwise, because its full mapping is\n # `i` plus a combining dot.\n def self.downcase(char : Char, options : CaseOptions = CaseOptions::None) : Char\n # The full lowercase mapping, one character at a time.\n def self.downcase(char : Char, options : CaseOptions = CaseOptions::None, & : (Char -> Nil)) : Nil\n # The string in lowercase, full mappings, with the final sigma: a capital\n # sigma that ends a word — a cased letter before it, none after, the\n # case-ignorable characters (combining marks, format characters, modifier\n # letters and the apostrophes, periods and colons that can sit inside a\n # word) looked through — becomes `ς`, so `\"ΟΔΥΣΣΕΥΣ\"` is `\"οδυσσευς\"`.\n # With `CaseOptions::Fold` this is `foldcase`.\n def self.downcase(text : String, options : CaseOptions = CaseOptions::None) : String\n # Every orbit `case_orbit` answers that holds more than one character,\n # each once, as code points in order and in no particular order between\n # them. A case-insensitive class folds itself against these, about 1,400\n # of them, rather than asking `case_orbit` of each of the hundred\n # thousand code points a class like `\\p{L}` holds.\n def self.each_case_orbit(& : (Array(Int32) -> Nil)) : Nil\n # Each grapheme cluster, in order.\n def self.each_grapheme(text : String, &block : (String -> _)) : Nil\n # The string's UTF-16 code units: one per character up to U+FFFF, a\n # surrogate pair above.\n def self.encode_utf16(text : String) : Array(UInt16)\n # The case folding of one character where it is one code point (`Σ`, `σ`\n # and `ς` all fold to `σ`); a character whose folding is longer, like `ß`,\n # is answered unchanged — the block form and the string form fold it.\n def self.foldcase(char : Char) : Char\n # The full case folding, one character at a time: `ß` yields `s` twice.\n def self.foldcase(char : Char, & : (Char -> Nil)) : Nil\n # The string folded for comparison: `\"Straße\"` and `\"STRASSE\"` both fold\n # to `\"strasse\"`.\n def self.foldcase(text : String) : String\n # The two-letter general category of a character: `\"Lu\"` for `A`, `\"Po\"`\n # for `!`, `\"Sm\"` for `+`; `\"Cn\"` for a code point no character is\n # assigned to.\n def self.general_category(char : Char) : String\n # How many grapheme clusters the string has: what a reader counts.\n def self.grapheme_size(text : String) : Int32\n # The string's extended grapheme clusters, as UAX #29 divides them: what\n # a reader sees as one character - `e` and a combining acute, a flag's\n # two regional indicators, a family emoji joined by ZWJs, a Devanagari\n # conjunct - is one string. A piece of ill-formed UTF-8 is a cluster of\n # its own, as the U+FFFD that stands for it would be.\n def self.graphemes(text : String) : Array(String)\n def initialize\n # Category L: Lu, Ll, Lt, Lm and Lo.\n def self.letter?(char : Char) : Bool\n # Category Ll.\n def self.lowercase?(char : Char) : Bool\n # Category M: Mn, Mc and Me — the combining marks.\n def self.mark?(char : Char) : Bool\n # The string in the given normalization form, NFC when none is named.\n def self.normalize(text : String, form : NormalizationForm = NormalizationForm::NFC) : String\n # Whether the string is already in the given form.\n def self.normalized?(text : String, form : NormalizationForm = NormalizationForm::NFC) : Bool\n # Category N: Nd, Nl and No — digits in every script, letter numbers, and\n # the fractions and superscripts.\n def self.number?(char : Char) : Bool\n # The code points a property names, as sorted `{from, to}` pairs that\n # neither overlap nor touch: a general category (`\"Lu\"`), a major class\n # by its letter (`\"L\"` is Lu, Ll, Lt, Lm and Lo; `\"C\"` is Cc, Cf, Cs and\n # Co, unassigned code points being in no category), or a script\n # (`\"Greek\"`). Nil for a name that is none of those. A class is built\n # from the ranges once rather than asking per character, which is what a\n # regex's `\\p{..}` needs: ranges it can negate and case-fold.\n def self.property_ranges(name : String) : Array(Int32) | ::Nil\n # The script a character is written in, as `Scripts.txt` names it:\n # `\"Latin\"`, `\"Greek\"`, `\"Han\"`, and `\"Common\"` for the digits and\n # punctuation every script shares; `\"Unknown\"` for a code point the file\n # does not list.\n def self.script(char : Char) : String\n # The titlecase of one character, the simple mapping: the uppercase, except\n # for the digraphs, where `dž` and `DŽ` both become `Dž`.\n def self.titlecase(char : Char, options : CaseOptions = CaseOptions::None) : Char\n # The full titlecase mapping, one character at a time: `ß` yields `S`, `s`.\n def self.titlecase(char : Char, options : CaseOptions = CaseOptions::None, & : (Char -> Nil)) : Nil\n # Category Lt: the digraphs whose first half is capital, `Dž` and `ᾈ`.\n def self.titlecase?(char : Char) : Bool\n # The uppercase of one character: the simple mapping, so `ß` stays `ß`\n # (its full mapping is two letters; the block form gives it).\n def self.upcase(char : Char, options : CaseOptions = CaseOptions::None) : Char\n # The full uppercase mapping, one character at a time: `ß` yields `S` twice,\n # `ʼn` yields `ʼ` and `N`.\n def self.upcase(char : Char, options : CaseOptions = CaseOptions::None, & : (Char -> Nil)) : Nil\n # The string in uppercase, full mappings: `\"straße\"` is `\"STRASSE\"`.\n # An ASCII-only string is the prelude's `upcase`, unless the Turkic rule\n # is on, which is a question about `i` itself.\n def self.upcase(text : String, options : CaseOptions = CaseOptions::None) : String\n # Category Lu.\n def self.uppercase?(char : Char) : Bool\n # Whether the string's bytes are well-formed UTF-8.\n def self.valid?(text : String) : Bool\n # Whether the bytes are well-formed UTF-8.\n def self.valid?(bytes : Array(UInt8)) : Bool\n # Category Z: Zs, Zl and Zp — the spaces and the line and paragraph\n # separators. Tab and newline are controls, not whitespace, here.\n def self.whitespace?(char : Char) : Bool\nend\n\nclass ::String\n def each_grapheme(&block : (String -> _)) : Nil\n def grapheme_size : Int32\n def graphemes : Array(String)\nend\n" }, + { + "name": "std/unit", + "path": "src/std/unit.iyi", + "sourceSha256": "c3aded0f16887a3d7de94a91fce8ff019d294242deb7109737e3d55ee4c0d578", + "surface": "module std/unit\n\n# A value that only one unit's tasks reach, one task at a time: the block\n# `Unit.new` runs makes it, and `g.spawn(in: u) { |value| }` runs a task of\n# `g` in its unit, handed it (the header above; SPEC.md III.4.18).\npub class Unit(T) < ::IyiGroup::Unit(T)\n protected def self.build(value : T) : Unit(T)\n # A `Unit` owning the value *block* makes. The block may capture only\n # `Share` values: it is the value's way in (`CleanupTransformer#check_share_boundary`).\n def self.new(&block : (-> U)) : Unit(U) forall U\nend\n" + }, { "name": "std/uri", "path": "src/std/uri.iyi", - "sourceSha256": "d8415c047bdcf59561a5bd1a38e4a8ac058dc0519d27c38b3f92e39b4493d7ba", + "sourceSha256": "f093947588f22b640e8bc34781462cda8acc92cb7fd377634ce483cfc3507257", "surface": "module std/uri\n\n# An ordered multi-value collection representing URI query parameters\n# or application/x-www-form-urlencoded form data.\npub struct Params\n # Returns the first value for *key*, or raises if not found.\n def [](key : String) : String\n # Sets the value for *key*, replacing all previous occurrences.\n def []=(key : String, value : String) : Nil\n # Returns the first value for *key*, or nil if not found.\n def []?(key : String) : String | ::Nil\n # Appends a key-value pair, preserving duplicate keys.\n def add(key : String, value : String) : Nil\n # Deletes all entries for *key*, returning the removed values or nil.\n def delete(key : String) : Array(String) | ::Nil\n # Iterates through each key-value pair.\n def each(& : (String, String -> Nil)) : Nil\n def empty? : Bool\n # Returns all values associated with *key*.\n def fetch_all(key : String) : Array(String)\n def has_key?(key : String) : Bool\n def initialize(keys : Array(String), values : Array(String))\n def initialize\n # Parses a query string into Params, decoding each name and value the\n # way the WHATWG URL standard reads `application/x-www-form-urlencoded`:\n # `+` is a space, `%XX` is the byte, and a `%` that does not start two\n # hex digits is itself. Pairs are separated by `&` and also by `;`, as\n # the other library separates them, where the standard and Python\n # 3.12's `parse_qsl` split at `&` alone: `a=1;b=2` is two pairs here and\n # one there.\n # Never a panic - the query is whatever a client sent, and `?q=100%`\n # is what browsers send for \"100%\". `URI.decode` stays strict: it is\n # asked of text a program made.\n def self.parse(query : String) : Params\n def size : Int32\n # Encodes parameters to application/x-www-form-urlencoded string.\n def to_s : String\nend\n\npub class URI\n # The userinfo is compared as written, as the path is: `u%3Btype%3Da` and\n # `u;type=a` are two URIs (RFC 3986 section 2.2).\n def ==(other : URI) : Bool\n def absolute? : Bool\n # *host* as DNS looks it up and an HTTP `Host` header carries it: a\n # registered name's escapes decoded, since RFC 3986 section 3.2.2 has\n # them stand for UTF-8, and the name carried by `IDNA.to_ascii`, so\n # `Bücher.example` and `b%C3%BCcher.example` are both\n # `xn--bcher-kva.example`. An IP literal in brackets and an empty host\n # (`file:///x`) are answered as they are. What `IDNA.to_ascii` refuses\n # is its `IdnaError`, and so is a malformed escape. `hostname` is not\n # this: it answers what the reference wrote.\n def self.ascii_host(host : String) : String | IdnaError\n # `userinfo@host:port`, the userinfo and the host written as stored.\n def authority : String | ::Nil\n def self.decode(str : String, plus_to_space : Bool = false) : String\n # Decodes `%XX` escapes (and `+` to a space when *plus_to_space*).\n # `decode?` answers nil and `decode` panics for a `%` not followed by\n # two hex digits; a multi-byte UTF-8 character encoded byte by byte\n # comes back as the character.\n def self.decode?(str : String, plus_to_space : Bool = false) : String | ::Nil\n # `+` a space and `%XX` a byte, any other `%` kept as it is: the form\n # reading `Params.parse` makes.\n protected def self.decode_form_lenient(str : String) : String\n def self.decode_www_form(str : String, plus_to_space : Bool = true) : String\n def self.decode_www_form?(str : String, plus_to_space : Bool = true) : String | ::Nil\n def self.default_port(scheme : String) : Int32 | ::Nil\n def dup : URI\n # Percent-encodes every byte that is neither unreserved nor reserved,\n # `%` among them: `\"%20\"` becomes `\"%2520\"`, and a space `\"%20\"` (or\n # `\"+\"` when *space_to_plus*, which then writes a `+` as `\"%2B\"`). Bytes\n # above ASCII are encoded one by one, so UTF-8 text round-trips through\n # `decode`.\n def self.encode(str : String, space_to_plus : Bool = false) : String\n # Encodes a path, keeping `/` between its segments.\n def self.encode_path(str : String) : String\n # Encodes one path segment: only unreserved bytes pass.\n def self.encode_path_segment(str : String) : String\n # Encodes a user or a password for the authority: unreserved bytes and\n # the sub-delims, which RFC 3986 section 3.2.1 lets userinfo hold, pass;\n # `:`, which separates the two, and `@`, which ends them, do not.\n def self.encode_userinfo(str : String) : String\n # Encodes a form field the application/x-www-form-urlencoded way: a\n # space is `+` unless *space_to_plus* is false, and only unreserved\n # bytes pass.\n def self.encode_www_form(str : String, space_to_plus : Bool = true) : String\n def fragment : String | ::Nil\n def fragment=(value : String | ::Nil) : String | ::Nil\n # Gen-delims: \":\" / \"/\" / \"?\" / \"#\" / \"[\" / \"]\" / \"@\"\n def self.gen_delim?(byte : UInt8) : Bool\n # Hashing follows `==` (below), the eight parts mixed as a tuple's members\n # are. Without it every URI hashed to its type, so `http://a/` and\n # `https://b:8/x?y#z` hashed alike and a table of 16,000 URI keys took\n # 11.3 s to fill where the same texts as strings took 4 ms.\n def hash : Int32\n def host : String | ::Nil\n # Stored as given: an IPv6 address is written with its brackets,\n # `\"[::1]\"`, the way it appears in a URI, and `hostname` takes them off.\n def host=(h : String | ::Nil) : Nil\n # The host without the brackets an IPv6 address carries.\n def hostname : String | ::Nil\n def initialize(scheme : String | ::Nil = nil, host : String | ::Nil = nil, port : Int32 | ::Nil = nil, path : String = \"\", query : String | ::Nil = nil, user : String | ::Nil = nil, password : String | ::Nil = nil, fragment : String | ::Nil = nil)\n def normalize : URI\n def normalize_in_place : URI\n # The host in lower case and its escapes' hex digits upper-case, the\n # two rules RFC 3986 section 6.2.2.1 gives: `downcase` alone wrote\n # `%C3%A9` as `%c3%a9`, the one spelling of the escape the section\n # normalizes away from.\n protected def self.normalized_host(host : String) : String\n def opaque? : Bool\n def self.parse(raw_url : String) : URI\n # Reads *raw_url* as a URI reference. `parse?` answers nil and `parse`\n # panics with the reason for: a space or control character anywhere\n # (`space at byte 11 in \"http://exa mple.com\"`), a `:` before the first\n # `/`, `?` or `#` whose prefix is not a scheme (`invalid scheme \"ht!tp\"\n # in ...`), a `[` in the host with no `]`, a host with a byte a host\n # cannot hold, and a port that is not decimal digits or is above 65535.\n # Percent escapes are not checked here; `decode` does that.\n def self.parse?(raw_url : String) : URI | ::Nil\n def password : String | ::Nil\n def password=(password : String | ::Nil) : Nil\n def path : String\n def path=(value : String) : String\n def port : Int32 | ::Nil\n def port=(value : Int32 | ::Nil) : Int32 | ::Nil\n def query : String | ::Nil\n def query=(value : String | ::Nil) : String | ::Nil\n def query_params : Params\n def query_params=(params : Params) : Nil\n def relative? : Bool\n # Linear in the path: the input buffer of section 5.2.4 is a cursor into\n # *path*, and each step moves it past what it took. Each step sliced the\n # rest of the path into a new string, so removing the dot segments took\n # time in the square of the path's length: 132 KB of `/a/./b/../c` took\n # 12.8 s in a release build, where splitting it at its slashes took 3 ms.\n def self.remove_dot_segments(path : String) : String\n # The dot segments of a relative reference's path taken out as resolving\n # it against any base would take them: a `..` that climbs past the\n # reference's own segments stays, since only the base knows what it\n # climbs out of, and a path that ends in a dot segment names a\n # directory, so `a/..` is `./`.\n protected def self.remove_relative_dot_segments(path : String) : String\n def self.reserved?(byte : UInt8) : Bool\n # Resolves *ref* against this URI as Base URI according to RFC 3986 section 5.2.\n def resolve(ref : URI | String) : URI\n def scheme : String | ::Nil\n def scheme=(value : String | ::Nil) : String | ::Nil\n # Sub-delims: \"!\" / \"$\" / \"&\" / \"'\" / \"(\" / \")\" / \"*\" / \"+\" / \",\" / \";\" / \"=\"\n def self.sub_delim?(byte : UInt8) : Bool\n def to_s : String\n # Unreserved characters: ALPHA / DIGIT / \"-\" / \".\" / \"_\" / \"~\"\n def self.unreserved?(byte : UInt8) : Bool\n def self.unwrap_ipv6(h : String) : String\n # The user and the password are kept as the reference wrote them, escapes\n # and all, and written back so: decoded by `parse` and re-encoded by\n # `authority`, `u%3Btype%3Da@h` came back `u;type=a@h`, which RFC 3986\n # section 2.2 counts a different URI, and `é` came back `%C3%A9`. The\n # getters decode; the setters and the constructor encode what they are\n # given with `encode_userinfo`.\n def user : String | ::Nil\n def user=(user : String | ::Nil) : Nil\n def userinfo : String | ::Nil\n def userinfo=(info : String | ::Nil) : Nil\n # The user and the password as written, taken as they are.\n protected def written_userinfo(user : String | ::Nil, password : String | ::Nil) : Nil\nend\n" }, { "name": "std/user", "path": "src/std/user.iyi", - "sourceSha256": "3b20fba44ba20dee1a7763d0b0cb249ac2066ca86c7c8612adfd9b458a226121", + "sourceSha256": "e70457afc5f210d7f51cc3aa3feeef404ce7de3f20d3c3016c8d9f80d30a44f4", "surface": "module std/user\n\n# A group: its name, its id, and the accounts listed as its members. A\n# user whose *primary* group this is need not be listed, and usually is\n# not: `User#group_ids` is the question that counts both.\npub struct Group\n # The group whose id is *id*, or nil when there is none or *id* is not a\n # group id; compared as a number, as `User.find_by_id` compares.\n def self.find_by_id(id : String) : Group | ::Nil\n # The group called *name*, or nil when there is none.\n def self.find_by_name(name : String) : Group | ::Nil\n # The group id: a decimal number on Linux and darwin.\n def id : String\n def initialize(name : String, id : String, members : Array(String))\n # The names listed in the group, in the order they are listed.\n def members : Array(String)\n # The group's name: `\"wheel\"`.\n def name : String\n # Every group in *text*, written as `/etc/group` is\n # (`name:password:gid:member,member`), in order, without the lines a\n # lookup skips.\n def self.parse(text : String) : Array(Group)\n # One `/etc/group` line, or nil for a line the lookups skip: blank, a\n # comment, fewer than four fields, a name empty or starting `+` or `-`,\n # or a gid that is not a number. The members are the rest of the line\n # split at commas, empty names dropped, as glibc's list parser drops\n # them.\n protected def self.parse_line(raw : String) : Group | ::Nil\nend\n\n# An account: what `/etc/passwd`, Directory Services or Windows hold for\n# one user.\npub struct User\n # The user this program runs as: the real user id's account. Panics\n # only when the system has no account for that id *and* `$USER` does\n # not name one.\n def self.current : User\n # The account whose user id is *id*, or nil when there is none or *id*\n # is not a user id. On Linux and darwin an id is compared as the number\n # it is: `\"0\"` and `\"00\"` are both root.\n def self.find_by_id(id : String) : User | ::Nil\n # The account called *name*, or nil when there is none.\n def self.find_by_name(name : String) : User | ::Nil\n # The GECOS field up to its first comma; `\"\"` where it is empty.\n def full_name : String\n # The id of the user's primary group, in the same form.\n def group_id : String\n # The ids of the groups out of *groups* this user is in, its primary\n # group first, each once: what `group_ids` answers on Linux, for a group\n # file the caller read and handed to `Group.parse`.\n def group_ids(groups : Array(Group)) : Array(String)\n # The ids of the groups this user is in: its primary group first, then\n # every other the system lists it in, each once.\n def group_ids : Array(String)\n # The home directory.\n def home : String\n # The user id: a decimal number on Linux and darwin, a SID on Windows.\n def id : String\n def initialize(name : String, id : String, group_id : String, full_name : String, home : String, shell : String)\n # The login name: `\"root\"`, `\"ada\"`.\n def name : String\n # Every account in *text*, written as `/etc/passwd` is\n # (`name:password:uid:gid:gecos:home:shell`), in the order it has them,\n # and without the lines a lookup skips: what the Linux lookups read, for\n # a file of the caller's - a container image's, a chroot's.\n def self.parse(text : String) : Array(User)\n # One `/etc/passwd` line, or nil for a line the lookups skip: blank, a\n # comment, fewer than seven fields, a name empty or starting `+` or `-`,\n # or a uid or gid that is not a number. The shell is the rest of the\n # line, colons and all, as glibc reads it.\n protected def self.parse_line(raw : String) : User | ::Nil\n # The login shell; `\"\"` where none is set, and on Windows.\n def shell : String\nend\n" }, { "name": "std/uuid", "path": "src/std/uuid.iyi", - "sourceSha256": "90b5221c32953ec5643c33b350bf248a7620ed6b22bf3e3100c73954c4088616", + "sourceSha256": "bedced8aadb031eea253d8f7e4f016e7a4a2db8c02df5652ce1726e31a1ebdf6", "surface": "module std/uuid\n\npub struct UUID\n def ==(other : UUID) : Bool\n def bytes : Array(UInt8)\n # Hashing follows `==`: the sixteen bytes, as an array of them hashes.\n # Without it every UUID hashed to its type, so the all-zero and the all-f\n # UUIDs hashed alike and a table of 16,000 UUID keys took 2.0 s to fill\n # where the same UUIDs as strings took 5 ms.\n def hash : Int32\n # The sixteen bytes are the UUID's own, copied in here and out of\n # `bytes`, as the other library's are a value: held as the caller's\n # array, a buffer reused for the next record changed every UUID made\n # from it (`b[0] = 255_u8` after `UUID.new(b)` turned `00000000-...`\n # into `ff000000-...`), and `u.bytes[1] = 255_u8` changed a UUID that\n # was already a hash key, which its table then could not find.\n def initialize(bytes : Array(UInt8))\n def self.parse(text : String) : UUID\n protected def stored : Array(UInt8)\n def to_s : String\n # Sixteen bytes from the operating system, six bits of them then set to\n # say version 4 and the RFC variant. Drawn from `Random.new`, they were\n # sixteen outputs of a fresh PCG generator: every UUID was a function of\n # the generator's 127 bits of state, and PCG makes no promise that its\n # outputs do not give that state away, where a version 4 UUID promises\n # 122 bits nobody can predict.\n def self.v4 : UUID\n # RFC 9562 version 7: 48 bits of Unix milliseconds, big-endian, then the\n # version, 12 bits of `rand_a`, the variant and 62 random bits.\n #\n # Two UUIDs from one millisecond would sort at random by their random\n # bits, so `rand_a` is a counter here (the RFC's \"fixed bit-length\n # dedicated counter\", section 6.2 method 1): a new millisecond starts it\n # at a random 11 bits, leaving at least 2,048 steps before it runs out,\n # and every UUID in the same millisecond, or one the clock stepped back\n # into, counts one up from the last. Past 4,095 the stamp moves on a\n # millisecond early, as the RFC allows. Each UUID this process makes\n # therefore sorts after the one before it, as bytes and as text; the\n # 62 bits after the counter are random every time, so two processes in\n # one millisecond still do not collide.\n def self.v7 : UUID\n def version : Int32\nend\n" }, { "name": "std/weak_ref", "path": "src/std/weak_ref.iyi", - "sourceSha256": "75f26c1e72e512019f06f38c193929a4de02dd7886025b8eac8e1c42dd443213", + "sourceSha256": "5f79666884bef80acad4d0a13c21f3584bdcab34f236055e4c14aa1d1b443f88", "surface": "module std/weak_ref\n\npub class WeakRef(T)\n def initialize(target : T)\n def inspect : String\n def to_s : String\n # The target, or nil once a collection has found nothing else holding it.\n def value : T | ::Nil\nend\n" }, { "name": "std/websocket", "path": "src/std/websocket.iyi", - "sourceSha256": "780c73af4a833c7b72347667509e1b21457471ae45f703d76430abda7cb786c6", + "sourceSha256": "32c22c408c7b00c5aaa55f7f28dd1aad70c575d787fbda9546f8d4d943ae2efb", "surface": "module std/websocket\n\n# One whole message: its bytes, and whether it came as text (UTF-8,\n# checked) or binary.\npub struct Message\n def binary? : Bool\n def data : String\n def initialize(data : String, binary : Bool)\n def text? : Bool\nend\n\n# The permessage-deflate (RFC 7692) a handshake agreed to: whether each\n# end starts every message it compresses with an empty window\n# (`*_no_context_takeover`), and how far back each end's matches may\n# reach, as a base-2 logarithm (`*_max_window_bits`, 15 where the answer\n# did not say). `server_` is what the server sends, `client_` what the\n# client sends. `level` is this end's own, not agreed: the DEFLATE level\n# its messages are compressed at, std/compress's 0 (stored) to 9, 1 by\n# default. A window outside 8 to 15, or a level outside 0 to 9, is a\n# panic.\npub struct PerMessageDeflate\n def client_max_window_bits : Int32\n def client_no_context_takeover : Bool\n def initialize(server_no_context_takeover : Bool = false, client_no_context_takeover : Bool = false, server_max_window_bits : Int32 = 15, client_max_window_bits : Int32 = 15, level : Int32 = 1)\n def level : Int32\n def server_max_window_bits : Int32\n def server_no_context_takeover : Bool\nend\n\n# One end of a connection whose handshake is done: what `upgrade` hands\n# its block and `connect` answers. `WebSocket.new(socket, leftover,\n# client)` takes over a socket some other code did the handshake on;\n# *leftover* is what arrived after the handshake's head, read first, and\n# *deflate* the permessage-deflate that handshake agreed to.\npub class WebSocket\n # The `Sec-WebSocket-Accept` that answers *key* (§4.2.2): the base64 of\n # the SHA-1 of the key and the GUID.\n def self.accept(key : String) : String\n # The protocol a server's 101 agreed to (nil for none), or why the\n # answer is not one to the handshake *key* offering *protocols* (§4.1).\n protected def self.agreed(up : Upgraded, key : String, protocols : Array(String)) : String | Nil | WebSocketError\n # The permessage-deflate a server's `Sec-WebSocket-Extensions`\n # (*value*) agreed to, nil for none, or why it is not an answer to an\n # offer of `permessage-deflate; client_max_window_bits` - or, without\n # *offered*, to no offer (RFC 7692 §5, §7). This end compresses at\n # *level*.\n protected def self.answered(value : String | ::Nil, offered : Bool, level : Int32) : PerMessageDeflate | Nil | WebSocketError\n # Past the spaces and tabs from *i*.\n protected def self.blanks(p : Pointer(UInt8), n : Int32, i : Int32) : Int32\n # The close handshake from this end: a close with *code* and *reason*,\n # then the peer's, read past whatever messages it sent first, for up\n # to ten seconds. Nil once it is done, or when the connection was\n # already closed.\n def close(code : Int32 = 1000, reason : String = \"\") : Nil | Cancelled | SocketError | WebSocketError\n # The code the connection closed with: the peer's close's (1005 when it\n # had none), the one this end failed it with, or 1006 when it ended\n # without a close. Nil while it is open.\n def close_code : Int32 | ::Nil\n # Whether *code* is one a close frame may carry (§7.4): 1000 to 1003,\n # 1007 to 1014 (1012 to 1014 as IANA's registry added them), and the\n # ranges for libraries and applications. 1004 is reserved, and 1005,\n # 1006 and 1015 are the codes an endpoint reports, never sends.\n def self.close_code?(code : Int32) : Bool\n protected def self.close_payload(code : Int32, reason : String) : String\n # The reason the peer's close carried; \"\" for none.\n def close_reason : String\n # Whether the connection is closed: after the close handshake, after a\n # failure, and after `close`.\n def closed? : Bool\n # The client's half: the handshake to a `ws://` URL, and the connection\n # it opens. *headers* go with the request (an `Origin`, a cookie); the\n # handshake's own are refused. *protocols* are offered in their order.\n # *proxy* is `HTTP.upgrade`'s: an `http://` proxy's URL, through whose\n # CONNECT tunnel the handshake goes, `ws://` and `wss://` alike; the\n # environment's is `HTTPProxy.from_env` of the URL with `http` for `ws`\n # and `https` for `wss`, the schemes whose variables it reads. With\n # *deflate* permessage-deflate is offered, and messages are compressed\n # at *deflate_level*.\n def self.connect(url : String, headers : Hash(String, String) = {} of String => String, protocols : Array(String) = [] of String, max_message : Int32 = MAX_MESSAGE, proxy : String | ::Nil = nil, deflate : Bool = true, deflate_level : Int32 = 1) : WebSocket | Cancelled | SocketError | HTTPError | WebSocketError\n # The permessage-deflate agreed; nil for none.\n def deflate : PerMessageDeflate | ::Nil\n # What a permessage-deflate offer's or answer's *params* say (RFC 7692\n # §7.1), or why they are not what one may say: each of the four at most\n # once, the two `no_context_takeover`s without a value, the two\n # `max_window_bits` with 8 to 15 in decimal - and `client_max_window_bits`\n # without one in an offer, as a client says it can be held to one.\n protected def self.deflate_terms(params : Array(::Tuple(String, String | ::Nil)), answer : Bool) : DeflateTerms | String\n # *value* as a list of extensions (RFC 6455 §9.1): each a token, with\n # parameters after `;`, a parameter's value a token or a quoted string\n # that is one once unescaped. Why it is not one, otherwise.\n protected def self.extensions(value : String) : Array(Extension) | String\n def initialize(socket : IyiSocket | TlsStream, leftover : String, client : Bool, protocol : String | ::Nil = nil, max_message : Int32 = MAX_MESSAGE, deflate : PerMessageDeflate | ::Nil = nil)\n # Whether *key* is what §4.1 has a client send: 16 bytes in base64,\n # which is 22 characters of the alphabet and `==`.\n protected def self.key?(key : String) : Bool\n # *count* bytes at *p* XORed with *key*'s four bytes in turn, from the\n # first (§5.3): eight bytes a time, then one.\n protected def self.mask(p : Pointer(UInt8), count : Int32, key : UInt32) : Nil\n # A ping, which the peer answers with a pong `receive` reads past.\n def ping(data : String = \"\") : Nil | Cancelled | SocketError | WebSocketError\n def protocol : String | ::Nil\n # The next whole message, or nil when the connection is closed: the\n # close handshake is done, or the connection was already closed.\n def receive : Message | Nil | Cancelled | SocketError | WebSocketError\n # Why *req* is not a handshake this server answers 101, as the answer;\n # nil when it is one.\n protected def self.refusal(req : Request) : Response | ::Nil\n # *text* as one text message. It must be UTF-8.\n def send(text : String) : Nil | Cancelled | SocketError | WebSocketError\n # *data* as one binary message.\n def send_binary(data : String) : Nil | Cancelled | SocketError | WebSocketError\n # The server's half of the handshake, answering *req*: a 101 whose\n # block is handed the connection, or the 400 or 426 that says why the\n # request is not a handshake this server takes. *protocols* are the\n # subprotocols the server speaks, in its order of preference. With\n # *deflate* the first permessage-deflate offer this end can keep is\n # accepted, and messages are compressed at *deflate_level*.\n def self.upgrade(req : Request, protocols : Array(String) = [] of String, max_message : Int32 = MAX_MESSAGE, deflate : Bool = true, deflate_level : Int32 = 1, &handler : (WebSocket -> Nil)) : Response\n # The UTF-8 check's state after the *count* bytes at *p*, from *state*:\n # 0 between characters; the continuation bytes still owed and the range\n # the next must fall in (§3 of RFC 3629: no overlong forms, no\n # surrogates, nothing past U+10FFFF) packed into one number otherwise;\n # -1 once a byte is wrong. A text message is whole when it ends at 0.\n protected def self.utf8_scan(p : Pointer(UInt8), count : Int32, state : Int32) : Int32\n # 8 to 15 for those numbers written in decimal, without a leading zero;\n # 0 for anything else.\n protected def self.window_bits(value : String) : Int32\n # The end of the word from *i*: up to a blank or one of `,;=\"`.\n protected def self.word(p : Pointer(UInt8), n : Int32, i : Int32) : Int32\nend\n\n# What the other end did that RFC 6455 does not allow, or a handshake\n# that is not one, as a value: `reason` is the sentence, `code` the close\n# code it stands for (1002 a protocol error, 1007 bytes that are not\n# UTF-8, 1009 a message too large, 1006 a connection that ended without\n# a close). `message` says it is WebSocket's.\npub struct WebSocketError\n def code : Int32\n def initialize(reason : String, code : Int32 = 1002)\n def reason : String\n def to_s : String\nend\n\nimpl Error for WebSocketError\n def message : String\nend\n" }, { "name": "std/x509", "path": "src/std/x509.iyi", - "sourceSha256": "d89cff9466a3354bf762ce60c9b11e255204257436a4028892ce12bcd1a46e72", + "sourceSha256": "aa88b37fe0e2e70bb4bdbf95b3fee4b0e05ce2e70f9f012876522d3247213d77", "surface": "module std/x509\n\n# A class, not a struct, for the stack's sake. Thirty-odd fields make 472\n# bytes, and a struct is copied whole into every array slot, block\n# argument and union it passes through. In a debug build each copy is a\n# stack slot of its own, and a TLS handshake inside a task ran out of\n# its 256 KiB (issue #130). Measured on Linux x86_64, a struct made\n# `Certificate.parse`'s frame 31,832 bytes (each `!` and early return\n# makes a `Certificate | X509Error`), `X509.grow`'s 13,640 and\n# `issuer_error`'s 6,184; a class makes them 5,224, 296 and 368. With\n# `EcdsaP256.check` split as well (std/ecdsa), `X509.verify` of a\n# two-certificate P-256 chain in a task went from 35,608 bytes of stack\n# to 11,768. Nothing in a certificate is written after `parse`, so\n# sharing one is not observable, and two are equal when they are the\n# same DER, as two structs were when every field was.\npub class Certificate\n # The same certificate: the same DER, from which every field is read.\n def ==(other : Certificate) : Bool\n def authority_key_id : Array(UInt8) | ::Nil\n # basicConstraints: whether it was present, cA, and pathLenConstraint.\n def basic_constraints : Bool\n def ca : Bool\n # subjectAltName's dNSName and iPAddress entries.\n def dns_names : Array(String)\n def excluded_dns : Array(String)\n def excluded_ips : Array(Array(UInt8))\n # extKeyUsage's OIDs; nil when the extension is absent.\n def extended_key_usage : Array(String) | ::Nil\n # Every CERTIFICATE block in a PEM text, read; the first one that is not\n # a certificate is the answer.\n def self.from_pem(text : String) : Array(Certificate) | X509Error\n def hash : Int32\n def initialize(raw : Array(UInt8), tbs : Array(UInt8), version : Int32, serial : Array(UInt8), issuer : Array(UInt8), subject : Array(UInt8), subject_name : String, issuer_name : String, not_before : Time, not_after : Time, public_key : RsaPublicKey | EcdsaPublicKey | Ed25519PublicKey, signature_algorithm : String, signature_parameters : DerValue | ::Nil, signature : Array(UInt8), public_key_bits : Array(UInt8), extensions : X509Extensions)\n def ip_addresses : Array(Array(UInt8))\n # Issuer and subject as their DER: two names are the same name when\n # these are the same bytes.\n def issuer : Array(UInt8)\n def issuer_name : String\n # keyUsage's bits, bit 0 digitalSignature to bit 8 decipherOnly; nil\n # when the extension is absent.\n def key_usage : Int32 | ::Nil\n # Whether *host* is a name this certificate is for: a DNS name or an IP\n # address in its subjectAltName (see the module's header).\n def matches_host?(host : String) : Bool\n # Whether the TLS Feature extension (RFC 7633) asks for status_request:\n # a certificate that must be shown with a stapled OCSP response.\n def must_staple? : Bool\n def not_after : Time\n def not_before : Time\n # Whether id-pkix-ocsp-nocheck is here (RFC 6960 section 4.2.2.2.1): an\n # OCSP responder's certificate saying its own status is not asked.\n def ocsp_nocheck : Bool\n def other_constraints : Bool\n # The certificate *der* holds (RFC 5280 section 4.1).\n def self.parse(der : Array(UInt8)) : Certificate | X509Error\n def path_length : Int32 | ::Nil\n # The DER of every CERTIFICATE block in a PEM text, unread: a store\n # can keep what it can read and count the rest.\n def self.pem_blocks(text : String) : Array(Array(UInt8)) | X509Error\n # nameConstraints: DNS names and IP ranges (address and mask), and\n # whether a constraint of any other kind is there.\n def permitted_dns : Array(String)\n def permitted_ips : Array(Array(UInt8))\n def public_key : RsaPublicKey | EcdsaPublicKey | Ed25519PublicKey\n # The subjectPublicKey BIT STRING's bytes, as written: what an OCSP\n # CertID's issuerKeyHash and a responder's byKey are hashes of (RFC\n # 6960 section 4.1.1).\n def public_key_bits : Array(UInt8)\n # The whole certificate as it was read, and its signed part.\n def raw : Array(UInt8)\n # The serial number's two's-complement bytes, as written.\n def serial : Array(UInt8)\n def signature : Array(UInt8)\n # The signature algorithm's OID, and the signature.\n def signature_algorithm : String\n # Why *issuer*'s key did not make this certificate's signature, or nil.\n def signature_error(issuer : Certificate) : String | ::Nil\n # Whether *issuer*'s key made this certificate's signature.\n def signed_by?(issuer : Certificate) : Bool\n def subject : Array(UInt8)\n def subject_key_id : Array(UInt8) | ::Nil\n # The subject and issuer written out for a person, `CN=..., O=...`.\n def subject_name : String\n def tbs : Array(UInt8)\n # The TLS Feature extension's features (RFC 7633), nil when absent:\n # 5, status_request, is \"must staple\".\n def tls_features : Array(Int32) | ::Nil\n # Critical extensions this does not understand, by OID.\n def unhandled_critical : Array(String)\n def valid_at?(time : Time) : Bool\n def version : Int32\nend\n\n# A private key that signs what this module writes - a certificate for\n# itself, a certificate request - and, through std/acme, an ACME account's\n# requests: P-256 or P-384 (std/p256, std/p384), RSA (std/rsa, 2048 bits\n# or more) or Ed25519 (std/curve25519), each signing in constant time.\n# The signature is the one X.509 carries: ECDSA's the DER of\n# Ecdsa-Sig-Value under SHA-256 on P-256 and SHA-384 on P-384, RSA's PKCS\n# #1 v1.5 under SHA-256, Ed25519's its 64 bytes.\npub struct SigningKey\n # The AlgorithmIdentifier of what `sign` makes: ecdsa-with-SHA256 or\n # -SHA384 without parameters (RFC 5758), sha256WithRSAEncryption with\n # its NULL (RFC 4055), id-Ed25519 without parameters (RFC 8410).\n def algorithm_identifier : Array(UInt8)\n # The Ed25519 key whose 32-byte seed (RFC 8032's private key) is *seed*.\n def self.ed25519(seed : Array(UInt8)) : SigningKey | X509Error\n # The key in *text*'s one PRIVATE KEY block (PKCS #8: P-256, P-384, RSA\n # or Ed25519), EC PRIVATE KEY block (SEC 1, P-256 or P-384) or RSA\n # PRIVATE KEY block (PKCS #1).\n def self.from_pem(text : String) : SigningKey | X509Error\n def initialize(p256 : P256PrivateKey | ::Nil, p384 : P384PrivateKey | ::Nil, rsa : RsaPrivateKey | ::Nil, seed : Array(UInt8) | ::Nil)\n # What the key is, for a person: `P-256`, `P-384`, `RSA-2048`, `Ed25519`.\n def kind : String\n def self.new(key : P256PrivateKey) : SigningKey\n def self.new(key : P384PrivateKey) : SigningKey\n def self.new(key : RsaPrivateKey) : SigningKey\n def p256 : P256PrivateKey | ::Nil\n # A new P-256 key, from the system's entropy (std/random's `Secure`).\n # The 32 bytes it is made from are drawn again in the 2^-32 chance that\n # they are not below the group's order.\n def self.p256 : SigningKey\n def p384 : P384PrivateKey | ::Nil\n # A new P-384 key, as `p256` makes one.\n def self.p384 : SigningKey\n def public_key : RsaPublicKey | EcdsaPublicKey | Ed25519PublicKey\n # The key's SubjectPublicKeyInfo (RFC 5280 section 4.1.2.7): RFC 5480's\n # for P-256 and P-384, RFC 8017's rsaEncryption with its NULL, RFC 8410's\n # for Ed25519.\n def public_key_info : Array(UInt8)\n def rsa : RsaPrivateKey | ::Nil\n # *data* signed as `algorithm_identifier` says.\n def sign(data : Array(UInt8)) : Array(UInt8)\nend\n\npub struct X509\n def initialize\n # The DER of every block labelled *label* in a PEM text - `\"CERTIFICATE\"`\n # or `\"PRIVATE KEY\"` - each checked to be base64 before it is decoded.\n def self.pem(text : String, label : String) : Array(Array(UInt8)) | X509Error\n # A certificate request (PKCS #10, RFC 2986) *key* signs, as its DER: the\n # subject CN= when it fits the 64 characters RFC 5280\n # gives a common name and empty otherwise, the key, and an\n # extensionRequest attribute (RFC 2985 section 5.4.2) asking for\n # subjectAltName with *names* as dNSNames - which is what an ACME server\n # issues for (RFC 8555 section 7.4).\n def self.request(key : SigningKey, names : Array(String)) : Array(UInt8) | X509Error\n # A certificate *key* signs for itself (RFC 5280 section 4.1), as its\n # DER: version 3, *serial* (sixteen random bytes when nil), the subject\n # and issuer both CN=, valid from *not_before* to\n # *not_after*, and the extensions - subjectAltName with *names* as\n # dNSNames, then *extensions* in order. No basicConstraints and no\n # keyUsage: what this writes is a certificate shown for a name, as RFC\n # 8737's tls-alpn-01 shows one, not a CA's.\n #\n # A first name longer than `MAX_COMMON_NAME` is refused, not cut or left\n # out of the subject: a common name holds 64 characters at most, and a\n # subject without one would be empty, which a self-signed certificate's\n # issuer - the same name - must not be (section 4.1.2.4). `request`,\n # whose subject is no issuer, leaves the CN out instead. *serial* is the\n # big-endian magnitude of a positive number: refused when it is zero or\n # when its INTEGER, a sign byte put before a top bit that is set, runs\n # past `MAX_SERIAL_OCTETS` (section 4.1.2.2). The sixteen bytes drawn\n # when it is nil write 17 octets at most and are drawn again in the\n # 2^-128 chance they are all zero.\n def self.self_signed(key : SigningKey, names : Array(String), not_before : Time, not_after : Time, serial : Array(UInt8) | ::Nil = nil, extensions : Array(X509Extension) = [] of X509Extension) : Array(UInt8) | X509Error\n # Why *key*, *signer*'s, did not make *signature* over *signed* under\n # *algorithm* (an OID) and its *parameters*, or nil; *what* names what\n # was signed, for the sentence. A certificate's signature is checked\n # here, and an OCSP response's (std/ocsp).\n def self.signature_error(key : RsaPublicKey | EcdsaPublicKey | Ed25519PublicKey, algorithm : String, parameters : DerValue | ::Nil, signed : Array(UInt8), signature : Array(UInt8), what : String, signer : String) : String | ::Nil\n # The chain from *leaf* to one of *roots*, through *intermediates*, for\n # *host* (nil: any) at *now* - leaf first, root last - or why there is\n # none. *purpose* is what the leaf is for: a server's certificate\n # (serverAuth, the default) or a client's (clientAuth), each certificate\n # that carries extKeyUsage allowing it. See the module's header for what\n # else is checked.\n def self.verify(leaf : Certificate, intermediates : Array(Certificate), roots : Array(Certificate), host : String | ::Nil = nil, now : Time = Time.utc, purpose : X509Purpose = X509Purpose::Server) : Array(Certificate) | X509Error\n # Why *certificate*'s RSA key is under `MIN_RSA_BITS`, or nil.\n def self.weak_key_error(certificate : Certificate) : String | ::Nil\nend\n\n# What reading a certificate, or checking a chain, answers when it fails.\npub struct X509Error\n def initialize(message : String)\n def to_s : String\nend\n\n# An extension a certificate this module writes carries beside its\n# subjectAltName: its OID, whether it is critical, and *value*, the DER\n# that extnValue's OCTET STRING holds.\npub struct X509Extension\n def critical : Bool\n def initialize(oid : String, critical : Bool, value : Array(UInt8))\n def oid : String\n def value : Array(UInt8)\nend\n\n# What a chain is checked for: a TLS server's certificate or a client's\n# (RFC 5280 section 4.2.1.12's id-kp-serverAuth and id-kp-clientAuth).\npub enum X509Purpose : Int32\n Server = 0\n Client = 1\n def holder : String\n def oid : String\n # The usage's name, as a sentence says it.\n def usage : String\nend\n\nimpl Error for X509Error\n def message : String\nend\n" }, { "name": "std/xml", "path": "src/std/xml.iyi", - "sourceSha256": "6fdf39af96bdfa592c1d23a305fe7f2c55c614ec7794ab3faced35e8306aa95c", + "sourceSha256": "bce598b344c6c8c14d7afd35de25269668ed0f248004a2cd5cc3d823e7cebc65", "surface": "module std/xml\n\n# *text* as character data: `&`, `<`, `>` and `\\r` become references,\n# every other byte is copied as it is. With *ascii*, a character past U+007F\n# becomes a decimal reference as well, for a document declared US-ASCII.\npub def escape(text : String, ascii : Bool = false) : String\n\n# *text* for inside a double-quoted attribute value: `\"` and a literal tab\n# or newline become references as well, so the value reads back unchanged.\n# *ascii* is as for `escape`.\npub def escape_attribute(text : String, ascii : Bool = false) : String\n\npub def parse(xml : String, max_depth : Int32 = 256, max_entity_expansions : Int32 = 1000) : Document\n\npub def parse?(xml : String, max_depth : Int32 = 256, max_entity_expansions : Int32 = 1000) : Document | ::Nil\n\npub def unescape(text : String) : String\n\n# The five predefined entities and character references decoded, the same\n# way and with the same refusals as inside a document; nil where `unescape`\n# panics.\npub def unescape?(text : String) : String | ::Nil\n\n# Whether *cp* is a character XML 1.0 allows in a document (production [2]).\npub def xml_char?(cp : Int32) : Bool\n\npub struct Attribute\n def initialize(name : String, value : String, namespace_uri : String = \"\")\n def local_name : String\n def name : String\n # The namespace the prefix was bound to; \"\" for an unprefixed attribute,\n # which has no namespace, not even the default one.\n def namespace_uri : String\n def prefix : String\n # With *ascii*, as `Namespace#to_s`.\n def to_s(ascii : Bool = false) : String\n def value : String\nend\n\npub class Document < Node\n def encoding : String\n def encoding=(value : String) : String\n # The attributes the internal DTD subset declares of type ID, by element\n # name: what XPath's `id()` finds an element by, beside `xml:id`. The\n # rest of the DTD is not kept.\n def id_attributes : Hash(String, Array(String))\n # The attributes the internal DTD subset declares of type ID, by element\n # name: what XPath's `id()` finds an element by, beside `xml:id`. The\n # rest of the DTD is not kept.\n def id_attributes=(value : Hash(String, Array(String))) : Hash(String, Array(String))\n def initialize(version : String = \"1.0\", encoding : String = \"UTF-8\", standalone : Bool | ::Nil = nil)\n def root : Node\n def root? : Node | ::Nil\n def standalone : Bool | ::Nil\n def standalone=(value : Bool | ::Nil) : Bool | ::Nil\n # The declaration and the document's own children are checked as the\n # reader checks them: the declaration first, the shape after each node's\n # own refusals. `version` and `encoding` were written between quotes as\n # they were, so an encoding holding a `\"` closed the declaration and wrote\n # markup of its own (`Document.new(encoding: \"x\\\" standalone=\\\"maybe\")`),\n # and a version that is not `1.` and digits or an encoding this module\n # does not read (`ISO-8859-1`) made a document its parser refuses. So did\n # a second root element, none, text that is not white space, or a CDATA\n # section beside the root.\n def to_xml : String\n def version : String\n def version=(value : String) : String\nend\n\npub struct Namespace\n def default? : Bool\n def initialize(prefix : String, uri : String)\n def prefix : String\n # With *ascii*, a character past U+007F in the uri is written as a\n # character reference, for a document declared US-ASCII.\n def to_s(ascii : Bool = false) : String\n def uri : String\nend\n\npub class Node\n # The same node, by identity. It compared `id`s, and a `Document` counts\n # its own: the first `Document.new` and the first `Node.new_element`\n # were both 1, so the two were `==`, and `add_child`'s question \"is this\n # node one of my ancestors\" would answer yes for a stranger.\n def ==(other : Node) : Bool\n def [](name : String) : String\n def []?(name : String) : String | ::Nil\n # Moves *child* here, as the last child: a node is in one place in a\n # tree. It stayed among its old parent's children as well, so a node\n # moved from `` to `` was written under both and an attribute set\n # on it showed in both places; and a node added under itself or under one\n # of its own descendants made a loop that `to_xml` followed until the\n # stack ran out. That is refused, and so is a document as a child.\n def add_child(child : Node) : Node\n # The parser's own append: the child was just made, under this node, and\n # is in no list yet.\n protected def append_parsed(child : Node) : Node\n # The value of the attribute with exactly this name (`\"x:attr\"` is not\n # `\"attr\"`), or nil.\n def attribute(name : String) : String | ::Nil\n def attributes : Array(Attribute)\n def attributes=(value : Array(Attribute)) : Array(Attribute)\n # What `to_xml` refuses to write (see `serialize_node`): a name that is\n # not an XML name, and a character XML cannot hold raw or as a reference.\n protected def self.check_writable_name(name : String, what : String) : Nil\n protected def self.check_writable_text(text : String) : Nil\n def children : Array(Node)\n def children=(value : Array(Node)) : Array(Node)\n protected def collect_find_all(name : String, res : Array(Node)) : Nil\n protected def collect_text_into(parts : Array(String)) : Nil\n # A text, CDATA, comment or PI node's own text; for an element or a\n # document, the text and CDATA of every descendant, joined.\n def content : String\n def element_children : Array(Node)\n # The first descendant element whose name or local name is *name*.\n def find(name : String) : Node | ::Nil\n # Every descendant element whose name or local name is *name*, in document\n # order.\n def find_all(name : String) : Array(Node)\n def first_child : Node | ::Nil\n def first_element_child : Node | ::Nil\n # The first character past U+007F in *text*, decoded, or -1.\n protected def self.first_non_ascii(text : String) : Int32\n def has_attribute?(name : String) : Bool\n def id : Int32\n def initialize(node_type : NodeType, name : String = \"\", content : String = \"\")\n def inner_xml : String\n def last_child : Node | ::Nil\n def local_name : String\n def local_name=(value : String) : String\n def name : String\n def name=(value : String) : String\n # The namespace this element's name is in: the one its prefix is bound to,\n # or the default namespace in scope, or nil.\n def namespace : Namespace | ::Nil\n def namespace_uri : String\n def namespaces : Array(Namespace)\n def namespaces=(value : Array(Namespace)) : Array(Namespace)\n def self.new_cdata(content : String) : Node\n def self.new_comment(content : String) : Node\n def self.new_element(name : String) : Node\n def self.new_pi(target : String, content : String) : Node\n def self.new_text(content : String) : Node\n def node_type : NodeType\n def node_type=(value : NodeType) : NodeType\n def parent : Node | ::Nil\n def parent=(value : Node | ::Nil) : Node | ::Nil\n # Where this element is, as `/root/item[2]/name[1]`: each step counts\n # same-named element siblings from 1.\n def path : String\n def prefix : String\n def prefix=(value : String) : String\n # `xmlns=\"\"` undeclares the default namespace, so a declaration with an\n # empty uri answers nil rather than being passed over.\n def resolve_default_namespace : Namespace | ::Nil\n def resolve_namespace_prefix(prefix : String) : Namespace | ::Nil\n # The root element of the tree this node is in.\n def root : Node\n # With *ascii* (a document declared US-ASCII), a character past U+007F in\n # text or an attribute value is written as a character reference: written\n # as its UTF-8 bytes, it made a document no other parser reads. A name, a\n # comment and a processing instruction have no references, so one holding\n # such a character is refused; it was written as UTF-8, and this module's\n # own parser refused the result (\"byte 0xC3 is not US-ASCII, the declared\n # encoding\").\n #\n # A name that is not an XML name, and a character XML cannot hold at all\n # (a C0 control but tab, newline and carriage return; U+FFFE, U+FFFF; a\n # byte that is not UTF-8), are refused here: both were written as they\n # were, so `set_attribute(\"k=\\\"1\\\" j\", \"2\")` wrote two attributes and a\n # \"\\u0001\" in text a document no parser reads. A parsed tree holds\n # neither.\n protected def serialize_node(buf : Array(String), ascii : Bool = false) : Nil\n # Sets or replaces the attribute; a prefixed name takes the namespace its\n # prefix is bound to here, \"\" where none is declared.\n def set_attribute(name : String, value : String) : Attribute\n def text : String\n # For a text, CDATA, comment or PI node, its own text; for an element, its\n # children are replaced by one text node with *value*.\n def text=(value : String) : Nil\n def to_s : String\n def to_xml : String\n # Nothing but XML's white space: space, tab, newline, carriage return.\n protected def self.xml_blank?(text : String) : Bool\n # XPath 1.0 (see `XPath`) with this node as the context node: the value\n # the expression is, of whichever type. *namespaces* binds the prefixes\n # the expression uses (a prefix not in it is looked up where it is\n # declared at this node); *variables* gives `$name` its value. Each call\n # compiles *expression*; `XPath.parse` once and `evaluate` many times\n # for a loop.\n def xpath(expression : String, namespaces : Hash(String, String) | ::Nil = nil, variables : Hash(String, XPathValue) | ::Nil = nil) : XPathValue\n def xpath_bool(expression : String, namespaces : Hash(String, String) | ::Nil = nil, variables : Hash(String, XPathValue) | ::Nil = nil) : Bool\n def xpath_float(expression : String, namespaces : Hash(String, String) | ::Nil = nil, variables : Hash(String, XPathValue) | ::Nil = nil) : Float64\n # The first node of that node-set in document order, or nil.\n def xpath_node(expression : String, namespaces : Hash(String, String) | ::Nil = nil, variables : Hash(String, XPathValue) | ::Nil = nil) : XPathNode | ::Nil\n # The node-set *expression* is, in document order; panics when it is a\n # number, a string or a boolean.\n def xpath_nodes(expression : String, namespaces : Hash(String, String) | ::Nil = nil, variables : Hash(String, XPathValue) | ::Nil = nil) : Array(XPathNode)\n # The value converted as `string()`, `number()` and `boolean()` convert.\n def xpath_string(expression : String, namespaces : Hash(String, String) | ::Nil = nil, variables : Hash(String, XPathValue) | ::Nil = nil) : String\nend\n\npub enum NodeType : Int32\n Element = 0\n Text = 1\n CData = 2\n Comment = 3\n ProcessingInstruction = 4\n Document = 5\n def cdata? : Bool\n def pi? : Bool\nend\n\n# The parser keeps the first thing that went wrong in `error` and, once\n# something has, runs its cursor to the end so every loop above it unwinds:\n# `parse?` then answers nil and `parse` panics with that sentence.\npub class Parser\n # An entity's replacement text in an attribute value: a tab, newline or\n # carriage return in it is a space, as one written in the value is. One\n # that a character reference in the replacement text names is not.\n protected def self.attribute_spaces(text : String) : String\n # A value whose declared type is not CDATA, normalised further (XML 1.0,\n # 3.3.3): the spaces at either end dropped and each run of them made one.\n # Only U+0020 counts; a tab a character reference wrote stays. Values\n # were kept as written: `x=\" p q \"` of an NMTOKENS `x` read as is.\n protected def self.collapse_spaces(value : String) : String\n # The sentence the last parse failed with, or \"\" when it did not.\n def error : String\n # Where the first byte at or after *from* that does not begin an XML\n # character is, with the sentence it is refused with; -1 and \"\" when there\n # is none. Only a C0 control is caught where the text is read, so without\n # this a byte that is not UTF-8, an encoded surrogate, U+FFFE and U+FFFF\n # were read and written back, while their character references were\n # refused. With *ascii*, any byte past 0x7F is one.\n protected def self.first_bad_character(input : String, from : Int32, ascii : Bool) : Tuple(Int32, String)\n protected def self.hex4(value : Int32) : String\n def initialize(input : String, max_depth : Int32 = 256, max_expansions : Int32 = 1000)\n # Production [4a]: digits, `-`, `.`, U+00B7, the combining marks\n # U+0300-036F and U+203F-2040 continue a name without starting one.\n protected def self.name_char?(cp : Int32) : Bool\n # Whether all of *text* is one name.\n protected def self.name_shaped?(text : String) : Bool\n # XML 1.0 (fifth edition), production [4]: the characters that start a\n # name, by code point. Any byte past 0x7F was taken as starting and\n # continuing one, so `` read as an element named \"a×b\", a no-break\n # space after a name became part of it, and `<·a/>` was an element.\n protected def self.name_start?(cp : Int32) : Bool\n # `\\r\\n` and a lone `\\r` both mean `\\n` (XML 1.0, 2.11).\n protected def self.normalize_line_ends(input : String) : String\n def parse : Document\n def parse? : Document | ::Nil\n # Production [13]: space, newline, ASCII letters and digits, and\n # -'()+,./:=?;!*#@$_%\n protected def self.public_id_byte?(b : UInt8) : Bool\n # One or more digits, a dot, then digits: the version numbers the other\n # library reads (`1.0`, `1.1`, `1.`).\n protected def self.version_number?(value : String) : Bool\nend\n\n# An XPath 1.0 expression, compiled once and evaluated against any node.\n#\n# All of XPath 1.0 (W3C, 1999): the thirteen axes and the abbreviations\n# (`//`, `.`, `..`, `@`), name tests with prefixes, the node-type tests,\n# predicates by position and by value, filter expressions, `|`, the\n# operators with their conversions (section 3.4's comparisons of node-sets\n# included), variables, and the 27 functions of the core library.\n#\n# A prefix in a name test is looked up in *namespaces*, and when it is not\n# there, in the declarations in scope at the node the expression is\n# evaluated against; `xml` is always bound. An unprefixed name is in no\n# namespace even where a default namespace is declared, as section 2.3\n# says: `` is `a:feed` with `{\"a\" => \"urn:a\"}`, never\n# `feed`.\n#\n# Where libxml2 - the engine under the other library's XPath - departs\n# from the recommendation, this follows the recommendation:\n# * a number becomes the fewest digits that read back as it, written\n# out in full: `string(1 div 3)` is `0.3333333333333333` and\n# `string(-0.0000001)` is `-0.0000001`, where libxml2 writes fifteen\n# digits and `-1e-07`;\n# * a number in an expression is digits and one point: `1e0` is refused;\n# * an attribute's following axis holds its element's descendants,\n# which come after the attribute in document order;\n# * `xmlns=\"\"` leaves no namespace node for the default namespace;\n# * an empty CDATA section is no text node (section 5.7);\n# * `id()` splits its argument on white space wherever it is: libxml2\n# finds nothing for `id(' a')`;\n# * `.//.` (or `/.//.`) as the whole expression holds the context node\n# itself; libxml2 2.9, which darwin carries, leaves it out.\n#\n# `parse` panics on a malformed expression with what was expected and the\n# column; `parse?` answers nil. Evaluation panics on what only a value can\n# show: a function given a number where it takes a node-set, a variable\n# not given, a prefix bound nowhere.\npub class XPath\n # The minimum and maximum argument count of each core function; nil for\n # a name that is not one.\n protected def self.arity(name : String) : Tuple(Int32, Int32) | ::Nil\n def bool(node : Node | XPathNode, namespaces : Hash(String, String) | ::Nil = nil, variables : Hash(String, XPathValue) | ::Nil = nil) : Bool\n # The value at *node*, which is the context node, at position 1 of 1.\n def evaluate(node : Node, namespaces : Hash(String, String) | ::Nil = nil, variables : Hash(String, XPathValue) | ::Nil = nil) : XPathValue\n def evaluate(node : XPathNode, namespaces : Hash(String, String) | ::Nil = nil, variables : Hash(String, XPathValue) | ::Nil = nil) : XPathValue\n def initialize(source : String, expression : XPathExpression, prefixes : Array(String))\n # The node-set the expression is; panics when it is another type.\n def nodes(node : Node | XPathNode, namespaces : Hash(String, String) | ::Nil = nil, variables : Hash(String, XPathValue) | ::Nil = nil) : Array(XPathNode)\n def number(node : Node | XPathNode, namespaces : Hash(String, String) | ::Nil = nil, variables : Hash(String, XPathValue) | ::Nil = nil) : Float64\n # A number as a string (section 4.2): NaN, Infinity, an integer without a\n # point, and otherwise the fewest digits that read back as the number,\n # never with an exponent; both zeros are `0`.\n def self.number_string(value : Float64) : String\n def self.parse(source : String) : XPath\n def self.parse?(source : String) : XPath | ::Nil\n # `round()` (section 4.4): the nearest integer, a tie to the one toward\n # positive infinity, with the sign of a zero kept: `round(-0.5)` is -0.\n def self.round(value : Float64) : Float64\n def source : String\n # XPath's white space: space, tab, carriage return, line feed.\n protected def self.space?(b : UInt8) : Bool\n def string(node : Node | XPathNode, namespaces : Hash(String, String) | ::Nil = nil, variables : Hash(String, XPathValue) | ::Nil = nil) : String\n # A string as a number (section 4.4): white space, an optional minus,\n # digits with at most one point, white space; anything else is NaN.\n def self.string_number(text : String) : Float64\n # `boolean()` of a value.\n def self.to_bool(value : XPathValue) : Bool\n # `number()` of a value.\n def self.to_number(value : XPathValue) : Float64\n # `string()` of a value.\n def self.to_s(value : XPathValue) : String\n protected def self.type_name(value : XPathValue) : String\nend\n\n# The seven kinds of node in XPath 1.0's data model (section 5): the\n# document is the root node, and a CDATA section is a text node.\npub enum XPathKind : Int32\n Root = 0\n Element = 1\n Attribute = 2\n Namespace = 3\n ProcessingInstruction = 4\n Comment = 5\n Text = 6\nend\n\n# A node as an XPath expression sees it. A tree node is itself. An\n# attribute or a namespace node is not a `Node` here - an element keeps its\n# attributes and its declarations as values - so it is the element it\n# belongs to and which of them it is. Two are `==` when they are the same\n# node, which is what a node-set's union and `xpath_node` compare.\npub struct XPathNode\n def ==(other : XPathNode) : Bool\n # The attribute an attribute node is, or nil.\n def attribute : Attribute | ::Nil\n # An attribute node's place in its element's `attributes`, a namespace\n # node's in the element's namespaces in scope ordered by prefix, a text\n # node's among its parent's children where it is known; else -1.\n def index : Int32\n def initialize(node : Node, kind : XPathKind, index : Int32 = -1, namespace_prefix : String = \"\", namespace_target : String = \"\")\n def kind : XPathKind\n # `local-name()`: the name without its prefix.\n def local_name : String\n # `name()`: an element's or attribute's name as written, a processing\n # instruction's target, a namespace node's prefix; \"\" for the rest.\n def name : String\n # A namespace node's prefix (\"\" for the default namespace) and uri.\n def namespace_prefix : String\n def namespace_target : String\n # `namespace-uri()`: an element's or attribute's namespace, else \"\".\n def namespace_uri : String\n # The node itself, or the element an attribute or namespace node is on.\n def node : Node\n # *node* as the tree node it is: a document is the root node, a CDATA\n # section a text node - with the text and CDATA after it, up to the next\n # node of another kind, one text node (section 5.7). *place* is a text\n # node's index among its parent's children, when the caller knows it.\n def self.of(node : Node, place : Int32 = -1) : XPathNode\n # The string-value (XPath 1.0, section 5): every descendant text node's\n # text joined for the root and an element, an attribute's value, a\n # namespace node's uri, a text node's run of text and CDATA, and the\n # text of the rest.\n def text : String\n # A tree node as XML; an attribute as `name=\"value\"`; a namespace node as\n # its declaration.\n def to_s : String\nend\n\n# What an XPath expression evaluates to: a node-set in document order, a\n# number, a string or a boolean.\npub alias XPathValue = Array(XPathNode) | Float64 | String | Bool\n" }, { "name": "std/xz", "path": "src/std/xz.iyi", - "sourceSha256": "8e5c6d320de2b7f869b98d1b99096a1eac92b7efdc815dd0f5576f4a73b99df9", + "sourceSha256": "7577e11e8b33530db81d51c8702f47af2687ee6506acb1e4e984b9601ba10474", "surface": "module std/xz\n\npub struct Xz\n # The bytes *data* decompresses to - every stream of a .xz file, or the\n # one of a .lzma file - or the `XzError` `XzReader` would answer.\n def self.decompress(data : String, format : XzFormat = XzFormat::Xz, dict_limit : Int64 = XzReader::DICT_LIMIT) : String | XzError\n def initialize\nend\n\n# What `XzReader#read` and `Xz.decompress` answer for a stream they cannot\n# read: one that is corrupt, whose check or index or sizes do not match,\n# that ends early, or whose dictionary is past the caller's limit.\npub struct XzError\n def initialize(message : String)\n def to_s : String\nend\n\n# The two files LZMA travels in: the .xz container, and the .lzma file\n# of LZMA Utils and the LZMA SDK.\npub enum XzFormat : Int32\n Xz = 0\n Lzma = 1\nend\n\n# A .xz or .lzma stream read a piece at a time: the compressed bytes come\n# from the block, the decompressed ones go out through `read`, and memory\n# stays at the stream's dictionary and what is waiting to be read.\n#\n# ```\n# xz = XzReader.new { file.read_bytes(65536) }\n# while (piece = xz.read(65536)!) != \"\"\n# ...\n# end\n# ```\npub class XzReader\n # For `Xz.decompress`.\n protected def core : XzCore\n # Whether the stream has ended, everything about it been checked, and\n # every byte been read: the next `read` answers \"\".\n def finished? : Bool\n # *source* answers the next bytes of the compressed stream, nil (or \"\")\n # when there are no more. *dict_limit* is the largest dictionary a\n # stream may name, 4 KiB to 1.5 GiB; a stream that names more is an\n # `XzError` before anything is allocated for it. A .xz file is read to\n # the end of its source - streams and the padding between them - so the\n # source is asked until it says there is no more.\n def initialize(format : XzFormat = XzFormat::Xz, dict_limit : Int64 = DICT_LIMIT, &source : (-> String | ::Nil))\n # Up to *max* decompressed bytes; \"\" once the stream has ended and\n # everything about it been checked. A read answers as soon as it has\n # bytes and going on would call the source, so it can answer fewer than\n # *max* before the end; and never more than the dictionary at once.\n #\n # A corrupt stream, a check, index or size that does not match, input\n # that ends early, or a dictionary past the limit is an `XzError`, after\n # which every read answers the same error. A block's check is compared\n # after its last byte has been handed out, so the bytes before a bad\n # check have been read by then, as they are from a gzip stream. A *max*\n # below 1 is a panic.\n def read(max : Int32 = 65536) : String | XzError\nend\n\nimpl Error for XzError\n def message : String\nend\n" }, { "name": "std/yaml", "path": "src/std/yaml.iyi", - "sourceSha256": "15816e5314695efc6112ff417c5bdc78edb5895f2cb786e76c57643fea98e6fb", + "sourceSha256": "1549d954c95072a4659fd10c5e3822b0c066d23b590291378dde730bc7ee087e", "surface": "module std/yaml\n\n# `derive yaml_serializable`, in a struct or class whose fields are written\n# with their types: the type reads and writes itself as a YAML mapping, a\n# key per field, named as the field is, in the order the fields are\n# written.\n#\n# pub struct Coord\n# getter x : Float64\n# getter name : String\n# derive yaml_serializable\n# end\n#\n# Coord.from_yaml(\"x: 1.5\\nname: a\\n\").x # => 1.5\n# coord.to_yaml # => \"x: 1.5\\nname: a\\n\"\n#\n# It is std/json's `derive serializable` over YAML, field for field: a\n# value is read and written as `YAML.read_value` and `YAML.to_any` read and\n# write its type (the built-in scalars, an `Array` or `Hash` of them, an\n# `Any`, another serializable type, each of them or nil), and `to_yaml`\n# writes through `YAML.dump`, so a string that would read as something\n# else is quoted. A key the type has no field for is passed over; a field\n# with no key keeps its default when it is written with one, as does a\n# field with a default whose key holds null where its type does not admit\n# nil; a field with neither is refused by name unless its type admits nil,\n# which it then holds. Anchors, aliases and `<<` merges are the parser's,\n# so a mapping merged into another fills its fields.\n#\n# The macro is named for its format because a derive names a macro bare:\n# with std/json's `serializable` imported as well, a second `serializable`\n# was refused as \"'serializable' is ambiguous here\", and `derive` takes no\n# qualified name. A type that is both writes `derive serializable,\n# yaml_serializable`; what the two generate shares no method (`to_json`,\n# `from_json` and `initialize(pull)` against `to_yaml`, `from_yaml`,\n# `to_yaml_any` and `initialize(yaml)`).\npub macro yaml_serializable(declaration)\n\n# The value a document holds.\npub struct Any\n alias Type = Nil | Bool | Int64 | Float64 | String | Array(Any) | Hash(Any, Any)\n def !=(other : Any) : Bool\n # Structural: same kind, same value; a mapping equals a mapping with the\n # same pairs in any order. `1` and `1.0` are different values.\n def ==(other : Any) : Bool\n def [](key : Any) : Any\n def [](key : String) : Any\n # An Int32 indexes a sequence and reaches an integer key of a mapping:\n # `1: one` has the `Int64` key 1, and `doc[1]` panicked \"expected a\n # sequence, not a mapping\" while `[]?` and `dig?` answered nil.\n def [](index : Int32) : Any\n def []?(key : Any) : Any | ::Nil\n def []?(key : String) : Any | ::Nil\n def []?(index : Int32) : Any | ::Nil\n def as_a : Array(Any)\n def as_a? : Array(Any) | ::Nil\n def as_bool : Bool\n def as_bool? : Bool | ::Nil\n # A float, or an integer widened to one.\n def as_f : Float64\n def as_f? : Float64 | ::Nil\n def as_h : Hash(Any, Any)\n def as_h? : Hash(Any, Any) | ::Nil\n def as_i : Int64\n def as_i? : Int64 | ::Nil\n def as_nil : Nil\n def as_nil? : Nil\n def as_s : String\n def as_s? : String | ::Nil\n def dig(key : String | Int32) : Any\n def dig(key : String | Int32, *rest : String | Int32) : Any\n def dig?(key : String | Int32) : Any | ::Nil\n def dig?(key : String | Int32, *rest : String | Int32) : Any | ::Nil\n # Agrees with `==`: the same kind and value hash the same, a mapping's\n # hash does not depend on its order, and `0.0`/`-0.0` share one. A\n # sequence mixes its items as an `Array` does, a mapping sums one mixed\n # tuple hash per pair, and an integer hashes as an `Int64`. `31 * h +\n # item`, a sum of `31 * key + value` and the integer's own low bits\n # gave a 150 by 150 grid of `[i, j]` 4,769 hashes and of `{x: i, y: j}`\n # 299, `{a: 1, b: 2}` the hash of `{a: 2, b: 1}` and -1 that of 0, and\n # 40,000 such mappings took 987 ms to insert as keys; they take 19 ms.\n def hash : Int32\n def initialize(raw : Type)\n def initialize(value : Int32)\n def inspect : String\n # Which member of the union `raw` is, as one of the KIND_ constants.\n # Reference types are tested first on purpose (see the header).\n def kind : Int32\n # The name of the kind, for the sentences below.\n def kind_name : String\n def null? : Bool\n def raw : Type\n # Elements of a sequence, pairs of a mapping, characters of a string.\n def size : Int32\n # A string as itself, a number or boolean as written, nil as nothing,\n # a collection the way the prelude prints an array or a hash.\n def to_s : String\nend\n\n# Reads one stream. Every failure is recorded once in `@error` and every\n# loop returns as soon as one is recorded; nothing is raised inside.\npub class Parser\n def error : String | ::Nil\n def initialize(text : String)\n # Every document in the stream, or nil with `error` set.\n def parse_all : Array(Any) | ::Nil\nend\n\n# A type that can write itself as an `Any`. `YAML.to_yaml` and\n# `YAML.to_any` accept any value whose type implements it, as a `derive\n# yaml_serializable` type does.\npub trait ToYAML\n abstract def to_yaml_any : Any\nend\n\npub struct YAML\n # Block YAML for `value`, ending in a line break.\n def self.dump(value : Any) : String\n # The document `text` holds, read into `type`: `Nil`, `Bool`, `Int32`,\n # `Int64`, `UInt8`, `UInt64`, `Float64`, `String`, `Any`, a type with\n # `derive yaml_serializable`, one of those or `nil`, or an `Array` or a\n # `Hash` of those. Text that is not YAML panics as `parse` does; a value\n # of another kind, or an integer outside the type, is refused.\n def self.from_yaml(text : String, type : T.class) : T forall T\n def initialize\n def self.parse(text : String) : Any\n # The first document of `text`, or nil when the stream is not YAML this\n # module reads (the whole stream is checked, not just the first\n # document). An empty stream is a null document.\n def self.parse?(text : String) : Any | ::Nil\n def self.parse_all(text : String) : Array(Any)\n def self.parse_all?(text : String) : Array(Any) | ::Nil\n def self.read_value(value : Any, type : Nil.class) : Nil\n def self.read_value(value : Any, type : Bool.class) : Bool\n def self.read_value(value : Any, type : Int32.class) : Int32\n def self.read_value(value : Any, type : Int64.class) : Int64\n def self.read_value(value : Any, type : UInt8.class) : UInt8\n def self.read_value(value : Any, type : UInt64.class) : UInt64\n # A float, or an integer widened to one: `y: 2` is the Float64 2.0.\n def self.read_value(value : Any, type : Float64.class) : Float64\n def self.read_value(value : Any, type : String.class) : String\n def self.read_value(value : Any, type : Any.class) : Any\n def self.read_value(value : Any, type : Array(T).class) : Array(T) forall T\n def self.read_value(value : Any, type : Hash(K, V).class) : Hash(K, V) forall K, V\n # A type that reads itself, the `initialize(yaml)` a `derive\n # yaml_serializable` wrote; a type that admits nil reads null as the nil\n # and anything else as the other type, as std/json's `read_value` does.\n def self.read_value(value : Any, type : T.class) : T forall T\n # The `Any` a value is written as: the value or `nil`, the way\n # `JSON.to_json` takes it. A nil is taken out here, before the rest\n # dispatches, for the reason std/json's `write_or_null` gives: handed to\n # `write_value` whole, `Int32 | Nil` matches the `ToYAML` overload as\n # one type and does not build.\n def self.to_any(val : T) : Any forall T\n # Block YAML for any value `to_any` knows, written as `dump` writes it.\n def self.to_yaml(obj : T) : String forall T\n def self.write_value(val : Nil) : Any\n def self.write_value(val : Bool) : Any\n def self.write_value(val : Int32) : Any\n def self.write_value(val : Int64) : Any\n def self.write_value(val : UInt8) : Any\n # A YAML integer is read as an `Int64`, and one past it as a float, so a\n # `UInt64` above 9223372036854775807 would read back as a different\n # number: it is refused rather than written.\n def self.write_value(val : UInt64) : Any\n def self.write_value(val : Float64) : Any\n def self.write_value(val : String) : Any\n def self.write_value(val : Any) : Any\n def self.write_value(val : Array(T)) : Any forall T\n # A key of any type `to_any` writes as a scalar: YAML keys are typed,\n # so `Hash(Int32, String)` is written with integer keys and reads back\n # as itself. A collection key is refused by `dump`.\n def self.write_value(val : Hash(K, V)) : Any forall K, V\n def self.write_value(val : T) : Any forall T : ToYAML\nend\n" }, { "name": "std/zip", "path": "src/std/zip.iyi", - "sourceSha256": "3eebb3cf759efe99411bb2488c3cfd7c1e181eceaabc8807e010cb3a8d55c8e3", + "sourceSha256": "35ecdadd25759b58bfd16e27e1800a020672a28abf7126f4958a8f4e6b25108c", "surface": "module std/zip\n\n# One entry of the central directory.\npub class ZipEntry\n def comment : String\n def compressed_size : Int64\n def crc32 : UInt32\n # Bit 3: the CRC-32 and sizes follow the data, in a data descriptor.\n def descriptor? : Bool\n def directory? : Bool\n # Bit 0: the data is encrypted, which this module does not read.\n def encrypted? : Bool\n # The general purpose bit flags.\n def flags : Int32\n def initialize(name : String, raw_name : String, size : Int64, compressed_size : Int64, crc32 : UInt32, method : Int32, flags : Int32, modified : Time, offset : Int64, comment : String, zip64 : Bool)\n # The method number: 0 stored, 8 deflate, 12 bzip2, 14 LZMA, 93\n # Zstandard, 95 xz; any other is listed and refused when the entry is\n # opened.\n def method : Int32\n # The method's name, for a sentence about it.\n def method_name : String\n def modified : Time\n # The name as the archive's directory holds it, decoded to UTF-8.\n def name : String\n # Where the entry's local header is, from the start of the archive.\n def offset : Int64\n # The name's bytes as written, before decoding.\n def raw_name : String\n # The uncompressed size.\n def size : Int64\n # Bit 11: the name is UTF-8 rather than code page 437.\n def utf8? : Bool\n # Whether the central directory carried this entry's sizes or offset\n # in a ZIP64 extended information field.\n def zip64? : Bool\nend\n\n# One entry's content, read a piece at a time; `ZipReader#open` makes\n# them. The CRC-32 and the size are checked against the central\n# directory before the last piece is handed out, so a caller that stops\n# at the size it was told has still had every byte checked; and content\n# that inflates past the size the directory declares is refused at the\n# read that would pass it.\n#\n# Each method's decoder is the module's that has it: `Inflater` from\n# std/compress, `Bzip2Reader` from std/bzip2, `ZstdReader` from std/zstd,\n# and `XzReader` from std/xz for xz and, as a .lzma file, for LZMA. The\n# window a Zstandard frame names may be up to 512 MiB, the most\n# `ZstdReader` takes, and the dictionary an LZMA or xz stream names up\n# to `XzReader::DICT_MAX`, rather than their own defaults: both readers\n# grow their buffers with the output, not to the window, and the output\n# is held to the size the directory declares - which `ZipReader.open`'s\n# limit bounds - so the memory an entry costs is its own size at most,\n# and an entry another tool wrote with a large window is read.\npub class ZipEntryReader\n # Whether every byte has been read and checked.\n def finished? : Bool\n # *lzma_head* is the .lzma header `ZipReader#open` made of an LZMA\n # entry's own, which the decoder is given before the data after it.\n def initialize(source : ZipSource, entry : ZipEntry, data_start : Int64, slot_end : Int64, lzma_head : String)\n # Up to *max* bytes of the content, \"\" at its end; or what is wrong\n # with it, after which every read answers the same. A *max* below 1 is\n # a panic.\n def read(max : Int32 = 65536) : String | ZipError\nend\n\n# What is wrong with an archive or an entry: `message` is the sentence,\n# which says which entry where there is one.\npub struct ZipError\n def initialize(message : String)\n def to_s : String\nend\n\n# The methods this module writes, by their number in the format.\npub enum ZipMethod : Int32\n Stored = 0\n Deflated = 8\n Bzip2 = 12\n Zstandard = 93\nend\n\n# An archive's entries, read from its central directory.\n#\n# ```\n# zip = ZipReader.open(File.read(\"a.zip\"))!\n# zip.entries.each { |e| puts \"#{e.name} #{e.size}\" }\n# if readme = zip.find(\"README\")\n# text = zip.read(readme)!\n# end\n# ```\npub class ZipReader\n # The archive's comment, its bytes as written.\n def comment : String\n def entries : Array(ZipEntry)\n # Every entry written under *dir*, directories made as needed, files\n # that are there already written over. Every name is checked before\n # anything is written: one that is absolute, has a `..` part, or holds\n # a `\\` or a `:` (a separator and a drive on Windows) would land outside\n # *dir*, and the archive is refused whole. A file whose content fails\n # its check is deleted and the error answered.\n def extract(dir : String) : Nil | ZipError\n # The entry named *name*, or nil.\n def find(name : String) : ZipEntry | ::Nil\n # *entry*'s content as a stream; see `ZipEntryReader`. An encrypted\n # entry, one in a method this module does not read, and one whose\n # local header is not where and what the directory says are refused,\n # and so is an LZMA entry whose own header is not LZMA's.\n def open(entry : ZipEntry) : ZipEntryReader | ZipError\n # The archive in *data*. *limit* is the most the entries may hold\n # uncompressed, all together: an archive whose directory says more is\n # refused here, and an entry that inflates past what the directory says\n # it holds is refused as it reads.\n def self.open(data : String, limit : Int64 = NO_LIMIT) : ZipReader | ZipError\n # The archive in a file open for reading, which is read where the\n # directory and the entries are and not whole. It is moved about with\n # `seek`; the reader and its entry readers own its position.\n def self.open(io : IyiIO, limit : Int64 = NO_LIMIT) : ZipReader | ZipError\n # *entry*'s whole content, checked as `open`'s stream checks it.\n def read(entry : ZipEntry) : String | ZipError\n # Why *name* may not be written under a directory, or nil when it may.\n def self.unsafe_name(name : String) : String | ::Nil\nend\n\n# An archive written to an `IyiIO`, an entry at a time, the central\n# directory at `finish`.\n#\n# ```\n# File.open(\"out.zip\", \"w\") do |io|\n# zip = ZipWriter.new(io)\n# zip.add(\"README\", text)\n# zip.add(\"photo.jpg\", jpeg, ZipMethod::Stored)\n# zip.add_directory(\"empty\")\n# zip.finish\n# end\n# ```\n#\n# What is wrong with the calls is a panic: a name that is empty, longer\n# than 65,535 bytes, absolute or holding a `\\` (APPNOTE 4.4.17), or\n# already in the archive; an `add` after `finish`, and `finish` twice; a\n# comment longer than 65,535 bytes; bzip2 or Zstandard asked of an entry\n# streamed from an `IyiIO`, which those two compress only whole.\npub class ZipWriter\n # *data* as the entry *name*, compressed with *method* - deflate,\n # bzip2 (blocks of 900,000 bytes, bzip2's -9, as Python's `zipfile`\n # writes it), Zstandard, or stored as it is - and modified at\n # *modified*'s wall clock.\n def add(name : String, data : String, method : ZipMethod = ZipMethod::Deflated, modified : Time = Time.local) : Nil\n # What *source* holds until its end as the entry *name*, written as it\n # is read: the local header first, without the sizes and CRC-32, and a\n # data descriptor after the data with them. *source* is not closed.\n # Deflated or stored only: the bzip2 and Zstandard compressors take\n # their input whole, and an entry for them is added from a `String`.\n def add(name : String, source : IyiIO, method : ZipMethod = ZipMethod::Deflated, modified : Time = Time.local) : Nil\n # A directory entry: *name* with a `/` after it if it has none, stored\n # and empty.\n def add_directory(name : String, modified : Time = Time.local) : Nil\n # The central directory and the end, with *comment*; then *io* is\n # flushed. Once only.\n def finish(comment : String = \"\") : Nil\n # *zip64* writes every entry with the ZIP64 extended field and the end\n # with the ZIP64 records, needed or not. Offsets count from where *io*\n # is when the writer starts.\n def initialize(io : IyiIO, zip64 : Bool = false)\nend\n\nimpl Error for ZipError\n def message : String\nend\n" }, { "name": "std/zstd", "path": "src/std/zstd.iyi", - "sourceSha256": "421c98767f26a59497e71ae97c8682f402e443934577c39b5b73903da51fec83", + "sourceSha256": "476e94a9ad53ca23ed2a217ce4af4002bed7603a84f2c03cb32a39c2db6a460d", "surface": "module std/zstd\n\npub struct Zstd\n # One frame of *data*, with its content size and checksum, that any\n # Zstandard decoder reads with a window of 1 MiB at most.\n def self.compress(data : String) : String\n # Every frame of *data*, one after another, or the error that stopped\n # it. Bytes after the last frame that do not begin another are refused,\n # as is a stream with no frame at all.\n def self.decompress(data : String, max_window : Int32 = WINDOW_LIMIT) : String | ZstdError\n def initialize\nend\n\n# What `ZstdReader#read` and `Zstd.decompress` answer for a stream they\n# cannot read: one that is corrupt, that ends early, whose checksum or\n# content size does not match, or that asks for what this decoder does\n# not give (a dictionary, a window past the caller's limit).\npub struct ZstdError\n def initialize(message : String)\n def to_s : String\nend\n\n# A Zstandard stream read a piece at a time: the compressed bytes come\n# from the block, the decompressed ones go out through `read`, and memory\n# stays at the frame's window, twice over at most, and a block.\n#\n# ```\n# body = ZstdReader.new { socket_read }\n# while (piece = body.read(65536)!) != \"\"\n# ...\n# end\n# ```\npub class ZstdReader\n # Whether the stream has ended, its checksums checked, and every byte\n # been read: the next `read` answers \"\".\n def finished? : Bool\n # *source* answers the next bytes of the compressed stream, nil (or \"\")\n # when there are no more. *max_window* is the largest window a frame\n # may ask for; a frame that asks for more is refused rather than given\n # the memory. A limit outside 1 KiB to 512 MiB is a panic.\n def initialize(max_window : Int32 = Zstd::WINDOW_LIMIT, &source : (-> String | ::Nil))\n # Bytes the source gave beyond the last frame, for a caller that frames\n # other data after it; \"\" before the stream has ended.\n def leftover : String\n # Up to *max* decompressed bytes; \"\" once the last frame has ended and\n # been checked. A read answers what the last block decoded before it\n # decodes another, so it can answer fewer than *max* before the end, and\n # never more than a block (128 KiB).\n #\n # A corrupt stream, a bad checksum, a frame past the window limit or\n # input that ends early is a `ZstdError`, after which every read answers\n # the same error. A *max* below 1 is a panic.\n def read(max : Int32 = 65536) : String | ZstdError\nend\n\nimpl Error for ZstdError\n def message : String\nend\n" } ], @@ -720,15 +732,23 @@ "sources": [ { "path": "src/iyi/array.iyi", - "sha256": "743e8683780994c0c1c3e7bb927a8d178a77e94c4261c049a6ff976b2f0de894" + "sha256": "18d2214e0b08489dc739500cb4893ce92b3ba0b52151da497116babc639dd041" }, { "path": "src/iyi/atomic.iyi", - "sha256": "4ab1697b993ac0b43bb3d58b8e9be9e95fa2cea1900830a39626d9289cda370e" + "sha256": "b301ef3d70ffd132667c6a30a08cbc1bd097a53d7d54657f4c1fbcc077ba8f2b" + }, + { + "path": "src/iyi/chaos.iyi", + "sha256": "d3ccdc5b264e6e101a4909fbee4a9d5159eea843e74775a180f8872496bd2185" + }, + { + "path": "src/iyi/chaos_points.iyi", + "sha256": "76ca17181f046c69b2571bce0d4597025a7767c05c5c2aefa99606c70a949a19" }, { "path": "src/iyi/concurrency.iyi", - "sha256": "197f8f27f21e424be85d1f8b5d607659771202d51712f5304f7012125d44abd8" + "sha256": "021c684d3c3bdbd3c667353aa6c19c15a42d924a455e32fa2bce747496004201" }, { "path": "src/iyi/enum.iyi", @@ -736,19 +756,19 @@ }, { "path": "src/iyi/file.iyi", - "sha256": "431b8bf5a51054074315815806a66caf64c25ddc4b6b55e06dd53511f18f500b" + "sha256": "5b53e9d449aedbaaa54164d9367d15847f2053724230740ea08b087625a06346" }, { "path": "src/iyi/float.iyi", - "sha256": "9d80115e42794ed62904bdd85a60874f3b94f46c69ec585492b86e0f7e410006" + "sha256": "c3f7055712a46a3d09210d75d65d391a3f910b78d05a1fff2d6de7fa693696c4" }, { "path": "src/iyi/hash.iyi", - "sha256": "580ef1c3bc63419b8df4724b685a551166f02072a4e7b8fdbc0efab34de30167" + "sha256": "3e14e6d5a6504b2f275fe627f199361ed6323374d9b1bad30cc6c38217ae0ee6" }, { "path": "src/iyi/io.iyi", - "sha256": "268eeea54810c6949118bd362e108977e95c0c5021845e626d75d1d579617b9e" + "sha256": "555b36aecd3aee8308a754de5d3d9cb2cb5d1c85cccf86355c26cb55b3a06a95" }, { "path": "src/iyi/macros.iyi", @@ -756,7 +776,7 @@ }, { "path": "src/iyi/number.iyi", - "sha256": "4670aae20350cb7f1961bf7b4354d1824b76595598a855b50eb76e170874c24f" + "sha256": "0bc0c85ef6d9126f4a637f44789af54c65337c916ae99cfbf06659eff654b498" }, { "path": "src/iyi/object.iyi", @@ -764,11 +784,11 @@ }, { "path": "src/iyi/prelude.iyi", - "sha256": "2c724ca28f93ee1260c649727ed33f201960b04ca64108a0e3fb07d7a52f051e" + "sha256": "2f4d52f16e06e9be00df5639e0ae10168658d1bd72fc9c0b846e4ed76f98df07" }, { "path": "src/iyi/primitives.iyi", - "sha256": "3a47aad1995bba3bfd5b3f48db8fa6aaf92000e6caae19be58d4d4ecf1691a48" + "sha256": "55e4061004d37de68c63f02cb2667039fc1475e5ccf5b1d23bcc3a7c0a9e1e17" }, { "path": "src/iyi/range.iyi", @@ -780,7 +800,7 @@ }, { "path": "src/iyi/string.iyi", - "sha256": "bedeecee93e9b30cfe7f4410ab86cbbc77f0e85058baf668b506ff773561ebd8" + "sha256": "3c71a975a0b1d073d1625f570769fd1fc3e19a23dcf44d2c64ee2587efafafe6" }, { "path": "src/iyi/testing.iyi", @@ -788,7 +808,7 @@ }, { "path": "src/iyi/thread.iyi", - "sha256": "b64bff5faeafcb16053081d50199130cf93fff184ace18c3505e80dee6a34b40" + "sha256": "67330d48758d307e94c7c48828278ba94d56d9ca43ea7c69a28dd922b9c7f790" } ], "types": [ @@ -810,7 +830,7 @@ }, { "name": "Channel", - "surface": "# ── Channel — III.4.6 ──────────────────────────────────────────────────\n#\n# `Channel(T).new` is a rendezvous, as Crystal's is: a send completes when\n# a receive takes it, and either side parks until the other arrives. A\n# parked sender carries its value in its node's box, and a parked\n# receiver has a slot a sender fills, so the handoff needs no third\n# party; `new(capacity)` buffers that many sends first. Closing drains\n# what was delivered, then refuses: a parked sender whose box is still\n# full failed, and its value dies with the node.\n#\n# A channel crosses threads (SPEC.md III.4.13): it is `@[Share]`,\n# trusted whenever `T` is - III.4.6's \"`Channel(T)` carries over, with\n# `T : Share`\" - so a parallel task and a thread may capture one whose\n# values are themselves safe on two threads, and every operation below\n# is behind the scheduler's lock, which a park lets go of before it\n# switches. A wake of a fiber on another thread goes through its inbox\n# (`IyiScheduler.ready`). `select` is answered by this protocol — a node\n# per arm, one nonce, losers stale by arithmetic until the woken select\n# takes them out — at the bottom of the class.\nclass Channel(T)\n\n # Everyone parked is woken; what each wake means is read on the woken\n # side — a receiver finds the buffer, then `ChannelClosed`; a sender\n # finds its box still full.\n def close : Nil\n\n def closed? : Bool\n\n def new(capacity : Int32)\n\n def new\n\n # `select`'s arms park through these with one shared nonce; a plain\n # call parks with a fresh nonce of its own. *slot* is where a rendezvous\n # sender puts its value (`IyiWaiter#slot`). These and the two unlinks\n # below are public for the arms' sake and change the queues, so like\n # the `*_held` halves they are called with the scheduler's lock held.\n def park_receive_node(fiber : IyiFiber, nonce : UInt64, slot : UInt64) : IyiWaiter\n\n def park_send_node(fiber : IyiFiber, nonce : UInt64, value : T) : IyiSendNode(T)\n\n # :nodoc: - the scheduler's lock held, and `send_ready_held?` true. A\n # rendezvous puts the value in the parked receiver's own slot (`hand`).\n # It went into the buffer, and the send answered delivered on the word\n # of the wake: a select woken that way took another arm ready by then, a\n # receiver cancelled before it ran answered `Cancelled`, and either way\n # the value stayed in a channel of no capacity after its sender left. A\n # buffered send completes when the buffer takes it, so there the woken\n # receiver finds it in the buffer.\n def put_held(value : T) : Nil | ChannelClosed\n\n # The value sent without waiting: to a parked receiver, or into the\n # buffer; `ChannelClosed` once the channel is. A full channel has no\n # room, and asking is a bug the call panics over; `select` with an\n # `else` arm is the send that may not happen.\n def put_now(value : T) : Nil | ChannelClosed\n\n # A closed channel drains what was delivered before it refuses. A\n # rendezvous sender that finds this receive parked writes its value into\n # `got` and marks the node handed, and that is the answer even when the\n # task was cancelled before it ran: the sender was told it was taken.\n # A woken park that was handed nothing takes its node out of the queue,\n # so a cancelled one leaves nothing behind.\n def receive : T | ChannelClosed | Cancelled\n\n def receive_ready? : Bool\n\n # :nodoc: - the scheduler's lock held.\n def receive_ready_held? : Bool\n\n # Nothing happens on the arm `take_held` answers: `ChannelClosed` is\n # the refusal here, where a closed channel's buffer is spent.\n def receive_refused? : Bool\n\n def receive_select_action : IyiReceiveSelect(T)\n\n def send(value : T) : Nil | ChannelClosed | Cancelled\n\n def send_ready? : Bool\n\n # :nodoc: - the scheduler's lock held.\n def send_ready_held? : Bool\n\n def send_select_action(value : T) : IyiSendSelect(T)\n\n # :nodoc: - the scheduler's lock held, and `receive_ready_held?` true:\n # the buffer, then a parked sender's box, then the refusal.\n def take_held : T | ChannelClosed\n\n # The next value without waiting: the buffer, then a parked sender's\n # box, then `ChannelClosed`. On an empty open channel there is nothing\n # to take, and asking is a bug the call panics over; `select` with an\n # `else` arm is the receive that may find nothing.\n def take_now : T | ChannelClosed\n\n # Out of the receive queue from wherever it stands, in constant time,\n # and no longer linked anywhere; a node no queue holds is left as it\n # is. The queue is linked both ways because a select's losing arms\n # leave from the middle: they stayed until something walked them off\n # the head, so a loop selecting over a busy channel and an idle one\n # left a node in the idle one's queue for every park - 30 MiB kept\n # after two million rounds, freed only when the idle channel was used.\n def unlink_receiver(node : IyiWaiter) : Nil\n\n # The send queue's `unlink_receiver`.\n def unlink_sender(node : IyiSendNode(T)) : Nil\n\n # No arm ready answers -1, which the expansion's case meets with the\n # program's own `else`.\n def self.non_blocking_select(actions : U, bound : Int32) forall U\n\n # ── select — III.4.6, the library half of the expansion ────────────\n #\n # A `select` compiles to `%i, %v, %h = ::Channel.select({arm, arm}, b)`\n # and a case over the index; `non_blocking_select` when an `else` arm\n # exists. One def serves every arity, because a tuple's size is a\n # compile-time fact a macro walks. `%h` says the arm's operation\n # happened, and an arm nobody binds runs its body only then: it ran\n # unless its answer was an `Error`, so a `Channel(Boom)`'s receive took\n # the `Boom` and skipped the body. *bound* is the first arm that binds,\n # -1 for none, and a cancelled task's `Cancelled` goes to it, as that\n # arm's own primitive would have answered it.\n #\n # Every look and every act is under the scheduler's lock, one lock for\n # every channel an arm names, so no arm's channel changes between the\n # look that found it ready and the act; the park lets go of it.\n def self.select(actions : U, bound : Int32) forall U\nend\n" + "surface": "# ── Channel — III.4.6 ──────────────────────────────────────────────────\n#\n# `Channel(T).new` is a rendezvous, as Crystal's is: a send completes when\n# a receive takes it, and either side parks until the other arrives. A\n# parked sender carries its value in its node's box, and a parked\n# receiver has a slot a sender fills, so the handoff needs no third\n# party; `new(capacity)` buffers that many sends first. Closing drains\n# what was delivered, then refuses: a parked sender whose box is still\n# full failed, and its value dies with the node.\n#\n# A channel crosses threads (SPEC.md III.4.13): it is `@[Share]`,\n# trusted whenever `T` is - III.4.6's \"`Channel(T)` carries over, with\n# `T : Share`\" - so a parallel task and a thread may capture one whose\n# values are themselves safe on two threads, and every operation below\n# is behind the channel's own lock (`IyiChanLock`), which a park lets go\n# of before it switches. A woken fiber's park is claimed first\n# (`IyiWaiter#claim`), since a select parked here may be woken by another\n# channel's waker at the same moment, and a node whose claim fails is\n# stale. A wake of a fiber on another thread goes through its inbox\n# (`IyiScheduler.ready`). `select` is answered by this protocol — a node\n# per arm, one nonce, losers stale once one wake is claimed, until the\n# woken select takes them out — at the bottom of the class.\nclass Channel(T)\n\n # Everyone parked is woken; what each wake means is read on the woken\n # side — a receiver finds the buffer, then `ChannelClosed`; a sender\n # finds its box still full.\n def close : Nil\n\n def closed? : Bool\n\n # :nodoc: - the lock's word, by address: what `select` orders its\n # channels' locks by.\n def lock_address : UInt64\n\n def new(capacity : Int32)\n\n def new\n\n # `select`'s arms park through these with one shared nonce; a plain\n # call parks with a fresh nonce of its own. *slot* is where a rendezvous\n # sender puts its value (`IyiWaiter#slot`). These and the two unlinks\n # below are public for the arms' sake and change the queues, so like\n # the `*_held` halves they are called with the channel's lock held.\n def park_receive_node(fiber : IyiFiber, nonce : UInt64, slot : UInt64) : IyiWaiter\n\n def park_send_node(fiber : IyiFiber, nonce : UInt64, value : T) : IyiSendNode(T)\n\n # :nodoc: - the channel's lock held; `IyiMissed` when a send would\n # park. A rendezvous puts the value in the parked receiver's own slot\n # (`hand`). It went into the buffer, and the send answered delivered on\n # the word of the wake: a select woken that way took another arm ready\n # by then, a receiver cancelled before it ran answered `Cancelled`, and\n # either way the value stayed in a channel of no capacity after its\n # sender left. A buffered send completes when the buffer takes it, so\n # there the woken receiver finds it in the buffer.\n def put_held(value : T) : Nil | ChannelClosed | IyiMissed\n\n # The value sent without waiting: to a parked receiver, or into the\n # buffer; `ChannelClosed` once the channel is. A full channel has no\n # room, and asking is a bug the call panics over; `select` with an\n # `else` arm is the send that may not happen.\n def put_now(value : T) : Nil | ChannelClosed\n\n # A closed channel drains what was delivered before it refuses. A\n # rendezvous sender that finds this receive parked writes its value into\n # `got` and marks the node handed, and that is the answer even when the\n # task was cancelled before it ran: the sender was told it was taken.\n # A woken park that was handed nothing takes its node out of the queue,\n # so a cancelled one leaves nothing behind.\n def receive : T | ChannelClosed | Cancelled\n\n # Whether a receive would not park now: an answer that may be old by\n # the time it is read.\n def receive_ready? : Bool\n\n # Nothing happens on the arm `take_held` answers: `ChannelClosed` is\n # the refusal here, where a closed channel's buffer is spent.\n def receive_refused? : Bool\n\n def receive_select_action : IyiReceiveSelect(T)\n\n def send(value : T) : Nil | ChannelClosed | Cancelled\n\n # Whether a send would not park now: an answer that may be old by the\n # time it is read.\n def send_ready? : Bool\n\n def send_select_action(value : T) : IyiSendSelect(T)\n\n # :nodoc: - the channel's lock held: the buffer, then a parked sender's\n # box, then the refusal, or `IyiMissed` when a receive would park.\n def take_held : T | ChannelClosed | IyiMissed\n\n # The next value without waiting: the buffer, then a parked sender's\n # box, then `ChannelClosed`. On an empty open channel there is nothing\n # to take, and asking is a bug the call panics over; `select` with an\n # `else` arm is the receive that may find nothing.\n def take_now : T | ChannelClosed\n\n # :nodoc: - the lock held: the fiber the last operation claimed, taken\n # out to be readied once the lock is let go (`wake`).\n def take_woken : IyiFiber | ::Nil\n\n # Out of the receive queue from wherever it stands, in constant time,\n # and no longer linked anywhere; a node no queue holds is left as it\n # is. The queue is linked both ways because a select's losing arms\n # leave from the middle: they stayed until something walked them off\n # the head, so a loop selecting over a busy channel and an idle one\n # left a node in the idle one's queue for every park - 30 MiB kept\n # after two million rounds, freed only when the idle channel was used.\n def unlink_receiver(node : IyiWaiter) : Nil\n\n # The send queue's `unlink_receiver`.\n def unlink_sender(node : IyiSendNode(T)) : Nil\n\n # No arm ready answers -1, which the expansion's case meets with the\n # program's own `else`.\n def self.non_blocking_select(actions : U, bound : Int32) forall U\n\n # ── select — III.4.6, the library half of the expansion ────────────\n #\n # A `select` compiles to `%i, %v, %h = ::Channel.select({arm, arm}, b)`\n # and a case over the index; `non_blocking_select` when an `else` arm\n # exists. One def serves every arity, because a tuple's size is a\n # compile-time fact a macro walks. `%h` says the arm's operation\n # happened, and an arm nobody binds runs its body only then: it ran\n # unless its answer was an `Error`, so a `Channel(Boom)`'s receive took\n # the `Boom` and skipped the body. *bound* is the first arm that binds,\n # -1 for none, and a cancelled task's `Cancelled` goes to it, as that\n # arm's own primitive would have answered it.\n #\n # Every look and every act is under the locks of every channel an arm\n # names, taken in the order of their addresses (`IyiChanLock.order`),\n # so no arm's channel changes between the look and the act, nor while\n # the arms park; the park lets go of them all.\n def self.select(actions : U, bound : Int32) forall U\n\n # :nodoc: - what `take_woken` answered, readied with no lock held.\n def self.wake(woken : IyiFiber | ::Nil) : Nil\nend\n" }, { "name": "ChannelClosed", @@ -862,7 +882,7 @@ }, { "name": "Pointer", - "surface": "# A raw address: `Pointer(T).malloc(n)` is `n` elements of untyped memory,\n# `[]` and `[]=` read and write them, nothing checks the bounds.\nstruct Pointer(T) < Value\n\n def +(offset : Int64) : self\n\n def -(other : self) : Int64\n\n def [](offset : Int32) : T\n\n def []=(offset : Int32, value : T) : T\n\n def address : UInt64\n\n # Bytes, not elements: every caller here is copying string contents. A\n # million a run (`copy_run`, prelude.iyi), and a check for preemption\n # between runs (SPEC.md III.4.13, part 9); one run or less, none.\n def copy_from(source : Pointer(T), count : Int32) : Nil\n\n def copy_run(source : Pointer(T), count : Int32) : Nil\n\n def new\n\n def realloc(size : UInt64) : self\n\n def value : T\n\n def value=(value : T)\n\n def self.malloc(size : UInt64)\n\n def self.new(address : UInt64)\nend\n" + "surface": "# A raw address: `Pointer(T).malloc(n)` is `n` elements of untyped memory,\n# `[]` and `[]=` read and write them, nothing checks the bounds.\nstruct Pointer(T) < Value\n\n def +(offset : Int64) : self\n\n def -(other : self) : Int64\n\n # The same address, whatever is stored there. Without it `Object#==`\n # answered false for `p == p`, and a pointer key was never found.\n def ==(other : self) : Bool\n\n def [](offset : Int32) : T\n\n def []=(offset : Int32, value : T) : T\n\n def address : UInt64\n\n # Bytes, not elements: every caller here is copying string contents. A\n # million a run (`copy_run`, prelude.iyi), and a check for preemption\n # between runs (SPEC.md III.4.13, part 9); one run or less, none.\n def copy_from(source : Pointer(T), count : Int32) : Nil\n\n def copy_run(source : Pointer(T), count : Int32) : Nil\n\n def new\n\n def realloc(size : UInt64) : self\n\n def value : T\n\n def value=(value : T)\n\n def self.malloc(size : UInt64)\n\n def self.new(address : UInt64)\nend\n" }, { "name": "Proc", @@ -886,7 +906,7 @@ }, { "name": "String", - "surface": "# Text — SPEC.md, \"0.1.0\", item 3.\n#\n# The compiler declares `String`'s fields itself — `@bytesize`, `@length` and\n# `@c`, in that order, in `Program#initialize` — because codegen lays out\n# string literals before any prelude is read. So this file reopens a type that\n# already has its shape and only says what can be done with it.\nclass String\n\n # `\"ab\" * -3` answered `\"\"` where the other library raises (III.1.7a).\n # The size is a division, so the refusal names the string: `\"abcd\" *\n # 600_000_000` panicked \"arithmetic overflow\", the machine's adder.\n def *(count : Int32) : String\n\n def +(other : String) : String\n\n # Byte order, which for ASCII is dictionary order with the capitals first;\n # a prefix sorts before what it prefixes. What `sorted` and `sorted_by`\n # ask of a string.\n def <(other : String) : Bool\n\n # Thirty-two bytes a step while they last, then one at a time, and the\n # same string is itself: a byte a step was eleven times Python's `==`,\n # 230 ms for 1,000 compares of equal megabytes. No load needs alignment.\n def ==(other : String) : Bool\n\n # A negative *start* counts from the end, the same wrap as the one-index\n # form. *count* stays non-negative: a negative count is not a wrap, it is a\n # mistake, and it raises for that reason rather than being silently clamped.\n def [](start : Int32, count : Int32) : String\n\n # The character at *index*, asked for by `samples/iyi/calc`, which scans\n # its input a character at a time. Byte-indexed: a byte is the character\n # for ASCII, and `each_char` is the decoded walk. A negative index counts\n # from the end; out of range after that wrap raises, `[]?` answers nil.\n def [](index : Int32) : Char\n\n def []?(index : Int32) : Char | ::Nil\n\n # Where *search* first starts at or after byte *offset* - counted from\n # the end when negative - in bytes, as Crystal's `byte_index` answers.\n # Naive while that is cheap, and Rabin-Karp - one rolling hash per\n # position, bytes compared only where it matches - once more than four\n # bytes a position have been compared: a needle that keeps almost\n # matching, `\"a\" * 1000 + \"b\"` in a run of `a`, made the naive loop\n # n * m, 222 ms for a megabyte.\n def byte_index(search : String, offset : Int32 = 0) : Int32 | ::Nil\n\n def bytesize : Int32\n\n # `'\\n'` is a line's end, so it takes the `\\r` before it, or a lone `\\r`\n # in its place, as the other library's does: `\"a\\r\\n\".chomp('\\n')` is \"a\".\n def chomp(char : Char) : String\n\n # The other half of `upcase`, ASCII for the same reason.\n def downcase : String\n\n # Every character in order, decoded, as many as `size` counts: it yielded\n # one per byte, so `\"héllo\".size` was 5 and `each_char` ran six times.\n # Indexing stays byte-indexed (`[]` above), as `samples/iyi/calc` scans.\n # A byte that begins no character is one U+FFFD, as in the other library:\n # a lead byte took the bytes after it whatever they were, C3 41 was the\n # one character U+00C1, and `\"a\" C3 '\"'` swallowed the quote.\n def each_char(& : (Char -> Nil)) : Nil\n\n def empty? : Bool\n\n def ends_with?(suffix : String) : Bool\n\n # FNV-1a over the bytes: three lines, no table, and good enough for a\n # linear-probing table of a few dozen entries.\n def hash : Int32\n\n def includes?(other : String) : Bool\n\n # Where a character first is, or nil: the question a parser asks before\n # it cuts.\n def index(char : Char) : Int32 | ::Nil\n\n # The literal that spells it, escaped as the other library's, a byte that\n # is no UTF-8 as `\\x`: unescaped, `[\"a\\\", \\\"b\"]` printed as two strings.\n def inspect : String\n\n def lchop(char : Char) : String\n\n # The lines of a text, blank ones included, a final newline ending the last\n # line; `\\r\\n` ends one too, and a last `\\r` with no `\\n` after it is kept:\n # `\"1\\r\\n\".lines[0].to_i` panicked where `File.read_lines` read 1.\n def lines : Array(String)\n\n def ljust(width : Int32, pad : Char = ' ') : String\n\n # Pad on the left (rjust) or the right (ljust) to *width*, in characters\n # as `size` counts them, the pad as its own bytes: in bytes,\n # `\"héllo\".rjust(7, '.')` answered a string of `size` 6, and a `'·'`\n # written as one byte left a lone continuation byte in the result.\n def rjust(width : Int32, pad : Char = ' ') : String\n\n # A zero `@length` on a non-empty string is \"not counted yet\", which is\n # how the other library's own code leaves a string it builds: `to_json`'s\n # result answered `size` 0 here while the field was returned as it stood.\n # The layout is shared on purpose (SPEC.md Part V item 12), so the\n # invariant is too. The count is of what `each_char` yields, a byte that\n # begins no character one U+FFFD.\n def size : Int32\n\n # The pieces between separators, empty ones included: `\"a,,b\".split(',')`\n # is three, `\"a,\".split(',')` is two, and `\"\".split(',')` is one empty\n # piece - the count the other library gives, so a program reads the same\n # under both.\n def split(separator : Char) : Array(String)\n\n # The three the Kemal port's path joining needs, byte-indexed: the same\n # as by character while the strings are ASCII.\n def starts_with?(prefix : String) : Bool\n\n # A `Char` above ASCII is more than one byte, and these narrowed it to one\n # through a *checked* convert, so `\"a☃b\".index('☃')` died of \"arithmetic\n # overflow\". Each compares the character's own bytes now.\n def starts_with?(char : Char) : Bool\n\n # Without `Char#whitespace?`'s characters at either end, decoded: it read\n # bytes, and `\"b\\u00A0\".strip` kept the space the other library takes.\n def strip : String\n\n # The double nearest the decimal written here, correctly rounded: the\n # digits and the exponent are read into the printer's bignum and the\n # quotient taken to 54 bits with a sticky remainder, so what `to_s`\n # wrote reads back as the same double, every time, and \"0.1\" is the\n # double the literal `0.1` is. Accepts `-1.5`, `2.5e-3`, `1E10`, `.5`,\n # `7.`, `Infinity`, `NaN`, with `Char#whitespace?` around as `to_i?`\n # takes it; raises \"not a number\" for anything else.\n def to_f : Float64\n\n # The number this string spells - an optional sign and decimal digits,\n # the whole string - as `samples/iyi/calc` reads a token. Raises on\n # anything else, as the other library's does (SPEC.md III.1.7a): a\n # silent 0 for `\"oops\"` is wrong twice; `to_i?` answers nil for it.\n def to_i : Int32\n\n # Around the digits, `Char#whitespace?` is skipped as the other\n # library's `whitespace: true` skips it (`\"42\\n\".to_i?` was nil). Read\n # as a *negative* magnitude, which holds every value the type has:\n # `2147483648` accumulated and negated, `Int32::MIN` overflowed on its\n # last digit, a panic rather than the `nil` a `?` promises.\n def to_i? : Int32 | ::Nil\n\n def to_s : String\n\n def to_unsafe : Pointer(UInt8)\n\n # ASCII only, and the samples are ASCII. A prelude that folded case for\n # every alphabet would be a Unicode table, which is more lines than this\n # whole file and not what any sample is about.\n def upcase : String\n\n def self.build(capacity : Int32 = 64, & : (String::Builder -> _)) : String\n\n # Interpolation is a call the compiler writes: `\"a#{b}\"` reaches here as\n # `String.interpolation(\"a\", b)` (`LiteralExpander#expand`). The overloads\n # are what let the common shapes avoid work — a single string is itself.\n def self.interpolation(value : String) : String\n\n def self.interpolation(value) : String\n\n def self.interpolation(*values : *T) : String forall T\n\n # Allocates *bytesize* bytes, hands the buffer to the block to fill, and\n # returns the string that results. The character count is left at zero,\n # \"not counted yet\", for `size` to scan the first time it is asked: most\n # strings built here - an encoding, a join, a line - are never asked, and\n # counting them all was a second pass over every byte built.\n #\n # The byte after the last is a NUL, as a literal's is, so `to_unsafe` is\n # a C string: `std/process` and `std/debug` hand one to the platform as a\n # path. The byte was allocated for that and never written, and a string's\n # chunk is atomic - not cleared - so a chunk that had held a longer\n # string kept that string's byte there. Measured on Windows after a\n # collection that freed longer strings: 961 of 1,000 strings built after\n # it had no terminator, and `Process.run` of a path built that way\n # answered \"no such program\" for a file that was there.\n def self.new(bytesize : Int32, & : (Pointer(UInt8) -> Nil)) : String\nend\n" + "surface": "# Text — SPEC.md, \"0.1.0\", item 3.\n#\n# The compiler declares `String`'s fields itself — `@bytesize`, `@length` and\n# `@c`, in that order, in `Program#initialize` — because codegen lays out\n# string literals before any prelude is read. So this file reopens a type that\n# already has its shape and only says what can be done with it.\nclass String\n\n # `\"ab\" * -3` answered `\"\"` where the other library raises (III.1.7a).\n # The size is a division, so the refusal names the string: `\"abcd\" *\n # 600_000_000` panicked \"arithmetic overflow\", the machine's adder.\n def *(count : Int32) : String\n\n def +(other : String) : String\n\n # Byte order, which for ASCII is dictionary order with the capitals first;\n # a prefix sorts before what it prefixes. What `sorted` and `sorted_by`\n # ask of a string.\n def <(other : String) : Bool\n\n # Thirty-two bytes a step while they last, then one at a time, and the\n # same string is itself: a byte a step was eleven times Python's `==`,\n # 230 ms for 1,000 compares of equal megabytes. No load needs alignment.\n def ==(other : String) : Bool\n\n # A negative *start* counts from the end, the same wrap as the one-index\n # form. *count* stays non-negative: a negative count is not a wrap, it is a\n # mistake, and it raises for that reason rather than being silently clamped.\n def [](start : Int32, count : Int32) : String\n\n # The character at *index*, asked for by `samples/iyi/calc`, which scans\n # its input a character at a time. Byte-indexed: a byte is the character\n # for ASCII, and `each_char` is the decoded walk. A negative index counts\n # from the end; out of range after that wrap raises, `[]?` answers nil.\n def [](index : Int32) : Char\n\n def []?(index : Int32) : Char | ::Nil\n\n # The byte at *index*, checked: a negative index counts from the end, as\n # an array's does, and one out of range raises. What a module reads a\n # string's bytes with when it does not handle raw memory, where\n # `to_unsafe[i]` reads past the end without a word (SPEC.md III.13).\n def byte_at(index : Int32) : UInt8\n\n # Where *search* first starts at or after byte *offset* - counted from\n # the end when negative - in bytes, as Crystal's `byte_index` answers.\n # Naive while that is cheap, and Rabin-Karp - one rolling hash per\n # position, bytes compared only where it matches - once more than four\n # bytes a position have been compared: a needle that keeps almost\n # matching, `\"a\" * 1000 + \"b\"` in a run of `a`, made the naive loop\n # n * m, 222 ms for a megabyte.\n def byte_index(search : String, offset : Int32 = 0) : Int32 | ::Nil\n\n def bytesize : Int32\n\n # `'\\n'` is a line's end, so it takes the `\\r` before it, or a lone `\\r`\n # in its place, as the other library's does: `\"a\\r\\n\".chomp('\\n')` is \"a\".\n def chomp(char : Char) : String\n\n # The other half of `upcase`, ASCII for the same reason.\n def downcase : String\n\n # Every character in order, decoded, as many as `size` counts: it yielded\n # one per byte, so `\"héllo\".size` was 5 and `each_char` ran six times.\n # Indexing stays byte-indexed (`[]` above), as `samples/iyi/calc` scans.\n # A byte that begins no character is one U+FFFD, as in the other library:\n # a lead byte took the bytes after it whatever they were, C3 41 was the\n # one character U+00C1, and `\"a\" C3 '\"'` swallowed the quote.\n def each_char(& : (Char -> Nil)) : Nil\n\n def empty? : Bool\n\n def ends_with?(suffix : String) : Bool\n\n # FNV-1a over the bytes: three lines, no table, and good enough for a\n # linear-probing table of a few dozen entries.\n def hash : Int32\n\n def includes?(other : String) : Bool\n\n # Where a character first is, or nil: the question a parser asks before\n # it cuts.\n def index(char : Char) : Int32 | ::Nil\n\n # The literal that spells it, escaped as the other library's, a byte that\n # is no UTF-8 as `\\x`: unescaped, `[\"a\\\", \\\"b\"]` printed as two strings.\n def inspect : String\n\n def lchop(char : Char) : String\n\n # The lines of a text, blank ones included, a final newline ending the last\n # line; `\\r\\n` ends one too, and a last `\\r` with no `\\n` after it is kept:\n # `\"1\\r\\n\".lines[0].to_i` panicked where `File.read_lines` read 1.\n def lines : Array(String)\n\n def ljust(width : Int32, pad : Char = ' ') : String\n\n # Pad on the left (rjust) or the right (ljust) to *width*, in characters\n # as `size` counts them, the pad as its own bytes: in bytes,\n # `\"héllo\".rjust(7, '.')` answered a string of `size` 6, and a `'·'`\n # written as one byte left a lone continuation byte in the result.\n def rjust(width : Int32, pad : Char = ' ') : String\n\n # A zero `@length` on a non-empty string is \"not counted yet\", which is\n # how the other library's own code leaves a string it builds: `to_json`'s\n # result answered `size` 0 here while the field was returned as it stood.\n # The layout is shared on purpose (SPEC.md Part V item 12), so the\n # invariant is too. The count is of what `each_char` yields, a byte that\n # begins no character one U+FFFD.\n def size : Int32\n\n # The pieces between separators, empty ones included: `\"a,,b\".split(',')`\n # is three, `\"a,\".split(',')` is two, and `\"\".split(',')` is one empty\n # piece - the count the other library gives, so a program reads the same\n # under both.\n def split(separator : Char) : Array(String)\n\n # The three the Kemal port's path joining needs, byte-indexed: the same\n # as by character while the strings are ASCII.\n def starts_with?(prefix : String) : Bool\n\n # A `Char` above ASCII is more than one byte, and these narrowed it to one\n # through a *checked* convert, so `\"a☃b\".index('☃')` died of \"arithmetic\n # overflow\". Each compares the character's own bytes now.\n def starts_with?(char : Char) : Bool\n\n # Without `Char#whitespace?`'s characters at either end, decoded: it read\n # bytes, and `\"b\\u00A0\".strip` kept the space the other library takes.\n def strip : String\n\n # The double nearest the decimal written here, correctly rounded: the\n # digits and the exponent are read into the printer's bignum and the\n # quotient taken to 54 bits with a sticky remainder, so what `to_s`\n # wrote reads back as the same double, every time, and \"0.1\" is the\n # double the literal `0.1` is. Accepts `-1.5`, `2.5e-3`, `1E10`, `.5`,\n # `7.`, `Infinity`, `NaN`, with `Char#whitespace?` around as `to_i?`\n # takes it; raises \"not a number\" for anything else.\n def to_f : Float64\n\n # The number this string spells - an optional sign and decimal digits,\n # the whole string - as `samples/iyi/calc` reads a token. Raises on\n # anything else, as the other library's does (SPEC.md III.1.7a): a\n # silent 0 for `\"oops\"` is wrong twice; `to_i?` answers nil for it.\n def to_i : Int32\n\n # Around the digits, `Char#whitespace?` is skipped as the other\n # library's `whitespace: true` skips it (`\"42\\n\".to_i?` was nil). Read\n # as a *negative* magnitude, which holds every value the type has:\n # `2147483648` accumulated and negated, `Int32::MIN` overflowed on its\n # last digit, a panic rather than the `nil` a `?` promises.\n def to_i? : Int32 | ::Nil\n\n def to_s : String\n\n def to_unsafe : Pointer(UInt8)\n\n # ASCII only, and the samples are ASCII. A prelude that folded case for\n # every alphabet would be a Unicode table, which is more lines than this\n # whole file and not what any sample is about.\n def upcase : String\n\n def self.build(capacity : Int32 = 64, & : (String::Builder -> _)) : String\n\n # Interpolation is a call the compiler writes: `\"a#{b}\"` reaches here as\n # `String.interpolation(\"a\", b)` (`LiteralExpander#expand`). The overloads\n # are what let the common shapes avoid work — a single string is itself.\n def self.interpolation(value : String) : String\n\n def self.interpolation(value) : String\n\n def self.interpolation(*values : *T) : String forall T\n\n # Allocates *bytesize* bytes, hands the buffer to the block to fill, and\n # returns the string that results. The character count is left at zero,\n # \"not counted yet\", for `size` to scan the first time it is asked: most\n # strings built here - an encoding, a join, a line - are never asked, and\n # counting them all was a second pass over every byte built.\n #\n # The byte after the last is a NUL, as a literal's is, so `to_unsafe` is\n # a C string: `std/process` and `std/debug` hand one to the platform as a\n # path. The byte was allocated for that and never written, and a string's\n # chunk is atomic - not cleared - so a chunk that had held a longer\n # string kept that string's byte there. Measured on Windows after a\n # collection that freed longer strings: 961 of 1,000 strings built after\n # it had no terminator, and `Process.run` of a path built that way\n # answered \"no such program\" for a file that was there.\n def self.new(bytesize : Int32, & : (Pointer(UInt8) -> Nil)) : String\n\n # A string holding a copy of *count* of *bytes* from *start*, as they\n # are, the range checked: what a module turns bytes it collected into\n # text with, where `String.new(n) { |buffer| ... }` hands it a `Pointer`\n # (SPEC.md III.13).\n def self.new(bytes : Array(UInt8), start : Int32 = 0, count : Int32 = bytes.size - start) : String\nend\n" }, { "name": "Struct", diff --git a/records/wasm/arrays.wasm b/records/wasm/arrays.wasm index d529bc619209c4b754a3300398e1aa627e1b64b8..8552d66ede35473d5446e31f13cc0b823cb280bb 100755 GIT binary patch delta 27928 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 delta 28446 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%0DU9l7Xa;^H$%5#+uN&^ zqCon>MP1kd?O#7L7jNMLeg)9?DW(8u6S#FK-sb`?>KVMe47eFUo4jWLv{}3DS=i8g z&;YbU`rLDPqZ81p1m9l)O#nxGhvyeTGbn3i7z}n1`o9RkJB$@P#lU-Ml|3gCeF#_vpw(|4 zfL^+P1wcz&`kn?YL_0$xG;v0+MN0rD=obP%1E3ksyAGczgAh{zG+zy0j|L&WFd6v( zl>mBE{WyT;k4yE@|5xF~gJE=23^CY)^|zi1Db=*!x8QZX3JVKif%9&JLA|YMk8Ka& zuax174;!FWzu0+dY^zXE;- z^aaiOy9IHJ|Aip_Kf-?wo~wZ00i-eO&m8hb{RCdiI8d8s8&L_|O)>X%Vll?_cs@F^ z%MP>{Fa)roqIohbIH_0W*!U zb@6cDuVO`Aep2_o76a0RN% zO&T_3a^_>hCO^!!X02yhGh@MgmR2#R0k6;SM))gk+{e!`ZfnC6jGx^&uE;T(q~hE( z$LODm4YV9%QYtn%a*V~PICjf1K262ub&gRlji=)0hBPewbByJ!d9qQO%ALkDX}lH? zx2N-XW0N9&rhdX2;?2q&qiaL%F&Qd+4fzWkiFQr!key?E-r&$(=ZpBE##e-9@Mv+vpy?AQO&D=IAblWYY2UVm zyZ@MR899Gl97pF?ZQ57d-Gc8GD7s-bcAj&LpWE+qZLs5*W4zu5 eR}gY4P|!GP;mCG)qR%m&Ye&6Yv9}%XC;ksJ|6yPN diff --git a/records/wasm/blocks.wasm b/records/wasm/blocks.wasm index 4eb056ff7b8c0a11018005872050ca246182db6c..1aab61b4e1acbd8d167b582a91f9381774cb3e6b 100755 GIT binary patch delta 22302 zcmb_^349dA@_%>F&SrCwkYsa*Y!Z$f5bhg<6$L~Qxda3hL_q?GK%zb%Y~)Zth=BnI z6i5)%ghRlf;SfPVK~zAwyxtQO6rZAqzW4BY{=d~dGrOSv{-4k9^NUt*byatDb#+yD zPfrg&e-U>2eAw2%^QQYYyCMV3&nV%P?8v2bU!F`Ab4N4E{Mf_@7b6RH9~Na?u*d9Acet0UcF!p)+iE5RpMkdj?KD-|bs$I6Y{q7x!m>^?bGmnfSEiEE?1#?0u3d>^pZ;>;7qspu|{7+-I=I8$Lf zP%mASEuosRBK82)bn4f>Snp_<*imE5Nz5U2s}r-5chpd`S-MY$7pU?+&0n?LIGgAb zuhbY?QeUxexiKKACFSNN`NWy!#`8(tss2|<4ba`%@Z>Fm@2K6Gn&=j1s*U%2o$04u z);rK}OJlEbDQl@XR$V(cdyqzqj~aENpTx#P#lC9efyUR#Vh>R!w@G(#sJgbO$y|

e}}TKH(&5OEVH#`*pK}I*Hldx*dLMziE9~ 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 delta 22692 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 diff --git a/records/wasm/bounds.wasm b/records/wasm/bounds.wasm index 810f8fdf438ca9487dcc651d1910bdb41f0e5c4d..bbe0ced59e09ad88e596ed5b19789ae104208d36 100755 GIT binary patch delta 23087 zcmcJ133wI7()M)EnK>tWNOH14!bu2_1PEaWT;`euauTIaHSBQpp4=nRD`}@^-dSi{Ia<@;INvxDs&> zV*%cYcd9qNq@+agS684Mlg*VV#i1C_^L%!|IK&(BBNfIKo*H{xNcmU+S9~u2sR|=i z&E#h)jE-tz>N&}CgRyrGbv8yyov$z+2fHT7K0Y^u{bhwwrY1K3CdghrKZJcHNIxG+ zzg}S+RTDe>6lAYn5Yp_oApLkKy<{T^`AErYuZT^vTeC8eAxwg1YxPqWV2! zV!x-(GIXEf(+jvqNM*PovA{T))SI7w&Zw8%472Z_oPn7g zmHyPFoRw6bs&g;nR~8$&>3NvIp!D&OelNW?J5_lp{R(HZD$iuprpxtuhhUP*J@u!c zX0*y)ipt^aCS<0ca{Q>Y%^l16`6ZPvH(um|kqVmCkGN7w%8v0h_b)U?G#kNxT2gtm z*%}w$w$T`0(2g!!3yv7;8^;(!+PjU?R!iCH%6hH)tHhbot}R_&Z#NKX#k9ZO5*v-$ zq4s{ZyfUoAY=&_bcdQ?=ZK)i`?Y~(0R>x}Qbh)b2306@#&i^T+zV7ZqT~^NTa!5lj z{qAgqNSS}tpSYyM8$4Dw+WOKT7A6W-ZdURxW*kJ3(QAA1} zwT(P>c+|^*^C33(#Uj1&PQG}{bfG*yi+!FP72%i8O|hJt>Pz*djOkpmS2#4)FWOMj z&8Y2TzS;%+F<+|XbLg5;2gEw9)Q2!iozCdbxH7seY1DX3GrBxDhIB0&)1TBkIp*&O zQ2*FzDnf1V<1G>M|9*V0$GbX2WjjnNjKfd0fY={T6^b&ca^B=i4Eblml=>0pt>qEr zzih0X@*S4%lBqM zP1?jvwLmuYL%M*^+A5k6dWz&D{3RuG&{65uStZJyQOvJoa7hYC+F1X`prdVu3q1(2 z0)9pgWmhXmQ@`TFP@PK%%}eMk zYGeJ~$7EvYv6(JEn^3^X2Jl4*S+Rh>Mx9~axGAl(P+q`=-*B%fHJ+X4L)xsE*RheM zIh<}y3X339&E}p=cQ-OFZmiRM+Ee2T_;RDx{BB6ygXZT)+4IE&sy7+W&##N#UZ3B` zqGz~CmCZ){f=tl!S0x%f7c|V>Y$<}NttK=wDuTpT5}p};M-=mgkMi?EfAwZ#)q()4 zFwz!2!&VyW77pMb{l4&Rx*S;aFjT0&I2Zgri^tUxJ!QIlZV?GI=m(2OW(X>Dhb6?Q zn4D)!hAT26f_I`Z*BOIK>qiQ6Knf;bXUr@04HbcW2hBR0|3qHTP;nFapQAc5B&z>9 zrVY=M=DuZO=C&TkX^>18hLn0$Z!zv)l96Q#`IRP$SPOpFcq?kd9Br;o`*YzQ2EB6zZ8$oCRH z2TLpfm`nage7WjXYxsAJ{D4?pLVX`X?d~YD71>x_tDi~danK0Ge!sw3SU`!o5NOJP$&$WQbjD+WB2W}eRRx3LU8xy~h!_SlP zT5$#Y7Sx2vTX7G35r$<@AlZNE8Qb^}&cd2eDLUK*+(Y@WMnAto>pZ1UtQWhAOEm>!H$d<^G$}P}C}!h6*C>6a?q3 zHYTjPuYquk%yU8wOhM*Rp&a~`iL|-S_-<871JTwIwR$2Wh-71lt~Q#K_2qjv86{

l-1EW;~~ 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 YJo;#km|9zK%YI}HpvpTxvQFy%1*GvT+5i9m delta 23131 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 diff --git a/records/wasm/case.wasm b/records/wasm/case.wasm index bd2b5c10444b0c3c1e2320641a1d64099b3bbaf2..12ff1fde592506d06af669c1362c939ed27bb3ec 100755 GIT binary patch delta 22470 zcmb_^349bq_J3FP^vonAA%sjIK*A(kNq}&JT*7z&vVf={35Tw*poT+^ASekFAu1q8 zpuq+O66N?oK(3&1Bc~UU`xX^3tf08+8j*Fq{eNFoSI>aB|Ig?5`HjBnSMR;5diCnn ztLmx_dp`5Lc-gbpRZ3uu(Qo=)k$3`&_mCG+)6%3Mn`y?kiKZ-@B|uGP4g zu^{isdp3HiprAkt{ICIOP8!#uHHTu(=dIb7=5F4s`7gvy(IqRz<#+k@9KY6)YkpUt zU?UavGnp$iYwC@Hb0p0JcF7!K=Sc4S5Pe@by(mPl4yP{-(T~p!t7mzLUOg|2zEaYI zqT%Pl7$uE3dPz8abBKOCoW3nYFIZ4u)^%m^<4euSt`59hVl@KWmYM%@Ww5noqS1&gH@h2tetenvpwStm6-GMJw~Twi zNN_i0MP_$*8n0evKJ4zrcWyMdx?A#H8_f&uzF?($>LZ<)8*gTNy0Q%-zk%{)?|9DZ zykLR3K5BsZZH;tZ^}N|2s&Uk|=S7DxMte@1{i3p@$Z59EoDrRrSheVSg}0HyeikS& zw?}to+mQN}#3ZxhX2Y27W^zn|IXR{ma(|CW;?;}Ib1|vBYEjuQF~>ao^-}XlLZhxb z$wVpK_95M``#Curya`^^kw^LU!0V-?QHtR=z=+)`TGRt2mf5_HpYJL)``78u_gUu3 zI&CO-48$tS{I*WdR9Uxe-xTI&e&Niquh>fO+E{j9-6=Y3R#sU*gF!X(T7%y7=$`Zo zTUpj6c>$|Yu#{TQ@z)KkD?8b+I7CPfyjqr*(wjRH(Sd)K9c}cR&PvLTG#kWV_SE!N zu*tpYlafn{{;ZpN;F?)>G5s^n)|OSas85eenFkmu+1&a`Rrgt%%r=T)HrU+ zW;}t*WiQ=TNg7d=!M~j3=U~i!=V8Q+W}5+2W!d-v2MnsFjkA9SygJ#!?wCxOAm}4LAl_E@XgSk>7{gHmRG+9yE$%iky(cjl6bYpYM{ym{J zr*1c!lo2N^or9rM9WF9QO%g_#Gie+NeLtx!Ju)VX!Rj-)HwLh1@*_n1Y4SFV+@>iT zl8VBN=a0o|zdj5L;#GKm-_K8uf7ZBw|yr_@aUB4qA=dVYd ztH`~V8j6|Ph8}^bLWc*Z4nng#r%oVmZ2Wk>PR_LEiFV}U=bqT>O*noNH#oP^d}UT! zlDs%;ihLxLjhmgP2dhZ;R2~hT16mp{*+N-88msPY!A^WLWq}qH6vEA*FJCJu2$tTQ zz{E*`bERiWjVY;mM_Dug>5hD-6e6^c&>De)f;p&Y-Pwh z9RFBX;0LN9hsvOCaH?hAkgNJHBImbr^JOV)3E6Qb2{tr#C$aLR>S^4Y>gi3!_PYZ!{l>IO9jU;exxM)DQgh|p zR?*4==+Y0R=DE3|!XM|}9U~bCZP4d@sd@jr6e{_|ylxriZC%jU<*C3(8gr`Q{ z8O{8Wj|6yb;D^oTC-Z{*T&elj=bi@J{QSB5Ify;xzfBKg!9%3PBMZ_=#9Z)LoTx3; z<@X5p5Y5If9Fr=@=m9JunnoABIVrBF8Z~%NYWOsIvaoTqu#5B=P>w8YI6^o$f;0(j zAd{x(v{U*2dV5ruxBscHn|Cd0=YL!DUnx>RZKS%;qEzgMSIm`*QW`0tfYwqIQzYP; z6m8I^6|sYpesj#KMSU>c%#5OLv7uT>Z`AR4(R8S9Ru@gHVHby|6q=J4-+ia>albn! z6)qxh)CeC+lk=dz74#sq2BZv|9FKv%yY4Fl# zf;Uuuv)LVi)jpu5^CB``Cr+CIA%1w1c z+%IDzDd%^i6efJ`^XIz>)6t|B-spIq--FTigB%w6!UG+QjzO7krSP{)&8=24MT}!s z6RP!l>+QHd>Te!iUY|7mV)zRy|DkrxHj-b5!a@?*dbcQ zHTVPK(yK2HZYIWBhEJgn`Y!{t=oDNa74aBO(`IGeW}>tsYu81F65-31MZFVO4s0p4 zPxbby2j6j}@u*b1k%+R+SRh(^>}dV<${rLUGgm#6DTg2xwQ3NDb9res^3p2nj0s9I zDvAF7W7S$U(%SVS%`k3Uj5L=cjjSB$S65GtwMUw%kv2OOH$;79S;bMTp&co(wEMXq z{vc{bKcIsM*|SShRR`UogN!=J{jNWBP%TH()+C$NB`=fJm%fBOD@Jc^QcdAt=#0zm z%y%y>k~&M(QY!7y>3ZVj8sjU#JcQ&kb@MR z1l%x;kubSv0-DxX(}P!+n*G)^s3|5-*z!7UO?Miw*Ve52v%bt-o7XAKVU$Kf4K46H z`wID7#?bxzSo0hFRn^hYpn8};GJzC|CpV;crCmwCtIwFOF+VI_Zoal9-ptz`WlrAoOVeb?6WkzA^;2`L9(^nmkFuSc=dn7ekR!N3 z)*QDb*_^$le%YQa$61|55FofwXxFynvQyiRcxzors}ZYd_#Z#gSTnc(y$c&_e)ad> zNZVI5NBY-_WG7uMCDF1c()nKjC+^#pZ6|}uuLo8rDkFeP&3^QOhCHn z0NLlVpwz0Y54>e1akEAGv`DvCQa#5iGm!oy(kAbb%suash5tw3r$qX@NShxd?hujA z7U|Z5RKt;j>B*$`@n}tZAx6`5t(JC!;_-*5Xit%j6Y26pRP;50#~dcEOuHN=de&j; zP>I0zi1fTje>yC^#;mDn-__JjCARVQAmF{(Hv>xlf99S zJJ}iO`jbRCDbn9WnsJIK_ltDaDJu2ZDU#1TP4uB6eMY1^M0!D_k!Oh8QKTb9y6_B@ zy(;kJvsA;Fvm~=bqJzWz|<}$Fk{`OJ}dv`4S<}^|i)}li=h8C74(GVe7cg>U!I_ zMeev&jT~>|wjy0DSy4}0tzDAZ7gXZr(DT=HYaTs$hE+<>hz#qXi`DlgW{A4pv%W?t zZ+Dry(~34&-QY$>JlBONODM@P?w?I0!TX&+|1D*0kb!Sc?dBsiSK# z_?wVNSyypwxHo}aHrJ(TnPFuw!omc+RJ5zJHP$+VHSB&0-ERoGXdee?bVlVgP!s+& zHms6s5G2qIq2D!&xtY&9&T1A_>IiQK(oQ9NtnG6+9c2y zwiL1n31Q5}=n#RvSukCB(4npDBrATlj;0Z~bSmf?hk|&94AcMy0=S!tdS@hP^|e#7 zbG*1d7zCa;E(+gmRYPA-l@J|c)%0M9Zj(clWwi>+ZME+9pqu-o;ig&Rzzc4Zx%n8a zi>hDeuz4cj_e*A6eNF47nAczd0^U^FzZVutAQ0vc3Lk!;?pz&{e7w3 zsYaS+>0TBW+$9LEu4$U~t87OvE<+mx`W(^A&gq)gTk=@3A5{`ao}Sr6)21r@%ApT| z=d@H|77DIFXM}!NAw}T%L^9W*WHhsudRc5RU6OV-)wHKoL!Y1`0{va7a#A}@TPpj* zi;sdq;JHhbbaiQ_X_y7hC~ilFz&k?>&5rih534}sg^CBnBHZj`Lt-9^*h zR%%rOA@H;kHQx#!G$qefJOVoq0()}l-=Sck?7yox8a_v$m`~iHX}Qv|9@C0D*3~ou zH7~DWYk>iDI#d8j0^984@4cR#45uVem49--rX7=N@#1C}N&;2)H&(4k<_lgD9e58T zJ6rmYt2hz*5vXd0VZO~$HvbMiAyCXGp~E0GGv0-=1d4flkfzO*3TVZB(Kvx(ZXJR+ zW37v1@hT|3W$lj)1$hwUek&cvjXlypqM`my+^*vsLJ*B?EW3GzN&#}VCP;(hwfCh#=*P1dmeVb zP(s<|cSKME#s38SZ=@c2aT=N-P|S%?zrAE?#h)Ya66m+d@P8~RsA|5)({7)Aoc zU2nCC4q2^_H6S`3F|uwe+(xkQ2Z(s9w!U);?*cfpqRtK ztQ}T(Dkdg@%-Q=FPz#cMDI1l*L& z`;tu9O@nde4t@ejBW{K0=3$O$M4m^eUeK*wR z@ViL<7l{51)OekO=?FY;NIg9fqAhl-^>{36sHT6FwJMg??W$%TULm7o1-$qO76bw{ zr1XAyi?jkO&V&>Jf8DB%WevQI#CW+zTk*BnEiBgRUyIdacUX_qVySGD^;|8M#QKzP zti{%H=C=mKvw7@6>w|cf>3IZw(rS;jVtg!(t*|=zSSyxmJ?vwxW6Hql4=&4z*L`Ky zIv-1qv!0fVG@Bc**UQ1|ZD3XT*Z_9eYL&p!8hrDNj1CDC;M1irG^-Ie1%rc0@_;oZ zf#vp{`mD5ZLW~QpMiPl}14zQR1e{DD346d1Ws_uC-@m|_4^DCs$v2G~40+#=R+~C( zR{Y#KvcAL$jGP;TrTGq62kNk1Lt0@4!tBx#-}T^V036>CP#O~@2GMO4$!fk|EbLN< zHXJ@RnWP3U*R-BQnFC4?l*FAto)hAl?>p;nb=fH2E2yd^3H=RK(KbNyCCszV*JX)A zn#|L*F~sVJC^H4D#OXkSB%}FOg4u+aYe8EGnr|y8m^51Azd(6WQOFGwkAt#Pl+%2b zR=-5ntMka`>`wWy+`6$8`sRTmI`s%BwLt;xv1M}6Of1BVOC_m;)}cgpYw*M8aViDt zHJk}zVgcN99&w4>kXjrGibZw!hQTh2h_o7{GLk+BWG_h{}MeIk}V)6 zwgpl_^6UYtQ3Lh@k6B{vZNLiHn^w;xmL5N4scop!SVO959r2yD@{?G7Hpp6$#5(X= z%dF!`%-{1Mw2F(xSoJ}}0vWH6LkjsqA>E;ekm*fGJCr(6-a460_pm~1V-vRawgd3z z7HBLv7EQA0HEFtNKKBdQV-huos55Qqy`XLfKe-)I3kB8pkhQ2O>zuF~yw1d1LDTN( znt#EZ_U*PVG-YY^PlK0=+7hm$+mluDHQ(=6N;6iMHM6=jWA*CY{~}(FNp4OCj#p$o zpT?k`*Q^Q6*r+XOE*)I8IDn75Kh!&c!wbd;R zie%#ygPbwJi!N`L5)_v;pJfHp5cUpOtI}A8=Q!lFv{U6r)0l_VFJFyUIV!a<(N=$9 z9CZ&4VpXTJx*h2Bhh|m6n0nX*QMC)>M75glVX#VwwFE5DrG;^#O9!m(87#9-4=@LS zFU`MNIb`68s4EA{uM0I@IkOd z!#iZdBdomUY!ti8s%p;S@%VRh*0{}GYvi0x*pP(HIQ8Hy5ompb!3fz?64CK9R^Jw| z=WpN&d-lad6!v^ew(sj^Eoi|;z{$RB!Mfv--ja1-hsqyp$)-ic<=>%c=P?zk*UAN# zS6f#)vkdm5Rl5t8ht<}|F03nSV6E=Lda+a1f(vkM_H^z#15ODY{h0{-X&WtvROBlV?CP9+Q|vL# zKN~SdU;L&v#^o~H`g_~0aWmMe;E_nI>f53i=Ne-!-C&WL!B5oB?RZ54r8k_%Rw~sNZz>iRJVS4Q;@e} z`irM=51q|@Vf7zInAUegmUkm6NAWvheSL$@jL68d+^?u~NTnx>D%0ZlXjz5mcHQyO zwlPwbFr7;2$=0p;tllldbM?l4mtp8`{X4CjivwE_oaNSs^WMy@H_im+UG3JJ_@_Q@ z_@)}2+}^ADkX$|8D#~Z^!68B_9a2L`D#Op?RU>q~rEd(^(;kQQ#K7RV^X zbcn0(KdM2WJ==pquQ!isP>gcW44E+1uEDAGBggKyC(XWN5=pY@r=?gxxKA*{w>d_IKzUd=TBX1nX+fa=zNab0{LDnlcp7_n}Iz6D{ z>`c=ayO?1_^7Ptn{p%UtF}jIwi-2Sr5pI2{%WoL&)j+$`)7{;z|8oWm=hiK7YD_h1 zxp`Wgeq~0kzMKf|e;OWdu~8pIntA>D#TnkshR3a!xcqLtss&Zr%&iww?&6G0LP$g) zhR@BLLWQasxuS$svw*bwGHl6V}s)B^+WKciDg#jDa zHtM-yc70<$@5uD`xgS`O(aFYgje0ibJxho&cr*AFMsJ(C+89h2zS^_v#=)WvO{^YI zAp+1rqW*$xXb{YFDPK&RRUG~QG~ZhUtD;Je_hDEt{}RSZ-$bl4`G^X_o|LP~#{_$c zXTD)XV<11y=Z`TOXj3$l|ag{vaqkP_%>FbcM z@8+GL%!iPW^%%x7Bi@~fc5_JqwCqioZA5sxzv0%8=4Zh{^w+4KVa0C!T^OgPTQ8#) zj|g2P*R3DS&ouhD^_|2yOuFn0qR@S$46;T|;utlAE{B9JuOgo$bvXzDSx=D>(Uw}t zgho=C_l$}&La+Y)875$UjVjXnv>K-e5Pv>hP{##wTKz37`?-%lL}3U?2y zr^2WcmJ`->+E4)#mZkG-{aGeLb0$Lb4>NfV)8{ZhVSf=AudDhIq!Vsi+Uw^Xh)w~F z4!8AFn5=GE2l+jUPUqVC1<)Hs@^*2CF&l=-<99Q?3g7XU|fkoA-&+SLNl3oZ4mbitr%4N zmeg7V6;p+ZMol4RLJZUTYtmw=Vf1k8^Yi#%Sm1lzUp#f{REqx%d5_xAq(U#u;}3%M zJJs|QYHH-xe+^P*Hfm{zjOdHEoBKN>nrA?Xr=$`nphp$y)3DrlF-pJAfI81oRR3{C zCWVJW!he}T7Hdoy;6+9Q8_PB75@s}p#eSi+i!u>pu^(r^VnM1&RMc2hWYiM<`Wb5n zLd4S~yTtIccI*F{fqv<8L1^UW4?wx^Ap)i6fzs8DorB@2B;%3Z|CTGyb6{oaS z9>1O0&ckn09=Hyk8PqqZrNOPA&F4*Epv@GzrW*CJO15%ilAp}y=^{dJr3iE)-|Gim z-$I#_`I&^^iMa+ut$inC__7OxO)0va(chujjvYmXTMt%XZuVpPyEIRM=L(G1Ryxv! zjb0g2@ikIWKZus<$YA=a43395+)OBq5!yj34>{j4(s4T}+ycR!GCLq%pHSnL3X%(U zMTaTt6HEJcskdFu*4rzW)~?N<%1_YT=+3>QpBH-)Oz^VypwHs=p2Z6aT?FaRLFrUX zZH&iv`MfF97r;*6VbQ@8K@F4jYCg{lGJPTR8e04?sSnrA$AP2~>(*D0wx471^||$B zgnubj1Mcl^#3HzVo{wFQkwTKdF-{V}TC{?XK?{A|#V(K0M4va4XP}eA!DyUiv~y#= z4bL@Vupu^#)j{`r=!ZxDo>gLpp6|Vi_`nf+gf%Y7CRdVeqo*1Xyk%{%EYtFhS+@os z(s>Y^3TLjq=B@2baqEM;Y|@cZ9JErMw<5$=($FF%F6NSb0RlP8THvSK(O?{?a6>ayk z=;ff9;)F2gRUp&hb#<@-3Jdb}OyRU8yx}z>RN@xJ!~P=lGSkhWI;|Ahb#RBm+bb!> zt5ka54*!=;@=gxc)4>KgSV)nOTxW+H!mujZ^@Wgy9}7<5p`L}QXSq(jX&MPsxfS)hS2GxQ<-C6exFT4`#l`?Ob0`_xM3t5-K1mjdZKCh&i`+E zlgB}Vv_-$cTIISTp z+byI!McN8XZs3DtC%Obz4RnGgg5FuGWoNSEecz@zD>C8_ z-LhZr7I!Ey)g;YV8i6tNl&^pGF~_zcvao#Lw25zDPec#T*%Vs!vCu$cY@eylAW(W& zS5A1RAoGT5V$r?5Qf@QHJC1YE^~xx_WqBfnM(CPe$!1X_2>eoSydjX{POWrjFC~MK z*o+EU5)rX9RjSZ5tgWB#vD*^sJ`EY&+uLpN_HxK%IqF+GWj`CUCo784jlL?@ii%U;mZ`ck5~b(bDyI@yL9M1ioRWNMllp&>8k~0Ih-4b*DD$b z`d~rPZ6 z(w0ifnQ{iF?G(e0cVtygoniCh5!H=gXu}fL%TS|#R-HV7B?qAIPLu;Q zwGR}DPM@DB`dDdWCpJ2vv6Hj^aN@LMVHNb8PEJ)yhfT|S99qcKPLx%~R69S_tm7!W ziPJvTR@+`7J2)+ec0Zw3aK0t&8)iXgj)u`5R&q)kr&iiD21Q&C+k=EwRtHlB5xA9C zJHGF1bNQ(M+KxP(4$U>?Lcu8^V>rXZ|69|Jb8lAtcP!!UcHLq3&OGS>BD{~WrDY6q ziQo<|3DSo~%1!Q(ZsN=a$5J8pzF+my@oGmXw7@%ao`-fZPNh6_e2?L>_aADZQkAI? z=Cs0{I)z9mT++8t;zS=yt60kDB!4!R0XoVT$NFel;kgdRhe&FWL^2&RhVzfIl@4vQ zgYoQ8t+br{u@t$WqK3u3WB58t>5BsZ(LTL+DAB6|3+*A-4-1XYR5?D_>Dq(&hbbDG zD4{)IC~k!&kHZzW9`-zPLa-W*uveH+L~5)W=Q9-MOae80AqVEpVi>}lWgdnL+C5Qo zOx57UlB6bEXkB*P=?@*hnSPG+AN6y5Fc{{dA$heA3GJ2tn|^7^4wtT*es>kfk+Zjk zm~0bm3he^1?qa9ZUdBIpg<Yq?;xH`jK&--})Erv85 zrc;f;FA40rUFxU!WJ&12+fpw%T+-tQ>7qQBY>SuURpNr{6302TxBF#WKdivj5zffI zq=T?!xZuH|*cHN;=kv+pN=tHrU=48VUl7Zpdn8~+HeDkjXGDvvywZAJTqFGxZ2L-U z8J%B=7I>mki@ufAm*7&N24)xzty)91ukujsQvB0E$s|Qr68GVg8~sOv-t2?Cd2J)g zeN}(@Nh*MIZ2U_>I7f~4X1n!SPuf>=1#YNU@MHxYA^&CopY>!eAx0-2h_f?UcxD>4 ziA)q+Dw2SwuiN_yjuYwPp#W4I%G#C5H6bXD&vw(Wl;T>N&KjT)6!7s@bZS3FKZ*6M z1%`Gj)-#+wZx4ziQ70#=baM7WLnB0Ad+P6CgkXwnD30^Dzvp97a_a}|<5Ap6y&lZR z{-YA-iLd8lM-4;{JXwjp2-R1j0v}!6xb=VJ;~X$v++yMu1{ramnTTU(5b4+v)}vF% zCi?7|SgylQTvvykxVqoNjli$W+YP<*W?7G{W-%=bXI>R2s60gsk(>;-71Ai-Hdwsi zl17nq&a>NEvzn!h7(m=tU5tyZ431&xD0&bPD?oIL(6^*|1snqYUSSwhq1}}{M6&;) zokw48r4-|{hkbci0LjJP#KnlAU(O31^Ijq+*hhCK`|@B|U_fvm2f>KVKr`V4l=1P@ zIO5RNTu8=!*{CCqVD}J5)Q{`EJbUn{ryhI}!qL^&idoYjec~dnv+ekOQGK`~i4a#` ztmM+*44U-32y|z3`Nt(JkNN&e z!}%7q;Kuy|Tm!tZeMi%=TINxqYm)&VDG5c$;lzJZ61)`8)X1m({aQzRUi_8e01g zurF#&Sg&byW$o}NgHI}dqmsRCq}<`c2b&m#V}Rp;Q-I%K7J}2jKe0-VvgX0}Fo<4c z>06#D0Q!1oEI!JiKPOuRSPbZfgLC?Z=4HSdKny-mp)X>t;?ooQtFI>k^cl*xwLt^? z4xsPwqXG0`$tVDQQ!*Anf1$Mn{!V|5^+bXe)acuh0r>pkZom-07{KFzEWl_0eMj** zU>fjw0Qyv7Ji-S3y;K%}zGyHI=;?<2Jd~%a>XuD3jqZhS!SyZO_!a=@igyiwu5|0S z(=@tR+tCyoUApb+j0KEtv9`C@H2MppUI6-2qP+mRC~{%VqpOC40J=sv0iY{^X?LI( zfUkSO0R&(-GU=EI-)($Thr*EwI8-HbW-^-cyyq6G&l&O1IPxE{#fQs zz*~T`06LF5ful7#UYn4OFZ8e_DhJRJTD$T1SRe2X;3wLPp)xw|D#6(monHl};Ln@@ zhXF?bp8@F5=2rln()7&59|r@1S09JwfNgliqPO(r0D3Fmg+}P_KRyP~>(^0Oie6*Z zVyjQD2feYAqiuf>vVDLL155;b0-!&`_z_SAydPGL;dnj2voj&*ATg zm%%fjy!tf;?Y8GI^mhUIbAjvmkU4|oNjelbhn|Bycm2rt(I z^Z|go0pkGk0l}R})GyV%dBOWYpA47+*a=X-H-X=*p?+xiX7rDXH0>+E*MLl^F!f*4 zE@ELBR*W727L;IC0nPwE0vvi-(@q1rtbwTkPp#FQU-kd8oQ`j(WqWAfgGSUZ#$jAf z?*;ljfcpV20o3nh;7x4B!|VAo`bQ<0(JyJ*4*=?zHr%f1OEA6%{0!&?ruy{;t_rN8 z0`~9E=pRAmC&15uF6C8c*jN_RX(bc~3;`@(XZ`N8b9c8I*`s4U_S6S?RRxg_V;`|ceGT?iw`U5u1>hS@4 z#Qh)Sqt;vBe!zwr(d)68TLV92U8BbXeGD)WFtdF5hisZVu`Ifc7wzqQh(O@~{`*L}tQ#Zh|cH>_0uf4)A2UH||9 delta 22640 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 c@~ diff --git a/records/wasm/classes.wasm b/records/wasm/classes.wasm index 78cf67e6c8a1221dc88d103bf8bd8fee585eb30e..df5faee48d33d21a606105c650792b5c45228cde 100755 GIT binary patch delta 21633 zcmcJ133OD&(*Nzgb7v+SStpQ$B$E&%VF{ZgY!OC;u*o7IxPTy=1d%N$2w}pavJ<%A z1tT!`APm_D1EL&KQTX~o_P-a;(`$RB1sR5 zh8Kn~%A5jcLg_0Udg-DN`Be^mZ7BU|hkhcIzSg0aE-uxhUHjSd`a7;%wr#oAgO%z% zwG^ZeXua7gfv>83UpvkC30>de$%A^0SKrq^_vEv+dXhIaY2Ol%

l7yhSlD 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 delta 21668 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 diff --git a/records/wasm/conditions.wasm b/records/wasm/conditions.wasm index 5e08ae14ce128b59aef9d8767ecc92907a87f93f..5768c26a14a564c3408ed0b8a17e8764b80493de 100755 GIT binary patch delta 22117 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 r$2YyBhIH?rI+-+O)c9%ljG}+Ro&A) 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 YzunQkd5hMS3(jIcgGQ&HV`b|90<%z{g#Z8m diff --git a/records/wasm/constants.wasm b/records/wasm/constants.wasm index f48e032f8faead0bddf91a31b0e2ebb191d5c91a..796bbafc96dfbfee8d305865e76fef124963453b 100755 GIT binary patch delta 31096 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 delta 31230 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 Wsqf2`=Klj9a85A* delta 39620 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 K@C|#?^M3&I%Nc(F delta 22485 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 diff --git a/records/wasm/defer.wasm b/records/wasm/defer.wasm index d0f65b567680d187d801533a6aeee2c6841c8578..af9172ec3827a7e0556b16cf2282e3093b7f8bd7 100755 GIT binary patch delta 22897 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 delta 22550 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 delta 25397 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 diff --git a/records/wasm/errors.wasm b/records/wasm/errors.wasm index d029c38331f17584d84bb2d73c48accd8ba48a62..a3de725b04811d3682886485044530ae22f493ba 100755 GIT binary patch delta 32607 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 TNgNk2W7<@)2^qth%Uu5hDD#KJ delta 32897 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 diff --git a/records/wasm/exports.wasm b/records/wasm/exports.wasm index 78117be7f956cf6d6d388a387bdba514939b6688..deec3d32655947639fec602e6e2ed0ff443128f0 100755 GIT binary patch delta 21870 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 delta 21821 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 diff --git a/records/wasm/functions.wasm b/records/wasm/functions.wasm index a7b4ab3f3bcc299557000f2120c0e71a194fd111..afa1c55776628d93c75141c46c29e95a013e0b75 100755 GIT binary patch delta 21863 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 SRAIu&dR7D_Ex%zOtN#bAW#hpB delta 21983 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

!5hKf zq4lz;<=SAv@E)gZ|H!oc;@Ft-*Edwx_nTpIOdVcrQq;2Sbc2CpSv!D;IXI#Z&PgiAz^8 z_X%!eb7VD(uddq0YU4kZRlm2LZDcH1{rFDSfU#!gpLVf-uvX?X@36~tit#E>J*fze zB{e>?x?nfkr={Xwa47W4sAK^B0xA{oADEDUe(KcRd}%*xU{2b{Vs-l6(tH5Dz;Z8u zURn7G@G~G8Z=}#$DTi?KPA`c(2Y4QE4M1;v6yw#3?}0x6=cm^!bi5@&KNXq}pq~V- z0MMHg-vQ`#iJt%uLiR1dHo!krMOWyDJ<(W|=xvAI0Q#-YV8G7+AKqo4_ZjZQH38j` z=R+yFZC;AYSNbu{DgfQ)uEeD)-P2wG(8X*N?z-qAmaf6*2QTvhbpMrviygX?dI><6 zP3hU#sL*ZC5>!IhG>ZX`L7`Uwblvhe?hWXE<1+yLpyVz9-C4vz3A&GX5LTeOh0!>h zrt|63IOM&rhoX!D(E0ER9MsXl@7DI{F`z>ibQ0&EhrpwA%AI;o{FDxGJBajai#Gt9 z0q+Coly7$*{JH@!9M2`ovC&!spo6&}4$SD-Z3}>Y@o*JDhiLP0B1WfTIXK^;qonPC z9e}?8=qTuK06P0=J_bVx&_5riD0G0b3QunI>^~bo&-#^Uq#U$E0D7w1IZ09I;b;*a zAn2i^?PUBg5BQ^yrFZ#z1875f81QE(^A&(LnjNrV=!5V30TUrx0+b zSo;CTQGhl(!(bMAgFXY03FrWzUCU1Z+I{#7@EaAtZ~!g&XRylBO1lWFAFYo40kjf! zeHQP(tH^sG510d>$eTJ1KjHv>3UJz!j<+>6I0A_IMT#;3FbQDKmK^XxVz%ht!-*%t zE$q(@h^>J8M9)!_7=Zm*2ip7+`0gSYbFoc@PtH)3x`1YYM*;SSUdX z^*>a2oq*uKhDPmAy|4;80=GXJl&S;B0E`V&klx(hJ4;cXS%CMd!|KTeZO|4LBQ{TJgG4CAJG;I(8Oiv5ujqZqPzz9 z8gK=0ZUtr?;LepWHNaS9H;)%S&HuM@0jC_=ua8FTPtal1qz?ss6kt4{3SfV>0&iz2 z9$wGQ=+vPv@$PUWIz$~)?zd|C4GcdR(SV@<`!fuTW>R;69HP)!wX diff --git a/records/wasm/generic-functions.wasm b/records/wasm/generic-functions.wasm index 167e197f7b5cd4e85d4cc046da010b1bec73f1a9..2cab967413ea036f8eccf60ab457469b6153ee1c 100755 GIT binary patch delta 28700 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 BJQDx_ delta 29445 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
    Iwv*9?Fmhj90tD#3QY|qos^~IQD#$mAi)65^o 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 lJP$$C_1JvLs_cC|-^G!y959L diff --git a/records/wasm/generic-types.wasm b/records/wasm/generic-types.wasm index 84e766fd1ecef897e710f3d4a67cd8338de908c5..fed2b0cd134e761a4b7c0bd15646434d5e7f791c 100755 GIT binary patch delta 25684 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 KRnvKA@qYk2IAl%$ diff --git a/records/wasm/hello.wasm b/records/wasm/hello.wasm index 54cd5804395645eca81e7ce8183a1eb3feaf8928..577389314bb4885c36b47e42eaabeb7e1ae46b8c 100755 GIT binary patch delta 21572 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 delta 21656 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 diff --git a/records/wasm/iyi-basics.wasm b/records/wasm/iyi-basics.wasm index 173c8df408a2868b874432373b7a012bd342d2c5..cfae5efbfead015b44117c9a14bd1dc019a3cc96 100755 GIT binary patch delta 45383 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 A;{X5v delta 45842 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 diff --git a/records/wasm/iyi-calc.wasm b/records/wasm/iyi-calc.wasm index 7751043cbfdbe56dfe1d1a5995cb3e6be5ca8c46..6a2486974df03de5931d6442b2938e4b2492fac0 100755 GIT binary patch delta 39658 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 delta 40198 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 o491vDTavu2L}bA{{R30 diff --git a/records/wasm/iyi-collections.wasm b/records/wasm/iyi-collections.wasm index b3abadbbc39c574a9e0615af5445441d1cc48504..f08bbf1e5fbc52f7d9061b6976e4b7e868db35ca 100755 GIT binary patch delta 46687 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 delta 46578 zcmeFa30#%M_dov3JomX=Komhx1o46!h=BXPT`e^%+tjFBvXn|IH>gzL;#OuZ=vBwm zfKqce6cyKUtJGYu($uWf?9=ioGuzCpe(y8$JojF3slK1j_x1n%U$37v%zoy~nRCvZ zS)RECzl41AYe?}_o?7&YE!eHOH2SmXr1X}bk{+WZGrQ;$nRNPuXAAF_^j?8|9_L!{ zJ&d_|XWqHa_`JM4&2{Dk{tivxT8QRN@pRT3vq_$jdK-TJglDy0GxSSY%E?-C&1rLe zbHa06k9S{Gi2+C{nnF;9s_Y+q={xKH!_@c+MNC zp27CeN(sC;*jYuP>q)iO8ywD9 zzUR|QjoF-%(2xL%)ToSz=eEkj@HaFp-t%GQ1eQO$N{w3ii_oMR-JveW(70ZeSg;oC z>=k#X3vITjf;Ja=9;{LT7+0zgz@*Ub1aNd!0=T5A0yrT$f2I!(IL7%{Hy0auYl!B` zU*uU67DXM{7gm=SFY;UndxoD`56^!|(mC#9<~+un?=x54DOLT2YwLAli#-?W#jquw;QH|hr_{gA+d>g{3htcCT}4YgQ|nJanUDsP z*;0?E!R_od&zS~y;ct_KX81cKp&2h)?pct40V&y&P@jmqb7Yi9Z#WR4(6H*Bu?>^? z&X+wa8m98R6`oTK>m!{d#qrIvJ#~}n@v`Nfo=GWu%4*NJq*P?BN{XedcaxHN*$U5< zq*gJT!B^H8)7b3e*5G`w!gEKXEvOWbT$k^h<4I0Vr0%CDw~jrtO47>tArJLPzMeyW zo!t2WckNs4S)1GkBrh>ivKTK~?a5B<^pB?3ztm$L?IC8v3JRL%(s?@*>ZOrX7Lb>rD@V-M(uT;hEj+P8HH!m)Cl(G;0-8 zk@Y6&R`<~VJDNXCEw5`n(L}6A3)%9EEn4%kwVt$)eb=S^f&!v`GK<2SlO@P9JR=pAauGJY{w9a$1^<;jrxFo&JILREx+P3C9*LkY6 zqd{%mE|Bqy>pWfC-%qF%v`<9sogj$#IXwRjtaR?D}Cf(ALnDg0NQu)P= zo)x#$L;8_h-ZRVXxYa86^R2R6*KVn?MVr)s3!7_`5xR}o3L0m&EpEPzbWVP^RK9bg zXIHm*;pWK1y=rqVvN;#nTxFX)L%YYZWhK+P8w_pC?vcuiOH20jC}R9fsb@&q6;QZj zP|v!InD6=9L9NXtyKcA1L3!s649XS{>(!p`-0JDn3m9)H8PTgc1Er_jIRbxwy>l!t z+u+H%3s6^hUc0LU($3#CmKUw}Jao5An{{_Pp7*-vu!{Y8_Zukj#yykxnH8Q}?v*97 z?xk8K_g?1nPkPq$PUb}?J*Ru8#a^a~!&0;wW<%cD$xR)3`J|_~PlV_GK5b(2Pu;j! z{wWl@Ns9jj1B)Sovr8)X(>eL!1L7%;yhzU-0|)W^Ri5I3bt|3O zs;F*rtv%v7Gw>)C`Sg*+p1y>v= zLoV>`b41ldRuh^+Bqy>4B?~iZ@Tgb(5Oxf8vQSKBFdlZkTypTS2iQ%rI}P0`5&vzN zO~+(3e6nPkKAw+;#{i?t!#5)SU8^Y1J0l{A#XcQT4+_*6+1yulq%8NeXZfg370Y7Y zT3XU+bPpnl=eJ?KJRfGwWy?HIJ`ENw>GI4AEMZxByaSY)bCs1(cb)U}dVWC3-DA>& zSg~j2#9C2hGs;yAy(IM_b6xbDnb?LG&Gej|Sk03dZSxwlWvbPpWkf{J+w+E?SR>I2cFJHehV#vvOFn&R zr6~>xo|1*n@}jMt@r&wu?p~Clf_tgu?k~U1r>s)2rmgZM74!_tr}@v4SI1D-`lFsH z1uInH`%0!3_7CDkr#xS+s6%pId1V~MnyjqG^S61ruXOSyr#z3Zyn`2S^K4$(gkt|j zV%auN$g0j%;m%dDPz)u*SKZH84RI!s-Cq*FrVR&g_ItfIv{k-meQ^q;?riZ$o<9@t zYuI!b)XIo;-*I&Ap$*aGWp8>16e_u8^H{_@Z*H9}dtbBUiEYvX%-ill?(XfwIM171 zlKSQh8(8>_J@ta~W}$CGhdP_Org<*x$$+^~(s%DP8{c=*bADet^5XU%1kYaBzl?7_ zSt1Vf)+zDZLv6`RJe0Gm|(J zZrs_LG}F>CO>o1^U%2_if0N?xWbBpKU^{r1X4O z#>-^U&=b_cP^V2b{^iM%lz(OF{KQGmlCRp4clN8ARP^_+8j+XuwUd8&(sRexE#Q?* z`g$#+GR?nfOWufYWYKBgBvH{V-^ijLebbz3RQ>kO8fCPmGCA8xy{!@)L0v3)_S?r< zw4{QW3xapCNbW*su3qRCFZ1IZszh9%Gth}uLy$AbX(!YJU6)Um4F2xCok)=Ob31q? z&;Ojti4>bJHw@2{GzQ$>zNzo0%aT%2zdk{wp8vHedE0)KgLU%P?ij$hE00myi&u)} zko~r-x&LhH3{|sfxEG|ae=ZjK5shN73xizaYD{%mk=C?vSUNbPTki8`yxN=a==S@QV5^dizvt-iMRUfQK?X`6XY5T! zX+?=Sz22 zVdD)xf1c7%i{_O=$39?VXTRxfm?T0X{Ac2;r*xr*kA@1t0?s>Q;O3{YV2mPXcO z8_8@aJyeUms6!2vJ`l$mGFB!g$Fm;r4#%@Y?4nqN`9C;szQV=fT3C9p4tta#qj^1K zSV-1zEh!ybkBy;>PwM++B)T?;$_>~L)r(&$hd~^Jbh^r35;YQ7f9NYHcJX2Yi@j#; z=(RbEW{bTE>~_p8Fgv2*!RlDgYLr4>{#Jv`8`Ss;?sv%MDzzMe9h4^#|!4- zN>ODHscgxEe2ztd z81M*N%;pF_n6*O+(dgd6tOZhD7|b$Z`-wjXvrqZ<&59LvZuU*LrEwVyhHudpIYWkC z+${SU7v>CgR(6$b7UM8)vdN<8QT8KQa?<*MB}dbBDW>Zq0ZsRjbjI@#*rqNmflv8_ zqB<7wS{HXKK8KYgq8~f+LC{uf-ZMUUS%0X<|NUC%0in5)Xjc-zo;A5BE(QLJWz`9#K+ z{2)O=&uuOFb~DIZayd*+9T3F$QLHvEJ|$iq#X5wT_}h?m=9Ktm6stv9!J}C>zWJ26 zcQi}2iWsu@V&-U7yLdFav$Cpnb}u1Z5)BSyMTtUR{T7~N9IhQ;#1vW((+ z0gc$yxmr@mLi0=Fy?7fMRVbYKSll~?#nrV+xwK?WN{h=jGQ^-ASXvwsju$@`^T)96 zBxz^Iu=b%oNQ6G%B#&j!q8nn_SoTaM69)SI&BvnQIM%D1dfdv3V&=Qnn z+(A?z=8|#(nyUXOU#SA!#Nmx`tT7GN#c?dsEyWQ8BZ+m|ee#AuvIN&pJON8m+$Xyz zclAFI#zyGC&7|>KVdR%jiMO*^$J#fRD#+=+Q=(1|YeziwP!6lpr$S+{z9oX_fGL7b zKGfA3TqgCoQ?it#&YhC5D5q%U1f8JuX*5sdz)FB0lFKGPS)qyRNqHa)QJ0p;FB8RD zak8)wlXPyy9T@OMjNyvIoLUDYwx`(>O!Ihq+la`BU6%ROp%0Xa~5e zT*z-w9&`l!q&#*yOj3a4RB{e+iHI7{YK2&o0g;f@bv#tZ>Qf?PJc}ife{MXhMaKvvKtSoP2+?UWbB0(74C4&l^TcGpJ%nINOg-sj0&OaFFnteSOW^d_73QsQ`CSyF~v8a%sZeLrpN&; zt?~lwF>0gMR1}BCZ#$L66G8)~`XOYP2&GKNqJG&__A1e@=Zg$Wozo)sML(=;CRQt7 zWHbGVi-RFkJ^P5O4UGp+D&jJyrikl=aX_jcl;|E}SGrXaPz7a16(}h%imx0EA6lqD z{~$~mvI!u&dm8JMthg@T-mNCpPvDi}xzi>`k6>BU_v>s2qRf-i+0q;Kv-1p=-P^>L zut0|-wh~3n^(X5Yf<)J|m@}wLL*uw_h!BTCKs_gx*A&a!oSI_!(3xyxGgA<4RwXsp z+EIxsA#vK|nHyTROIZO!Y?#Tmg)6(rJv5%V+)joSPT8r_3Hj_eBawVyHcPDY-CbOB z2m6$q@0{Z02Om#XGav)<|z^e`i9|#!Xu$H))dGxVaD> z_LRFJYLZKRZ1|HyQlA<$Dl2n%>WC)>jd^s`@T{i>r#?RB@#JSRQ=e{}(zJ0(lho0p z9zkLAAGO@tbbqsc%EMWYKQTBpB_;KV#~%i8(SHsL5hLfY`66*HyFKNfffLi_!uDM^ zmrY_RZGZ^5zlVspT|gd23RX?jSi>rb&sVWf;atOPVzOX6Z)*WSG=6<@IS`z>PzTb+yYo#DIEZc+}}e-%v#E-m)3lly=zNpg<9nP zX3eXwfGTmXvb{!sRO&CjewEd%_qRBM8m%E3E(RH0i`gwHZBd`x-)y+7pI%KAFJ?id zyB4!0tgCDu)t#Bcowq%e*{rEEW6n&!#L`_$S@Zu6xVU93QQW=k ze?l8njS>$oXH`l^E@v~UhLxSrf7s%>XEh|S*49)b7sc3Gt34q0TV z^5!XT_YT%4h=2y^ILy(7Ya6SEDlOlTWgk}F4CQTA-oKO=_NFY-QF%k(#PYh6m;z6N zD+aiAx?l%cH5p%w_;@B2Bmf-y+cLMQ z@&>%k5^K>gG;(O#%pgtUTH``u68iTi{&f;d-ewI@@8H|AUthm1ImGl5-jOYict^rq z^bUIpC4=`#I^McZCXU>PjhIeix{7U4-sj4zx?jRf-H%PBPT~ROP2Ml-t=lgLCE$RJ zHB;U|<-Mr9QssT7yejWXV9D>Y#8~Q4S%{`Bs0@{;Rn;nVDf3+kv`Bdem3LXyk31;z zo+{@pI4EInK1ki2cSuHJmDgT*55SYu_EgcdAF7D&cS?RnSrU)kha^d^s#wBdnb=!- zdCFU@yc5c^9g#&EACXPc^4wyJXJh-|7+nFNroyh+L{R^DlN z62RV-l$Ymn^Jz%j+OnMJ=TP6;^2h^4c`};DnsqzLWZ>sV(Dev6-vU;}DP z_b=sz9g~S2l{Zv*^OUz+c^8gJDEAzfC3BBUU~j9~CFR9_DD%?b1ulDzX<>$@JtmyH zS%f#5CZj==n}FOzLn;^aqwGW3;|t2GbV5REeM0tel!_IQmo5&RKuND>KM5_6UfTF1 zTj~f(pFrwZgFPtXcC%`MR{VgtcmjGhU4)&JAUY~<=s9#EU94BJPtHlWS5++GGg-2? z^71~Dc?F-bk*E-QUgotwFRM>dv0~+&R-WT?a0NBLgKJtfU3`B6Tw%q3;xZ0MBR-dK zXDDyA@(!Rb@_zmtolh5y|3$IVe*a=$1lpF(V48U4BCBcJVusp_H!s4{z@L21-YvcB z2NoX6A8I6q=zK$U+udNdZ#7;x8FEB!bu2{qHPP6{YdHECGPY9O0||JnxWhm*YgFtZ@g!pI z<&5%d)xrPMF;GBGFYHlM)5!5yS#K%w>L4%RTg*0^R@fF}N={d3*bX3n72>FCD_jq; zA!pW|i4Ldu)nx!dj<1mI>g)|+*m>;^m0s1f+87zxet#4oXEo699!(qO2c#PE$mxn; z$zqV5M>x9Hlh`JSTswN%L-n$aC_v0TSjD=(rfGcuNDje^AU`?%OhZ}m&gFiYx1c}d z^gm>#Z5~h{BTCj>T0_&w*>97ydkqyQT6vvOiJUz`=Cxd*Y2BG<5x_&;GDW{55AziY z$ew0KY8pAcYl6hVy;9R2P?@ao9AJ{u6J)0CUu!iD^O$!WKCZ5574Aa@IlZZ(#2GQt zfkAC5i`xDrW;l3_fU%NDSz-+$Zl<72+NNn;p}FM9T&bjK zQY4sXUePp<%Ci-EV4aXNSx$dtm!?fp-L@630g=gBnGN2>sEJzwc~w(pZ9$@cAn=pK z)}uu>B5qSir+=(zM^rPs@GvBUoWx6TH*IVfSgsl|0kLjj!a9wqd`D& zR{qEe`NJW4Ek~ILs_|>!$v1(Rej)Vn8$uiUjPS?v+{@i zplMI5%B=7Q^q-uS`PsZ+aEM9f<)T)wkLX!HY8r^3$nz)qLe8pp*H2Jlimiu9nca0s};JT-pE;*19hgg zZRFR1LbOTFDli=dzEeo)h4W#6k+U*mMPVi2Us_kPXO5j|&nhff;cko>Io-_ceGXKG zVJ@+lUKw)>oCW7+)b!`Kvltt4R(@;%(}sH?gS@-_NbKnVdBKo)xitoiPtK}61GS$} zwRzzis7cPs3=$(kd^2r|$oGrgB8m~S=GLq4iK8LBnl)Nej%!+wA`B}`1oq@CsOy2! zW2#B5@Ei1moRv9amj)Bvhi_ahO(UmoQabWS%q;%>DWBg#(|?4T{N94@9noW|_HXFz zQ!0}c>NM2k%2Z~Qc%?FWYZe_Qc2(vPw+vEhvwM)YqOC9uGX*(5TdB>4E6`g%oYR3I zIs08S^tM1zvkH%PmjcA|s%`F__if>_NWXh;JYU)#x$%72Gniq%l#JtpY0jmckmrY0 zT48y#^lfN!y23{v1Eq;0eG{O~DUqEc{y=}&%c5o|kJdlFAI7Sahu5hh zGizZ2d&#P3SvPi>r!N*yh4LB$)of=QGf2}GS@fufAtq;kh@j}Dfby^fB?cWNXK$#> z%;?HYn{Rb`2k1=B-dJUBtRgPf;?*3Vaap#VU{xW6MN$ZDllo{{q*XH=Lr>0rL6-c! zDznTIUymJg6`1g9OtV=PtzKD~Q^T3oqhd!Ki&f322&SzUbE{%<*{V_wA!VhK4PI!W z@7Sj@e~n_=3#uWbumi9o=V+iZCq^?3TFxuW-u&7se=711Sy;{jHOV>bib)5vT4F|R z9$C-vi0to}8cfSoh4sQdm}JOVWE&|4g<-N#WYg0{ZWtzuI;xfT(cO;MbhlV#J{<;S zrJ%Ax%e-*xQkjeTYT7QVrWbj$a|58GTdPb~SRIT@j=!nIuYN2vF;s}R>ub>lIsUpT z&<+L8TA;nP`>4!a;?8i0awioFbTVy~n$PsYg%D$Myr#;GtN2gJSm(g{ z{myDU;K7X#dhIY?kqc~F`;|8WCc=Cm7Zf7L^&MnSQte*LL4VX0>#9LI%y#b(hpIu6 z+l#N@xqldVs4TR3BMqfb zc|;5k<<%{1vH)80M%rXj9kG+Z zMT(EB^Jso$gt!8~?P2tNfW-h)pex7)-z$0U=*XM&pr*L929M#%9x*5etXH3E*issa z&e6PD9Th9_Xxcj#T|Wb!)zq>2{~4be1mm72&*TlO3* zzEqceGg_rC63m{)(BPJdXw4{M>>+Z-vTa1>`&Q?lt)Xe;?42c-gDu10?$TyrIIVV8ziV&Tmc|=_md3}PW!wR$G!^yzwI&e6Myb?OD4H0k7^lOnH({KvY3#-t>OExMh-qvo6UD43 zUQO|dEmu4ggZWlL+{M1h)spQNXNkGU@1hZ`^%b+bI$mhho~T zeajJUD%N*zTf7to-Xv!nR#T!~45|g`RJLF8eK)lIY%`$97g-}^F`a4cy@PsC^-3FA zvT0d+N$EGy&u`t&XtEPO)#6nem`b|mgEv;vw(-+7F%wphDWCU<9uL;Fvvi%dHFcw2)a($B69?NUjZaV|aZ_%j2WX~`67gu6=^n;0D zhHO7R_m(qZy*U$^3W$EqJg_TY)4o_0&&pmBp?r&@ifzzbIZam;f!cl>1I}vV^3+}_*ciw8F z;#B>a(6k1~v@}k|jkp1iGVMcE*{HZQ(ksosiSc(h2D$gDs;saUB!!&q3EA&>u`UkN zeg|;~Uiwyu1IEyc#6E15kh508rz+(4uZd|I&dUEC`IWeo8eS++ksLBb=Xf+yD*DCq z7>7qLZEXc2FP^uq_0wogyB%8;{B;a_OSH}ItMsi-CwqFMWN|E>$FUybmv~-_H%=~% ztiu;`?no8e>hTv?GjVHuo)XahNpMeiCo#4@Phd}q#r1hAs=QyHH?I6VvhE<5L#yc# z&x@)Jcw+dlr$M(0VA4A)ZR$QIWe*U>f4F11Yn9SRZ6Y91<@l z@CnuWk5rYTwqoYDqt9BzLeVUdce_s?#kAWIk9s=*=d8$yNJ2_oN~!G7v`46{7EzX` zI6A5yRso}^RN{E1b*55Nkm5#4)CL4zl*P4(cSKntf5eSzwYZXryukp~5tfw}@imgN zDCuV;J%FUB_&`m|Kp^5*WMxp+?MN9-Sh6V4j>weT`0k(ic_umBave#GYuOSW-C)wD`UmIZFt?9lt=s$nE~3T z6OgG@NN^*b6SLZYH*8{g8}LT5INAnN&M@)sHoO*FC<5E^h5<{SL&1b)rES~t02ck? z^Gu5-NHd_|q>`8sM*YF~i+=5Z?=cjR_+~&oN_=O8nfSI7`6vOnE86jt>fzX0>4l1l zoCS&lBeKMWcG${mEXKFzQ7!JDsstvoFK`}4c(0ehBE};_wo-sZ*^0^l9!JHI_GqPv z__95yQfnGmi>PuZXvTI+TqA0UK^;I9%9B)Cj;$F-ze(k{fgBkAY$UDHB+YyXbSo&^9{!FE?hx3&(-#eYjLjk^5^zO+UvO~h%llNj1 z#o?a39cQye@a@>ZSSIei9eQ`YD7+m!yG3lH*xu5>J9ud@dspmA=cC!F(iZpgISzJK z92mqK@vmo;ULM3dIKsQUq+0rR2Fy*6kAFKu^cc#Mf`plIX@4?FAe4GSVwVe zC~uy421^2(Zs^}W=mqYY$#AE{H{~5im>K#lqUkXH922EmhVd}Qwv--xg0G9^ukS8( zzX&Yd>qcRg(_q$VjIrM;hmeN|*-Gs1-Nv%+$oVORWT*nNX&8V#Zv`K`|;P=#@!6q2NKNumrNx020LiLNej&!?T z>~^fS*^L0ZewI1ydZBo622XepVbrzjM|0B*W_M(w0%CPCYmHn(J^H5muet zOtXH05!?t3q^bsfk`1h?*g)l(-05xLy>bmSpav%W?FO#M241V!zzb;L0jme^muny? zV+~sPL;K4vNE!v`qWWz5oYo{%0%fW#WWAEZ8XjYPNLYuYjth|P2@k;tCeUZhNFB# z{i9qS&%hLhjt3B)ML`Huia$Vn#59LH-H8N{vV!gUr_2f2N+$9r>b;0B-^+!4;xD|p zFo>^1awP3jY$t`>L?uaeWF{-ulaF%q4ZEE;4>On}L#&>|!wskG)!sQgrDa3j=6b!7 zNQLSH2&vuvj3$Y5S|rQ`acW91x6kDX?GQY{t+>b>`#k@#x9jIH_RP-fg@MH? z+x3fD1_p!emsvubwz zfZ|#y-xA5s#Iy5xoc&F=#Ij&Mua$BGJ~Pp#5mXZv>etlIi?8PM1@=R^vi=J%@mk#$ zF_%Y{3DUQVXBP3N+W(M~PaSU{Mb`+PXmziX{-f0< zVSGIS{XxXN%#*t=`|Bn#_1lbO{by3qc73J$QhAa3Nz8hgSGO;efW+FD`2#JM=Uji7 zA?r4yk^YN?|PyerT-#6Dd5re$qK7K3wT`m z>>S?edNR-o(x_kIM5Wip`LR6NdzZZu>!Uz#GhwR*u`mvxWRA_j5VdpWr0B zHP^3r$K%cGkH@e6>;@S?Y8alT1cO6l*p8IaP|m@y})p1f&DJ8S0%f*s~nmr?p8F=H`r z*1$B|);+A&od^Zd{uWU$zFXejH z2S^g49~6U^@aEM^vMWdmG8^bS#Oq6VeDyuo$u#t3;>#txarML3$&Ar|6{$;k&+2bf zWJVeWeK|hNLCtq7Dq&vhD5rO?p*D&RxiSdI528MEmI3(^d}Y!Nm#KL}#w5?5U> z@pUUP$gld5>m`0?C5Bg0MRjUPZiRk(Sgd=ENAgR`cmH}=V~+c|0%;YRa)ef{LA-8w zmRuN7Ii<~Doj_1^;%-UGG4QF|4hA((-vUpwCHJX?+#|KlY)?= zz^>PIW<700WErjOj!Sxark)^*m*Kuvx-6A|Qt4DG5xeB^ptKXQ$dU(Z;uHBMedVDD3m}Ux08Y{Z(;{;XqXi`PcTs` z)Aad0R!)97en`FtjcwYm0iXSw+!C+S{TdLX7%)S`54GeaD82i@tr$cWx$x% z3mUzK%u^V3?#~--DfPTB6&<7t()y>zM8FDOt2SMT)_*@HA;PrfO$eeLrRXxWjzi+T zyvD6``B|?M>~ysFmyvQ zabdP-1%__OYDzQG^dWK#qtVqNjsm3dDzYzV`Hnom-CZU*Rjj<>?kzAC^A$nZS}uPoQw0qB z8bYIr<9^II6YP)L^+jktlNflyQ7wf>TG-R=Zhe`;9*eHejld2@6zTsDfP61EX=Qya z(8to^b$5z!t6g6$W5~{wLE|pRaVnf?1gf}k+}^>izmMje`Wosuf-v~}z-%?D`^7TL zHDU6b1A_JDI*;cOnD>&I|!*Gc>`# z`tpDd0&U9XjTi+HI!-=1Hp{MW%!V}C^@E6~*m;jIeM5GpjA6}@YDDr5sJ}j2QsFSl z1WrV?0_>;sgfCK8^APuHn&v;ECYAz)5agWqd+hr1Y~GLQCy*Cm=dID~GBk@B^P~Tf2Nd~KcNS)4 zWf{R}oOcQbCR_D|*?b_fz9dNV0jZ8%|CgI03jn1yA_T?mXm6(tzJ@?zzCr>O^h){q zGbu)(W1?N3LlnD6_3{Cvie3Mf!X8Pnx)eb;--t0onMMr?8CY8)9TcNTAWQ)V;Wo~6i3V*61(nu12_tyGZqohTL|@!qHKHtU&MBv4WC z3&Q+YAZ~Qv4#F=GbVHAx-iGw?+@xzDQs~1CeJYTShXMeOKj!fIY?wX`g!(ZjlYAx9 zKjiQfrcVc24-`I1=*uDK#%PnkB;8grV6nG_6}LhSVMhle6m!p)IhdGXV4@@qN}3tK zmgIclEXJ(UAHh25Ml(C)u74($r*+V7fqg#^572*R`ydB7j!O^<4vi$c|G8>oArUhq z%Ls%jH$tF>&*q#b;d>Pu7Y?YbNx20-I>H@scD=9T5}-ks6cUPOb9ghFs1QMz>|Q7q z70DzY8lV6fG7KNX($YU0Nta}?z%(P$?f^B;;yn&VD3wfNl2>BI&#}0VcIYpKR&pXumf|YJ)|&q(-5CzMvC|muS13f(T`rzGEK+l(yDM zDh_+w>Z z!KF{otif%edXeM><{c^C#Set!c)}Ta*yKldqPI>{8RC^K?xD}vtOnYt2C}_{8(X0p zu>w)STZnrp=$K%&tYlsCpK2L3tQ8nWi9VSt&lR^+Y?8#4dIPf$t3*1*wHEjTK2eo< zm|xiM8pwJF_hu_s9;Z zdepUM-ma;T6jryicj%Kmt6r+Aw^S-%(iD#NCP}`cPJ^id&i`9%_z zEap`;W~MufKWUZs={yJ4p4LR;Q;E-d3;G1et79cRAM?_8gcjA6Qn}5l?LSR9iT~sb zSdM?Pub7neuC6l7aV3K=-KSyangx+eOLV#FqJf~V3oU|nRU>IlGJKFfB69xm63Q#K zn9)H)Ie=cm`b5XqeXmSdol**(NNuG!!pz}t0FPrq*l`3eBwIMR{Y387-+f5;S6px% zjp0@Ke$&~G3awsDVeak?d3*0|*=POu zT1oSk_Zfd)8TF&;qh>j`mruQ5eHDE+h;L@~hOBNtZ(Cd~jT_>9ubGQ8eX}Q4@e0jQ z|NVr`J7f81;iKx!n)WjHYKwASN;uk=+gE&8XOaV?de3m1#gz`SSrZI>2yC&*-AWX_ z(%|iZmrHnGtC!bGif?}R$~^a3G4*}&=i4gvj+Zr2SuI+U>21ZQM`RJ-W>oAMusLm> zl47K(j5bXtGPP?eBj^t8pt>oNDT6ZkK3|a(Zz_h9%9by>&zrW|8{+r-s?%(8Z7pI! zE0t6qo-vR!Abn14AxtZN!WXK=DtbwVd^RL~U~P?0mKvYu(K{tH*NCW3P<%F^skcb} zebVF0_G&}l6l;x!-x9_vlf16gI8L%mG`vD!4IlS1F!xS|ZeP$l&->=#ibCVSlw=8; z4?{0IUDNUF;pZ(a@hd<7`FPM<%Ezoe{Je~RGyD=PI-D;je!tK_lYyp8LpO9XeeiA$ zCf$|7h^T2#osXD@6mu+NOYZuRDyJ{qt!mP+Gp7o524hwWHVc)rL{lvzv6|vPwKTfb zmufQQ)%Sc{)=6=hS2=nI)hFOSO?8*mckGE_z~p+*X9)UMxAEBUGZnoYs`3TB4CmE~ zK4!#uh*eWsBjs!2n4NOXlPl1QzTdaxrK#$PT;QgY{>4#&Lc-f8sp}+2uhO!R@s{x+ z;9HM(_addVB@eX}D!mb44VJP8m6mgxQ?}YYn@O7<8)^GdRaB`z(RqtZ^^QF~3ZQ?0 zg3=xY&)~qW4;sgT9fhII%@8&^Au>nk+=$B1n$pbKC)rZj-}H=teuTi`94Flf#+k(H zD2;7{qf{E<^DJjt-w=k8A;M zTVQkPYuX5#mxB#<>_2@$k(YA#C{`}37dG!GXMPT30wLpmI~FX6;pms5ftTp)L*#Hw zbYCGJt+qPnsqHJYz@sd*=&=KR7S0-igK#cm@Ww#x+iZaK=&hVQmWttYnzkvE=->+b zt~`(uZAb~c7b#)p0hc@iqtsH-buVvVr)LhVlQ4SLK)>cBj2<+g)c@v5n2Bp=0`0|B z2Uhd~f@Bmqj5sR67^Y$TH_7ow3_FVmn+Iyt4|*0suU)Zse2#edE#AQWGUc{nM&%&K zHtYgIId#BQiX{x2@gL$$pq{$6c`BDCtZv|zawqq=;(=X}3ReQ?EZnsC=_CB$93b%SWLvewx3r!Ym?^)T@8Q|LjMwU?r#W66VnA-C+SSODlH2K`go zgbs4tk0#x)6M%}AQfP$ZCb3%3cF;Ibd*aD2X7u5BMYvw zJ9%{rIz88*zm9_DfxwY5I5-T&!IB-^dUy;hH-zvBMdL8Uz+~&Ow`$nah+7YhaTL%s zxDECcBhk)N!}Nn=G7&S+yU&fyl-DE*j7-P2{n(5@Fh<_+*kni751_8T32kI4 z8>;}7bB07EDcq=Jzoai3ODt~JKR4w0LbQFThxkTG@GjdZX0ROm5Cf8%`W1 zY#K|49q$tJ*ukp?PYcsGj>Qa#B>N;I7)-o=EWXAd&_{`bULT9QcF}hIh?`>T6k{Ag zePcFdo~L3dMgnh#me!7iIJ`%BIDTBKdjB5vel2=0GiuuLk)2&%Lj~WL1=Ho`5+P4d ziRiD{XdrmoFw*yRaBghpUBY>zaQ=qqcz{=OPr{QSdI5gnPA+9687XBl=A;O9e)nq* z4lb(M^(i#DTtMsyw2k1saEi`@3+JPoy=#i5DJ%OztuWrYhzmnIHgyDZnUZsS}Y4m;qyV#9k zke7_8=k&^o{yJC>2S<{d@mvULRLY}AR`i|7gNSW4j4aUp>{ytNH=%ufy}+Pr*!uag zm*g=UkF%iBt1OaF#Gr$C1%%#V(ci%258(HkSB?-yvkhViCEYZ|$$p_%SM(38gH!|D zST{^xNf)zqTx~)qAKFlbGI0q&g#`@#f#7oK9#-vDr* zJWG3y@&cX6dr39i8v^h-9nRt+3GwK8X+#yE30$Lte#0>%SZpO_9nUcpyLqw*6;i}g zw#nnjPjdKhSX7wAmQvA=a`qYBa36reACpOika0JeREWW(qNp;dPD_(&3F4+n^^r2E z0LC!pLUdBlZYCi>tRFcM*8nn!tbHMg-*APLaJi4yfJjJVou(65;869NgG82PGUzR^OU~MY>&o8^@wFZG+@n zaxkgC0|r1KlLE>PHc%f==xBNen(iFi=o^v(pK&C=>1Z8nU6h0!A{PD5W9q-cq+0QP zv*TwJku=a_Jh&)6;2^KrmYTSSjHErvn%RaXUNW1Yn?v|&gf1hTvCfyMK0VZf`ty(Q zdXbyzqI-)iISc}tD6m(&k32g)%7b!$9N}@*x6!q}5I=FHS9g%vvW&;O{~#c*D#cqD zDwlTzkx!4qEq;B84P-^I03ocWPmfEXB=}D9)qVx_;f?_SH&33LIj9eBYs!W+`|yC- z2N%gOm2W=~!5W*$t5oBW~VPqbGf?wa)1= zpZ_K6ybFOYXPwjQKY!mk*OiWXfmRjetXnsyr-A;lc}s5wl{as%Z{5=KK{vH--Ty7~ z_AjklPa;sc#=2Fe`+vc_tuR~u4eOSkOVZu{#p%)<tI1NPxU+~&90rIk%;%aKM`{68n#8aZhc0(x}639FpzYB++v zM?@dvjpCj%*O3j>w>(wp)NN+&c^`Q3*fE||Z}`pCCA~HUso#8z$MvPhr7#zmD}^=w zD+PR+L!ZO!D+GQ9K2h~=J5WD@S7BkP=4@5OEx(2ksmFP;8*AzEpN9FVZR*sap=f)T zWjjD+EwtJ&*U6vBHg@EogM*;q@iBm#$_Ihj4iDS=F)_k ze0><2d|Ni@*d{-7m}|9Z()4Rl^+O(ReUaGkL*BXWJb$PafCj6bz^Y=#hrBr+-r57N z{Z~(-m1F*`JXfKWU(quoobDpMmgDe|5U7i0CwS+$=Wo&^^`oztbAmS?RA&SlI&U^a zlj$$`tkt*E5UD@U9LGVc4B9Qi3{Z}Yf3e#TjAkN5;z=Gi=n6ISwO=#eS7>Is)r{wV z)XZVA3eDK*4Kb51JJlSG@I^F_H>-q@A13htf<+sVR-1vych{QHkk*IN8e!qwTNZ1Cq~4U2oNgCMU-IaOGVJ<29LEGHrVT_*&}(Ps$M`5?1v-56D`CZO95ibVO6M2n&abWuXv>x_z{n2NUx&l#mEb$ zV{Ic+?${k32TO6i4HssyGSv}-9IqDzAK{zU1LLGkyo0QfJqTmHUrOQq2t(91+whsI zy+GeL?vh^?Hmyo+=-~cw@}e&a;Tj~Y8Y+%J3fUJXL~Q*d1keyqD?k_e2yiuCza{oD z-XiR_As&E+-Wr##HvNe_^okqo7wRasMCcPoY>icdH7d@2g>8#1xV#P3Lwh20>l>(J zf5ZrdS&c>VCO5|7fQIjQpLWDK!g0lUo%&J+J9=2#(JfL^W#}WWh9ZG3@X`HnB$yC0 zDS)mNslzcsh@OtqcT4Iz_PMd%Dl9BCs$$4Ck8_0K+nIgnMKWz)Z622?BYkOiNJY}& zrx?kUOvRl>Uo&`KmNe2pmJa6LRw=6Qx0yR1hqBXcl`vu@I(CFh$H|?K{UCo0M6l6- zmBIlunBNZm9}E`$!yKy9Lem9cz4LF}yn!Hpt% zE5IM@kg7(Vkh1op%n?UqxG=h>_obNfwQhTW6nBTMNg@jWaVW8$uX2tjFXV z0o%+S&LV}u8LCiJ0fYV2+(z2Cm+Mc$;QdVS=tt#67|YFBMv(ou{)!vl&{KcT5hoR4 zSxWIBTopyU2CYKywFPjN`H(YI%*5n{v>I5N5M!eN?x1Q;Z@{-QsPi;h{#j|`525qV zYZLSySf!oL#-`H}Jq>{r?1V1W<#uK$uLBN0nN7D`A)XuQs`H#EJ!C--R%Z4nx{@w%@A5kJ6z)$H52vyKMd zC!lMx-Pq=VxNidzVG@JA*-&mY`t+$mz|)1qLfLe$7l>@9I(yLq0`Sk%F6U87dtKc_ zH^ce3Zf%tXuSHVWXvABGQC-T(0Q@vecO8uCZhS)!rtbmF9VpZotI<8#K&iTlnt9MH zs*auHxk?A4vZDxT*^cwHVy15-0-uHqWTz8f?;(VCpp(#Q$Z5@!!;D+xw}#lu+vt`u zGbIOi8!nSwBAz{qm&gujtBn}muo_5_L3;zFY&N4$pv*o3w>di>whZc{4k#LH7dPLm41s#BP{D-yRtq+W)reZGz~ov(zGT!gUAmbD*1gqU3ag+_XSP711)KW zu{N6E<6Rnf%E z7*vGmQ>6x^j8uM&*0J>3ralb^4wZr&qRwYL+)Ynx z>Ye0X8XZ;Kil*O$)(6Ax(wvamaJdhHZ|Ny%4`yBO4lq5ysh@(NSI340*6(hbbx%Vw zm$(baM}^t?Knw+K++)8VL#?|oca!+7N^PJII&RlH zV<(3SC!`~oB7>Nk!t~BiRx*Zfl4A1JghV?Q^zx_N;iwdZ?O&h(^@3@{u5WdNfv{QN zL})enM#^dg-Hr)HXEPbM(o}w$>7TbU!mz7lW~tKnwv50UarC*jj(K;h(Nup2z_+;R zT80Xxnf`h5Q3K`alY>(E%^hZDgfekyg!1fjagIVegzHIO@Zs8FWUqJU8+FZ4Cj4}x z5v-NH$S~?t6d@o-WdhRVkwpT12Ca!5K^pfB*5y6A7fmm;qOfJomC%`+en?Bx5d!-pAnZhVE6AWinMPGJgwbqe zWm`$@%|M3fr9`OQ-QP!J~kJv z6mTcX_)aXIc?mN5nyCH-k8_XjgcjA_8wBg)adhutF>SSdjIFlCX!v8=e5;V+q#OlL z2iEkGt-kyyh~qoLqI7!1)|-w~q~mMd(kxqvuNGy@QQ+1Qu|B|5i^I+f0j*d}Rq{yBZ~s4e{7>cau74_z#C8w%xq)>3F9;Vso&NWxIv6yS z?T$FI$i)h5%>948(dNG4tVc9#JLP|%H2#s!=z5(^3~G66Ur_WK!vfT+ggqt@FGbyT zFi>==XnTpLRGngN{mKXG0`S<*_;JY5lD-wyW9utH?R@$B2uCy|NN*D zrs-H()S@K>Ev_D+g@w87d7?iW{STHsxEw$?9U9F5$aT2>;C;=3e%QdeM27e8qOl1B z`NWNTp!wlAUWktL>OO9AczoFcUVr*myZB>8JJa7pQ)Pw1!l;qF)|MP5TKvMp*)DP0FMQyg%Lx85wL^+k%ZE8w_^-f? zn0S0*iC89HkVKTyGbo^zJ0^p48;H8)7-Wt35Pr*@_?=&&$DlQ5KOJD5kG_DYa<3+pcUzw)gw)i`DO6X@UZag)(|BF|q|8iGzEQef1$f5~yb>X8M5;C}z5lCK~_FZI2zMgnwf{iC(8MVB+ZZ z3A_Onx1o)A+P=DOE=g&JCxF4tF3icTW_3A2-j{RV?7p1&mD9FGXwvslmD;HKsC**Y zre7Gbz5+6zEbxBMgaYhW9%&b9&}zOg_E0 zsocF&8UdL+n?AKMf*^0Sv(8&Z7|rEG`6)ipz|qGm_(lW!>Ba681d}u;1<%XW@}W$b zrY<9f0Cqv?**|zTi)j8NXe@6GVqBP-w>oVcr3ZynU-TTZXrGi#lsN`|yTafrOFbd_ z{W|Mk`faG5XT#5%KNX?(4q$JU?upT_Ft%L05sSzCww9ib)f?;VU};FazM8RfrCaOh z(Trc1AwI-YPyB}&;_Z6+msPvWWLgac9+rv0Z!LYZzP{IJI1mr*y@oMZ0k;xv4cuC| zEpUh7PQqP)`)!d}(@2kZkL`y%IC^1l1{}R9xCD-Vk$fKUwyTlcEn}Oc3 z%UP*u^zK{&HXP{%x086#jDCvy0vtV%_ATB$qqomm;6XEb?Cegw7e$Yom2J^9`ho0E z;OGsh0c+3^xX6^U5wwtB2QA z=tY%|X!!M+r*0dLqM{j9lf23*jszm_O z=r^B7z|n6zPlBW0aK`qDMh{EGoWU=;;9I~UZv3IwBhJFn(-5P7)U@R%G;JLmz4Xuv zuQt%j4d4BWU#Nu}i*L^9Cz9vD(R&4};OK#Z3vl!xK@q<1r*HfR==hakq;*3YeUCmA zu<56XUxcF%kF)LgT@@hVzULgskH}AO^u=p33e&F#2L_-3+;lh(kXZ&tUqfDj3xcZ! zmx8ig;ckJuACA6dd=6g$(wBgd_m&r3tqXZVvLILzqS%TTQ^1F7!>*eGlMwmO?NwY(mE32Q{q(j=pM&co+>K zEvhmq!Ij_xAo>WXO;!BhCfs*$^tsFe+<~VLS2A(4p1xG6jt@WRdy@Cy=-ZKZ;pk(K zXYf4&eOEC7A4yDvn*v9_x_Tcj@DFz5&u}>UXyF$WqK^gY;f8!V{72yEN`F-Vr|bJK zAWRqU`{O<|-MF6zM?Z4f299pk<2T7Px&R;G#PGpwz@1{cd%Y8m?odxphZw`%h2GPJ z=hJX*y2<=1dcF~bcf#$0y9!4)m&ZUa&@YF+1xJ^adk(;_S0Zm)J^btr!fgj?8r>rP z9*!;sKLhH~h2YU}bQ!pFeUyWn(|~C%_&wq1hAzjDO@W*L2;`q`+O`}FE=HkW;OKJf ztVA#!T=gW767CS3I~Ul)(XGv1L(mJjT^X9T2hQ~v7!hvj?a`%`i=) z3w$-7)U?WZ=m1;{!e7AAmAl@<-S{P^;hGkQ`)YJG?lN5DJWYE7j_$A>840b4#v3(a z8eKN4F&e<&j%GqqJP=bjy8ZQN3it%!v2!$yE?u33qYGBMa1Ds=CPe@qT?u-p1%43- z2g_-2bR(s`8-aZYoQ9(dB5_Xx5x89Rl+L6};OHcJ3XX5-TsZ_iprhR1a7sqUfy+8F zjn3uVotQ=^XG@VrXIonqK+zzr5>AKcY^vizPype%aP-@WgW%{q$-NeT=m@E-3)ASl zr_n_84&g3cnMUU|?QUgSSNQkB(c#9+&*Arlk>*N6I$RkXZCf|K9r^%uvnK(0IF7Qk zqdTk@(`Xa6^%PB`z0Z;NGL1IkwqQF4n`Cb7enej!tKFE1Z_s#_8=Gx?oYV!C^rr69>6f*)B1X7e@GO1y>tD1(9~kK&IUacNg3mq$Oe8 zX{onr5Pt3(<9tql@erQX|z7*fkI^N z_j{CSWX>Of9Zj}$pJ7lIaP6L88rhsd^CABz(*kA4Zaf4>=3*SioeaY)I5Gj7!bG7T zj5`EJKMeOR9GPc6NNbY$Sx*X0i7NVBp15_LFMsO|Ry29Q4e>%I? zm^i8^%yO)3YzippwuO}iq@^IzQmk2N(9yP87Fc%Kw+Zs74U4eAzE~jD2uUB*(l)6L zCsrH$QPTJ-)~M4)V`Ewq)2e9FM3ZV-N&KaWF)=>=Sid>5lkN|i5O4DB{pQ>==bm%! zJu_Lz&Hz(@(U!pXL;o!x`@Eukrko1kA>btiA3eY{V6;EMmpifQ1>Bwi2QUp7Z5Dhv z{W46voc#O*?lr(?6IlP;ERR1tXv*0#jfjBW!+5_Y@FuVT%pJj7W`X<}EENzqddGn) z|MR@>4q{!532$Ihqb+3_%$64)!tEKT0Y(9%rNRFJG{>{`?EBJh0G+RaMIc{&-A;q1!qo@hIPfqK1^8wodDz{EC$1Ol zpq{D*lzbELBoIX9yoMyq180E{vKPTVeA7juVUDTu>S(ts4&$k^2QQ_WJvhty3Dg$qFfnRB+ZbPm(DPZvT zom33|m6Q6=DZ{juoh{@6Kh;9xx>h+q+Df%L--qtUR@#nE+^P1{8s61L>mh(o7H;>^ zy*$xIl@Qc-;(^;2+wiM@h09{#f3%SWe6@?}(ZR9D(TT6GxWuOLpIwwP`QH=f^KQk?6@cFY-{Krj zHEgR+cxzVnt~matlSVf0U7@z>c^1K7Dsk~d7aa%JHj!%YrcGoDa`zsxR4FT;do9&B zJf@!BL$g{?5>2R&?$1QSGkw$r{!5?iqtXbK<4B3fHn2U9U3Da)t)}{3gofdl3R#}! zAC9ejy`LUX0|UqnB(k$72W9OsjkcD^*Hh>!qEvwnR!g`iN=4ve`Z_qD(FMA_D5_fF zcSmRg*AGculq9H(`*q$M1E16RM?*4^)YtDrQq;CMT&f$E*pR+zSQ?N{JvoeG)D3I< zT5PV0NtL4p6^LN^33PA7^uRM!Yn_c#Da5ecfKL31#^qwOKQ8-ITw2scGCw6`7*l97 zA+1&(Nr-JoC)VGkx#KcQLEK zjoC1mH#xH16KiUIjs82*n*RT`4gJq#fQmfQfjlc(2Or_LHh!|g^Dg6B?2U|>ybJGA zZ)#Cdk>)S0!2hEgaxGqSLxNRBGqyk2MP%{S6~QqgJ>eNi! zj6z81Y~nInMQ^GIzAIAGH;1E7MMiJ02r^IV(47&{k3^(?H5^|0Xhis)aQKnP@HfNZ zMUO?$AE*cp@uW657>+&=8U0Z>yy)@Z3eOo<8Vu?K`PrqxpY+yz=gQ!f-gb2lEC)xW zm(hM>biyLiS;Bn!Kh|Gb5-jq*$`6zTyGJ#rgbziv&e*xKQVL(4gyP6Fr%HnFM%Cg6 zLcxHJhE7;E_WhSFeDqdqGR-e`2 zU3C}ujZA2tReDhgymp#Xi!1T+p9}6w$l*mL!IGQn^CK&R8P$fd$Ajk%_YS^aZ7ARQ zM6h*Y{kY;MkZAO1G?AANmXAu@W$+DFd83*+Ua0%ljN0it=T%~w@C7N$$NWd;1?Ok9 zfl7)qQi5M()IllFXLMu-f*mq%1HL4)Ht?4+>#?2XpJX10;zu?I%No@q<-OY|qxzA} zlxv3W)6uXKj!B-vUlfdPoWYN84mN3gJuh7q%x~PBeCrzf_|8?q1C6_69;QZ-VOMwt z^D&?78VTRqQXQ`-Z_(sKQv92NI>Cn7UD=G_J=t5bik4L>g^wqcp?7Kii&eI=ym!vE zobOx`T-v<8zjz5rIXWZL=kwL^Zy+AfR83!|ua++(Vbvu$l(K}UNf<5mK_-F;Ypa*1 zv>5D#K!G+5Vh;or3$Ood`RX>AjGtN<+|%|da?ZC+Yf+5W8`+rAwjm=M-z{GAUlf<& zjbpL?o#ofIn^%Pum4DoGwa#V-3ww9K|J!=Mg?gFOXAM6Kb@c5g5H{jZ+^`#nIOL;bq&Qx)Yk`p;nONO0xN4PtlBRZ>Rzzbb$0<~i)V_{s1E+XfcE^Jbta zwZK0n`SE{;`#)f%<%ti>^FX_+@*BjSf^ni|)WZLG`Fr{QVZ1mPd|+>bm<1|0-v52@ z^@8_PXGaJR6;_Q+LK~fr)paVYKo}3>Z zPAAf+Sxv}kHOt4J*&MuORx3E=b7!q%MAK$n$0xbm+ng&eRa`J zDwHqXFVoOSo>3E-)Xe4gAQ0U9FTIg6S-Z43Ifs{0`#ra`KV{W-*;wjauPiGN)Ym$d zw4}Z|vE&s4eLJ|kuwL+%HT5Xw^qSP*f;G1j@#!`DqIl6lvih+*7phhjm+czZfOxTw6x_WPpKOP3p{*-7YD6^`mKs+2!h3|;*0ae_>Yi1LsK_=RZ!sg%UH}W%Ma|$ zW=zW%!cmhyPza!4Cm9Q6Ny5q^1a*bi6m1IvSt{?LHS;wJ}R|6w>g72NnkO0dg` zrF`c+=p;FK@#-9EW{h4MUR7n4d@{FHGk+qz25=PYS&o%r{m2Wxu5Cyk9 z9S+X&zgRx(^b=$|^j|pH4&%4}XmEpnD}Yrw{M!h!AXooR7GwtfU;g^_8D4*Js8acSUb{9ogrww~{~TBSKxrkC3`SLXsx;W?uNzv--h#MH9uGU|*BbIY z+sP|1_Gnj|t@%On0xc?0|q=CG{*lif{`@C0|t^Rmv69{*xn+N%CC_DU#L*Onahi9w5Z5*GZ>QznoTM- zk*^M;rG$zuG&QD#G~Fqc2qgh;_?IZZuBOPV6`AeZcm_LBTz_ z{4cUAKzS~gmE;p(5FCHLEQ*M&?ZT;yXN8qKhChX&44?s4(4MDr`*nK9ksnJ?xpKM(jz zw=H^@nXJh2GWIZ{t+|Zd%uBafUo-Y9xn-OU0Sl|DU|Aq*E7*P2B*#pTFG^NEa<;Y# zHY!sFqnIeX%pRpNMrU~9Vlf4v%>UYKb@j0NrqluGpkJvOANNK1#e`h$!MNq7P-$fA zqzM$#A0WkM2x{_|ZPH57%pW(}f8TijN6&untUfVU^#!Mm$4VO2$gR^J*1~r}YRD1u z8OkQpgG`kOrQ5BpI?Jf_HU6g0>%svw5K0W!tUvDAv2XZ00^M+FLHDAq5ztXEjt^;d;^nH7D6Iwu^i0%khQsLpg3cBqiiTJ;Dz9x|W z-+JFaJ0IV?#d^tLo$6e^8=>9Iwi2UR2WnA$qglO+Y0>DNE(iH%Tl1q?S{* z!_{PQsYl92f(Bt3@vKgqqXj5rw$&n@W%3i7t(y@;J^TK6)_@qSjAyUr{4;xGm#O<1 zIGM=@YD(Ow}_aTPX!n0TtP`oyGBRrVqIMFOiw{)P!`S7qyDok>9c(mbVD zIn^+saBLLn69#5bHP&C523T6k$~KnNZOL{(9v_FXb&Q4%W5LL1z#cgLL~?YK+x#iH zG);DLg}cd7CO(=>GuAOyvqaXKFWF+q?{B($q;~bu25Dts>>MugNdC(LB3Z&cq4BG|OL?C1+(Imf&KF?4gtHzGrw&c6QD^cMqkc*7&9@$(rh8 zORQ__vN&sL6Z}`ylo?j-9Q>D&!3J4VGguAlsSMV)NhVklT+9|36SJIqCygCCVnQ}h zO|vkSs8w-&Ci|9U)j=A9%cZ+}oJx~ni&LLnb=e{~c@3E`VaP+2Os1(|4cJwz(SH+g zVqn7E_l}aOLRYf76?3m(Yj{H+L?gJIcy|q%c$bq?a>djvSi{EkKu>VFH1|yyanGdT zBV@9j8LW22-;LR{m}}V@VzEe(0JL&Vc zWBp@@X^g;rn6P%XX30o$v>i*a_O)ZF3MZN3+sg!Pl`}#)^OdthIp4KswWWkh!0bKi zbbFQ}d2fJsqp*s4vSjIh68@9Iy0fj!Ye)xH8~jb>tn9%0!}m)E))r3Fjxy7M%9*L0 zjmr5MR5Mca|h8m2YonN%D*G)$Jlldclz; z=;770o2@7Mu@u*vC%xcWu4undPOM+1Y^|JOeksixewkI(t7Tk!II`eFqBQN(D5u~v zRqRIPe0DXPF`CA;W+7@P^mhS&#a6wp>`LU{tE(*4-CboPv7I$tWsWDi z${cH6!|ny;BiBeRzIu%eJarALiNLsS($_{g!3L zMas9Ul9P6=jB9JC=bv|p-P_jQ!*EG19o;m?yg$ydHL%6VTo z7nIYum!!N!In$N1zL(7SE#>^6oapQ9te#6mg(W#zb-PY77=NA2>N(~6P&wjy8JDA+ z+u%r97bI)icga>l2fL4u|4rquOFDc8{s_5bdmWK{>U1qq@#o6MLg2 zp0z&gjqJ`^q7U?S*6P&<5}mbX_K|@bmGhZ$qWj9gR>~RDS0;b0uS^$zgN$pdoDs^I zubdsq`A#`0H%dysa>m{$xxA}4n_Q`^kd#QO;Q9JlapPtLP_-c3Syr_ebDb>)QTE;5sw=qsyF@J$u70 zupg{@i&&%Ty`Xc?j~WkAk0JOb6}|OGYkd)`VKnzj-)ZZe2;XnkN%*4exRhE}!c zA#G*lOl36$BCWisthV?&>lGmS79^#^Y#E_zCp{A%)0?M1x{)G7F;73|d=tXoN z0z2&oD0Fs2S}#}-@MmSdqLT+>z?cYvY(x@>az)Uro~G4Bok_ulB7(rl`95pcG?u1R zcY}3g8cQ+WzEaBE$NGC3%KCnm^xbaNo{qAfRK77+YFd9}DJx?sDuO`FZ7NA8W<^A{ zMyUuynT+&&24Uaw*eN|!c7j?`3;U38hT_UXEs=;IN=oC|*+SFWa%ag&M_a8i5f~mGQ?_nl|}jR^9}e&5(AG*NJnKt>Q!n%Qu6im~)io{sN_iu~24l z0qhBk>$ohYryH!D!{#t1x&+2OGSagSk*_+Ddw>uaIWpmLO#gx^&J!wzJ_zjk5G#8? z2iB$;teR;z+Ilx=T0m8w7D`LgGyg6O|hRw8s)3M>{t z%vNd`p=roW70%JN9d`q!!PYf1(HJDHsD6hvWM;VI%(sdVXA9_AdXuJoq!{r~JW>)w zAD3kv4D?e~Ng^~GRZSp1RQ=~!NN}rDgNMO^Kx|i$`Y27CvS$$0HDTs>qJ$L#-l2=z_*TAne2iNNiUK3$4U# zfPlj!Q@sq#cR71P1JG0mcu+-7H2Z1Vbk%h|p@Y>mjlgNQ@xwH2nxnV&m=+Q^k@fG; zw0^1y^H3FNkidzYJVevxsN!g$U(u-voX9~Dm5fx3~aEgc0 zwySo`Lak6g1Wx3wNO_BsOGjvsz=^CeThn&HV8Nnlp~ul~37p7%rLa1~9|^1NtTh!r zN2ECgns${ENegwtJe@#Xtww`ypVYJmRjw@bKKd+y6Zs07&c{)9u8WY0z{z#U>TnYS zgV5J#T?9`2oLfOK&SAX`3MFu2=MBbW2$4=JX@F)=;KZLp;(JtL9;!e>0w;2kHSW>y z%w?%HFT%IpS|8y%YrXSmSQ9e_VIizE!9q=-djf~)I!FWyr&N3z1tG8_J%R3sfdq2k zjzwc8h`wG92&10Tv_p=l%@IxzeXX<%uXRN|GN=&=MQ9mxOJEF9reV?5m~kksBGd}K zfWUZKMRtB#(+Zu)JJ7)hj6c*M`pOzj+obXop#-!A0?}BF`5oG5+KNblOp?euOiC1Z z1``<-$wF1ZpTOHx$jFZnxkTm3LpxDF1m2b^a>BD1VlOAq+2<}VkkI=yf`nG{hgot1 zd!%X8He%M-2;vb4+lt?Bg&xP8{Q;>6&+}zg^SLbbcJCch-MP6ir%vgd@z#rzkQ`Y(qNJiF+6gnZW3%^0?D#HkZ|ink>0|Z1tIoM$=1r_&T&1Wal*0+n^Bw z?@bgf-at8)IMOVKjU@2aQ(UVc?fWWHgchJ~3A}!p@I9oqD~W|3gD3>X7@1HULqhA= zT$X4~RGfyqplRckb>pE`$b!J=COI8^Nz+=Wg0avAG%o^UrJ7I~o82a6gf=3AASPWV zthPbZdaLfhL*Ih~f$^Xc;T}|3C(R1XV+m$!6;y_xQ7R)5(t!{dH!BJ6gPl9*^sORD zM__y}GitNNt+Mb0)hJUg26E&Uw3w6O0fnZ zx|XBWxo9#3#x|Af~|E30w$_2NdH*hian9I0D~|S|>23Nw%9Tb3RKMG+mLd z{17rJ%GitAh-dG6Fg%zSNc;5+hzN{z#Kp5F2UVfcvCsze2?Aq+%;BVU3OSe`$sEKe z2)4_qG*`7s^`53+^Pr<2r$c)ZWfna@)-;UzDto6x+i@vPG_ATLnp?mXGW$=F4jJA+ z3Him9?P<^)(_kgI2sy?ls;f*{@(FT7OF+V~eT=$Bm7~@%EBj$q-7#W2j%wOq#fOFd zhL{9Vw=3G!R<$5Y$!ei|jgM&>T99J&Tlu@JvF>(_ef+yx^UF5t)R@;$!}h1J1JxpOb)~X-#h;VBOvTI7^BmS75#$cL z7&YE8C@r!r9Zf@l0nRKcID22k+ZJ2RSx;-?GWH10YR@lY*-?+5Lz<*wtL1XmkiBdTTF!FVQtPqh ztXY+h5JmOJMkkAukF0&mSytlqKh&a_%}EyNqtX2QmcD}ZW~Z%wD_BFG{Fha@f~B$P z){+%0z?NC@D_L5zioejI!6@}*bb-gA5mq~KB1)vCB*B6_2BgkJ3cVt+KSERLSU0a^ z(~{RAj)thTt@z)I(rGCttP?9)_qP4cYua@b^ExK$HzOux3PS2rNEJiVh7qlnl7W@| zQVJV{UOIuOCR<}luO(}jj(sV+b*HYRq4zYBWXVna`TJ3gSz!aV0 zS4U$ULVU_Wgh16=+D`~s?u1Ag455X-c>AWR#IQPiR|DMfKin@2$<2r5TV z+CCt!P};SK>PS(vUG}D={sut}DX1BOKA|A`OZnC+DP;|7GR9;fQ$L4DS3^n6Z&yuI z>nQSPh1S_pHnPg+pp$LkKvj|QxpmJIIHA1HTJQwR9q}?}T4S(e(Fs{;wZUQ_=_utp z1V0WWZ3KcQp+}~iM+gmkY4Z^>jrypTvQ04UW(wPZu=zywHA0A8+II*kkyKjBtya@j zsF~?j&sA(0YiS)@#ip`vtPxMLtY%B1?J^%kM?FQIHRVqP$uiTL>pTU?znWQSun$=; zKgn9LT4&6DF>;7>6(lh>LB+J(h{l8RP99h73)4*xFRa+NOSq zxV98Gg}TMes=YAmr+jIN=g~*cSxug2Y3cP7RO?DjZiIQhBKsT~OS#Uv<9U{zo{#ua zWSTk~@sFzbV-)|X6?~ozOWj|MX=!d2kEks6TXE}HeYW3fzK+$X@gYb^cXeh`@<*!D z7zGCXts(1J!?uMu+@PkGYM{jP6a@*OrEEtGX+QNU#K`Wh*ds{Ot~_DwUdI|m{RSef z;n|8`*0CtY4qJb&N1@Iq*@dbD6DkWeH&GVq3M+d93iVjBU8n_!mxY>}C<}GM8oGgH zv*FhK4LI$1-CDDOEx2lGDwF5?sf{3=l;ed&(xjI1EMll@rrwMgna>L8<9_D zbvvJZh?n`ipz@h!J+TqWySE0@+K}@4qQGpoZS7X>e$Nrj}$;l8DhQg0=pdzDxsWpgwwkmjrCN;jB;GROG>>*8T*uU zCik3pO1f2LCr*LtSZ#K~3b(dq?PTrQi`IX3vhFxLiP^=juOn(gQsa4;UY>9T3LWkK zr{P@1nzV~u7ndSwej=LM))Tv#uj0pD?6Fu@%bNTao5&hh{PY%EXs{O6^h2x(YhSV9 z5bI(>z zYwj1g9kK9!l>%g1DOAcAASp&ocj|BmIMc-<>xVDc!>m`ugd;4Gv9T31kFp(g__1>@ zUc;|vQ6rF>NBh{y=*v^Cyv$XGi?29Xobz?n*9!h8XQMnq%!(c<=I_=!K|JNC{rCGCGX`>- z7~!TJG40?*5q9{T$Z&_t5(MfZhSyJ;aPGD&akHGUSi1Vomd<|jMN0!nj> zOp}E)w@{i!KA!AkNvB@|2bwxhGNUj*B7wZ(or$~!oQ-iv0=zi`>a(j6MWqujB1Dby z4vCWF7D+6OA=oNQXF^+>S$}6^TpI5wLz2oKY-oB9YD^c<{3IgGn z0$V{*$c)bP#1+)MjAA~TM4(VQ&7)8~#`tB@^ImZ??*Jx^ptPH*0W=J>{UTkj!w zjjdFcV)$cF)8f<=KA3@C1O@8wM=5V(ub5B1lSrE+aS$BRt9yATcz;4D=objzhm>Fd z!o?yY|6z(LV{8wUWMkQ?dr+Ow0jk*Vkp=ruPnZOuO7sR^aVVcRLWK`PqWS~$mR_R_ zxLySoMb}Hbd&P^MJ-Pt{_Y~2IPw^Pxsr)_Ug26gHl{bQ5tMW~L6*zmv5f8*E%{LPD zdS3B4c~<2I2qD2I7z6ZbyeSf_&zJJPi|_`biq!BE`Hy7P(V0pRB_#y-iUe2=u0TkDF_oxosjG{Wt$I@_z%r12tw={-nl#msbty={ zQKWafq-G_JR+qvqAz{Cj!rtW)hUrMwGSVL0PKj2lz!Igxj91N*sHSP+MBB5&))hOs7YSUCGmZdfZ9Q?mz9*lE}&l7gB1N6wGgOGwAGMg@md6uW$n0T69HM4U4DC zW{M#gtxq3{+`nLqM>+D)9T72$$!S718>-`3UPJF*SZs;~g@>B{qB}ZzY+i ziSvzE@em(phAZcgHSRzl%^}sa7aZmfS0Ob2DV7bmTSOy~x*ovW5Z`D})7=tr48rL# z{0j7{<%O6k(lGoj^Lb6Nq>$#nz<~v9*Vsdd8Zk*^x`HAOeW2z_8N4wj;nOkB-sTn4 zpEc1i^eplB2Y3MnANoF_dQ6_))5wz{WqOPo9ngEa@pmKMq$HII?sf?tVT!}nN(>%h zia_^1PhwOx24Z-b<{jk~=hvD>fM(OBhqP>->eLS1krCUJ^ccmy(xW@-X$FSkozI#k z?=8o_-H;j6&1cPQy&EE=577aM>V1tvM2xXd`Sn9In|lSK`@}9PI8dI8I&j%+r7_<1 z(bOsIv!`}sT6J?2WP2YoE-$S|_zfg8MbPaW@j1fl#qgGix;`C+n!@`qaRl?C(ka<` zij9G_jZLGO$5EPAgr;ErMJTXC?*snkoJsnsHM!{a>dY|v8$4=6t3~*XB1T0Vt}5` z>m>^18L4Mswxe*L9<>z`@GFscu1ahR1`$t_So0uarW8@HD#?N%!$|%ka*Z+<>Uw9d zcx(#q57nFzzR;velc=0^dFLcZvQ^BO!tX%T1!6T7tS~?NoABx2Qdi<2Gdg&G!K|O= zR8y4@pciq);(=^E+Cb&~oeyzl(NKFXKbxkPGYJ0+^Dn5ZKKbA&)@#{VK(9fVULPv^ zD<3K&Pc*6QTs~X?`-}6x{F$V$lynHZ(I|C93 z{Rl$Zd$F$5&8R)3Jrevk#6k6sA}(7DfVeBC@UF~mRQzgXrlbLUej*y@E?ODOMHaPJ zx-BN2;nK*|2eU&3n8tfW8TXMgYZ@Uv$BWMVUIEXND}(j4{&}~+Fnx#+>&W+BK{g?9 z(W`(^lOTKbu38t_DV&8P@}x^>;x+2mu!CE@Vk6{lHFA0pIic0UjgSpfPw_T+UI2MbLiILViLN~g zOuiH;_C_VPoy-RJzv&5Hv6O`UreG`C{6&QSphN?1 zm>u;5m~pIA8!|nENP(lG6oUEJQjSTRH_scwLau>$r0`!C9iC`CN}OSPU_T0spJ7Zm z43*Tzah2r?Qf>SsJsNgckB1F4j}#oI&iEvriy1IwGYZx0(<}NLKZ6}?ODTzbq=2`i zVFn(;A#A3N2grp%C_%Wy;i8gqBcl=Yvm}eo(^I{)D*8eyr=jTm1Q^1Dg>*fk@Bq1b zL*qEY1Nv3)O(RT(wpF264nr-`Sk_nb%5~A_phPKFS*6u^x_Lj%F<+zpkr2^qX1k$s zB`Q$4b*UX32O+g!S_fe>3LW+eq0@u3B|>W%wvlRqMeumwhM)i*O8ir@Dux)AhUO_ zCaB3F^c6Y3l+(m;Sa`IfE2X68h6V7t6oZkiSn<5e6z(S=e+P3=_%Q(WR^4tBW- zF-@vnBJS$QnC8x@dpj(!oo7oEVY?>}adWq)u-7ml^`ih!bUD z)ZFe!z)94q07!9+<)Aarpzqdcs8v}@H&&O^Eryc_ODv1L7{ZB*9q^cYSLM2^C6g1C;=k34WxG5ZVQ_Q z5-GQ4Bhk*yfE*j+I)EwG^i3UYM07d2aqI|vyJ`iF#fUH% z?!uRcv0EK(*!`@m+Xx#F-T=V!PMa)ZQ^KuhS5dAu45us(_lT^+OL*7XxKv?7>b8AM zm+dvZ%QT{6+~vv@-oOc$GK^JbM|GmOsUsEYQFKAu(d8BPxd4UJ-E3jngU=YHWVbt! zZIl)43htU|SHq6ca|=1imD%OPZ*arHns$w>+y0#mFeh8LrC{3YNYcZ_+|s)_hxdTO zxnPjC%MjL}+ee+vFcaNzltcKBx(z1`Z^eX1Ru^;9!EUQo9dYX9ZuaqEm&!)%>A3ks zbT+pQg>@0u>c3^}HtsT~{H`X94wa6w-YV5h*)*hmA8C^-8zlESshOND4L6?~R4Z|N zgR6hHmEg{p&BkriE>U=Vce^|{!_yd-D-R#fx%GAN@to5$-CV+EMCKPZm-LK4p4Y)% z%At(T>84{Cpo2PLk`Fmc5AcAC(Q%Fwn(bn!PA4!-y2lMGb1^!Wu5j-O zPZ3>f7#?Ds+K8~3ZlA;1)wr}mRcFr)(b?u8$gWJB z(^B22VNV@!*sGvoXR_t4&FIyMlT1$R>`_Uc`#U!s?zf35%|y**&MYxGVmh~>av)iO z0d5Ywvub5wqvh0hxPyl+RbQv<*h~Rk!~~K`*VR2_=i%9*tg6a{Zi92JVz@De=j`fu zpmIu^uYFqrC85VOPJd}(pQ*@=emTK(?26OO$TrwgyGF|q#-(w`Gv3cFZ4VbycFkU1 zLjZcP<5X6$DJxl-IW=U{MhZRK5pU9-ON@bI$QMkqZf|ROgkd|OA#fk?t=NN8SU|64 zV>sGs?L<349c*Nz?dI9;aq+e(83Dni1=*Y^`%zCJ`#o;3XBrHE4GUfkS6zVR$xtzjWFy3P^@iTY4eZXE{UhGFvkf4 zGBq2Bzo$UEk%!YIl@6z|yE$DL9l#CS6xeaQFvakxL&ps2F~pOeJc)C81W4gIv_(8pyob@G35vTOHIDsCb0ew| zdu_HC10b<p>#WJKtiN8i2%i|16M6b3)nOAOu z3;-RS%fI)Kq+93p@#@(BQ5PlX1($dMgs2wUlYR3coU~v+@I_M9{)aFJ0;cEiW{L2@ zGQNoYEZXYBe$2jyQ2AB7qQaZ4XL)%}qS*UT06zQX(UHjk+~m+jsU9%4?ZwrVhtRrk zsl|(h-5U>?*o)hOJSM6BNwrDu#r}`A`Tt*;CeKXzZ`Da})c(in{GV!5sEysexKJug zxiwx@+J2Osp0~-}K)EZ2ZE9@Elnq-`@%;&Y%-t0aJx4!T$g3 z0y-o;i@unocEx9*Goodj!yaxD>YS=viLkDWCNH03KTqya5I=e*CsO3D;Lm)hq($h~ zG8L*0@wp1iY+ua4n?bzcgHL~`0)N6Rl#IAxv;uWwXw;d4V!`q?F?^J5qiG9S{ z(zGZg4WW8E7pbFdS3$3$>g7a%v_($=O>Bh9wA)a_ zB{-ZgCh3jjZId8nCw_Dbg9P+EQ2Y#foRRJ?z*Qw_n9u>@z0>qMUa^Uz)8}{xh{p={ zkQv%VCh8T_$fI+YU&)j|hI1Dna8WZrbhCz6yhYo!AUi|}^o9cn&z5)!Z<+`nY#Moi zMGOS=G*P^Yf}^gplBnelfE=(VTTHry^akj+m}TVZ*=0cGoe>p^?GJ_EOjseu?Eu_K zig)60YlIT(dBj%Fz_DMV*leQIEiktFfYPX{usqv6POfSwbSi@37E@b$h$RW9MMGO;dHSh zMtz)+ZZdIP@g`z7nR(<=Bo6zs(Dury0#VJ>8prIHlUnQRdZ2zuq8)U0QsuOJ*a z4xDgIT7Yv?obmjHmOi7P*meVvt{$JKw?rQZN7Hs25`bsWdZ{^2FsBxvZuRTM1#p=P zF3JtqZV9=1R57Apvw$Ptq5`^{C%IIYv#9Bi3kM{B6Xk-AYFMY9PmgTHODJEWZS)hB zS*JL9Z7V+D%+#w$BTC2d@-!aDPaP7)8k|mjO#HlG?cqdoW~2s(RRgiD$+IL%?yO>kSqE8Z{cP|3tV#m_UN z47VW*F(8n!@QMwLW_8oVyh7M^5d4Vbaozzq1`gT-VPPBz*O;i58gTv!~wmXO@?+(bWym7R+z0q^{4^x$n@S2t{N0# zpZFwbYKZp=|1Y+U9xj{WIdlx@#~wzhZs^Uj46Y{E74J{R=^S*T%ej>7i#c)v^&Y09 z>+s2E7;qef<#&+Bot6jJW#603uR)S^xRn8%uIa8v2T(VTkO94W7CU8!G{sUAyLbP? zy-qCUsPA3=T4!yVXCA_l?n+Z0T)WpeYl~yrA&gg(r`Zf5Zf%-KwHq_$RPm%q$Ca17 zwh5Y};9Omlnq?PV(?rw}nduWMQ}kB9jo$^~f8{N4* zaL5ehse?#g@-Ub4d=TEq@#5xhfdlXi0Os@ZMFC}b5@HD zyhbnB6zk5`9O@|iIda*EIS|DBbwA|T3d!XBmjoBDAY_Zwx|&aKRa+MnM=$cl0lV(d z2`6L!4OUL~8KY2-G);R>RnG@bJ=%9Tu78CF%JZ~%>ln_89_b5wKAnujR+=X^zy)$_ z)BMX?I0{$IaS3OVo`9wkjp;G!5tY1i3M8SCVmIz7>Ef#?;foQ+sit=dGRHe{JDpG< zxT^-r=rW+$7-z|o!ZQ;ohVHF}X}n+Q)#a-3Wpxn>8K4(TiI~UH*962FdE=KB^qFXv zv+`-!KIicPn?^30O>b-yJe*JW3;sa(!?@oJ7xPL4&&;QbKJCSyhyacg2ZaS}H;-IB z-8&xx!_Q&{T^at%YTlM7o73`XulhV7D<-wmG z{5LZnZ5UVwaLc1`7$*|t3M>K=Nif_+BYzySd057x0KC3j5TFe-!V@YnRgQezr0M;K z(EneBbeU)d!^JENDb;O^=HDtTp!b0YG=lwENc(U=f$bp|EgLHMqY#r(n+ToxknGF6 zrjzL=YIxIB!`n6qf}N8ZFl8~` zULX34OBhx zyB4$0OQ*Of!4+wH< z2n6dD_pQHnVz z&F>c}3RQt%J*tP^C^E(66Et!YT=%~vfNo4X3&ZG*>w;3KMxyWjV}MZgBc(Ok&Ot!rUeo0)iZfd#JovUyiJ&fVmxb*NM7{YO`vOlyQTkSw22bM zCL@E4ZLmTd=aUWIO#OUMA?9f`Z>=ETUdjR(rZ|}8Mwel#$D1JQJ;+O?(5tV*E)S7y z1zEPY7}uxdcIS`Iuq9sw(kMiqPZ6gvmQ;^1wxJRpH_4>@f~DKzW(m0{-2!nf?sw9* zqg>sO6kTZJ7$$%w-MYv{K67YY582MpvhEQq@o=gD9CO}Yn9}_Z%XzxB+@hG@E+1Qw zU?+D#un%FS!sFTg$^Sl{T_HB<*mKau+mkDe&frGhe!&D{Y-e7l27T&9R3pY5k0$$) zS@eLUr}boK-q@rMx`^eN+BgG*DoBC`i|f+u`4+4Ue`o5~c&&icJBGgZs5?J?efV!$`uI zw1EyA(2)?P?q#l5`vC7E5jJ+ff1L`jIR=O|+Fq$T`z3+sqd4L}kP^4>_L!LBghC;` z8tS5gUXNWV_F|lEO1l;nm=BQWX47eG0vdZuKu}^o=?aKZ$fI)KmD9HdP&cqXG%~98UT-Q-$n7tHTlxR9;C!7?A7; zmN$(2Vlmw=Shh*jITgO zCvR_0kzKBwCfRRIfq39#d!(jpymIAPR8!$&1j9ro^c^TMU)G-7!uyfl1q2~85ZUt= zLNwYij>g`QJz{>JFEh6g1EH{6)G$$ei|SrN0eJBmMXOaLxe}#5nh&cDU6zuTju6i) zQJv&DnqMcIFd~tNvzK&4Rd%VhwHwbdzk>3`a*zSZCd45-uEK4aR8spK z$Ye&7gd`R(YA$n;nwu`9F=F|J%=GZ2O&F+PY{}p>mz~KgL zw^-5krp0ZE-Wq*BEui0u1~q@m9^wHvV7p~-q3Zcl&?td*K=!y=uPO#@eE{CS;Ccq~ z5sz7|dT`%$3+ScIPlDe2gy@z!9spplLM=T`gW4~JcC(>Vhx*k}u2Xb;iY-KOUSMxp zulf~opvT%sG2MEi2S$uX3*`#qxO|$ei@9XH=1w*SfCwGuH)8uJhCLu~56OTKCLMTB z-3+;hUu_d^=S~`@?|+HcI*QG15x)f zi2;2h3`aO}T#<)fTh$&g#nC6i#4^NT5bOsdg9qk4z=XN-}p@W<~dUw2@CHyd*eE`#MpsVWe;rxNT z>ZznsMg!b?}@h2SW+Clh#3JmN(#o-Os2uc*@<#_R+0 za2(!Y+X%J=Pr$G#dYt>kVbN&x#KS4ZajmzUH?dj8Q;&)6AX&l2^u#g8B zW@YElLz8iAjcjJoBoY4b%?SGBn<(PeD|x)S`Bwo>JLxEVCRC@BRm3_Mjpq-vN?J&x zf&M{{Ob9~>_hWfRJNmQX!-4{P&u3A?LWBX*`RL&ViC3QdY;jCC4I2t zqCpWPD}P7uB{WLI1brY-%(8yE9;>X#4|V9V;wenTXgn0ZKg2u9+QcYvIh(HpJX{mp z4hZ|D6KN{`+@<2OK zZ8^M1cJ9mF0L~lZu(yw!aATcNc`e+BAoqIN?M@U=cW*I9jArs{Llsu|j-vPsUH(rNLmr;5YY4FdAv4iMXGNm@G{0)RxAu~eATYAwP6zf ziCtrb?&sfC3*vK9H57YnW9xiz#nK1(t9p~CbbPQJwR;M18t^ONH-LtENCEf&tpHa8 ztRb_w&m4+A@&w>%q&x^{@58760eb-_06zhiW@?)J9+4NHqXLWr(5Hs_G|;sBfPV_0 z@B8$=5@CQrfZGA10rbV5odEhO&mI7Mgy&fdQ1pGA-i@#uPoKm&hp)qYh+c637b)mV zF@aW^MxTcH13({sS%EnEq)HHX);!%btqiaZFrmAq(Pt&HAq;&ZBI5>4qt6Ujcs)43=qdfojT9(I-iwgBk$?3}wajb5}S+^uQ!RP__+ntm*yHef4g-T=^J(71>2$-o}? zoGD-yU^#%^5hj>mN>2du0rV3F69Dv*Z$LgiI|z6KFcCtX82~zzVjhI0M_>;QflvT} z($Q}Pd7}1ki2YvjF<2{F4B>#yjFEs0{9Gz)}#e1FQ$U z3ZP54(+1&d=771Nr<-t7*?8ZZm)` zYi$A0^(?jyngreseD6e>F#x)#l#6s6ad7~;nsf&mbQKexqX4=>bZ>P{qnklhacP1s z<-GS2x+K868K1iY&-?LvT!8ZcI)3W~kRQK(6AcIWtpGYJdvF&T zA7B_Vp<|fkAL3h~pn2mxbVK0XKSsL%-VkxLNm{Qt8YYC`NK3nk4PkF+C-JEq)IWV8 z`eOiX9yUQBZK$pI1Og$^%PsK5OyH}&fCW3IX;}c;52*>4wk8$Y`1g4HpnyY=6B`y}a0G)Q;Lcw$Xx0NZ08U5HZ^sm%E>zkI@EC+~{+`1a z?S%KXRZelof$KWc2AW=`)r&}QAN&P?S%8IrRe<*Z&R@$YrhR~q!O{m|Bhw8>_(VVe zFdwiH@G-#o>tS3vo%tXlEWi@L#{lQ=8{n79Xgo5$R5*u_)c}crn<51E;tQxn$tV!u zg%qZ31^fZf@Ws+o)tRZC!>38_z_&%|6Qobm2VCvHlz&fn*>nvf(lw!s?7x{`gy`N=rt!W zGd%;KpY3}FnqCV?#)ntsL@t|u#6KgN4TnI~c3#*BDqqSh@1-zFY0 zapI6sBedbb@4h!MV#0mn?imued)&R+S%lm-DKJq>NyVr^m0R&7Kp(5u4zYo728_?EK=%jnK{c!IeF=6=K!vdHQo)7Z6i6;?6pK2#E z`S+5Qvyi8G=XUsjX^pI@Ke5b;`>;%AY_K(d5q}g;?Zy0aIDak1f_!jABa3$x@ZP%& ztHr@q-}OAj+PVz$_rcbt!Y>!Db0h=@FYdr1y0slT=*Dl^;wI1X@jjt*WxN0O1Kuk z)i>BGdY-ql-g%yTE1r86g;61g;oQDXDrwF-JomMg`QAF73S8>u!aA9A=6X^+mF6~w dYS(%^uN-XE*nr>Y8f=wq;K!h;;*Gqo_D+=FFKhXWHJ4mm*3p zN9-EL8=X4ji8QrLjsCpeivGUSn*K8SV<(n<+Q+6><=sruS!m4cyE4Kh2Ug{#})r8 z{29iI0(sGifrXJXP@I*!oyhA`?tNagHqa=l9YV$9qU!Vd`A?Ri&leV*FKgaaHa_#? zz`+VfB+j<=XBU($V>o5dtdO>%%*WAbytE+j{Gi&bAkezveQZgf;)lHhUsfE!i=GPf ziK$iY%6gO;Hx6>K<7BZJbHvMMuPW}Cm}UgNONoo{Y0>8;Ii-R8{MV^N_Bo^X<%t`r3yUy6UoG2*-FJm&4Xe5)c(NH1~rM3 zmm4HkKDD3fPS$-oWLg#RiOeg3tIIy@??a0~7RS_fe$Kr#n zQW&C}w5c5UsdZAdT`Q0j6uV@-9E+rp?8AUZro{MDH)Jr7A+xl2c$+86vsK04b>FD7 zYk`%$+u`rqz289l*7w=WFQK)42MEL!_HT>7@An_f-`N*PAJ9Q&hzl$lFoGh!8IZwC z_Z2r8IG>?=o*Ps<^3)PVYFOsQ;!g)1BZjT-6Bl?n>p$#D@yfv;GGOx$0nXxGLyqZ$ zW7hC=IK_L0pWuAqzT&+5D{$ZpJTa6Z$c4c8;h?_ zOyqFNKk#p~y7=srSqMQ+mLYJ_-W$NA?xwRup?dYh?%Ylz_-{#l$1#aJ5GjKNV7GAVJP|o!8{QZHsW>a#WGczeN zX_SXdCv0)6~8;D6XUaG*64+DT=+cTtdD1|+F#sv zo?q~VkpG9j^F@6s&kpT$4f!iX#%YM-(RgIF`eV+8~+&}MbD$}+2znnWM-C8qNUzN$p_#MO5Y;v=h@ z){w1Bu3@tb+QL_3oUb~ujQM<-*8&yS45W(3teHq7=G>ZGL4rT1pg9e~#|mEZ#$5_w z9vWC7GFF40yJvHA%D8;Fw-T+l14cdc;wY7yl7SNudfC$ zepd!|=GMMtr9_@w-dD~Sky)fdKCiDlniKUmdhfO3OUKhWTT)!(^*^IXf%@L7mF_6e z7+4#W-)~+TzyV zjHWTW{@dV~t&+L1_^oeeQuJ-#1*7X{?k&##ZawLT>fdwH556Aiiygc|lxAu^R5kyA^k$mre75ZksbD-&v(cs#-sM4WK6yn3nWt24 zoNt0BGhh0s3~(c5p$hBDPF=3@*`bXpL-#%Yi_}KdRg- zTa!7%X?KMwDV}jDHaDEe?&DHG$@mmcCYzehi6!WoV?=v8|J`PTC!K#~dwDvS-H6HO z)SK|KGU^#@}|$vw*1aG3#0d73i-f^Lm4CJ08scHKq9kvW;2>(Tht(J+#hj)I zWIIfJO%|lI{!f`N7b5e2FY#8m&YJl?kbH26Sw*#^cu=PzF8`1Y8J+N zca<{lGsdMrVx%94AyW0!xacM207-I`NK=ujrgWtmgiXV%VXTQM$DnM54+7sOig-r+ zm+|n^@bwwN(T5~w6o-se;FcW_9LUJG?Z%;blaV<%WYl>w|9>8um90;`tZvfZ4>Jts zYgU7B){Z1=OgO7K@P@n)erHIcLH3Y@WtiCtgBbD!#!HEl-0CA4@A3}(G_WF}-YyMi z&A~P+E`lvEZ>ZvCqdq({dR(SfpKl=!w&WV@SA-{2ozg_bXhC6#j+3m#vydPYI>e6Zh| zgcMR5OQKk9LhxJ^I~wy>Vy(x@vqYk6OL;bx@>i?CYEk}<71%inCq}cH6wZidN6P9r zt9(VNaBB(mkUx`hPwmXwKooW44iPZqglFD(c z980qG0;YB!_o34za)>+VAa$J?&uTWdCl#Y>RZ6JG%cXFiM>2ylIjyv3BWr0qJ4{UO zUzuS+gD$Jes#kE@_6x1Xcr`=TBfy|81+f zS7kXZLqx@)O%kMK{>g5muFjk>#Wq!vd9W+3->NE6uad~7#Mr&&and0IYZGO^SqBr@ z3$e<0GRLK`Ow-4(1etxHWKlJCmeJrEk;LlPENH^D%-P<^*-bS3V}NiQS~tDFNz-N{ znvS$~BrzYm#oAe)#ao{yv5oO=(okQ$W=)!LNY67ZB1qaGFu~(;2%~10*U6d zNz*5e7&$c+-jdW5_9x410UQMXBc8F72?xq0Tf=IxTQmO0_B!MYpE`B;Oi9ffwO9uG ze{Iz?|J1RQMoT;$>adsitt~+r!T;E*F~g^gkyskl$8fejtjWA>{znuKOdUC4`u!s% zmM0prRS^|uw~CC`H2lXu5{*+3&g>rX|=41?N}UY>e5bDxV9Z@ zjnJ8P5-DphoyN);tegeP+1*|?BCdmM#Ly0k!Vavy#CuVnJKB5oGGa&$&@)iQBH-95=-Nb zGIFqT7Ic)=?(E1CQTuBhS=}1Miy2-`GXWm$Yt9N~|Krb}_&39<*h%)b?eys+tFk&t ztS@(BlYpmLXUVn+oms=`gziqLw9f!sYjOj!y~u(BrOGMSMTS~+k(3VV!WtlLj&ioC zw0FA5j!Eq*bKa$#hn2HOIUgw}q8n=%LAAdgrD<*Nb*{qzmmGh@^8s26%EFwnJhQ|c!rf|oQun*zn7`yJ>x5>Is zD(7q9K)Vxemv#5QU4~5MJgb~@$`QR}T3Rnzyq9vuE9X%-5v4Jt8Z@nuW*u&aW|ms7 z^gS?lqWZ~DYvqho&Qj$ZQqE=N#N8pW%)CPu*mQ?P_O%Kn^p}xclru#+PxePcORX1_ z^DdllYT;ar;CXTc%Lea3u#%xEB# zPX@YTDqqht+p6?Wf>Lb8`rPiGz2yMx{5$yAD@N)bF;Jqpx>&iryVf`@` zhD`os7z9fuv8q;+Ni3-(V8?-qYFG=YrHUkAx7|7yrzjWiTDFfg?&wbwZh3rAP@s}nf~q#=`TY$5IE@{B0Vys ze5dM~M&P7hchXI}f)Pk0a57Y{rr{7bNWdLPBXH75i6)1nmxG@`Osp#jyfM8Nh$j$J z%ch%73+JNQ1Y%||!*n2&ys1`2(+I?)DzPUp-5OGRB?t_G*sju-fT^h=>EA;H2>2F8 z)Ol+9H0^PTJXRBh!>d980eF%meYbUL4y)o-oc5fxuFPR^VJhj6Rcp17E-nvoFfpW4J7s<^+OU{f(8Qd zhfMUmV%3<(;)hU1&mLr)uduMf=Ey`4R!637X$DhRwVf3{S4qX9Q&m4)L_sUeuHsLi zC-Ao5vVmW9*0e1S)(>JejlerlCVEzO(X^wQRck(rHdAHxc_|o$D!ZpJAKgaa2>pU? z-~kK(w8c|+tg@yNIEj({G|jI_)Cv<4(7^yl0KOWIN`cmqb`8Qz;5{yz{?l;H)UK;) zMd6q@O(PIFiZ3HI4HYX6I-IxDS|^nq=bJzPfl3yC4lA2{3*?Hxp?T*0ns!p5PUD4d zp{ocSqUZG2w0Bf0FN{J>1mT}ZK6SN*FJN)^cB&^s%Ru5?PA7kWA_StIO8k11rnw_| zGxQ39_mJwlU&o@;6-!0oRg@y|9#e_Sr&+nnSmlm;lpxhc;`SIH5I(mv+W{?sli?UjzpF~~LJvw3IEfo9%;Ihn zI$I&k_#BKNaI(IML}&xIp7Y>0fs?);P3+>-gPmF0oplp0q3~cQu`@cEz$v-5%_>dH zQa$7;{2KjA;H3VzM$--|NoIvDVl|DxN$hBy4543JsA-3wq97w7f@=5Ao+2`ggY+Lj z9Rv=lQlx*Yh!BNaKpugUI3*WKMx8y4jk& zC@4WatS1+-Dvr!d*$9)!Dfj}IN#NA^5IPq8cNtzAGELy5UqImrsxU7sK|um1aVQeO zC%5n+6eLjTrY7c~yP%)l3>6_V1P%i0hV%ra5jg3kS(>&86PVOhp8*kplQ`jSO^Zjaj&G}?kzBrR2nO+fEo#m20|ttM&c?(1ur~|&Ll9JsKmRT z!AxwOUd$@iv56>s_V0-hEgM)(Nh#YCiLbR|{=rteQGpL@fdzp>)Le)vf#H{}_pI1f zRu=`pHUi^rqS=#_4n^xU)|sk}IGOg;HqBc9IJ!;-#Rg}(AoSml&mYe4S;449I%Crl<*r7e0jw2)vyo z)`QlOC76pJRulc+$Zk+@1Xu;bJ)wM=NSX zp$-p$_f|zsmeubGDC)Om9lrf;7X|HD?+PW!y^f+26&mguvQFYAlx*TO${A1IXH>~M zUeUB1hdM#V8^F6)C7wd!GuEe1u!`m}6_axevxTZiFYJTiLg1~d5{(m}KcoxY^cpHX z3h8e+R6dFRB=8!lU*3PMtmwFfYf|A%O?(OA?(R_PHe-WAeF>$}cce2!;Z`((ziZiS|F|x)c?`j&X1nUP7 zp;k)Q8){l*rQJoL+tdZJsV^h<-&PaV6r)HH7*tDP9c96Xt$UVXChVlB^;kK}Se1Ki zb++k(rVUf&SmAZhNf36o%DVVG3{aKG3n#;TA;4W^i8b~UO@lBg&Tqh+P2jauf973~ zO0%|I%X#FbtrR((q(b5dyuYcu#a5F5j5|B)6INde*(PwndLRJOPpX_pt;dlTzEg$X z`OJ!5$tn#Ss)Ch1*R-cq9n7`7!@iV>o^lmo+Bq#5hw(ySd?Ooj@G^9aY6vfU6|zCV zyC|&pSia>DQ>6{W<}WnuSv8D_jI z$2bm6e-Jw`1WtM*q?dE#Z5Ij>IEl2q)XHIZf8-+IC5kE5(UmN|MnEp3JkQkCv{{M| zTHy?68G^{;pIN`GWXbHfm1wc5>;o&^!ts5zzSdn9Hq=W?9RUV3vfk`n>-t(&uiEdwDU&*W5>&sUhkZ^*D1;iPGlSSMy665|Z(&vk5WrIpYDG>0S{z+VH(O^Z8i zt$31ky|djPnsz&-yc(uygOCz;KVoW8OnI-S-A8$~xNt1AS5w^Gkl?A5YXo94C}tsI zOvEJYh37Gu9oDebtbpBT9ssJwl<9t;>Hs;`;%fe>mj4MqA?hwfC8S`GZOqh?EB876DvsM?f4ue0BWLh*hS|bmU z39~T|E}~S5u7QFHBM@T|j<_-9nDzuk6(FjZa-V?bCCa@NN$n}g175u@bDy-D6tQ@A z%Ia2x%MF(`Yf2HTQYDTtEeRQuqA}K4H`$jcKgwEP#732W6{%9bPE`BLiFQQ@km5Xhvtm?3^6o`B`ihET*M%5gJ9Yq ziaUh3rIhPU>&SXmsai)^K{UP+!ocPoNJwY~&jHFY-oic9H7wCu{1ltRPFm$Ru=Vb95>t=y@9o0N!F7aSaQZW5D^m%P7g%Q(lg8PyyJL&ay&gj zgv>L5Jk3$+qmn;1uo+?4n}6t8wz1=BoE0=eT}i7^Bb!ly27ne9i&aEA#r{sQd3NkQ zh~16!q=OVYU&h8wvW9MBt>aH1tu>|P&_G&H;WiA(xD(d4ZLD761*D|_Tl}T^_Bd7P zT3k8n+ik2$i(4QhBvkQtHvnH1f{(yXptui7MU=DOGqG=CM^g?BD%d5u>%B-!m$pCSiBdkctYin z^~Y_rdhNiG#c6B&4%Q&-LptE9S6Z@e2Mc3~M_~y;L2L0#pjD;%SrS9dhMZV0?nJZ7 zV?SLsYZP>{Y}S$(yIFoD6;at`NRrK35+j>++KSx8QY+sc$F$x^SKU&eWI1k!)pr+L zmN*tuxa4O8kSZ(QV^_S)y1t85sdfMvWW@!@AS>SER2*S7-OZ}7aaPaW?7sLxRUo6( zYkk2|_AiMgZjklzZdR)*rO_yj-vT2=^73V=JL5)JY!61?$5xd+(BhF+<{p;7dRRmD zu%VEu{d;gYzSR184-BN$=gQ^hnYeirWpM}zxBHh{eEc{Ftxz_UY>|r*(B(apmF!p#! z>IHTviO>7B-4KYFwz)zQo&=*g(r!( z5xiFHbVK~O%j9WHJa!TnHwW{$5R|>3QpI-U8 zWxW_aQlXG7-9stV{1hkeSs#uPD057NH%o78czf!)QCL`{SDLP;8{Vs8s9)6dd30SE z;(M)~hr{={IoA+Fc{gT=nyK)43k*@qH~m39Zo1x*%4GRPJ-f^|c9~^VCQFv7hca1I zroN9?0v)Do${}jXme8iyz4I+4fM!EHJDoR!b0z`^;BU&{_1QfMX3&uuWkjd)b}=%` zoiYn$uIKtPU0-|UGm$*riM&WSQNVAz{0=82zl_Wbf$bokKdynEq>&>10lvKVzNLdG(HT z5+|;oktlhs7~YgndXVcCqAZc=ph`50i*C@*n17x;Fh#Ejqjk64EVHi*BI?51t z@HR}O`tW)LRd`VaoeGLaARMUUxL(f47eD8KRK2_*770Hjb`&BD$wgBU`M7EQ9>%Mf z+ZZ|?QI(X;exA!4F>2Zc=JR;<=HglAH^dJ)-nqyVC!-Bfm?v8w%#yEX8mY*|(Z;@F zF<#}t56Oa0*L(6RM5F;CKfVP-mbbZcFU7W?Xga5)Xpp{?*fUACI|l8Zg!79z7jI73j4M@l`f&fW97zLN&AW=7x70{Cat45nV4Zj*CLi zG2IJAcaZXlqj*GeF#8y}K(IrP=M6yE{%n)q0?Zgr9*|R#?TyiE8sgs+*q`ku4-q~U zDyt%Ii~_G_OL`9=zP2bYIlM0$6da?BV#-bOQJG_Q4SM`whWl8K# zBK9pw>=-v=FdxynjkpK*qV4AEQHFShXn!Fa`zv}11>hfLyFmDgXB4`~e*;335XgR& z{Q*h%D!bqZZ>%?2&0QpcbXG4;O9?y&f!Zns>KyQIg+Rg88*PKvJ6F%35P9=$PtP0N zQP7VnOHY-Vn;vIW(xJa-%=D-TFXV;SgS7Pn*=eAzAMeHB;q@r507dg)syb6pJvjw= zefC7s({{ZFLL+z+rzl+(aEh*GF{Yfq>R})`(_L`h8tzOj9tLvl$eeOh- z>ZY}IeZ5^D-b>lYcslvaGLvAiL@PI2!w}lqxv_37`3^ca2E)sabJC6>Ea~p#r0|xu z&z#OP+{gj0FGz@!aXN49rUreD+_+%%9o)DUu20zz#JXU^WU6dGO+(5YaOo;*f+%u$ zn$wANsl(~Sy2=ERhQ|$!lpH1o^ZsrHx4OPO@~QgkIFW8Ix}+c3?qX~r9!Khl72lJ4o z;m?`RFvaRTvV-A=&u_clW8_gYCXw8g==#?wX+Dd}ydkXZd6;L17-IcS6M~`F7w1o* zwFqJClUI-EsdxAGlrh`%2shcUcX!jrBHg4SWiyO*Gb~~X!+|mg7BQ7UH?|WQ6}*En zz05U6qh-M5CkuM+TUsiQcY24e!HCU@ddy;<>f!D61TUuI(>qO*_m=bD4$y3f|LinV z^)80kCPPT}ORwJ7dzLa|?o(m?tN~-|ZB*wI+o|F3VmuqdMRS1WcsE3*Q!r#(dZb#v zHb;TBgRr;^T9@#CL^CDO1sw5j#Mg}A&0}j%WXi5E}2 zy16X}^7TI9+=MzY$DASmvpIYU%`phTpRZT7eSSTje0qu(12M-tN(RD=fFZWz@Vl9K z2WfGbHc`!HR0E^xUE!Oq*O0_Ko#Pkpi7dS;uNfm$V3euXhgqWnK0WLJDByKbdXp+` z69y9BBeI?bi7Apqy@Jg446^yzveD(APxf|3Jb zZ4SQ&NtX!IDqw;g^qEP4HNa8>0m5Q<+Zo@(wkP9hl_CNKM7ezNP^up8MK3KUj$NU0 z`9K0Y@@w)3B*$t|0RDWvn(g!JRmi8;0>=WxF$#ne$MT6|CSj6@V46@;McJ-ps5#OQ z-%#FVdRP-fETMLZtB9y+@L?eCaYgj^h-qtJnWl#wBjyp^ixu5JASqR3f!e(}yc4s9 zhj&!!NGiG&<}^s*ZdwYrk0bcsytrU8s)-2n(EM%(R7 z?4gkdzhC--_I)b$zr^k!iEj{zq8K&79&d@7UPn!k@x2_vCy7SC9nU4L2$9@JG#(>@ z8$mmkQ0O@FCz4lhb$~LqMT036C+R+>=(fw*gF9SJ6~7YYzkqPPJ@-n53@r>UZXm|a z;Wl4MOVjN(u?R$`V8DaMA98seHeM_Sqkg~=1+E&z-{*2nwU2|Wy9!4W`LYYTGCdj+ zNyJ{tJwVERIr+a*q`~iPuSY{&U&_ToO;4tr)G0k}5A3W})^~BdlKFSb2~W5lCVpba zFb;CPS1~9!RFG``r>c&%#LTGadN?$!9tG`qA@?E;zNhd?&a8VS<#I3R<+8!syVD1dg(bD z5YZvyCHw}S%PaW*x!)+5QM>!)Rn)6PyVr%GCn zP!GUBz{aB7eX>P%HwgmSx-qgbN{(M~BTc7?@7hr`x}cLlGOTQyF`G^QvL>V!1t z@nLpda!Mek(T!FI!7ZxGR5@x|bGK=x@~YJcmD{i^ST0SK+ay<*RJFIAO|HXt?)GMI zjY!77%{WYw%ID@^CvnNaa+B5SL??f6QRjskbL2j_=9}SW42~an4Jj)N3NKyQb+``I zgy#2fN~a35EPZl`Uq*gT+NFc5ExN<&;L8fGAnEq5!*J~Cszn$Wx^`7CzLV-nXBEwd z!yZ!vgl-5(?zqDiIty7O-7aJ0(2?1K&3DIygDSXl?!g=tSd;}w(L;Y7MocCbshtEOEJJ4(-OE`;}*1I(acXxudV3M{=1~<3dG3s!Yj&Mdh8UNC^!Ggg}mf+0l`kZpm+e)fK zPL14cJbvHJs!_W&ZapD`&6S}bFM?eCZ&ka(z0GOA%L#8g+X7QF#B)V-ga-+b`hAq0 zUFjgXi%DWqS`-|L{gjlrqrv6BDbQxPqf6Xd(t@Jy!)gy+I2%dyKhblGk$MvK^m02wYik1Q`0?oehIN zcb*TRlY`cw z?5eUEU4e78Vu-!xPA6*PzidfvTdV3m1X@DRUTj|RX7*``+`^XzrlVIJF(chzQ|&4( zhZr|ckbnVhbGo@crPu7`H3-1d8ixRHzB;W@YEDhrv~@zSZNzJ|$r9nk0b{XA+U*Uk zC;70QP!E0|{0Fe>rhIRZAz?iE3wiM%ivp+r22>FeM^*aOpsb6ID+Sdc?oo z>Pt*gRmV|1e6o5{S|zf2<)iAA57pPRy`!8cC^(t_BDuj$EqWRR{i~Ml4P$BFs-D5? zV-q(Q9jSK`uVcSsFIMj@Y@Z*f5vO-LKv|$>C=f>bz{R=V0=*Nq!4Q!k_i&1_Cdby- z8?>A+c5WijZXdll5=*c!$JqfYHEWANF1Q|9Xh*qQb-xwjqdlxEQ$+Y0R1sN=+B z8Zm^Eo+^otbq8lT*z(hb>2={5qruM+27p(rGo#AcV4TByeYxgnlJ zS+w{Q^szjsphEQUN^CXcHb@ro(TV$+nKIwAhL2aq{*Sr>L65Kmz86Ro(}TmlPuh=pV2-gk}%2_L;| z6P4ty;8i|C=0z;tw8>a?L^p;H08I(lo~=M*=kW*o4NEBPrCY(Z2t?x!$w-FtHiR z2;Napxtlqx&Udku*w&7vIR=rG0a)R~%J$vdi+1WoRT@`Q~x3qKKpTV(|_Y`cKEm(=h+g0J~4 zrNW3hq@rGiJV@(-SV(XA#M{>J#=Nrm4B-~IUud@n$@H2}yf1Y=?R_60@RW89}1Sz<%(G15ebNlRtmZXwQEJ|tzn0cS1nz(wD{1CEMMXumcCTUf}g*UN%8 zmAob}H;xe*P-zqt8MZbfGU?%^ITiW|&!h@Y0;Bd_8UVBDqRT z=nw>xEeu;Vb^6H#l`CjS)q*lKajyol{3cNCG4u6Wwhy;_v@E?5M(G~YZ$eg)L65yi z`7vLr+?2>4j>Q>zOL+4}k<5a3$jCc{JR{tV=#%H+TM+TrFUZx6hU-3{b-FBgneXe>?vFIqV z>tLvHmsJ^c{0A39aHe!juSdk1VjHeyM&N1$qX9(A#>;u_%BUT1+hX2rhIl3q^91P- zoEkAQ_U4MG^PuvP;Vep*GqP|T?AOcj)EMN2m_TRa#);UPho!4tmjdwPs+e^B(lxi{ z6_7`d>#4UvC)w$GH|mS6Agzs^9Rq-}h2iE|UaE@K!?F;N#f?H-ImpBI@jJ*Wamo>{5S=q0j@t|*rpU(CXR9S+KLX zJDk-qLbS8EviYPb53k)jo7G`}o`sP)Ypz0I;!37_M-!!~Gs z%A&~JcEg=aB$dia*Q-k1JDAmB7~7TNT0@x|mnI5*DDiCszOq*=k@SH~+T>Q{T&YCT z`?9L1RaNc{%Ie}hRTXYKKT9k>gH=MvRmskD+8lCK(!`xf$jU3YD_LE9W)~$c1Pxw# zQZ9;>A{~tD4vEs7KaSM}x}XF(-N~Kamy3TRCv;ic7~C{Thk`Cq8IS9vE1sW4XX&re zs>gs?u5+^|?zBP=Q=BnhC*8MamVHI(Ez-+7XL(a`k}6J8V7FS*z_07eC=CPhEj<-O zxh-niF$*pE52fLD%MK-W{~;difY`}|s%p;IP8r{p8Kbl0kratKy@eM~TOHGRZ8Piy z`~@Dy-P@Y<*j+4ueu^Xgg!v*DDx?x71=2Ft5FnqPfFoZ-{zR4yu8m`)VUl`Les>vxR#@f-*SStB`)eFc)FFY5uL+b zbn?ODCsz;O25%~6Ukbo7jG+|VQVYpre2RHUt|Tc%R)ArU6Jp(sID%H3m-l;Vk)Hy= zEXbzG{A1kaEy$iLOn4wT*gAMJo9-NZg7_zKn;9-FO+>HDrrSPk#YH5*k5dTc^V@Du za`mdlQp^fh#ag-`{3#+L4Z6*K7LmA+hXEi~XVY%>=SWJ=(o+vm7`Q$+5drgRbvEPx zT?AZIB~}m@J@~UO8!`=FJK*U_@laMoSsknsVu()MPor=-)cT}MMRRy9XQri3Ac!x} zv9_&$4!seO_lv%Ug%!Ysz{;jjUb4>}Umx7RA|q>=Nn3UB!gq{Zv}-BSQCw1N}UC3UM2Zq7TJkj3@h9)%cc$KD=3!_w91vUH*ygHe%*_k zY=qA20UPxnm8fHv=%IJE3&3RlZ&h@53*7(r1_S za{tl_MC)PQarNgP6{u$r9xBjX6_AGif2*RqTVl*Vt742>!0YXW>wB^hSJ8+iXoPY@ z8eyuwK)fE-O>giIN}xakgAh@H+y7Ys@Ww9S_4dXMLP^v2py~0!AWC|&Lx@r|AzBaX z3eKt$*o;;gZ(abLMY1x1X%Vo%+S`tgG3kRLVkHdGs0dsR#Q=h_i|fgGSV66Z0f$8# zT?qON=AX1ReYBB5nU3ozygO1pA^Yx0*r1ruYR6Cz1NBLitc@2rYUeF@ukD8Y$}sV( zsgXj4A(MwAeo~R^$xJ<;2SbgF)*=d(QWfyQ#({|&z74h>Z-lDPqb^lKue<}c3uW7Y zY^g>*u2jh_(0QgkZOO-gGz-z^P+*uay)t$rFuXTP9r6Km$VRgOMh@waW#S%O@^qK` zqeLccCSxFw#jOh;kz>l)1J)D>T#tnxP8#5c!8;u0)n8ZmW$j(Mpj<7VPX6vv`?B;Q z7I7GJV{kINFzdfhW_3h?jvWYHT%1*AYDOFB%PlY;`eyK|R`jjhQ-!|PA}UHXi`SBU zNfUaI58tM^l{Yl$>nsAlI!9W#k=${KH1G@r*AjlsgDQI%eJ~v|aV?K7elBEKZo=%Z zZ2PFYRUB4rhIo`Z?B_hv%kaW?j9gvMmsij#;q9lAq{k3R{r*Fq7YECWSx@*<;o`<+ z9_AHzXnUaullltkp#L(dR}o)o%4U&Ioh-Y@Udj+^fOOip0Kf2-$5wlVH$%6`u)bTLAL45c< zQ1~y9jEj0`>h!|GLcJpTWgop9t1F*@HKwf%EHGqX5bb8DKo;Coy)i{ocAq}T_Fj}Z zvGrrp-jCXoE2OUTdtpudobzay;=cXv8Kmj4duGaembVg zy>6G=OXcwFj2_aSpmNVsx$-c)Q4Z@h&@11Ok(qG|_C)PRWeUk_Hj?KE$#V+HYlP%E zAi+ipJ|ZjjX3KY5uT%71!i_$A1ITp44+{r_xV#q&(p@yAgS%%a@D_M|K~i_*o<=bmVsqG$2gqC;b!j zQ}E(8b={^5hIO$NMNRd=Z1&SP!sB-$;k=P~WhBj2=r9yv`mRfr}q_$!EA%s5O z1Dr8nT6qHkrF*SFCmv^>$i4_(ibI6cxmZ(cN<>0?%E;X!VLB zb{&3kcV5j!f8xDtkXG(^5M&pV}`kS<5q4j^+m<5%s28XbrYs)hkJVg;4Co#G(%B zDf2rN^?`NeHXd)#r>pP;JE<$LHtNSb48TbFZUS~YJ?m|12$}?LLzn)Dog?^ZZm`{a zJ1>?d1$s-2>IA=j7bIm_4vcYd9pi(R?T z#G?;-!GWPHg+sMprFxcNeuD?@Ss76X`$9~F z0Ui1roBTF8#7+8!m%z`uk;)$oTMR3e1G!k-;L#{<%G0UhXiP=9*u(xe_DJFJlSkdk zr1JNCf$}D8Wl99tR6L+|fhm!``XyE)4Kv;Vi1nxR3Ijugb`dVhyXghkGzjye3VKg~ z5&H}!oz1n+hV3T=P{c(%^#%Fv;Gc~Y)jyCo)i)y9zN!Ac+PDQCU0;FCja1a@Cj!t5-gr#2-uAHGPGY|oLiHS?!-qi4 z{~KrUn3MKUg>On)kZK|s^9?qxu~fiI6wD7q3%yC{PqZMUSCGL-d29Z4NedpR=+)J& z`PYy^)q?x^&8QZ+2QG;@j;$ryx;TwIkdJMIp8Vj}LGmBX^~Pi8@gPrC*KA24(-+mm z`_|+h*mGV_`zt8;G0pZx;68=12P|z#yflEFi5E*M9eNhs;THuISA}-?PysUFO$E$X z$D=x!>Y=Z*i7jf@!N%fQ+9(juKs%I^YkzNQ$euTStWA`{2E@4~7+a9X{S3y}#~7iN zFke%xWD6o3ycR(paTAx-(gEjUqyftrbjk-S3G4VgoPE;4_%~$Bkpje;7P7Q74;#~1 zGc&B2^T;eBFIe!J93ohoA%wLA_MD%9I-n5t(rFE{L=9SdFi95wh*XTk3f}LbJ@f1n zmD$Ai*%*y z27MHP476J`Pqp+qVV;NG`$o{-b}b!couFB^0~A!198*unXjCt%fKItVTO&H@M?~9t znLeh6H%It+^QxxQ%aA`?6=IhBd%cXiAw6-dFc(T$M0>H{`6+GluVtiIr~JKMC8{b? zl`oc^LlAwJNo1W?Ita(u=yx0$K9fuL{BRfxUp|h@m5;WPln-MT9(~|8q#w|`*|7!s zK=LW&=TQ@spoLI8g!-KNo(!1`^c6tc^5@O1TD^GH)(hy<8-L~5f}aun0f>us4~gWY zND~Ep5Kzpw9_qy#-WB@E4Lwq9f>i}gi`COi-a&R3=7qmg@`}!*iNJPJ*e{!iVLx7@ zx~<=P@dVb~ito+qnO{(*;2k`5F*c%FnMjnRj|4im#_T69?)^8s9(HcP^@EI`i5La* zbvmEu#LA1_beY<{FgDal;?3N9i6Ik|`~=YRW%^Zs1{uBVr1foY9)Ih3+{J*LtjA>x z=(SyDs`QfY;!S*h8K-(N5~!Xj>D-6sFgDRT(wE1w86{`>@`xyWTdH&@k7J*d{4|sg z7Hnln-{E|=2R}{n)<`}ejQ^2PQg6}e_ypEV=_+zp(PJY<=YrbEUE72 ziHy~?T2JTSutrwB2l?fS+4v+>6?~5kIt?4mI?pRfd59m?>p!k*8vXvrI{^Bfkq-d$ zdm@(r^t&Nm@SJ`gq=8i-m)A7uw>TaJEI~2))_6^Pl4uuTH{dkjEMQIwzMze?F9BZx z?lkc02Q~4T^V;}$Is7jJ=#x6>brA>X4Cn&513(|i*#e;N=0axx{kTHJJ-8`DujIQU zf!@Cl9)NFmA~6}QUWT}@M&XO>fDxlLjh5~dhHQaswE`uFTcHpFF9PVoT-Gz_2Ea$pq9VZZZIJ2)_#7*M zZgOo0(EY4x>6%6#6fXkM{i^i0o*w|wZzQws3Xm%#f2=x$LG%F*Y&e*n7c9 zpG*Xf!2|mgQNZJqKLRvSZ(WQW806PEwts#g; z*+vjRI*;A}=yg=n`n`hI!hZ%Ec61u~CV=mI3++^gn&AIubw!b??1~-=qM1 z2B6ci<}abo;a~GQ1PA_(06NOL_Xva!a2qP2W0861@TGC&+4&y~L-Dj||~yXL7w`X7~~>{EN=xJ9eMo zEByeuKLMAv3UV*tL!j_~2*`tf34m6>dp^^&V!+FQClI#*Kug2d07nsb4nV8Fn9ogA z`Z-vA8N;d~`YZ-4hkw`?_%t}*g6F{bAb=U@E&HM{M z=1UfUOqU4YBzvL<;4Z|q{RyK49Own0$$h^0Ggt=gb_hUo_)7qquYb4(>Ju@B0W`m+ z{erKT1I7dB)4aa}=o7rv05prXO2P=hR2B;K?c7?>C(gg;P)t2 zs<^Kcm)qtla;2)-&+Eb|1`4@|V4uTf& zyZ=B`IY14-@DKv&d$liUOq(8oc`yVIKE9^)0Sp5C_jEIup)x)V>-_5)f?y2%&c7MR zV*yqH-VMpW5ua5I152v|{2<2p7r+GV#HZUVr?l7M{~C~K8u%<_NP#SbM*=1TasZ0} z2LR5$M10KgP&m^*0fd&j9q~f|cLQbuRs)UzoPTNFo0l{1MS=;K4LAaD{+)#XW)%%a z#W#!p0-x;v1@J4NZ3w~N;Jc+`@Ws)|fHnBC=u?1?0ha*pRA#1jp)%9D;d`I-&CezH zNT>7f`hPF@x8Sz#J=AhB8As&Xk<^}WzIR6H~|50oFp#sl@6p#rwiNAzAVc?P%(5;HqcOi~UIxOO? zN*X-EtFWlf_|EKofcpWPO8PA1Ls;Dj81fGS=ocuTz`!{TrhWvV9}~<6vzG#XPr#4k z=JMn)`t82AW0-Z}5uOlLicg?^2e=9lR*gmcW!(ddGl9HA!m7esI}uqQ=1t?A2GK`K za{#%3$E+tF!_xAblEaVj?qTLPP;cW$&YY%oM(&9tr%f9^dZczA{9`BiM^1fU@`U03 zv6ClhKO^RW>HcY2rFi@r*W`PqY0cpoK4HS-`@lNech7MDPVHC5B~%B z4O_pqonog?(oVpAaOBkc$KK~ByCJ}9H2nrq^c8l>Cjb4`!82+2#F3bf@VU~)_f4KO zYV7FLhlWp^$lh*uhQUH+pRtsZUjp36@Oyz(SMbN+JiUT{1ZTlYtfDhYidXVZ0>PhG zV;z`bu^l|l>a+&de1_G2Eq41etXXTZm62g>T#E%whIMK!Zh~c4Kdi-NoeZnfI$TE0 zu%@rWb%qS9cpWZiWmuQi$#S)yp+&z%_JE>e5 za3*fSZI28qumyM2GOUwZB-cD!`7_|t&aJ!>^#|NG)|GAOjo9t{aYU@&F8Tk)c48+r xm3pJ`4(z^WSfh4OU#iaAx&xmDvHki^JiN@X?%v4*aIWm+pP+`*yLeym{{bOHp{M`= diff --git a/records/wasm/iyi-derive.wasm b/records/wasm/iyi-derive.wasm index 68d67e2455425c1d3baa5cee73f9c39c0b86c2a4..29b9d8469af9963602a80f46113ec69328d7e65b 100755 GIT binary patch delta 22402 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 delta 22702 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 SP1T7r>@Y_o@BE9+cKsj9$RfJ{ diff --git a/records/wasm/iyi-enums.wasm b/records/wasm/iyi-enums.wasm index a0b018ec6dc5f7272583a905f3841de522d59fa2..0a2eead40f2579a9cf5edab4f815bf841b0c0bd5 100755 GIT binary patch delta 28294 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 delta 28187 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 Zoxl0t`fR+I#FI0cJjMQ-Z6N1!{V%9p(cb_7 delta 24699 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 diff --git a/records/wasm/iyi-files.wasm b/records/wasm/iyi-files.wasm index fe94aca92e52d810ccc43cc10f2e054d0741f0d3..3a80f622ac2c95470c9d132755f8da8043a89be4 100755 GIT binary patch delta 21831 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 UaBbJx^`EhxDoVd|jwQPOKQDA=mH+?% delta 22281 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 Vj-3i>{&t@C(s*G_&IO*}`9BSx&u0Jt diff --git a/records/wasm/iyi-format.wasm b/records/wasm/iyi-format.wasm index 200f3994f484bc6f0fdb66b486cddc07c12f306f..74081971f3bdb36f480bf4a0d7021bdfe81d51ab 100755 GIT binary patch delta 74285 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 diff --git a/records/wasm/iyi-formatting.wasm b/records/wasm/iyi-formatting.wasm index 05cb25242910f86f667b099d1cfe43fba8965b5a..bb687542681af41ad3ddccbbae4710a7ec142646 100755 GIT binary patch delta 26697 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 K?Wz26$NvBz&5Ixa diff --git a/records/wasm/iyi-generics.wasm b/records/wasm/iyi-generics.wasm index 9eb08cd5d7d8480aa95652c230aeefddd32ec1c5..93495824d6bb53119143f40586aed4a60af28264 100755 GIT binary patch delta 27178 zcmcJ133wDm^Y?Vm&h925kZThXAZ)^waD;FLxmi#^e33&=MHIOs$`w$Nu#rP<2#hcY z$OZ)Dh?)>Eh#)}`5fKm(5d}d(Q4s-eyuM#`&&+N(-v9Uip6APxnyId;?yjz`zI*oQ zSMFI~x{K0z{k+#45q`y|(Bt<^dge8zCljb-{@#oN+cNb&{C@U^Uc}?$b`<61DcNaU ziBxJllLy?lqewr+GuawFLQSu~i`XfuWTiN~4zHT+RkFC^b@<9eR4&Pic@b$=}NN{e&GFG79Q>h-`v8?3DN^dg0 ze0j+o(YrY>cwYZ4wq}JZ%SDM%NpBu6sT21S=T{c$N8_s^?vZ$pgZYXU>FpEZ^rVEE zx+5W8@12m$^7P^ak3Ksg4M`U#Jizl7BSu^}i#jgcra%Ps_LVEL{F3gKkGlBp#d?aj z29+w~?#lWgZ&>Buiz(X_&8xxTqE1pguj)JdyzcjU`CrBQ8gDmb^P{(M&A+5%3>+@n z8)HjH?GkaKycK-~EA+ck+EePYQj*DLFQuGec_q)Lp6Bdj$)mOEIe9^`zPw&5dVO5) z5I?&>FKQO2m)2jx^NUOFY0z6G&YH}Y^g5l{A30|=YG;YfYxD>RmmB#|ahZ*0GG4S$ zpTD$bME*i)IhXH3$=6K|Fe(2vUtV0YJnM5tX-&F=k}TPJ$GaMmnB2BG)Y{tiea?%D zO8h=2Z#J6>C!17ux~lZ`v2k}rDqfzhrlq)ip_}2*C})J!LP2|S%sf0)+6sq;%AFX z((kIk`O!rs%{$-6SeZVrOG9>6Z-**B+GQZ_V*1PsxOu^GV>l0azxUW40yWN)!7h7ENdY^?3_->c`YekeTmWFKXTTt@k{cppN zOY}-BVc;c_9_jl|A3gA+_=1o!z*v{1KJ*$wB_kg0$oNJf8dXF&WP2SjwU_(Kic8K6 z&QW<$vEF-FD|#&+mPDd2535hF&xUzyhCC zYON7I_}GCbswRktG}NS2@iK3fEI!(sL`D1aiC&aN_a_@wmnE!jme7m8>e=3ER66GM z`ttR_lYK~yU!QyoZEEOKQ&qHxuckDGUsld7bE94Bz6WdQf6uG|ddjmo;+deo{Os50 zCrXyis>@KYve{km44d--dECi4H6sdis{d@S+qbI3HFt#Y#If^&o>bIa;GQ2dH3Yc;z7Bh7M? z*Y4P=w_9Hg^as~>=J{Lo4eJ{=u*`yTN{gXeNp+-gcdF8vY7WEPRImEPxKw8rpRMx^ zJu1o=7+<03s;&CN8&Z(sv<+?Qt}>N`Ve$#B5E(%-^9fH4zble?!$~m{nAWKwXVF>kArsi#(ngvv}rKuHhxn&NxZOWOpHh@)!}ssR}z^fZyp{g$WRcL zf*OlA$HGebhRro2g@wRCm4Nce=IVol4`XIP>Rcq_rl{0b{>QdZA*3zbz9s0rw>0+7 z5G9U4Jy0fPlu4=sS<3K^?fQl-DK#x2pVB}PEy(8>7pYOzq4GE>cwoE!{g%#Xj(XF= z)=|M^C{ZMmSNJ3fpkFV1qJkM8UbAnzp8N8>okSz>I^lp>5Jmn-6AqOo8%j4(nP7=# zBiw~@CBEz{R5SbNS2F#gO$znBaKG-6WGk|>paZAo?1e*Etr0A%Rfn`)BrOadY}k-H zPMWEtnb}k=zYA%p1IU)yssA6Es-F02+v>M(UhtTLt@@-_Tan|Gyjr8r4WiJ60v{z$nXeDr>P3sq-FiAk7=l`*@GSBoeRN5+NXtGj6)4L}QrHZAM@e;R z*`JowLfn5#-pRNrN6|%SK88+8os^TRjuW;+4-EI7tzX+Vf#Q$YUK8=>Z$C+a;jh&| zVD4*g-Pj-9UrPPal+vt7t3N`mqC?qJ+Gn_^G1;vN{ZKa9;|i@&k*VllC9YuxE4pM^ zt)d}`1nuZ%@?;m$6`9eI)#M#Lc+pn<(2lAVXH&`0gSws=M-k$3E^<8Vp9;^-#*-6usK`<&&8&N~#Pyw{@af30#(cOqFpr~h0yZX{$ zQk|WWD0&*NkjlLdp&lh=8QCsmTQWx3p7pmW;F7Z3C{sU%wwUvk^>!Y?s4 zqln~}iu6l|R}p^s$lmeMW&^Ps&wTyDUTPxFw|2$KNsK=`mHGT$hI#tNttB77b%LQu z6z;2AV?TykU!FT+W150L1_(1D^Nu0IvW7Go@`(P&J}+ybC%v;X-lje1O>3OlIIBUU zMh!As=-<8bctR|q5j4zsY;40(PmOAjnbEjWMy6iyPFz)yZVH$LHwx_EpRDhGH$uO- z|2d}UA0AH7$9@u}&v>_~e)8Ri6H*a_;Ko?P4?RrFo&R?zz&DrkE(e1yyl z`Y0pxy(bd%vUlD3lOK#tr~wMW4QlG~hm%Vh9PSnoy)iQ)N>T8SKdOfI`n*qDvNV1F zr=9Vvc&Z+rEl(xe&nE?Cop>HSRSopZr${pEGm?BnJQseJ3%tVTL+~8?IdOMgxzOIwyAhNES~elbH|x_Z7B9~ z#QqWBP<~Kc0jMwj{>7igJ$7rZ?)`#vZ!4Yy#dETFF8`tr=$F4}foIxT%DuOE=80#a zc%Bqb$2ltB$a7S_qH`qq`MGparh%HGJg6DbnkZAvFNxRVOOjhI@O@vV1HUZrq_2qE z>8pAoW@o3O^mSU+$p4CTd__o{5>MxOl5Q-XgU(a_Z=I)f!!Hm$>w-*WuuD-sbLr8S z$)tILRVbb(FQiu^!_;>x%A#;Z;YwzCqv^?C*Ljd6o`i%S0K;-tUIyGg;H(5_N>pB+ zJU7SU9E@bKUX{B+38vfJoBy*rBFOiil^fzqGXEaz@I2q z*-s?z{+Z}a#q(kDoG+d`#Phs(M*TuEt;KWXFBJEXz<>XRQfU7xaYu{ia`D_Jo>zV) zZ7cpp&-&uo^|xx_`L8R=Rk!1g@-O| zktmj2ipO=vwv`@?VcROPX@)27q2P`Deds+1R9?3n-)|-0h=&~jYFJQUA`%p~S(Jdj z8=xjiWWr0Y%yP^hmBq|C4uP#)Z z04-{SM6QB_3CyB9mV>_qVQA(EbU~LuV8*RyJXDKSc5fEhsP`NGS}aM{*eN4Wi+S9# z{v7*_UA0)EU*z{^lA`=A)6)V0*qA^)Tt_hf03KQon2^$>R8c>Yc6L=O&u@TP4T1Wj zX99>T2!9SGDy!F4n?{%y$Oh4zjK#=_bxQQ|X=mw`*& zpFske)Ljkyi25aPwdErDSza0~gFa&Ovm}2Z_#eo~Jg^T1C2&=fRWuTFz)%nVu8N`% zxF%EDj)_&l-zN*k0tbK)xEhL#?=lA0VIIHPR=%&PC^InA7WLH;UPNH|@i@3i4m<-) zB`~(Kq7Ya$-4bqq5#M(535ZDGIxBRz4=(sO*odnJuD}Th)Y*c!p@Wj7be2pONI@wH zOy-|Pr8HLAB_!2hMg{_wvL}3sazsYsfuTr`z|!ZNOhq|qF`J@h3EbyJnca~4Od3-S zgu_J%)K6r4__2ec+%K6d@HtW-P zUhPrdVu-+chnWsA82JraS%EHLuxp+d|CT5J^63l=DStfJ)0h%B%l6-;17yw*xCnk}7& zz(EKs{u_w=sf^46Zy_Rq#auQHZCqNF1;)S<1QxS-wMikinhXws#ocQRt{+sm(0HbP zP~p!Iae$TQPtlm!0<4G&pHP(kvU(hWk*Gxii+S-WMcIWOQnZE-;T;4Pvl(Lcvyx?~ z7Xpj<({M#e+Ks*mQA6C;H0XMxVS}Ky9~s>n1hpMH5Z#8=;r))0gh1^eN1L~&VHITA zJ{EQ*u$U_b!M0dsi7eZpArM#!wVqzynbyJX1Qvg2H3*Ecl7115oWSCqUX~Hm_qgHB zut!R@htVd4mt#B_5}Iq|B4l-)ow5{VF8oti^J`>9VC8VE1$snTYz!ALGl9kY3tlx+ z>ZSxx?7F#2S%Cpq*cmh0y}N z(EtflbGYga&kP-OZWw(XbHR@c$=I5CIQj{lp9i~0rp*GQAxPlpDR{j7Vxv8@a>>GG z7FEavIZ7gb8XC$ZYYl99%L`7nQR!2k(WTbDvacM4uhZ(*97yD zLfM@DTnc4xw7AP;&Vx8S!Z!I0mQjllxr;115A=sg30ym6%FMuuS2BYQ#`U3OZm$OJ zX4!f0zZt8Y^i z->(!EVR~KHRl@7cnmD!U_BC-By#G=Y(XefzrQ5#<5NL{Q_^D6^j%Sci)yn3zYLWkmH$|kGzVoN zaLgByv!EdcOxfO=qVfnFg+e_ChFtvH+S}cwsQ_)~wY1{eOjDoMU>aAOvG{f(pLitH zUdpn-R@jTcu|)8mglI>LR~5<cMGvaDStaGw)S3J8Dippns>rC{%& zM{}0M9LA%~St|dyp|PkrtIFJ^h0WPI&d(+py;`z4tg7*OOP1lPRe(%l(~Rg=ERFRw zTDD>hStBF670awR7OZaIvg|n3GuGJHilxW&ULz;&b%rFkNVVzoD0*4$YaX*IKzTkM`)+v*br?XhCJHP^u%m4y0(QSii{C$*^szwL~1|+LlLPhnup@~$T-s$>VIkc0lAg~ zHeiuV0_!kZErft)G$@!$D2bOrS!q$ApOSbKlx>s<#AX`Z+p$h9s=s9F=|y96!g)NM zK@ob61SJ*}(CQb<$#dcibTp|XHOn~Mj>V^ykTgZqtFpKL_1>v5GOT zJxi?eJg8)Ycv>y|h5BYbv+mw8_Oxg5Jbt6`NqaV|;-rnHvmC9YdL|iNeXJIDZ!*UD zShHb$Hz`UzB*Ma?(i5wpDh7}dJ2}DEg0;y{uvn^zUglK=H*w^FPc}|LyIH zl7(2wi=Z)^T8SEm;;HnSq7+lK{zRQ2sGekF$$waj_{re4Al^sRoMu+KM@59m#<~Bn zw5E%}OGN_l7t_r~DEW$K7dX_M;^XQn$_W|s3@qz8Z?x&gl9FOe6{Udqv%&vT^1mYf z1Y=w`HY9$?4w%c%b*{{Hi1A%FR+9}eD&5N}R~`cqGJEpp6n!pe2q>N(jCS|3v=;HN z%j$`D*T+O&N{|AIr#Cp{s_{+15j}@Yo?; zJZz9Lvjkh9o%mV00yWhQkKzEs?6nxySgUC#%8nPVU7LD#t)5XwkQ0Op7ity7gjdRo(!X zT77)iWYeN=3l$X4A4YyJ_8>g%axc~fulo0~W^8upBlocE+$zg#Bg2mEE@ z`-fOv_L>p@F#7l?W7xy26)TX)Qn-ZJwOND!$h{Dg64 zDyv_sW*n;`%b|T{H1xC9td23-&zhz`)>p=Wm{Nuo$Lqd@ z2LjfL;skJ}sSS+x{Onm)v$RJZi(#x&>5ymG`D$!eX_o*>>uQ@piX1VHUT2;9J1r z1tWYd>k#%8^Fk&;{mkgImeuobV7viys;j2vXfCIEo_Pt+=NvoV4pn2}ipH0t<5P<& zuyVvzw;~o;#PE>lWw#=pHHm&+L5ixB6HP_bzdur#djL0+2-2q=zcqbMDBVhAIf$AX z&TGa_bgCD&_<2L7t~`#*Qvh)>)6>PD4m;o&E^*P_zqzM3r3 zOpD>eWE#ReIq{}>QY~59%O}~GaCd*LmDAl-)0}}offhGW%W}G}sRMJ=nqG%fQ=O{+ zC#AK6Ynr;iKh3EQ`Me3KMrkjy2n{k#^vn2`5g1jds&=(?hkde_eib1hZX4aX0c!B_10kpictufArPV( zop7ih96>#^aQ8HRUX^ts9OgPYJoN$`shoSctAYA+kc#rT=qN*7@R{+(Ns|c6UwAIe{w94w=%-tHT8O~SB>AnY;QLuqI{WGRs``I1q zPT?s+30Z(q7^>AjU?|bvNbiY6$zWP!I5g6D8kFmSyfUFz58jOd;c1kB3fa3t+#^l6 zhudq`a#!>1-f1F!LE)KJTslD^CnVQ;o=M+I3vtDuPYt&GCBsaLJgGl%DS#B49i zuz9Tn=BEhv+QbdaMzbu;jw@qOggY!AuNR_QYny84l5gt9Z3=H{NeLe1f51|_qs8LQ zZLGbG^|rB~B0;$pHaCdXw`sxb+uF2dg!!ornhm^s$pl+)TiQ{A*@bowQXSsVszW;H zvg)voRfRW~Q5aa}f1jO0I~$v7W3?^Jt_fQ==~z4|#CKcOK<-~K#$A>^ba8EC=HK z@pOh($*ImD{I93UVl^oMJYTD7VmTN#LDOo&Vt+jii%}qqEcVCKu$Z4x5((8532D)y zTz@{DqeVE?nIyYJb7eZ!-=0Rf)Hxv3aPmP=?pKIF>A9e^a$*Xlxek!=Nbg_3g6Zdh zm7(^Bwl7TK9hvDoyn|>pa*)2}?*T8|OVd;_T_(q*6LEDTCJ^XMXaaE}m)C;X3Nc53 zHLJJ-T0_h{)nmClol!Qg(!}D!T(=i=^%V*n%grDJZ?qmDrRb~@FaXl?&t>V9f@z;gs9dn-~==?U=zK^0#k71e{tDFO2u4pMK8_Q5oI2fPDO)&@)MIrsc*~&@m%AXQ0>wbB>NmbV@(!Cg7SMC`5|V`8{6zHc`W?o{1P+>H>`C}!}R92acM@4I57tJqG zxj3PCbScP+*HFe=FV>rswY#;cu4Q*_*Jg0ZNNWMpa2PWsX3MVvZ-8j1QRU`xiNhBP_4iDfDMp!5Q(#|Y^#>=iB#V)t9A zxvg5Y-XVQJaHa3R#ePI^rEeR`wuaj(i=ApPYkM;!n3F9P>_~0j$9&oBf9ym<8pcSg z9KrpWkWvOSEuS3KiA+uIWm1cxi))rGYnwZBM5jAzs^1)Z9+gJ6n-leoqJnM3?QYt( zu+{0=g`8;XY^TF}+O(jh?M~MAe`}}9%GUN2n)aHSbha_O^mfj{&7NQ`7^KaZ!M!fK zjapWvUEC3t;7xTKj2PT<3688bX2nClExkHqgV)~G<3nzhjU0dMd_o$VJz@oI5wz-m z%i4DCLaY3?CETscokVQ(D}Lb`qJJN5ipxGoY`2n|d=xT8=_$R$ZVk5mZ7<<{ty0=f zZ3_j*ce}}Re{dROr^ z-6nZWD|7y|h1re3_65s<(f`|{VGy&&`QSKgwJ|FNH-;puu?01>z3HZc-%3A7o8#}z z3I=`9PLtbMP(R!8|C@ekmL1NQYkqB}(2WN+(s>%!64rlj@A@ewE7jx&8TlMwYEDgOBq`xs6cPKIGt@w_G{+y8m6S%%~l=f%lu_G zCx>j>{-Hb0>K~fep{f_FRd8NYXHKSdB(~x3n{(LkiF6Nes?#Q8u1gy}c}}#3yvaLh z2kajW__WD6glNsVFUAb?$2&udB{EU8=0d>l>gsgAjExW4IL!k&m|94eMAxd-%{X49 zEi)(t1w6bVZ8{EDkD+_2kCol4=*h4HR_qshH+D#Fh*>-{O>Cdg7Se;MH2&X{n{uhM`~+Jio3QY2 zZelsu;FUBibbx4m3c=s0b@rR&)mk6I zb~{fSZ`gXEy@RjB{sWyry4)k=o)Kzo3$Z@VHLJ_qCc>HX8b8l?Lu@Xc&gEkmZB%R^ z(Nnnxv`$WS9pRtTZUiu`C+$Wcgxv@V%H4?1#BRiTgw5TEQ*t)~$!OYAoQq~4-yBi^ zwdIbVjxF9cZ(#2)7ke&F^)){w^gzI=?uWIo)muV2ejs!qHiZsi)1-@2-A4E!(gm1y zAL)XSR!IaS#Lme3LYM7eSCcy<2O%Jn!5&Ow$|QqMYK1cIVc)uC>=>u|5rp7%FH`!2 z!(6)we>>NWL;Br3LoTJr@N`vPeaEVlSX7GodM?IMr~0nB_Xm^j$iO)P&8r7l+ec^IQ!Abn6}I8COQA2`sqn)VooN5H`je;g&Q?e2rI80NA4u^kN^=iFv$6;uWTGfc&&*J<; z3yG$6Rfh_vtcvyPP;59>_3}z0U8&d)lr){^hgtpNInstU0@2)fJ#_Iqu^rbHIqnx* zc@)B00|BpfEQKB4@SEa1_CH3V`}B53jm?aDmdgmkhsdawr5s(e7rXdSE}z#YGF8c3 zBl=xj_j=x_^DawvwqFb(Y0r!$KyR`q-J1XZWX}>xx|}`fp1oB}+AqDyoTwC0NLei? z4PCxhub^ly+<#I3Q8AO!D)}#b7tL1_oA2mD+TfUkH;hq_VGMdjGcVqJ`*dreoZJ~o-( zi72n&2oE^jy?GTs_an}yRoU6kr@Y0fjbE6D@}&<3)Yp-3utyeyI`Qax0rjXDFiEFZ zCSzs_)ikergjNOJ4Eh|5ZRlA(Mn+<$L$S6~tTQ4--YN$DQ5FOXq~KZ2i>>#-WIvq^ ze5qm3#dQ&E&_z+V3{{ z9%QM*=rafP6O;s1wG($~aQ^ZBWX!m59SSjTdD*45x=q8ewWc1P9D2FMfs`Mqh}6Ck zJwc(Iu@ZHharz*u=KOvon6j01T?O=}Rz_b${BK)X_y4j))nw=(J?=^G05UtA1` z4|ii&`!|>7d(UvA?0tMIb3GRxPEBJLjVFKLu!xS8o~6Kb8gvMyqdPhk`9qFErldJf zfput}Qe!nTIb+@QFS)eSWSgO6W*KFNSbAkG8WKk_NfL)S zlsA28p`JF_2P~1bGpc;RYWeAd3U#r#OyPcm*RWEjZz~8 z0L}_aM|1U1Na+WcHF7ulkWI9=yf2$1T9}*12KJf)7c{I@1q}_w6^4t6y1hXwHqU5- z%ASNjXh*P@dS)$>8N~g_Qc*Rr*2Ge^=xdJ~JrCn^lOtPj_XC+>j6-f){8-b`Srjl# z`ESCIGYy8~e2Tnebm@k}Yzp&KBb&TUb7d!vM`2y?(n^~jW#N$tGjR`EeHT17U9dD4 z#nemtpJoG8+-}`^mgV6`t4o_)V7*=JmD1Ul@PifA7voy3S{Y^-fgT7`fUdGpaxIo( zzgW8FGRsui_R?clSs`QZm->HVRT%rkSot%%%sw~f{=&YEuJ@LrRF-*Swyp7u(iy+9 zeOmgTxU)&WZm|MDzhXgm_376tHUsEaDGmbY$0sfsm%?w0O;ORkM@c}H=2F`{E7QZPTUn5)*8P(062k*O6x(V8%TTT zxQ;FoeT7ofjhwshR1~`YvIjudU9R-N$LoN90CdaX@Lh^RC;xpqDGD9wKi3Q2NdSKY zuoU=O0G*nD(@#;}u8H5o0DKJi7C`5%eUK)dl=kfpnPhz31QRH9;@JeJMRdft7O=Mw zzKh6GlwK&sacE12W&7LWi&{WWl#aeDe+@w2j~@ikNz*$IC<>h%Ju(pY+=t`iQ~;e0 z)fuZOboBE&fWGbi6F?_9&y7R%0{qP;DGD8ElmYevP66mZ;wpenAeugbssMbA4Sd?f zUk8iP2K0OYZ8#Spll7o|2%w$Cx2B<_P-6KYSO9pd>2O8h6Cg|9Fn0&grpQNt)2&ed zSD_JYceI~@dc%7NAP2&80CNEW0Bu$r#WJ6k`kzCdR@_5j6s^kEXfweV7~5{CEz4J~uT0^j#@_tyQ5Z@e2T&4;KSy2CQMO zK;MY&0?;J2KHfC-99$925WKknn&bVuOi}0~&XoX~d;J0M(?qKTKvSoORv;4KyOqcU zLPZduslylmeNIU~kVCVDF00T=03QHoa*(nbEd%e902;sRMkxw??$`j30cZ=Lp>zm< zhR&w|G)%r0r3_alBk(LhjD^vt0^mvjUjYF30BF2x1)z@zp8(Kc*B3ye+ZzBH%PJN? zIY1S_7VzE#ybm}7ph4-nF^=(AKYhXXbuyAS|ArO7wbtUdX*Mg$PJs1yA82>1hfzxu zC3Cw)g}yJs-2k5e64nLj^wr$0+e^QfaF(38rEOhR(vcA z=mMAnu>N{)M1{hl9{_4v=^%flkyMq*#egXTrEVc7Fo%lbAB0K0H_YA4`>O< z23UXZ1Ah$iIv_OOU!X_4f|d_R2iy(tkHf?I`vUl_B1XN6AIJh^0>%NXKR@tW$%i51 zThUjbAe#W20pA1gN9D(O{5r<%H&7x#*Inr40ZRbO0khvkcLewi;M{|TQzoK_$IJhZ z@yhIY$bTO)wf^3>8RhBfPBbV$EMO48`g;iYmjF^cG@aYgsXz;Nqh|q7!IXh!N*lo_ z0qg*%U|N3;;8ukDDT4WTJNk0Slmd1Dek&cI@kd$Y&!td&2Rdj#pVAMV`~g<0YJsBE z2BZPnp|#9F!50GPSJ>K@;k!#fq0!ULYq;rm%BF*CtkQVp$b3xG)&SN5N{lsb{4T^GfChk8MszrqD#uDYg!7Ly|3LIX!yX%(^He+KX`l~0 zs6@q}YaKQ?XM$26SnD=zm63Rloe08AAUR_mnxL!`G81x?G9aUJhCQZy4&?D+Pbj|= z;qg&9qXv&2HF=nlfGN)4(WA!< zh~ZO02#bKH#PL`oFP4WJ72%s9eh! zo6cROgYfw&6=G~voGpl)o5)vu>7P~kDjwac?hRj^8GEYpG11*_MXqX$_wreY4=p{V zl~VXpR;S(6vE#=K=>bUVbNAypSxxJE?;SNdeb6mZ^{9=S-BEfym48Ay9;?OAkSev2 zN~j%&))6)e8uo)aylpuN5L`xP8YlagrQr_WAR|7V--Xw}blgc5bx;ex(8Lpgi;DOs zomU4A;i^P;8tv=CEFxMBW1_?nx2CbBF3!kA`Ql5%>!CssK#kTk7S`v^=vAy?T_63v qY#K`1q;a}Pu?q3xt;7!0=TX3sSPkPZNsn!SGZ@om-5c;{9RCM2!BgY_ delta 27233 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 delta 40049 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 ej_~9__q6(v2OKP?>#4dj%jJ-TWKN(J6 zRbd>~k~)-!*yZ!WimeUN4~Ns&hv;SVjcnHvzQ}mq)snBT`qp(X7nK#pE$+r*TZLh` zd+|BOC+;+)f4Z;d<%Em!ja6eK26J)FFm`)d^Yz9bo)^UWWyZZxR~x@amWWD1pQoRK z=w`&YIr?6)Wtnk2x)Ge@j;SAWc$u^kKH7QIXchAa>OU3Zjb!nAWk+m5E?FF2X!ttS zGHS%u6J?7e+9NgtCX9{kz;_$#Vuu0eHPV6e8s0b&zn{v6X{c2-xW>y7V#`Luo0LtB zYMYeVcFRVpIaBxP=y_Gdr}=k3N>smRT>NHIlIiv_pSwtSq*P`EB(`ldmL**$PCja! zPHHNUOHTHoF|CvRqzu^$^LWQxiVMmA@Z+IVN`sZ{OyDO@e<;>>%u#uWqKYGgo zG84h&|Dvi_-aZc5#QZbja7ERH{1cq?94{bsRY`?!=%nJ)7Df1}N^ZGdh_f52K5yj~ zP-%SArcUkM6ay-_p|F+4Vt914A7$#cZAnE3wXNI!+`^Cy+(m&by0BK72eJ?)Peobd zBia}3i^BMTBA@U@`?nZd+dj~44td+IL_>Me+2{8230KE5e>l(2<5!U5qkX)KHYYQ} zzi6W|pX}aET>QMS>Uw{wpx^Ob_ab5!RyDtRD&>t$-4|2V-y@&M#@#(TQ+8|5ae^4PwL=4vc1I+6KLZZKZ# z-xUQe_Ma@yRT#wsn$pkH1N@-H4ar9Hj2Z)tl=Wd=LRqk-gUUA=+XoId`sO4W^#-k@ zQTNuMuJA#H5kDj={w!5E&gYU2_y1l|)n!PrCeBtEFAQs!A(@$tEZ5}w@_miQ`Ep4# z-;eS&hv$=;PQ!iT_X=aw@Rs;N}Bq+7?;xR-n!Osjpx_@ltfzpGBNWXfnt^KoBVk+{Q`>W7jW z@9Iaos_tr9SGFdzuH_>i{_2kNrIU}i&xiQe?jDGmhTeS_jlehWF4bsM^_bM0#&qeV zT^`H=#=8F5#;B5P;yhR~iGKbnxqu0!>W|VqjuzAl^gw!N;B9!LU0MC;-G+)fkAGFw z__DDSj7MgKg0Z%LU6nR-Dv?WPg~+-7=c=BW)mP*5jej0olU}(LN-kU2nlgqt(FL=2 zJ~T_5TWX}`)r;Ouf^xb^shT*a1*SHX?`{0@@TkBC)Dc-C76aPPa>Q~>n=DJisAgRP zt;AZ&0xc_>jZwXuwGyio#m6zn`tOL4y=45@nVaD|?tM^)nx;I;~KDph%pw(69=| zlQpv~JAwX8Ca8kv2-P~nKNqOnINx}e|D43A40MBYR^@fdyZk>ZIV(52QkKHLAxuao zlSp=+%`KCNtYx6Uy7UG;A@0uMO_`seNnghMX~?fGsblb0^;ySxNiX`Pm#|h9XJhH+GE)x4lH}*hK)~XmTnIXUdYWO=WAq`H5{)n8i$Z4 z$7TIL8IHA$rH?kO``;rAA@jjT;adF!YF$XqBYha#OB4{8p9SL1)s|x zldig6`rL6Goax5)6XCvWTE$y zU>|XIqtT?iPMmZhrrHQ=svTC|iKezy2nblbJLzcT+Dlu|IOqTGuq!&oYZlJxEbY8ogTr1XLn~W}cIz3J<0%(ZKYRIT{ z3)R*`c@odxvJb+&jzNz&RXsq#C)YyTD7dA2teeEG#YUmBJK|{EY07vh2Pt~OzpSsK z;BHw3ES>sPC+e*2PlY-w)RqiGd%7-lSiPs${a1T_d%C1mSY+5%NmH2rAASvWu7An| zYj=?;LcM2Htd{}(#`*~f)HFZrV?s4jxbLL&&be z+wU&G4`V*#)V5^f+Gn@4{0~!{5~C(g95q!Hf?mdY0(u#JtA-_K10%SsF5`GrM%9m1 z>mn0Q=0?XehX3(LtuBu?*6(P;4;r8C=#DgRXCtJ8c4j!~Qc2k@({FdCgC4buB>U|m z$>}n!*i{NVXZL8N^L7*W=x%VAyh0-RG9B{DK;WBRAq58{<#(CZdzEDR$h1VJ>t%YB z(j|LHJVU1KWqN~5r|e0OJopg0%f(ndqil~CQrq@W1yQe2TdsPIl-?uLRWjWt)1PJP zd!6i@{W{rs;B}Jx{q0@`z_Mn?5(?yKJga$L}CUM@ZqEBUIh168~PNsYi+4O{NoN zy80-UdReB&kEY8;Jzk5kuWHFki=I%Op3jUKhima7qs4mzkRwu3#4a^n@*%V>8caC{7lu}6YD%6-SGu6=E`*a7bJR=(j{MZ2ioJyMp0*0 zVHSkf9umgZ6SY8G@+C>_l2eddMAo4z8&^S)|>bT8pm z=f64==_=a5(80f?x_T%i!?^R$BxCmhmvQ4SosG>uXBfd>GO9NJj7|9sB(eDCtg7hW zzK;{ z)nSal=GVl`5YE3JJOYbvUghDbqN&@w$-^_m#ay$Denp;HPQQ_P=57y9yCo%0+Oh$4 zbqcGCqe}?14vPN+notnNKPsJ!Icx)`@~*TP#^!_X`i^PAEh&rXYk)vg+=f=w2UAkT{*u-irG1uCkO5)RjxF6{xxMQ5AFj(5K$ z@rQXX8be@?%v{@svF^4-KD2^BQ@o~^1@VKZgFvyh=;oKk__b&@fo)bvYsL;K)gssx zQ#FBY*8DmR8T-KI)=y`Qz;jx3hw- zu`qG3l6?xgmfE5WJ|KwbsY2jFd&V#Xow;TQG6bG!va#)YUTTNK7OJLR;CDs*q3cD^ zVa7;iK)W3_VRSjld!S+ht(&rJ8u)PgfAXW?q94JBb{5P=j1p+Ks=^C;Gj^9^^57Q4 zCxLd8Vy0tgnYYy7UXLaHw>bm3z|G3+<9(d6uHY`1Kp+go9Gio64)co)=avX%0y}Pg zFTz4-JM$lOAA!xRji4K#VqFB^#S}|mGw*7Nso`O}HDgdAfz9n{7REVqoi@U}J}fuU zygLrITeJV2{TN$mtC@khhQL;MRcQd!64(Nx#xnMyDlLMqq9lRMY;Sgs4>jTAI~a33F%(`Putmq-$rz>u zCnyfU+XObhADVczT~BRzo4{tyK;fY_^EhIUz-G2cN4yMC{o@MuM#~9o?gI12FcUw5 zqQSNzj&3BdMOVOt9kijpBrdJ~xd#5t53@fFbr9Hvr-J{3GC~WsNMMY>W=6H`4}#*d z;7_p_*8r`HT8(a>iiKVo#e>oCJ%P>aZ0@Rwc(<(h%sf$(*S2FO>VEXJU2r{|NnqDG z3mpspI}WGqhunf#s_sW&beJ0BYf+HEF8nJ@N(?JJ1Jg2r;s=sV7u4%^1^9elBcEZ<)s_8Ht znzZ0Am`MmC{#5JaSu}DRG)v}2%p?R_BjxuUnBlNqC>u`0Jp^L6nl2uncBuzwswEIx z6#vNq~NhRNN3{XW2ZvQawrXs=@27dIY;8 z#2|si+X$YS<;A4YU#>)-qK;RT9xZtJLb4{}e=u*sNNtFc_QZABTI!k){vO*x6C;(t zHB?&IH7n*-1@pQ4< zTb-KBpTukJWOG*vf0(~&_Dtmk5pO*NwTTDK>8U)2Uof9e<%Rrx^ZiubBra(VW7mPp z$JNrjNpsAkG@g_2Cy4Mn;}6%;QpaKD37CD-cyCk_1iMbZxoT=lx(fsH1Qu@|oiGXg zhY|jY`FR>I?)3pAbmWt2Ac~KXL`p($lJNclP62Utf+NeOtFqp{k1#e5oQzjVzCpr3 z$a{yIPt@TvYkdnI=}Xy;)Qus@ym@A;blz?75)`?XID66egTV1_2c;fSYM?_$lPvSz zxDuNzq7BDbnMhJEfYO;Lb3h4zlCllRBT}4s2bp+=A6+YcKEt~(@F;dVVwzyyspd5q zJazCKaK;elT1)|xz)6_`BtRm}`wy7)iMbZE1)zBo7BGe>iKToG%1WCeTXYzdZL%Em zHZot%;N9B14r$pY9~K)omUZuUpvX4e21+6*puM|XZ2(ecW3*(ERAaMUUEVR!;W11Y za9-W%Af}XI||BH9kn7L!!HB}!e&SD>txQp~#?L>hxB5pj%d0x_i- zknJSTUonkL{urNN7G&`myuP_5i|5ulW?FtaiskPdErH%P=66|mY^ydSvw2HiY<9}# znVlOiMg+v8r#9NiVH+txosxB}jg;F+1tHB*szr5qHlGr~&zLEV_}VUckE;=wQ3o~h zDRDGbnD=&2i-2U@OVsHW^*Kfm5 zwOif-0UA|FV^SG=htw`ekZPHCKUn3&S^}1A)Pe-rs66wTLS9gN&6C(Qg0DJYwF+Xd zYpwZHAzz%fYpvzFJnUd(&CgmjpEZL`P;>k`tLD`ZkTpMR*L)LLvgZ9@$(o;4HSadR zZNf+MO0!Q>UJF0BHs$r2Rz9T$b<+BD#$KW(?2!|#_XRLQ4pl_7ytTQ#DI7ZLY0II# zFcPIh_o({4LGxl$J_2zztQqfspB2pz!v)ocn(_N$5_(?E*jbE){_E97K=e0f!g82M6+eKDGL#P;9@(?ns4K*>9W@__6wZLU(cAgmT@CxgC_nEe5^~;9*P{J zEq;}aak+H2_ROf#JnkJ)g_1Yi{i) z*4`y_U7H`6>DGpe?%b`_D*)zM?bho1Cf}=jC+n@;p7Yw^VlCGy^SxDO36&Wv%jBZW zU@DX66SeFr=`>Q?5N@>UynyIK9GK_U4owox@Ut}r3V=7|Kz&xHqTO^-NrLEf(LON0K88Ts} z(E+LU_91jBkMhhEr#0n%85>P7)o5QJW<*RFwIfk~KEe`gG8#xHq1yb9%=>5a^i(?e z)HZ%3Rf>8EqA3-2L8`vFbvF0n0Q8O7JTG;c4zU8R>yt%Wl8Ar=orY>V%;*PrcAzcx z;@WdAE?hR3jyttgg6m$2KDYK+sb`;F%dG_khS@1(2-8#Cq7{grmKN(6p-+HPUz;^u zG=@Kh7b7l)=*``p)xh-{h#y^F?S50QtzG1v_86v~A$onc=Ne!EpeR3k`uU$diJnZ6 zDXl=@!^}7=J=!1eiyTR0I32H2V`8IVk}h&!T_04|1cvny*Kr^shZJa#rQ=pR8ggVb zczjl;_OgCG+qHn|Zb=bM?6PzkYnNTYRVd|zMP4X`M%mF(5EeK?DBv2}oDk*&Re{3` zv~$qj4)zpx&>|ai%7zNGwt1pam~HJHs#D7%JD44cXkkeOCfUq=5R!&>briI6u+9!P zz`;U>gyh;d+z^)U&_dOBv}pm+(nhWEOuh@XEW~Z=$c3s4pAD2bqR{R`IyATYu%X?B z|7v4EI35=Lof6Mv5%k#Wi=4t^nuADFxLR}&{&YBRHQ%#H z&V^Tp1&N$GhltiJfYIWC_lgC? z2qMw8xFgwh>^-?^X_*K~&(K+VlxLV*n^h4IZMdGRU3?E$H<9x!lBgclOCQ$5(@T;n z^(cp5toLvPZoeY`c85QgD}n8ol%LBX@aSBeeEhv3;3=lXtNa)%5J|SR^v*$hNm(lz zCw`$vcF&am`Id3|3Sc?lya`eVSJA#$aP4lnlOC}SYUUq1ofSw&CnkVS` zEVQXaT+g+W_{^fbq(Jvt7&KehO#K@4^(4`OVxdIZ`h_|25uP4cR)TOkPbwFn&RDnhE#XT`#00KqQ3m)T zJ=MaB^(4adEYA?oJ!51h!fm*<#U)}m*M0!c>lUq1%_3BT9o#w1H(9SMZCMCge$Y|TZX~JAIYqRFfmJ-sK-e$17eYG?K@N(u~gSP zxwUyEVjw*5tL6(%o;+EPM&+VYA}rai%`Oo)g7pt+ngLDOZtY@#GP9tiE;6LW?P>4+ z3478!7%@W`fdX30BJI8cJ<@|-x;PEyJmf;TKc*GvaaipLzc7tFR*y2k7hyZAuwpEe z!1Q|X*oA5E7-b^KV}DG8#{#5DDyk-N4vELNOp-H(ZsF&HVy649tI)X zEk?q)Um*gc=YrDCjSZ3>v5%ZbcK-qvT>l7I1=qfxq~(g$4W(gxUCX<0(djc6Vwac7^Lr(id;_BY^IIGJEi!L ztI(}&qRhLc1%%)iqX!6u1kFP4V0RHJAje2Rt?u`>N1dWy8>+K}i4h^Q9SK7T**=?1x#1N8rVIO?a;V)|8M_@`xNYY5Cp(i^8$m8;0Nv6J;k%(r?hCd-qhr)exciR-5k zn6hS1UoH25Zf&6FJhWkIDJP3hmWt-IdLRQlK-OkinPU3Igs>V6iQ^Z&R20qz>AVz+ z?4>8UJ#fya(m6S_X(hY?W>gC=mK)g|&uO`@ZGqfO!X&kgqNdPhcMR+vqt|q!C2s8# zG!M;KW6oWK$E9(!b$p%1M|{|@DRHRIdPy&4wbKx!2p$4|;TaDD_6t1Y5x(8QFcRU@ zqx5V+GT9-SeW7O`dXuYtdKBw9q6~ZLXe?zxNYk888iAjd7(Nf84YJxx_~;peY!JC|2$my{%8+o4A%tuQ_FRpzJcA6TC%alV=gGjN>qPNZ35-fhvQCQA( z(FCS_TLQI9F+pX>Cc*fzIRS`SkAM@^rVsv7dwe1HjdF_{qJ?(yJua1_hd>eHIvduo zU1De-8rqu%LOW%9i#&7GzN6sn#@s9gKoLgfloxpngK zlB)K!x6HNu9_mf!32_o_{Vm5~%~Y5pzv{9_RoVXz_fA_r^hD>uG-k)WI>4a@OmPH5 z7I7!0{eO1wqQHidrADgP<NfwhR1G;qcvni=*irfZ5*l4MC!yo_RH4%<0uUq7`NH&2pz|SwK7!c zrRu0pls0uzNh6A`wb&!EfpzXibh^=^1+2wqymGR$fY971JJ>PYnWh~N+moKt$jOe) zjvmq1p@lr{OtMb=%eaT_cC}8V(6-mIq`QMTt#@h;o$Z8b!6I#y3>|GbW7PI)0K;*t zE%>j#4HXQXu!L4t2eZpz-d0f^c6{p`;)&5$sz$9pPCa3R&55CqFG61ZUsXH7U1_)9 z@r0-SC9f2E-^*}Y2N59Gf-#o3nuFx=DuoH%U9!WcuZj|9G&ufuqC^a`Tj>O~BNSTS zogpvqZMtoxqg8~?xt;#H{G8h!nNBUCX++i+I+=><5Burhn$(OUc4&7fyXsOwC*Yh}F>Jr*EGI(lMlLNWtlg^D-Z0bs zLAxc*5(3i6^88+IFztE84l|k?EUTSK%QnW52^lcJX-;=6=rsE&Fwy6D~%M+?biF%Cty!OET^c;y}IQ*+aIPi(}40UTW@5f%34t&bo7!76j zZ>JNmzjfd(QM_yY4^03CqsS_}pXDOj4b-Gch?ZP859{7h^?{3u*)9PvD z5zQJ0B>OB;-m}lY^i(&twAzMJnyCWs;}~QE9_m|Z3MGZ0-wvHg#f)xjPQ(A z=RxR^jl_Ge)anZB2ncVBpAZEv$#bKROU2!s&LEy5$>XK_^lol#E#W8VpaGcPmkt_` z!$AXO)j`8Y@}OZI^43AaaXM%~#6XX(FT*>|0@Pbf2B6zKNwaW#+uy_d>#jQP0 ziiQQ<+Fm#dr?^#A{-k)qiPLGq>XnE-ImbB$LumkDp z)MGy+lpdU~G^1Jy=&h?X=1rVQw}tnPKn4Nz4CyBv-r7OC9quI~^9>M4mFPd8n) z*X>S8M5kykmSTx?Yj0S`dhqxQrJjUQI2ZL1R!oTMRhK%F{EZ^4$U4cQaYR>Rwe2e8 zw(I(291ET;!9?^w-uXso%graA#68&EC0O04*Iw1&ZS9Ma&}rXk8e+TYV10K9>;wh` z?^z%iSqZcNLyR(Bk(EFkdgl_7aetvF%Y(R`>TDnSvB;NLBZc0G)1}?6T75ZE&RZ|a z)kwK!HX77`i)fn7T#7al(pr1W6_c$udeAV0u}u(;grv;ElOF2hhQ#ySv(c zbIV%X7N@(qn%Ao8W>QNMbW4}0>V?=?F#s-0#c^mHz3P~$-7*HFuZ~aehr1KE6a!QD zE&jsY30?1}JrFqU)^4dJ3B8wgiyT39@Em;$4nFJnM4YTeby=X2YC3`wy-0h4rdz-A zL=w#tjj+~i$GKoH7_e8KDN+s(J;?Y%ugB;z@c-X3bk9>uq*nu|XpuUUBk#{QKU~M# z*26Vmrkz#Co!j-u$#^HXTI7#p_3V5$%hXZjBiu*CppXLOv_f^O&>djBpC1I$N8t$yQcYZT|QaPa3?2nuynp zQFIg?AzFF$7V@0?&_=x3L}heKM?(f%7&>|dh86B#7-}Y$%j4KcG-plq$ftP;_wFH2 z?4cUmcpCu!fOoL^hxI%vHn|b*=xJ||4`)f19zkyo+Em9s&xdOK+v;&I@-i1cQ~k{j zJ|Kb*sP6na|C94pX1h0V&#!0o&^LG!jSs7yyPsEbKB2nR0bKdwrDp%P`S*OL+2tVr zs^&Wz=xY$F7rQ4YKU&@X5Pwb2{2rHz=!=GL0rc_YIRJemc>zElL)I}f-{Xw}8<0H< zpgTzExFSQhj@AP<01g1?X34m%jpl{~d1L)(pBmli5T806O`<0HDvc`UQ~C3I2yTE~g{&9ykT1 zZ?V44XN*pj?}xQ?_jn|orHS&Ge+M-^##yr=i2}} z%DizbW6QDcdICTvlWlRzNGFYfkM3ZM4(P_I3g%KSG!UMoh0q6-W1+t$3|AqM2O-%*hBb)#; zVG(WLzXZ^SHIewG?`H}D^qtJr0NQ-t+XQzS0W%>_JIE+_g|>;e!L_tKTQv>eCn1i0 z0nq0uTL83+GD;9vrT7X4PzGp(C6U(JR=|JN(f<){+BDAH;oU{5}VuDZD%ah5|-onx(1s5deL5(I*n!16U7W zwI0Gp9Ds|+#3K;X0ZnLRrUlj{Vvu_2DyRC3o&!fbjE}OHFm@Bb{`&*8Pv*hKmH7H# zl}$y6JObwcN&!0n_8)y-a3%Qx&@mA(6##zVUkWc1ko@0Ksr`3*n1V-u+kb;#)Xjj& zfa)*<>4Srs3mJQBIbt`xdm0v??N*bigmAL?gcEebK_g}FS-!2SeaF2!iF3qXDo@-G2i2fPb735Z{& z^ieticp~K60K&_y0evgrS->H{4}d`OqoINi0KZbf=RtoDa14-ahUDu5zmojs|Dbn< zq1OZY02TxAN9||qDlA|-aXtKXz_}+eCjnZo#qb6cJcUsNcpN}ivrj)Qi^!z^|7E!` zPC3*+4wcz|6CB2+^bMeI1H1@u!ASd02R_F#JY3Iz(WyZ#)?vg0s9|ilrKvXwV{ z7Z@#hXjlsX{reMN!oz0({mfTB<=GzkCmM1=He){KwPWdDV(1Q_e~4kIS@R^{qtm~* za5tgD^m~9#Bec0$=VR`PJ&gRjfFpoY)iX}XgVuG#b~Pj)}wZ~PrQy<>nGm7=5<%%JqgXtf94gOcQQZug(t<2yn+I+*0g2o j>gK=l_hE2#^dEd8N43-ch9|5>SJnp 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 NVC|xrfAJ9g{{RSb348zm delta 40003 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 F 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 V{w^8Y`MYcm^wC}@3N(%N{|{s?UMv6r diff --git a/records/wasm/iyi-init_order.wasm b/records/wasm/iyi-init_order.wasm index 7bdc2de30f8f9dec1840daa4ee3840a3a2a149d2..26c519721b23d5c3ef438ff5b03803563e534139 100755 GIT binary patch delta 21811 zcmbV!349dA^8a-A&SrBFNU|XWLN*6ifDnR)`&fK(sT>LlioS;^N&poI9+0r%P`L>V zFd)aqn{X%?F^C|j$Sv>`@xTLr;uCMgAtPu|@>_FCEAlC25>>?CT2to5=GJ+3bN;R!{C;l4U(Z;G z_uxHpr&Ux`7{RS;k(M;)Mxx=CSkri6(GP-oL&5Dt&gP1gEdnCIO9DnQHv%HKOI8gq zmD|16`kd!v>{Eqa(5q&V=n_RfwARWJX&FZ&m(P;9SNO{G4>ub@z^(G6oRqsoJzLL6V1V%ga zm!(x!e@`Yqv&0(b>BxUxYpwOP=Ko!5z31u2k5*d?%?x^UH~aI`Du+jR({JrEyYZt- z7kl%PHZ7H^W}7fG3szd~ydyaDSms@CT`-$AIHSk`Pw>@aM%^W(i4lK7uvlwEY`V2P zCYe=P>tixAb}hJA=k>%1fhQMO{}a=JRa&3L_^m=;W46f};OlDj_oZ1+_>|P4CTJj>O>CHE|6u2v$)O zn>Cp6GYhT12MW;n1%dIbVsUmuer$0~X7;~0n_1(@YeT3>izG-dE{rzJY zn`KQMkXe5g4VmM|ftdEfNMP~t!3yhz0mZ2H)qnufxPgt3HXE49k1n=)4V+2tdT3xq z=c7?|gRJgC8m;&M>nUbs#{}OeVz$o-5V3*SfUiV05Qq()thTZTHAt(9s^3BwN%1L0 zaP3-a;GnDczG`dfpi;iI+KRuvEj_wjAEd%**XMB5e)@W=!I_I|4-T^NS0@@lOrAkE z+{DjRTkCFk2{WqZ_Q6*%zE)PPyNT+Q1U%?xfCqO~*L*OfRPasJ)_`H1=`n9u2C=Rk z)`}j-hXweqYU{UQSK?9A=H}-Z@qBtqCwep-E?L_TZ%M3o4415r48MYEY#%-#eJ%O4 zHmrdLlj8kG5F?U%>u5%OSa4f?dOUkuFM9lNTVt5DCh6~|ywuNM?(B?5P0^?}aI9); z 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 delta 22088 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 wjge7t<8 diff --git a/records/wasm/iyi-inventory.wasm b/records/wasm/iyi-inventory.wasm index dbef64e9d48fa27076ef0e32dcf8fffb7e5c7ad3..0d5100a4eb240dbf8bee1e84ae59e8dea95b32da 100755 GIT binary patch delta 46143 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 delta 46153 zcmd442Y6IP_dkATX7BE%LqZZdOXw{W1uUQhdr)7o#@?f1qXb_e<Q78DEiR|Ul0{-4jxy}JvRzu({U`##SPo|`!{bLPyMGiT16DfjN% z^V60*p0?sMng2o{#jy%3{+YB%2bG(3AedBXvZuVDlb+pJm8&l9R&`hKdm*iqvxRWv zAUUYr_;KULSp^Ln@po8fX{A}Ql&XhSFZu1UwcAx!AvRY16ljs5u_B_Mv?76m*EUwQ zx7#%{X(1%cokAkROz!TDRae-#3Ay_cbN6nnsNgOlLJTdz2VAHUAgV);Dj4T6Z>YBjl&^tG;hBS?-u$<+SXXvtqukt?j2G z@{WjnEFybFLFN3~XIm~5a>}CGTUt+5a@?k>pW612Q#Ms~$r~azRlT3rT)wxdYDV6_ zbfg9T&dAHI&1|>4WRX2BPF5au1 z(y6ZkcGWXozZdUS)pcvtY}^CDHT^%VAUv$m^VE%qD41LIWw)cnj;c=GkASEy?mkdd zR?Y5yahrX!{}kVpE2yl>>d{V)d!Y8H9=S?xm{&ElS9keeG`d%FNaDd>kB7+X2}fO{ z*bj@2ov!4xMdVFZE~>h#Q>WUps@^&`FLyID z+u9Kus@v#M&8{k#ySOUrytY8>d)}F1u{-=i(X8s>^O_-{4#|tF-aKy*%eOecH6&Vl z?D=DaXzHGvBhIZ&DmqT0H&4CjTp?CeJ$!LbH2UR>uW7Y`f@v#_XxgfXibxKYwt{^BMp?CHOh#>s zVdDdk{KL0&NLlfqX=R^+X;m-ZQY=2LJ@VGa0_fH^Mh(E3{-g9gL5J!xiBv8fvFFT~nonxv9L4`Y(HBjll zF8>rbZ&bV^P+;vi5UV{fuE9oR-Q@m=d^7naDK^$Vb61!M4O3g?ZUPNYK_a34%1RX} zDFv0As(zW;@A!ngF3LK$ZBhyiOeCp5j7YO0vOo*bD-7Y$Ovu4je-#E1(im}fOUP*Y z-IH4-P>Lwvfl3fmPD-;1p!L0{wFEb3PNUWjo7Ox#0UPyZq-0qIPi(B3J?%u~zdLO- z{+@eJAN;-Zp27ILuQE^W+f?<{J@+-G@_77^VXuZCHdQ@1y+~}X`eu3^WU%Dk6WREE zmF+TE(XdDW%|>f>Y^u$hF`B*bzN1$M}rH}NI zh}1mREmOBLK^~C!XOFc*X4<@)@war|5%@de?yTf6nG}(ff(=z$=behK%btG&vYh!V z@wfMah4}l{0%Mx8RKcg4s!|_sm7}S1=(Ir57X9Q+k>&+p?D)se0eaQreOeQtZ5vM< z5&Ua2EYix<6hTcNK7KwBk6CyNm|nE7g7WWNb0i{{)@%s>nJO&YRMlq4sJMRi=rFotadRMQ>RwUtjl z7{oB|_T0+kruz=VnJ2U^M{5smZ)1y%RZU*+CN|a%dVNJxZxF8VtZ}HIcU9Z3E=Fqk zR~=G(8=Xl*+kO z@nMm0!9#V&r-|z*DtBQza(r1eEtprgD_xAyIcGOY$mvqBx^8?U@vJSH*1?#*Z_6o< z(ALXokJO#iQnU!j9gk4#eOEl9D`}e^NsS~IRGL^M97%^pq&0eGJaP->K6;4o3tp;Q z7ZH6qxz!!W6Ss@peTO2nHG+SvZhU+3L`%#k?y&`8AxzxH)a(|)f^iEDAr}cYnxw1Q zSJz~)Xot2es5|-u@kCPd%7up_rg?}f7P={CfPozg-N9#wp*cGqKLoFB7W;jlyXXut zLT*@4*YZqpc8Xl_IOm@B{l*b_*s!*lkw%g9g7?S^WSkPoga8`R!B1lm;lw z%S55=HK}=B&DCP2>`l{^C(~dV3#`s^A0}!mPr*D|gPs2J7e)b&8#f6v;s&d~JovnO zYq4nNn2ZA0-bpWL9D=VgHKkzOxG5-A`NE`e)@f;?0MlJ!(v1agA{kWM1`0f^e)0{E zo-Wi+E+kh47EShg0~R>_Wy)#KV5iI(DdH#BT^r(Q2wBV*C^;uHk?uNS?%d|S8L?Qw%Hc;*e_tTbJ)ZHV1nv)Ns8gUCaX zZ8wO4UA#Kcq`3rB(^7~uhj3oH}yHiZ%=v|2l~Yksx%aA5Z~HDly7w$4d z0tJT;CoNZw$-fv*?lmLD@vZ-ITtFFCY<4$}6a&!2-$sh|hoM4;{UHSAfjVfEXx55i z_?MO+619;@iBQsQZ3^tRQQ}DS$&yiGvh$Y}#|C6lL8D;>Ru}mm1=C+za8D7_;_NTO zkaH50v!BWSOR4*U1#){h23o!$SR;2ui8xgc8>IT(`@m*5X|!mG26r4SMrAyQdcnEr z`Z=53g`@Qt-!fXf6B}?^S*RFp-EE?^wh7<`!a>UWw~0JG1XCrnC?d5|14xP_b(Ssj zY;UNy|F`IfDu?`AJohIIwY^<4blmM?6o&q)+eHW9zHz&F1F@B3M0><`juD#P6FPM6W;eN1oUfG?rqgE>&BR0jrSwKWtfy}YY*+w6OMpQR&h;SCrX*He z$4qf;)3DrPaRbMSM*t0rAf3w)cTcJ45AJfyM5}addnzKKe~;)VA^*W;Vi2+>mWeyj zz?5>)+Q$&YKri$!7xO(iVceR|LBTJ}wVaYGVjU-99XG9l9ap!sLZk^0U*~AlHyrpA zo84cWI2X3Z#nuU;wR_Sy@fh+y8z=gJm6qe&_&~a!>%0#i? zFWU0%L{Z+4ond;`=SZ_*75pxSU}0z#+&;pa(%Z@e+0U4y1-fjK7}?kin%Iy+hxNWg z51X^^5bHB_Z#%>CM1d0#SW`T)xh^tU>|(F{aHr^+ceJz$#)VT>9BtvBz?0-XNB6#_ zSMNSo^}g0UaSF&C>0UcU)aS%fFO78W)2mOv9=&__=yjyq_bzdZ(-kH8^t}Goo3HJ8 z%atQXm)zQO_)S-ixo+gGqi?yU=M7_S=<)B8p11YN@6#*4ch6BHuLiRBk2N3VJ^!$L z{#B!Ixapdn`T0F>y5TAicYnT1q`4VW#k{&#r;2@n{Qns}_pN(H>$>0X6_Z3hg~8{a zapFEWL$pp~3;d^-yK<_?a+gmPP539(-7`b19@rNceEu0#%7-HBdBd&w2;6=5ixzb+ z%@m#G|CGJtS!h_#S>hU%e+;VU^Uqjt7e9cK+aD13rihL1(1$n&4Cf zN#m{(@Fgs(y?fSTxH{w9NsD!bZ!H!_Bi3Yzraj06H<{o86Fh5zeM@vB&aKgnm{Vgo ztPx!_?MrOSy3~zq(zF{b)tLj9YSc+4wqmL1f|}kkvEVX|(#HgsEz=B_nczW__`C@Y zn4tA?U7&Ee=3?1$P5L{Nn72abow-6&xyi&HFu}7cbhTft5G_!9@=DRE4P|kA*s>fv z0qaXCqEH$A?|1wg=bp7v_qG>IU#Y9wxl-35SBYCdXT&Nkwk4}Xw^k%~0nEzBc%;?q zFk;^T1qIsF>R$D6_I~MPn5D#a-xMsL*H|e@Jn9}c>;FmgGY3C=j)UJ9$$EKU0-UJ_; zAoEF`cbo}^A<&g2XIj>kneoaQADj@6Al^39uYBK=n)UR09dxhPB#Y{GI zf}C|4Wv~fuS*OcQGr?j6numv*Sk`Av3=f}{(iU1)cgr1GCz{AlOI>@tIG5qY>%~`D_;1k7k1fT@Xy;|=soGhKiXjE_Sk6hFZ9AYyl|x#zOzxZB;P-KVY5x5WfI#z z0YiSG9`ebIu0pg)P>YA?qc$0`(M_h=Z+dZiGgN)H+iNpq91CvR3{9O~cmHNFKaA7? zTXp6|Cb)eoI%l>!&jdTRVmQuro4yRqnEh{I^+Ye+Dc$j#p?0&~tB{Ofx(Vuiq(SJd zk<#6`QX>Vni4j1$ZJWk@bekslxrya$*NKBoaEl2Z+zu6BWlu@V`c~>L*YQ^oe@$w& z)A4+Txku@E67erX{Au@!EwGAc>kdu&k{!^)+3x*1R<~(~_#`Rt=|llV+AW#~e)6E! z?!fm&j$2tP0&dUUVvy^+4G;3x-I%Zd(SM$VB3HgG^6K7xN8Fns#=AFuDJ~NY?u%cF zsp1Uxyst!8=i64Wa9>(7x(0)j&uJ|zOJ$#eKM-5!Oa8T@GmybYooDO(W{2f}0;|Hu z&u@kNl!WrPqZU4X{y;zf2(JPcnS6YNOMw7-F$V5L9v|kry}uT%)XkkvbB7Wb319?) zF#u+KEt+3*S0~M6X*b)a0Ml+OqN!@^y>RUb#@Pd|>ivmUR#EAs!W- z)7-N7$kv*66E|a@Xc{)+2psM9+$XX-nJnipvRNR>M=sK2)iU?SeWJNzSUlab+CW2e z6}JJ2k0*mb^EQ@sV*-C2k;g}wKA3Z+W&MigpsXET3fb^cCv?z+A3W<&`MnKc@=>Rn zwl5rb7(!hm%i^Q1F$imsf1YW)jIKl1^HJ}0)zqJM3-*ib@NYU6xYNCCzsS)I3S^&S zS&x}wf#}aLhkOEAEEPC20tdh+d9bNv@v%?SdEe*3QuujCpjCYAY@PQUXr5vkDq}QF zp8B;D+NJYuLMJukSQa03LTAlqI$Cg%DJi16L7tE5tTO}GUuapF-eW2@2;A@qZPB%k zME0+SBNbhiZCQL&na&&TUVcDipQIz|hVw0Jv_X{74_aClpU_jLv!A@kvSwq}*ByKS zSbRbaCi9$Y&`GoA$|i$X8KJ)iQgow%Eu;HDhEFKdV1IpqW!+)w5z%z?H6PW-wDc-B z;~VryAB`Hg)$RU`Xqqxs3*q}~LDcQ_jc9V2FqDGDmURMbv96{aw1Q7K#grWam3!8& zrU3w-P`)Ph@es?ZGI@dMyr5Kn@>2H*>yaK~-YX`vK#DkDvc5ns}05?}_LjK7M9*_tx*? z?b`!VMWzb_(Z1+uK0fNv3oUEC83ZC)ivHl^XHG^*3^y}EE`cuc@iR}HWm!*!b*2?v z4ztL|&-`vFCNlLs#-cY6+Pe|N{9&;My?3Nx$%V}Yp=Dl$x6(UrdAORL)Lu! z%rB-v-XX8nr6|S6uk{|3OjN04^aUS3e@!bO-0G8l9^&NV=XP~p`93z8sSfV`1oj_s z(|?HPJ?G{p#NKw#M9gnmRk>wNg&JdQiRj0ui;rJLoAF@Cv|B_+f>l0#=4nv1>kV^O zG#hO5@iQCUWLePgm_A$%neb6-jm^xv2nd*D{u1G~BFozEQ;&7m>!$R~RhD&&$rRE4 z=tn+khsm7c9{(fS?x9Ne@*hR^wO1M&`tIsj!9cVc`pZYoG&c0fbI{rZmL36reC)Gy zKQE17XhHsvR4{sYd+OSP2~G+pnn@w>H4?y7tbN@f4L*S!P0Y%J9-9`(=m;S433ZY> z^9;B5PiR3K6Fb)(`jf~`4jLx&>nyizSY~$$U9EACt+T8O!4l;r04)De&={}tq`1nW5y3ePR1A*{KTFiohAAYke*vy#Bf~cNP z(sZ4D)aRI5eVKg>W#SX=rRyyH2?Kcb&mz-FHY|OIgzY}^52>(5c#>pDW54h-hLX?3 zTcE-xsgcRN_ZR53QTkAH2#gw^r2VFC6W+G0)qdNSgIPXFC8nhHyJaVaHLXUVhK^5CHdhxqwn+1z9viIR`{CDU`^ zFXE9#CV_(Xmi4*G3`C33DSYfJwAQ=?7xXIkn%_lZr>oK_J=2BtfG?LI7~o^~GMQU4 zgoTwR?f%;7KR;7gr?>~fM0>Le=+Oawkl&ocIIhle zul!v!8SJq;1FO8hWVc(+->|!KmLs#no{=k_HAgn}HCck@J*IkfxXli{1l~Z_sKzw3 zkdOV9mfh`5g}<^9QGX1EW*N1)xVf+benEc>`k9T9d8&Jakd2+k4EmKVu!-U`;rDl_ z-ehLC6xL#6ZDiE%q)>y&+}K)JcbSUpKg<$CBI56?x%#yg+K^>RizrPwpU_4_`a}0U zA+tMrGtPW0$o{D7+l@+I5OMcO*(B*w6MeUnyF<#{BrkWS$?alt122QCW6@aOjrQwJ zK8JD*?CYebublRmXfeOl#j?290xgu$tD($%LO+{|mbu%dY#R3JNpioI=w+{(4Q{HE z%`Vb3FYaNM>Y7L`8q6p3xXwGNt+2{`8GMJyoKNUtop(uBVT~~3P)66nj`InfsPo3S zj*{7zo~|RMy@a*%a3v0($~?6_Us&)-*#h{?AkHUro)PlqJXi_i{U!83U!55!clV8N=-r?;?h7G~=Ab1{Ia0I3&!=0DGb0mBn=O&9MwhV#xKDTYsKF?}JA03B9T-ab4Vi%kHw+ zwCue?=$2`jjGhMD$|tm1X9gNh5>~oizh7FR%f5kxmOkBWn4$QD<{3GBhnzoF8!NXBJc89<7AWe z-Ym8RRW>s%7SX%lrSP$T)r{|Q+k`QP7!&pUK={;V-3T`Tt{@-#HzV*5;fi@{AQ2sb zKI3Dj8BMzHN@2Zf+OMK7G_@=~w(;@KxI$P^2+B=HuR|~K2{krU&pX+&p0V7uVc96D zhgOil^;fx(u*?k^p1QbSfrJOvR;p1Y8T|sh^6{5tJO_)}`740M zN7fl7Wab-wf5lc+Rh_g<(uP{rSi`UtorWR7Csl8{*|&m-?al)eVz2vDl58&SbKgjk zd7{7jbCPT&9;j=UEayo%yq)_@s=P~-xTmGb{7^ZL%d9M%ji$-YVwwARn(Qg=a(AW4 zUg-_UIs>eTVNFzagPWZ$yJX^$q~1vrcQsMXhhfC_cF#(eXNvdTXu9m&GH|WHsSRfI zTcE42L$yUp<|tHvb?GSg!*p3vI29PMcven2jQ)0FG|N1b7}<{_C!aY_BS)8QWy)r& zVqr}~PV05V@0fWW@Uzq1M>6DuCe_Fzy=L|J8$`!j*}L8TjpWG}oOqqEPG`>ZF#hKw zC;KL(v}Z~>ROxEsTG@@^j?ZS=C9nh|i8Tx;8XCn*4(P|ceShi~HT}bN8q+UpRi%I;K{RViW?a8?hynT^nxj$seW_|V}l`_bA z7pcV%t0?gLxz#XXVZ+gC-5yhlI7Rm}$lT(dkR^-Lw;@-nnVRb`6k<_S5vsNH^Aw`<~CX(*~(Ck_yjc$yTuaI&(Q)VD#0#cB+tZx-4+YZgM6EJI>5`s4M)7o*&&Ch|ei&dtx3?=CD$LGklgZ6-_%tq*{OHr=|CiuX6KJc3l zoDDWK&LsqnK&g-G=H|%TLpb$n)>_URyc;KD9D=R)ph|Ij1_z6k-Qsp(^<(N_ln@nO z>UBt6iTu`*sgrbS_HFL(t>w`<|3Ti-%zKuD?v9Kh7}44PanEccJGb}@d3m6g^Jy1v zsG58$yNNra4J^}oD)WqcNvU#QGu0R<9;21 z)!Xf+wUu4N9|6zm{Ap?3@oi;LwA>1B6f>@sGaY7Go0{pFY#$V)%)K&C=Jw4gH^VBY zxVdG$NW#-IHDN2e3|VtocqX!Rqo!x-M(uW&=E?lrbFmY2Ch|=OR2wbMUh5vnlQUb4 za6HL%1x;P^DzD}T-Do@6wC^S$a6IQ!13_23%C9(coL4cEb;YYp#UtJSwv$(j%iOct zW36?Wdu@B!zRzXj&7jU%h)HcVTd-Lh+U#M-h)dKYqUE2Dch|L-omyl~@I+dOp{PZ= z*)Whj)cv)+ycBwNaR)gN!R!vu;rHsccaZ;1%^Zq>R*g|-F&fn zm>)*E|LG%-75m)uBP0&&C%We!Ay04p4UnzyM%a7Vs3Qs`#r{}0t93U3N7!{~N6NYs z+=F`VcsUB!n2sJK?+c4OciXA5yXaQ;^QrQh*PdM#?ipXzs1>8LZq{5tV)3Kf4U&-^co=cc*SGkxw^WsN~*&xGtbnO{iFX za9nX9U@P^}TKDA9vbD2bgfs1wZ|pSLB?}p?)#eK5fSny|P?ySXB4FF0pn6|KkQYSW z1X~2ddy$$RR0q^f+YW{g1XV+MVNg9B-J;f9u#GV%%D2iqu3;<+yE$|P!E)K1NnBgda)c{#-G&EjkO#t z=L%$gQZDoTT2M(N^;|`<9Snv`Y!NO&ZD@`wcRK132MzdJ-g}ekyOz8bR5z8Q-{T?? zs-dEo#MBzGlVrjX8yr6^!7)%f34(y~?K}@E0WFg@fuTc@J?8v*b9BWYTJm~S{8V{d zXl!{g>)FhDo+>XUK#Wd@u(qWlU$eG4#@Zjd$MO27FWdO3sp^S@HpZ%IU{z0)=PLjR zi@or$Dqqx9c2SEYq)}5IF8&jZu)C;ltZK+V9~d?^($s72-hayu&Vq8;Q8(aSNp%xy zTRCOhMLi++2GyMM@B}+KsNNzY3(9NkRs;dT9(Yit7fxX3?j_!wa(S{KXr~5uQMCqV zf^ti0th|ECZL25c&LMWnL_5ooy*UC}s%OjPNUiv4z1(Rh4+*OKea^n}ID4kN_&QyB zg{aiso=?_3XO;JB)&Q~;STj(i7f!HKf@+V5U`QNIkz>h#x&n3^^?r7_?1zp%J6sRS zX3#V}_ z)wJ`*E>-+bsRz{#_m?rUYmW(XuSdOSR#3fEE^7r_fwm2Z&_Z|v>`~DG>A2^NmHEzi zshjs=xwZ^zA)h5qjWG^ADfevkPKBJqk$ZwHJk0LA19cZc4&QZXc)EHMjYDU4O0W}u zunGMVhDcDo8z)S*BWh5XW9E;<>|}M9fX)T;?WExPpt=u3x|Qy6 zyHU6;(x6#Ec@%_kUwNVWFBC32D0^Xu&NS_X;@HWKx+#IgJVOFX3=&x+alA)j9!Ttt zlX%pSz^H&Q%WI^xAZ%reWXqO0SRty{lEop3&HpU1^(j~uY1HI|^2hn8iHVn)M7MXD z%#vSjb1y5CIr4xBogcSZB7C7V_~3vmO*Lh^C2W-}+h>gqs&7{~SpBKHx8og<3uU&c zO_AG*cHnj?aOD7|N+j_Lka}DRJ2`o$jQFX%_@i2BlASZoaZAS&6HMn zZ9q16E-g{*B7vZ-f-o`z0ulrK9%n)jbJ;1-takZ;!qq|5J~H|?JA1UznB43rBr3Zc$1s2~Onj6pa0&|Z=Reu)>#)6e#^Di6_!R#=y*wOcIk zvt_NL`KsGuficFw86pX+@m`bK^rCxf1-7FeIt!7v(CISObc626MNHirPep@xUrFtG zT`K}rLD;E}pdTg#2g;VZBygTS8#uob2d!?ODSI;`fQ&oIV5aWyBQj-`@YAzh<;d<= zpBX`R1B#_3hu2}~hbw~Wq^nRHFFdJD zJ4`!s;Uk4FoM`HJWVs`c7MQU1?7&-hh=nUPXeSrir-lo4N)0TDpIu^~8q2@IK<6y!oR=&*fx#xu}^|;|4UfD-> z(m=aecvn!p2IkLnAg-WV2KIyMKg*qb`y@=`I)>~L4ccdgcM`e8PBL+OXK-Lpy^880 zYAG8IP@DP~nR+`nfoRDgRd{+DLgzuY&J7oWJ$(B>hJ1#33rziNG$tS8WRfF?3H1x= z0W?HIvZ;?e9OtkeayTOUGC2gYydb95W4H!sqU2CNop;033rKI5ERV>v?TNPrRb83< zmrz^q4T-uk`kDp;(;hUzhLL|!K|pKEuyP;>XeUE7Y(`M6DU)YI)wUv@AC#wNs?}vB zItI1vY3Im+D8H&qOJSSac!F%@)Re)Ac$*~Wqslbc48lvw!71_;YyG&&w#g5%2 zT;oL|cBmd4$WACd-<0+k1B-8wtp#8)PqS!eXtc#ZOA4x;s5W$;Z66PRwoIM}3G7jk z=;+a-?G#ilkIw=p_3EKAc{#E^C8Y;Isa;Tg>@e~msI)3ts_ASOmOT-$EiVIe_ZX(XLCUc~SaCblK;e<^X@>8E z$jVnm;C6Kx9eCtGQRHB)utw+4b*_OHuH>w!Ei4t5*AUeVN#g~D1y|+Rr3$K9a0(#J z7U8JfGYE6=S-I?@{h0^o8+=-h)kjY*YY_Pit~vmO7?uF25*THRT3nf7G-UHNlvymQX&; zH2Q5zIm{|m@(J?TK!&>q9V`qH+XDO+1nr~hiFhm;%viSOyTS17mGi7d*hp}AFL3@N z7`F$?F!>8ZZjj;+*CKtq^yC^w3h!O2sbD$}10Fmcq+{=>X%N)G@)Cw-41dGLqq+xd zT@<~J?CUN#S=f!Bk!1GM@_KrS_YwZDVGVG2pxp>_&8J+R+HHx+PAT+&5|%AS1%<(A zAY^w?Q!B8u5mazm;F=WKM+7kpFD-$8+YW402e+UdA@v=7=#R^}%zjY9AZclQWU73K zvP~OpCvkn91}pr2`Cg92N3l!^!D3CSs6H6Z3bzfa^TP)~4W=bZj^8hrM{u4(1Ta^h zurnr7!Vm_b8W|c!h+gWKn2n?Z8ZD{N&IyJgocFlSvOBA}AP5-CxON^~!qDy<-i!1S z`$)tl5Ynkfo784O#EQXpvE4X`mcViV70r0W9e5{hvhY5v>Y?ZU2HTdMfiM&j>xqU8 z#XbrE*;$V#bTIG7`d(FM?NvejjgwU9h2i?d1lh|kdelwvqO*nZ$hgbk_#Rx`6}!^+ zvhqDrbiiPZM{~t*YKucL=L{O<DY1qx?*G9&zt-KrA&@ zOQl~&EJYsaWBGXvz|nl4;OEHxF=&v198`a9EHTbV9P#K_ZXCkQ=ru83{c*9hzA?zS z#cX1{Ve#B!fahozH-WE2uiCI9d-|QoOV57)b9o55+Lu18kueF&b7GueBf{gjA_jGg z)gSA{7;{FkWOH4$S&fb5vIV}1w>mP3wG$0X@g);)PkT(lktL5OC3K~hNRd2>bZN63 zUZ++c2t66lgwLs<5ry^ngj;R1E4bJK2&lvh!wm$CtyUnxOV_?sMjENKi?vbrqn1xR zEw1XP!aRCniFbHBJKm*nLB{deeWv$3T|!f1I+)O-@e(}~1mX3q6YJc$ljF_kYnst5 zRs*}r)HOJPMyxhiVK2K&46%=fWV)|Bym0P|=~zR*OmO^jjU{{e<^D<)4ndMJ8HFeK zHOB|LsTl?QWg0q(H`))?iW7B>9RGfm9Is>sP9N5iX$h+Lt*28mGa)hQE<@5wL?yh~ z?pK0&1F-Na@c*^2d^%=Be7e1n*Ng()5`r$hI93Yny?*!HQzM z9`6_HX^PF)2AEZc2YBqp?Qg6%6Z99u&XXJ*9|QUQ#EmRJGiGaInK#GsVm2>~g{Ck2 zxJkU7h>q62_yCI8SWPdky;J7Jn&erP)BJi8rzuj?GvFcWlQrKIjxVKn%U?^#fjd|f zx3JwkOm79R*I4WbUiJ4SdV=Xnf0mI~{uLwe6nx3C{V-?fwU}JZ$kFp(y!mEO0MBn! ze6z$)31@ml!{Fof_<&)$v@S`w2}Od4UoDIn_2e{m*a3Kg#@R(ITz#&jQx9>YY8Xu`O-KE`3(bBWia zA)|kPMb7MrQ33eIhA+&H-qsG&`Lc$eexng`Y&6A8V~p>ZnT`qA@r_=rk)vZw#|X)x zv9!3TV^-FertkUr)y5QsOBb)FPKiOD9N_=NYL0t9@mdOF1>z!%jnTLpD6jMJd~RY? z-VxV6ThTGTb*hXQ@&Bf`R*AyT9kM+QN_6J*RR*TCbE>vB!?thrhC*39?> z9~<-XR3ANVad7zTGalDE7Du6G>n|fxV1V_n7vgU zL3_B*O1LBjansjN&5uFoO+T>&%VV!pLky~kLGr?QdAiU(ZbA)EFF!TG_VHCGpI61Y>-I%~vv< zhLN*Qj^8T3Pq63Zshy0Qs?Htrnio;noIAO7))6@rPae`3>#)ZWOU zMR7xtOnJv$XiA&$@uu`KP0`+-b};=JKh`8|>omofees!rvGAs*I0NU#T6;GNdi`GdyHc{8@zI%~{Lk2TzTH04ZcyI5*`{PQI~^%^j#H0*qw@|}muamq&+ z=G=oIY)miPdAdX#E-Jm822U*^9lrIawv!qTZHnv^96&4wGIkAKAu`~-8iJGRaIIjp z=x!b#kq6m_t&|`nYmxMx*@o`~V9lnR@!GRg0^r9A6eV?-kdWy1cv2+0&d zsB5)Q8H3qGBqERW3)QtnA?_hVo;9*NlX1(3o1puclP%0TfqToma;FvqwB#Gm27QTV zwCtWGPiHajB<9RDz^V=i8PMx57Ce_pcRfmd@^Axhp-iFBen5nf-3&rO;&%`V zc7LZLr33dUczGwj&slxQJ}0*4KM~;p-1slDI|Rc+420qjRvb9!a0gSiP2jC(9T@q* z-)13ed~;HLVCyXsTmniB9#C_}Qt(0b5k5YS?dP=ch3NCKSX^-X`7;|VyJPFQAO8vA z*<-PH0?huhAk&K!A9TPAy?_#mky_6$|IB+`tDz zU?5xeZ&QcU;4g6O}!6q*SMrMiK70atv zM^)RIIw3z1wZBF+m;*=}H0-X#19U*++a#86673Y(+2Gh7&IFB<64YDX|3P6icp0iq zztbV(6V%J2Pb;v}lL`QnDIuj|fJMuixkL0l< z5WxuoOQi+F-`GuYtd*%=(ur$QAz+;5ya)|~RdRo;#?6c8MuiKhP8(Qa67Ik;j(Kk# zJL9=g#RL!*G6W+K$8#VS(oxjVHmIH*1rxF!SkD3rA%+^xTXunHJqSf{qiz(B&|0gf zfwPH?GXT2s=~Sl}c!fAX(D*^jCmTjh;DN^`*8eo>2Y|4UAt|HIr5OGb)Kjc>Gcun- zCPKRrnR`kz$7l;yy`I%Q3#9cxLTERtwnIFxSW5QPx={g)k>}jzb7hO*icz>cvco-g zu55Kw&8T7?BJN@d-aSmk1+blJ5r^KfOa&;h_B2q57Z$2rZslCr?35_S6Apgg2O?k~ z8mPnz3mMv>%HVZdw&1+9FHF)ydsM6#vdId-iZPHBe8=UgKFF;S)eE2@oC`o_mTM=tRAe7e>`{s6LmhW*s*lumtazg zgA-xXhY+$`lh5&*&(7+1VD!P=5+od81mOgR4uE2vn^X@l-|nL$xw0owIp#fNGJzo} z3o(oRIugn?F^wGaa;v0=@ykdp;Yn$ciMGwFB|nTbHxtoZySpp|%H1?C-y)iXVmJuGG^6d~>V25xA_6pD8JsO%9|?=KBn_KEBg56u*(GV%!~zHa$9W@5yae1I z@KfMyrkP2jTTq?}HeO@b)qrMS-tl^EBuqAA_5^w;Juu_GLWJdMMKA(1ZHU6&Ee8tX zbk}w;e+A-6!3KK(QIMh&>|)p>eNefbI4eOz&m)MzQ(TE65!pRcF>32*CX}@Z24}C0 zqUo^Dy@PT{rg|ClYROYQ#+*Kn-b#9_(U2xVOdg2Q1RItHH-W)r_F81OU^ZgNUh951 zPj+`UGV2+jwq$b=(-FG}cTVvCLc57PCMT%siS<1A%?QeFnT&$M^C;ECwE0QqzkoPo z1S5#3j`hM-OGbdq%(e#k2_!(b8jxZ;!D{wf-AFlDJ6JEV@7F+8Am|qfuLUyf5@5TX z7VjD)G{)UgBw%m>w~(5+jiXBIUH2?{Y|D)1y-gDHjpn^dc&Q-=ID8#ktL_duY>7#G z9cfzz+L`hkeW|ivCPX4TAph}^^}L<(CTqmtm_M?ZH-QmlR=AiDfI^LM4E?~z(R^Yb zFOQBzkccbGYzlY^XMgmOmTs=2RsUhb!H39+f-8=OhfLB(X^|OV=`zjIAk7lbu^%uj zeM%l4K=WEEfPkRs1}I`^A0z*jiPRDuIbI$Yi^xHqNpK`T#-SGJQ$n7|zg~e^ZHd5W zso3d-bfZiP#t)7M^_{RJIE%0-KmLZ&({b<0CP5xM@(Udb-m-TCdlW3lR*A z(YvC%zQI44k2kV>6n@-8-K$aHpa3bTz8-<4HtyA?YqvfW{s?a82_P& z-6JVQfPgRr4N$1Qb$}ZV-iOIVDj(@U?NY|9ND4hmY}+8q*G+p)@<8^x6!t5AhgtEJ<{$T z0ayOpbg(=EoI-A}vSCh{Q%7(&^gHBC9Z}+iHCO;*9Cj@XB;k7c{`7DSoQdIDiVtPL zHlhdi4#xu6Zm;HKL;&Mp6@UW>rejWqal8T2_&dY7 zOZOOiYSkm5rqkHZ5;Rj;(efFXQVWqz3n7C^MMlTvq z^1lqPhjmv!GX2gGp!Z{X5w5b+G@GR z7uWtMbA6HS7igZbi4#r2uSjT&+ibY2n5ib9?%%*k8`fKM zQUZh6>FgT8jj{nI$VcGKB``kxZjxG>fs4er1KvLq`pqjVuYerdxg6|cD#b5?^FG5{5y$XRVbM4eco|6=+a;9a3%L4M>(0U6ts zm2h-f%QFs`+K64a41c=f*Phe@?2suZ8LMk~wV$!v5?%(jgE)`b>7#Kw7@pcL+=W|& z>w5Z?g)b|L&?mO45|}J@mCF;+dy6F8|6S#L17R^X(;&VO_Ugi@|5fuA+%j&z{m0x# z^xzWPLF>JUzbysU(T+wEoN#y1?CNvAc!yjcFk7hflctqp8xG3$EvmDz_D%~9 zOf?nEe#cZU66G<#y^DLL-^(H(z-K`W+#}o1Qvb|h1{LYq*H@mBV?a)lz{sr=Hym*ay(x(Yj4~G65*g<7l z&M8C=AJHKT%^QWju(Q7IgObIafujS^Ie3$=k6^a zjJ2IK$*|?Ts`wqsqt2-+GRscuj+>Y?_y@`yJUb50(QltoCXkIFn^} zL`{p?Q+UM&U3vf!ty?>(TZ^Gv%m|J? z{0LMJfZd5k3=s@@ria&I4#jKokWIB|?+0w+Otc^G{+ah7z3qN13L;c z9kCjF>HAR{Q#UjA0ptXBFC$DR1b|cxRP2R?UI=_Bfmc|!$b)?)0L%Q`omw1YSr4}; zOns>yZq9O6_DU&MJD}u6G$jvCpu}(EsYOOZj@RQ&wnL--<8^u+rMv~k86Cb1T@?wI zFt3Oa0EIeHclbwCX>>d8X**aG@4(w6D}b}3te$0`B%K$^a3ujJI*0(S#7u4=zJy_* zy$nGJ@5(%1)_|Eq$IZp|=Zz}V1EI0H4JUWKuq%IZ6TD48Jz9^czufPBqQ6M8u!c)3u|r~^X~?sDZFuM>GFQ(iOX4Z7Am$n8j&TwH*Fodr~hvm^t- z?e`$;o6hpauMy(KabdfGI+^A0`-5t>sp?#`^&`Gu0oz9_ zw^tv9R)c6Ld>xidu%^&nI1!i!XtFupql~>@4(DR7%wMP9A$Yf3-l`Xy^O^T{d4qj2 z%oX8xIE4VRhw@+)G22PgadR-bTOW+hL%w$~`Zh2yH-e6B&%zc{KI$#eUJOq9awcLj zAGi+PQ;zdrbONxFE{1-;0P$d3X%%bSrg<^Be9t)FJ{2w_b6zGdwGIlMLuL@QGxXah zDf*ChtL9}jvaz(`+bAyq!O($H^G|vRF&c46 zFaePtja18l=3ll{=Ktj}Scb!*t;P$_ zU4q;r-#P{ZF6cR`AB@#+cq@E9pd`Ewc1 zNT1OD;eb}=(JA=b6Iy;26DPFp(0aUK!Xw#Zz<%u5Rr`mrnAVC|%(DvY34T6P{o%z^ zemIk<|M11rNWeYeZJGK1_v$I@;}MXEh)aCEA z#gY7I=l`y{{GGNqLC^oBy6_XB{|oB!ciQ6ot-7qt1w;Rr4)p2FDKmFm*A!%plYOyH zM%($FQ~&-4FWT_FMT|_+uQNWvP%aMWFG;xW zSx?CvXL?0F%^N=Qpm$V$QXoEmY`6$Wu+j(kGRgFcd;$n}>VzonEvTDu9SX`8`=kqD zZxFDr_<2=zAMRenU%zHDKdh>g8*5$td@Qd5VGqPMr!?3h#Jh?#ET7@(g^M3l)hpoN zO9yD?#s^?=KO3u8DK1vZfVl#G04FQ@g&Wquud}L0QL#3`c)PaV+`eKSztgIo)E7cH zQl8@%C{X))o96{Bw6))a%NsDQPlKesl*VHGf~$H#lf*3rObh*BgX;|97CV9k;@Yu% z6YnKnD#3~uH+u>*)ta$5$3jwYl3taq8jCL#k@PFPS+aaAE>2)kw!N6KmFC9Cc9geg zGIKA{^6k#r+AkXmEBqhk;Y@j%Y5jlL`ekUn&VVn$wa!u^zN!(6^s5kLo?n<%3*6J5 z!M9XSj{uHc6k+bK?4}K-oA8yL(QwS(AB#0Y;%4Y!*K#_lY8x|#t@e&J`-;-s!U44p z@rfn1AhzmByhStwikzqKX7Nk3YFnbyq?0coZ@b-$4YFC&Jw(|K=Sg2bHwCai z7|@$2@L+NM;rG%KHQs%HgUmYShf*{Z!{aWx)!&zbOeb7zV&sR?d;$ouM-2e}w%*kG z-mKp4a`QLJo@e|5Ph3p`8i0HPKHAR)?GBRqxzzV5&G=v5{qW`|wbjBw^P4!@z1&EY zRL{F)NAeT73U3SAEwS9oGcH z)e5N3Qi0dN`LQKN(aB4J*8v+EvAbH1_fqO%TG3SDQv~L+R`5E#X|kh2UaLLERUl!j zgNbjQV!K4Gq-ojCIsswt8drCcYWxM_HdKxdLs9r7iFV~AhoX23E>bQ&`hdyV;fi** z6#-Pu5KWq?E{9vk%T<{1(}KmSfbX)R7dJ3lMNs8j2P-7d-ox8gkHDS6CIDcpMy`aj zH3%XjZs#I?`bC4-56D!5Fy}iuijA9=mFAi^rOyuytIc2vhbvvOz=GZ@gL>6F+&_FC z?A1Fp4DI|HfH(pfcadl{k#@cE{4o&KZ;?~K=Bk%SOj&Z1Ia6|&0V$9)RbHsr2yDsj?cpb~^dc6V5r zRS;22rrJ){UgF~(a~vmP7or(R#d`w@sYoftRXHyuM&GXoLN-~kgnT-eFQO72JZCE2 zh-a)LeA2Z}v4;COJmWx)-H~xX;EqUGiE{Sn%&mtt4&E($3At-<0*R2Bcmtm{VKquZ z6SlJ7S3BOg<5upNp27mIcF-_4U=e{kw=Y|TgrGg00Y?DWJCK6`aZ>F;=+6FrzMnL} z1B$({&NUN4unS7DsFdot3-)PIX#+#MdksLXo+cG@m;rG8NTWfb2EdH%XF)xY zCiQC@tc732R;zU_;azqkZHs6{{>$nTr7n7%ix`IU4xwiWmv1LG(>R8PBnp#v`VMp?E6L5ycRVBU`4n72}L_sHLk}; z4S1%t2B{aZa1jI{v0*O=XC{8cNo+gJXGwV9wO0P&FpeA`-*1v`ahw`GO&B-(C16{dSN9` z6P_dQ>q_yeGrl!|2;gEb1i|M5m=jdVAq1Ux>q~T}qM!a-YQAWow_x-kRY)=K8S8mPCW$Zmx0SKCL$n3Yr%zh|g=Pttz3(+1!BtKYb zw+TTUX!AtJ^S<=k860)|!aO{^9b07HS^S{9>Y%;vN;!;+h!kM(Q}Rs3Lh+l?IBmN? z_gxpbk{8gA?plNy>pbkW2URzuoyWB9Q1x@=0JrChva3_f&&=VLdA_%0L7MyoJ7L5k(rg64IImAr4tzNm+ zEC=&*8p^%ci3QiPU^*5XD2SyJ81@aykvKTiu-j;>%)W7rDfJQytwA9g6Nq+osqWyd zOkPb|=%<%K%MOYp+XXdT$nw2iZ?*gH0q7XL+SMPrp-%C)2-MqV{#Zwz za93+krg{{0y{lP$nu)nQOi9P?RH#PHDU}XS|2|?350&c6^B$}<12E?8F*u}M=WUA2 zH7vcy0&{(qSUG>|K&>!}f}@)peOqQ5?c1sVePj3=h@nqcfo3LThWk0xdw1E(_%Paw zrFuX0DU#g`7|LBocne_2^9htmgZLUK&UhZ)w5wx>Y=N4=Dgq1h6PFHv0B{s3k0j2% z0f9Eo6MVocgX?@wN7$C<$m}}Q#4B{qm3o(eXd?Ji4eEZqLJF^2N+C84bN3z}U&k4a zUJ2o(2AjkxQlpxT%f3=UQk&yy)u{+wG3qE^~tXsR%X6owHqbxBY#LvRUVKKdK3 ze2MyL3|<+eJdpl3dmj8@3H2XLI@t4Qz~Y^E9BRNDuA#gJf*^&`pH&Q?+`YBQ1d72G zyic{b!ojki%MRSk#k7Mjwy6abm=}Pt6U9@5MUVq7i}McV;)+W0vy1#Js^EEVCq@9n zU(+G3jq9+Qp`Bf59|Lvrvh7o_yNpPQeT;_%e|Zucd7R+Iy8wWvaBkXQ_1sh|&Sq1)kx{^ms zB{9FO6;_O1C5L-qDDw`=p z%)m>y_47J5Efd@)_!NKPKDAOGdnMUwv!TKc;ZK{WTHPTyx{hM^i{EVBVm7tvfa&P% zFYjAgTTTM@uUwrBG%p#E1b^>DJ!Up?yuBmb!T8&~qmY`Q=oaDIrcszbjO++EVRn^y zHyM|3gGT*a26xW!zEHK7%k)JwO1sK%oB{{{ZpQ#KsRm#^-os)911gg_a2OMC;CSSk zlMv=WcqH_CS%PNrhgsAfJ=gG^th~{y%Mx*wzzcP;0;m78 z0%)mMLpXdU?ueG^&8%<0)IDIzgny7MlI_sRkgP7j``Le20Fp(vxfID^z~6FGcNi1A zj-#Mb{WunPGcktL6q|3x{D30_4ud;s1AiP_X`e}uSlG2OP>B~7n^L+ETmulm*7R83 zxzYwLD(`m`Lc#5j@ z-ud6HrOp1czqR}qYw3Twly?4?*3y5vl%})FU%gV*@Z{2yvFT*H6W+p6?Ek6PnjTk{&v{^Q^&`7mxH1Ii^s?8%_Z#3U!b`;JRWh>gbIFx;y1YMX~EktaPi@7vv%$c zU*gwtOdp&|C-FkdFZd`a7Znp3`IWa`2qHy0P`{XKFdnAoK*1%T<#>Y)i504)SmSIrPhT+;3HaBq3Fb6L+ z5PlQh9sq=TWxa+6)Gw9gYeYB?1M&V5w@+|MOW}r=**@7*&hu+rxPC-7==O$qR`fjX zfT4z0Np)!%TqbzX>%c^&=HS^f+FtmG{6=%=wkUT&%J@Z8FtVOSo<$7+5bmXzUSZmD zb2ZF^E8)=lxR7Oza)6JwKe6kJ!ptg01$=*bAa4pIc{6A}1)N?u;@C`ZpD z339h8V<0wX<|3^O?+m73LkIY} zcOO4Cj1|Q1oKD7%tt5aD@4xD>&vkNLW-f#-&xrw^;2o%Mjk~3qd~EgkvXqzQ4Z?;3wZZ z1!dn%w&qod?*dRLe<~m6PXxrKEXSp^9N72jAuYjEda(EwsO25&Hgl8a$H`<;uNtm4cgBaZOk|IyNO%Md8;|z`gh1Z7x_9@=FZ zi(;bAvO~1mUzDyrAd8f!uDkGCIW8b(*S+q4*dwszRG$%zgpu5 zz##Lcc$(p9iKi8w&UgmmITg>Pc!r(gj%cl#yFDALuv3aVboF@nLm(A+_|qR*g_hL> zPk%i8b&tJ6@Y9FLTZ(5Ho@V&9h|<$7>p}cbMRUM+;Ng!}%*IbpJc#FUJPYxx!NZ@W zNEvEb{OO4-d~AomG;sz#v6Bt>iE}K+;%`eV!NXsX7z;-DyAi49;a71xS=Jl4XTo1h zxE|kQzy3nY8jgoQNN_8DIDo%3P=|*LveQ zW#=9oRdojN@AL#wFb@baU=qknA%=tm3@Id#XiQ=f*fcbQN~p3W8;B&?b=eR?tsCT_ zwKxJDz4bwSjI>tCP*GVOWq>N9ApX(E;7pOK9jl01P+kHK^!MGcW&a2rdS-q(-~H}6 z_nybSn|ts1&UbL0qz=A;o%f=TuWHwiWZieUCi3_kl4mbeAKp^+Nne8w>l{~ zOj?GHmRSW`SBh*0bt8NX)Iadm-4qno<3LN@R7fHj-wm=D^^N_6i9=S z;fLricm=-2AJ-3{{#%!UdS@N-v`85Tx)s#d>c2ppr>=QkL_LlU+axj^azR~&-u$S@ z1mxAAE3ih0pg!l`;h+yA zKco90d#lI|6lMmfKeF}kEc#brH);P42jD2EJF&DCEK~_Oq*s?%FGCV7n*o_^^#2qD zb#AqgepRok}@Lmz2&!Y+6p zbaKkBQ&bB1BhYym6;wtiH+%+RotscH*vNL8?F5t}*Ml0-Pr}Mt4c^nPVi7{v8*fA{ zulIu*Q0HDJqSnxP2}ab|`Q1b#YH2)c7{`D{EOFIFw~VxEmAesBShb@^2_Q?)tWf|;k9dipSyYk{Sp_Lz^r`(*m`dhQH#XF&}d?@BSEW{7uynj9vl8c`d< z9hl;&IbLnLkvf}&VEW#+AM{=89bR-kME)n}OV3ZM zMD!u8ZoUzH8e8~tEB%dz-m%+F7O*qTwZU>lPXrved|fT^IEUEk>?|iQtE5(DjW6N`FO|gJeT4 z447bm{V#ITXh@0KKOH$5uB1>SU>vl@6i`<@e!G=xZi$hrI1bl;f0&B$HnVT|4*xbu{a}lqMRUT}^)q6c{BOu7pvKRA z9+Q4P+wIT=t6&5C38En@U}SgD$X5`XuMz!%K-fq#!U}j6_CPcg-!pK=Md%-Z2VoCH z!-vQNoyg0H2hxAn!7Uo5q|En`ikK3g{DqOgFR2kccb}0L;V>M9PkQ)0fch156+CwT z#R3ev_y5o5_W!7ujH#R?8nP~-Z$jS!i(wl?Lj-x+g@VT(=Tdqqbhms?7sOK|t=WGA zx}lH+O%M(9kfZ6h#-zWL{wQe@X{98nk0hnq#U^3qataP@(6`(fmdcaxugBQiowI57 z(Dfm1`1_y-9PXQs=!?(c5d4<5ejMUfIvMFUbI{}LKj0LMwJGt3RvI}CXJDw4o^G2Q z|5&?d(A7MuXSmygG7IvwO*p6Iy=(&B-hSC9#(9xab`}izeD!q z*;FSn&(7$VZ;3CzDH!y2k8jM$DlIK_yoGj@6UnoM?EbPpO3AnD*xHOmH&Nk4%^C?z zv~ha2&H@`GI#gii6V(*jaw5)=;%q9!WRiX1M{Is} zqpc(=sj}IQr^t>TKl_HuTLsuzR%HF-n=dnUxUFps%g7*_ThZOe>r`B{H+bGC{fAG1aWdIHAmDQ{jd(n-&*6 z^Xdv)f^JuZy;Tb}q|)98-Ri$Yf1*S}N^mC#}jYF|9>*r;A1- za_h3S%8o^L5AjWvO-API6+~|C4fQtJ301p#y%r)HtL-{%|NL4v5e}cGv-QVXJDJG6 zT29y6k;ojqmZ+&tyRCmuZ=J29^oQ$gtCqfTmc6q-n&x~n%gsaqvz&1rSDxXq8SJKH ndH}acUh=pFcT4uQ$Gt2P>)mP>)!SQ0wY=Vza)wB~&9?sm>utM; diff --git a/records/wasm/iyi-io.wasm b/records/wasm/iyi-io.wasm index 9cae9e8f4a09d8b06de8605004f567b4a13c3159..dec721bb4f3a41b60e5230964a23b2ba672a4eab 100755 GIT binary patch delta 23595 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 kNnwYU{(g7eoqyZkRF}*n+a delta 23661 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 diff --git a/records/wasm/iyi-modules.wasm b/records/wasm/iyi-modules.wasm index 88253a2232582038ccf32135e27edb2bdab4c365..1bc574675bf27b877f1d5274d243cd8dac720100 100755 GIT binary patch delta 22737 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

    1${Ht47~S?ZQHrk`A^CCv6%idB( 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 Pc$OXI(3bKo(>?zK-JGik delta 22212 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 diff --git a/records/wasm/iyi-sessions.wasm b/records/wasm/iyi-sessions.wasm index 11f43ab9ec3c58550b1f477db5adb1751b94c53e..ada701641674222d960a7ba0de51ef693ee0f4f7 100755 GIT binary patch delta 25057 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 E55!0o2LJ#7 diff --git a/records/wasm/iyi-shapes.wasm b/records/wasm/iyi-shapes.wasm index aeb71e4c14dbd9a63b382daaac22218a6ea0f1eb..719b982d1c0f453df2602544dc9f640783c70d1c 100755 GIT binary patch delta 42336 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 VD!II%gh03w+kr)TSfJa*{{g~;U>N`a delta 42654 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 diff --git a/records/wasm/iyi-socket.wasm b/records/wasm/iyi-socket.wasm index 38d9b9950b69371f083bbd78549890b51a729a97..46f1ce437a01682bb21cbf2adfa9a3bb2411b33b 100755 GIT binary patch delta 87079 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 Cy6`pt delta 86745 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 PFR+s21ncP>#0~#{?`*7Q diff --git a/records/wasm/iyi-std_iterator.wasm b/records/wasm/iyi-std_iterator.wasm index 0c74f5c02c9237fbbac5a7d21788a69262dc66b6..111789b143a41960e2e8219e3db918986bb51d8d 100755 GIT binary patch delta 39222 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 F{tvAZ9yR~~ diff --git a/records/wasm/iyi-std_text.wasm b/records/wasm/iyi-std_text.wasm index 358b44159b69b268206c09cd4b8d410a49492175..699937a983db5eef84f68128447c004d2b98dc24 100755 GIT binary patch delta 41237 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 delta 41675 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 diff --git a/records/wasm/iyi-std_time.wasm b/records/wasm/iyi-std_time.wasm index 2d03d13356358dadaa546aca5f5644af438dc86e..601369cd6c27f55d071b11ea8e5adbba77682fa3 100755 GIT binary patch delta 58208 zcmce93!F_=`~O~RoxSJGeH>;O24{wGi*YBn7;>A0gedi@7^QN_pxn+R-nHPU2;YGv~-Pr@-E0I|Duc-fh_d#OA>Vayg$)(-z`7qx%Y6cMfPLN z$2;*(wVuh&&PLhu_#Ih~Ytfnm@dsQ@*gyTHu1ERl^Zs^v)wr{=l$W*Qn%9+n@w|Vy zo>KLa0)_#SH;br@ROlbh`(M@*s$LDEFNLCiJMaHcPk1Q%0#)%+?Mu&x)SeN9=e-aD zpB03cg~DG9!n0otDW7w}-_%G*T@XZ*^aN zspP7X!O{Yit0r@K1^!rfBld>BgS#$%hs)pD?l!E@{~pqXh2Oi^Ft*wMQbb++mPD*$ zn+qQ&xxeXuE2=pw@?VLX%S!yuMmNRp=ID8R*#&=(m_~f%1^>jD41V>3zj16;ioT5L z&2uiw9HK8{;{8Ko8}c<5=T~Uue<#+%3uG!L&cnCJ)F7lvWNHOcdu8e(Ql&`s;K%Tr z<7*cBM|f%`ZCXe@gc`)ngI;KH^XWG^*2~k6U-Yl=G~pjF z^ndJW!^;->V=Fe`*^B%guu9(B z%1kN2xGhAts#mMW-O2G@9rUwbl9=QKZ+v>VH{qHRm1T*%m;A#kfznI<=PK3UWf%Rg zR%%TA9IFI=ULt;2w*R*HWS+NJv9nmQvzXWc>Rm!D@t=#Y!B1Z-3{P0fc+N`y>dHMJ zi0>;u$7cJpTO<_Du9D4JsXwM#o!HkENAcc@-U{iZ0e_cj_pk#0(rR_t>;AW^^+&o& z5~VvO-GTIrGQBA&4e3)!srA;Nwwg*K)7>MzEG}10v{L^y@bp&-n^a#T*hc@S-qaMO zU*5XjhH-)ED3@NobinUT-U3d4xmdmMr{pP2G3}pS<<`PowLWK13V&{DM`(oqOGH~P z`n`2JLKplGBHD`)L{xgwf2vMxsDVGc?mH06!Ma^YVioIk<|T{$_aG`;>|a{1Gf*e$ zb@30V7w2zUKM@ix>{Y+mfM~*+IHIZK^?2h*H0_(*i*B1uNE~l9Au&~MO6iVGdm}wZ zrr&JZ6zQ`~8}*}NLV1Cl_MdBgh3)cxack|UGDsNK z2bN^#$A!^tUggd5=3XQ0xUXmkyqb#BOa20DmUd#5{J*qo0HsK6-`rojeVqT1_G$h> z?Gya@?Yp4^6*|NlOj7V)YG1`)r$Y=YDQwxHG>qq6^oMn=Mbo%p*W@aB7m1r>-K*1d zIwM;a>1Dh8!@GL<%8UNzy57mNcl-PNk?8-vYZZcocf)kq?Z2g4C!+C0w;C`7g|oYj zX4mz)wLiMYc#M6!OT7y}?6Huu?7|Uu++y&(7yJwEYDdwBcO5_va{Il?w_GUfes_OC zz~uwmQuOJ-L43^xfAf28Ly;%%nMj!n_jKX~7YZ8OF8~oqtd{6 z(WtRJI|qYPMTqn*gBN2bTq zk8ze)xM}iS7c2AMo}C(bX`T{Lv-H`8S=n#HocPVg?OAHXdUvsN;-u0R0_!9LrD82qldg)jR z`pvwDzjV>RZswa<9tt1+dl$w_W!1Q2YE^TQJb3!q3x%IOmnHbI3;w<@w4-SD3stG; z+7}v9bo2!;KYPLd^9wBz6*hTs1EVr!v)fXXG)ES_b>~39D9~LPNkYJZB}!Z9RCPw{3E@Q-iVQ2H}#i!BhyR#GnV$i z$bGQ%5vtI7Splifxn-~Vu7-?-Hx7;p@8qp$i8K_K&f>82XKRt^O4Aapma2NIdJ{)> z&Mu*@daI_(I<#OWS3}FyTJgsLl*~~Vl9K>TYAuGMm88y~=a0>8OB~&i+mxbdxuo4o za|aN6mvf(h#uq*qm?}u~%T_d}85#e|TkeD{AzXv3)S!|J{`2daQOO$l<5ZMTxHf+i zV`~Z@*f4_C$fvbDnOlqtukiAbO*JjqJTHZ5F%N$CH0 z^CG@?q5ttWr|<&{{pS&tE-ZYc=ync9*KciOkneH!t&u!`p+Dx0s=Q!f;h2(Mn6`gS zG<|n>oo`y`fBwCZe2c09F2PA*o4u)jRjY9BzKbsM6Q&;gjvrGsj>{VUfk*%I^Nppc`64Fu%6fLtsD0ic`{h1{cjzuQaJGAB<{Pk3=nHZ z(8}+=!SeQVMBG+VG3Z!Hxhi2dsPa>=N=~^dhFzskIS1oPuuj?1YdO>HI_0Wd3RWpu z>hE+kp?djc_uF8JyruqeM{AGFCfXxMCinLC@@Ax$Es;6sTyM;PJH0$^mnElbI7mMq zq*FpwLd3>zz}%TacC59iU%vQ_{Hwyk2S0}upItcj_`3$8fv3{h^($OE|K8K9Y;b|) zM}(z+iiPh%RyO}kYNYL4#HN?|o17WUk6$c&;mkSC%U1X&oU7e3Z-wf9s<)OmIsH;V zb-#u;)mzhBJMO)|?EE4Bp>w}fE}*i(ekV7MVv*!hm7TATH7nvm2cDPb?|GqiEt_Zy zZ=1ONe@Sp}Va|m|sjt6W{Fb7#-(j~gyRhA*k(h^O?ES1t;m*rTb(KykoN)E1&P!f~ z3sO5S=Viq|{5fw-`lUS6>t&THlo2$@Tl%5GHGhn7p^jNWuwbP`Z)JGxs8mqnuPPOd z6s#)yFScZU>B2VCaz%n8(hLLD!#@uFK;Q(pRtx$hR%iC=ofjBLm{u{^U^L$-$H75&(d zbrWoMQTrxr8?UiuCAxfrbs&Ew41A5E=FQnJZhmPcxi7U_mQn>wBM>rP)* zl+>AxkUkUXQe=tcG*wAoRkW!Kdz!HvGp#F2brAK_Hy1t7m8HPOzhX}BCj0w#H+B~N z%oCaI?Fe2om-l78*jn>^UzUoZad)u;uu(-P?qVN>!AO~J493XXRth%CThp;pNw8Vf zy(u@cQfB16?0PfRNSP@!={^QKWp=xdk)bkY-p7KLs+qU-jVzUU;6Bz2hUm}x*aSoq zhOn2ES$Y|LfU2aXtW}z#Vg3ATS?w>ndOz#qrq1=u4C!2&x1qOz)496dG_2H(ZqT`J zidJN@pDW-%z+CK2L(1b?5H2U*Y&My_ zfT_E4GJAq!{2NYV__v`b%_n2CNjBTcUN1VI&GrLqZl2D*0e1PbtPPf>i$%v~u$0*U zqA@WCEMRxmd+i!lvEr)phVm12dC~p_EQ7OkQd3$`Ell+kuh&~6y+q}_)x0U*ByaK! zrg~n{D3i^=T3U2vIeQkmt*l1DCPhkFjck?kYL?Z2xAGV2{$5dOfUOcBQM{52k3|Aj z5KerML@W$XOx$0S*kT@fg`HOvQrrJG2$VR+{PoqWn%Qa<8*=@!v(kKf6&ql~gFEB3 zX3y2EL&BTa$Ud2oDwMogv}`r&$ykwj=2cj_qN3hwSUzW4%wJz)k0Co^9gB0bV)Lm& zOo5`J?+e*Z&bFBw-egZ9Tepa%akkwYxD~drsHk)+tKtIo+zyF-XeaxZ3)p+#W{oSB zs(onkTJC+7dsp%FobBeax7ir99Q_Xa2bwV7p;~6#9+=A==FfX1jVIq_BN=FX@g8f! z-ZEqMvI3NOYcFQvc5~1^3H--C32eJx0uS#8u%yWKKC6dr6*W4*h6q^r=MS;9H1}JU zvc~*Uz|1UVkATvlQnnJ5vOZ*uYv)8y~B-HP5m zg~pK|c&c~N%U`o@NSj!XdKb0&hK)j|Xw_NPKEgNSTc}71kJfmnbewv=bBVGd8i)6t zeXV&ZWs%Izo`HFSy(QnPAYO(YMEaPq>BnCCD9B>1c)mr&%Kk<>>vYYFrgDgB6!f*?FIvfv z1|B1B3M@X6%nK%$QBrimN!%K$H`42Kr7x2yssq}mCj1$R4IYWy>OVY>I1SiX|Z%*kfc0xO)t> z*psa|i3!8?G4-bvpGBl08docR)shl##pTdqPc5mBOm~e;zZHB&(!&+6mVS}lfk6-J zL}V^rG*AD)Iz(Gtr;YfsZ_TtHS#?6)`6KJbf4FEa{E;=bi|FVsihTGZt4T#J|H%5p zsM|bmk2mIEn>>Y~#xXK(;uB+(R?H%w}gY(M%J zmYE{qkPL(*SwPR+Ba>ZGkq`qha24J9h1HIhvQo+g(7V5|nh(gSfb&2qc7WuZEXaKR z+j$WcGB0jCE6gsxvS!}1QWiEdE2)(f7ur)>LZ2j2oAzDaA=Q_URaekhsYN8 z;WM8o*T7%R|M2vH@cQurngDDL%Gv)pBC z0A~1l#;egx-_Q7yam&6(JK$952j*`t&TG;_u~p;5BHDc9^iwRjNVyu)LtTGfFTz%!@PZE)V zI_utWr+LFB zj+Om7vLsoQGB#&a$#^0h)95#JQ6i*?B@}fc*(k+I@#PS;ExhTGZ#56maHzlr0qC>cH zSzKL==5v+jp@e_~70UpV5R}}sktxtRm1bT|$q;S_3RvPZNaWUfqLLC3OY=yCl%r8X z3+2Qd0jngN0JE-G-m#Ij_!-@*QhjW}Q@Gb9`6F7k^g}w^fh6;KEMIlQeol|$Q~F!n z5*IeNl0_~3Pg;V}wWr2fPDe5i4iPCe)_R~xsWqk4F0ZDPx?cr8)?-aImt6_t{YeEi z*?y|Pw^dZWk#A%QOZRyho&mi0ZP7a(exA|XDyYQk*ZTe;uBB(YBTFCB@Q)#cTcOFV z4-aqkaMOn$GJmVYy{wH{J)RdQIMDmO^_n$l)~Zp{rj44kF~5!Hqq(o*2{k z(Wf76)FiE0)3hdy$36Klpx6GRmXfVduDrP~0cy0PIS(_xN#HM;S1R*L=Jw`1%Jfy{ z!x%F+Hs=-1uqwQNThOc9TbA03^BNYmO#vek$$ zuNBHwF%zqSubsqK>uP*h{Ts0FP=4^qCm(#8h?~c&@h(Mmleo*Md?VU}Q!Ls=6I1v~ zcEg_atc{)xtFy{MORf+ySK#k?JYa8skiLJZwgqi53et2 z579O4elvTRq&=pOtg)<*EP7hy;`;LXXsK;qiOW>cd=>5NE7?D;qF)rS&Rw!(KNU?= z(Q9`}E@Jvg(gXX+BGXm0p`WC3K;^EgsP^5m+1_{aYG{4r-Mns1lEqVQP4gkRv~M{J z$nnR|pZM3$EVx^awiSJMw`{6af7#SS{rM=+`LMqfTjT(KOLZc553Ir&1gV=rC_*dGV*28g@^Wpu|tS!LotIYJ+(+|MdXy+`8iQqfcu ztwkiM9*EYogVE+)gCx}}_sFhSAHW}2g@Q>G<2}UO&iR+ zOX8PfG_7Z>B<|!Jgyh|^Fpjb2Gs9%#-g{;3+f+2!;;vGDz`;Nr&Sa;OcrTB3_UJ3?^V%Lh{CCd(=n@`m9sj6 zvTq<;$x!N5Y<{Gw{xMAU?bhLv&@hS~GjoQ6o)aAy4n=&d=%?X)l^f7yqa?CeMaM?T z8m`eYYBCzUK4w0JT*PC7YmFi0=eT)tIAr{oxmy+bPDNG6ScN*lbU(?>eIurYir z${qn05g#iFW{j1&2`XBlqJt{>Wh@4m8ry*}{gKN7mHETSf6S#)$$Xl?Y9eGloXS6d z{7$pvF&I7c^-0;n_9r2Z$IPE(t|(<3|0dj39Lu35(|A?a0V`F*T>dOiFfR?@E_3cQ z-kzN(%A3l^bJt}muxlz$DQcI^zl&u<%?3GqGaGA`s&f1GALk@CN3kdA!=N#0HYVr_eyhkow^mISQhK!XJPQO$)(S$C5>XuVqx< zWwg<>*}%KL)kNT*Nt#B1*Oasun4{&s{p?)n#HU}gr@Yf_+(ZGCv zKCfBh*LIp#6Jsu^M?%>tSbcXbGTnY&!0lxS-|7n)ztt6%*Pk-D)?c{gUw0CSC_98(ctg$4O30eCU z&J}2lm6(F9hbidQ42&6s>H-qJOTbX%uXZqBEg|jzGJhO$xT+)G#+L z#N0hCyImhGeQt}FCBo}O5J#2v*BPN{_bMa{90#uy#CC;z<`GRBulVPI7HFM9*vCqN z=RBrqiLA9#a~#`L9NBi9bqw5t7~c2XQiVP`4W*gwsVFF9&2J~M~BW#xDha zwCW!Vlt8=`Y-FXO*G|Ku&}a$@@6$x&8Zf46^T2l0q+r*6u3XcTVNNL6_;naS^w=5T z_0UENHhxz*{AS=N*!Y@L@71*Dg{89Jff5B98~%XFmhnnMt-S`JlZ2!MiJ zc5-)3n+DE-6oF^3Xj2ILMJ<9)qmP?ZO%Z4eJ3~R-qDI2s&D^k(SFYVwmUZ=laA3Mr zE6HGuf~&n;q!yV4%Xs{K9b~2~wBSz|X9}*{B(4Eu9rMjdAUcm&U;QC2*sqtD(+o0HV1s#ab6!KI)92Xnucn}KdI)R$^ zDZ`*53Cu$))2)Z&&MH&%;* z+ixs{tesK_e=UQUlAFk2!7e$6rTDIASbbHW=4LEH;GRu4x=<<+qhM*K$FFa~uU zZ7{39%)>2tg};3hd5wEJR9+vvb7Og31(_QuO~Si3kypWcH<4GXeK(WW1z@4Kjy%dK zjTizo!P|_=3jPgthk`50Ew%hNRKAe~IlrGQh^)xTE}1)*bHh@aN$=lS2%~_zi7mMg zWM?a~qP#5;L(!9=YIl4@%D#nfLc5^Qtg=eLZ`gO?4pW?ZIa(F~QKDMZcMwmQja2+ed z;HjECFw(2xo(P=&W3tKh(6q0#Cu9#raN*eMlGx)XHSGbLtZn#Q3h8?09FTU$=r~b^ zt5nf7;i9HJWaCDoISTHJlITe@XC+)?Ym@q^xqc;_VYS+dF&A#KpKbpQyah#61SVsU zDY$wlR?nctZz8RJjDb@|!F8uZx(;5w)>DpzrKJ$jLUPpqmn2O)uSU`n=m-~;g6lCw zd8#>d71oJpwQ6L$83ZQV;em#bDh1b1N?nHGbj0%8cwjxaq2P*B$2}b@Fm1k4G#=Oj zHKgF$to9*?D>Lm&o9stmor3E(r6rxPOE!O4#Xa}+lG5E&h1q%{0`^o5pDA&lqpK6` z!M1S`s@^kInKr6C&Z_r<`QU0E->Io2lJKXdjVoW!BJxi>RT^0yr-+Cv-ruR_QzmB>F%W*Qym$))jq%ohq_9yJ2} zQ`t>z)!N!jgR4Q6SztaYQgC%tnlK!dVapst*9bTY5w{Xk_q(!z$CzD*5C5AKOjbE` zIYoNBI-XT1*|5O#um%)dcdHK1UbF^1tfl&!--ywyQ%rsf-;{#uQ`P61`63a;A}^6w3pmMW0{R*SsO-t5E3?ou`Rb;vU{n8pmvwjUPur9`^snTOW$`1|jayl-#Av?DehyAgL!!ik2> znbxB`F05EJv7jx}-cU#pNU4HtJVMxq3OT_{e+`OpOyypH#@wokvcN}BMGCw`S&8oL zm^ALTTayoQP~Zg$KLq%bHWNkv0>&lR`FV+kt88Xq}`DlY_0MupLo# zgFuD|6 z)0D!^@5{7z6;cFtz&28FO;X5vvGcj0kRkgUYnkfa4~qTDIw-aUi0{p`?RGo19=R$j z58$bLm^Qk+9@)rqgP68e)now=mOcuu9;)VHklmqbhV-qmLarPPCR*f!iJ=Ox{eC8o ztszmv*($j#B<|yD+Z3s2N8GOFs%Gzpn0A+vVN4LYMh(zoN?meK7|pxMoVMtG)SUJ`Tl)V`K5PB9C(+;3>GKC#FL#~h;I`cxsiy}&f;SehxgV&t?J%Vsleu99m-9!Q6hQ*cdG zRcDxU*F%N&sa3S$9Hx!1$Dkovpx~;f?8ibNZ?ydUu;`{MgNx-bt+MKPaNP`BCRH=h z&&*mIctu}r#js&AEy=dQVNiD&wkefApN@6j=CGSr(s2LD*JJYJ$HNS`SD7cCh zvQamtb+={zArKT?2Nd!M$hO5g;H*B!VUH=ex~N&Or!#7+(RE#CcK>F6zX3vAri#{H z%;d8gIiJgWt_Lvf{EE)?zT{B&ybs%*8-X#T;Hsy{J_mLkzfC+1I%z zwTS}sg;);SqG*ef6kK;pq$|xVejVEAtp#1M%h;#Nu2FJO9!`amXKS-`>xq?zRQ<9# zIMq>n!k>bbq~I#0imo3X_2BXPP>L*s%almZGN#p1 z+=$?$Rk+rTlL{XDyz%_M<8AbF3Z%8GAnGvfVWe#W@jFg59`onEwC0OD7a24x93kF zXK2WiJVv5*3hq~AmuJ2lf;$N~1@{`+{-MUsGokC(`G^(dE19b{@`~Zge|IIUFn4Xl z^Wuf(m&95x#acfU?5N4swLl5jqF}Kmwlu|4Pla>^Mx$v8u3Oba%WZ~3b|CEq?<-WK z;7U^XV&JRULvj+bq2PL0O(%bKwEJ3f0I1hfvE)*4HI{3UtD~9o29F;yQ_3LlHCz@& z#}yoQg}ZcwX=Cj+Y>zr@x|Gj*C)kbspqEWn2oKlV+H5eB3rQqunScIErma!EW`Wi? zB%=`axI#XB3^rJ`C<6VUjTBtpsWr4kndAIlw@GyM{|vk;ec^$gSa~Ugb(OrbuV6e# z-64+atw+Wwn0BT3?(0m;ffm;uIgf??pkSZ2UMz=?tB&IY1REdQ5=YdMcms??C)A{1 zW9c4`L*3*&=h>CSH|2VjkIqo15omnZKY6d%URf zX1R?7oGkh4uLkeXZEfoU(=2!#i)Qw(!R6KJ$|;yh+Rwpzeh9*~m&F zeu-IeE3aR18YDiGVE?Ejs*a2XdzZ{UTlt-=&|JQi*GoEbiOIwNgi!*I*`a1E(nEVB zoOpLNPj2N|)rS0&(eqX zvtbE;1}}YXDB<-h-TMbq-TW9Exl0II{0{R%32xoBGqG!G$*!6mcJbs+8^MGp4uWos zmSv*9op{4el-h~fU_zEjqeOGm+ESFei$4{H8#a~q@s*u7;1*6pv{mB=h?_kXOZuvuPHzjf-m=fv-`Spfe;izK8kyKHer_C2(yBmq7DqX6zl9k?||dUi*2y zYTJNI0kwp)^{r{D@LK#CbMAg#rDcrHrA{RbX`pFIiogko6C^qSl}B}F0hOvyr+|uI zZXVx{J6f~NPVeK=(rk0U`@D9u*@jZAgiMU5L8YIMrRg5O7zh$+jhaCqz?H+yb?@`K z)jHvB7O7Z*8?vacibw|HriL?Ytdo|hc8&<=Qo68UKDoG1aKsKC<0AC&TmQ68~M)82sc9gV@;VIawmnghSU zRn0Q%74JzLAj$vkzew`jGZutm+||f zF5s4z=KcxRm)~W6|20o6`lgJ39?mYCZ=dJmIEyQ~^#b?1xjWAM;0nKmSBNY6$JJF-uM}ry{KjtyzjcE`B%0HHL$itIlHYKvY`A&!H{PQDGp{QoDrmRD zIPgbM9UM4L&=I7WE*>*m{LcT*ZY|pOJNGblZ_&X&_`GC%J*enGueg(i^?MFWz4oWs zv{b}*EO)KizSdp-y0wIl%NkZ5ZuU+Q+ncQwe4Ah+TtYk-o+;+-)-qi#U5KAI`Z7nz ze`2$qsq11fA$h8hCjnyGgorC)S2=ZH<$UH;Pc~8RF15-VAMS zi~<3qn=&N5)}W%}bR&=Yf$`<-J+jC>vIrHf=cLk|R0k*Zn4LOJBvC%gin*_!jmo)3 zeHIf}yAEpLXXi$rJ#*b!pqtxd2J7GN+ew<#my$Si})dQr%yDc@pfP4 zO>89H<|C*Fn&r{mPZ=Tu*KI{BugJ*7uO4R1Gepl~-EB}VdOQI9Ru8XA^}|4%Zv2TI z=EZwNl9^Udg!$gO9e~X)#$9%iJp@_CnI2EtYlyF=y7%gp3=!a7L!3m0QhK7nTLbvz z)GS>$#LIxBif5=8n@FKzM z5dnd+bm!34rg~DF++Is5GOXBLEPP5`Bt%J>>e7`&yY6D9RIy%&<_1;pL0h}hLKJTh zDQsOE6HGZundabp?VMz9C$*Y6$yRpCsT-_ttBu251hz@h%R5)=sLElj`rJf{X;qwQ;b)R6_?AZ2mSI=EKTsbEoV9$u8KlAhxYjF4$bC zHBs#F#`gHH=@%Tsy7mxW*GC_BB+T!2TIlGcra7rPcFGwEhc~5I)+AH9`($^t{v~5P z%;x9$hXHwxN$Zvdey&dABbo5cVqQw#!30vgid~v6uv(?vUfxoI)w)-`wZhm7lw1Oq z4+W5x0JUmCg`!oS5d?ATcmKDPe0KhBS9Mff2apV)Z>WO5iqESA`A2B)@;w|*nD|S)Gk%Y2^kSW$H8@?b_X-J(mtksIF z-ZPJYwZm9i4Km35E@GMBbPrgZ0K8TNZ|>3cXVIxCyblv)_=;fOlr%lwN`bPKnyzDP zPYQG+Fok1cp7fz;V9F7Kp^I2Ma;NZqVDc35X$J4%5zD7!$((Mu8|w+Y11ZN8$?MlB z6aFl!4>QCi;T^BnlswJ_kN*^d^s2m;N2pAu zUf-Q>rLim)g9Ba{mFK9+7GpU+0~Nv7T=1A8dDLTNIX}vU8{%6u8@52#I~wA}DR}3{ z5I+fTVEp*;)X$o{V?}UMEM`pMe*@}IqVxf&b{CRSk9*bp>(!Wh6k=3RQ(m8sPmCC|;3YcCS68mj3 zBu1HVlGx9aNn#)*>C~2V^a`?DzfR85BMmW=iq6-=nxOyxnv8yle*jX;;17VipHK!| zKMzPd1D=>3wwI(wjQA^DCaJ6Y^7I3`g)c0 zcnus2*cfswj!fmLK8P(J&I6=b%^lDi8<@=>O@&KC&Ad(?$A?qhUcki$%6v36jS`44 ztB@d-AanI0+>l@e+tWjvblqL-p=k}rt=JI7n1sEUc$X$5(pf&4R91|5q#N*JZ;;0~ z!6Os<(NbkNJZNdNa(Le7P(H~t#_f%%WGvDCA>wf(G2GA)2PyLgidUngerqw6Ylr?) zE?%;|aVqRZu%5-YTP-1Ti1lB+w?0MjWj1mN+? zRF2hZHso|=Y8J(6YG0npu>#KlTlWS=5ckk`-&E{k^*BQ;CT_o(T1+;7A*C-Uks|Hx zpvS?Ce=`+MxSmWUk;XWw1pKeX9NRV{!w9&--~~QE4ZGz~FEIZaFA&`b6F;%N*cDB6 zUxxlI<*-yz9H&*2%Sg6xUBh9A^=KH;vZ<$OF1~^{(8FNLW=zYK&Y~d(xG#eoY)c+- zTsDp8GL0C6)Jo*}WLX<_S(XdW&=U+dr1PZ|PCfE&DP0Ga z)=FndkGG!tv~+-5AUB;-652*V$tlhR+nIU=106BM3G@!VSRnyEpW`%S9_H@wHAZmp)Ew&j1sbM>Q{{4SmeMax|V4~y|~5U&T(FO=MWNhW4>{i%~pT0nY2>P zWQxbwa$0Non9u^=PBk#aDcrc9XP&AxfDPU!$_0lOm9N?2(;Odi=cubeuqXnZ|aSVW7Y={Blbiq5HqC63T1Z zqM`R}?0WfJkyDKvd){i|*W=s9ujkR7_fDGJ9%mZcI>8&ebu zbwWDSz}^JN)j~kEFNY9lp@vM=qpme~y5>_!wSl2}^p1|jBX6wgt&)3EYTDi2V%L^? za5SB5HL~dq3T`?*OC2zs>8O1h1iB{#-bIb1 zz3=7^GJE_(&k*F4aHcJ67I>0;JA#!{M-~fq-Ew8aXNL~I%Yg+Y?HE}{|E1o8 zce`0fQ^*CjIO*=BoZdSv2M>gTtzeP1Y6j24oH=Ss)raXg!Y+8-*aj;Gk7a@@tCO

    =|PTZ^Y$7v^IvN<{wltoagH*4Ba?tHudjwIalWIgCkeff%p z_vWAh(!OU}#gz?`XR@Rw5i5i0bC=Q*XEr$UceI2Lw0r3&wNog#zB^N%`+{zaLlqCk zY|fqWDu1|c&rGM4pc#?v1_F3(Q*uGy@2N|Y)BXJ1RViUM5Q^CV8dgIcb z-s9Ey;Hb|M;B`|pI8l@j=%e*0Xt;v2C+H#uS3SoB+oM67I%|$ObCTC~V3X~XGYK4B zuoW2g-&qZVDQBGzuEU{|Mp`*6N%mw5a_DH&bshgJ{!rRFgukA_pbk1TxswX==P3To z_^W5j;q*1rFY8s@K%t?td_zn&dIQ!POgC%+#zx6pJzukSLGiY;RlI~gARI!a;QQ)O%!w#&asLi{+_d(aOsU)Ta#PfYP{?odJ_IXuqVwtI0OJ2^3Y#8 zn6_PU6jfR!NzyS|HZx9{AOroK?sRuj%C1@4YcS9}xS4U&At2gUW=<{HbQDDI0E?e> zd0cf%MLo*6EM`ukeI$4TT;Oo*MPPT#BkUgoGPQ(7tk)A#&ixPTk zp6;v0G|hpX8D2dRaaBzo;wyhb(@=VxFD48-%sbO4zt zK7x5_h!x~@STdZ3ZS=`=94Ds^$84NM6Gtg@oV1`Dtv|(h0w}jA^aPS#S{Ch?9vk7# zQNArf7ZJ35d1x6yJCujg8_VLh@=$tLS#&H9-5FI4;1cxf+V<#$W$~l=%IzZ6NAD+# zPt{o9>G$91x}|(rO7A91L?wA1vU-v{z5Wbm*JAY~cP@@iKf?&L%uz8lKv;TZS;SjUT_2)W2luCPp&J ztM|jR^I=&?spsv#;@Nq)-cQW*oi@aP)iuEF#uOTUT@Jl9UL$AI4HmdXzG8>Cm{T`}c%;uM&k zFX4|U%mb(`K-(4Q9Skbg1fLQ=z4I;J0BP$0{lL@id^)?`OqS>Ur@UPo`xAW#8v}R zdhcnsFBeI#F<#kEGLH0u`Trl|2;0bgDHZ>nb)=Wt9qZW8vW~Elxc_jcN7~1>=#XO( z_tH7Hllx2iNPaiH4UeZ7IMKo6vuq)01ib}+y`CJT($Jp&L`~@J_?xK7hlF{~y~Sv_h}kU!$YG|3pcZj?ydn|LZ#Hlh>F2jgnrcqcJ65<$q-X_x-ySoRsw6 z>*#`AVCcWIg8Q&1BB#JnSlcatR${y|c7v{b)+Uz{p`iB>H2C;{3etB8u2)<7BEiko z))zEy^p%2}=tW2H9Ocn`~?Im zdqb~{J`-`h*3kzd{wG=&blQCX#%mi*EnVZa(HACcr;Q%ek(ZW%1<3K);BZNoP0m>A zI=!DJUbMTuUmg(=oW3~0#Yg7GKBAV7zBVCFMKIkRf#VaX_tNonaPoBo9{-Kcq8Lv@ z{aEzr1|XJwQ=-oSZH~_si0OL30tvhb-~!Y^EN@vz;P(K|0}wF*=SbjX0OtUBIl?EQ zFG%Q*fW9z(xi6=IOQg-BobiVLY6XKLKhgJr88zY9MdW7ODd+ z(HS1`XBIuzc_z}UN8N`GqFAA}zMnuW?U0ZxS<(9c78WC!V$c^y0B)jJUd8`C5d z)02E1h4JbSlWSyU5M#?k508JA%;Ko}x$*8C0{mnHp0@y3EWiLU+k#xOi{w~k2_B+Hm9I2?pf@sTUg~ z;o=_3!tp3tJCucUZ~)F2gvBo6b;5p_<<5|GZRmP}9=4%sV;`y3Mpqex-N3q?N3-mx zuQ?#AAbx|~_R6%$_%sVAQm>-DPoZ*%v3b)Qq6-9v0$UipA*IyTi7sPA6KPy`vwZZf z92?#WhUfrZy5M325~53%{Ke*@gHmY%1%XLPSPWztMV!;lDMu^&x0(c)2ygWOs@=G z&%t2@&%`YI7lHo~H3)L2*@G-d{R5S18NO|p5#w-I_Ib4S)3^+Zv1dy2Ad`j6AiWar z8O(IRwJRXN6P4?ON5xLLdo7eMQLzTU4=w*lEx&-G)r>)UB5&a#hy*kkgult%(&KXg zZFp0O1#46x+~EB|;0Ge`BJv3aO>bn8%hHozVO1J`WQ`^q4bCwdoTKWRBi$Z;RbF$% z4XHA^=9nk1IUmj;N5b&{uE7mT);BEj@g_a~g5{Bq7YV2EbJB znUE#6g@eQ(GQ{spz=oDwxSio>X!itMc`?KeO20ipx^_ro>qnO-b}N8YFpFxy9`4uO zAoJD)dM>sr9JdK4Ksk{BO;e9Kh7!D^hpw8m1BuNOvV4Gu_knj$#4RLQ?I5bXLDi6u z)>)qr2pD4h1bHBFI2?Pu^%Eeq!(a<4mOlX-RNNz{($PmPE4^_7OeAL9yTp3&1RQ-) z5~(bT^$Hn!Ye)+S-?bQka1q8Xi_;P+9hQMhZX@)12J~VpwU#K}1NiPil*`cTA%{l` zTPM&aG#nSlyBe4E#OVN_S^aKV79^sL05OMK?$WNhF+ljXP+v{_OOCU9JT9-}G2e63 z+?lZTEHgM&=`%y(0!m?GrFis6yvAt=|1_x6w-|1@GLw})c@D*Pn6KX>QmcGMRh+{z z!qPW~fW?h^ua7=4B;Iq&$zQ)Bf6-A4`n-@h07PU2zr#b9n{*=+cP1m;$%ZJH$minj z4DS0KhGB`G0Nixr4nw>)@v{zhYvVI-!qHw))Uj$gX+F z@nrvB061^1A1si^+)7C~;wOmRJZtj3FxHna{_Q>9{-}#6F%ponkBiG%*fO#)V+9 z9&n`aEXPU>l=r2ne%$N0OUegZu034k=-ESTv+86Qx%2S>;lx>%cR@ID^#4azSD zs1X&hGqOA~C{DNt12+!OOs1#QOTfYzu!a~C#gcp)*G8c+GXE?z==5Yky ztb!y`(}fQSRi{kVk$I|9rs}MqIwxcuB$1jf5UVQ3RTY`1D#ulo)l}s(Sp`X?rVGTX z$}v?%=BbMB*yMb%23V{&^(sMusee#;B5`DLu2KN9we-O(@gvsdaCzuWo^80%0Yg`; z8)R6Y%c4R08LRYjSfvr`wepdKwZLSj94%)+Q7%*Y07TYD-`Wy$)uQUhq8cf0hkZ}$ z9T6)Aq ztV#<2s-3Chk0D|FZ9wZxy(IyV$C61!^u0v*Q4qdBgcmx5kpW?@*SIV?4i3~}I1JywVL+@$k;CwfGVN{BER4FJnD!L6k?7&?{Vq_`u9?WJBWo0fYBokbq>04=H6E6NmMLJdITOhfr1_eF}yQ{ zcLk?7^CiFptOGFSVbjI#DRd25!KqXh3JgM=hHi)wYOw^3z_mmgbEjBuV(>d4skZ=) zH^eSLp+^`d0A%hCUf0R^^m}N_q)>zO&ZHkyF-(?>H?X?wm_irv-UgW}S;!R2WPAqh zY3Cz*1aB7rhZJ3KrcyxFxDHiAp^Wt;d$^z5r{LPsJ6I~okZzko7rT%{-=}0!0&#{F zUxs)IgF;@t2K*#6QO6)o$m0h}59_W+r_)^M;SpQW$M*mWH{h*qnS$wG6;1;H73Iz1 zE#MN%-d+HrL>BI%;@&-)MnUp$?eWXB#t9A#3Q8B3#!*%bu^sfWJ@KnDNok~AmMNMp zP0=4PMblx55R)mIu1t~4k$Vahy!S|-<%UGS7SZ?l#QXAy8S1I)M`709@X?DLbT8oz zyl#?crD$#_7+#UVeuy6S;mIEiAd*O3rWj7Efs4EaKDt_~O2OI3ZVCs5mX8!p@3hiq z0L2XD{n*X^JdJM0KgYb{=V|nuQl+R_JJlJx2lAEi&JvnM5~;luTh0D!8a1m*q1huL ztx{j<`-0S0ANgGM{&zYHAGUzrBfL>x;Sb`=g?3j}qnLmH!@i=`e@#QHf7w-XLSN9( zXcK26*qb(j*lDza@G`g$J3)GBGmBo+#4aNP=BJgHx1}ux$%#IpXzK)C^!(q@iEG5< zgWFSHCv;99XSC&HxB7o0rnulC$Q5#$rF&h&M@ut(_ED6?kl^sN4c2hF9yML;9E)3M zxZJ-x25+T6>~)F>M7MWhtUWZ|B`3+{BU@X zz>7S}r&KRRk)M)FUds8&xQL0R77h;{+hdmoQ)oMfk;Zu(bOf;f&F!ey1w$t%rT$;oMypb|1cek;BHQl`A8Jd+O>jeTEFMlY747!qleu#25m#g-AN z)03}#hA;r1rYv_DOJBkiJ1wDMnVCq-bqN?Ofy5B&4PeVlq_kvi5Hk6qq@OJ;%YV-# z%B_Rr5w6DR83LcclWuwKz$!bQfT6xVeG(IgpFC4^^vx#Z3b<_5=!hnYY)hsQ;D58X z<@8ZZaSYpXT=(Cr$H;fZR!@Mr{Vd$t&5;SMV7iwg zsb5r-77?ZMk`j`^O7yi)Q3!b^N4T%Rugb+++Hk6$#cInNVSd2HdJ`9+<((un;^XuM zP_d<4g)mewj2yi_Z|D(wP-k069Zuf}6+6mRp*HZ^2FjP9e2HD2CKr7+RP4ay!tyZM zL#6J7^)vV)R?+P6h=?)h)1j~y^2n6F6e>1&=xG67D8rST)1veV+T|B`G9dsw_{RG} zvEr?9&=eyRADh5Fbaxc(a}PcNPvs2{jzXTupjgK{KZ$e)Cl);k&m`yM0E!r5lP68D ziZ|600gs&y6!Z?r{ZHW7-KSR!`LO_bZH0tMpFEY|3b3S5=}CAG2yWF z`8h1ms>ypPMtd9Z?kK%MxMDIcjUg|}$O`3QyG{<+3CgU%?iUGcHN}+-c2IkiOXVm9&wx+T{#&;fj8QaK{^vL zt}U;ms>fZK5X~8@DoG)DPlLW)EB4C)au23O1~1=qi5BEH2`5B=88h_A4iL>G>t*S)bOY|C zNm#t9VW&r#CF)`u(z-sMa4=$L^)#IE(vhV(2|YPSIJ{45Dz!UDGBBZb5&=h_)PE5b zJWmCE#vt`xB)Ff~65Jnv4^2*kbf0lk@Sujt?SrkxQKE92i}CiXN@3?@rQlz*w$V1I zy_Lwc;tVT39UA+BCyDfFU$NI|{!JfwCi~GmQnLB|nipwmUZtpcl|u9NtYoGQf*FzJ zPg5N9Jm@3AVyhe?x`*U5+{Nl+GBkelkzi43jWiatNw^n`Ij?)&BQWZ8r)ZrT%uhl` zeFBj@idwK7#dxxSS@-@Vc=n<1ZIQW!LN@yQf+auOarHjx<@xtX=yfWC@N@eL)trT97 z0#YB44?M)#-2&(811P0l+9Bd!;giGSEf9wP$Ij%JQLb!iF7^;F^R#X971b}M^3gb>!f_`d zKbyK&?}jN$>ErYsBU1WZ^d2K}c&0~L^&aEr@;$~?$Xo9*ex}}I1Q}glh_i(>w3|f? zpk;T$vv^Uw19rFvr{Zl*wErd%x(}ZHyO0)qjY4Yi1IbII#A2z!>z3FVZ6eG8;sq)F zZsG+wtd5k8lFm5`y+I6-Z<*@$;03Lvp^kc#P=d`(`X|v=dWH zuyIJDOFAAbb2($~E0=Wp#j z{B;LGU-Fg+d>#p6jozmF=yWC;CwR>adU$xr1KGvEhVw2Mt23iv zc$UPak>Tj2p4ifN*~NQkIs#iqxZtZ>*6Gvj zVuRUmJT7X`m)gabpoO`6r-#2NU(%vN^u=}?@ff+aSS4HJi#*knGGaCl%!)EefABuN z25%2`myec5jHdvN!n4{Xqv;Xv8Su7bH1^s^U^>s!<2HcDOq}SN`^Jmv#{AJ);=4HW z;&@TdHyZ>ngRh`u2f3>PK<2ukF*_YTh)lpd+S}oY{EH~@L);*}D@v%eSMME?4j%+C zPC#(_Obk>wN+!iVJ*2+U2k6Bc5JGgs?ffZ^UWZRbR}O#^Os7q8w3mq$+sE4*FD#6E zBJgNX?kskU#~01ymyU=MeXU-+V;-F#QtG}r3J13+`$+}Zl69l@Qv3TW;A3Odex}$w zN`7DL1JgSZ<4`avpPb_ZRCd!Sxl$pGhhv4Ki@GJ_AB=;QceX$5){0p=QA$;GqfXkH6lJBb$1wLk?gzWovptPhOlfGxpVql_0ehs5BR~( znhMw;z+4<1MM|?4O&uMTMX_E7XER4f;X0Gb1O1gGLzl%Q%8U{1FXZ0{(X4q=*arObP(u!Sh55-5P}xQyMI zAqDY7cpKWPKs(%bM&i3?%hb9Egp=2^p2i(A!|2R5FS< z1^}rny^WQ^36E9tuTq)R8H>Lhi?3Y7*!}Gt1+ua-p4&{!5RsW!%0|&e6A%7S)gYwN z=5DmM6FowV0|Y#p+KEAKdkxrwS26+4aKQLp1wCXUJ&Kd#a|G;SUcLrEq#U15M&U*> zAnT~hpNz835@|lu-;fY9Fo*tMZ)YA~Rdwz0eeSt8BqR(;2ty(e#4xGBA~+Oqz!nuM zMQbbaEQ%(vY7+%wTVHJsf+NZ-UI7h*C=LjULomu9SdD^;wFXpX12{oJ3kphk-`_sx z+$1D+`s3ZtXWg^TT5HeyOna{Z`-fLpWmk95=)0)Kp^_>cwcRF#v_tfLTELL|r+}5y zfRz)na_g{Y{~>C{zOSESULBs#$_rUN8nAkVtey>6JuNFGX$e|SC0b0nTTT47L&M-w*82>#K47W! z^;tO~ORcYEdE>a*qWkfv3(6}2J4BkT5p!ks%8QzM;2XcJ0gk?)Tmo_mVqQvregUg=cE-2xf2m0o^ zbPvWO0b@%ogN@4G`>>VMc zJfL{)Cn4$KP^c!PJfz2@lI;vBvqPC(A!Sxb*&R@5Zh0)b$ekHf;?ra34+iwlEZw8W z;$aq_hnYSQQoaZ&Gs3ET8D`hT@74Q*?Dm9`)5ElTL&?tc%gOpA=sYf#{gpdSBhH{& zHs#0a@o_2b^Y>}wr`XKWT~5HObR_N5T4v(Qkc95!5^UU*-&c~Kq}rg?wqGZcnb@6$ z#-vR1=j7DZelz7pb%ZN_KCMEXYGU-uV(GzeS z{54O>l4RR4N0seu%9gi-Z{g;Q=LH6B{v!7-auW5hsH{q+vk(LM4qL!?5Yt&h<~4sj zFPk_+R7Rk-_Cch&cnV5*4O~n5lWRI20bIeV2a}>pDtzIRUTI zu~zm-LiTpZHu?9(5j-BLtUE%|cg5(#h;pZ;X#O7-2^}<*aHtsHHVItMfPh>VrClMF zP7Q1JvXnYQdVLYKR1Iw?qWO2Im>%WBBkU{9p~f;|hK1P=)54@CnC9qxB~`VYItAB} zuY*!!T}8SKuxa-OXK-QZIuS9O>BeRDALLdi@s&E8<9Ly24uuCf2U=#e(pXtBl%)?r!rw6408V#5T^Nre(qkoT{&HYyr)?69b~!sA#gVg^Epf_cVWc=8)jduuZePelTtrk$f5&%Gk-my{6-#lAxl%6S z9e%>u!gm(igy1q~Pu2R!C&j$B))D0kBuHjIv%zCcyyVXQ=7Tyw@!8yi{+dYV3~Ksx zWN5g$bNh67Rj5m`lGi^26@R(mdr@joZ(+vMRbIk5<5B)rDr?@As_YA;c%?+YNd_Fx zme!~b*9m_fIlctJV|kv<=Q-u`Hu+d@9O4+80sXV6mv)G&HF7>_&e7e+X+pQP=jEY)MQ72k0LXUG!=`giDWCUKnX$_KTE1^3vJ|bfp9K|@-kqv;?J&sI0g){zTkG)X zu}ofv5^JJ%*wqti?kf^$WE2h0UC7jABScF4wtuUON&F`x?ArQ+}1?Y8v}5NfZEwu$zy6kX4q?W?1m#DXtVF$pK{+*dv+<1_YQl+JFZ zleb$9wK)z-FleZ?aeYix39+BE%q9)BZB|1K6s$@l^sMYIODmooTU2|toS|y{WOEsh z&qtg=Ao(0wvGEC{8I&}aZ>gio?4N9kwRLX`T-#G;9)O;|GiF_s#{3%5o=_Xk+H-4k z2peeJM;IMzGR{4M?Q(ldc+}TmsNJ4bKta?J>u%J2Dh1JhQYX~QT|D>RjLp~_rXTN1 zxtgY{ZjE?63z?6rUE1gFytUSyYK=B(1Km<~XTYRns$(n#)gE+DA#jqVjTfn(;_SLs zCTVA^jdgXp!q=K4e-l>O%!gbYDXEC8a6q)>6E}vPk=#uc5-jSiI6gSKXSM*yunxR?0ZZ9;<|_ z!ZKgABq%FF%9@b!N=W&0NU8K|^?Hlk-?1ul6RTS+D5;9eq@D9Gu|S!|quL7P=&o&~ z+DrXvzhkTYtY7W-!txh~HF`g!ED9+fgp?;k%7&2gcu4usr?7VSSV;Of6j~5cHiwk? zA!TbwnJWt8(L!%%bJgT+YW#nSHJUi+8-KfagC@#qwtvv#OE{2L{7Q6xCM|T^TTQ_$ z+p!-w8&yA^EN7v@FRPkGD2y}7cZ`;&!SZHUJB;RD2ZDq4aU$c($tRZv$D&wrNQn)# zl3Xcw%B}oAk@jGgB4y=cGJxGWS_+=0x$`I!{1WME_&9EXoAK0;4}qnBPUm7CBbdI5~$C@*HljZK?V_1G|iiHqjC_-`{Sr|}0N>CmPC?6*% zj|P-Y3Cee-!!+IU>ss_*VZQoRU@6*@P@r1jvzjKl z-6-IwOKfoUT*pUb=l5vuwRj%8Gn9?+r^tDLy29!O-H%Q87FN2((?gc`_`rqsP4Nw zakSp$nJ_5q8sAM|TEA&Snl& zoGbIWH}(9jD67`~%o{vnt%bL*@vAOW2vt`ueYkG(Ga^M{nTnq3J`kTZmFs&q7ML^j z%$5xz7xb<&EvwI>=v{C)@;GIQ_7h9yjSZ@g!#j>@=dAik*-NEyoYL-LD zjA%o5yHDVy!Q#Q&Lq3Js%soHZPG4$vB3X@3cu2{>*${$-9i=~K)HsECb)WYeCtY*= zm{a{X?aN37^?Z|ha*WyK3v5n~WkBJMgnf!H%lDO}ZCsx!EK${^%PgVZe%v)(4eB-i zt?&#f6x_^PM`R$ch}?0Oa-)cqMrt?E6;alGz7grSkbY6pUR`m8m~~${wn?wrny;jq zuhJxrYSIbZHXAUY=q4M8;*(3lwneLg7OgtAMO|YN1+TT*9&G0GO+kzPwZ6wdZ#?=P zHPY`mM)4!>hZH|xG*tZfnn@wW55^bWjb?v9g!%q&Xnu4F)j_yPw+%HvdeqVUD9NW) zmGM3IyKTHR))B&T+yXRX1FM@g)>&<7D{zjGJh+ZJ#0nzty4$SDaWY>tx?-dsdQ{~3 zj0`s;ZYrC~?47XG3)cJ@f>|0Yw zMJes#Z_L06+l*6?TZ{9FmeRk*NR|8lcvbrxzN&1s->KJ>XD#hrzbO}m7rCPO9@7$C zHj3lxR-hZiJ)xIBfzP)S_zme4xi3X>y@;QO|AH{57xJ@-f?&P9D+dMhb$6g0#7DT4 z;vX6nS&9W{4fX*8!osJk@WsB~%?B+0rrbQ3RZmTgNDr=+!pL%Zif345cJBCC+S7au zUyEkW>Owa6R(RQLE8jji)`BU9zBD?JQ&3eH%nN2Aw?*zYZ%PBE0_`2{gRcpHrLbHG z$3;3KbF)gq()8uRQuohLS~2b&BbSk2Ss^!*Do9vyb<5DHJ?o|&J5I0-^u$HsU!Ttv zq9jTzCs&(Y*G}Z9mQ)r-UiDkDmRe(iNSQB?P-q1FV%%LLMUx2+Po)H>&2?|Uu>qsl2!~>=_npOK}j1RrX{UlQ@l{G zTpx4VSq*!Xnzz>}SdAsK8+ZnM>$LNDT{QpIdrf&JVXxMZ)0FIhR?RZx@Siq(}>)%l5K59OR#PGh# z#*RFlq4iilz$?cT{4CIs6Ex}Rn{PBn?qLqKCJW&cnDihV@dH6-&88@HiZZ;%Z*-8N zyiN+;0F@J)ApMwCcljkBQnkCz(WK%H_ztfyvYt6jm5z#$J{~)VuUXkG(6`9lIW**U zwW3J*j?bYcM+zdtc{L*Zjn2L=z{98l$pk!YuYnR9N=us7_2%~l%w~jj4N@YfoE4#< zY){zmZXqu8MOyT~Q@I{4uyZWHQHTTMBlr|r@hvQxWow4=PA_gWgBcrTw!gqPuAwX_ z%X9n)DYq4J0i|+Z%aUeYGuGLu>UtyV`h8_z@i22=HM!VB=PRQvWZIlXgC#n7Pm@t7SfwQ`K+(n$ zUx2t4B1bAQC)Oi!D|M;TP%eXXE@tiM_HtP*V_^HJW5bj7k>U1)F_t79mcle!Nw;wG zRCd3*)?=*{bL+0OFLFHwH-0zM_0QPSl-qir#+C2@v@B}@_8IMf5LeYdqaEB2Ux!(H zF}~y{;(51TGSAqSfPz(8(mc8oB3_c;Ct*9j;hrwQCJa0!X&yZ*r!7wuM8^3K+z*w> z!h)}2S2EFsKcVgwDxnV&Lb1H5timLcZIb8$l3mRx3xCWe1C@}HDM}7fHr*qBI=X2y zl$OaubPsXo6hw-h*houcGT98^gV_w&8``0q%QYTga>qqSa>`i|Dtz>yf07%!KqD1$ z`dN-=<+YuTncSa+Fs7_RCLhn(6h!2j zg$@@vZz`O~#To8{{y6XqQrG6OX8HT1$g{W?S!5gXSC7mV`7QCsN=dIu!Vg-8yTppT zhr|+Jf~)Uyo+tk8_JP8PzH&*W$2+O6NQ(S2!=1xpCd1v%vuaME?#H@hHzg7+@DoAX z=+iv9=kdbGJHFt0pNI|HGYQ(dFfql2Z=7dW^TruiS@+C{j7>1+>>)Qp>& zEWGM2J=c%%ML^lA|G*LqLoVLT8Z!lBMvZ2RGu^H#FTs2j!h2Xs<+;smza&hiXkHf*ajuHanmc0F&#rxJKGIJ z^V|$u$%H9c3VxOw%Ha$}wWI=djmy;18yb;j%Ok7u7+W($uWwwmby(NX_6*VM8i>k} zF3)XaE1NJzOL2eGKu{gD1jj850mqu)Xnp2|HfleuZ=+VnL@mWF{ecV#_@F_JX&$VOq#BcG4nHjHu4hnb0W#GU%8iR*xaY7mkFQ z+g{|Fjg+z{$F78(l4<>VXK1%|Qh{_tczhhtjq~0D8qkGTVx3H~w;WKcXZX}-jb~zk z)L*~mCNz=f14n(WDPZM&y5atvbG!oKXMOT{ zP;jgXj=VZH3t4oO(qbAf_bE6jV%d6`hqiMstle^5Z<#f86S@o^nf|dxN9~&_7AQNt zHk@`~^(K2Z#(9Q3lVI(I?+TPv2L;|Mrm!;P`>`nHI1FEVHaB?$Y*H)9YFq&5KD#oVo* zO)KJ?ehlvj0pA8c%7v5&qVVgG74Z_WI)b{&fa@qfoZ{F`$iTeM4axKWYS+YBzQM$( zN#yjbSZ})w^X^l``=xOF(^L9W9x*yVg)yKFFlqt~%Z+3nQ)%Qqv0~ff?yXMN`FrV_ zH7X)$Ttp91c$ZX+deUv$tj&@p5yLzsxXgIV!ZHKy@``B{?&Yp?Q^l8+?%1evLq+jQ z_tGZL#){RiyN4a;<@oX{x4rXr{NpP3kIvSL%ihEm&iT3`ZJoOa|NAW~D&Kaqok&*8 zc=bCtgv*Y<_OAO``gJWMrmbHJo(l-u9R`xlG-f(*KTrX@1Qhf&<~w-Zn;O#tm;rnTE&D8E9sqYz zjZtL!cIQ9?x&qyRKEP?fy@0~ZPX{8%4h9rfe&+x}KI{g0@jNOGEdPlyD}XhC!oN=& zXv`eoNkB2zZ#v%?#Zx~79DkuPj}cp2@wJcpr7@%6-2y1S^<4$VD01})*TOrU3IPvY zWz0fA0jW0uiZp#tAr}=eI!Y_MAUyUr#wg73K|o=RyWUJofIfi2#>TEUMxk8q0~Dfl zEfG&Ag3kojfqw`n3Tg)eQ69d)m{cm62IK;YnRy?1D%#~lAen~u_xMxP%InLFQJBaN zfp33l%pZpvqezOW)bt5zedKCm6ngM(TK5q$dw{)wLjx2o@Owbf|7MOgX2S$yb^wa- zH{yO{6uxgC(4BmG0gA@Ac7`#EuIK%BmN5!S_YLqZkUra(Pe|PDUSkwR?gl_n_P+cbUL zm{wOY{@tjNLe~5qxC_QC;3AvqF-b`~(wh zpfTlu0*A~16e?sZpx_|g)2J{o22cQy<-m$Gx~vKDJrv_(I6j{h-(xeNa31#%fF5_|pCcMPN0j5`y09Xge@&DPRm8<`vmyNj= zco&er{!3pmMh^N%uP{a~^t*%09e&y>8Uakh{kvSiU$C0-zmUJnf#E<2AlK~E06Ak% zUPI3SqX0QnKM2T$daKu&E8uIv<*b&=D?PG-S-%ZF zu;EnZPH(Pj@M=KbYa<-xxi;%VW8}5A544TYKEf}moTg4Dk4@k|-p%;m_8F4|kQdI4 zz;^JGFSr!JYXCXcyqTk%YVHSifxrDNT@QQ+TzZ(h+Yu%y&w{dK$H-IQ)hUjVXTSb9 zfRhur_u4o{?z)!Z>q>66S{*e;ey=<)+cEM*bqSfsJJjED93zKKeG?vQAG0_{q70|8+FKnwAeb7>xh1M-{m3yy`r7+@@LFHj12fPC6` zHTW)(Lz}L+qmkp9cKMExYnm&%IY!=Gb^>zHQrz7!^1E^bkTaFrdpJf;Ql27>e4$Ke zMbD7eZYm>hA*F!afgA$l|6?+a5#*)gL=64q45Inzj=|M~XDV@7Ag>8iA!W0 z4hBjA`4Sk|myE#gArqPPuK~`7HXM-Yet(R)cL3e`J4P1uADl~pIuE)fLDUccyLakV`R8Dpx7}oKDq`IoPH=|{sfRY&Y-(V1N0RQnK&{7 zJx*p#bc_@iPn<-zPG_7Spa;OG15$%KI@vLQhZc?VzJYdHTV$lLH4czE*6}kPBZa0l z1L)SDkk3HJNUNumR#!v+6p+eF8a%10ymcH;M$()-i}9Cg#+6)JQp;EaNDt$4K#CVb za*Y`Zbm(kMKEkI1Qac!#XN(8`|=@jK8*5f1A%G2fW>rd-7bm7|@pD_<4@G14x);;F#V*K}UGIFD1 zv=DLkR>p7_R|23lhoA0sjK2JOZKDOqT=J1)^xboGI}-~0&!o|d^98&x>!tZ&GF{i3 z`w8$Ra1_v+aSrbo|KO#yE=)X!XOEu$;cqg9-L#L{{H8H_SDIs1r-W^A0e{~I0W>q zQ^EU@nQ_1|KR?P%j>?C>RA}9SQw}ix|3Vf}@WjaSQPd8js{$H3nJa=zmZ_>Wq8FV4>fE(CrB6ae=F;qL%=9Qoxy z-E>{P=V|~>1AYOF0cHa{|NLLdk;W7L82aVFa9}nN{+(N={~QMZf^=Ps>9!b z`izilPEL-PGl2fU-9Y%e2RtpPI2nax^FwqsXjy86_d&m5euB%4`3sEAzz*PKnBgxU zJWOyqy%7F>h`t(`?Z6K8SVd}$dxO)Gjaq{(yg3W-fcTJI?$G#(o$llDvR&>~T?cZ> z4+Sm(uH(vCOeZV@DuL_i?HhpV=8^c*)o!Qc8xVLJMtn$(+qOkzi-=hZtOGW;up;e} zw{Wr_h?nhlAB?Z4c9WC8;M!h_L=BI$j5^eipD zspoaKTzB#*`MrLWe@fg-ie|+}xzXY27d6gHjz%YuXWx#|b`{S=qf?!(XP4bH`o?R9 z0^NRjVM*y}y-&&=a@}vck7y+8){#DERK$~_H4(D7H6{88huo&o0>4i2*-fKAfwHY> zw1G5k@M6ZHS)gpQ^hp`#aw(;MmQ`(j3 z(X{xmmbS=0wTzw%lis|J1GPUcA=4{)#LyeBD=94;{lIb2uJKhQMI_9=5BLcg(e4~* z$B#Hrz>hgl`!4bA8Memco)d4G8O?yM0gIoLX-l=`JeU#9h)?&Kk7Y(r3i|7_%xD+H z!*W{1Pj40N1mW^lVPPHO^IF;LDKRI$zE!lNU+kG2Y>7Y3sx9$F@c3Om!4?Zaef@D( z^h6E}RG0Y4t)p#&(ywT3bF)Jew`7e<=lJ`rqv?Jrohy>tL|<~85f!W3M*C{aZB^5A zY_{O-KJ3$n`iJ%vR~{F=+DRI5?YZ?WCEw|%rF%%kn2-TXuA_*osI--9y? w)w!cOMt{b^X8vAB^?k*c9itOcp#8qPoj+Ifh;HSq--*#N&WMH2oET01KYaN-rYdJ=Xsy^dw;+03ruF_oGE9{oH=u* z-K_sEYUPQjl|P8I^A{XpUM*dtUqxr6x9P0(7=bMGnF|th=CrT6lDN7=MPcdYph1zD&U(3O(VB?=3y9#>+wU`HJXCXMFqhxaI{F&=V`m+^uHzJ<;vY_abXXPerqWf=)IWHa`y zQn8w-ycOx;Y-f=9;(uWuRP;>y-Egu`K<4YDmBRawMs8usABLQ zjZEk3&-%_sw)P!~bn`L__Tc3T@^qA&?^D521P`mABihZ6s$ee!Pg1a!Z(MW@w$C>+ z`ek;~m*~EakDu=Iy6f^u(|v{Rcz))ruhiX?7ftt_kBRp=swVKV>Ao9c8}XylefPwA z_;}Md3SObnb^lgTB)bxE#xEVec7a!_MsOr%@JiTy+uWk&|%p~IpbeqlZ#)EpU(ODDQ5dSSW;BkO4WI>o~oYc^p%Ca`)c09 zR{4r+Hef4#U)1c2aMM~8&aBlF;RQ0hyH+Y&Ma4$ej%G`J3AN**$4^5!YAg&%cMVA| zE$&f!iD0XJ7d**{NHY-6&`x?#`-r?PmY3zUMz)&9{i(z67^m}gY96!_YJ!Eeol$NZB(byGDso{s35<}9O zQTU!_y%1g`!+V-FBPKLXS$ajwJuRZ*9)+w`?F9uMcK~D(RNa zhTRgOd3Xx%U5P<|_}GmKh`%!_vnW`1WPT_~JVx@s%ogSBE-~@nIc0qWQx*#QL^(=!SS$$J&TD>{yQ-Exx_u zJ||y!)>rqIdNcsL-jWc%@+?)GpnG%>8}+>`T%@1h=F7Xq!`Gbk`ER+M7rbXaoxrO5 zoZaFHl+ew?SH9=#(ydeC64EFMmV_iQ5A#U<8FkJga^;!gh24g-N^;c7m)s*4k}_~ ze1OU;{@{TRbt>ca$6CWH{_wG#oS!^h>>FfolhjkV&Cpgm!&>>IM;4{t^cYGq8v%=zxr}{##Pw^FI zr$V;(W)DN#(}&h%hl>XcEo5v#@n28Z63~ljen1!{NDM=VMi@+MEWV;`20`e4p(4U zL!m{6Rn^jup7srX9^>?^Z~5~%{QMbT(u8K@-7_JbfMqWwq6xk&6MWT|RNw@1_qCW% zc-A-Mg?sptv%dFUScfU1c+87k7(aT3vPPYx8ZmYxPtz}*DZcnpj^HQH_#S_?eI1ER zxWQt7V^3qx4MRK)DQV+$gh7XlTP`&QvTkPZ=n2nlVyJY)S9( zvhvGWPg1I$vzwFWon4Dv^39pu1HJp*?8gao$DEZk;j%XullS(UHR7)+XCz=p-mFzk zBFQ*PsEJ`-vo(LxQzIS4M9#g7N_%u}v%0cL33V+-dGJ$rh^IC&ig`Sc^WwSvsH#x^ zQ#8~@`SSz~pG)&v(CBS4f2%95{2G$8?~IQZHK&xVi-uFicZzm0cCvWH@FZ{`ISY?=j|w(|ZuGp3_25_F3+!(({#AW4<$Mr}M(;z6tBb@&(g< zyksn2GQD_wNmmZK-rvv`-8Fq`*$_}iC4xBLTYDQ6uP94q*DJUGw(dGvBlA8S0{UgH zX)4#9<=4zrym-eM2N@A>>^a9*svK)5NB*^|=wG~S-vEKxGVDNdR2k+njN^n9Pkm2P z`uMrNP6uKt>F6270}mwgR{P!zN-^dikLx-UVL@2b22xB~SbE``zO4u2YF#~5z7|Yz z-gn_(wcb}Jm>5h@Hs{J(_3PC7QZP&59CLDS7FYY~QYQqHjGyCs^-xmO(b=l`y*#&h zGSbUt`?em6>w0yz=YrV^DZMq2i3R*R#Qa%Y{csz>3uj-`cG_7y>I-Ps$;FG0d|<%K z{xM5cf3>+yYmn6Sn3zdyzK zzWKh%r;=I~%vViJ_SEwvr0*+~F;5*&vZt;mDe6P4cPg7}ANfw4`n_5Kr42SVA&q7* z7*CgeXo#Vac)BAW|CaCJ(@FL0LR)&;M(w<2fgcnvIX##xzY7Vqi_^~TLvZ!KuqK%7 zo86;V@muF>(R8)tVzG`9wdG=b@x)7C=)7Eh&cCHv0Nc$|C4HZYVd`{y!adPZ zTV;i1^RA#ZeNS=OUxOS}#G74MQfIq}>Yi$z*gz3(Pjy(u@z*Otv&HyF&Z5l=_pu~% zvWGP?zZ7ii|Bg8GR|jidxoexD$9tHIbasutZB_Dv&X&a6Evo;Yv}olUX4w%IU-C;G z7S3#n13CYRop#PF4|Dx@IX_Ndbx5c$B(mhF^GbRXqCJtG2#8Qg{d#NwXZuPfB(rY> zD=Zn*knMv;EHvBRz=o5*{07#Hmn|@l-M~8WqYKQ-x3b!1r^c)vFPm!Ke;XqCjoCz2 zRua*KbrWoIN#CYyBPPRzY7&^UumqDpd zAXq}?oGuuawkZ^!zMy1x7dDCz-EOIXXqdjHWW+5j5vI!mvq}>*siYgL$I8qvy0MdN z^7Ip|SBbj^OJ)Gwc&lQ==vx_9OOh?M&BM1M`7&ZnDm-FJNskOx#Y$ht%Phi5xlRNBDk;rkzeQtLz+C$*dxrdm zqu3AFVlZPzvt@BbR|t1Pb87g$BJ=QQcK_A5mV_%@l8gU@J@ba||}v3iG3Ub^_S7&$G4+wU(Tpz!D?>8=Yg0n8v!MymJM;fqC}o zLHc6JH`7=KXGKzEA}JS)nMBx|b<)e;F&{QrO!U=xUMYFeWD_v&mW0h^&qJ=EA(C3H zT&wab6)|4LJes81PWCWPI{`mfX@R0V)n_xnK#AP%>4bu3f@9^Td4i zgDLv+?Uc(*c^|59iy8faEMwvaYzRXcKYz%YLMhfSXDgBBP&tO(X7lMC68P2*3A}5k z1fJdr;JYQYcCi#RtK^p5?0&)CHRtVROKG6rzK^BxeTC+@ee7|RbYdS{fRZNdXK6{} z$?SwI?G~P$!c#8NZBy|h8&I~@{CYoo2l-z8SXP$w2`bxa_WOkS0sQ$B_BtB!!U2|x z*dGVjR90$E{#4>p4+2+eZaFA%Ef1l|>&-2PSPr}vhY{OgZays8k@}g8t^bU0B~3nO zJxJKeENXq!lJy-GHG$GRcB?gZNeuVnK{ z)*;k84cj+bB9G8`r*tiaAGknK5rIwi&fYfsC`Az*KYjwnN14`!A65_#qbaqH1u%opPpo5O zi*yH2s#RFRCyEsAN_2K7?qUHv&ZCbU)|zq*{F!y*6V92-er9PAcB9dXqI2e{pH-ou zzpy*1C=_;|ARYzh%t61f1j;_~7uKOsfkhLVIDvxU5n+^UJcScOZ;4=@(8tqxPI}RK z^ZYM3f0=a79QG@F0SU}Yzp}eI;Jq)g?c~S(#vUeeM*YSbQo04dv7v5RXrja8l)@qF zPyU@{B}zEj0}e?N&|ue)1V?yS81F;`yo_f3&XOV|qmT|g0nk^!v$_vRF~u$|B|Ab) zP7tIT|E;)(R}lB>3%hyWAFR3O5^dE4h*?9mBsx&1BChCyx$F;?kYuMy*P3W@n4~*~ zMd)-!h5bNIByPH3Ui^b~$DlLYUuGSmf+Z34DCeci>{+zJWPh@e;Z_;X(4aFX{KbG%9bZd;ReS*_n3E%=??Q zCmAaJo7KBIF^IAUCt8EVm;Yw*btGf%kUS2s39K`)0gsM-qd9K@2E8$ezu>)o-GQ+l zk{&fAU2Dj<6RX;A%@aZ~$>28J1-K}qY9vm=Xb~g~&eq&~g7F?{)-ZRF z5ReF5CK*oD)0sz07b9{KwPCU;x<`Y6Vf=r?_%qFl&La^Tq_U`CAA&57oJ0fZJxVna zc^(7VFzjF8{747MEgIHR1OwvcaiW7g06&rFNM}e-B2_{2fzM#>n}R3sOJ~h8!RwIX zI4XEDmF#rz?e5C0Fu!#0nndvL4*m?K&(?VorJttrLll3?;Pogz)!^@5t?V9lqAui} z;N-0$Y-I<5fS&rm$@^u=aiUbKBo5r58ITkZf*uaNZpj8%!Bv}}ZR}wvOAKVU%BSp7 zzggK)*K;o3yNPOAqN`gC%AUf*6S3DSGY7g0+TCes_rF~HW>TX!hwvAvl^=%i+L5w@ zkcd$tH2KF6zQAUg7VLO)X{ch^2ci6#D65Z|-N$B+FkTnAO9qGWa8}pS3z*e$!U0*3 z<$yv=@={+<3+IV^!8vn%IIk5cg{s0F^l~JxW3mW7k2tz8f;W>L6jgy#hefKR3V&T0 zD~ew@lDCw5kloM^5OKwN5?d)kHX-Pb?h%HvPb7O)P%=G|dPFFKWjgdB9r|C@BcV`u zvI-DeD-!%gvj#+7yICD|$r!Uv1dlV1M)FD5ZP~0SKDJE-Nk9`MeUd0G{cqM214&DN zc9>KIVq*=2jOW0gov;U6WtZ zQ~zhQn7=20D|Io*+5eQEpVvdqzw7Y@5vlFaescd=`_0m3$oX|Mo*m;pdRhyM(lq?X z53zEe`CvERjrRPebbHK0Iy1SUMJ|?)?EUhg%{fH9MjezW2t5idyK~*(YEd~ zXJ`+ZsI~GQ>A~}WJKBRk3a{&}GRdS{Ws>#EJFdK_4Bk(c8Y*x`BJ5IEX7E^ZW(JQ# zc7%zjBg%92l(Ck|dq{bcl()VouN^`p&Ol)wn`J$DtSoyaqN{|tsy~mB@%f1VOPKp} zWeb|##%rVeUdns&Hr@}hZMX5Z@GjpbYfHIZdVQ5QUU@~zJAAurWQSg|krR5!lq-Aj zhRFVTFIn^@1x&g_CVBD>nPkQtGRZa-JEy!Fz4;BY1>FrzyW4#FF&-O;X2>W?%|{}5 z%a!-J@{Btru=$;mn(24Ss=iXd(7UXzd)TRIUpVcC_XQZ`j8|UKUA$p!VqRmHroA4j zX^V~+83c|v#MyC(4w`gnzT*jIH$ZCnHHm*NbRa3B?ja?1~9yWE4-7LvJ#`e zYInljQMU)Yt&GDcZK*8#FxgH7cym|Rt^AF^UOWUJ2L=XHqY$*0HkrAx#$5@KF|F4 z0kCSGS>r*_FwgA!pahOrUXk(+E6?$e#5H|LW}o(u%y&cqT@OoKOXWSJyh+Miue{^R zi+V(+?C^*zrBKCoKOzf@c~s&$Dep<;&43p=&&f46=D^2w^FnVl-HvCdIGZ>9G1<~O z%Il!KdmoeKz4(}HTbYWTffw4R3YSCZHqCtQPLy|5ob@sL4umG?Q!;KKU+4<$BUJKq zO;vBlcdG12{!lim>SIn)-ui5`r_c1E64rPqNb6%}sMrYQ%~ReUg*!8p4?~g%o|YLV zK25pJk5%k1PnWR;=G+RgCFYh2v2yb(#6ql;CtI3-7w~GlpKiua z!J6o)2Ih_AKhwa>gzp{IKo&^aE*G69D_&4T)5wWe6!M{#nszgg&a;?BG|eA^iIkjJ zrtoV(acTv8ZHK0j<4YJ7?l=c4q!w?{6 z*F4TFmDyQb(1um0ww3XZ&i;QlDe0Xk(_gfB!N~0e<~7${}^O~oER%{?`LV|d((JTr;0kvFQ@T% z6%iB6%ZS+I{XCEuXz{NLN+4%bV4yP(+sI=cQ~~GuR<<&_4eSb=xvV;jOE}RbMIx&V z(zJUOlKGElnnq5fDCFSBH7(cly}_d!ZdPJA0x~*N@ksc8M^bXma)pe-u#7Mh{5{9%mRX(v$^WyT(i@3 zaA~w`!5Z^HL|nLDRS((UGriM!YoCi6!?Rf+a=HMxJ;? z(_XO~mxT(**~o36pem3y{of)ZIU9el<5dajLEn(G6PyPAH@oySh(9?S`MsGw1DePh zSzFBqW&{O!pHI_9sEo`%7c3)ZXY4TzdeKIv!ZIUgBcmTu3wfJn=7BK7+4#?q`7_NL zB8`xdoQ+)D?hQ-`4olv8ffeLz?A@~}@Txx$#!-_GQ2 zo59=7KS7|aDK5^(3QE-~{NX5+oSpai@sMMM)cj9kwMkBtB+1e9%_2>ER@KVRaui6F?m~M>`_eF|H!6C*b59?Io_fBJLLuPR`Lm z;@sxbb9n6i9cAQxurN@;NEATMag)R?s)(BhI6247gcBElyHhnw^UuflA?Nr>HLIF= z3^jNUtJtn0O@jof88k4(E2QItrJ4rb5|aDx!t6;d~MK?oPcWxyf$_rX0in0lJ->Q0m^%;vG#Jt?CIHC?S!up4-g7 z-{i6NRAl)-Bs?J#4v+~&BQ)7>H`%7#aZd3ge@N|y8h=@!zFUknyp-R96lNy}Js z*j%txMnvq|fY332KE@omkO(1DdV%~zl_LDf;3&C}PLdUUu^BYO=3GtaGjbtKWkzwX z1lG>=q%~&)B$t`GKPatZ&Dwsb7&WmwKK%#c*Oj7LyJ5BzsD_Czw=aR2v6O3v}FOzt@SwRvP7uYJ$f7MfP5 zNM-(;pr^<=HmgKGf30cYnCjkR9?PVc3oTLiE3CT|rADRoQjXbsK9q+=$lr%Gt&XxX zgkR39RZ(WVA-kmPDEdp4!~H{02RYXvsXg9+{CuOy`bBUtSK^S!?Z-6j0lQRtG&&U0 zG58da=JEMFI{jB!%>!pN?GaTJ^AAN84d{Wn*~{sEk0 zu*x@(F^xGbCIku%Q|kS37qdCU{f*HEa*hbeT5%h;9V}}J`y*j6QQ#a66tY1y)25nT z7V_u;*7|;9HKw7%Rd0V>13Tn!j;gAgQvTGm1Byq&FCZi2LVHTy&WUHXC8xqlH%cS~hYF)x5#S4SlVx0_WKV;R{-^6GK32_hl)%gFu7 z%v`>J$5|rM7xX==Sit-fF_6hQhA855lbJS45y$=Cpp(ft+9}GXHDTIQHsxo*19FZ- zit_0COlzSCXa1i+G&x6^Dz+PpiI>c87xQTEQU%!y$cuJat-wBVj-INbdm1urvW*;% zd7hl3w?du(@&y}t41z_@(N7_>8!;_eAdVO4l?LD{C<}A=67IIu$(}kG5Q=8up9-Fk zb94)lY~!g+yVtHKFwT`R@&ItwcmEVi=0hO$5L?OZIyg9 zHl(n;R)ZxM4JGGXqmY+?eA^ZW+v;(aOQd5|E7W3Fv>5Cr=ekW&zo0GC4%(&e0i2wx z2jN6a3#RqJ0%s|Y^3GTFjBUrX)hfC0C&ptd5YAbukPjezRaH+=+@0?#PpGVL9j;AmUT zCXv@r$OavlHqS2SR_Hu({1$~=1`=neoZNp9d?4pYQiAvZCdsdq#2Eh0SoM>0w1|+L zy6JYNnFrp6#Jr*8Yjkg>eW2_+T$vLJdWM`}_PAjCN(j=317t_+zBoo|EwI&(y zC+dOOr(_^tc&DnF{Gof8R%58*e{j*@u(110?>k`9gDUODUQFApl2&L~v?s`N4UKz-=x9oZ5 z2Q-VEqgWxI!}iZkRTT60Mn{ly%#lb((yPq;avrbM{&raN->F`~whB^^bNEydEnjB# zmH_kL3IsXFLWOK>mKA{?=T$8ARc3D~>HdzGL&-Uk

    uOpx|G(xto>P1H- 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

    BE4k^%qS6aST*3W7uI`KJVMj*=S+ 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 delta 35979 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 Vx0TOE$iEfaSJ~B{Zsonj{{xig!kqvB diff --git a/records/wasm/iyi-webapp.wasm b/records/wasm/iyi-webapp.wasm index b22269f9b5bbd04e259548943f972cb95124f6da..a555e73187ad0af88a0956e3b56a1629e9776c52 100755 GIT binary patch delta 32114 zcmc(I2Vhji_V=B+dpDZ`goF(#1U4aoBtYn)Ll&$ch>c=Ffk!bkfgmM>jRX`M1Qr;Y zBqI1w!=nTZf&~yYc0dJu`V=GxQUm&U7RvWKGxy$ILV53d|F5i`%*;7wX3m^Bb7t<$ z+{-sx!(J*6+fcxp7Hx5a`!ugce;EBKXia~gYeRoc;;iIXn)Jp5xK7xaM(q zD`Zv=Q>jlk`FHBc@w*i=1oVK&ve8LIT%EKCMb7h z0AKQK5dK&Ie=rz-GJr35E{MNslYg!wCiT|n^RWJ?;{LGu zh))gc?%psrsBBkGt?&k#caDE|SVzbh9-iqB3$N`kQEvax@FvK%JIw809bOWRGTCMPCsx7i+D^}p|QL`Oe zTb5Vzd(H~V?yntB!KCOpoRySaa<5^$YKebM-IR#!OOP=q2R8D~SN^Z-K8u`#V-r~k z{8$9eCAz|K8YEXo3;fg>CTnh;I>0L5iQC8I`f%B^8%W9;LBxO9_(=@1g=MpEn(IKZb#6}$ zFDg=+Y2|(1f79*5`LTs%rMGwH{NVhux89ko%D*Sp?Jw+oXX3&6$dJU% z0jhg+52w+Lp{jc;%Fgtz;=FQx*`dDiGQ4>A2aL*k|K6#T_GkB>PsuO)Hzl;64a}xw zkAcf|bjA-4riSnKD|u>okC)YY=&*yYE%X06xDy2}hkVMb7Wyv_d6_LKdwJ-6Iw3C( z??^$15d&ak3r2J!jxR?%jzrIqURG50+{oDsO^wP)4KE?ngAs&ykCb)Kseo}T^hb>T ziI{W|(PM#bzMOQn_79QUDt687b`V{^)CPWpuNEt|@|ogBg%6a@{JbY1JG29$@V z>uE_L-XcGn>PE)8Q?u~5&r}b!@v*51NIW++k#Aq*e{Je4j?ve0T08~4rzP-%W&WIL z@hy*0!8zTvcDjaP8kv&Dldzt^Syp|Nal;HR5HEB_6o%0A5R!T1Kr8o5PQ?s2HfE6U2c`f_!? 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˲ml;`zrgd3TXX zN3wYHF+57l6h{!G&WCCIXqEgLuAabIDGl5wYL0>HIDFvx-MZqC>{jy;u@{EJdL^VD zcpcV25Sc7hGfqq%1AD!sWa=cAjKK;*^^9YLcxwzxON&77EVkNsg^#-Pa22cAdHCO0 zMd3$Ptm2!aa#UGXao=7M7{d~(nO5-zI4MW#GhOek`!W5aU*Ii_z!gTWKmT#n6^xC~ zQp4vnIFC?I_8ry=1eVwT{R;flWGv_az^6(*(Gfy5%Mjm0NdjPncN}`HLi8WUYPtOC zsc@Q@JdU+uCq?BrmdqX%2gb2X-mgYm$F9H*(aKI3$UyxPIogAGm+)SoI)Ng_SuthdU6qlf04Ll zBD<9(i^UUJPObKzsntaMaLj?vqPJOO%xLHimcL3Io5+e&-US8uoA~OmviU@j6mu(4 zxQ~euK9&^U?wF>{LON{{A?w8S2GZSCEb*}^afg7T!bz3*>%`#F+-}iq61%Z)>2XcF znK1u^U+)8q`$gnrQ%-d(eI6oO&E4Z19(yS7-gs;W64f%~6j06#fauUA6Ry$V{39r!kYTl%0-(Ndu50 zh=+Tnczy~?j@t)Jd%`%Nmz@$*L+qZy;#p1c#T3{KHbkbfq{Kca(Pf}ZGvMM_SJ`dg z^0FwH$_lH8oia^nPqgk16YHn4+Uyze(Nxv~Hdk{Ri*FtCh1$MLdKkJd!83xpE^@|F z&2y161v$t&iM&3P_a^e@5>>Q#U>b|7HTAUev`Jym;A=o6H9@43C{~HGY3x~cuc$wr zO=dO3>gg;u?(J{PX6?u5JVztcoh`najv@7ea6ZABv-?H6Cs;;7A}Wlj0VOW9BAcy9 z5~`G_mR95`E3$whO;IYn;<+c-*f8w&#?N8P6Wr(3@JRa@HL|hMWZRm%m)JXpx#O1t z`8qPvekbHKiFB_Km*=q7@sU5^c$IKZ(x8|geG`V4J5t>AG|NfJ1TGVN;?LxoV@}~U z_bp=1(=4%h2?)qQ;_t1eX-_K#pGpgNF9&KVp=JQJNTE&u<#vdpPqT*-E?j^n?Rsab zdM{iMy~|iuV?vVA#241rv~g5;W;6|DxArgP^wQ=9Gm$+}tSp1PF9S;!74K>Q|E?&c zIPO#8n=)*ayG6uYRxd2=M-b&?RJ5JT!dQy&6E={j)ExLf=~?E)kQQJkqW?UWSnDHxs&m|DZdX|7d*0av4=O(cS6zo;;rJp?%FD}6(Nq5VkQ1*`G;ud1Se3qR| zIH|f7six}Qm0r-jOe~#`v6Uq%=3{K#ERM}*Ntl~|na}#ei25yH?GY?o00T{`*tvj> zsTR}oe(a^dfpqv)%|yI|==}nY1-pt#FTgR661!huZE+nTav8f3r#E*jW4EvdV(BuN zdQ-85QXMKHma~dT)D%BrR6O%GYsWTQ@*Nh#*oul>@3QC9_>yB4kA4mb!YsNgbU5_S-Vhf~vU_U2$POBjr;I3GH`Za`M(Gjp zz$sR5&~fH*>Vb*HMwnAK<7J#{j5&0JMQ8@!36G)gk6=|Y_gpJ;zm*vgQv8C-6yKj> zu|8r`O(AvSP3s8#+YdD6x{I5Ig8ApKlmByQzQtt5ZtAfJo*i4_)c>{C$Mc!~)NWjg zyNkQ+3i}&;4vDiG#JnA4bCjnu9Q|dT84(c&xyQ<-lN&u%^2~|h4=Wy0A+r)pg=AW^ zbatbsieq1}WMBVcJ88M;&dL2KvWhM~{)O>ye|c~|Dtv+@vgEph7Eo|4B5cZt!` z={m3XE7o(>)hH=24k`vP=%j^rJGl9v){^Nk>BZicq0dclmfVrxMSpzgohZpw0sk zV1RgIhN#EvMzoubi>PDK&AeTVBF>OcE@cs}Dg30a)Guu#1{1pe5p1A}C3z_K z(~NR~W1hBqdb4kL`r@FWT6X1o^VIgzml>nDAm zv?x~@f56I~CB8nxruyhKO0Q0)VIjj%#smLLxkiL*Zpmt=KAg8hV`I?7;jSfmjEBb( z8=|B`s;kRy{-fo6oDQ$9X3(eh9}&QS04xj>s8J2(UPEeuq(>H+dmM&PjG?3onrVNCJUqFYVrG5tgnv_ zuk_EPLb*4_FnCrhypGRx5Kc$SONuF(eQRQdd39$ofhr@pknC zT|>|v7$@mob%xNoNwk2R|Koagn$kGrJIr|=S7WQh^wy346Q^EmtzdEPG# zcwzB)r2)B5Q~a67iz#BXgu2W`KZJQkEM-%U(NYqG^>FgcSi{ZRqo_c3kef9EHN(g0 zoKFv6{E>DV#F7MVXcE-?kr@3G48jg*&~l7Ir~dI9zHNp(Bqf>JxFB0j2ZZ|T%Jr7< zZq#Esnop;M`UcY@cY|wr=zVzPLeki78uOIu!zkh5w^Jc9%9&(=k<19Uys$&fKb4f9 zz<8Q8DGWN$cE&S^eiZg7-8GHaCz^=1-?L6!YbJc(vuu(29g9e!gGIf)G|ILye3@;O zYed0!tcQ;d6)mG|1EX|d)CO%bk8H9DlzJ_j%xs0Cf50Z`F!DM!>Gb`-waHuBLX;4j zbo&1P+9VI7<5$?EsD6$m_{apwVcKT)2ThQUX@e%%#xg-VtF=wA047K_cYhTN>}Fb^ zm&zoQ2_7L+i)Kc3%LFOYCEkL354WNz;R-Ws)&Y6884__{qDoR6Vu-J4#N)0}x=)qT zWW-}do9|g?e!e5wa5LZT0x)aJ)XFGAS^iPV`0>oYIjT-k55=#XmgD4Sq^)Mswu8YLT^DGYQA*_1(8BLw8ReJwo zqdHbchOxxC9fF7HKeBC3{fko9d8hs?&x1#*13^!zI{wN%@RB7)IJv1P_~_%MCyj8Y z{sL}|hr<_7o4DkHE7q0a)cd&3gIg2^FNt`(ls9EYE+r86k$9PAqL@M>7ykMobs|8P7`~-kx?2%KYp1|v4X*?B63aI+|H9p>& zTK3rOephn)I;NPjEL)~UY+ zk(~OzHNHHfi&I}EQ@|F>sBydNAkjicDs3F3`T0Xs=h0VF!x7~zFpzCFl}18HO3tx1 zuFR*_yWwi|OuY%>ZDWjwSpv_ZoJ-I)7QuON6VrUWi0PM64`MgT7*Di_XWncRyF9!( zWz%d=mm2gfSc^Mp;lX=a`E;Mbr@se87KR`un5j;^VgkR7>DzS=Vla3!2BFQ^6j}ki zuR}p^OyCU|MG-qlp&G9nCh$AZ`khGUIeE7jef@-DnKGQNd?Q{i1J+HDTKE7o;m`VoDMd7*CD|(=!-zSEYQyFm2K>^p3A{Iy@R{xjl$4OuGSabpgd~;vUnfX6 ze}*_M0;eoE7#}5`1($Rrh>O$J&iMl#h3i3xMM?-1(5sc{WAcn}7y4;FY3v-8D+7~g zI7N#4rN*);fq0ow%ZwEpi4-%kp)o&cj1u9bu`<$_k2pz2*^-e_Q?_d!YL0a3-x2LR zBdn2ApF{1^&m$wt$?t=3vz5?4Ag8SpPiaQjHc}qRJxj@b0jNB^AEaGBfp=!6`S4EC zW|h?s_hENZ&XMYoiENfG&**b8JD7`Q`25OLC0lo0-0jMm6Ha zGNvArNW=+J>Y#|bNJPCHH6=KCOVqRzHNl^(r-?!ejegr+if3jr$&DoAHppf)z)Guv zQrkhFLQ$htB@wnogDIt^ooz~Pvs}m`m+lAY`)M@`vHM}zU?qWGI)K$H#VhR?)DN?j zD_o+<3exzt1s}WVMv=Z-EspU#6A9nA2Gkhqdx<0BCuIz8OvAsJn=n}DDj9ea%H>ec zWa4v7sfU)SOG;fZf)i*@n5+FM_{?WZ%V^kq#p&^9VW}MVr%4abl=4wnXG@gA+=^}^ z%%W1v)`%H*IpKzpGNNQM{5&~fQObKT{Y#)zR0k{sfnvjxEV26E4YB6J=izA$-NPF} zG~c%qz}K&P)FR$&Qyk57aJ_1MLp|R1M&vYPMpT4r8;a(jXipT(hh#nZEesL$RH}oP zu0dJ57ddd;ua>|J)n-HwGjySAfFj*MO1oWM`Qxe?rc+lF- z$TL~dMhCoN39oBmf-!p&1PdxvF-(kNJ}Pjlo%s^8qb;nMT~?K#0t)A+f&}SW+t^?XhHEx9SbYaOuQ|nhv_)j@ zKUHm+L`!TNyGXFQ(A_H~4$rsxkS?=XeOTA(!mHaT6|CyN)2^YT9h+#!ur^lBuzSLm zO&JzXmQ|~V(r%+v?dGl}Y--bEwmdWr(cUh0uldZz_v5XI2d&Px7lQnACjBpY&BYVR zZ(*5zn)YL#nMnJWh$4o402#WrQAD{%8US?5&QicAr2z6c(%@CsN;{=IpUMoHH6DFJ z31tTavBBO8sw~(k!Hx=AjcslrHWe(9@3S>gVvdMlKhk|bs~OEzGwR#Y*`2~Wg|M(| z!vtkEBiAm{M8&P|5syR5URm~_6GI!9O zMSZ_dZnBzYal@5W(#WJ9D5S88*Pl5?>4wWkNz-jEshSB(SZC(Y{DkKzNQ{N6sTk?j ze5POPBC~nAr5m~iX{yGxiu+`?vhTl4HEUM8@~DJvJzBIh36|jbM%96tf&{m@(iKQc z;aO7Q*yjU@G{;OOLYBi{-0g zFG^SIqpDr)OnL3DwtF+^E@{}An!{Q{#ccY;l9?PVSNrW@7J1NbyRg+IrxYK=R=e-i zfU!1ZZ~)ovR8|(WUb^LJX9K! zGfKO=PFmy7VrC6ZyB2QqlqA6opC04T06Mj#2GCqar_K34 zA5N;Qg7##{?U+5y2j}5DYy4RpTo@+SU<=O6wmDtZ@N3CuQ(rA#&<0H+YJZU4T89MJ z%2!%@sC+qAV^3BYepyRZ&zVa@47MI-4*JpsUtp`8XX4Jey^*lhT5QSFXmaJ1A?4)4 z&UBI3atIb{S+zRUfs*%Fi$r-V!Can>teOe3oT0v;m335BW_w4gOR&vkb!yO4-EQYe zY{&wVniqVK4K5C4PgSLZy_wHHwp$DuBQ7FX)ymaK)uP;7t-39TM(;{k(_RzR68V%a z*O!)Cv702l5}|xS2V+^kO%xQMmn}+HJEk0)I#{O8!uuGO0OsR_a&zX4t@is^R}j(h zt69$IEDud%?QGfibX*ln=cw4=iw-^T8c3OqnUQQ|($SP(|xmlr>@mFH*Jka+K_Woc|JgA`L$j^!9Q?rO0RcZ@7z@X!1w?1EdPh)5GC~7 z^t|r-|9O_r$Gt@3$vVr&^@5PI{08bQzZIUA?Ss@x+E%br*FDR>?`3ec&+_GIJ6RmP zAY&h-lFj2FwK-O1p=bHn0+MI>wP~CKlPR(D$rs|kOf1&((O!+Octm@*s z>O8aNPHl;OJb}8(3$2IqSOD54>@ibzl}mLcnzmVbg-~#Jp3bVtZ#QW5Jn%`G7kGKX$BSEiOiLHL#Dn{P`(jAI) z__auD>oHQu^(5p@Ddezg&?zAyfbRnmU>&$3LQQ|<8q^TLU1>Cw0=y2=-HNp6+NAN8 ztZPBKN0AP>7HMsq0sH7)#2ONIuM~FhH3&)ARir(HC(W>oPWt{qvTq)b-AJ7DA%S?I z8G_+I9EIqj;_EOhmfd0C_~4uI>aZP)3DW}UjWm6~w7^3!sFl*74uStl7!*RI!74;u zQ;Y&iQMAmA^td9#B`hmP5p($fK`RV;vrXTDjVZEom`S;uNq1>ID29Xm9DNs-*5$rR z3_lesHfowNRNc}-TUqVQNTC__FvF9fp;{hO_4M+b{vMW3X7v?5T6b?p^@z#pY3W}f zt5-3qUd2#-ju|bqvhbK7=}%G^Jm{i#@$@-3GQn9K+<9%?Uy21oa1{HTxUtYb?=PV7x88(2f$a;kxVr;g z^=W|i*>ln#n4!q&#jhbAVy>IV-`|Jgui7pd?$7k1``|@igBLYJBge^af>Yazqbg`> zjqOC$ER{)q^z+a&D0(kZe@Qswd4{j}EyR~Nm@-HbfnGe+r=wc8x?}irDNd^5ocatp zJ-dhm#f&5zk0J9%Rp(6P)TS-{&_2CJm!4);m)3T=ZbIj#sos5d;`u8&m)>xMjDL^E z(O$+%#IL%H+I_3a{m++C=`F|qYAJVus#xj!&-XIv<;d%=<^G3DIiKUt+{>(d7ot>M z%l+4*LJbPvY2$xzFOwJi0|Na|mU0gUM^VT=z&bLJtJiY$a_N<8xqr8mqczb`;Z4F& zxN3Rk;|s7*f(I(pzn+L^d2^}tzqDBMS<5)Hk@PGBvUj8TQI{yT9M|rkPmx#N-C;Uw7i-V~Et`aXH&Pw&_2Z-F_^*6Ajet5QuORPiT-dq!2<3oSWC7a?%2 zNRH{Gyc)0sRfM^4cZ)94!56+lsDq{0nMXI$l{doRHG`!*Z?n8`_h~5~A@2#i$bCQ_ zE!}3^h`TpL2p!9q(UUF;kjA43VW^7&AIpmZ%aJxO3LFIi)=e)W$5;S=nTL9dNdPjS z_^DWFx8IBl+oiY;;nX(}pL+sWaY9+Rd9w}`;;yU|MxmYh4lJ{~VLd>y>>^p{TF9Lw z3sOe3Oh(E}3p=GOxFceus!IzyK%m&*dPEbdC67F~6lOc_5s?|}2Mu(xir7<}mOxu5 z@%K^}-pkm+^VAUyDgHe5_}{HgiAAUAm8DoGU`2+De{{bbD&JI!t=RWq0El1(ZT70X zNS_>y^0C&7Cb!cBPUCLoE|nc4@0^H_Yw?D4={;zD6NVjLbjhd3?y0W!jxarAih6Qt z8S8N3QssT3Q7VsfCc9SQu}Snu<;8VB!&6ig&nJ9@UdV?-xXOvxABXcqGwo+AaVnM9 z&r!s=irG-SzHQWV_S4r-+-6gQjiC=0tLnU_cq8Aqy(sXDTDIlFXr|G{ugkdT zg$QnuIrU$4daPQ4XnP9j3eDsR@}kKktdH^3jvJvlG5YU#1ei=2&aW^&0~j+)jJkMg zyf_}$Ing~&(hB~k@!(k(3k^zK9G|DpNWrQaB#5D`dH3okJc&^W@so$=`!0{ibLupZ zA(BTCi|mpjn@+qgjko3v<D=YRS<5f8|vU z{>@Pcq*l^J|IJETS3P<^^=Po4&D;u7yxcmJdxW&)r7sO&vFXd=wS6yqjQBDvh(q7- zI~Ipbdb2O|mIB_l4b21}`L3V&x|w;=!`=nP4JT_GmUfm7L=?&mZ2L^zJnqCky1j4O z-!5VA&YOlzPFYs=MwKaBx3cHKxG_D$hvE?~jJI?f&E&qS?$yA1TE*Y8`2^;Ejdb)bRpFe%>6H`UHdWkShet#u#QzA~dvu&M zRif1EXW11aoASGKcBo$;=eGKDHh+rQ(3c$${Tnio!waR zbyvQMv3n~Pb>}IJ4HoNr@bB0#vFs-PWz8+W;d5JxIeN+9f2(-zX8w00`xQge=*ycQ z0O$*w`v4yTJ_Y;$_zfWT-pg}*^v%on0rXzv5dggjIWqy@9{{`tptl|G!R@<`fO9$N zyDRvt7=YdLYKrivtNJAbV4M1OyYyhCw@}>Zqd%zcP9JE>(-t>0i{q%6n zr_DmDi)3gHsdJkzsb4^>*Lenx@X&SwF zv>I`Gi)b2v-V(YAujkM!I(vQX&@q7T@L~(S+|r~27=q|^5YY=NVNjC`&;rmB&jlR7!TJF71-)h-|SXy+Tc+ z&(_@mpzC)t#%LPdt9yPB>;zC}D2%KG>IROkfvqUkG`f)06nXT$xW$0y0BZqshw9a_ z=$5hQ|8C=;@~QZi1Ay*5Ma|YUy44f_>>r8GHUXYT{Bc}3qDx09xIRNSbzTC{r`NUu z=ArB%09~y~o{td%*trm@2h3cIGDwdC&`pYksDnOvRsq=L!=DuaO{25tiQ_em&U7=D zY8su@-UZ@J#G3W(_qJnRBtcL04fYy{v@z;pn81Z>?1OwFDjSdv11Ly>yFKCXU%tgRokmp*VY4km*Ue6b37o|Wi-`b?I4 z4VYppX2wReY?G!9sDwZSoADhJK)WqaBXApmqrI*z*k7VOrcrOL1QVEqSSFNe@&htX=pU5L}t z^yd9=NXWYbFaqf@09v)Z1fX@;1^}(I27UyM0=_z`X|%Rzw)A849f*em=)*(r185O& z2$j*7g;oLR3qt1s^rfH}H%7_aJ9wgRS{nRbx@P}=1m&Smq0iIsZvg9e5_#K?<4dLI zFh0Jwa-qLt5DhRGumWKH4k3Om`i|hyA21LAyzeT8R}e`22~=wRdWA4}3~}q{g;2Ku z9ss-$A|QQp=kf`t zmqY!%QJM9-*G5#$pO5?iU^(C{!1|p-e6%TeD4*-)Q-jifffEN%!?gQNPOX8s0ni;V zA7K3!AZ``-8ilOi_40GUv>Tv1Kx!=Ye(n*U+{+sYE9SW}_S_x3hM0XH9~?FP0-6YT z5%5JtoBQ}ZEN3+wLIr^S(}+D7S8g;p9YFsj!Cv&mK0y0l(KlF#dYtr${J0;*j{ZEk z27QXY34lICe*-|&e1LDM_8ZpuU68ul%<1R42eCp*fkPwlNq_E&qOZHW33v;zv*Pgw z`LQtm=0I`p5T58WPfKEVE+q5S&V|Lg5|5Gwa_vWN2=|AN!^YJ|>L)h5}LN z5$u%|QSscmf3#@e5$t~yi1!}BZI(Y@G)Zq!^G}w7tcf+6G>W;c-c1h=dvIu*HaCnO zS|HvY%5T8`q(d!l*nN0$(x8oJLd)5FbdRr9RJ_CCvf%twL7YN=LJVh*j9H;USXEtx9H~8U>El+(mN-@HVQ;dAD@pv%JQ}kw~du7QXN|+@oJ*WB$)|$l#YYc`J(o#sd+MBPU; zWZQk8mP269(|kG1s%aUYPK|-_q>6-jJVu)s}xb9vc4ll$#JX34?J&^AN}e-L;6vid_6b M2FXx?j2`;`0VtZK>i_@% diff --git a/records/wasm/loops.wasm b/records/wasm/loops.wasm index f1bddb67331e0d7f32c5290b800b7eef9382627d..16db7f932acdfc006c0c013215599d0778c9d4f1 100755 GIT binary patch delta 22514 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 K+W7Bmr}$q(f=2KF delta 22262 zcmb_^33wDm^Y?Vm&SsMk5<)iQAYpR=Nq__bgj-mVLqxm)K}AIbHF$6&h`fZ2+#q7e z00W35Dq?~`kN`mh1-ybH!~;YDfmc-gUJu0E*W>@I?&;YL;{SV|@A>jjz1>yS)z#Hi z-96niJo9nbvEyM|K4k41Hn}1LnqQ;jU>2pvvMFVh*u;hoR9KQ_>injhJ+JYZT#LM( zu>kMK`(->_T3V|4%c_tTW^pY_b1>!t-jV+tX1>VV@a0wJ8J-lgO0fA@0oQyk|Jo`u zQcvfVRc4+ZpR``m!a&%&kfaq#uBs~YHjrzA_1++PZz%b-ApZQ4+8kGB#?IH?YGg28w!)m_9?R>i%+K8&cte%x4I9F% zs?D)sN%T_^HjM9;CH#CD_8~iM?(?*6vSo#69G!dquzA5VidUA`4h@fDY>RnQL`q`A zQjn$P3jLnKm}kkVKIT7fmPPd7m5-UrBI3+b5vgpi`Da8Q$m|_?GxDngnZX)r zKaOk&;|(?7Vq6&YxaSy-&0CNn<|d6Js0mZ(FN|s@i<-XvPw1m&BKIR#w|8aX90pWoB_w zF0U*T%D$L%3om;NY9zRH|8ldobMm*GEw9Z;O{Sl|zBd`_g{99x$()^8j)J#!2jI;9 zZTu+AYcrAa((>91Sxa58(Zd~DN0u(5-W2-s{Y%UjI!xd@%WD&Jm$=w3=7#*s>?$!(Gf4Yt4$EwVM-7gaiUUNa~a>V z%p4P+8F{{3HWKDPTl-_rdS+L6zxR7^fDL_4GKibo7eZ_I_N_Na$l?J7_^I7L;4RJ< zR@E*Y9L5SxlL77F%+|G$el~ePl;-2vdRAJPKa}bV>!xc>SY)IhqTar;YrkWSs}4^K zkEA&Bg+m63@RvOnl#OAfAmNv5-Eh@mvsU32A z9w+L*?#OArMRYsFNLAJ5&O3x9Puy`YaSa)lPd~H9i2+?ZZV;m5?6|uLH|)+W5MMt2 z*)EO7I7W_fb7zc$u;eZhaDG-$K!SgLtuOEpq1TiK(b@iOwQrSrc;FW@emajr zMEJEVzH<{5^(ZWamj}A>*QkhWY3W>;Y_Hah@0J+M$eu#~q{;qc8;@)>rlupNL{&ey z3;03FMA@~Jjr5n6E`*?lO>;}NE2EfSOXCt1khqEdkAO$rG#4ZYwgO&hORm=a!eodU1-vziS}CcvNV{&8qza_V?<-7q`AfNZ&0HfOI_RISOc6af-Bp-w z8%QAs7p6nGiKxV;6mYTQ^0?>E#oTSU)fn+z{SY=bSa?F?<(|nN0;Ors`o5)bNfWu9e1Hl*+#R~yc8l_Hg6z5S8dLpmzS#ygPuy8A!O2BS=^JZ4WhBb zj5^DwKR7wvT|hNIop+5b5;HxN{lV-zKb;8U=J(F|!PXPDIY-$hQIW)Rmh$Nl1EQEO z;%+}L@|V?^2j&OhyjL!m532d@f{`4!?1it<&$kQ5l5*EC$_B^GMU$EdS?Mlcm~bX) z^N&S$H4#|o2UGoEPFfrXE1B~bXGRGNNsj`iZgHzyg%4waB3<^9anp2KO#ZL2&?F=l z{y7rNE|28t*a&x_R*5d>3f*r0yGJ_)L`(|xeF&CoqR3WcW`ReZ!r2FRP|*mIit3Qq zg=k^;U|@r}{4le}pFXo8HdXp!ak7bOwh!b9| z0uep21JTDt1iIi*Ft~6rVWw+@!5yQ)kZ$Z$X@DckI>TIMzp{COiyF98q=#d>;@7fy z6&bD@*RWASNtnAE_h1~tF=ZD>@;{D>GCY_w3)5V}{$T~&ykgnlSQ-CmF69mg<#o%F zDWYFmHYKL42F*fo=_&}-KIN?_Vs9-!(M%YF!csUF9Lc=OOl_h}1Z(|b7Mtn(M76ov zOr^kn(QHk1Pn)mh{k>JRlWzDKrYU_|QM!)JAi9G|7#b7{QF6JYfE zSEoda2@=yRBL?*7;Oh0tLI`7Ndm$v9!9rYEh)WBhC@oa6#u+WEXtuP%vCymGu6~c(vUBFDX{oHa-VNc?;rx1i_iXuIPkGudaTx916%_p0Hra!Lh z+reJM+yj%SdKPbz&V4SS9*I)+4|cN;tWi<1;h%aqwQ^>RttYh)<!NaLGE4ZSzT2Klt)2VaAy2c?tjHKm!$15{@5;<^+j_Db zbKSN?lG0?2d6r2iFm`td6L= zMS4!8aXUuFP{Ur*0BO(FaG|*UygZdKh=qRmC|mn zwiA}UJwnsQMc5s9_|+VcYDD^>VAEeC~DV3nD!!((u;_-&LezUnfNauTuxA zUvG)@4S~NP($qJIbI2RSbGOLv4N1Qe_=q>g9%+BG<@+g4I_mvw z*1vZ4`_FhH`md0d@xwCj#yQ2eq@ntocb=fiWg^{uVi5AKlZ5GblEe)Y`57YJaI#%1 zlGYD1;1n(fMGJ2g!U zO{rG#D?*4sA7Kdk+>7Y=H5R57Bs%FR=MdB>#+E+1x{jF5(s zFh&HnzODhFKZi1U>Z-^<+z@bCw-jqZZb;oTusi{;7VYSpSKP>2-L#;IrnLeV67&k3 zaM6*UBR&~!Ix$4V4`3wFrM0SHxj$s5TByEZMFUIl43-_-w&FYrcgn(k zD~2&|;B=1QdkYiI2(%#vD-+TP^gjjBwEzl?QN-_CXc~cWrLa?4bHtFM`A~_#@Cw=s zpbbJ%2vv5GG<`b;?>N%}vdbsEnns}a&l2kV1_RzCYqE+H5Ko|I38HIkqNaIJR_-$p z+7NgSh*l?p{D;&?uXq)L2=tkPc25#Ck~CI9nl_;Q9%tU{J#t{Sf^{_(CNU%z zP=~-%FNs4lH7&}T6wcyq+bYd@Fdi7y*F(vgM&OB+?8l+qJk{)1AQ0&JvadHo)^b(z zI0yuud{NUi);i5GW;29U&bMBvvlih@3jM3K<=#+<}@l zTbb*7=uM!APxsff;nsK;Yo?U=b%3TVlI>^}H$edc#eNJL!bcrXdJlFYQ1q`ZqF;%q zBv5pAB_=KgUFMWUH8R zx2EkjgdkQ?gUN|Nu@*wkjY`gsn0yHoF$>e!9*?N0RkXm8L!gKs-=}GCcSnB@j7p&B zo|OBslb8OkS7f100!3YIeMc(RWeP9-Ws;^%ms+rj&k?f(x=lPhRMS2}c)*3Vid@Xl z1WL~2$&KA^6-JLh(N}~1fRg+a%uAq%O#>KT42jc+lkk56#SlIPtEH^XE7qYVfg;Yk zsOe%@jzH0?F@Ttd9pMphNdiTGWw_R>5koA91d8FoKAN@|A%c#>Dv(5=h`QC+6CC3X z=m>^c+URNYpFpvOx7RdyhoeXa+91$($ocj&I7g@zE~Y<_plRPJ;f@;|p~_=4eHv_p zk(OGn$IuYy4N~-S3^}Gfr|EyeK?rnFThl*BWh`B?aypm^_*gkB@3%UJGq0yyPRh?% zSBGQzzE(KQZ-#YWIOcDA#fWrU%_0$$hh@c1#f_a}DOw=lnneeR)M0Y)Ig73!Iek{Q?#$q7cUaEM8gI1h8=K2`G*h$Qf| zm2GARa9Z#_l<>5Yh&<~&^z&rM(jY4)5(>T|CG`gL870Xv$p}fLhse;mJreU4fpW0r zh|W-YC1?bSPW79}nSfV(3~wTkL~DH{OJH@@o=DcxV+yBnC0b`9S$EdjN@~KA*a@p^ z6PC`VTcesVydzOJtqEJt*-k4tnk{Cj)`n=78`icIsyENEjz_aBHp+6vusqh;>Jq~` zHk|^})u6J%INdwNni9jZV@EzL_YiDRoSsyOE$VS=Qw$r%9I@{>eq}FC3l&FjTy@EO))Yr5JzI{FyioDXB}?F65}_4VF}8qPY|(9 z>v+7;EmsaG8E;+H(=0_pm^iwVf#p!rkIAu z5wGTb3EPj=gu4ZfIfc05mg8ZEFbjbR0F$^4nMVY>=G|&_YR<+5?uDoh#B?V_U51HV z^Bw^T-mWG71k_DHC8i?~CLrTI3(^E44FzT@k)|UPplX`;=J}e|nuzOxTT1Nr1B1xb z62AfFafLAm(*Vr2XbqkUz6Dld92?jpZGqiUA9e_CEal!Sfe{_O8<^(60GGQ=F8Yac zF*~Ib*CK0G9J{RD>T;ZM!J@5Z0hw5eXjx2DLbpQ2#5;hoNQO7bVqTUM*B>UsWU3{) zV3&h}^01ZXW$|pbHP8#6dE9!y%MugbgchmbORa~}Y>*f>NJ+3Ny=+3$=?iUFYKYdo z)2+C8)|y3FJ>yvcd~R|)i|;XKk)}OL?Tm-*i!tYVR{=vSTjDZcX45RJc}Fb9=n`%Z zaLb6R)Y==*;#&RyLU$sB!Gh0&keH9mF5*bB&d0Mg>>cZo7VKg6uoacSvg7j0>~4L4 z=sQml=v`qANnpvWxiukyb!83K+60!?ZxNJ;je!xv(16IaSDD2sQ>8M$tBm^*Fn30+ zvbsMK*z_>g-s!oUA;Tjz1}(Db(d65j_jRjN8uP|CTZw=GBDFIS=L(|NXWf#< zdc@BJtq0LIP*BW^z6#;xooPLn#>lbCRxkU$(wUV+mb92Lm}s{4F`y z!AJo#+d+ia!gNEVg&=L0q)$Qe7F)g2*|_-et6)i|-Nmxq@z%CUc+5Lo+Z@&9@3OSWehu z6scL|b&qGTFqS-Rji!NDi(iV_QOqn$W628e6KhWpO<+k|qaZMYBigFOvNl*3OZe7!wl_w`ZVH-0CtCMJEtKG~M*6*#+%)MX`&8!21 zFy>a(%xy0Q&S=c#~4lIecMEXno@DPE7YzYWVwBAPH=Rf=u8SH&dgja%6k zk+s}v(H4=l$LiOXCG!7PSU0z2x4?&Xwq+=i<8dS?s|kvE}{oSPD1aTq$?* ze6zK^3(LVQf4U3i*A`M_+HXEI?s%U10&Mi)1^j z^vl^)_IlmQ%h_@dJ7~4LinV7)>PB6~F7w1r!Q@KK9D5RLER4sGSyeZ%_Tg{Z_>!ctY>#?z`jghoX)M)yj%ut52p;5x$fvE%)7aF&!&rgz45>6xz{&=m-i+tNA>IA4f?Y>Ga@36av!h( zfi4dRIz`CLisj>_3}K112-`gAN(3ET5pQgSXOz*)?HPh0si>$l;);y|x95UBrby55 zxxx(Ht$(lec5#g7qk-9OeGDJO+R%^`*@tvgAU2`s*tXz!P`m%jHp|Gu9)ZJ=ST$VBj1T3>$3+M#-IbV0C8f_ zdGA=kbEDuP?kp$gcXEB4+(eZ-OESSB9^*K^2st_U|HU{O#`XHVz*)CGzJ@rAA^LbRpvf4J@t$?S z@o3R8=z+sMoPX?Z5U#Da;O!77b7YfGZVvDs%*fVHHQ>!Jlssi3YeWn&2787GOpOuY zkc*7L4*i}>((iHTiaua(TScmyR3tXQjHl zL-Ws!@IFSO=R>#t0kjGB^k>v#}5F%%n(ITW&)Tj;H-8>jPSo037yE@(l=3z=-I^xv-E5|<<&OSH5 z3z_~q+ClCrk>d%9na(_IW~jrv65a!`BjSPIji7VW?8C29cslsh-vmA*f_IKJj5%(- zZYIBm=?8Qla=C`r&Ov88H`{3L*5A@$pdB-Ldq!F0j?ypswal$=pNUv<>#Yw0k?ZDz zWA$w_i*za(Zcm;O&-*~Y)|tWzhpdDWmJ+C$S?1P{lgww(W)wo7^3ToWlbMlD1?0<& zBs*7R#8b{l_lyGGGeH!>+@@Qvn#pfr`Z3VFZr&ZuJd0+qzI>#^?OO?5Hb9q;^-)F= z&xqA!VM4&j_SDz~pAohT8ejn8YgX0oTk$iot*e_6t_8IABNj_#i;@%Vt(Eh>Cjl1mxmxlEAPrMX1!;Vygmq;0xgD576X2xoHe38)wrP-7d*d7v#rJ@pc33pF0nz_*v%p71vH=Yz0 zP1g%Y!DzX>mvTM2|Is@zBPzmEZx}oaHLimR^U$;F_|*&X7ArmvF(J1*tt9zF>2qyJe{k z&r@Saw|Z&}+o~aK+(*&AV_|-S(?VY-H_OSjQ8{NM9Nna2@g&i-d?Kr+=Pc}A)T5Jl zII-|FO)A+)dYGd7Lt9G^)(Z4}K*(4Mi;UvkNifY~bfKvKn~Bwd=Jd6*Xja8^^aVXs zuAW5?R>&e(WdC~VDI+IuouYyy*pCoX0@5rQs%KnSRyaWr7xeYPjrquVc#tZGlyE^i z21hD5dO=s}61arGV3oWOLtH$#bU~`R(N*@Mog>T{DSml~2;uRhGp1$R9|PG=oqUnw zO_lf1C97(nmuz6B!`xBj{>c@{3Jz1yMxNQKWf|+j|76Rkp`O1mN_3&y*ekBMxJe3E z>J4^*ct(s8dP~>)$aX0n8-o10F%oUyUKh_V(iJ>dX`nK8)wX3qC%XXx%Udba(3P*M zSHlA#jT{{=DayYMPB*-YcNDdOiC;E>hlwKrXzqxm`(B$BTU5ad7C9xQOBLFLw3Vr1 zNv!+i+UG+Abdf_Q>rvM_J6)4G5v&2R{h^y;)o`Ay_l%f;DG)rpZGD}g4tl)fQ51Hz z;jj~uIfs9(kR^h}nQClepqSsM_=9tv2M?QSp$Sfj(;dcO06BB4kQa1by53e+my^ns zs&?oy^XC24@Us$`4t#Zc^ersw?U@WDW=}eIe^}aQ<_~*)f!34Ug)JBQ>am<50nt9IoI* z>i9mMg6!avGHL(e5c%DzAHfYvNH2qpIyEj5Cy%No;pyGzRPp3}(gVcwJ|SSU%Q?uU78uX{K{vThhN2S< zP7fR};UiTq{~js9_1%ei9^A#W3C3UWpwt;JwNR-RRb)D?a7U(K2~L-*hd_TiI>mY{ zmNGg(ox|jjsW?qVcj)*uK!qZa73dp-EV&LA!%4i2S?e8Kjg#Y}gVkv@`FkyLL4~EM zFMw?&#U;JvqZFnC0MZvzi(&EG;a7%0I#pgnI<{0E~a zNOopJ`Itg$ry7lrM;Iq2d8TTd|4ZeZAW*}{9S7#lVi*W!opnCA4qqHJ9xO>J*n%25 z?)0~gUrIlRTj)ps0`VZg-WOmHI@e7a4?`Hwx(i=k@F=s27+D+Zkr zw;`&g*o`!<$?e^$SIuYmmdxo%zU+y3z#T>NFRlip5>B7QTqi_26O2;E;Rz}*+)-ta zlasS0k5LNHOK57amkyC=Tk2^T#{Z{)A1%T9i8Um;dosMJyCzkajxv?^BK;_)|8ad;nM%1 zgRqq)IB&=K(-%}&UBaiZMx%MEmIg=1JAE(T88 z|G#8^aYh`iBu3Ib=^@L%0x#C(7bCw}XELJ64D=42egbBQiSUfZ@tG%9&fG+!SLpQD zK!Yx$aU_lNuU#cr72Nt8_W9&pZvDj)tp9J~JP(;7%1Fc0=`_7%r_V!uuRNXpb!Z6= z;^N%;LNeAbC{WHwgf)Qt3D&?l@M2(E)8Rx1v=cn>T-WHt69@HQSiY4kKCoui1#xuA z)2P4p^-!#>fz^%FY+yXefuDG7;ANj;R%c+m@p`pas( zFqXT5V@dBH>Z?IRd&8mGXLQ1jBOw}zv%>Y)!SG=oj3^xr!!8?%bhN}ah-?dG6!%$)f2}1 z06ZAh8t!W=3ozGiYU{NU53coh^IZ9KO`b>ZcIq3fW2;zNASZzQIv3+&^NN#qisO!i zd>Tmc+60Z`AUX|v8FK(;xY2TDB{aR;sed4cFtfRl>{+30n~2+B2@B%Svv&t^i^uXJ)1L3CZOfi zby&+HqFO9i4ceQau{nZdgwepQs2f(zM(b>FT~!S$b+P_+*)Oo+VQfp?texyP#!Ty> zU3i1+nL2A1>!`E3y81n=hOu|*ieJIoN$ewQ*X(?OKq0>GcJ3IToXWm>n@vvz?i;AL|F^ae}-K(D;C!mBLwomPJU zz1DIbR~)6FJrCFnNWxk{FNtix%NX=Q)qDWGnDGqWtJnaj1#AQC1JJt`E%5dfy=T!1 z3lF_kaTY+YRIG1~qd|I$;+Hs0qmP)%&^Wz6FdVm&^kvdL0J@*Q8`tP`^}Yo_SM6^B z=xY6{OuR-47!9Bs&5v-yNVkl)W9LBEhu^k_9OUl2hb6BF*c8MM(hTjj&gq+`tap10Da){8-UI=ts$C5U#*-DAfdy{TX3jICzIa*=%bVN06J(qaGR#l z!C~Q@_z(f`BY-{}i5{~eIOH?5K_6_m z@ytuly+2RFJH${T@Xk<}AB9QSL(>CS6@=0^6>|Z!XZK*Y(-g|2186f|44@AmRsrY( zhnE5PkU{$ZKwD}2#|Ij1M5Dk@`@t1d50*^=(02yE0%&7*JBAfIvVe9L0_iJ(0|44u z?JI)Q06G@Kq2L>v0l%SA1e}z1B>e&Oe*YB!+JgiDwBN{>rfIZqxPY~+=XB5jw0OV% zkfzb1`L7xHya}`(z|oqPg`uD4?u<9@F~;<&d@djl&=WutX#hYoXA0t51rELF{wxJf zav-r8VhB2`zq`OTcsAbFU5u}70P1f9a6RWCAWTimU!ky?wsQ`?F#~)ANSqtQ)7#;f z;@<-NA;1wy5ByEwMGS&Ie0fmt>mdTZKwkZA1<%WXcLB{q6r}gX?^~d0ZI>YqpuGC~ zbUsFT0Sw~-@t+wQ(+@z1`ujx)kn|+TP=7h)_#zB21n>wz{f%6RH*8_i!+#sZdi$MvX#Wi~s{Y<_2#xW^8q7}s zFW`27`WuV>D(9c@)S)iIwroMC1D#u*bdkQFhEp)Zsb*kTd0El_fPmW z;CT_S3-IeY%l9rzvYNiny4U@77;i&I{bbQQ+E^F>H`cX!m)*?Tq?Te90ptMu2%Pz_ zK^cI)mA||aGZoR=iXB+ zhhLv_$(NI#J;fg2cV3cK*Y-4Cu||DJ^;-9wVUMDPpU<$?dcw$Alcqc{?pi?Bh%4_e zD(KSQH|(B!v-^oA+BE*pR_K3b$pb2H(v 2, \"b\" => 1}\n", "wasmStdout": "31\n2\n[\"Ayşe\", \"Mehmet\", \"Zeynep\"]\n\nfalse\nAyşe is 31\nMehmet is 27\nZeynep is 40\n{\"a\" => 2, \"b\" => 1}\n", @@ -279,8 +279,8 @@ "path": "samples/tour/tuples.iyi", "sourceSha256": "75f2414a08f54a9d8ecc53d7b0621d8c4906a3f39d9a673dd1b8d2f219b4856b", "wasm": "tuples.wasm", - "bytes": 127759, - "sha256": "6056cbfa88e63e5d611ac94fa18b401da1f24eaffbe01f1a4ddb644d73cf43f3", + "bytes": 127580, + "sha256": "c2379513cf5ca45885251791e09dbcedfb7566613f816a4a33a1da1c63d5b6df", "exitCode": 0, "nativeStdout": "1\none\n1 is one\nAyşe\n31\n2..9\n", "wasmStdout": "1\none\n1 is one\nAyşe\n31\n2..9\n", @@ -293,8 +293,8 @@ "path": "samples/tour/blocks.iyi", "sourceSha256": "f2ae3fc23344a9f94f896942b8609956979599387e313e98d49cb4977ba9dd17", "wasm": "blocks.wasm", - "bytes": 127866, - "sha256": "e01d093cb97f30a1facc40fba0d44e3dd6898d0656431943b26f953fc7efa4fd", + "bytes": 127703, + "sha256": "af559636ccc1150e88aeefcfd273139e64560d977cd409d1d394decb65fae22b", "exitCode": 0, "nativeStdout": "step 0\nstep 1\nstep 2\n6\n49\n2\n105\n", "wasmStdout": "step 0\nstep 1\nstep 2\n6\n49\n2\n105\n", @@ -307,8 +307,8 @@ "path": "samples/tour/methods.iyi", "sourceSha256": "f4fb9b8be821d24f79148d110edb8f6bd36239bab164d7be45bc4d3da29eba7a", "wasm": "methods.wasm", - "bytes": 161051, - "sha256": "3d85a2d848d5011a19920b4762269a04aa7bac800a563275d46ff1264cb055bd", + "bytes": 160906, + "sha256": "821ecee2fe4e090a47bdbb893fe155856deede021eefbbde1d7a47304784c8a0", "exitCode": 0, "nativeStdout": "12.0\nfalse\n48.0\nIYI\n4.0\n6\n", "wasmStdout": "12.0\nfalse\n48.0\nIYI\n4.0\n6\n", @@ -321,8 +321,8 @@ "path": "samples/tour/traits.iyi", "sourceSha256": "98aaeb457da3a65d50c3ce5402f3378e431010d50122396f9a353b4d958fc8a8", "wasm": "traits.wasm", - "bytes": 160535, - "sha256": "1dccca26c8177bf515393a4db94b2f7fd31507fe822479a1d9770f0315ad9497", + "bytes": 160405, + "sha256": "83fd8dd9c69b9ac870f02af15fddd21908bd5d4ac1016ede5260235b2391e169", "exitCode": 0, "nativeStdout": "3.14\n4.0\n", "wasmStdout": "3.14\n4.0\n", @@ -335,8 +335,8 @@ "path": "samples/tour/dispatch.iyi", "sourceSha256": "e9a5985790ff7c52c42846b394872bb18ac9040abfd59e9453d4ac71747fcfb9", "wasm": "dispatch.wasm", - "bytes": 136069, - "sha256": "00325eb2fcd4ec3a1af9143c6ff51df4bd1ac9c171a583b5d1b8ccb0ec9ff530", + "bytes": 135890, + "sha256": "14ec898f10936049a2728dd6d26146f59eb1d41bf85d4888dfe99a4ae29d88a9", "exitCode": 0, "nativeStdout": "hav\nmiyav\nhav miyav\n", "wasmStdout": "hav\nmiyav\nhav miyav\n", @@ -349,8 +349,8 @@ "path": "samples/tour/defaults.iyi", "sourceSha256": "7e438eff3837000a1551861b7107a2a4f7f6f78988a283fec3174429a1f20844", "wasm": "defaults.wasm", - "bytes": 127100, - "sha256": "11fd75705a649460a5e68bcc738382a79b12cb33783069f7748d6aca563d3513", + "bytes": 126953, + "sha256": "5a8dff82b106a9e221d3a481ef20310fafe57dc8d3a7c20dbf72942e556bde9f", "exitCode": 0, "nativeStdout": "Merhaba, Ada!\nMERHABA, ADA!\nBEEP unit 7\nBEEP UNIT 7\n", "wasmStdout": "Merhaba, Ada!\nMERHABA, ADA!\nBEEP unit 7\nBEEP UNIT 7\n", @@ -363,8 +363,8 @@ "path": "samples/tour/unions.iyi", "sourceSha256": "61cb534c8687c14b7392657f859b165eb063dc892ae64429ccc59dd241441466", "wasm": "unions.wasm", - "bytes": 135190, - "sha256": "1b1d08ebe15d3c2adec4e4efd232cb05f7fa75c3c9cdfd3b6b9362ff973e4627", + "bytes": 135017, + "sha256": "99383b5a7eb8432ec23d4115aa8bb96183b29027c64cc354e537f377a4402d83", "exitCode": 0, "nativeStdout": "number 24\nproblem, not a number: x\nnumber 14\n6\n", "wasmStdout": "number 24\nproblem, not a number: x\nnumber 14\n6\n", @@ -377,8 +377,8 @@ "path": "samples/tour/errors.iyi", "sourceSha256": "af4c28f720136cd6c8b935273fa769fe234b55716da4abed70196e56d8b9faf7", "wasm": "errors.wasm", - "bytes": 160371, - "sha256": "28f5753b1b2208e441777f7725c79c5edabcf1e2fca60a5bee643785aa926dd8", + "bytes": 160221, + "sha256": "e424a6f3a64e545cbcb717d3df919d36f5b4f8f45f5c53ccd2101968facdac48", "exitCode": 0, "nativeStdout": "2027\nno such key: missing\ndefault\niyi\n", "wasmStdout": "2027\nno such key: missing\ndefault\niyi\n", @@ -391,8 +391,8 @@ "path": "samples/tour/strings.iyi", "sourceSha256": "704f192ecd578a9847d911563129b559b5b04cc276327f8de24fd1502565f542", "wasm": "strings.wasm", - "bytes": 160621, - "sha256": "c48fff3f2df3aa6fd46e301aa0944db7dd8b51b5255cfccfcb08cc63125e875d", + "bytes": 160417, + "sha256": "d7523ad329c72f4a8513fd83ea7304acf5a54a23eb20b47755c6a665c1a7f678", "exitCode": 0, "nativeStdout": "10\nHELLO, IYI\nhello, iyi\ntrue\nHello, iyi!\n[\"Hello,\", \"iyi\"]\n2 and true and [1, 2]\n12,05 TL\ntotal: 12,05 TL\nitem 12\ntotal 99\n", "wasmStdout": "10\nHELLO, IYI\nhello, iyi\ntrue\nHello, iyi!\n[\"Hello,\", \"iyi\"]\n2 and true and [1, 2]\n12,05 TL\ntotal: 12,05 TL\nitem 12\ntotal 99\n", @@ -405,8 +405,8 @@ "path": "samples/tour/generic-functions.iyi", "sourceSha256": "2b0ace59365d9bb35c904102d1131a95f5787113ba585975a819c6a354666e7f", "wasm": "generic-functions.wasm", - "bytes": 151699, - "sha256": "858cbbd01e1e6f1a5b490b2f4b83c20cbc02649b8c5618eda024760c5f846ca2", + "bytes": 151511, + "sha256": "f111d27e4cf2575ce8cd778c4fad28469b2b308cb50e4c0f390dba5f8fe290e3", "exitCode": 0, "nativeStdout": "10\na\n{\"one\", 1}\n101\n", "wasmStdout": "10\na\n{\"one\", 1}\n101\n", @@ -419,8 +419,8 @@ "path": "samples/tour/generic-types.iyi", "sourceSha256": "fe5f0b5626ef062f7af44196125d3b50d1914788fb1416d980d10e22f872aa8f", "wasm": "generic-types.wasm", - "bytes": 135597, - "sha256": "0a11fc1ef4fbbd9c159cee034d0086ee874a84e6a4f19e83ed62e1c95c185f9b", + "bytes": 135418, + "sha256": "0563fbcd284ece245c11193b322cb433a6ff1472cc9a102009624d6698e04f3e", "exitCode": 0, "nativeStdout": "2\n2\n1\n\niyi\na stack of 1\na stack of 0\n", "wasmStdout": "2\n2\n1\n\niyi\na stack of 1\na stack of 0\n", @@ -433,8 +433,8 @@ "path": "samples/tour/bounds.iyi", "sourceSha256": "cd5324bcc2756eef8d4ebeca406c61ecf12cfd5898b26a01ec8fa4fd1ef64d26", "wasm": "bounds.wasm", - "bytes": 129541, - "sha256": "073f84a1a4f1aa838ad40a6df38051c8f30fce51553a3f31a977d2d976457853", + "bytes": 129394, + "sha256": "8a8597464a0625ba034b5efea731c14bdb156d67f1ee8dbf510bd187b69008c7", "exitCode": 0, "nativeStdout": "200\n45\n30\n", "wasmStdout": "200\n45\n30\n", @@ -447,8 +447,8 @@ "path": "samples/iyi/basics.iyi", "sourceSha256": "2fab386bd172c15319db0a4e553008d7ae7114fd8cdef72e7a48a850c301c72c", "wasm": "iyi-basics.wasm", - "bytes": 213443, - "sha256": "024d922379b0d19585337915d3847c2d8ab5b689f63a090f458cc09e8e23ff16", + "bytes": 213228, + "sha256": "178d7d42bc89b5ef3be94701dc1d7c84a7acafb7038d8e04e36c1d33185a3282", "exitCode": 0, "nativeStdout": "55\n1\n2\nFizz\n4\nBuzz\nFizz\n7\n8\nFizz\nBuzz\n11\nFizz\n13\n14\nFizzBuzz\n3\n4,5,9,6\ntrue\n1,1,2,3,4,5,6,9\n3,1,4,1,5,9,2,6\n1,1,2,3,4,5,6,9\n31\n31\nhello, world\ntrue\n12\nKhoor, Zruog\n3\n3\n{\"a\" => 3, \"b\" => 1, \"c\" => 1}\n14\nthe 5\ncat 2\nsat 2\n[\"cat\", \"end\"]\n", "wasmStdout": "55\n1\n2\nFizz\n4\nBuzz\nFizz\n7\n8\nFizz\nBuzz\n11\nFizz\n13\n14\nFizzBuzz\n3\n4,5,9,6\ntrue\n1,1,2,3,4,5,6,9\n3,1,4,1,5,9,2,6\n1,1,2,3,4,5,6,9\n31\n31\nhello, world\ntrue\n12\nKhoor, Zruog\n3\n3\n{\"a\" => 3, \"b\" => 1, \"c\" => 1}\n14\nthe 5\ncat 2\nsat 2\n[\"cat\", \"end\"]\n", @@ -459,10 +459,10 @@ "id": "iyi/calc", "set": "iyi", "path": "samples/iyi/calc.iyi", - "sourceSha256": "9844743a83b1d7bd80eceef04339216ef04e8a446c800f9c50da265442f8dc8e", + "sourceSha256": "2b2b272b47b884c709a008f99c3770c131084159e1d4c9f6514b586d76f8bffa", "wasm": "iyi-calc.wasm", - "bytes": 200618, - "sha256": "9eba1a8c39a31abf400ba374a183b7cb44cf4f502409883caba1d175943e99b0", + "bytes": 200374, + "sha256": "1f7b0ff15241f08c81554cb896711c36728939fe74e2497cc0aa3b6b124d8fd6", "exitCode": 0, "nativeStdout": "64\n", "wasmStdout": "64\n", @@ -475,8 +475,8 @@ "path": "samples/iyi/collections.iyi", "sourceSha256": "9b8bb4c0bf703238a08afe44995207bb1cb6292578a7d255b5f3ece0c2a80213", "wasm": "iyi-collections.wasm", - "bytes": 228588, - "sha256": "c27bcfda04e61f7b14dee7b8f846e2a323865e72df156a646f1b400819af1f27", + "bytes": 228254, + "sha256": "c0f9fc75f16de2fd74fa2a1b586cfc8bf4eecdfe764d03e1e947c2b7a457032b", "exitCode": 0, "nativeStdout": "to_a 3,1,4,1,5\nsize 5\nempty? false true\nall? true\nany? true\nnone? true\none? true\ncount 2\nfind 4 nil\nindex 2 nil\nfirst?/first 3 3\nmap 6,2,8,2,10\nflat_map 3,3,1,1,4,4,1,1,5,5\nmap_with_index 0,1,8,3,20\nselect 3,4,5\nreject 1,1\npartition 3+4+5 | 1+1\ntake/skip 3,1 1,5\ntake_while 3,1\nskip_while 4,1,5\nreduce 14\neach_with_index 0,1,2,3,4\neach_with_object 30,10,40,10,50\njoin 3-1-4-1-5\nincludes? true false\nmax?/max 5 5\nmin?/min 1 1\nsum/product 14 60\nsum of nothing 0\ntally 2\nsorted 1,1,3,4,5\nmax_by pear\ngroup_by pear,plum,kiwi\nindex_by fig\neach_slice 3+1 4+1 5\neach_cons 3+1 1+4 4+1 1+5\nchunk_while 3 1+4 1+5\nfirst(n) 3,1,4\ncompact_map 30,40,50\nfind_value big\naccumulate 0,3,4,8,9,14\nreduce? 14\nin_groups_of 3+1 4+1 5+0\nmin_by fig\nmax_of/min_of 4 3\nminmax 1,5\ntally_by 3\nsum_by 15\nzip 3pear 1fig 4plum 1kiwi\ncycle 1,2,1,2\nas a type 5 items / 4 items\n", "wasmStdout": "to_a 3,1,4,1,5\nsize 5\nempty? false true\nall? true\nany? true\nnone? true\none? true\ncount 2\nfind 4 nil\nindex 2 nil\nfirst?/first 3 3\nmap 6,2,8,2,10\nflat_map 3,3,1,1,4,4,1,1,5,5\nmap_with_index 0,1,8,3,20\nselect 3,4,5\nreject 1,1\npartition 3+4+5 | 1+1\ntake/skip 3,1 1,5\ntake_while 3,1\nskip_while 4,1,5\nreduce 14\neach_with_index 0,1,2,3,4\neach_with_object 30,10,40,10,50\njoin 3-1-4-1-5\nincludes? true false\nmax?/max 5 5\nmin?/min 1 1\nsum/product 14 60\nsum of nothing 0\ntally 2\nsorted 1,1,3,4,5\nmax_by pear\ngroup_by pear,plum,kiwi\nindex_by fig\neach_slice 3+1 4+1 5\neach_cons 3+1 1+4 4+1 1+5\nchunk_while 3 1+4 1+5\nfirst(n) 3,1,4\ncompact_map 30,40,50\nfind_value big\naccumulate 0,3,4,8,9,14\nreduce? 14\nin_groups_of 3+1 4+1 5+0\nmin_by fig\nmax_of/min_of 4 3\nminmax 1,5\ntally_by 3\nsum_by 15\nzip 3pear 1fig 4plum 1kiwi\ncycle 1,2,1,2\nas a type 5 items / 4 items\n", @@ -489,8 +489,8 @@ "path": "samples/iyi/config.iyi", "sourceSha256": "e1c60e92bb4150097bed4d7986dc678380776ef09fc95ff03b278746ff121c10", "wasm": "iyi-config.wasm", - "bytes": 177376, - "sha256": "a64c12afa8154579a053691b75b5aab9c38be7423a69ebf6e72669b29edb56e3", + "bytes": 177188, + "sha256": "1bfd5ef6fa4138bbad00c1b4aee56be2ea3bb1973f23cf02120e3a2f61fd287d", "exitCode": 0, "nativeStdout": "{\"name\" => \"iyi\", \"port\" => \"8080\", \"mode\" => \"fast\"}\n8081\nname, port, mode\nerror: line 2: no '=' in \"broken line\"\n[\"a\", \"\", \"b\"]\n[\"one\", \"two\"]\n\"padded\"\ntrue\n", "wasmStdout": "{\"name\" => \"iyi\", \"port\" => \"8080\", \"mode\" => \"fast\"}\n8081\nname, port, mode\nerror: line 2: no '=' in \"broken line\"\n[\"a\", \"\", \"b\"]\n[\"one\", \"two\"]\n\"padded\"\ntrue\n", @@ -503,8 +503,8 @@ "path": "samples/iyi/derive.iyi", "sourceSha256": "ab33030ac91db9cddf89e68f39e93fe96296f028f313e6e3c25afa76851aa32a", "wasm": "iyi-derive.wasm", - "bytes": 128268, - "sha256": "b5e0d05aaaa29c0218472ee8d118c58325694f2f9fb1d62c44bd54a106e180bf", + "bytes": 128075, + "sha256": "5ee7d4c53ccfd539385c501ee1cee9b79b95085c0cb6cc369cd6f56a83de7c6b", "exitCode": 0, "nativeStdout": "Point(@x=3 @y=4 )\nSpan(@from=1 @to=9 @label=range )\nTag(@label=Std::Derives::Name @count=2 )\n@label= \n", "wasmStdout": "Point(@x=3 @y=4 )\nSpan(@from=1 @to=9 @label=range )\nTag(@label=Std::Derives::Name @count=2 )\n@label= \n", @@ -517,8 +517,8 @@ "path": "samples/iyi/enums.iyi", "sourceSha256": "98b275c766e680a4adc21a3fc80c18b94e954317dd4668a4b303fcbeea8c0c5d", "wasm": "iyi-enums.wasm", - "bytes": 151146, - "sha256": "0c4a1549d7642c41f006cb74806180daf689263e36015a665e3060c1406bcb0f", + "bytes": 150944, + "sha256": "ff547c733f8e2b2c2c2c48f37781d146388f94a5c37b22c0be63418f1dc63030", "exitCode": 0, "nativeStdout": "level: Warn\nspelled: Error\nsame: true\nother: false\nverdict: loud\nwarn? true\nerror? false\nat least info: true\nbelow error: true\nDebug Info Warn Error \nnames: 4\nparsed: Error\nlenient: Warn\nunknown: nil\nvalue: 3\nfrom 1: Info\nfrom 9: nil\nmode: Read | Write\nread: true\nappend: false\nnone: None\nmasked: Write\nwarns: 2\nerrors: 1\n", "wasmStdout": "level: Warn\nspelled: Error\nsame: true\nother: false\nverdict: loud\nwarn? true\nerror? false\nat least info: true\nbelow error: true\nDebug Info Warn Error \nnames: 4\nparsed: Error\nlenient: Warn\nunknown: nil\nvalue: 3\nfrom 1: Info\nfrom 9: nil\nmode: Read | Write\nread: true\nappend: false\nnone: None\nmasked: Write\nwarns: 2\nerrors: 1\n", @@ -531,8 +531,8 @@ "path": "samples/iyi/errors.iyi", "sourceSha256": "89e937ddfc973d79b5f00c8ea3b81315a68b5c2c6cf4d1bac4172a3da1b79bd0", "wasm": "iyi-errors.wasm", - "bytes": 138685, - "sha256": "edf9cb5dd070d1099e51ea5297f54cb1260135ed6874c553029c63593777412d", + "bytes": 138398, + "sha256": "7fa1eb40ac78e8281b5e0c1bf6659568209e6f15786653b5efaed9324094d4a2", "exitCode": 0, "nativeStdout": "read 12\nio: no such file: missing\nparse: not a number: twelve\nor: 12\nor: 0\nor: 0\nor: -1\npanic: 12\nsuccess:\n open outer\n open inner\n close inner\n close outer\n12\npropagating:\n open outer\n close outer\n-1\n iteration 0\n iteration 0 closed\n iteration 1\n iteration 1 closed\n", "wasmStdout": "read 12\nio: no such file: missing\nparse: not a number: twelve\nor: 12\nor: 0\nor: 0\nor: -1\npanic: 12\nsuccess:\n open outer\n open inner\n close inner\n close outer\n12\npropagating:\n open outer\n close outer\n-1\n iteration 0\n iteration 0 closed\n iteration 1\n iteration 1 closed\n", @@ -545,8 +545,8 @@ "path": "samples/iyi/files.iyi", "sourceSha256": "aaa45bbe135b26d2c882122da7a4fe69df4bcba517a6f8ed57ba0101eda8ba69", "wasm": "iyi-files.wasm", - "bytes": 125156, - "sha256": "938f2c61da810eafcf644405d304bfbb860920f9929fe22c1fa8ca2a6a0655bf", + "bytes": 124986, + "sha256": "dc2b5364d3b2a091fb9f55e8635d6330bdf0e815e26ec54c30547d8010eb9f73", "exitCode": 1, "nativeStdout": "hello from iyi\ntrue\nfalse\nfalse\n", "wasmStdout": "", @@ -559,8 +559,8 @@ "path": "samples/iyi/format.iyi", "sourceSha256": "54f6992a74d0bff957fed60b05e8bd9d7bb16b091ea1b79e8277acd7454128bb", "wasm": "iyi-format.wasm", - "bytes": 308041, - "sha256": "d9342a14e3491780072b1038e479579ef3724e056e12fe7f56fccf1eb9080622", + "bytes": 307790, + "sha256": "127ecc49920e01c282eda220de3f44113e91c0a7d62edeefe359a70b0589fdd2", "exitCode": 0, "nativeStdout": "hello world\nchar 'A' (ascii 65)\nright ' hi'\nleft 'hi '\ndec: 255\nhex: ff\nHEX: 0XFF\noct: 0o377\nbin: 0b101\nplus: +42\nzero: 000042\nsign zero: +00042\nnegative zero: -00042\nint precision: 0007\nfloat precision: 3.14\nfloat precision: 3.1416\nstring precision: cin\nwider than field: 12345\nzero precision float: 4\nzero precision zero int: ' '\nmin int64: -9223372036854775808\nmax int64: 9223372036854775807\nString.format: answer = 42\npercent tuple: score = 0099\nprintf: run completed\n", "wasmStdout": "hello world\nchar 'A' (ascii 65)\nright ' hi'\nleft 'hi '\ndec: 255\nhex: ff\nHEX: 0XFF\noct: 0o377\nbin: 0b101\nplus: +42\nzero: 000042\nsign zero: +00042\nnegative zero: -00042\nint precision: 0007\nfloat precision: 3.14\nfloat precision: 3.1416\nstring precision: cin\nwider than field: 12345\nzero precision float: 4\nzero precision zero int: ' '\nmin int64: -9223372036854775808\nmax int64: 9223372036854775807\nString.format: answer = 42\npercent tuple: score = 0099\nprintf: run completed\n", @@ -573,8 +573,8 @@ "path": "samples/iyi/formatting.iyi", "sourceSha256": "ad90bbbd17da587770609673949d55c990aee356dda1d437ce23394231ec75ee", "wasm": "iyi-formatting.wasm", - "bytes": 143143, - "sha256": "455c2338487d1440594743329e00b74f1ea682bf18e35aac8a526ad4144e9bfd", + "bytes": 142929, + "sha256": "120bf5c2346e4e8653053f6fd893bdbe4a53cd112eb1c6a260b10a1f777d40fa", "exitCode": 0, "nativeStdout": "last 30\nfirst 10\nwritten 99\nchar o\nslice lo\nhex ff\nbin 101\nrjust ' ab'\nljust 'ab***'\nrep ababab\nnil nil\nmaybe 99\n", "wasmStdout": "last 30\nfirst 10\nwritten 99\nchar o\nslice lo\nhex ff\nbin 101\nrjust ' ab'\nljust 'ab***'\nrep ababab\nnil nil\nmaybe 99\n", @@ -587,8 +587,8 @@ "path": "samples/iyi/generics.iyi", "sourceSha256": "b3ec6ebe033571c8bedecdb4d00a5df97eeca44b709d94352066c8f215f4bbe1", "wasm": "iyi-generics.wasm", - "bytes": 143824, - "sha256": "6a8727c576c6679e07701cfd869abd86fee9b5c054dfd59b1a5f054b472d1923", + "bytes": 143623, + "sha256": "a1b5fd209438d6b5203facdf1367f96c44ea41eb75f0ab2b97d78dbc57dd9050", "exitCode": 0, "nativeStdout": "Box(42)\nBox(hello)\nfirst=1, second=two\nBox(1)\nBox(two)\nfirst=3, second=four\nada, ada\n84\ntrue\n7\n", "wasmStdout": "Box(42)\nBox(hello)\nfirst=1, second=two\nBox(1)\nBox(two)\nfirst=3, second=four\nada, ada\n84\ntrue\n7\n", @@ -601,8 +601,8 @@ "path": "samples/iyi/grid.iyi", "sourceSha256": "2f28278d0111d0ecc5c45afa5c2de9841abb5ad5f0041417dc97caa4fbc5338f", "wasm": "iyi-grid.wasm", - "bytes": 187747, - "sha256": "fc5548ba269a5eb3ea6ad618af6fcf49f263afe863eb1225e63e50b71f66cf69", + "bytes": 187554, + "sha256": "318342b3d01409aab03666c0f5dfffc19c649038db0fc0b4090f9c2fce9f497a", "exitCode": 0, "nativeStdout": " 0 1 2 3\n 4 5 6 7\n 8 9 10 11\n 12 13 14 15\n120\n[0, 5, 10, 15]\n[0, 4, 8, 12]\n[5, 4, 3, 2, 1]\n[2, 4, 6, 8, 10]\n55\n[3, 1, 2]\n[{1, \"a\"}, {2, \"b\"}, {3, \"c\"}]\n2\na\n[\"b\", \"c\"]\n01234\n", "wasmStdout": " 0 1 2 3\n 4 5 6 7\n 8 9 10 11\n 12 13 14 15\n120\n[0, 5, 10, 15]\n[0, 4, 8, 12]\n[5, 4, 3, 2, 1]\n[2, 4, 6, 8, 10]\n55\n[3, 1, 2]\n[{1, \"a\"}, {2, \"b\"}, {3, \"c\"}]\n2\na\n[\"b\", \"c\"]\n01234\n", @@ -615,8 +615,8 @@ "path": "samples/iyi/hello.iyi", "sourceSha256": "27cdcc173bc626bf84c26f468628026979b15bc6127e67594c5adf2930483a83", "wasm": "iyi-hello.wasm", - "bytes": 130696, - "sha256": "bfed0df44969235bb0212ac02af2c40bd3e58ecb9588c82fcd8ee03b0d9e5bf1", + "bytes": 130494, + "sha256": "be61bb7662c9332837aeb96a60712f324d9a934dd5b6ce6968a788d4de07366d", "exitCode": 0, "nativeStdout": "Hello, iyi!\nHELLO, IYI!\nBEEP 42\nHello, crystal!\nBEEP 7\n-> BEEP 9\n", "wasmStdout": "Hello, iyi!\nHELLO, IYI!\nBEEP 42\nHello, crystal!\nBEEP 7\n-> BEEP 9\n", @@ -629,8 +629,8 @@ "path": "samples/iyi/immutable.iyi", "sourceSha256": "ffdb52f45c0426a876e109c9e26862d43d4bbc7bca547612e8b31dc5a10e7b9a", "wasm": "iyi-immutable.wasm", - "bytes": 197267, - "sha256": "11d4ebd1d2dcce4bad066884d950579d96256ecdb018ed985c61ceab8258e7d6", + "bytes": 196966, + "sha256": "8507aa9733887b221c4c720acaadda51f0a8b7bb2855d9647e0d7abd7a7fcc47", "exitCode": 0, "nativeStdout": "size 5\nempty? false true\nat 3 5\nappended 6 from 5, original 3,1,4,1,5\nconcatenated 3,1,4,1,5,7 / 5\ncopied list 2, source 3\nto_a 3,1,4,1,5\nall?/any? true true\nnone?/one? true true\ncount 2\nfind 4 nil\nindex 2 nil\nfirst?/first 3 3\nmap 6,2,8,2,10\nflat_map 3,3,1,1,4,4,1,1,5,5\nmap_with_index 0,1,8,3,20\nselect/reject 3,4,5 1,1\npartition 3+4+5 | 1+1\ntake/skip 3,1 1,5\ntake_while 3,1\nskip_while 4,1,5\nreduce 14\neach_with_object 30,10,40,10,50\njoin 3-1-4-1-5\nincludes? true false\nmax/min 5 1\nsum/product 14 60\ntally 2\nsorted 1,1,3,4,5\nmax_by pear\ngroup_by pear,plum,kiwi\ntwo elem types 4,2,5,2,6 / 4,3,4,4\n", "wasmStdout": "size 5\nempty? false true\nat 3 5\nappended 6 from 5, original 3,1,4,1,5\nconcatenated 3,1,4,1,5,7 / 5\ncopied list 2, source 3\nto_a 3,1,4,1,5\nall?/any? true true\nnone?/one? true true\ncount 2\nfind 4 nil\nindex 2 nil\nfirst?/first 3 3\nmap 6,2,8,2,10\nflat_map 3,3,1,1,4,4,1,1,5,5\nmap_with_index 0,1,8,3,20\nselect/reject 3,4,5 1,1\npartition 3+4+5 | 1+1\ntake/skip 3,1 1,5\ntake_while 3,1\nskip_while 4,1,5\nreduce 14\neach_with_object 30,10,40,10,50\njoin 3-1-4-1-5\nincludes? true false\nmax/min 5 1\nsum/product 14 60\ntally 2\nsorted 1,1,3,4,5\nmax_by pear\ngroup_by pear,plum,kiwi\ntwo elem types 4,2,5,2,6 / 4,3,4,4\n", @@ -643,8 +643,8 @@ "path": "samples/iyi/init_order.iyi", "sourceSha256": "0eee830465aeffb6ce0cabe6230e1c8dd87b37458bb42f9ba9b567721dcdc340", "wasm": "iyi-init_order.wasm", - "bytes": 124809, - "sha256": "b0f607519ec0dd50324fcb841e32ede39fe8f203908d6476de67ee438bf76416", + "bytes": 124600, + "sha256": "c1cc05d3928ba5606954b0b27bb381f5f8f43e262d6e42988d510e0f35fc34e8", "exitCode": 0, "nativeStdout": "1. boot/config\n2. boot/registry, above its own `import` line\n3. boot/registry, below it\n4. samples/init_order, above its own `import` lines\n5. Hello, iyi.\n", "wasmStdout": "1. boot/config\n2. boot/registry, above its own `import` line\n3. boot/registry, below it\n4. samples/init_order, above its own `import` lines\n5. Hello, iyi.\n", @@ -657,8 +657,8 @@ "path": "samples/iyi/inventory.iyi", "sourceSha256": "8d17a1ab3590cbe103b0eedb8487c9df8cc2837e0b84b26a3c8abbe353af80d6", "wasm": "iyi-inventory.wasm", - "bytes": 218027, - "sha256": "5b3186682657003e9a8ab9fda0c3d04b4b6e563f1a35e16d0576681edd83a52e", + "bytes": 217819, + "sha256": "0a3a5f5d7027d2202c58a736546c20464f30edaa19a91225bb98afb48886062a", "exitCode": 0, "nativeStdout": "total: 11.0\ncheap: apple, pear\n2\ntrue\ntrue\nmelon\npear\n3.0\nnil\n1. apple 10 5.0\n2. pear 4 3.0\n3. melon 1 3.0\n[\"apple\", \"pear\", \"melon\"]\n15\npear\n", "wasmStdout": "total: 11.0\ncheap: apple, pear\n2\ntrue\ntrue\nmelon\npear\n3.0\nnil\n1. apple 10 5.0\n2. pear 4 3.0\n3. melon 1 3.0\n[\"apple\", \"pear\", \"melon\"]\n15\npear\n", @@ -671,8 +671,8 @@ "path": "samples/iyi/io.iyi", "sourceSha256": "8878852be923dc681f060baf0ae863e04a30e87f123498813c37738c2c97d41f", "wasm": "iyi-io.wasm", - "bytes": 131609, - "sha256": "6b01baf6530675f1c0de0ffa3b59514e636ae74e6612b50d93ec7b82d1755cbd", + "bytes": 131423, + "sha256": "addfb8a4cd3ecefa8b07f6acc71e342e7294401c1340326c24f0737941275647", "exitCode": 0, "nativeStdout": "no lines read from standard input\n", "wasmStdout": "no lines read from standard input\n", @@ -685,8 +685,8 @@ "path": "samples/iyi/modules.iyi", "sourceSha256": "f4ea9f6e29e18cf9452eccc75ba8324c25d108f825b64765f44335c22c57e0be", "wasm": "iyi-modules.wasm", - "bytes": 126751, - "sha256": "aefa7c4a462776d1d49bb86f7b8d17a2c6eee4855a055e064a3f17aebade4bf6", + "bytes": 126558, + "sha256": "37608851b57a2f39bf41ea69a986ea0e118111a7ee2bb3e557937b797f680144", "exitCode": 0, "nativeStdout": "HELLO, IYI. Good day, iyi.\nfriend\nesteemed colleague\n", "wasmStdout": "HELLO, IYI. Good day, iyi.\nfriend\nesteemed colleague\n", @@ -699,8 +699,8 @@ "path": "samples/iyi/sessions.iyi", "sourceSha256": "d33fc3528bffdd710b785425e5b0559e606c53184c2234774d56fc7d9f2f55c9", "wasm": "iyi-sessions.wasm", - "bytes": 139540, - "sha256": "4485718365ed0640af3e3bddbbc19174f9524a49bff26f6619a3cfb07ca326c9", + "bytes": 139354, + "sha256": "217e57575528b77efbac5d06b076748d9ec6ee416961431412afca04b6a9b9e2", "exitCode": 0, "nativeStdout": "three arrivals:\n ada since tick 1\n linus since tick 2\n grace since tick 3\n (3 signed in)\nlinus left, had been in since tick 2\n ada since tick 1\n grace since tick 3\n (2 signed in)\nnobody named bob: true\nlinus is back:\n ada since tick 1\n grace since tick 3\n linus since tick 4\n (3 signed in)\n ada since tick 1\n grace since tick 3\n linus since tick 4\n (3 signed in)\n", "wasmStdout": "three arrivals:\n ada since tick 1\n linus since tick 2\n grace since tick 3\n (3 signed in)\nlinus left, had been in since tick 2\n ada since tick 1\n grace since tick 3\n (2 signed in)\nnobody named bob: true\nlinus is back:\n ada since tick 1\n grace since tick 3\n linus since tick 4\n (3 signed in)\n ada since tick 1\n grace since tick 3\n linus since tick 4\n (3 signed in)\n", @@ -713,8 +713,8 @@ "path": "samples/iyi/shapes.iyi", "sourceSha256": "e3e4ca261b7f764ce2a168163c6da93909efc63d663fb1828f7b6d5a79b9f805", "wasm": "iyi-shapes.wasm", - "bytes": 197147, - "sha256": "1cd492ea85bbe9e4a9564b00c2737250ab7bea9fd339735e1484882e3d6ace71", + "bytes": 196953, + "sha256": "d0d572cc4b983896a286828771c62889d539ff5c517049d4934ee54f6a32244d", "exitCode": 0, "nativeStdout": "circle: 3.14\nrect: 6.0\n9.1\nrect\n[12, nil, 7, -3]\n16\n[12, 7, 3]\n1024\n0.25\n1099511627776\n128\n8\n", "wasmStdout": "circle: 3.14\nrect: 6.0\n9.1\nrect\n[12, nil, 7, -3]\n16\n[12, 7, 3]\n1024\n0.25\n1099511627776\n128\n8\n", @@ -727,8 +727,8 @@ "path": "samples/iyi/socket.iyi", "sourceSha256": "afb4e7913d7b5c01a6e3ba5f42b3945e6ede3a374552325d07fa51ac25fa43e3", "wasm": "iyi-socket.wasm", - "bytes": 413767, - "sha256": "6f04c78fd4d8e50b90c8d359d7421fc35a208207b664e2d20726e2278935dfd1", + "bytes": 413416, + "sha256": "e31277b6cc159544185c93e8b917fced32756bab0f8d3b81700d31d9b210f757", "exitCode": 1, "nativeStdout": "server listening on an ephemeral port\nserver received: hello from client\nclient received: hello from server\nclosed\n", "wasmStdout": "", @@ -741,8 +741,8 @@ "path": "samples/iyi/std_iterator.iyi", "sourceSha256": "fdfedfc80d758e3490725c1fc6ebaa5648f5066854a28ccf1eb8cdb90b872fc8", "wasm": "iyi-std_iterator.wasm", - "bytes": 208688, - "sha256": "4b03bfefec927743879d96208e917c1b76c74ed48789a16f29bb33c3bdbcb049", + "bytes": 208409, + "sha256": "bf302c50800db30c3c0f4790ae36e17a6e52aaec4a8dcd2178e0761a4ef2b046", "exitCode": 0, "nativeStdout": "natural numbers first 5: [1, 2, 3, 4, 5]\npulls from generator: 5\neven squares first 4: [4, 16, 36, 64]\npulls for 4 matches: 8\nchained odds and evens: [1, 3, 5, 2, 4, 6]\nzipped pairs: [{\"apple\", 100}, {\"banana\", 95}, {\"cherry\", 88}]\neach_slice(3): [[1, 2, 3], [4, 5, 6], [7]]\neach_cons(3): [[10, 20, 30], [20, 30, 40], [30, 40, 50]]\nstepped by 2: [0, 20, 40, 60]\ncycled 2 times: [\"tick\", \"tock\", \"tick\", \"tock\"]\nwith_index(1): [{\"alpha\", 1}, {\"beta\", 2}, {\"gamma\", 3}]\nreduce sum: 100\nfirst > 10: 12\n", "wasmStdout": "natural numbers first 5: [1, 2, 3, 4, 5]\npulls from generator: 5\neven squares first 4: [4, 16, 36, 64]\npulls for 4 matches: 8\nchained odds and evens: [1, 3, 5, 2, 4, 6]\nzipped pairs: [{\"apple\", 100}, {\"banana\", 95}, {\"cherry\", 88}]\neach_slice(3): [[1, 2, 3], [4, 5, 6], [7]]\neach_cons(3): [[10, 20, 30], [20, 30, 40], [30, 40, 50]]\nstepped by 2: [0, 20, 40, 60]\ncycled 2 times: [\"tick\", \"tock\", \"tick\", \"tock\"]\nwith_index(1): [{\"alpha\", 1}, {\"beta\", 2}, {\"gamma\", 3}]\nreduce sum: 100\nfirst > 10: 12\n", @@ -755,8 +755,8 @@ "path": "samples/iyi/std_text.iyi", "sourceSha256": "c891f86fe35a876e7f8279c549a0d16a39f38715593fae69a4ca387cb6468276", "wasm": "iyi-std_text.wasm", - "bytes": 195805, - "sha256": "58b65f1dc5af2b855f2cbafa2d65b28915a0664a28b44b69109f783e4ff3858d", + "bytes": 195601, + "sha256": "06554edb04647247f4ac9a4faf6a8b466ff36868e22f52e3c9dac930c664f93d", "exitCode": 0, "nativeStdout": "cleaned line: 'GET /api/v1/users HTTP/1.1'\nHTTP method: GET, path: /api/v1/users, version: HTTP/1.1\nHeader 'Authorization' = 'Bearer token123'\nslug: hello-world-this-is-iyi-std-text-\ngreeting size: 11 characters, 12 bytes\nreversed greeting: dlrow olléh\nhex 'ff' to decimal: 255\n", "wasmStdout": "cleaned line: 'GET /api/v1/users HTTP/1.1'\nHTTP method: GET, path: /api/v1/users, version: HTTP/1.1\nHeader 'Authorization' = 'Bearer token123'\nslug: hello-world-this-is-iyi-std-text-\ngreeting size: 11 characters, 12 bytes\nreversed greeting: dlrow olléh\nhex 'ff' to decimal: 255\n", @@ -769,8 +769,8 @@ "path": "samples/iyi/std_time.iyi", "sourceSha256": "82a17d942f25fe20e124340ce9245293d280594fc4e07ee5a4e82dee62dd3620", "wasm": "iyi-std_time.wasm", - "bytes": 275376, - "sha256": "d494d5133d6a7daee036be9fe3610dc070da42ca509794c468f848959b6dcf7e", + "bytes": 275128, + "sha256": "0e942606afe8574d341ef6499907ce530ab8608c915bab5810019811f7335149", "exitCode": 0, "nativeStdout": "Reference time (UTC): 2024-02-29 12:30:45 UTC\nRFC 3339: 2024-02-29T12:30:45.123Z\nUnix timestamp: 1709209845 s (1709209845123 ms)\nYear: 2024\nMonth: 2\nDay: 29\nDay of week: Thursday\nDay of year: 60\nTomorrow: 2024-03-01T12:30:45Z\nYesterday: 2024-02-28T12:30:45Z\nLive wall clock valid: true\nMonotonic duration >= 0: true\nLeap day event: 2024-02-29 12:00:00 UTC\nIs leap year: true\n", "wasmStdout": "Reference time (UTC): 2024-02-29 12:30:45 UTC\nRFC 3339: 2024-02-29T12:30:45.123Z\nUnix timestamp: 1709209845 s (1709209845123 ms)\nYear: 2024\nMonth: 2\nDay: 29\nDay of week: Thursday\nDay of year: 60\nTomorrow: 2024-03-01T12:30:45Z\nYesterday: 2024-02-28T12:30:45Z\nLive wall clock valid: true\nMonotonic duration >= 0: true\nLeap day event: 2024-02-29 12:00:00 UTC\nIs leap year: true\n", @@ -783,8 +783,8 @@ "path": "samples/iyi/visited.iyi", "sourceSha256": "987608a702df760c9cb5f3c0c85a5f621553fda885504892acb2fbb67d57d744", "wasm": "iyi-visited.wasm", - "bytes": 176116, - "sha256": "ed4b948df48e36d0f8dd7b4d73e31e9b937ee1aaae31a282027a047b49336e35", + "bytes": 175905, + "sha256": "0f55455c765aab9f74309960a5d887ff285880d2f6d1c741727f83d13085230e", "exitCode": 0, "nativeStdout": "Set{\"home\", \"docs\", \"blog\", \"install\", \"about\"}\n5\nfalse\nSet{\"install\"}\nSet{\"orphan\"}\ntrue\nfalse\ntrue\ntrue\n[\"the\", \"cat\", \"and\", \"dog\", \"bird\"]\n", "wasmStdout": "Set{\"home\", \"docs\", \"blog\", \"install\", \"about\"}\n5\nfalse\nSet{\"install\"}\nSet{\"orphan\"}\ntrue\nfalse\ntrue\ntrue\n[\"the\", \"cat\", \"and\", \"dog\", \"bird\"]\n", @@ -797,8 +797,8 @@ "path": "samples/iyi/webapp.iyi", "sourceSha256": "5bba5cdefa6407b2fe87e8c84bfdcf195bf02177193fbaea3e646c143018f296", "wasm": "iyi-webapp.wasm", - "bytes": 171353, - "sha256": "c8989407961055e536ceb461549618dcd6fa29740e2635bfeb43c956bc08ddc2", + "bytes": 170915, + "sha256": "72baa89a90057462ae41cf3baecfcbaa02ad05246622132de16fac0d16853a46", "exitCode": 0, "nativeStdout": "GET /\nGET /users\nPOST /users\nGET /count\nGET /v1\nGET /v1/admin/dashboard\n1|42|0\n", "wasmStdout": "GET /\nGET /users\nPOST /users\nGET /count\nGET /v1\nGET /v1/admin/dashboard\n1|42|0\n", @@ -831,7 +831,7 @@ "id": "iyi/cores", "set": "iyi", "path": "samples/iyi/cores.iyi", - "sourceSha256": "0f5c2670ab8af0eb23c403e053464e75c0fa2e4d053d556ac8c52331d526bc14", + "sourceSha256": "d7dbe787e38d1821182ba3aca3390c90e00fe1a1858299cff027bb620e924b3a", "refusal": "Error: std/system_roots reads the operating system's trusted roots, and this target has none: Linux, darwin and Windows do.", "reason": "A server on every core has no wasm32-wasi build to run. The program imports std/http, whose TLS reads the operating system's trusted roots through std/system_roots, and that module refuses to compile for a target with none; and its tasks, like every task, do not compile on wasm32 yet (SPEC.md III.4.8).", "exitCode": 0, diff --git a/records/wasm/methods.wasm b/records/wasm/methods.wasm index 29a1df818dbba8af9ba4247c36e6766c3f4d7610..61cbfa3b9ab04db5a696b2e5405d1d2a2c2da2af 100755 GIT binary patch delta 31546 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 Y=CP4@<+!`)rJD*;9#3_DoZO242Xq)p>i_@% diff --git a/records/wasm/modules.wasm b/records/wasm/modules.wasm index 0c3aa49381acad36e413c3212e8103763e3b92d2..d66c02299ebcc62efe0767e0377304997f8f7550 100755 GIT binary patch delta 21924 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 delta 21755 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 C;i{Yf diff --git a/records/wasm/nil.wasm b/records/wasm/nil.wasm index 325166561d7c7fa4d6accdec2fbbfe767f18e711..a9abdd623d0faa0aeebb159b8eae741abe15b16a 100755 GIT binary patch delta 21748 zcmbV!31Ae((*Jb#&SZ0ukYqy$By2)}aD{M%L#{;yMLATELqL=#N&pcE!jmK$AqXNz zV896oEGUFi9~d+UiV+bbqC`bRMMTASc=C9@=kY0izv`ZuT~Ocuh*nQ^RdsiDb#--5 z_bgjZMm_jW)SkClyNX?&*q|2BC|TT+(u!7;GKnhY;%u{Sdo z+D4P~jO@)emW~&(xsp;p!>RDA-}FcX{X&?2 zE|UITm|nItLjH%X=364Q#m`}OeI&cAie&wyeA%+kT^&C2Beize?Z8F=%W~A3H2U%IQ zFyJjre3C5gXMuCe&BUA(b53jyuUH|`y|I~Wk69nv+dL7QYBrA>fLvi*2CFw0$2DiQ z)w|>Bqu64zBqax`J)V-Cws;%0n5Fx53|-=0S+NMzt~Sr4_@VbNDMR?V)#hMdM`VJ& zEahR$(UOEaN9vRd3As zD`#cZ3tKgz$L7}kJ$RgNKf%M#t*joX&;D7es6v=t++efl+AdsX$*yd=r=hd{X}atE}GMe<4H7dDpav z-D7tmD)4#r_-pDIBwG#m8{b}4ojC9eJfO<_<~pjYy3O^k>Zsu2kZ!D^y3NqnIj`MX z{ryc*j8&Sy-ki~>lB{VDuRp4r(BfEZY@ovId`kg}72eVt>GoSPc>OB#)mzHRfd&tk zel&S_lfi$NL*Z4$v!eacelI)`mH49r7l>EbU!xokBo^jic*?Yd*kmoRC!)>PLecia z%ZFdhPgj|#BZ_!kmAQ08M|!+CB0$94(b@b$mD%!EvvC=Djjb_C4-c>z*T!oB`1ISi zj)WcBjI4o!SARD0YR31=l8Loa7r#g8QeRa)W^|F@wN+;Q*sJIfKQ5g_TaRl;kCEg2 zyuQl(^SG{fRPP!06eF1lxA&yS`rD=G{@dG<=;yaf(WnVss6_7xL(}%tGas**7UyNq~FZ@romm$-B&8$ezzBO zf%C5}s`aLBiqP5dob6R+VM!;*Z73;{X`|}arIz4j%gn~_*Bp!r1se_o-1U;*E6qh)15w}C0ykU67D zllbv4T1TkpM++GhECf;~5h{YZk*`>`g$Gm6)A7;}oio5Ynj)%^&XxoOjr#x0#z4 zBzHfj@{;Wd_zSbK;P8R*Fo*17V6J*j2_($O_7rBjCNaNS(4=J<*|31`qdL%SPXXUz zqr8C2A@Ykrh1tH`kGM3XyidHXxCi9AZRXnY4A5)J2l7qZRxRw{aCO;Zv)96A;Er85 ztbr<(6-6Vxdz*P+VHOx?7WQtl+ineA-$ZC!d@RYVCpEYT1(1 zv_EoH^Qk4B{HtYeop$S~&TJ1_PyP!6S2_t~q?^oH)DuOqwg^drOB5kWT71;4TFaMf0c=^CDL{ z@?h#Kxr20TSV#Rwd^K@}-Tahg`9V2pr1pN485&QPArnhFaGGy^BRpHca;9CxDRqzxuens;uMWKT; zf1o@>hptG=lx7$z4eA;NhBC0jq5)jEqBG249$2w3_{R;qvoRV=c0g;*&yiueaaz%l zljiKky|8mMJi0)!|Iq4=VIiCY_ZKwsQ3c#QRB>INJykt4;56Koaw=lm>em9|{-SJc zhU|&%*WgQ)W|x(-66$u)0A#^4sla;k*_D1w(f3w<)JqzJrlIsF*LVC;7%o4^QxL2e z>LCY-h&?bPY(AjK()<&DJH2jU~W{1^H5om5) zJ&U5mORIAr_}A5^DO0fy?*GFiDwo*lO zo0cMq8$kUW(baYUzmCn7>>1(&be1zqR_GSDtEb{JEZM~s?iQzt3jL@S8$k1Gt6MwO z$!za{bgDL&$7N$LAuDx9D^Ti>nlpn&XIN!FiioQ!AEG{|ugz#6BP#?L39L7-UAxsW zo92$V`9EvPY-#J9HW9&1A3{BMtC^V)4@?E0n+q_?1YUA6zg z#%AX5^^cSNepruvBL*Q9*1@B6xOGECq-F6AXb0f1Wih?sv&zckh|;on*@5kBqZ(>Y zAg!lR$w(mMiwHRyJG5|x@naCLWD`(y`o_N0n>`zUr#F3cIhoBF>r>6np{0M&p|3(E z1-4q$95k0|NnNzSuk40+5Cd~(1k_k&@v!AXo5=FdZ<^WAo>U%(x8Cf#nWoi*&Ce&R z{YbDdn+1Y?hArLxZPgtfKgHN;)7aAHno}8E3zT_d_h)GMV}NKI^1DyGt6*ZsiFXpi z{v&>j4W05k6}0czv3-6IvuMkKR9AeQKR1GP&DMJdCZhyFhoWisb(s9;$?fy=I(5v; z?=WlTL{KmPqZYDkxI*6aS7n+dJEF`!Rh8zX9e(pv)!0UvkR`ZMcEUDab?LTp)+ifH zf-42`cVwE|wkMlocBDPAY6ol795Mt~%GK`7G;4MwSAVgy(3`ZsMQoy`;eY&*rki5S zN!2~r`{t(Vfk^*e-L~)hK~1{_tTg~#ODrq%gn-GvU-9>UVw*SbYm1snWx8`;2JpIl zRCnStMDHcjd!8u){?}(FA|3QBaaTP{+(R<`LZ+!TBS4v2Lp3a^A?~v>{Zyt6_7kP2 zOee{7l}r!qC;2ln{b_$jG^zW9(6n#OO*Ot4%4K;pt*^&quco-!9GOMAna@$1btUD z{Vx#x#urGwP^OC|WuHvX$u#Z|$#g$NZLL2qRO%M&b|2^ywF=l`}6k zLHfgst&sX_Nv2P2rkfVmQawj%sfG)+_aeRhCF<|mm)d5KeMVyb{1w2p{L2U4{NyDn z6MvY}9*5gX^G(2PnixaY1aZOPHb|e6>HAVlf0+z=+sjmBkxZ*)`ms!7j}X1v5mnXk zcujjV-t1UURXuowda~1lL>^qtIU!fv5z9OwA@kb-lZzMhL=s>C4#Ri&oeF9bJ zX4}XtYN$9$H9RHL<1+o?DAk<$D%oP#tArQJbh}JXQo5>+$n9i0s!nMglcZ^PB)N@H zw!h3mvbK&IIV;njWt#pP)iB^SYNSl!yJdP>rk-QO&6nxeV^sD5nN}XlkUiLtqG|s~ zk!=Omswvq{GjH0T!UE>SVr-XwZYnNE`FDw!UV=@&9hJwY=4Pf*z^iNAehia@dO>RQVMffw)yh)Gl%+13lRl&}t7LlU!-2q!Gi{|<2S_gB zq#20A&X8EKOt;$t{SY%}a`VAgNZ{g`8A$*15s6iNMD?7OxaTZU@?|>qY};s3;02Cu zn8Wt_WIL4mH>ZJ<*>{jV$)yEIHV@&dgP<(CxawosvyZ99K_B-(T26TNo{#?)?Fnqw zG&AeVbk8jc>1Fo)GE>5|FEXo#eleVT?jp|6FS5`EHxK=inQe;=g;;DvHA9jXqjahoBiMMeZ+0s07^QAOzZgPapHqUo(S$fvJ8`jp(7f&?f@%W-F=AlMOYT{)f#s0T}}E zPHV|Ocm+QS3o(KCR`Fj0e+0_QfoY1C2*mRCvhZ8jfs9zwnKkt8mITkvH8--%;D=bw zx~noQbQ*D+fY+*SwSom`~Z=z`gqQ4ro_aQLAsr+lSM8Ny0mb0uZ#(cphD)&6v`A}I^gpQ&dfp|~V zvku#%F^b7TXHX%5cwRC+yg9~0H6lX0(Ex#1Od5K$98DXjcr4^c4FrlO{@qN|W^2|n zj3ow7DkZLm_*xiGj{ZfIBQQQz%&C6#Rw=t#s~%f=wbp{QfTy~q$m&67s{vo(RUG%r`}EVjxxj25TLzR^X~jySE> z0Uc+$5jeB>KvzvGR~_|)3>r~@!|c~r(~8s_&_XTKG>yP!dZuHX zVyzUxQlg}ZMHj1sfPVJ8ud;>;=x5KzX9I9Xr2`NBglR$$bzbUM(H~JBo-5~S5}GG) zRLCBtY4aV6{R@f`ILyFcO&hNCMyr0cwCE$$&(S2mDO0NEgYS|DHwAv`tB%P00x1>Tn%Pp zFda8L3iA>;{2)4Xtt!kzNiZ*g!+a_OrAIs5R}rKL9PS;~W<9Lp!5NzNJl1RsEDLSL zW{AKM^-jn3(y8a)*f|n7%%f1@1^5?AYN12~J_3h1caEmDi_rgvR81pr_*Fe2@U3zS z5z0cF1P-^`a82u?m|Ey>@tQ^;`m3P*s5RYy{&sHKt(x|Jl&wYA2AW3T)RQpp@^D&- zaU*c}-M~i|Rp%dvc?lfm?i;ZMi0HycaB2d@4{Bl?N>6pHvk@f;oYKv&XnHm*N8s=W z!g`3A?f`o**9aW`xGVT^;1M|dOdlfU5-fLe;Qor52psNaYg1Hsj9*7j?ooO$7v#^7!y%(S!frAhCobE zRX>KM4z;^YPr;-k5VAB@>2!CMVWB4Q4+4Itimf}Xm0onwRJnAVCX~Ybu!abI3P&U` ze&RBCl|zYrN(m9Ff&v7ht#YRVjKbrJ$wMBvC;=a!s_j{#X>X`%d1wi&LSSU5c<#l^ zS1@whw5bVR&;iB+)GSZIw91d@-q&CeNSy|N`Kf9)VjEDen)RXP8b>F0nIEs1Z4mUD zs>#7ZF~^}kfpO4!Dw;KOc67I4Vn%Kx79f}qVAQQ|qgfMd>8!XI)`ac1a${IiZ*w^! z9=~;C4C~%>LrYD27f!)P!cYZJgpG{*TF_~NSZ!^JVcE?t*b?ArX>e;k4jseZLSw^X zbWvIJNetV<*?rbS@oWiu!)n-oKE{`g+?gNp1YK0oG{03QNnl_k< z7p4ebmi18s);dXlP_5GJ;S`Zx2#YSU(h}GZ*3-H>f#tGsRz(6!XUDBw39N{HX899Y z<9uy_+Bc>iLfBmgomfWFEDWIL8w<`-Aem)EZJ9IzRNvj!hmS|()J2Oe@WvjFy%V2j{ z>l?C(9hxlEa7zOIpHQX`JX70W zh3zpQjmt5~vq`GEC6Za6w%4sfM2C%^W;|3M;rP>S3(0D9EA{TQ|Tv3GN0m~=JPDU5EJbM&{mRE2T-WG#{U3iqm$SUMu!huZ>6%XENDeF zVp;vVL#L!fNImNyA38`6C?Z)S9b}h-JVQullW z$>t`IziYlCPz!)$P9$onO|1oWFZh}5h*~bGz7y7~%~%iC)?$8^f=8+!ldiwj*UuVv zo%X2mt<;n@m{l~P7ABm9jeKjsAQwv=3&x5t1FR#~GCxaWIaZaQO>C4>3A0j@50lW6 zgd4Dw`BEw^e->-rk(lIUsgq#+KP!PD5cc`OAQNV;3KK!zXcc8axmT?XS*$VF*IN6t zSX0*3dN+%;iRwc$GdECUWHWrg(!y%coHb4#xX$iCCe|3)f#pfE1JkWQbByl0*4XAy zwyQO}Im=6X@-a;tLd{BBZdCs0OIU9mY|d7)W7gmtRQa# z26;J28sud#!Uj=9RC%>EzXc33)!Nm9HD)`lS6Z-faE#_HS#Lb zu2!*rJaof6)cAPI-xcUw1fMzC#bt?SILVmqu;o!I~uurj)^!R$tBN*Amhw^)lP zH@@cGF03Y&-DNH7$7Zpj8Wv!yy=WgrlK9Iz8uN~JY5?5|&1O-2{zGF`UBvL5ZnVB)cpxa%FweG&DSk|r-emiHnmNAV&|PO)7u zJtpQ9_dC?JF`#Bz4ew_uX}K5&+52pVOQ$>F_P(E`2geqP9KT1`g(3c>_406F%YyR_ zF_sTxhRDeS=G|zB7XI1y>%Q4~H^X~Tj4TqZ?K0okWmZv{k+Mu{lo?57+W2{j(gcW44DYk=p;+Lal+a> zhxrPh!i*80!wGn#YdlZX@4{4ch>oblvJd6R)7UdTZZpPVzR{aECA$g8&`FipMKb7h zP7?1(3=dodyeBRHT$UI8$GYoV{CEn#s*U8uPbOUvY z9VNVgiTAi4ScTrr#)|ZG8}ptbL?5vm`~&(xo4QdSK^X5DPn8?0#b(%fh>scLQL+QJ z8bo}FyjB{7yq3Z_@O4V3;mL+LUn1RT1NR%^vl4HGAwp<9%6qpV&Xt_k zbwlhT*1IK`Bzlw~Hc{?e2^?-S&pW8c_cp{wC44&5qYY6-ybnt1^Z|z0Lim}IB8llY z8R!;rdN7_idh|sD1wSm|gP7Qgd=rCrgEAjLLe-<|YxEQ&5A7C_0%+NrxbWgsh@-G$f+4D@#W$obiff2tC3*UFhS*1(JAPU_=${?#J5J!)d zy1XuRc?S6mrOPo0sCp{&=uXs19yC(QyrwtfJ)!SAkbzB}r1}YmwO%0nl)wSIe2{7@(w8tLp&L(<8VTOf(0#svLBF&k=q;l7wCR+V z$5S2k=_peid{@QI_Q{{?(Y^J?-uDbq3+0Ev!wqp5+GED<4Cd+Af-ZC57D-ee2Ad;? zwxbn6KSeI^B6{l=FHy&VVrE3tb3kttk(1VS+i>CsEK3KeViA*bHV={Nhf-e1#A4;{SPG^Zay+LYPSUO(?jbOV*psj7Gf)7qe^%5QS$bhIkYg5EracTUpv1u#r8AIiiz z;Rlwd`)myA+1Pv?p7Du*Ekeb-9U~OjDSGO9zOm8}8;kkP=;&u4+Fg=?xz$*|!6jr3C5~gQ+ zM}h90Br{QlX^54@d@K{+g6A`McQjLhX5hgWgnzc)OzN@%y8Kg&($jhKB%v~sf_iK3 zZaagycmNvkRw%t(m9`awivJ|FRzSsUsiK}B#Y~7{T7QjZqgLyBUqdV{<|AN%{|J9* z_UzeuEE?y1lcC80QC`e%2kTd==|R-g+z`J6DYF2zG((1JF}%Huf9dhO4U~9LDS-ka zu0qVoLzKWM{W1^gEb^e-kMr^=uK^`NKYe7&w<5$o(GFjCYmhv z<2+a_NHxida%4q%L)owYnI}WULXusjN97yh`+4Y>co>A{1|JXQ{sR#xy#$o23@oI2 zR2> z_kbaS2QW8pWa22zQ{Y7s)u#l=Vry_bR>Za<<-4YWc&GtcjnXx!#+5Nxvwp zzL?+-bO3!mw^zj|P!<#A5h$IFsSRuVtAw{?Vj1l8FDyEEBB)`qUM%5xK_-?%uQ8#! zNqx9>3C_jzL_@44ZU2UK+GmJ0gny}21McmuCnC82tpvLzJ&PoPW1JL%wP-D$gcb%F zAuQ)D#FA3p2Av!WM$Ra`vw`_Gwn%S)?V_%43>vSYA5r2ztPUI267NOC2aebyt#Mv8 zxt?qrKUbc(Ypcm;~ zkeg4Kr1nr$+Ez@0+LQE#20CJhvyhAq8sc$j(QHvT3P#K0S2?ancS$0T>G3h%I$h_v zC^8H-%*R*^zqHS|4hZDx!t#O{qyUN9eI9QNZF$bsJ;}zTLaEa~?5BrO- zZoOQp+e(F92X`sFizDUm>KwhVhX1Q3c{dm9=VHTMEUZXau7}GFV^|gK`ohikacNy$ zOudwd6Tw+L+_Nydrz;q4F7lm5slz)s<4-q)&KS0GhS2S#TbXNMev3^*`+Z$@sf!_8 zTrm=^ZpyKEx@=m#0^dhFK@d9lUCj2DoML>xXrZ;{(sqf+9=+g zDyAq#ca`EZ?0)c$K{5TYQi`ewM}KFS0+proZVMDxk^S`65u$=O&5DZtZi9TLvPyHO zV`{ud1xbxCG3@KtT`ov3dpyhy52<6wSrHBt9=)(Dxjq;nhp`RX-qIn$sjnPdx_fm7 zx2x(#TUR@Gq~amCkoCcS2v`3S=2q zC~PC|e5Yl1vg7sFrnxIJ;tyRA+ugI>;u=THX_DqEjld*&;wL*4^_1()xmgufuckKf zk;{qbAzdpwZD65+#@Ienok5_H!R}f~=FMaiC`eb%PQl$A?>KJDMdR(3)oBi7>4w>n z9Yu{G@GHIXhCqtDwf^i%24k=pm9iuvV`;Whp=Cr{hjD;LHLG=>hHUvgZd<&I8ZuRm z`qtU8pN-j*6~*Yb+E$TwpkkQ+TV(*IroFvveI2{=u*bU|Mbl38igrQ@bLH2|y5wYW zV~xw4=7@(wo;Qf2kjnyqEIZeg3{N08#>)D_ub*_s?pR$#mFu0-k;@d-D_6kF+-FVD zE*{H=p==?;!UeQ3@G2LyRU#&*cS!MVgf20U)$CTxQSkZw=mvjvq zo;u;~yK}N(^g)1avLGL)yvH5iaKv!uIS*rF zoa(&JusY9(7!Y3ierJ8Q&*Ly0WT&7UZ`T}Nr!Q`;;ig@O3b*7+g;z<}_wl}?OzhSf zF)!|Mx)BU-SR#5EZuF0;Qzw$-0Q3QcGo@PE2Wv#9Zzml36lG&~Ho2j(o4fyT7TPtlEgEFp1>_NgStBW}W5x5<%c75O7=JJXEwHa+ie4LHpviBd(LgiHEgfO=i?$#+q!r_v>h*y|! zM9Og*=kpxQodnMCg&ml?i(wdZmw6a2X!pdKV@?fTEJ@B}bKX^Eh27~l9sfQ3T<80( zey$G&!*zzSu!64R|2O^IU~vAj>6bW9jhwwT#AKsy!R)d0V%^0~sf&t#>bAq)JwEAd zw&WoYg>w1|%qb@~c6NwV_hfdloXeY2+tcfuO`^QOvL(ky5QFOdoxb#PysWSCGK!8W zYS~X5f;m_?QVnxyk{hvsr0!kqa>JWLIa02iiodSIIbji&af`ak375MOx2THT_HNbZ z1hmbA!aeDvdLmzN<^IwMD~^}(meT&RN;kkb%D6&d1%|sy4RkRT*m$C&0DTGP43^pt zs#VEevDI0cNoO9f;3_F-7gXe}4mmvk>DxDP9+GlDh__H&s*Ygdb6lzte!#_GY@A@7 zq`N(m!8@fRQy0E_q;KWK$5b0G*>KnM9^QXLkfy_QsuB2kiCwl!-AI>rqyz6nz2tC7 z`fg5qqRu5d;pKRPyx=;|af0ma{W-25*5c|2XJlW}(cKzc@ZeDF?}S&D@R{;TOL2l= z4Kc(&h-J||5-@!0BYgq3eWkUA&aY$(ys@L!PJH(uR^d`1HU@Vs zI?sn{UlpU;)xys+Ns6u{=u1BFqfT%3LEbi5k25Zcg%3~xoMYo(eZe_uymz!A=09Lx z&6OEYuk3*XbcB3K2R{FSB0}_TJdk8(M&X&KCli?{xPK&ps6mGJNgOBA#X}jWIFz+3 zQ)@y{9-qIt&)Q*V|AO@l2g`ed@<`Op$tvBPz0lAI z(MN~k6^sx}F&c{F{O!3CEJ}uW)jl4*+YtMMCD?z|;XHAF33k*#)WDOK=)**@9u@fL z;>Hl4mf##PMc!iK76uu4pV=74&>+&WBdkZKkS)Z5QY_bzC$1YKPF#)Ga3k;w^Y%jT zyrZnNM_GeldFe%Yg37bx5UI%!9i&l$)6okq^r3GZ8>(|d>K}dGC{AFg>AD!^Ddvx0 zU3?376+jV36y~R=>Jt^BuO7um=o7g=jy_8`Hn3-d94o}*ILbc@Lp)xBW7)HOPz1qG z40P{?@VPvFAt?^1)(`0VZ1no?#fXsqrPooSQs9bWww{QKg=kzXz>zRfYK!?)oU+1` z4+}IRJ}(ZRCZ8u?tEDTN+G30!Fd(@0gJAS-pn32$%J_J85^?ATFf3zyt~Zh=y@!Y+ z>&N!Us<2o}kY48HZMwZCjP;^FVIoZBd>BIeD*M#OT@r8x>MR8}q04*YCdt)onnQKp zecTv2&S9ygt3ADTML4T$ti~Qpdo^@)c>JU_tdgbnJ+TYdw`hz$ClSbCNv4nm3=#V` z7+MBRjl36C`D?aTvSQ|YlRV&MnrQ~^ER<)xUsJG-#l*7$E3l3E*fljHx3STJeP6S8 zCoA)?i#478!iGn&+iMm*%YI_b`r}(5k%oTXy^(xAeUOT;Tu-L!kl{6(_OpD!Ce^%k zknLuyxTf?4e8|KWTk8(7Z`d;H;TPFI8lFKNX|jDC{;l(mYZlb9BYO5Md__XPxEchY zUseqPT!M87=qFTTyw=J$SexKH;0FNo+05er`cS4NK8I-q7zChCW4_0sJbkb77T|3_ zZ+r_vAD=v#fGL4GI2H@KrMI9YU3Y)i3?EZ9*R)>& zbZa~iK-a{DxR9f3;ZJetH5K@uaal$eW*XK&x(J)w0UuofkI%*+{u!Bv0Cd^(dKY{{ z4OrO~zurKvm!g++t41h5GL?IhM+s`Th{pz3=K- ztUUBPf&u{jUSKSMeitwkK%2r4wo|mF+68&q*>r|g@Hu}_djjUA@AmftXpcg_GpF6f zd;ooPUk{*7!j7hJ9zYt_Tv~T4GhrdfbjRvKOVnuqtu#>>Qu^9G89gn-3>I)L*>A8!Ai{Ozct1W*nDKlqypuMm)Y5z$~#Lc`dFO8xKDplW5X@5pj)8j{@oe9|67u zG+CzVqqG=!Cgkb+=E!nSg8n?<1;7V@p8&z^<>7)Az<;mcOQ4?vd;-W`5th#f{(JHV z{(yc16deP&4X_@7Kk7ez(TWd&Ut5PB0siMPEEDTB?P|dFfF2w1GjPCm0DWxxZAcc8 z$@u@zax>g=Xn!^ubpDE6#^v;VpuY$>0!V<8&R-&M(^fpPo%4A{QWVkcO-^=&=tUi0A__-MMpRttRq zyaF&PYrr1ETD}1zya%9vvfu({PFHlYFMxhw{?8D8ya^b$i5AdogML-rWv#XHO_m-{ zKbpQ7K);#(lT}~OUe@md`T(J~8S{WXw3$kELab7M^f~ZHfU|(FYWls+rWMMW7afwI%A&J#`nfRx17%nHPCM delta 22126 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 U9XgiQr+&e|6VRdkjnC5l4^FtemH+?% diff --git a/records/wasm/ranges.wasm b/records/wasm/ranges.wasm index 56f19cfc825cd45ad354dfb7774607cb50fc1b10..cbcaa27c39e939e1c0c10bebf33037124bf53e0f 100755 GIT binary patch delta 25861 zcmchA349bq)Aw}u&SrB#NZ3F)!sY-Hju5VJCBT9RBFLdAhoT4sL^*^6

    )AF9ZYz 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 U%Py$YnbN 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 diff --git a/records/wasm/returns.wasm b/records/wasm/returns.wasm index 0a9f90ef55347dc9e7490586f383d06fa60ee1bd..d906a48234617de8ff5fbd75ea0e5f9aa7ff2d2f 100755 GIT binary patch delta 22860 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 H4N?CGI3TkL delta 22443 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%0AJ9)(>YKfHy&C@lPX zX8}8Gk zm?AU@HYaciX|_%JR2TCF^JO*Nu|9lkbU=hY@+k^|7?>lOQ-R-RFj?pnsv{6NlIeO2 z#ztX#^ai2@0?#4Y%DZ6yWNFX<+Y*TRl6NcxTc+<^EN-yOi&qmBrOc4!p~h52A@J-m z%%24O8SEkDC|`jTfv3@6zMKgY>#R9TxbbDfXa!Iq+R&MY-a}aePn;nhNK%x?jD}d~ zG8hD+!07EheS?YtE|8+GxAeU#OY%G{4KZH-1eqW+YMGIRp2EP=@_%lIZ3w^}Wt7|6 zUQrHMO*8@_@Z`yAN+G8iJXdHkHVOphgcJ)qD9R$EpRQ0mdO=_@y@iTWs+YQ1iwJZ6 ze(BMx+^nV7u;7ma_3g+7P1n6|n4%mr8sed@Fg$@Z^A}(P`k}@2q(M7?`@Ga}VoybR z)Fr#-3bld)1eOwC4pEeamTA9*sst7@VvwSY)dzZ53rmSRA->pXM+r@U0tA+LznjoO zFfHGIFA5_Cu=uxJ!@mi!fWYF<1pf!C@^LUDfx(=th~E_{${LG12QEcm741C^ZWh*b z6kL|T;*Xf3C=VKiS!gQyPhc?*==okd3W&w}NH6AvY4!1UD$3uCf;_YfV@+Tc>^v0_ z⁡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 mbNg3p03K_2m%7ZBiBR@MMa1_ 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 delta 31811 zcmcJ&349bq_6OcoHQkw9BqZd7gvkMfE8OAMjHqBl!~>1zf=DqFqU++Z>;LeZ`P zM^{xh%fE>J`dIXOKku}Dizn99{2KjP(S!c3?@51|L=|yWABr?~4@~4YcdS1q8W`7N zuVu{S#k@FgR!vQf=0Cm>es~GOgt?)eXNLU zK9B$Vje!c0n|W3xMj>U{T#__Fk$>43*dS6fYeJOfBl77;@|;lMs7UQTH-h|7MDBUv z^z{!%q%RBw{GQZ-OTy%3^CHMg!|7Wi)1L~bpPm<3;+eo}mIP+?O^#1oL^km80`Bu4 z3HbEk?8(3seFFX-(regLf!mDM_**6a=I9y1U-NX}WyGEi=Y3Ota|BLTl99rMvX$D1yrM5%by{RiGtyNkV zgKZ5A&C1F=GCx8s?}Ws^$yzgi%>r1VMZn6+=j#=^Co7xn4xG*!$WG&LN?=g-<%mC& zorU^ycPv@?5m6kk;rsBN1^m4Cf$PWmdU&V(G@r^AgBUy;Ive`{^vm$p8>t}c+> z?kawyHZZYWH;OH5=i@cOz~9>y=Psjm$*~QV!+gvqJuz{It>3CpD8Jy|C@SZvE(`dP z`7nEOptx&Kb|g^IbuC*T%IWr351SV_+N+Em4-F}b5^P~$c;7B;eW0fAo!QG4kbJHh zBuDs!kCUh8cznV?cTtGE&|KD*WE{v%daoyTSB3^*RNr*%K}Pll)o`F@P=&+Tt?}ad|N2= zP3a*<65hR;1cjn+d0VHjJaNGE#R(6yIKG39-qV|KP^J`m#a%Y$)*0vT}Yr6u4__ zHwtRU`YG|~*j$d>`nW*GvWO0X+}GP(XlY$w!?+vyvbsRb_{|(Wd>uFV+_`!RI9_Fkh@6t=d>U7%kn&97j1GGuKlS52<;cf^Tawi_Y89 zb`xjVQZs#-zKjW%)NG~7`Z8%O^Uq2qc{j|umV!02x>4}SEa^u-&$^zZUo(3mdFR&I zRf3%C;y?BvPcQ%DU%jbY&*L83LV+t5bSKWL1=A?wnFU?ZfQvA!`4Xahx_@_oS{Rk{ zKN-3%FqWY+zOp3T8PokMLjPDYos!2q7EW&OuM0i;n9kFdEeW@p-#a0Pp-1?)E(vT{ z+LiyZB(QFMCa-xk^y|_siR^43XU`P@wq{hfCz|9*oR3LU%Q5^5A8nHEGZGh55AiR2 zQVvlG@8<`0tjTA;1io3*5>f+K?`jw7vDVAj($Ii)y-=%11I=#8k6lkJwdF+Y6U0beAeY}ZAImuMJ(~k!} z*fIr$UiNZ;^BODg@sRvpM;?=f<}~xg`C|NARm|u0HG{*%Cq7O!^zXKsNb|oF>hWqX zPSeVS*Sf{A$1#{^v`p|NPRMEQOY}AK*HGybCgdc^*pa1y-8)(&oh#&&7W!ew01u|9 z(`z#M?k8cD+2^wa-<{256Ri0^oBtD1_0;=An7Nz!P%e+xc(GqA;0w15AMyEs1zTAi}>%E;y<`%-x_^dt|(Gj{opR*D-;u<-`7JztiPsaE(ERL zGN(qnBA)p%>!>7CrQPNK5b4O9aRz)^KziY3fJ6FXD$3>Nkt{K^u)I;4aeU z7nPZ~zY3$r2^Gb(KBIgSe0O{N$0bI2ARCk;Dz2-A+E2rxwbW )Mp~+pj9zUB}#K|ORnq_3v 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 Ogd?Bg`csp5Nc=zFAoU^u diff --git a/records/wasm/structs.wasm b/records/wasm/structs.wasm index 60b8ca7668b94049fdcfab504d4f41171e0b71c6..4cfe4e93c9f07b275b0c303b30837f6bfb2be99a 100755 GIT binary patch delta 21977 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 delta 21867 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 O=d3sC{^WD)cK;s+0?N?< diff --git a/records/wasm/traits.wasm b/records/wasm/traits.wasm index 5fead95249a88430ca188b6464d5c04cb2501e45..7ff9cbb47b7cc263eca38315c4ff8db9f668464f 100755 GIT binary patch delta 31126 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ŽBtj5us-N`N-UEXKq8E5g5WPOWymA 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 J6ZvxSe*h6yOnU$T delta 31179 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 diff --git a/records/wasm/tuples.wasm b/records/wasm/tuples.wasm index ec0ae851c704b07072bb2bbc260e83419abda782..d96051da03666a0c44b802e5b7ca762f5ac58c58 100755 GIT binary patch delta 22695 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 LHgEl&C8_@d|7j^| diff --git a/records/wasm/types.wasm b/records/wasm/types.wasm index 97f6631c5588e04fd12cd0fe62d088cfe0215059..a5aa3c6a4301eaf05a780b6e265e371d6ee2f177 100755 GIT binary patch delta 30939 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 diff --git a/records/wasm/unions.wasm b/records/wasm/unions.wasm index f130decb72277aeb4a1271c8668059e6d743e6e1..08d6ac7ff3342b251ac005000a11d515b3721a03 100755 GIT binary patch delta 25231 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 F{|6!vaclqp delta 25148 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 diff --git a/records/wasm/variables.wasm b/records/wasm/variables.wasm index a2cb4a7f373a01dd182369a73da0866c7ce489cb..eeee9b4c7465e8022ad6ac39c1ebde970183a3c1 100755 GIT binary patch delta 30010 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 diff --git a/src/pages/learn/_H2.astro b/src/components/H2.astro similarity index 100% rename from src/pages/learn/_H2.astro rename to src/components/H2.astro diff --git a/src/pages/learn/_H3.astro b/src/components/H3.astro similarity index 100% rename from src/pages/learn/_H3.astro rename to src/components/H3.astro diff --git a/src/pages/learn/_Heading.astro b/src/components/Heading.astro similarity index 100% rename from src/pages/learn/_Heading.astro rename to src/components/Heading.astro From c36e0803a2df1c0426e9937b6dd11d3d20a70c36 Mon Sep 17 00:00:00 2001 From: Serdar Dogruyol <990485+sdogruyol@users.noreply.github.com> Date: Mon, 9 Nov 2026 20:44:48 +0300 Subject: [PATCH 2/2] add a blog, and announce 0.21.0 on it A post is the one page on the site about a moment rather than about the tree as it is. src/content/blog holds them; a post that names its release is refused when CHANGELOG.md states no such release or the post predates it (src/lib/posts.ts), and what it quotes of the release's notes scripts/notes.mjs reads out of CHANGELOG.md at the release's tag, so a later edit to the changelog does not move a sentence in an announcement. ReleaseNote sets a quoted block with the lines it came from. /blog/ lists the posts, /blog// is a BlogPosting with its datePublished, /blog/rss.xml is built from the same list, and the masthead, the breadcrumbs and llms.txt name the section. The home page links the post that announces the current release, when there is one. The anchored headings lessons used move to src/components so a post's prose gets them too. New budget rows for /blog/ and /blog/*/, adopted from the measured build. --- README.md | 7 ++ doc/STACK.md | 17 ++- package.json | 2 +- scripts/budget.json | 2 + scripts/notes.mjs | 158 ++++++++++++++++++++++++ src/components/H2.astro | 4 +- src/components/H3.astro | 4 +- src/components/Heading.astro | 20 +-- src/components/ReleaseNote.astro | 61 +++++++++ src/content.config.ts | 37 +++++- src/content/blog/iyi-0-21-0.mdx | 119 ++++++++++++++++++ src/layouts/Page.astro | 22 +++- src/lib/posts.ts | 114 +++++++++++++++++ src/pages/blog/[slug].astro | 204 +++++++++++++++++++++++++++++++ src/pages/blog/index.astro | 85 +++++++++++++ src/pages/blog/rss.xml.ts | 62 ++++++++++ src/pages/index.astro | 18 +++ src/pages/learn/[...slug].astro | 6 +- src/pages/llms.txt.ts | 1 + 19 files changed, 918 insertions(+), 25 deletions(-) create mode 100755 scripts/notes.mjs create mode 100644 src/components/ReleaseNote.astro create mode 100644 src/content/blog/iyi-0-21-0.mdx create mode 100644 src/lib/posts.ts create mode 100644 src/pages/blog/[slug].astro create mode 100644 src/pages/blog/index.astro create mode 100644 src/pages/blog/rss.xml.ts diff --git a/README.md b/README.md index a1e08b8..d08caf4 100644 --- a/README.md +++ b/README.md @@ -23,6 +23,13 @@ still takes from CHANGELOG.md is which release is current, which reaches the masthead, the home page, the install page and llms.txt through `scripts/releases.mjs`. +The blog under `/blog/` is the one authored section about a moment: a post per +release, in `src/content/blog/`. A post names its release in its frontmatter, +and what it quotes of that release's notes `scripts/notes.mjs` reads out of +CHANGELOG.md at the release's tag, so the next release does not change it. +Write the post after the site has been regenerated at the release (below): +the build refuses a post for a release CHANGELOG.md does not yet state. + ## Building The scripts look for an iyi checkout beside this one, named `iyi`, or wherever diff --git a/doc/STACK.md b/doc/STACK.md index b6ba8a5..3ff5d95 100644 --- a/doc/STACK.md +++ b/doc/STACK.md @@ -48,6 +48,8 @@ site/ of INSTALL.md, writes generated/targets.json releases.mjs reads CHANGELOG.md's release headings, writes generated/releases.json + notes.mjs reads the section of CHANGELOG.md each post names, + at that release's tag, writes generated/notes.json samples.mjs transcludes samples/iyi, samples/tour, records/break and records/agent into generated/samples/ record-agent.mjs recorder: runs the agent loop against a real @@ -61,10 +63,10 @@ site/ src/ styles/ tokens.css, base.css, code.css components/ Measure, Stamped, DurationChart, Sample, Quote, - Compare, Frame, Lifted + Compare, Frame, Lifted, ReleaseNote, Heading layouts/Page.astro masthead, colophon, fonts, styles, scheme switch pages/ index, why, agents, playground, learn, install, - download, targets, project + download, targets, project, blog playground/ the slot: types, registry, engines generated/ build output, gitignored, never edited ``` @@ -132,6 +134,17 @@ The two classes of number are rendered differently by design; see repository changes on the site. Renaming a sample a lesson names fails the build. - **Generated, measured:** all numbers, via the pipeline above. +- **Authored, quoting a release at its tag:** the posts under `/blog/`, in + `src/content/blog/`. A post is the one page about a moment rather than about + the tree as it is. Its `release` must be one CHANGELOG.md states and its + `date` no earlier than that release's (`src/lib/posts.ts`), and what it + quotes of the release's notes is read by `scripts/notes.mjs` out of + CHANGELOG.md at the release's tag and set by `ReleaseNote` with the lines it + came from, so a later edit to the changelog does not move a sentence in an + announcement. A listing or a command a post sets goes through `Sample` and + `Quote` like any other page's and follows the current release; a later + release that removes what one anchors on fails the build at that post. + `/blog/rss.xml` is built from the same list the index renders. - **Authored fresh:** the marketing pages and the lessons. SPEC.md is a design record, not teaching material, so the learning path is written by hand but is grounded in real samples and real README passages, and every factual claim in diff --git a/package.json b/package.json index 9bdeaba..d563d62 100644 --- a/package.json +++ b/package.json @@ -3,7 +3,7 @@ "private": true, "type": "module", "scripts": { - "generate": "node scripts/fonts.mjs && node scripts/facts.mjs && node scripts/targets.mjs && node scripts/proofs.mjs && node scripts/releases.mjs && node scripts/modified.mjs && node scripts/install-targets.mjs && node scripts/samples.mjs && node scripts/thesis.mjs && node scripts/project.mjs && node scripts/download.mjs && node scripts/records.mjs && node scripts/stdlib.mjs && node scripts/contrast.mjs && node scripts/no-transcription.mjs && node scripts/blocker.mjs", + "generate": "node scripts/fonts.mjs && node scripts/facts.mjs && node scripts/targets.mjs && node scripts/proofs.mjs && node scripts/releases.mjs && node scripts/notes.mjs && node scripts/modified.mjs && node scripts/install-targets.mjs && node scripts/samples.mjs && node scripts/thesis.mjs && node scripts/project.mjs && node scripts/download.mjs && node scripts/records.mjs && node scripts/stdlib.mjs && node scripts/contrast.mjs && node scripts/no-transcription.mjs && node scripts/blocker.mjs", "generate:install-targets": "node scripts/install-targets.mjs", "record:wasm": "node scripts/record-wasm.mjs", "record:diagnostics": "node scripts/record-diagnostics.mjs", diff --git a/scripts/budget.json b/scripts/budget.json index 0a0b0ac..1976fd8 100644 --- a/scripts/budget.json +++ b/scripts/budget.json @@ -34,6 +34,8 @@ { "match": "/install/", "ceiling": 229376 }, { "match": "/learn/", "ceiling": 245760 }, { "match": "/learn/*/", "ceiling": 245760 }, + { "match": "/blog/", "ceiling": 212992 }, + { "match": "/blog/*/", "ceiling": 229376 }, { "match": "/playground/", "ceiling": 229376 }, { "match": "/playground/iyi/*/", "ceiling": 262144 }, { "match": "/playground/evidence/", "ceiling": 327680 }, diff --git a/scripts/notes.mjs b/scripts/notes.mjs new file mode 100755 index 0000000..f9b403d --- /dev/null +++ b/scripts/notes.mjs @@ -0,0 +1,158 @@ +#!/usr/bin/env node +// The release notes a blog post quotes, read out of CHANGELOG.md at the +// release's own tag. +// +// WHY AT THE TAG. Every other page on this site is regenerated against the +// current release, and that is right for a page that describes the language +// as it is. A post is the opposite: it is dated, and it says what one release +// changed. Quoting the working tree's CHANGELOG.md would let a later edit to +// that release's entry move a sentence inside a post that was published +// before the edit, and quoting `facts.json` would turn the figures in an old +// announcement into this week's. A tag does not move, so a post that quotes +// its release through this file says the same thing for as long as it is up. +// +// WHICH RELEASES. The ones the posts name. Each post under src/content/blog +// that carries `release:` in its frontmatter asks for that release's section, +// and nothing else is read; a post that names a release with no tag fails +// here, by name, because the post would otherwise be quoting a changelog +// nobody published. +// +// WHAT IT WRITES. Per release: its tag, the commit the tag names, the date +// its heading states, and the section cut into blocks - a paragraph, a list +// item or a `###` heading - each with the lines it spans in the file at that +// tag. `src/components/ReleaseNote.astro` finds a block by a substring and +// prints it with those lines, so the citation under a quotation is the +// generator's and not the author's. + +import { mkdirSync, readFileSync, readdirSync, writeFileSync } from "node:fs"; +import { dirname, resolve } from "node:path"; +import { fileURLToPath } from "node:url"; +import { spawnSync } from "node:child_process"; +import { blobAt } from "./release-ref.mjs"; + +const here = dirname(fileURLToPath(import.meta.url)); +const site = resolve(here, ".."); +const repo = process.env.IYI_REPO ? resolve(process.env.IYI_REPO) : resolve(site, "..", "iyi"); +const posts = resolve(site, "src", "content", "blog"); +const out = resolve(site, "src", "generated"); + +const SOURCE = "CHANGELOG.md"; + +/* The heading shape scripts/releases.mjs and scripts/release-ref.mjs read. */ +const HEADING = /^##\s+(\d+\.\d+\.\d+)\s+[—-]+\s+(\d{4}-\d{2}-\d{2})\s*$/; + +/* `release:` in a post's frontmatter, quoted or not. The collection schema in + * src/content.config.ts holds the field's shape; this only has to find it. */ +const RELEASE = /^release:\s*["']?(\d+\.\d+\.\d+)["']?\s*$/m; + +const asked = new Map(); +for (const name of readdirSync(posts).filter((n) => /\.mdx?$/.test(n)).sort()) { + const text = readFileSync(resolve(posts, name), "utf8"); + const match = RELEASE.exec(/^---\n([\s\S]*?)\n---/.exec(text)?.[1] ?? ""); + if (!match) continue; + const list = asked.get(match[1]) ?? []; + list.push(`src/content/blog/${name}`); + asked.set(match[1], list); +} + +/** The release's section of CHANGELOG.md at its tag, cut into blocks. */ +function section(version, askedBy) { + const tag = `v${version}`; + const commit = spawnSync("git", ["-C", repo, "rev-parse", "--verify", `${tag}^{commit}`], { + encoding: "utf8", + }); + if (commit.status !== 0) { + throw new Error( + `notes: ${askedBy.join(", ")} quotes ${version} and ${repo} has no ${tag}. ` + + `Fetch the tags ("git -C ${repo} fetch --tags"), or the post names a ` + + `release that was never published.`, + ); + } + + const bytes = blobAt(repo, tag, SOURCE); + if (bytes === null) { + throw new Error(`notes: ${tag} has no ${SOURCE}, so ${askedBy.join(", ")} has nothing to quote.`); + } + const lines = bytes.toString("utf8").split("\n"); + + const start = lines.findIndex((line) => HEADING.exec(line)?.[1] === version); + if (start === -1) { + throw new Error( + `notes: ${SOURCE} at ${tag} has no heading for ${version} that reads as ` + + `"## ${version} — date", so the section ${askedBy.join(", ")} quotes ` + + `cannot be found. The heading shape moved.`, + ); + } + const date = HEADING.exec(lines[start])[2]; + const next = lines.findIndex((line, i) => i > start && /^## /.test(line)); + const end = next === -1 ? lines.length : next; + + /* A block is a run of non-blank lines, except that a list item's own + * continuation paragraphs, indented under it after a blank line, stay with + * it: the item is one entry in the changelog and is quoted as one. */ + const blocks = []; + let current = null; + const close = () => { + if (current === null) return; + blocks.push(current); + current = null; + }; + for (let i = start + 1; i < end; i++) { + const line = lines[i]; + const number = i + 1; + if (line.trim() === "") { + if (current?.kind === "item") { + const following = lines.slice(i + 1, end).find((l) => l.trim() !== ""); + if (following !== undefined && /^\s{2,}\S/.test(following)) { + current.paragraphs.push([]); + continue; + } + } + close(); + continue; + } + const heading = /^###\s+(.*)$/.exec(line); + const item = /^- (.*)$/.exec(line); + if (heading) { + close(); + blocks.push({ kind: "heading", from: number, to: number, paragraphs: [[heading[1]]] }); + } else if (item) { + close(); + current = { kind: "item", from: number, to: number, paragraphs: [[item[1]]] }; + } else { + current ??= { kind: "paragraph", from: number, to: number, paragraphs: [[]] }; + current.paragraphs.at(-1).push(line.trim()); + current.to = number; + } + } + close(); + + return { + version, + date, + tag, + commit: commit.stdout.trim(), + source: SOURCE, + blocks: blocks.map(({ kind, from, to, paragraphs }) => ({ + kind, + from, + to, + paragraphs: paragraphs.filter((p) => p.length > 0).map((p) => p.join(" ")), + })), + }; +} + +const releases = {}; +for (const [version, askedBy] of asked) releases[version] = section(version, askedBy); + +mkdirSync(out, { recursive: true }); +writeFileSync( + resolve(out, "notes.json"), + `${JSON.stringify({ provenance: { generator: "scripts/notes.mjs", source: SOURCE }, releases }, null, 2)}\n`, + "utf8", +); + +const summary = Object.values(releases) + .map((r) => `${r.version} (${r.blocks.length} blocks at ${r.tag})`) + .join(", "); +console.log(`notes: ${summary || "no post quotes a release"}`); diff --git a/src/components/H2.astro b/src/components/H2.astro index 9d15027..268f719 100644 --- a/src/components/H2.astro +++ b/src/components/H2.astro @@ -1,6 +1,6 @@ --- -/** The `##` of a lesson, mapped onto the anchored heading beside this file. */ -import Heading from "./_Heading.astro"; +/** The `##` of a lesson or a post, mapped onto the anchored heading beside this file. */ +import Heading from "./Heading.astro"; const { id } = Astro.props; --- diff --git a/src/components/H3.astro b/src/components/H3.astro index c48589a..4e10cc2 100644 --- a/src/components/H3.astro +++ b/src/components/H3.astro @@ -1,6 +1,6 @@ --- -/** The `###` of a lesson, mapped onto the anchored heading beside this file. */ -import Heading from "./_Heading.astro"; +/** The `###` of a lesson or a post, mapped onto the anchored heading beside this file. */ +import Heading from "./Heading.astro"; const { id } = Astro.props; --- diff --git a/src/components/Heading.astro b/src/components/Heading.astro index 7976632..c6e348b 100644 --- a/src/components/Heading.astro +++ b/src/components/Heading.astro @@ -1,18 +1,18 @@ --- /** - * A heading inside a lesson's prose, with a link to itself beside it. + * A heading inside a lesson's or a post's prose, with a link to itself beside + * it. * * The id is not invented here. Astro's markdown pipeline slugs every heading - * already, which is what the in-page contents list in `[...slug].astro` links - * to, and MDX hands the rendered element's attributes to whatever component is - * mapped over it. So this reads the id it was given and refuses to link when - * there is none, rather than deriving a second slug that could disagree with - * the first and send a reader to an anchor that is not on the page. + * already, which is what a lesson's in-page contents list links to, and MDX + * hands the rendered element's attributes to whatever component is mapped over + * it. So this reads the id it was given and refuses to link when there is + * none, rather than deriving a second slug that could disagree with the first + * and send a reader to an anchor that is not on the page. * - * Underscore prefixed so Astro does not route it: a component that lives beside - * the page it serves, which is the only page that can use it, because MDX - * component mappings are handed to `` by the page doing the - * rendering. + * It is mapped by the pages that render ``, src/pages/learn/[...slug].astro + * and src/pages/blog/[slug].astro, because MDX component mappings are handed + * to `` by the page doing the rendering. * * The two wrappers beside this file exist because an MDX mapping is keyed on * the element name and carries no depth with it, so the level has to be written diff --git a/src/components/ReleaseNote.astro b/src/components/ReleaseNote.astro new file mode 100644 index 0000000..79a6d7b --- /dev/null +++ b/src/components/ReleaseNote.astro @@ -0,0 +1,61 @@ +--- +/** + * A block of a release's notes, quoted in a post. + * + * The text is CHANGELOG.md's at the release's tag, read by scripts/notes.mjs + * and found here by a substring through src/lib/posts.ts, so a post cannot + * paraphrase its release and call it a quotation, and the line range under + * the block is the generator's. Set in the sans, because the notes are prose a + * person wrote; the citation is in the mono, because a file and its lines are + * the machine's. + */ +import { inlineMarkdown } from "../lib/lessons"; +import { releaseNote } from "../lib/posts"; + +interface Props { + release: string; + /** A substring of the one block to quote. */ + find: string; +} + +const { release, find } = Astro.props; +const note = releaseNote(release, find); +const lines = note.from === note.to ? `line ${note.from}` : `lines ${note.from} to ${note.to}`; +--- + +

    + {note.paragraphs.map((paragraph) =>

    )} + {note.source} at {note.tag}, {lines} +

    + + diff --git a/src/content.config.ts b/src/content.config.ts index 1ab91c4..833ea16 100644 --- a/src/content.config.ts +++ b/src/content.config.ts @@ -115,4 +115,39 @@ const learn = defineCollection({ }), }); -export const collections = { learn }; +/** + * The posts: release announcements, and whatever else the project has to say + * on a date. + * + * A post is the one page on this site that is about a moment rather than about + * the tree as it is, so its shape says which moment. `date` is when it was + * published and does not move. `release`, where a post announces one, names + * the release, and it is checked twice: src/lib/posts.ts refuses a release + * CHANGELOG.md does not state, or a post dated before it, and scripts/notes.mjs + * reads that release's section out of CHANGELOG.md at its tag, which is what a + * post quotes through `ReleaseNote`. So the quotations in an announcement are + * the release's own words and stay its words when the next release comes out. + * + * No figure is typed into a post, for the reason none is typed anywhere here: + * scripts/no-transcription.mjs reads src/content. The figures a release + * measured are in its notes, with the machines they were measured on. + */ +const blog = defineCollection({ + loader: glob({ base: "./src/content/blog", pattern: "**/*.{md,mdx}" }), + schema: z.object({ + title: z.string().min(1), + // What a results page prints under the title, and what the index and the + // feed say of the post. Plain text, for the reason a lesson's is. + description: z + .string() + .max(155) + .regex(/^[^`]*$/, "description is plain text: no backticks"), + date: z.string().regex(/^\d{4}-\d{2}-\d{2}$/, "date is the day it was published, as `2026-11-09`"), + release: z + .string() + .regex(/^\d+\.\d+\.\d+$/, "release is a version CHANGELOG.md states, such as `0.21.0`") + .optional(), + }), +}); + +export const collections = { learn, blog }; diff --git a/src/content/blog/iyi-0-21-0.mdx b/src/content/blog/iyi-0-21-0.mdx new file mode 100644 index 0000000..6b9f3d6 --- /dev/null +++ b/src/content/blog/iyi-0-21-0.mdx @@ -0,0 +1,119 @@ +--- +title: "iyi 0.21.0: one spawn verb, parallel where it is safe" +description: "iyi 0.21.0 gives spawn one verb, runs a plain spawn in parallel where the compiler proves it safe, and makes a module that handles raw memory say so." +date: "2026-11-09" +release: "0.21.0" +--- + +import ReleaseNote from "../../components/ReleaseNote.astro"; +import Sample from "../../components/Sample.astro"; +import Quote from "../../components/Quote.astro"; + +iyi 0.21.0 is out. It is a release about tasks: how a program starts one, where +it runs, and how a test finds the bug that only one order of them shows. It is +also the release in which a module that reaches memory the compiler does not +check has to say so. Here is the release in its own words: + + + +## One verb for a task + +There used to be three ways to start a task and two keyword arguments to +qualify them. Now there is `g.spawn`, and an optional `unit:` that says where +the task runs. A *unit* is a set of tasks of which at most one runs at a time: +the main thread with its tasks, a task started with `unit: :new` with the tasks +it starts, or a `Unit` value. + +- `g.spawn { }` lets the compiler place the task. +- `g.spawn(unit: :new) { }` asks for a unit of its own, on another thread, and + holds the block to everything `spawn_parallel` was held to: it may capture + only what is `Share`. +- `g.spawn(unit: :same) { }` keeps the task in its spawner's unit whatever it + captures. + +The cores sample in the release shows both sides. The first group appends to an +`Array` it captured, which is not `Share`, so its plain spawns stay on their +spawner's thread and take turns; the second asks for units of their own and +hands each answer back once the task ends. + + + +## Parallel where the compiler can prove it + +A plain `spawn` is no longer always serial. When its block passes every check +`unit: :new` would apply, and nothing it reaches through its calls is module +state that is not `Share` (other than state marked `@[SafeReach]`, which the +compiler now proves rather than trusts), it runs on the pool in a unit of its +own. Any other spawn stays where it was. Nothing that compiled stops compiling. + +You are not left to guess which way a spawn went. `iyi check` notes each spawn +it kept in its spawner's unit, with the capture or the write that kept it +there; `--explain-spawn` on `build`, `check` and `run` writes the verdict for +every spawn; and the language server shows the same verdict as an inlay hint +after the `spawn`. + +For state that only one unit should touch, `std/unit` adds `Unit(T)`: a value +whose tasks, started with `g.spawn(in: u)`, never run at the same instant as +each other, the way an actor's do. + +## Data parallelism, and tests that shake the schedule + +`std/parallel` cuts a `List`, an `Array` or an integer range into chunks across +the workers: `each_parallel`, `map_parallel`, `sum_parallel` and +`reduce_parallel`. `map_parallel` answers what `map` does, in order, and a +failure or a panic in a chunk reaches the caller. + +The compiler rules out memory races; ordering races are what is left. `iyi test +--chaos` runs each test once per seed, and every scheduling choice is drawn from +the seed: which task runs next, where one is preempted, which ready `select` arm +goes first. A test that passes only because its tasks happened to run in one +order fails, and prints the line that replays the same schedule: +`iyi test --chaos=SEED file`. + +## Raw memory says so + +Until this release any `.iyi` file could reach memory the compiler does not +check without ever spelling `Pointer`, through `to_unsafe` and a buffer. Now a +module whose first statement is `@[Unsafe("why")]` may do that, and every other +module is refused at its first such operation, with the mark offered as the +edit. The reason is required. + +Most modules that only read or build bytes do not need the mark at all: +`String#byte_at`, `Bytes.of` and `String.new(Array(UInt8))` do it without raw +memory. `iyi fix` inserts the mark, the language server offers it as a quick +fix, and `iyi migrate` writes it into a module whose Crystal source handles raw +memory. + +## Underneath + +The runtime got a lot of work that a program does not have to ask for. Each +channel has a lock of its own. A `std/mutex` lock and its release take two +locked instructions, and a waiter that starves is handed the lock. The worker +pool starts one worker and grows to the work. A collection has a ceiling, and a +size class the program stopped allocating in gives its memory back. A build +compiles its units on threads of their own, and a `--release` build optimises +on every core. + +Smaller things: `iyi init` with no module path names the project after its +directory, a path typed in another case on a Mac is the file it names, and two +pointers compare equal when they hold the same address. + +## What you have to change + + + +In practice, run `iyi fix` over the project. The old spawn spellings are compile +errors that name the new one and carry it as an edit, so `iyi fix` rewrites them +where the call has a block, and it inserts `@[Unsafe("why")]` where a module +needs it, with a reason for you to replace with the real one. Where a module only +read or built bytes, moving it to `byte_at` and `Bytes.of` is the better fix. +Libraries need releases that carry their own marks, and iyi-web, iyi-pg, iyi-db +and jwt have them. + +## Upgrade + +The installer fetches the latest release: + + + + diff --git a/src/layouts/Page.astro b/src/layouts/Page.astro index 622a619..2ee6a0c 100644 --- a/src/layouts/Page.astro +++ b/src/layouts/Page.astro @@ -64,7 +64,7 @@ interface Props { title: string; summary?: string; /** Schema.org type of the page's main content; WebPage unless a page says. */ - kind?: "WebPage" | "TechArticle" | "CollectionPage"; + kind?: "WebPage" | "TechArticle" | "CollectionPage" | "Blog" | "BlogPosting"; /** * Whether this page is a URL a crawler should keep. * @@ -85,9 +85,14 @@ interface Props { * in deciding the page's `dateModified`. */ source?: string; + /** + * The day a post was published, from its frontmatter, written into the + * structured data as `datePublished`. + */ + published?: string; } -const { title, summary, kind = "WebPage", indexable = true, source } = Astro.props; +const { title, summary, kind = "WebPage", indexable = true, source, published } = Astro.props; const base = import.meta.env.BASE_URL; const href = (p: string) => `${base.replace(/\/$/, "")}/${p.replace(/^\//, "")}`; const here = Astro.url.pathname; @@ -142,7 +147,9 @@ const ogImage = new URL(href("og.png"), Astro.site).href; * is found from the route's pattern, `/learn/[...slug]` being * src/pages/learn/[...slug].astro; a pattern that names no file is a broken * mapping here, not a page without a date, so it fails the build. A file with - * no commit yet has no date of its own and the release's stands. */ + * no commit yet has no date of its own and the release's stands. A post goes + * by the same rule: the listings and commands it sets follow the release like + * any page's. Its own day is `datePublished`, below. */ const routeFile = (() => { const pattern = Astro.routePattern.replace(/\/$/, ""); const candidates = [".astro", ".ts", "/index.astro"].map((ext) => `src/pages${pattern}${ext}`); @@ -171,6 +178,7 @@ const sections: [string, string][] = [ ["Reference", "reference/"], ["Playground", "playground/"], ["Project", "project/"], + ["Blog", "blog/"], ]; const trail = indexable && here !== href("") @@ -252,6 +260,10 @@ const ld = { ...(indexable ? { url: canonical } : {}), name: fullTitle, description: summary, + /* A post's headline is its own title, without the site's name the + * results-page title carries, and it was published on a day. */ + ...(kind === "BlogPosting" ? { headline: title, author: { "@id": organization } } : {}), + ...(published ? { datePublished: published } : {}), dateModified, isPartOf: { "@id": `${Astro.site}#website` }, about: { "@id": `${Astro.site}#iyi` }, @@ -282,6 +294,7 @@ const nav = [ ["Reference", "reference/"], ["Agents", "agents/"], ["Playground", "playground/"], + ["Blog", "blog/"], ["Install", "install/"], ]; @@ -307,8 +320,9 @@ const current = (path: string) => here.startsWith(href(path)); + - + {indexable && } diff --git a/src/lib/posts.ts b/src/lib/posts.ts new file mode 100644 index 0000000..fd0a3cf --- /dev/null +++ b/src/lib/posts.ts @@ -0,0 +1,114 @@ +import { getCollection, type CollectionEntry } from "astro:content"; +import notes from "../generated/notes.json"; +import install from "../generated/install-targets.json"; +import { releases, type Release } from "./release"; + +export type Post = CollectionEntry<"blog">; + +/** + * Every post, newest first, with what its frontmatter claims checked. + * + * A post that names a release names one CHANGELOG.md states, and is dated on + * or after that release's own date: an announcement written before the + * release it announces is a draft, and a draft is not published. Two posts on + * one URL cannot happen (the file name is the slug), but two on one day can, + * so the order breaks a tie by slug rather than by whatever order the loader + * found the files in. + */ +export async function posts(): Promise { + const stated = new Map(releases().map((release) => [release.version, release])); + const all = await getCollection("blog"); + for (const post of all) { + const version = post.data.release; + if (version === undefined) continue; + const release = stated.get(version); + if (release === undefined) { + throw new Error( + `posts: ${post.filePath} announces ${version}, and CHANGELOG.md states no ` + + `such release. Either the iyi checkout is not at the release, or the ` + + `post names one that was never published.`, + ); + } + if (post.data.date < release.date) { + throw new Error( + `posts: ${post.filePath} is dated ${post.data.date}, before ${version} ` + + `was released on ${release.date}.`, + ); + } + } + return all.sort((a, b) => + a.data.date === b.data.date ? a.id.localeCompare(b.id) : b.data.date.localeCompare(a.data.date), + ); +} + +/** The release a post announces, as CHANGELOG.md states it. */ +export function releaseOf(post: Post): Release | undefined { + const version = post.data.release; + return version === undefined ? undefined : releases().find((r) => r.version === version); +} + +/** The post that announces a release, if one does. */ +export async function announcementOf(release: Release): Promise { + return (await posts()).find((post) => post.data.release === release.version); +} + +/** Where a post lives, with the deployment's base honoured. */ +export function postHref(base: string, post: Post): string { + return `${base.replace(/\/$/, "")}/blog/${post.id}/`; +} + +/** A date as a reader reads it: `9 November 2026`. */ +export function longDate(date: string): string { + return new Date(`${date}T00:00:00Z`).toLocaleDateString("en-GB", { + day: "numeric", + month: "long", + year: "numeric", + timeZone: "UTC", + }); +} + +type Block = { kind: string; from: number; to: number; paragraphs: string[] }; +type Section = { + version: string; + date: string; + tag: string; + commit: string; + source: string; + blocks: Block[]; +}; + +export type Note = Block & { tag: string; source: string; href: string }; + +/** + * One block of a release's notes, found by a substring it contains, as + * scripts/notes.mjs read it out of CHANGELOG.md at the release's tag. + * + * The substring has to pick out exactly one block. Two would mean the post + * could be quoting either, and none means the notes do not say what the post + * wanted them to, which in both cases is the post's mistake to fix, not + * something to guess past. + */ +export function releaseNote(version: string, find: string): Note { + const section = (notes.releases as Record)[version]; + if (section === undefined) { + throw new Error( + `ReleaseNote: no post's frontmatter names ${version}, so scripts/notes.mjs ` + + `did not read its notes. Set \`release: ${version}\` on the post that quotes it.`, + ); + } + const found = section.blocks.filter((block) => block.paragraphs.some((p) => p.includes(find))); + if (found.length !== 1) { + throw new Error( + `ReleaseNote: "${find}" is in ${found.length} blocks of ${version}'s notes at ` + + `${section.tag}, and a quotation has to be one of them.` + + (found.length > 1 ? ` Lines ${found.map((b) => b.from).join(", ")}.` : ""), + ); + } + const [block] = found; + return { + ...block, + tag: section.tag, + source: section.source, + href: `https://github.com/${install.repo}/blob/${section.tag}/${section.source}?plain=1#L${block.from}-L${block.to}`, + }; +} diff --git a/src/pages/blog/[slug].astro b/src/pages/blog/[slug].astro new file mode 100644 index 0000000..0e441a5 --- /dev/null +++ b/src/pages/blog/[slug].astro @@ -0,0 +1,204 @@ +--- +/** + * One post. + * + * The post's prose is its own file under src/content/blog. What this page adds + * is what every post carries and none should have to remember: the date it was + * published, the release it announces, and at the foot the release's notes in + * full and its downloads, both on the repository, where they are kept. + * + * A post is dated, and this page says so in its structured data: Page.astro + * writes `published` as the post's `datePublished`. + */ +import { render } from "astro:content"; +import Page from "../../layouts/Page.astro"; +import H2 from "../../components/H2.astro"; +import H3 from "../../components/H3.astro"; +import { posts, postHref, releaseOf, longDate, type Post } from "../../lib/posts"; +import { releaseUrl } from "../../lib/release"; +import install from "../../generated/install-targets.json"; + +export async function getStaticPaths() { + const all = await posts(); + return all.map((post, i) => ({ + params: { slug: post.id }, + props: { post, older: all[i + 1], newer: i > 0 ? all[i - 1] : undefined }, + })); +} + +interface Props { + post: Post; + older?: Post; + newer?: Post; +} + +const { post, older, newer } = Astro.props; +const { Content } = await render(post); +const base = import.meta.env.BASE_URL; +const indexHref = `${base.replace(/\/$/, "")}/blog/`; +const release = releaseOf(post); +const notes = release + ? `https://github.com/${install.repo}/blob/v${release.version}/CHANGELOG.md` + : undefined; +--- + + +
    +
    +
    +

    + Blog + + + {release && {release.version}} +

    +

    {post.data.title}

    +

    {post.data.description}

    +
    + +
    + +
    + + { + release && ( + + ) + } + + { + (older || newer) && ( + + ) + } +
    +
    +
    + + diff --git a/src/pages/blog/index.astro b/src/pages/blog/index.astro new file mode 100644 index 0000000..da25858 --- /dev/null +++ b/src/pages/blog/index.astro @@ -0,0 +1,85 @@ +--- +/** + * The posts, newest first. + * + * A list and nothing else: a date, a title, the post's own description, and + * the release it announces where it announces one. The order and every check + * on a post's frontmatter are src/lib/posts.ts's, so this page cannot list a + * post the post page would refuse to build. + */ +import { Image } from "astro:assets"; +import mascot from "../../assets/mascot.png"; +import Page from "../../layouts/Page.astro"; +import { posts, postHref, longDate } from "../../lib/posts"; + +const base = import.meta.env.BASE_URL; +const all = (await posts()).map((post) => ({ post, href: postHref(base, post) })); +const feed = `${base.replace(/\/$/, "")}/blog/rss.xml`; +--- + + +
    +
    +

    + + Blog +

    +

    What changed, and when

    +

    + A post for each release: what it changes, what a program written + against the one before has to change, and the release's own notes + quoted from its tag. +

    + +
    + +
    +
      + { + all.map(({ post, href }) => ( +
    1. +

      + + {post.data.release && {post.data.release}} +

      +

      + {post.data.title} +

      +

      {post.data.description}

      +
    2. + )) + } +
    +
    +
    +
    + + diff --git a/src/pages/blog/rss.xml.ts b/src/pages/blog/rss.xml.ts new file mode 100644 index 0000000..ec3d8cf --- /dev/null +++ b/src/pages/blog/rss.xml.ts @@ -0,0 +1,62 @@ +/** + * `/blog/rss.xml`: the posts as an RSS 2.0 feed. + * + * Written here rather than through a feed package for the reason llms.txt is: + * it is a few lines of text built from the same list the index renders, and a + * dependency would be a second opinion about that list. Each item carries the + * post's title, link, description and date, and nothing a reader's client + * would have to trust this site to have rendered: the post is the page. + */ +import type { APIRoute } from "astro"; +import { posts } from "../../lib/posts"; + +const escape = (text: string): string => + text + .replace(/&/g, "&") + .replace(//g, ">") + .replace(/"/g, """); + +/* RFC 822, which RSS 2.0 requires: `Mon, 09 Nov 2026 00:00:00 GMT`. A post + * states a day and no time, so midnight UTC of that day. */ +const rfc822 = (date: string): string => new Date(`${date}T00:00:00Z`).toUTCString(); + +export const GET: APIRoute = async ({ site }) => { + const origin = (site ?? new URL("https://iyi.dev")).href.replace(/\/$/, ""); + const base = import.meta.env.BASE_URL.replace(/\/$/, ""); + const home = `${origin}${base}/blog/`; + const all = await posts(); + + const items = all + .map((post) => { + const link = `${home}${post.id}/`; + return [ + " ", + ` ${escape(post.data.title)}`, + ` ${link}`, + ` ${link}`, + ` ${rfc822(post.data.date)}`, + ` ${escape(post.data.description)}`, + " ", + ].join("\n"); + }) + .join("\n"); + + const latest = all[0]?.data.date; + const xml = ` + + + iyi blog + ${home} + + News from the iyi programming language: what each release changes. + en +${latest ? ` ${rfc822(latest)}\n` : ""}${items} + + +`; + + return new Response(xml, { + headers: { "Content-Type": "application/rss+xml; charset=utf-8" }, + }); +}; diff --git a/src/pages/index.astro b/src/pages/index.astro index e0621fe..2338cdf 100644 --- a/src/pages/index.astro +++ b/src/pages/index.astro @@ -12,10 +12,17 @@ import { tourSamples, runnable, playgroundHref } from "../playground/samples"; import { latestRelease, releaseAssets, windowsAsset } from "../lib/release"; import platforms from "../generated/targets.json"; import { SPELLED } from "../lib/lessons"; +import { announcementOf, postHref } from "../lib/posts"; import mascot from "../assets/mascot.png"; const release = latestRelease(); +/* The post that announces the current release, when there is one, linked + * under the install button: the release a reader is about to install, and + * what it changed. No post, no line, rather than a link to the blog's index + * standing in for an announcement nobody wrote. */ +const announcement = await announcementOf(release); + /* The tour's first program, what it printed, and the route to it, all taken * from the tour's own table of contents. The page says "the first program of * the tour", so it follows the tour rather than naming a sample: the id and @@ -94,6 +101,13 @@ const windows = windowsAsset(release); Install {release.version} Try it in the browser + { + announcement && ( + + What {release.version} changed → + + ) + } {/* The mascot, large, beside the one line. The largest thing painted above @@ -350,6 +364,10 @@ const windows = windowsAsset(release); background: var(--brand); } + .news { + align-self: flex-start; + } + .run-here { text-decoration: none; } diff --git a/src/pages/learn/[...slug].astro b/src/pages/learn/[...slug].astro index a9b9425..6d7dd17 100644 --- a/src/pages/learn/[...slug].astro +++ b/src/pages/learn/[...slug].astro @@ -23,7 +23,7 @@ * * Two things the markdown pipeline leaves undone are done here. It slugs every * heading and emits nothing that links to a slug, so the `##` and `###` of a - * lesson are mapped onto `_Heading.astro`, which hangs a link on the id the + * lesson are mapped onto `components/Heading.astro`, which hangs a link on the id the * pipeline already put there. And the same slugs are listed in the rail as the * step's own contents, read off the rendered entry, so the list and the page * cannot drift. No reading time anywhere: doc/ART-DIRECTION.md forbids a time @@ -37,8 +37,8 @@ import { render } from "astro:content"; import Page from "../../layouts/Page.astro"; import BreakRule from "../../components/BreakRule.astro"; -import H2 from "./_H2.astro"; -import H3 from "./_H3.astro"; +import H2 from "../../components/H2.astro"; +import H3 from "../../components/H3.astro"; import { sequence, rulesOf, diff --git a/src/pages/llms.txt.ts b/src/pages/llms.txt.ts index b77b388..be15e8c 100644 --- a/src/pages/llms.txt.ts +++ b/src/pages/llms.txt.ts @@ -145,6 +145,7 @@ an iyi module; iyi consumes Crystal, not the other way around. - [Download](${origin}/download/): every artifact, the \`uname\` pair it is for, and how to verify it. - [Targets](${origin}/targets/): what CI type-checks, audits and runs, per triple. - [Project](${origin}/project/): contributing, security, the code of conduct, the notices. +- [Blog](${origin}/blog/): a post for each release, what it changes and what a user has to change; RSS at ${origin}/blog/rss.xml. The design record and the release notes live in the repository: SPEC.md and CHANGELOG.md are read there, which is where they are kept current.