fix(expr): parse strings and number literals like the runner's ParseNumber
- commit
- 75fcba3589e8f1910d6b804e577b5c57b6253e7f
- author
- brice · · 2026-10-12 17:55 UTC
- parent
- 4adbc1a
- signature
- GPG Verified
CD88F9E564E0102646FB6077A1A07C7C7C3E349D· arch-gpg Verified for the committer email
9 files · +682 -70
M expr/PORTING.md +18 -7
| @@ -122,13 +122,24 @@ whether to keep the JS behaviour or follow the runner. | |||
| 122 | 122 | runner's code on 200 000 random doubles. The number *literal* in an | |
| 123 | 123 | expression is parsed independently of this (see below) and the JSON | |
| 124 | 124 | writer of `toJSON` uses the same conversion (next item). | |
| 125 | - | - [ ] **String to number**: `Number()` semantics (hex, octal, binary, | |
| 126 | - | `Infinity`, whitespace trimmed, empty is 0). C# `double.TryParse` with | |
| 127 | - | `NumberStyles` differs (no octal/binary; check `0x` and `Infinity`). | |
| 128 | - | The lexer applies the same conversion to number literals, so `0x10`, | |
| 129 | - | `0b11`, `1e3`, `.5`, `5.` and `+1` are all literals here. | |
| 130 | - | - [ ] **Number literals after `-` / `+`**: `-1` is one literal token; `a -1` | |
| 131 | - | is therefore a parse error, as in the JS. | |
| 125 | + | - [x] **String to number**: resolved, follows the C#. `ExpressionUtility. | |
| 126 | + | ParseNumber` (`src/Sdk/DTExpressions2/Expressions2/Sdk/ExpressionUtility.cs`) | |
| 127 | + | trims with `String.Trim()` (so U+0085 is white space and U+FEFF is not), | |
| 128 | + | accepts what `Double.TryParse(AllowLeadingSign | AllowDecimalPoint | | |
| 129 | + | AllowExponent)` accepts (ASCII digits only, trailing NULs ignored, | |
| 130 | + | `Infinity` in any letter case with an optional sign), then `0x` hex and | |
| 131 | + | `0o` octal (lower-case prefix only, no sign) read as a **32-bit signed | |
| 132 | + | integer** (`0xffffffff` is `-1`, anything over 32 bits is NaN). There is | |
| 133 | + | no `0b` form and no upper-case `0X`/`0O`. The lexer uses the same | |
| 134 | + | function for number literals, so `0b101`, `0X10` and `0xFFFFFFFFF` are | |
| 135 | + | "Unexpected symbol" errors and `0xffffffff` is `-1`. The same function is | |
| 136 | + | implemented as `parseNumber` in `number.go`; | |
| 137 | + | `TestParseNumberMatchesRunner` replays 443 strings recorded from the | |
| 138 | + | runner's code (`gen/runner/number_cases.mjs`). | |
| 139 | + | - [x] **Number literals after `-` / `+`**: `-1` is one literal token; `a -1` | |
| 140 | + | is therefore a parse error. Same in the C# lexer (`LexicalAnalyzer. | |
| 141 | + | TryGetNextToken`: `c == '-' || c == '+' || digit` starts `ReadNumberToken`), | |
| 142 | + | checked by the differential run. | |
| 132 | 143 | - [ ] **Object key order from `fromJSON`**: array-index keys first, ascending | |
| 133 | 144 | (JavaScript `Object.keys`), then insertion order. `Json.NET` keeps | |
| 134 | 145 | document order. The same ordering is applied by `toJSON` (the JS | |
| @@ -122,13 +122,24 @@ whether to keep the JS behaviour or follow the runner. | |||||
| 122 | runner's code on 200 000 random doubles. The number *literal* in an | 122 | runner's code on 200 000 random doubles. The number *literal* in an | ||
| 123 | expression is parsed independently of this (see below) and the JSON | 123 | expression is parsed independently of this (see below) and the JSON | ||
| 124 | writer of `toJSON` uses the same conversion (next item). | 124 | writer of `toJSON` uses the same conversion (next item). | ||
| 125 | - | - [ ] **String to number**: `Number()` semantics (hex, octal, binary, | 125 | + | - [x] **String to number**: resolved, follows the C#. `ExpressionUtility. |
| 126 | - | `Infinity`, whitespace trimmed, empty is 0). C# `double.TryParse` with | 126 | + | ParseNumber` (`src/Sdk/DTExpressions2/Expressions2/Sdk/ExpressionUtility.cs`) |
| 127 | - | `NumberStyles` differs (no octal/binary; check `0x` and `Infinity`). | 127 | + | trims with `String.Trim()` (so U+0085 is white space and U+FEFF is not), |
| 128 | - | The lexer applies the same conversion to number literals, so `0x10`, | 128 | + | accepts what `Double.TryParse(AllowLeadingSign | AllowDecimalPoint | |
| 129 | - | `0b11`, `1e3`, `.5`, `5.` and `+1` are all literals here. | 129 | + | AllowExponent)` accepts (ASCII digits only, trailing NULs ignored, |
| 130 | - | - [ ] **Number literals after `-` / `+`**: `-1` is one literal token; `a -1` | 130 | + | `Infinity` in any letter case with an optional sign), then `0x` hex and |
| 131 | - | is therefore a parse error, as in the JS. | 131 | + | `0o` octal (lower-case prefix only, no sign) read as a **32-bit signed |
| 132 | + | integer** (`0xffffffff` is `-1`, anything over 32 bits is NaN). There is | |||
| 133 | + | no `0b` form and no upper-case `0X`/`0O`. The lexer uses the same | |||
| 134 | + | function for number literals, so `0b101`, `0X10` and `0xFFFFFFFFF` are | |||
| 135 | + | "Unexpected symbol" errors and `0xffffffff` is `-1`. The same function is | |||
| 136 | + | implemented as `parseNumber` in `number.go`; | |||
| 137 | + | `TestParseNumberMatchesRunner` replays 443 strings recorded from the | |||
| 138 | + | runner's code (`gen/runner/number_cases.mjs`). | |||
| 139 | + | - [x] **Number literals after `-` / `+`**: `-1` is one literal token; `a -1` | |||
| 140 | + | is therefore a parse error. Same in the C# lexer (`LexicalAnalyzer. | |||
| 141 | + | TryGetNextToken`: `c == '-' || c == '+' || digit` starts `ReadNumberToken`), | |||
| 142 | + | checked by the differential run. | |||
| 132 | - [ ] **Object key order from `fromJSON`**: array-index keys first, ascending | 143 | - [ ] **Object key order from `fromJSON`**: array-index keys first, ascending | ||
| 133 | (JavaScript `Object.keys`), then insertion order. `Json.NET` keeps | 144 | (JavaScript `Object.keys`), then insertion order. `Json.NET` keeps | ||
| 134 | document order. The same ordering is applied by `toJSON` (the JS | 145 | document order. The same ordering is applied by `toJSON` (the JS | ||
M expr/data.go +1 -1
| @@ -253,7 +253,7 @@ func toNumber(v Value) float64 { | |||
| 253 | 253 | case Number: | |
| 254 | 254 | return float64(x) | |
| 255 | 255 | case String: | |
| 256 | - | return jsToNumber(string(x)) | |
| 256 | + | return parseNumber(string(x)) | |
| 257 | 257 | } | |
| 258 | 258 | return nan | |
| 259 | 259 | } | |
| @@ -253,7 +253,7 @@ func toNumber(v Value) float64 { | |||||
| 253 | case Number: | 253 | case Number: | ||
| 254 | return float64(x) | 254 | return float64(x) | ||
| 255 | case String: | 255 | case String: | ||
| 256 | - | return jsToNumber(string(x)) | 256 | + | return parseNumber(string(x)) |
| 257 | } | 257 | } | ||
| 258 | return nan | 258 | return nan | ||
| 259 | } | 259 | } | ||
M expr/eval_test.go +8 -23
| @@ -80,7 +80,14 @@ func TestEvalLiteralsAndOperators(t *testing.T) { | |||
| 80 | 80 | {"1e3", "Number:1000"}, | |
| 81 | 81 | {"0x10", "Number:16"}, | |
| 82 | 82 | {"0o17", "Number:15"}, | |
| 83 | - | {"0b101", "Number:5"}, | |
| 83 | + | {"0xffffffff", "Number:-1"}, // read as a 32-bit integer, like the runner | |
| 84 | + | {"0b101", "PARSE Unexpected symbol: '0b101'. Located at position 1 within expression: 0b101"}, | |
| 85 | + | {"0X10", "PARSE Unexpected symbol: '0X10'. Located at position 1 within expression: 0X10"}, | |
| 86 | + | {"'0b11' == 3", "Boolean:false"}, | |
| 87 | + | {"'0x1F' == 31", "Boolean:true"}, | |
| 88 | + | {"'infinity' == Infinity", "Boolean:true"}, | |
| 89 | + | {"'\u0085 1 \u0085' == 1", "Boolean:true"}, | |
| 90 | + | {"'\ufeff1' == 1", "Boolean:false"}, | |
| 84 | 91 | {"-0x10", "PARSE Unexpected symbol: '-0x10'. Located at position 1 within expression: -0x10"}, | |
| 85 | 92 | {"NaN", "Number:NaN"}, | |
| 86 | 93 | {"Infinity", "Number:Infinity"}, | |
| @@ -866,28 +873,6 @@ func TestJSNumberToString(t *testing.T) { | |||
| 866 | 873 | } | |
| 867 | 874 | } | |
| 868 | 875 | ||
| 869 | - | func TestJSToNumber(t *testing.T) { | |
| 870 | - | nan := math.NaN() | |
| 871 | - | tests := []struct { | |
| 872 | - | in string | |
| 873 | - | want float64 | |
| 874 | - | }{ | |
| 875 | - | {"", 0}, {" ", 0}, {"\n\t", 0}, {"1", 1}, {" 1 ", 1}, {"\u00a01\u2003", 1}, {"\ufeff1", 1}, {"+1", 1}, {"-1", -1}, | |
| 876 | - | {"1.", 1}, {".5", 0.5}, {"-.5", -0.5}, {"1e3", 1000}, {"1E-3", 0.001}, {"1e+3", 1000}, {"0x10", 16}, {"0X1f", 31}, | |
| 877 | - | {"0o17", 15}, {"0b101", 5}, {"0x", nan}, {"0xg", nan}, {"-0x10", nan}, {"+0x10", nan}, {"0b2", nan}, {"1_000", nan}, | |
| 878 | - | {"Infinity", math.Inf(1)}, {"-Infinity", math.Inf(-1)}, {"+Infinity", math.Inf(1)}, {"infinity", nan}, {"inf", nan}, | |
| 879 | - | {"NaN", nan}, {"nan", nan}, {"abc", nan}, {"1e", nan}, {"1e+", nan}, {".", nan}, {"e5", nan}, {"1 2", nan}, {"1,5", nan}, | |
| 880 | - | {"00", 0}, {"007", 7}, {"0.0", 0}, {"1e999", math.Inf(1)}, {"-1e999", math.Inf(-1)}, {"0x1fffffffffffff", 9007199254740991}, | |
| 881 | - | {"12345678901234567890", 12345678901234567890}, {"٣", nan}, {"--1", nan}, {"+-1", nan}, {"1e1.5", nan}, {"0x1.8", nan}, | |
| 882 | - | } | |
| 883 | - | for _, tc := range tests { | |
| 884 | - | got := jsToNumber(tc.in) | |
| 885 | - | if got != tc.want && !(math.IsNaN(got) && math.IsNaN(tc.want)) { | |
| 886 | - | t.Errorf("jsToNumber(%q) = %v, want %v", tc.in, got, tc.want) | |
| 887 | - | } | |
| 888 | - | } | |
| 889 | - | } | |
| 890 | - | ||
| 891 | 876 | func TestJSCasing(t *testing.T) { | |
| 892 | 877 | upper := map[string]string{"abc": "ABC", "ß": "SS", "ʼn": "ʼN", "dž": "DŽ", "ı": "I", "ffi": "FFI", "ὒ": "Υ̓̀", "ᾀ": "ἈΙ", "σ": "Σ", "ς": "Σ", "😀": "😀", "é": "É"} | |
| 893 | 878 | for in, want := range upper { | |
| @@ -80,7 +80,14 @@ func TestEvalLiteralsAndOperators(t *testing.T) { | |||||
| 80 | {"1e3", "Number:1000"}, | 80 | {"1e3", "Number:1000"}, | ||
| 81 | {"0x10", "Number:16"}, | 81 | {"0x10", "Number:16"}, | ||
| 82 | {"0o17", "Number:15"}, | 82 | {"0o17", "Number:15"}, | ||
| 83 | - | {"0b101", "Number:5"}, | 83 | + | {"0xffffffff", "Number:-1"}, // read as a 32-bit integer, like the runner |
| 84 | + | {"0b101", "PARSE Unexpected symbol: '0b101'. Located at position 1 within expression: 0b101"}, | |||
| 85 | + | {"0X10", "PARSE Unexpected symbol: '0X10'. Located at position 1 within expression: 0X10"}, | |||
| 86 | + | {"'0b11' == 3", "Boolean:false"}, | |||
| 87 | + | {"'0x1F' == 31", "Boolean:true"}, | |||
| 88 | + | {"'infinity' == Infinity", "Boolean:true"}, | |||
| 89 | + | {"'\u0085 1 \u0085' == 1", "Boolean:true"}, | |||
| 90 | + | {"'\ufeff1' == 1", "Boolean:false"}, | |||
| 84 | {"-0x10", "PARSE Unexpected symbol: '-0x10'. Located at position 1 within expression: -0x10"}, | 91 | {"-0x10", "PARSE Unexpected symbol: '-0x10'. Located at position 1 within expression: -0x10"}, | ||
| 85 | {"NaN", "Number:NaN"}, | 92 | {"NaN", "Number:NaN"}, | ||
| 86 | {"Infinity", "Number:Infinity"}, | 93 | {"Infinity", "Number:Infinity"}, | ||
| @@ -866,28 +873,6 @@ func TestJSNumberToString(t *testing.T) { | |||||
| 866 | } | 873 | } | ||
| 867 | } | 874 | } | ||
| 868 | 875 | ||||
| 869 | - | func TestJSToNumber(t *testing.T) { | |||
| 870 | - | nan := math.NaN() | |||
| 871 | - | tests := []struct { | |||
| 872 | - | in string | |||
| 873 | - | want float64 | |||
| 874 | - | }{ | |||
| 875 | - | {"", 0}, {" ", 0}, {"\n\t", 0}, {"1", 1}, {" 1 ", 1}, {"\u00a01\u2003", 1}, {"\ufeff1", 1}, {"+1", 1}, {"-1", -1}, | |||
| 876 | - | {"1.", 1}, {".5", 0.5}, {"-.5", -0.5}, {"1e3", 1000}, {"1E-3", 0.001}, {"1e+3", 1000}, {"0x10", 16}, {"0X1f", 31}, | |||
| 877 | - | {"0o17", 15}, {"0b101", 5}, {"0x", nan}, {"0xg", nan}, {"-0x10", nan}, {"+0x10", nan}, {"0b2", nan}, {"1_000", nan}, | |||
| 878 | - | {"Infinity", math.Inf(1)}, {"-Infinity", math.Inf(-1)}, {"+Infinity", math.Inf(1)}, {"infinity", nan}, {"inf", nan}, | |||
| 879 | - | {"NaN", nan}, {"nan", nan}, {"abc", nan}, {"1e", nan}, {"1e+", nan}, {".", nan}, {"e5", nan}, {"1 2", nan}, {"1,5", nan}, | |||
| 880 | - | {"00", 0}, {"007", 7}, {"0.0", 0}, {"1e999", math.Inf(1)}, {"-1e999", math.Inf(-1)}, {"0x1fffffffffffff", 9007199254740991}, | |||
| 881 | - | {"12345678901234567890", 12345678901234567890}, {"٣", nan}, {"--1", nan}, {"+-1", nan}, {"1e1.5", nan}, {"0x1.8", nan}, | |||
| 882 | - | } | |||
| 883 | - | for _, tc := range tests { | |||
| 884 | - | got := jsToNumber(tc.in) | |||
| 885 | - | if got != tc.want && !(math.IsNaN(got) && math.IsNaN(tc.want)) { | |||
| 886 | - | t.Errorf("jsToNumber(%q) = %v, want %v", tc.in, got, tc.want) | |||
| 887 | - | } | |||
| 888 | - | } | |||
| 889 | - | } | |||
| 890 | - | ||||
| 891 | func TestJSCasing(t *testing.T) { | 876 | func TestJSCasing(t *testing.T) { | ||
| 892 | upper := map[string]string{"abc": "ABC", "ß": "SS", "ʼn": "ʼN", "dž": "DŽ", "ı": "I", "ffi": "FFI", "ὒ": "Υ̓̀", "ᾀ": "ἈΙ", "σ": "Σ", "ς": "Σ", "😀": "😀", "é": "É"} | 877 | upper := map[string]string{"abc": "ABC", "ß": "SS", "ʼn": "ʼN", "dž": "DŽ", "ı": "I", "ffi": "FFI", "ὒ": "Υ̓̀", "ᾀ": "ἈΙ", "σ": "Σ", "ς": "Σ", "😀": "😀", "é": "É"} | ||
| 893 | for in, want := range upper { | 878 | for in, want := range upper { | ||
M expr/gen/runner/Program.cs +13 -0
| @@ -121,6 +121,19 @@ internal static class P | |||
| 121 | 121 | } | |
| 122 | 122 | return 0; | |
| 123 | 123 | } | |
| 124 | + | if (args[0] == "--num") | |
| 125 | + | { | |
| 126 | + | // Debug aid: each input line is a string as dot-separated hexadecimal UTF-16 code units ("-" for the | |
| 127 | + | // empty string); prints the IEEE 754 bits (hexadecimal) of ExpressionUtility.ParseNumber of it. | |
| 128 | + | foreach (var line in File.ReadLines(args[1])) | |
| 129 | + | { | |
| 130 | + | var sb = new StringBuilder(); | |
| 131 | + | if (line.Trim() != "-") foreach (var u in line.Trim().Split('.')) sb.Append((char)Convert.ToInt32(u, 16)); | |
| 132 | + | var d = ExpressionUtility.ParseNumber(sb.ToString()); | |
| 133 | + | Console.WriteLine(double.IsNaN(d) ? "NaN" : BitConverter.DoubleToInt64Bits(d).ToString("x")); | |
| 134 | + | } | |
| 135 | + | return 0; | |
| 136 | + | } | |
| 124 | 137 | if (args[0] == "--g15") | |
| 125 | 138 | { | |
| 126 | 139 | // Debug aid: one hexadecimal IEEE 754 bit pattern per input line, the G15 form per output line. | |
| @@ -121,6 +121,19 @@ internal static class P | |||||
| 121 | } | 121 | } | ||
| 122 | return 0; | 122 | return 0; | ||
| 123 | } | 123 | } | ||
| 124 | + | if (args[0] == "--num") | |||
| 125 | + | { | |||
| 126 | + | // Debug aid: each input line is a string as dot-separated hexadecimal UTF-16 code units ("-" for the | |||
| 127 | + | // empty string); prints the IEEE 754 bits (hexadecimal) of ExpressionUtility.ParseNumber of it. | |||
| 128 | + | foreach (var line in File.ReadLines(args[1])) | |||
| 129 | + | { | |||
| 130 | + | var sb = new StringBuilder(); | |||
| 131 | + | if (line.Trim() != "-") foreach (var u in line.Trim().Split('.')) sb.Append((char)Convert.ToInt32(u, 16)); | |||
| 132 | + | var d = ExpressionUtility.ParseNumber(sb.ToString()); | |||
| 133 | + | Console.WriteLine(double.IsNaN(d) ? "NaN" : BitConverter.DoubleToInt64Bits(d).ToString("x")); | |||
| 134 | + | } | |||
| 135 | + | return 0; | |||
| 136 | + | } | |||
| 124 | if (args[0] == "--g15") | 137 | if (args[0] == "--g15") | ||
| 125 | { | 138 | { | ||
| 126 | // Debug aid: one hexadecimal IEEE 754 bit pattern per input line, the G15 form per output line. | 139 | // Debug aid: one hexadecimal IEEE 754 bit pattern per input line, the G15 form per output line. | ||
A expr/gen/runner/number_cases.mjs +42 -0
| @@ -0,0 +1,42 @@ | |||
| 1 | + | // SPDX-License-Identifier: MIT | |
| 2 | + | // | |
| 3 | + | // Writes testdata/number_cases.txt: ExpressionUtility.ParseNumber of the | |
| 4 | + | // runner (string to number, used for number literals and for comparisons of | |
| 5 | + | // strings with numbers) on a corpus of strings, as `--num` prints it. | |
| 6 | + | // number_test.go replays it. | |
| 7 | + | // | |
| 8 | + | // dotnet build -c Release expr/gen/runner -p:RunnerSrc=<runner>/src/Sdk | |
| 9 | + | // node expr/gen/runner/number_cases.mjs > expr/testdata/number_cases.txt | |
| 10 | + | ||
| 11 | + | import { execFileSync } from "node:child_process"; | |
| 12 | + | import { writeFileSync, mkdtempSync, rmSync } from "node:fs"; | |
| 13 | + | import { tmpdir } from "node:os"; | |
| 14 | + | import { join, dirname } from "node:path"; | |
| 15 | + | import { fileURLToPath } from "node:url"; | |
| 16 | + | ||
| 17 | + | const here = dirname(fileURLToPath(import.meta.url)); | |
| 18 | + | const set = new Set(); | |
| 19 | + | const add = s => set.add(s); | |
| 20 | + | const base = ["", " ", "0", "00", "-0", "+0", "1", "-1", "+1", "12", "007", "1.5", "-1.5", "1.", ".5", "-.5", "+.5", ".", "-.", "+.", "..", "1..2", "1.2.3", | |
| 21 | + | "1e3", "1E3", "1e+3", "1e-3", "1e", "1e+", "1e-", "e3", "E3", ".e3", "1.e3", ".5e3", "1e3.5", "1e03", "1e0003", "1e308", "1e309", "-1e309", "1e-324", "1e-400", "4.9e-324", "2.5e-324", "1.7976931348623157e308", "1.7976931348623159e308", | |
| 22 | + | "0.1", "0.30000000000000004", "123456789012345678901234567890", "9007199254740993", "-9007199254740993", "0.000001", "1_000", "1,000", "1 000", "١٢٣", "123", | |
| 23 | + | "Infinity", "-Infinity", "+Infinity", "infinity", "INFINITY", "Infinit", "Infinityx", "inf", "Inf", "-inf", "+inf", "∞", "-∞", "\u2212Infinity", "\u2212" + "1", | |
| 24 | + | "NaN", "nan", "NAN", "-NaN", "+NaN", "NaNx", "N", "null", "true", "false", "abc", "x", "-", "+", "+-1", "-+1", "--1", "++1", "- 1", "+ 1", "1 -", "1-", "1+", "1 2", | |
| 25 | + | "0x", "0x0", "0x1", "0x10", "0xff", "0xFF", "0XFF", "0xfF", "0x7fffffff", "0x80000000", "0xffffffff", "0x100000000", "0xFFFFFFFFF", "0x00000001", "0x0000000000000001", "0x000000000000000000001", "-0x1", "+0x1", "0x-1", "0x+1", "0x1.0", "0x1p3", "0xg", "0x 1", "0 x1", "0x1 ", | |
| 26 | + | "0o", "0o0", "0o7", "0o8", "0o17", "0O17", "0o777", "0o17777777777", "0o20000000000", "0o37777777777", "0o40000000000", "0o77777777777", "0o000000000001", "0o0000000000000000000001", "-0o7", "0o-7", "0o1.5", "0o 7", | |
| 27 | + | "0b", "0b0", "0b1", "0b101", "0B101", "0b2", "0b1e3", | |
| 28 | + | "\t1", "1\t", "\n1\n", "\r1", "\u000b1", "\u000c1", "\u00a01", "1\u00a0", "\u20281", "\u20291", "\u00851", "1\u0085", "\u30001", "\u20031\u2003", "\ufeff1", "1\ufeff", "\u200b1", "\u180e1", "\u1680" + "1", | |
| 29 | + | "1\u0000", "\u00001", "1 ", " 1", " 1 ", "+ ", " -1.5e2 "]; | |
| 30 | + | base.forEach(add); | |
| 31 | + | // systematically: signs x forms | |
| 32 | + | for (const sg of ["", "+", "-"]) for (const f of ["0", "1", "10", "1.", ".1", "1.1", "1e1", "1e+1", "1e-1", ".1e1", "1.e1", "Infinity", "infinity", "NaN", "nan", "0x1", "0xA", "0o1", "0b1"]) add(sg + f); | |
| 33 | + | for (let i = 0; i < 40; i++) { add("0x" + "f".repeat(i)); add("0o" + "7".repeat(i)); add("0x" + "0".repeat(i) + "1"); add("0o" + "0".repeat(i) + "1"); add("1" + "0".repeat(i)); add("0." + "0".repeat(i) + "1"); } | |
| 34 | + | for (const n of [255, 256, 2147483647, 2147483648, 4294967295, 4294967296]) { add("0x" + n.toString(16)); add("0o" + n.toString(8)); add(String(n)); } | |
| 35 | + | const hex = s => s.length ? [...s].flatMap(c => { const n = c.codePointAt(0); return n > 0xffff ? [0xd800 + ((n - 0x10000) >> 10), 0xdc00 + ((n - 0x10000) & 0x3ff)] : [n]; }).map(u => u.toString(16).toUpperCase()).join(".") : "-"; | |
| 36 | + | const all = [...set]; | |
| 37 | + | const tmp = mkdtempSync(join(tmpdir(), "num-")); | |
| 38 | + | writeFileSync(join(tmp, "in.txt"), all.map(hex).join("\n") + "\n"); | |
| 39 | + | const out = execFileSync("dotnet", [join(here, "bin/Release/net9.0/runner.dll"), "--num", join(tmp, "in.txt")], { maxBuffer: 1 << 28 }).toString().split("\n").filter(Boolean); | |
| 40 | + | rmSync(tmp, { recursive: true }); | |
| 41 | + | if (out.length !== all.length) throw new Error("answer count"); | |
| 42 | + | process.stdout.write(all.map((s, i) => `${hex(s)} ${out[i]}`).join("\n") + "\n"); | |
| @@ -0,0 +1,42 @@ | |||||
| 1 | + | // SPDX-License-Identifier: MIT | |||
| 2 | + | // | |||
| 3 | + | // Writes testdata/number_cases.txt: ExpressionUtility.ParseNumber of the | |||
| 4 | + | // runner (string to number, used for number literals and for comparisons of | |||
| 5 | + | // strings with numbers) on a corpus of strings, as `--num` prints it. | |||
| 6 | + | // number_test.go replays it. | |||
| 7 | + | // | |||
| 8 | + | // dotnet build -c Release expr/gen/runner -p:RunnerSrc=<runner>/src/Sdk | |||
| 9 | + | // node expr/gen/runner/number_cases.mjs > expr/testdata/number_cases.txt | |||
| 10 | + | ||||
| 11 | + | import { execFileSync } from "node:child_process"; | |||
| 12 | + | import { writeFileSync, mkdtempSync, rmSync } from "node:fs"; | |||
| 13 | + | import { tmpdir } from "node:os"; | |||
| 14 | + | import { join, dirname } from "node:path"; | |||
| 15 | + | import { fileURLToPath } from "node:url"; | |||
| 16 | + | ||||
| 17 | + | const here = dirname(fileURLToPath(import.meta.url)); | |||
| 18 | + | const set = new Set(); | |||
| 19 | + | const add = s => set.add(s); | |||
| 20 | + | const base = ["", " ", "0", "00", "-0", "+0", "1", "-1", "+1", "12", "007", "1.5", "-1.5", "1.", ".5", "-.5", "+.5", ".", "-.", "+.", "..", "1..2", "1.2.3", | |||
| 21 | + | "1e3", "1E3", "1e+3", "1e-3", "1e", "1e+", "1e-", "e3", "E3", ".e3", "1.e3", ".5e3", "1e3.5", "1e03", "1e0003", "1e308", "1e309", "-1e309", "1e-324", "1e-400", "4.9e-324", "2.5e-324", "1.7976931348623157e308", "1.7976931348623159e308", | |||
| 22 | + | "0.1", "0.30000000000000004", "123456789012345678901234567890", "9007199254740993", "-9007199254740993", "0.000001", "1_000", "1,000", "1 000", "١٢٣", "123", | |||
| 23 | + | "Infinity", "-Infinity", "+Infinity", "infinity", "INFINITY", "Infinit", "Infinityx", "inf", "Inf", "-inf", "+inf", "∞", "-∞", "\u2212Infinity", "\u2212" + "1", | |||
| 24 | + | "NaN", "nan", "NAN", "-NaN", "+NaN", "NaNx", "N", "null", "true", "false", "abc", "x", "-", "+", "+-1", "-+1", "--1", "++1", "- 1", "+ 1", "1 -", "1-", "1+", "1 2", | |||
| 25 | + | "0x", "0x0", "0x1", "0x10", "0xff", "0xFF", "0XFF", "0xfF", "0x7fffffff", "0x80000000", "0xffffffff", "0x100000000", "0xFFFFFFFFF", "0x00000001", "0x0000000000000001", "0x000000000000000000001", "-0x1", "+0x1", "0x-1", "0x+1", "0x1.0", "0x1p3", "0xg", "0x 1", "0 x1", "0x1 ", | |||
| 26 | + | "0o", "0o0", "0o7", "0o8", "0o17", "0O17", "0o777", "0o17777777777", "0o20000000000", "0o37777777777", "0o40000000000", "0o77777777777", "0o000000000001", "0o0000000000000000000001", "-0o7", "0o-7", "0o1.5", "0o 7", | |||
| 27 | + | "0b", "0b0", "0b1", "0b101", "0B101", "0b2", "0b1e3", | |||
| 28 | + | "\t1", "1\t", "\n1\n", "\r1", "\u000b1", "\u000c1", "\u00a01", "1\u00a0", "\u20281", "\u20291", "\u00851", "1\u0085", "\u30001", "\u20031\u2003", "\ufeff1", "1\ufeff", "\u200b1", "\u180e1", "\u1680" + "1", | |||
| 29 | + | "1\u0000", "\u00001", "1 ", " 1", " 1 ", "+ ", " -1.5e2 "]; | |||
| 30 | + | base.forEach(add); | |||
| 31 | + | // systematically: signs x forms | |||
| 32 | + | for (const sg of ["", "+", "-"]) for (const f of ["0", "1", "10", "1.", ".1", "1.1", "1e1", "1e+1", "1e-1", ".1e1", "1.e1", "Infinity", "infinity", "NaN", "nan", "0x1", "0xA", "0o1", "0b1"]) add(sg + f); | |||
| 33 | + | for (let i = 0; i < 40; i++) { add("0x" + "f".repeat(i)); add("0o" + "7".repeat(i)); add("0x" + "0".repeat(i) + "1"); add("0o" + "0".repeat(i) + "1"); add("1" + "0".repeat(i)); add("0." + "0".repeat(i) + "1"); } | |||
| 34 | + | for (const n of [255, 256, 2147483647, 2147483648, 4294967295, 4294967296]) { add("0x" + n.toString(16)); add("0o" + n.toString(8)); add(String(n)); } | |||
| 35 | + | const hex = s => s.length ? [...s].flatMap(c => { const n = c.codePointAt(0); return n > 0xffff ? [0xd800 + ((n - 0x10000) >> 10), 0xdc00 + ((n - 0x10000) & 0x3ff)] : [n]; }).map(u => u.toString(16).toUpperCase()).join(".") : "-"; | |||
| 36 | + | const all = [...set]; | |||
| 37 | + | const tmp = mkdtempSync(join(tmpdir(), "num-")); | |||
| 38 | + | writeFileSync(join(tmp, "in.txt"), all.map(hex).join("\n") + "\n"); | |||
| 39 | + | const out = execFileSync("dotnet", [join(here, "bin/Release/net9.0/runner.dll"), "--num", join(tmp, "in.txt")], { maxBuffer: 1 << 28 }).toString().split("\n").filter(Boolean); | |||
| 40 | + | rmSync(tmp, { recursive: true }); | |||
| 41 | + | if (out.length !== all.length) throw new Error("answer count"); | |||
| 42 | + | process.stdout.write(all.map((s, i) => `${hex(s)} ${out[i]}`).join("\n") + "\n"); | |||
M expr/lexer.go +1 -1
| @@ -271,7 +271,7 @@ func (l *lexer) consumeNumber() error { | |||
| 271 | 271 | l.next() | |
| 272 | 272 | } | |
| 273 | 273 | lexeme := l.substring(l.start, l.offset) | |
| 274 | - | v := jsToNumber(lexeme) | |
| 274 | + | v := parseNumber(lexeme) | |
| 275 | 275 | if math.IsNaN(v) { | |
| 276 | 276 | return l.unexpected(lexeme) | |
| 277 | 277 | } | |
| @@ -271,7 +271,7 @@ func (l *lexer) consumeNumber() error { | |||||
| 271 | l.next() | 271 | l.next() | ||
| 272 | } | 272 | } | ||
| 273 | lexeme := l.substring(l.start, l.offset) | 273 | lexeme := l.substring(l.start, l.offset) | ||
| 274 | - | v := jsToNumber(lexeme) | 274 | + | v := parseNumber(lexeme) |
| 275 | if math.IsNaN(v) { | 275 | if math.IsNaN(v) { | ||
| 276 | return l.unexpected(lexeme) | 276 | return l.unexpected(lexeme) | ||
| 277 | } | 277 | } | ||
M expr/number.go +94 -38
| @@ -4,7 +4,6 @@ package expr | |||
| 4 | 4 | ||
| 5 | 5 | import ( | |
| 6 | 6 | "math" | |
| 7 | - | "math/big" | |
| 8 | 7 | "strconv" | |
| 9 | 8 | "strings" | |
| 10 | 9 | ) | |
| @@ -78,55 +77,112 @@ func numberToCoercedString(x float64) string { | |||
| 78 | 77 | return sign + digits[:exp+1] + "." + digits[exp+1:] | |
| 79 | 78 | } | |
| 80 | 79 | ||
| 81 | - | // jsToNumber is Number(string): the StringToNumber algorithm of ECMAScript. | |
| 82 | - | // Surrounding whitespace is ignored, the empty string is 0, and the accepted | |
| 83 | - | // forms are decimal literals with optional sign, fraction and exponent, | |
| 84 | - | // [+-]Infinity, and unsigned 0x, 0o and 0b integers. Everything else, including | |
| 85 | - | // digit separators and "inf" or "nan", is NaN. | |
| 86 | - | func jsToNumber(s string) float64 { | |
| 87 | - | s = jsTrim(s) | |
| 80 | + | // isNetSpace reports whether r is white space for .NET's Char.IsWhiteSpace, | |
| 81 | + | // which String.Trim() removes: U+0009..U+000D, U+0020, U+0085, U+00A0, | |
| 82 | + | // U+1680, U+2000..U+200A, U+2028, U+2029, U+202F, U+205F and U+3000. (The | |
| 83 | + | // JavaScript trim also removes U+FEFF and not U+0085.) | |
| 84 | + | func isNetSpace(r rune) bool { | |
| 85 | + | switch { | |
| 86 | + | case r >= 0x09 && r <= 0x0D, r == 0x20, r == 0x85, r == 0xA0, r == 0x1680, | |
| 87 | + | r >= 0x2000 && r <= 0x200A, r == 0x2028, r == 0x2029, r == 0x202F, r == 0x205F, r == 0x3000: | |
| 88 | + | return true | |
| 89 | + | } | |
| 90 | + | return false | |
| 91 | + | } | |
| 92 | + | ||
| 93 | + | // parseNumber converts a string to a number the way the runner does, | |
| 94 | + | // ExpressionUtility.ParseNumber (src/Sdk/DTExpressions2/Expressions2/Sdk/ | |
| 95 | + | // ExpressionUtility.cs), which is used for number literals in expressions and | |
| 96 | + | // for every implicit string-to-number conversion: | |
| 97 | + | // | |
| 98 | + | // - the string is trimmed (see isNetSpace); empty means 0; | |
| 99 | + | // - Double.TryParse with AllowLeadingSign | AllowDecimalPoint | | |
| 100 | + | // AllowExponent in the invariant culture: [sign] digits [. digits] | |
| 101 | + | // [e [sign] digits], at least one digit around the point, ASCII digits | |
| 102 | + | // only, an out-of-range exponent giving an infinity, "Infinity" and | |
| 103 | + | // "-Infinity" in any letter case, NaN, and any number of trailing NUL | |
| 104 | + | // characters, which .NET ignores; | |
| 105 | + | // - "0x" followed by hexadecimal digits and "0o" followed by octal digits | |
| 106 | + | // (lower-case prefix, no sign), read as a 32-bit two's-complement | |
| 107 | + | // integer: 0xffffffff is -1, and a value that does not fit in 32 bits is | |
| 108 | + | // NaN. There is no binary form; | |
| 109 | + | // - everything else is NaN. | |
| 110 | + | // | |
| 111 | + | // The JavaScript reference uses Number(), which differs: 0X, 0O and 0B | |
| 112 | + | // prefixes, 64-bit exactness, no 32-bit wrap, and U+FEFF as white space. | |
| 113 | + | func parseNumber(s string) float64 { | |
| 114 | + | s = strings.TrimFunc(s, isNetSpace) | |
| 88 | 115 | if s == "" { | |
| 89 | 116 | return 0 | |
| 90 | 117 | } | |
| 118 | + | t := strings.TrimRight(s, "\x00") | |
| 119 | + | if body, neg := strings.CutPrefix(t, "-"); neg { | |
| 120 | + | if v, ok := parseDecimal(body); ok { | |
| 121 | + | return -v | |
| 122 | + | } | |
| 123 | + | } else { | |
| 124 | + | body, _ = strings.CutPrefix(t, "+") | |
| 125 | + | if v, ok := parseDecimal(body); ok { | |
| 126 | + | return v | |
| 127 | + | } | |
| 128 | + | } | |
| 91 | 129 | if len(s) > 2 && s[0] == '0' { | |
| 92 | - | base := 0 | |
| 93 | 130 | switch s[1] { | |
| 94 | - | case 'x', 'X': | |
| 95 | - | base = 16 | |
| 96 | - | case 'o', 'O': | |
| 97 | - | base = 8 | |
| 98 | - | case 'b', 'B': | |
| 99 | - | base = 2 | |
| 100 | - | } | |
| 101 | - | if base != 0 { | |
| 102 | - | n, ok := new(big.Int).SetString(s[2:], base) | |
| 103 | - | if !ok || strings.ContainsAny(s[2:], "_+-") { | |
| 104 | - | return nan | |
| 131 | + | case 'x': | |
| 132 | + | if v, ok := parseRadix32(s[2:], 16); ok { | |
| 133 | + | return v | |
| 134 | + | } | |
| 135 | + | case 'o': | |
| 136 | + | if v, ok := parseRadix32(s[2:], 8); ok { | |
| 137 | + | return v | |
| 105 | 138 | } | |
| 106 | - | f, _ := new(big.Float).SetInt(n).Float64() | |
| 107 | - | return f | |
| 108 | 139 | } | |
| 109 | 140 | } | |
| 110 | - | body := s | |
| 111 | - | neg := false | |
| 112 | - | if body[0] == '+' || body[0] == '-' { | |
| 113 | - | neg = body[0] == '-' | |
| 114 | - | body = body[1:] | |
| 115 | - | } | |
| 116 | - | if body == "Infinity" { | |
| 117 | - | if neg { | |
| 118 | - | return math.Inf(-1) | |
| 119 | - | } | |
| 120 | - | return math.Inf(1) | |
| 141 | + | return nan | |
| 142 | + | } | |
| 143 | + | ||
| 144 | + | // parseDecimal parses an unsigned decimal literal or "Infinity". | |
| 145 | + | func parseDecimal(body string) (float64, bool) { | |
| 146 | + | if len(body) == 8 && strings.EqualFold(body, "infinity") && isASCII(body) { | |
| 147 | + | return posInf, true | |
| 121 | 148 | } | |
| 122 | 149 | if !isDecimalLiteral(body) { | |
| 123 | - | return nan | |
| 150 | + | return 0, false | |
| 124 | 151 | } | |
| 125 | - | v, _ := strconv.ParseFloat(body, 64) // out of range yields ±Inf, which is what JS does too | |
| 126 | - | if neg { | |
| 127 | - | v = -v | |
| 152 | + | v, _ := strconv.ParseFloat(body, 64) // out of range yields an infinity, as in .NET | |
| 153 | + | return v, true | |
| 154 | + | } | |
| 155 | + | ||
| 156 | + | // parseRadix32 reads digits in base 16 or 8 as an unsigned 32-bit value and | |
| 157 | + | // returns it as a signed one (Int32.TryParse with AllowHexSpecifier, | |
| 158 | + | // Convert.ToInt32(s, 8)). Leading zeros are free; digits beyond 32 bits fail. | |
| 159 | + | func parseRadix32(digits string, base int) (float64, bool) { | |
| 160 | + | if digits == "" { | |
| 161 | + | return 0, false | |
| 162 | + | } | |
| 163 | + | var v uint64 | |
| 164 | + | for i := 0; i < len(digits); i++ { | |
| 165 | + | c := digits[i] | |
| 166 | + | var d int | |
| 167 | + | switch { | |
| 168 | + | case c >= '0' && c <= '9': | |
| 169 | + | d = int(c - '0') | |
| 170 | + | case c >= 'a' && c <= 'f': | |
| 171 | + | d = int(c-'a') + 10 | |
| 172 | + | case c >= 'A' && c <= 'F': | |
| 173 | + | d = int(c-'A') + 10 | |
| 174 | + | default: | |
| 175 | + | return 0, false | |
| 176 | + | } | |
| 177 | + | if d >= base { | |
| 178 | + | return 0, false | |
| 179 | + | } | |
| 180 | + | v = v*uint64(base) + uint64(d) | |
| 181 | + | if v > math.MaxUint32 { | |
| 182 | + | return 0, false | |
| 183 | + | } | |
| 128 | 184 | } | |
| 129 | - | return v | |
| 185 | + | return float64(int32(uint32(v))), true | |
| 130 | 186 | } | |
| 131 | 187 | ||
| 132 | 188 | // isDecimalLiteral reports whether s matches | |
| @@ -4,7 +4,6 @@ package expr | |||||
| 4 | 4 | ||||
| 5 | import ( | 5 | import ( | ||
| 6 | "math" | 6 | "math" | ||
| 7 | - | "math/big" | |||
| 8 | "strconv" | 7 | "strconv" | ||
| 9 | "strings" | 8 | "strings" | ||
| 10 | ) | 9 | ) | ||
| @@ -78,55 +77,112 @@ func numberToCoercedString(x float64) string { | |||||
| 78 | return sign + digits[:exp+1] + "." + digits[exp+1:] | 77 | return sign + digits[:exp+1] + "." + digits[exp+1:] | ||
| 79 | } | 78 | } | ||
| 80 | 79 | ||||
| 81 | - | // jsToNumber is Number(string): the StringToNumber algorithm of ECMAScript. | 80 | + | // isNetSpace reports whether r is white space for .NET's Char.IsWhiteSpace, |
| 82 | - | // Surrounding whitespace is ignored, the empty string is 0, and the accepted | 81 | + | // which String.Trim() removes: U+0009..U+000D, U+0020, U+0085, U+00A0, |
| 83 | - | // forms are decimal literals with optional sign, fraction and exponent, | 82 | + | // U+1680, U+2000..U+200A, U+2028, U+2029, U+202F, U+205F and U+3000. (The |
| 84 | - | // [+-]Infinity, and unsigned 0x, 0o and 0b integers. Everything else, including | 83 | + | // JavaScript trim also removes U+FEFF and not U+0085.) |
| 85 | - | // digit separators and "inf" or "nan", is NaN. | 84 | + | func isNetSpace(r rune) bool { |
| 86 | - | func jsToNumber(s string) float64 { | 85 | + | switch { |
| 87 | - | s = jsTrim(s) | 86 | + | case r >= 0x09 && r <= 0x0D, r == 0x20, r == 0x85, r == 0xA0, r == 0x1680, |
| 87 | + | r >= 0x2000 && r <= 0x200A, r == 0x2028, r == 0x2029, r == 0x202F, r == 0x205F, r == 0x3000: | |||
| 88 | + | return true | |||
| 89 | + | } | |||
| 90 | + | return false | |||
| 91 | + | } | |||
| 92 | + | ||||
| 93 | + | // parseNumber converts a string to a number the way the runner does, | |||
| 94 | + | // ExpressionUtility.ParseNumber (src/Sdk/DTExpressions2/Expressions2/Sdk/ | |||
| 95 | + | // ExpressionUtility.cs), which is used for number literals in expressions and | |||
| 96 | + | // for every implicit string-to-number conversion: | |||
| 97 | + | // | |||
| 98 | + | // - the string is trimmed (see isNetSpace); empty means 0; | |||
| 99 | + | // - Double.TryParse with AllowLeadingSign | AllowDecimalPoint | | |||
| 100 | + | // AllowExponent in the invariant culture: [sign] digits [. digits] | |||
| 101 | + | // [e [sign] digits], at least one digit around the point, ASCII digits | |||
| 102 | + | // only, an out-of-range exponent giving an infinity, "Infinity" and | |||
| 103 | + | // "-Infinity" in any letter case, NaN, and any number of trailing NUL | |||
| 104 | + | // characters, which .NET ignores; | |||
| 105 | + | // - "0x" followed by hexadecimal digits and "0o" followed by octal digits | |||
| 106 | + | // (lower-case prefix, no sign), read as a 32-bit two's-complement | |||
| 107 | + | // integer: 0xffffffff is -1, and a value that does not fit in 32 bits is | |||
| 108 | + | // NaN. There is no binary form; | |||
| 109 | + | // - everything else is NaN. | |||
| 110 | + | // | |||
| 111 | + | // The JavaScript reference uses Number(), which differs: 0X, 0O and 0B | |||
| 112 | + | // prefixes, 64-bit exactness, no 32-bit wrap, and U+FEFF as white space. | |||
| 113 | + | func parseNumber(s string) float64 { | |||
| 114 | + | s = strings.TrimFunc(s, isNetSpace) | |||
| 88 | if s == "" { | 115 | if s == "" { | ||
| 89 | return 0 | 116 | return 0 | ||
| 90 | } | 117 | } | ||
| 118 | + | t := strings.TrimRight(s, "\x00") | |||
| 119 | + | if body, neg := strings.CutPrefix(t, "-"); neg { | |||
| 120 | + | if v, ok := parseDecimal(body); ok { | |||
| 121 | + | return -v | |||
| 122 | + | } | |||
| 123 | + | } else { | |||
| 124 | + | body, _ = strings.CutPrefix(t, "+") | |||
| 125 | + | if v, ok := parseDecimal(body); ok { | |||
| 126 | + | return v | |||
| 127 | + | } | |||
| 128 | + | } | |||
| 91 | if len(s) > 2 && s[0] == '0' { | 129 | if len(s) > 2 && s[0] == '0' { | ||
| 92 | - | base := 0 | |||
| 93 | switch s[1] { | 130 | switch s[1] { | ||
| 94 | - | case 'x', 'X': | 131 | + | case 'x': |
| 95 | - | base = 16 | 132 | + | if v, ok := parseRadix32(s[2:], 16); ok { |
| 96 | - | case 'o', 'O': | 133 | + | return v |
| 97 | - | base = 8 | 134 | + | } |
| 98 | - | case 'b', 'B': | 135 | + | case 'o': |
| 99 | - | base = 2 | 136 | + | if v, ok := parseRadix32(s[2:], 8); ok { |
| 100 | - | } | 137 | + | return v |
| 101 | - | if base != 0 { | |||
| 102 | - | n, ok := new(big.Int).SetString(s[2:], base) | |||
| 103 | - | if !ok || strings.ContainsAny(s[2:], "_+-") { | |||
| 104 | - | return nan | |||
| 105 | } | 138 | } | ||
| 106 | - | f, _ := new(big.Float).SetInt(n).Float64() | |||
| 107 | - | return f | |||
| 108 | } | 139 | } | ||
| 109 | } | 140 | } | ||
| 110 | - | body := s | 141 | + | return nan |
| 111 | - | neg := false | 142 | + | } |
| 112 | - | if body[0] == '+' || body[0] == '-' { | 143 | + | |
| 113 | - | neg = body[0] == '-' | 144 | + | // parseDecimal parses an unsigned decimal literal or "Infinity". |
| 114 | - | body = body[1:] | 145 | + | func parseDecimal(body string) (float64, bool) { |
| 115 | - | } | 146 | + | if len(body) == 8 && strings.EqualFold(body, "infinity") && isASCII(body) { |
| 116 | - | if body == "Infinity" { | 147 | + | return posInf, true |
| 117 | - | if neg { | |||
| 118 | - | return math.Inf(-1) | |||
| 119 | - | } | |||
| 120 | - | return math.Inf(1) | |||
| 121 | } | 148 | } | ||
| 122 | if !isDecimalLiteral(body) { | 149 | if !isDecimalLiteral(body) { | ||
| 123 | - | return nan | 150 | + | return 0, false |
| 124 | } | 151 | } | ||
| 125 | - | v, _ := strconv.ParseFloat(body, 64) // out of range yields ±Inf, which is what JS does too | 152 | + | v, _ := strconv.ParseFloat(body, 64) // out of range yields an infinity, as in .NET |
| 126 | - | if neg { | 153 | + | return v, true |
| 127 | - | v = -v | 154 | + | } |
| 155 | + | ||||
| 156 | + | // parseRadix32 reads digits in base 16 or 8 as an unsigned 32-bit value and | |||
| 157 | + | // returns it as a signed one (Int32.TryParse with AllowHexSpecifier, | |||
| 158 | + | // Convert.ToInt32(s, 8)). Leading zeros are free; digits beyond 32 bits fail. | |||
| 159 | + | func parseRadix32(digits string, base int) (float64, bool) { | |||
| 160 | + | if digits == "" { | |||
| 161 | + | return 0, false | |||
| 162 | + | } | |||
| 163 | + | var v uint64 | |||
| 164 | + | for i := 0; i < len(digits); i++ { | |||
| 165 | + | c := digits[i] | |||
| 166 | + | var d int | |||
| 167 | + | switch { | |||
| 168 | + | case c >= '0' && c <= '9': | |||
| 169 | + | d = int(c - '0') | |||
| 170 | + | case c >= 'a' && c <= 'f': | |||
| 171 | + | d = int(c-'a') + 10 | |||
| 172 | + | case c >= 'A' && c <= 'F': | |||
| 173 | + | d = int(c-'A') + 10 | |||
| 174 | + | default: | |||
| 175 | + | return 0, false | |||
| 176 | + | } | |||
| 177 | + | if d >= base { | |||
| 178 | + | return 0, false | |||
| 179 | + | } | |||
| 180 | + | v = v*uint64(base) + uint64(d) | |||
| 181 | + | if v > math.MaxUint32 { | |||
| 182 | + | return 0, false | |||
| 183 | + | } | |||
| 128 | } | 184 | } | ||
| 129 | - | return v | 185 | + | return float64(int32(uint32(v))), true |
| 130 | } | 186 | } | ||
| 131 | 187 | ||||
| 132 | // isDecimalLiteral reports whether s matches | 188 | // isDecimalLiteral reports whether s matches | ||
A expr/number_test.go +62 -0
| @@ -0,0 +1,62 @@ | |||
| 1 | + | // SPDX-License-Identifier: MIT | |
| 2 | + | ||
| 3 | + | package expr | |
| 4 | + | ||
| 5 | + | import ( | |
| 6 | + | "math" | |
| 7 | + | "os" | |
| 8 | + | "strconv" | |
| 9 | + | "strings" | |
| 10 | + | "testing" | |
| 11 | + | ) | |
| 12 | + | ||
| 13 | + | // TestParseNumberMatchesRunner replays testdata/number_cases.txt, the answers | |
| 14 | + | // of the runner's ExpressionUtility.ParseNumber (gen/runner/number_cases.mjs) | |
| 15 | + | // on 443 strings: hexadecimal, octal and binary forms, signs, exponents, | |
| 16 | + | // Infinity and NaN spellings, Unicode digits and spaces. | |
| 17 | + | func TestParseNumberMatchesRunner(t *testing.T) { | |
| 18 | + | data, err := os.ReadFile("testdata/number_cases.txt") | |
| 19 | + | if err != nil { | |
| 20 | + | t.Fatal(err) | |
| 21 | + | } | |
| 22 | + | n := 0 | |
| 23 | + | for _, line := range strings.Split(strings.TrimSpace(string(data)), "\n") { | |
| 24 | + | f := strings.Fields(line) | |
| 25 | + | if len(f) != 2 { | |
| 26 | + | t.Fatalf("bad line %q", line) | |
| 27 | + | } | |
| 28 | + | in := decodeUnits(f[0]) | |
| 29 | + | var want float64 | |
| 30 | + | if f[1] == "NaN" { | |
| 31 | + | want = math.NaN() | |
| 32 | + | } else { | |
| 33 | + | bits, err := strconv.ParseUint(f[1], 16, 64) | |
| 34 | + | if err != nil { | |
| 35 | + | t.Fatal(err) | |
| 36 | + | } | |
| 37 | + | want = math.Float64frombits(bits) | |
| 38 | + | } | |
| 39 | + | got := parseNumber(in) | |
| 40 | + | if math.Float64bits(got) != math.Float64bits(want) && !(math.IsNaN(got) && math.IsNaN(want)) { | |
| 41 | + | t.Errorf("parseNumber(%q [%s]) = %v (%x), runner %v (%x)", in, f[0], got, math.Float64bits(got), want, math.Float64bits(want)) | |
| 42 | + | } | |
| 43 | + | n++ | |
| 44 | + | } | |
| 45 | + | if n < 400 { | |
| 46 | + | t.Errorf("only %d cases", n) | |
| 47 | + | } | |
| 48 | + | } | |
| 49 | + | ||
| 50 | + | // decodeUnits decodes dot-separated hexadecimal UTF-16 code units ("-" is the | |
| 51 | + | // empty string). | |
| 52 | + | func decodeUnits(h string) string { | |
| 53 | + | if h == "-" { | |
| 54 | + | return "" | |
| 55 | + | } | |
| 56 | + | var units []uint16 | |
| 57 | + | for _, u := range strings.Split(h, ".") { | |
| 58 | + | n, _ := strconv.ParseUint(u, 16, 16) | |
| 59 | + | units = append(units, uint16(n)) | |
| 60 | + | } | |
| 61 | + | return utf16String(units) | |
| 62 | + | } | |
| @@ -0,0 +1,62 @@ | |||||
| 1 | + | // SPDX-License-Identifier: MIT | |||
| 2 | + | ||||
| 3 | + | package expr | |||
| 4 | + | ||||
| 5 | + | import ( | |||
| 6 | + | "math" | |||
| 7 | + | "os" | |||
| 8 | + | "strconv" | |||
| 9 | + | "strings" | |||
| 10 | + | "testing" | |||
| 11 | + | ) | |||
| 12 | + | ||||
| 13 | + | // TestParseNumberMatchesRunner replays testdata/number_cases.txt, the answers | |||
| 14 | + | // of the runner's ExpressionUtility.ParseNumber (gen/runner/number_cases.mjs) | |||
| 15 | + | // on 443 strings: hexadecimal, octal and binary forms, signs, exponents, | |||
| 16 | + | // Infinity and NaN spellings, Unicode digits and spaces. | |||
| 17 | + | func TestParseNumberMatchesRunner(t *testing.T) { | |||
| 18 | + | data, err := os.ReadFile("testdata/number_cases.txt") | |||
| 19 | + | if err != nil { | |||
| 20 | + | t.Fatal(err) | |||
| 21 | + | } | |||
| 22 | + | n := 0 | |||
| 23 | + | for _, line := range strings.Split(strings.TrimSpace(string(data)), "\n") { | |||
| 24 | + | f := strings.Fields(line) | |||
| 25 | + | if len(f) != 2 { | |||
| 26 | + | t.Fatalf("bad line %q", line) | |||
| 27 | + | } | |||
| 28 | + | in := decodeUnits(f[0]) | |||
| 29 | + | var want float64 | |||
| 30 | + | if f[1] == "NaN" { | |||
| 31 | + | want = math.NaN() | |||
| 32 | + | } else { | |||
| 33 | + | bits, err := strconv.ParseUint(f[1], 16, 64) | |||
| 34 | + | if err != nil { | |||
| 35 | + | t.Fatal(err) | |||
| 36 | + | } | |||
| 37 | + | want = math.Float64frombits(bits) | |||
| 38 | + | } | |||
| 39 | + | got := parseNumber(in) | |||
| 40 | + | if math.Float64bits(got) != math.Float64bits(want) && !(math.IsNaN(got) && math.IsNaN(want)) { | |||
| 41 | + | t.Errorf("parseNumber(%q [%s]) = %v (%x), runner %v (%x)", in, f[0], got, math.Float64bits(got), want, math.Float64bits(want)) | |||
| 42 | + | } | |||
| 43 | + | n++ | |||
| 44 | + | } | |||
| 45 | + | if n < 400 { | |||
| 46 | + | t.Errorf("only %d cases", n) | |||
| 47 | + | } | |||
| 48 | + | } | |||
| 49 | + | ||||
| 50 | + | // decodeUnits decodes dot-separated hexadecimal UTF-16 code units ("-" is the | |||
| 51 | + | // empty string). | |||
| 52 | + | func decodeUnits(h string) string { | |||
| 53 | + | if h == "-" { | |||
| 54 | + | return "" | |||
| 55 | + | } | |||
| 56 | + | var units []uint16 | |||
| 57 | + | for _, u := range strings.Split(h, ".") { | |||
| 58 | + | n, _ := strconv.ParseUint(u, 16, 16) | |||
| 59 | + | units = append(units, uint16(n)) | |||
| 60 | + | } | |||
| 61 | + | return utf16String(units) | |||
| 62 | + | } | |||
A expr/testdata/number_cases.txt +443 -0
| @@ -0,0 +1,443 @@ | |||
| 1 | + | - 0 | |
| 2 | + | 20 0 | |
| 3 | + | 30 0 | |
| 4 | + | 30.30 0 | |
| 5 | + | 2D.30 8000000000000000 | |
| 6 | + | 2B.30 0 | |
| 7 | + | 31 3ff0000000000000 | |
| 8 | + | 2D.31 bff0000000000000 | |
| 9 | + | 2B.31 3ff0000000000000 | |
| 10 | + | 31.32 4028000000000000 | |
| 11 | + | 30.30.37 401c000000000000 | |
| 12 | + | 31.2E.35 3ff8000000000000 | |
| 13 | + | 2D.31.2E.35 bff8000000000000 | |
| 14 | + | 31.2E 3ff0000000000000 | |
| 15 | + | 2E.35 3fe0000000000000 | |
| 16 | + | 2D.2E.35 bfe0000000000000 | |
| 17 | + | 2B.2E.35 3fe0000000000000 | |
| 18 | + | 2E NaN | |
| 19 | + | 2D.2E NaN | |
| 20 | + | 2B.2E NaN | |
| 21 | + | 2E.2E NaN | |
| 22 | + | 31.2E.2E.32 NaN | |
| 23 | + | 31.2E.32.2E.33 NaN | |
| 24 | + | 31.65.33 408f400000000000 | |
| 25 | + | 31.45.33 408f400000000000 | |
| 26 | + | 31.65.2B.33 408f400000000000 | |
| 27 | + | 31.65.2D.33 3f50624dd2f1a9fc | |
| 28 | + | 31.65 NaN | |
| 29 | + | 31.65.2B NaN | |
| 30 | + | 31.65.2D NaN | |
| 31 | + | 65.33 NaN | |
| 32 | + | 45.33 NaN | |
| 33 | + | 2E.65.33 NaN | |
| 34 | + | 31.2E.65.33 408f400000000000 | |
| 35 | + | 2E.35.65.33 407f400000000000 | |
| 36 | + | 31.65.33.2E.35 NaN | |
| 37 | + | 31.65.30.33 408f400000000000 | |
| 38 | + | 31.65.30.30.30.33 408f400000000000 | |
| 39 | + | 31.65.33.30.38 7fe1ccf385ebc8a0 | |
| 40 | + | 31.65.33.30.39 7ff0000000000000 | |
| 41 | + | 2D.31.65.33.30.39 fff0000000000000 | |
| 42 | + | 31.65.2D.33.32.34 0 | |
| 43 | + | 31.65.2D.34.30.30 0 | |
| 44 | + | 34.2E.39.65.2D.33.32.34 1 | |
| 45 | + | 32.2E.35.65.2D.33.32.34 1 | |
| 46 | + | 31.2E.37.39.37.36.39.33.31.33.34.38.36.32.33.31.35.37.65.33.30.38 7fefffffffffffff | |
| 47 | + | 31.2E.37.39.37.36.39.33.31.33.34.38.36.32.33.31.35.39.65.33.30.38 7ff0000000000000 | |
| 48 | + | 30.2E.31 3fb999999999999a | |
| 49 | + | 30.2E.33.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.34 3fd3333333333334 | |
| 50 | + | 31.32.33.34.35.36.37.38.39.30.31.32.33.34.35.36.37.38.39.30.31.32.33.34.35.36.37.38.39.30 45f8ee90ff6c373e | |
| 51 | + | 39.30.30.37.31.39.39.32.35.34.37.34.30.39.39.33 4340000000000000 | |
| 52 | + | 2D.39.30.30.37.31.39.39.32.35.34.37.34.30.39.39.33 c340000000000000 | |
| 53 | + | 30.2E.30.30.30.30.30.31 3eb0c6f7a0b5ed8d | |
| 54 | + | 31.5F.30.30.30 NaN | |
| 55 | + | 31.2C.30.30.30 NaN | |
| 56 | + | 31.20.30.30.30 NaN | |
| 57 | + | 661.662.663 NaN | |
| 58 | + | FF11.FF12.FF13 NaN | |
| 59 | + | 49.6E.66.69.6E.69.74.79 7ff0000000000000 | |
| 60 | + | 2D.49.6E.66.69.6E.69.74.79 fff0000000000000 | |
| 61 | + | 2B.49.6E.66.69.6E.69.74.79 7ff0000000000000 | |
| 62 | + | 69.6E.66.69.6E.69.74.79 7ff0000000000000 | |
| 63 | + | 49.4E.46.49.4E.49.54.59 7ff0000000000000 | |
| 64 | + | 49.6E.66.69.6E.69.74 NaN | |
| 65 | + | 49.6E.66.69.6E.69.74.79.78 NaN | |
| 66 | + | 69.6E.66 NaN | |
| 67 | + | 49.6E.66 NaN | |
| 68 | + | 2D.69.6E.66 NaN | |
| 69 | + | 2B.69.6E.66 NaN | |
| 70 | + | 221E NaN | |
| 71 | + | 2D.221E NaN | |
| 72 | + | 2212.49.6E.66.69.6E.69.74.79 NaN | |
| 73 | + | 2212.31 NaN | |
| 74 | + | 4E.61.4E NaN | |
| 75 | + | 6E.61.6E NaN | |
| 76 | + | 4E.41.4E NaN | |
| 77 | + | 2D.4E.61.4E NaN | |
| 78 | + | 2B.4E.61.4E NaN | |
| 79 | + | 4E.61.4E.78 NaN | |
| 80 | + | 4E NaN | |
| 81 | + | 6E.75.6C.6C NaN | |
| 82 | + | 74.72.75.65 NaN | |
| 83 | + | 66.61.6C.73.65 NaN | |
| 84 | + | 61.62.63 NaN | |
| 85 | + | 78 NaN | |
| 86 | + | 2D NaN | |
| 87 | + | 2B NaN | |
| 88 | + | 2B.2D.31 NaN | |
| 89 | + | 2D.2B.31 NaN | |
| 90 | + | 2D.2D.31 NaN | |
| 91 | + | 2B.2B.31 NaN | |
| 92 | + | 2D.20.31 NaN | |
| 93 | + | 2B.20.31 NaN | |
| 94 | + | 31.20.2D NaN | |
| 95 | + | 31.2D NaN | |
| 96 | + | 31.2B NaN | |
| 97 | + | 31.20.32 NaN | |
| 98 | + | 30.78 NaN | |
| 99 | + | 30.78.30 0 | |
| 100 | + | 30.78.31 3ff0000000000000 | |
| 101 | + | 30.78.31.30 4030000000000000 | |
| 102 | + | 30.78.66.66 406fe00000000000 | |
| 103 | + | 30.78.46.46 406fe00000000000 | |
| 104 | + | 30.58.46.46 NaN | |
| 105 | + | 30.78.66.46 406fe00000000000 | |
| 106 | + | 30.78.37.66.66.66.66.66.66.66 41dfffffffc00000 | |
| 107 | + | 30.78.38.30.30.30.30.30.30.30 c1e0000000000000 | |
| 108 | + | 30.78.66.66.66.66.66.66.66.66 bff0000000000000 | |
| 109 | + | 30.78.31.30.30.30.30.30.30.30.30 NaN | |
| 110 | + | 30.78.46.46.46.46.46.46.46.46.46 NaN | |
| 111 | + | 30.78.30.30.30.30.30.30.30.31 3ff0000000000000 | |
| 112 | + | 30.78.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.31 3ff0000000000000 | |
| 113 | + | 30.78.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.31 3ff0000000000000 | |
| 114 | + | 2D.30.78.31 NaN | |
| 115 | + | 2B.30.78.31 NaN | |
| 116 | + | 30.78.2D.31 NaN | |
| 117 | + | 30.78.2B.31 NaN | |
| 118 | + | 30.78.31.2E.30 NaN | |
| 119 | + | 30.78.31.70.33 NaN | |
| 120 | + | 30.78.67 NaN | |
| 121 | + | 30.78.20.31 NaN | |
| 122 | + | 30.20.78.31 NaN | |
| 123 | + | 30.78.31.20 3ff0000000000000 | |
| 124 | + | 30.6F NaN | |
| 125 | + | 30.6F.30 0 | |
| 126 | + | 30.6F.37 401c000000000000 | |
| 127 | + | 30.6F.38 NaN | |
| 128 | + | 30.6F.31.37 402e000000000000 | |
| 129 | + | 30.4F.31.37 NaN | |
| 130 | + | 30.6F.37.37.37 407ff00000000000 | |
| 131 | + | 30.6F.31.37.37.37.37.37.37.37.37.37.37 41dfffffffc00000 | |
| 132 | + | 30.6F.32.30.30.30.30.30.30.30.30.30.30 c1e0000000000000 | |
| 133 | + | 30.6F.33.37.37.37.37.37.37.37.37.37.37 bff0000000000000 | |
| 134 | + | 30.6F.34.30.30.30.30.30.30.30.30.30.30 NaN | |
| 135 | + | 30.6F.37.37.37.37.37.37.37.37.37.37.37 NaN | |
| 136 | + | 30.6F.30.30.30.30.30.30.30.30.30.30.30.31 3ff0000000000000 | |
| 137 | + | 30.6F.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.31 3ff0000000000000 | |
| 138 | + | 2D.30.6F.37 NaN | |
| 139 | + | 30.6F.2D.37 NaN | |
| 140 | + | 30.6F.31.2E.35 NaN | |
| 141 | + | 30.6F.20.37 NaN | |
| 142 | + | 30.62 NaN | |
| 143 | + | 30.62.30 NaN | |
| 144 | + | 30.62.31 NaN | |
| 145 | + | 30.62.31.30.31 NaN | |
| 146 | + | 30.42.31.30.31 NaN | |
| 147 | + | 30.62.32 NaN | |
| 148 | + | 30.62.31.65.33 NaN | |
| 149 | + | 9.31 3ff0000000000000 | |
| 150 | + | 31.9 3ff0000000000000 | |
| 151 | + | A.31.A 3ff0000000000000 | |
| 152 | + | D.31 3ff0000000000000 | |
| 153 | + | B.31 3ff0000000000000 | |
| 154 | + | C.31 3ff0000000000000 | |
| 155 | + | A0.31 3ff0000000000000 | |
| 156 | + | 31.A0 3ff0000000000000 | |
| 157 | + | 2028.31 3ff0000000000000 | |
| 158 | + | 2029.31 3ff0000000000000 | |
| 159 | + | 85.31 3ff0000000000000 | |
| 160 | + | 31.85 3ff0000000000000 | |
| 161 | + | 3000.31 3ff0000000000000 | |
| 162 | + | 2003.31.2003 3ff0000000000000 | |
| 163 | + | FEFF.31 NaN | |
| 164 | + | 31.FEFF NaN | |
| 165 | + | 200B.31 NaN | |
| 166 | + | 180E.31 NaN | |
| 167 | + | 1680.31 3ff0000000000000 | |
| 168 | + | 31.0 3ff0000000000000 | |
| 169 | + | 0.31 NaN | |
| 170 | + | 31.20 3ff0000000000000 | |
| 171 | + | 20.31 3ff0000000000000 | |
| 172 | + | 20.20.31.20.20 3ff0000000000000 | |
| 173 | + | 2B.20 NaN | |
| 174 | + | 20.2D.31.2E.35.65.32.20 c062c00000000000 | |
| 175 | + | 31.30 4024000000000000 | |
| 176 | + | 2E.31 3fb999999999999a | |
| 177 | + | 31.2E.31 3ff199999999999a | |
| 178 | + | 31.65.31 4024000000000000 | |
| 179 | + | 31.65.2B.31 4024000000000000 | |
| 180 | + | 31.65.2D.31 3fb999999999999a | |
| 181 | + | 2E.31.65.31 3ff0000000000000 | |
| 182 | + | 31.2E.65.31 4024000000000000 | |
| 183 | + | 30.78.41 4024000000000000 | |
| 184 | + | 30.6F.31 3ff0000000000000 | |
| 185 | + | 2B.31.30 4024000000000000 | |
| 186 | + | 2B.31.2E 3ff0000000000000 | |
| 187 | + | 2B.2E.31 3fb999999999999a | |
| 188 | + | 2B.31.2E.31 3ff199999999999a | |
| 189 | + | 2B.31.65.31 4024000000000000 | |
| 190 | + | 2B.31.65.2B.31 4024000000000000 | |
| 191 | + | 2B.31.65.2D.31 3fb999999999999a | |
| 192 | + | 2B.2E.31.65.31 3ff0000000000000 | |
| 193 | + | 2B.31.2E.65.31 4024000000000000 | |
| 194 | + | 2B.69.6E.66.69.6E.69.74.79 7ff0000000000000 | |
| 195 | + | 2B.6E.61.6E NaN | |
| 196 | + | 2B.30.78.41 NaN | |
| 197 | + | 2B.30.6F.31 NaN | |
| 198 | + | 2B.30.62.31 NaN | |
| 199 | + | 2D.31.30 c024000000000000 | |
| 200 | + | 2D.31.2E bff0000000000000 | |
| 201 | + | 2D.2E.31 bfb999999999999a | |
| 202 | + | 2D.31.2E.31 bff199999999999a | |
| 203 | + | 2D.31.65.31 c024000000000000 | |
| 204 | + | 2D.31.65.2B.31 c024000000000000 | |
| 205 | + | 2D.31.65.2D.31 bfb999999999999a | |
| 206 | + | 2D.2E.31.65.31 bff0000000000000 | |
| 207 | + | 2D.31.2E.65.31 c024000000000000 | |
| 208 | + | 2D.69.6E.66.69.6E.69.74.79 fff0000000000000 | |
| 209 | + | 2D.6E.61.6E NaN | |
| 210 | + | 2D.30.78.41 NaN | |
| 211 | + | 2D.30.6F.31 NaN | |
| 212 | + | 2D.30.62.31 NaN | |
| 213 | + | 30.78.66 402e000000000000 | |
| 214 | + | 30.78.30.31 3ff0000000000000 | |
| 215 | + | 30.6F.30.31 3ff0000000000000 | |
| 216 | + | 30.2E.30.31 3f847ae147ae147b | |
| 217 | + | 30.6F.37.37 404f800000000000 | |
| 218 | + | 30.78.30.30.31 3ff0000000000000 | |
| 219 | + | 30.6F.30.30.31 3ff0000000000000 | |
| 220 | + | 31.30.30 4059000000000000 | |
| 221 | + | 30.2E.30.30.31 3f50624dd2f1a9fc | |
| 222 | + | 30.78.66.66.66 40affe0000000000 | |
| 223 | + | 30.78.30.30.30.31 3ff0000000000000 | |
| 224 | + | 30.6F.30.30.30.31 3ff0000000000000 | |
| 225 | + | 31.30.30.30 408f400000000000 | |
| 226 | + | 30.2E.30.30.30.31 3f1a36e2eb1c432d | |
| 227 | + | 30.78.66.66.66.66 40efffe000000000 | |
| 228 | + | 30.6F.37.37.37.37 40affe0000000000 | |
| 229 | + | 30.78.30.30.30.30.31 3ff0000000000000 | |
| 230 | + | 30.6F.30.30.30.30.31 3ff0000000000000 | |
| 231 | + | 31.30.30.30.30 40c3880000000000 | |
| 232 | + | 30.2E.30.30.30.30.31 3ee4f8b588e368f1 | |
| 233 | + | 30.78.66.66.66.66.66 412ffffe00000000 | |
| 234 | + | 30.6F.37.37.37.37.37 40dfffc000000000 | |
| 235 | + | 30.78.30.30.30.30.30.31 3ff0000000000000 | |
| 236 | + | 30.6F.30.30.30.30.30.31 3ff0000000000000 | |
| 237 | + | 31.30.30.30.30.30 40f86a0000000000 | |
| 238 | + | 30.78.66.66.66.66.66.66 416fffffe0000000 | |
| 239 | + | 30.6F.37.37.37.37.37.37 410ffff800000000 | |
| 240 | + | 30.78.30.30.30.30.30.30.31 3ff0000000000000 | |
| 241 | + | 30.6F.30.30.30.30.30.30.31 3ff0000000000000 | |
| 242 | + | 31.30.30.30.30.30.30 412e848000000000 | |
| 243 | + | 30.2E.30.30.30.30.30.30.31 3e7ad7f29abcaf48 | |
| 244 | + | 30.78.66.66.66.66.66.66.66 41affffffe000000 | |
| 245 | + | 30.6F.37.37.37.37.37.37.37 413fffff00000000 | |
| 246 | + | 30.6F.30.30.30.30.30.30.30.31 3ff0000000000000 | |
| 247 | + | 31.30.30.30.30.30.30.30 416312d000000000 | |
| 248 | + | 30.2E.30.30.30.30.30.30.30.31 3e45798ee2308c3a | |
| 249 | + | 30.6F.37.37.37.37.37.37.37.37 416fffffe0000000 | |
| 250 | + | 30.78.30.30.30.30.30.30.30.30.31 3ff0000000000000 | |
| 251 | + | 30.6F.30.30.30.30.30.30.30.30.31 3ff0000000000000 | |
| 252 | + | 31.30.30.30.30.30.30.30.30 4197d78400000000 | |
| 253 | + | 30.2E.30.30.30.30.30.30.30.30.31 3e112e0be826d695 | |
| 254 | + | 30.78.66.66.66.66.66.66.66.66.66 NaN | |
| 255 | + | 30.6F.37.37.37.37.37.37.37.37.37 419ffffffc000000 | |
| 256 | + | 30.78.30.30.30.30.30.30.30.30.30.31 3ff0000000000000 | |
| 257 | + | 30.6F.30.30.30.30.30.30.30.30.30.31 3ff0000000000000 | |
| 258 | + | 31.30.30.30.30.30.30.30.30.30 41cdcd6500000000 | |
| 259 | + | 30.2E.30.30.30.30.30.30.30.30.30.31 3ddb7cdfd9d7bdbb | |
| 260 | + | 30.78.66.66.66.66.66.66.66.66.66.66 NaN | |
| 261 | + | 30.6F.37.37.37.37.37.37.37.37.37.37 41cfffffff800000 | |
| 262 | + | 30.78.30.30.30.30.30.30.30.30.30.30.31 3ff0000000000000 | |
| 263 | + | 30.6F.30.30.30.30.30.30.30.30.30.30.31 3ff0000000000000 | |
| 264 | + | 31.30.30.30.30.30.30.30.30.30.30 4202a05f20000000 | |
| 265 | + | 30.2E.30.30.30.30.30.30.30.30.30.30.31 3da5fd7fe1796495 | |
| 266 | + | 30.78.66.66.66.66.66.66.66.66.66.66.66 NaN | |
| 267 | + | 30.78.30.30.30.30.30.30.30.30.30.30.30.31 3ff0000000000000 | |
| 268 | + | 31.30.30.30.30.30.30.30.30.30.30.30 42374876e8000000 | |
| 269 | + | 30.2E.30.30.30.30.30.30.30.30.30.30.30.31 3d719799812dea11 | |
| 270 | + | 30.78.66.66.66.66.66.66.66.66.66.66.66.66 NaN | |
| 271 | + | 30.6F.37.37.37.37.37.37.37.37.37.37.37.37 NaN | |
| 272 | + | 30.78.30.30.30.30.30.30.30.30.30.30.30.30.31 3ff0000000000000 | |
| 273 | + | 30.6F.30.30.30.30.30.30.30.30.30.30.30.30.31 3ff0000000000000 | |
| 274 | + | 31.30.30.30.30.30.30.30.30.30.30.30.30 426d1a94a2000000 | |
| 275 | + | 30.2E.30.30.30.30.30.30.30.30.30.30.30.30.31 3d3c25c268497682 | |
| 276 | + | 30.78.66.66.66.66.66.66.66.66.66.66.66.66.66 NaN | |
| 277 | + | 30.6F.37.37.37.37.37.37.37.37.37.37.37.37.37 NaN | |
| 278 | + | 30.78.30.30.30.30.30.30.30.30.30.30.30.30.30.31 3ff0000000000000 | |
| 279 | + | 30.6F.30.30.30.30.30.30.30.30.30.30.30.30.30.31 3ff0000000000000 | |
| 280 | + | 31.30.30.30.30.30.30.30.30.30.30.30.30.30 42a2309ce5400000 | |
| 281 | + | 30.2E.30.30.30.30.30.30.30.30.30.30.30.30.30.31 3d06849b86a12b9b | |
| 282 | + | 30.78.66.66.66.66.66.66.66.66.66.66.66.66.66.66 NaN | |
| 283 | + | 30.6F.37.37.37.37.37.37.37.37.37.37.37.37.37.37 NaN | |
| 284 | + | 30.78.30.30.30.30.30.30.30.30.30.30.30.30.30.30.31 3ff0000000000000 | |
| 285 | + | 30.6F.30.30.30.30.30.30.30.30.30.30.30.30.30.30.31 3ff0000000000000 | |
| 286 | + | 31.30.30.30.30.30.30.30.30.30.30.30.30.30.30 42d6bcc41e900000 | |
| 287 | + | 30.2E.30.30.30.30.30.30.30.30.30.30.30.30.30.30.31 3cd203af9ee75616 | |
| 288 | + | 30.78.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66 NaN | |
| 289 | + | 30.6F.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37 NaN | |
| 290 | + | 30.6F.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.31 3ff0000000000000 | |
| 291 | + | 31.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30 430c6bf526340000 | |
| 292 | + | 30.2E.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.31 3c9cd2b297d889bc | |
| 293 | + | 30.78.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66 NaN | |
| 294 | + | 30.6F.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37 NaN | |
| 295 | + | 30.78.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.31 3ff0000000000000 | |
| 296 | + | 30.6F.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.31 3ff0000000000000 | |
| 297 | + | 31.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30 4341c37937e08000 | |
| 298 | + | 30.2E.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.31 3c670ef54646d497 | |
| 299 | + | 30.78.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66 NaN | |
| 300 | + | 30.6F.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37 NaN | |
| 301 | + | 30.78.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.31 3ff0000000000000 | |
| 302 | + | 30.6F.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.31 3ff0000000000000 | |
| 303 | + | 31.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30 4376345785d8a000 | |
| 304 | + | 30.2E.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.31 3c32725dd1d243ac | |
| 305 | + | 30.78.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66 NaN | |
| 306 | + | 30.6F.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37 NaN | |
| 307 | + | 30.78.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.31 3ff0000000000000 | |
| 308 | + | 30.6F.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.31 3ff0000000000000 | |
| 309 | + | 31.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30 43abc16d674ec800 | |
| 310 | + | 30.2E.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.31 3bfd83c94fb6d2ac | |
| 311 | + | 30.78.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66 NaN | |
| 312 | + | 30.6F.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37 NaN | |
| 313 | + | 30.78.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.31 3ff0000000000000 | |
| 314 | + | 30.6F.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.31 3ff0000000000000 | |
| 315 | + | 31.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30 43e158e460913d00 | |
| 316 | + | 30.2E.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.31 3bc79ca10c924223 | |
| 317 | + | 30.78.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66 NaN | |
| 318 | + | 30.6F.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37 NaN | |
| 319 | + | 30.6F.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.31 3ff0000000000000 | |
| 320 | + | 31.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30 4415af1d78b58c40 | |
| 321 | + | 30.2E.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.31 3b92e3b40a0e9b4f | |
| 322 | + | 30.78.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66 NaN | |
| 323 | + | 30.6F.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37 NaN | |
| 324 | + | 30.78.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.31 3ff0000000000000 | |
| 325 | + | 31.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30 444b1ae4d6e2ef50 | |
| 326 | + | 30.2E.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.31 3b5e392010175ee6 | |
| 327 | + | 30.78.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66 NaN | |
| 328 | + | 30.6F.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37 NaN | |
| 329 | + | 30.78.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.31 3ff0000000000000 | |
| 330 | + | 30.6F.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.31 3ff0000000000000 | |
| 331 | + | 31.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30 4480f0cf064dd592 | |
| 332 | + | 30.2E.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.31 3b282db34012b251 | |
| 333 | + | 30.78.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66 NaN | |
| 334 | + | 30.6F.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37 NaN | |
| 335 | + | 30.78.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.31 3ff0000000000000 | |
| 336 | + | 30.6F.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.31 3ff0000000000000 | |
| 337 | + | 31.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30 44b52d02c7e14af6 | |
| 338 | + | 30.2E.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.31 3af357c299a88ea7 | |
| 339 | + | 30.78.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66 NaN | |
| 340 | + | 30.6F.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37 NaN | |
| 341 | + | 30.78.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.31 3ff0000000000000 | |
| 342 | + | 30.6F.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.31 3ff0000000000000 | |
| 343 | + | 31.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30 44ea784379d99db4 | |
| 344 | + | 30.2E.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.31 3abef2d0f5da7dd9 | |
| 345 | + | 30.78.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66 NaN | |
| 346 | + | 30.6F.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37 NaN | |
| 347 | + | 30.78.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.31 3ff0000000000000 | |
| 348 | + | 30.6F.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.31 3ff0000000000000 | |
| 349 | + | 31.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30 45208b2a2c280291 | |
| 350 | + | 30.2E.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.31 3a88c240c4aecb14 | |
| 351 | + | 30.78.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66 NaN | |
| 352 | + | 30.6F.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37 NaN | |
| 353 | + | 30.78.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.31 3ff0000000000000 | |
| 354 | + | 30.6F.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.31 3ff0000000000000 | |
| 355 | + | 31.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30 4554adf4b7320335 | |
| 356 | + | 30.2E.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.31 3a53ce9a36f23c10 | |
| 357 | + | 30.78.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66 NaN | |
| 358 | + | 30.6F.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37 NaN | |
| 359 | + | 30.78.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.31 3ff0000000000000 | |
| 360 | + | 30.6F.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.31 3ff0000000000000 | |
| 361 | + | 31.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30 4589d971e4fe8402 | |
| 362 | + | 30.2E.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.31 3a1fb0f6be506019 | |
| 363 | + | 30.78.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66 NaN | |
| 364 | + | 30.6F.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37 NaN | |
| 365 | + | 30.78.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.31 3ff0000000000000 | |
| 366 | + | 30.6F.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.31 3ff0000000000000 | |
| 367 | + | 31.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30 45c027e72f1f1281 | |
| 368 | + | 30.2E.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.31 39e95a5efea6b347 | |
| 369 | + | 30.78.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66 NaN | |
| 370 | + | 30.6F.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37 NaN | |
| 371 | + | 30.78.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.31 3ff0000000000000 | |
| 372 | + | 30.6F.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.31 3ff0000000000000 | |
| 373 | + | 31.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30 45f431e0fae6d721 | |
| 374 | + | 30.2E.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.31 39b4484bfeebc2a0 | |
| 375 | + | 30.78.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66 NaN | |
| 376 | + | 30.6F.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37 NaN | |
| 377 | + | 30.78.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.31 3ff0000000000000 | |
| 378 | + | 30.6F.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.31 3ff0000000000000 | |
| 379 | + | 31.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30 46293e5939a08cea | |
| 380 | + | 30.2E.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.31 398039d665896880 | |
| 381 | + | 30.78.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66 NaN | |
| 382 | + | 30.6F.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37 NaN | |
| 383 | + | 30.78.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.31 3ff0000000000000 | |
| 384 | + | 30.6F.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.31 3ff0000000000000 | |
| 385 | + | 31.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30 465f8def8808b024 | |
| 386 | + | 30.2E.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.31 3949f623d5a8a733 | |
| 387 | + | 30.78.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66 NaN | |
| 388 | + | 30.6F.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37 NaN | |
| 389 | + | 30.78.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.31 3ff0000000000000 | |
| 390 | + | 30.6F.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.31 3ff0000000000000 | |
| 391 | + | 31.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30 4693b8b5b5056e17 | |
| 392 | + | 30.2E.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.31 3914c4e977ba1f5c | |
| 393 | + | 30.78.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66 NaN | |
| 394 | + | 30.6F.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37 NaN | |
| 395 | + | 30.78.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.31 3ff0000000000000 | |
| 396 | + | 30.6F.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.31 3ff0000000000000 | |
| 397 | + | 31.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30 46c8a6e32246c99c | |
| 398 | + | 30.2E.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.31 38e09d8792fb4c49 | |
| 399 | + | 30.78.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66 NaN | |
| 400 | + | 30.6F.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37 NaN | |
| 401 | + | 30.78.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.31 3ff0000000000000 | |
| 402 | + | 30.6F.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.31 3ff0000000000000 | |
| 403 | + | 31.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30 46fed09bead87c03 | |
| 404 | + | 30.2E.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.31 38aa95a5b7f87a0f | |
| 405 | + | 30.78.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66 NaN | |
| 406 | + | 30.6F.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37 NaN | |
| 407 | + | 30.78.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.31 3ff0000000000000 | |
| 408 | + | 30.6F.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.31 3ff0000000000000 | |
| 409 | + | 31.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30 4733426172c74d82 | |
| 410 | + | 30.2E.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.31 38754484932d2e72 | |
| 411 | + | 30.78.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66 NaN | |
| 412 | + | 30.6F.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37 NaN | |
| 413 | + | 30.78.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.31 3ff0000000000000 | |
| 414 | + | 30.6F.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.31 3ff0000000000000 | |
| 415 | + | 31.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30 476812f9cf7920e3 | |
| 416 | + | 30.2E.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.31 3841039d428a8b8f | |
| 417 | + | 30.78.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66 NaN | |
| 418 | + | 30.6F.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37 NaN | |
| 419 | + | 30.78.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.31 3ff0000000000000 | |
| 420 | + | 30.6F.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.31 3ff0000000000000 | |
| 421 | + | 31.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30 479e17b84357691b | |
| 422 | + | 30.2E.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.31 380b38fb9daa78e4 | |
| 423 | + | 30.78.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66 NaN | |
| 424 | + | 30.6F.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37 NaN | |
| 425 | + | 30.78.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.31 3ff0000000000000 | |
| 426 | + | 30.6F.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.31 3ff0000000000000 | |
| 427 | + | 31.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30 47d2ced32a16a1b1 | |
| 428 | + | 30.2E.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.31 37d5c72fb1552d83 | |
| 429 | + | 30.78.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66 NaN | |
| 430 | + | 30.6F.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37 NaN | |
| 431 | + | 30.78.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.31 3ff0000000000000 | |
| 432 | + | 30.6F.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.31 3ff0000000000000 | |
| 433 | + | 31.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30 48078287f49c4a1d | |
| 434 | + | 30.2E.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.31 37a16c262777579c | |
| 435 | + | 30.6F.33.37.37 406fe00000000000 | |
| 436 | + | 32.35.35 406fe00000000000 | |
| 437 | + | 30.78.31.30.30 4070000000000000 | |
| 438 | + | 30.6F.34.30.30 4070000000000000 | |
| 439 | + | 32.35.36 4070000000000000 | |
| 440 | + | 32.31.34.37.34.38.33.36.34.37 41dfffffffc00000 | |
| 441 | + | 32.31.34.37.34.38.33.36.34.38 41e0000000000000 | |
| 442 | + | 34.32.39.34.39.36.37.32.39.35 41efffffffe00000 | |
| 443 | + | 34.32.39.34.39.36.37.32.39.36 41f0000000000000 | |
| @@ -0,0 +1,443 @@ | |||||
| 1 | + | - 0 | |||
| 2 | + | 20 0 | |||
| 3 | + | 30 0 | |||
| 4 | + | 30.30 0 | |||
| 5 | + | 2D.30 8000000000000000 | |||
| 6 | + | 2B.30 0 | |||
| 7 | + | 31 3ff0000000000000 | |||
| 8 | + | 2D.31 bff0000000000000 | |||
| 9 | + | 2B.31 3ff0000000000000 | |||
| 10 | + | 31.32 4028000000000000 | |||
| 11 | + | 30.30.37 401c000000000000 | |||
| 12 | + | 31.2E.35 3ff8000000000000 | |||
| 13 | + | 2D.31.2E.35 bff8000000000000 | |||
| 14 | + | 31.2E 3ff0000000000000 | |||
| 15 | + | 2E.35 3fe0000000000000 | |||
| 16 | + | 2D.2E.35 bfe0000000000000 | |||
| 17 | + | 2B.2E.35 3fe0000000000000 | |||
| 18 | + | 2E NaN | |||
| 19 | + | 2D.2E NaN | |||
| 20 | + | 2B.2E NaN | |||
| 21 | + | 2E.2E NaN | |||
| 22 | + | 31.2E.2E.32 NaN | |||
| 23 | + | 31.2E.32.2E.33 NaN | |||
| 24 | + | 31.65.33 408f400000000000 | |||
| 25 | + | 31.45.33 408f400000000000 | |||
| 26 | + | 31.65.2B.33 408f400000000000 | |||
| 27 | + | 31.65.2D.33 3f50624dd2f1a9fc | |||
| 28 | + | 31.65 NaN | |||
| 29 | + | 31.65.2B NaN | |||
| 30 | + | 31.65.2D NaN | |||
| 31 | + | 65.33 NaN | |||
| 32 | + | 45.33 NaN | |||
| 33 | + | 2E.65.33 NaN | |||
| 34 | + | 31.2E.65.33 408f400000000000 | |||
| 35 | + | 2E.35.65.33 407f400000000000 | |||
| 36 | + | 31.65.33.2E.35 NaN | |||
| 37 | + | 31.65.30.33 408f400000000000 | |||
| 38 | + | 31.65.30.30.30.33 408f400000000000 | |||
| 39 | + | 31.65.33.30.38 7fe1ccf385ebc8a0 | |||
| 40 | + | 31.65.33.30.39 7ff0000000000000 | |||
| 41 | + | 2D.31.65.33.30.39 fff0000000000000 | |||
| 42 | + | 31.65.2D.33.32.34 0 | |||
| 43 | + | 31.65.2D.34.30.30 0 | |||
| 44 | + | 34.2E.39.65.2D.33.32.34 1 | |||
| 45 | + | 32.2E.35.65.2D.33.32.34 1 | |||
| 46 | + | 31.2E.37.39.37.36.39.33.31.33.34.38.36.32.33.31.35.37.65.33.30.38 7fefffffffffffff | |||
| 47 | + | 31.2E.37.39.37.36.39.33.31.33.34.38.36.32.33.31.35.39.65.33.30.38 7ff0000000000000 | |||
| 48 | + | 30.2E.31 3fb999999999999a | |||
| 49 | + | 30.2E.33.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.34 3fd3333333333334 | |||
| 50 | + | 31.32.33.34.35.36.37.38.39.30.31.32.33.34.35.36.37.38.39.30.31.32.33.34.35.36.37.38.39.30 45f8ee90ff6c373e | |||
| 51 | + | 39.30.30.37.31.39.39.32.35.34.37.34.30.39.39.33 4340000000000000 | |||
| 52 | + | 2D.39.30.30.37.31.39.39.32.35.34.37.34.30.39.39.33 c340000000000000 | |||
| 53 | + | 30.2E.30.30.30.30.30.31 3eb0c6f7a0b5ed8d | |||
| 54 | + | 31.5F.30.30.30 NaN | |||
| 55 | + | 31.2C.30.30.30 NaN | |||
| 56 | + | 31.20.30.30.30 NaN | |||
| 57 | + | 661.662.663 NaN | |||
| 58 | + | FF11.FF12.FF13 NaN | |||
| 59 | + | 49.6E.66.69.6E.69.74.79 7ff0000000000000 | |||
| 60 | + | 2D.49.6E.66.69.6E.69.74.79 fff0000000000000 | |||
| 61 | + | 2B.49.6E.66.69.6E.69.74.79 7ff0000000000000 | |||
| 62 | + | 69.6E.66.69.6E.69.74.79 7ff0000000000000 | |||
| 63 | + | 49.4E.46.49.4E.49.54.59 7ff0000000000000 | |||
| 64 | + | 49.6E.66.69.6E.69.74 NaN | |||
| 65 | + | 49.6E.66.69.6E.69.74.79.78 NaN | |||
| 66 | + | 69.6E.66 NaN | |||
| 67 | + | 49.6E.66 NaN | |||
| 68 | + | 2D.69.6E.66 NaN | |||
| 69 | + | 2B.69.6E.66 NaN | |||
| 70 | + | 221E NaN | |||
| 71 | + | 2D.221E NaN | |||
| 72 | + | 2212.49.6E.66.69.6E.69.74.79 NaN | |||
| 73 | + | 2212.31 NaN | |||
| 74 | + | 4E.61.4E NaN | |||
| 75 | + | 6E.61.6E NaN | |||
| 76 | + | 4E.41.4E NaN | |||
| 77 | + | 2D.4E.61.4E NaN | |||
| 78 | + | 2B.4E.61.4E NaN | |||
| 79 | + | 4E.61.4E.78 NaN | |||
| 80 | + | 4E NaN | |||
| 81 | + | 6E.75.6C.6C NaN | |||
| 82 | + | 74.72.75.65 NaN | |||
| 83 | + | 66.61.6C.73.65 NaN | |||
| 84 | + | 61.62.63 NaN | |||
| 85 | + | 78 NaN | |||
| 86 | + | 2D NaN | |||
| 87 | + | 2B NaN | |||
| 88 | + | 2B.2D.31 NaN | |||
| 89 | + | 2D.2B.31 NaN | |||
| 90 | + | 2D.2D.31 NaN | |||
| 91 | + | 2B.2B.31 NaN | |||
| 92 | + | 2D.20.31 NaN | |||
| 93 | + | 2B.20.31 NaN | |||
| 94 | + | 31.20.2D NaN | |||
| 95 | + | 31.2D NaN | |||
| 96 | + | 31.2B NaN | |||
| 97 | + | 31.20.32 NaN | |||
| 98 | + | 30.78 NaN | |||
| 99 | + | 30.78.30 0 | |||
| 100 | + | 30.78.31 3ff0000000000000 | |||
| 101 | + | 30.78.31.30 4030000000000000 | |||
| 102 | + | 30.78.66.66 406fe00000000000 | |||
| 103 | + | 30.78.46.46 406fe00000000000 | |||
| 104 | + | 30.58.46.46 NaN | |||
| 105 | + | 30.78.66.46 406fe00000000000 | |||
| 106 | + | 30.78.37.66.66.66.66.66.66.66 41dfffffffc00000 | |||
| 107 | + | 30.78.38.30.30.30.30.30.30.30 c1e0000000000000 | |||
| 108 | + | 30.78.66.66.66.66.66.66.66.66 bff0000000000000 | |||
| 109 | + | 30.78.31.30.30.30.30.30.30.30.30 NaN | |||
| 110 | + | 30.78.46.46.46.46.46.46.46.46.46 NaN | |||
| 111 | + | 30.78.30.30.30.30.30.30.30.31 3ff0000000000000 | |||
| 112 | + | 30.78.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.31 3ff0000000000000 | |||
| 113 | + | 30.78.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.31 3ff0000000000000 | |||
| 114 | + | 2D.30.78.31 NaN | |||
| 115 | + | 2B.30.78.31 NaN | |||
| 116 | + | 30.78.2D.31 NaN | |||
| 117 | + | 30.78.2B.31 NaN | |||
| 118 | + | 30.78.31.2E.30 NaN | |||
| 119 | + | 30.78.31.70.33 NaN | |||
| 120 | + | 30.78.67 NaN | |||
| 121 | + | 30.78.20.31 NaN | |||
| 122 | + | 30.20.78.31 NaN | |||
| 123 | + | 30.78.31.20 3ff0000000000000 | |||
| 124 | + | 30.6F NaN | |||
| 125 | + | 30.6F.30 0 | |||
| 126 | + | 30.6F.37 401c000000000000 | |||
| 127 | + | 30.6F.38 NaN | |||
| 128 | + | 30.6F.31.37 402e000000000000 | |||
| 129 | + | 30.4F.31.37 NaN | |||
| 130 | + | 30.6F.37.37.37 407ff00000000000 | |||
| 131 | + | 30.6F.31.37.37.37.37.37.37.37.37.37.37 41dfffffffc00000 | |||
| 132 | + | 30.6F.32.30.30.30.30.30.30.30.30.30.30 c1e0000000000000 | |||
| 133 | + | 30.6F.33.37.37.37.37.37.37.37.37.37.37 bff0000000000000 | |||
| 134 | + | 30.6F.34.30.30.30.30.30.30.30.30.30.30 NaN | |||
| 135 | + | 30.6F.37.37.37.37.37.37.37.37.37.37.37 NaN | |||
| 136 | + | 30.6F.30.30.30.30.30.30.30.30.30.30.30.31 3ff0000000000000 | |||
| 137 | + | 30.6F.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.31 3ff0000000000000 | |||
| 138 | + | 2D.30.6F.37 NaN | |||
| 139 | + | 30.6F.2D.37 NaN | |||
| 140 | + | 30.6F.31.2E.35 NaN | |||
| 141 | + | 30.6F.20.37 NaN | |||
| 142 | + | 30.62 NaN | |||
| 143 | + | 30.62.30 NaN | |||
| 144 | + | 30.62.31 NaN | |||
| 145 | + | 30.62.31.30.31 NaN | |||
| 146 | + | 30.42.31.30.31 NaN | |||
| 147 | + | 30.62.32 NaN | |||
| 148 | + | 30.62.31.65.33 NaN | |||
| 149 | + | 9.31 3ff0000000000000 | |||
| 150 | + | 31.9 3ff0000000000000 | |||
| 151 | + | A.31.A 3ff0000000000000 | |||
| 152 | + | D.31 3ff0000000000000 | |||
| 153 | + | B.31 3ff0000000000000 | |||
| 154 | + | C.31 3ff0000000000000 | |||
| 155 | + | A0.31 3ff0000000000000 | |||
| 156 | + | 31.A0 3ff0000000000000 | |||
| 157 | + | 2028.31 3ff0000000000000 | |||
| 158 | + | 2029.31 3ff0000000000000 | |||
| 159 | + | 85.31 3ff0000000000000 | |||
| 160 | + | 31.85 3ff0000000000000 | |||
| 161 | + | 3000.31 3ff0000000000000 | |||
| 162 | + | 2003.31.2003 3ff0000000000000 | |||
| 163 | + | FEFF.31 NaN | |||
| 164 | + | 31.FEFF NaN | |||
| 165 | + | 200B.31 NaN | |||
| 166 | + | 180E.31 NaN | |||
| 167 | + | 1680.31 3ff0000000000000 | |||
| 168 | + | 31.0 3ff0000000000000 | |||
| 169 | + | 0.31 NaN | |||
| 170 | + | 31.20 3ff0000000000000 | |||
| 171 | + | 20.31 3ff0000000000000 | |||
| 172 | + | 20.20.31.20.20 3ff0000000000000 | |||
| 173 | + | 2B.20 NaN | |||
| 174 | + | 20.2D.31.2E.35.65.32.20 c062c00000000000 | |||
| 175 | + | 31.30 4024000000000000 | |||
| 176 | + | 2E.31 3fb999999999999a | |||
| 177 | + | 31.2E.31 3ff199999999999a | |||
| 178 | + | 31.65.31 4024000000000000 | |||
| 179 | + | 31.65.2B.31 4024000000000000 | |||
| 180 | + | 31.65.2D.31 3fb999999999999a | |||
| 181 | + | 2E.31.65.31 3ff0000000000000 | |||
| 182 | + | 31.2E.65.31 4024000000000000 | |||
| 183 | + | 30.78.41 4024000000000000 | |||
| 184 | + | 30.6F.31 3ff0000000000000 | |||
| 185 | + | 2B.31.30 4024000000000000 | |||
| 186 | + | 2B.31.2E 3ff0000000000000 | |||
| 187 | + | 2B.2E.31 3fb999999999999a | |||
| 188 | + | 2B.31.2E.31 3ff199999999999a | |||
| 189 | + | 2B.31.65.31 4024000000000000 | |||
| 190 | + | 2B.31.65.2B.31 4024000000000000 | |||
| 191 | + | 2B.31.65.2D.31 3fb999999999999a | |||
| 192 | + | 2B.2E.31.65.31 3ff0000000000000 | |||
| 193 | + | 2B.31.2E.65.31 4024000000000000 | |||
| 194 | + | 2B.69.6E.66.69.6E.69.74.79 7ff0000000000000 | |||
| 195 | + | 2B.6E.61.6E NaN | |||
| 196 | + | 2B.30.78.41 NaN | |||
| 197 | + | 2B.30.6F.31 NaN | |||
| 198 | + | 2B.30.62.31 NaN | |||
| 199 | + | 2D.31.30 c024000000000000 | |||
| 200 | + | 2D.31.2E bff0000000000000 | |||
| 201 | + | 2D.2E.31 bfb999999999999a | |||
| 202 | + | 2D.31.2E.31 bff199999999999a | |||
| 203 | + | 2D.31.65.31 c024000000000000 | |||
| 204 | + | 2D.31.65.2B.31 c024000000000000 | |||
| 205 | + | 2D.31.65.2D.31 bfb999999999999a | |||
| 206 | + | 2D.2E.31.65.31 bff0000000000000 | |||
| 207 | + | 2D.31.2E.65.31 c024000000000000 | |||
| 208 | + | 2D.69.6E.66.69.6E.69.74.79 fff0000000000000 | |||
| 209 | + | 2D.6E.61.6E NaN | |||
| 210 | + | 2D.30.78.41 NaN | |||
| 211 | + | 2D.30.6F.31 NaN | |||
| 212 | + | 2D.30.62.31 NaN | |||
| 213 | + | 30.78.66 402e000000000000 | |||
| 214 | + | 30.78.30.31 3ff0000000000000 | |||
| 215 | + | 30.6F.30.31 3ff0000000000000 | |||
| 216 | + | 30.2E.30.31 3f847ae147ae147b | |||
| 217 | + | 30.6F.37.37 404f800000000000 | |||
| 218 | + | 30.78.30.30.31 3ff0000000000000 | |||
| 219 | + | 30.6F.30.30.31 3ff0000000000000 | |||
| 220 | + | 31.30.30 4059000000000000 | |||
| 221 | + | 30.2E.30.30.31 3f50624dd2f1a9fc | |||
| 222 | + | 30.78.66.66.66 40affe0000000000 | |||
| 223 | + | 30.78.30.30.30.31 3ff0000000000000 | |||
| 224 | + | 30.6F.30.30.30.31 3ff0000000000000 | |||
| 225 | + | 31.30.30.30 408f400000000000 | |||
| 226 | + | 30.2E.30.30.30.31 3f1a36e2eb1c432d | |||
| 227 | + | 30.78.66.66.66.66 40efffe000000000 | |||
| 228 | + | 30.6F.37.37.37.37 40affe0000000000 | |||
| 229 | + | 30.78.30.30.30.30.31 3ff0000000000000 | |||
| 230 | + | 30.6F.30.30.30.30.31 3ff0000000000000 | |||
| 231 | + | 31.30.30.30.30 40c3880000000000 | |||
| 232 | + | 30.2E.30.30.30.30.31 3ee4f8b588e368f1 | |||
| 233 | + | 30.78.66.66.66.66.66 412ffffe00000000 | |||
| 234 | + | 30.6F.37.37.37.37.37 40dfffc000000000 | |||
| 235 | + | 30.78.30.30.30.30.30.31 3ff0000000000000 | |||
| 236 | + | 30.6F.30.30.30.30.30.31 3ff0000000000000 | |||
| 237 | + | 31.30.30.30.30.30 40f86a0000000000 | |||
| 238 | + | 30.78.66.66.66.66.66.66 416fffffe0000000 | |||
| 239 | + | 30.6F.37.37.37.37.37.37 410ffff800000000 | |||
| 240 | + | 30.78.30.30.30.30.30.30.31 3ff0000000000000 | |||
| 241 | + | 30.6F.30.30.30.30.30.30.31 3ff0000000000000 | |||
| 242 | + | 31.30.30.30.30.30.30 412e848000000000 | |||
| 243 | + | 30.2E.30.30.30.30.30.30.31 3e7ad7f29abcaf48 | |||
| 244 | + | 30.78.66.66.66.66.66.66.66 41affffffe000000 | |||
| 245 | + | 30.6F.37.37.37.37.37.37.37 413fffff00000000 | |||
| 246 | + | 30.6F.30.30.30.30.30.30.30.31 3ff0000000000000 | |||
| 247 | + | 31.30.30.30.30.30.30.30 416312d000000000 | |||
| 248 | + | 30.2E.30.30.30.30.30.30.30.31 3e45798ee2308c3a | |||
| 249 | + | 30.6F.37.37.37.37.37.37.37.37 416fffffe0000000 | |||
| 250 | + | 30.78.30.30.30.30.30.30.30.30.31 3ff0000000000000 | |||
| 251 | + | 30.6F.30.30.30.30.30.30.30.30.31 3ff0000000000000 | |||
| 252 | + | 31.30.30.30.30.30.30.30.30 4197d78400000000 | |||
| 253 | + | 30.2E.30.30.30.30.30.30.30.30.31 3e112e0be826d695 | |||
| 254 | + | 30.78.66.66.66.66.66.66.66.66.66 NaN | |||
| 255 | + | 30.6F.37.37.37.37.37.37.37.37.37 419ffffffc000000 | |||
| 256 | + | 30.78.30.30.30.30.30.30.30.30.30.31 3ff0000000000000 | |||
| 257 | + | 30.6F.30.30.30.30.30.30.30.30.30.31 3ff0000000000000 | |||
| 258 | + | 31.30.30.30.30.30.30.30.30.30 41cdcd6500000000 | |||
| 259 | + | 30.2E.30.30.30.30.30.30.30.30.30.31 3ddb7cdfd9d7bdbb | |||
| 260 | + | 30.78.66.66.66.66.66.66.66.66.66.66 NaN | |||
| 261 | + | 30.6F.37.37.37.37.37.37.37.37.37.37 41cfffffff800000 | |||
| 262 | + | 30.78.30.30.30.30.30.30.30.30.30.30.31 3ff0000000000000 | |||
| 263 | + | 30.6F.30.30.30.30.30.30.30.30.30.30.31 3ff0000000000000 | |||
| 264 | + | 31.30.30.30.30.30.30.30.30.30.30 4202a05f20000000 | |||
| 265 | + | 30.2E.30.30.30.30.30.30.30.30.30.30.31 3da5fd7fe1796495 | |||
| 266 | + | 30.78.66.66.66.66.66.66.66.66.66.66.66 NaN | |||
| 267 | + | 30.78.30.30.30.30.30.30.30.30.30.30.30.31 3ff0000000000000 | |||
| 268 | + | 31.30.30.30.30.30.30.30.30.30.30.30 42374876e8000000 | |||
| 269 | + | 30.2E.30.30.30.30.30.30.30.30.30.30.30.31 3d719799812dea11 | |||
| 270 | + | 30.78.66.66.66.66.66.66.66.66.66.66.66.66 NaN | |||
| 271 | + | 30.6F.37.37.37.37.37.37.37.37.37.37.37.37 NaN | |||
| 272 | + | 30.78.30.30.30.30.30.30.30.30.30.30.30.30.31 3ff0000000000000 | |||
| 273 | + | 30.6F.30.30.30.30.30.30.30.30.30.30.30.30.31 3ff0000000000000 | |||
| 274 | + | 31.30.30.30.30.30.30.30.30.30.30.30.30 426d1a94a2000000 | |||
| 275 | + | 30.2E.30.30.30.30.30.30.30.30.30.30.30.30.31 3d3c25c268497682 | |||
| 276 | + | 30.78.66.66.66.66.66.66.66.66.66.66.66.66.66 NaN | |||
| 277 | + | 30.6F.37.37.37.37.37.37.37.37.37.37.37.37.37 NaN | |||
| 278 | + | 30.78.30.30.30.30.30.30.30.30.30.30.30.30.30.31 3ff0000000000000 | |||
| 279 | + | 30.6F.30.30.30.30.30.30.30.30.30.30.30.30.30.31 3ff0000000000000 | |||
| 280 | + | 31.30.30.30.30.30.30.30.30.30.30.30.30.30 42a2309ce5400000 | |||
| 281 | + | 30.2E.30.30.30.30.30.30.30.30.30.30.30.30.30.31 3d06849b86a12b9b | |||
| 282 | + | 30.78.66.66.66.66.66.66.66.66.66.66.66.66.66.66 NaN | |||
| 283 | + | 30.6F.37.37.37.37.37.37.37.37.37.37.37.37.37.37 NaN | |||
| 284 | + | 30.78.30.30.30.30.30.30.30.30.30.30.30.30.30.30.31 3ff0000000000000 | |||
| 285 | + | 30.6F.30.30.30.30.30.30.30.30.30.30.30.30.30.30.31 3ff0000000000000 | |||
| 286 | + | 31.30.30.30.30.30.30.30.30.30.30.30.30.30.30 42d6bcc41e900000 | |||
| 287 | + | 30.2E.30.30.30.30.30.30.30.30.30.30.30.30.30.30.31 3cd203af9ee75616 | |||
| 288 | + | 30.78.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66 NaN | |||
| 289 | + | 30.6F.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37 NaN | |||
| 290 | + | 30.6F.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.31 3ff0000000000000 | |||
| 291 | + | 31.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30 430c6bf526340000 | |||
| 292 | + | 30.2E.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.31 3c9cd2b297d889bc | |||
| 293 | + | 30.78.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66 NaN | |||
| 294 | + | 30.6F.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37 NaN | |||
| 295 | + | 30.78.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.31 3ff0000000000000 | |||
| 296 | + | 30.6F.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.31 3ff0000000000000 | |||
| 297 | + | 31.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30 4341c37937e08000 | |||
| 298 | + | 30.2E.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.31 3c670ef54646d497 | |||
| 299 | + | 30.78.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66 NaN | |||
| 300 | + | 30.6F.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37 NaN | |||
| 301 | + | 30.78.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.31 3ff0000000000000 | |||
| 302 | + | 30.6F.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.31 3ff0000000000000 | |||
| 303 | + | 31.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30 4376345785d8a000 | |||
| 304 | + | 30.2E.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.31 3c32725dd1d243ac | |||
| 305 | + | 30.78.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66 NaN | |||
| 306 | + | 30.6F.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37 NaN | |||
| 307 | + | 30.78.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.31 3ff0000000000000 | |||
| 308 | + | 30.6F.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.31 3ff0000000000000 | |||
| 309 | + | 31.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30 43abc16d674ec800 | |||
| 310 | + | 30.2E.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.31 3bfd83c94fb6d2ac | |||
| 311 | + | 30.78.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66 NaN | |||
| 312 | + | 30.6F.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37 NaN | |||
| 313 | + | 30.78.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.31 3ff0000000000000 | |||
| 314 | + | 30.6F.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.31 3ff0000000000000 | |||
| 315 | + | 31.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30 43e158e460913d00 | |||
| 316 | + | 30.2E.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.31 3bc79ca10c924223 | |||
| 317 | + | 30.78.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66 NaN | |||
| 318 | + | 30.6F.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37 NaN | |||
| 319 | + | 30.6F.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.31 3ff0000000000000 | |||
| 320 | + | 31.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30 4415af1d78b58c40 | |||
| 321 | + | 30.2E.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.31 3b92e3b40a0e9b4f | |||
| 322 | + | 30.78.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66 NaN | |||
| 323 | + | 30.6F.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37 NaN | |||
| 324 | + | 30.78.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.31 3ff0000000000000 | |||
| 325 | + | 31.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30 444b1ae4d6e2ef50 | |||
| 326 | + | 30.2E.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.31 3b5e392010175ee6 | |||
| 327 | + | 30.78.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66 NaN | |||
| 328 | + | 30.6F.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37 NaN | |||
| 329 | + | 30.78.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.31 3ff0000000000000 | |||
| 330 | + | 30.6F.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.31 3ff0000000000000 | |||
| 331 | + | 31.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30 4480f0cf064dd592 | |||
| 332 | + | 30.2E.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.31 3b282db34012b251 | |||
| 333 | + | 30.78.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66 NaN | |||
| 334 | + | 30.6F.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37 NaN | |||
| 335 | + | 30.78.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.31 3ff0000000000000 | |||
| 336 | + | 30.6F.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.31 3ff0000000000000 | |||
| 337 | + | 31.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30 44b52d02c7e14af6 | |||
| 338 | + | 30.2E.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.31 3af357c299a88ea7 | |||
| 339 | + | 30.78.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66 NaN | |||
| 340 | + | 30.6F.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37 NaN | |||
| 341 | + | 30.78.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.31 3ff0000000000000 | |||
| 342 | + | 30.6F.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.31 3ff0000000000000 | |||
| 343 | + | 31.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30 44ea784379d99db4 | |||
| 344 | + | 30.2E.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.31 3abef2d0f5da7dd9 | |||
| 345 | + | 30.78.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66 NaN | |||
| 346 | + | 30.6F.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37 NaN | |||
| 347 | + | 30.78.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.31 3ff0000000000000 | |||
| 348 | + | 30.6F.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.31 3ff0000000000000 | |||
| 349 | + | 31.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30 45208b2a2c280291 | |||
| 350 | + | 30.2E.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.31 3a88c240c4aecb14 | |||
| 351 | + | 30.78.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66 NaN | |||
| 352 | + | 30.6F.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37 NaN | |||
| 353 | + | 30.78.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.31 3ff0000000000000 | |||
| 354 | + | 30.6F.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.31 3ff0000000000000 | |||
| 355 | + | 31.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30 4554adf4b7320335 | |||
| 356 | + | 30.2E.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.31 3a53ce9a36f23c10 | |||
| 357 | + | 30.78.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66 NaN | |||
| 358 | + | 30.6F.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37 NaN | |||
| 359 | + | 30.78.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.31 3ff0000000000000 | |||
| 360 | + | 30.6F.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.31 3ff0000000000000 | |||
| 361 | + | 31.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30 4589d971e4fe8402 | |||
| 362 | + | 30.2E.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.31 3a1fb0f6be506019 | |||
| 363 | + | 30.78.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66 NaN | |||
| 364 | + | 30.6F.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37 NaN | |||
| 365 | + | 30.78.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.31 3ff0000000000000 | |||
| 366 | + | 30.6F.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.31 3ff0000000000000 | |||
| 367 | + | 31.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30 45c027e72f1f1281 | |||
| 368 | + | 30.2E.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.31 39e95a5efea6b347 | |||
| 369 | + | 30.78.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66 NaN | |||
| 370 | + | 30.6F.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37 NaN | |||
| 371 | + | 30.78.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.31 3ff0000000000000 | |||
| 372 | + | 30.6F.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.31 3ff0000000000000 | |||
| 373 | + | 31.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30 45f431e0fae6d721 | |||
| 374 | + | 30.2E.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.31 39b4484bfeebc2a0 | |||
| 375 | + | 30.78.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66 NaN | |||
| 376 | + | 30.6F.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37 NaN | |||
| 377 | + | 30.78.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.31 3ff0000000000000 | |||
| 378 | + | 30.6F.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.31 3ff0000000000000 | |||
| 379 | + | 31.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30 46293e5939a08cea | |||
| 380 | + | 30.2E.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.31 398039d665896880 | |||
| 381 | + | 30.78.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66 NaN | |||
| 382 | + | 30.6F.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37 NaN | |||
| 383 | + | 30.78.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.31 3ff0000000000000 | |||
| 384 | + | 30.6F.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.31 3ff0000000000000 | |||
| 385 | + | 31.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30 465f8def8808b024 | |||
| 386 | + | 30.2E.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.31 3949f623d5a8a733 | |||
| 387 | + | 30.78.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66 NaN | |||
| 388 | + | 30.6F.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37 NaN | |||
| 389 | + | 30.78.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.31 3ff0000000000000 | |||
| 390 | + | 30.6F.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.31 3ff0000000000000 | |||
| 391 | + | 31.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30 4693b8b5b5056e17 | |||
| 392 | + | 30.2E.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.31 3914c4e977ba1f5c | |||
| 393 | + | 30.78.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66 NaN | |||
| 394 | + | 30.6F.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37 NaN | |||
| 395 | + | 30.78.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.31 3ff0000000000000 | |||
| 396 | + | 30.6F.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.31 3ff0000000000000 | |||
| 397 | + | 31.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30 46c8a6e32246c99c | |||
| 398 | + | 30.2E.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.31 38e09d8792fb4c49 | |||
| 399 | + | 30.78.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66 NaN | |||
| 400 | + | 30.6F.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37 NaN | |||
| 401 | + | 30.78.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.31 3ff0000000000000 | |||
| 402 | + | 30.6F.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.31 3ff0000000000000 | |||
| 403 | + | 31.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30 46fed09bead87c03 | |||
| 404 | + | 30.2E.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.31 38aa95a5b7f87a0f | |||
| 405 | + | 30.78.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66 NaN | |||
| 406 | + | 30.6F.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37 NaN | |||
| 407 | + | 30.78.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.31 3ff0000000000000 | |||
| 408 | + | 30.6F.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.31 3ff0000000000000 | |||
| 409 | + | 31.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30 4733426172c74d82 | |||
| 410 | + | 30.2E.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.31 38754484932d2e72 | |||
| 411 | + | 30.78.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66 NaN | |||
| 412 | + | 30.6F.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37 NaN | |||
| 413 | + | 30.78.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.31 3ff0000000000000 | |||
| 414 | + | 30.6F.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.31 3ff0000000000000 | |||
| 415 | + | 31.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30 476812f9cf7920e3 | |||
| 416 | + | 30.2E.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.31 3841039d428a8b8f | |||
| 417 | + | 30.78.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66 NaN | |||
| 418 | + | 30.6F.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37 NaN | |||
| 419 | + | 30.78.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.31 3ff0000000000000 | |||
| 420 | + | 30.6F.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.31 3ff0000000000000 | |||
| 421 | + | 31.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30 479e17b84357691b | |||
| 422 | + | 30.2E.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.31 380b38fb9daa78e4 | |||
| 423 | + | 30.78.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66 NaN | |||
| 424 | + | 30.6F.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37 NaN | |||
| 425 | + | 30.78.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.31 3ff0000000000000 | |||
| 426 | + | 30.6F.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.31 3ff0000000000000 | |||
| 427 | + | 31.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30 47d2ced32a16a1b1 | |||
| 428 | + | 30.2E.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.31 37d5c72fb1552d83 | |||
| 429 | + | 30.78.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66.66 NaN | |||
| 430 | + | 30.6F.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37.37 NaN | |||
| 431 | + | 30.78.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.31 3ff0000000000000 | |||
| 432 | + | 30.6F.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.31 3ff0000000000000 | |||
| 433 | + | 31.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30 48078287f49c4a1d | |||
| 434 | + | 30.2E.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.30.31 37a16c262777579c | |||
| 435 | + | 30.6F.33.37.37 406fe00000000000 | |||
| 436 | + | 32.35.35 406fe00000000000 | |||
| 437 | + | 30.78.31.30.30 4070000000000000 | |||
| 438 | + | 30.6F.34.30.30 4070000000000000 | |||
| 439 | + | 32.35.36 4070000000000000 | |||
| 440 | + | 32.31.34.37.34.38.33.36.34.37 41dfffffffc00000 | |||
| 441 | + | 32.31.34.37.34.38.33.36.34.38 41e0000000000000 | |||
| 442 | + | 34.32.39.34.39.36.37.32.39.35 41efffffffe00000 | |||
| 443 | + | 34.32.39.34.39.36.37.32.39.36 41f0000000000000 | |||