From 9caa01f1a7ecfffa6142cc327e2694f21c0f3a77 Mon Sep 17 00:00:00 2001 From: "RingOfStorms (Joshua Bell)" Date: Mon, 8 Dec 2025 13:49:42 -0600 Subject: [PATCH] 2025 day 1 --- .envrc | 17 - 2025/day_1.nix | 44 + 2025/puzzle_cache/day_1_0 | 10 + 2025/puzzle_cache/day_1_1 | 4503 +++++++++++++++++++++++++++++++++++++ 2025/utils.nix | 4 + flake.lock | 18 +- 6 files changed, 4570 insertions(+), 26 deletions(-) create mode 100644 2025/day_1.nix create mode 100644 2025/puzzle_cache/day_1_0 create mode 100644 2025/puzzle_cache/day_1_1 create mode 100644 2025/utils.nix diff --git a/.envrc b/.envrc index 32b50cd..2449b75 100644 --- a/.envrc +++ b/.envrc @@ -1,22 +1,5 @@ #!/bin/bash -# Copy these to a .env.local file to override in local host - -# This is what DIESEL cli uses -export DATABASE_URL="test_db.db" - -## APP variables -# /etc/stormd/stormd.db -export STORMD_DB_PATH="stormd_db_local.db" -export STORMD_DB_ENC_KEY_FILE="stormd_db_enc.key" -# /etc/nebula/config.yml -export STORMD_NEBULA_CONFIG="nebula_config.yml" -# Auth key for admin API -export STORMD_NEXUS_ADMIN_AUTH_FILE="stormd_auth_key" -export STORMD_DAEMON_HTTP_PORT=37391 - -# ====== - watch_file .env.local dotenv_if_exists .env.local diff --git a/2025/day_1.nix b/2025/day_1.nix new file mode 100644 index 0000000..342d057 --- /dev/null +++ b/2025/day_1.nix @@ -0,0 +1,44 @@ +# nix eval -f ./day_1.nix -I 'input=(builtins.readFile ./puzzle_cache/day_1_1)' countZero +{ input ? (builtins.readFile ./puzzle_cache/day_1_0) }: +let + utils = import ./utils.nix; + inherit (utils) toIntBase10 mod; + + # Split into non-empty lines + lines = builtins.filter (s: builtins.isString s && s != "") (builtins.split "\n" input); + + # Parse a line like "L68" or "R14" + parseLine = line: { + dir = builtins.substring 0 1 line; + dist = toIntBase10 (builtins.substring 1 (builtins.stringLength line - 1) line); + }; + + rotations = map parseLine lines; + + # Fold over the list to simulate the dial + step = + state: rot: + let + position = + if rot.dir == "L" then + mod (state.position - rot.dist) 100 + else if rot.dir == "R" then + mod (state.position + rot.dist) 100 + else + builtins.trace "Invalid direction: ${rot.dir}" state.position; + countZero = state.countZero + (if position == 0 then 1 else 0); + in + { + inherit position countZero; + }; + + initialState = { + position = 50; + countZero = 0; + }; + + finalState = builtins.foldl' step initialState rotations; +in +{ + inherit (finalState) position countZero; +} diff --git a/2025/puzzle_cache/day_1_0 b/2025/puzzle_cache/day_1_0 new file mode 100644 index 0000000..53287c7 --- /dev/null +++ b/2025/puzzle_cache/day_1_0 @@ -0,0 +1,10 @@ +L68 +L30 +R48 +L5 +R60 +L55 +L1 +L99 +R14 +L82 diff --git a/2025/puzzle_cache/day_1_1 b/2025/puzzle_cache/day_1_1 new file mode 100644 index 0000000..4e124bc --- /dev/null +++ b/2025/puzzle_cache/day_1_1 @@ -0,0 +1,4503 @@ +R48 +R2 +R29 +L38 +L3 +R50 +R21 +R29 +L26 +L44 +R1 +R11 +R5 +R36 +L43 +L5 +L15 +L45 +L38 +L34 +R14 +R34 +R50 +L28 +L8 +L24 +L50 +L22 +L10 +L45 +L8 +L41 +L23 +L7 +L3 +R50 +L31 +L43 +R17 +R39 +R31 +R45 +L42 +L26 +L27 +L43 +L40 +L33 +L19 +L24 +L74 +R3 +R56 +R98 +R43 +L32 +L42 +R16 +L64 +R22 +L64 +R64 +L67 +R67 +L65 +R47 +L82 +R69 +L69 +L50 +R86 +L27 +L28 +L51 +R70 +L48 +R94 +R54 +L27 +R54 +L27 +L81 +R33 +R48 +R22 +R94 +L75 +L69 +L53 +R70 +L89 +L51 +R51 +L30 +L53 +L17 +L82 +R54 +L39 +L99 +R66 +R2 +R29 +L31 +L84 +R33 +L35 +R59 +R24 +R3 +L15 +R315 +R18 +R2 +R80 +R88 +R12 +R53 +R94 +L49 +R63 +L61 +R5 +R995 +L61 +L38 +L68 +L52 +R67 +L33 +R87 +L2 +R27 +L727 +L77 +L23 +L80 +L20 +L15 +R76 +R940 +R39 +L95 +L99 +L77 +R82 +R6 +L57 +R20 +R80 +R66 +R94 +L13 +L47 +L54 +R54 +L811 +L942 +R93 +R95 +L87 +L74 +L74 +L22 +L754 +L70 +L54 +L31 +L912 +R43 +R2 +L34 +L789 +L17 +R80 +R958 +L45 +R45 +R11 +L912 +L115 +R29 +R70 +L650 +L26 +R93 +R17 +R83 +R35 +L85 +R88 +R309 +L71 +L5 +L71 +L17 +R39 +L99 +R77 +R15 +L85 +L69 +L69 +L92 +L3 +L97 +R27 +L337 +L12 +R75 +L88 +L57 +R73 +R78 +L89 +L91 +L79 +L53 +L42 +R27 +R464 +R427 +R785 +L8 +R21 +R49 +R89 +L59 +R90 +L296 +L94 +L854 +L21 +L84 +L64 +L25 +R75 +R50 +L77 +R69 +L85 +L84 +R874 +R274 +L64 +L84 +L53 +L51 +L78 +R35 +L4 +R78 +R59 +R99 +R12 +R23 +R80 +L14 +R86 +L62 +L10 +L76 +L8 +L85 +R69 +R87 +L84 +L603 +L79 +L57 +R64 +R36 +R263 +L27 +R73 +L22 +L188 +R14 +R46 +L23 +L38 +R38 +L39 +R239 +R31 +R69 +L57 +L80 +L94 +R22 +L91 +L27 +R7 +L27 +R79 +L32 +L875 +L459 +L16 +L34 +L16 +L34 +L75 +L6 +L85 +L60 +L65 +R21 +L96 +L9 +R37 +R72 +R23 +L23 +L795 +L310 +R50 +L32 +L913 +L52 +R76 +R81 +R66 +R29 +L21 +L73 +R94 +L29 +L48 +R77 +R2 +L2 +L21 +R87 +R99 +R71 +R64 +R93 +R7 +L57 +R79 +R995 +R83 +R19 +R40 +R41 +L652 +L93 +R32 +L39 +R32 +R46 +L832 +R6 +R6 +L6 +R41 +R59 +L747 +L376 +L9 +R27 +L95 +L77 +R77 +L48 +R811 +R37 +L83 +L17 +R65 +R352 +L849 +R95 +L63 +L85 +L79 +R42 +R22 +L95 +L5 +L63 +L88 +L39 +L10 +L18 +R18 +R54 +R54 +R92 +R26 +L62 +L98 +L166 +L741 +L306 +L29 +R17 +L41 +R13 +L1 +L68 +R56 +L22 +R78 +R44 +L81 +R97 +L169 +L47 +R15 +L33 +R502 +R52 +L12 +L27 +L15 +L503 +L79 +L38 +L62 +L29 +R92 +L63 +L9 +R12 +R97 +L52 +R452 +L214 +R52 +R84 +L80 +R27 +L93 +L97 +L992 +R69 +L56 +R45 +R76 +R33 +R35 +R946 +L279 +R63 +R881 +L60 +R60 +R70 +R30 +R31 +R55 +L223 +R60 +L2 +R246 +L472 +L16 +R644 +R47 +L858 +L63 +R54 +R85 +L40 +R52 +L122 +L78 +R540 +R7 +L47 +R14 +L11 +L3 +L460 +L44 +R2 +R50 +L48 +R62 +L62 +L73 +R73 +L60 +L40 +L84 +L473 +R85 +L41 +L79 +L108 +R40 +R91 +R543 +R81 +L781 +L74 +L286 +L555 +R50 +R2 +R17 +R53 +R89 +R23 +R107 +L68 +L32 +R65 +R35 +L36 +R913 +L597 +L80 +L34 +L66 +L96 +L526 +R32 +R15 +R75 +L70 +R21 +L45 +R1 +R93 +L45 +L56 +L99 +R84 +R60 +L44 +R44 +L9 +R65 +L80 +R80 +L18 +L82 +R71 +R29 +L183 +R83 +R22 +R78 +R779 +R21 +L38 +R82 +R88 +R68 +L64 +L214 +R74 +L96 +R21 +R68 +L95 +R6 +L7 +L93 +L24 +L94 +R41 +L254 +R51 +L2 +R82 +R64 +L87 +R21 +R2 +L31 +R84 +R347 +R86 +R72 +L58 +L37 +R84 +R57 +L23 +R94 +R19 +L94 +L982 +R86 +L4 +L46 +L54 +R66 +L59 +R83 +L80 +L98 +L62 +L23 +L40 +R882 +L50 +L540 +L22 +L29 +R94 +L58 +R36 +R47 +L37 +L6 +L46 +L7 +L877 +R80 +R246 +L972 +R72 +R385 +R515 +R96 +R86 +L23 +R41 +R81 +R21 +R16 +R65 +R958 +R50 +R9 +L969 +L48 +L26 +L22 +L35 +R6 +L706 +R43 +L79 +R50 +R199 +L13 +L23 +R19 +L196 +R47 +L504 +L24 +L919 +R611 +L11 +L59 +L66 +R341 +L16 +L155 +R99 +R80 +R11 +L98 +R414 +L31 +L69 +L97 +L54 +R908 +R68 +R54 +L30 +L302 +R61 +R46 +R77 +L38 +R199 +L23 +L20 +L227 +L14 +R23 +R79 +L99 +L62 +R190 +R131 +R179 +L6 +L694 +L63 +L14 +L97 +R67 +R342 +R765 +R217 +R83 +L79 +R39 +R240 +R57 +R934 +R691 +R33 +R28 +R47 +L14 +R42 +L44 +R49 +L754 +R94 +L33 +R275 +R95 +R824 +R90 +L53 +R948 +R42 +L13 +R362 +R80 +L80 +R84 +L73 +R8 +L6 +L89 +R61 +R50 +R94 +R71 +R150 +R72 +R49 +L9 +L41 +R79 +L28 +L3 +R81 +L50 +L72 +R85 +R4 +R57 +R26 +L16 +L67 +L34 +R17 +L183 +L17 +L72 +R72 +R78 +L78 +R28 +L411 +R485 +R15 +L59 +R42 +L18 +L11 +R29 +L63 +R94 +R69 +R91 +R9 +L62 +R42 +L41 +R1 +L99 +R59 +L132 +R48 +L516 +L872 +L82 +L946 +R46 +R92 +L722 +L16 +L48 +R33 +L21 +L393 +L71 +L3 +L34 +L63 +R54 +R46 +L95 +L20 +R15 +R561 +L36 +L76 +L18 +L49 +R18 +L58 +L74 +R37 +R95 +R76 +R24 +R905 +R960 +R43 +R14 +R78 +L709 +L899 +L45 +R53 +L34 +R76 +R231 +L73 +L867 +R21 +R46 +L68 +L47 +L285 +L865 +L365 +L70 +R14 +R86 +R50 +L57 +R51 +L89 +L7 +L817 +L778 +R47 +R368 +L82 +R33 +R58 +L77 +R440 +L26 +L53 +L82 +L692 +R35 +L22 +R78 +L978 +R523 +L966 +R22 +R32 +L63 +R52 +R99 +L49 +R150 +R71 +R29 +L16 +R16 +L150 +R28 +L78 +L45 +R8 +L63 +R39 +L71 +R78 +R54 +R31 +R83 +R90 +L22 +L67 +R34 +L42 +R94 +L96 +R95 +R35 +R665 +R48 +R352 +R55 +R584 +L896 +L586 +R43 +R512 +R57 +R32 +R99 +R22 +L2 +R918 +R46 +L21 +R337 +R912 +R47 +R287 +R67 +L113 +R31 +R98 +L292 +L87 +L55 +L42 +R46 +R909 +R79 +R13 +R1 +L1 +R68 +L85 +L66 +R53 +R30 +R906 +L6 +L348 +R92 +R59 +L20 +L30 +R99 +L83 +R31 +R17 +R14 +L31 +L25 +L109 +L66 +L22 +L6 +L72 +R285 +R61 +R54 +R558 +L58 +L32 +R84 +L52 +R66 +L40 +L45 +L33 +R22 +R27 +L29 +R32 +R36 +L67 +R98 +L260 +R18 +L30 +R811 +L52 +L769 +L11 +L65 +L9 +L69 +L37 +L94 +R60 +L78 +L82 +L552 +L48 +L461 +L31 +L88 +R92 +L14 +L72 +R74 +L2 +L59 +R53 +R95 +L29 +L58 +R53 +R47 +L107 +L93 +R84 +L441 +R49 +L50 +L45 +L4 +R807 +R89 +L2 +R94 +L881 +R184 +L47 +L17 +R80 +R13 +R49 +L2 +R54 +R92 +R94 +R61 +L50 +R19 +L31 +L799 +L51 +L70 +L79 +R485 +L76 +R91 +L46 +R577 +R4 +L29 +R453 +R9 +R82 +R50 +R41 +R97 +L11 +L94 +R80 +R6 +R48 +L48 +R17 +L36 +L933 +L91 +R94 +R57 +L982 +R55 +R62 +L62 +L64 +R43 +L491 +R37 +L60 +L65 +L248 +L52 +R41 +R11 +L52 +L48 +R40 +L92 +R896 +L512 +R845 +L871 +L58 +R22 +L60 +L22 +L81 +L57 +R98 +L13 +R880 +L27 +L461 +R88 +R80 +L20 +R57 +R28 +R9 +L21 +R96 +R30 +R28 +L4 +R47 +R5 +L89 +L74 +L39 +L69 +R28 +R41 +L223 +R81 +R42 +R23 +R77 +L16 +R16 +L95 +R27 +L32 +R99 +L70 +L977 +R48 +L613 +L88 +L142 +L282 +R51 +R74 +R87 +R33 +R85 +R95 +L21 +R50 +L40 +L89 +L797 +L46 +L57 +L601 +R1 +R36 +R64 +L43 +R11 +R98 +L66 +R3 +R97 +R76 +L81 +R82 +L87 +L90 +L48 +L7 +R55 +R19 +R41 +R941 +R54 +L55 +R60 +L33 +L727 +R918 +R82 +R672 +R28 +L59 +R79 +L263 +R65 +R4 +R74 +R159 +L22 +R78 +R98 +L13 +L544 +L97 +R57 +L16 +R856 +R91 +L23 +R76 +R797 +R89 +R114 +L7 +L84 +R91 +R848 +L35 +R2 +L88 +R933 +L2 +L58 +R85 +L887 +R67 +L72 +L93 +L76 +L24 +L415 +L63 +R7 +R588 +L82 +L45 +L90 +L1 +R56 +R14 +L31 +L77 +L60 +R60 +R39 +L656 +R56 +R93 +R7 +L32 +L68 +L94 +R274 +R20 +L30 +L70 +L91 +R2 +L164 +L307 +R12 +R55 +R93 +L12 +R1 +L715 +R26 +R90 +L52 +R344 +L882 +R10 +R57 +L67 +R609 +R43 +R48 +L29 +L974 +L5 +L92 +R6 +R2 +L340 +R732 +L21 +L66 +L91 +R5 +L90 +R6 +L11 +R6 +L66 +R828 +L22 +R22 +L234 +L61 +R90 +R43 +R62 +L135 +R11 +L71 +L35 +L70 +L19 +R70 +L51 +L9 +R428 +L418 +L858 +R282 +R70 +R110 +L31 +R58 +R63 +L95 +L32 +R864 +L422 +R76 +R34 +L5 +R93 +R5 +L17 +R478 +R26 +L50 +L50 +R83 +L76 +R5 +R24 +L636 +L60 +L198 +L942 +R35 +L45 +R74 +R936 +R60 +R11 +L68 +R41 +L244 +R39 +L33 +R93 +R601 +R38 +L28 +L60 +R203 +R24 +L441 +L52 +R88 +R28 +L51 +R151 +R56 +L56 +R15 +L94 +R106 +L14 +L39 +L74 +R509 +L36 +R31 +L4 +R18 +L18 +R63 +L12 +R49 +R25 +R16 +L53 +R12 +R210 +R21 +L31 +R21 +R37 +R13 +R319 +R10 +R42 +R45 +R13 +L5 +L95 +R53 +L761 +R8 +L78 +L115 +L7 +R42 +L99 +R57 +L40 +L14 +R36 +R18 +R652 +L11 +L41 +R16 +R292 +R92 +R10 +L71 +L39 +L94 +L6 +L61 +R61 +L7 +L4 +L65 +L57 +R33 +L33 +L45 +R74 +R98 +L76 +R682 +L60 +L40 +R47 +L37 +R76 +R14 +R43 +R4 +R471 +L42 +R26 +L686 +R11 +R967 +R47 +L441 +L488 +R88 +L7 +L93 +L11 +L74 +R85 +R20 +L27 +L956 +L37 +L69 +L88 +R8 +L91 +L49 +L10 +L96 +L45 +L53 +L7 +L18 +R90 +R28 +R41 +R59 +R725 +R975 +L85 +L13 +L91 +R89 +R44 +R68 +R59 +L88 +L87 +L37 +L40 +R281 +R141 +R22 +R37 +R65 +R35 +L211 +L56 +R67 +R499 +R1 +R380 +R40 +L8 +R588 +L64 +R66 +L802 +L125 +L45 +L30 +L90 +L22 +L88 +L27 +R39 +R2 +L57 +R77 +R66 +L36 +L25 +R92 +R69 +R65 +R21 +R83 +L431 +L266 +R75 +R43 +L140 +L43 +R40 +R477 +L56 +L86 +R18 +L52 +L207 +R59 +R99 +R42 +R524 +R682 +R645 +R8 +R48 +L93 +L55 +L30 +L70 +L70 +L30 +L30 +R742 +L79 +L233 +R75 +L39 +R64 +R70 +R40 +L26 +L45 +L39 +L55 +L42 +R19 +R88 +R90 +L57 +L43 +R35 +R28 +R13 +R83 +L43 +R93 +R87 +R4 +R74 +L59 +L15 +L33 +L67 +R825 +R91 +R921 +L87 +L73 +R98 +L75 +L58 +L120 +R78 +L12 +R12 +L25 +L75 +L85 +R72 +L87 +L17 +L277 +R80 +L85 +L1 +R477 +R27 +R91 +R68 +L41 +L924 +R49 +R53 +L9 +L391 +R78 +L532 +R46 +R15 +R28 +R37 +L57 +L315 +L25 +L8 +R49 +R8 +R11 +L86 +L10 +L139 +L95 +R71 +L26 +R90 +L447 +L92 +R99 +R14 +R86 +R83 +L44 +L419 +L780 +L74 +R634 +L429 +R50 +R42 +R37 +L93 +L625 +R126 +L8 +L19 +L59 +L22 +L147 +R47 +R48 +R5 +L53 +R687 +R13 +R45 +R26 +R29 +R49 +L61 +R351 +L24 +R85 +R444 +R656 +L13 +L41 +R54 +L87 +L43 +L61 +R58 +R231 +R735 +R67 +L20 +L280 +L61 +L65 +R987 +L50 +L252 +R877 +R359 +L95 +R14 +L92 +R7 +R715 +L644 +R65 +L74 +L959 +R53 +L85 +L57 +R757 +L45 +L959 +L96 +R73 +L473 +R345 +R73 +L39 +L179 +L668 +R46 +L30 +L63 +R10 +L25 +R30 +R468 +R35 +R96 +L99 +R7 +L63 +R73 +L17 +R85 +R15 +L51 +R18 +L67 +L852 +R3 +R499 +L50 +L83 +R583 +R429 +L25 +R96 +L123 +R776 +R45 +R2 +R201 +L34 +L18 +L34 +R63 +R712 +R46 +R96 +L363 +R78 +R23 +R30 +R26 +L45 +R19 +L15 +L85 +R558 +R42 +L72 +L539 +R603 +L92 +R90 +L172 +L34 +L88 +L97 +R1 +L57 +L13 +L72 +R42 +R30 +R15 +R85 +R69 +R97 +R4 +L76 +L61 +R72 +L35 +L72 +R83 +R45 +R44 +R66 +R5 +R94 +L60 +R91 +L63 +R12 +R4 +L549 +R10 +L10 +L31 +R7 +R924 +L9 +L21 +R13 +L83 +R99 +R120 +L1 +R182 +L259 +R59 +L637 +L63 +L36 +R952 +R43 +R55 +R86 +L97 +L79 +L505 +R181 +R483 +L43 +R7 +L47 +R884 +L25 +L93 +R45 +R83 +L73 +L21 +L942 +R342 +L55 +L54 +R53 +R56 +R7 +L530 +L19 +L58 +L38 +R755 +R48 +L53 +R88 +R32 +R24 +R85 +L41 +L76 +R54 +L19 +R304 +R28 +L104 +R389 +L76 +L80 +L62 +L58 +R90 +R676 +L66 +R98 +R15 +L66 +R623 +R39 +L72 +R90 +L39 +L288 +R93 +R7 +R43 +L743 +R91 +R9 +R33 +L17 +R53 +L2 +L565 +R16 +R82 +L62 +R54 +L692 +R89 +L10 +L71 +R504 +L7 +R95 +R80 +L56 +L224 +L297 +R97 +R32 +R846 +L65 +L13 +L3 +R3 +L48 +R176 +R972 +L59 +R59 +L93 +R79 +R30 +L2 +L14 +L320 +R20 +L72 +R61 +L4 +R82 +L93 +R726 +L89 +R560 +R29 +R79 +R72 +L165 +L36 +L7 +L32 +R89 +L4 +L96 +R749 +R51 +R903 +L10 +L71 +R96 +L18 +R774 +R75 +L77 +L72 +L82 +R82 +R99 +R31 +R70 +R88 +R12 +R50 +L90 +L99 +L64 +L69 +R915 +R57 +L37 +R37 +R68 +L53 +L915 +R27 +L58 +R302 +R8 +L73 +L6 +R814 +L73 +L41 +L54 +L13 +L190 +L83 +L42 +L18 +L566 +L234 +R307 +R97 +L19 +L75 +L10 +R66 +L66 +R87 +R13 +L97 +L91 +R66 +L78 +L3 +R570 +R38 +L621 +R23 +R67 +L50 +L48 +L3 +R627 +R68 +L568 +L15 +L685 +L34 +R99 +L27 +L38 +L25 +R957 +L38 +R79 +L790 +L507 +R24 +R155 +R45 +R2 +R51 +L71 +L19 +R37 +L33 +R80 +R53 +R90 +R59 +L49 +L238 +L962 +L987 +L11 +L2 +R19 +R26 +R58 +L54 +R90 +L82 +R61 +R4 +L61 +R239 +R32 +R68 +L39 +R39 +R5 +R95 +R109 +L609 +R239 +R762 +R89 +L590 +L95 +L99 +L8 +L998 +R217 +R183 +L92 +L416 +R8 +R282 +L53 +L133 +R704 +L97 +R97 +R63 +R35 +L511 +R213 +L68 +L32 +L3 +R3 +R39 +R88 +L27 +L88 +L63 +L191 +L171 +R42 +R823 +R66 +R21 +L728 +R37 +L48 +L60 +R38 +R22 +L63 +L2 +R45 +R20 +L47 +L68 +R19 +L34 +R30 +R91 +L43 +R75 +L90 +L62 +L20 +L294 +L57 +L87 +L6 +L33 +R6 +R20 +L47 +R65 +L718 +R80 +R20 +L887 +R22 +L35 +L98 +L2 +L57 +L43 +L10 +L90 +R87 +L87 +R95 +L822 +L52 +R35 +L80 +R824 +L28 +R2 +R26 +R90 +L90 +R69 +L269 +R79 +R21 +R55 +R77 +R51 +R73 +R64 +R80 +R75 +L19 +L29 +L379 +R52 +R22 +R19 +L41 +L51 +L57 +R8 +L76 +L626 +R2 +R64 +R36 +R16 +R27 +L21 +R16 +L69 +R80 +R46 +L809 +R9 +R175 +L989 +L781 +L472 +L983 +R98 +R13 +R91 +L63 +L19 +L91 +L1 +R20 +L665 +R72 +R736 +L33 +R97 +L78 +L46 +L20 +L56 +L7 +L536 +L57 +L5 +L554 +R17 +R91 +L57 +R16 +R40 +R44 +L92 +L24 +L744 +R68 +L65 +R24 +L659 +R322 +R90 +R88 +L16 +R69 +R4 +R90 +L56 +L891 +R55 +R87 +L72 +L96 +L687 +L21 +L62 +L93 +L16 +R38 +L513 +R56 +L3 +R27 +R73 +L73 +R275 +R70 +R73 +L59 +L71 +L862 +R74 +L823 +L16 +R16 +L981 +R26 +R1 +L23 +L982 +R78 +R90 +R14 +R334 +L59 +R82 +R26 +L21 +R38 +L5 +L95 +R541 +R16 +R39 +L74 +L22 +L13 +L64 +L458 +R35 +L86 +L14 +R96 +L64 +L31 +L53 +L2 +L46 +R43 +L87 +R9 +L705 +L44 +R42 +R42 +L740 +R53 +L19 +L27 +R33 +L68 +L46 +R514 +L38 +L62 +L64 +L70 +R34 +L597 +R97 +L14 +L68 +L30 +L11 +L377 +R518 +R36 +R57 +R55 +L5 +L61 +R387 +R2 +R211 +R39 +R61 +R94 +L66 +R72 +R63 +R40 +R97 +L555 +L49 +L5 +R951 +R58 +L91 +R91 +L48 +R960 +R18 +R70 +R65 +L65 +R966 +R5 +L71 +L62 +L39 +L295 +R10 +R86 +L83 +R83 +R42 +L42 +R20 +R80 +L39 +R2 +L3 +L145 +R85 +L64 +R64 +L17 +L58 +R75 +R23 +R58 +L81 +R14 +R86 +L47 +L742 +L11 +R48 +L448 +L660 +R58 +L85 +L13 +L65 +R25 +R70 +L730 +L80 +L20 +R673 +L74 +L60 +R17 +L56 +L11 +R11 +L458 +L42 +L634 +L86 +L485 +L95 +L26 +R27 +R89 +L8 +L82 +R95 +R85 +R7 +R8 +L295 +L54 +L51 +L48 +L30 +L42 +R325 +L779 +L21 +R7 +L42 +R33 +R30 +L28 +L61 +R45 +R4 +R412 +R2 +L21 +L49 +L14 +L18 +L34 +R96 +L321 +R59 +L58 +R6 +L834 +R804 +L71 +R67 +R920 +R881 +L66 +L49 +R33 +L640 +L818 +L75 +L96 +R85 +R11 +L44 +R508 +L5 +L839 +L68 +R94 +L46 +L37 +R45 +L925 +L83 +L52 +R652 +R64 +R236 +L6 +L894 +L53 +R69 +L16 +R7 +R1 +R63 +R29 +L78 +R67 +R11 +L94 +R294 +R346 +L74 +L29 +R431 +R726 +R37 +L661 +R27 +L892 +L411 +L2 +L98 +L79 +R7 +R94 +R467 +L11 +R22 +L41 +L72 +R20 +L94 +L313 +R51 +R78 +R771 +R86 +L75 +L59 +R48 +R67 +L90 +R29 +R690 +R130 +R57 +R13 +R610 +L6 +R65 +R756 +L83 +R17 +R86 +R467 +R64 +L610 +L554 +R44 +R48 +L54 +R76 +R78 +L10 +L12 +L15 +R69 +L63 +R15 +L86 +L19 +L79 +L79 +R33 +R16 +R98 +L58 +R954 +R27 +L81 +R50 +R5 +R852 +R83 +L72 +R88 +R716 +R23 +L63 +L92 +L71 +R45 +R854 +L16 +L12 +R80 +R41 +L35 +R53 +L73 +R99 +L34 +R69 +L37 +L63 +R47 +R90 +R430 +R84 +L54 +R7 +R28 +R73 +L805 +R565 +L938 +R740 +R249 +L21 +R21 +R484 +R23 +R744 +L25 +L542 +L34 +L66 +L19 +L27 +R13 +L6 +R37 +R523 +R579 +L90 +R90 +R17 +L61 +L45 +R81 +R81 +L73 +L31 +R831 +R83 +R17 +L38 +L62 +L614 +R66 +L381 +R81 +R846 +R15 +L69 +R85 +L26 +L3 +L30 +R50 +L98 +L22 +R19 +L21 +L28 +L70 +L54 +R54 +R678 +L94 +L92 +L692 +L57 +R57 +R42 +R58 +L92 +R58 +R34 +R43 +R57 +R24 +L24 +R22 +R11 +R67 +L79 +L49 +R628 +L4 +L96 +R33 +L664 +R23 +L49 +L643 +L40 +R17 +L60 +L76 +R59 +L90 +L10 +R991 +R9 +L16 +R220 +L17 +R22 +L9 +R79 +L17 +L98 +L12 +L63 +R11 +L737 +R37 +L82 +L18 +R41 +L41 +L568 +R68 +R11 +L58 +R524 +L58 +L74 +L91 +R46 +R29 +L29 +R66 +R2 +R34 +R84 +L86 +L361 +R61 +R711 +R9 +R81 +R470 +R7 +L78 +L962 +L93 +R55 +R877 +R423 +R86 +L73 +R44 +R75 +R43 +R81 +L969 +L87 +R32 +R35 +L133 +L34 +R554 +L54 +R33 +R24 +L831 +L126 +L23 +R83 +L96 +L64 +R543 +L10 +L15 +L7 +L11 +L4 +R58 +L196 +L51 +L7 +R65 +R665 +R70 +L97 +L3 +L73 +L27 +R57 +L57 +L20 +L80 +R66 +L82 +R90 +L658 +L32 +L59 +R75 +R25 +L471 +L3 +R98 +L49 +R371 +R99 +R30 +L26 +R626 +L4 +L18 +R64 +L746 +L96 +R381 +R51 +R153 +R15 +L33 +L85 +R1 +L2 +R59 +R92 +L32 +L379 +L42 +L70 +L49 +L60 +L92 +R7 +L39 +R389 +L7 +L236 +R43 +R78 +L643 +R33 +L33 +L15 +L373 +R42 +L39 +R85 +R7 +R93 +R75 +L618 +R43 +L93 +L7 +R573 +L73 +R33 +L24 +R91 +R2 +L299 +L54 +L49 +L36 +R36 +L93 +L7 +L42 +L14 +L76 +L468 +L58 +R72 +R7 +R79 +L52 +R267 +R585 +L28 +L72 +L3 +L97 +L41 +R91 +L50 +R80 +L625 +R720 +R25 +L439 +R89 +R51 +L1 +R78 +R588 +L66 +L98 +L120 +R18 +L29 +R83 +L51 +L62 +L77 +L564 +L51 +R32 +R19 +L39 +L802 +L59 +R72 +R228 +L89 +L774 +L36 +R91 +R36 +L62 +R79 +R164 +L9 +L49 +R53 +L47 +L57 +R49 +L49 +R9 +R23 +R198 +L30 +L8 +L70 +R17 +L41 +R102 +L523 +L677 +R49 +L49 +L137 +L16 +R66 +R91 +L82 +R44 +L11 +R45 +L90 +R99 +L9 +L45 +L43 +R14 +L84 +L16 +L26 +R198 +R39 +R64 +L78 +L10 +R87 +R98 +R22 +L20 +L986 +L33 +R52 +L58 +L75 +L160 +R60 +R565 +R35 +R48 +R82 +L130 +R40 +R60 +R81 +R94 +L4 +L62 +R187 +L97 +R6 +L753 +R48 +R1 +R99 +L13 +L87 +L19 +R1 +L99 +R417 +L49 +L451 +L61 +R484 +L76 +R57 +L61 +L10 +L87 +R54 +R30 +R52 +L6 +R24 +R282 +R761 +L25 +L737 +R19 +R82 +L82 +R35 +R64 +R1 +L87 +R87 +L683 +R50 +R794 +L526 +R2 +R23 +L60 +R25 +L25 +L39 +L76 +L11 +R23 +R69 +L8 +L358 +R31 +L29 +L262 +L5 +L7 +L44 +R986 +R661 +L18 +L13 +R98 +R2 +R57 +L54 +L948 +R45 +R86 +L33 +R58 +L11 +R750 +L92 +L90 +R232 +R166 +L821 +L11 +R66 +L31 +R31 +R552 +R62 +L14 +R93 +R543 +L1 +R54 +L81 +R131 +R36 +R25 +R97 +R949 +L448 +R88 +R14 +L48 +L83 +R740 +L9 +R67 +L65 +L64 +R63 +R88 +L19 +L37 +R859 +L21 +L71 +R23 +L77 +L3 +L927 +R72 +L73 +R85 +R68 +R38 +R94 +L425 +L75 +L25 +R17 +L889 +L3 +R6 +L22 +R5 +L43 +R83 +R71 +L14 +R43 +L29 +R60 +L2 +R42 +L8 +L92 +R634 +L819 +R303 +R50 +R32 +R49 +L9 +L80 +R529 +L5 +R4 +L38 +L50 +R11 +R298 +L9 +L115 +L2 +R17 +L72 +L474 +L8 +L192 +L69 +L379 +R26 +R68 +R98 +R2 +L52 +R59 +R593 +L83 +L43 +R26 +L54 +R15 +L61 +L89 +R83 +R12 +L6 +L268 +L1 +R46 +L95 +L884 +L57 +R59 +R263 +L29 +R66 +R95 +L255 +R98 +R255 +R7 +R51 +L14 +R86 +L63 +L360 +R74 +R652 +L665 +R98 +R41 +L68 +R33 +R605 +L60 +R97 +R93 +L466 +R66 +R655 +L32 +L23 +R481 +L76 +L5 +L12 +R3 +L698 +L78 +L546 +R63 +R968 +L56 +R56 +R53 +L56 +R56 +R30 +R88 +L38 +L33 +R17 +R30 +L47 +L98 +R652 +R46 +R68 +L62 +L22 +R16 +R3 +L15 +L10 +L78 +L657 +L88 +R645 +R21 +L545 +R88 +R27 +L91 +R63 +R37 +L36 +L58 +R115 +R65 +L86 +R84 +L98 +L76 +L7 +L574 +R38 +R38 +L131 +L87 +R27 +R3 +L717 +R28 +R80 +L8 +R526 +R59 +L18 +R46 +R84 +R13 +L6 +R75 +R19 +L985 +R61 +R26 +R15 +L98 +R83 +R78 +L1 +L3 +L33 +R96 +R49 +L38 +L54 +L72 +L34 +L88 +L363 +L34 +L64 +R661 +L629 +L71 +L21 +R21 +R45 +L45 +L21 +L79 +L84 +R12 +R572 +L849 +R25 +R32 +L183 +L95 +L18 +R31 +L643 +L80 +L203 +L17 +L1 +L458 +R64 +R29 +R54 +L86 +L34 +R62 +R22 +L52 +L645 +L54 +L121 +L80 +R47 +R53 +R54 +R746 +R38 +L38 +L3 +L10 +R13 +L88 +L15 +L59 +L38 +L88 +L12 +L57 +R857 +L707 +L98 +R5 +R476 +L569 +L858 +L49 +L33 +R97 +R55 +L70 +L23 +L99 +R73 +L20 +R16 +L36 +L59 +R54 +L55 +L40 +L660 +R47 +R53 +R832 +L1 +L29 +L414 +R944 +L50 +L65 +L75 +L93 +L49 +L79 +R887 +L74 +R74 +R92 +L13 +R826 +L13 +R90 +R56 +R54 +L230 +R28 +R43 +R11 +L861 +L91 +L709 +R609 +L24 +L879 +R3 +R13 +R587 +L366 +L34 +L569 +L42 +L89 +L84 +R53 +L369 +R45 +R55 +R7 +R79 +R16 +R98 +R430 +R588 +R82 +L32 +R32 +R96 +L155 +L45 +R70 +R23 +L76 +L79 +R29 +L38 +R98 +R177 +R46 +R61 +L7 +L90 +L67 +L64 +L76 +L54 +R213 +R38 +L9 +R61 +R948 +R796 +R84 +L11 +R31 +R35 +R324 +L55 +R68 +L96 +R52 +L40 +L28 +R769 +L29 +R30 +R71 +R724 +R86 +R60 +R74 +L63 +L663 +R94 +L22 +R409 +R715 +R85 +L697 +L258 +L45 +L8 +L92 +L40 +L212 +L843 +R92 +L96 +R22 +L23 +R35 +L35 +R21 +R69 +L37 +L32 +R87 +L28 +L380 +R31 +R69 +R96 +L96 +L85 +L84 +L31 +R18 +R925 +L362 +R25 +R6 +L12 +R88 +L88 +R37 +L58 +L79 +L284 +L34 +R37 +R81 +L148 +R48 +L79 +L21 +R811 +R51 +L56 +R66 +L18 +R946 +L298 +L72 +L349 +R19 +L617 +R17 +L9 +L50 +L41 +R54 +L54 +L6 +R11 +L795 +R89 +R81 +L80 +L321 +R84 +R37 +R32 +L32 +R829 +L6 +R677 +R10 +L74 +R28 +L927 +L37 +L45 +R54 +L31 +R33 +R99 +R84 +R64 +R42 +L4 +L49 +R53 +R36 +R28 +L5 +R29 +R12 +L63 +L67 +R159 +R437 +L66 +L37 +R51 +L22 +R885 +L77 +R24 +L30 +R48 +R95 +R70 +L30 +L54 +R214 +L34 +L103 +L84 +L33 +R317 +L476 +R31 +R41 +L47 +R55 +R96 +L626 +R34 +R92 +L665 +R142 +L362 +R561 +R67 +R96 +L2 +L37 +L83 +R783 +R90 +R70 +L55 +R495 +R25 +L973 +R56 +L54 +R46 +L59 +L7 +L93 +L79 +R38 +L21 +R858 +L732 +R709 +R76 +R41 +R69 +L28 +L5 +L34 +R13 +L26 +L20 +R80 +R20 +L691 +R29 +L76 +L108 +R37 +L277 +R97 +R31 +L42 +L56 +R98 +L94 +R34 +R39 +L902 +R81 +L73 +L27 +R931 +R69 +L62 +R58 +R20 +L51 +R54 +R29 +R82 +L830 +L446 +L41 +R87 +R935 +L952 +R17 +L83 +R99 +L16 +R41 +L41 +L77 +R98 +L15 +L6 +L889 +R88 +R1 +L426 +R26 +R59 +L59 +R646 +L68 +R935 +L813 +L66 +L59 +L43 +L24 +L34 +L74 +L928 +L88 +L25 +L696 +L55 +R54 +R84 +R8 +L75 +L79 +R83 +R72 +R45 +R136 +R78 +L79 +R50 +L90 +R5 +R52 +R848 +L38 +L87 +R95 +R30 +L83 +L88 +R66 +R94 +L89 +R95 +R472 +R33 +R8 +R92 +L193 +R89 +R204 +L57 +R57 +L74 +L68 +R742 +R70 +R76 +L92 +R42 +R56 +L54 +R702 +R831 +L31 +L307 +L21 +R30 +R158 +L60 +R20 +R80 +L26 +L90 +R709 +L520 +R59 +L32 +L592 +L8 +R33 +R54 +R13 +R98 +L476 +R46 +L68 +L26 +R858 +L36 +L13 +R43 +R74 +L7 +L193 +L31 +L66 +L203 +L354 +R18 +L64 +L668 +R68 +L54 +R52 +L98 +R65 +R21 +L91 +L11 +R96 +R31 +L11 +R197 +L63 +L23 +R20 +L44 +R73 +R65 +R75 +L13 +L87 +L62 +R84 +L98 +L68 +R44 +R65 +R735 +R38 +R62 +R97 +L97 +R98 +R97 +R95 +R10 +L374 +L16 +L8 +L7 +R88 +R17 +L1 +L99 +R57 +L57 +R76 +L76 +R711 +R55 +L83 +L83 +R42 +R1 +R57 +R71 +R29 +R357 +L75 +R89 +L35 +R82 +L558 +R79 +R61 +R18 +L18 +R99 +L440 +L559 +R25 +L25 +L278 +L22 +L30 +L11 +R41 +R40 +L81 +R96 +L898 +L50 +L7 +R32 +L701 +R69 +R36 +R14 +L406 +R56 +L15 +R63 +R27 +L84 +L41 +R20 +L37 +L194 +L39 +L641 +L59 +L571 +R25 +L63 +L67 +R3 +L27 +R110 +L12 +R64 +R666 +L72 +R43 +R856 +L30 +L25 +L18 +L4 +R10 +R12 +R271 +L58 +L26 +L289 +R672 +L22 +R52 +L425 +R71 +R204 +L34 +L75 +L241 +R38 +L295 +L143 +R76 +L40 +L852 +R35 +L19 +R94 +R45 +R45 +R73 +R774 +R30 +L34 +L91 +R560 +L35 +L61 +R95 +R27 +R454 +R367 +L43 +R45 +L16 +L59 +R9 +R1 +R98 +L78 +L63 +R74 +R91 +R96 +R2 +L7 +R7 +R270 +L70 +L10 +L85 +L79 +L26 +R25 +L25 +R838 +R19 +R43 +L65 +R39 +L774 +L62 +L38 +L41 +R48 +R6 +R67 +R980 +L764 +L462 +L34 +L9 +R554 +R44 +R93 +L81 +L201 +L95 +L678 +L33 +R48 +L42 +L12 +L149 +L39 +L946 +R147 +L758 +L759 +R16 +L17 +R85 +L15 +L53 +L47 +R97 +L17 +L633 +L36 +R899 +L48 +R68 +L83 +L664 +R2 +L85 +L253 +R42 +L594 +R55 +L92 +R54 +L10 +R48 +R684 +R713 +R58 +R7 +R96 +L61 +R883 +L83 +L84 +R4 +R80 +L34 +R898 +R10 +R944 +L867 +L51 +L2 +R23 +L994 +L27 +R34 +L424 +R90 +R655 +L54 +L1 +R66 +L13 +R35 +L93 +L95 +R37 +L23 +L14 +R75 +L75 +L31 +L29 +L40 +L24 +R86 +R11 +R27 +R39 +R61 +L233 +R9 +L992 +R55 +R61 +R417 +R83 +R892 +R3 +L58 +R63 +L22 +L74 +R701 +L5 +R23 +L90 +L73 +L81 +L43 +L89 +L93 +L54 +L56 +L44 +L341 +R5 +R7 +L36 +L35 +R79 +R21 +L834 +R213 +R5 +R502 +R14 +R70 +R30 +R31 +R69 +R34 +R347 +L22 +R39 +R88 +R782 +L60 +R80 +R312 +R579 +L79 +L19 +L81 +R113 +R13 +L26 +R30 +L43 +L632 +R45 +L12 +R994 +L53 +L79 +R550 +L32 +R46 +L14 +R4 +L61 +L43 +L9 +R67 +R44 +L87 +L15 +L11 +L62 +L856 +R40 +R46 +L92 +L65 +R2 +R35 +L34 +L23 +L924 +R41 +L42 +R64 +R70 +L89 +L243 +R22 +L79 +L56 +L344 +L33 +L67 +L94 +R94 +R42 +L42 +R20 +R93 +L63 +L77 +L73 +R28 +R10 +R82 +L66 +R46 +R40 +L36 +L29 +R841 +R95 +L55 +R88 +L44 +L428 +R28 +R42 +L11 +R785 +R930 +L46 +R448 +L48 +R99 +R1 +L391 +R91 +R74 +R26 +L59 +R59 +L92 +R49 +R39 +L96 +R22 +R78 +R6 +R80 +L89 +L465 +L98 +L234 +L23 +R23 +R64 +R33 +L37 +R207 +R59 +L87 +R3 +L71 +L18 +L861 +L64 +R551 +L79 +L20 +R790 +L70 +R45 +R35 +L92 +R25 +L13 +L68 +L32 +L65 +R65 +L2 +R657 +L60 +L95 +R40 +R760 +L599 +R99 +R41 +R41 +R88 +L70 +L37 +R7 +L27 +L43 +R35 +L449 +L86 +L74 +R7 +R92 +L268 +R43 +R391 +R55 +R64 +R51 +R99 +L685 +L47 +L28 +L42 +L58 +R28 +R372 +L11 +L89 +R371 +L3 +L68 +L38 +R79 +L43 +L998 +L9 +R676 +R556 +R147 +L622 +R52 +R6 +R48 +R7 +R539 +R192 +R42 +R66 +R43 +R526 +L91 +L548 +L81 +R851 +R80 +L57 +R23 +R13 +R899 +L33 +R51 +R37 +R87 +R95 +L95 +L62 +L38 +R66 +L44 +R37 +L990 +L69 +R95 +L94 +L701 +R98 +L98 +R42 +L42 +L36 +L64 +L10 +R41 +L31 +L56 +R56 +L98 +R62 +R60 +L24 +R762 +R941 +R42 +R524 +R931 +L757 +R66 +L66 +L25 +R44 +R88 +R16 +R29 +R80 +R25 +R52 +R462 +R19 +R83 +L673 +L43 +L88 +R88 +R962 +R40 +R98 +R452 +R48 +R429 +R27 +L56 +R253 +R135 +L78 +R90 +L59 +R19 +R40 +R154 +L53 +L1 +L36 +R536 +L88 +L73 +R85 +L22 +R65 +R278 +R16 +R59 +L19 +R99 +R98 +L98 +R46 +L46 +R80 +L149 +R82 +L813 +L82 +R29 +R53 +L71 +L38 +R79 +R75 +L45 +L40 +R40 +L42 +L29 +L29 +L84 +L92 +L24 +L21 +R93 +L14 +R42 +L68 +L17 +L37 +L72 +R17 +L27 +R4 +L73 +R48 +R94 +L69 +R17 +R51 +L68 +L38 +L62 +L44 +L40 +L44 +R51 +L39 +R54 +L14 +L91 +R30 +R94 +L57 +R64 +R36 +R76 +L24 +L70 +L82 +L6 +L17 +R5 +R47 +L49 +L19 +L6 +R29 +R40 +L46 +R40 +R32 +R5 +L20 +L3 +L3 +R45 +L15 +R26 +R22 +R6 +R7 +L22 +L21 +L23 +R33 +R43 +R33 +L46 +R29 +L2 +L1 +L38 +L22 +R9 +L13 +L8 +R40 +L24 +L44 +R28 +R37 +L21 +R38 +R26 +R34 +L47 +L19 +L8 +R48 diff --git a/2025/utils.nix b/2025/utils.nix new file mode 100644 index 0000000..a0f3bca --- /dev/null +++ b/2025/utils.nix @@ -0,0 +1,4 @@ +{ + toIntBase10 = str: builtins.fromJSON "${str}"; + mod = a: b: a - b * (builtins.floor (a / b)); +} diff --git a/flake.lock b/flake.lock index 92ea90c..4544876 100644 --- a/flake.lock +++ b/flake.lock @@ -2,11 +2,11 @@ "nodes": { "nix-filter": { "locked": { - "lastModified": 1731533336, - "narHash": "sha256-oRam5PS1vcrr5UPgALW0eo1m/5/pls27Z/pabHNy2Ms=", + "lastModified": 1757882181, + "narHash": "sha256-+cCxYIh2UNalTz364p+QYmWHs0P+6wDhiWR4jDIKQIU=", "owner": "numtide", "repo": "nix-filter", - "rev": "f7653272fd234696ae94229839a99b73c9ab7de0", + "rev": "59c44d1909c72441144b93cf0f054be7fe764de5", "type": "github" }, "original": { @@ -17,11 +17,11 @@ }, "nixpkgs": { "locked": { - "lastModified": 1733581040, - "narHash": "sha256-Qn3nPMSopRQJgmvHzVqPcE3I03zJyl8cSbgnnltfFDY=", + "lastModified": 1764950072, + "narHash": "sha256-BmPWzogsG2GsXZtlT+MTcAWeDK5hkbGRZTeZNW42fwA=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "22c3f2cf41a0e70184334a958e6b124fb0ce3e01", + "rev": "f61125a668a320878494449750330ca58b78c557", "type": "github" }, "original": { @@ -45,11 +45,11 @@ ] }, "locked": { - "lastModified": 1733625333, - "narHash": "sha256-tIML2axjm4AnlKP29upVJxzBpj4Cy4ak+PKonqQtXmc=", + "lastModified": 1765161692, + "narHash": "sha256-XdY9AFzmgRPYIhP4N+WiCHMNxPoifP5/Ld+orMYBD8c=", "owner": "oxalica", "repo": "rust-overlay", - "rev": "430c8b054e45ea44fd2c9521a378306ada507a6c", + "rev": "7ed7e8c74be95906275805db68201e74e9904f07", "type": "github" }, "original": {