From 35301abb4ba47b30efb27940742114b791c99c6d Mon Sep 17 00:00:00 2001 From: Brian Glass Date: Tue, 8 Sep 2026 11:34:15 -0400 Subject: [PATCH 01/20] Pin the fasting output with a characterisation test First step of the refactor scoped in docs/fasting-refactor-scope.md. There is no spec to assert against -- Day.fast_exception is max() over an integer encoding a dietary rung, a precedence claim and a sentinel at once, with _apply_fasting_adjustments patching whatever that gets wrong -- so current behaviour is pinned verbatim instead. 3,652 days: five years spanning the whole Paschal range, both traditions. Each line carries the inputs as well as the outputs, 2026-04-05 slavic w0 feast8 fast2 exc4 rows=0,4 -> meat,dairy,eggs so a diff names the date, tradition, rank, season and contributing rows rather than just moving a number. The test runs in 4 seconds, so no year range needed trimming. What it reveals is already useful, and is written up in the scope doc. There are 36 distinct row-collision patterns but only 6 distinct dietary outcomes, and six patterns resolve differently in different contexts. rows=(0,4) is the clearest: one row claiming fish keeps it at feast levels 7-8, drops to wine and oil at levels 4-5 on a weekend, and to strict at 4-5 midweek. That answers the design question raised before starting. The discriminator is feast_level plus season and weekday, not precedence, so the row needs no stored precedence field: what indices 3 and 4 encode is "important enough to survive the season's cap", and the rank that makes it important is already on the row. The target rule is that the season sets a floor and a cap and a festal claim lifts the floor only if its rank clears the season's bar. No behaviour change; 190 tests pass. Co-Authored-By: Claude Opus 5 Claude-Session: https://claude.ai/code/session_019nQRjJpPqW89xqzAf1vsEX --- .../tests/data/fasting-characterization.txt | 3652 +++++++++++++++++ .../tests/test_fasting_characterization.py | 69 + docs/fasting-refactor-scope.md | 48 +- tools/fasting/characterize.py | 108 + 4 files changed, 3873 insertions(+), 4 deletions(-) create mode 100644 calendarium/tests/data/fasting-characterization.txt create mode 100644 calendarium/tests/test_fasting_characterization.py create mode 100644 tools/fasting/characterize.py diff --git a/calendarium/tests/data/fasting-characterization.txt b/calendarium/tests/data/fasting-characterization.txt new file mode 100644 index 00000000..5fe1f1a2 --- /dev/null +++ b/calendarium/tests/data/fasting-characterization.txt @@ -0,0 +1,3652 @@ +2025-01-01 slavic w3 feast6 fast0 exc11 rows=0,11 -> - +2025-01-02 slavic w4 feast4 fast0 exc11 rows=0,11 -> - +2025-01-03 slavic w5 feast0 fast0 exc11 rows=0,0,11 -> - +2025-01-04 slavic w6 feast0 fast0 exc11 rows=0,0,11 -> - +2025-01-05 slavic w0 feast0 fast1 exc1 rows=0,0,9 -> meat,fish,dairy,eggs +2025-01-06 slavic w1 feast8 fast0 exc11 rows=0,11 -> - +2025-01-07 slavic w2 feast3 fast0 exc2 rows=0,2 -> - +2025-01-08 slavic w3 feast0 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2025-01-09 slavic w4 feast4 fast0 exc0 rows=0,0 -> - +2025-01-10 slavic w5 feast4 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2025-01-11 slavic w6 feast4 fast0 exc0 rows=0,0,0 -> - +2025-01-12 slavic w0 feast3 fast0 exc0 rows=0,0,0 -> - +2025-01-13 slavic w1 feast0 fast0 exc0 rows=0,0 -> - +2025-01-14 slavic w2 feast4 fast0 exc0 rows=0,0 -> - +2025-01-15 slavic w3 feast2 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2025-01-16 slavic w4 feast2 fast0 exc0 rows=0,0 -> - +2025-01-17 slavic w5 feast5 fast1 exc2 rows=0,2 -> meat,dairy,eggs +2025-01-18 slavic w6 feast2 fast0 exc0 rows=0,0 -> - +2025-01-19 slavic w0 feast2 fast0 exc0 rows=0,0 -> - +2025-01-20 slavic w1 feast5 fast0 exc2 rows=0,2 -> - +2025-01-21 slavic w2 feast0 fast0 exc0 rows=0,0 -> - +2025-01-22 slavic w3 feast0 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2025-01-23 slavic w4 feast0 fast0 exc0 rows=0,0 -> - +2025-01-24 slavic w5 feast4 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2025-01-25 slavic w6 feast4 fast0 exc0 rows=0,0 -> - +2025-01-26 slavic w0 feast5 fast0 exc0 rows=0,0,0 -> - +2025-01-27 slavic w1 feast4 fast0 exc0 rows=0,0 -> - +2025-01-28 slavic w2 feast2 fast0 exc0 rows=0,0 -> - +2025-01-29 slavic w3 feast2 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2025-01-30 slavic w4 feast5 fast0 exc2 rows=0,2 -> - +2025-01-31 slavic w5 feast3 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2025-02-01 slavic w6 feast2 fast0 exc0 rows=0,0 -> - +2025-02-02 slavic w0 feast8 fast0 exc2 rows=0,2 -> - +2025-02-03 slavic w1 feast2 fast0 exc0 rows=0,0 -> - +2025-02-04 slavic w2 feast0 fast0 exc0 rows=0,0 -> - +2025-02-05 slavic w3 feast4 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2025-02-06 slavic w4 feast0 fast0 exc0 rows=0,0 -> - +2025-02-07 slavic w5 feast0 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2025-02-08 slavic w6 feast2 fast0 exc0 rows=0,0 -> - +2025-02-09 slavic w0 feast4 fast0 exc11 rows=0,11 -> - +2025-02-10 slavic w1 feast0 fast0 exc11 rows=0,11 -> - +2025-02-11 slavic w2 feast3 fast0 exc11 rows=0,11 -> - +2025-02-12 slavic w3 feast4 fast0 exc11 rows=0,11 -> - +2025-02-13 slavic w4 feast0 fast0 exc11 rows=0,11 -> - +2025-02-14 slavic w5 feast4 fast0 exc11 rows=0,11 -> - +2025-02-15 slavic w6 feast0 fast0 exc11 rows=0,11 -> - +2025-02-16 slavic w0 feast0 fast0 exc0 rows=0,0 -> - +2025-02-17 slavic w1 feast4 fast0 exc0 rows=0,0 -> - +2025-02-18 slavic w2 feast0 fast0 exc0 rows=0,0 -> - +2025-02-19 slavic w3 feast0 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2025-02-20 slavic w4 feast0 fast0 exc0 rows=0,0 -> - +2025-02-21 slavic w5 feast0 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2025-02-22 slavic w6 feast0 fast0 exc0 rows=0,0 -> - +2025-02-23 slavic w0 feast0 fast0 exc0 rows=0,0 -> - +2025-02-24 slavic w1 feast4 fast1 exc7 rows=1,7 -> meat +2025-02-25 slavic w2 feast0 fast1 exc7 rows=0,7 -> meat +2025-02-26 slavic w3 feast0 fast1 exc7 rows=0,7 -> meat +2025-02-27 slavic w4 feast5 fast1 exc7 rows=2,7 -> meat +2025-02-28 slavic w5 feast0 fast1 exc7 rows=0,7 -> meat +2025-03-01 slavic w6 feast0 fast1 exc7 rows=0,7 -> meat +2025-03-02 slavic w0 feast3 fast1 exc7 rows=0,7 -> meat +2025-03-03 slavic w1 feast0 fast2 exc10 rows=0,10 -> meat,fish,dairy,eggs,wine,oil +2025-03-04 slavic w2 feast4 fast2 exc10 rows=0,10 -> meat,fish,dairy,eggs,wine,oil +2025-03-05 slavic w3 feast1 fast2 exc10 rows=0,10 -> meat,fish,dairy,eggs,wine,oil +2025-03-06 slavic w4 feast0 fast2 exc10 rows=0,10 -> meat,fish,dairy,eggs,wine,oil +2025-03-07 slavic w5 feast1 fast2 exc10 rows=0,10 -> meat,fish,dairy,eggs,wine,oil +2025-03-08 slavic w6 feast0 fast2 exc3 rows=0,3 -> meat,fish,dairy,eggs +2025-03-09 slavic w0 feast4 fast2 exc3 rows=1,3 -> meat,fish,dairy,eggs +2025-03-10 slavic w1 feast0 fast2 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2025-03-11 slavic w2 feast3 fast2 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2025-03-12 slavic w3 feast1 fast2 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2025-03-13 slavic w4 feast0 fast2 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2025-03-14 slavic w5 feast1 fast2 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2025-03-15 slavic w6 feast0 fast2 exc3 rows=0,3 -> meat,fish,dairy,eggs +2025-03-16 slavic w0 feast0 fast2 exc3 rows=0,3 -> meat,fish,dairy,eggs +2025-03-17 slavic w1 feast3 fast2 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2025-03-18 slavic w2 feast2 fast2 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2025-03-19 slavic w3 feast1 fast2 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2025-03-20 slavic w4 feast0 fast2 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2025-03-21 slavic w5 feast1 fast2 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2025-03-22 slavic w6 feast0 fast2 exc3 rows=0,3 -> meat,fish,dairy,eggs +2025-03-23 slavic w0 feast0 fast2 exc3 rows=0,3 -> meat,fish,dairy,eggs +2025-03-24 slavic w1 feast2 fast2 exc3 rows=0,3 -> meat,fish,dairy,eggs +2025-03-25 slavic w2 feast7 fast2 exc4 rows=0,4 -> meat,dairy,eggs +2025-03-26 slavic w3 feast3 fast2 exc3 rows=0,3 -> meat,fish,dairy,eggs +2025-03-27 slavic w4 feast0 fast2 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2025-03-28 slavic w5 feast1 fast2 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2025-03-29 slavic w6 feast0 fast2 exc3 rows=0,3 -> meat,fish,dairy,eggs +2025-03-30 slavic w0 feast0 fast2 exc3 rows=0,3 -> meat,fish,dairy,eggs +2025-03-31 slavic w1 feast4 fast2 exc1 rows=0,1 -> meat,fish,dairy,eggs +2025-04-01 slavic w2 feast3 fast2 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2025-04-02 slavic w3 feast1 fast2 exc3 rows=0,3 -> meat,fish,dairy,eggs +2025-04-03 slavic w4 feast0 fast2 exc3 rows=0,3 -> meat,fish,dairy,eggs +2025-04-04 slavic w5 feast1 fast2 exc3 rows=0,3 -> meat,fish,dairy,eggs +2025-04-05 slavic w6 feast0 fast2 exc3 rows=0,3 -> meat,fish,dairy,eggs +2025-04-06 slavic w0 feast4 fast2 exc3 rows=0,3 -> meat,fish,dairy,eggs +2025-04-07 slavic w1 feast4 fast2 exc1 rows=0,1 -> meat,fish,dairy,eggs +2025-04-08 slavic w2 feast0 fast2 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2025-04-09 slavic w3 feast1 fast2 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2025-04-10 slavic w4 feast0 fast2 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2025-04-11 slavic w5 feast1 fast2 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2025-04-12 slavic w6 feast0 fast2 exc6 rows=0,6 -> meat,fish,dairy,eggs +2025-04-13 slavic w0 feast8 fast2 exc4 rows=0,4 -> meat,dairy,eggs +2025-04-14 slavic w1 feast1 fast2 exc10 rows=0,10 -> meat,fish,dairy,eggs,wine,oil +2025-04-15 slavic w2 feast1 fast2 exc10 rows=0,10 -> meat,fish,dairy,eggs,wine,oil +2025-04-16 slavic w3 feast1 fast2 exc10 rows=0,10 -> meat,fish,dairy,eggs,wine,oil +2025-04-17 slavic w4 feast3 fast2 exc3 rows=0,3 -> meat,fish,dairy,eggs +2025-04-18 slavic w5 feast0 fast2 exc9 rows=0,9 -> meat,fish,dairy,eggs,wine,oil +2025-04-19 slavic w6 feast3 fast2 exc5 rows=0,5 -> meat,fish,dairy,eggs,oil +2025-04-20 slavic w0 feast8 fast0 exc11 rows=0,11 -> - +2025-04-21 slavic w1 feast0 fast0 exc11 rows=0,11 -> - +2025-04-22 slavic w2 feast0 fast0 exc11 rows=0,11 -> - +2025-04-23 slavic w3 feast5 fast0 exc11 rows=1,11 -> - +2025-04-24 slavic w4 feast0 fast0 exc11 rows=0,11 -> - +2025-04-25 slavic w5 feast4 fast0 exc11 rows=1,11 -> - +2025-04-26 slavic w6 feast3 fast0 exc11 rows=0,11 -> - +2025-04-27 slavic w0 feast2 fast0 exc0 rows=0,0 -> - +2025-04-28 slavic w1 feast0 fast0 exc0 rows=0,0 -> - +2025-04-29 slavic w2 feast0 fast0 exc0 rows=0,0 -> - +2025-04-30 slavic w3 feast4 fast1 exc1 rows=0,1 -> meat,fish,dairy,eggs +2025-05-01 slavic w4 feast3 fast0 exc0 rows=0,0 -> - +2025-05-02 slavic w5 feast4 fast1 exc1 rows=0,1 -> meat,fish,dairy,eggs +2025-05-03 slavic w6 feast4 fast0 exc0 rows=0,0 -> - +2025-05-04 slavic w0 feast0 fast0 exc0 rows=0,0 -> - +2025-05-05 slavic w1 feast0 fast0 exc0 rows=0,0 -> - +2025-05-06 slavic w2 feast0 fast0 exc0 rows=0,0 -> - +2025-05-07 slavic w3 feast5 fast1 exc2 rows=1,2 -> meat,dairy,eggs +2025-05-08 slavic w4 feast5 fast0 exc2 rows=0,2 -> - +2025-05-09 slavic w5 feast4 fast1 exc1 rows=0,1 -> meat,fish,dairy,eggs +2025-05-10 slavic w6 feast4 fast0 exc0 rows=0,0 -> - +2025-05-11 slavic w0 feast5 fast0 exc2 rows=0,2 -> - +2025-05-12 slavic w1 feast0 fast0 exc0 rows=0,0 -> - +2025-05-13 slavic w2 feast0 fast0 exc0 rows=0,0 -> - +2025-05-14 slavic w3 feast2 fast1 exc2 rows=0,2 -> meat,dairy,eggs +2025-05-15 slavic w4 feast3 fast0 exc0 rows=0,0 -> - +2025-05-16 slavic w5 feast3 fast1 exc1 rows=0,1 -> meat,fish,dairy,eggs +2025-05-17 slavic w6 feast0 fast0 exc0 rows=0,0 -> - +2025-05-18 slavic w0 feast0 fast0 exc0 rows=0,0 -> - +2025-05-19 slavic w1 feast4 fast0 exc0 rows=0,0 -> - +2025-05-20 slavic w2 feast3 fast0 exc0 rows=0,0 -> - +2025-05-21 slavic w3 feast4 fast1 exc1 rows=0,1 -> meat,fish,dairy,eggs +2025-05-22 slavic w4 feast0 fast0 exc0 rows=0,0 -> - +2025-05-23 slavic w5 feast3 fast1 exc1 rows=0,1 -> meat,fish,dairy,eggs +2025-05-24 slavic w6 feast3 fast0 exc0 rows=0,0 -> - +2025-05-25 slavic w0 feast4 fast0 exc0 rows=0,0 -> - +2025-05-26 slavic w1 feast2 fast0 exc0 rows=0,0 -> - +2025-05-27 slavic w2 feast3 fast0 exc0 rows=0,0 -> - +2025-05-28 slavic w3 feast2 fast1 exc2 rows=0,2 -> meat,dairy,eggs +2025-05-29 slavic w4 feast8 fast0 exc0 rows=0,0 -> - +2025-05-30 slavic w5 feast0 fast1 exc1 rows=0,1 -> meat,fish,dairy,eggs +2025-05-31 slavic w6 feast0 fast0 exc0 rows=0,0 -> - +2025-06-01 slavic w0 feast0 fast0 exc0 rows=0,0 -> - +2025-06-02 slavic w1 feast0 fast0 exc0 rows=0,0 -> - +2025-06-03 slavic w2 feast0 fast0 exc0 rows=0,0 -> - +2025-06-04 slavic w3 feast0 fast1 exc1 rows=0,1 -> meat,fish,dairy,eggs +2025-06-05 slavic w4 feast0 fast0 exc0 rows=0,0 -> - +2025-06-06 slavic w5 feast0 fast1 exc1 rows=0,1 -> meat,fish,dairy,eggs +2025-06-07 slavic w6 feast0 fast0 exc0 rows=0,0 -> - +2025-06-08 slavic w0 feast8 fast0 exc0 rows=0,0 -> - +2025-06-09 slavic w1 feast3 fast0 exc11 rows=0,11 -> - +2025-06-10 slavic w2 feast4 fast0 exc11 rows=0,11 -> - +2025-06-11 slavic w3 feast4 fast0 exc11 rows=0,11 -> - +2025-06-12 slavic w4 feast2 fast0 exc11 rows=0,11 -> - +2025-06-13 slavic w5 feast0 fast0 exc11 rows=0,11 -> - +2025-06-14 slavic w6 feast0 fast0 exc11 rows=0,11 -> - +2025-06-15 slavic w0 feast4 fast0 exc0 rows=0,0 -> - +2025-06-16 slavic w1 feast4 fast3 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2025-06-17 slavic w2 feast0 fast3 exc1 rows=0,0 -> meat,fish,dairy,eggs +2025-06-18 slavic w3 feast0 fast3 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2025-06-19 slavic w4 feast4 fast3 exc1 rows=0,0 -> meat,fish,dairy,eggs +2025-06-20 slavic w5 feast0 fast3 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2025-06-21 slavic w6 feast0 fast3 exc2 rows=0,0 -> meat,dairy,eggs +2025-06-22 slavic w0 feast0 fast3 exc2 rows=0,0 -> meat,dairy,eggs +2025-06-23 slavic w1 feast0 fast3 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2025-06-24 slavic w2 feast6 fast3 exc2 rows=0,2 -> meat,dairy,eggs +2025-06-25 slavic w3 feast3 fast3 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2025-06-26 slavic w4 feast4 fast3 exc1 rows=0,0 -> meat,fish,dairy,eggs +2025-06-27 slavic w5 feast0 fast3 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2025-06-28 slavic w6 feast2 fast3 exc2 rows=0,0 -> meat,dairy,eggs +2025-06-29 slavic w0 feast6 fast0 exc2 rows=0,2 -> - +2025-06-30 slavic w1 feast4 fast0 exc0 rows=0,0 -> - +2025-07-01 slavic w2 feast2 fast0 exc0 rows=0,0 -> - +2025-07-02 slavic w3 feast3 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2025-07-03 slavic w4 feast4 fast0 exc0 rows=0,0 -> - +2025-07-04 slavic w5 feast0 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2025-07-05 slavic w6 feast4 fast0 exc2 rows=0,2 -> - +2025-07-06 slavic w0 feast0 fast0 exc0 rows=0,0 -> - +2025-07-07 slavic w1 feast0 fast0 exc0 rows=0,0 -> - +2025-07-08 slavic w2 feast2 fast0 exc0 rows=0,0 -> - +2025-07-09 slavic w3 feast0 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2025-07-10 slavic w4 feast4 fast0 exc0 rows=0,0 -> - +2025-07-11 slavic w5 feast2 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2025-07-12 slavic w6 feast0 fast0 exc0 rows=0,0 -> - +2025-07-13 slavic w0 feast2 fast0 exc0 rows=0,0,0 -> - +2025-07-14 slavic w1 feast2 fast0 exc0 rows=0,0 -> - +2025-07-15 slavic w2 feast5 fast0 exc2 rows=0,2 -> - +2025-07-16 slavic w3 feast0 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2025-07-17 slavic w4 feast4 fast0 exc0 rows=0,0 -> - +2025-07-18 slavic w5 feast0 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2025-07-19 slavic w6 feast4 fast0 exc0 rows=0,0 -> - +2025-07-20 slavic w0 feast5 fast0 exc2 rows=0,2 -> - +2025-07-21 slavic w1 feast0 fast0 exc0 rows=0,0 -> - +2025-07-22 slavic w2 feast2 fast0 exc0 rows=0,0 -> - +2025-07-23 slavic w3 feast0 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2025-07-24 slavic w4 feast4 fast0 exc0 rows=0,0 -> - +2025-07-25 slavic w5 feast3 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2025-07-26 slavic w6 feast4 fast0 exc2 rows=0,2 -> - +2025-07-27 slavic w0 feast2 fast0 exc0 rows=0,0 -> - +2025-07-28 slavic w1 feast0 fast0 exc0 rows=0,0 -> - +2025-07-29 slavic w2 feast0 fast0 exc0 rows=0,0 -> - +2025-07-30 slavic w3 feast0 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2025-07-31 slavic w4 feast2 fast0 exc0 rows=0,0 -> - +2025-08-01 slavic w5 feast3 fast4 exc0 rows=0,1 -> meat,fish,dairy,eggs,wine,oil +2025-08-02 slavic w6 feast3 fast4 exc1 rows=0,0 -> meat,fish,dairy,eggs +2025-08-03 slavic w0 feast3 fast4 exc1 rows=0,0 -> meat,fish,dairy,eggs +2025-08-04 slavic w1 feast0 fast4 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2025-08-05 slavic w2 feast2 fast4 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2025-08-06 slavic w3 feast8 fast4 exc4 rows=0,4 -> meat,dairy,eggs +2025-08-07 slavic w4 feast0 fast4 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2025-08-08 slavic w5 feast0 fast4 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2025-08-09 slavic w6 feast5 fast4 exc1 rows=0,4 -> meat,fish,dairy,eggs +2025-08-10 slavic w0 feast0 fast4 exc1 rows=0,0 -> meat,fish,dairy,eggs +2025-08-11 slavic w1 feast0 fast4 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2025-08-12 slavic w2 feast0 fast4 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2025-08-13 slavic w3 feast4 fast4 exc0 rows=0,4 -> meat,fish,dairy,eggs,wine,oil +2025-08-14 slavic w4 feast2 fast4 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2025-08-15 slavic w5 feast7 fast1 exc2 rows=0,2 -> meat,dairy,eggs +2025-08-16 slavic w6 feast5 fast0 exc1 rows=0,1 -> - +2025-08-17 slavic w0 feast0 fast0 exc0 rows=0,0 -> - +2025-08-18 slavic w1 feast0 fast0 exc0 rows=0,0 -> - +2025-08-19 slavic w2 feast0 fast0 exc0 rows=0,0 -> - +2025-08-20 slavic w3 feast0 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2025-08-21 slavic w4 feast3 fast0 exc0 rows=0,0 -> - +2025-08-22 slavic w5 feast0 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2025-08-23 slavic w6 feast0 fast0 exc0 rows=0,0 -> - +2025-08-24 slavic w0 feast3 fast0 exc0 rows=0,0 -> - +2025-08-25 slavic w1 feast2 fast0 exc0 rows=0,0 -> - +2025-08-26 slavic w2 feast4 fast0 exc0 rows=0,0 -> - +2025-08-27 slavic w3 feast0 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2025-08-28 slavic w4 feast4 fast0 exc1 rows=0,1 -> - +2025-08-29 slavic w5 feast6 fast1 exc8 rows=0,8 -> meat,fish,dairy,eggs +2025-08-30 slavic w6 feast4 fast0 exc0 rows=0,0 -> - +2025-08-31 slavic w0 feast3 fast0 exc0 rows=0,0 -> - +2025-09-01 slavic w1 feast4 fast0 exc1 rows=0,1 -> - +2025-09-02 slavic w2 feast0 fast0 exc0 rows=0,0 -> - +2025-09-03 slavic w3 feast0 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2025-09-04 slavic w4 feast0 fast0 exc0 rows=0,0 -> - +2025-09-05 slavic w5 feast2 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2025-09-06 slavic w6 feast2 fast0 exc0 rows=0,0 -> - +2025-09-07 slavic w0 feast3 fast0 exc0 rows=0,0,0 -> - +2025-09-08 slavic w1 feast7 fast0 exc2 rows=0,2 -> - +2025-09-09 slavic w2 feast3 fast0 exc0 rows=0,0 -> - +2025-09-10 slavic w3 feast0 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2025-09-11 slavic w4 feast4 fast0 exc0 rows=0,0 -> - +2025-09-12 slavic w5 feast0 fast1 exc1 rows=0,1 -> meat,fish,dairy,eggs +2025-09-13 slavic w6 feast3 fast0 exc1 rows=0,0,1 -> - +2025-09-14 slavic w0 feast8 fast1 exc8 rows=0,8 -> meat,fish,dairy,eggs +2025-09-15 slavic w1 feast2 fast0 exc0 rows=0,0 -> - +2025-09-16 slavic w2 feast2 fast0 exc0 rows=0,0 -> - +2025-09-17 slavic w3 feast0 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2025-09-18 slavic w4 feast0 fast0 exc0 rows=0,0 -> - +2025-09-19 slavic w5 feast3 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2025-09-20 slavic w6 feast3 fast0 exc0 rows=0,0,0 -> - +2025-09-21 slavic w0 feast4 fast0 exc0 rows=0,0,0 -> - +2025-09-22 slavic w1 feast2 fast0 exc0 rows=0,0 -> - +2025-09-23 slavic w2 feast3 fast0 exc1 rows=0,1 -> - +2025-09-24 slavic w3 feast4 fast1 exc2 rows=0,2 -> meat,dairy,eggs +2025-09-25 slavic w4 feast4 fast0 exc2 rows=0,2 -> - +2025-09-26 slavic w5 feast5 fast1 exc2 rows=0,2 -> meat,dairy,eggs +2025-09-27 slavic w6 feast3 fast0 exc0 rows=0,0 -> - +2025-09-28 slavic w0 feast4 fast0 exc1 rows=0,1 -> - +2025-09-29 slavic w1 feast2 fast0 exc0 rows=0,0 -> - +2025-09-30 slavic w2 feast3 fast0 exc0 rows=0,0 -> - +2025-10-01 slavic w3 feast6 fast1 exc2 rows=0,2 -> meat,dairy,eggs +2025-10-02 slavic w4 feast2 fast0 exc0 rows=0,0 -> - +2025-10-03 slavic w5 feast2 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2025-10-04 slavic w6 feast3 fast0 exc0 rows=0,0 -> - +2025-10-05 slavic w0 feast3 fast0 exc0 rows=0,0 -> - +2025-10-06 slavic w1 feast5 fast0 exc2 rows=0,2 -> - +2025-10-07 slavic w2 feast2 fast0 exc0 rows=0,0 -> - +2025-10-08 slavic w3 feast0 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2025-10-09 slavic w4 feast5 fast0 exc2 rows=0,2 -> - +2025-10-10 slavic w5 feast0 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2025-10-11 slavic w6 feast0 fast0 exc0 rows=0,0 -> - +2025-10-12 slavic w0 feast0 fast0 exc0 rows=0,0,0 -> - +2025-10-13 slavic w1 feast0 fast0 exc0 rows=0,0 -> - +2025-10-14 slavic w2 feast2 fast0 exc0 rows=0,0 -> - +2025-10-15 slavic w3 feast0 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2025-10-16 slavic w4 feast0 fast0 exc0 rows=0,0 -> - +2025-10-17 slavic w5 feast0 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2025-10-18 slavic w6 feast4 fast0 exc0 rows=0,0 -> - +2025-10-19 slavic w0 feast2 fast0 exc0 rows=0,0 -> - +2025-10-20 slavic w1 feast2 fast0 exc0 rows=0,0 -> - +2025-10-21 slavic w2 feast2 fast0 exc0 rows=0,0 -> - +2025-10-22 slavic w3 feast0 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2025-10-23 slavic w4 feast3 fast0 exc0 rows=0,0 -> - +2025-10-24 slavic w5 feast0 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2025-10-25 slavic w6 feast0 fast0 exc0 rows=0,0,0 -> - +2025-10-26 slavic w0 feast4 fast0 exc2 rows=0,2 -> - +2025-10-27 slavic w1 feast0 fast0 exc0 rows=0,0 -> - +2025-10-28 slavic w2 feast3 fast0 exc0 rows=0,0 -> - +2025-10-29 slavic w3 feast3 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2025-10-30 slavic w4 feast0 fast0 exc0 rows=0,0 -> - +2025-10-31 slavic w5 feast0 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2025-11-01 slavic w6 feast2 fast0 exc0 rows=0,0 -> - +2025-11-02 slavic w0 feast0 fast0 exc0 rows=0,0,0 -> - +2025-11-03 slavic w1 feast0 fast0 exc0 rows=0,0 -> - +2025-11-04 slavic w2 feast0 fast0 exc0 rows=0,0 -> - +2025-11-05 slavic w3 feast3 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2025-11-06 slavic w4 feast2 fast0 exc0 rows=0,0 -> - +2025-11-07 slavic w5 feast0 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2025-11-08 slavic w6 feast5 fast0 exc2 rows=0,2 -> - +2025-11-09 slavic w0 feast0 fast0 exc0 rows=0,0 -> - +2025-11-10 slavic w1 feast0 fast0 exc0 rows=0,0 -> - +2025-11-11 slavic w2 feast0 fast0 exc0 rows=0,0 -> - +2025-11-12 slavic w3 feast2 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2025-11-13 slavic w4 feast5 fast0 exc2 rows=0,2 -> - +2025-11-14 slavic w5 feast4 fast1 exc1 rows=0,1 -> meat,fish,dairy,eggs +2025-11-15 slavic w6 feast0 fast5 exc2 rows=0,0 -> meat,dairy,eggs +2025-11-16 slavic w0 feast6 fast5 exc2 rows=0,2 -> meat,dairy,eggs +2025-11-17 slavic w1 feast3 fast5 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2025-11-18 slavic w2 feast0 fast5 exc1 rows=0,0 -> meat,fish,dairy,eggs +2025-11-19 slavic w3 feast3 fast5 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2025-11-20 slavic w4 feast0 fast5 exc1 rows=0,0 -> meat,fish,dairy,eggs +2025-11-21 slavic w5 feast7 fast5 exc2 rows=0,2 -> meat,dairy,eggs +2025-11-22 slavic w6 feast2 fast5 exc2 rows=0,0 -> meat,dairy,eggs +2025-11-23 slavic w0 feast3 fast5 exc2 rows=0,0 -> meat,dairy,eggs +2025-11-24 slavic w1 feast2 fast5 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2025-11-25 slavic w2 feast0 fast5 exc1 rows=0,1 -> meat,fish,dairy,eggs +2025-11-26 slavic w3 feast0 fast5 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2025-11-27 slavic w4 feast2 fast5 exc1 rows=0,0 -> meat,fish,dairy,eggs +2025-11-28 slavic w5 feast2 fast5 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2025-11-29 slavic w6 feast0 fast5 exc2 rows=0,0 -> meat,dairy,eggs +2025-11-30 slavic w0 feast4 fast5 exc2 rows=0,2 -> meat,dairy,eggs +2025-12-01 slavic w1 feast0 fast5 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2025-12-02 slavic w2 feast0 fast5 exc1 rows=0,0 -> meat,fish,dairy,eggs +2025-12-03 slavic w3 feast3 fast5 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2025-12-04 slavic w4 feast0 fast5 exc1 rows=0,0 -> meat,fish,dairy,eggs +2025-12-05 slavic w5 feast4 fast5 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2025-12-06 slavic w6 feast5 fast5 exc2 rows=0,2 -> meat,dairy,eggs +2025-12-07 slavic w0 feast3 fast5 exc2 rows=0,0 -> meat,dairy,eggs +2025-12-08 slavic w1 feast0 fast5 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2025-12-09 slavic w2 feast3 fast5 exc1 rows=0,0 -> meat,fish,dairy,eggs +2025-12-10 slavic w3 feast0 fast5 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2025-12-11 slavic w4 feast0 fast5 exc1 rows=0,0 -> meat,fish,dairy,eggs +2025-12-12 slavic w5 feast2 fast5 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2025-12-13 slavic w6 feast5 fast5 exc2 rows=0,2 -> meat,dairy,eggs +2025-12-14 slavic w0 feast0 fast5 exc2 rows=0,0,0 -> meat,dairy,eggs +2025-12-15 slavic w1 feast2 fast5 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2025-12-16 slavic w2 feast0 fast5 exc1 rows=0,0 -> meat,fish,dairy,eggs +2025-12-17 slavic w3 feast2 fast5 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2025-12-18 slavic w4 feast0 fast5 exc1 rows=0,0 -> meat,fish,dairy,eggs +2025-12-19 slavic w5 feast0 fast5 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2025-12-20 slavic w6 feast4 fast5 exc1 rows=0,0,0 -> meat,fish,dairy,eggs +2025-12-21 slavic w0 feast0 fast5 exc1 rows=0,0,0 -> meat,fish,dairy,eggs +2025-12-22 slavic w1 feast0 fast5 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2025-12-23 slavic w2 feast0 fast5 exc1 rows=0,0 -> meat,fish,dairy,eggs +2025-12-24 slavic w3 feast0 fast5 exc1 rows=0,0,9 -> meat,fish,dairy,eggs +2025-12-25 slavic w4 feast8 fast0 exc11 rows=0,11 -> - +2025-12-26 slavic w5 feast3 fast0 exc11 rows=0,11 -> - +2025-12-27 slavic w6 feast2 fast0 exc11 rows=0,0,11 -> - +2025-12-28 slavic w0 feast0 fast0 exc11 rows=0,0,11 -> - +2025-12-29 slavic w1 feast0 fast0 exc11 rows=0,11 -> - +2025-12-30 slavic w2 feast0 fast0 exc11 rows=0,11 -> - +2025-12-31 slavic w3 feast0 fast0 exc11 rows=0,11 -> - +2026-01-01 slavic w4 feast6 fast0 exc11 rows=0,11 -> - +2026-01-02 slavic w5 feast4 fast0 exc11 rows=0,11 -> - +2026-01-03 slavic w6 feast0 fast0 exc11 rows=0,0,11 -> - +2026-01-04 slavic w0 feast0 fast0 exc11 rows=0,0,11 -> - +2026-01-05 slavic w1 feast0 fast1 exc9 rows=0,0,9 -> meat,fish,dairy,eggs,wine,oil +2026-01-06 slavic w2 feast8 fast0 exc11 rows=0,11 -> - +2026-01-07 slavic w3 feast3 fast1 exc2 rows=0,2 -> meat,dairy,eggs +2026-01-08 slavic w4 feast0 fast0 exc0 rows=0,0 -> - +2026-01-09 slavic w5 feast4 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2026-01-10 slavic w6 feast4 fast0 exc0 rows=0,0,0 -> - +2026-01-11 slavic w0 feast4 fast0 exc0 rows=0,0,0 -> - +2026-01-12 slavic w1 feast3 fast0 exc0 rows=0,0 -> - +2026-01-13 slavic w2 feast0 fast0 exc0 rows=0,0 -> - +2026-01-14 slavic w3 feast4 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2026-01-15 slavic w4 feast2 fast0 exc0 rows=0,0 -> - +2026-01-16 slavic w5 feast2 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2026-01-17 slavic w6 feast5 fast0 exc2 rows=0,2 -> - +2026-01-18 slavic w0 feast2 fast0 exc0 rows=0,0 -> - +2026-01-19 slavic w1 feast2 fast0 exc0 rows=0,0 -> - +2026-01-20 slavic w2 feast5 fast0 exc2 rows=0,2 -> - +2026-01-21 slavic w3 feast0 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2026-01-22 slavic w4 feast0 fast0 exc0 rows=0,0 -> - +2026-01-23 slavic w5 feast0 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2026-01-24 slavic w6 feast4 fast0 exc0 rows=0,0 -> - +2026-01-25 slavic w0 feast4 fast0 exc0 rows=0,0 -> - +2026-01-26 slavic w1 feast0 fast0 exc0 rows=0,0 -> - +2026-01-27 slavic w2 feast4 fast0 exc0 rows=0,0 -> - +2026-01-28 slavic w3 feast2 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2026-01-29 slavic w4 feast2 fast0 exc0 rows=0,0 -> - +2026-01-30 slavic w5 feast5 fast1 exc2 rows=0,2 -> meat,dairy,eggs +2026-01-31 slavic w6 feast3 fast0 exc0 rows=0,0 -> - +2026-02-01 slavic w0 feast2 fast0 exc11 rows=0,11 -> - +2026-02-02 slavic w1 feast8 fast0 exc11 rows=2,11 -> - +2026-02-03 slavic w2 feast2 fast0 exc11 rows=0,11 -> - +2026-02-04 slavic w3 feast0 fast0 exc11 rows=0,11 -> - +2026-02-05 slavic w4 feast4 fast0 exc11 rows=0,11 -> - +2026-02-06 slavic w5 feast0 fast0 exc11 rows=0,11 -> - +2026-02-07 slavic w6 feast0 fast0 exc11 rows=0,11 -> - +2026-02-08 slavic w0 feast2 fast0 exc0 rows=0,0 -> - +2026-02-09 slavic w1 feast4 fast0 exc0 rows=0,0 -> - +2026-02-10 slavic w2 feast0 fast0 exc0 rows=0,0 -> - +2026-02-11 slavic w3 feast3 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2026-02-12 slavic w4 feast4 fast0 exc0 rows=0,0 -> - +2026-02-13 slavic w5 feast0 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2026-02-14 slavic w6 feast4 fast0 exc0 rows=0,0 -> - +2026-02-15 slavic w0 feast0 fast0 exc0 rows=0,0 -> - +2026-02-16 slavic w1 feast0 fast1 exc7 rows=0,7 -> meat +2026-02-17 slavic w2 feast4 fast1 exc7 rows=0,7 -> meat +2026-02-18 slavic w3 feast0 fast1 exc7 rows=0,7 -> meat +2026-02-19 slavic w4 feast0 fast1 exc7 rows=0,7 -> meat +2026-02-20 slavic w5 feast0 fast1 exc7 rows=0,7 -> meat +2026-02-21 slavic w6 feast0 fast1 exc7 rows=0,7 -> meat +2026-02-22 slavic w0 feast0 fast1 exc7 rows=0,7 -> meat +2026-02-23 slavic w1 feast0 fast2 exc10 rows=0,10 -> meat,fish,dairy,eggs,wine,oil +2026-02-24 slavic w2 feast4 fast2 exc10 rows=1,10 -> meat,fish,dairy,eggs,wine,oil +2026-02-25 slavic w3 feast1 fast2 exc10 rows=0,10 -> meat,fish,dairy,eggs,wine,oil +2026-02-26 slavic w4 feast0 fast2 exc10 rows=0,10 -> meat,fish,dairy,eggs,wine,oil +2026-02-27 slavic w5 feast5 fast2 exc10 rows=2,10 -> meat,fish,dairy,eggs,wine,oil +2026-02-28 slavic w6 feast0 fast2 exc3 rows=0,3 -> meat,fish,dairy,eggs +2026-03-01 slavic w0 feast0 fast2 exc3 rows=0,3 -> meat,fish,dairy,eggs +2026-03-02 slavic w1 feast3 fast2 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2026-03-03 slavic w2 feast0 fast2 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2026-03-04 slavic w3 feast4 fast2 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2026-03-05 slavic w4 feast0 fast2 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2026-03-06 slavic w5 feast1 fast2 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2026-03-07 slavic w6 feast0 fast2 exc3 rows=0,3 -> meat,fish,dairy,eggs +2026-03-08 slavic w0 feast0 fast2 exc3 rows=0,3 -> meat,fish,dairy,eggs +2026-03-09 slavic w1 feast4 fast2 exc1 rows=0,1 -> meat,fish,dairy,eggs +2026-03-10 slavic w2 feast0 fast2 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2026-03-11 slavic w3 feast3 fast2 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2026-03-12 slavic w4 feast0 fast2 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2026-03-13 slavic w5 feast1 fast2 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2026-03-14 slavic w6 feast0 fast2 exc3 rows=0,3 -> meat,fish,dairy,eggs +2026-03-15 slavic w0 feast0 fast2 exc3 rows=0,3 -> meat,fish,dairy,eggs +2026-03-16 slavic w1 feast0 fast2 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2026-03-17 slavic w2 feast3 fast2 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2026-03-18 slavic w3 feast2 fast2 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2026-03-19 slavic w4 feast0 fast2 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2026-03-20 slavic w5 feast1 fast2 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2026-03-21 slavic w6 feast0 fast2 exc3 rows=0,3 -> meat,fish,dairy,eggs +2026-03-22 slavic w0 feast0 fast2 exc3 rows=0,3 -> meat,fish,dairy,eggs +2026-03-23 slavic w1 feast0 fast2 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2026-03-24 slavic w2 feast2 fast2 exc3 rows=0,3 -> meat,fish,dairy,eggs +2026-03-25 slavic w3 feast7 fast2 exc4 rows=3,4 -> meat,dairy,eggs +2026-03-26 slavic w4 feast3 fast2 exc3 rows=3,3 -> meat,fish,dairy,eggs +2026-03-27 slavic w5 feast1 fast2 exc3 rows=0,3 -> meat,fish,dairy,eggs +2026-03-28 slavic w6 feast0 fast2 exc3 rows=0,3 -> meat,fish,dairy,eggs +2026-03-29 slavic w0 feast0 fast2 exc3 rows=0,3 -> meat,fish,dairy,eggs +2026-03-30 slavic w1 feast0 fast2 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2026-03-31 slavic w2 feast4 fast2 exc1 rows=0,1 -> meat,fish,dairy,eggs +2026-04-01 slavic w3 feast3 fast2 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2026-04-02 slavic w4 feast0 fast2 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2026-04-03 slavic w5 feast1 fast2 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2026-04-04 slavic w6 feast0 fast2 exc6 rows=0,6 -> meat,fish,dairy,eggs +2026-04-05 slavic w0 feast8 fast2 exc4 rows=0,4 -> meat,dairy,eggs +2026-04-06 slavic w1 feast4 fast2 exc10 rows=0,10 -> meat,fish,dairy,eggs,wine,oil +2026-04-07 slavic w2 feast4 fast2 exc10 rows=1,10 -> meat,fish,dairy,eggs,wine,oil +2026-04-08 slavic w3 feast1 fast2 exc10 rows=0,10 -> meat,fish,dairy,eggs,wine,oil +2026-04-09 slavic w4 feast3 fast2 exc3 rows=0,3 -> meat,fish,dairy,eggs +2026-04-10 slavic w5 feast0 fast2 exc9 rows=0,9 -> meat,fish,dairy,eggs,wine,oil +2026-04-11 slavic w6 feast3 fast2 exc5 rows=0,5 -> meat,fish,dairy,eggs,oil +2026-04-12 slavic w0 feast8 fast0 exc11 rows=0,11 -> - +2026-04-13 slavic w1 feast0 fast0 exc11 rows=0,11 -> - +2026-04-14 slavic w2 feast0 fast0 exc11 rows=0,11 -> - +2026-04-15 slavic w3 feast0 fast0 exc11 rows=0,11 -> - +2026-04-16 slavic w4 feast0 fast0 exc11 rows=0,11 -> - +2026-04-17 slavic w5 feast3 fast0 exc11 rows=0,11 -> - +2026-04-18 slavic w6 feast0 fast0 exc11 rows=0,11 -> - +2026-04-19 slavic w0 feast0 fast0 exc0 rows=0,0 -> - +2026-04-20 slavic w1 feast0 fast0 exc0 rows=0,0 -> - +2026-04-21 slavic w2 feast0 fast0 exc0 rows=0,0 -> - +2026-04-22 slavic w3 feast0 fast1 exc1 rows=0,1 -> meat,fish,dairy,eggs +2026-04-23 slavic w4 feast5 fast0 exc1 rows=0,1 -> - +2026-04-24 slavic w5 feast0 fast1 exc1 rows=0,1 -> meat,fish,dairy,eggs +2026-04-25 slavic w6 feast4 fast0 exc1 rows=0,1 -> - +2026-04-26 slavic w0 feast3 fast0 exc0 rows=0,0 -> - +2026-04-27 slavic w1 feast2 fast0 exc0 rows=0,0 -> - +2026-04-28 slavic w2 feast0 fast0 exc0 rows=0,0 -> - +2026-04-29 slavic w3 feast0 fast1 exc1 rows=0,1 -> meat,fish,dairy,eggs +2026-04-30 slavic w4 feast4 fast0 exc0 rows=0,0 -> - +2026-05-01 slavic w5 feast3 fast1 exc1 rows=0,1 -> meat,fish,dairy,eggs +2026-05-02 slavic w6 feast4 fast0 exc0 rows=0,0 -> - +2026-05-03 slavic w0 feast4 fast0 exc0 rows=0,0 -> - +2026-05-04 slavic w1 feast0 fast0 exc0 rows=0,0 -> - +2026-05-05 slavic w2 feast0 fast0 exc0 rows=0,0 -> - +2026-05-06 slavic w3 feast0 fast1 exc2 rows=0,2 -> meat,dairy,eggs +2026-05-07 slavic w4 feast5 fast0 exc2 rows=0,2 -> - +2026-05-08 slavic w5 feast5 fast1 exc2 rows=1,2 -> meat,dairy,eggs +2026-05-09 slavic w6 feast4 fast0 exc0 rows=0,0 -> - +2026-05-10 slavic w0 feast4 fast0 exc0 rows=0,0 -> - +2026-05-11 slavic w1 feast5 fast0 exc2 rows=0,2 -> - +2026-05-12 slavic w2 feast0 fast0 exc0 rows=0,0 -> - +2026-05-13 slavic w3 feast0 fast1 exc1 rows=0,1 -> meat,fish,dairy,eggs +2026-05-14 slavic w4 feast2 fast0 exc0 rows=0,0 -> - +2026-05-15 slavic w5 feast3 fast1 exc1 rows=0,1 -> meat,fish,dairy,eggs +2026-05-16 slavic w6 feast3 fast0 exc0 rows=0,0 -> - +2026-05-17 slavic w0 feast0 fast0 exc0 rows=0,0 -> - +2026-05-18 slavic w1 feast0 fast0 exc0 rows=0,0 -> - +2026-05-19 slavic w2 feast4 fast0 exc0 rows=0,0 -> - +2026-05-20 slavic w3 feast3 fast1 exc2 rows=0,2 -> meat,dairy,eggs +2026-05-21 slavic w4 feast8 fast0 exc0 rows=0,0 -> - +2026-05-22 slavic w5 feast0 fast1 exc1 rows=0,1 -> meat,fish,dairy,eggs +2026-05-23 slavic w6 feast3 fast0 exc0 rows=0,0 -> - +2026-05-24 slavic w0 feast3 fast0 exc0 rows=0,0 -> - +2026-05-25 slavic w1 feast4 fast0 exc0 rows=0,0 -> - +2026-05-26 slavic w2 feast2 fast0 exc0 rows=0,0 -> - +2026-05-27 slavic w3 feast3 fast1 exc1 rows=0,1 -> meat,fish,dairy,eggs +2026-05-28 slavic w4 feast2 fast0 exc0 rows=0,0 -> - +2026-05-29 slavic w5 feast2 fast1 exc1 rows=0,1 -> meat,fish,dairy,eggs +2026-05-30 slavic w6 feast0 fast0 exc0 rows=0,0 -> - +2026-05-31 slavic w0 feast8 fast0 exc0 rows=0,0 -> - +2026-06-01 slavic w1 feast0 fast0 exc11 rows=0,11 -> - +2026-06-02 slavic w2 feast0 fast0 exc11 rows=0,11 -> - +2026-06-03 slavic w3 feast0 fast0 exc11 rows=0,11 -> - +2026-06-04 slavic w4 feast0 fast0 exc11 rows=0,11 -> - +2026-06-05 slavic w5 feast0 fast0 exc11 rows=0,11 -> - +2026-06-06 slavic w6 feast0 fast0 exc11 rows=0,11 -> - +2026-06-07 slavic w0 feast0 fast0 exc0 rows=0,0 -> - +2026-06-08 slavic w1 feast2 fast3 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2026-06-09 slavic w2 feast3 fast3 exc1 rows=0,0 -> meat,fish,dairy,eggs +2026-06-10 slavic w3 feast4 fast3 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2026-06-11 slavic w4 feast4 fast3 exc1 rows=0,0 -> meat,fish,dairy,eggs +2026-06-12 slavic w5 feast2 fast3 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2026-06-13 slavic w6 feast0 fast3 exc2 rows=0,0 -> meat,dairy,eggs +2026-06-14 slavic w0 feast0 fast3 exc2 rows=0,0 -> meat,dairy,eggs +2026-06-15 slavic w1 feast4 fast3 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2026-06-16 slavic w2 feast4 fast3 exc1 rows=0,0 -> meat,fish,dairy,eggs +2026-06-17 slavic w3 feast0 fast3 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2026-06-18 slavic w4 feast0 fast3 exc1 rows=0,0 -> meat,fish,dairy,eggs +2026-06-19 slavic w5 feast4 fast3 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2026-06-20 slavic w6 feast0 fast3 exc2 rows=0,0 -> meat,dairy,eggs +2026-06-21 slavic w0 feast0 fast3 exc2 rows=0,0 -> meat,dairy,eggs +2026-06-22 slavic w1 feast0 fast3 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2026-06-23 slavic w2 feast0 fast3 exc1 rows=0,0 -> meat,fish,dairy,eggs +2026-06-24 slavic w3 feast6 fast3 exc2 rows=0,2 -> meat,dairy,eggs +2026-06-25 slavic w4 feast3 fast3 exc1 rows=0,0 -> meat,fish,dairy,eggs +2026-06-26 slavic w5 feast4 fast3 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2026-06-27 slavic w6 feast0 fast3 exc2 rows=0,0 -> meat,dairy,eggs +2026-06-28 slavic w0 feast2 fast3 exc2 rows=0,0 -> meat,dairy,eggs +2026-06-29 slavic w1 feast6 fast0 exc2 rows=0,2 -> - +2026-06-30 slavic w2 feast4 fast0 exc0 rows=0,0 -> - +2026-07-01 slavic w3 feast2 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2026-07-02 slavic w4 feast3 fast0 exc0 rows=0,0 -> - +2026-07-03 slavic w5 feast4 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2026-07-04 slavic w6 feast0 fast0 exc0 rows=0,0 -> - +2026-07-05 slavic w0 feast4 fast0 exc2 rows=0,2 -> - +2026-07-06 slavic w1 feast0 fast0 exc0 rows=0,0 -> - +2026-07-07 slavic w2 feast0 fast0 exc0 rows=0,0 -> - +2026-07-08 slavic w3 feast2 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2026-07-09 slavic w4 feast0 fast0 exc0 rows=0,0 -> - +2026-07-10 slavic w5 feast4 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2026-07-11 slavic w6 feast2 fast0 exc0 rows=0,0 -> - +2026-07-12 slavic w0 feast0 fast0 exc0 rows=0,0 -> - +2026-07-13 slavic w1 feast2 fast0 exc0 rows=0,0 -> - +2026-07-14 slavic w2 feast2 fast0 exc0 rows=0,0 -> - +2026-07-15 slavic w3 feast5 fast1 exc2 rows=0,2 -> meat,dairy,eggs +2026-07-16 slavic w4 feast0 fast0 exc0 rows=0,0 -> - +2026-07-17 slavic w5 feast4 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2026-07-18 slavic w6 feast0 fast0 exc0 rows=0,0 -> - +2026-07-19 slavic w0 feast4 fast0 exc0 rows=0,0,0 -> - +2026-07-20 slavic w1 feast5 fast0 exc2 rows=0,2 -> - +2026-07-21 slavic w2 feast0 fast0 exc0 rows=0,0 -> - +2026-07-22 slavic w3 feast2 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2026-07-23 slavic w4 feast0 fast0 exc0 rows=0,0 -> - +2026-07-24 slavic w5 feast4 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2026-07-25 slavic w6 feast3 fast0 exc0 rows=0,0 -> - +2026-07-26 slavic w0 feast4 fast0 exc2 rows=0,2 -> - +2026-07-27 slavic w1 feast2 fast0 exc0 rows=0,0 -> - +2026-07-28 slavic w2 feast0 fast0 exc0 rows=0,0 -> - +2026-07-29 slavic w3 feast0 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2026-07-30 slavic w4 feast0 fast0 exc0 rows=0,0 -> - +2026-07-31 slavic w5 feast2 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2026-08-01 slavic w6 feast3 fast4 exc1 rows=0,1 -> meat,fish,dairy,eggs +2026-08-02 slavic w0 feast3 fast4 exc1 rows=0,0 -> meat,fish,dairy,eggs +2026-08-03 slavic w1 feast3 fast4 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2026-08-04 slavic w2 feast0 fast4 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2026-08-05 slavic w3 feast2 fast4 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2026-08-06 slavic w4 feast8 fast4 exc4 rows=0,4 -> meat,dairy,eggs +2026-08-07 slavic w5 feast0 fast4 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2026-08-08 slavic w6 feast0 fast4 exc1 rows=0,0 -> meat,fish,dairy,eggs +2026-08-09 slavic w0 feast5 fast4 exc1 rows=0,4 -> meat,fish,dairy,eggs +2026-08-10 slavic w1 feast0 fast4 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2026-08-11 slavic w2 feast0 fast4 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2026-08-12 slavic w3 feast0 fast4 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2026-08-13 slavic w4 feast4 fast4 exc0 rows=0,4 -> meat,fish,dairy,eggs,wine,oil +2026-08-14 slavic w5 feast2 fast4 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2026-08-15 slavic w6 feast7 fast0 exc2 rows=0,2 -> - +2026-08-16 slavic w0 feast5 fast0 exc1 rows=0,1 -> - +2026-08-17 slavic w1 feast0 fast0 exc0 rows=0,0 -> - +2026-08-18 slavic w2 feast0 fast0 exc0 rows=0,0 -> - +2026-08-19 slavic w3 feast0 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2026-08-20 slavic w4 feast0 fast0 exc0 rows=0,0 -> - +2026-08-21 slavic w5 feast3 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2026-08-22 slavic w6 feast0 fast0 exc0 rows=0,0 -> - +2026-08-23 slavic w0 feast0 fast0 exc0 rows=0,0 -> - +2026-08-24 slavic w1 feast3 fast0 exc0 rows=0,0 -> - +2026-08-25 slavic w2 feast2 fast0 exc0 rows=0,0 -> - +2026-08-26 slavic w3 feast4 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2026-08-27 slavic w4 feast0 fast0 exc0 rows=0,0 -> - +2026-08-28 slavic w5 feast4 fast1 exc1 rows=0,1 -> meat,fish,dairy,eggs +2026-08-29 slavic w6 feast6 fast1 exc8 rows=0,8 -> meat,fish,dairy,eggs +2026-08-30 slavic w0 feast4 fast0 exc0 rows=0,0 -> - +2026-08-31 slavic w1 feast3 fast0 exc0 rows=0,0 -> - +2026-09-01 slavic w2 feast4 fast0 exc1 rows=0,1 -> - +2026-09-02 slavic w3 feast0 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2026-09-03 slavic w4 feast0 fast0 exc0 rows=0,0 -> - +2026-09-04 slavic w5 feast0 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2026-09-05 slavic w6 feast2 fast0 exc0 rows=0,0 -> - +2026-09-06 slavic w0 feast2 fast0 exc0 rows=0,0 -> - +2026-09-07 slavic w1 feast3 fast0 exc0 rows=0,0 -> - +2026-09-08 slavic w2 feast7 fast0 exc2 rows=0,2 -> - +2026-09-09 slavic w3 feast3 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2026-09-10 slavic w4 feast0 fast0 exc0 rows=0,0 -> - +2026-09-11 slavic w5 feast4 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2026-09-12 slavic w6 feast0 fast0 exc1 rows=0,0,1 -> - +2026-09-13 slavic w0 feast3 fast0 exc1 rows=0,0,1 -> - +2026-09-14 slavic w1 feast8 fast1 exc8 rows=0,8 -> meat,fish,dairy,eggs +2026-09-15 slavic w2 feast2 fast0 exc0 rows=0,0 -> - +2026-09-16 slavic w3 feast2 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2026-09-17 slavic w4 feast0 fast0 exc0 rows=0,0 -> - +2026-09-18 slavic w5 feast0 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2026-09-19 slavic w6 feast3 fast0 exc0 rows=0,0,0 -> - +2026-09-20 slavic w0 feast3 fast0 exc0 rows=0,0,0 -> - +2026-09-21 slavic w1 feast4 fast0 exc0 rows=0,0 -> - +2026-09-22 slavic w2 feast2 fast0 exc0 rows=0,0 -> - +2026-09-23 slavic w3 feast3 fast1 exc1 rows=0,1 -> meat,fish,dairy,eggs +2026-09-24 slavic w4 feast4 fast0 exc2 rows=0,2 -> - +2026-09-25 slavic w5 feast4 fast1 exc2 rows=0,2 -> meat,dairy,eggs +2026-09-26 slavic w6 feast5 fast0 exc2 rows=0,2 -> - +2026-09-27 slavic w0 feast3 fast0 exc0 rows=0,0 -> - +2026-09-28 slavic w1 feast4 fast0 exc1 rows=0,1 -> - +2026-09-29 slavic w2 feast2 fast0 exc0 rows=0,0 -> - +2026-09-30 slavic w3 feast3 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2026-10-01 slavic w4 feast6 fast0 exc2 rows=0,2 -> - +2026-10-02 slavic w5 feast2 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2026-10-03 slavic w6 feast2 fast0 exc0 rows=0,0 -> - +2026-10-04 slavic w0 feast3 fast0 exc0 rows=0,0 -> - +2026-10-05 slavic w1 feast3 fast0 exc0 rows=0,0 -> - +2026-10-06 slavic w2 feast5 fast0 exc2 rows=0,2 -> - +2026-10-07 slavic w3 feast2 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2026-10-08 slavic w4 feast0 fast0 exc0 rows=0,0 -> - +2026-10-09 slavic w5 feast5 fast1 exc2 rows=0,2 -> meat,dairy,eggs +2026-10-10 slavic w6 feast0 fast0 exc0 rows=0,0 -> - +2026-10-11 slavic w0 feast0 fast0 exc0 rows=0,0,0 -> - +2026-10-12 slavic w1 feast0 fast0 exc0 rows=0,0 -> - +2026-10-13 slavic w2 feast0 fast0 exc0 rows=0,0 -> - +2026-10-14 slavic w3 feast2 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2026-10-15 slavic w4 feast0 fast0 exc0 rows=0,0 -> - +2026-10-16 slavic w5 feast0 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2026-10-17 slavic w6 feast0 fast0 exc0 rows=0,0 -> - +2026-10-18 slavic w0 feast4 fast0 exc0 rows=0,0 -> - +2026-10-19 slavic w1 feast2 fast0 exc0 rows=0,0 -> - +2026-10-20 slavic w2 feast2 fast0 exc0 rows=0,0 -> - +2026-10-21 slavic w3 feast2 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2026-10-22 slavic w4 feast0 fast0 exc0 rows=0,0 -> - +2026-10-23 slavic w5 feast3 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2026-10-24 slavic w6 feast0 fast0 exc0 rows=0,0,0 -> - +2026-10-25 slavic w0 feast0 fast0 exc0 rows=0,0 -> - +2026-10-26 slavic w1 feast4 fast0 exc2 rows=0,2 -> - +2026-10-27 slavic w2 feast0 fast0 exc0 rows=0,0 -> - +2026-10-28 slavic w3 feast3 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2026-10-29 slavic w4 feast3 fast0 exc0 rows=0,0 -> - +2026-10-30 slavic w5 feast0 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2026-10-31 slavic w6 feast0 fast0 exc0 rows=0,0 -> - +2026-11-01 slavic w0 feast2 fast0 exc0 rows=0,0 -> - +2026-11-02 slavic w1 feast0 fast0 exc0 rows=0,0 -> - +2026-11-03 slavic w2 feast0 fast0 exc0 rows=0,0 -> - +2026-11-04 slavic w3 feast0 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2026-11-05 slavic w4 feast3 fast0 exc0 rows=0,0 -> - +2026-11-06 slavic w5 feast2 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2026-11-07 slavic w6 feast0 fast0 exc0 rows=0,0 -> - +2026-11-08 slavic w0 feast5 fast0 exc2 rows=0,0,2 -> - +2026-11-09 slavic w1 feast0 fast0 exc0 rows=0,0 -> - +2026-11-10 slavic w2 feast0 fast0 exc0 rows=0,0 -> - +2026-11-11 slavic w3 feast0 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2026-11-12 slavic w4 feast2 fast0 exc0 rows=0,0 -> - +2026-11-13 slavic w5 feast5 fast1 exc2 rows=0,2 -> meat,dairy,eggs +2026-11-14 slavic w6 feast4 fast0 exc1 rows=0,1 -> - +2026-11-15 slavic w0 feast0 fast5 exc2 rows=0,0 -> meat,dairy,eggs +2026-11-16 slavic w1 feast6 fast5 exc2 rows=0,2 -> meat,dairy,eggs +2026-11-17 slavic w2 feast3 fast5 exc1 rows=0,0 -> meat,fish,dairy,eggs +2026-11-18 slavic w3 feast0 fast5 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2026-11-19 slavic w4 feast3 fast5 exc1 rows=0,0 -> meat,fish,dairy,eggs +2026-11-20 slavic w5 feast0 fast5 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2026-11-21 slavic w6 feast7 fast5 exc2 rows=0,2 -> meat,dairy,eggs +2026-11-22 slavic w0 feast2 fast5 exc2 rows=0,0 -> meat,dairy,eggs +2026-11-23 slavic w1 feast3 fast5 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2026-11-24 slavic w2 feast2 fast5 exc1 rows=0,0 -> meat,fish,dairy,eggs +2026-11-25 slavic w3 feast0 fast5 exc1 rows=0,1 -> meat,fish,dairy,eggs +2026-11-26 slavic w4 feast0 fast5 exc1 rows=0,0 -> meat,fish,dairy,eggs +2026-11-27 slavic w5 feast2 fast5 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2026-11-28 slavic w6 feast2 fast5 exc2 rows=0,0 -> meat,dairy,eggs +2026-11-29 slavic w0 feast0 fast5 exc2 rows=0,0 -> meat,dairy,eggs +2026-11-30 slavic w1 feast4 fast5 exc2 rows=0,2 -> meat,dairy,eggs +2026-12-01 slavic w2 feast0 fast5 exc1 rows=0,0 -> meat,fish,dairy,eggs +2026-12-02 slavic w3 feast0 fast5 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2026-12-03 slavic w4 feast3 fast5 exc1 rows=0,0 -> meat,fish,dairy,eggs +2026-12-04 slavic w5 feast0 fast5 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2026-12-05 slavic w6 feast4 fast5 exc2 rows=0,0 -> meat,dairy,eggs +2026-12-06 slavic w0 feast5 fast5 exc2 rows=0,2 -> meat,dairy,eggs +2026-12-07 slavic w1 feast3 fast5 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2026-12-08 slavic w2 feast0 fast5 exc1 rows=0,0 -> meat,fish,dairy,eggs +2026-12-09 slavic w3 feast3 fast5 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2026-12-10 slavic w4 feast0 fast5 exc1 rows=0,0 -> meat,fish,dairy,eggs +2026-12-11 slavic w5 feast0 fast5 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2026-12-12 slavic w6 feast2 fast5 exc2 rows=0,0 -> meat,dairy,eggs +2026-12-13 slavic w0 feast5 fast5 exc2 rows=0,0,2 -> meat,dairy,eggs +2026-12-14 slavic w1 feast0 fast5 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2026-12-15 slavic w2 feast2 fast5 exc1 rows=0,0 -> meat,fish,dairy,eggs +2026-12-16 slavic w3 feast0 fast5 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2026-12-17 slavic w4 feast2 fast5 exc1 rows=0,0 -> meat,fish,dairy,eggs +2026-12-18 slavic w5 feast0 fast5 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2026-12-19 slavic w6 feast0 fast5 exc2 rows=0,0,0 -> meat,dairy,eggs +2026-12-20 slavic w0 feast4 fast5 exc1 rows=0,0,0 -> meat,fish,dairy,eggs +2026-12-21 slavic w1 feast0 fast5 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2026-12-22 slavic w2 feast0 fast5 exc1 rows=0,0 -> meat,fish,dairy,eggs +2026-12-23 slavic w3 feast0 fast5 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2026-12-24 slavic w4 feast0 fast5 exc9 rows=0,0,9 -> meat,fish,dairy,eggs,wine,oil +2026-12-25 slavic w5 feast8 fast0 exc11 rows=0,11 -> - +2026-12-26 slavic w6 feast3 fast0 exc11 rows=0,0,11 -> - +2026-12-27 slavic w0 feast2 fast0 exc11 rows=0,0,11 -> - +2026-12-28 slavic w1 feast0 fast0 exc11 rows=0,11 -> - +2026-12-29 slavic w2 feast0 fast0 exc11 rows=0,11 -> - +2026-12-30 slavic w3 feast0 fast0 exc11 rows=0,11 -> - +2026-12-31 slavic w4 feast0 fast0 exc11 rows=0,11 -> - +2027-01-01 slavic w5 feast6 fast0 exc11 rows=0,11 -> - +2027-01-02 slavic w6 feast4 fast0 exc11 rows=0,0,11 -> - +2027-01-03 slavic w0 feast0 fast0 exc11 rows=0,0,11 -> - +2027-01-04 slavic w1 feast0 fast0 exc11 rows=0,11 -> - +2027-01-05 slavic w2 feast0 fast1 exc9 rows=0,0,9 -> meat,fish,dairy,eggs,wine,oil +2027-01-06 slavic w3 feast8 fast0 exc11 rows=0,11 -> - +2027-01-07 slavic w4 feast3 fast0 exc2 rows=0,2 -> - +2027-01-08 slavic w5 feast0 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2027-01-09 slavic w6 feast4 fast0 exc0 rows=0,0,0 -> - +2027-01-10 slavic w0 feast4 fast0 exc0 rows=0,0,0 -> - +2027-01-11 slavic w1 feast4 fast0 exc0 rows=0,0 -> - +2027-01-12 slavic w2 feast3 fast0 exc0 rows=0,0 -> - +2027-01-13 slavic w3 feast0 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2027-01-14 slavic w4 feast4 fast0 exc0 rows=0,0 -> - +2027-01-15 slavic w5 feast2 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2027-01-16 slavic w6 feast2 fast0 exc0 rows=0,0 -> - +2027-01-17 slavic w0 feast5 fast0 exc2 rows=0,2 -> - +2027-01-18 slavic w1 feast2 fast0 exc0 rows=0,0 -> - +2027-01-19 slavic w2 feast2 fast0 exc0 rows=0,0 -> - +2027-01-20 slavic w3 feast5 fast1 exc2 rows=0,2 -> meat,dairy,eggs +2027-01-21 slavic w4 feast0 fast0 exc0 rows=0,0 -> - +2027-01-22 slavic w5 feast0 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2027-01-23 slavic w6 feast0 fast0 exc0 rows=0,0 -> - +2027-01-24 slavic w0 feast5 fast0 exc0 rows=0,0,0 -> - +2027-01-25 slavic w1 feast4 fast0 exc0 rows=0,0 -> - +2027-01-26 slavic w2 feast0 fast0 exc0 rows=0,0 -> - +2027-01-27 slavic w3 feast4 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2027-01-28 slavic w4 feast2 fast0 exc0 rows=0,0 -> - +2027-01-29 slavic w5 feast2 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2027-01-30 slavic w6 feast5 fast0 exc2 rows=0,2 -> - +2027-01-31 slavic w0 feast3 fast0 exc0 rows=0,0 -> - +2027-02-01 slavic w1 feast2 fast0 exc0 rows=0,0 -> - +2027-02-02 slavic w2 feast8 fast0 exc2 rows=0,2 -> - +2027-02-03 slavic w3 feast2 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2027-02-04 slavic w4 feast0 fast0 exc0 rows=0,0 -> - +2027-02-05 slavic w5 feast4 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2027-02-06 slavic w6 feast0 fast0 exc0 rows=0,0 -> - +2027-02-07 slavic w0 feast0 fast0 exc0 rows=0,0 -> - +2027-02-08 slavic w1 feast2 fast0 exc0 rows=0,0 -> - +2027-02-09 slavic w2 feast4 fast0 exc0 rows=0,0 -> - +2027-02-10 slavic w3 feast0 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2027-02-11 slavic w4 feast3 fast0 exc0 rows=0,0 -> - +2027-02-12 slavic w5 feast4 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2027-02-13 slavic w6 feast0 fast0 exc0 rows=0,0 -> - +2027-02-14 slavic w0 feast4 fast0 exc0 rows=0,0 -> - +2027-02-15 slavic w1 feast0 fast0 exc0 rows=0,0 -> - +2027-02-16 slavic w2 feast0 fast0 exc0 rows=0,0 -> - +2027-02-17 slavic w3 feast4 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2027-02-18 slavic w4 feast0 fast0 exc0 rows=0,0 -> - +2027-02-19 slavic w5 feast0 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2027-02-20 slavic w6 feast0 fast0 exc0 rows=0,0 -> - +2027-02-21 slavic w0 feast0 fast0 exc11 rows=0,11 -> - +2027-02-22 slavic w1 feast0 fast0 exc11 rows=0,11 -> - +2027-02-23 slavic w2 feast0 fast0 exc11 rows=0,11 -> - +2027-02-24 slavic w3 feast4 fast0 exc11 rows=1,11 -> - +2027-02-25 slavic w4 feast0 fast0 exc11 rows=0,11 -> - +2027-02-26 slavic w5 feast0 fast0 exc11 rows=0,11 -> - +2027-02-27 slavic w6 feast5 fast0 exc11 rows=2,11 -> - +2027-02-28 slavic w0 feast0 fast0 exc0 rows=0,0 -> - +2027-03-01 slavic w1 feast0 fast0 exc0 rows=0,0 -> - +2027-03-02 slavic w2 feast3 fast0 exc0 rows=0,0 -> - +2027-03-03 slavic w3 feast0 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2027-03-04 slavic w4 feast4 fast0 exc0 rows=0,0 -> - +2027-03-05 slavic w5 feast0 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2027-03-06 slavic w6 feast0 fast0 exc0 rows=0,0 -> - +2027-03-07 slavic w0 feast0 fast0 exc0 rows=0,0 -> - +2027-03-08 slavic w1 feast0 fast1 exc7 rows=0,7 -> meat +2027-03-09 slavic w2 feast4 fast1 exc7 rows=1,7 -> meat +2027-03-10 slavic w3 feast0 fast1 exc7 rows=0,7 -> meat +2027-03-11 slavic w4 feast3 fast1 exc7 rows=0,7 -> meat +2027-03-12 slavic w5 feast0 fast1 exc7 rows=0,7 -> meat +2027-03-13 slavic w6 feast0 fast1 exc7 rows=0,7 -> meat +2027-03-14 slavic w0 feast0 fast1 exc7 rows=0,7 -> meat +2027-03-15 slavic w1 feast0 fast2 exc10 rows=0,10 -> meat,fish,dairy,eggs,wine,oil +2027-03-16 slavic w2 feast0 fast2 exc10 rows=0,10 -> meat,fish,dairy,eggs,wine,oil +2027-03-17 slavic w3 feast3 fast2 exc10 rows=0,10 -> meat,fish,dairy,eggs,wine,oil +2027-03-18 slavic w4 feast2 fast2 exc10 rows=0,10 -> meat,fish,dairy,eggs,wine,oil +2027-03-19 slavic w5 feast1 fast2 exc10 rows=0,10 -> meat,fish,dairy,eggs,wine,oil +2027-03-20 slavic w6 feast0 fast2 exc3 rows=0,3 -> meat,fish,dairy,eggs +2027-03-21 slavic w0 feast0 fast2 exc3 rows=0,3 -> meat,fish,dairy,eggs +2027-03-22 slavic w1 feast0 fast2 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2027-03-23 slavic w2 feast0 fast2 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2027-03-24 slavic w3 feast2 fast2 exc3 rows=0,3 -> meat,fish,dairy,eggs +2027-03-25 slavic w4 feast7 fast2 exc4 rows=0,4 -> meat,dairy,eggs +2027-03-26 slavic w5 feast3 fast2 exc3 rows=0,3 -> meat,fish,dairy,eggs +2027-03-27 slavic w6 feast0 fast2 exc3 rows=0,3 -> meat,fish,dairy,eggs +2027-03-28 slavic w0 feast0 fast2 exc3 rows=0,3 -> meat,fish,dairy,eggs +2027-03-29 slavic w1 feast0 fast2 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2027-03-30 slavic w2 feast0 fast2 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2027-03-31 slavic w3 feast4 fast2 exc1 rows=0,1 -> meat,fish,dairy,eggs +2027-04-01 slavic w4 feast3 fast2 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2027-04-02 slavic w5 feast1 fast2 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2027-04-03 slavic w6 feast0 fast2 exc3 rows=0,3 -> meat,fish,dairy,eggs +2027-04-04 slavic w0 feast0 fast2 exc3 rows=0,3 -> meat,fish,dairy,eggs +2027-04-05 slavic w1 feast0 fast2 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2027-04-06 slavic w2 feast4 fast2 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2027-04-07 slavic w3 feast4 fast2 exc1 rows=0,1 -> meat,fish,dairy,eggs +2027-04-08 slavic w4 feast0 fast2 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2027-04-09 slavic w5 feast1 fast2 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2027-04-10 slavic w6 feast0 fast2 exc3 rows=0,3 -> meat,fish,dairy,eggs +2027-04-11 slavic w0 feast0 fast2 exc3 rows=0,3 -> meat,fish,dairy,eggs +2027-04-12 slavic w1 feast0 fast2 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2027-04-13 slavic w2 feast0 fast2 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2027-04-14 slavic w3 feast1 fast2 exc3 rows=0,3 -> meat,fish,dairy,eggs +2027-04-15 slavic w4 feast0 fast2 exc3 rows=0,3 -> meat,fish,dairy,eggs +2027-04-16 slavic w5 feast1 fast2 exc3 rows=0,3 -> meat,fish,dairy,eggs +2027-04-17 slavic w6 feast3 fast2 exc3 rows=0,3 -> meat,fish,dairy,eggs +2027-04-18 slavic w0 feast0 fast2 exc3 rows=0,3 -> meat,fish,dairy,eggs +2027-04-19 slavic w1 feast0 fast2 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2027-04-20 slavic w2 feast0 fast2 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2027-04-21 slavic w3 feast1 fast2 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2027-04-22 slavic w4 feast0 fast2 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2027-04-23 slavic w5 feast5 fast2 exc1 rows=0,1 -> meat,fish,dairy,eggs +2027-04-24 slavic w6 feast0 fast2 exc6 rows=0,6 -> meat,fish,dairy,eggs +2027-04-25 slavic w0 feast8 fast2 exc4 rows=1,4 -> meat,dairy,eggs +2027-04-26 slavic w1 feast3 fast2 exc10 rows=0,10 -> meat,fish,dairy,eggs,wine,oil +2027-04-27 slavic w2 feast2 fast2 exc10 rows=0,10 -> meat,fish,dairy,eggs,wine,oil +2027-04-28 slavic w3 feast1 fast2 exc10 rows=0,10 -> meat,fish,dairy,eggs,wine,oil +2027-04-29 slavic w4 feast3 fast2 exc3 rows=0,3 -> meat,fish,dairy,eggs +2027-04-30 slavic w5 feast4 fast2 exc9 rows=0,9 -> meat,fish,dairy,eggs,wine,oil +2027-05-01 slavic w6 feast3 fast2 exc5 rows=0,5 -> meat,fish,dairy,eggs,oil +2027-05-02 slavic w0 feast8 fast0 exc11 rows=0,11 -> - +2027-05-03 slavic w1 feast4 fast0 exc11 rows=0,11 -> - +2027-05-04 slavic w2 feast0 fast0 exc11 rows=0,11 -> - +2027-05-05 slavic w3 feast0 fast0 exc11 rows=0,11 -> - +2027-05-06 slavic w4 feast0 fast0 exc11 rows=0,11 -> - +2027-05-07 slavic w5 feast5 fast0 exc11 rows=2,11 -> - +2027-05-08 slavic w6 feast5 fast0 exc11 rows=2,11 -> - +2027-05-09 slavic w0 feast4 fast0 exc0 rows=0,0 -> - +2027-05-10 slavic w1 feast4 fast0 exc0 rows=0,0 -> - +2027-05-11 slavic w2 feast5 fast0 exc2 rows=0,2 -> - +2027-05-12 slavic w3 feast0 fast1 exc1 rows=0,1 -> meat,fish,dairy,eggs +2027-05-13 slavic w4 feast0 fast0 exc0 rows=0,0 -> - +2027-05-14 slavic w5 feast2 fast1 exc1 rows=0,1 -> meat,fish,dairy,eggs +2027-05-15 slavic w6 feast3 fast0 exc0 rows=0,0 -> - +2027-05-16 slavic w0 feast3 fast0 exc0 rows=0,0 -> - +2027-05-17 slavic w1 feast0 fast0 exc0 rows=0,0 -> - +2027-05-18 slavic w2 feast0 fast0 exc0 rows=0,0 -> - +2027-05-19 slavic w3 feast4 fast1 exc1 rows=0,1 -> meat,fish,dairy,eggs +2027-05-20 slavic w4 feast3 fast0 exc0 rows=0,0 -> - +2027-05-21 slavic w5 feast4 fast1 exc1 rows=0,1 -> meat,fish,dairy,eggs +2027-05-22 slavic w6 feast0 fast0 exc0 rows=0,0 -> - +2027-05-23 slavic w0 feast3 fast0 exc0 rows=0,0 -> - +2027-05-24 slavic w1 feast3 fast0 exc0 rows=0,0 -> - +2027-05-25 slavic w2 feast4 fast0 exc0 rows=0,0 -> - +2027-05-26 slavic w3 feast2 fast1 exc2 rows=0,2 -> meat,dairy,eggs +2027-05-27 slavic w4 feast3 fast0 exc0 rows=0,0 -> - +2027-05-28 slavic w5 feast2 fast1 exc1 rows=0,1 -> meat,fish,dairy,eggs +2027-05-29 slavic w6 feast2 fast0 exc0 rows=0,0 -> - +2027-05-30 slavic w0 feast0 fast0 exc0 rows=0,0 -> - +2027-05-31 slavic w1 feast0 fast0 exc0 rows=0,0 -> - +2027-06-01 slavic w2 feast0 fast0 exc0 rows=0,0 -> - +2027-06-02 slavic w3 feast0 fast1 exc1 rows=0,1 -> meat,fish,dairy,eggs +2027-06-03 slavic w4 feast0 fast0 exc0 rows=0,0 -> - +2027-06-04 slavic w5 feast0 fast1 exc1 rows=0,1 -> meat,fish,dairy,eggs +2027-06-05 slavic w6 feast0 fast0 exc0 rows=0,0 -> - +2027-06-06 slavic w0 feast0 fast0 exc0 rows=0,0 -> - +2027-06-07 slavic w1 feast0 fast0 exc0 rows=0,0 -> - +2027-06-08 slavic w2 feast2 fast0 exc0 rows=0,0 -> - +2027-06-09 slavic w3 feast3 fast1 exc2 rows=0,2 -> meat,dairy,eggs +2027-06-10 slavic w4 feast8 fast0 exc0 rows=0,0 -> - +2027-06-11 slavic w5 feast4 fast1 exc1 rows=0,1 -> meat,fish,dairy,eggs +2027-06-12 slavic w6 feast2 fast0 exc0 rows=0,0 -> - +2027-06-13 slavic w0 feast0 fast0 exc0 rows=0,0 -> - +2027-06-14 slavic w1 feast0 fast0 exc0 rows=0,0 -> - +2027-06-15 slavic w2 feast4 fast0 exc0 rows=0,0 -> - +2027-06-16 slavic w3 feast4 fast1 exc1 rows=0,1 -> meat,fish,dairy,eggs +2027-06-17 slavic w4 feast0 fast0 exc0 rows=0,0 -> - +2027-06-18 slavic w5 feast0 fast1 exc1 rows=0,1 -> meat,fish,dairy,eggs +2027-06-19 slavic w6 feast4 fast0 exc0 rows=0,0 -> - +2027-06-20 slavic w0 feast8 fast0 exc0 rows=0,0 -> - +2027-06-21 slavic w1 feast0 fast0 exc11 rows=0,11 -> - +2027-06-22 slavic w2 feast0 fast0 exc11 rows=0,11 -> - +2027-06-23 slavic w3 feast0 fast0 exc11 rows=0,11 -> - +2027-06-24 slavic w4 feast6 fast0 exc11 rows=2,11 -> - +2027-06-25 slavic w5 feast3 fast0 exc11 rows=0,11 -> - +2027-06-26 slavic w6 feast4 fast0 exc11 rows=0,11 -> - +2027-06-27 slavic w0 feast0 fast0 exc0 rows=0,0 -> - +2027-06-28 slavic w1 feast2 fast3 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2027-06-29 slavic w2 feast6 fast0 exc2 rows=0,2 -> - +2027-06-30 slavic w3 feast4 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2027-07-01 slavic w4 feast2 fast0 exc0 rows=0,0 -> - +2027-07-02 slavic w5 feast3 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2027-07-03 slavic w6 feast4 fast0 exc0 rows=0,0 -> - +2027-07-04 slavic w0 feast0 fast0 exc0 rows=0,0 -> - +2027-07-05 slavic w1 feast4 fast0 exc2 rows=0,2 -> - +2027-07-06 slavic w2 feast0 fast0 exc0 rows=0,0 -> - +2027-07-07 slavic w3 feast0 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2027-07-08 slavic w4 feast2 fast0 exc0 rows=0,0 -> - +2027-07-09 slavic w5 feast0 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2027-07-10 slavic w6 feast4 fast0 exc0 rows=0,0 -> - +2027-07-11 slavic w0 feast2 fast0 exc0 rows=0,0 -> - +2027-07-12 slavic w1 feast0 fast0 exc0 rows=0,0 -> - +2027-07-13 slavic w2 feast2 fast0 exc0 rows=0,0 -> - +2027-07-14 slavic w3 feast2 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2027-07-15 slavic w4 feast5 fast0 exc2 rows=0,2 -> - +2027-07-16 slavic w5 feast0 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2027-07-17 slavic w6 feast4 fast0 exc0 rows=0,0 -> - +2027-07-18 slavic w0 feast0 fast0 exc0 rows=0,0,0 -> - +2027-07-19 slavic w1 feast4 fast0 exc0 rows=0,0 -> - +2027-07-20 slavic w2 feast5 fast0 exc2 rows=0,2 -> - +2027-07-21 slavic w3 feast0 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2027-07-22 slavic w4 feast2 fast0 exc0 rows=0,0 -> - +2027-07-23 slavic w5 feast0 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2027-07-24 slavic w6 feast4 fast0 exc0 rows=0,0 -> - +2027-07-25 slavic w0 feast3 fast0 exc0 rows=0,0 -> - +2027-07-26 slavic w1 feast4 fast0 exc2 rows=0,2 -> - +2027-07-27 slavic w2 feast2 fast0 exc0 rows=0,0 -> - +2027-07-28 slavic w3 feast0 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2027-07-29 slavic w4 feast0 fast0 exc0 rows=0,0 -> - +2027-07-30 slavic w5 feast0 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2027-07-31 slavic w6 feast2 fast0 exc0 rows=0,0 -> - +2027-08-01 slavic w0 feast3 fast4 exc1 rows=0,1 -> meat,fish,dairy,eggs +2027-08-02 slavic w1 feast3 fast4 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2027-08-03 slavic w2 feast3 fast4 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2027-08-04 slavic w3 feast0 fast4 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2027-08-05 slavic w4 feast2 fast4 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2027-08-06 slavic w5 feast8 fast4 exc4 rows=0,4 -> meat,dairy,eggs +2027-08-07 slavic w6 feast0 fast4 exc1 rows=0,0 -> meat,fish,dairy,eggs +2027-08-08 slavic w0 feast0 fast4 exc1 rows=0,0 -> meat,fish,dairy,eggs +2027-08-09 slavic w1 feast5 fast4 exc0 rows=0,4 -> meat,fish,dairy,eggs,wine,oil +2027-08-10 slavic w2 feast0 fast4 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2027-08-11 slavic w3 feast0 fast4 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2027-08-12 slavic w4 feast0 fast4 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2027-08-13 slavic w5 feast4 fast4 exc0 rows=0,4 -> meat,fish,dairy,eggs,wine,oil +2027-08-14 slavic w6 feast2 fast4 exc1 rows=0,0 -> meat,fish,dairy,eggs +2027-08-15 slavic w0 feast7 fast0 exc2 rows=0,2 -> - +2027-08-16 slavic w1 feast5 fast0 exc1 rows=0,1 -> - +2027-08-17 slavic w2 feast0 fast0 exc0 rows=0,0 -> - +2027-08-18 slavic w3 feast0 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2027-08-19 slavic w4 feast0 fast0 exc0 rows=0,0 -> - +2027-08-20 slavic w5 feast0 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2027-08-21 slavic w6 feast3 fast0 exc0 rows=0,0 -> - +2027-08-22 slavic w0 feast0 fast0 exc0 rows=0,0 -> - +2027-08-23 slavic w1 feast0 fast0 exc0 rows=0,0 -> - +2027-08-24 slavic w2 feast3 fast0 exc0 rows=0,0 -> - +2027-08-25 slavic w3 feast2 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2027-08-26 slavic w4 feast4 fast0 exc0 rows=0,0 -> - +2027-08-27 slavic w5 feast0 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2027-08-28 slavic w6 feast4 fast0 exc1 rows=0,1 -> - +2027-08-29 slavic w0 feast6 fast1 exc8 rows=0,8 -> meat,fish,dairy,eggs +2027-08-30 slavic w1 feast4 fast0 exc0 rows=0,0 -> - +2027-08-31 slavic w2 feast3 fast0 exc0 rows=0,0 -> - +2027-09-01 slavic w3 feast4 fast1 exc1 rows=0,1 -> meat,fish,dairy,eggs +2027-09-02 slavic w4 feast0 fast0 exc0 rows=0,0 -> - +2027-09-03 slavic w5 feast0 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2027-09-04 slavic w6 feast0 fast0 exc0 rows=0,0 -> - +2027-09-05 slavic w0 feast2 fast0 exc0 rows=0,0 -> - +2027-09-06 slavic w1 feast2 fast0 exc0 rows=0,0 -> - +2027-09-07 slavic w2 feast3 fast0 exc0 rows=0,0 -> - +2027-09-08 slavic w3 feast7 fast1 exc2 rows=0,2 -> meat,dairy,eggs +2027-09-09 slavic w4 feast3 fast0 exc0 rows=0,0 -> - +2027-09-10 slavic w5 feast0 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2027-09-11 slavic w6 feast4 fast0 exc0 rows=0,0,0 -> - +2027-09-12 slavic w0 feast0 fast0 exc1 rows=0,0,1 -> - +2027-09-13 slavic w1 feast3 fast0 exc1 rows=0,1 -> - +2027-09-14 slavic w2 feast8 fast1 exc8 rows=0,8 -> meat,fish,dairy,eggs +2027-09-15 slavic w3 feast2 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2027-09-16 slavic w4 feast2 fast0 exc0 rows=0,0 -> - +2027-09-17 slavic w5 feast0 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2027-09-18 slavic w6 feast0 fast0 exc0 rows=0,0,0 -> - +2027-09-19 slavic w0 feast3 fast0 exc0 rows=0,0,0 -> - +2027-09-20 slavic w1 feast3 fast0 exc0 rows=0,0 -> - +2027-09-21 slavic w2 feast4 fast0 exc0 rows=0,0 -> - +2027-09-22 slavic w3 feast2 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2027-09-23 slavic w4 feast3 fast0 exc1 rows=0,1 -> - +2027-09-24 slavic w5 feast4 fast1 exc2 rows=0,2 -> meat,dairy,eggs +2027-09-25 slavic w6 feast4 fast0 exc2 rows=0,2 -> - +2027-09-26 slavic w0 feast5 fast0 exc2 rows=0,2 -> - +2027-09-27 slavic w1 feast3 fast0 exc0 rows=0,0 -> - +2027-09-28 slavic w2 feast4 fast0 exc1 rows=0,1 -> - +2027-09-29 slavic w3 feast2 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2027-09-30 slavic w4 feast3 fast0 exc0 rows=0,0 -> - +2027-10-01 slavic w5 feast6 fast1 exc2 rows=0,2 -> meat,dairy,eggs +2027-10-02 slavic w6 feast2 fast0 exc0 rows=0,0 -> - +2027-10-03 slavic w0 feast2 fast0 exc0 rows=0,0 -> - +2027-10-04 slavic w1 feast3 fast0 exc0 rows=0,0 -> - +2027-10-05 slavic w2 feast3 fast0 exc0 rows=0,0 -> - +2027-10-06 slavic w3 feast5 fast1 exc2 rows=0,2 -> meat,dairy,eggs +2027-10-07 slavic w4 feast2 fast0 exc0 rows=0,0 -> - +2027-10-08 slavic w5 feast0 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2027-10-09 slavic w6 feast5 fast0 exc2 rows=0,2 -> - +2027-10-10 slavic w0 feast0 fast0 exc0 rows=0,0 -> - +2027-10-11 slavic w1 feast0 fast0 exc0 rows=0,0 -> - +2027-10-12 slavic w2 feast0 fast0 exc0 rows=0,0 -> - +2027-10-13 slavic w3 feast0 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2027-10-14 slavic w4 feast2 fast0 exc0 rows=0,0 -> - +2027-10-15 slavic w5 feast0 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2027-10-16 slavic w6 feast0 fast0 exc0 rows=0,0 -> - +2027-10-17 slavic w0 feast0 fast0 exc0 rows=0,0,0 -> - +2027-10-18 slavic w1 feast4 fast0 exc0 rows=0,0 -> - +2027-10-19 slavic w2 feast2 fast0 exc0 rows=0,0 -> - +2027-10-20 slavic w3 feast2 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2027-10-21 slavic w4 feast2 fast0 exc0 rows=0,0 -> - +2027-10-22 slavic w5 feast0 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2027-10-23 slavic w6 feast3 fast0 exc0 rows=0,0,0 -> - +2027-10-24 slavic w0 feast0 fast0 exc0 rows=0,0 -> - +2027-10-25 slavic w1 feast0 fast0 exc0 rows=0,0 -> - +2027-10-26 slavic w2 feast4 fast0 exc2 rows=0,2 -> - +2027-10-27 slavic w3 feast0 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2027-10-28 slavic w4 feast3 fast0 exc0 rows=0,0 -> - +2027-10-29 slavic w5 feast3 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2027-10-30 slavic w6 feast0 fast0 exc0 rows=0,0 -> - +2027-10-31 slavic w0 feast0 fast0 exc0 rows=0,0 -> - +2027-11-01 slavic w1 feast2 fast0 exc0 rows=0,0 -> - +2027-11-02 slavic w2 feast0 fast0 exc0 rows=0,0 -> - +2027-11-03 slavic w3 feast0 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2027-11-04 slavic w4 feast0 fast0 exc0 rows=0,0 -> - +2027-11-05 slavic w5 feast3 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2027-11-06 slavic w6 feast2 fast0 exc0 rows=0,0 -> - +2027-11-07 slavic w0 feast0 fast0 exc0 rows=0,0,0 -> - +2027-11-08 slavic w1 feast5 fast0 exc2 rows=0,2 -> - +2027-11-09 slavic w2 feast0 fast0 exc0 rows=0,0 -> - +2027-11-10 slavic w3 feast0 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2027-11-11 slavic w4 feast0 fast0 exc0 rows=0,0 -> - +2027-11-12 slavic w5 feast2 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2027-11-13 slavic w6 feast5 fast0 exc2 rows=0,2 -> - +2027-11-14 slavic w0 feast4 fast0 exc1 rows=0,1 -> - +2027-11-15 slavic w1 feast0 fast5 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2027-11-16 slavic w2 feast6 fast5 exc2 rows=0,2 -> meat,dairy,eggs +2027-11-17 slavic w3 feast3 fast5 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2027-11-18 slavic w4 feast0 fast5 exc1 rows=0,0 -> meat,fish,dairy,eggs +2027-11-19 slavic w5 feast3 fast5 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2027-11-20 slavic w6 feast0 fast5 exc2 rows=0,0 -> meat,dairy,eggs +2027-11-21 slavic w0 feast7 fast5 exc2 rows=0,2 -> meat,dairy,eggs +2027-11-22 slavic w1 feast2 fast5 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2027-11-23 slavic w2 feast3 fast5 exc1 rows=0,0 -> meat,fish,dairy,eggs +2027-11-24 slavic w3 feast2 fast5 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2027-11-25 slavic w4 feast0 fast5 exc1 rows=0,1 -> meat,fish,dairy,eggs +2027-11-26 slavic w5 feast0 fast5 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2027-11-27 slavic w6 feast2 fast5 exc2 rows=0,0 -> meat,dairy,eggs +2027-11-28 slavic w0 feast2 fast5 exc2 rows=0,0 -> meat,dairy,eggs +2027-11-29 slavic w1 feast0 fast5 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2027-11-30 slavic w2 feast4 fast5 exc2 rows=0,2 -> meat,dairy,eggs +2027-12-01 slavic w3 feast0 fast5 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2027-12-02 slavic w4 feast0 fast5 exc1 rows=0,0 -> meat,fish,dairy,eggs +2027-12-03 slavic w5 feast3 fast5 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2027-12-04 slavic w6 feast0 fast5 exc2 rows=0,0 -> meat,dairy,eggs +2027-12-05 slavic w0 feast4 fast5 exc2 rows=0,0 -> meat,dairy,eggs +2027-12-06 slavic w1 feast5 fast5 exc2 rows=0,2 -> meat,dairy,eggs +2027-12-07 slavic w2 feast3 fast5 exc1 rows=0,0 -> meat,fish,dairy,eggs +2027-12-08 slavic w3 feast0 fast5 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2027-12-09 slavic w4 feast3 fast5 exc1 rows=0,0 -> meat,fish,dairy,eggs +2027-12-10 slavic w5 feast0 fast5 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2027-12-11 slavic w6 feast0 fast5 exc2 rows=0,0 -> meat,dairy,eggs +2027-12-12 slavic w0 feast2 fast5 exc2 rows=0,0,0 -> meat,dairy,eggs +2027-12-13 slavic w1 feast5 fast5 exc2 rows=0,2 -> meat,dairy,eggs +2027-12-14 slavic w2 feast0 fast5 exc1 rows=0,0 -> meat,fish,dairy,eggs +2027-12-15 slavic w3 feast2 fast5 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2027-12-16 slavic w4 feast0 fast5 exc1 rows=0,0 -> meat,fish,dairy,eggs +2027-12-17 slavic w5 feast2 fast5 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2027-12-18 slavic w6 feast0 fast5 exc2 rows=0,0,0 -> meat,dairy,eggs +2027-12-19 slavic w0 feast0 fast5 exc2 rows=0,0,0 -> meat,dairy,eggs +2027-12-20 slavic w1 feast4 fast5 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2027-12-21 slavic w2 feast0 fast5 exc1 rows=0,0 -> meat,fish,dairy,eggs +2027-12-22 slavic w3 feast0 fast5 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2027-12-23 slavic w4 feast0 fast5 exc1 rows=0,0 -> meat,fish,dairy,eggs +2027-12-24 slavic w5 feast0 fast5 exc1 rows=0,0,9 -> meat,fish,dairy,eggs +2027-12-25 slavic w6 feast8 fast0 exc11 rows=0,11 -> - +2027-12-26 slavic w0 feast3 fast0 exc11 rows=0,0,11 -> - +2027-12-27 slavic w1 feast2 fast0 exc11 rows=0,11 -> - +2027-12-28 slavic w2 feast0 fast0 exc11 rows=0,11 -> - +2027-12-29 slavic w3 feast0 fast0 exc11 rows=0,11 -> - +2027-12-30 slavic w4 feast0 fast0 exc11 rows=0,11 -> - +2027-12-31 slavic w5 feast0 fast0 exc11 rows=0,0,11 -> - +2028-01-01 slavic w6 feast6 fast0 exc11 rows=0,0,11 -> - +2028-01-02 slavic w0 feast4 fast0 exc11 rows=0,0,11 -> - +2028-01-03 slavic w1 feast0 fast0 exc11 rows=0,11 -> - +2028-01-04 slavic w2 feast0 fast0 exc11 rows=0,11 -> - +2028-01-05 slavic w3 feast0 fast1 exc9 rows=0,0,9 -> meat,fish,dairy,eggs,wine,oil +2028-01-06 slavic w4 feast8 fast0 exc11 rows=0,11 -> - +2028-01-07 slavic w5 feast3 fast1 exc2 rows=0,2 -> meat,dairy,eggs +2028-01-08 slavic w6 feast0 fast0 exc0 rows=0,0,0 -> - +2028-01-09 slavic w0 feast4 fast0 exc0 rows=0,0,0 -> - +2028-01-10 slavic w1 feast4 fast0 exc0 rows=0,0 -> - +2028-01-11 slavic w2 feast4 fast0 exc0 rows=0,0 -> - +2028-01-12 slavic w3 feast3 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2028-01-13 slavic w4 feast0 fast0 exc0 rows=0,0 -> - +2028-01-14 slavic w5 feast4 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2028-01-15 slavic w6 feast2 fast0 exc0 rows=0,0 -> - +2028-01-16 slavic w0 feast2 fast0 exc0 rows=0,0 -> - +2028-01-17 slavic w1 feast5 fast0 exc2 rows=0,2 -> - +2028-01-18 slavic w2 feast2 fast0 exc0 rows=0,0 -> - +2028-01-19 slavic w3 feast2 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2028-01-20 slavic w4 feast5 fast0 exc2 rows=0,2 -> - +2028-01-21 slavic w5 feast0 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2028-01-22 slavic w6 feast0 fast0 exc0 rows=0,0 -> - +2028-01-23 slavic w0 feast5 fast0 exc0 rows=0,0,0 -> - +2028-01-24 slavic w1 feast4 fast0 exc0 rows=0,0 -> - +2028-01-25 slavic w2 feast4 fast0 exc0 rows=0,0 -> - +2028-01-26 slavic w3 feast0 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2028-01-27 slavic w4 feast4 fast0 exc0 rows=0,0 -> - +2028-01-28 slavic w5 feast2 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2028-01-29 slavic w6 feast2 fast0 exc0 rows=0,0 -> - +2028-01-30 slavic w0 feast5 fast0 exc2 rows=0,2 -> - +2028-01-31 slavic w1 feast3 fast0 exc0 rows=0,0 -> - +2028-02-01 slavic w2 feast2 fast0 exc0 rows=0,0 -> - +2028-02-02 slavic w3 feast8 fast1 exc2 rows=0,2 -> meat,dairy,eggs +2028-02-03 slavic w4 feast2 fast0 exc0 rows=0,0 -> - +2028-02-04 slavic w5 feast0 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2028-02-05 slavic w6 feast4 fast0 exc0 rows=0,0 -> - +2028-02-06 slavic w0 feast0 fast0 exc11 rows=0,11 -> - +2028-02-07 slavic w1 feast0 fast0 exc11 rows=0,11 -> - +2028-02-08 slavic w2 feast2 fast0 exc11 rows=0,11 -> - +2028-02-09 slavic w3 feast4 fast0 exc11 rows=0,11 -> - +2028-02-10 slavic w4 feast0 fast0 exc11 rows=0,11 -> - +2028-02-11 slavic w5 feast3 fast0 exc11 rows=0,11 -> - +2028-02-12 slavic w6 feast4 fast0 exc11 rows=0,11 -> - +2028-02-13 slavic w0 feast0 fast0 exc0 rows=0,0 -> - +2028-02-14 slavic w1 feast4 fast0 exc0 rows=0,0 -> - +2028-02-15 slavic w2 feast0 fast0 exc0 rows=0,0 -> - +2028-02-16 slavic w3 feast0 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2028-02-17 slavic w4 feast4 fast0 exc0 rows=0,0 -> - +2028-02-18 slavic w5 feast0 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2028-02-19 slavic w6 feast0 fast0 exc0 rows=0,0 -> - +2028-02-20 slavic w0 feast0 fast0 exc0 rows=0,0 -> - +2028-02-21 slavic w1 feast0 fast1 exc7 rows=0,7 -> meat +2028-02-22 slavic w2 feast0 fast1 exc7 rows=0,7 -> meat +2028-02-23 slavic w3 feast0 fast1 exc7 rows=0,7 -> meat +2028-02-24 slavic w4 feast4 fast1 exc7 rows=1,7 -> meat +2028-02-25 slavic w5 feast0 fast1 exc7 rows=0,7 -> meat +2028-02-26 slavic w6 feast0 fast1 exc7 rows=0,7 -> meat +2028-02-27 slavic w0 feast5 fast1 exc7 rows=2,7 -> meat +2028-02-28 slavic w1 feast0 fast2 exc10 rows=0,10 -> meat,fish,dairy,eggs,wine,oil +2028-02-29 slavic w2 feast0 fast2 exc10 rows=0,10 -> meat,fish,dairy,eggs,wine,oil +2028-03-01 slavic w3 feast1 fast2 exc10 rows=0,10 -> meat,fish,dairy,eggs,wine,oil +2028-03-02 slavic w4 feast3 fast2 exc10 rows=0,10 -> meat,fish,dairy,eggs,wine,oil +2028-03-03 slavic w5 feast1 fast2 exc10 rows=0,10 -> meat,fish,dairy,eggs,wine,oil +2028-03-04 slavic w6 feast4 fast2 exc3 rows=0,3 -> meat,fish,dairy,eggs +2028-03-05 slavic w0 feast0 fast2 exc3 rows=0,3 -> meat,fish,dairy,eggs +2028-03-06 slavic w1 feast0 fast2 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2028-03-07 slavic w2 feast0 fast2 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2028-03-08 slavic w3 feast1 fast2 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2028-03-09 slavic w4 feast4 fast2 exc1 rows=0,1 -> meat,fish,dairy,eggs +2028-03-10 slavic w5 feast1 fast2 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2028-03-11 slavic w6 feast3 fast2 exc3 rows=0,3 -> meat,fish,dairy,eggs +2028-03-12 slavic w0 feast0 fast2 exc3 rows=0,3 -> meat,fish,dairy,eggs +2028-03-13 slavic w1 feast0 fast2 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2028-03-14 slavic w2 feast0 fast2 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2028-03-15 slavic w3 feast1 fast2 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2028-03-16 slavic w4 feast0 fast2 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2028-03-17 slavic w5 feast3 fast2 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2028-03-18 slavic w6 feast2 fast2 exc3 rows=0,3 -> meat,fish,dairy,eggs +2028-03-19 slavic w0 feast0 fast2 exc3 rows=0,3 -> meat,fish,dairy,eggs +2028-03-20 slavic w1 feast0 fast2 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2028-03-21 slavic w2 feast0 fast2 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2028-03-22 slavic w3 feast1 fast2 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2028-03-23 slavic w4 feast0 fast2 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2028-03-24 slavic w5 feast2 fast2 exc3 rows=0,3 -> meat,fish,dairy,eggs +2028-03-25 slavic w6 feast7 fast2 exc4 rows=3,4 -> meat,dairy,eggs +2028-03-26 slavic w0 feast3 fast2 exc3 rows=3,3 -> meat,fish,dairy,eggs +2028-03-27 slavic w1 feast0 fast2 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2028-03-28 slavic w2 feast0 fast2 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2028-03-29 slavic w3 feast1 fast2 exc3 rows=0,3 -> meat,fish,dairy,eggs +2028-03-30 slavic w4 feast0 fast2 exc3 rows=0,3 -> meat,fish,dairy,eggs +2028-03-31 slavic w5 feast4 fast2 exc3 rows=1,3 -> meat,fish,dairy,eggs +2028-04-01 slavic w6 feast3 fast2 exc3 rows=0,3 -> meat,fish,dairy,eggs +2028-04-02 slavic w0 feast0 fast2 exc3 rows=0,3 -> meat,fish,dairy,eggs +2028-04-03 slavic w1 feast0 fast2 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2028-04-04 slavic w2 feast0 fast2 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2028-04-05 slavic w3 feast1 fast2 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2028-04-06 slavic w4 feast4 fast2 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2028-04-07 slavic w5 feast4 fast2 exc1 rows=0,1 -> meat,fish,dairy,eggs +2028-04-08 slavic w6 feast0 fast2 exc6 rows=0,6 -> meat,fish,dairy,eggs +2028-04-09 slavic w0 feast8 fast2 exc4 rows=0,4 -> meat,dairy,eggs +2028-04-10 slavic w1 feast1 fast2 exc10 rows=0,10 -> meat,fish,dairy,eggs,wine,oil +2028-04-11 slavic w2 feast1 fast2 exc10 rows=0,10 -> meat,fish,dairy,eggs,wine,oil +2028-04-12 slavic w3 feast1 fast2 exc10 rows=0,10 -> meat,fish,dairy,eggs,wine,oil +2028-04-13 slavic w4 feast3 fast2 exc3 rows=0,3 -> meat,fish,dairy,eggs +2028-04-14 slavic w5 feast0 fast2 exc9 rows=0,9 -> meat,fish,dairy,eggs,wine,oil +2028-04-15 slavic w6 feast3 fast2 exc5 rows=0,5 -> meat,fish,dairy,eggs,oil +2028-04-16 slavic w0 feast8 fast0 exc11 rows=0,11 -> - +2028-04-17 slavic w1 feast3 fast0 exc11 rows=0,11 -> - +2028-04-18 slavic w2 feast0 fast0 exc11 rows=0,11 -> - +2028-04-19 slavic w3 feast0 fast0 exc11 rows=0,11 -> - +2028-04-20 slavic w4 feast0 fast0 exc11 rows=0,11 -> - +2028-04-21 slavic w5 feast0 fast0 exc11 rows=0,11 -> - +2028-04-22 slavic w6 feast0 fast0 exc11 rows=0,11 -> - +2028-04-23 slavic w0 feast5 fast0 exc1 rows=0,1 -> - +2028-04-24 slavic w1 feast0 fast0 exc0 rows=0,0 -> - +2028-04-25 slavic w2 feast4 fast0 exc1 rows=0,1 -> - +2028-04-26 slavic w3 feast3 fast1 exc1 rows=0,1 -> meat,fish,dairy,eggs +2028-04-27 slavic w4 feast2 fast0 exc0 rows=0,0 -> - +2028-04-28 slavic w5 feast0 fast1 exc1 rows=0,1 -> meat,fish,dairy,eggs +2028-04-29 slavic w6 feast0 fast0 exc0 rows=0,0 -> - +2028-04-30 slavic w0 feast4 fast0 exc0 rows=0,0 -> - +2028-05-01 slavic w1 feast3 fast0 exc0 rows=0,0 -> - +2028-05-02 slavic w2 feast4 fast0 exc0 rows=0,0 -> - +2028-05-03 slavic w3 feast4 fast1 exc1 rows=0,1 -> meat,fish,dairy,eggs +2028-05-04 slavic w4 feast0 fast0 exc0 rows=0,0 -> - +2028-05-05 slavic w5 feast0 fast1 exc1 rows=0,1 -> meat,fish,dairy,eggs +2028-05-06 slavic w6 feast0 fast0 exc0 rows=0,0 -> - +2028-05-07 slavic w0 feast5 fast0 exc2 rows=0,2 -> - +2028-05-08 slavic w1 feast5 fast0 exc2 rows=0,2 -> - +2028-05-09 slavic w2 feast4 fast0 exc0 rows=0,0 -> - +2028-05-10 slavic w3 feast4 fast1 exc2 rows=0,2 -> meat,dairy,eggs +2028-05-11 slavic w4 feast5 fast0 exc2 rows=0,2 -> - +2028-05-12 slavic w5 feast0 fast1 exc1 rows=0,1 -> meat,fish,dairy,eggs +2028-05-13 slavic w6 feast0 fast0 exc0 rows=0,0 -> - +2028-05-14 slavic w0 feast2 fast0 exc0 rows=0,0 -> - +2028-05-15 slavic w1 feast3 fast0 exc0 rows=0,0 -> - +2028-05-16 slavic w2 feast3 fast0 exc0 rows=0,0 -> - +2028-05-17 slavic w3 feast0 fast1 exc1 rows=0,1 -> meat,fish,dairy,eggs +2028-05-18 slavic w4 feast0 fast0 exc0 rows=0,0 -> - +2028-05-19 slavic w5 feast4 fast1 exc1 rows=0,1 -> meat,fish,dairy,eggs +2028-05-20 slavic w6 feast3 fast0 exc0 rows=0,0 -> - +2028-05-21 slavic w0 feast4 fast0 exc0 rows=0,0 -> - +2028-05-22 slavic w1 feast0 fast0 exc0 rows=0,0 -> - +2028-05-23 slavic w2 feast3 fast0 exc0 rows=0,0 -> - +2028-05-24 slavic w3 feast3 fast1 exc2 rows=0,2 -> meat,dairy,eggs +2028-05-25 slavic w4 feast8 fast0 exc0 rows=0,0 -> - +2028-05-26 slavic w5 feast2 fast1 exc1 rows=0,1 -> meat,fish,dairy,eggs +2028-05-27 slavic w6 feast3 fast0 exc0 rows=0,0 -> - +2028-05-28 slavic w0 feast2 fast0 exc0 rows=0,0 -> - +2028-05-29 slavic w1 feast2 fast0 exc0 rows=0,0 -> - +2028-05-30 slavic w2 feast0 fast0 exc0 rows=0,0 -> - +2028-05-31 slavic w3 feast0 fast1 exc1 rows=0,1 -> meat,fish,dairy,eggs +2028-06-01 slavic w4 feast0 fast0 exc0 rows=0,0 -> - +2028-06-02 slavic w5 feast0 fast1 exc1 rows=0,1 -> meat,fish,dairy,eggs +2028-06-03 slavic w6 feast0 fast0 exc0 rows=0,0 -> - +2028-06-04 slavic w0 feast8 fast0 exc0 rows=0,0 -> - +2028-06-05 slavic w1 feast0 fast0 exc11 rows=0,11 -> - +2028-06-06 slavic w2 feast0 fast0 exc11 rows=0,11 -> - +2028-06-07 slavic w3 feast0 fast0 exc11 rows=0,11 -> - +2028-06-08 slavic w4 feast2 fast0 exc11 rows=0,11 -> - +2028-06-09 slavic w5 feast3 fast0 exc11 rows=0,11 -> - +2028-06-10 slavic w6 feast4 fast0 exc11 rows=0,11 -> - +2028-06-11 slavic w0 feast4 fast0 exc0 rows=0,0 -> - +2028-06-12 slavic w1 feast2 fast3 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2028-06-13 slavic w2 feast0 fast3 exc1 rows=0,0 -> meat,fish,dairy,eggs +2028-06-14 slavic w3 feast0 fast3 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2028-06-15 slavic w4 feast4 fast3 exc1 rows=0,0 -> meat,fish,dairy,eggs +2028-06-16 slavic w5 feast4 fast3 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2028-06-17 slavic w6 feast0 fast3 exc2 rows=0,0 -> meat,dairy,eggs +2028-06-18 slavic w0 feast0 fast3 exc2 rows=0,0 -> meat,dairy,eggs +2028-06-19 slavic w1 feast4 fast3 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2028-06-20 slavic w2 feast0 fast3 exc1 rows=0,0 -> meat,fish,dairy,eggs +2028-06-21 slavic w3 feast0 fast3 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2028-06-22 slavic w4 feast0 fast3 exc1 rows=0,0 -> meat,fish,dairy,eggs +2028-06-23 slavic w5 feast0 fast3 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2028-06-24 slavic w6 feast6 fast3 exc2 rows=0,2 -> meat,dairy,eggs +2028-06-25 slavic w0 feast3 fast3 exc2 rows=0,0 -> meat,dairy,eggs +2028-06-26 slavic w1 feast4 fast3 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2028-06-27 slavic w2 feast0 fast3 exc1 rows=0,0 -> meat,fish,dairy,eggs +2028-06-28 slavic w3 feast2 fast3 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2028-06-29 slavic w4 feast6 fast0 exc2 rows=0,2 -> - +2028-06-30 slavic w5 feast4 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2028-07-01 slavic w6 feast2 fast0 exc0 rows=0,0 -> - +2028-07-02 slavic w0 feast3 fast0 exc0 rows=0,0 -> - +2028-07-03 slavic w1 feast4 fast0 exc0 rows=0,0 -> - +2028-07-04 slavic w2 feast0 fast0 exc0 rows=0,0 -> - +2028-07-05 slavic w3 feast4 fast1 exc2 rows=0,2 -> meat,dairy,eggs +2028-07-06 slavic w4 feast0 fast0 exc0 rows=0,0 -> - +2028-07-07 slavic w5 feast0 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2028-07-08 slavic w6 feast2 fast0 exc0 rows=0,0 -> - +2028-07-09 slavic w0 feast0 fast0 exc0 rows=0,0 -> - +2028-07-10 slavic w1 feast4 fast0 exc0 rows=0,0 -> - +2028-07-11 slavic w2 feast2 fast0 exc0 rows=0,0 -> - +2028-07-12 slavic w3 feast0 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2028-07-13 slavic w4 feast2 fast0 exc0 rows=0,0 -> - +2028-07-14 slavic w5 feast2 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2028-07-15 slavic w6 feast5 fast0 exc2 rows=0,2 -> - +2028-07-16 slavic w0 feast0 fast0 exc0 rows=0,0,0 -> - +2028-07-17 slavic w1 feast4 fast0 exc0 rows=0,0 -> - +2028-07-18 slavic w2 feast0 fast0 exc0 rows=0,0 -> - +2028-07-19 slavic w3 feast4 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2028-07-20 slavic w4 feast5 fast0 exc2 rows=0,2 -> - +2028-07-21 slavic w5 feast0 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2028-07-22 slavic w6 feast2 fast0 exc0 rows=0,0 -> - +2028-07-23 slavic w0 feast0 fast0 exc0 rows=0,0 -> - +2028-07-24 slavic w1 feast4 fast0 exc0 rows=0,0 -> - +2028-07-25 slavic w2 feast3 fast0 exc0 rows=0,0 -> - +2028-07-26 slavic w3 feast4 fast1 exc2 rows=0,2 -> meat,dairy,eggs +2028-07-27 slavic w4 feast2 fast0 exc0 rows=0,0 -> - +2028-07-28 slavic w5 feast0 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2028-07-29 slavic w6 feast0 fast0 exc0 rows=0,0 -> - +2028-07-30 slavic w0 feast0 fast0 exc0 rows=0,0 -> - +2028-07-31 slavic w1 feast2 fast0 exc0 rows=0,0 -> - +2028-08-01 slavic w2 feast3 fast4 exc0 rows=0,1 -> meat,fish,dairy,eggs,wine,oil +2028-08-02 slavic w3 feast3 fast4 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2028-08-03 slavic w4 feast3 fast4 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2028-08-04 slavic w5 feast0 fast4 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2028-08-05 slavic w6 feast2 fast4 exc1 rows=0,0 -> meat,fish,dairy,eggs +2028-08-06 slavic w0 feast8 fast4 exc4 rows=0,4 -> meat,dairy,eggs +2028-08-07 slavic w1 feast0 fast4 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2028-08-08 slavic w2 feast0 fast4 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2028-08-09 slavic w3 feast5 fast4 exc0 rows=0,4 -> meat,fish,dairy,eggs,wine,oil +2028-08-10 slavic w4 feast0 fast4 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2028-08-11 slavic w5 feast0 fast4 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2028-08-12 slavic w6 feast0 fast4 exc1 rows=0,0 -> meat,fish,dairy,eggs +2028-08-13 slavic w0 feast4 fast4 exc1 rows=0,4 -> meat,fish,dairy,eggs +2028-08-14 slavic w1 feast2 fast4 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2028-08-15 slavic w2 feast7 fast0 exc2 rows=0,2 -> - +2028-08-16 slavic w3 feast5 fast1 exc1 rows=0,1 -> meat,fish,dairy,eggs +2028-08-17 slavic w4 feast0 fast0 exc0 rows=0,0 -> - +2028-08-18 slavic w5 feast0 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2028-08-19 slavic w6 feast0 fast0 exc0 rows=0,0 -> - +2028-08-20 slavic w0 feast0 fast0 exc0 rows=0,0 -> - +2028-08-21 slavic w1 feast3 fast0 exc0 rows=0,0 -> - +2028-08-22 slavic w2 feast0 fast0 exc0 rows=0,0 -> - +2028-08-23 slavic w3 feast0 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2028-08-24 slavic w4 feast3 fast0 exc0 rows=0,0 -> - +2028-08-25 slavic w5 feast2 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2028-08-26 slavic w6 feast4 fast0 exc0 rows=0,0 -> - +2028-08-27 slavic w0 feast0 fast0 exc0 rows=0,0 -> - +2028-08-28 slavic w1 feast4 fast0 exc1 rows=0,1 -> - +2028-08-29 slavic w2 feast6 fast1 exc8 rows=0,8 -> meat,fish,dairy,eggs +2028-08-30 slavic w3 feast4 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2028-08-31 slavic w4 feast3 fast0 exc0 rows=0,0 -> - +2028-09-01 slavic w5 feast4 fast1 exc1 rows=0,1 -> meat,fish,dairy,eggs +2028-09-02 slavic w6 feast0 fast0 exc0 rows=0,0 -> - +2028-09-03 slavic w0 feast0 fast0 exc0 rows=0,0 -> - +2028-09-04 slavic w1 feast0 fast0 exc0 rows=0,0 -> - +2028-09-05 slavic w2 feast2 fast0 exc0 rows=0,0 -> - +2028-09-06 slavic w3 feast2 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2028-09-07 slavic w4 feast3 fast0 exc0 rows=0,0 -> - +2028-09-08 slavic w5 feast7 fast1 exc2 rows=0,2 -> meat,dairy,eggs +2028-09-09 slavic w6 feast3 fast0 exc0 rows=0,0,0 -> - +2028-09-10 slavic w0 feast0 fast0 exc0 rows=0,0,0 -> - +2028-09-11 slavic w1 feast4 fast0 exc0 rows=0,0 -> - +2028-09-12 slavic w2 feast0 fast0 exc1 rows=0,1 -> - +2028-09-13 slavic w3 feast3 fast1 exc1 rows=0,1 -> meat,fish,dairy,eggs +2028-09-14 slavic w4 feast8 fast1 exc8 rows=0,8 -> meat,fish,dairy,eggs +2028-09-15 slavic w5 feast2 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2028-09-16 slavic w6 feast2 fast0 exc0 rows=0,0,0 -> - +2028-09-17 slavic w0 feast0 fast0 exc0 rows=0,0,0 -> - +2028-09-18 slavic w1 feast0 fast0 exc0 rows=0,0 -> - +2028-09-19 slavic w2 feast3 fast0 exc0 rows=0,0 -> - +2028-09-20 slavic w3 feast3 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2028-09-21 slavic w4 feast4 fast0 exc0 rows=0,0 -> - +2028-09-22 slavic w5 feast2 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2028-09-23 slavic w6 feast3 fast0 exc1 rows=0,1 -> - +2028-09-24 slavic w0 feast4 fast0 exc2 rows=0,2 -> - +2028-09-25 slavic w1 feast4 fast0 exc2 rows=0,2 -> - +2028-09-26 slavic w2 feast5 fast0 exc2 rows=0,2 -> - +2028-09-27 slavic w3 feast3 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2028-09-28 slavic w4 feast4 fast0 exc1 rows=0,1 -> - +2028-09-29 slavic w5 feast2 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2028-09-30 slavic w6 feast3 fast0 exc0 rows=0,0 -> - +2028-10-01 slavic w0 feast6 fast0 exc2 rows=0,2 -> - +2028-10-02 slavic w1 feast2 fast0 exc0 rows=0,0 -> - +2028-10-03 slavic w2 feast2 fast0 exc0 rows=0,0 -> - +2028-10-04 slavic w3 feast3 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2028-10-05 slavic w4 feast3 fast0 exc0 rows=0,0 -> - +2028-10-06 slavic w5 feast5 fast1 exc2 rows=0,2 -> meat,dairy,eggs +2028-10-07 slavic w6 feast2 fast0 exc0 rows=0,0 -> - +2028-10-08 slavic w0 feast0 fast0 exc0 rows=0,0 -> - +2028-10-09 slavic w1 feast5 fast0 exc2 rows=0,2 -> - +2028-10-10 slavic w2 feast0 fast0 exc0 rows=0,0 -> - +2028-10-11 slavic w3 feast0 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2028-10-12 slavic w4 feast0 fast0 exc0 rows=0,0 -> - +2028-10-13 slavic w5 feast0 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2028-10-14 slavic w6 feast2 fast0 exc0 rows=0,0 -> - +2028-10-15 slavic w0 feast0 fast0 exc0 rows=0,0,0 -> - +2028-10-16 slavic w1 feast0 fast0 exc0 rows=0,0 -> - +2028-10-17 slavic w2 feast0 fast0 exc0 rows=0,0 -> - +2028-10-18 slavic w3 feast4 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2028-10-19 slavic w4 feast2 fast0 exc0 rows=0,0 -> - +2028-10-20 slavic w5 feast2 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2028-10-21 slavic w6 feast2 fast0 exc0 rows=0,0,0 -> - +2028-10-22 slavic w0 feast0 fast0 exc0 rows=0,0 -> - +2028-10-23 slavic w1 feast3 fast0 exc0 rows=0,0 -> - +2028-10-24 slavic w2 feast0 fast0 exc0 rows=0,0 -> - +2028-10-25 slavic w3 feast0 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2028-10-26 slavic w4 feast4 fast0 exc2 rows=0,2 -> - +2028-10-27 slavic w5 feast0 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2028-10-28 slavic w6 feast3 fast0 exc0 rows=0,0 -> - +2028-10-29 slavic w0 feast3 fast0 exc0 rows=0,0 -> - +2028-10-30 slavic w1 feast0 fast0 exc0 rows=0,0 -> - +2028-10-31 slavic w2 feast0 fast0 exc0 rows=0,0 -> - +2028-11-01 slavic w3 feast2 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2028-11-02 slavic w4 feast0 fast0 exc0 rows=0,0 -> - +2028-11-03 slavic w5 feast0 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2028-11-04 slavic w6 feast0 fast0 exc0 rows=0,0 -> - +2028-11-05 slavic w0 feast3 fast0 exc0 rows=0,0,0 -> - +2028-11-06 slavic w1 feast2 fast0 exc0 rows=0,0 -> - +2028-11-07 slavic w2 feast0 fast0 exc0 rows=0,0 -> - +2028-11-08 slavic w3 feast5 fast1 exc2 rows=0,2 -> meat,dairy,eggs +2028-11-09 slavic w4 feast0 fast0 exc0 rows=0,0 -> - +2028-11-10 slavic w5 feast0 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2028-11-11 slavic w6 feast0 fast0 exc0 rows=0,0 -> - +2028-11-12 slavic w0 feast2 fast0 exc0 rows=0,0 -> - +2028-11-13 slavic w1 feast5 fast0 exc2 rows=0,2 -> - +2028-11-14 slavic w2 feast4 fast0 exc1 rows=0,1 -> - +2028-11-15 slavic w3 feast0 fast5 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2028-11-16 slavic w4 feast6 fast5 exc2 rows=0,2 -> meat,dairy,eggs +2028-11-17 slavic w5 feast3 fast5 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2028-11-18 slavic w6 feast0 fast5 exc2 rows=0,0 -> meat,dairy,eggs +2028-11-19 slavic w0 feast3 fast5 exc2 rows=0,0 -> meat,dairy,eggs +2028-11-20 slavic w1 feast0 fast5 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2028-11-21 slavic w2 feast7 fast5 exc2 rows=0,2 -> meat,dairy,eggs +2028-11-22 slavic w3 feast2 fast5 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2028-11-23 slavic w4 feast3 fast5 exc1 rows=0,0 -> meat,fish,dairy,eggs +2028-11-24 slavic w5 feast2 fast5 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2028-11-25 slavic w6 feast0 fast5 exc2 rows=0,1 -> meat,dairy,eggs +2028-11-26 slavic w0 feast0 fast5 exc2 rows=0,0 -> meat,dairy,eggs +2028-11-27 slavic w1 feast2 fast5 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2028-11-28 slavic w2 feast2 fast5 exc1 rows=0,0 -> meat,fish,dairy,eggs +2028-11-29 slavic w3 feast0 fast5 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2028-11-30 slavic w4 feast4 fast5 exc2 rows=0,2 -> meat,dairy,eggs +2028-12-01 slavic w5 feast0 fast5 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2028-12-02 slavic w6 feast0 fast5 exc2 rows=0,0 -> meat,dairy,eggs +2028-12-03 slavic w0 feast3 fast5 exc2 rows=0,0 -> meat,dairy,eggs +2028-12-04 slavic w1 feast0 fast5 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2028-12-05 slavic w2 feast4 fast5 exc1 rows=0,0 -> meat,fish,dairy,eggs +2028-12-06 slavic w3 feast5 fast5 exc2 rows=0,2 -> meat,dairy,eggs +2028-12-07 slavic w4 feast3 fast5 exc1 rows=0,0 -> meat,fish,dairy,eggs +2028-12-08 slavic w5 feast0 fast5 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2028-12-09 slavic w6 feast3 fast5 exc2 rows=0,0 -> meat,dairy,eggs +2028-12-10 slavic w0 feast0 fast5 exc2 rows=0,0 -> meat,dairy,eggs +2028-12-11 slavic w1 feast0 fast5 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2028-12-12 slavic w2 feast2 fast5 exc1 rows=0,0 -> meat,fish,dairy,eggs +2028-12-13 slavic w3 feast5 fast5 exc2 rows=0,2 -> meat,dairy,eggs +2028-12-14 slavic w4 feast0 fast5 exc1 rows=0,0 -> meat,fish,dairy,eggs +2028-12-15 slavic w5 feast2 fast5 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2028-12-16 slavic w6 feast0 fast5 exc2 rows=0,0 -> meat,dairy,eggs +2028-12-17 slavic w0 feast2 fast5 exc2 rows=0,0,0 -> meat,dairy,eggs +2028-12-18 slavic w1 feast0 fast5 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2028-12-19 slavic w2 feast0 fast5 exc1 rows=0,0 -> meat,fish,dairy,eggs +2028-12-20 slavic w3 feast4 fast5 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2028-12-21 slavic w4 feast0 fast5 exc1 rows=0,0 -> meat,fish,dairy,eggs +2028-12-22 slavic w5 feast0 fast5 exc0 rows=0,0,0 -> meat,fish,dairy,eggs,wine,oil +2028-12-23 slavic w6 feast0 fast5 exc1 rows=0,0,0 -> meat,fish,dairy,eggs +2028-12-24 slavic w0 feast0 fast5 exc1 rows=0,0,9 -> meat,fish,dairy,eggs +2028-12-25 slavic w1 feast8 fast0 exc11 rows=0,11 -> - +2028-12-26 slavic w2 feast3 fast0 exc11 rows=0,11 -> - +2028-12-27 slavic w3 feast2 fast0 exc11 rows=0,11 -> - +2028-12-28 slavic w4 feast0 fast0 exc11 rows=0,11 -> - +2028-12-29 slavic w5 feast0 fast0 exc11 rows=0,11 -> - +2028-12-30 slavic w6 feast0 fast0 exc11 rows=0,0,11 -> - +2028-12-31 slavic w0 feast0 fast0 exc11 rows=0,0,11 -> - +2029-01-01 slavic w1 feast6 fast0 exc11 rows=0,0,11 -> - +2029-01-02 slavic w2 feast4 fast0 exc11 rows=0,11 -> - +2029-01-03 slavic w3 feast0 fast0 exc11 rows=0,11 -> - +2029-01-04 slavic w4 feast0 fast0 exc11 rows=0,11 -> - +2029-01-05 slavic w5 feast0 fast1 exc9 rows=0,0,9 -> meat,fish,dairy,eggs,wine,oil +2029-01-06 slavic w6 feast8 fast0 exc11 rows=0,11 -> - +2029-01-07 slavic w0 feast3 fast0 exc2 rows=0,0,2 -> - +2029-01-08 slavic w1 feast0 fast0 exc0 rows=0,0 -> - +2029-01-09 slavic w2 feast4 fast0 exc0 rows=0,0 -> - +2029-01-10 slavic w3 feast4 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2029-01-11 slavic w4 feast4 fast0 exc0 rows=0,0 -> - +2029-01-12 slavic w5 feast3 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2029-01-13 slavic w6 feast0 fast0 exc0 rows=0,0,0 -> - +2029-01-14 slavic w0 feast4 fast0 exc0 rows=0,0 -> - +2029-01-15 slavic w1 feast2 fast0 exc0 rows=0,0 -> - +2029-01-16 slavic w2 feast2 fast0 exc0 rows=0,0 -> - +2029-01-17 slavic w3 feast5 fast1 exc2 rows=0,2 -> meat,dairy,eggs +2029-01-18 slavic w4 feast2 fast0 exc0 rows=0,0 -> - +2029-01-19 slavic w5 feast2 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2029-01-20 slavic w6 feast5 fast0 exc2 rows=0,2 -> - +2029-01-21 slavic w0 feast0 fast0 exc0 rows=0,0 -> - +2029-01-22 slavic w1 feast0 fast0 exc0 rows=0,0 -> - +2029-01-23 slavic w2 feast0 fast0 exc0 rows=0,0 -> - +2029-01-24 slavic w3 feast4 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2029-01-25 slavic w4 feast4 fast0 exc0 rows=0,0 -> - +2029-01-26 slavic w5 feast0 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2029-01-27 slavic w6 feast4 fast0 exc0 rows=0,0 -> - +2029-01-28 slavic w0 feast2 fast0 exc11 rows=0,11 -> - +2029-01-29 slavic w1 feast2 fast0 exc11 rows=0,11 -> - +2029-01-30 slavic w2 feast5 fast0 exc11 rows=2,11 -> - +2029-01-31 slavic w3 feast3 fast0 exc11 rows=0,11 -> - +2029-02-01 slavic w4 feast2 fast0 exc11 rows=0,11 -> - +2029-02-02 slavic w5 feast8 fast0 exc11 rows=2,11 -> - +2029-02-03 slavic w6 feast2 fast0 exc11 rows=0,11 -> - +2029-02-04 slavic w0 feast0 fast0 exc0 rows=0,0 -> - +2029-02-05 slavic w1 feast4 fast0 exc0 rows=0,0 -> - +2029-02-06 slavic w2 feast0 fast0 exc0 rows=0,0 -> - +2029-02-07 slavic w3 feast0 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2029-02-08 slavic w4 feast2 fast0 exc0 rows=0,0 -> - +2029-02-09 slavic w5 feast4 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2029-02-10 slavic w6 feast0 fast0 exc0 rows=0,0 -> - +2029-02-11 slavic w0 feast3 fast0 exc0 rows=0,0 -> - +2029-02-12 slavic w1 feast4 fast1 exc7 rows=0,7 -> meat +2029-02-13 slavic w2 feast0 fast1 exc7 rows=0,7 -> meat +2029-02-14 slavic w3 feast4 fast1 exc7 rows=0,7 -> meat +2029-02-15 slavic w4 feast0 fast1 exc7 rows=0,7 -> meat +2029-02-16 slavic w5 feast0 fast1 exc7 rows=0,7 -> meat +2029-02-17 slavic w6 feast4 fast1 exc7 rows=0,7 -> meat +2029-02-18 slavic w0 feast0 fast1 exc7 rows=0,7 -> meat +2029-02-19 slavic w1 feast0 fast2 exc10 rows=0,10 -> meat,fish,dairy,eggs,wine,oil +2029-02-20 slavic w2 feast0 fast2 exc10 rows=0,10 -> meat,fish,dairy,eggs,wine,oil +2029-02-21 slavic w3 feast1 fast2 exc10 rows=0,10 -> meat,fish,dairy,eggs,wine,oil +2029-02-22 slavic w4 feast0 fast2 exc10 rows=0,10 -> meat,fish,dairy,eggs,wine,oil +2029-02-23 slavic w5 feast1 fast2 exc10 rows=0,10 -> meat,fish,dairy,eggs,wine,oil +2029-02-24 slavic w6 feast4 fast2 exc3 rows=1,3 -> meat,fish,dairy,eggs +2029-02-25 slavic w0 feast0 fast2 exc3 rows=0,3 -> meat,fish,dairy,eggs +2029-02-26 slavic w1 feast0 fast2 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2029-02-27 slavic w2 feast5 fast2 exc1 rows=0,2 -> meat,fish,dairy,eggs +2029-02-28 slavic w3 feast1 fast2 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2029-03-01 slavic w4 feast0 fast2 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2029-03-02 slavic w5 feast3 fast2 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2029-03-03 slavic w6 feast0 fast2 exc3 rows=0,3 -> meat,fish,dairy,eggs +2029-03-04 slavic w0 feast4 fast2 exc3 rows=0,3 -> meat,fish,dairy,eggs +2029-03-05 slavic w1 feast0 fast2 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2029-03-06 slavic w2 feast0 fast2 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2029-03-07 slavic w3 feast1 fast2 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2029-03-08 slavic w4 feast0 fast2 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2029-03-09 slavic w5 feast4 fast2 exc1 rows=0,1 -> meat,fish,dairy,eggs +2029-03-10 slavic w6 feast0 fast2 exc3 rows=0,3 -> meat,fish,dairy,eggs +2029-03-11 slavic w0 feast3 fast2 exc3 rows=0,3 -> meat,fish,dairy,eggs +2029-03-12 slavic w1 feast0 fast2 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2029-03-13 slavic w2 feast0 fast2 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2029-03-14 slavic w3 feast1 fast2 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2029-03-15 slavic w4 feast0 fast2 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2029-03-16 slavic w5 feast1 fast2 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2029-03-17 slavic w6 feast3 fast2 exc3 rows=0,3 -> meat,fish,dairy,eggs +2029-03-18 slavic w0 feast2 fast2 exc3 rows=0,3 -> meat,fish,dairy,eggs +2029-03-19 slavic w1 feast0 fast2 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2029-03-20 slavic w2 feast0 fast2 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2029-03-21 slavic w3 feast1 fast2 exc3 rows=0,3 -> meat,fish,dairy,eggs +2029-03-22 slavic w4 feast0 fast2 exc3 rows=0,3 -> meat,fish,dairy,eggs +2029-03-23 slavic w5 feast1 fast2 exc3 rows=0,3 -> meat,fish,dairy,eggs +2029-03-24 slavic w6 feast2 fast2 exc3 rows=3,3 -> meat,fish,dairy,eggs +2029-03-25 slavic w0 feast7 fast2 exc4 rows=3,4 -> meat,dairy,eggs +2029-03-26 slavic w1 feast3 fast2 exc3 rows=0,3 -> meat,fish,dairy,eggs +2029-03-27 slavic w2 feast0 fast2 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2029-03-28 slavic w3 feast1 fast2 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2029-03-29 slavic w4 feast0 fast2 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2029-03-30 slavic w5 feast1 fast2 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2029-03-31 slavic w6 feast4 fast2 exc6 rows=1,6 -> meat,fish,dairy,eggs +2029-04-01 slavic w0 feast8 fast2 exc4 rows=0,4 -> meat,dairy,eggs +2029-04-02 slavic w1 feast1 fast2 exc10 rows=0,10 -> meat,fish,dairy,eggs,wine,oil +2029-04-03 slavic w2 feast1 fast2 exc10 rows=0,10 -> meat,fish,dairy,eggs,wine,oil +2029-04-04 slavic w3 feast1 fast2 exc10 rows=0,10 -> meat,fish,dairy,eggs,wine,oil +2029-04-05 slavic w4 feast3 fast2 exc3 rows=0,3 -> meat,fish,dairy,eggs +2029-04-06 slavic w5 feast4 fast2 exc9 rows=0,9 -> meat,fish,dairy,eggs,wine,oil +2029-04-07 slavic w6 feast4 fast2 exc5 rows=1,5 -> meat,fish,dairy,eggs,oil +2029-04-08 slavic w0 feast8 fast0 exc11 rows=0,11 -> - +2029-04-09 slavic w1 feast0 fast0 exc11 rows=0,11 -> - +2029-04-10 slavic w2 feast0 fast0 exc11 rows=0,11 -> - +2029-04-11 slavic w3 feast0 fast0 exc11 rows=0,11 -> - +2029-04-12 slavic w4 feast0 fast0 exc11 rows=0,11 -> - +2029-04-13 slavic w5 feast0 fast0 exc11 rows=0,11 -> - +2029-04-14 slavic w6 feast0 fast0 exc11 rows=0,11 -> - +2029-04-15 slavic w0 feast0 fast0 exc0 rows=0,0 -> - +2029-04-16 slavic w1 feast0 fast0 exc0 rows=0,0 -> - +2029-04-17 slavic w2 feast3 fast0 exc0 rows=0,0 -> - +2029-04-18 slavic w3 feast0 fast1 exc1 rows=0,1 -> meat,fish,dairy,eggs +2029-04-19 slavic w4 feast0 fast0 exc0 rows=0,0 -> - +2029-04-20 slavic w5 feast0 fast1 exc1 rows=0,1 -> meat,fish,dairy,eggs +2029-04-21 slavic w6 feast0 fast0 exc0 rows=0,0 -> - +2029-04-22 slavic w0 feast0 fast0 exc0 rows=0,0 -> - +2029-04-23 slavic w1 feast5 fast0 exc1 rows=0,1 -> - +2029-04-24 slavic w2 feast0 fast0 exc0 rows=0,0 -> - +2029-04-25 slavic w3 feast4 fast1 exc1 rows=1,1 -> meat,fish,dairy,eggs +2029-04-26 slavic w4 feast3 fast0 exc0 rows=0,0 -> - +2029-04-27 slavic w5 feast2 fast1 exc1 rows=0,1 -> meat,fish,dairy,eggs +2029-04-28 slavic w6 feast0 fast0 exc0 rows=0,0 -> - +2029-04-29 slavic w0 feast0 fast0 exc0 rows=0,0 -> - +2029-04-30 slavic w1 feast4 fast0 exc0 rows=0,0 -> - +2029-05-01 slavic w2 feast3 fast0 exc0 rows=0,0 -> - +2029-05-02 slavic w3 feast4 fast1 exc2 rows=0,2 -> meat,dairy,eggs +2029-05-03 slavic w4 feast4 fast0 exc0 rows=0,0 -> - +2029-05-04 slavic w5 feast0 fast1 exc1 rows=0,1 -> meat,fish,dairy,eggs +2029-05-05 slavic w6 feast0 fast0 exc0 rows=0,0 -> - +2029-05-06 slavic w0 feast0 fast0 exc0 rows=0,0 -> - +2029-05-07 slavic w1 feast5 fast0 exc2 rows=0,2 -> - +2029-05-08 slavic w2 feast5 fast0 exc2 rows=0,2 -> - +2029-05-09 slavic w3 feast4 fast1 exc1 rows=0,1 -> meat,fish,dairy,eggs +2029-05-10 slavic w4 feast4 fast0 exc0 rows=0,0 -> - +2029-05-11 slavic w5 feast5 fast1 exc2 rows=1,2 -> meat,dairy,eggs +2029-05-12 slavic w6 feast0 fast0 exc0 rows=0,0 -> - +2029-05-13 slavic w0 feast0 fast0 exc0 rows=0,0 -> - +2029-05-14 slavic w1 feast2 fast0 exc0 rows=0,0 -> - +2029-05-15 slavic w2 feast3 fast0 exc0 rows=0,0 -> - +2029-05-16 slavic w3 feast3 fast1 exc2 rows=0,2 -> meat,dairy,eggs +2029-05-17 slavic w4 feast8 fast0 exc0 rows=0,0 -> - +2029-05-18 slavic w5 feast0 fast1 exc1 rows=0,1 -> meat,fish,dairy,eggs +2029-05-19 slavic w6 feast4 fast0 exc0 rows=0,0 -> - +2029-05-20 slavic w0 feast3 fast0 exc0 rows=0,0 -> - +2029-05-21 slavic w1 feast4 fast0 exc0 rows=0,0 -> - +2029-05-22 slavic w2 feast0 fast0 exc0 rows=0,0 -> - +2029-05-23 slavic w3 feast3 fast1 exc1 rows=0,1 -> meat,fish,dairy,eggs +2029-05-24 slavic w4 feast3 fast0 exc0 rows=0,0 -> - +2029-05-25 slavic w5 feast4 fast1 exc1 rows=0,1 -> meat,fish,dairy,eggs +2029-05-26 slavic w6 feast2 fast0 exc0 rows=0,0 -> - +2029-05-27 slavic w0 feast8 fast0 exc0 rows=0,0 -> - +2029-05-28 slavic w1 feast2 fast0 exc11 rows=0,11 -> - +2029-05-29 slavic w2 feast2 fast0 exc11 rows=0,11 -> - +2029-05-30 slavic w3 feast0 fast0 exc11 rows=0,11 -> - +2029-05-31 slavic w4 feast0 fast0 exc11 rows=0,11 -> - +2029-06-01 slavic w5 feast0 fast0 exc11 rows=0,11 -> - +2029-06-02 slavic w6 feast0 fast0 exc11 rows=0,11 -> - +2029-06-03 slavic w0 feast0 fast0 exc0 rows=0,0 -> - +2029-06-04 slavic w1 feast0 fast3 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2029-06-05 slavic w2 feast0 fast3 exc1 rows=0,0 -> meat,fish,dairy,eggs +2029-06-06 slavic w3 feast0 fast3 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2029-06-07 slavic w4 feast0 fast3 exc1 rows=0,0 -> meat,fish,dairy,eggs +2029-06-08 slavic w5 feast2 fast3 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2029-06-09 slavic w6 feast3 fast3 exc2 rows=0,0 -> meat,dairy,eggs +2029-06-10 slavic w0 feast4 fast3 exc2 rows=0,0 -> meat,dairy,eggs +2029-06-11 slavic w1 feast4 fast3 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2029-06-12 slavic w2 feast2 fast3 exc1 rows=0,0 -> meat,fish,dairy,eggs +2029-06-13 slavic w3 feast0 fast3 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2029-06-14 slavic w4 feast0 fast3 exc1 rows=0,0 -> meat,fish,dairy,eggs +2029-06-15 slavic w5 feast4 fast3 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2029-06-16 slavic w6 feast4 fast3 exc2 rows=0,0 -> meat,dairy,eggs +2029-06-17 slavic w0 feast0 fast3 exc2 rows=0,0 -> meat,dairy,eggs +2029-06-18 slavic w1 feast0 fast3 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2029-06-19 slavic w2 feast4 fast3 exc1 rows=0,0 -> meat,fish,dairy,eggs +2029-06-20 slavic w3 feast0 fast3 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2029-06-21 slavic w4 feast0 fast3 exc1 rows=0,0 -> meat,fish,dairy,eggs +2029-06-22 slavic w5 feast0 fast3 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2029-06-23 slavic w6 feast0 fast3 exc2 rows=0,0 -> meat,dairy,eggs +2029-06-24 slavic w0 feast6 fast3 exc2 rows=0,2 -> meat,dairy,eggs +2029-06-25 slavic w1 feast3 fast3 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2029-06-26 slavic w2 feast4 fast3 exc1 rows=0,0 -> meat,fish,dairy,eggs +2029-06-27 slavic w3 feast0 fast3 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2029-06-28 slavic w4 feast2 fast3 exc1 rows=0,0 -> meat,fish,dairy,eggs +2029-06-29 slavic w5 feast6 fast1 exc2 rows=0,2 -> meat,dairy,eggs +2029-06-30 slavic w6 feast4 fast0 exc0 rows=0,0 -> - +2029-07-01 slavic w0 feast2 fast0 exc0 rows=0,0 -> - +2029-07-02 slavic w1 feast3 fast0 exc0 rows=0,0 -> - +2029-07-03 slavic w2 feast4 fast0 exc0 rows=0,0 -> - +2029-07-04 slavic w3 feast0 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2029-07-05 slavic w4 feast4 fast0 exc2 rows=0,2 -> - +2029-07-06 slavic w5 feast0 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2029-07-07 slavic w6 feast0 fast0 exc0 rows=0,0 -> - +2029-07-08 slavic w0 feast2 fast0 exc0 rows=0,0 -> - +2029-07-09 slavic w1 feast0 fast0 exc0 rows=0,0 -> - +2029-07-10 slavic w2 feast4 fast0 exc0 rows=0,0 -> - +2029-07-11 slavic w3 feast2 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2029-07-12 slavic w4 feast0 fast0 exc0 rows=0,0 -> - +2029-07-13 slavic w5 feast2 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2029-07-14 slavic w6 feast2 fast0 exc0 rows=0,0 -> - +2029-07-15 slavic w0 feast5 fast0 exc2 rows=0,0,2 -> - +2029-07-16 slavic w1 feast0 fast0 exc0 rows=0,0 -> - +2029-07-17 slavic w2 feast4 fast0 exc0 rows=0,0 -> - +2029-07-18 slavic w3 feast0 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2029-07-19 slavic w4 feast4 fast0 exc0 rows=0,0 -> - +2029-07-20 slavic w5 feast5 fast1 exc2 rows=0,2 -> meat,dairy,eggs +2029-07-21 slavic w6 feast0 fast0 exc0 rows=0,0 -> - +2029-07-22 slavic w0 feast2 fast0 exc0 rows=0,0 -> - +2029-07-23 slavic w1 feast0 fast0 exc0 rows=0,0 -> - +2029-07-24 slavic w2 feast4 fast0 exc0 rows=0,0 -> - +2029-07-25 slavic w3 feast3 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2029-07-26 slavic w4 feast4 fast0 exc2 rows=0,2 -> - +2029-07-27 slavic w5 feast2 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2029-07-28 slavic w6 feast0 fast0 exc0 rows=0,0 -> - +2029-07-29 slavic w0 feast0 fast0 exc0 rows=0,0 -> - +2029-07-30 slavic w1 feast0 fast0 exc0 rows=0,0 -> - +2029-07-31 slavic w2 feast2 fast0 exc0 rows=0,0 -> - +2029-08-01 slavic w3 feast3 fast4 exc0 rows=0,1 -> meat,fish,dairy,eggs,wine,oil +2029-08-02 slavic w4 feast3 fast4 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2029-08-03 slavic w5 feast3 fast4 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2029-08-04 slavic w6 feast0 fast4 exc1 rows=0,0 -> meat,fish,dairy,eggs +2029-08-05 slavic w0 feast2 fast4 exc1 rows=0,0 -> meat,fish,dairy,eggs +2029-08-06 slavic w1 feast8 fast4 exc4 rows=0,4 -> meat,dairy,eggs +2029-08-07 slavic w2 feast0 fast4 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2029-08-08 slavic w3 feast0 fast4 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2029-08-09 slavic w4 feast5 fast4 exc0 rows=0,4 -> meat,fish,dairy,eggs,wine,oil +2029-08-10 slavic w5 feast0 fast4 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2029-08-11 slavic w6 feast0 fast4 exc1 rows=0,0 -> meat,fish,dairy,eggs +2029-08-12 slavic w0 feast0 fast4 exc1 rows=0,0 -> meat,fish,dairy,eggs +2029-08-13 slavic w1 feast4 fast4 exc0 rows=0,4 -> meat,fish,dairy,eggs,wine,oil +2029-08-14 slavic w2 feast2 fast4 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2029-08-15 slavic w3 feast7 fast1 exc2 rows=0,2 -> meat,dairy,eggs +2029-08-16 slavic w4 feast5 fast0 exc1 rows=0,1 -> - +2029-08-17 slavic w5 feast0 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2029-08-18 slavic w6 feast0 fast0 exc0 rows=0,0 -> - +2029-08-19 slavic w0 feast0 fast0 exc0 rows=0,0 -> - +2029-08-20 slavic w1 feast0 fast0 exc0 rows=0,0 -> - +2029-08-21 slavic w2 feast3 fast0 exc0 rows=0,0 -> - +2029-08-22 slavic w3 feast0 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2029-08-23 slavic w4 feast0 fast0 exc0 rows=0,0 -> - +2029-08-24 slavic w5 feast3 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2029-08-25 slavic w6 feast2 fast0 exc0 rows=0,0 -> - +2029-08-26 slavic w0 feast4 fast0 exc0 rows=0,0 -> - +2029-08-27 slavic w1 feast0 fast0 exc0 rows=0,0 -> - +2029-08-28 slavic w2 feast4 fast0 exc1 rows=0,1 -> - +2029-08-29 slavic w3 feast6 fast1 exc8 rows=0,8 -> meat,fish,dairy,eggs +2029-08-30 slavic w4 feast4 fast0 exc0 rows=0,0 -> - +2029-08-31 slavic w5 feast3 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2029-09-01 slavic w6 feast4 fast0 exc1 rows=0,1 -> - +2029-09-02 slavic w0 feast0 fast0 exc0 rows=0,0 -> - +2029-09-03 slavic w1 feast0 fast0 exc0 rows=0,0 -> - +2029-09-04 slavic w2 feast0 fast0 exc0 rows=0,0 -> - +2029-09-05 slavic w3 feast2 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2029-09-06 slavic w4 feast2 fast0 exc0 rows=0,0 -> - +2029-09-07 slavic w5 feast3 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2029-09-08 slavic w6 feast7 fast0 exc2 rows=0,2 -> - +2029-09-09 slavic w0 feast3 fast0 exc0 rows=0,0,0 -> - +2029-09-10 slavic w1 feast0 fast0 exc0 rows=0,0 -> - +2029-09-11 slavic w2 feast4 fast0 exc0 rows=0,0 -> - +2029-09-12 slavic w3 feast0 fast1 exc1 rows=0,1 -> meat,fish,dairy,eggs +2029-09-13 slavic w4 feast3 fast0 exc1 rows=0,0,1 -> - +2029-09-14 slavic w5 feast8 fast1 exc8 rows=0,8 -> meat,fish,dairy,eggs +2029-09-15 slavic w6 feast2 fast0 exc0 rows=0,0,0 -> - +2029-09-16 slavic w0 feast2 fast0 exc0 rows=0,0,0 -> - +2029-09-17 slavic w1 feast0 fast0 exc0 rows=0,0 -> - +2029-09-18 slavic w2 feast0 fast0 exc0 rows=0,0 -> - +2029-09-19 slavic w3 feast3 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2029-09-20 slavic w4 feast3 fast0 exc0 rows=0,0 -> - +2029-09-21 slavic w5 feast4 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2029-09-22 slavic w6 feast2 fast0 exc0 rows=0,0 -> - +2029-09-23 slavic w0 feast3 fast0 exc1 rows=0,1 -> - +2029-09-24 slavic w1 feast4 fast0 exc2 rows=0,2 -> - +2029-09-25 slavic w2 feast4 fast0 exc2 rows=0,2 -> - +2029-09-26 slavic w3 feast5 fast1 exc2 rows=0,2 -> meat,dairy,eggs +2029-09-27 slavic w4 feast3 fast0 exc0 rows=0,0 -> - +2029-09-28 slavic w5 feast4 fast1 exc1 rows=0,1 -> meat,fish,dairy,eggs +2029-09-29 slavic w6 feast2 fast0 exc0 rows=0,0 -> - +2029-09-30 slavic w0 feast3 fast0 exc0 rows=0,0 -> - +2029-10-01 slavic w1 feast6 fast0 exc2 rows=0,2 -> - +2029-10-02 slavic w2 feast2 fast0 exc0 rows=0,0 -> - +2029-10-03 slavic w3 feast2 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2029-10-04 slavic w4 feast3 fast0 exc0 rows=0,0 -> - +2029-10-05 slavic w5 feast3 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2029-10-06 slavic w6 feast5 fast0 exc2 rows=0,2 -> - +2029-10-07 slavic w0 feast2 fast0 exc0 rows=0,0 -> - +2029-10-08 slavic w1 feast0 fast0 exc0 rows=0,0 -> - +2029-10-09 slavic w2 feast5 fast0 exc2 rows=0,2 -> - +2029-10-10 slavic w3 feast0 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2029-10-11 slavic w4 feast0 fast0 exc0 rows=0,0 -> - +2029-10-12 slavic w5 feast0 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2029-10-13 slavic w6 feast0 fast0 exc0 rows=0,0 -> - +2029-10-14 slavic w0 feast2 fast0 exc0 rows=0,0,0 -> - +2029-10-15 slavic w1 feast0 fast0 exc0 rows=0,0 -> - +2029-10-16 slavic w2 feast0 fast0 exc0 rows=0,0 -> - +2029-10-17 slavic w3 feast0 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2029-10-18 slavic w4 feast4 fast0 exc0 rows=0,0 -> - +2029-10-19 slavic w5 feast2 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2029-10-20 slavic w6 feast2 fast0 exc0 rows=0,0,0 -> - +2029-10-21 slavic w0 feast2 fast0 exc0 rows=0,0 -> - +2029-10-22 slavic w1 feast0 fast0 exc0 rows=0,0 -> - +2029-10-23 slavic w2 feast3 fast0 exc0 rows=0,0 -> - +2029-10-24 slavic w3 feast0 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2029-10-25 slavic w4 feast0 fast0 exc0 rows=0,0 -> - +2029-10-26 slavic w5 feast4 fast1 exc2 rows=0,2 -> meat,dairy,eggs +2029-10-27 slavic w6 feast0 fast0 exc0 rows=0,0 -> - +2029-10-28 slavic w0 feast3 fast0 exc0 rows=0,0 -> - +2029-10-29 slavic w1 feast3 fast0 exc0 rows=0,0 -> - +2029-10-30 slavic w2 feast0 fast0 exc0 rows=0,0 -> - +2029-10-31 slavic w3 feast0 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2029-11-01 slavic w4 feast2 fast0 exc0 rows=0,0 -> - +2029-11-02 slavic w5 feast0 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2029-11-03 slavic w6 feast0 fast0 exc0 rows=0,0 -> - +2029-11-04 slavic w0 feast0 fast0 exc0 rows=0,0,0 -> - +2029-11-05 slavic w1 feast3 fast0 exc0 rows=0,0 -> - +2029-11-06 slavic w2 feast2 fast0 exc0 rows=0,0 -> - +2029-11-07 slavic w3 feast0 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2029-11-08 slavic w4 feast5 fast0 exc2 rows=0,2 -> - +2029-11-09 slavic w5 feast0 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2029-11-10 slavic w6 feast0 fast0 exc0 rows=0,0 -> - +2029-11-11 slavic w0 feast0 fast0 exc0 rows=0,0 -> - +2029-11-12 slavic w1 feast2 fast0 exc0 rows=0,0 -> - +2029-11-13 slavic w2 feast5 fast0 exc2 rows=0,2 -> - +2029-11-14 slavic w3 feast4 fast1 exc1 rows=0,1 -> meat,fish,dairy,eggs +2029-11-15 slavic w4 feast0 fast5 exc1 rows=0,0 -> meat,fish,dairy,eggs +2029-11-16 slavic w5 feast6 fast5 exc2 rows=0,2 -> meat,dairy,eggs +2029-11-17 slavic w6 feast3 fast5 exc2 rows=0,0 -> meat,dairy,eggs +2029-11-18 slavic w0 feast0 fast5 exc2 rows=0,0 -> meat,dairy,eggs +2029-11-19 slavic w1 feast3 fast5 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2029-11-20 slavic w2 feast0 fast5 exc1 rows=0,0 -> meat,fish,dairy,eggs +2029-11-21 slavic w3 feast7 fast5 exc2 rows=0,2 -> meat,dairy,eggs +2029-11-22 slavic w4 feast2 fast5 exc1 rows=0,0 -> meat,fish,dairy,eggs +2029-11-23 slavic w5 feast3 fast5 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2029-11-24 slavic w6 feast2 fast5 exc2 rows=0,0 -> meat,dairy,eggs +2029-11-25 slavic w0 feast0 fast5 exc2 rows=0,1 -> meat,dairy,eggs +2029-11-26 slavic w1 feast0 fast5 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2029-11-27 slavic w2 feast2 fast5 exc1 rows=0,0 -> meat,fish,dairy,eggs +2029-11-28 slavic w3 feast2 fast5 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2029-11-29 slavic w4 feast0 fast5 exc1 rows=0,0 -> meat,fish,dairy,eggs +2029-11-30 slavic w5 feast4 fast5 exc2 rows=0,2 -> meat,dairy,eggs +2029-12-01 slavic w6 feast0 fast5 exc2 rows=0,0 -> meat,dairy,eggs +2029-12-02 slavic w0 feast0 fast5 exc2 rows=0,0 -> meat,dairy,eggs +2029-12-03 slavic w1 feast3 fast5 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2029-12-04 slavic w2 feast0 fast5 exc1 rows=0,0 -> meat,fish,dairy,eggs +2029-12-05 slavic w3 feast4 fast5 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2029-12-06 slavic w4 feast5 fast5 exc2 rows=0,2 -> meat,dairy,eggs +2029-12-07 slavic w5 feast3 fast5 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2029-12-08 slavic w6 feast0 fast5 exc2 rows=0,0 -> meat,dairy,eggs +2029-12-09 slavic w0 feast3 fast5 exc2 rows=0,0 -> meat,dairy,eggs +2029-12-10 slavic w1 feast0 fast5 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2029-12-11 slavic w2 feast0 fast5 exc1 rows=0,0 -> meat,fish,dairy,eggs +2029-12-12 slavic w3 feast2 fast5 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2029-12-13 slavic w4 feast5 fast5 exc2 rows=0,2 -> meat,dairy,eggs +2029-12-14 slavic w5 feast0 fast5 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2029-12-15 slavic w6 feast2 fast5 exc2 rows=0,0 -> meat,dairy,eggs +2029-12-16 slavic w0 feast0 fast5 exc2 rows=0,0,0 -> meat,dairy,eggs +2029-12-17 slavic w1 feast2 fast5 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2029-12-18 slavic w2 feast0 fast5 exc1 rows=0,0 -> meat,fish,dairy,eggs +2029-12-19 slavic w3 feast0 fast5 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2029-12-20 slavic w4 feast4 fast5 exc1 rows=0,0 -> meat,fish,dairy,eggs +2029-12-21 slavic w5 feast0 fast5 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2029-12-22 slavic w6 feast0 fast5 exc1 rows=0,0,0 -> meat,fish,dairy,eggs +2029-12-23 slavic w0 feast0 fast5 exc1 rows=0,0,0 -> meat,fish,dairy,eggs +2029-12-24 slavic w1 feast0 fast5 exc9 rows=0,0,9 -> meat,fish,dairy,eggs,wine,oil +2029-12-25 slavic w2 feast8 fast0 exc11 rows=0,11 -> - +2029-12-26 slavic w3 feast3 fast0 exc11 rows=0,11 -> - +2029-12-27 slavic w4 feast2 fast0 exc11 rows=0,11 -> - +2029-12-28 slavic w5 feast0 fast0 exc11 rows=0,11 -> - +2029-12-29 slavic w6 feast0 fast0 exc11 rows=0,0,11 -> - +2029-12-30 slavic w0 feast0 fast0 exc11 rows=0,0,11 -> - +2029-12-31 slavic w1 feast0 fast0 exc11 rows=0,11 -> - +2025-01-01 greek w3 feast6 fast0 exc11 rows=0,11 -> - +2025-01-02 greek w4 feast4 fast0 exc11 rows=0,11 -> - +2025-01-03 greek w5 feast0 fast0 exc11 rows=0,0,11 -> - +2025-01-04 greek w6 feast0 fast0 exc11 rows=0,0,11 -> - +2025-01-05 greek w0 feast0 fast1 exc1 rows=0,0,9 -> meat,fish,dairy,eggs +2025-01-06 greek w1 feast8 fast0 exc11 rows=0,11 -> - +2025-01-07 greek w2 feast3 fast0 exc2 rows=0,2 -> - +2025-01-08 greek w3 feast0 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2025-01-09 greek w4 feast4 fast0 exc0 rows=0,0 -> - +2025-01-10 greek w5 feast0 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2025-01-11 greek w6 feast4 fast0 exc0 rows=0,0,0 -> - +2025-01-12 greek w0 feast3 fast0 exc0 rows=0,0,0 -> - +2025-01-13 greek w1 feast0 fast0 exc0 rows=0,0 -> - +2025-01-14 greek w2 feast4 fast0 exc0 rows=0,0 -> - +2025-01-15 greek w3 feast2 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2025-01-16 greek w4 feast2 fast0 exc0 rows=0,0 -> - +2025-01-17 greek w5 feast5 fast1 exc2 rows=0,2 -> meat,dairy,eggs +2025-01-18 greek w6 feast2 fast0 exc0 rows=0,0 -> - +2025-01-19 greek w0 feast2 fast0 exc0 rows=0,0 -> - +2025-01-20 greek w1 feast5 fast0 exc2 rows=0,2 -> - +2025-01-21 greek w2 feast0 fast0 exc0 rows=0,0 -> - +2025-01-22 greek w3 feast0 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2025-01-23 greek w4 feast0 fast0 exc0 rows=0,0 -> - +2025-01-24 greek w5 feast4 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2025-01-25 greek w6 feast4 fast0 exc0 rows=0,0 -> - +2025-01-26 greek w0 feast5 fast0 exc0 rows=0,0,0 -> - +2025-01-27 greek w1 feast4 fast0 exc0 rows=0,0 -> - +2025-01-28 greek w2 feast2 fast0 exc0 rows=0,0 -> - +2025-01-29 greek w3 feast2 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2025-01-30 greek w4 feast5 fast0 exc2 rows=0,2 -> - +2025-01-31 greek w5 feast3 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2025-02-01 greek w6 feast2 fast0 exc0 rows=0,0 -> - +2025-02-02 greek w0 feast8 fast0 exc2 rows=0,2 -> - +2025-02-03 greek w1 feast2 fast0 exc0 rows=0,0 -> - +2025-02-04 greek w2 feast0 fast0 exc0 rows=0,0 -> - +2025-02-05 greek w3 feast0 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2025-02-06 greek w4 feast0 fast0 exc0 rows=0,0 -> - +2025-02-07 greek w5 feast0 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2025-02-08 greek w6 feast2 fast0 exc0 rows=0,0 -> - +2025-02-09 greek w0 feast4 fast0 exc11 rows=0,11 -> - +2025-02-10 greek w1 feast0 fast0 exc11 rows=0,11 -> - +2025-02-11 greek w2 feast3 fast0 exc11 rows=0,11 -> - +2025-02-12 greek w3 feast4 fast0 exc11 rows=0,11 -> - +2025-02-13 greek w4 feast0 fast0 exc11 rows=0,11 -> - +2025-02-14 greek w5 feast4 fast0 exc11 rows=0,11 -> - +2025-02-15 greek w6 feast0 fast0 exc11 rows=0,11 -> - +2025-02-16 greek w0 feast0 fast0 exc0 rows=0,0 -> - +2025-02-17 greek w1 feast4 fast0 exc0 rows=0,0 -> - +2025-02-18 greek w2 feast0 fast0 exc0 rows=0,0 -> - +2025-02-19 greek w3 feast0 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2025-02-20 greek w4 feast0 fast0 exc0 rows=0,0 -> - +2025-02-21 greek w5 feast0 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2025-02-22 greek w6 feast0 fast0 exc0 rows=0,0 -> - +2025-02-23 greek w0 feast0 fast0 exc0 rows=0,0 -> - +2025-02-24 greek w1 feast4 fast1 exc7 rows=1,7 -> meat +2025-02-25 greek w2 feast0 fast1 exc7 rows=0,7 -> meat +2025-02-26 greek w3 feast0 fast1 exc7 rows=0,7 -> meat +2025-02-27 greek w4 feast0 fast1 exc7 rows=7 -> meat +2025-02-28 greek w5 feast0 fast1 exc7 rows=0,7 -> meat +2025-03-01 greek w6 feast0 fast1 exc7 rows=0,7 -> meat +2025-03-02 greek w0 feast3 fast1 exc7 rows=0,7 -> meat +2025-03-03 greek w1 feast0 fast2 exc10 rows=0,10 -> meat,fish,dairy,eggs,wine,oil +2025-03-04 greek w2 feast4 fast2 exc10 rows=0,10 -> meat,fish,dairy,eggs,wine,oil +2025-03-05 greek w3 feast1 fast2 exc10 rows=0,10 -> meat,fish,dairy,eggs,wine,oil +2025-03-06 greek w4 feast0 fast2 exc10 rows=0,10 -> meat,fish,dairy,eggs,wine,oil +2025-03-07 greek w5 feast1 fast2 exc10 rows=0,10 -> meat,fish,dairy,eggs,wine,oil +2025-03-08 greek w6 feast0 fast2 exc3 rows=0,3 -> meat,fish,dairy,eggs +2025-03-09 greek w0 feast4 fast2 exc3 rows=1,3 -> meat,fish,dairy,eggs +2025-03-10 greek w1 feast0 fast2 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2025-03-11 greek w2 feast3 fast2 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2025-03-12 greek w3 feast1 fast2 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2025-03-13 greek w4 feast0 fast2 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2025-03-14 greek w5 feast1 fast2 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2025-03-15 greek w6 feast0 fast2 exc3 rows=0,3 -> meat,fish,dairy,eggs +2025-03-16 greek w0 feast0 fast2 exc3 rows=0,3 -> meat,fish,dairy,eggs +2025-03-17 greek w1 feast3 fast2 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2025-03-18 greek w2 feast2 fast2 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2025-03-19 greek w3 feast1 fast2 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2025-03-20 greek w4 feast0 fast2 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2025-03-21 greek w5 feast1 fast2 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2025-03-22 greek w6 feast0 fast2 exc3 rows=0,3 -> meat,fish,dairy,eggs +2025-03-23 greek w0 feast0 fast2 exc3 rows=0,3 -> meat,fish,dairy,eggs +2025-03-24 greek w1 feast0 fast2 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2025-03-25 greek w2 feast7 fast2 exc4 rows=0,4 -> meat,dairy,eggs +2025-03-26 greek w3 feast3 fast2 exc3 rows=0,3 -> meat,fish,dairy,eggs +2025-03-27 greek w4 feast0 fast2 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2025-03-28 greek w5 feast1 fast2 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2025-03-29 greek w6 feast0 fast2 exc3 rows=0,3 -> meat,fish,dairy,eggs +2025-03-30 greek w0 feast0 fast2 exc3 rows=0,3 -> meat,fish,dairy,eggs +2025-03-31 greek w1 feast0 fast2 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2025-04-01 greek w2 feast3 fast2 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2025-04-02 greek w3 feast1 fast2 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2025-04-03 greek w4 feast0 fast2 exc3 rows=0,3 -> meat,fish,dairy,eggs +2025-04-04 greek w5 feast1 fast2 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2025-04-05 greek w6 feast0 fast2 exc3 rows=0,3 -> meat,fish,dairy,eggs +2025-04-06 greek w0 feast4 fast2 exc3 rows=0,3 -> meat,fish,dairy,eggs +2025-04-07 greek w1 feast4 fast2 exc1 rows=0,1 -> meat,fish,dairy,eggs +2025-04-08 greek w2 feast0 fast2 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2025-04-09 greek w3 feast1 fast2 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2025-04-10 greek w4 feast0 fast2 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2025-04-11 greek w5 feast1 fast2 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2025-04-12 greek w6 feast0 fast2 exc6 rows=0,6 -> meat,fish,dairy,eggs +2025-04-13 greek w0 feast8 fast2 exc4 rows=0,4 -> meat,dairy,eggs +2025-04-14 greek w1 feast1 fast2 exc10 rows=0,10 -> meat,fish,dairy,eggs,wine,oil +2025-04-15 greek w2 feast1 fast2 exc10 rows=0,10 -> meat,fish,dairy,eggs,wine,oil +2025-04-16 greek w3 feast1 fast2 exc10 rows=0,10 -> meat,fish,dairy,eggs,wine,oil +2025-04-17 greek w4 feast3 fast2 exc3 rows=0,3 -> meat,fish,dairy,eggs +2025-04-18 greek w5 feast0 fast2 exc9 rows=0,9 -> meat,fish,dairy,eggs,wine,oil +2025-04-19 greek w6 feast3 fast2 exc5 rows=0,5 -> meat,fish,dairy,eggs,oil +2025-04-20 greek w0 feast8 fast0 exc11 rows=0,11 -> - +2025-04-21 greek w1 feast0 fast0 exc11 rows=0,11 -> - +2025-04-22 greek w2 feast0 fast0 exc11 rows=0,11 -> - +2025-04-23 greek w3 feast5 fast0 exc11 rows=1,11 -> - +2025-04-24 greek w4 feast0 fast0 exc11 rows=0,11 -> - +2025-04-25 greek w5 feast4 fast0 exc11 rows=1,11 -> - +2025-04-26 greek w6 feast3 fast0 exc11 rows=0,11 -> - +2025-04-27 greek w0 feast2 fast0 exc0 rows=0,0 -> - +2025-04-28 greek w1 feast0 fast0 exc0 rows=0,0 -> - +2025-04-29 greek w2 feast0 fast0 exc0 rows=0,0 -> - +2025-04-30 greek w3 feast4 fast1 exc1 rows=0,1 -> meat,fish,dairy,eggs +2025-05-01 greek w4 feast3 fast0 exc0 rows=0,0 -> - +2025-05-02 greek w5 feast0 fast1 exc1 rows=0,1 -> meat,fish,dairy,eggs +2025-05-03 greek w6 feast0 fast0 exc0 rows=0,0 -> - +2025-05-04 greek w0 feast0 fast0 exc0 rows=0,0 -> - +2025-05-05 greek w1 feast0 fast0 exc0 rows=0,0 -> - +2025-05-06 greek w2 feast0 fast0 exc0 rows=0,0 -> - +2025-05-07 greek w3 feast0 fast0 exc11 rows=1,11 -> - +2025-05-08 greek w4 feast5 fast0 exc2 rows=0,2 -> - +2025-05-09 greek w5 feast4 fast1 exc1 rows=0,1 -> meat,fish,dairy,eggs +2025-05-10 greek w6 feast4 fast0 exc0 rows=0,0 -> - +2025-05-11 greek w0 feast0 fast0 exc11 rows=0,11 -> - +2025-05-12 greek w1 feast0 fast0 exc0 rows=0,0 -> - +2025-05-13 greek w2 feast0 fast0 exc0 rows=0,0 -> - +2025-05-14 greek w3 feast2 fast1 exc2 rows=0,2 -> meat,dairy,eggs +2025-05-15 greek w4 feast3 fast0 exc0 rows=0,0 -> - +2025-05-16 greek w5 feast3 fast1 exc1 rows=0,1 -> meat,fish,dairy,eggs +2025-05-17 greek w6 feast0 fast0 exc0 rows=0,0 -> - +2025-05-18 greek w0 feast0 fast0 exc0 rows=0,0 -> - +2025-05-19 greek w1 feast4 fast0 exc0 rows=0,0 -> - +2025-05-20 greek w2 feast3 fast0 exc0 rows=0,0 -> - +2025-05-21 greek w3 feast4 fast1 exc1 rows=0,1 -> meat,fish,dairy,eggs +2025-05-22 greek w4 feast0 fast0 exc0 rows=0,0 -> - +2025-05-23 greek w5 feast3 fast1 exc1 rows=0,1 -> meat,fish,dairy,eggs +2025-05-24 greek w6 feast3 fast0 exc0 rows=0,0 -> - +2025-05-25 greek w0 feast4 fast0 exc0 rows=0,0 -> - +2025-05-26 greek w1 feast2 fast0 exc0 rows=0,0 -> - +2025-05-27 greek w2 feast3 fast0 exc0 rows=0,0 -> - +2025-05-28 greek w3 feast2 fast1 exc2 rows=0,2 -> meat,dairy,eggs +2025-05-29 greek w4 feast8 fast0 exc0 rows=0,0 -> - +2025-05-30 greek w5 feast0 fast1 exc1 rows=0,1 -> meat,fish,dairy,eggs +2025-05-31 greek w6 feast0 fast0 exc0 rows=0,0 -> - +2025-06-01 greek w0 feast0 fast0 exc0 rows=0,0 -> - +2025-06-02 greek w1 feast0 fast0 exc0 rows=0,0 -> - +2025-06-03 greek w2 feast0 fast0 exc0 rows=0,0 -> - +2025-06-04 greek w3 feast0 fast1 exc1 rows=0,1 -> meat,fish,dairy,eggs +2025-06-05 greek w4 feast0 fast0 exc0 rows=0,0 -> - +2025-06-06 greek w5 feast0 fast1 exc1 rows=0,1 -> meat,fish,dairy,eggs +2025-06-07 greek w6 feast0 fast0 exc0 rows=0,0 -> - +2025-06-08 greek w0 feast8 fast0 exc0 rows=0,0 -> - +2025-06-09 greek w1 feast3 fast0 exc11 rows=0,11 -> - +2025-06-10 greek w2 feast4 fast0 exc11 rows=0,11 -> - +2025-06-11 greek w3 feast4 fast0 exc11 rows=0,11 -> - +2025-06-12 greek w4 feast2 fast0 exc11 rows=0,11 -> - +2025-06-13 greek w5 feast0 fast0 exc11 rows=0,11 -> - +2025-06-14 greek w6 feast0 fast0 exc11 rows=0,11 -> - +2025-06-15 greek w0 feast4 fast0 exc0 rows=0,0 -> - +2025-06-16 greek w1 feast4 fast3 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2025-06-17 greek w2 feast0 fast3 exc1 rows=0,0 -> meat,fish,dairy,eggs +2025-06-18 greek w3 feast0 fast3 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2025-06-19 greek w4 feast4 fast3 exc1 rows=0,0 -> meat,fish,dairy,eggs +2025-06-20 greek w5 feast0 fast3 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2025-06-21 greek w6 feast0 fast3 exc2 rows=0,0 -> meat,dairy,eggs +2025-06-22 greek w0 feast0 fast3 exc2 rows=0,0 -> meat,dairy,eggs +2025-06-23 greek w1 feast0 fast3 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2025-06-24 greek w2 feast6 fast3 exc2 rows=0,2 -> meat,dairy,eggs +2025-06-25 greek w3 feast3 fast3 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2025-06-26 greek w4 feast4 fast3 exc1 rows=0,0 -> meat,fish,dairy,eggs +2025-06-27 greek w5 feast0 fast3 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2025-06-28 greek w6 feast2 fast3 exc2 rows=0,0 -> meat,dairy,eggs +2025-06-29 greek w0 feast6 fast0 exc2 rows=0,2 -> - +2025-06-30 greek w1 feast4 fast0 exc0 rows=0,0 -> - +2025-07-01 greek w2 feast2 fast0 exc0 rows=0,0 -> - +2025-07-02 greek w3 feast3 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2025-07-03 greek w4 feast4 fast0 exc0 rows=0,0 -> - +2025-07-04 greek w5 feast0 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2025-07-05 greek w6 feast0 fast0 exc0 rows=0,0 -> - +2025-07-06 greek w0 feast0 fast0 exc0 rows=0,0 -> - +2025-07-07 greek w1 feast0 fast0 exc0 rows=0,0 -> - +2025-07-08 greek w2 feast2 fast0 exc0 rows=0,0 -> - +2025-07-09 greek w3 feast0 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2025-07-10 greek w4 feast0 fast0 exc0 rows=0,0 -> - +2025-07-11 greek w5 feast2 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2025-07-12 greek w6 feast0 fast0 exc0 rows=0,0 -> - +2025-07-13 greek w0 feast2 fast0 exc0 rows=0,0,0 -> - +2025-07-14 greek w1 feast2 fast0 exc0 rows=0,0 -> - +2025-07-15 greek w2 feast0 fast0 exc0 rows=0,0 -> - +2025-07-16 greek w3 feast0 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2025-07-17 greek w4 feast4 fast0 exc0 rows=0,0 -> - +2025-07-18 greek w5 feast0 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2025-07-19 greek w6 feast0 fast0 exc0 rows=0,0 -> - +2025-07-20 greek w0 feast5 fast0 exc2 rows=0,2 -> - +2025-07-21 greek w1 feast0 fast0 exc0 rows=0,0 -> - +2025-07-22 greek w2 feast2 fast0 exc0 rows=0,0 -> - +2025-07-23 greek w3 feast0 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2025-07-24 greek w4 feast0 fast0 exc0 rows=0,0 -> - +2025-07-25 greek w5 feast3 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2025-07-26 greek w6 feast0 fast0 exc11 rows=0,11 -> - +2025-07-27 greek w0 feast2 fast0 exc0 rows=0,0 -> - +2025-07-28 greek w1 feast0 fast0 exc0 rows=0,0 -> - +2025-07-29 greek w2 feast0 fast0 exc0 rows=0,0 -> - +2025-07-30 greek w3 feast0 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2025-07-31 greek w4 feast2 fast0 exc0 rows=0,0 -> - +2025-08-01 greek w5 feast3 fast4 exc0 rows=0,1 -> meat,fish,dairy,eggs,wine,oil +2025-08-02 greek w6 feast3 fast4 exc1 rows=0,0 -> meat,fish,dairy,eggs +2025-08-03 greek w0 feast3 fast4 exc1 rows=0,0 -> meat,fish,dairy,eggs +2025-08-04 greek w1 feast0 fast4 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2025-08-05 greek w2 feast2 fast4 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2025-08-06 greek w3 feast8 fast4 exc4 rows=0,4 -> meat,dairy,eggs +2025-08-07 greek w4 feast0 fast4 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2025-08-08 greek w5 feast0 fast4 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2025-08-09 greek w6 feast0 fast4 exc1 rows=0,0 -> meat,fish,dairy,eggs +2025-08-10 greek w0 feast0 fast4 exc1 rows=0,0 -> meat,fish,dairy,eggs +2025-08-11 greek w1 feast0 fast4 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2025-08-12 greek w2 feast0 fast4 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2025-08-13 greek w3 feast4 fast4 exc0 rows=0,4 -> meat,fish,dairy,eggs,wine,oil +2025-08-14 greek w4 feast2 fast4 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2025-08-15 greek w5 feast7 fast1 exc2 rows=0,2 -> meat,dairy,eggs +2025-08-16 greek w6 feast5 fast0 exc1 rows=0,1 -> - +2025-08-17 greek w0 feast0 fast0 exc0 rows=0,0 -> - +2025-08-18 greek w1 feast0 fast0 exc0 rows=0,0 -> - +2025-08-19 greek w2 feast0 fast0 exc0 rows=0,0 -> - +2025-08-20 greek w3 feast0 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2025-08-21 greek w4 feast3 fast0 exc0 rows=0,0 -> - +2025-08-22 greek w5 feast0 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2025-08-23 greek w6 feast0 fast0 exc0 rows=0,0 -> - +2025-08-24 greek w0 feast3 fast0 exc0 rows=0,0 -> - +2025-08-25 greek w1 feast2 fast0 exc0 rows=0,0 -> - +2025-08-26 greek w2 feast4 fast0 exc0 rows=0,0 -> - +2025-08-27 greek w3 feast0 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2025-08-28 greek w4 feast0 fast0 exc0 rows=0,0 -> - +2025-08-29 greek w5 feast6 fast1 exc8 rows=0,8 -> meat,fish,dairy,eggs +2025-08-30 greek w6 feast4 fast0 exc0 rows=0,0 -> - +2025-08-31 greek w0 feast3 fast0 exc0 rows=0,0 -> - +2025-09-01 greek w1 feast4 fast0 exc1 rows=0,1 -> - +2025-09-02 greek w2 feast0 fast0 exc0 rows=0,0 -> - +2025-09-03 greek w3 feast0 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2025-09-04 greek w4 feast0 fast0 exc0 rows=0,0 -> - +2025-09-05 greek w5 feast2 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2025-09-06 greek w6 feast2 fast0 exc0 rows=0,0 -> - +2025-09-07 greek w0 feast3 fast0 exc0 rows=0,0,0 -> - +2025-09-08 greek w1 feast7 fast0 exc2 rows=0,2 -> - +2025-09-09 greek w2 feast3 fast0 exc0 rows=0,0 -> - +2025-09-10 greek w3 feast0 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2025-09-11 greek w4 feast4 fast0 exc0 rows=0,0 -> - +2025-09-12 greek w5 feast0 fast1 exc1 rows=0,1 -> meat,fish,dairy,eggs +2025-09-13 greek w6 feast3 fast0 exc1 rows=0,0,1 -> - +2025-09-14 greek w0 feast8 fast1 exc8 rows=0,8 -> meat,fish,dairy,eggs +2025-09-15 greek w1 feast2 fast0 exc0 rows=0,0 -> - +2025-09-16 greek w2 feast2 fast0 exc0 rows=0,0 -> - +2025-09-17 greek w3 feast0 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2025-09-18 greek w4 feast0 fast0 exc0 rows=0,0 -> - +2025-09-19 greek w5 feast3 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2025-09-20 greek w6 feast3 fast0 exc0 rows=0,0,0 -> - +2025-09-21 greek w0 feast4 fast0 exc0 rows=0,0,0 -> - +2025-09-22 greek w1 feast2 fast0 exc0 rows=0,0 -> - +2025-09-23 greek w2 feast3 fast0 exc1 rows=0,1 -> - +2025-09-24 greek w3 feast4 fast1 exc2 rows=0,2 -> meat,dairy,eggs +2025-09-25 greek w4 feast0 fast0 exc0 rows=0,0 -> - +2025-09-26 greek w5 feast5 fast1 exc2 rows=0,2 -> meat,dairy,eggs +2025-09-27 greek w6 feast3 fast0 exc0 rows=0,0 -> - +2025-09-28 greek w0 feast4 fast0 exc1 rows=0,1 -> - +2025-09-29 greek w1 feast2 fast0 exc0 rows=0,0 -> - +2025-09-30 greek w2 feast3 fast0 exc0 rows=0,0 -> - +2025-10-01 greek w3 feast0 fast0 exc11 rows=0,11 -> - +2025-10-02 greek w4 feast2 fast0 exc0 rows=0,0 -> - +2025-10-03 greek w5 feast2 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2025-10-04 greek w6 feast3 fast0 exc0 rows=0,0 -> - +2025-10-05 greek w0 feast3 fast0 exc0 rows=0,0 -> - +2025-10-06 greek w1 feast5 fast0 exc2 rows=0,2 -> - +2025-10-07 greek w2 feast2 fast0 exc0 rows=0,0 -> - +2025-10-08 greek w3 feast0 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2025-10-09 greek w4 feast5 fast0 exc2 rows=0,2 -> - +2025-10-10 greek w5 feast0 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2025-10-11 greek w6 feast0 fast0 exc0 rows=0,0 -> - +2025-10-12 greek w0 feast0 fast0 exc0 rows=0,0,0 -> - +2025-10-13 greek w1 feast0 fast0 exc0 rows=0,0 -> - +2025-10-14 greek w2 feast2 fast0 exc0 rows=0,0 -> - +2025-10-15 greek w3 feast0 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2025-10-16 greek w4 feast0 fast0 exc0 rows=0,0 -> - +2025-10-17 greek w5 feast0 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2025-10-18 greek w6 feast4 fast0 exc0 rows=0,0 -> - +2025-10-19 greek w0 feast2 fast0 exc0 rows=0,0 -> - +2025-10-20 greek w1 feast2 fast0 exc0 rows=0,0 -> - +2025-10-21 greek w2 feast2 fast0 exc0 rows=0,0 -> - +2025-10-22 greek w3 feast0 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2025-10-23 greek w4 feast3 fast0 exc0 rows=0,0 -> - +2025-10-24 greek w5 feast0 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2025-10-25 greek w6 feast0 fast0 exc0 rows=0,0,0 -> - +2025-10-26 greek w0 feast4 fast0 exc2 rows=0,2 -> - +2025-10-27 greek w1 feast0 fast0 exc0 rows=0,0 -> - +2025-10-28 greek w2 feast3 fast0 exc0 rows=0,0 -> - +2025-10-29 greek w3 feast3 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2025-10-30 greek w4 feast0 fast0 exc0 rows=0,0 -> - +2025-10-31 greek w5 feast0 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2025-11-01 greek w6 feast5 fast0 exc2 rows=0,0,2 -> - +2025-11-02 greek w0 feast0 fast0 exc0 rows=0,0,0 -> - +2025-11-03 greek w1 feast0 fast0 exc0 rows=0,0 -> - +2025-11-04 greek w2 feast0 fast0 exc0 rows=0,0 -> - +2025-11-05 greek w3 feast3 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2025-11-06 greek w4 feast2 fast0 exc0 rows=0,0 -> - +2025-11-07 greek w5 feast0 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2025-11-08 greek w6 feast5 fast0 exc2 rows=0,2 -> - +2025-11-09 greek w0 feast0 fast0 exc0 rows=0,0 -> - +2025-11-10 greek w1 feast0 fast0 exc0 rows=0,0 -> - +2025-11-11 greek w2 feast0 fast0 exc0 rows=0,0 -> - +2025-11-12 greek w3 feast2 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2025-11-13 greek w4 feast5 fast0 exc2 rows=0,2 -> - +2025-11-14 greek w5 feast4 fast1 exc1 rows=0,1 -> meat,fish,dairy,eggs +2025-11-15 greek w6 feast0 fast5 exc2 rows=0,0 -> meat,dairy,eggs +2025-11-16 greek w0 feast6 fast5 exc2 rows=0,2 -> meat,dairy,eggs +2025-11-17 greek w1 feast3 fast5 exc2 rows=0,0 -> meat,dairy,eggs +2025-11-18 greek w2 feast0 fast5 exc2 rows=0,0 -> meat,dairy,eggs +2025-11-19 greek w3 feast3 fast5 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2025-11-20 greek w4 feast0 fast5 exc2 rows=0,0 -> meat,dairy,eggs +2025-11-21 greek w5 feast7 fast5 exc2 rows=0,2 -> meat,dairy,eggs +2025-11-22 greek w6 feast2 fast5 exc2 rows=0,0 -> meat,dairy,eggs +2025-11-23 greek w0 feast0 fast5 exc2 rows=0,0 -> meat,dairy,eggs +2025-11-24 greek w1 feast2 fast5 exc2 rows=0,0 -> meat,dairy,eggs +2025-11-25 greek w2 feast0 fast5 exc2 rows=0,1 -> meat,dairy,eggs +2025-11-26 greek w3 feast0 fast5 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2025-11-27 greek w4 feast2 fast5 exc2 rows=0,0 -> meat,dairy,eggs +2025-11-28 greek w5 feast2 fast5 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2025-11-29 greek w6 feast0 fast5 exc2 rows=0,0 -> meat,dairy,eggs +2025-11-30 greek w0 feast4 fast5 exc2 rows=0,2 -> meat,dairy,eggs +2025-12-01 greek w1 feast0 fast5 exc2 rows=0,0 -> meat,dairy,eggs +2025-12-02 greek w2 feast0 fast5 exc2 rows=0,0 -> meat,dairy,eggs +2025-12-03 greek w3 feast3 fast5 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2025-12-04 greek w4 feast0 fast5 exc2 rows=0,0 -> meat,dairy,eggs +2025-12-05 greek w5 feast4 fast5 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2025-12-06 greek w6 feast5 fast5 exc2 rows=0,2 -> meat,dairy,eggs +2025-12-07 greek w0 feast3 fast5 exc2 rows=0,0 -> meat,dairy,eggs +2025-12-08 greek w1 feast0 fast5 exc2 rows=0,0 -> meat,dairy,eggs +2025-12-09 greek w2 feast3 fast5 exc2 rows=0,0 -> meat,dairy,eggs +2025-12-10 greek w3 feast0 fast5 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2025-12-11 greek w4 feast0 fast5 exc2 rows=0,0 -> meat,dairy,eggs +2025-12-12 greek w5 feast2 fast5 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2025-12-13 greek w6 feast0 fast5 exc1 rows=0,1 -> meat,fish,dairy,eggs +2025-12-14 greek w0 feast0 fast5 exc1 rows=0,0,0 -> meat,fish,dairy,eggs +2025-12-15 greek w1 feast2 fast5 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2025-12-16 greek w2 feast0 fast5 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2025-12-17 greek w3 feast2 fast5 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2025-12-18 greek w4 feast0 fast5 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2025-12-19 greek w5 feast0 fast5 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2025-12-20 greek w6 feast0 fast5 exc1 rows=0,0,0 -> meat,fish,dairy,eggs +2025-12-21 greek w0 feast0 fast5 exc1 rows=0,0,0 -> meat,fish,dairy,eggs +2025-12-22 greek w1 feast0 fast5 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2025-12-23 greek w2 feast0 fast5 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2025-12-24 greek w3 feast0 fast5 exc1 rows=0,0,9 -> meat,fish,dairy,eggs +2025-12-25 greek w4 feast8 fast0 exc11 rows=0,11 -> - +2025-12-26 greek w5 feast3 fast0 exc11 rows=0,11 -> - +2025-12-27 greek w6 feast2 fast0 exc11 rows=0,0,11 -> - +2025-12-28 greek w0 feast0 fast0 exc11 rows=0,0,11 -> - +2025-12-29 greek w1 feast0 fast0 exc11 rows=0,11 -> - +2025-12-30 greek w2 feast0 fast0 exc11 rows=0,11 -> - +2025-12-31 greek w3 feast0 fast0 exc11 rows=0,11 -> - +2026-01-01 greek w4 feast6 fast0 exc11 rows=0,11 -> - +2026-01-02 greek w5 feast4 fast0 exc11 rows=0,11 -> - +2026-01-03 greek w6 feast0 fast0 exc11 rows=0,0,11 -> - +2026-01-04 greek w0 feast0 fast0 exc11 rows=0,0,11 -> - +2026-01-05 greek w1 feast0 fast1 exc9 rows=0,0,9 -> meat,fish,dairy,eggs,wine,oil +2026-01-06 greek w2 feast8 fast0 exc11 rows=0,11 -> - +2026-01-07 greek w3 feast3 fast1 exc2 rows=0,2 -> meat,dairy,eggs +2026-01-08 greek w4 feast0 fast0 exc0 rows=0,0 -> - +2026-01-09 greek w5 feast4 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2026-01-10 greek w6 feast0 fast0 exc0 rows=0,0,0 -> - +2026-01-11 greek w0 feast4 fast0 exc0 rows=0,0,0 -> - +2026-01-12 greek w1 feast3 fast0 exc0 rows=0,0 -> - +2026-01-13 greek w2 feast0 fast0 exc0 rows=0,0 -> - +2026-01-14 greek w3 feast4 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2026-01-15 greek w4 feast2 fast0 exc0 rows=0,0 -> - +2026-01-16 greek w5 feast2 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2026-01-17 greek w6 feast5 fast0 exc2 rows=0,2 -> - +2026-01-18 greek w0 feast2 fast0 exc0 rows=0,0 -> - +2026-01-19 greek w1 feast2 fast0 exc0 rows=0,0 -> - +2026-01-20 greek w2 feast5 fast0 exc2 rows=0,2 -> - +2026-01-21 greek w3 feast0 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2026-01-22 greek w4 feast0 fast0 exc0 rows=0,0 -> - +2026-01-23 greek w5 feast0 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2026-01-24 greek w6 feast4 fast0 exc0 rows=0,0 -> - +2026-01-25 greek w0 feast4 fast0 exc0 rows=0,0 -> - +2026-01-26 greek w1 feast0 fast0 exc0 rows=0,0 -> - +2026-01-27 greek w2 feast4 fast0 exc0 rows=0,0 -> - +2026-01-28 greek w3 feast2 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2026-01-29 greek w4 feast2 fast0 exc0 rows=0,0 -> - +2026-01-30 greek w5 feast5 fast1 exc2 rows=0,2 -> meat,dairy,eggs +2026-01-31 greek w6 feast3 fast0 exc0 rows=0,0 -> - +2026-02-01 greek w0 feast2 fast0 exc11 rows=0,11 -> - +2026-02-02 greek w1 feast8 fast0 exc11 rows=2,11 -> - +2026-02-03 greek w2 feast2 fast0 exc11 rows=0,11 -> - +2026-02-04 greek w3 feast0 fast0 exc11 rows=0,11 -> - +2026-02-05 greek w4 feast0 fast0 exc11 rows=0,11 -> - +2026-02-06 greek w5 feast0 fast0 exc11 rows=0,11 -> - +2026-02-07 greek w6 feast0 fast0 exc11 rows=0,11 -> - +2026-02-08 greek w0 feast2 fast0 exc0 rows=0,0 -> - +2026-02-09 greek w1 feast4 fast0 exc0 rows=0,0 -> - +2026-02-10 greek w2 feast0 fast0 exc0 rows=0,0 -> - +2026-02-11 greek w3 feast3 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2026-02-12 greek w4 feast4 fast0 exc0 rows=0,0 -> - +2026-02-13 greek w5 feast0 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2026-02-14 greek w6 feast4 fast0 exc0 rows=0,0 -> - +2026-02-15 greek w0 feast0 fast0 exc0 rows=0,0 -> - +2026-02-16 greek w1 feast0 fast1 exc7 rows=0,7 -> meat +2026-02-17 greek w2 feast4 fast1 exc7 rows=0,7 -> meat +2026-02-18 greek w3 feast0 fast1 exc7 rows=0,7 -> meat +2026-02-19 greek w4 feast0 fast1 exc7 rows=0,7 -> meat +2026-02-20 greek w5 feast0 fast1 exc7 rows=0,7 -> meat +2026-02-21 greek w6 feast0 fast1 exc7 rows=0,7 -> meat +2026-02-22 greek w0 feast0 fast1 exc7 rows=0,7 -> meat +2026-02-23 greek w1 feast0 fast2 exc10 rows=0,10 -> meat,fish,dairy,eggs,wine,oil +2026-02-24 greek w2 feast4 fast2 exc10 rows=1,10 -> meat,fish,dairy,eggs,wine,oil +2026-02-25 greek w3 feast1 fast2 exc10 rows=0,10 -> meat,fish,dairy,eggs,wine,oil +2026-02-26 greek w4 feast0 fast2 exc10 rows=0,10 -> meat,fish,dairy,eggs,wine,oil +2026-02-27 greek w5 feast1 fast2 exc10 rows=10 -> meat,fish,dairy,eggs,wine,oil +2026-02-28 greek w6 feast0 fast2 exc3 rows=0,3 -> meat,fish,dairy,eggs +2026-03-01 greek w0 feast0 fast2 exc3 rows=0,3 -> meat,fish,dairy,eggs +2026-03-02 greek w1 feast3 fast2 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2026-03-03 greek w2 feast0 fast2 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2026-03-04 greek w3 feast4 fast2 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2026-03-05 greek w4 feast0 fast2 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2026-03-06 greek w5 feast1 fast2 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2026-03-07 greek w6 feast0 fast2 exc3 rows=0,3 -> meat,fish,dairy,eggs +2026-03-08 greek w0 feast0 fast2 exc3 rows=0,3 -> meat,fish,dairy,eggs +2026-03-09 greek w1 feast4 fast2 exc1 rows=0,1 -> meat,fish,dairy,eggs +2026-03-10 greek w2 feast0 fast2 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2026-03-11 greek w3 feast3 fast2 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2026-03-12 greek w4 feast0 fast2 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2026-03-13 greek w5 feast1 fast2 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2026-03-14 greek w6 feast0 fast2 exc3 rows=0,3 -> meat,fish,dairy,eggs +2026-03-15 greek w0 feast0 fast2 exc3 rows=0,3 -> meat,fish,dairy,eggs +2026-03-16 greek w1 feast0 fast2 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2026-03-17 greek w2 feast3 fast2 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2026-03-18 greek w3 feast2 fast2 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2026-03-19 greek w4 feast0 fast2 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2026-03-20 greek w5 feast1 fast2 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2026-03-21 greek w6 feast0 fast2 exc3 rows=0,3 -> meat,fish,dairy,eggs +2026-03-22 greek w0 feast0 fast2 exc3 rows=0,3 -> meat,fish,dairy,eggs +2026-03-23 greek w1 feast0 fast2 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2026-03-24 greek w2 feast0 fast2 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2026-03-25 greek w3 feast7 fast2 exc4 rows=0,4 -> meat,dairy,eggs +2026-03-26 greek w4 feast3 fast2 exc3 rows=3,3 -> meat,fish,dairy,eggs +2026-03-27 greek w5 feast1 fast2 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2026-03-28 greek w6 feast0 fast2 exc3 rows=0,3 -> meat,fish,dairy,eggs +2026-03-29 greek w0 feast0 fast2 exc3 rows=0,3 -> meat,fish,dairy,eggs +2026-03-30 greek w1 feast0 fast2 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2026-03-31 greek w2 feast0 fast2 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2026-04-01 greek w3 feast3 fast2 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2026-04-02 greek w4 feast0 fast2 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2026-04-03 greek w5 feast1 fast2 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2026-04-04 greek w6 feast0 fast2 exc6 rows=0,6 -> meat,fish,dairy,eggs +2026-04-05 greek w0 feast8 fast2 exc4 rows=0,4 -> meat,dairy,eggs +2026-04-06 greek w1 feast4 fast2 exc10 rows=0,10 -> meat,fish,dairy,eggs,wine,oil +2026-04-07 greek w2 feast4 fast2 exc10 rows=1,10 -> meat,fish,dairy,eggs,wine,oil +2026-04-08 greek w3 feast1 fast2 exc10 rows=0,10 -> meat,fish,dairy,eggs,wine,oil +2026-04-09 greek w4 feast3 fast2 exc3 rows=0,3 -> meat,fish,dairy,eggs +2026-04-10 greek w5 feast0 fast2 exc9 rows=0,9 -> meat,fish,dairy,eggs,wine,oil +2026-04-11 greek w6 feast3 fast2 exc5 rows=0,5 -> meat,fish,dairy,eggs,oil +2026-04-12 greek w0 feast8 fast0 exc11 rows=0,11 -> - +2026-04-13 greek w1 feast0 fast0 exc11 rows=0,11 -> - +2026-04-14 greek w2 feast0 fast0 exc11 rows=0,11 -> - +2026-04-15 greek w3 feast0 fast0 exc11 rows=0,11 -> - +2026-04-16 greek w4 feast0 fast0 exc11 rows=0,11 -> - +2026-04-17 greek w5 feast3 fast0 exc11 rows=0,11 -> - +2026-04-18 greek w6 feast0 fast0 exc11 rows=0,11 -> - +2026-04-19 greek w0 feast0 fast0 exc0 rows=0,0 -> - +2026-04-20 greek w1 feast0 fast0 exc0 rows=0,0 -> - +2026-04-21 greek w2 feast0 fast0 exc0 rows=0,0 -> - +2026-04-22 greek w3 feast0 fast1 exc1 rows=0,1 -> meat,fish,dairy,eggs +2026-04-23 greek w4 feast5 fast0 exc1 rows=0,1 -> - +2026-04-24 greek w5 feast0 fast1 exc1 rows=0,1 -> meat,fish,dairy,eggs +2026-04-25 greek w6 feast4 fast0 exc1 rows=0,1 -> - +2026-04-26 greek w0 feast3 fast0 exc0 rows=0,0 -> - +2026-04-27 greek w1 feast2 fast0 exc0 rows=0,0 -> - +2026-04-28 greek w2 feast0 fast0 exc0 rows=0,0 -> - +2026-04-29 greek w3 feast0 fast1 exc1 rows=0,1 -> meat,fish,dairy,eggs +2026-04-30 greek w4 feast4 fast0 exc0 rows=0,0 -> - +2026-05-01 greek w5 feast3 fast1 exc1 rows=0,1 -> meat,fish,dairy,eggs +2026-05-02 greek w6 feast0 fast0 exc0 rows=0,0 -> - +2026-05-03 greek w0 feast0 fast0 exc0 rows=0,0 -> - +2026-05-04 greek w1 feast0 fast0 exc0 rows=0,0 -> - +2026-05-05 greek w2 feast0 fast0 exc0 rows=0,0 -> - +2026-05-06 greek w3 feast0 fast1 exc2 rows=0,2 -> meat,dairy,eggs +2026-05-07 greek w4 feast0 fast0 exc11 rows=0,11 -> - +2026-05-08 greek w5 feast5 fast1 exc2 rows=1,2 -> meat,dairy,eggs +2026-05-09 greek w6 feast4 fast0 exc0 rows=0,0 -> - +2026-05-10 greek w0 feast4 fast0 exc0 rows=0,0 -> - +2026-05-11 greek w1 feast0 fast0 exc11 rows=0,11 -> - +2026-05-12 greek w2 feast0 fast0 exc0 rows=0,0 -> - +2026-05-13 greek w3 feast0 fast1 exc1 rows=0,1 -> meat,fish,dairy,eggs +2026-05-14 greek w4 feast2 fast0 exc0 rows=0,0 -> - +2026-05-15 greek w5 feast3 fast1 exc1 rows=0,1 -> meat,fish,dairy,eggs +2026-05-16 greek w6 feast3 fast0 exc0 rows=0,0 -> - +2026-05-17 greek w0 feast0 fast0 exc0 rows=0,0 -> - +2026-05-18 greek w1 feast0 fast0 exc0 rows=0,0 -> - +2026-05-19 greek w2 feast4 fast0 exc0 rows=0,0 -> - +2026-05-20 greek w3 feast3 fast1 exc2 rows=0,2 -> meat,dairy,eggs +2026-05-21 greek w4 feast8 fast0 exc0 rows=0,0 -> - +2026-05-22 greek w5 feast0 fast1 exc1 rows=0,1 -> meat,fish,dairy,eggs +2026-05-23 greek w6 feast3 fast0 exc0 rows=0,0 -> - +2026-05-24 greek w0 feast3 fast0 exc0 rows=0,0 -> - +2026-05-25 greek w1 feast4 fast0 exc0 rows=0,0 -> - +2026-05-26 greek w2 feast2 fast0 exc0 rows=0,0 -> - +2026-05-27 greek w3 feast3 fast1 exc1 rows=0,1 -> meat,fish,dairy,eggs +2026-05-28 greek w4 feast2 fast0 exc0 rows=0,0 -> - +2026-05-29 greek w5 feast2 fast1 exc1 rows=0,1 -> meat,fish,dairy,eggs +2026-05-30 greek w6 feast0 fast0 exc0 rows=0,0 -> - +2026-05-31 greek w0 feast8 fast0 exc0 rows=0,0 -> - +2026-06-01 greek w1 feast0 fast0 exc11 rows=0,11 -> - +2026-06-02 greek w2 feast0 fast0 exc11 rows=0,11 -> - +2026-06-03 greek w3 feast0 fast0 exc11 rows=0,11 -> - +2026-06-04 greek w4 feast0 fast0 exc11 rows=0,11 -> - +2026-06-05 greek w5 feast0 fast0 exc11 rows=0,11 -> - +2026-06-06 greek w6 feast0 fast0 exc11 rows=0,11 -> - +2026-06-07 greek w0 feast0 fast0 exc0 rows=0,0 -> - +2026-06-08 greek w1 feast2 fast3 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2026-06-09 greek w2 feast3 fast3 exc1 rows=0,0 -> meat,fish,dairy,eggs +2026-06-10 greek w3 feast4 fast3 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2026-06-11 greek w4 feast4 fast3 exc1 rows=0,0 -> meat,fish,dairy,eggs +2026-06-12 greek w5 feast2 fast3 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2026-06-13 greek w6 feast0 fast3 exc2 rows=0,0 -> meat,dairy,eggs +2026-06-14 greek w0 feast0 fast3 exc2 rows=0,0 -> meat,dairy,eggs +2026-06-15 greek w1 feast4 fast3 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2026-06-16 greek w2 feast4 fast3 exc1 rows=0,0 -> meat,fish,dairy,eggs +2026-06-17 greek w3 feast0 fast3 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2026-06-18 greek w4 feast0 fast3 exc1 rows=0,0 -> meat,fish,dairy,eggs +2026-06-19 greek w5 feast4 fast3 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2026-06-20 greek w6 feast0 fast3 exc2 rows=0,0 -> meat,dairy,eggs +2026-06-21 greek w0 feast0 fast3 exc2 rows=0,0 -> meat,dairy,eggs +2026-06-22 greek w1 feast0 fast3 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2026-06-23 greek w2 feast0 fast3 exc1 rows=0,0 -> meat,fish,dairy,eggs +2026-06-24 greek w3 feast6 fast3 exc2 rows=0,2 -> meat,dairy,eggs +2026-06-25 greek w4 feast3 fast3 exc1 rows=0,0 -> meat,fish,dairy,eggs +2026-06-26 greek w5 feast4 fast3 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2026-06-27 greek w6 feast0 fast3 exc2 rows=0,0 -> meat,dairy,eggs +2026-06-28 greek w0 feast2 fast3 exc2 rows=0,0 -> meat,dairy,eggs +2026-06-29 greek w1 feast6 fast0 exc2 rows=0,2 -> - +2026-06-30 greek w2 feast4 fast0 exc0 rows=0,0 -> - +2026-07-01 greek w3 feast2 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2026-07-02 greek w4 feast3 fast0 exc0 rows=0,0 -> - +2026-07-03 greek w5 feast4 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2026-07-04 greek w6 feast0 fast0 exc0 rows=0,0 -> - +2026-07-05 greek w0 feast0 fast0 exc0 rows=0,0 -> - +2026-07-06 greek w1 feast0 fast0 exc0 rows=0,0 -> - +2026-07-07 greek w2 feast0 fast0 exc0 rows=0,0 -> - +2026-07-08 greek w3 feast2 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2026-07-09 greek w4 feast0 fast0 exc0 rows=0,0 -> - +2026-07-10 greek w5 feast0 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2026-07-11 greek w6 feast2 fast0 exc0 rows=0,0 -> - +2026-07-12 greek w0 feast0 fast0 exc0 rows=0,0 -> - +2026-07-13 greek w1 feast2 fast0 exc0 rows=0,0 -> - +2026-07-14 greek w2 feast2 fast0 exc0 rows=0,0 -> - +2026-07-15 greek w3 feast0 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2026-07-16 greek w4 feast0 fast0 exc0 rows=0,0 -> - +2026-07-17 greek w5 feast4 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2026-07-18 greek w6 feast0 fast0 exc0 rows=0,0 -> - +2026-07-19 greek w0 feast0 fast0 exc0 rows=0,0,0 -> - +2026-07-20 greek w1 feast5 fast0 exc2 rows=0,2 -> - +2026-07-21 greek w2 feast0 fast0 exc0 rows=0,0 -> - +2026-07-22 greek w3 feast2 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2026-07-23 greek w4 feast0 fast0 exc0 rows=0,0 -> - +2026-07-24 greek w5 feast0 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2026-07-25 greek w6 feast3 fast0 exc0 rows=0,0 -> - +2026-07-26 greek w0 feast0 fast0 exc11 rows=0,11 -> - +2026-07-27 greek w1 feast2 fast0 exc0 rows=0,0 -> - +2026-07-28 greek w2 feast0 fast0 exc0 rows=0,0 -> - +2026-07-29 greek w3 feast0 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2026-07-30 greek w4 feast0 fast0 exc0 rows=0,0 -> - +2026-07-31 greek w5 feast2 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2026-08-01 greek w6 feast3 fast4 exc1 rows=0,1 -> meat,fish,dairy,eggs +2026-08-02 greek w0 feast3 fast4 exc1 rows=0,0 -> meat,fish,dairy,eggs +2026-08-03 greek w1 feast3 fast4 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2026-08-04 greek w2 feast0 fast4 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2026-08-05 greek w3 feast2 fast4 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2026-08-06 greek w4 feast8 fast4 exc4 rows=0,4 -> meat,dairy,eggs +2026-08-07 greek w5 feast0 fast4 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2026-08-08 greek w6 feast0 fast4 exc1 rows=0,0 -> meat,fish,dairy,eggs +2026-08-09 greek w0 feast0 fast4 exc1 rows=0,0 -> meat,fish,dairy,eggs +2026-08-10 greek w1 feast0 fast4 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2026-08-11 greek w2 feast0 fast4 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2026-08-12 greek w3 feast0 fast4 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2026-08-13 greek w4 feast4 fast4 exc0 rows=0,4 -> meat,fish,dairy,eggs,wine,oil +2026-08-14 greek w5 feast2 fast4 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2026-08-15 greek w6 feast7 fast0 exc2 rows=0,2 -> - +2026-08-16 greek w0 feast5 fast0 exc1 rows=0,1 -> - +2026-08-17 greek w1 feast0 fast0 exc0 rows=0,0 -> - +2026-08-18 greek w2 feast0 fast0 exc0 rows=0,0 -> - +2026-08-19 greek w3 feast0 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2026-08-20 greek w4 feast0 fast0 exc0 rows=0,0 -> - +2026-08-21 greek w5 feast3 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2026-08-22 greek w6 feast0 fast0 exc0 rows=0,0 -> - +2026-08-23 greek w0 feast0 fast0 exc0 rows=0,0 -> - +2026-08-24 greek w1 feast3 fast0 exc0 rows=0,0 -> - +2026-08-25 greek w2 feast2 fast0 exc0 rows=0,0 -> - +2026-08-26 greek w3 feast4 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2026-08-27 greek w4 feast0 fast0 exc0 rows=0,0 -> - +2026-08-28 greek w5 feast0 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2026-08-29 greek w6 feast6 fast1 exc8 rows=0,8 -> meat,fish,dairy,eggs +2026-08-30 greek w0 feast4 fast0 exc0 rows=0,0 -> - +2026-08-31 greek w1 feast3 fast0 exc0 rows=0,0 -> - +2026-09-01 greek w2 feast4 fast0 exc1 rows=0,1 -> - +2026-09-02 greek w3 feast0 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2026-09-03 greek w4 feast0 fast0 exc0 rows=0,0 -> - +2026-09-04 greek w5 feast0 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2026-09-05 greek w6 feast2 fast0 exc0 rows=0,0 -> - +2026-09-06 greek w0 feast2 fast0 exc0 rows=0,0 -> - +2026-09-07 greek w1 feast3 fast0 exc0 rows=0,0 -> - +2026-09-08 greek w2 feast7 fast0 exc2 rows=0,2 -> - +2026-09-09 greek w3 feast3 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2026-09-10 greek w4 feast0 fast0 exc0 rows=0,0 -> - +2026-09-11 greek w5 feast4 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2026-09-12 greek w6 feast0 fast0 exc1 rows=0,0,1 -> - +2026-09-13 greek w0 feast3 fast0 exc1 rows=0,0,1 -> - +2026-09-14 greek w1 feast8 fast1 exc8 rows=0,8 -> meat,fish,dairy,eggs +2026-09-15 greek w2 feast2 fast0 exc0 rows=0,0 -> - +2026-09-16 greek w3 feast2 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2026-09-17 greek w4 feast0 fast0 exc0 rows=0,0 -> - +2026-09-18 greek w5 feast0 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2026-09-19 greek w6 feast3 fast0 exc0 rows=0,0,0 -> - +2026-09-20 greek w0 feast3 fast0 exc0 rows=0,0,0 -> - +2026-09-21 greek w1 feast4 fast0 exc0 rows=0,0 -> - +2026-09-22 greek w2 feast2 fast0 exc0 rows=0,0 -> - +2026-09-23 greek w3 feast3 fast1 exc1 rows=0,1 -> meat,fish,dairy,eggs +2026-09-24 greek w4 feast4 fast0 exc2 rows=0,2 -> - +2026-09-25 greek w5 feast0 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2026-09-26 greek w6 feast5 fast0 exc2 rows=0,2 -> - +2026-09-27 greek w0 feast3 fast0 exc0 rows=0,0 -> - +2026-09-28 greek w1 feast4 fast0 exc1 rows=0,1 -> - +2026-09-29 greek w2 feast2 fast0 exc0 rows=0,0 -> - +2026-09-30 greek w3 feast3 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2026-10-01 greek w4 feast0 fast0 exc11 rows=0,11 -> - +2026-10-02 greek w5 feast2 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2026-10-03 greek w6 feast2 fast0 exc0 rows=0,0 -> - +2026-10-04 greek w0 feast3 fast0 exc0 rows=0,0 -> - +2026-10-05 greek w1 feast3 fast0 exc0 rows=0,0 -> - +2026-10-06 greek w2 feast5 fast0 exc2 rows=0,2 -> - +2026-10-07 greek w3 feast2 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2026-10-08 greek w4 feast0 fast0 exc0 rows=0,0 -> - +2026-10-09 greek w5 feast5 fast1 exc2 rows=0,2 -> meat,dairy,eggs +2026-10-10 greek w6 feast0 fast0 exc0 rows=0,0 -> - +2026-10-11 greek w0 feast0 fast0 exc0 rows=0,0,0 -> - +2026-10-12 greek w1 feast0 fast0 exc0 rows=0,0 -> - +2026-10-13 greek w2 feast0 fast0 exc0 rows=0,0 -> - +2026-10-14 greek w3 feast2 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2026-10-15 greek w4 feast0 fast0 exc0 rows=0,0 -> - +2026-10-16 greek w5 feast0 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2026-10-17 greek w6 feast0 fast0 exc0 rows=0,0 -> - +2026-10-18 greek w0 feast4 fast0 exc0 rows=0,0 -> - +2026-10-19 greek w1 feast2 fast0 exc0 rows=0,0 -> - +2026-10-20 greek w2 feast2 fast0 exc0 rows=0,0 -> - +2026-10-21 greek w3 feast2 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2026-10-22 greek w4 feast0 fast0 exc0 rows=0,0 -> - +2026-10-23 greek w5 feast3 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2026-10-24 greek w6 feast0 fast0 exc0 rows=0,0,0 -> - +2026-10-25 greek w0 feast0 fast0 exc0 rows=0,0 -> - +2026-10-26 greek w1 feast4 fast0 exc2 rows=0,2 -> - +2026-10-27 greek w2 feast0 fast0 exc0 rows=0,0 -> - +2026-10-28 greek w3 feast3 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2026-10-29 greek w4 feast3 fast0 exc0 rows=0,0 -> - +2026-10-30 greek w5 feast0 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2026-10-31 greek w6 feast0 fast0 exc0 rows=0,0 -> - +2026-11-01 greek w0 feast2 fast0 exc0 rows=0,0 -> - +2026-11-02 greek w1 feast0 fast0 exc0 rows=0,0 -> - +2026-11-03 greek w2 feast0 fast0 exc0 rows=0,0 -> - +2026-11-04 greek w3 feast0 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2026-11-05 greek w4 feast3 fast0 exc0 rows=0,0 -> - +2026-11-06 greek w5 feast2 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2026-11-07 greek w6 feast5 fast0 exc2 rows=0,0,2 -> - +2026-11-08 greek w0 feast5 fast0 exc2 rows=0,0,2 -> - +2026-11-09 greek w1 feast0 fast0 exc0 rows=0,0 -> - +2026-11-10 greek w2 feast0 fast0 exc0 rows=0,0 -> - +2026-11-11 greek w3 feast0 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2026-11-12 greek w4 feast2 fast0 exc0 rows=0,0 -> - +2026-11-13 greek w5 feast5 fast1 exc2 rows=0,2 -> meat,dairy,eggs +2026-11-14 greek w6 feast4 fast0 exc1 rows=0,1 -> - +2026-11-15 greek w0 feast0 fast5 exc2 rows=0,0 -> meat,dairy,eggs +2026-11-16 greek w1 feast6 fast5 exc2 rows=0,2 -> meat,dairy,eggs +2026-11-17 greek w2 feast3 fast5 exc2 rows=0,0 -> meat,dairy,eggs +2026-11-18 greek w3 feast0 fast5 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2026-11-19 greek w4 feast3 fast5 exc2 rows=0,0 -> meat,dairy,eggs +2026-11-20 greek w5 feast0 fast5 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2026-11-21 greek w6 feast7 fast5 exc2 rows=0,2 -> meat,dairy,eggs +2026-11-22 greek w0 feast2 fast5 exc2 rows=0,0 -> meat,dairy,eggs +2026-11-23 greek w1 feast0 fast5 exc2 rows=0,0 -> meat,dairy,eggs +2026-11-24 greek w2 feast2 fast5 exc2 rows=0,0 -> meat,dairy,eggs +2026-11-25 greek w3 feast0 fast5 exc1 rows=0,1 -> meat,fish,dairy,eggs +2026-11-26 greek w4 feast0 fast5 exc2 rows=0,0 -> meat,dairy,eggs +2026-11-27 greek w5 feast2 fast5 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2026-11-28 greek w6 feast2 fast5 exc2 rows=0,0 -> meat,dairy,eggs +2026-11-29 greek w0 feast0 fast5 exc2 rows=0,0 -> meat,dairy,eggs +2026-11-30 greek w1 feast4 fast5 exc2 rows=0,2 -> meat,dairy,eggs +2026-12-01 greek w2 feast0 fast5 exc2 rows=0,0 -> meat,dairy,eggs +2026-12-02 greek w3 feast0 fast5 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2026-12-03 greek w4 feast3 fast5 exc2 rows=0,0 -> meat,dairy,eggs +2026-12-04 greek w5 feast0 fast5 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2026-12-05 greek w6 feast4 fast5 exc2 rows=0,0 -> meat,dairy,eggs +2026-12-06 greek w0 feast5 fast5 exc2 rows=0,2 -> meat,dairy,eggs +2026-12-07 greek w1 feast3 fast5 exc2 rows=0,0 -> meat,dairy,eggs +2026-12-08 greek w2 feast0 fast5 exc2 rows=0,0 -> meat,dairy,eggs +2026-12-09 greek w3 feast3 fast5 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2026-12-10 greek w4 feast0 fast5 exc2 rows=0,0 -> meat,dairy,eggs +2026-12-11 greek w5 feast0 fast5 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2026-12-12 greek w6 feast2 fast5 exc2 rows=0,0 -> meat,dairy,eggs +2026-12-13 greek w0 feast0 fast5 exc1 rows=0,0,1 -> meat,fish,dairy,eggs +2026-12-14 greek w1 feast0 fast5 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2026-12-15 greek w2 feast2 fast5 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2026-12-16 greek w3 feast0 fast5 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2026-12-17 greek w4 feast2 fast5 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2026-12-18 greek w5 feast0 fast5 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2026-12-19 greek w6 feast0 fast5 exc1 rows=0,0,0 -> meat,fish,dairy,eggs +2026-12-20 greek w0 feast0 fast5 exc1 rows=0,0,0 -> meat,fish,dairy,eggs +2026-12-21 greek w1 feast0 fast5 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2026-12-22 greek w2 feast0 fast5 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2026-12-23 greek w3 feast0 fast5 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2026-12-24 greek w4 feast0 fast5 exc9 rows=0,0,9 -> meat,fish,dairy,eggs,wine,oil +2026-12-25 greek w5 feast8 fast0 exc11 rows=0,11 -> - +2026-12-26 greek w6 feast3 fast0 exc11 rows=0,0,11 -> - +2026-12-27 greek w0 feast2 fast0 exc11 rows=0,0,11 -> - +2026-12-28 greek w1 feast0 fast0 exc11 rows=0,11 -> - +2026-12-29 greek w2 feast0 fast0 exc11 rows=0,11 -> - +2026-12-30 greek w3 feast0 fast0 exc11 rows=0,11 -> - +2026-12-31 greek w4 feast0 fast0 exc11 rows=0,11 -> - +2027-01-01 greek w5 feast6 fast0 exc11 rows=0,11 -> - +2027-01-02 greek w6 feast4 fast0 exc11 rows=0,0,11 -> - +2027-01-03 greek w0 feast0 fast0 exc11 rows=0,0,11 -> - +2027-01-04 greek w1 feast0 fast0 exc11 rows=0,11 -> - +2027-01-05 greek w2 feast0 fast1 exc9 rows=0,0,9 -> meat,fish,dairy,eggs,wine,oil +2027-01-06 greek w3 feast8 fast0 exc11 rows=0,11 -> - +2027-01-07 greek w4 feast3 fast0 exc2 rows=0,2 -> - +2027-01-08 greek w5 feast0 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2027-01-09 greek w6 feast4 fast0 exc0 rows=0,0,0 -> - +2027-01-10 greek w0 feast0 fast0 exc0 rows=0,0,0 -> - +2027-01-11 greek w1 feast4 fast0 exc0 rows=0,0 -> - +2027-01-12 greek w2 feast3 fast0 exc0 rows=0,0 -> - +2027-01-13 greek w3 feast0 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2027-01-14 greek w4 feast4 fast0 exc0 rows=0,0 -> - +2027-01-15 greek w5 feast2 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2027-01-16 greek w6 feast2 fast0 exc0 rows=0,0 -> - +2027-01-17 greek w0 feast5 fast0 exc2 rows=0,2 -> - +2027-01-18 greek w1 feast2 fast0 exc0 rows=0,0 -> - +2027-01-19 greek w2 feast2 fast0 exc0 rows=0,0 -> - +2027-01-20 greek w3 feast5 fast1 exc2 rows=0,2 -> meat,dairy,eggs +2027-01-21 greek w4 feast0 fast0 exc0 rows=0,0 -> - +2027-01-22 greek w5 feast0 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2027-01-23 greek w6 feast0 fast0 exc0 rows=0,0 -> - +2027-01-24 greek w0 feast5 fast0 exc0 rows=0,0,0 -> - +2027-01-25 greek w1 feast4 fast0 exc0 rows=0,0 -> - +2027-01-26 greek w2 feast0 fast0 exc0 rows=0,0 -> - +2027-01-27 greek w3 feast4 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2027-01-28 greek w4 feast2 fast0 exc0 rows=0,0 -> - +2027-01-29 greek w5 feast2 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2027-01-30 greek w6 feast5 fast0 exc2 rows=0,2 -> - +2027-01-31 greek w0 feast3 fast0 exc0 rows=0,0 -> - +2027-02-01 greek w1 feast2 fast0 exc0 rows=0,0 -> - +2027-02-02 greek w2 feast8 fast0 exc2 rows=0,2 -> - +2027-02-03 greek w3 feast2 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2027-02-04 greek w4 feast0 fast0 exc0 rows=0,0 -> - +2027-02-05 greek w5 feast0 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2027-02-06 greek w6 feast0 fast0 exc0 rows=0,0 -> - +2027-02-07 greek w0 feast0 fast0 exc0 rows=0,0 -> - +2027-02-08 greek w1 feast2 fast0 exc0 rows=0,0 -> - +2027-02-09 greek w2 feast4 fast0 exc0 rows=0,0 -> - +2027-02-10 greek w3 feast0 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2027-02-11 greek w4 feast3 fast0 exc0 rows=0,0 -> - +2027-02-12 greek w5 feast4 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2027-02-13 greek w6 feast0 fast0 exc0 rows=0,0 -> - +2027-02-14 greek w0 feast4 fast0 exc0 rows=0,0 -> - +2027-02-15 greek w1 feast0 fast0 exc0 rows=0,0 -> - +2027-02-16 greek w2 feast0 fast0 exc0 rows=0,0 -> - +2027-02-17 greek w3 feast4 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2027-02-18 greek w4 feast0 fast0 exc0 rows=0,0 -> - +2027-02-19 greek w5 feast0 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2027-02-20 greek w6 feast0 fast0 exc0 rows=0,0 -> - +2027-02-21 greek w0 feast0 fast0 exc11 rows=0,11 -> - +2027-02-22 greek w1 feast0 fast0 exc11 rows=0,11 -> - +2027-02-23 greek w2 feast0 fast0 exc11 rows=0,11 -> - +2027-02-24 greek w3 feast4 fast0 exc11 rows=1,11 -> - +2027-02-25 greek w4 feast0 fast0 exc11 rows=0,11 -> - +2027-02-26 greek w5 feast0 fast0 exc11 rows=0,11 -> - +2027-02-27 greek w6 feast0 fast0 exc11 rows=11 -> - +2027-02-28 greek w0 feast0 fast0 exc0 rows=0,0 -> - +2027-03-01 greek w1 feast0 fast0 exc0 rows=0,0 -> - +2027-03-02 greek w2 feast3 fast0 exc0 rows=0,0 -> - +2027-03-03 greek w3 feast0 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2027-03-04 greek w4 feast4 fast0 exc0 rows=0,0 -> - +2027-03-05 greek w5 feast0 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2027-03-06 greek w6 feast0 fast0 exc0 rows=0,0 -> - +2027-03-07 greek w0 feast0 fast0 exc0 rows=0,0 -> - +2027-03-08 greek w1 feast0 fast1 exc7 rows=0,7 -> meat +2027-03-09 greek w2 feast4 fast1 exc7 rows=1,7 -> meat +2027-03-10 greek w3 feast0 fast1 exc7 rows=0,7 -> meat +2027-03-11 greek w4 feast3 fast1 exc7 rows=0,7 -> meat +2027-03-12 greek w5 feast0 fast1 exc7 rows=0,7 -> meat +2027-03-13 greek w6 feast0 fast1 exc7 rows=0,7 -> meat +2027-03-14 greek w0 feast0 fast1 exc7 rows=0,7 -> meat +2027-03-15 greek w1 feast0 fast2 exc10 rows=0,10 -> meat,fish,dairy,eggs,wine,oil +2027-03-16 greek w2 feast0 fast2 exc10 rows=0,10 -> meat,fish,dairy,eggs,wine,oil +2027-03-17 greek w3 feast3 fast2 exc10 rows=0,10 -> meat,fish,dairy,eggs,wine,oil +2027-03-18 greek w4 feast2 fast2 exc10 rows=0,10 -> meat,fish,dairy,eggs,wine,oil +2027-03-19 greek w5 feast1 fast2 exc10 rows=0,10 -> meat,fish,dairy,eggs,wine,oil +2027-03-20 greek w6 feast0 fast2 exc3 rows=0,3 -> meat,fish,dairy,eggs +2027-03-21 greek w0 feast0 fast2 exc3 rows=0,3 -> meat,fish,dairy,eggs +2027-03-22 greek w1 feast0 fast2 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2027-03-23 greek w2 feast0 fast2 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2027-03-24 greek w3 feast1 fast2 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2027-03-25 greek w4 feast7 fast2 exc4 rows=0,4 -> meat,dairy,eggs +2027-03-26 greek w5 feast3 fast2 exc3 rows=0,3 -> meat,fish,dairy,eggs +2027-03-27 greek w6 feast0 fast2 exc3 rows=0,3 -> meat,fish,dairy,eggs +2027-03-28 greek w0 feast0 fast2 exc3 rows=0,3 -> meat,fish,dairy,eggs +2027-03-29 greek w1 feast0 fast2 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2027-03-30 greek w2 feast0 fast2 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2027-03-31 greek w3 feast1 fast2 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2027-04-01 greek w4 feast3 fast2 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2027-04-02 greek w5 feast1 fast2 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2027-04-03 greek w6 feast0 fast2 exc3 rows=0,3 -> meat,fish,dairy,eggs +2027-04-04 greek w0 feast0 fast2 exc3 rows=0,3 -> meat,fish,dairy,eggs +2027-04-05 greek w1 feast0 fast2 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2027-04-06 greek w2 feast4 fast2 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2027-04-07 greek w3 feast4 fast2 exc1 rows=0,1 -> meat,fish,dairy,eggs +2027-04-08 greek w4 feast0 fast2 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2027-04-09 greek w5 feast1 fast2 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2027-04-10 greek w6 feast0 fast2 exc3 rows=0,3 -> meat,fish,dairy,eggs +2027-04-11 greek w0 feast0 fast2 exc3 rows=0,3 -> meat,fish,dairy,eggs +2027-04-12 greek w1 feast0 fast2 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2027-04-13 greek w2 feast0 fast2 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2027-04-14 greek w3 feast1 fast2 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2027-04-15 greek w4 feast0 fast2 exc3 rows=0,3 -> meat,fish,dairy,eggs +2027-04-16 greek w5 feast1 fast2 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2027-04-17 greek w6 feast3 fast2 exc3 rows=0,3 -> meat,fish,dairy,eggs +2027-04-18 greek w0 feast0 fast2 exc3 rows=0,3 -> meat,fish,dairy,eggs +2027-04-19 greek w1 feast0 fast2 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2027-04-20 greek w2 feast0 fast2 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2027-04-21 greek w3 feast1 fast2 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2027-04-22 greek w4 feast0 fast2 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2027-04-23 greek w5 feast5 fast2 exc1 rows=0,1 -> meat,fish,dairy,eggs +2027-04-24 greek w6 feast0 fast2 exc6 rows=0,6 -> meat,fish,dairy,eggs +2027-04-25 greek w0 feast8 fast2 exc4 rows=1,4 -> meat,dairy,eggs +2027-04-26 greek w1 feast3 fast2 exc10 rows=0,10 -> meat,fish,dairy,eggs,wine,oil +2027-04-27 greek w2 feast2 fast2 exc10 rows=0,10 -> meat,fish,dairy,eggs,wine,oil +2027-04-28 greek w3 feast1 fast2 exc10 rows=0,10 -> meat,fish,dairy,eggs,wine,oil +2027-04-29 greek w4 feast3 fast2 exc3 rows=0,3 -> meat,fish,dairy,eggs +2027-04-30 greek w5 feast4 fast2 exc9 rows=0,9 -> meat,fish,dairy,eggs,wine,oil +2027-05-01 greek w6 feast3 fast2 exc5 rows=0,5 -> meat,fish,dairy,eggs,oil +2027-05-02 greek w0 feast8 fast0 exc11 rows=0,11 -> - +2027-05-03 greek w1 feast0 fast0 exc11 rows=0,11 -> - +2027-05-04 greek w2 feast0 fast0 exc11 rows=0,11 -> - +2027-05-05 greek w3 feast0 fast0 exc11 rows=0,11 -> - +2027-05-06 greek w4 feast0 fast0 exc11 rows=0,11 -> - +2027-05-07 greek w5 feast0 fast0 exc11 rows=11,11 -> - +2027-05-08 greek w6 feast5 fast0 exc11 rows=2,11 -> - +2027-05-09 greek w0 feast4 fast0 exc0 rows=0,0 -> - +2027-05-10 greek w1 feast4 fast0 exc0 rows=0,0 -> - +2027-05-11 greek w2 feast0 fast0 exc11 rows=0,11 -> - +2027-05-12 greek w3 feast0 fast1 exc1 rows=0,1 -> meat,fish,dairy,eggs +2027-05-13 greek w4 feast0 fast0 exc0 rows=0,0 -> - +2027-05-14 greek w5 feast2 fast1 exc1 rows=0,1 -> meat,fish,dairy,eggs +2027-05-15 greek w6 feast3 fast0 exc0 rows=0,0 -> - +2027-05-16 greek w0 feast3 fast0 exc0 rows=0,0 -> - +2027-05-17 greek w1 feast0 fast0 exc0 rows=0,0 -> - +2027-05-18 greek w2 feast0 fast0 exc0 rows=0,0 -> - +2027-05-19 greek w3 feast4 fast1 exc1 rows=0,1 -> meat,fish,dairy,eggs +2027-05-20 greek w4 feast3 fast0 exc0 rows=0,0 -> - +2027-05-21 greek w5 feast4 fast1 exc1 rows=0,1 -> meat,fish,dairy,eggs +2027-05-22 greek w6 feast0 fast0 exc0 rows=0,0 -> - +2027-05-23 greek w0 feast3 fast0 exc0 rows=0,0 -> - +2027-05-24 greek w1 feast3 fast0 exc0 rows=0,0 -> - +2027-05-25 greek w2 feast4 fast0 exc0 rows=0,0 -> - +2027-05-26 greek w3 feast2 fast1 exc2 rows=0,2 -> meat,dairy,eggs +2027-05-27 greek w4 feast3 fast0 exc0 rows=0,0 -> - +2027-05-28 greek w5 feast2 fast1 exc1 rows=0,1 -> meat,fish,dairy,eggs +2027-05-29 greek w6 feast2 fast0 exc0 rows=0,0 -> - +2027-05-30 greek w0 feast0 fast0 exc0 rows=0,0 -> - +2027-05-31 greek w1 feast0 fast0 exc0 rows=0,0 -> - +2027-06-01 greek w2 feast0 fast0 exc0 rows=0,0 -> - +2027-06-02 greek w3 feast0 fast1 exc1 rows=0,1 -> meat,fish,dairy,eggs +2027-06-03 greek w4 feast0 fast0 exc0 rows=0,0 -> - +2027-06-04 greek w5 feast0 fast1 exc1 rows=0,1 -> meat,fish,dairy,eggs +2027-06-05 greek w6 feast0 fast0 exc0 rows=0,0 -> - +2027-06-06 greek w0 feast0 fast0 exc0 rows=0,0 -> - +2027-06-07 greek w1 feast0 fast0 exc0 rows=0,0 -> - +2027-06-08 greek w2 feast2 fast0 exc0 rows=0,0 -> - +2027-06-09 greek w3 feast3 fast1 exc2 rows=0,2 -> meat,dairy,eggs +2027-06-10 greek w4 feast8 fast0 exc0 rows=0,0 -> - +2027-06-11 greek w5 feast4 fast1 exc1 rows=0,1 -> meat,fish,dairy,eggs +2027-06-12 greek w6 feast2 fast0 exc0 rows=0,0 -> - +2027-06-13 greek w0 feast0 fast0 exc0 rows=0,0 -> - +2027-06-14 greek w1 feast0 fast0 exc0 rows=0,0 -> - +2027-06-15 greek w2 feast4 fast0 exc0 rows=0,0 -> - +2027-06-16 greek w3 feast4 fast1 exc1 rows=0,1 -> meat,fish,dairy,eggs +2027-06-17 greek w4 feast0 fast0 exc0 rows=0,0 -> - +2027-06-18 greek w5 feast0 fast1 exc1 rows=0,1 -> meat,fish,dairy,eggs +2027-06-19 greek w6 feast4 fast0 exc0 rows=0,0 -> - +2027-06-20 greek w0 feast8 fast0 exc0 rows=0,0 -> - +2027-06-21 greek w1 feast0 fast0 exc11 rows=0,11 -> - +2027-06-22 greek w2 feast0 fast0 exc11 rows=0,11 -> - +2027-06-23 greek w3 feast0 fast0 exc11 rows=0,11 -> - +2027-06-24 greek w4 feast6 fast0 exc11 rows=2,11 -> - +2027-06-25 greek w5 feast3 fast0 exc11 rows=0,11 -> - +2027-06-26 greek w6 feast4 fast0 exc11 rows=0,11 -> - +2027-06-27 greek w0 feast0 fast0 exc0 rows=0,0 -> - +2027-06-28 greek w1 feast2 fast3 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2027-06-29 greek w2 feast6 fast0 exc2 rows=0,2 -> - +2027-06-30 greek w3 feast4 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2027-07-01 greek w4 feast2 fast0 exc0 rows=0,0 -> - +2027-07-02 greek w5 feast3 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2027-07-03 greek w6 feast4 fast0 exc0 rows=0,0 -> - +2027-07-04 greek w0 feast0 fast0 exc0 rows=0,0 -> - +2027-07-05 greek w1 feast0 fast0 exc0 rows=0,0 -> - +2027-07-06 greek w2 feast0 fast0 exc0 rows=0,0 -> - +2027-07-07 greek w3 feast0 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2027-07-08 greek w4 feast2 fast0 exc0 rows=0,0 -> - +2027-07-09 greek w5 feast0 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2027-07-10 greek w6 feast0 fast0 exc0 rows=0,0 -> - +2027-07-11 greek w0 feast2 fast0 exc0 rows=0,0 -> - +2027-07-12 greek w1 feast0 fast0 exc0 rows=0,0 -> - +2027-07-13 greek w2 feast2 fast0 exc0 rows=0,0 -> - +2027-07-14 greek w3 feast2 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2027-07-15 greek w4 feast0 fast0 exc0 rows=0,0 -> - +2027-07-16 greek w5 feast0 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2027-07-17 greek w6 feast4 fast0 exc0 rows=0,0 -> - +2027-07-18 greek w0 feast0 fast0 exc0 rows=0,0,0 -> - +2027-07-19 greek w1 feast0 fast0 exc0 rows=0,0 -> - +2027-07-20 greek w2 feast5 fast0 exc2 rows=0,2 -> - +2027-07-21 greek w3 feast0 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2027-07-22 greek w4 feast2 fast0 exc0 rows=0,0 -> - +2027-07-23 greek w5 feast0 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2027-07-24 greek w6 feast0 fast0 exc0 rows=0,0 -> - +2027-07-25 greek w0 feast3 fast0 exc0 rows=0,0 -> - +2027-07-26 greek w1 feast0 fast0 exc11 rows=0,11 -> - +2027-07-27 greek w2 feast2 fast0 exc0 rows=0,0 -> - +2027-07-28 greek w3 feast0 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2027-07-29 greek w4 feast0 fast0 exc0 rows=0,0 -> - +2027-07-30 greek w5 feast0 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2027-07-31 greek w6 feast2 fast0 exc0 rows=0,0 -> - +2027-08-01 greek w0 feast3 fast4 exc1 rows=0,1 -> meat,fish,dairy,eggs +2027-08-02 greek w1 feast3 fast4 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2027-08-03 greek w2 feast3 fast4 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2027-08-04 greek w3 feast0 fast4 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2027-08-05 greek w4 feast2 fast4 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2027-08-06 greek w5 feast8 fast4 exc4 rows=0,4 -> meat,dairy,eggs +2027-08-07 greek w6 feast0 fast4 exc1 rows=0,0 -> meat,fish,dairy,eggs +2027-08-08 greek w0 feast0 fast4 exc1 rows=0,0 -> meat,fish,dairy,eggs +2027-08-09 greek w1 feast0 fast4 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2027-08-10 greek w2 feast0 fast4 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2027-08-11 greek w3 feast0 fast4 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2027-08-12 greek w4 feast0 fast4 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2027-08-13 greek w5 feast4 fast4 exc0 rows=0,4 -> meat,fish,dairy,eggs,wine,oil +2027-08-14 greek w6 feast2 fast4 exc1 rows=0,0 -> meat,fish,dairy,eggs +2027-08-15 greek w0 feast7 fast0 exc2 rows=0,2 -> - +2027-08-16 greek w1 feast5 fast0 exc1 rows=0,1 -> - +2027-08-17 greek w2 feast0 fast0 exc0 rows=0,0 -> - +2027-08-18 greek w3 feast0 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2027-08-19 greek w4 feast0 fast0 exc0 rows=0,0 -> - +2027-08-20 greek w5 feast0 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2027-08-21 greek w6 feast3 fast0 exc0 rows=0,0 -> - +2027-08-22 greek w0 feast0 fast0 exc0 rows=0,0 -> - +2027-08-23 greek w1 feast0 fast0 exc0 rows=0,0 -> - +2027-08-24 greek w2 feast3 fast0 exc0 rows=0,0 -> - +2027-08-25 greek w3 feast2 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2027-08-26 greek w4 feast4 fast0 exc0 rows=0,0 -> - +2027-08-27 greek w5 feast0 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2027-08-28 greek w6 feast0 fast0 exc0 rows=0,0 -> - +2027-08-29 greek w0 feast6 fast1 exc8 rows=0,8 -> meat,fish,dairy,eggs +2027-08-30 greek w1 feast4 fast0 exc0 rows=0,0 -> - +2027-08-31 greek w2 feast3 fast0 exc0 rows=0,0 -> - +2027-09-01 greek w3 feast4 fast1 exc1 rows=0,1 -> meat,fish,dairy,eggs +2027-09-02 greek w4 feast0 fast0 exc0 rows=0,0 -> - +2027-09-03 greek w5 feast0 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2027-09-04 greek w6 feast0 fast0 exc0 rows=0,0 -> - +2027-09-05 greek w0 feast2 fast0 exc0 rows=0,0 -> - +2027-09-06 greek w1 feast2 fast0 exc0 rows=0,0 -> - +2027-09-07 greek w2 feast3 fast0 exc0 rows=0,0 -> - +2027-09-08 greek w3 feast7 fast1 exc2 rows=0,2 -> meat,dairy,eggs +2027-09-09 greek w4 feast3 fast0 exc0 rows=0,0 -> - +2027-09-10 greek w5 feast0 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2027-09-11 greek w6 feast4 fast0 exc0 rows=0,0,0 -> - +2027-09-12 greek w0 feast0 fast0 exc1 rows=0,0,1 -> - +2027-09-13 greek w1 feast3 fast0 exc1 rows=0,1 -> - +2027-09-14 greek w2 feast8 fast1 exc8 rows=0,8 -> meat,fish,dairy,eggs +2027-09-15 greek w3 feast2 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2027-09-16 greek w4 feast2 fast0 exc0 rows=0,0 -> - +2027-09-17 greek w5 feast0 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2027-09-18 greek w6 feast0 fast0 exc0 rows=0,0,0 -> - +2027-09-19 greek w0 feast3 fast0 exc0 rows=0,0,0 -> - +2027-09-20 greek w1 feast3 fast0 exc0 rows=0,0 -> - +2027-09-21 greek w2 feast4 fast0 exc0 rows=0,0 -> - +2027-09-22 greek w3 feast2 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2027-09-23 greek w4 feast3 fast0 exc1 rows=0,1 -> - +2027-09-24 greek w5 feast4 fast1 exc2 rows=0,2 -> meat,dairy,eggs +2027-09-25 greek w6 feast0 fast0 exc0 rows=0,0 -> - +2027-09-26 greek w0 feast5 fast0 exc2 rows=0,2 -> - +2027-09-27 greek w1 feast3 fast0 exc0 rows=0,0 -> - +2027-09-28 greek w2 feast4 fast0 exc1 rows=0,1 -> - +2027-09-29 greek w3 feast2 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2027-09-30 greek w4 feast3 fast0 exc0 rows=0,0 -> - +2027-10-01 greek w5 feast0 fast0 exc11 rows=0,11 -> - +2027-10-02 greek w6 feast2 fast0 exc0 rows=0,0 -> - +2027-10-03 greek w0 feast2 fast0 exc0 rows=0,0 -> - +2027-10-04 greek w1 feast3 fast0 exc0 rows=0,0 -> - +2027-10-05 greek w2 feast3 fast0 exc0 rows=0,0 -> - +2027-10-06 greek w3 feast5 fast1 exc2 rows=0,2 -> meat,dairy,eggs +2027-10-07 greek w4 feast2 fast0 exc0 rows=0,0 -> - +2027-10-08 greek w5 feast0 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2027-10-09 greek w6 feast5 fast0 exc2 rows=0,2 -> - +2027-10-10 greek w0 feast0 fast0 exc0 rows=0,0 -> - +2027-10-11 greek w1 feast0 fast0 exc0 rows=0,0 -> - +2027-10-12 greek w2 feast0 fast0 exc0 rows=0,0 -> - +2027-10-13 greek w3 feast0 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2027-10-14 greek w4 feast2 fast0 exc0 rows=0,0 -> - +2027-10-15 greek w5 feast0 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2027-10-16 greek w6 feast0 fast0 exc0 rows=0,0 -> - +2027-10-17 greek w0 feast0 fast0 exc0 rows=0,0,0 -> - +2027-10-18 greek w1 feast4 fast0 exc0 rows=0,0 -> - +2027-10-19 greek w2 feast2 fast0 exc0 rows=0,0 -> - +2027-10-20 greek w3 feast2 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2027-10-21 greek w4 feast2 fast0 exc0 rows=0,0 -> - +2027-10-22 greek w5 feast0 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2027-10-23 greek w6 feast3 fast0 exc0 rows=0,0,0 -> - +2027-10-24 greek w0 feast0 fast0 exc0 rows=0,0 -> - +2027-10-25 greek w1 feast0 fast0 exc0 rows=0,0 -> - +2027-10-26 greek w2 feast4 fast0 exc2 rows=0,2 -> - +2027-10-27 greek w3 feast0 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2027-10-28 greek w4 feast3 fast0 exc0 rows=0,0 -> - +2027-10-29 greek w5 feast3 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2027-10-30 greek w6 feast0 fast0 exc0 rows=0,0 -> - +2027-10-31 greek w0 feast0 fast0 exc0 rows=0,0 -> - +2027-11-01 greek w1 feast2 fast0 exc0 rows=0,0 -> - +2027-11-02 greek w2 feast0 fast0 exc0 rows=0,0 -> - +2027-11-03 greek w3 feast0 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2027-11-04 greek w4 feast0 fast0 exc0 rows=0,0 -> - +2027-11-05 greek w5 feast3 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2027-11-06 greek w6 feast5 fast0 exc2 rows=0,0,2 -> - +2027-11-07 greek w0 feast0 fast0 exc0 rows=0,0,0 -> - +2027-11-08 greek w1 feast5 fast0 exc2 rows=0,2 -> - +2027-11-09 greek w2 feast0 fast0 exc0 rows=0,0 -> - +2027-11-10 greek w3 feast0 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2027-11-11 greek w4 feast0 fast0 exc0 rows=0,0 -> - +2027-11-12 greek w5 feast2 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2027-11-13 greek w6 feast5 fast0 exc2 rows=0,2 -> - +2027-11-14 greek w0 feast4 fast0 exc1 rows=0,1 -> - +2027-11-15 greek w1 feast0 fast5 exc2 rows=0,0 -> meat,dairy,eggs +2027-11-16 greek w2 feast6 fast5 exc2 rows=0,2 -> meat,dairy,eggs +2027-11-17 greek w3 feast3 fast5 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2027-11-18 greek w4 feast0 fast5 exc2 rows=0,0 -> meat,dairy,eggs +2027-11-19 greek w5 feast3 fast5 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2027-11-20 greek w6 feast0 fast5 exc2 rows=0,0 -> meat,dairy,eggs +2027-11-21 greek w0 feast7 fast5 exc2 rows=0,2 -> meat,dairy,eggs +2027-11-22 greek w1 feast2 fast5 exc2 rows=0,0 -> meat,dairy,eggs +2027-11-23 greek w2 feast0 fast5 exc2 rows=0,0 -> meat,dairy,eggs +2027-11-24 greek w3 feast2 fast5 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2027-11-25 greek w4 feast0 fast5 exc2 rows=0,1 -> meat,dairy,eggs +2027-11-26 greek w5 feast0 fast5 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2027-11-27 greek w6 feast2 fast5 exc2 rows=0,0 -> meat,dairy,eggs +2027-11-28 greek w0 feast2 fast5 exc2 rows=0,0 -> meat,dairy,eggs +2027-11-29 greek w1 feast0 fast5 exc2 rows=0,0 -> meat,dairy,eggs +2027-11-30 greek w2 feast4 fast5 exc2 rows=0,2 -> meat,dairy,eggs +2027-12-01 greek w3 feast0 fast5 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2027-12-02 greek w4 feast0 fast5 exc2 rows=0,0 -> meat,dairy,eggs +2027-12-03 greek w5 feast3 fast5 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2027-12-04 greek w6 feast0 fast5 exc2 rows=0,0 -> meat,dairy,eggs +2027-12-05 greek w0 feast4 fast5 exc2 rows=0,0 -> meat,dairy,eggs +2027-12-06 greek w1 feast5 fast5 exc2 rows=0,2 -> meat,dairy,eggs +2027-12-07 greek w2 feast3 fast5 exc2 rows=0,0 -> meat,dairy,eggs +2027-12-08 greek w3 feast0 fast5 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2027-12-09 greek w4 feast3 fast5 exc2 rows=0,0 -> meat,dairy,eggs +2027-12-10 greek w5 feast0 fast5 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2027-12-11 greek w6 feast0 fast5 exc2 rows=0,0 -> meat,dairy,eggs +2027-12-12 greek w0 feast2 fast5 exc2 rows=0,0,0 -> meat,dairy,eggs +2027-12-13 greek w1 feast0 fast5 exc1 rows=0,1 -> meat,fish,dairy,eggs +2027-12-14 greek w2 feast0 fast5 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2027-12-15 greek w3 feast2 fast5 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2027-12-16 greek w4 feast0 fast5 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2027-12-17 greek w5 feast2 fast5 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2027-12-18 greek w6 feast0 fast5 exc1 rows=0,0,0 -> meat,fish,dairy,eggs +2027-12-19 greek w0 feast0 fast5 exc1 rows=0,0,0 -> meat,fish,dairy,eggs +2027-12-20 greek w1 feast0 fast5 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2027-12-21 greek w2 feast0 fast5 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2027-12-22 greek w3 feast0 fast5 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2027-12-23 greek w4 feast0 fast5 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2027-12-24 greek w5 feast0 fast5 exc1 rows=0,0,9 -> meat,fish,dairy,eggs +2027-12-25 greek w6 feast8 fast0 exc11 rows=0,11 -> - +2027-12-26 greek w0 feast3 fast0 exc11 rows=0,0,11 -> - +2027-12-27 greek w1 feast2 fast0 exc11 rows=0,11 -> - +2027-12-28 greek w2 feast0 fast0 exc11 rows=0,11 -> - +2027-12-29 greek w3 feast0 fast0 exc11 rows=0,11 -> - +2027-12-30 greek w4 feast0 fast0 exc11 rows=0,11 -> - +2027-12-31 greek w5 feast0 fast0 exc11 rows=0,0,11 -> - +2028-01-01 greek w6 feast6 fast0 exc11 rows=0,0,11 -> - +2028-01-02 greek w0 feast4 fast0 exc11 rows=0,0,11 -> - +2028-01-03 greek w1 feast0 fast0 exc11 rows=0,11 -> - +2028-01-04 greek w2 feast0 fast0 exc11 rows=0,11 -> - +2028-01-05 greek w3 feast0 fast1 exc9 rows=0,0,9 -> meat,fish,dairy,eggs,wine,oil +2028-01-06 greek w4 feast8 fast0 exc11 rows=0,11 -> - +2028-01-07 greek w5 feast3 fast1 exc2 rows=0,2 -> meat,dairy,eggs +2028-01-08 greek w6 feast0 fast0 exc0 rows=0,0,0 -> - +2028-01-09 greek w0 feast4 fast0 exc0 rows=0,0,0 -> - +2028-01-10 greek w1 feast0 fast0 exc0 rows=0,0 -> - +2028-01-11 greek w2 feast4 fast0 exc0 rows=0,0 -> - +2028-01-12 greek w3 feast3 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2028-01-13 greek w4 feast0 fast0 exc0 rows=0,0 -> - +2028-01-14 greek w5 feast4 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2028-01-15 greek w6 feast2 fast0 exc0 rows=0,0 -> - +2028-01-16 greek w0 feast2 fast0 exc0 rows=0,0 -> - +2028-01-17 greek w1 feast5 fast0 exc2 rows=0,2 -> - +2028-01-18 greek w2 feast2 fast0 exc0 rows=0,0 -> - +2028-01-19 greek w3 feast2 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2028-01-20 greek w4 feast5 fast0 exc2 rows=0,2 -> - +2028-01-21 greek w5 feast0 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2028-01-22 greek w6 feast0 fast0 exc0 rows=0,0 -> - +2028-01-23 greek w0 feast5 fast0 exc0 rows=0,0,0 -> - +2028-01-24 greek w1 feast4 fast0 exc0 rows=0,0 -> - +2028-01-25 greek w2 feast4 fast0 exc0 rows=0,0 -> - +2028-01-26 greek w3 feast0 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2028-01-27 greek w4 feast4 fast0 exc0 rows=0,0 -> - +2028-01-28 greek w5 feast2 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2028-01-29 greek w6 feast2 fast0 exc0 rows=0,0 -> - +2028-01-30 greek w0 feast5 fast0 exc2 rows=0,2 -> - +2028-01-31 greek w1 feast3 fast0 exc0 rows=0,0 -> - +2028-02-01 greek w2 feast2 fast0 exc0 rows=0,0 -> - +2028-02-02 greek w3 feast8 fast1 exc2 rows=0,2 -> meat,dairy,eggs +2028-02-03 greek w4 feast2 fast0 exc0 rows=0,0 -> - +2028-02-04 greek w5 feast0 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2028-02-05 greek w6 feast0 fast0 exc0 rows=0,0 -> - +2028-02-06 greek w0 feast0 fast0 exc11 rows=0,11 -> - +2028-02-07 greek w1 feast0 fast0 exc11 rows=0,11 -> - +2028-02-08 greek w2 feast2 fast0 exc11 rows=0,11 -> - +2028-02-09 greek w3 feast4 fast0 exc11 rows=0,11 -> - +2028-02-10 greek w4 feast0 fast0 exc11 rows=0,11 -> - +2028-02-11 greek w5 feast3 fast0 exc11 rows=0,11 -> - +2028-02-12 greek w6 feast4 fast0 exc11 rows=0,11 -> - +2028-02-13 greek w0 feast0 fast0 exc0 rows=0,0 -> - +2028-02-14 greek w1 feast4 fast0 exc0 rows=0,0 -> - +2028-02-15 greek w2 feast0 fast0 exc0 rows=0,0 -> - +2028-02-16 greek w3 feast0 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2028-02-17 greek w4 feast4 fast0 exc0 rows=0,0 -> - +2028-02-18 greek w5 feast0 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2028-02-19 greek w6 feast0 fast0 exc0 rows=0,0 -> - +2028-02-20 greek w0 feast0 fast0 exc0 rows=0,0 -> - +2028-02-21 greek w1 feast0 fast1 exc7 rows=0,7 -> meat +2028-02-22 greek w2 feast0 fast1 exc7 rows=0,7 -> meat +2028-02-23 greek w3 feast0 fast1 exc7 rows=0,7 -> meat +2028-02-24 greek w4 feast4 fast1 exc7 rows=1,7 -> meat +2028-02-25 greek w5 feast0 fast1 exc7 rows=0,7 -> meat +2028-02-26 greek w6 feast0 fast1 exc7 rows=0,7 -> meat +2028-02-27 greek w0 feast0 fast1 exc7 rows=7 -> meat +2028-02-28 greek w1 feast0 fast2 exc10 rows=0,10 -> meat,fish,dairy,eggs,wine,oil +2028-02-29 greek w2 feast0 fast2 exc10 rows=0,10 -> meat,fish,dairy,eggs,wine,oil +2028-03-01 greek w3 feast1 fast2 exc10 rows=0,10 -> meat,fish,dairy,eggs,wine,oil +2028-03-02 greek w4 feast3 fast2 exc10 rows=0,10 -> meat,fish,dairy,eggs,wine,oil +2028-03-03 greek w5 feast1 fast2 exc10 rows=0,10 -> meat,fish,dairy,eggs,wine,oil +2028-03-04 greek w6 feast4 fast2 exc3 rows=0,3 -> meat,fish,dairy,eggs +2028-03-05 greek w0 feast0 fast2 exc3 rows=0,3 -> meat,fish,dairy,eggs +2028-03-06 greek w1 feast0 fast2 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2028-03-07 greek w2 feast0 fast2 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2028-03-08 greek w3 feast1 fast2 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2028-03-09 greek w4 feast4 fast2 exc1 rows=0,1 -> meat,fish,dairy,eggs +2028-03-10 greek w5 feast1 fast2 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2028-03-11 greek w6 feast3 fast2 exc3 rows=0,3 -> meat,fish,dairy,eggs +2028-03-12 greek w0 feast0 fast2 exc3 rows=0,3 -> meat,fish,dairy,eggs +2028-03-13 greek w1 feast0 fast2 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2028-03-14 greek w2 feast0 fast2 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2028-03-15 greek w3 feast1 fast2 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2028-03-16 greek w4 feast0 fast2 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2028-03-17 greek w5 feast3 fast2 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2028-03-18 greek w6 feast2 fast2 exc3 rows=0,3 -> meat,fish,dairy,eggs +2028-03-19 greek w0 feast0 fast2 exc3 rows=0,3 -> meat,fish,dairy,eggs +2028-03-20 greek w1 feast0 fast2 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2028-03-21 greek w2 feast0 fast2 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2028-03-22 greek w3 feast1 fast2 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2028-03-23 greek w4 feast0 fast2 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2028-03-24 greek w5 feast1 fast2 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2028-03-25 greek w6 feast7 fast2 exc4 rows=3,4 -> meat,dairy,eggs +2028-03-26 greek w0 feast3 fast2 exc3 rows=3,3 -> meat,fish,dairy,eggs +2028-03-27 greek w1 feast0 fast2 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2028-03-28 greek w2 feast0 fast2 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2028-03-29 greek w3 feast1 fast2 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2028-03-30 greek w4 feast0 fast2 exc3 rows=0,3 -> meat,fish,dairy,eggs +2028-03-31 greek w5 feast1 fast2 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2028-04-01 greek w6 feast3 fast2 exc3 rows=0,3 -> meat,fish,dairy,eggs +2028-04-02 greek w0 feast0 fast2 exc3 rows=0,3 -> meat,fish,dairy,eggs +2028-04-03 greek w1 feast0 fast2 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2028-04-04 greek w2 feast0 fast2 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2028-04-05 greek w3 feast1 fast2 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2028-04-06 greek w4 feast4 fast2 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2028-04-07 greek w5 feast4 fast2 exc1 rows=0,1 -> meat,fish,dairy,eggs +2028-04-08 greek w6 feast0 fast2 exc6 rows=0,6 -> meat,fish,dairy,eggs +2028-04-09 greek w0 feast8 fast2 exc4 rows=0,4 -> meat,dairy,eggs +2028-04-10 greek w1 feast1 fast2 exc10 rows=0,10 -> meat,fish,dairy,eggs,wine,oil +2028-04-11 greek w2 feast1 fast2 exc10 rows=0,10 -> meat,fish,dairy,eggs,wine,oil +2028-04-12 greek w3 feast1 fast2 exc10 rows=0,10 -> meat,fish,dairy,eggs,wine,oil +2028-04-13 greek w4 feast3 fast2 exc3 rows=0,3 -> meat,fish,dairy,eggs +2028-04-14 greek w5 feast0 fast2 exc9 rows=0,9 -> meat,fish,dairy,eggs,wine,oil +2028-04-15 greek w6 feast3 fast2 exc5 rows=0,5 -> meat,fish,dairy,eggs,oil +2028-04-16 greek w0 feast8 fast0 exc11 rows=0,11 -> - +2028-04-17 greek w1 feast3 fast0 exc11 rows=0,11 -> - +2028-04-18 greek w2 feast0 fast0 exc11 rows=0,11 -> - +2028-04-19 greek w3 feast0 fast0 exc11 rows=0,11 -> - +2028-04-20 greek w4 feast0 fast0 exc11 rows=0,11 -> - +2028-04-21 greek w5 feast0 fast0 exc11 rows=0,11 -> - +2028-04-22 greek w6 feast0 fast0 exc11 rows=0,11 -> - +2028-04-23 greek w0 feast5 fast0 exc1 rows=0,1 -> - +2028-04-24 greek w1 feast0 fast0 exc0 rows=0,0 -> - +2028-04-25 greek w2 feast4 fast0 exc1 rows=0,1 -> - +2028-04-26 greek w3 feast3 fast1 exc1 rows=0,1 -> meat,fish,dairy,eggs +2028-04-27 greek w4 feast2 fast0 exc0 rows=0,0 -> - +2028-04-28 greek w5 feast0 fast1 exc1 rows=0,1 -> meat,fish,dairy,eggs +2028-04-29 greek w6 feast0 fast0 exc0 rows=0,0 -> - +2028-04-30 greek w0 feast4 fast0 exc0 rows=0,0 -> - +2028-05-01 greek w1 feast3 fast0 exc0 rows=0,0 -> - +2028-05-02 greek w2 feast0 fast0 exc0 rows=0,0 -> - +2028-05-03 greek w3 feast0 fast1 exc1 rows=0,1 -> meat,fish,dairy,eggs +2028-05-04 greek w4 feast0 fast0 exc0 rows=0,0 -> - +2028-05-05 greek w5 feast0 fast1 exc1 rows=0,1 -> meat,fish,dairy,eggs +2028-05-06 greek w6 feast0 fast0 exc0 rows=0,0 -> - +2028-05-07 greek w0 feast0 fast0 exc11 rows=0,11 -> - +2028-05-08 greek w1 feast5 fast0 exc2 rows=0,2 -> - +2028-05-09 greek w2 feast4 fast0 exc0 rows=0,0 -> - +2028-05-10 greek w3 feast4 fast1 exc2 rows=0,2 -> meat,dairy,eggs +2028-05-11 greek w4 feast0 fast0 exc11 rows=0,11 -> - +2028-05-12 greek w5 feast0 fast1 exc1 rows=0,1 -> meat,fish,dairy,eggs +2028-05-13 greek w6 feast0 fast0 exc0 rows=0,0 -> - +2028-05-14 greek w0 feast2 fast0 exc0 rows=0,0 -> - +2028-05-15 greek w1 feast3 fast0 exc0 rows=0,0 -> - +2028-05-16 greek w2 feast3 fast0 exc0 rows=0,0 -> - +2028-05-17 greek w3 feast0 fast1 exc1 rows=0,1 -> meat,fish,dairy,eggs +2028-05-18 greek w4 feast0 fast0 exc0 rows=0,0 -> - +2028-05-19 greek w5 feast4 fast1 exc1 rows=0,1 -> meat,fish,dairy,eggs +2028-05-20 greek w6 feast3 fast0 exc0 rows=0,0 -> - +2028-05-21 greek w0 feast4 fast0 exc0 rows=0,0 -> - +2028-05-22 greek w1 feast0 fast0 exc0 rows=0,0 -> - +2028-05-23 greek w2 feast3 fast0 exc0 rows=0,0 -> - +2028-05-24 greek w3 feast3 fast1 exc2 rows=0,2 -> meat,dairy,eggs +2028-05-25 greek w4 feast8 fast0 exc0 rows=0,0 -> - +2028-05-26 greek w5 feast2 fast1 exc1 rows=0,1 -> meat,fish,dairy,eggs +2028-05-27 greek w6 feast3 fast0 exc0 rows=0,0 -> - +2028-05-28 greek w0 feast2 fast0 exc0 rows=0,0 -> - +2028-05-29 greek w1 feast2 fast0 exc0 rows=0,0 -> - +2028-05-30 greek w2 feast0 fast0 exc0 rows=0,0 -> - +2028-05-31 greek w3 feast0 fast1 exc1 rows=0,1 -> meat,fish,dairy,eggs +2028-06-01 greek w4 feast0 fast0 exc0 rows=0,0 -> - +2028-06-02 greek w5 feast0 fast1 exc1 rows=0,1 -> meat,fish,dairy,eggs +2028-06-03 greek w6 feast0 fast0 exc0 rows=0,0 -> - +2028-06-04 greek w0 feast8 fast0 exc0 rows=0,0 -> - +2028-06-05 greek w1 feast0 fast0 exc11 rows=0,11 -> - +2028-06-06 greek w2 feast0 fast0 exc11 rows=0,11 -> - +2028-06-07 greek w3 feast0 fast0 exc11 rows=0,11 -> - +2028-06-08 greek w4 feast2 fast0 exc11 rows=0,11 -> - +2028-06-09 greek w5 feast3 fast0 exc11 rows=0,11 -> - +2028-06-10 greek w6 feast4 fast0 exc11 rows=0,11 -> - +2028-06-11 greek w0 feast4 fast0 exc0 rows=0,0 -> - +2028-06-12 greek w1 feast2 fast3 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2028-06-13 greek w2 feast0 fast3 exc1 rows=0,0 -> meat,fish,dairy,eggs +2028-06-14 greek w3 feast0 fast3 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2028-06-15 greek w4 feast4 fast3 exc1 rows=0,0 -> meat,fish,dairy,eggs +2028-06-16 greek w5 feast4 fast3 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2028-06-17 greek w6 feast0 fast3 exc2 rows=0,0 -> meat,dairy,eggs +2028-06-18 greek w0 feast0 fast3 exc2 rows=0,0 -> meat,dairy,eggs +2028-06-19 greek w1 feast4 fast3 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2028-06-20 greek w2 feast0 fast3 exc1 rows=0,0 -> meat,fish,dairy,eggs +2028-06-21 greek w3 feast0 fast3 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2028-06-22 greek w4 feast0 fast3 exc1 rows=0,0 -> meat,fish,dairy,eggs +2028-06-23 greek w5 feast0 fast3 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2028-06-24 greek w6 feast6 fast3 exc2 rows=0,2 -> meat,dairy,eggs +2028-06-25 greek w0 feast3 fast3 exc2 rows=0,0 -> meat,dairy,eggs +2028-06-26 greek w1 feast4 fast3 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2028-06-27 greek w2 feast0 fast3 exc1 rows=0,0 -> meat,fish,dairy,eggs +2028-06-28 greek w3 feast2 fast3 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2028-06-29 greek w4 feast6 fast0 exc2 rows=0,2 -> - +2028-06-30 greek w5 feast4 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2028-07-01 greek w6 feast2 fast0 exc0 rows=0,0 -> - +2028-07-02 greek w0 feast3 fast0 exc0 rows=0,0 -> - +2028-07-03 greek w1 feast4 fast0 exc0 rows=0,0 -> - +2028-07-04 greek w2 feast0 fast0 exc0 rows=0,0 -> - +2028-07-05 greek w3 feast0 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2028-07-06 greek w4 feast0 fast0 exc0 rows=0,0 -> - +2028-07-07 greek w5 feast0 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2028-07-08 greek w6 feast2 fast0 exc0 rows=0,0 -> - +2028-07-09 greek w0 feast0 fast0 exc0 rows=0,0 -> - +2028-07-10 greek w1 feast0 fast0 exc0 rows=0,0 -> - +2028-07-11 greek w2 feast2 fast0 exc0 rows=0,0 -> - +2028-07-12 greek w3 feast0 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2028-07-13 greek w4 feast2 fast0 exc0 rows=0,0 -> - +2028-07-14 greek w5 feast2 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2028-07-15 greek w6 feast0 fast0 exc0 rows=0,0 -> - +2028-07-16 greek w0 feast0 fast0 exc0 rows=0,0,0 -> - +2028-07-17 greek w1 feast4 fast0 exc0 rows=0,0 -> - +2028-07-18 greek w2 feast0 fast0 exc0 rows=0,0 -> - +2028-07-19 greek w3 feast0 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2028-07-20 greek w4 feast5 fast0 exc2 rows=0,2 -> - +2028-07-21 greek w5 feast0 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2028-07-22 greek w6 feast2 fast0 exc0 rows=0,0 -> - +2028-07-23 greek w0 feast0 fast0 exc0 rows=0,0 -> - +2028-07-24 greek w1 feast0 fast0 exc0 rows=0,0 -> - +2028-07-25 greek w2 feast3 fast0 exc0 rows=0,0 -> - +2028-07-26 greek w3 feast0 fast0 exc11 rows=0,11 -> - +2028-07-27 greek w4 feast2 fast0 exc0 rows=0,0 -> - +2028-07-28 greek w5 feast0 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2028-07-29 greek w6 feast0 fast0 exc0 rows=0,0 -> - +2028-07-30 greek w0 feast0 fast0 exc0 rows=0,0 -> - +2028-07-31 greek w1 feast2 fast0 exc0 rows=0,0 -> - +2028-08-01 greek w2 feast3 fast4 exc0 rows=0,1 -> meat,fish,dairy,eggs,wine,oil +2028-08-02 greek w3 feast3 fast4 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2028-08-03 greek w4 feast3 fast4 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2028-08-04 greek w5 feast0 fast4 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2028-08-05 greek w6 feast2 fast4 exc1 rows=0,0 -> meat,fish,dairy,eggs +2028-08-06 greek w0 feast8 fast4 exc4 rows=0,4 -> meat,dairy,eggs +2028-08-07 greek w1 feast0 fast4 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2028-08-08 greek w2 feast0 fast4 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2028-08-09 greek w3 feast0 fast4 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2028-08-10 greek w4 feast0 fast4 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2028-08-11 greek w5 feast0 fast4 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2028-08-12 greek w6 feast0 fast4 exc1 rows=0,0 -> meat,fish,dairy,eggs +2028-08-13 greek w0 feast4 fast4 exc1 rows=0,4 -> meat,fish,dairy,eggs +2028-08-14 greek w1 feast2 fast4 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2028-08-15 greek w2 feast7 fast0 exc2 rows=0,2 -> - +2028-08-16 greek w3 feast5 fast1 exc1 rows=0,1 -> meat,fish,dairy,eggs +2028-08-17 greek w4 feast0 fast0 exc0 rows=0,0 -> - +2028-08-18 greek w5 feast0 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2028-08-19 greek w6 feast0 fast0 exc0 rows=0,0 -> - +2028-08-20 greek w0 feast0 fast0 exc0 rows=0,0 -> - +2028-08-21 greek w1 feast3 fast0 exc0 rows=0,0 -> - +2028-08-22 greek w2 feast0 fast0 exc0 rows=0,0 -> - +2028-08-23 greek w3 feast0 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2028-08-24 greek w4 feast3 fast0 exc0 rows=0,0 -> - +2028-08-25 greek w5 feast2 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2028-08-26 greek w6 feast4 fast0 exc0 rows=0,0 -> - +2028-08-27 greek w0 feast0 fast0 exc0 rows=0,0 -> - +2028-08-28 greek w1 feast0 fast0 exc0 rows=0,0 -> - +2028-08-29 greek w2 feast6 fast1 exc8 rows=0,8 -> meat,fish,dairy,eggs +2028-08-30 greek w3 feast4 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2028-08-31 greek w4 feast3 fast0 exc0 rows=0,0 -> - +2028-09-01 greek w5 feast4 fast1 exc1 rows=0,1 -> meat,fish,dairy,eggs +2028-09-02 greek w6 feast0 fast0 exc0 rows=0,0 -> - +2028-09-03 greek w0 feast0 fast0 exc0 rows=0,0 -> - +2028-09-04 greek w1 feast0 fast0 exc0 rows=0,0 -> - +2028-09-05 greek w2 feast2 fast0 exc0 rows=0,0 -> - +2028-09-06 greek w3 feast2 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2028-09-07 greek w4 feast3 fast0 exc0 rows=0,0 -> - +2028-09-08 greek w5 feast7 fast1 exc2 rows=0,2 -> meat,dairy,eggs +2028-09-09 greek w6 feast3 fast0 exc0 rows=0,0,0 -> - +2028-09-10 greek w0 feast0 fast0 exc0 rows=0,0,0 -> - +2028-09-11 greek w1 feast4 fast0 exc0 rows=0,0 -> - +2028-09-12 greek w2 feast0 fast0 exc1 rows=0,1 -> - +2028-09-13 greek w3 feast3 fast1 exc1 rows=0,1 -> meat,fish,dairy,eggs +2028-09-14 greek w4 feast8 fast1 exc8 rows=0,8 -> meat,fish,dairy,eggs +2028-09-15 greek w5 feast2 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2028-09-16 greek w6 feast2 fast0 exc0 rows=0,0,0 -> - +2028-09-17 greek w0 feast0 fast0 exc0 rows=0,0,0 -> - +2028-09-18 greek w1 feast0 fast0 exc0 rows=0,0 -> - +2028-09-19 greek w2 feast3 fast0 exc0 rows=0,0 -> - +2028-09-20 greek w3 feast3 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2028-09-21 greek w4 feast4 fast0 exc0 rows=0,0 -> - +2028-09-22 greek w5 feast2 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2028-09-23 greek w6 feast3 fast0 exc1 rows=0,1 -> - +2028-09-24 greek w0 feast4 fast0 exc2 rows=0,2 -> - +2028-09-25 greek w1 feast0 fast0 exc0 rows=0,0 -> - +2028-09-26 greek w2 feast5 fast0 exc2 rows=0,2 -> - +2028-09-27 greek w3 feast3 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2028-09-28 greek w4 feast4 fast0 exc1 rows=0,1 -> - +2028-09-29 greek w5 feast2 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2028-09-30 greek w6 feast3 fast0 exc0 rows=0,0 -> - +2028-10-01 greek w0 feast0 fast0 exc11 rows=0,11 -> - +2028-10-02 greek w1 feast2 fast0 exc0 rows=0,0 -> - +2028-10-03 greek w2 feast2 fast0 exc0 rows=0,0 -> - +2028-10-04 greek w3 feast3 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2028-10-05 greek w4 feast3 fast0 exc0 rows=0,0 -> - +2028-10-06 greek w5 feast5 fast1 exc2 rows=0,2 -> meat,dairy,eggs +2028-10-07 greek w6 feast2 fast0 exc0 rows=0,0 -> - +2028-10-08 greek w0 feast0 fast0 exc0 rows=0,0 -> - +2028-10-09 greek w1 feast5 fast0 exc2 rows=0,2 -> - +2028-10-10 greek w2 feast0 fast0 exc0 rows=0,0 -> - +2028-10-11 greek w3 feast0 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2028-10-12 greek w4 feast0 fast0 exc0 rows=0,0 -> - +2028-10-13 greek w5 feast0 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2028-10-14 greek w6 feast2 fast0 exc0 rows=0,0 -> - +2028-10-15 greek w0 feast0 fast0 exc0 rows=0,0,0 -> - +2028-10-16 greek w1 feast0 fast0 exc0 rows=0,0 -> - +2028-10-17 greek w2 feast0 fast0 exc0 rows=0,0 -> - +2028-10-18 greek w3 feast4 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2028-10-19 greek w4 feast2 fast0 exc0 rows=0,0 -> - +2028-10-20 greek w5 feast2 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2028-10-21 greek w6 feast2 fast0 exc0 rows=0,0,0 -> - +2028-10-22 greek w0 feast0 fast0 exc0 rows=0,0 -> - +2028-10-23 greek w1 feast3 fast0 exc0 rows=0,0 -> - +2028-10-24 greek w2 feast0 fast0 exc0 rows=0,0 -> - +2028-10-25 greek w3 feast0 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2028-10-26 greek w4 feast4 fast0 exc2 rows=0,2 -> - +2028-10-27 greek w5 feast0 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2028-10-28 greek w6 feast3 fast0 exc0 rows=0,0 -> - +2028-10-29 greek w0 feast3 fast0 exc0 rows=0,0 -> - +2028-10-30 greek w1 feast0 fast0 exc0 rows=0,0 -> - +2028-10-31 greek w2 feast0 fast0 exc0 rows=0,0 -> - +2028-11-01 greek w3 feast2 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2028-11-02 greek w4 feast0 fast0 exc0 rows=0,0 -> - +2028-11-03 greek w5 feast0 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2028-11-04 greek w6 feast5 fast0 exc2 rows=0,0,2 -> - +2028-11-05 greek w0 feast3 fast0 exc0 rows=0,0,0 -> - +2028-11-06 greek w1 feast2 fast0 exc0 rows=0,0 -> - +2028-11-07 greek w2 feast0 fast0 exc0 rows=0,0 -> - +2028-11-08 greek w3 feast5 fast1 exc2 rows=0,2 -> meat,dairy,eggs +2028-11-09 greek w4 feast0 fast0 exc0 rows=0,0 -> - +2028-11-10 greek w5 feast0 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2028-11-11 greek w6 feast0 fast0 exc0 rows=0,0 -> - +2028-11-12 greek w0 feast2 fast0 exc0 rows=0,0 -> - +2028-11-13 greek w1 feast5 fast0 exc2 rows=0,2 -> - +2028-11-14 greek w2 feast4 fast0 exc1 rows=0,1 -> - +2028-11-15 greek w3 feast0 fast5 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2028-11-16 greek w4 feast6 fast5 exc2 rows=0,2 -> meat,dairy,eggs +2028-11-17 greek w5 feast3 fast5 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2028-11-18 greek w6 feast0 fast5 exc2 rows=0,0 -> meat,dairy,eggs +2028-11-19 greek w0 feast3 fast5 exc2 rows=0,0 -> meat,dairy,eggs +2028-11-20 greek w1 feast0 fast5 exc2 rows=0,0 -> meat,dairy,eggs +2028-11-21 greek w2 feast7 fast5 exc2 rows=0,2 -> meat,dairy,eggs +2028-11-22 greek w3 feast2 fast5 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2028-11-23 greek w4 feast0 fast5 exc2 rows=0,0 -> meat,dairy,eggs +2028-11-24 greek w5 feast2 fast5 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2028-11-25 greek w6 feast0 fast5 exc2 rows=0,1 -> meat,dairy,eggs +2028-11-26 greek w0 feast0 fast5 exc2 rows=0,0 -> meat,dairy,eggs +2028-11-27 greek w1 feast2 fast5 exc2 rows=0,0 -> meat,dairy,eggs +2028-11-28 greek w2 feast2 fast5 exc2 rows=0,0 -> meat,dairy,eggs +2028-11-29 greek w3 feast0 fast5 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2028-11-30 greek w4 feast4 fast5 exc2 rows=0,2 -> meat,dairy,eggs +2028-12-01 greek w5 feast0 fast5 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2028-12-02 greek w6 feast0 fast5 exc2 rows=0,0 -> meat,dairy,eggs +2028-12-03 greek w0 feast3 fast5 exc2 rows=0,0 -> meat,dairy,eggs +2028-12-04 greek w1 feast0 fast5 exc2 rows=0,0 -> meat,dairy,eggs +2028-12-05 greek w2 feast4 fast5 exc2 rows=0,0 -> meat,dairy,eggs +2028-12-06 greek w3 feast5 fast5 exc2 rows=0,2 -> meat,dairy,eggs +2028-12-07 greek w4 feast3 fast5 exc2 rows=0,0 -> meat,dairy,eggs +2028-12-08 greek w5 feast0 fast5 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2028-12-09 greek w6 feast3 fast5 exc2 rows=0,0 -> meat,dairy,eggs +2028-12-10 greek w0 feast0 fast5 exc2 rows=0,0 -> meat,dairy,eggs +2028-12-11 greek w1 feast0 fast5 exc2 rows=0,0 -> meat,dairy,eggs +2028-12-12 greek w2 feast2 fast5 exc2 rows=0,0 -> meat,dairy,eggs +2028-12-13 greek w3 feast0 fast5 exc1 rows=0,1 -> meat,fish,dairy,eggs +2028-12-14 greek w4 feast0 fast5 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2028-12-15 greek w5 feast2 fast5 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2028-12-16 greek w6 feast0 fast5 exc1 rows=0,0 -> meat,fish,dairy,eggs +2028-12-17 greek w0 feast2 fast5 exc1 rows=0,0,0 -> meat,fish,dairy,eggs +2028-12-18 greek w1 feast0 fast5 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2028-12-19 greek w2 feast0 fast5 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2028-12-20 greek w3 feast0 fast5 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2028-12-21 greek w4 feast0 fast5 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2028-12-22 greek w5 feast0 fast5 exc0 rows=0,0,0 -> meat,fish,dairy,eggs,wine,oil +2028-12-23 greek w6 feast0 fast5 exc1 rows=0,0,0 -> meat,fish,dairy,eggs +2028-12-24 greek w0 feast0 fast5 exc1 rows=0,0,9 -> meat,fish,dairy,eggs +2028-12-25 greek w1 feast8 fast0 exc11 rows=0,11 -> - +2028-12-26 greek w2 feast3 fast0 exc11 rows=0,11 -> - +2028-12-27 greek w3 feast2 fast0 exc11 rows=0,11 -> - +2028-12-28 greek w4 feast0 fast0 exc11 rows=0,11 -> - +2028-12-29 greek w5 feast0 fast0 exc11 rows=0,11 -> - +2028-12-30 greek w6 feast0 fast0 exc11 rows=0,0,11 -> - +2028-12-31 greek w0 feast0 fast0 exc11 rows=0,0,11 -> - +2029-01-01 greek w1 feast6 fast0 exc11 rows=0,0,11 -> - +2029-01-02 greek w2 feast4 fast0 exc11 rows=0,11 -> - +2029-01-03 greek w3 feast0 fast0 exc11 rows=0,11 -> - +2029-01-04 greek w4 feast0 fast0 exc11 rows=0,11 -> - +2029-01-05 greek w5 feast0 fast1 exc9 rows=0,0,9 -> meat,fish,dairy,eggs,wine,oil +2029-01-06 greek w6 feast8 fast0 exc11 rows=0,11 -> - +2029-01-07 greek w0 feast3 fast0 exc2 rows=0,0,2 -> - +2029-01-08 greek w1 feast0 fast0 exc0 rows=0,0 -> - +2029-01-09 greek w2 feast4 fast0 exc0 rows=0,0 -> - +2029-01-10 greek w3 feast0 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2029-01-11 greek w4 feast4 fast0 exc0 rows=0,0 -> - +2029-01-12 greek w5 feast3 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2029-01-13 greek w6 feast0 fast0 exc0 rows=0,0,0 -> - +2029-01-14 greek w0 feast4 fast0 exc0 rows=0,0 -> - +2029-01-15 greek w1 feast2 fast0 exc0 rows=0,0 -> - +2029-01-16 greek w2 feast2 fast0 exc0 rows=0,0 -> - +2029-01-17 greek w3 feast5 fast1 exc2 rows=0,2 -> meat,dairy,eggs +2029-01-18 greek w4 feast2 fast0 exc0 rows=0,0 -> - +2029-01-19 greek w5 feast2 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2029-01-20 greek w6 feast5 fast0 exc2 rows=0,2 -> - +2029-01-21 greek w0 feast0 fast0 exc0 rows=0,0 -> - +2029-01-22 greek w1 feast0 fast0 exc0 rows=0,0 -> - +2029-01-23 greek w2 feast0 fast0 exc0 rows=0,0 -> - +2029-01-24 greek w3 feast4 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2029-01-25 greek w4 feast4 fast0 exc0 rows=0,0 -> - +2029-01-26 greek w5 feast0 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2029-01-27 greek w6 feast4 fast0 exc0 rows=0,0 -> - +2029-01-28 greek w0 feast2 fast0 exc11 rows=0,11 -> - +2029-01-29 greek w1 feast2 fast0 exc11 rows=0,11 -> - +2029-01-30 greek w2 feast5 fast0 exc11 rows=2,11 -> - +2029-01-31 greek w3 feast3 fast0 exc11 rows=0,11 -> - +2029-02-01 greek w4 feast2 fast0 exc11 rows=0,11 -> - +2029-02-02 greek w5 feast8 fast0 exc11 rows=2,11 -> - +2029-02-03 greek w6 feast2 fast0 exc11 rows=0,11 -> - +2029-02-04 greek w0 feast0 fast0 exc0 rows=0,0 -> - +2029-02-05 greek w1 feast0 fast0 exc0 rows=0,0 -> - +2029-02-06 greek w2 feast0 fast0 exc0 rows=0,0 -> - +2029-02-07 greek w3 feast0 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2029-02-08 greek w4 feast2 fast0 exc0 rows=0,0 -> - +2029-02-09 greek w5 feast4 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2029-02-10 greek w6 feast0 fast0 exc0 rows=0,0 -> - +2029-02-11 greek w0 feast3 fast0 exc0 rows=0,0 -> - +2029-02-12 greek w1 feast4 fast1 exc7 rows=0,7 -> meat +2029-02-13 greek w2 feast0 fast1 exc7 rows=0,7 -> meat +2029-02-14 greek w3 feast4 fast1 exc7 rows=0,7 -> meat +2029-02-15 greek w4 feast0 fast1 exc7 rows=0,7 -> meat +2029-02-16 greek w5 feast0 fast1 exc7 rows=0,7 -> meat +2029-02-17 greek w6 feast4 fast1 exc7 rows=0,7 -> meat +2029-02-18 greek w0 feast0 fast1 exc7 rows=0,7 -> meat +2029-02-19 greek w1 feast0 fast2 exc10 rows=0,10 -> meat,fish,dairy,eggs,wine,oil +2029-02-20 greek w2 feast0 fast2 exc10 rows=0,10 -> meat,fish,dairy,eggs,wine,oil +2029-02-21 greek w3 feast1 fast2 exc10 rows=0,10 -> meat,fish,dairy,eggs,wine,oil +2029-02-22 greek w4 feast0 fast2 exc10 rows=0,10 -> meat,fish,dairy,eggs,wine,oil +2029-02-23 greek w5 feast1 fast2 exc10 rows=0,10 -> meat,fish,dairy,eggs,wine,oil +2029-02-24 greek w6 feast4 fast2 exc3 rows=1,3 -> meat,fish,dairy,eggs +2029-02-25 greek w0 feast0 fast2 exc3 rows=0,3 -> meat,fish,dairy,eggs +2029-02-26 greek w1 feast0 fast2 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2029-02-27 greek w2 feast-1 fast2 exc0 rows=0 -> meat,fish,dairy,eggs,wine,oil +2029-02-28 greek w3 feast1 fast2 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2029-03-01 greek w4 feast0 fast2 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2029-03-02 greek w5 feast3 fast2 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2029-03-03 greek w6 feast0 fast2 exc3 rows=0,3 -> meat,fish,dairy,eggs +2029-03-04 greek w0 feast4 fast2 exc3 rows=0,3 -> meat,fish,dairy,eggs +2029-03-05 greek w1 feast0 fast2 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2029-03-06 greek w2 feast0 fast2 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2029-03-07 greek w3 feast1 fast2 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2029-03-08 greek w4 feast0 fast2 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2029-03-09 greek w5 feast4 fast2 exc1 rows=0,1 -> meat,fish,dairy,eggs +2029-03-10 greek w6 feast0 fast2 exc3 rows=0,3 -> meat,fish,dairy,eggs +2029-03-11 greek w0 feast3 fast2 exc3 rows=0,3 -> meat,fish,dairy,eggs +2029-03-12 greek w1 feast0 fast2 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2029-03-13 greek w2 feast0 fast2 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2029-03-14 greek w3 feast1 fast2 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2029-03-15 greek w4 feast0 fast2 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2029-03-16 greek w5 feast1 fast2 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2029-03-17 greek w6 feast3 fast2 exc3 rows=0,3 -> meat,fish,dairy,eggs +2029-03-18 greek w0 feast2 fast2 exc3 rows=0,3 -> meat,fish,dairy,eggs +2029-03-19 greek w1 feast0 fast2 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2029-03-20 greek w2 feast0 fast2 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2029-03-21 greek w3 feast1 fast2 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2029-03-22 greek w4 feast0 fast2 exc3 rows=0,3 -> meat,fish,dairy,eggs +2029-03-23 greek w5 feast1 fast2 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2029-03-24 greek w6 feast0 fast2 exc3 rows=0,3 -> meat,fish,dairy,eggs +2029-03-25 greek w0 feast7 fast2 exc4 rows=3,4 -> meat,dairy,eggs +2029-03-26 greek w1 feast3 fast2 exc3 rows=0,3 -> meat,fish,dairy,eggs +2029-03-27 greek w2 feast0 fast2 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2029-03-28 greek w3 feast1 fast2 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2029-03-29 greek w4 feast0 fast2 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2029-03-30 greek w5 feast1 fast2 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2029-03-31 greek w6 feast0 fast2 exc6 rows=0,6 -> meat,fish,dairy,eggs +2029-04-01 greek w0 feast8 fast2 exc4 rows=0,4 -> meat,dairy,eggs +2029-04-02 greek w1 feast1 fast2 exc10 rows=0,10 -> meat,fish,dairy,eggs,wine,oil +2029-04-03 greek w2 feast1 fast2 exc10 rows=0,10 -> meat,fish,dairy,eggs,wine,oil +2029-04-04 greek w3 feast1 fast2 exc10 rows=0,10 -> meat,fish,dairy,eggs,wine,oil +2029-04-05 greek w4 feast3 fast2 exc3 rows=0,3 -> meat,fish,dairy,eggs +2029-04-06 greek w5 feast4 fast2 exc9 rows=0,9 -> meat,fish,dairy,eggs,wine,oil +2029-04-07 greek w6 feast4 fast2 exc5 rows=1,5 -> meat,fish,dairy,eggs,oil +2029-04-08 greek w0 feast8 fast0 exc11 rows=0,11 -> - +2029-04-09 greek w1 feast0 fast0 exc11 rows=0,11 -> - +2029-04-10 greek w2 feast0 fast0 exc11 rows=0,11 -> - +2029-04-11 greek w3 feast0 fast0 exc11 rows=0,11 -> - +2029-04-12 greek w4 feast0 fast0 exc11 rows=0,11 -> - +2029-04-13 greek w5 feast0 fast0 exc11 rows=0,11 -> - +2029-04-14 greek w6 feast0 fast0 exc11 rows=0,11 -> - +2029-04-15 greek w0 feast0 fast0 exc0 rows=0,0 -> - +2029-04-16 greek w1 feast0 fast0 exc0 rows=0,0 -> - +2029-04-17 greek w2 feast3 fast0 exc0 rows=0,0 -> - +2029-04-18 greek w3 feast0 fast1 exc1 rows=0,1 -> meat,fish,dairy,eggs +2029-04-19 greek w4 feast0 fast0 exc0 rows=0,0 -> - +2029-04-20 greek w5 feast0 fast1 exc1 rows=0,1 -> meat,fish,dairy,eggs +2029-04-21 greek w6 feast0 fast0 exc0 rows=0,0 -> - +2029-04-22 greek w0 feast0 fast0 exc0 rows=0,0 -> - +2029-04-23 greek w1 feast5 fast0 exc1 rows=0,1 -> - +2029-04-24 greek w2 feast0 fast0 exc0 rows=0,0 -> - +2029-04-25 greek w3 feast4 fast1 exc1 rows=1,1 -> meat,fish,dairy,eggs +2029-04-26 greek w4 feast3 fast0 exc0 rows=0,0 -> - +2029-04-27 greek w5 feast2 fast1 exc1 rows=0,1 -> meat,fish,dairy,eggs +2029-04-28 greek w6 feast0 fast0 exc0 rows=0,0 -> - +2029-04-29 greek w0 feast0 fast0 exc0 rows=0,0 -> - +2029-04-30 greek w1 feast4 fast0 exc0 rows=0,0 -> - +2029-05-01 greek w2 feast3 fast0 exc0 rows=0,0 -> - +2029-05-02 greek w3 feast0 fast1 exc2 rows=0,2 -> meat,dairy,eggs +2029-05-03 greek w4 feast0 fast0 exc0 rows=0,0 -> - +2029-05-04 greek w5 feast0 fast1 exc1 rows=0,1 -> meat,fish,dairy,eggs +2029-05-05 greek w6 feast0 fast0 exc0 rows=0,0 -> - +2029-05-06 greek w0 feast0 fast0 exc0 rows=0,0 -> - +2029-05-07 greek w1 feast0 fast0 exc11 rows=0,11 -> - +2029-05-08 greek w2 feast5 fast0 exc2 rows=0,2 -> - +2029-05-09 greek w3 feast4 fast1 exc1 rows=0,1 -> meat,fish,dairy,eggs +2029-05-10 greek w4 feast4 fast0 exc0 rows=0,0 -> - +2029-05-11 greek w5 feast0 fast0 exc11 rows=1,11 -> - +2029-05-12 greek w6 feast0 fast0 exc0 rows=0,0 -> - +2029-05-13 greek w0 feast0 fast0 exc0 rows=0,0 -> - +2029-05-14 greek w1 feast2 fast0 exc0 rows=0,0 -> - +2029-05-15 greek w2 feast3 fast0 exc0 rows=0,0 -> - +2029-05-16 greek w3 feast3 fast1 exc2 rows=0,2 -> meat,dairy,eggs +2029-05-17 greek w4 feast8 fast0 exc0 rows=0,0 -> - +2029-05-18 greek w5 feast0 fast1 exc1 rows=0,1 -> meat,fish,dairy,eggs +2029-05-19 greek w6 feast4 fast0 exc0 rows=0,0 -> - +2029-05-20 greek w0 feast3 fast0 exc0 rows=0,0 -> - +2029-05-21 greek w1 feast4 fast0 exc0 rows=0,0 -> - +2029-05-22 greek w2 feast0 fast0 exc0 rows=0,0 -> - +2029-05-23 greek w3 feast3 fast1 exc1 rows=0,1 -> meat,fish,dairy,eggs +2029-05-24 greek w4 feast3 fast0 exc0 rows=0,0 -> - +2029-05-25 greek w5 feast4 fast1 exc1 rows=0,1 -> meat,fish,dairy,eggs +2029-05-26 greek w6 feast2 fast0 exc0 rows=0,0 -> - +2029-05-27 greek w0 feast8 fast0 exc0 rows=0,0 -> - +2029-05-28 greek w1 feast2 fast0 exc11 rows=0,11 -> - +2029-05-29 greek w2 feast2 fast0 exc11 rows=0,11 -> - +2029-05-30 greek w3 feast0 fast0 exc11 rows=0,11 -> - +2029-05-31 greek w4 feast0 fast0 exc11 rows=0,11 -> - +2029-06-01 greek w5 feast0 fast0 exc11 rows=0,11 -> - +2029-06-02 greek w6 feast0 fast0 exc11 rows=0,11 -> - +2029-06-03 greek w0 feast0 fast0 exc0 rows=0,0 -> - +2029-06-04 greek w1 feast0 fast3 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2029-06-05 greek w2 feast0 fast3 exc1 rows=0,0 -> meat,fish,dairy,eggs +2029-06-06 greek w3 feast0 fast3 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2029-06-07 greek w4 feast0 fast3 exc1 rows=0,0 -> meat,fish,dairy,eggs +2029-06-08 greek w5 feast2 fast3 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2029-06-09 greek w6 feast3 fast3 exc2 rows=0,0 -> meat,dairy,eggs +2029-06-10 greek w0 feast4 fast3 exc2 rows=0,0 -> meat,dairy,eggs +2029-06-11 greek w1 feast4 fast3 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2029-06-12 greek w2 feast2 fast3 exc1 rows=0,0 -> meat,fish,dairy,eggs +2029-06-13 greek w3 feast0 fast3 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2029-06-14 greek w4 feast0 fast3 exc1 rows=0,0 -> meat,fish,dairy,eggs +2029-06-15 greek w5 feast4 fast3 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2029-06-16 greek w6 feast4 fast3 exc2 rows=0,0 -> meat,dairy,eggs +2029-06-17 greek w0 feast0 fast3 exc2 rows=0,0 -> meat,dairy,eggs +2029-06-18 greek w1 feast0 fast3 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2029-06-19 greek w2 feast4 fast3 exc1 rows=0,0 -> meat,fish,dairy,eggs +2029-06-20 greek w3 feast0 fast3 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2029-06-21 greek w4 feast0 fast3 exc1 rows=0,0 -> meat,fish,dairy,eggs +2029-06-22 greek w5 feast0 fast3 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2029-06-23 greek w6 feast0 fast3 exc2 rows=0,0 -> meat,dairy,eggs +2029-06-24 greek w0 feast6 fast3 exc2 rows=0,2 -> meat,dairy,eggs +2029-06-25 greek w1 feast3 fast3 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2029-06-26 greek w2 feast4 fast3 exc1 rows=0,0 -> meat,fish,dairy,eggs +2029-06-27 greek w3 feast0 fast3 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2029-06-28 greek w4 feast2 fast3 exc1 rows=0,0 -> meat,fish,dairy,eggs +2029-06-29 greek w5 feast6 fast1 exc2 rows=0,2 -> meat,dairy,eggs +2029-06-30 greek w6 feast4 fast0 exc0 rows=0,0 -> - +2029-07-01 greek w0 feast2 fast0 exc0 rows=0,0 -> - +2029-07-02 greek w1 feast3 fast0 exc0 rows=0,0 -> - +2029-07-03 greek w2 feast4 fast0 exc0 rows=0,0 -> - +2029-07-04 greek w3 feast0 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2029-07-05 greek w4 feast0 fast0 exc0 rows=0,0 -> - +2029-07-06 greek w5 feast0 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2029-07-07 greek w6 feast0 fast0 exc0 rows=0,0 -> - +2029-07-08 greek w0 feast2 fast0 exc0 rows=0,0 -> - +2029-07-09 greek w1 feast0 fast0 exc0 rows=0,0 -> - +2029-07-10 greek w2 feast0 fast0 exc0 rows=0,0 -> - +2029-07-11 greek w3 feast2 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2029-07-12 greek w4 feast0 fast0 exc0 rows=0,0 -> - +2029-07-13 greek w5 feast2 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2029-07-14 greek w6 feast2 fast0 exc0 rows=0,0 -> - +2029-07-15 greek w0 feast0 fast0 exc0 rows=0,0,0 -> - +2029-07-16 greek w1 feast0 fast0 exc0 rows=0,0 -> - +2029-07-17 greek w2 feast4 fast0 exc0 rows=0,0 -> - +2029-07-18 greek w3 feast0 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2029-07-19 greek w4 feast0 fast0 exc0 rows=0,0 -> - +2029-07-20 greek w5 feast5 fast1 exc2 rows=0,2 -> meat,dairy,eggs +2029-07-21 greek w6 feast0 fast0 exc0 rows=0,0 -> - +2029-07-22 greek w0 feast2 fast0 exc0 rows=0,0 -> - +2029-07-23 greek w1 feast0 fast0 exc0 rows=0,0 -> - +2029-07-24 greek w2 feast0 fast0 exc0 rows=0,0 -> - +2029-07-25 greek w3 feast3 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2029-07-26 greek w4 feast0 fast0 exc11 rows=0,11 -> - +2029-07-27 greek w5 feast2 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2029-07-28 greek w6 feast0 fast0 exc0 rows=0,0 -> - +2029-07-29 greek w0 feast0 fast0 exc0 rows=0,0 -> - +2029-07-30 greek w1 feast0 fast0 exc0 rows=0,0 -> - +2029-07-31 greek w2 feast2 fast0 exc0 rows=0,0 -> - +2029-08-01 greek w3 feast3 fast4 exc0 rows=0,1 -> meat,fish,dairy,eggs,wine,oil +2029-08-02 greek w4 feast3 fast4 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2029-08-03 greek w5 feast3 fast4 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2029-08-04 greek w6 feast0 fast4 exc1 rows=0,0 -> meat,fish,dairy,eggs +2029-08-05 greek w0 feast2 fast4 exc1 rows=0,0 -> meat,fish,dairy,eggs +2029-08-06 greek w1 feast8 fast4 exc4 rows=0,4 -> meat,dairy,eggs +2029-08-07 greek w2 feast0 fast4 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2029-08-08 greek w3 feast0 fast4 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2029-08-09 greek w4 feast0 fast4 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2029-08-10 greek w5 feast0 fast4 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2029-08-11 greek w6 feast0 fast4 exc1 rows=0,0 -> meat,fish,dairy,eggs +2029-08-12 greek w0 feast0 fast4 exc1 rows=0,0 -> meat,fish,dairy,eggs +2029-08-13 greek w1 feast4 fast4 exc0 rows=0,4 -> meat,fish,dairy,eggs,wine,oil +2029-08-14 greek w2 feast2 fast4 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2029-08-15 greek w3 feast7 fast1 exc2 rows=0,2 -> meat,dairy,eggs +2029-08-16 greek w4 feast5 fast0 exc1 rows=0,1 -> - +2029-08-17 greek w5 feast0 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2029-08-18 greek w6 feast0 fast0 exc0 rows=0,0 -> - +2029-08-19 greek w0 feast0 fast0 exc0 rows=0,0 -> - +2029-08-20 greek w1 feast0 fast0 exc0 rows=0,0 -> - +2029-08-21 greek w2 feast3 fast0 exc0 rows=0,0 -> - +2029-08-22 greek w3 feast0 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2029-08-23 greek w4 feast0 fast0 exc0 rows=0,0 -> - +2029-08-24 greek w5 feast3 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2029-08-25 greek w6 feast2 fast0 exc0 rows=0,0 -> - +2029-08-26 greek w0 feast4 fast0 exc0 rows=0,0 -> - +2029-08-27 greek w1 feast0 fast0 exc0 rows=0,0 -> - +2029-08-28 greek w2 feast0 fast0 exc0 rows=0,0 -> - +2029-08-29 greek w3 feast6 fast1 exc8 rows=0,8 -> meat,fish,dairy,eggs +2029-08-30 greek w4 feast4 fast0 exc0 rows=0,0 -> - +2029-08-31 greek w5 feast3 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2029-09-01 greek w6 feast4 fast0 exc1 rows=0,1 -> - +2029-09-02 greek w0 feast0 fast0 exc0 rows=0,0 -> - +2029-09-03 greek w1 feast0 fast0 exc0 rows=0,0 -> - +2029-09-04 greek w2 feast0 fast0 exc0 rows=0,0 -> - +2029-09-05 greek w3 feast2 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2029-09-06 greek w4 feast2 fast0 exc0 rows=0,0 -> - +2029-09-07 greek w5 feast3 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2029-09-08 greek w6 feast7 fast0 exc2 rows=0,2 -> - +2029-09-09 greek w0 feast3 fast0 exc0 rows=0,0,0 -> - +2029-09-10 greek w1 feast0 fast0 exc0 rows=0,0 -> - +2029-09-11 greek w2 feast4 fast0 exc0 rows=0,0 -> - +2029-09-12 greek w3 feast0 fast1 exc1 rows=0,1 -> meat,fish,dairy,eggs +2029-09-13 greek w4 feast3 fast0 exc1 rows=0,0,1 -> - +2029-09-14 greek w5 feast8 fast1 exc8 rows=0,8 -> meat,fish,dairy,eggs +2029-09-15 greek w6 feast2 fast0 exc0 rows=0,0,0 -> - +2029-09-16 greek w0 feast2 fast0 exc0 rows=0,0,0 -> - +2029-09-17 greek w1 feast0 fast0 exc0 rows=0,0 -> - +2029-09-18 greek w2 feast0 fast0 exc0 rows=0,0 -> - +2029-09-19 greek w3 feast3 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2029-09-20 greek w4 feast3 fast0 exc0 rows=0,0 -> - +2029-09-21 greek w5 feast4 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2029-09-22 greek w6 feast2 fast0 exc0 rows=0,0 -> - +2029-09-23 greek w0 feast3 fast0 exc1 rows=0,1 -> - +2029-09-24 greek w1 feast4 fast0 exc2 rows=0,2 -> - +2029-09-25 greek w2 feast0 fast0 exc0 rows=0,0 -> - +2029-09-26 greek w3 feast5 fast1 exc2 rows=0,2 -> meat,dairy,eggs +2029-09-27 greek w4 feast3 fast0 exc0 rows=0,0 -> - +2029-09-28 greek w5 feast4 fast1 exc1 rows=0,1 -> meat,fish,dairy,eggs +2029-09-29 greek w6 feast2 fast0 exc0 rows=0,0 -> - +2029-09-30 greek w0 feast3 fast0 exc0 rows=0,0 -> - +2029-10-01 greek w1 feast0 fast0 exc11 rows=0,11 -> - +2029-10-02 greek w2 feast2 fast0 exc0 rows=0,0 -> - +2029-10-03 greek w3 feast2 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2029-10-04 greek w4 feast3 fast0 exc0 rows=0,0 -> - +2029-10-05 greek w5 feast3 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2029-10-06 greek w6 feast5 fast0 exc2 rows=0,2 -> - +2029-10-07 greek w0 feast2 fast0 exc0 rows=0,0 -> - +2029-10-08 greek w1 feast0 fast0 exc0 rows=0,0 -> - +2029-10-09 greek w2 feast5 fast0 exc2 rows=0,2 -> - +2029-10-10 greek w3 feast0 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2029-10-11 greek w4 feast0 fast0 exc0 rows=0,0 -> - +2029-10-12 greek w5 feast0 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2029-10-13 greek w6 feast0 fast0 exc0 rows=0,0 -> - +2029-10-14 greek w0 feast2 fast0 exc0 rows=0,0,0 -> - +2029-10-15 greek w1 feast0 fast0 exc0 rows=0,0 -> - +2029-10-16 greek w2 feast0 fast0 exc0 rows=0,0 -> - +2029-10-17 greek w3 feast0 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2029-10-18 greek w4 feast4 fast0 exc0 rows=0,0 -> - +2029-10-19 greek w5 feast2 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2029-10-20 greek w6 feast2 fast0 exc0 rows=0,0,0 -> - +2029-10-21 greek w0 feast2 fast0 exc0 rows=0,0 -> - +2029-10-22 greek w1 feast0 fast0 exc0 rows=0,0 -> - +2029-10-23 greek w2 feast3 fast0 exc0 rows=0,0 -> - +2029-10-24 greek w3 feast0 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2029-10-25 greek w4 feast0 fast0 exc0 rows=0,0 -> - +2029-10-26 greek w5 feast4 fast1 exc2 rows=0,2 -> meat,dairy,eggs +2029-10-27 greek w6 feast0 fast0 exc0 rows=0,0 -> - +2029-10-28 greek w0 feast3 fast0 exc0 rows=0,0 -> - +2029-10-29 greek w1 feast3 fast0 exc0 rows=0,0 -> - +2029-10-30 greek w2 feast0 fast0 exc0 rows=0,0 -> - +2029-10-31 greek w3 feast0 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2029-11-01 greek w4 feast2 fast0 exc0 rows=0,0 -> - +2029-11-02 greek w5 feast0 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2029-11-03 greek w6 feast5 fast0 exc2 rows=0,0,2 -> - +2029-11-04 greek w0 feast0 fast0 exc0 rows=0,0,0 -> - +2029-11-05 greek w1 feast3 fast0 exc0 rows=0,0 -> - +2029-11-06 greek w2 feast2 fast0 exc0 rows=0,0 -> - +2029-11-07 greek w3 feast0 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2029-11-08 greek w4 feast5 fast0 exc2 rows=0,2 -> - +2029-11-09 greek w5 feast0 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2029-11-10 greek w6 feast0 fast0 exc0 rows=0,0 -> - +2029-11-11 greek w0 feast0 fast0 exc0 rows=0,0 -> - +2029-11-12 greek w1 feast2 fast0 exc0 rows=0,0 -> - +2029-11-13 greek w2 feast5 fast0 exc2 rows=0,2 -> - +2029-11-14 greek w3 feast4 fast1 exc1 rows=0,1 -> meat,fish,dairy,eggs +2029-11-15 greek w4 feast0 fast5 exc2 rows=0,0 -> meat,dairy,eggs +2029-11-16 greek w5 feast6 fast5 exc2 rows=0,2 -> meat,dairy,eggs +2029-11-17 greek w6 feast3 fast5 exc2 rows=0,0 -> meat,dairy,eggs +2029-11-18 greek w0 feast0 fast5 exc2 rows=0,0 -> meat,dairy,eggs +2029-11-19 greek w1 feast3 fast5 exc2 rows=0,0 -> meat,dairy,eggs +2029-11-20 greek w2 feast0 fast5 exc2 rows=0,0 -> meat,dairy,eggs +2029-11-21 greek w3 feast7 fast5 exc2 rows=0,2 -> meat,dairy,eggs +2029-11-22 greek w4 feast2 fast5 exc2 rows=0,0 -> meat,dairy,eggs +2029-11-23 greek w5 feast0 fast5 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2029-11-24 greek w6 feast2 fast5 exc2 rows=0,0 -> meat,dairy,eggs +2029-11-25 greek w0 feast0 fast5 exc2 rows=0,1 -> meat,dairy,eggs +2029-11-26 greek w1 feast0 fast5 exc2 rows=0,0 -> meat,dairy,eggs +2029-11-27 greek w2 feast2 fast5 exc2 rows=0,0 -> meat,dairy,eggs +2029-11-28 greek w3 feast2 fast5 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2029-11-29 greek w4 feast0 fast5 exc2 rows=0,0 -> meat,dairy,eggs +2029-11-30 greek w5 feast4 fast5 exc2 rows=0,2 -> meat,dairy,eggs +2029-12-01 greek w6 feast0 fast5 exc2 rows=0,0 -> meat,dairy,eggs +2029-12-02 greek w0 feast0 fast5 exc2 rows=0,0 -> meat,dairy,eggs +2029-12-03 greek w1 feast3 fast5 exc2 rows=0,0 -> meat,dairy,eggs +2029-12-04 greek w2 feast0 fast5 exc2 rows=0,0 -> meat,dairy,eggs +2029-12-05 greek w3 feast4 fast5 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2029-12-06 greek w4 feast5 fast5 exc2 rows=0,2 -> meat,dairy,eggs +2029-12-07 greek w5 feast3 fast5 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2029-12-08 greek w6 feast0 fast5 exc2 rows=0,0 -> meat,dairy,eggs +2029-12-09 greek w0 feast3 fast5 exc2 rows=0,0 -> meat,dairy,eggs +2029-12-10 greek w1 feast0 fast5 exc2 rows=0,0 -> meat,dairy,eggs +2029-12-11 greek w2 feast0 fast5 exc2 rows=0,0 -> meat,dairy,eggs +2029-12-12 greek w3 feast2 fast5 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2029-12-13 greek w4 feast0 fast5 exc1 rows=0,1 -> meat,fish,dairy,eggs +2029-12-14 greek w5 feast0 fast5 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2029-12-15 greek w6 feast2 fast5 exc1 rows=0,0 -> meat,fish,dairy,eggs +2029-12-16 greek w0 feast0 fast5 exc1 rows=0,0,0 -> meat,fish,dairy,eggs +2029-12-17 greek w1 feast2 fast5 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2029-12-18 greek w2 feast0 fast5 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2029-12-19 greek w3 feast0 fast5 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2029-12-20 greek w4 feast0 fast5 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2029-12-21 greek w5 feast0 fast5 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2029-12-22 greek w6 feast0 fast5 exc1 rows=0,0,0 -> meat,fish,dairy,eggs +2029-12-23 greek w0 feast0 fast5 exc1 rows=0,0,0 -> meat,fish,dairy,eggs +2029-12-24 greek w1 feast0 fast5 exc9 rows=0,0,9 -> meat,fish,dairy,eggs,wine,oil +2029-12-25 greek w2 feast8 fast0 exc11 rows=0,11 -> - +2029-12-26 greek w3 feast3 fast0 exc11 rows=0,11 -> - +2029-12-27 greek w4 feast2 fast0 exc11 rows=0,11 -> - +2029-12-28 greek w5 feast0 fast0 exc11 rows=0,11 -> - +2029-12-29 greek w6 feast0 fast0 exc11 rows=0,0,11 -> - +2029-12-30 greek w0 feast0 fast0 exc11 rows=0,0,11 -> - +2029-12-31 greek w1 feast0 fast0 exc11 rows=0,11 -> - diff --git a/calendarium/tests/test_fasting_characterization.py b/calendarium/tests/test_fasting_characterization.py new file mode 100644 index 00000000..f57b78c6 --- /dev/null +++ b/calendarium/tests/test_fasting_characterization.py @@ -0,0 +1,69 @@ +from datetime import date, timedelta +from pathlib import Path + +from django.test import TestCase + +from .. import datetools +from ..datetools import Tradition +from ..liturgics import Day + +BASE_DIR = Path(__file__).resolve().parent +GOLDEN = BASE_DIR / 'data/fasting-characterization.txt' + +# Must match tools/fasting/characterize.py, which regenerates the golden file. +YEARS = (2025, 2026, 2027, 2028, 2029) + + +class TestFastingCharacterization(TestCase): + """Pins the fasting output so a refactor can prove it changed nothing. + + There is no spec to assert against here. `Day.fast_exception` is `max()` + over an integer that encodes a dietary rung, a precedence claim and a + sentinel at once, and `_apply_fasting_adjustments` patches whatever that + gets wrong -- a combination rule nobody wrote down. Only current behaviour + exists to preserve, so it is pinned verbatim and any drift shows up as a + readable diff naming the date, tradition, rank and contributing rows. + + Regenerate deliberately, never to make a red test green: + + docker compose run --rm local python tools/fasting/characterize.py --write + + See docs/fasting-refactor-scope.md. + """ + + fixtures = ['calendarium.json'] + + def render(self): + lines = [] + for tradition, name in ((Tradition.Slavic, 'slavic'), (Tradition.Greek, 'greek')): + for year in YEARS: + day_date = date(year, 1, 1) + while day_date.year == year: + day = Day(day_date.year, day_date.month, day_date.day, + tradition=tradition) + day.initialize() + rows = ','.join( + str(e) for e in sorted(d.fast_exception for d in day.days)) + abstain = ','.join( + datetools.fast_abstentions_for(day.fast_level, day.fast_exception)) + lines.append( + f'{day_date.isoformat()} {name} w{day.weekday} ' + f'feast{day.feast_level} fast{day.fast_level} ' + f'exc{day.fast_exception} rows={rows} -> {abstain or "-"}' + ) + day_date += timedelta(days=1) + return lines + + def test_fasting_output_is_unchanged(self): + expected = GOLDEN.read_text().splitlines() + actual = self.render() + + self.assertEqual(len(expected), len(actual)) + + # Report the first few differing days rather than a wall of diff. + differences = [(e, a) for e, a in zip(expected, actual) if e != a] + if differences: + report = '\n'.join(f' expected: {e}\n actual: {a}' for e, a in differences[:10]) + self.fail( + f'{len(differences)} of {len(expected)} days changed. First few:\n{report}' + ) diff --git a/docs/fasting-refactor-scope.md b/docs/fasting-refactor-scope.md index 31fe4258..55da9b83 100644 --- a/docs/fasting-refactor-scope.md +++ b/docs/fasting-refactor-scope.md @@ -78,15 +78,55 @@ The bulk are index 0 (718), 11 (36), 2 (34) and 1 (27). ## How to do it safely -1. **Characterisation test first.** Pin the current fasting output -- - `fast_level`, `fast_exception`, `fast_abstentions_desc` -- for every day of - several years in both traditions. Refactor until it is byte-identical, then - change behaviour deliberately and visibly. +1. **Characterisation test first. Done 2026-09-08.** + `tools/fasting/characterize.py` writes + `calendarium/tests/data/fasting-characterization.txt`, and + `calendarium/tests/test_fasting_characterization.py` regenerates and compares + it -- 3,652 days, five years across the whole Paschal range, both traditions, + 4 seconds. Each line carries the inputs as well as the outputs, so a diff + names the date, tradition, rank, season and contributing rows rather than + just moving a number. Refactor until it is byte-identical, then change + behaviour deliberately and visibly. 2. The Greek path has its own `_apply_fasting_adjustments`, so both need covering. 3. The API exposes these fields; check `calendarium/tests/data/january.json` and the API schema before changing anything user-visible. +## What the characterisation revealed + +The pinned data has **36 distinct row-collision patterns and only 6 distinct +dietary outcomes**, which is the first encouraging sign: the output space is +tiny, close to `DietaryAllowance`'s seven rungs. + +More useful, **six patterns resolve differently in different contexts** -- the +same contributing rows producing a different answer -- and that is precisely +the work `_apply_fasting_adjustments` is doing. `rows=(0,4)`, a single row +claiming fish, is the clearest window: + +| outcome | season | feast levels | weekdays | +|---|---|---|---| +| exc 4, keeps fish | Lent, Dormition | **7-8** | any | +| exc 1, wine and oil | Dormition | 4-5 | Sat, Sun | +| exc 0, strict | Dormition | 4-5 | Mon-Fri | + +**The discriminator is `feast_level`, plus season and weekday. It is not +precedence.** The same shape appears in `rows=(0,1)`, where a wine-and-oil claim +is zeroed on six Dormition days at feast level 3, and inverted in `rows=(0,0)`, +where *no* row claims anything and the Apostles' and Nativity fasts still +produce wine and oil on Tuesday and Thursday and fish at the weekend -- a floor +rather than a claim. + +That settles the design question raised before starting: the row does not need a +stored precedence field. What indices 3 and 4 encode is "this claim is +important enough to survive the season's cap", and the rank that makes it +important is already on the row as `feast_level`. Palm Sunday is 8, the +Annunciation 7, the Transfiguration 8; the index-3 rows are all Paschal-cycle +rows at level 0, which set the floor rather than making a festal claim. + +So the target rule is roughly: **the season sets a floor and a cap, and a festal +claim lifts the floor only if its rank clears the season's bar.** That is +arithmetic, and it dissolves the `== 2` special case instead of re-encoding it. + ## What is deliberately *not* in scope The rank questions that surfaced during the investigation are behaviour diff --git a/tools/fasting/characterize.py b/tools/fasting/characterize.py new file mode 100644 index 00000000..3044f16f --- /dev/null +++ b/tools/fasting/characterize.py @@ -0,0 +1,108 @@ +"""Pin the current fasting output, so a refactor can prove it changed nothing. + + docker compose run --rm local python tools/fasting/characterize.py --write + docker compose run --rm local python tools/fasting/characterize.py # analyse + +Writes calendarium/tests/data/fasting-characterization.txt, one line per day per +tradition, covering YEARS below. `test_fasting_characterization.py` regenerates +the same lines and asserts they match, so any behavioural drift shows up as a +readable diff rather than as a number moving somewhere. + +Why a golden file rather than assertions: the thing being characterised is a +combination rule nobody wrote down. `Day.fast_exception` is `max()` over an +integer that encodes a dietary rung, a precedence claim and a sentinel all at +once, and `_apply_fasting_adjustments` then patches whatever that gets wrong. +There is no spec to assert against -- only current behaviour, which has to be +preserved exactly through a refactor and then changed deliberately. +See docs/fasting-refactor-scope.md. + +Each line carries the *inputs* as well as the outputs: + + 2026-04-05 slavic w6 feast8 fast2 exc4 rows=0,4 -> meat,dairy,eggs + +so a diff shows not just that a day changed but which contributing rows and +which rank produced it. `rows` is the sorted fast_exception of every Day record +the date resolved to, before combination -- the raw material the refactor is +replacing. +""" +import os +import sys + +sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))) +os.chdir(sys.path[0]) + +import asyncio +import collections +import datetime + +import django + +os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'orthocal.settings') +django.setup() + +from calendarium import datetools # noqa: E402 +from calendarium.datetools import Tradition # noqa: E402 +from calendarium.liturgics import Day # noqa: E402 + +# Five years spans the whole Paschal range, so fixed dates land on many +# different pdists and weekdays. Pascha: Apr 20 2025, Apr 12 2026, Mar 28 2027, +# Apr 16 2028, Apr 8 2029. +YEARS = (2025, 2026, 2027, 2028, 2029) +PATH = 'calendarium/tests/data/fasting-characterization.txt' + + +async def lines(): + out = [] + for tradition, name in ((Tradition.Slavic, 'slavic'), (Tradition.Greek, 'greek')): + for year in YEARS: + date = datetime.date(year, 1, 1) + while date.year == year: + day = Day(date.year, date.month, date.day, tradition=tradition) + await day.ainitialize() + rows = ','.join(str(e) for e in sorted(d.fast_exception for d in day.days)) + abstain = ','.join( + datetools.fast_abstentions_for(day.fast_level, day.fast_exception)) + out.append( + f'{date.isoformat()} {name} w{day.weekday} feast{day.feast_level} ' + f'fast{day.fast_level} exc{day.fast_exception} rows={rows} ' + f'-> {abstain or "-"}' + ) + date += datetime.timedelta(days=1) + return out + + +async def main(write): + rendered = await lines() + + if write: + with open(PATH, 'w') as f: + f.write('\n'.join(rendered) + '\n') + print(f'wrote {len(rendered)} lines -> {PATH}') + + # What the pinned data actually covers, which is the point of looking at it + # before trusting it as a safety net. + combos = collections.Counter() + outcomes = collections.Counter() + by_rows = collections.defaultdict(set) + for line in rendered: + head, _, tail = line.partition(' -> ') + parts = head.split() + rows = parts[-1].removeprefix('rows=') + exc = parts[-2].removeprefix('exc') + combos[rows] += 1 + outcomes[tail] += 1 + by_rows[rows].add(exc) + + print(f'\n days pinned: {len(rendered)} ' + f'({len(YEARS)} years x 2 traditions)') + print(f' distinct row-collision patterns: {len(combos)}') + print(f' distinct dietary outcomes: {len(outcomes)}\n') + print(' collision patterns, by frequency:') + for rows, n in combos.most_common(): + excs = ','.join(sorted(by_rows[rows])) + multi = ' <-- resolves differently in different contexts' if len(by_rows[rows]) > 1 else '' + print(f' rows=({rows:<10}) {n:>5} days -> exc {excs}{multi}') + + +if __name__ == '__main__': + asyncio.run(main('--write' in sys.argv)) From cc0f43535f0c14de1053d63bd19545599a76b22a Mon Sep 17 00:00:00 2001 From: Brian Glass Date: Tue, 8 Sep 2026 12:15:14 -0400 Subject: [PATCH 02/20] Record what the published fasting rules actually say, per season Checked the sources before deriving parameters from the data, so the model is sourced rather than fitted. The Antiochian typikon PDF is a service-order and rubrics reference with no rank-based fasting rules -- its fasting notes are scattered and tied to individual feasts. The usable source is OCA's guidelines page, which quotes the Typikon and the Lenten Triodion verbatim. The finding that matters: the mechanism differs by season, so the single "rank clears the season's bar" model guessed from the characterisation would be wrong for Lent. Apostles' and Nativity are explicitly rank-based. Typikon Ch. 33 gives the weekday pattern and then keys exceptions on the saint's rank -- doxology takes fish on Monday, Tuesday and Thursday and wine and oil on Wednesday and Friday; vigil takes fish on Wednesday and Friday. Against the pinned data the app's base weekly pattern matches exactly, including the December tightening, but the rank clause is entirely unimplemented: feast level 3 behaves identically to level 0 on every weekday. Level 5 does get fish on Wednesday, from per-date data rather than a rule, and level 4 is inconsistent for the same reason. Lent is not rank-based. Ware names nine dates for weekday wine and oil and names the Annunciation and Palm Sunday for fish. The data agrees rank is not the discriminator: on Lenten weekdays every feast level has both outcomes, 4 strict against 4 lenient at level 2, 13 against 9 at level 3, 9 against 10 at level 4. No threshold separates them. Dormition is cleanest and already correct -- strict weekdays, wine and oil at the weekend at every level 0-5, Transfiguration at level 8 taking fish. So the model is: the season supplies a floor per weekday and a cap; a data row supplies a named grant, as now; a rank rule supplies a further grant, which only the Apostles' and Nativity fasts have; the result is the most lenient of those with the cap applied. The Dormition and Lenten caps are what currently read as special cases in _apply_fasting_adjustments and become one parameter each. Documentation only. Co-Authored-By: Claude Opus 5 Claude-Session: https://claude.ai/code/session_019nQRjJpPqW89xqzAf1vsEX --- docs/fasting-refactor-scope.md | 86 ++++++++++++++++++++++++++++++++-- 1 file changed, 82 insertions(+), 4 deletions(-) diff --git a/docs/fasting-refactor-scope.md b/docs/fasting-refactor-scope.md index 55da9b83..256ec33f 100644 --- a/docs/fasting-refactor-scope.md +++ b/docs/fasting-refactor-scope.md @@ -123,9 +123,83 @@ important is already on the row as `feast_level`. Palm Sunday is 8, the Annunciation 7, the Transfiguration 8; the index-3 rows are all Paschal-cycle rows at level 0, which set the floor rather than making a festal claim. -So the target rule is roughly: **the season sets a floor and a cap, and a festal -claim lifts the floor only if its rank clears the season's bar.** That is -arithmetic, and it dissolves the `== 2` special case instead of re-encoding it. +A first guess was that this generalises: the season sets a floor and a cap, and +a festal claim lifts the floor only if its rank clears the season's bar. The +sources say otherwise -- see below. **The mechanism differs by season**, and a +single rank-threshold model would be wrong for Lent. + +## What the published rules actually say (checked 2026-09-08) + +Checked before deriving anything from the data, so the parameters are sourced +rather than fitted. The Antiochian typikon at +`~/Documents/Orthodox Studies/54-typikon-full.pdf` is a service-order and +rubrics reference and contains no rank-based fasting rules; its fasting notes +are scattered and tied to individual feasts. The usable source is OCA's +guidelines page, which quotes the Typikon and the Lenten Triodion verbatim: + + +| season | what the rule keys on | source | +|---|---|---| +| ordinary Wed/Fri | nothing; strict, and rank relaxations are called "local variations" | OCA guidelines | +| Great Lent | weekday/weekend, plus **named dates** | Ware, *The Lenten Triodion*, quoted by OCA | +| Apostles' & Nativity | weekday, plus **saint's rank** | Typikon Ch. 33, quoted verbatim | +| Dormition | weekday, plus a named feast | OCA guidelines | + +**Apostles' and Nativity are explicitly rank-based.** Ch. 33: "on Tuesday and +Thursday we do not eat fish, but only oil or wine. On Monday, Wednesday and +Friday, we eat neither oil nor wine.... On Saturday and Sunday we eat fish. If +there occur on Tuesday or Thursday a Saint who has a [Great] Doxology, we eat +fish; if on Monday, the same; but if on Wednesday or Friday, we allow only oil +and wine.... If it be a Saint who has a Vigil on Wednesday or Friday ... we +allow oil and wine and fish.... But from the 20th of December until the 25th, +even if it be Saturday or Sunday, we do not allow fish." + +Against the pinned data, the app's **base weekly pattern matches exactly** -- +Mon/Wed/Fri strict, Tue/Thu wine and oil, Sat/Sun fish, and the December +tightening. **The rank clause is entirely unimplemented**: feast level 3, +doxology, behaves identically to level 0 on every weekday. Level 5, vigil, does +get fish on Wednesday, but from per-date data rather than from a rule, and +level 4 is inconsistent for the same reason. + +**Lent is not rank-based.** Ware gives a named list of nine dates that take wine +and oil on a weekday of weeks 2-6, and names the Annunciation and Palm Sunday +for fish. The data agrees that rank is not the discriminator: on Lenten +weekdays *every* feast level has both outcomes -- + +| level | strict | wine and oil | +|---|---|---| +| 2 | 4 | 4 | +| 3 | 13 | 9 | +| 4 | 9 | 10 | +| 5 | 1 | 2 | + +so no threshold separates them. (The two fish days are levels 7 and 8, which +fits a rank bar, but the source names them rather than ranking them, and two +dates cannot distinguish the two readings.) + +**Dormition is the cleanest and already correct.** Strict on weekdays, wine and +oil at the weekend at every level 0-5, and the Transfiguration at level 8 takes +fish -- matching "wine and oil are allowed only on Saturdays and Sundays (and +sometimes on a few feast days and vigils)". + +### What this means for the model + +A row's `fast_exception` already *is* the named-date grant, which is why Lent +works today. What cannot live in data is the rank rule, because it keys on +weekday, and whether a fixed date falls on a Wednesday changes yearly -- the +same argument that moved the abbreviated-readings Sunday rule into code. + +So the shape is: + +- the **season** supplies a floor per weekday, and a cap; +- a **data row** supplies a named grant, as now; +- a **rank rule** supplies a further grant, per season -- only the Apostles' and + Nativity fasts have one, and Ch. 33 states it precisely; +- the result is the most lenient of those, then the season's cap applied. + +The Dormition cap is what currently reads as `if feast_level < 7 and +fast_exception > 0: fast_exception = 0`, and the Lenten cap is the `== 2` fish +strip. Both become one parameter each instead of a special case. ## What is deliberately *not* in scope @@ -143,4 +217,8 @@ express them cleanly: and whether vigil rank (level 5) should take fish. The Typikon text OCA quotes uses exactly those two ranks, but scoped to the Apostles' and Nativity fasts. - Implementing that Typikon rule inside those two fasts, where it *is* stated. - The current code there only ever reduces an exception, never grants one. + The current code there only ever reduces an exception, never grants one, and + the section above confirms level 3 behaves exactly like level 0 there. This is + the best-evidenced of the three and the natural first behaviour change once + the refactor lands -- but it is still a behaviour change, and belongs in its + own commit with the characterisation diff visible. From 4aa5c484bc84f09c3d75a809d3e818f310e23ead Mon Sep 17 00:00:00 2001 From: Brian Glass Date: Tue, 8 Sep 2026 14:23:40 -0400 Subject: [PATCH 03/20] Mock up the explicit fasting model; it finds a Nativity Eve bug tools/fasting/prototype.py implements the season floor/cap plus claims model and resolves every day the characterisation pins, comparing at the dietary rung. Not wired into the app -- this is for looking at, and so that "it reproduces current behaviour" can be checked rather than asserted. 1824 of 1826 Slavic days, 99.9%, every season exact except two. Writing the rule out loud needed three concepts the legacy integer hides. Rows divide into claims ("this date allows at least X") and caps ("at most X") -- Clean Week's no-overrides, the strict eves, and Holy Saturday, which allows wine but not oil and so must beat a saint's wine-and-oil claim rather than lose to it. The ladder is not linear at one point: WineOilCaviar excludes exactly what WineAndOil does, so a cap meaning "no fish" has to let caviar through rather than clamp it. And a season cap is a clamp, not an assignment. That last one is where the two remaining differences come from, and they are a bug in current behaviour rather than in the prototype. Nativity Eve carries fast_exception 9, "Strict Fast", every year, but the app yields wine and oil on Wednesday and Friday and strict on Monday and Thursday. The Apostles'/Nativity rule for Wednesday and Friday reads if feast_level < 4 and fast_exception > 1: self.fast_exception = 1 which is meant to remove fish from a lenient claim but, being an assignment, also raises a strictness assertion. Nativity Eve is therefore more lenient on precisely the two strictest weekdays. The prototype cannot make that mistake because a cap there only lowers. Prototype covers Slavic only; GreekDay needs its own season table, chiefly for the Nativity fast where Greek practice differs structurally. No application code changed; 190 tests pass. Co-Authored-By: Claude Opus 5 Claude-Session: https://claude.ai/code/session_019nQRjJpPqW89xqzAf1vsEX --- docs/fasting-refactor-scope.md | 50 +++++++ tools/fasting/prototype.py | 239 +++++++++++++++++++++++++++++++++ 2 files changed, 289 insertions(+) create mode 100644 tools/fasting/prototype.py diff --git a/docs/fasting-refactor-scope.md b/docs/fasting-refactor-scope.md index 256ec33f..505d3e92 100644 --- a/docs/fasting-refactor-scope.md +++ b/docs/fasting-refactor-scope.md @@ -201,6 +201,56 @@ The Dormition cap is what currently reads as `if feast_level < 7 and fast_exception > 0: fast_exception = 0`, and the Lenten cap is the `== 2` fish strip. Both become one parameter each instead of a special case. +## The mock-up, and what it found (2026-09-08) + +`tools/fasting/prototype.py` implements the model above and resolves every day +the characterisation pins, comparing its answer to the live one at the dietary +rung. It is not wired into the app. + +**1824 of 1826 Slavic days, 99.9%** -- every season exact except two days. +Writing the rule out loud needed three concepts the legacy integer hides: + +- **claims versus caps.** Most rows say "this date allows at least X". A few say + "at most X": Clean Week's no-overrides, the strict eves, and Holy Saturday, + which allows wine but *not* oil -- "on this one Saturday, alone among + Saturdays of the year, olive oil is not permitted" -- and so must beat a + saint's wine-and-oil claim rather than lose to it. Holy Saturday is both: it + lifts the strict floor and caps above itself. +- **the ladder is not linear at one point.** `WineOilCaviar` excludes exactly + what `WineAndOil` does; it is a callout, not a stricter rung. A season cap + meaning "no fish" must let a caviar claim through rather than clamp it. +- **a season cap is a clamp, not an assignment** -- which is where the two + remaining differences come from. + +### The two differences are a bug in current behaviour + +Nativity Eve carries `fast_exception = 9`, "Strict Fast", every year. What the +app does with it depends on the weekday: + +| weekday | current | | +|---|---|---| +| Sunday | wine and oil | correct -- the eve-on-weekend rule | +| Monday, Thursday | strict | correct | +| **Wednesday, Friday** | **wine and oil** | **wrong** | + +The Apostles'/Nativity rule for Wednesday and Friday reads +`if feast_level < 4 and fast_exception > 1: self.fast_exception = 1`. It is +meant to *remove* fish from a lenient claim, but it is written as an assignment, +so it also *raises* a strictness assertion. Nativity Eve therefore becomes more +lenient on precisely the two strictest weekdays. The prototype gets it right by +construction, because a cap there can only lower. + +This is the concrete answer to "what does the refactor buy": the explicit model +found a bug the emergent one produced and hid, and the bug is of a kind the +architecture invites. + +### Not yet covered + +The prototype runs Slavic only. `GreekDay` needs its own season table -- +chiefly the Nativity fast, where Greek practice differs structurally (see +`docs/greek-fasting.md`), and its stricter period starts at `nativity - 12` +rather than `nativity - 6`. + ## What is deliberately *not* in scope The rank questions that surfaced during the investigation are behaviour diff --git a/tools/fasting/prototype.py b/tools/fasting/prototype.py new file mode 100644 index 00000000..ca8530db --- /dev/null +++ b/tools/fasting/prototype.py @@ -0,0 +1,239 @@ +"""A mock-up of the explicit fasting model, measured against current behaviour. + + docker compose run --rm local python tools/fasting/prototype.py + +**Nothing here is wired into the app.** This exists so the shape can be looked +at, and so the claim "it reproduces what we do today" can be checked rather than +asserted. It resolves every day the characterisation test pins and compares its +answer to the live one at the *dietary rung* -- what a reader actually eats -- +rather than at the legacy index. + +The idea is to stop using `max()` over an integer that means three different +things, and say the rule out loud instead: + + a SEASON gives a floor per weekday, and a cap on how far a claim may lift it + a DATA ROW either CLAIMS a rung ("this date allows wine and oil") or + CAPS one ("this day is strict whatever else falls on it") + a RANK RULE may grant more, where a source states one + the answer is the most lenient claim, with every cap applied + +The claim/cap split is the piece the legacy integer hides. Holy Saturday allows +wine but *not* oil -- "on this one Saturday, alone among Saturdays of the year, +olive oil is not permitted" -- so it has to beat a saint's wine-and-oil claim +rather than lose to it, which most-lenient-wins alone gets wrong. + +Sources for each season's numbers are in docs/fasting-refactor-scope.md. +""" +import os +import sys + +sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))) +os.chdir(sys.path[0]) + +import asyncio +import collections +import datetime +from dataclasses import dataclass, field + +import django + +os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'orthocal.settings') +django.setup() + +from calendarium.datetools import ( # noqa: E402 + DietaryAllowance as D, FastLevels, Tradition, Weekday, + FAST_EXCEPTION_TO_DIETARY_ALLOWANCE as RUNG, +) +from calendarium.liturgics import Day # noqa: E402 + +SUN, MON, TUE, WED, THU, FRI, SAT = (Weekday.Sunday, Weekday.Monday, Weekday.Tuesday, + Weekday.Wednesday, Weekday.Thursday, + Weekday.Friday, Weekday.Saturday) +WEEKEND = (SAT, SUN) + + +@dataclass(frozen=True) +class Grant: + """A rank rule: a saint of `min_rank` on these weekdays may eat `rung`.""" + min_rank: int + weekdays: tuple + rung: D + + +@dataclass(frozen=True) +class Season: + name: str + # What the season allows before any commemoration is considered. + floor: dict = field(default_factory=dict) + default_floor: D = D.Strict + # How far a data row's claim may lift the floor, and the rank that escapes + # the cap. Per weekday where a season needs it. + cap: dict = field(default_factory=dict) + default_cap: D = D.FastFree + cap_exempt_rank: int = 99 + grants: tuple = () + + def floor_for(self, weekday): + return self.floor.get(weekday, self.default_floor) + + def cap_for(self, weekday, feast_level): + if feast_level >= self.cap_exempt_rank: + return D.FastFree + return self.cap.get(weekday, self.default_cap) + + +# --- the seasons, with their sources --------------------------------------- + +ORDINARY = Season('ordinary Wed/Fri', default_floor=D.Strict) + +# Ware, via OCA: weekdays strict, weekend wine and oil (which the data supplies), +# fish only on the Annunciation and Palm Sunday -- ranks 7 and 8. The cap is the +# highest rung that is still fishless, so Lazarus Saturday keeps its caviar. +LENT = Season('Great Lent', default_floor=D.Strict, + default_cap=D.WineAndOil, cap_exempt_rank=7) + +# OCA: "wine and oil are allowed only on Saturdays and Sundays (and sometimes +# on a few feast days and vigils)" -- the Transfiguration, rank 8. +DORMITION = Season('Dormition', floor={SAT: D.WineAndOil, SUN: D.WineAndOil}, + default_floor=D.Strict, + default_cap=D.Strict, cap_exempt_rank=7) + +# Typikon Ch. 33: Mon/Wed/Fri strict, Tue/Thu wine and oil, Sat/Sun fish. +_CH33_FLOOR = {MON: D.Strict, TUE: D.WineAndOil, WED: D.Strict, + THU: D.WineAndOil, FRI: D.Strict, + SAT: D.FishWineOil, SUN: D.FishWineOil} +# Ch. 33's rank clause. NOT currently implemented by the app -- switch on to see +# what it would change. +_CH33_GRANTS = ( + Grant(min_rank=3, weekdays=(MON, TUE, THU), rung=D.FishWineOil), + Grant(min_rank=3, weekdays=(WED, FRI), rung=D.WineAndOil), + Grant(min_rank=5, weekdays=(WED, FRI), rung=D.FishWineOil), +) +APOSTLES = Season('Apostles', floor=_CH33_FLOOR, + cap={WED: D.WineAndOil, FRI: D.WineAndOil, + SAT: D.FishWineOil, SUN: D.FishWineOil}, + cap_exempt_rank=4) +NATIVITY = Season('Nativity', floor=_CH33_FLOOR, + cap={WED: D.WineAndOil, FRI: D.WineAndOil, + SAT: D.FishWineOil, SUN: D.FishWineOil}, + cap_exempt_rank=4) + +SEASONS = { + FastLevels.NoFast: None, + FastLevels.Fast: ORDINARY, + FastLevels.LentenFast: LENT, + FastLevels.DormitionFast: DORMITION, + FastLevels.ApostlesFast: APOSTLES, + FastLevels.NativityFast: NATIVITY, +} + + +def resolve(season, weekday, feast_level, claims, caps, + windows=(), use_rank_grants=False): + """The whole combination rule, in one readable pass.""" + if D.FastFree in claims: # a fast-free row ends the question + return D.FastFree + if season is None: + return D.FastFree + + allowance = season.floor_for(weekday) + season_cap = season.cap_for(weekday, feast_level) + for claim in claims: + # A season cap means "no fish". Caviar is not fish -- dietarily + # WineOilCaviar excludes exactly what WineAndOil does -- so a caviar + # claim survives a wine-and-oil cap instead of being clamped below it. + clamped = claim if (claim == D.WineOilCaviar and season_cap >= D.WineAndOil) \ + else min(claim, season_cap) + allowance = max(allowance, clamped) + if use_rank_grants: + for grant in season.grants: + if feast_level >= grant.min_rank and weekday in grant.weekdays: + allowance = max(allowance, grant.rung) + + for cap in caps: # a row asserting strictness wins + allowance = min(allowance, cap) + + for window in windows: # season-specific dated rules + allowance = window(allowance, weekday, feast_level) + return allowance + + +# --- the dated windows the sources also state ------------------------------ + +def no_fish_before_nativity(allowance, weekday, feast_level): + """Ch. 33: 'from the 20th of December until the 25th, even if it be + Saturday or Sunday, we do not allow fish.'""" + return min(allowance, D.WineAndOil) + + +def eve_on_weekend(allowance, weekday, feast_level): + """The eves of Nativity and Theophany are wine-and-oil days on a weekend.""" + return max(allowance, D.WineAndOil) if weekday in WEEKEND else allowance + + +async def main(): + matches = collections.Counter() + mismatches = collections.Counter() + examples = collections.defaultdict(list) + + for tradition, tname in ((Tradition.Slavic, 'slavic'),): + for year in (2025, 2026, 2027, 2028, 2029): + date = datetime.date(year, 1, 1) + while date.year == year: + day = Day(date.year, date.month, date.day, tradition=tradition) + await day.ainitialize() + + raw = [d.fast_exception for d in day.days] + # 0 makes no claim. 5, 9 and 10 assert strictness rather than + # leniency -- Holy Saturday's wine-without-oil, the strict eves, + # and Clean Week's "no overrides" -- so they cap rather than + # claim. + # 0 makes no claim. 9 and 10 assert strictness only. 5 -- + # Holy Saturday's wine-without-oil -- asserts an *exact* rung: + # it lifts the strict floor and also forbids the oil a saint's + # claim would allow, so it is both a claim and a cap. + claims = [RUNG[e] for e in raw if e not in (0, 9, 10)] + caps = [RUNG[e] for e in raw if e in (5, 9, 10)] + + season = SEASONS.get(day.fast_level) + windows = [] + if day.fast_level in (FastLevels.ApostlesFast, FastLevels.NativityFast): + if day.pyear.nativity - 6 < day.pdist < day.pyear.nativity - 1: + windows.append(no_fish_before_nativity) + if day.pdist in (day.pyear.nativity - 1, day.pyear.theophany - 1): + windows.append(eve_on_weekend) + + got = resolve(season, day.weekday, day.feast_level, claims, + caps, windows) + want = D.FastFree if day.fast_level == FastLevels.NoFast \ + else RUNG[day.fast_exception] + + key = season.name if season else 'no fast' + if got == want: + matches[key] += 1 + else: + mismatches[(key, want.name, got.name)] += 1 + examples[(key, want.name, got.name)].append( + f'{date} {tname} w{day.weekday} feast{day.feast_level} rows={raw}') + date += datetime.timedelta(days=1) + + total = sum(matches.values()) + sum(mismatches.values()) + print(f'\n prototype vs current behaviour, slavic, 5 years: ' + f'{sum(matches.values())}/{total} ' + f'({100 * sum(matches.values()) / total:.1f}%)\n') + print(' by season:') + for name in ('no fast', 'ordinary Wed/Fri', 'Great Lent', 'Dormition', + 'Apostles', 'Nativity'): + ok = matches[name] + bad = sum(v for k, v in mismatches.items() if k[0] == name) + if ok or bad: + print(f' {name:<18} {ok:>5} match {bad:>4} differ') + if mismatches: + print('\n differences:') + for (name, want, got), n in mismatches.most_common(): + print(f' {name:<18} current={want:<13} prototype={got:<13} ({n})') + print(f' e.g. {examples[(name, want, got)][0]}') + + +if __name__ == '__main__': + asyncio.run(main()) From ced965d12c06ef698611620154b7b2bda145618b Mon Sep 17 00:00:00 2001 From: Brian Glass Date: Tue, 8 Sep 2026 14:43:09 -0400 Subject: [PATCH 04/20] Prototype reaches 3652/3652 on both traditions, index included Extends the mock-up to Greek and to the legacy fast_exception index, which is what the implementation needs before it can replace anything. Greek differs structurally only in the Nativity fast, which splits into two seasons: everything but Wednesday and Friday is a fish day until Dec 12, and Monday, Tuesday and Thursday drop to full strictness from Dec 13. The index matters because calendarium/api.py publishes it. The model reports the deciding row's own value when a row decides, and one canonical index per rung when the season does -- so indices 3 and 4, whose only purpose was precedence, still report as themselves even though nothing depends on them any more. With the Wednesday/Friday quirk emulated behind Season.legacy_wed_fri_assignment the prototype reproduces 3652 of 3652 days exactly, both traditions, both the dietary rung and the legacy index. Run with --fixed the flag comes off and exactly the four Nativity Eve days change. That is what licenses the swap: the refactor can land byte-identical with the flag on, and removing it afterwards is a four-line diff in the characterisation file rather than a leap of faith. Still prototype only; no application code changed. 190 tests pass. Co-Authored-By: Claude Opus 5 Claude-Session: https://claude.ai/code/session_019nQRjJpPqW89xqzAf1vsEX --- docs/fasting-refactor-scope.md | 28 +++++-- tools/fasting/prototype.py | 141 ++++++++++++++++++++++++++------- 2 files changed, 134 insertions(+), 35 deletions(-) diff --git a/docs/fasting-refactor-scope.md b/docs/fasting-refactor-scope.md index 505d3e92..57a7fe40 100644 --- a/docs/fasting-refactor-scope.md +++ b/docs/fasting-refactor-scope.md @@ -244,12 +244,28 @@ This is the concrete answer to "what does the refactor buy": the explicit model found a bug the emergent one produced and hid, and the bug is of a kind the architecture invites. -### Not yet covered - -The prototype runs Slavic only. `GreekDay` needs its own season table -- -chiefly the Nativity fast, where Greek practice differs structurally (see -`docs/greek-fasting.md`), and its stricter period starts at `nativity - 12` -rather than `nativity - 6`. +### Both traditions, and the legacy index too + +Extended to Greek, whose only structural difference is the Nativity fast: it +splits into two seasons, everything but Wednesday and Friday being a fish day +until Dec 12 and Monday, Tuesday and Thursday dropping to full strictness from +Dec 13 (`docs/greek-fasting.md`). + +The prototype also reproduces the legacy `fast_exception` index, because +`calendarium/api.py` publishes it. A row that decides the outcome reports its +own value; where the season decides, one canonical index per rung is used. That +keeps indices 3 and 4 -- whose whole purpose was precedence -- reporting as +themselves even though the model no longer needs them to. + +With the Wednesday/Friday quirk emulated behind +`Season.legacy_wed_fri_assignment`, the prototype reproduces **3652 of 3652 +days exactly**, in both traditions, on both the dietary rung and the legacy +index. Running it with `--fixed` turns the flag off and changes exactly the four +Nativity Eve days and nothing else. + +That is the licence to swap the implementation: the refactor lands +byte-identical with the flag on, and removing the flag is a four-line diff in +the characterisation file. ## What is deliberately *not* in scope diff --git a/tools/fasting/prototype.py b/tools/fasting/prototype.py index ca8530db..38913ddd 100644 --- a/tools/fasting/prototype.py +++ b/tools/fasting/prototype.py @@ -46,6 +46,9 @@ ) from calendarium.liturgics import Day # noqa: E402 +# Set False to see what the Nativity Eve fix changes. +LEGACY = '--fixed' not in sys.argv + SUN, MON, TUE, WED, THU, FRI, SAT = (Weekday.Sunday, Weekday.Monday, Weekday.Tuesday, Weekday.Wednesday, Weekday.Thursday, Weekday.Friday, Weekday.Saturday) @@ -72,6 +75,12 @@ class Season: default_cap: D = D.FastFree cap_exempt_rank: int = 99 grants: tuple = () + # Emulates the bug described in docs/fasting-refactor-scope.md, so the + # refactor can be proven byte-identical before the fix is made visible. + # The live code writes the Wednesday/Friday cap as an assignment rather + # than a clamp, so it raises a strictness assertion instead of only + # lowering a leniency claim. + legacy_wed_fri_assignment: bool = False def floor_for(self, weekday): return self.floor.get(weekday, self.default_floor) @@ -112,11 +121,32 @@ def cap_for(self, weekday, feast_level): APOSTLES = Season('Apostles', floor=_CH33_FLOOR, cap={WED: D.WineAndOil, FRI: D.WineAndOil, SAT: D.FishWineOil, SUN: D.FishWineOil}, - cap_exempt_rank=4) + cap_exempt_rank=4, legacy_wed_fri_assignment=LEGACY) NATIVITY = Season('Nativity', floor=_CH33_FLOOR, cap={WED: D.WineAndOil, FRI: D.WineAndOil, SAT: D.FishWineOil, SUN: D.FishWineOil}, - cap_exempt_rank=4) + cap_exempt_rank=4, legacy_wed_fri_assignment=LEGACY) + +# Greek practice differs only in the Nativity fast, and there it splits in two. +# See docs/greek-fasting.md: for the first four weeks everything but Wednesday +# and Friday is a fish day, and from Dec 13 the fast tightens further than +# Slavic practice does -- Monday, Tuesday and Thursday drop to full strictness +# rather than merely losing fish. +NATIVITY_GREEK_EARLY = Season( + 'Nativity (Greek, to Dec 12)', + floor={WED: D.Strict, FRI: D.Strict}, + default_floor=D.FishWineOil, + cap={WED: D.WineAndOil, FRI: D.WineAndOil}, + default_cap=D.FishWineOil, + cap_exempt_rank=4, legacy_wed_fri_assignment=LEGACY) +NATIVITY_GREEK_STRICT = Season( + 'Nativity (Greek, from Dec 13)', + floor={SAT: D.WineAndOil, SUN: D.WineAndOil}, + default_floor=D.Strict, + # The weekend allowance is unconditional here; the weekday one is not. + cap={SAT: D.WineAndOil, SUN: D.WineAndOil}, + default_cap=D.WineAndOil, + cap_exempt_rank=4, legacy_wed_fri_assignment=LEGACY) SEASONS = { FastLevels.NoFast: None, @@ -128,34 +158,75 @@ def cap_for(self, weekday, feast_level): } -def resolve(season, weekday, feast_level, claims, caps, - windows=(), use_rank_grants=False): - """The whole combination rule, in one readable pass.""" - if D.FastFree in claims: # a fast-free row ends the question - return D.FastFree +def season_for(day, tradition): + """The season table governing this day. Only Greek's Nativity fast splits.""" + if (tradition is Tradition.Greek + and day.fast_level == FastLevels.NativityFast): + return (NATIVITY_GREEK_STRICT if day.pdist >= day.pyear.nativity - 12 + else NATIVITY_GREEK_EARLY) + return SEASONS.get(day.fast_level) + + +# The index to report when the outcome came from the season rather than from a +# particular row: one canonical legacy value per rung. +CANONICAL = {D.Strict: 0, D.WineOnly: 5, D.WineAndOil: 1, D.WineOilCaviar: 6, + D.FishWineOil: 2, D.MeatFast: 7, D.FastFree: 11} + + +def resolve(season, weekday, feast_level, rows, windows=(), use_rank_grants=False): + """The whole combination rule, in one readable pass. + + Returns (rung, legacy_index). The rung is the answer; the index is kept + only because `fast_exception` is published by the API, and is the winning + row's own value when a row decided it, or the canonical value for the rung + when the season did. + """ + claims = [(i, RUNG[i]) for i in rows if i not in (0, 9, 10)] + caps = [(i, RUNG[i]) for i in rows if i in (5, 9, 10)] + + for i, rung in claims: + if rung is D.FastFree: # a fast-free row ends the question + return D.FastFree, i if season is None: - return D.FastFree + return D.FastFree, CANONICAL[D.FastFree] allowance = season.floor_for(weekday) + winner = None # the row that set the current answer season_cap = season.cap_for(weekday, feast_level) - for claim in claims: + for i, claim in claims: # A season cap means "no fish". Caviar is not fish -- dietarily # WineOilCaviar excludes exactly what WineAndOil does -- so a caviar # claim survives a wine-and-oil cap instead of being clamped below it. clamped = claim if (claim == D.WineOilCaviar and season_cap >= D.WineAndOil) \ else min(claim, season_cap) - allowance = max(allowance, clamped) + if clamped > allowance: + allowance = clamped + # A clamped claim no longer speaks for itself; the season does. + winner = i if clamped == claim else None if use_rank_grants: for grant in season.grants: if feast_level >= grant.min_rank and weekday in grant.weekdays: - allowance = max(allowance, grant.rung) + if grant.rung > allowance: + allowance, winner = grant.rung, None + + for i, cap in caps: # a row asserting strictness wins + if cap < allowance: + allowance, winner = cap, i + elif cap == allowance and winner is None: + winner = i # it agrees, and it has the better label - for cap in caps: # a row asserting strictness wins - allowance = min(allowance, cap) + index = winner if winner is not None else CANONICAL[allowance] + + if (season.legacy_wed_fri_assignment and weekday in (WED, FRI) + and feast_level < season.cap_exempt_rank and index > 1): + allowance, index = D.WineAndOil, 1 for window in windows: # season-specific dated rules - allowance = window(allowance, weekday, feast_level) - return allowance + moved = window(allowance, weekday, feast_level) + if moved != allowance: + allowance, index = moved, CANONICAL[moved] + + return allowance, index # --- the dated windows the sources also state ------------------------------ @@ -175,8 +246,10 @@ async def main(): matches = collections.Counter() mismatches = collections.Counter() examples = collections.defaultdict(list) + index_diffs = collections.Counter() + index_examples = collections.defaultdict(list) - for tradition, tname in ((Tradition.Slavic, 'slavic'),): + for tradition, tname in ((Tradition.Slavic, 'slavic'), (Tradition.Greek, 'greek')): for year in (2025, 2026, 2027, 2028, 2029): date = datetime.date(year, 1, 1) while date.year == year: @@ -195,20 +268,26 @@ async def main(): claims = [RUNG[e] for e in raw if e not in (0, 9, 10)] caps = [RUNG[e] for e in raw if e in (5, 9, 10)] - season = SEASONS.get(day.fast_level) + season = season_for(day, tradition) windows = [] - if day.fast_level in (FastLevels.ApostlesFast, FastLevels.NativityFast): - if day.pyear.nativity - 6 < day.pdist < day.pyear.nativity - 1: - windows.append(no_fish_before_nativity) + if (tradition is Tradition.Slavic + and day.fast_level in (FastLevels.ApostlesFast, + FastLevels.NativityFast) + and day.pyear.nativity - 6 < day.pdist < day.pyear.nativity - 1): + windows.append(no_fish_before_nativity) if day.pdist in (day.pyear.nativity - 1, day.pyear.theophany - 1): windows.append(eve_on_weekend) - got = resolve(season, day.weekday, day.feast_level, claims, - caps, windows) + got, got_index = resolve(season, day.weekday, day.feast_level, + raw, windows) want = D.FastFree if day.fast_level == FastLevels.NoFast \ else RUNG[day.fast_exception] + if day.fast_level != FastLevels.NoFast and got_index != day.fast_exception: + index_diffs[(day.fast_exception, got_index)] += 1 + index_examples[(day.fast_exception, got_index)].append( + f'{date} {tname} rows={raw} feast{day.feast_level}') - key = season.name if season else 'no fast' + key = f'{tname} {season.name}' if season else f'{tname} no fast' if got == want: matches[key] += 1 else: @@ -218,20 +297,24 @@ async def main(): date += datetime.timedelta(days=1) total = sum(matches.values()) + sum(mismatches.values()) - print(f'\n prototype vs current behaviour, slavic, 5 years: ' + print(f'\n prototype vs current behaviour, both traditions, 5 years: ' f'{sum(matches.values())}/{total} ' f'({100 * sum(matches.values()) / total:.1f}%)\n') print(' by season:') - for name in ('no fast', 'ordinary Wed/Fri', 'Great Lent', 'Dormition', - 'Apostles', 'Nativity'): + for name in sorted(set(matches) | {k[0] for k in mismatches}): ok = matches[name] bad = sum(v for k, v in mismatches.items() if k[0] == name) - if ok or bad: - print(f' {name:<18} {ok:>5} match {bad:>4} differ') + flag = '' if not bad else ' <--' + print(f' {name:<34} {ok:>5} match {bad:>4} differ{flag}') + print(f"\n legacy fast_exception index reproduced exactly: " + f"{'yes' if not index_diffs else 'NO'}") + for (want_i, got_i), n in index_diffs.most_common(10): + print(f' current exc={want_i} -> prototype exc={got_i} ({n} days)' + f' e.g. {index_examples[(want_i, got_i)][0]}') if mismatches: print('\n differences:') for (name, want, got), n in mismatches.most_common(): - print(f' {name:<18} current={want:<13} prototype={got:<13} ({n})') + print(f' {name:<34} current={want:<13} prototype={got:<13} ({n})') print(f' e.g. {examples[(name, want, got)][0]}') From 2098e1df07399f69ad25af89c56dfb5fc44c9bf0 Mon Sep 17 00:00:00 2001 From: Brian Glass Date: Tue, 8 Sep 2026 16:19:29 -0400 Subject: [PATCH 05/20] Replace the fasting adjustments with the explicit model Step 1 of docs/fasting-refactor-scope.md. calendarium/fasting.py holds the seasons and the rule that combines them with the festal cycle; both _apply_fasting_adjustments methods are now two lines that call it. calendarium/liturgics/day.py loses 145 lines and gains 9. The rule is stated rather than emergent: a season gives a floor per weekday and a cap on how far a claim may lift it; a data row either claims a rung or caps one; a rank rule may grant more where a source states one; the answer is the most lenient claim with every cap applied. Each season's numbers carry their citation -- Typikon Ch. 33 for the Apostles' and Nativity fasts, Ware's Lenten Triodion for Lent, OCA's guidelines for Dormition. The characterisation test passes unchanged: 3,652 days across both traditions, identical on the dietary rung and on the legacy fast_exception index that calendarium/api.py publishes. The Wednesday/Friday quirk is preserved on purpose behind Season.legacy_wed_fri_assignment so this step alters nothing; removing it is the Nativity Eve fix and comes next. Ch. 33's rank clause is written in _CH33_GRANTS and left switched off for the same reason. The swap turned up one thing the prototype had missed. On a NoFast day the old code left fast_exception as the row maximum, because NoFast matched none of its cases and fell through, so a feast row on a free day still shows "Fish, Wine and Oil are Allowed". NO_FAST is a real season for that reason. The characterisation caught it on the first run, which is what it is for. 190 tests pass. Co-Authored-By: Claude Opus 5 Claude-Session: https://claude.ai/code/session_019nQRjJpPqW89xqzAf1vsEX --- calendarium/fasting.py | 251 +++++++++++++++++++++++++++++++++ calendarium/liturgics/day.py | 154 ++------------------ docs/fasting-refactor-scope.md | 28 ++++ 3 files changed, 288 insertions(+), 145 deletions(-) create mode 100644 calendarium/fasting.py diff --git a/calendarium/fasting.py b/calendarium/fasting.py new file mode 100644 index 00000000..28c73f2c --- /dev/null +++ b/calendarium/fasting.py @@ -0,0 +1,251 @@ +"""How a day's dietary allowance is decided. + +Two cycles contribute to any given day -- the Paschal cycle and the festal one +-- and something has to combine them. That used to be `max()` over +`Day.fast_exception`, an integer that simultaneously encoded a dietary rung, a +precedence claim and a sentinel, followed by a run of weekday and season special +cases patching whatever the comparison got wrong. See +docs/fasting-refactor-scope.md for why that could not be arithmetic. + +This says the rule out loud instead: + + a SEASON gives a floor per weekday, and a cap on how far a claim may lift it + a DATA ROW either CLAIMS a rung ("this date allows wine and oil") or CAPS + one ("this day is strict whatever else falls on it") + a RANK RULE may grant more, where a source states one + the answer is the most lenient claim, with every cap applied + +Each season's numbers are sourced, not fitted; the citations are on the +definitions below and collected in docs/fasting-refactor-scope.md. +""" +from dataclasses import dataclass, field + +from .datetools import ( + DietaryAllowance as D, FastLevels, Weekday, + FAST_EXCEPTION_TO_DIETARY_ALLOWANCE as RUNG, +) + +SUN, MON, TUE, WED, THU, FRI, SAT = ( + Weekday.Sunday, Weekday.Monday, Weekday.Tuesday, Weekday.Wednesday, + Weekday.Thursday, Weekday.Friday, Weekday.Saturday) + +FAST_FREE = 11 +# Rows that assert strictness rather than leniency. 9 and 10 are the strict eves +# and Clean/Holy Week's "no overrides"; 5 is Holy Saturday, which allows wine +# but *not* oil -- "on this one Saturday, alone among Saturdays of the year, +# olive oil is not permitted" -- so it must beat a saint's wine-and-oil claim +# rather than lose to it. 5 both claims and caps: it lifts the strict floor too. +CAP_INDICES = (5, 9, 10) +CLAIMLESS_INDICES = (0, 9, 10) + +# What to report as `fast_exception` when the season decided the outcome rather +# than any particular row: one canonical legacy index per rung. The field is +# published by calendarium/api.py, which is the only reason it still exists. +CANONICAL = { + D.Strict: 0, D.WineOnly: 5, D.WineAndOil: 1, D.WineOilCaviar: 6, + D.FishWineOil: 2, D.MeatFast: 7, D.FastFree: 11, +} + + +@dataclass(frozen=True) +class Grant: + """A rank rule: a saint of `min_rank` on these weekdays may eat `rung`.""" + min_rank: int + weekdays: tuple + rung: D + + +@dataclass(frozen=True) +class Season: + name: str + floor: dict = field(default_factory=dict) + default_floor: D = D.Strict + cap: dict = field(default_factory=dict) + default_cap: D = D.FastFree + cap_exempt_rank: int = 99 + grants: tuple = () + # Ch. 33's rank clause is stated but has never been implemented; see + # docs/fasting-refactor-scope.md. Kept off so this refactor changes nothing. + apply_grants: bool = False + # Clamps fish away in the days before Nativity -- Ch. 33: "from the 20th of + # December until the 25th, even if it be Saturday or Sunday, we do not allow + # fish." Slavic only; Greek expresses the same tightening as a second season. + no_fish_before_nativity: bool = False + # Reproduces a bug in the code this module replaced, so the change could be + # proven to alter nothing. That code wrote the Wednesday/Friday cap as an + # assignment rather than a clamp, so it *raised* a strictness assertion + # instead of only lowering a leniency claim, and Nativity Eve came out more + # lenient on Wednesday and Friday than on Monday or Thursday. Removing this + # is the fix; see docs/fasting-refactor-scope.md. + legacy_wed_fri_assignment: bool = False + + def floor_for(self, weekday): + return self.floor.get(weekday, self.default_floor) + + def cap_for(self, weekday, feast_level): + if feast_level >= self.cap_exempt_rank: + return D.FastFree + return self.cap.get(weekday, self.default_cap) + + +# --- the seasons ------------------------------------------------------------ + +ORDINARY = Season('ordinary Wed/Fri', default_floor=D.Strict) + +# Not a fasting season, but a day still carries an allowance label: a feast row +# on a free day says "Fish, Wine and Oil are Allowed" and that is what gets +# shown. `fast_abstentions_for` short-circuits on NoFast, so the rung is unused. +NO_FAST = Season('no fast', default_floor=D.Strict) + +# Ware, *The Lenten Triodion*, via OCA: weekdays strict, weekend wine and oil +# (supplied by the Paschal-cycle rows), fish only on the Annunciation and Palm +# Sunday, which are ranks 7 and 8. +LENT = Season('Great Lent', default_floor=D.Strict, + default_cap=D.WineAndOil, cap_exempt_rank=7) + +# OCA: "wine and oil are allowed only on Saturdays and Sundays (and sometimes on +# a few feast days and vigils)" -- in practice the Transfiguration, rank 8. +DORMITION = Season('Dormition', floor={SAT: D.WineAndOil, SUN: D.WineAndOil}, + default_floor=D.Strict, + default_cap=D.Strict, cap_exempt_rank=7) + +# Typikon Ch. 33: "on Tuesday and Thursday we do not eat fish, but only oil or +# wine. On Monday, Wednesday and Friday, we eat neither oil nor wine.... On +# Saturday and Sunday we eat fish." +_CH33_FLOOR = {MON: D.Strict, TUE: D.WineAndOil, WED: D.Strict, + THU: D.WineAndOil, FRI: D.Strict, + SAT: D.FishWineOil, SUN: D.FishWineOil} +_CH33_CAP = {WED: D.WineAndOil, FRI: D.WineAndOil, + SAT: D.FishWineOil, SUN: D.FishWineOil} +# The rest of Ch. 33, which the app has never applied: "If there occur on +# Tuesday or Thursday a Saint who has a [Great] Doxology, we eat fish; if on +# Monday, the same; but if on Wednesday or Friday, we allow only oil and wine.... +# If it be a Saint who has a Vigil on Wednesday or Friday ... we allow oil and +# wine and fish." Doxology is feast level 3, Vigil is 5. +_CH33_GRANTS = ( + Grant(min_rank=3, weekdays=(MON, TUE, THU), rung=D.FishWineOil), + Grant(min_rank=3, weekdays=(WED, FRI), rung=D.WineAndOil), + Grant(min_rank=5, weekdays=(WED, FRI), rung=D.FishWineOil), +) + +APOSTLES = Season('Apostles', floor=_CH33_FLOOR, cap=_CH33_CAP, + cap_exempt_rank=4, grants=_CH33_GRANTS, + legacy_wed_fri_assignment=True) +NATIVITY = Season('Nativity', floor=_CH33_FLOOR, cap=_CH33_CAP, + cap_exempt_rank=4, grants=_CH33_GRANTS, + no_fish_before_nativity=True, + legacy_wed_fri_assignment=True) + +# Greek practice differs only in the Nativity fast, and there it splits in two: +# for the first four weeks everything but Wednesday and Friday is a fish day, +# and from Dec 13 it tightens further than Slavic practice does -- Monday, +# Tuesday and Thursday drop to full strictness rather than merely losing fish. +# See docs/greek-fasting.md. +NATIVITY_GREEK_EARLY = Season( + 'Nativity (Greek, to Dec 12)', + floor={WED: D.Strict, FRI: D.Strict}, default_floor=D.FishWineOil, + cap={WED: D.WineAndOil, FRI: D.WineAndOil}, default_cap=D.FishWineOil, + cap_exempt_rank=4, legacy_wed_fri_assignment=True) +NATIVITY_GREEK_STRICT = Season( + 'Nativity (Greek, from Dec 13)', + floor={SAT: D.WineAndOil, SUN: D.WineAndOil}, default_floor=D.Strict, + cap={SAT: D.WineAndOil, SUN: D.WineAndOil}, default_cap=D.WineAndOil, + cap_exempt_rank=4, legacy_wed_fri_assignment=True) + +_BY_LEVEL = { + FastLevels.NoFast: NO_FAST, + FastLevels.Fast: ORDINARY, + FastLevels.LentenFast: LENT, + FastLevels.DormitionFast: DORMITION, + FastLevels.ApostlesFast: APOSTLES, + FastLevels.NativityFast: NATIVITY, +} + + +def slavic_season(day): + return _BY_LEVEL.get(day.fast_level) + + +def greek_season(day): + if day.fast_level == FastLevels.NativityFast: + return (NATIVITY_GREEK_STRICT if day.pdist >= day.pyear.nativity - 12 + else NATIVITY_GREEK_EARLY) + return _BY_LEVEL.get(day.fast_level) + + +# --- the rule --------------------------------------------------------------- + +def resolve(season, weekday, feast_level, rows, no_fish=False, eve_on_weekend=False): + """Combine a day's contributing rows into (rung, legacy fast_exception).""" + claims = [(i, RUNG[i]) for i in rows if i not in CLAIMLESS_INDICES] + caps = [(i, RUNG[i]) for i in rows if i in CAP_INDICES] + + for index, rung in claims: + if rung is D.FastFree: # a fast-free row ends the question + return D.FastFree, index + + allowance = season.floor_for(weekday) + winner = None # the row that set the current answer + season_cap = season.cap_for(weekday, feast_level) + + for index, claim in claims: + # A season cap means "no fish", and caviar is not fish -- dietarily + # WineOilCaviar excludes exactly what WineAndOil does -- so a caviar + # claim survives the cap rather than being clamped below it. + clamped = (claim if claim is D.WineOilCaviar and season_cap >= D.WineAndOil + else min(claim, season_cap)) + if clamped > allowance: + # A clamped claim no longer speaks for itself; the season does. + allowance, winner = clamped, (index if clamped == claim else None) + + if season.apply_grants: + for grant in season.grants: + if feast_level >= grant.min_rank and weekday in grant.weekdays: + if grant.rung > allowance: + allowance, winner = grant.rung, None + + for index, cap in caps: + if cap < allowance: + allowance, winner = cap, index + elif cap == allowance and winner is None: + winner = index # it agrees, and has the better label + + index = winner if winner is not None else CANONICAL[allowance] + + if (season.legacy_wed_fri_assignment and weekday in (WED, FRI) + and feast_level < season.cap_exempt_rank and index > 1): + allowance, index, winner = D.WineAndOil, 1, None + + if no_fish: + allowance = min(allowance, D.WineAndOil) + winner = None + if eve_on_weekend and weekday in (SAT, SUN) and allowance < D.WineAndOil: + allowance, winner = D.WineAndOil, None + + return allowance, (winner if winner is not None else CANONICAL[allowance]) + + +def apply(day, season_for): + """Set `day.fast_level` and `day.fast_exception` for one day.""" + rows = [d.fast_exception for d in day.days] + + if FAST_FREE in rows: + day.fast_level = FastLevels.NoFast + day.fast_exception = FAST_FREE + return + + # The Apostles' fast cannot be read off the database: the feast of Sts Peter + # and Paul belongs to the festal cycle while the fast's start is Paschal. + if 56 < day.pdist < day.pyear.peter_and_paul: + day.fast_level = FastLevels.ApostlesFast + if day.pdist == 57: + day.service_notes.append("Beginning of Apostles' Fast") + + season = season_for(day) + no_fish = bool(season and season.no_fish_before_nativity + and day.pyear.nativity - 6 < day.pdist < day.pyear.nativity - 1) + eve = day.pdist in (day.pyear.nativity - 1, day.pyear.theophany - 1) + + _, day.fast_exception = resolve( + season, day.weekday, day.feast_level, rows, + no_fish=no_fish, eve_on_weekend=eve) diff --git a/calendarium/liturgics/day.py b/calendarium/liturgics/day.py index dff15468..14ebcdca 100644 --- a/calendarium/liturgics/day.py +++ b/calendarium/liturgics/day.py @@ -9,6 +9,7 @@ from django.utils.html import strip_tags from .. import datetools, models +from .. import fasting from ..datetools import Calendar, Tradition, Weekday, FastLevels, FastLevelDesc, FastExceptions, FeastLevels, FloatIndex # FloatIndex values start at 1001, well above any Pascha-distance, so a reading @@ -929,155 +930,18 @@ def gospel_pdist(self): class SlavicDay(Day): def _apply_fasting_adjustments(self): - # Adjust for fast free days - if self.fast_exception == 11: - self.fast_level = FastLevels.NoFast - return - - # Are we in the Apostles fast? This can't be gleaned from the database - # because the feast of Sts. Peter and Paul is part of the Festal cycle, - # but the beginning of this fast is defined by the Paschal cycle. - if 56 < self.pdist < self.pyear.peter_and_paul: - self.fast_level = FastLevels.ApostlesFast - if self.pdist == 57: - self.service_notes.append("Beginning of Apostles' Fast") - - match self.fast_level: - case FastLevels.LentenFast: - # Remove fish for minor feast days in Lent - if self.fast_exception == 2: - self.fast_exception -= 1 - case FastLevels.DormitionFast: - # Unlike the Apostles' and Nativity fasts, the Dormition Fast - # has no rank-based exception at all -- the Typikon's - # Vigil-rank fish rule (Ch. 32-33) is scoped to those two - # fasts only, and no source found extends even a wine-and-oil - # floor to a lower-ranked commemoration during Dormition - # (confirmed directly against antiochian.org/liturgicday for - # 8/13, 2026: Leavetaking of Transfiguration, feast_level 4, - # is listed as a full abstention day -- no wine or oil). - # Every source checked treats Dormition as strict as Great - # Lent with exactly one dated exception: the Transfiguration - # itself (Aug 6, feast_level 8, "Major feast Lord"). Zero out - # anything baked onto a lower-ranked row -- e.g. a Vigil-rank - # saint's own commemoration, which would grant an exception - # during the other two fasts but not here. - if self.feast_level < 7 and self.fast_exception > 0: - self.fast_exception = 0 - - # Allow wine and oil on weekends during the Dormition fast -- - # a day-of-week exception, independent of feast rank. - if self.weekday in (Weekday.Sunday, Weekday.Saturday) and self.fast_exception == 0: - self.fast_exception += 1 - case FastLevels.ApostlesFast | FastLevels.NativityFast: - match self.weekday: - case Weekday.Tuesday | Weekday.Thursday: - if self.fast_exception == 0: - self.fast_exception += 1 - case Weekday.Wednesday | Weekday.Friday: - if self.feast_level < 4 and self.fast_exception > 1: - self.fast_exception = 1 - case Weekday.Sunday | Weekday.Saturday: - self.fast_exception = 2 - - # Disallow fish for the week before Nativity - if self.pyear.nativity-6 < self.pdist < self.pyear.nativity-1 and self.fast_exception > 1: - self.fast_exception = 1 - - # The days before Nativity and Theophany are wine and oil days - if self.pdist in (self.pyear.nativity-1, self.pyear.theophany-1) and self.weekday in (Weekday.Sunday, Weekday.Saturday): - self.fast_exception = 1 + """Slavic dietary rules. The seasons, and the rule combining them with + the festal cycle, live in calendarium/fasting.py -- this used to be a + run of weekday and season special cases patching a `max()` over an + overloaded integer. See docs/fasting-refactor-scope.md.""" + fasting.apply(self, fasting.slavic_season) class GreekDay(Day): def _apply_fasting_adjustments(self): - """Confirmed via docs/greek-fasting.md: the Apostles Fast, Lenten - Fast, and Dormition Fast all follow the identical weekly pattern as - Slavic practice. Only the Nativity Fast differs -- Greek practice - treats every day but Wednesday/Friday as a fish day for the first - four weeks (Nov 15 - Dec 12), then tightens for the final 12 days - (Dec 13 - 24) more than Slavic practice does: no fish at all, and - only Saturday/Sunday keep any wine-and-oil allowance (Monday/ - Tuesday/Thursday drop to the same strictness as Wednesday/Friday, - rather than just losing fish the way Slavic's ~5-day-shorter - stricter period does).""" - - # Adjust for fast free days - if self.fast_exception == 11: - self.fast_level = FastLevels.NoFast - return - - # Are we in the Apostles fast? This can't be gleaned from the database - # because the feast of Sts. Peter and Paul is part of the Festal cycle, - # but the beginning of this fast is defined by the Paschal cycle. - if 56 < self.pdist < self.pyear.peter_and_paul: - self.fast_level = FastLevels.ApostlesFast - if self.pdist == 57: - self.service_notes.append("Beginning of Apostles' Fast") - - match self.fast_level: - case FastLevels.LentenFast: - # Remove fish for minor feast days in Lent - if self.fast_exception == 2: - self.fast_exception -= 1 - case FastLevels.DormitionFast: - # Unlike the Apostles' and Nativity fasts, the Dormition Fast - # has no rank-based exception at all -- the Typikon's - # Vigil-rank fish rule (Ch. 32-33) is scoped to those two - # fasts only, and no source found extends even a wine-and-oil - # floor to a lower-ranked commemoration during Dormition - # (confirmed directly against antiochian.org/liturgicday for - # 8/13, 2026: Leavetaking of Transfiguration, feast_level 4, - # is listed as a full abstention day -- no wine or oil). - # Every source checked treats Dormition as strict as Great - # Lent with exactly one dated exception: the Transfiguration - # itself (Aug 6, feast_level 8, "Major feast Lord"). Zero out - # anything baked onto a lower-ranked row -- e.g. a Vigil-rank - # saint's own commemoration, which would grant an exception - # during the other two fasts but not here. - if self.feast_level < 7 and self.fast_exception > 0: - self.fast_exception = 0 - - # Allow wine and oil on weekends during the Dormition fast -- - # a day-of-week exception, independent of feast rank. - if self.weekday in (Weekday.Sunday, Weekday.Saturday) and self.fast_exception == 0: - self.fast_exception += 1 - case FastLevels.ApostlesFast: - match self.weekday: - case Weekday.Tuesday | Weekday.Thursday: - if self.fast_exception == 0: - self.fast_exception += 1 - case Weekday.Wednesday | Weekday.Friday: - if self.feast_level < 4 and self.fast_exception > 1: - self.fast_exception = 1 - case Weekday.Sunday | Weekday.Saturday: - self.fast_exception = 2 - case FastLevels.NativityFast: - stricter_period = self.pdist >= self.pyear.nativity - 12 - - match self.weekday: - case Weekday.Wednesday | Weekday.Friday: - if self.feast_level < 4 and self.fast_exception > 1: - self.fast_exception = 1 - case Weekday.Sunday | Weekday.Saturday: - if stricter_period: - # Force wine-and-oil, but never loosen a - # deliberately stricter override (7+, e.g. the - # "Strict Fast" baseline on Nativity Eve itself). - if self.fast_exception == 0 or 1 < self.fast_exception <= 6: - self.fast_exception = 1 - else: - self.fast_exception = 2 - case _: # Monday, Tuesday, Thursday - if stricter_period: - if self.feast_level < 4 and 1 < self.fast_exception <= 6: - self.fast_exception = 1 - else: - self.fast_exception = 2 - - # The days before Nativity and Theophany are wine and oil days - if self.pdist in (self.pyear.nativity-1, self.pyear.theophany-1) and self.weekday in (Weekday.Sunday, Weekday.Saturday): - self.fast_exception = 1 + """Greek dietary rules, which differ from Slavic only in the Nativity + fast -- see calendarium/fasting.py and docs/greek-fasting.md.""" + fasting.apply(self, fasting.greek_season) _DAY_CLASSES = { diff --git a/docs/fasting-refactor-scope.md b/docs/fasting-refactor-scope.md index 57a7fe40..3df25328 100644 --- a/docs/fasting-refactor-scope.md +++ b/docs/fasting-refactor-scope.md @@ -267,6 +267,34 @@ That is the licence to swap the implementation: the refactor lands byte-identical with the flag on, and removing the flag is a four-line diff in the characterisation file. +## Step 1 done: the model is the implementation (2026-09-08) + +`calendarium/fasting.py` now holds the seasons and the rule; both +`SlavicDay._apply_fasting_adjustments` and `GreekDay`'s are two lines that call +it. `calendarium/liturgics/day.py` loses 145 lines and gains 9. + +**The characterisation test passes unchanged** -- 3,652 days, both traditions, +identical on the dietary rung and on the legacy `fast_exception` index. The +Wednesday/Friday quirk is preserved deliberately behind +`Season.legacy_wed_fri_assignment` so this step could be proven to change +nothing at all. + +One thing the swap turned up that the prototype had missed: on a **NoFast** day +the old code left `fast_exception` as the row maximum rather than treating the +day as fast-free, because `NoFast` matched none of its cases and fell through. A +feast row on a free day therefore still shows "Fish, Wine and Oil are Allowed". +`NO_FAST` is a real season now for that reason, and the characterisation caught +the difference on the first run. + +### Still to do + +- **Remove `legacy_wed_fri_assignment`.** That is the Nativity Eve fix, and it + is a four-line diff in the characterisation file. +- **Turn on `Season.apply_grants`.** The Ch. 33 rank clause is written in + `_CH33_GRANTS` and switched off, so the refactor changed nothing. Enabling it + is a real behaviour change and wants its own commit and its own review of the + characterisation diff. + ## What is deliberately *not* in scope The rank questions that surfaced during the investigation are behaviour From f83645c7c7337fc4314b8666c189a9a6909f2381 Mon Sep 17 00:00:00 2001 From: Brian Glass Date: Tue, 8 Sep 2026 17:28:00 -0400 Subject: [PATCH 06/20] Fix Nativity Eve, which was lenient on Wednesday and Friday Removes Season.legacy_wed_fri_assignment, the flag added in the previous commit purely so the refactor could be proven to change nothing. Removing it is the fix. Nativity Eve carries fast_exception 9, "Strict Fast", every year. The code this module replaced wrote the Apostles'/Nativity Wednesday and Friday cap as if feast_level < 4 and fast_exception > 1: self.fast_exception = 1 which is meant to strip fish from a lenient claim. Being an assignment rather than a clamp, it also raised a strictness assertion, so Nativity Eve came out at wine and oil on Wednesday and Friday and strict on Monday and Thursday -- more lenient on the two strictest weekdays of the fast. The characterisation diff is exactly four lines: Dec 24 in 2025 and 2027, both traditions, the two years in the pinned range where it falls on a Wednesday or a Friday. The day now reads strict on every weekday except Sunday, where the eve-on-weekend rule still grants wine and oil, which is how Theophany Eve has always behaved -- the ordinary fast never carried the buggy clamp, so the two eves agree again. 190 tests pass. calendarium/tests/data/january.json is untouched: Jan 5 resolves through ORDINARY rather than the Nativity season. Co-Authored-By: Claude Opus 5 Claude-Session: https://claude.ai/code/session_019nQRjJpPqW89xqzAf1vsEX --- calendarium/fasting.py | 23 ++++--------------- .../tests/data/fasting-characterization.txt | 8 +++---- docs/fasting-refactor-scope.md | 21 +++++++++++++++-- 3 files changed, 27 insertions(+), 25 deletions(-) diff --git a/calendarium/fasting.py b/calendarium/fasting.py index 28c73f2c..adbd1063 100644 --- a/calendarium/fasting.py +++ b/calendarium/fasting.py @@ -71,13 +71,6 @@ class Season: # December until the 25th, even if it be Saturday or Sunday, we do not allow # fish." Slavic only; Greek expresses the same tightening as a second season. no_fish_before_nativity: bool = False - # Reproduces a bug in the code this module replaced, so the change could be - # proven to alter nothing. That code wrote the Wednesday/Friday cap as an - # assignment rather than a clamp, so it *raised* a strictness assertion - # instead of only lowering a leniency claim, and Nativity Eve came out more - # lenient on Wednesday and Friday than on Monday or Thursday. Removing this - # is the fix; see docs/fasting-refactor-scope.md. - legacy_wed_fri_assignment: bool = False def floor_for(self, weekday): return self.floor.get(weekday, self.default_floor) @@ -129,12 +122,10 @@ def cap_for(self, weekday, feast_level): ) APOSTLES = Season('Apostles', floor=_CH33_FLOOR, cap=_CH33_CAP, - cap_exempt_rank=4, grants=_CH33_GRANTS, - legacy_wed_fri_assignment=True) + cap_exempt_rank=4, grants=_CH33_GRANTS) NATIVITY = Season('Nativity', floor=_CH33_FLOOR, cap=_CH33_CAP, cap_exempt_rank=4, grants=_CH33_GRANTS, - no_fish_before_nativity=True, - legacy_wed_fri_assignment=True) + no_fish_before_nativity=True) # Greek practice differs only in the Nativity fast, and there it splits in two: # for the first four weeks everything but Wednesday and Friday is a fish day, @@ -145,12 +136,12 @@ def cap_for(self, weekday, feast_level): 'Nativity (Greek, to Dec 12)', floor={WED: D.Strict, FRI: D.Strict}, default_floor=D.FishWineOil, cap={WED: D.WineAndOil, FRI: D.WineAndOil}, default_cap=D.FishWineOil, - cap_exempt_rank=4, legacy_wed_fri_assignment=True) + cap_exempt_rank=4) NATIVITY_GREEK_STRICT = Season( 'Nativity (Greek, from Dec 13)', floor={SAT: D.WineAndOil, SUN: D.WineAndOil}, default_floor=D.Strict, cap={SAT: D.WineAndOil, SUN: D.WineAndOil}, default_cap=D.WineAndOil, - cap_exempt_rank=4, legacy_wed_fri_assignment=True) + cap_exempt_rank=4) _BY_LEVEL = { FastLevels.NoFast: NO_FAST, @@ -210,12 +201,6 @@ def resolve(season, weekday, feast_level, rows, no_fish=False, eve_on_weekend=Fa elif cap == allowance and winner is None: winner = index # it agrees, and has the better label - index = winner if winner is not None else CANONICAL[allowance] - - if (season.legacy_wed_fri_assignment and weekday in (WED, FRI) - and feast_level < season.cap_exempt_rank and index > 1): - allowance, index, winner = D.WineAndOil, 1, None - if no_fish: allowance = min(allowance, D.WineAndOil) winner = None diff --git a/calendarium/tests/data/fasting-characterization.txt b/calendarium/tests/data/fasting-characterization.txt index 5fe1f1a2..844f1dd1 100644 --- a/calendarium/tests/data/fasting-characterization.txt +++ b/calendarium/tests/data/fasting-characterization.txt @@ -355,7 +355,7 @@ 2025-12-21 slavic w0 feast0 fast5 exc1 rows=0,0,0 -> meat,fish,dairy,eggs 2025-12-22 slavic w1 feast0 fast5 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil 2025-12-23 slavic w2 feast0 fast5 exc1 rows=0,0 -> meat,fish,dairy,eggs -2025-12-24 slavic w3 feast0 fast5 exc1 rows=0,0,9 -> meat,fish,dairy,eggs +2025-12-24 slavic w3 feast0 fast5 exc9 rows=0,0,9 -> meat,fish,dairy,eggs,wine,oil 2025-12-25 slavic w4 feast8 fast0 exc11 rows=0,11 -> - 2025-12-26 slavic w5 feast3 fast0 exc11 rows=0,11 -> - 2025-12-27 slavic w6 feast2 fast0 exc11 rows=0,0,11 -> - @@ -1085,7 +1085,7 @@ 2027-12-21 slavic w2 feast0 fast5 exc1 rows=0,0 -> meat,fish,dairy,eggs 2027-12-22 slavic w3 feast0 fast5 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil 2027-12-23 slavic w4 feast0 fast5 exc1 rows=0,0 -> meat,fish,dairy,eggs -2027-12-24 slavic w5 feast0 fast5 exc1 rows=0,0,9 -> meat,fish,dairy,eggs +2027-12-24 slavic w5 feast0 fast5 exc9 rows=0,0,9 -> meat,fish,dairy,eggs,wine,oil 2027-12-25 slavic w6 feast8 fast0 exc11 rows=0,11 -> - 2027-12-26 slavic w0 feast3 fast0 exc11 rows=0,0,11 -> - 2027-12-27 slavic w1 feast2 fast0 exc11 rows=0,11 -> - @@ -2181,7 +2181,7 @@ 2025-12-21 greek w0 feast0 fast5 exc1 rows=0,0,0 -> meat,fish,dairy,eggs 2025-12-22 greek w1 feast0 fast5 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil 2025-12-23 greek w2 feast0 fast5 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil -2025-12-24 greek w3 feast0 fast5 exc1 rows=0,0,9 -> meat,fish,dairy,eggs +2025-12-24 greek w3 feast0 fast5 exc9 rows=0,0,9 -> meat,fish,dairy,eggs,wine,oil 2025-12-25 greek w4 feast8 fast0 exc11 rows=0,11 -> - 2025-12-26 greek w5 feast3 fast0 exc11 rows=0,11 -> - 2025-12-27 greek w6 feast2 fast0 exc11 rows=0,0,11 -> - @@ -2911,7 +2911,7 @@ 2027-12-21 greek w2 feast0 fast5 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil 2027-12-22 greek w3 feast0 fast5 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil 2027-12-23 greek w4 feast0 fast5 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil -2027-12-24 greek w5 feast0 fast5 exc1 rows=0,0,9 -> meat,fish,dairy,eggs +2027-12-24 greek w5 feast0 fast5 exc9 rows=0,0,9 -> meat,fish,dairy,eggs,wine,oil 2027-12-25 greek w6 feast8 fast0 exc11 rows=0,11 -> - 2027-12-26 greek w0 feast3 fast0 exc11 rows=0,0,11 -> - 2027-12-27 greek w1 feast2 fast0 exc11 rows=0,11 -> - diff --git a/docs/fasting-refactor-scope.md b/docs/fasting-refactor-scope.md index 3df25328..4f453457 100644 --- a/docs/fasting-refactor-scope.md +++ b/docs/fasting-refactor-scope.md @@ -286,10 +286,27 @@ feast row on a free day therefore still shows "Fish, Wine and Oil are Allowed". `NO_FAST` is a real season now for that reason, and the characterisation caught the difference on the first run. +## Step 2 done: Nativity Eve is strict again (2026-09-08) + +`legacy_wed_fri_assignment` is removed, which fixes the bug the prototype found. +The characterisation diff is exactly four lines in each direction -- Dec 24 in +2025 and 2027, both traditions, the two years it falls on a Wednesday or a +Friday -- going from wine and oil to a full abstention. + +The day is coherent now, and matches Theophany Eve, which was always correct +because the ordinary fast never carried the buggy clamp: + +| weekday | Nativity Eve | +|---|---| +| Sunday | wine and oil -- the eve-on-weekend rule | +| every other day | strict | + +Nothing else moved: 190 tests pass and `calendarium/tests/data/january.json` is +untouched, since Jan 5 resolves through `ORDINARY` rather than the Nativity +season. + ### Still to do -- **Remove `legacy_wed_fri_assignment`.** That is the Nativity Eve fix, and it - is a four-line diff in the characterisation file. - **Turn on `Season.apply_grants`.** The Ch. 33 rank clause is written in `_CH33_GRANTS` and switched off, so the refactor changed nothing. Enabling it is a real behaviour change and wants its own commit and its own review of the From faf26a6cdd29ac78f9d24cca8e6636a2b344df41 Mon Sep 17 00:00:00 2001 From: Brian Glass Date: Wed, 9 Sep 2026 09:38:56 -0400 Subject: [PATCH 07/20] Record the Antiochian Chapter X fasting rules and the GOA Nativity date Three findings from digging into the sources, none of them code changes. **The Antiochian typikon does have Wednesday/Friday fasting rules, and an earlier pass here wrongly concluded it did not.** The miss was a search failure: the grep looked for rank words near food words, and Chapter X names neither. It is listed in the table of contents as "Wednesdays and Fridays when exceptions to the fast are permitted" and is quoted in full in the scope doc. It is a categorical rule rather than a rank one. It keys on what kind of feast falls on the day -- of the Lord, of the Theotokos, of the Twelve Apostles, or an afterfeast -- where the Typikon Ch. 33 text OCA quotes keys on doxology and vigil rank. The two jurisdictions do not merely differ on dates; they differ on what the exception is about. **That resurrects the Paschal-season candidate for Greek only.** A fish allowance on Paschal Wednesdays and Fridays was raised and withdrawn earlier because OCA's guidelines give none. The Antiochian typikon is explicit, and a footnote records that the Holy Synod of Antioch decreed no fasting at all on those days until Ascension. Their own calendar agrees: antiochian.org says "no fast" on 19 of 28 harvested days where this app says wine and oil, and we agree on 3 of 28. Withdrawing it was right for Slavic and wrong for Greek. **The GOA Nativity fast tightens on December 18, not December 13.** goarch.org is Cloudflare-blocked, but the Archdiocese publishes its rules in the annual Yearbook and three GOA parishes reproduce them with attribution, all agreeing: fish, wine and oil until December 17. This app uses nativity-12, which is December 13, a date taken from two Antiochian parish sources before the decision that `greek` means GOA. Five days a year are therefore stricter than GOA prescribes. Also records why step 3 was held. Enabling Ch. 33's rank grants changes 70 of 3652 days, all as stated, but the change was only wired to three of the five relevant seasons, and it was being judged against antiochian.org -- the wrong yardstick, since each jurisdiction keeps its own typikon and Antiochian divergence from an OCA-quoted rule is not evidence against it. Documentation only; no code or data changed. 190 tests pass. Co-Authored-By: Claude Opus 5 Claude-Session: https://claude.ai/code/session_019nQRjJpPqW89xqzAf1vsEX --- docs/fasting-refactor-scope.md | 101 +++++++++++++++++++++++++++++++++ 1 file changed, 101 insertions(+) diff --git a/docs/fasting-refactor-scope.md b/docs/fasting-refactor-scope.md index 4f453457..15cafcb0 100644 --- a/docs/fasting-refactor-scope.md +++ b/docs/fasting-refactor-scope.md @@ -305,6 +305,107 @@ Nothing else moved: 190 tests pass and `calendarium/tests/data/january.json` is untouched, since Jan 5 resolves through `ORDINARY` rather than the Nativity season. +## Step 3 held: Ch. 33's rank clause is not settled (2026-09-09) + +Enabling `apply_grants` changes **70 of 3652 days**, all loosenings, and all +exactly what Ch. 33 states: doxology rank and above takes fish on Monday, +Tuesday and Thursday, and wine and oil on Wednesday and Friday. Levels 5 and up +are unaffected because the data already grants them fish. + +It was measured against antiochian.org and **not committed**, for three reasons. + +**The measurement was of a half-applied change.** `apply_grants` reached the +Slavic `APOSTLES` and `NATIVITY` and the shared Greek Apostles season, but not +`NATIVITY_GREEK_EARLY` or `NATIVITY_GREEK_STRICT`, which are separate objects. +Greek would have had Ch. 33 ranks during one fast and not the other. + +**antiochian.org is the wrong yardstick for it.** Agreement moved 56/90 to +60/90, which looked like weak support -- but each jurisdiction keeps its own +typikon, so Antiochian practice departing from the rule OCA quotes is not +evidence against that rule. It is evidence they are different churches. Judging +a Slavic change by an Antiochian source was the error. + +**So it still wants a Slavic source.** holytrinityorthodox.com publishes a +dietary line per day; four or five doxology-rank days in the Apostles' or +Nativity fast falling on a Monday, Tuesday or Thursday would settle it. + +The rule stays written and switched off in `_CH33_GRANTS`, with its citation. + +## What the Antiochian typikon actually says (2026-09-09) + +An earlier pass concluded the Antiochian typikon "contains no rank-based fasting +rules". **That was wrong, and the miss was a search failure**: the grep looked +for rank words near food words, and the relevant section names neither. It is in +the table of contents -- + + Chapter X General Directions + Wednesdays and Fridays when exceptions to the fast are permitted…570 + +and reads, verbatim: + +> Wednesdays and Fridays when meat is permitted. Between the feast of the +> Nativity of Christ and the feast of Epiphany, except for the Forefeast of +> Epiphany. Between the Sunday of the Pharisee and the Publican and the Sunday +> of the Prodigal Son. During Bright Week. During the week of Pentecost. +> +> On Wednesday and Friday during Cheesefare Week dairy products are permitted. +> On Wednesdays and Fridays between Thomas Sunday and Pentecost, fish is +> permitted.[343] Fish is permitted on Wednesday or Friday if it is a feast of +> the Lord even during fasting seasons, except for Holy Week. Such feasts are: +> the Annunciation, Palm Sunday, and the Transfiguration. If a feast of the +> Theotokos or one of the 12 Apostles falls on Wednesday or Friday. During the +> days following a feast of the Lord or the Theotokos until its leavetaking +> except during Great Lent and the Fast of the Theotokos. + +Footnote 343: "The Holy Synod of Antioch has decreed that there will be no +fasting on Wednesday and Friday, not only during Bright week, but during the +entire Paschal season until the Feast of the Ascension." + +**This is a categorical rule, not a rank one.** It keys on *what kind* of feast +-- of the Lord, of the Theotokos, of the Twelve Apostles, or an afterfeast -- +where Ch. 33 keys on typikon rank. The two jurisdictions do not merely differ in +their dates; they differ in what the exception is *about*. That is worth +knowing before any further rank-threshold work. + +### It resurrects the Paschal-season candidate, for Greek only + +A Paschal-season fish allowance was raised earlier and withdrawn, on the grounds +that OCA's guidelines give no such allowance. For the **Greek** tradition the +Antiochian typikon is explicit, and its own calendar bears it out: + +| Wed/Fri, Thomas Sunday to Pentecost | | +|---|---| +| Antiochian typikon | fish, and per the Synod footnote no fast at all | +| antiochian.org | "no fast" on 19 of 28 harvested days | +| **this app** | wine and oil on 20 of 28 -- agreeing on **3 of 28** | + +Withdrawing it was right for Slavic and wrong for Greek. + +## Does the GOA publish a typikon? Not reachable, but its rules are (2026-09-09) + +goarch.org is behind Cloudflare and returns 403 to any fetch. The Archdiocese's +rules are published in its annual Yearbook, and three GOA parishes reproduce +them with attribution; all three agree: + +> "Nativity Lent (November 15-December 24, although fish, wine and olive oil are +> permitted, except on Wednesdays and Fridays, **until December 17**)." + +**This app starts the Greek Nativity fast's stricter period on December 13** +(`pdist >= nativity - 12`). That date came from two *Antiochian* parish sources +when the Greek fasting work was done (`docs/greek-fasting.md`), before the +decision that `greek` means GOA. GOA's own rule is five days later: + +| 2026 | ours | GOA | +|---|---|---| +| Dec 13-17 | strict period | still fish, wine and oil | +| Dec 18 onward | strict period | strict period | + +So five days a year are stricter than GOA prescribes. **Not changed** -- the +sources are three parish reproductions of the Yearbook rather than the Yearbook +itself, and `docs/greek-fasting.md` records real Antiochian sources for the +current date. What it needs is a decision about which jurisdiction the `greek` +tradition follows for fasting, given that it follows GOA for readings. + ### Still to do - **Turn on `Season.apply_grants`.** The Ch. 33 rank clause is written in From 008d9bf051d27d51bbe91b50060ca70e57f82228 Mon Sep 17 00:00:00 2001 From: Brian Glass Date: Wed, 9 Sep 2026 10:10:44 -0400 Subject: [PATCH 08/20] Follow GOA for the Greek Nativity fast: strict from Dec 18, not Dec 13 The Greek stricter period began at nativity-12, Dec 13. That date came from two Antiochian parish sources when the Greek fasting work was done, and predates the decision that `greek` means GOA. The Archdiocese publishes its own rule in the annual Yearbook: "Nativity Lent (November 15-December 24, although fish, wine and olive oil are permitted, except on Wednesdays and Fridays, until December 17)." Three GOA parishes reproduce it with attribution and all agree. goarch.org itself is behind Cloudflare and returns 403 to any fetch, so the Yearbook was not read first-hand, which is why the citation names the parishes. The boundary moves to nativity-7. Eighteen days over five years change, all Greek, all Dec 13-17, all from wine and oil or strict to fish. Wednesdays and Fridays are untouched, being strict in both phases, which is the shape the rule predicts and a useful check that it landed correctly. Two tests in TestGreekFasting asserted the old boundary and are rewritten rather than deleted -- they were right about the behaviour they described and are now right about GOA's. Writing the second one turned up a detail worth keeping: a Monday cannot demonstrate the tightening, because Monday is strict in Slavic practice too ("On Monday, Wednesday and Friday, we eat neither oil nor wine", Typikon Ch. 33), so it takes a Tuesday to show the two traditions diverging. Antioch's fast-free Paschal season is not adopted. Brian's call: Antioch appears to be alone in keeping the whole Paschal period fast-free, so it is a nice-to-have for a possible Antiochian tradition later rather than something the `greek` tradition should inherit. The evidence stays recorded in docs/fasting-refactor-scope.md. 190 tests pass. Co-Authored-By: Claude Opus 5 Claude-Session: https://claude.ai/code/session_019nQRjJpPqW89xqzAf1vsEX --- calendarium/fasting.py | 17 ++++--- .../tests/data/fasting-characterization.txt | 36 ++++++------- calendarium/tests/test_liturgics.py | 51 ++++++++++++------- docs/greek-fasting.md | 20 ++++++-- 4 files changed, 78 insertions(+), 46 deletions(-) diff --git a/calendarium/fasting.py b/calendarium/fasting.py index adbd1063..0e82a383 100644 --- a/calendarium/fasting.py +++ b/calendarium/fasting.py @@ -128,17 +128,21 @@ def cap_for(self, weekday, feast_level): no_fish_before_nativity=True) # Greek practice differs only in the Nativity fast, and there it splits in two: -# for the first four weeks everything but Wednesday and Friday is a fish day, -# and from Dec 13 it tightens further than Slavic practice does -- Monday, +# for the first five weeks everything but Wednesday and Friday is a fish day, +# and from Dec 18 it tightens further than Slavic practice does -- Monday, # Tuesday and Thursday drop to full strictness rather than merely losing fish. -# See docs/greek-fasting.md. +# +# The Archdiocese's own rule sets the boundary: "Nativity Lent (November 15 - +# December 24, although fish, wine and olive oil are permitted, except on +# Wednesdays and Fridays, until December 17)", from the annual Yearbook of the +# Greek Orthodox Archdiocese of America. See docs/greek-fasting.md. NATIVITY_GREEK_EARLY = Season( - 'Nativity (Greek, to Dec 12)', + 'Nativity (Greek, to Dec 17)', floor={WED: D.Strict, FRI: D.Strict}, default_floor=D.FishWineOil, cap={WED: D.WineAndOil, FRI: D.WineAndOil}, default_cap=D.FishWineOil, cap_exempt_rank=4) NATIVITY_GREEK_STRICT = Season( - 'Nativity (Greek, from Dec 13)', + 'Nativity (Greek, from Dec 18)', floor={SAT: D.WineAndOil, SUN: D.WineAndOil}, default_floor=D.Strict, cap={SAT: D.WineAndOil, SUN: D.WineAndOil}, default_cap=D.WineAndOil, cap_exempt_rank=4) @@ -159,7 +163,8 @@ def slavic_season(day): def greek_season(day): if day.fast_level == FastLevels.NativityFast: - return (NATIVITY_GREEK_STRICT if day.pdist >= day.pyear.nativity - 12 + # Dec 18 is `nativity - 7`; see NATIVITY_GREEK_EARLY for the citation. + return (NATIVITY_GREEK_STRICT if day.pdist >= day.pyear.nativity - 7 else NATIVITY_GREEK_EARLY) return _BY_LEVEL.get(day.fast_level) diff --git a/calendarium/tests/data/fasting-characterization.txt b/calendarium/tests/data/fasting-characterization.txt index 844f1dd1..a82533e8 100644 --- a/calendarium/tests/data/fasting-characterization.txt +++ b/calendarium/tests/data/fasting-characterization.txt @@ -2170,10 +2170,10 @@ 2025-12-10 greek w3 feast0 fast5 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil 2025-12-11 greek w4 feast0 fast5 exc2 rows=0,0 -> meat,dairy,eggs 2025-12-12 greek w5 feast2 fast5 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil -2025-12-13 greek w6 feast0 fast5 exc1 rows=0,1 -> meat,fish,dairy,eggs -2025-12-14 greek w0 feast0 fast5 exc1 rows=0,0,0 -> meat,fish,dairy,eggs -2025-12-15 greek w1 feast2 fast5 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil -2025-12-16 greek w2 feast0 fast5 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2025-12-13 greek w6 feast0 fast5 exc2 rows=0,1 -> meat,dairy,eggs +2025-12-14 greek w0 feast0 fast5 exc2 rows=0,0,0 -> meat,dairy,eggs +2025-12-15 greek w1 feast2 fast5 exc2 rows=0,0 -> meat,dairy,eggs +2025-12-16 greek w2 feast0 fast5 exc2 rows=0,0 -> meat,dairy,eggs 2025-12-17 greek w3 feast2 fast5 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil 2025-12-18 greek w4 feast0 fast5 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil 2025-12-19 greek w5 feast0 fast5 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil @@ -2535,11 +2535,11 @@ 2026-12-10 greek w4 feast0 fast5 exc2 rows=0,0 -> meat,dairy,eggs 2026-12-11 greek w5 feast0 fast5 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil 2026-12-12 greek w6 feast2 fast5 exc2 rows=0,0 -> meat,dairy,eggs -2026-12-13 greek w0 feast0 fast5 exc1 rows=0,0,1 -> meat,fish,dairy,eggs -2026-12-14 greek w1 feast0 fast5 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil -2026-12-15 greek w2 feast2 fast5 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2026-12-13 greek w0 feast0 fast5 exc2 rows=0,0,1 -> meat,dairy,eggs +2026-12-14 greek w1 feast0 fast5 exc2 rows=0,0 -> meat,dairy,eggs +2026-12-15 greek w2 feast2 fast5 exc2 rows=0,0 -> meat,dairy,eggs 2026-12-16 greek w3 feast0 fast5 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil -2026-12-17 greek w4 feast2 fast5 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2026-12-17 greek w4 feast2 fast5 exc2 rows=0,0 -> meat,dairy,eggs 2026-12-18 greek w5 feast0 fast5 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil 2026-12-19 greek w6 feast0 fast5 exc1 rows=0,0,0 -> meat,fish,dairy,eggs 2026-12-20 greek w0 feast0 fast5 exc1 rows=0,0,0 -> meat,fish,dairy,eggs @@ -2900,10 +2900,10 @@ 2027-12-10 greek w5 feast0 fast5 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil 2027-12-11 greek w6 feast0 fast5 exc2 rows=0,0 -> meat,dairy,eggs 2027-12-12 greek w0 feast2 fast5 exc2 rows=0,0,0 -> meat,dairy,eggs -2027-12-13 greek w1 feast0 fast5 exc1 rows=0,1 -> meat,fish,dairy,eggs -2027-12-14 greek w2 feast0 fast5 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2027-12-13 greek w1 feast0 fast5 exc2 rows=0,1 -> meat,dairy,eggs +2027-12-14 greek w2 feast0 fast5 exc2 rows=0,0 -> meat,dairy,eggs 2027-12-15 greek w3 feast2 fast5 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil -2027-12-16 greek w4 feast0 fast5 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2027-12-16 greek w4 feast0 fast5 exc2 rows=0,0 -> meat,dairy,eggs 2027-12-17 greek w5 feast2 fast5 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil 2027-12-18 greek w6 feast0 fast5 exc1 rows=0,0,0 -> meat,fish,dairy,eggs 2027-12-19 greek w0 feast0 fast5 exc1 rows=0,0,0 -> meat,fish,dairy,eggs @@ -3267,10 +3267,10 @@ 2028-12-11 greek w1 feast0 fast5 exc2 rows=0,0 -> meat,dairy,eggs 2028-12-12 greek w2 feast2 fast5 exc2 rows=0,0 -> meat,dairy,eggs 2028-12-13 greek w3 feast0 fast5 exc1 rows=0,1 -> meat,fish,dairy,eggs -2028-12-14 greek w4 feast0 fast5 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2028-12-14 greek w4 feast0 fast5 exc2 rows=0,0 -> meat,dairy,eggs 2028-12-15 greek w5 feast2 fast5 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil -2028-12-16 greek w6 feast0 fast5 exc1 rows=0,0 -> meat,fish,dairy,eggs -2028-12-17 greek w0 feast2 fast5 exc1 rows=0,0,0 -> meat,fish,dairy,eggs +2028-12-16 greek w6 feast0 fast5 exc2 rows=0,0 -> meat,dairy,eggs +2028-12-17 greek w0 feast2 fast5 exc2 rows=0,0,0 -> meat,dairy,eggs 2028-12-18 greek w1 feast0 fast5 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil 2028-12-19 greek w2 feast0 fast5 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil 2028-12-20 greek w3 feast0 fast5 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil @@ -3631,11 +3631,11 @@ 2029-12-10 greek w1 feast0 fast5 exc2 rows=0,0 -> meat,dairy,eggs 2029-12-11 greek w2 feast0 fast5 exc2 rows=0,0 -> meat,dairy,eggs 2029-12-12 greek w3 feast2 fast5 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil -2029-12-13 greek w4 feast0 fast5 exc1 rows=0,1 -> meat,fish,dairy,eggs +2029-12-13 greek w4 feast0 fast5 exc2 rows=0,1 -> meat,dairy,eggs 2029-12-14 greek w5 feast0 fast5 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil -2029-12-15 greek w6 feast2 fast5 exc1 rows=0,0 -> meat,fish,dairy,eggs -2029-12-16 greek w0 feast0 fast5 exc1 rows=0,0,0 -> meat,fish,dairy,eggs -2029-12-17 greek w1 feast2 fast5 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2029-12-15 greek w6 feast2 fast5 exc2 rows=0,0 -> meat,dairy,eggs +2029-12-16 greek w0 feast0 fast5 exc2 rows=0,0,0 -> meat,dairy,eggs +2029-12-17 greek w1 feast2 fast5 exc2 rows=0,0 -> meat,dairy,eggs 2029-12-18 greek w2 feast0 fast5 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil 2029-12-19 greek w3 feast0 fast5 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil 2029-12-20 greek w4 feast0 fast5 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil diff --git a/calendarium/tests/test_liturgics.py b/calendarium/tests/test_liturgics.py index db46062a..6b3b75e7 100644 --- a/calendarium/tests/test_liturgics.py +++ b/calendarium/tests/test_liturgics.py @@ -377,12 +377,19 @@ async def test_nativity_fast_phase_one_monday_differs(self): self.assertEqual(slavic.fast_exception_desc, '') self.assertEqual(greek.fast_exception_desc, 'Fish, Wine and Oil are Allowed') - async def test_nativity_fast_phase_two_starts_a_week_earlier_for_greek(self): - """Dec 15, 2026 is an ordinary Tuesday. Slavic's stricter period - doesn't start until ~Dec 20, so it still gets the ordinary - Tuesday/Thursday wine-and-oil allowance; Greek's stricter period - starts Dec 13, a full week earlier, and drops Monday/Tuesday/ - Thursday to full strictness (not just losing fish).""" + async def test_nativity_fast_greek_first_phase_is_a_fish_day(self): + """Dec 15, 2026 is an ordinary Tuesday, inside Greek's first phase, + which runs through Dec 17: everything but Wednesday and Friday is a + fish day. Slavic gets only the ordinary Tuesday/Thursday + wine-and-oil allowance, its own stricter period not starting until + ~Dec 20. + + The boundary is the Archdiocese's: "fish, wine and olive oil are + permitted, except on Wednesdays and Fridays, until December 17" + (Yearbook of the Greek Orthodox Archdiocese of America). It was + Dec 13 here until 2026-09-09, taken from Antiochian parish sources + before `greek` was settled as meaning GOA -- see + docs/greek-fasting.md.""" slavic = liturgics.Day(2026, 12, 15, tradition=Tradition.Slavic) greek = liturgics.Day(2026, 12, 15, tradition=Tradition.Greek) @@ -390,20 +397,26 @@ async def test_nativity_fast_phase_two_starts_a_week_earlier_for_greek(self): await greek.ainitialize() self.assertEqual(slavic.fast_exception_desc, 'Wine and Oil are Allowed') - self.assertEqual(greek.fast_exception_desc, '') - - async def test_nativity_fast_phase_two_weekend_loses_fish_earlier_for_greek(self): - """Dec 13, 2026 is a Sunday -- the first day of Greek's stricter - period, but still well inside Slavic's ordinary-weekend-gets-fish - window (Slavic's stricter period doesn't start until ~Dec 20).""" - - slavic = liturgics.Day(2026, 12, 13, tradition=Tradition.Slavic) - greek = liturgics.Day(2026, 12, 13, tradition=Tradition.Greek) - await slavic.ainitialize() - await greek.ainitialize() + self.assertEqual(greek.fast_exception_desc, 'Fish, Wine and Oil are Allowed') - self.assertEqual(slavic.fast_exception_desc, 'Fish, Wine and Oil are Allowed') - self.assertEqual(greek.fast_exception_desc, 'Wine and Oil are Allowed') + async def test_nativity_fast_greek_second_phase_starts_december_18(self): + """Dec 17, 2026 is a Thursday and still a fish day for Greek; Dec 18 + is a Friday, and Wednesday and Friday are strict in both phases, so + so a Tuesday shows the tightening: Dec 22 drops Greek to full strictness + where Slavic keeps the Tuesday/Thursday wine-and-oil allowance. Monday + would not do -- it is strict in Slavic practice too ("On Monday, + Wednesday and Friday, we eat neither oil nor wine", Typikon Ch. 33).""" + + greek_before = liturgics.Day(2026, 12, 17, tradition=Tradition.Greek) + greek_after = liturgics.Day(2026, 12, 22, tradition=Tradition.Greek) + slavic_after = liturgics.Day(2026, 12, 22, tradition=Tradition.Slavic) + await greek_before.ainitialize() + await greek_after.ainitialize() + await slavic_after.ainitialize() + + self.assertEqual(greek_before.fast_exception_desc, 'Fish, Wine and Oil are Allowed') + self.assertEqual(greek_after.fast_exception_desc, '') + self.assertEqual(slavic_after.fast_exception_desc, 'Wine and Oil are Allowed') async def test_nativity_eve_strict_baseline_not_weakened_by_greek_stricter_period(self): """Regression test for a bug caught during implementation: Dec 24, diff --git a/docs/greek-fasting.md b/docs/greek-fasting.md index a590058d..23caf14e 100644 --- a/docs/greek-fasting.md +++ b/docs/greek-fasting.md @@ -45,9 +45,23 @@ the OCA-modeled pattern our code already implemented: **Phase 2, the "stricter period"** - Slavic: starts ~5 days out (`nativity-6` to `nativity-1`), only removes fish -- Tue/Thu keep their wine+oil allowance throughout. -- Greek: starts **Dec 13** (`nativity-12`), a full week earlier, and is - stricter -- wine+oil is restricted to Sat/Sun only, so Mon/Tue/Thu drop to - full strictness (same as Wed/Fri), not just losing fish. +- Greek: starts **Dec 18** (`nativity-7`) and is stricter -- wine+oil is + restricted to Sat/Sun only, so Mon/Tue/Thu drop to full strictness (same as + Wed/Fri), not just losing fish. + +**Corrected 2026-09-09: this said Dec 13 (`nativity-12`).** That date came from +the two Antiochian parish sources below, and predates the decision that `greek` +means GOA. The Archdiocese publishes its own rule in the annual Yearbook, and +three GOA parishes reproduce it with attribution, all agreeing: "Nativity Lent +(November 15-December 24, although fish, wine and olive oil are permitted, +except on Wednesdays and Fridays, **until December 17**)." goarch.org itself is +behind Cloudflare and returns 403 to any fetch, so the Yearbook text was not +read first-hand. + +Eighteen days over five years change, all Greek, all Dec 13-17, all from wine +and oil or strict to fish -- Wednesdays and Fridays are unaffected, being strict +in both phases. The Antiochian sources are kept below because they are correct +*for Antioch*; they are simply not what the `greek` tradition follows. One general Antiochian summary found early in the research contradicted this (grouping Monday with Wed/Fri, same as Slavic) -- judged to be an imprecise From baea2c249f73ac3bd0a279e6f995a626eeecec17 Mon Sep 17 00:00:00 2001 From: Brian Glass Date: Wed, 9 Sep 2026 10:53:16 -0400 Subject: [PATCH 09/20] Correct the Antiochian Paschal rule: it has no exceptions An earlier note claimed antiochian.org followed its own fast-free Paschal decree only about 79% of the time, which made it look like a rule too rough to state plainly. That was wrong, and the error was mine rather than theirs. The Paschal season was bucketed as Pascha to Pentecost, pdist 0 to 49. The decree ends at Ascension, pdist 39 -- "no fasting on Wednesday and Friday ... during the entire Paschal season until the Feast of the Ascension". The days that looked like contradictions were the Wednesdays and Fridays after Ascension, which the decree explicitly excludes. With the right window the rule is exact: 96 of 96 harvested days from Pascha through the Apodosis of Pascha are "no fast", every day of the week, not just Wednesday and Friday. Confirmed independently against Antioch's published 2026 Fasting Calendar, which Brian linked. It is a colour-coded PDF whose text layer holds only the date numbers, so it has to be read as an image: April is white from the 12th, Pascha, and May is white except the 22nd, 27th and 29th, which are red. Ascension 2026 is May 21, so those three are exactly the Wednesdays and Fridays following it, and the API agrees on the same three days. So the rule has two clean edges and no exceptions, which makes it far more tractable than the earlier note suggested -- Brian's original read of it was right. Documentation only. Co-Authored-By: Claude Opus 5 Claude-Session: https://claude.ai/code/session_019nQRjJpPqW89xqzAf1vsEX --- docs/fasting-refactor-scope.md | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/docs/fasting-refactor-scope.md b/docs/fasting-refactor-scope.md index 15cafcb0..5b690827 100644 --- a/docs/fasting-refactor-scope.md +++ b/docs/fasting-refactor-scope.md @@ -367,6 +367,30 @@ where Ch. 33 keys on typikon rank. The two jurisdictions do not merely differ in their dates; they differ in what the exception is *about*. That is worth knowing before any further rank-threshold work. +### The Antiochian Paschal rule, stated exactly (corrected 2026-09-09) + +The rule has two edges and no exceptions: + +> **From Pascha through the Apodosis of Pascha, no fast at all, on every day of +> the week. From the Feast of the Ascension, ordinary fasting resumes.** + +Verified two ways. Antioch's published *2026 Fasting Calendar* -- a colour-coded +PDF, so its text layer carries only the date numbers and it has to be read as an +image -- leaves April white from the 12th, Pascha, and May white except the +22nd, 27th and 29th, which are red. Ascension 2026 is May 21, so those three are +the Wednesdays and Fridays *after* it. Their API agrees on the same three days, +and across the whole harvest **96 of 96 days from Pascha to the Apodosis are +"no fast"**. + +An earlier note here claimed their own calendar only followed the decree about +79% of the time. **That was wrong**, and the error was in the analysis rather +than the data: the Paschal season was bucketed as Pascha to Pentecost, pdist 0 +to 49, when the decree ends at Ascension, pdist 39. The days that looked like +contradictions were the ones the decree explicitly excludes. + +The lesson generalises past this rule: `pdist 0..49` is Pascha to Pentecost and +is the wrong window for anything scoped to Ascension, which is pdist 39. + ### It resurrects the Paschal-season candidate, for Greek only A Paschal-season fish allowance was raised earlier and withdrawn, on the grounds From 98f4e99d21d132bacbed32c8d650c116ba33bebd Mon Sep 17 00:00:00 2001 From: Brian Glass Date: Wed, 9 Sep 2026 11:00:20 -0400 Subject: [PATCH 10/20] Correct the record: that typikon is the Great Church's, not Antioch's Brian was sceptical that Antioch and GOA diverge as much as the measurements here suggested. Checking the provenance of the typikon PDF shows why he was right, and corrects a framing both of us had been using. The book is not Antioch-specific. Its foreword identifies it as Rizkallah Arman's 1951 Arabic translation, checked against "the Typikon of the Great Church of Constantinople", and states that "The Orthodox Churches in the East now use the Typikon of the Great Church of Christ in Constantinople originally received from St. Sabbas with some changes". That is the Violakis typikon, which is what GOA follows; the same file is published as "The Book of the Typikon" at equip-orthodox.com under the identical filename. So: Chapter X's Wednesday/Friday exceptions are the Greek tradition's rules generally, GOA included, not an Antiochian peculiarity needing its own jurisdiction. This app implements none of them. The book marks its own local departures. Footnote 343 attributes the fast-free Paschal season to a decree of "the Holy Synod of Antioch" while the main text says only that fish is permitted, so the shared rule and Antioch's extension of it are distinguishable in the source. And Chapter X versus Ch. 33 is not two jurisdictions disagreeing, as an earlier draft here said. They are two sections of one book covering different fasts: Ch. 33 the Apostles' and Nativity fasts, Chapter X the ordinary Wednesdays and Fridays. The 14% divergence figure recorded earlier is this app against Antiochian practice, not GOA against Antioch. With a shared typikon, the more likely explanation for most of it is that our model is wrong rather than that the jurisdictions differ -- which is what Brian suspected. Also records that no GOA fasting data exists to check against: every goarch harvest in data/ is readings only, goarch.org returns 403 to every fetch, and its robots.txt names ClaudeBot with Disallow: / for the whole site. Documentation only. Co-Authored-By: Claude Opus 5 Claude-Session: https://claude.ai/code/session_019nQRjJpPqW89xqzAf1vsEX --- docs/fasting-refactor-scope.md | 42 ++++++++++++++++++++++++++++++---- 1 file changed, 37 insertions(+), 5 deletions(-) diff --git a/docs/fasting-refactor-scope.md b/docs/fasting-refactor-scope.md index 5b690827..792d1d74 100644 --- a/docs/fasting-refactor-scope.md +++ b/docs/fasting-refactor-scope.md @@ -331,7 +331,37 @@ Nativity fast falling on a Monday, Tuesday or Thursday would settle it. The rule stays written and switched off in `_CH33_GRANTS`, with its citation. -## What the Antiochian typikon actually says (2026-09-09) +## The "Antiochian typikon" is the Typikon of the Great Church (2026-09-09) + +**Correcting the framing used throughout the section below.** The PDF at +`~/Documents/Orthodox Studies/54-typikon-full.pdf` is not an Antioch-specific +book. Its own foreword identifies it as Rizkallah Arman's 1951 Arabic +translation, checked against "the Typikon of the Great Church of +Constantinople", and states plainly: "The Orthodox Churches in the East now use +the Typikon of the Great Church of Christ in Constantinople originally received +from St. Sabbas with some changes." + +That is the Violakis typikon -- **the same one the Greek Orthodox Archdiocese +follows**. The same file is published as "The Book of the Typikon" at +equip-orthodox.com. + +Three consequences, and they matter: + +- **Chapter X's Wednesday/Friday exceptions apply to the Greek tradition + generally, GOA included.** They are not an Antiochian peculiarity to be + modelled as a separate jurisdiction. This app implements none of them. +- **The book marks its own local departures.** Footnote 343 attributes the + fast-free Paschal season to a decree of "the Holy Synod of Antioch"; the main + text says only that fish is permitted on those days. So the typikon + distinguishes the shared rule from Antioch's extension of it, and we can read + which is which. +- **GOA and Antioch should not diverge much in principle**, sharing a typikon. + The 14% figure measured below is *this app against Antiochian practice*, not + GOA against Antioch, and much of it is more likely to be our model being + wrong than a jurisdictional difference. Brian's scepticism on this point was + correct. + +## What that typikon says about Wednesdays and Fridays (2026-09-09) An earlier pass concluded the Antiochian typikon "contains no rank-based fasting rules". **That was wrong, and the miss was a search failure**: the grep looked @@ -363,9 +393,11 @@ entire Paschal season until the Feast of the Ascension." **This is a categorical rule, not a rank one.** It keys on *what kind* of feast -- of the Lord, of the Theotokos, of the Twelve Apostles, or an afterfeast -- -where Ch. 33 keys on typikon rank. The two jurisdictions do not merely differ in -their dates; they differ in what the exception is *about*. That is worth -knowing before any further rank-threshold work. +where the Ch. 33 text OCA quotes keys on typikon rank. Both are in the same +book, addressing different fasts: Ch. 33 governs the Apostles' and Nativity +fasts, Chapter X the ordinary Wednesdays and Fridays of the year. They are not +rival jurisdictional readings, which is how an earlier draft of this section +described them. ### The Antiochian Paschal rule, stated exactly (corrected 2026-09-09) @@ -391,7 +423,7 @@ contradictions were the ones the decree explicitly excludes. The lesson generalises past this rule: `pdist 0..49` is Pascha to Pentecost and is the wrong window for anything scoped to Ascension, which is pdist 39. -### It resurrects the Paschal-season candidate, for Greek only +### The Paschal-season candidate, and who it applies to A Paschal-season fish allowance was raised earlier and withdrawn, on the grounds that OCA's guidelines give no such allowance. For the **Greek** tradition the From e7228328c06a8a32d2b8cd803b96ad6791583f28 Mon Sep 17 00:00:00 2001 From: Brian Glass Date: Wed, 9 Sep 2026 11:15:20 -0400 Subject: [PATCH 11/20] Allow fish on Greek Paschal Wednesdays and Fridays (Typikon Chapter X) Now that the typikon in hand is established as the Great Church's rather than Antioch's, its Chapter X applies to the Greek tradition generally. Measuring its clauses against five years shows the app already satisfies almost all of it. Counting only Wednesdays and Fridays that currently fall below fish and that a clause would lift: the Paschal clause accounts for 47 days over five years, the feast-of-the-Lord clause for one, and the feast-of-the-Theotokos clause for none. The last two need no work. The typikon names the three feasts of the Lord that can fall in a fasting season -- the Annunciation, Palm Sunday and the Transfiguration -- and all three already carry fast_exception 4. The single day the feast-of-the-Lord clause would have lifted is the Exaltation of the Cross, which the same typikon lists as a fast day in its own right, so lifting it would have been wrong. That leaves the Paschal clause: "On Wednesdays and Fridays between Thomas Sunday and Pentecost, fish is permitted." Implemented as PASCHAL_WEDFRI, Greek only. Forty-seven days over five years move from wine and oil to fish, and the characterisation confirms the scope exactly -- all Greek, all Wednesdays and Fridays, all within the window, no other transition. Not carried into Slavic practice: OCA's guidelines make Bright Week and Trinity Week fast-free and otherwise treat the Wednesdays and Fridays of the year as fast days, with no Paschal fish allowance. Antioch's further extension is not implemented either. Its Holy Synod decreed no fast at all on these days through Ascension, which footnote 343 marks as a local decree rather than as the shared rule. Still to check against goarch.org once the Chrome plugin is reattached, per the grid method in docs/greek-lectionary.md -- twelve requests buys a year, and the grid's innerText already carries the fasting lines. 190 tests pass. Co-Authored-By: Claude Opus 5 Claude-Session: https://claude.ai/code/session_019nQRjJpPqW89xqzAf1vsEX --- calendarium/fasting.py | 17 ++++ .../tests/data/fasting-characterization.txt | 94 +++++++++---------- docs/fasting-refactor-scope.md | 30 ++++++ 3 files changed, 94 insertions(+), 47 deletions(-) diff --git a/calendarium/fasting.py b/calendarium/fasting.py index 0e82a383..9b773c56 100644 --- a/calendarium/fasting.py +++ b/calendarium/fasting.py @@ -147,6 +147,20 @@ def cap_for(self, weekday, feast_level): cap={SAT: D.WineAndOil, SUN: D.WineAndOil}, default_cap=D.WineAndOil, cap_exempt_rank=4) +# Typikon of the Great Church, Chapter X, "Wednesdays and Fridays when +# exceptions to the fast are permitted": "On Wednesdays and Fridays between +# Thomas Sunday and Pentecost, fish is permitted." +# +# Greek only. OCA's guidelines give no such allowance -- they make Bright Week +# and Trinity Week fast-free and otherwise treat the Wednesdays and Fridays of +# the year as fast days -- so this is not carried into Slavic practice. +# +# Antioch goes further still, its Holy Synod having decreed no fast at all on +# these days through Ascension (footnote 343 to the same chapter). That is +# marked in the typikon as a local decree rather than the shared rule, so it is +# not implemented here; see docs/fasting-refactor-scope.md. +PASCHAL_WEDFRI = Season('Paschal Wed/Fri (Greek)', default_floor=D.FishWineOil) + _BY_LEVEL = { FastLevels.NoFast: NO_FAST, FastLevels.Fast: ORDINARY, @@ -162,6 +176,9 @@ def slavic_season(day): def greek_season(day): + if (day.weekday in (WED, FRI) and 7 <= day.pdist <= 49 + and day.fast_level == FastLevels.Fast): + return PASCHAL_WEDFRI if day.fast_level == FastLevels.NativityFast: # Dec 18 is `nativity - 7`; see NATIVITY_GREEK_EARLY for the citation. return (NATIVITY_GREEK_STRICT if day.pdist >= day.pyear.nativity - 7 diff --git a/calendarium/tests/data/fasting-characterization.txt b/calendarium/tests/data/fasting-characterization.txt index a82533e8..c687b007 100644 --- a/calendarium/tests/data/fasting-characterization.txt +++ b/calendarium/tests/data/fasting-characterization.txt @@ -1943,44 +1943,44 @@ 2025-04-27 greek w0 feast2 fast0 exc0 rows=0,0 -> - 2025-04-28 greek w1 feast0 fast0 exc0 rows=0,0 -> - 2025-04-29 greek w2 feast0 fast0 exc0 rows=0,0 -> - -2025-04-30 greek w3 feast4 fast1 exc1 rows=0,1 -> meat,fish,dairy,eggs +2025-04-30 greek w3 feast4 fast1 exc2 rows=0,1 -> meat,dairy,eggs 2025-05-01 greek w4 feast3 fast0 exc0 rows=0,0 -> - -2025-05-02 greek w5 feast0 fast1 exc1 rows=0,1 -> meat,fish,dairy,eggs +2025-05-02 greek w5 feast0 fast1 exc2 rows=0,1 -> meat,dairy,eggs 2025-05-03 greek w6 feast0 fast0 exc0 rows=0,0 -> - 2025-05-04 greek w0 feast0 fast0 exc0 rows=0,0 -> - 2025-05-05 greek w1 feast0 fast0 exc0 rows=0,0 -> - 2025-05-06 greek w2 feast0 fast0 exc0 rows=0,0 -> - 2025-05-07 greek w3 feast0 fast0 exc11 rows=1,11 -> - 2025-05-08 greek w4 feast5 fast0 exc2 rows=0,2 -> - -2025-05-09 greek w5 feast4 fast1 exc1 rows=0,1 -> meat,fish,dairy,eggs +2025-05-09 greek w5 feast4 fast1 exc2 rows=0,1 -> meat,dairy,eggs 2025-05-10 greek w6 feast4 fast0 exc0 rows=0,0 -> - 2025-05-11 greek w0 feast0 fast0 exc11 rows=0,11 -> - 2025-05-12 greek w1 feast0 fast0 exc0 rows=0,0 -> - 2025-05-13 greek w2 feast0 fast0 exc0 rows=0,0 -> - 2025-05-14 greek w3 feast2 fast1 exc2 rows=0,2 -> meat,dairy,eggs 2025-05-15 greek w4 feast3 fast0 exc0 rows=0,0 -> - -2025-05-16 greek w5 feast3 fast1 exc1 rows=0,1 -> meat,fish,dairy,eggs +2025-05-16 greek w5 feast3 fast1 exc2 rows=0,1 -> meat,dairy,eggs 2025-05-17 greek w6 feast0 fast0 exc0 rows=0,0 -> - 2025-05-18 greek w0 feast0 fast0 exc0 rows=0,0 -> - 2025-05-19 greek w1 feast4 fast0 exc0 rows=0,0 -> - 2025-05-20 greek w2 feast3 fast0 exc0 rows=0,0 -> - -2025-05-21 greek w3 feast4 fast1 exc1 rows=0,1 -> meat,fish,dairy,eggs +2025-05-21 greek w3 feast4 fast1 exc2 rows=0,1 -> meat,dairy,eggs 2025-05-22 greek w4 feast0 fast0 exc0 rows=0,0 -> - -2025-05-23 greek w5 feast3 fast1 exc1 rows=0,1 -> meat,fish,dairy,eggs +2025-05-23 greek w5 feast3 fast1 exc2 rows=0,1 -> meat,dairy,eggs 2025-05-24 greek w6 feast3 fast0 exc0 rows=0,0 -> - 2025-05-25 greek w0 feast4 fast0 exc0 rows=0,0 -> - 2025-05-26 greek w1 feast2 fast0 exc0 rows=0,0 -> - 2025-05-27 greek w2 feast3 fast0 exc0 rows=0,0 -> - 2025-05-28 greek w3 feast2 fast1 exc2 rows=0,2 -> meat,dairy,eggs 2025-05-29 greek w4 feast8 fast0 exc0 rows=0,0 -> - -2025-05-30 greek w5 feast0 fast1 exc1 rows=0,1 -> meat,fish,dairy,eggs +2025-05-30 greek w5 feast0 fast1 exc2 rows=0,1 -> meat,dairy,eggs 2025-05-31 greek w6 feast0 fast0 exc0 rows=0,0 -> - 2025-06-01 greek w0 feast0 fast0 exc0 rows=0,0 -> - 2025-06-02 greek w1 feast0 fast0 exc0 rows=0,0 -> - 2025-06-03 greek w2 feast0 fast0 exc0 rows=0,0 -> - -2025-06-04 greek w3 feast0 fast1 exc1 rows=0,1 -> meat,fish,dairy,eggs +2025-06-04 greek w3 feast0 fast1 exc2 rows=0,1 -> meat,dairy,eggs 2025-06-05 greek w4 feast0 fast0 exc0 rows=0,0 -> - -2025-06-06 greek w5 feast0 fast1 exc1 rows=0,1 -> meat,fish,dairy,eggs +2025-06-06 greek w5 feast0 fast1 exc2 rows=0,1 -> meat,dairy,eggs 2025-06-07 greek w6 feast0 fast0 exc0 rows=0,0 -> - 2025-06-08 greek w0 feast8 fast0 exc0 rows=0,0 -> - 2025-06-09 greek w1 feast3 fast0 exc11 rows=0,11 -> - @@ -2300,16 +2300,16 @@ 2026-04-19 greek w0 feast0 fast0 exc0 rows=0,0 -> - 2026-04-20 greek w1 feast0 fast0 exc0 rows=0,0 -> - 2026-04-21 greek w2 feast0 fast0 exc0 rows=0,0 -> - -2026-04-22 greek w3 feast0 fast1 exc1 rows=0,1 -> meat,fish,dairy,eggs +2026-04-22 greek w3 feast0 fast1 exc2 rows=0,1 -> meat,dairy,eggs 2026-04-23 greek w4 feast5 fast0 exc1 rows=0,1 -> - -2026-04-24 greek w5 feast0 fast1 exc1 rows=0,1 -> meat,fish,dairy,eggs +2026-04-24 greek w5 feast0 fast1 exc2 rows=0,1 -> meat,dairy,eggs 2026-04-25 greek w6 feast4 fast0 exc1 rows=0,1 -> - 2026-04-26 greek w0 feast3 fast0 exc0 rows=0,0 -> - 2026-04-27 greek w1 feast2 fast0 exc0 rows=0,0 -> - 2026-04-28 greek w2 feast0 fast0 exc0 rows=0,0 -> - -2026-04-29 greek w3 feast0 fast1 exc1 rows=0,1 -> meat,fish,dairy,eggs +2026-04-29 greek w3 feast0 fast1 exc2 rows=0,1 -> meat,dairy,eggs 2026-04-30 greek w4 feast4 fast0 exc0 rows=0,0 -> - -2026-05-01 greek w5 feast3 fast1 exc1 rows=0,1 -> meat,fish,dairy,eggs +2026-05-01 greek w5 feast3 fast1 exc2 rows=0,1 -> meat,dairy,eggs 2026-05-02 greek w6 feast0 fast0 exc0 rows=0,0 -> - 2026-05-03 greek w0 feast0 fast0 exc0 rows=0,0 -> - 2026-05-04 greek w1 feast0 fast0 exc0 rows=0,0 -> - @@ -2321,23 +2321,23 @@ 2026-05-10 greek w0 feast4 fast0 exc0 rows=0,0 -> - 2026-05-11 greek w1 feast0 fast0 exc11 rows=0,11 -> - 2026-05-12 greek w2 feast0 fast0 exc0 rows=0,0 -> - -2026-05-13 greek w3 feast0 fast1 exc1 rows=0,1 -> meat,fish,dairy,eggs +2026-05-13 greek w3 feast0 fast1 exc2 rows=0,1 -> meat,dairy,eggs 2026-05-14 greek w4 feast2 fast0 exc0 rows=0,0 -> - -2026-05-15 greek w5 feast3 fast1 exc1 rows=0,1 -> meat,fish,dairy,eggs +2026-05-15 greek w5 feast3 fast1 exc2 rows=0,1 -> meat,dairy,eggs 2026-05-16 greek w6 feast3 fast0 exc0 rows=0,0 -> - 2026-05-17 greek w0 feast0 fast0 exc0 rows=0,0 -> - 2026-05-18 greek w1 feast0 fast0 exc0 rows=0,0 -> - 2026-05-19 greek w2 feast4 fast0 exc0 rows=0,0 -> - 2026-05-20 greek w3 feast3 fast1 exc2 rows=0,2 -> meat,dairy,eggs 2026-05-21 greek w4 feast8 fast0 exc0 rows=0,0 -> - -2026-05-22 greek w5 feast0 fast1 exc1 rows=0,1 -> meat,fish,dairy,eggs +2026-05-22 greek w5 feast0 fast1 exc2 rows=0,1 -> meat,dairy,eggs 2026-05-23 greek w6 feast3 fast0 exc0 rows=0,0 -> - 2026-05-24 greek w0 feast3 fast0 exc0 rows=0,0 -> - 2026-05-25 greek w1 feast4 fast0 exc0 rows=0,0 -> - 2026-05-26 greek w2 feast2 fast0 exc0 rows=0,0 -> - -2026-05-27 greek w3 feast3 fast1 exc1 rows=0,1 -> meat,fish,dairy,eggs +2026-05-27 greek w3 feast3 fast1 exc2 rows=0,1 -> meat,dairy,eggs 2026-05-28 greek w4 feast2 fast0 exc0 rows=0,0 -> - -2026-05-29 greek w5 feast2 fast1 exc1 rows=0,1 -> meat,fish,dairy,eggs +2026-05-29 greek w5 feast2 fast1 exc2 rows=0,1 -> meat,dairy,eggs 2026-05-30 greek w6 feast0 fast0 exc0 rows=0,0 -> - 2026-05-31 greek w0 feast8 fast0 exc0 rows=0,0 -> - 2026-06-01 greek w1 feast0 fast0 exc11 rows=0,11 -> - @@ -2685,44 +2685,44 @@ 2027-05-09 greek w0 feast4 fast0 exc0 rows=0,0 -> - 2027-05-10 greek w1 feast4 fast0 exc0 rows=0,0 -> - 2027-05-11 greek w2 feast0 fast0 exc11 rows=0,11 -> - -2027-05-12 greek w3 feast0 fast1 exc1 rows=0,1 -> meat,fish,dairy,eggs +2027-05-12 greek w3 feast0 fast1 exc2 rows=0,1 -> meat,dairy,eggs 2027-05-13 greek w4 feast0 fast0 exc0 rows=0,0 -> - -2027-05-14 greek w5 feast2 fast1 exc1 rows=0,1 -> meat,fish,dairy,eggs +2027-05-14 greek w5 feast2 fast1 exc2 rows=0,1 -> meat,dairy,eggs 2027-05-15 greek w6 feast3 fast0 exc0 rows=0,0 -> - 2027-05-16 greek w0 feast3 fast0 exc0 rows=0,0 -> - 2027-05-17 greek w1 feast0 fast0 exc0 rows=0,0 -> - 2027-05-18 greek w2 feast0 fast0 exc0 rows=0,0 -> - -2027-05-19 greek w3 feast4 fast1 exc1 rows=0,1 -> meat,fish,dairy,eggs +2027-05-19 greek w3 feast4 fast1 exc2 rows=0,1 -> meat,dairy,eggs 2027-05-20 greek w4 feast3 fast0 exc0 rows=0,0 -> - -2027-05-21 greek w5 feast4 fast1 exc1 rows=0,1 -> meat,fish,dairy,eggs +2027-05-21 greek w5 feast4 fast1 exc2 rows=0,1 -> meat,dairy,eggs 2027-05-22 greek w6 feast0 fast0 exc0 rows=0,0 -> - 2027-05-23 greek w0 feast3 fast0 exc0 rows=0,0 -> - 2027-05-24 greek w1 feast3 fast0 exc0 rows=0,0 -> - 2027-05-25 greek w2 feast4 fast0 exc0 rows=0,0 -> - 2027-05-26 greek w3 feast2 fast1 exc2 rows=0,2 -> meat,dairy,eggs 2027-05-27 greek w4 feast3 fast0 exc0 rows=0,0 -> - -2027-05-28 greek w5 feast2 fast1 exc1 rows=0,1 -> meat,fish,dairy,eggs +2027-05-28 greek w5 feast2 fast1 exc2 rows=0,1 -> meat,dairy,eggs 2027-05-29 greek w6 feast2 fast0 exc0 rows=0,0 -> - 2027-05-30 greek w0 feast0 fast0 exc0 rows=0,0 -> - 2027-05-31 greek w1 feast0 fast0 exc0 rows=0,0 -> - 2027-06-01 greek w2 feast0 fast0 exc0 rows=0,0 -> - -2027-06-02 greek w3 feast0 fast1 exc1 rows=0,1 -> meat,fish,dairy,eggs +2027-06-02 greek w3 feast0 fast1 exc2 rows=0,1 -> meat,dairy,eggs 2027-06-03 greek w4 feast0 fast0 exc0 rows=0,0 -> - -2027-06-04 greek w5 feast0 fast1 exc1 rows=0,1 -> meat,fish,dairy,eggs +2027-06-04 greek w5 feast0 fast1 exc2 rows=0,1 -> meat,dairy,eggs 2027-06-05 greek w6 feast0 fast0 exc0 rows=0,0 -> - 2027-06-06 greek w0 feast0 fast0 exc0 rows=0,0 -> - 2027-06-07 greek w1 feast0 fast0 exc0 rows=0,0 -> - 2027-06-08 greek w2 feast2 fast0 exc0 rows=0,0 -> - 2027-06-09 greek w3 feast3 fast1 exc2 rows=0,2 -> meat,dairy,eggs 2027-06-10 greek w4 feast8 fast0 exc0 rows=0,0 -> - -2027-06-11 greek w5 feast4 fast1 exc1 rows=0,1 -> meat,fish,dairy,eggs +2027-06-11 greek w5 feast4 fast1 exc2 rows=0,1 -> meat,dairy,eggs 2027-06-12 greek w6 feast2 fast0 exc0 rows=0,0 -> - 2027-06-13 greek w0 feast0 fast0 exc0 rows=0,0 -> - 2027-06-14 greek w1 feast0 fast0 exc0 rows=0,0 -> - 2027-06-15 greek w2 feast4 fast0 exc0 rows=0,0 -> - -2027-06-16 greek w3 feast4 fast1 exc1 rows=0,1 -> meat,fish,dairy,eggs +2027-06-16 greek w3 feast4 fast1 exc2 rows=0,1 -> meat,dairy,eggs 2027-06-17 greek w4 feast0 fast0 exc0 rows=0,0 -> - -2027-06-18 greek w5 feast0 fast1 exc1 rows=0,1 -> meat,fish,dairy,eggs +2027-06-18 greek w5 feast0 fast1 exc2 rows=0,1 -> meat,dairy,eggs 2027-06-19 greek w6 feast4 fast0 exc0 rows=0,0 -> - 2027-06-20 greek w0 feast8 fast0 exc0 rows=0,0 -> - 2027-06-21 greek w1 feast0 fast0 exc11 rows=0,11 -> - @@ -3035,44 +3035,44 @@ 2028-04-23 greek w0 feast5 fast0 exc1 rows=0,1 -> - 2028-04-24 greek w1 feast0 fast0 exc0 rows=0,0 -> - 2028-04-25 greek w2 feast4 fast0 exc1 rows=0,1 -> - -2028-04-26 greek w3 feast3 fast1 exc1 rows=0,1 -> meat,fish,dairy,eggs +2028-04-26 greek w3 feast3 fast1 exc2 rows=0,1 -> meat,dairy,eggs 2028-04-27 greek w4 feast2 fast0 exc0 rows=0,0 -> - -2028-04-28 greek w5 feast0 fast1 exc1 rows=0,1 -> meat,fish,dairy,eggs +2028-04-28 greek w5 feast0 fast1 exc2 rows=0,1 -> meat,dairy,eggs 2028-04-29 greek w6 feast0 fast0 exc0 rows=0,0 -> - 2028-04-30 greek w0 feast4 fast0 exc0 rows=0,0 -> - 2028-05-01 greek w1 feast3 fast0 exc0 rows=0,0 -> - 2028-05-02 greek w2 feast0 fast0 exc0 rows=0,0 -> - -2028-05-03 greek w3 feast0 fast1 exc1 rows=0,1 -> meat,fish,dairy,eggs +2028-05-03 greek w3 feast0 fast1 exc2 rows=0,1 -> meat,dairy,eggs 2028-05-04 greek w4 feast0 fast0 exc0 rows=0,0 -> - -2028-05-05 greek w5 feast0 fast1 exc1 rows=0,1 -> meat,fish,dairy,eggs +2028-05-05 greek w5 feast0 fast1 exc2 rows=0,1 -> meat,dairy,eggs 2028-05-06 greek w6 feast0 fast0 exc0 rows=0,0 -> - 2028-05-07 greek w0 feast0 fast0 exc11 rows=0,11 -> - 2028-05-08 greek w1 feast5 fast0 exc2 rows=0,2 -> - 2028-05-09 greek w2 feast4 fast0 exc0 rows=0,0 -> - 2028-05-10 greek w3 feast4 fast1 exc2 rows=0,2 -> meat,dairy,eggs 2028-05-11 greek w4 feast0 fast0 exc11 rows=0,11 -> - -2028-05-12 greek w5 feast0 fast1 exc1 rows=0,1 -> meat,fish,dairy,eggs +2028-05-12 greek w5 feast0 fast1 exc2 rows=0,1 -> meat,dairy,eggs 2028-05-13 greek w6 feast0 fast0 exc0 rows=0,0 -> - 2028-05-14 greek w0 feast2 fast0 exc0 rows=0,0 -> - 2028-05-15 greek w1 feast3 fast0 exc0 rows=0,0 -> - 2028-05-16 greek w2 feast3 fast0 exc0 rows=0,0 -> - -2028-05-17 greek w3 feast0 fast1 exc1 rows=0,1 -> meat,fish,dairy,eggs +2028-05-17 greek w3 feast0 fast1 exc2 rows=0,1 -> meat,dairy,eggs 2028-05-18 greek w4 feast0 fast0 exc0 rows=0,0 -> - -2028-05-19 greek w5 feast4 fast1 exc1 rows=0,1 -> meat,fish,dairy,eggs +2028-05-19 greek w5 feast4 fast1 exc2 rows=0,1 -> meat,dairy,eggs 2028-05-20 greek w6 feast3 fast0 exc0 rows=0,0 -> - 2028-05-21 greek w0 feast4 fast0 exc0 rows=0,0 -> - 2028-05-22 greek w1 feast0 fast0 exc0 rows=0,0 -> - 2028-05-23 greek w2 feast3 fast0 exc0 rows=0,0 -> - 2028-05-24 greek w3 feast3 fast1 exc2 rows=0,2 -> meat,dairy,eggs 2028-05-25 greek w4 feast8 fast0 exc0 rows=0,0 -> - -2028-05-26 greek w5 feast2 fast1 exc1 rows=0,1 -> meat,fish,dairy,eggs +2028-05-26 greek w5 feast2 fast1 exc2 rows=0,1 -> meat,dairy,eggs 2028-05-27 greek w6 feast3 fast0 exc0 rows=0,0 -> - 2028-05-28 greek w0 feast2 fast0 exc0 rows=0,0 -> - 2028-05-29 greek w1 feast2 fast0 exc0 rows=0,0 -> - 2028-05-30 greek w2 feast0 fast0 exc0 rows=0,0 -> - -2028-05-31 greek w3 feast0 fast1 exc1 rows=0,1 -> meat,fish,dairy,eggs +2028-05-31 greek w3 feast0 fast1 exc2 rows=0,1 -> meat,dairy,eggs 2028-06-01 greek w4 feast0 fast0 exc0 rows=0,0 -> - -2028-06-02 greek w5 feast0 fast1 exc1 rows=0,1 -> meat,fish,dairy,eggs +2028-06-02 greek w5 feast0 fast1 exc2 rows=0,1 -> meat,dairy,eggs 2028-06-03 greek w6 feast0 fast0 exc0 rows=0,0 -> - 2028-06-04 greek w0 feast8 fast0 exc0 rows=0,0 -> - 2028-06-05 greek w1 feast0 fast0 exc11 rows=0,11 -> - @@ -3392,28 +3392,28 @@ 2029-04-15 greek w0 feast0 fast0 exc0 rows=0,0 -> - 2029-04-16 greek w1 feast0 fast0 exc0 rows=0,0 -> - 2029-04-17 greek w2 feast3 fast0 exc0 rows=0,0 -> - -2029-04-18 greek w3 feast0 fast1 exc1 rows=0,1 -> meat,fish,dairy,eggs +2029-04-18 greek w3 feast0 fast1 exc2 rows=0,1 -> meat,dairy,eggs 2029-04-19 greek w4 feast0 fast0 exc0 rows=0,0 -> - -2029-04-20 greek w5 feast0 fast1 exc1 rows=0,1 -> meat,fish,dairy,eggs +2029-04-20 greek w5 feast0 fast1 exc2 rows=0,1 -> meat,dairy,eggs 2029-04-21 greek w6 feast0 fast0 exc0 rows=0,0 -> - 2029-04-22 greek w0 feast0 fast0 exc0 rows=0,0 -> - 2029-04-23 greek w1 feast5 fast0 exc1 rows=0,1 -> - 2029-04-24 greek w2 feast0 fast0 exc0 rows=0,0 -> - -2029-04-25 greek w3 feast4 fast1 exc1 rows=1,1 -> meat,fish,dairy,eggs +2029-04-25 greek w3 feast4 fast1 exc2 rows=1,1 -> meat,dairy,eggs 2029-04-26 greek w4 feast3 fast0 exc0 rows=0,0 -> - -2029-04-27 greek w5 feast2 fast1 exc1 rows=0,1 -> meat,fish,dairy,eggs +2029-04-27 greek w5 feast2 fast1 exc2 rows=0,1 -> meat,dairy,eggs 2029-04-28 greek w6 feast0 fast0 exc0 rows=0,0 -> - 2029-04-29 greek w0 feast0 fast0 exc0 rows=0,0 -> - 2029-04-30 greek w1 feast4 fast0 exc0 rows=0,0 -> - 2029-05-01 greek w2 feast3 fast0 exc0 rows=0,0 -> - 2029-05-02 greek w3 feast0 fast1 exc2 rows=0,2 -> meat,dairy,eggs 2029-05-03 greek w4 feast0 fast0 exc0 rows=0,0 -> - -2029-05-04 greek w5 feast0 fast1 exc1 rows=0,1 -> meat,fish,dairy,eggs +2029-05-04 greek w5 feast0 fast1 exc2 rows=0,1 -> meat,dairy,eggs 2029-05-05 greek w6 feast0 fast0 exc0 rows=0,0 -> - 2029-05-06 greek w0 feast0 fast0 exc0 rows=0,0 -> - 2029-05-07 greek w1 feast0 fast0 exc11 rows=0,11 -> - 2029-05-08 greek w2 feast5 fast0 exc2 rows=0,2 -> - -2029-05-09 greek w3 feast4 fast1 exc1 rows=0,1 -> meat,fish,dairy,eggs +2029-05-09 greek w3 feast4 fast1 exc2 rows=0,1 -> meat,dairy,eggs 2029-05-10 greek w4 feast4 fast0 exc0 rows=0,0 -> - 2029-05-11 greek w5 feast0 fast0 exc11 rows=1,11 -> - 2029-05-12 greek w6 feast0 fast0 exc0 rows=0,0 -> - @@ -3422,14 +3422,14 @@ 2029-05-15 greek w2 feast3 fast0 exc0 rows=0,0 -> - 2029-05-16 greek w3 feast3 fast1 exc2 rows=0,2 -> meat,dairy,eggs 2029-05-17 greek w4 feast8 fast0 exc0 rows=0,0 -> - -2029-05-18 greek w5 feast0 fast1 exc1 rows=0,1 -> meat,fish,dairy,eggs +2029-05-18 greek w5 feast0 fast1 exc2 rows=0,1 -> meat,dairy,eggs 2029-05-19 greek w6 feast4 fast0 exc0 rows=0,0 -> - 2029-05-20 greek w0 feast3 fast0 exc0 rows=0,0 -> - 2029-05-21 greek w1 feast4 fast0 exc0 rows=0,0 -> - 2029-05-22 greek w2 feast0 fast0 exc0 rows=0,0 -> - -2029-05-23 greek w3 feast3 fast1 exc1 rows=0,1 -> meat,fish,dairy,eggs +2029-05-23 greek w3 feast3 fast1 exc2 rows=0,1 -> meat,dairy,eggs 2029-05-24 greek w4 feast3 fast0 exc0 rows=0,0 -> - -2029-05-25 greek w5 feast4 fast1 exc1 rows=0,1 -> meat,fish,dairy,eggs +2029-05-25 greek w5 feast4 fast1 exc2 rows=0,1 -> meat,dairy,eggs 2029-05-26 greek w6 feast2 fast0 exc0 rows=0,0 -> - 2029-05-27 greek w0 feast8 fast0 exc0 rows=0,0 -> - 2029-05-28 greek w1 feast2 fast0 exc11 rows=0,11 -> - diff --git a/docs/fasting-refactor-scope.md b/docs/fasting-refactor-scope.md index 792d1d74..a023d247 100644 --- a/docs/fasting-refactor-scope.md +++ b/docs/fasting-refactor-scope.md @@ -423,6 +423,36 @@ contradictions were the ones the decree explicitly excludes. The lesson generalises past this rule: `pdist 0..49` is Pascha to Pentecost and is the wrong window for anything scoped to Ascension, which is pdist 39. +### Implemented (2026-09-09): Chapter X is almost entirely satisfied already + +Measured clause by clause against five years, counting only Wednesdays and +Fridays that currently fall below fish and that a clause would lift: + +| clause | days it changes | +|---|---| +| **fish between Thomas Sunday and Pentecost** | **47 over 5 years, 9.4/yr** | +| fish on a feast of the Lord | 1 | +| fish on a feast of the Theotokos | 0 | + +The second and third are already satisfied by the data. The typikon names the +three feasts of the Lord that can fall in a fasting season -- the Annunciation, +Palm Sunday and the Transfiguration -- and all three already carry +`fast_exception = 4`, fish. The single day the "feast of the Lord" clause would +have lifted is the Exaltation of the Cross, which the same typikon lists as a +fast day in its own right, so lifting it would have been wrong. + +So only the Paschal clause needed implementing: `PASCHAL_WEDFRI` in +`calendarium/fasting.py`, Greek only. 47 days over five years move from wine and +oil to fish, all Wednesdays and Fridays, all inside the window. + +**Not carried into Slavic practice.** OCA's guidelines make Bright Week and +Trinity Week fast-free and otherwise treat the Wednesdays and Fridays of the +year as fast days, with no Paschal fish allowance. + +**Antioch's further extension is not implemented either.** Its Holy Synod +decreed no fast at all on these days through Ascension, which footnote 343 marks +as a local decree rather than the shared rule. + ### The Paschal-season candidate, and who it applies to A Paschal-season fish allowance was raised earlier and withdrawn, on the grounds From 9317a69a9cc5a18d826d9a72eb856e094e768af4 Mon Sep 17 00:00:00 2001 From: Brian Glass Date: Wed, 9 Sep 2026 11:41:41 -0400 Subject: [PATCH 12/20] Measure Chapter X's afterfeast clause; hold it, since Antioch does not apply it Clause 4 grants fish on Wednesdays and Fridays during the afterfeast of a feast of the Lord or the Theotokos, until its leavetaking, except during Great Lent and the Dormition fast. Taking the spans from each feast to its leavetaking, it would lift about ten days a year -- similar in size to the Paschal clause implemented in the previous commit -- and the rule's own exclusions behave correctly, the Transfiguration's afterfeast falling inside the Dormition fast and the Annunciation's inside Lent. It is not implemented, because antiochian.org does not apply it. On 56 afterfeast Wednesdays and Fridays outside Lent and Dormition their calendar gives strict on 43 and fish on 2. Strict is what this app already gives, so coding the clause would move us away from the only practice data available. That is the reverse of the Paschal clause, where Antioch goes further than the typikon rather than less far, and where our wine and oil was clearly too strict against both. Either the clause is monastic rather than pastoral, or it is read more narrowly than the plain text suggests. Held for the goarch.org check: if GOA gives fish on these days, implement it; if strict, no code is needed and the app is already correct. Documentation only; no code or data changed. Co-Authored-By: Claude Opus 5 Claude-Session: https://claude.ai/code/session_019nQRjJpPqW89xqzAf1vsEX --- docs/fasting-refactor-scope.md | 35 ++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) diff --git a/docs/fasting-refactor-scope.md b/docs/fasting-refactor-scope.md index a023d247..c9f08841 100644 --- a/docs/fasting-refactor-scope.md +++ b/docs/fasting-refactor-scope.md @@ -453,6 +453,41 @@ year as fast days, with no Paschal fish allowance. decreed no fast at all on these days through Ascension, which footnote 343 marks as a local decree rather than the shared rule. +### Clause 4, afterfeasts: measured and deliberately not implemented + +Chapter X's last clause reads "During the days following a feast of the Lord or +the Theotokos until its leavetaking except during Great Lent and the Fast of the +Theotokos." Taking the afterfeast spans from each feast to its leavetaking -- +Theophany Jan 7-14, Meeting Feb 3-9, Dormition Aug 16-23, Nativity of the +Theotokos Sep 9-12, Exaltation Sep 15-21, Entry Nov 22-25, plus Ascension and +Pentecost -- it would lift about **ten Wednesdays and Fridays a year** to fish, +a similar size to the Paschal clause. The rule's own exclusions behave +correctly: the Transfiguration's afterfeast falls inside the Dormition fast and +the Annunciation's inside Lent, and both drop out. + +**antiochian.org does not apply it.** On 56 afterfeast Wednesdays and Fridays +outside Lent and Dormition, their calendar gives **strict on 43, and fish on +2**: + +| afterfeast | antiochian.org | +|---|---| +| Theophany | strict 11, wine+oil 3, fish 2 | +| Meeting | strict 10, no fast 3, wine+oil 1 | +| Entry | strict 6, wine+oil 3 | +| Exaltation | strict 6 | +| Dormition | strict 5 | +| Nativity of the Theotokos | strict 5, wine+oil 1 | + +Strict is what this app already gives, so implementing the clause would move us +*away* from the only practice data available. That is the reverse of the Paschal +clause, where Antioch goes further than the typikon rather than less far, and +our wine and oil was clearly too strict. + +Either the clause is monastic rather than pastoral, or it is read more narrowly +than the plain text suggests. **Held for goarch.org**: if GOA gives fish on +afterfeast Wednesdays and Fridays, implement it; if strict, we are already +right and the clause needs no code. + ### The Paschal-season candidate, and who it applies to A Paschal-season fish allowance was raised earlier and withdrawn, on the grounds From d1a35d5d820e6d9904bafa64b0b9c56c33533d26 Mon Sep 17 00:00:00 2001 From: Brian Glass Date: Wed, 9 Sep 2026 12:23:56 -0400 Subject: [PATCH 13/20] Measure the Greek rules against goarch.org; revert two wrong changes The Chapter X work landed on the strength of the typikon text plus antiochian.org as a proxy. Checking it against GOA's own published calendar shows two changes made earlier the same day were wrong, and backs them out. Agreement goes from 239/276 (86.6%) to 257/276 (93.1%). The Paschal fish clause was wrong for GOA. Chapter X says "On Wednesdays and Fridays between Thomas Sunday and Pentecost, fish is permitted", and PASCHAL_WEDFRI implemented exactly that. GOA gives wine and oil; April 2026 labels Apr 22 and Apr 24, both inside the window, "Wine". So neither jurisdiction follows the plain text of the clause they share -- Antioch is more lenient than it, by their Synod's decree, and GOA less. The app is back to what it did before, which was right. Fish does appear on Mid-Pentecost and the Apodosis of Pascha, but those are feasts of the Lord, so that is Chapter X's feast-of-the-Lord clause rather than its Paschal one. The Nativity boundary was wrong twice: Dec 13 from Antiochian parish pages originally, then Dec 18 from a summary of the GOA Yearbook. It is Dec 12, nativity-13. December 2027 pins it exactly because it falls across a weekend -- Dec 11 is a Saturday and still a fish day, Dec 12 is a Sunday and only wine and oil, so nothing but the phase boundary separates them. The Yearbook line reads unambiguously and is reproduced by three GOA parishes, but the Archdiocese's own calendar does not match it. Ch. 33's rank clause is now testable against practice, and it does not hold. Enabling _CH33_GRANTS makes agreement worse, 93.1% to 92.8%, erring in both directions: GOA grants wine and oil on days our data ranks 0 or 2 (St Barbara, St Spyridon) and gives strict on days it ranks 3 and 4. Rank does not predict GOA's grants; whatever drives them is per-saint. apply_grants stays False and the remaining 19 differences are a data question rather than a rule waiting to be written. Clause 4, afterfeasts, is confirmed unimplementable for GOA as well as Antioch: Jan 9, Sep 11, Sep 16 and Sep 18 2026 are all strict-fast despite sitting inside afterfeasts. That settles what the earlier Antiochian-only measurement left open. Adds data/goarch_fasting.json and tools/fasting/goarch_audit.py, whose docstring records the harvest route. One correction worth flagging there: the fasting level is a CSS class on div.day, not page text -- an earlier note claiming the grid's innerText carries the fasting lines was true of the readings, not the fast. The two boundary tests in TestGreekFasting are rewritten a second time and now cite the calendar rather than prose about it. 190 tests pass. Characterisation moves 68 days, all Greek. Co-Authored-By: Claude Opus 5 Claude-Session: https://claude.ai/code/session_019nQRjJpPqW89xqzAf1vsEX --- calendarium/fasting.py | 40 ++---- .../tests/data/fasting-characterization.txt | 136 +++++++++--------- calendarium/tests/test_liturgics.py | 64 ++++----- data/goarch_fasting.json | 12 ++ docs/fasting-refactor-scope.md | 55 ++++++- docs/greek-fasting.md | 45 +++--- tools/fasting/goarch_audit.py | 113 +++++++++++++++ 7 files changed, 313 insertions(+), 152 deletions(-) create mode 100644 data/goarch_fasting.json create mode 100644 tools/fasting/goarch_audit.py diff --git a/calendarium/fasting.py b/calendarium/fasting.py index 9b773c56..3299741e 100644 --- a/calendarium/fasting.py +++ b/calendarium/fasting.py @@ -128,39 +128,26 @@ def cap_for(self, weekday, feast_level): no_fish_before_nativity=True) # Greek practice differs only in the Nativity fast, and there it splits in two: -# for the first five weeks everything but Wednesday and Friday is a fish day, -# and from Dec 18 it tightens further than Slavic practice does -- Monday, -# Tuesday and Thursday drop to full strictness rather than merely losing fish. +# through Dec 11 everything but Wednesday and Friday is a fish day, and from +# Dec 12 it tightens further than Slavic practice does -- fish goes entirely and +# Monday, Tuesday and Thursday drop to full strictness rather than merely +# losing fish. # -# The Archdiocese's own rule sets the boundary: "Nativity Lent (November 15 - -# December 24, although fish, wine and olive oil are permitted, except on -# Wednesdays and Fridays, until December 17)", from the annual Yearbook of the -# Greek Orthodox Archdiocese of America. See docs/greek-fasting.md. +# The boundary is measured from goarch.org's own published calendar rather than +# from a summary of it, and three Decembers pin it exactly: in 2027 Dec 11 is a +# Saturday and still a fish day while Dec 12 is a Sunday and only wine and oil. +# See docs/greek-fasting.md and data/goarch_fasting.json. NATIVITY_GREEK_EARLY = Season( - 'Nativity (Greek, to Dec 17)', + 'Nativity (Greek, to Dec 11)', floor={WED: D.Strict, FRI: D.Strict}, default_floor=D.FishWineOil, cap={WED: D.WineAndOil, FRI: D.WineAndOil}, default_cap=D.FishWineOil, cap_exempt_rank=4) NATIVITY_GREEK_STRICT = Season( - 'Nativity (Greek, from Dec 18)', + 'Nativity (Greek, from Dec 12)', floor={SAT: D.WineAndOil, SUN: D.WineAndOil}, default_floor=D.Strict, cap={SAT: D.WineAndOil, SUN: D.WineAndOil}, default_cap=D.WineAndOil, cap_exempt_rank=4) -# Typikon of the Great Church, Chapter X, "Wednesdays and Fridays when -# exceptions to the fast are permitted": "On Wednesdays and Fridays between -# Thomas Sunday and Pentecost, fish is permitted." -# -# Greek only. OCA's guidelines give no such allowance -- they make Bright Week -# and Trinity Week fast-free and otherwise treat the Wednesdays and Fridays of -# the year as fast days -- so this is not carried into Slavic practice. -# -# Antioch goes further still, its Holy Synod having decreed no fast at all on -# these days through Ascension (footnote 343 to the same chapter). That is -# marked in the typikon as a local decree rather than the shared rule, so it is -# not implemented here; see docs/fasting-refactor-scope.md. -PASCHAL_WEDFRI = Season('Paschal Wed/Fri (Greek)', default_floor=D.FishWineOil) - _BY_LEVEL = { FastLevels.NoFast: NO_FAST, FastLevels.Fast: ORDINARY, @@ -176,12 +163,9 @@ def slavic_season(day): def greek_season(day): - if (day.weekday in (WED, FRI) and 7 <= day.pdist <= 49 - and day.fast_level == FastLevels.Fast): - return PASCHAL_WEDFRI if day.fast_level == FastLevels.NativityFast: - # Dec 18 is `nativity - 7`; see NATIVITY_GREEK_EARLY for the citation. - return (NATIVITY_GREEK_STRICT if day.pdist >= day.pyear.nativity - 7 + # Dec 12 is `nativity - 13`; see NATIVITY_GREEK_EARLY for the citation. + return (NATIVITY_GREEK_STRICT if day.pdist >= day.pyear.nativity - 13 else NATIVITY_GREEK_EARLY) return _BY_LEVEL.get(day.fast_level) diff --git a/calendarium/tests/data/fasting-characterization.txt b/calendarium/tests/data/fasting-characterization.txt index c687b007..48a4c9a9 100644 --- a/calendarium/tests/data/fasting-characterization.txt +++ b/calendarium/tests/data/fasting-characterization.txt @@ -1943,44 +1943,44 @@ 2025-04-27 greek w0 feast2 fast0 exc0 rows=0,0 -> - 2025-04-28 greek w1 feast0 fast0 exc0 rows=0,0 -> - 2025-04-29 greek w2 feast0 fast0 exc0 rows=0,0 -> - -2025-04-30 greek w3 feast4 fast1 exc2 rows=0,1 -> meat,dairy,eggs +2025-04-30 greek w3 feast4 fast1 exc1 rows=0,1 -> meat,fish,dairy,eggs 2025-05-01 greek w4 feast3 fast0 exc0 rows=0,0 -> - -2025-05-02 greek w5 feast0 fast1 exc2 rows=0,1 -> meat,dairy,eggs +2025-05-02 greek w5 feast0 fast1 exc1 rows=0,1 -> meat,fish,dairy,eggs 2025-05-03 greek w6 feast0 fast0 exc0 rows=0,0 -> - 2025-05-04 greek w0 feast0 fast0 exc0 rows=0,0 -> - 2025-05-05 greek w1 feast0 fast0 exc0 rows=0,0 -> - 2025-05-06 greek w2 feast0 fast0 exc0 rows=0,0 -> - 2025-05-07 greek w3 feast0 fast0 exc11 rows=1,11 -> - 2025-05-08 greek w4 feast5 fast0 exc2 rows=0,2 -> - -2025-05-09 greek w5 feast4 fast1 exc2 rows=0,1 -> meat,dairy,eggs +2025-05-09 greek w5 feast4 fast1 exc1 rows=0,1 -> meat,fish,dairy,eggs 2025-05-10 greek w6 feast4 fast0 exc0 rows=0,0 -> - 2025-05-11 greek w0 feast0 fast0 exc11 rows=0,11 -> - 2025-05-12 greek w1 feast0 fast0 exc0 rows=0,0 -> - 2025-05-13 greek w2 feast0 fast0 exc0 rows=0,0 -> - 2025-05-14 greek w3 feast2 fast1 exc2 rows=0,2 -> meat,dairy,eggs 2025-05-15 greek w4 feast3 fast0 exc0 rows=0,0 -> - -2025-05-16 greek w5 feast3 fast1 exc2 rows=0,1 -> meat,dairy,eggs +2025-05-16 greek w5 feast3 fast1 exc1 rows=0,1 -> meat,fish,dairy,eggs 2025-05-17 greek w6 feast0 fast0 exc0 rows=0,0 -> - 2025-05-18 greek w0 feast0 fast0 exc0 rows=0,0 -> - 2025-05-19 greek w1 feast4 fast0 exc0 rows=0,0 -> - 2025-05-20 greek w2 feast3 fast0 exc0 rows=0,0 -> - -2025-05-21 greek w3 feast4 fast1 exc2 rows=0,1 -> meat,dairy,eggs +2025-05-21 greek w3 feast4 fast1 exc1 rows=0,1 -> meat,fish,dairy,eggs 2025-05-22 greek w4 feast0 fast0 exc0 rows=0,0 -> - -2025-05-23 greek w5 feast3 fast1 exc2 rows=0,1 -> meat,dairy,eggs +2025-05-23 greek w5 feast3 fast1 exc1 rows=0,1 -> meat,fish,dairy,eggs 2025-05-24 greek w6 feast3 fast0 exc0 rows=0,0 -> - 2025-05-25 greek w0 feast4 fast0 exc0 rows=0,0 -> - 2025-05-26 greek w1 feast2 fast0 exc0 rows=0,0 -> - 2025-05-27 greek w2 feast3 fast0 exc0 rows=0,0 -> - 2025-05-28 greek w3 feast2 fast1 exc2 rows=0,2 -> meat,dairy,eggs 2025-05-29 greek w4 feast8 fast0 exc0 rows=0,0 -> - -2025-05-30 greek w5 feast0 fast1 exc2 rows=0,1 -> meat,dairy,eggs +2025-05-30 greek w5 feast0 fast1 exc1 rows=0,1 -> meat,fish,dairy,eggs 2025-05-31 greek w6 feast0 fast0 exc0 rows=0,0 -> - 2025-06-01 greek w0 feast0 fast0 exc0 rows=0,0 -> - 2025-06-02 greek w1 feast0 fast0 exc0 rows=0,0 -> - 2025-06-03 greek w2 feast0 fast0 exc0 rows=0,0 -> - -2025-06-04 greek w3 feast0 fast1 exc2 rows=0,1 -> meat,dairy,eggs +2025-06-04 greek w3 feast0 fast1 exc1 rows=0,1 -> meat,fish,dairy,eggs 2025-06-05 greek w4 feast0 fast0 exc0 rows=0,0 -> - -2025-06-06 greek w5 feast0 fast1 exc2 rows=0,1 -> meat,dairy,eggs +2025-06-06 greek w5 feast0 fast1 exc1 rows=0,1 -> meat,fish,dairy,eggs 2025-06-07 greek w6 feast0 fast0 exc0 rows=0,0 -> - 2025-06-08 greek w0 feast8 fast0 exc0 rows=0,0 -> - 2025-06-09 greek w1 feast3 fast0 exc11 rows=0,11 -> - @@ -2170,10 +2170,10 @@ 2025-12-10 greek w3 feast0 fast5 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil 2025-12-11 greek w4 feast0 fast5 exc2 rows=0,0 -> meat,dairy,eggs 2025-12-12 greek w5 feast2 fast5 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil -2025-12-13 greek w6 feast0 fast5 exc2 rows=0,1 -> meat,dairy,eggs -2025-12-14 greek w0 feast0 fast5 exc2 rows=0,0,0 -> meat,dairy,eggs -2025-12-15 greek w1 feast2 fast5 exc2 rows=0,0 -> meat,dairy,eggs -2025-12-16 greek w2 feast0 fast5 exc2 rows=0,0 -> meat,dairy,eggs +2025-12-13 greek w6 feast0 fast5 exc1 rows=0,1 -> meat,fish,dairy,eggs +2025-12-14 greek w0 feast0 fast5 exc1 rows=0,0,0 -> meat,fish,dairy,eggs +2025-12-15 greek w1 feast2 fast5 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2025-12-16 greek w2 feast0 fast5 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil 2025-12-17 greek w3 feast2 fast5 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil 2025-12-18 greek w4 feast0 fast5 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil 2025-12-19 greek w5 feast0 fast5 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil @@ -2300,16 +2300,16 @@ 2026-04-19 greek w0 feast0 fast0 exc0 rows=0,0 -> - 2026-04-20 greek w1 feast0 fast0 exc0 rows=0,0 -> - 2026-04-21 greek w2 feast0 fast0 exc0 rows=0,0 -> - -2026-04-22 greek w3 feast0 fast1 exc2 rows=0,1 -> meat,dairy,eggs +2026-04-22 greek w3 feast0 fast1 exc1 rows=0,1 -> meat,fish,dairy,eggs 2026-04-23 greek w4 feast5 fast0 exc1 rows=0,1 -> - -2026-04-24 greek w5 feast0 fast1 exc2 rows=0,1 -> meat,dairy,eggs +2026-04-24 greek w5 feast0 fast1 exc1 rows=0,1 -> meat,fish,dairy,eggs 2026-04-25 greek w6 feast4 fast0 exc1 rows=0,1 -> - 2026-04-26 greek w0 feast3 fast0 exc0 rows=0,0 -> - 2026-04-27 greek w1 feast2 fast0 exc0 rows=0,0 -> - 2026-04-28 greek w2 feast0 fast0 exc0 rows=0,0 -> - -2026-04-29 greek w3 feast0 fast1 exc2 rows=0,1 -> meat,dairy,eggs +2026-04-29 greek w3 feast0 fast1 exc1 rows=0,1 -> meat,fish,dairy,eggs 2026-04-30 greek w4 feast4 fast0 exc0 rows=0,0 -> - -2026-05-01 greek w5 feast3 fast1 exc2 rows=0,1 -> meat,dairy,eggs +2026-05-01 greek w5 feast3 fast1 exc1 rows=0,1 -> meat,fish,dairy,eggs 2026-05-02 greek w6 feast0 fast0 exc0 rows=0,0 -> - 2026-05-03 greek w0 feast0 fast0 exc0 rows=0,0 -> - 2026-05-04 greek w1 feast0 fast0 exc0 rows=0,0 -> - @@ -2321,23 +2321,23 @@ 2026-05-10 greek w0 feast4 fast0 exc0 rows=0,0 -> - 2026-05-11 greek w1 feast0 fast0 exc11 rows=0,11 -> - 2026-05-12 greek w2 feast0 fast0 exc0 rows=0,0 -> - -2026-05-13 greek w3 feast0 fast1 exc2 rows=0,1 -> meat,dairy,eggs +2026-05-13 greek w3 feast0 fast1 exc1 rows=0,1 -> meat,fish,dairy,eggs 2026-05-14 greek w4 feast2 fast0 exc0 rows=0,0 -> - -2026-05-15 greek w5 feast3 fast1 exc2 rows=0,1 -> meat,dairy,eggs +2026-05-15 greek w5 feast3 fast1 exc1 rows=0,1 -> meat,fish,dairy,eggs 2026-05-16 greek w6 feast3 fast0 exc0 rows=0,0 -> - 2026-05-17 greek w0 feast0 fast0 exc0 rows=0,0 -> - 2026-05-18 greek w1 feast0 fast0 exc0 rows=0,0 -> - 2026-05-19 greek w2 feast4 fast0 exc0 rows=0,0 -> - 2026-05-20 greek w3 feast3 fast1 exc2 rows=0,2 -> meat,dairy,eggs 2026-05-21 greek w4 feast8 fast0 exc0 rows=0,0 -> - -2026-05-22 greek w5 feast0 fast1 exc2 rows=0,1 -> meat,dairy,eggs +2026-05-22 greek w5 feast0 fast1 exc1 rows=0,1 -> meat,fish,dairy,eggs 2026-05-23 greek w6 feast3 fast0 exc0 rows=0,0 -> - 2026-05-24 greek w0 feast3 fast0 exc0 rows=0,0 -> - 2026-05-25 greek w1 feast4 fast0 exc0 rows=0,0 -> - 2026-05-26 greek w2 feast2 fast0 exc0 rows=0,0 -> - -2026-05-27 greek w3 feast3 fast1 exc2 rows=0,1 -> meat,dairy,eggs +2026-05-27 greek w3 feast3 fast1 exc1 rows=0,1 -> meat,fish,dairy,eggs 2026-05-28 greek w4 feast2 fast0 exc0 rows=0,0 -> - -2026-05-29 greek w5 feast2 fast1 exc2 rows=0,1 -> meat,dairy,eggs +2026-05-29 greek w5 feast2 fast1 exc1 rows=0,1 -> meat,fish,dairy,eggs 2026-05-30 greek w6 feast0 fast0 exc0 rows=0,0 -> - 2026-05-31 greek w0 feast8 fast0 exc0 rows=0,0 -> - 2026-06-01 greek w1 feast0 fast0 exc11 rows=0,11 -> - @@ -2534,12 +2534,12 @@ 2026-12-09 greek w3 feast3 fast5 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil 2026-12-10 greek w4 feast0 fast5 exc2 rows=0,0 -> meat,dairy,eggs 2026-12-11 greek w5 feast0 fast5 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil -2026-12-12 greek w6 feast2 fast5 exc2 rows=0,0 -> meat,dairy,eggs -2026-12-13 greek w0 feast0 fast5 exc2 rows=0,0,1 -> meat,dairy,eggs -2026-12-14 greek w1 feast0 fast5 exc2 rows=0,0 -> meat,dairy,eggs -2026-12-15 greek w2 feast2 fast5 exc2 rows=0,0 -> meat,dairy,eggs +2026-12-12 greek w6 feast2 fast5 exc1 rows=0,0 -> meat,fish,dairy,eggs +2026-12-13 greek w0 feast0 fast5 exc1 rows=0,0,1 -> meat,fish,dairy,eggs +2026-12-14 greek w1 feast0 fast5 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2026-12-15 greek w2 feast2 fast5 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil 2026-12-16 greek w3 feast0 fast5 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil -2026-12-17 greek w4 feast2 fast5 exc2 rows=0,0 -> meat,dairy,eggs +2026-12-17 greek w4 feast2 fast5 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil 2026-12-18 greek w5 feast0 fast5 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil 2026-12-19 greek w6 feast0 fast5 exc1 rows=0,0,0 -> meat,fish,dairy,eggs 2026-12-20 greek w0 feast0 fast5 exc1 rows=0,0,0 -> meat,fish,dairy,eggs @@ -2685,44 +2685,44 @@ 2027-05-09 greek w0 feast4 fast0 exc0 rows=0,0 -> - 2027-05-10 greek w1 feast4 fast0 exc0 rows=0,0 -> - 2027-05-11 greek w2 feast0 fast0 exc11 rows=0,11 -> - -2027-05-12 greek w3 feast0 fast1 exc2 rows=0,1 -> meat,dairy,eggs +2027-05-12 greek w3 feast0 fast1 exc1 rows=0,1 -> meat,fish,dairy,eggs 2027-05-13 greek w4 feast0 fast0 exc0 rows=0,0 -> - -2027-05-14 greek w5 feast2 fast1 exc2 rows=0,1 -> meat,dairy,eggs +2027-05-14 greek w5 feast2 fast1 exc1 rows=0,1 -> meat,fish,dairy,eggs 2027-05-15 greek w6 feast3 fast0 exc0 rows=0,0 -> - 2027-05-16 greek w0 feast3 fast0 exc0 rows=0,0 -> - 2027-05-17 greek w1 feast0 fast0 exc0 rows=0,0 -> - 2027-05-18 greek w2 feast0 fast0 exc0 rows=0,0 -> - -2027-05-19 greek w3 feast4 fast1 exc2 rows=0,1 -> meat,dairy,eggs +2027-05-19 greek w3 feast4 fast1 exc1 rows=0,1 -> meat,fish,dairy,eggs 2027-05-20 greek w4 feast3 fast0 exc0 rows=0,0 -> - -2027-05-21 greek w5 feast4 fast1 exc2 rows=0,1 -> meat,dairy,eggs +2027-05-21 greek w5 feast4 fast1 exc1 rows=0,1 -> meat,fish,dairy,eggs 2027-05-22 greek w6 feast0 fast0 exc0 rows=0,0 -> - 2027-05-23 greek w0 feast3 fast0 exc0 rows=0,0 -> - 2027-05-24 greek w1 feast3 fast0 exc0 rows=0,0 -> - 2027-05-25 greek w2 feast4 fast0 exc0 rows=0,0 -> - 2027-05-26 greek w3 feast2 fast1 exc2 rows=0,2 -> meat,dairy,eggs 2027-05-27 greek w4 feast3 fast0 exc0 rows=0,0 -> - -2027-05-28 greek w5 feast2 fast1 exc2 rows=0,1 -> meat,dairy,eggs +2027-05-28 greek w5 feast2 fast1 exc1 rows=0,1 -> meat,fish,dairy,eggs 2027-05-29 greek w6 feast2 fast0 exc0 rows=0,0 -> - 2027-05-30 greek w0 feast0 fast0 exc0 rows=0,0 -> - 2027-05-31 greek w1 feast0 fast0 exc0 rows=0,0 -> - 2027-06-01 greek w2 feast0 fast0 exc0 rows=0,0 -> - -2027-06-02 greek w3 feast0 fast1 exc2 rows=0,1 -> meat,dairy,eggs +2027-06-02 greek w3 feast0 fast1 exc1 rows=0,1 -> meat,fish,dairy,eggs 2027-06-03 greek w4 feast0 fast0 exc0 rows=0,0 -> - -2027-06-04 greek w5 feast0 fast1 exc2 rows=0,1 -> meat,dairy,eggs +2027-06-04 greek w5 feast0 fast1 exc1 rows=0,1 -> meat,fish,dairy,eggs 2027-06-05 greek w6 feast0 fast0 exc0 rows=0,0 -> - 2027-06-06 greek w0 feast0 fast0 exc0 rows=0,0 -> - 2027-06-07 greek w1 feast0 fast0 exc0 rows=0,0 -> - 2027-06-08 greek w2 feast2 fast0 exc0 rows=0,0 -> - 2027-06-09 greek w3 feast3 fast1 exc2 rows=0,2 -> meat,dairy,eggs 2027-06-10 greek w4 feast8 fast0 exc0 rows=0,0 -> - -2027-06-11 greek w5 feast4 fast1 exc2 rows=0,1 -> meat,dairy,eggs +2027-06-11 greek w5 feast4 fast1 exc1 rows=0,1 -> meat,fish,dairy,eggs 2027-06-12 greek w6 feast2 fast0 exc0 rows=0,0 -> - 2027-06-13 greek w0 feast0 fast0 exc0 rows=0,0 -> - 2027-06-14 greek w1 feast0 fast0 exc0 rows=0,0 -> - 2027-06-15 greek w2 feast4 fast0 exc0 rows=0,0 -> - -2027-06-16 greek w3 feast4 fast1 exc2 rows=0,1 -> meat,dairy,eggs +2027-06-16 greek w3 feast4 fast1 exc1 rows=0,1 -> meat,fish,dairy,eggs 2027-06-17 greek w4 feast0 fast0 exc0 rows=0,0 -> - -2027-06-18 greek w5 feast0 fast1 exc2 rows=0,1 -> meat,dairy,eggs +2027-06-18 greek w5 feast0 fast1 exc1 rows=0,1 -> meat,fish,dairy,eggs 2027-06-19 greek w6 feast4 fast0 exc0 rows=0,0 -> - 2027-06-20 greek w0 feast8 fast0 exc0 rows=0,0 -> - 2027-06-21 greek w1 feast0 fast0 exc11 rows=0,11 -> - @@ -2899,11 +2899,11 @@ 2027-12-09 greek w4 feast3 fast5 exc2 rows=0,0 -> meat,dairy,eggs 2027-12-10 greek w5 feast0 fast5 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil 2027-12-11 greek w6 feast0 fast5 exc2 rows=0,0 -> meat,dairy,eggs -2027-12-12 greek w0 feast2 fast5 exc2 rows=0,0,0 -> meat,dairy,eggs -2027-12-13 greek w1 feast0 fast5 exc2 rows=0,1 -> meat,dairy,eggs -2027-12-14 greek w2 feast0 fast5 exc2 rows=0,0 -> meat,dairy,eggs +2027-12-12 greek w0 feast2 fast5 exc1 rows=0,0,0 -> meat,fish,dairy,eggs +2027-12-13 greek w1 feast0 fast5 exc1 rows=0,1 -> meat,fish,dairy,eggs +2027-12-14 greek w2 feast0 fast5 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil 2027-12-15 greek w3 feast2 fast5 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil -2027-12-16 greek w4 feast0 fast5 exc2 rows=0,0 -> meat,dairy,eggs +2027-12-16 greek w4 feast0 fast5 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil 2027-12-17 greek w5 feast2 fast5 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil 2027-12-18 greek w6 feast0 fast5 exc1 rows=0,0,0 -> meat,fish,dairy,eggs 2027-12-19 greek w0 feast0 fast5 exc1 rows=0,0,0 -> meat,fish,dairy,eggs @@ -3035,44 +3035,44 @@ 2028-04-23 greek w0 feast5 fast0 exc1 rows=0,1 -> - 2028-04-24 greek w1 feast0 fast0 exc0 rows=0,0 -> - 2028-04-25 greek w2 feast4 fast0 exc1 rows=0,1 -> - -2028-04-26 greek w3 feast3 fast1 exc2 rows=0,1 -> meat,dairy,eggs +2028-04-26 greek w3 feast3 fast1 exc1 rows=0,1 -> meat,fish,dairy,eggs 2028-04-27 greek w4 feast2 fast0 exc0 rows=0,0 -> - -2028-04-28 greek w5 feast0 fast1 exc2 rows=0,1 -> meat,dairy,eggs +2028-04-28 greek w5 feast0 fast1 exc1 rows=0,1 -> meat,fish,dairy,eggs 2028-04-29 greek w6 feast0 fast0 exc0 rows=0,0 -> - 2028-04-30 greek w0 feast4 fast0 exc0 rows=0,0 -> - 2028-05-01 greek w1 feast3 fast0 exc0 rows=0,0 -> - 2028-05-02 greek w2 feast0 fast0 exc0 rows=0,0 -> - -2028-05-03 greek w3 feast0 fast1 exc2 rows=0,1 -> meat,dairy,eggs +2028-05-03 greek w3 feast0 fast1 exc1 rows=0,1 -> meat,fish,dairy,eggs 2028-05-04 greek w4 feast0 fast0 exc0 rows=0,0 -> - -2028-05-05 greek w5 feast0 fast1 exc2 rows=0,1 -> meat,dairy,eggs +2028-05-05 greek w5 feast0 fast1 exc1 rows=0,1 -> meat,fish,dairy,eggs 2028-05-06 greek w6 feast0 fast0 exc0 rows=0,0 -> - 2028-05-07 greek w0 feast0 fast0 exc11 rows=0,11 -> - 2028-05-08 greek w1 feast5 fast0 exc2 rows=0,2 -> - 2028-05-09 greek w2 feast4 fast0 exc0 rows=0,0 -> - 2028-05-10 greek w3 feast4 fast1 exc2 rows=0,2 -> meat,dairy,eggs 2028-05-11 greek w4 feast0 fast0 exc11 rows=0,11 -> - -2028-05-12 greek w5 feast0 fast1 exc2 rows=0,1 -> meat,dairy,eggs +2028-05-12 greek w5 feast0 fast1 exc1 rows=0,1 -> meat,fish,dairy,eggs 2028-05-13 greek w6 feast0 fast0 exc0 rows=0,0 -> - 2028-05-14 greek w0 feast2 fast0 exc0 rows=0,0 -> - 2028-05-15 greek w1 feast3 fast0 exc0 rows=0,0 -> - 2028-05-16 greek w2 feast3 fast0 exc0 rows=0,0 -> - -2028-05-17 greek w3 feast0 fast1 exc2 rows=0,1 -> meat,dairy,eggs +2028-05-17 greek w3 feast0 fast1 exc1 rows=0,1 -> meat,fish,dairy,eggs 2028-05-18 greek w4 feast0 fast0 exc0 rows=0,0 -> - -2028-05-19 greek w5 feast4 fast1 exc2 rows=0,1 -> meat,dairy,eggs +2028-05-19 greek w5 feast4 fast1 exc1 rows=0,1 -> meat,fish,dairy,eggs 2028-05-20 greek w6 feast3 fast0 exc0 rows=0,0 -> - 2028-05-21 greek w0 feast4 fast0 exc0 rows=0,0 -> - 2028-05-22 greek w1 feast0 fast0 exc0 rows=0,0 -> - 2028-05-23 greek w2 feast3 fast0 exc0 rows=0,0 -> - 2028-05-24 greek w3 feast3 fast1 exc2 rows=0,2 -> meat,dairy,eggs 2028-05-25 greek w4 feast8 fast0 exc0 rows=0,0 -> - -2028-05-26 greek w5 feast2 fast1 exc2 rows=0,1 -> meat,dairy,eggs +2028-05-26 greek w5 feast2 fast1 exc1 rows=0,1 -> meat,fish,dairy,eggs 2028-05-27 greek w6 feast3 fast0 exc0 rows=0,0 -> - 2028-05-28 greek w0 feast2 fast0 exc0 rows=0,0 -> - 2028-05-29 greek w1 feast2 fast0 exc0 rows=0,0 -> - 2028-05-30 greek w2 feast0 fast0 exc0 rows=0,0 -> - -2028-05-31 greek w3 feast0 fast1 exc2 rows=0,1 -> meat,dairy,eggs +2028-05-31 greek w3 feast0 fast1 exc1 rows=0,1 -> meat,fish,dairy,eggs 2028-06-01 greek w4 feast0 fast0 exc0 rows=0,0 -> - -2028-06-02 greek w5 feast0 fast1 exc2 rows=0,1 -> meat,dairy,eggs +2028-06-02 greek w5 feast0 fast1 exc1 rows=0,1 -> meat,fish,dairy,eggs 2028-06-03 greek w6 feast0 fast0 exc0 rows=0,0 -> - 2028-06-04 greek w0 feast8 fast0 exc0 rows=0,0 -> - 2028-06-05 greek w1 feast0 fast0 exc11 rows=0,11 -> - @@ -3265,12 +3265,12 @@ 2028-12-09 greek w6 feast3 fast5 exc2 rows=0,0 -> meat,dairy,eggs 2028-12-10 greek w0 feast0 fast5 exc2 rows=0,0 -> meat,dairy,eggs 2028-12-11 greek w1 feast0 fast5 exc2 rows=0,0 -> meat,dairy,eggs -2028-12-12 greek w2 feast2 fast5 exc2 rows=0,0 -> meat,dairy,eggs +2028-12-12 greek w2 feast2 fast5 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil 2028-12-13 greek w3 feast0 fast5 exc1 rows=0,1 -> meat,fish,dairy,eggs -2028-12-14 greek w4 feast0 fast5 exc2 rows=0,0 -> meat,dairy,eggs +2028-12-14 greek w4 feast0 fast5 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil 2028-12-15 greek w5 feast2 fast5 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil -2028-12-16 greek w6 feast0 fast5 exc2 rows=0,0 -> meat,dairy,eggs -2028-12-17 greek w0 feast2 fast5 exc2 rows=0,0,0 -> meat,dairy,eggs +2028-12-16 greek w6 feast0 fast5 exc1 rows=0,0 -> meat,fish,dairy,eggs +2028-12-17 greek w0 feast2 fast5 exc1 rows=0,0,0 -> meat,fish,dairy,eggs 2028-12-18 greek w1 feast0 fast5 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil 2028-12-19 greek w2 feast0 fast5 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil 2028-12-20 greek w3 feast0 fast5 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil @@ -3392,28 +3392,28 @@ 2029-04-15 greek w0 feast0 fast0 exc0 rows=0,0 -> - 2029-04-16 greek w1 feast0 fast0 exc0 rows=0,0 -> - 2029-04-17 greek w2 feast3 fast0 exc0 rows=0,0 -> - -2029-04-18 greek w3 feast0 fast1 exc2 rows=0,1 -> meat,dairy,eggs +2029-04-18 greek w3 feast0 fast1 exc1 rows=0,1 -> meat,fish,dairy,eggs 2029-04-19 greek w4 feast0 fast0 exc0 rows=0,0 -> - -2029-04-20 greek w5 feast0 fast1 exc2 rows=0,1 -> meat,dairy,eggs +2029-04-20 greek w5 feast0 fast1 exc1 rows=0,1 -> meat,fish,dairy,eggs 2029-04-21 greek w6 feast0 fast0 exc0 rows=0,0 -> - 2029-04-22 greek w0 feast0 fast0 exc0 rows=0,0 -> - 2029-04-23 greek w1 feast5 fast0 exc1 rows=0,1 -> - 2029-04-24 greek w2 feast0 fast0 exc0 rows=0,0 -> - -2029-04-25 greek w3 feast4 fast1 exc2 rows=1,1 -> meat,dairy,eggs +2029-04-25 greek w3 feast4 fast1 exc1 rows=1,1 -> meat,fish,dairy,eggs 2029-04-26 greek w4 feast3 fast0 exc0 rows=0,0 -> - -2029-04-27 greek w5 feast2 fast1 exc2 rows=0,1 -> meat,dairy,eggs +2029-04-27 greek w5 feast2 fast1 exc1 rows=0,1 -> meat,fish,dairy,eggs 2029-04-28 greek w6 feast0 fast0 exc0 rows=0,0 -> - 2029-04-29 greek w0 feast0 fast0 exc0 rows=0,0 -> - 2029-04-30 greek w1 feast4 fast0 exc0 rows=0,0 -> - 2029-05-01 greek w2 feast3 fast0 exc0 rows=0,0 -> - 2029-05-02 greek w3 feast0 fast1 exc2 rows=0,2 -> meat,dairy,eggs 2029-05-03 greek w4 feast0 fast0 exc0 rows=0,0 -> - -2029-05-04 greek w5 feast0 fast1 exc2 rows=0,1 -> meat,dairy,eggs +2029-05-04 greek w5 feast0 fast1 exc1 rows=0,1 -> meat,fish,dairy,eggs 2029-05-05 greek w6 feast0 fast0 exc0 rows=0,0 -> - 2029-05-06 greek w0 feast0 fast0 exc0 rows=0,0 -> - 2029-05-07 greek w1 feast0 fast0 exc11 rows=0,11 -> - 2029-05-08 greek w2 feast5 fast0 exc2 rows=0,2 -> - -2029-05-09 greek w3 feast4 fast1 exc2 rows=0,1 -> meat,dairy,eggs +2029-05-09 greek w3 feast4 fast1 exc1 rows=0,1 -> meat,fish,dairy,eggs 2029-05-10 greek w4 feast4 fast0 exc0 rows=0,0 -> - 2029-05-11 greek w5 feast0 fast0 exc11 rows=1,11 -> - 2029-05-12 greek w6 feast0 fast0 exc0 rows=0,0 -> - @@ -3422,14 +3422,14 @@ 2029-05-15 greek w2 feast3 fast0 exc0 rows=0,0 -> - 2029-05-16 greek w3 feast3 fast1 exc2 rows=0,2 -> meat,dairy,eggs 2029-05-17 greek w4 feast8 fast0 exc0 rows=0,0 -> - -2029-05-18 greek w5 feast0 fast1 exc2 rows=0,1 -> meat,dairy,eggs +2029-05-18 greek w5 feast0 fast1 exc1 rows=0,1 -> meat,fish,dairy,eggs 2029-05-19 greek w6 feast4 fast0 exc0 rows=0,0 -> - 2029-05-20 greek w0 feast3 fast0 exc0 rows=0,0 -> - 2029-05-21 greek w1 feast4 fast0 exc0 rows=0,0 -> - 2029-05-22 greek w2 feast0 fast0 exc0 rows=0,0 -> - -2029-05-23 greek w3 feast3 fast1 exc2 rows=0,1 -> meat,dairy,eggs +2029-05-23 greek w3 feast3 fast1 exc1 rows=0,1 -> meat,fish,dairy,eggs 2029-05-24 greek w4 feast3 fast0 exc0 rows=0,0 -> - -2029-05-25 greek w5 feast4 fast1 exc2 rows=0,1 -> meat,dairy,eggs +2029-05-25 greek w5 feast4 fast1 exc1 rows=0,1 -> meat,fish,dairy,eggs 2029-05-26 greek w6 feast2 fast0 exc0 rows=0,0 -> - 2029-05-27 greek w0 feast8 fast0 exc0 rows=0,0 -> - 2029-05-28 greek w1 feast2 fast0 exc11 rows=0,11 -> - @@ -3631,11 +3631,11 @@ 2029-12-10 greek w1 feast0 fast5 exc2 rows=0,0 -> meat,dairy,eggs 2029-12-11 greek w2 feast0 fast5 exc2 rows=0,0 -> meat,dairy,eggs 2029-12-12 greek w3 feast2 fast5 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil -2029-12-13 greek w4 feast0 fast5 exc2 rows=0,1 -> meat,dairy,eggs +2029-12-13 greek w4 feast0 fast5 exc1 rows=0,1 -> meat,fish,dairy,eggs 2029-12-14 greek w5 feast0 fast5 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil -2029-12-15 greek w6 feast2 fast5 exc2 rows=0,0 -> meat,dairy,eggs -2029-12-16 greek w0 feast0 fast5 exc2 rows=0,0,0 -> meat,dairy,eggs -2029-12-17 greek w1 feast2 fast5 exc2 rows=0,0 -> meat,dairy,eggs +2029-12-15 greek w6 feast2 fast5 exc1 rows=0,0 -> meat,fish,dairy,eggs +2029-12-16 greek w0 feast0 fast5 exc1 rows=0,0,0 -> meat,fish,dairy,eggs +2029-12-17 greek w1 feast2 fast5 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil 2029-12-18 greek w2 feast0 fast5 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil 2029-12-19 greek w3 feast0 fast5 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil 2029-12-20 greek w4 feast0 fast5 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil diff --git a/calendarium/tests/test_liturgics.py b/calendarium/tests/test_liturgics.py index 6b3b75e7..f6ca65ee 100644 --- a/calendarium/tests/test_liturgics.py +++ b/calendarium/tests/test_liturgics.py @@ -378,45 +378,43 @@ async def test_nativity_fast_phase_one_monday_differs(self): self.assertEqual(greek.fast_exception_desc, 'Fish, Wine and Oil are Allowed') async def test_nativity_fast_greek_first_phase_is_a_fish_day(self): - """Dec 15, 2026 is an ordinary Tuesday, inside Greek's first phase, - which runs through Dec 17: everything but Wednesday and Friday is a - fish day. Slavic gets only the ordinary Tuesday/Thursday - wine-and-oil allowance, its own stricter period not starting until - ~Dec 20. - - The boundary is the Archdiocese's: "fish, wine and olive oil are - permitted, except on Wednesdays and Fridays, until December 17" - (Yearbook of the Greek Orthodox Archdiocese of America). It was - Dec 13 here until 2026-09-09, taken from Antiochian parish sources - before `greek` was settled as meaning GOA -- see - docs/greek-fasting.md.""" - - slavic = liturgics.Day(2026, 12, 15, tradition=Tradition.Slavic) - greek = liturgics.Day(2026, 12, 15, tradition=Tradition.Greek) + """Dec 10, 2026 is an ordinary Thursday in Greek's first phase, which + runs through Dec 11: everything but Wednesday and Friday is a fish day. + Slavic gets only the ordinary Tuesday/Thursday wine-and-oil allowance, + its own stricter period not starting until ~Dec 20. + + goarch.org marks that date `fasting-fish`; see data/goarch_fasting.json. + """ + + slavic = liturgics.Day(2026, 12, 10, tradition=Tradition.Slavic) + greek = liturgics.Day(2026, 12, 10, tradition=Tradition.Greek) await slavic.ainitialize() await greek.ainitialize() self.assertEqual(slavic.fast_exception_desc, 'Wine and Oil are Allowed') self.assertEqual(greek.fast_exception_desc, 'Fish, Wine and Oil are Allowed') - async def test_nativity_fast_greek_second_phase_starts_december_18(self): - """Dec 17, 2026 is a Thursday and still a fish day for Greek; Dec 18 - is a Friday, and Wednesday and Friday are strict in both phases, so - so a Tuesday shows the tightening: Dec 22 drops Greek to full strictness - where Slavic keeps the Tuesday/Thursday wine-and-oil allowance. Monday - would not do -- it is strict in Slavic practice too ("On Monday, - Wednesday and Friday, we eat neither oil nor wine", Typikon Ch. 33).""" - - greek_before = liturgics.Day(2026, 12, 17, tradition=Tradition.Greek) - greek_after = liturgics.Day(2026, 12, 22, tradition=Tradition.Greek) - slavic_after = liturgics.Day(2026, 12, 22, tradition=Tradition.Slavic) - await greek_before.ainitialize() - await greek_after.ainitialize() - await slavic_after.ainitialize() - - self.assertEqual(greek_before.fast_exception_desc, 'Fish, Wine and Oil are Allowed') - self.assertEqual(greek_after.fast_exception_desc, '') - self.assertEqual(slavic_after.fast_exception_desc, 'Wine and Oil are Allowed') + async def test_nativity_fast_greek_second_phase_starts_december_12(self): + """December 2027 pins the boundary exactly, because it falls across a + weekend: Dec 11 is a Saturday and still a fish day, Dec 12 is a Sunday + and only wine and oil. Both are weekend days, so nothing but the phase + boundary separates them. + + Measured from goarch.org's own calendar (data/goarch_fasting.json), + which marks Dec 11 `fasting-fish` and Dec 12 `grapes`. This test has + twice been wrong about this date -- Dec 13 from Antiochian parish + sources, then Dec 18 from a summary of the GOA Yearbook -- so it is now + pinned to the Archdiocese's published calendar rather than to prose + about it. + """ + + before = liturgics.Day(2027, 12, 11, tradition=Tradition.Greek) + after = liturgics.Day(2027, 12, 12, tradition=Tradition.Greek) + await before.ainitialize() + await after.ainitialize() + + self.assertEqual(before.fast_exception_desc, 'Fish, Wine and Oil are Allowed') + self.assertEqual(after.fast_exception_desc, 'Wine and Oil are Allowed') async def test_nativity_eve_strict_baseline_not_weakened_by_greek_stricter_period(self): """Regression test for a bug caught during implementation: Dec 24, diff --git a/data/goarch_fasting.json b/data/goarch_fasting.json new file mode 100644 index 00000000..7245d613 --- /dev/null +++ b/data/goarch_fasting.json @@ -0,0 +1,12 @@ +{ + "_comment": "GOA daily fasting designations, harvested 2026-09-09 from goarch.org/chapel/calendar?month=M&year=Y&viewStyle=GridView&viewType=ViewReadings via a real browser (Cloudflare blocks scripted access; the user cleared the interstitial, then months were fetched same-origin). The grid encodes fasting as a CSS class on div.day, NOT in the page text: 'strict-fast'=S, 'grapes'=W (wine and oil), 'fasting-fish'=F, absent=N (fast free). Mapping confirmed against March 2026, where Lenten weekdays are S, weekends W, and the Annunciation is F. One character per day, index 0 = the 1st.", + "2025-12": "FFSFWFFFFSFWWWWSWSSWWSSSNNNNNNN", + "2026-01": "NNNNSNFNSNNNNWNWNNNNSNSNNNNSNWN", + "2026-03": "WSSSSSWWWSSSSWWSSSSSWWSSFWSWWSS", + "2026-04": "SSSWFSSSWSSNNNNNNNNNNWNWNNNNWN", + "2026-05": "WNNNNFNWNNNNWNWNNNNFNWNNNNWNWNN", + "2026-09": "NSNSNNNNWNSNNSNSNSNNNNWNSNNNNS", + "2026-11": "NNNSNSNNNNSNWNFFFSFSFFFFWFSFFF", + "2026-12": "FSFWFFFFWFSWWSWSWSWWSSSSNNNNNNN", + "2027-12": "SFSFFFFSFSFWSSWSWWWWSSSSNNNNNNN" +} diff --git a/docs/fasting-refactor-scope.md b/docs/fasting-refactor-scope.md index c9f08841..05812509 100644 --- a/docs/fasting-refactor-scope.md +++ b/docs/fasting-refactor-scope.md @@ -453,7 +453,60 @@ year as fast days, with no Paschal fish allowance. decreed no fast at all on these days through Ascension, which footnote 343 marks as a local decree rather than the shared rule. -### Clause 4, afterfeasts: measured and deliberately not implemented +## Measured against goarch.org (2026-09-09) -- two changes reverted + +The Chapter X work above was validated against GOA's own calendar, and **two +changes made earlier the same day were wrong and have been backed out.** The +data is in `data/goarch_fasting.json`, 276 days across nine months and three +Decembers; `tools/fasting/goarch_audit.py` reproduces the score. + +| | app vs goarch.org | +|---|---| +| as shipped that morning | 239/276 (86.6%) | +| **after the two reverts** | **257/276 (93.1%)** | + +**1. The Paschal fish clause was wrong for GOA.** Chapter X says "On Wednesdays +and Fridays between Thomas Sunday and Pentecost, fish is permitted", and +`PASCHAL_WEDFRI` implemented exactly that. GOA gives **wine and oil**. April +2026 is unambiguous -- the grid labels Apr 22 and Apr 24, both inside the +window, "Wine". So neither jurisdiction follows the plain text of the clause +they share: Antioch is *more* lenient than it (no fast at all, by their Synod's +decree), GOA *less* (wine and oil). The clause is removed; the app is back to +what it did before, which was right. + +Fish does appear on two Paschal Wednesdays in 2026 -- Mid-Pentecost (May 6) and +the Apodosis of Pascha (May 20). Both are feasts of the Lord, so what GOA +applies there is Chapter X's *feast-of-the-Lord* clause, not its Paschal one. + +**2. The Nativity boundary was wrong, twice.** See `docs/greek-fasting.md`; it +is Dec 12, `nativity - 13`, pinned by December 2027 falling across a weekend. + +### Ch. 33's rank clause: measured, and it does not hold for GOA + +The doxology/vigil grants in `_CH33_GRANTS` were finally testable against +practice. Enabling them makes agreement **worse, 93.1% -> 92.8%**, and the +errors run in both directions: + +- GOA grants wine and oil on days our data ranks 0 or 2 -- St Barbara (Dec 4, + level 0), St Spyridon (Dec 12, level 2) +- GOA gives strict on days our data ranks 3 and 4 -- Dec 3 2025, Jan 9 2026 + +**Rank does not predict GOA's grants.** Whatever drives them is per-saint, not +a threshold on `feast_level`. `apply_grants` stays `False`, and the remaining 19 +differences are a *data* question -- Greek `fast_exception` rows for specific +dates -- rather than a rule waiting to be written. That is the third time a +rank-threshold hypothesis has failed against practice data on this project. + +### Clause 4, afterfeasts: confirmed by GOA too + +**goarch.org does not apply it either**, which settles the question the earlier +Antiochian measurement left open. Inside the Theophany afterfeast, Jan 9 2026 is +`strict-fast`; inside the Exaltation's, Sep 16 and Sep 18 2026 are both +`strict-fast`; inside the Nativity of the Theotokos', Sep 11 is `strict-fast`. +Strict is what this app already gives. No code needed, and the section below +stands as originally written. + +### Clause 4, afterfeasts: measured against Antioch Chapter X's last clause reads "During the days following a feast of the Lord or the Theotokos until its leavetaking except during Great Lent and the Fast of the diff --git a/docs/greek-fasting.md b/docs/greek-fasting.md index 23caf14e..0ba4fb3e 100644 --- a/docs/greek-fasting.md +++ b/docs/greek-fasting.md @@ -45,28 +45,29 @@ the OCA-modeled pattern our code already implemented: **Phase 2, the "stricter period"** - Slavic: starts ~5 days out (`nativity-6` to `nativity-1`), only removes fish -- Tue/Thu keep their wine+oil allowance throughout. -- Greek: starts **Dec 18** (`nativity-7`) and is stricter -- wine+oil is - restricted to Sat/Sun only, so Mon/Tue/Thu drop to full strictness (same as - Wed/Fri), not just losing fish. - -**Corrected 2026-09-09: this said Dec 13 (`nativity-12`).** That date came from -the two Antiochian parish sources below, and predates the decision that `greek` -means GOA. The Archdiocese publishes its own rule in the annual Yearbook, and -three GOA parishes reproduce it with attribution, all agreeing: "Nativity Lent -(November 15-December 24, although fish, wine and olive oil are permitted, -except on Wednesdays and Fridays, **until December 17**)." goarch.org itself is -behind Cloudflare and returns 403 to any fetch, so the Yearbook text was not -read first-hand. - -Eighteen days over five years change, all Greek, all Dec 13-17, all from wine -and oil or strict to fish -- Wednesdays and Fridays are unaffected, being strict -in both phases. The Antiochian sources are kept below because they are correct -*for Antioch*; they are simply not what the `greek` tradition follows. - -One general Antiochian summary found early in the research contradicted this -(grouping Monday with Wed/Fri, same as Slavic) -- judged to be an imprecise -generalization, since it's contradicted by two independent sources that are -specific to the Nativity Fast and agree with each other exactly. +- Greek: starts **Dec 12** (`nativity-13`) and is stricter -- fish goes + entirely, wine+oil is restricted to Sat/Sun, so Mon/Tue/Thu drop to full + strictness (same as Wed/Fri) rather than just losing fish. + +**This date has been wrong twice; it is now measured, not inferred.** + +| | source | value | +|---|---|---| +| originally | two Antiochian parish pages | Dec 13 (`nativity-12`) | +| 2026-09-09, briefly | a summary of the GOA Yearbook | Dec 18 (`nativity-7`) | +| **now** | **goarch.org's own calendar** | **Dec 12 (`nativity-13`)** | + +The Yearbook line -- "fish, wine and olive oil are permitted, except on +Wednesdays and Fridays, until December 17" -- is reproduced by three GOA +parishes and reads unambiguously, but the Archdiocese's own published calendar +does not match it. December 2027 pins the real boundary exactly, because it +falls across a weekend: **Dec 11 is a Saturday and still `fasting-fish`, Dec 12 +is a Sunday and only `grapes`.** Both are weekend days, so nothing but the +phase boundary separates them. 2025 and 2026 agree. + +The lesson is the one this project keeps relearning: a jurisdiction's prose +summary of its own rule is not evidence about its practice. See +`data/goarch_fasting.json` and `tools/fasting/goarch_audit.py`. ### Apostles' Fast -- no difference found diff --git a/tools/fasting/goarch_audit.py b/tools/fasting/goarch_audit.py new file mode 100644 index 00000000..1d5ec6a5 --- /dev/null +++ b/tools/fasting/goarch_audit.py @@ -0,0 +1,113 @@ +"""Score the Greek fasting rules against goarch.org's published calendar. + + docker compose run --rm local python tools/fasting/goarch_audit.py + +Reads data/goarch_fasting.json, which holds GOA's own daily fasting +designations, and compares them to what this app serves for +`Tradition.Greek`. Last run 2026-09-09: **257/276, 93.1%**. + +Harvesting more months, when it is needed +----------------------------------------- +goarch.org sits behind Cloudflare and returns 403 to every scripted fetch, so +this cannot be automated. The route that works, and it is cheap: + + 1. Open `https://www.goarch.org/chapel/calendar?month=M&year=YYYY + &viewStyle=GridView&viewType=ViewReadings` in a real browser and let the + user clear the interstitial once. + 2. From inside that page, `fetch()` further months same-origin -- the + clearance cookie is inherited, so one manual step buys a whole session. + +**The fasting level is not in the page text.** It is a CSS class on `div.day`, +which is why an earlier note claiming the grid's innerText carries the fasting +lines was wrong -- that is true of the readings, not of the fast: + + strict-fast -> strict grapes -> wine and oil + fasting-fish -> fish, wine, oil (none) -> fast free + +The mapping is confirmed by March 2026, where Lenten weekdays come out +`strict-fast`, weekends `grapes`, and the Annunciation `fasting-fish`. + +GOA's page publishes four buckets where `DietaryAllowance` has seven, so the +comparison is made at their granularity; `bucket()` below is the projection. +""" +import os +import sys + +sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))) +os.chdir(sys.path[0]) + +import asyncio +import collections +import datetime +import json + +import django + +os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'orthocal.settings') +django.setup() + +from calendarium.datetools import ( # noqa: E402 + DietaryAllowance as D, FastLevels, Tradition, + FAST_EXCEPTION_TO_DIETARY_ALLOWANCE as RUNG, +) +from calendarium.liturgics import Day # noqa: E402 + +PATH = 'data/goarch_fasting.json' +CODE = {'S': 'strict', 'W': 'wine+oil', 'F': 'fish', 'N': 'no fast'} +WEEKDAYS = ('Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat') +SEASONS = {0: 'no fast', 1: 'ordinary', 2: 'Lent', 3: 'Apostles', + 4: 'Dormition', 5: 'Nativity'} + + +def bucket(rung): + """Project a DietaryAllowance onto the four buckets GOA publishes.""" + if rung >= D.MeatFast: + return 'no fast' + if rung >= D.FishWineOil: + return 'fish' + if rung >= D.WineAndOil: + return 'wine+oil' + return 'strict' + + +async def main(): + with open(PATH) as f: + goa = json.load(f) + + agree = total = 0 + differences = [] + for month, codes in sorted(goa.items()): + if month.startswith('_'): + continue + year, mon = (int(x) for x in month.split('-')) + for index, code in enumerate(codes): + date = datetime.date(year, mon, index + 1) + day = Day(year, mon, date.day, tradition=Tradition.Greek) + await day.ainitialize() + + ours = ('no fast' if day.fast_level == FastLevels.NoFast + else bucket(RUNG[day.fast_exception])) + total += 1 + if ours == CODE[code]: + agree += 1 + else: + differences.append((date, WEEKDAYS[int(day.weekday)], ours, + CODE[code], day.feast_level, day.fast_level)) + + print(f'\n app (Greek) vs goarch.org: {agree}/{total} ' + f'({100 * agree / total:.1f}%)\n') + for (ours, theirs), n in collections.Counter( + (d[2], d[3]) for d in differences).most_common(): + print(f' ours={ours:<9} GOA={theirs:<9} {n}') + print() + for season, n in collections.Counter( + SEASONS.get(d[5], d[5]) for d in differences).most_common(): + print(f' {season:<10} {n}') + print('\n differences:') + for date, weekday, ours, theirs, feast_level, _ in differences: + print(f' {date} {weekday:<4} feast{feast_level} ' + f'ours={ours:<9} GOA={theirs}') + + +if __name__ == '__main__': + asyncio.run(main()) From bad4ff3da0698309112e49565a165582c849db25 Mon Sep 17 00:00:00 2001 From: Brian Glass Date: Wed, 9 Sep 2026 14:46:56 -0400 Subject: [PATCH 14/20] Close out the scope doc's open items Two entries had gone stale. Season.apply_grants was still listed as pending work when it has since been measured against goarch.org and failed, so it is recorded as a reading of the typikon that practice does not bear out rather than as something waiting to be switched on. And the question of which jurisdiction the `greek` tradition follows for fasting is answered: GOA, as for readings. Documentation only. Co-Authored-By: Claude Opus 5 Claude-Session: https://claude.ai/code/session_019nQRjJpPqW89xqzAf1vsEX --- docs/fasting-refactor-scope.md | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/docs/fasting-refactor-scope.md b/docs/fasting-refactor-scope.md index 05812509..3c779435 100644 --- a/docs/fasting-refactor-scope.md +++ b/docs/fasting-refactor-scope.md @@ -580,12 +580,18 @@ itself, and `docs/greek-fasting.md` records real Antiochian sources for the current date. What it needs is a decision about which jurisdiction the `greek` tradition follows for fasting, given that it follows GOA for readings. -### Still to do - -- **Turn on `Season.apply_grants`.** The Ch. 33 rank clause is written in - `_CH33_GRANTS` and switched off, so the refactor changed nothing. Enabling it - is a real behaviour change and wants its own commit and its own review of the - characterisation diff. +**Answered 2026-09-09: GOA, for fasting as for readings.** Brian's call, and the +Nativity boundary is now measured from the Archdiocese's own calendar rather +than from Antiochian sources. Antioch's fast-free Paschal season is explicitly +*not* adopted -- it appears to be unique to them, and is a nice-to-have for a +possible Antiochian tradition later. + +### Settled since + +`Season.apply_grants` was the last open item here. It has now been measured +against goarch.org and **fails** -- see "Ch. 33's rank clause" above. It stays +`False`, and the grants stay in `_CH33_GRANTS` as a recorded reading of the +typikon that practice does not bear out, not as pending work. ## What is deliberately *not* in scope From 2cdc75fc62ae55cc627f3cbec508f59d78b056bd Mon Sep 17 00:00:00 2001 From: Brian Glass Date: Wed, 9 Sep 2026 15:45:48 -0400 Subject: [PATCH 15/20] Extend the goarch audit to three years; fix the Apostles' fast Harvests Dec 2025 plus all of 2026, 2027 and 2028 -- 37 months, 1,127 days -- and works through what the fuller picture exposes. Agreement goes 91.6% -> 95.3%. The first correction was to the measuring tool rather than the app. bucket() folded MeatFast in with FastFree, so all 21 Cheesefare days scored as differences when the app had them right. Second time in this work that a "finding" turned out to be an artifact of the comparison setup, so the docstring now says why the two must stay distinct. The Apostles' fast is the real find, and it reverses an earlier conclusion. docs/greek-fasting.md said "no difference found" on the strength of a dedicated Antiochian source giving Mon/Wed/Fri strict, Tue/Thu wine and oil, Sat/Sun fish -- identical to Slavic practice and to Typikon Ch. 33. GOA keeps fish every day except Wednesday and Friday, which stay strict, the same shape as its Nativity fast's first phase. Measured across the whole of the 2026 and 2028 fasts, three weeks each, agreeing on every day. Implemented as APOSTLES_GREEK; 18 days. That source was Antiochian, and this tradition follows GOA. It is the same mistake the Nativity boundary made twice, so the doc now says so. Also adds a greek Day row for the Exaltation. Ours carries fast_exception 8, "Strict Fast (Wine and Oil)"; GOA gives no wine or oil at all, consistently across 2026, 2027 and 2028. The row duplicates the common one rather than carrying the exception alone, because _prefer_tradition_days replaces on (pdist, month, day) and a sparse row would drop the feast's name and rank. Stale row pk=898 (Dec 13, greek, exc=1) is zeroed. It was added in August to force the transition at the old Dec 13 boundary; the season table does that job now, and 2027 proves the row wrong -- Dec 13 falls on a Monday and GOA gives strict. TestGreekFasting's combined Holy Week / Apostles / Dormition test is split: Holy Week and Dormition genuinely are identical between traditions, the Apostles' fast is not, and it gets its own test pinning GOA's pattern day by day. What remains is characterised rather than guessed, in docs/fasting-refactor-scope.md. 36 of the 53 are per-date wine-and-oil grants GOA gives a long list of saints, only visible on Wednesdays and Fridays, so three years exposes about a third of the list. 8 are fish capped to wine and oil for saints but not for feasts of the Lord or the Theotokos -- the weekday confound is now broken, and the discriminator is a category our schema does not carry. 191 tests pass. Characterisation moves 43 days, all Greek. Co-Authored-By: Claude Opus 5 Claude-Session: https://claude.ai/code/session_019nQRjJpPqW89xqzAf1vsEX --- calendarium/fasting.py | 25 +++++- .../tests/data/fasting-characterization.txt | 90 +++++++++---------- calendarium/tests/test_liturgics.py | 48 ++++++++-- data/goarch_fasting.json | 32 ++++++- docs/fasting-refactor-scope.md | 56 ++++++++++++ docs/greek-fasting.md | 29 ++++-- fixtures/calendarium.json | 22 ++++- tools/fasting/goarch_audit.py | 22 ++++- 8 files changed, 254 insertions(+), 70 deletions(-) diff --git a/calendarium/fasting.py b/calendarium/fasting.py index 3299741e..cece4a35 100644 --- a/calendarium/fasting.py +++ b/calendarium/fasting.py @@ -127,7 +127,24 @@ def cap_for(self, weekday, feast_level): cap_exempt_rank=4, grants=_CH33_GRANTS, no_fish_before_nativity=True) -# Greek practice differs only in the Nativity fast, and there it splits in two: +# Greek practice keeps a much lighter Apostles' fast than Ch. 33 prescribes, and +# than Slavic practice: fish every day except Wednesday and Friday, which stay +# strict. Measured from goarch.org across 2026 and 2028, where the fast runs +# three weeks and every day matches on both -- see data/goarch_fasting.json. +# (2027's fast is one day long, so it says nothing either way.) +# +# This is the same shape as the Nativity fast's first phase below, so the floor +# and cap are shared. +_GREEK_FISH_FLOOR = {WED: D.Strict, FRI: D.Strict} +_GREEK_FISH_CAP = {WED: D.WineAndOil, FRI: D.WineAndOil} + +APOSTLES_GREEK = Season( + "Apostles (Greek)", + floor=_GREEK_FISH_FLOOR, default_floor=D.FishWineOil, + cap=_GREEK_FISH_CAP, default_cap=D.FishWineOil, + cap_exempt_rank=4) + +# The Nativity fast splits in two: # through Dec 11 everything but Wednesday and Friday is a fish day, and from # Dec 12 it tightens further than Slavic practice does -- fish goes entirely and # Monday, Tuesday and Thursday drop to full strictness rather than merely @@ -139,8 +156,8 @@ def cap_for(self, weekday, feast_level): # See docs/greek-fasting.md and data/goarch_fasting.json. NATIVITY_GREEK_EARLY = Season( 'Nativity (Greek, to Dec 11)', - floor={WED: D.Strict, FRI: D.Strict}, default_floor=D.FishWineOil, - cap={WED: D.WineAndOil, FRI: D.WineAndOil}, default_cap=D.FishWineOil, + floor=_GREEK_FISH_FLOOR, default_floor=D.FishWineOil, + cap=_GREEK_FISH_CAP, default_cap=D.FishWineOil, cap_exempt_rank=4) NATIVITY_GREEK_STRICT = Season( 'Nativity (Greek, from Dec 12)', @@ -163,6 +180,8 @@ def slavic_season(day): def greek_season(day): + if day.fast_level == FastLevels.ApostlesFast: + return APOSTLES_GREEK if day.fast_level == FastLevels.NativityFast: # Dec 12 is `nativity - 13`; see NATIVITY_GREEK_EARLY for the citation. return (NATIVITY_GREEK_STRICT if day.pdist >= day.pyear.nativity - 13 diff --git a/calendarium/tests/data/fasting-characterization.txt b/calendarium/tests/data/fasting-characterization.txt index 48a4c9a9..395d922b 100644 --- a/calendarium/tests/data/fasting-characterization.txt +++ b/calendarium/tests/data/fasting-characterization.txt @@ -1990,17 +1990,17 @@ 2025-06-13 greek w5 feast0 fast0 exc11 rows=0,11 -> - 2025-06-14 greek w6 feast0 fast0 exc11 rows=0,11 -> - 2025-06-15 greek w0 feast4 fast0 exc0 rows=0,0 -> - -2025-06-16 greek w1 feast4 fast3 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil -2025-06-17 greek w2 feast0 fast3 exc1 rows=0,0 -> meat,fish,dairy,eggs +2025-06-16 greek w1 feast4 fast3 exc2 rows=0,0 -> meat,dairy,eggs +2025-06-17 greek w2 feast0 fast3 exc2 rows=0,0 -> meat,dairy,eggs 2025-06-18 greek w3 feast0 fast3 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil -2025-06-19 greek w4 feast4 fast3 exc1 rows=0,0 -> meat,fish,dairy,eggs +2025-06-19 greek w4 feast4 fast3 exc2 rows=0,0 -> meat,dairy,eggs 2025-06-20 greek w5 feast0 fast3 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil 2025-06-21 greek w6 feast0 fast3 exc2 rows=0,0 -> meat,dairy,eggs 2025-06-22 greek w0 feast0 fast3 exc2 rows=0,0 -> meat,dairy,eggs -2025-06-23 greek w1 feast0 fast3 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2025-06-23 greek w1 feast0 fast3 exc2 rows=0,0 -> meat,dairy,eggs 2025-06-24 greek w2 feast6 fast3 exc2 rows=0,2 -> meat,dairy,eggs 2025-06-25 greek w3 feast3 fast3 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil -2025-06-26 greek w4 feast4 fast3 exc1 rows=0,0 -> meat,fish,dairy,eggs +2025-06-26 greek w4 feast4 fast3 exc2 rows=0,0 -> meat,dairy,eggs 2025-06-27 greek w5 feast0 fast3 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil 2025-06-28 greek w6 feast2 fast3 exc2 rows=0,0 -> meat,dairy,eggs 2025-06-29 greek w0 feast6 fast0 exc2 rows=0,2 -> - @@ -2080,7 +2080,7 @@ 2025-09-11 greek w4 feast4 fast0 exc0 rows=0,0 -> - 2025-09-12 greek w5 feast0 fast1 exc1 rows=0,1 -> meat,fish,dairy,eggs 2025-09-13 greek w6 feast3 fast0 exc1 rows=0,0,1 -> - -2025-09-14 greek w0 feast8 fast1 exc8 rows=0,8 -> meat,fish,dairy,eggs +2025-09-14 greek w0 feast8 fast1 exc9 rows=0,9 -> meat,fish,dairy,eggs,wine,oil 2025-09-15 greek w1 feast2 fast0 exc0 rows=0,0 -> - 2025-09-16 greek w2 feast2 fast0 exc0 rows=0,0 -> - 2025-09-17 greek w3 feast0 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil @@ -2170,7 +2170,7 @@ 2025-12-10 greek w3 feast0 fast5 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil 2025-12-11 greek w4 feast0 fast5 exc2 rows=0,0 -> meat,dairy,eggs 2025-12-12 greek w5 feast2 fast5 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil -2025-12-13 greek w6 feast0 fast5 exc1 rows=0,1 -> meat,fish,dairy,eggs +2025-12-13 greek w6 feast0 fast5 exc1 rows=0,0 -> meat,fish,dairy,eggs 2025-12-14 greek w0 feast0 fast5 exc1 rows=0,0,0 -> meat,fish,dairy,eggs 2025-12-15 greek w1 feast2 fast5 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil 2025-12-16 greek w2 feast0 fast5 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil @@ -2347,24 +2347,24 @@ 2026-06-05 greek w5 feast0 fast0 exc11 rows=0,11 -> - 2026-06-06 greek w6 feast0 fast0 exc11 rows=0,11 -> - 2026-06-07 greek w0 feast0 fast0 exc0 rows=0,0 -> - -2026-06-08 greek w1 feast2 fast3 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil -2026-06-09 greek w2 feast3 fast3 exc1 rows=0,0 -> meat,fish,dairy,eggs +2026-06-08 greek w1 feast2 fast3 exc2 rows=0,0 -> meat,dairy,eggs +2026-06-09 greek w2 feast3 fast3 exc2 rows=0,0 -> meat,dairy,eggs 2026-06-10 greek w3 feast4 fast3 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil -2026-06-11 greek w4 feast4 fast3 exc1 rows=0,0 -> meat,fish,dairy,eggs +2026-06-11 greek w4 feast4 fast3 exc2 rows=0,0 -> meat,dairy,eggs 2026-06-12 greek w5 feast2 fast3 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil 2026-06-13 greek w6 feast0 fast3 exc2 rows=0,0 -> meat,dairy,eggs 2026-06-14 greek w0 feast0 fast3 exc2 rows=0,0 -> meat,dairy,eggs -2026-06-15 greek w1 feast4 fast3 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil -2026-06-16 greek w2 feast4 fast3 exc1 rows=0,0 -> meat,fish,dairy,eggs +2026-06-15 greek w1 feast4 fast3 exc2 rows=0,0 -> meat,dairy,eggs +2026-06-16 greek w2 feast4 fast3 exc2 rows=0,0 -> meat,dairy,eggs 2026-06-17 greek w3 feast0 fast3 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil -2026-06-18 greek w4 feast0 fast3 exc1 rows=0,0 -> meat,fish,dairy,eggs +2026-06-18 greek w4 feast0 fast3 exc2 rows=0,0 -> meat,dairy,eggs 2026-06-19 greek w5 feast4 fast3 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil 2026-06-20 greek w6 feast0 fast3 exc2 rows=0,0 -> meat,dairy,eggs 2026-06-21 greek w0 feast0 fast3 exc2 rows=0,0 -> meat,dairy,eggs -2026-06-22 greek w1 feast0 fast3 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil -2026-06-23 greek w2 feast0 fast3 exc1 rows=0,0 -> meat,fish,dairy,eggs +2026-06-22 greek w1 feast0 fast3 exc2 rows=0,0 -> meat,dairy,eggs +2026-06-23 greek w2 feast0 fast3 exc2 rows=0,0 -> meat,dairy,eggs 2026-06-24 greek w3 feast6 fast3 exc2 rows=0,2 -> meat,dairy,eggs -2026-06-25 greek w4 feast3 fast3 exc1 rows=0,0 -> meat,fish,dairy,eggs +2026-06-25 greek w4 feast3 fast3 exc2 rows=0,0 -> meat,dairy,eggs 2026-06-26 greek w5 feast4 fast3 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil 2026-06-27 greek w6 feast0 fast3 exc2 rows=0,0 -> meat,dairy,eggs 2026-06-28 greek w0 feast2 fast3 exc2 rows=0,0 -> meat,dairy,eggs @@ -2445,7 +2445,7 @@ 2026-09-11 greek w5 feast4 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil 2026-09-12 greek w6 feast0 fast0 exc1 rows=0,0,1 -> - 2026-09-13 greek w0 feast3 fast0 exc1 rows=0,0,1 -> - -2026-09-14 greek w1 feast8 fast1 exc8 rows=0,8 -> meat,fish,dairy,eggs +2026-09-14 greek w1 feast8 fast1 exc9 rows=0,9 -> meat,fish,dairy,eggs,wine,oil 2026-09-15 greek w2 feast2 fast0 exc0 rows=0,0 -> - 2026-09-16 greek w3 feast2 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil 2026-09-17 greek w4 feast0 fast0 exc0 rows=0,0 -> - @@ -2535,7 +2535,7 @@ 2026-12-10 greek w4 feast0 fast5 exc2 rows=0,0 -> meat,dairy,eggs 2026-12-11 greek w5 feast0 fast5 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil 2026-12-12 greek w6 feast2 fast5 exc1 rows=0,0 -> meat,fish,dairy,eggs -2026-12-13 greek w0 feast0 fast5 exc1 rows=0,0,1 -> meat,fish,dairy,eggs +2026-12-13 greek w0 feast0 fast5 exc1 rows=0,0,0 -> meat,fish,dairy,eggs 2026-12-14 greek w1 feast0 fast5 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil 2026-12-15 greek w2 feast2 fast5 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil 2026-12-16 greek w3 feast0 fast5 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil @@ -2732,7 +2732,7 @@ 2027-06-25 greek w5 feast3 fast0 exc11 rows=0,11 -> - 2027-06-26 greek w6 feast4 fast0 exc11 rows=0,11 -> - 2027-06-27 greek w0 feast0 fast0 exc0 rows=0,0 -> - -2027-06-28 greek w1 feast2 fast3 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2027-06-28 greek w1 feast2 fast3 exc2 rows=0,0 -> meat,dairy,eggs 2027-06-29 greek w2 feast6 fast0 exc2 rows=0,2 -> - 2027-06-30 greek w3 feast4 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil 2027-07-01 greek w4 feast2 fast0 exc0 rows=0,0 -> - @@ -2810,7 +2810,7 @@ 2027-09-11 greek w6 feast4 fast0 exc0 rows=0,0,0 -> - 2027-09-12 greek w0 feast0 fast0 exc1 rows=0,0,1 -> - 2027-09-13 greek w1 feast3 fast0 exc1 rows=0,1 -> - -2027-09-14 greek w2 feast8 fast1 exc8 rows=0,8 -> meat,fish,dairy,eggs +2027-09-14 greek w2 feast8 fast1 exc9 rows=0,9 -> meat,fish,dairy,eggs,wine,oil 2027-09-15 greek w3 feast2 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil 2027-09-16 greek w4 feast2 fast0 exc0 rows=0,0 -> - 2027-09-17 greek w5 feast0 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil @@ -2900,7 +2900,7 @@ 2027-12-10 greek w5 feast0 fast5 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil 2027-12-11 greek w6 feast0 fast5 exc2 rows=0,0 -> meat,dairy,eggs 2027-12-12 greek w0 feast2 fast5 exc1 rows=0,0,0 -> meat,fish,dairy,eggs -2027-12-13 greek w1 feast0 fast5 exc1 rows=0,1 -> meat,fish,dairy,eggs +2027-12-13 greek w1 feast0 fast5 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil 2027-12-14 greek w2 feast0 fast5 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil 2027-12-15 greek w3 feast2 fast5 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil 2027-12-16 greek w4 feast0 fast5 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil @@ -3082,22 +3082,22 @@ 2028-06-09 greek w5 feast3 fast0 exc11 rows=0,11 -> - 2028-06-10 greek w6 feast4 fast0 exc11 rows=0,11 -> - 2028-06-11 greek w0 feast4 fast0 exc0 rows=0,0 -> - -2028-06-12 greek w1 feast2 fast3 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil -2028-06-13 greek w2 feast0 fast3 exc1 rows=0,0 -> meat,fish,dairy,eggs +2028-06-12 greek w1 feast2 fast3 exc2 rows=0,0 -> meat,dairy,eggs +2028-06-13 greek w2 feast0 fast3 exc2 rows=0,0 -> meat,dairy,eggs 2028-06-14 greek w3 feast0 fast3 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil -2028-06-15 greek w4 feast4 fast3 exc1 rows=0,0 -> meat,fish,dairy,eggs +2028-06-15 greek w4 feast4 fast3 exc2 rows=0,0 -> meat,dairy,eggs 2028-06-16 greek w5 feast4 fast3 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil 2028-06-17 greek w6 feast0 fast3 exc2 rows=0,0 -> meat,dairy,eggs 2028-06-18 greek w0 feast0 fast3 exc2 rows=0,0 -> meat,dairy,eggs -2028-06-19 greek w1 feast4 fast3 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil -2028-06-20 greek w2 feast0 fast3 exc1 rows=0,0 -> meat,fish,dairy,eggs +2028-06-19 greek w1 feast4 fast3 exc2 rows=0,0 -> meat,dairy,eggs +2028-06-20 greek w2 feast0 fast3 exc2 rows=0,0 -> meat,dairy,eggs 2028-06-21 greek w3 feast0 fast3 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil -2028-06-22 greek w4 feast0 fast3 exc1 rows=0,0 -> meat,fish,dairy,eggs +2028-06-22 greek w4 feast0 fast3 exc2 rows=0,0 -> meat,dairy,eggs 2028-06-23 greek w5 feast0 fast3 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil 2028-06-24 greek w6 feast6 fast3 exc2 rows=0,2 -> meat,dairy,eggs 2028-06-25 greek w0 feast3 fast3 exc2 rows=0,0 -> meat,dairy,eggs -2028-06-26 greek w1 feast4 fast3 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil -2028-06-27 greek w2 feast0 fast3 exc1 rows=0,0 -> meat,fish,dairy,eggs +2028-06-26 greek w1 feast4 fast3 exc2 rows=0,0 -> meat,dairy,eggs +2028-06-27 greek w2 feast0 fast3 exc2 rows=0,0 -> meat,dairy,eggs 2028-06-28 greek w3 feast2 fast3 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil 2028-06-29 greek w4 feast6 fast0 exc2 rows=0,2 -> - 2028-06-30 greek w5 feast4 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil @@ -3176,7 +3176,7 @@ 2028-09-11 greek w1 feast4 fast0 exc0 rows=0,0 -> - 2028-09-12 greek w2 feast0 fast0 exc1 rows=0,1 -> - 2028-09-13 greek w3 feast3 fast1 exc1 rows=0,1 -> meat,fish,dairy,eggs -2028-09-14 greek w4 feast8 fast1 exc8 rows=0,8 -> meat,fish,dairy,eggs +2028-09-14 greek w4 feast8 fast1 exc9 rows=0,9 -> meat,fish,dairy,eggs,wine,oil 2028-09-15 greek w5 feast2 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil 2028-09-16 greek w6 feast2 fast0 exc0 rows=0,0,0 -> - 2028-09-17 greek w0 feast0 fast0 exc0 rows=0,0,0 -> - @@ -3266,7 +3266,7 @@ 2028-12-10 greek w0 feast0 fast5 exc2 rows=0,0 -> meat,dairy,eggs 2028-12-11 greek w1 feast0 fast5 exc2 rows=0,0 -> meat,dairy,eggs 2028-12-12 greek w2 feast2 fast5 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil -2028-12-13 greek w3 feast0 fast5 exc1 rows=0,1 -> meat,fish,dairy,eggs +2028-12-13 greek w3 feast0 fast5 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil 2028-12-14 greek w4 feast0 fast5 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil 2028-12-15 greek w5 feast2 fast5 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil 2028-12-16 greek w6 feast0 fast5 exc1 rows=0,0 -> meat,fish,dairy,eggs @@ -3439,31 +3439,31 @@ 2029-06-01 greek w5 feast0 fast0 exc11 rows=0,11 -> - 2029-06-02 greek w6 feast0 fast0 exc11 rows=0,11 -> - 2029-06-03 greek w0 feast0 fast0 exc0 rows=0,0 -> - -2029-06-04 greek w1 feast0 fast3 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil -2029-06-05 greek w2 feast0 fast3 exc1 rows=0,0 -> meat,fish,dairy,eggs +2029-06-04 greek w1 feast0 fast3 exc2 rows=0,0 -> meat,dairy,eggs +2029-06-05 greek w2 feast0 fast3 exc2 rows=0,0 -> meat,dairy,eggs 2029-06-06 greek w3 feast0 fast3 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil -2029-06-07 greek w4 feast0 fast3 exc1 rows=0,0 -> meat,fish,dairy,eggs +2029-06-07 greek w4 feast0 fast3 exc2 rows=0,0 -> meat,dairy,eggs 2029-06-08 greek w5 feast2 fast3 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil 2029-06-09 greek w6 feast3 fast3 exc2 rows=0,0 -> meat,dairy,eggs 2029-06-10 greek w0 feast4 fast3 exc2 rows=0,0 -> meat,dairy,eggs -2029-06-11 greek w1 feast4 fast3 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil -2029-06-12 greek w2 feast2 fast3 exc1 rows=0,0 -> meat,fish,dairy,eggs +2029-06-11 greek w1 feast4 fast3 exc2 rows=0,0 -> meat,dairy,eggs +2029-06-12 greek w2 feast2 fast3 exc2 rows=0,0 -> meat,dairy,eggs 2029-06-13 greek w3 feast0 fast3 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil -2029-06-14 greek w4 feast0 fast3 exc1 rows=0,0 -> meat,fish,dairy,eggs +2029-06-14 greek w4 feast0 fast3 exc2 rows=0,0 -> meat,dairy,eggs 2029-06-15 greek w5 feast4 fast3 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil 2029-06-16 greek w6 feast4 fast3 exc2 rows=0,0 -> meat,dairy,eggs 2029-06-17 greek w0 feast0 fast3 exc2 rows=0,0 -> meat,dairy,eggs -2029-06-18 greek w1 feast0 fast3 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil -2029-06-19 greek w2 feast4 fast3 exc1 rows=0,0 -> meat,fish,dairy,eggs +2029-06-18 greek w1 feast0 fast3 exc2 rows=0,0 -> meat,dairy,eggs +2029-06-19 greek w2 feast4 fast3 exc2 rows=0,0 -> meat,dairy,eggs 2029-06-20 greek w3 feast0 fast3 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil -2029-06-21 greek w4 feast0 fast3 exc1 rows=0,0 -> meat,fish,dairy,eggs +2029-06-21 greek w4 feast0 fast3 exc2 rows=0,0 -> meat,dairy,eggs 2029-06-22 greek w5 feast0 fast3 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil 2029-06-23 greek w6 feast0 fast3 exc2 rows=0,0 -> meat,dairy,eggs 2029-06-24 greek w0 feast6 fast3 exc2 rows=0,2 -> meat,dairy,eggs -2029-06-25 greek w1 feast3 fast3 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil -2029-06-26 greek w2 feast4 fast3 exc1 rows=0,0 -> meat,fish,dairy,eggs +2029-06-25 greek w1 feast3 fast3 exc2 rows=0,0 -> meat,dairy,eggs +2029-06-26 greek w2 feast4 fast3 exc2 rows=0,0 -> meat,dairy,eggs 2029-06-27 greek w3 feast0 fast3 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil -2029-06-28 greek w4 feast2 fast3 exc1 rows=0,0 -> meat,fish,dairy,eggs +2029-06-28 greek w4 feast2 fast3 exc2 rows=0,0 -> meat,dairy,eggs 2029-06-29 greek w5 feast6 fast1 exc2 rows=0,2 -> meat,dairy,eggs 2029-06-30 greek w6 feast4 fast0 exc0 rows=0,0 -> - 2029-07-01 greek w0 feast2 fast0 exc0 rows=0,0 -> - @@ -3541,7 +3541,7 @@ 2029-09-11 greek w2 feast4 fast0 exc0 rows=0,0 -> - 2029-09-12 greek w3 feast0 fast1 exc1 rows=0,1 -> meat,fish,dairy,eggs 2029-09-13 greek w4 feast3 fast0 exc1 rows=0,0,1 -> - -2029-09-14 greek w5 feast8 fast1 exc8 rows=0,8 -> meat,fish,dairy,eggs +2029-09-14 greek w5 feast8 fast1 exc9 rows=0,9 -> meat,fish,dairy,eggs,wine,oil 2029-09-15 greek w6 feast2 fast0 exc0 rows=0,0,0 -> - 2029-09-16 greek w0 feast2 fast0 exc0 rows=0,0,0 -> - 2029-09-17 greek w1 feast0 fast0 exc0 rows=0,0 -> - @@ -3631,7 +3631,7 @@ 2029-12-10 greek w1 feast0 fast5 exc2 rows=0,0 -> meat,dairy,eggs 2029-12-11 greek w2 feast0 fast5 exc2 rows=0,0 -> meat,dairy,eggs 2029-12-12 greek w3 feast2 fast5 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil -2029-12-13 greek w4 feast0 fast5 exc1 rows=0,1 -> meat,fish,dairy,eggs +2029-12-13 greek w4 feast0 fast5 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil 2029-12-14 greek w5 feast0 fast5 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil 2029-12-15 greek w6 feast2 fast5 exc1 rows=0,0 -> meat,fish,dairy,eggs 2029-12-16 greek w0 feast0 fast5 exc1 rows=0,0,0 -> meat,fish,dairy,eggs diff --git a/calendarium/tests/test_liturgics.py b/calendarium/tests/test_liturgics.py index f6ca65ee..06bcb244 100644 --- a/calendarium/tests/test_liturgics.py +++ b/calendarium/tests/test_liturgics.py @@ -436,13 +436,17 @@ async def test_nativity_eve_strict_baseline_not_weakened_by_greek_stricter_perio self.assertEqual(slavic.fast_exception_desc, greek.fast_exception_desc) - async def test_holy_week_apostles_dormition_fasts_are_identical_between_traditions(self): - """Holy Week, the Apostles' Fast, and the Dormition Fast were all - confirmed (via dedicated Antiochian sources) to follow the same - weekly pattern as Slavic practice -- this is a regression guard - against that accidentally changing. Ordinary weeks of Great Lent - are NOT covered here -- see the wine-and-oil exception tests below - for three confirmed exceptions that do differ. + async def test_holy_week_and_dormition_fasts_are_identical_between_traditions(self): + """Holy Week and the Dormition Fast follow the same weekly pattern in + both traditions -- a regression guard against that changing. Ordinary + weeks of Great Lent are NOT covered here; see the wine-and-oil + exception tests below for three confirmed exceptions that do differ. + + The Apostles' Fast used to be covered here too, on the strength of a + dedicated Antiochian source. **goarch.org disproves that** -- GOA keeps + a far lighter Apostles' fast than Slavic practice, fish every day + except Wednesday and Friday, identical across the whole fast in 2026 + and 2028. It has its own test below. Aug 9 (St Herman of Alaska's Vigil-rank feast, Slavic tradition) needs no exclusion here: see @@ -452,7 +456,6 @@ async def test_holy_week_apostles_dormition_fasts_are_identical_between_traditio dates = ( [date(2026, 4, d) for d in range(5, 13)] # Holy Week - + [date(2026, 6, d) for d in range(9, 15)] # Apostles' Fast + [date(2026, 8, d) for d in range(1, 15)] # Dormition Fast ) @@ -466,6 +469,35 @@ async def test_holy_week_apostles_dormition_fasts_are_identical_between_traditio self.assertEqual(slavic.fast_level_desc, greek.fast_level_desc) self.assertEqual(slavic.fast_exception_desc, greek.fast_exception_desc) + async def test_apostles_fast_is_lighter_for_greek(self): + """GOA keeps fish through the Apostles' fast except on Wednesday and + Friday, where it is strict. Slavic practice follows Typikon Ch. 33 + instead -- Monday strict, Tuesday and Thursday wine and oil, weekends + fish. + + Measured from goarch.org across the whole of the 2026 and 2028 fasts, + which agree on every day; see data/goarch_fasting.json. June 2026 is + used here because the 2027 fast is a single day long.""" + + expected = { + 8: ('Fish, Wine and Oil are Allowed', ''), # Monday + 9: ('Fish, Wine and Oil are Allowed', 'Wine and Oil are Allowed'), + 10: ('', ''), # Wednesday + 11: ('Fish, Wine and Oil are Allowed', 'Wine and Oil are Allowed'), + 12: ('', ''), # Friday + 13: ('Fish, Wine and Oil are Allowed', 'Fish, Wine and Oil are Allowed'), + } + + for day_of_month, (greek_desc, slavic_desc) in expected.items(): + with self.subTest(day_of_month): + greek = liturgics.Day(2026, 6, day_of_month, tradition=Tradition.Greek) + slavic = liturgics.Day(2026, 6, day_of_month, tradition=Tradition.Slavic) + await greek.ainitialize() + await slavic.ainitialize() + + self.assertEqual(greek.fast_exception_desc, greek_desc) + self.assertEqual(slavic.fast_exception_desc, slavic_desc) + async def test_dormition_fast_grants_no_rank_based_exception(self): """Regression test for a data bug reported directly against production: Aug 9, 2026 (St Herman of Alaska's Vigil-rank feast) diff --git a/data/goarch_fasting.json b/data/goarch_fasting.json index 7245d613..74555332 100644 --- a/data/goarch_fasting.json +++ b/data/goarch_fasting.json @@ -1,12 +1,40 @@ { - "_comment": "GOA daily fasting designations, harvested 2026-09-09 from goarch.org/chapel/calendar?month=M&year=Y&viewStyle=GridView&viewType=ViewReadings via a real browser (Cloudflare blocks scripted access; the user cleared the interstitial, then months were fetched same-origin). The grid encodes fasting as a CSS class on div.day, NOT in the page text: 'strict-fast'=S, 'grapes'=W (wine and oil), 'fasting-fish'=F, absent=N (fast free). Mapping confirmed against March 2026, where Lenten weekdays are S, weekends W, and the Annunciation is F. One character per day, index 0 = the 1st.", + "_comment": "GOA daily fasting designations, harvested 2026-09-09 from goarch.org/chapel/calendar?month=M&year=Y&viewStyle=GridView&viewType=ViewReadings via a real browser (Cloudflare blocks scripted access; the user cleared the interstitial, then months were fetched same-origin). The grid encodes fasting as a CSS class on div.day, NOT in the page text: 'strict-fast'=S, 'grapes'=W (wine and oil), 'fasting-fish'=F, 'fast-day'=D (dairy allowed, i.e. a meat fast -- confusingly, that class marks the MILDEST level and appears only in Cheesefare week), absent=N (fast free). Mapping confirmed against March 2026, where Lenten weekdays are S, weekends W, and the Annunciation is F. One character per day, index 0 = the 1st.", "2025-12": "FFSFWFFFFSFWWWWSWSSWWSSSNNNNNNN", "2026-01": "NNNNSNFNSNNNNWNWNNNNSNSNNNNSNWN", + "2026-02": "NNNNNNNNNNWNSNNDDDDDDDSWSSSW", "2026-03": "WSSSSSWWWSSSSWWSSSSSWWSSFWSWWSS", "2026-04": "SSSWFSSSWSSNNNNNNNNNNWNWNNNNWN", "2026-05": "WNNNNFNWNNNNWNWNNNNFNWNNNNWNWNN", + "2026-06": "NNNNNNNFFSFSFFFFSFSFFFFFFSFFNN", + "2026-07": "WNSNNNNWNSNNNNSNWNNNNWNSNNNNSNS", + "2026-08": "WWSSSFSWWSSSSSNNNNSNSNNNNSNSWNN", "2026-09": "NSNSNNNNWNSNNSNSNSNNNNWNSNNNNS", + "2026-10": "NSNNNNSNSNNNNSNSNNNNSNWNNNNSNSN", "2026-11": "NNNSNSNNNNSNWNFFFSFSFFFFWFSFFF", "2026-12": "FSFWFFFFWFSWWSWSWSWWSSSSNNNNNNN", - "2027-12": "SFSFFFFSFSFWSSWSWWWWSSSSNNNNNNN" + "2027-01": "NNNNSNNSNNNNSNSNNNNWNWNNNNWNSNN", + "2027-02": "NNSNSNNNNWNSNNNNWNSNNNNNNNNN", + "2027-03": "NNSNSNNDDDDDDDSSSSSWWSSSFWWWSSS", + "2027-04": "SSWWSSSSSWWSSSWSWWSSSSSWFSSSWS", + "2027-05": "SNNNNNNNNNNWNWNNNNWNWNNNNFNWNNN", + "2027-06": "NWNWNNNNFNWNNNNWNWNNNNNNNNNFNW", + "2027-07": "NWNNNNSNSNNNNSNSNNNNSNSNNNNSNSN", + "2027-08": "WSSSSFWWSSSSSWNNNSNSNNNNSNSNWNN", + "2027-09": "WNSNNNNFNSNNNSSNSNNNNSNSNNNNSN", + "2027-10": "WNNNNWNSNNNNSNSNNNNSNSNNNNSNSNN", + "2027-11": "NNSNSNNNNSNWNNFFSFSFFFFSFSFFFF", + "2027-12": "SFSFFFFSFSFWSSWSWWWWSSSSNNNNNNN", + "2028-01": "NNNNSNFNNNNSNWNNNNSNSNNNNSNSNNN", + "2028-02": "NFNSNNNNNNNNNNNSNSNNDDDDDDDSS", + "2028-03": "SSSWWSSSWSWWSSSSSWWSSSSSFWSSSWS", + "2028-04": "WWSSSSSWFSSSWSSNNNNNNNNNNWNWNN", + "2028-05": "NNWNWNNNNFNWNNNNWNWNNNNFNWNNNNW", + "2028-06": "NWNNNNNNNNNFFSFSFFFFSFSFFFFSNW", + "2028-07": "NNNNSNSNNNNSNSNNNNSNSNNNNWNSNNN", + "2028-08": "SSSSWFSSSSSWWSNSNSNNNNSNSNNNSSN", + "2028-09": "WNNNNWNFNNNNWSSNNNNWNSNNNNSNSN", + "2028-10": "NNNSNWNNNNSNSNNNNSNSNNNNSNSNNNN", + "2028-11": "WNSNNNNWNSNNNNSFSFFFFSFSFFFFSF", + "2028-12": "SFFFFWFSFFFWSSWWWSSWSSWWNNNNNNN" } diff --git a/docs/fasting-refactor-scope.md b/docs/fasting-refactor-scope.md index 3c779435..e4d23225 100644 --- a/docs/fasting-refactor-scope.md +++ b/docs/fasting-refactor-scope.md @@ -497,6 +497,62 @@ differences are a *data* question -- Greek `fast_exception` rows for specific dates -- rather than a rule waiting to be written. That is the third time a rank-threshold hypothesis has failed against practice data on this project. +## The full-year goarch audit (2026-09-09) + +The 9-month sample was extended to **37 months -- Dec 2025 plus all of 2026, +2027 and 2028, 1,127 days.** Score, as each fix landed: + +| | | +|---|---| +| starting point | 1032/1127 (91.6%) | +| after a bug in the audit's own `bucket()` | 1053/1127 (93.4%) | +| `APOSTLES_GREEK` | 1071/1127 (95.0%) | +| Greek Exaltation row | **1074/1127 (95.3%)** | + +**The first correction was to the measuring tool, not the app.** `bucket()` +folded `MeatFast` in with `FastFree`, so all 21 Cheesefare days scored as +differences when the app had them right. Worth recording because it is the +second time in this work that a "finding" turned out to be an artifact of how +the comparison was set up. + +### What the remaining 53 are + +**36 -- per-date wine and oil grants we lack.** GOA lifts an ordinary Wednesday +or Friday to wine and oil for a large set of saints: Barbara, Spyridon, +Eleutherius, the Prophet Daniel, Mary Magdalene, the Chains of Peter, and +twenty-odd more. Their `feast_level` in our data ranges over 0, 2, 3 and 4, so +no threshold picks them out -- consistent with the rank grants failing. + +These are only *visible* on Wednesday and Friday, because on any other weekday +an ordinary-time day is already fast-free. A given date lands on Wed or Fri in +roughly 2 years out of 7, so **three years of data exposes only about a third of +the list.** Fully enumerating it needs on the order of ten years of harvest. +Inside the fasting seasons the problem does not arise -- every day is a fast +day, so Dec 15 shows up in all four harvested Decembers. + +**8 -- fish capped to wine and oil on ordinary Wed/Fri.** With three years the +confound noted earlier is broken: 2028-01-07 is a **Friday** that keeps fish, +and 2027-01-20, 2027-10-06 and 2028-11-08 are **Wednesdays** that are capped. So +it is not a weekday rule. Every capped day is `feast_level` 5 -- *higher* than +several days that keep fish -- so it is not a rank rule either: + +| GOA keeps fish | GOA caps to wine and oil | +|---|---| +| Nativity of the Theotokos (7), Meeting (8) | Three Hierarchs (5), John the Theologian (5) | +| Midfeast, Leavetaking of Pascha (0-4) | Chrysostom (5), Euthymius (5), Thomas (5) | +| Synaxis of the Forerunner (3) | Archangel Michael (5) | + +The discriminator is **what kind of feast it is** -- of the Lord or of the +Theotokos, versus a saint -- which is exactly Chapter X's wording, except that +GOA does not honour its "or one of the 12 Apostles" clause: John the Theologian +and Thomas are both capped. Our schema has no Lord/Theotokos/saint category, so +this cannot be expressed today. `feast_level >= 7` catches the two great feasts +but would wrongly cap the Midfeast, the Leavetaking of Pascha and the Synaxis of +the Forerunner -- fixing 7 days and breaking 8. + +**The remaining 9** are one-offs with no pattern yet: 5 wine-and-oil-to-strict, +2 fish-to-strict, 2 fast-free-to-wine-and-oil. + ### Clause 4, afterfeasts: confirmed by GOA too **goarch.org does not apply it either**, which settles the question the earlier diff --git a/docs/greek-fasting.md b/docs/greek-fasting.md index 0ba4fb3e..de0e762e 100644 --- a/docs/greek-fasting.md +++ b/docs/greek-fasting.md @@ -69,14 +69,27 @@ The lesson is the one this project keeps relearning: a jurisdiction's prose summary of its own rule is not evidence about its practice. See `data/goarch_fasting.json` and `tools/fasting/goarch_audit.py`. -### Apostles' Fast -- no difference found - -A dedicated Antiochian source states explicitly: Mon/Wed/Fri strict, Tue/Thu -wine+oil, Sat/Sun fish -- identical to the Slavic/OCA pattern our code -already implements. Notable: it's specifically the Nativity Fast's first -phase that's unusually lenient in Greek practice, not a general "Greek fasts -are more lenient" pattern -- the Apostles' Fast (sharing the exact same -weekly structure) shows no such leniency in either tradition. +### Apostles' Fast -- GOA is far lighter (corrected 2026-09-09) + +**This section previously read "no difference found".** That rested on a +dedicated Antiochian source stating Mon/Wed/Fri strict, Tue/Thu wine and oil, +Sat/Sun fish -- identical to the Slavic/OCA pattern, and identical to Typikon +Ch. 33. goarch.org disproves it: + +| | Mon | Tue | Wed | Thu | Fri | Sat | Sun | +|---|---|---|---|---|---|---|---| +| Slavic (Ch. 33) | strict | wine+oil | strict | wine+oil | strict | fish | fish | +| **GOA** | **fish** | **fish** | strict | **fish** | strict | fish | fish | + +GOA keeps **fish every day except Wednesday and Friday**, which stay strict -- +the same shape as its Nativity fast's first phase. Measured across the whole of +the 2026 and 2028 fasts, three weeks each, agreeing on every single day. (2027's +fast is one day long and says nothing either way.) Implemented as +`APOSTLES_GREEK`; it accounted for 18 of the differences in the goarch audit. + +The earlier conclusion was not carelessly drawn -- it had a real source -- but +that source was Antiochian, and this tradition follows GOA. It is the same +mistake the Nativity boundary made twice. ### Dormition Fast (Aug 1-14) -- no difference found diff --git a/fixtures/calendarium.json b/fixtures/calendarium.json index ffac7ca2..ad23ee5c 100644 --- a/fixtures/calendarium.json +++ b/fixtures/calendarium.json @@ -17134,7 +17134,7 @@ "service_note": "", "story": null, "fast": 5, - "fast_exception": 1, + "fast_exception": 0, "flag": 0, "tradition": "greek" } @@ -17159,6 +17159,26 @@ "tradition": "greek" } }, +{ + "model": "calendarium.day", + "pk": 900, + "fields": { + "pdist": 999, + "month": 9, + "day": 14, + "title": "", + "subtitle": "", + "feast_name": "Exaltation (Elevation) of the Precious Cross", + "feast_level": 8, + "service": 0, + "service_note": "", + "story": null, + "fast": 1, + "fast_exception": 9, + "flag": 0, + "tradition": "greek" + } +}, { "model": "calendarium.reading", "pk": 1, diff --git a/tools/fasting/goarch_audit.py b/tools/fasting/goarch_audit.py index 1d5ec6a5..f6653481 100644 --- a/tools/fasting/goarch_audit.py +++ b/tools/fasting/goarch_audit.py @@ -23,6 +23,11 @@ strict-fast -> strict grapes -> wine and oil fasting-fish -> fish, wine, oil (none) -> fast free + fast-day -> dairy allowed, i.e. a meat fast + +`fast-day` is the trap in that list: it names the *mildest* level, not a fast +day in the ordinary sense, and it appears only in Cheesefare week. Reading it as +anything else silently mis-scores seven days a year. The mapping is confirmed by March 2026, where Lenten weekdays come out `strict-fast`, weekends `grapes`, and the Annunciation `fasting-fish`. @@ -53,16 +58,27 @@ from calendarium.liturgics import Day # noqa: E402 PATH = 'data/goarch_fasting.json' -CODE = {'S': 'strict', 'W': 'wine+oil', 'F': 'fish', 'N': 'no fast'} +CODE = {'S': 'strict', 'W': 'wine+oil', 'F': 'fish', 'D': 'meat fast', + 'N': 'no fast'} WEEKDAYS = ('Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat') SEASONS = {0: 'no fast', 1: 'ordinary', 2: 'Lent', 3: 'Apostles', 4: 'Dormition', 5: 'Nativity'} def bucket(rung): - """Project a DietaryAllowance onto the four buckets GOA publishes.""" - if rung >= D.MeatFast: + """Project a DietaryAllowance onto the five buckets GOA publishes. + + Only `FastFree` is "no fast": `MeatFast` is Cheesefare week's dairy + allowance, which GOA labels separately. Collapsing the two scored all 21 + Cheesefare days in the harvest as differences when the app had them right. + + `WineOnly` -- Holy Saturday's wine without oil -- has no GOA counterpart, + and is scored as strict because that is the nearer of the two. + """ + if rung >= D.FastFree: return 'no fast' + if rung >= D.MeatFast: + return 'meat fast' if rung >= D.FishWineOil: return 'fish' if rung >= D.WineAndOil: From 86ed9169663e11c84af4d623ab5f0c98105d7c00 Mon Sep 17 00:00:00 2001 From: Brian Glass Date: Thu, 10 Sep 2026 12:49:19 -0400 Subject: [PATCH 16/20] Model GOA's fixed-date fasting rules; goarch agreement 94.8% -> 99.4% Extends the harvest to 121 months -- Dec 2025 plus every month of 2026 through 2035, 3,683 days. Ten years is the threshold that matters: a fixed date reaches a Wednesday or Friday in roughly two years out of seven, and in ordinary time those are the only days on which a relaxation is visible at all. Three years exposed about a third of the list. Twenty-two differences remain across ten years, about two a year. GREEK_WINE_OIL_DATES, 38 dates, is the largest piece. GOA relaxes a fast to wine and oil for a set of saints our feast ranks do not pick out -- Barbara and Ignatius are feast_level 0, Eleutherius and Spyridon are 2 -- so no threshold selects them, which is why Ch. 33's rank grants failed against this data. It lives in fasting.py rather than the fixture because a greek Day row replaces the common one outright, so encoding it as data would mean duplicating 38 feast names and ranks that would then drift out of step with their originals. The Wednesday/Friday fish cap is now implemented, and ten years breaks the confound that blocked it: a saint's fish grant falls back to wine and oil on a Wednesday or Friday however highly ranked, while feasts of the Lord and of the Theotokos keep it. cap_exempt_rank=7 expresses that, since levels 7 and 8 are exactly those two categories, plus three lower-ranked Lord days named explicitly. GOA does not honour Chapter X's "or one of the 12 Apostles" clause: John the Theologian, Thomas, Matthew and Andrew are all capped. That same cap holds inside the Nativity fast, so NATIVITY_GREEK_EARLY's cap_exempt_rank goes from 4 to 7 -- it had been letting Matthew, Andrew and Nicholas through. Adding that cap silently clamped Cheesefare week, whose whole point is that only meat is given up, into a fast stricter than the Lent it precedes. It has its own season now. The characterisation caught it on the first run, which is twice that it has caught a regression this branch would otherwise have shipped. GREEK_STRICT_DATES is the mirror image: nine dates whose festal grant GOA does not recognise, chiefly the Beheading of the Forerunner, which it keeps strict on all five weekdays across seven observations while allowing the ordinary weekend relief. Only the festal claim is dropped, not the Paschal cycle's -- a first attempt dropped every claim and made Lenten Saturdays stricter than the Saturdays either side of them. Also fixes the Exaltation, which our data relaxes to wine and oil and GOA keeps strict on weekdays: the greek row now makes no claim and lets the season decide, which gives strict on weekdays and wine and oil at the weekend, matching. That needed a weekend floor on the ordinary season, which cannot leak onto ordinary Saturdays and Sundays because those are not fasts and never reach it. Characterisation moves 80 days, all Greek, none Slavic. Four tests added for the new rules. 195 tests pass. Co-Authored-By: Claude Opus 5 Claude-Session: https://claude.ai/code/session_019nQRjJpPqW89xqzAf1vsEX --- calendarium/fasting.py | 142 +++++- calendarium/liturgics/day.py | 6 +- .../tests/data/fasting-characterization.txt | 418 +++++++++--------- calendarium/tests/test_liturgics.py | 68 +++ data/goarch_fasting.json | 88 +++- docs/fasting-refactor-scope.md | 54 ++- fixtures/calendarium.json | 2 +- 7 files changed, 557 insertions(+), 221 deletions(-) diff --git a/calendarium/fasting.py b/calendarium/fasting.py index cece4a35..938e80cd 100644 --- a/calendarium/fasting.py +++ b/calendarium/fasting.py @@ -83,7 +83,16 @@ def cap_for(self, weekday, feast_level): # --- the seasons ------------------------------------------------------------ -ORDINARY = Season('ordinary Wed/Fri', default_floor=D.Strict) +# Ordinary time is mostly Wednesdays and Fridays, but a few fixed feasts are +# fast days in their own right -- the Exaltation and the Beheading of the +# Forerunner -- and those take wine and oil when they fall at the weekend. +# goarch.org is unambiguous across ten years: both are strict on all five +# weekdays and wine and oil on both Saturday and Sunday, without exception. +# Ordinary Saturdays and Sundays are not fasts at all, so they never reach this +# season and the weekend floor cannot leak onto them. +ORDINARY = Season('ordinary Wed/Fri', + floor={SAT: D.WineAndOil, SUN: D.WineAndOil}, + default_floor=D.Strict) # Not a fasting season, but a day still carries an allowance label: a feast row # on a free day says "Fish, Wine and Oil are Allowed" and that is what gets @@ -158,7 +167,11 @@ def cap_for(self, weekday, feast_level): 'Nativity (Greek, to Dec 11)', floor=_GREEK_FISH_FLOOR, default_floor=D.FishWineOil, cap=_GREEK_FISH_CAP, default_cap=D.FishWineOil, - cap_exempt_rank=4) + # 7, not 4: the Wednesday/Friday no-fish cap holds inside this fast exactly + # as it does in ordinary time, and holds against high-ranking saints. + # St Matthew (6), St Andrew (4) and St Nicholas (5) all fall here and all + # get wine and oil rather than fish when they land on a Wednesday or Friday. + cap_exempt_rank=7) NATIVITY_GREEK_STRICT = Season( 'Nativity (Greek, from Dec 12)', floor={SAT: D.WineAndOil, SUN: D.WineAndOil}, default_floor=D.Strict, @@ -175,11 +188,103 @@ def cap_for(self, weekday, feast_level): } +# Dates on which GOA grants wine and oil whenever they land on a fast day. +# +# Enumerated from ten years of goarch.org (2026-2035, data/goarch_fasting.json), +# taking every date where their calendar gives wine and oil and this app gives +# strict. Each was observed between one and eight times and is consistent every +# time; the ones inside the Nativity fast are seen most often, because there +# every weekday is a fast day and so every occurrence is visible, while in +# ordinary time only Wednesdays and Fridays reveal anything. +# +# **This is a list, not a rule, because no rule fits.** These are the saints GOA +# ranks highly enough to relax a fast for, and that ranking is not ours: their +# `feast_level` here runs 0, 2, 3 and 4, so no threshold selects them -- +# St Barbara and St Ignatius are level 0, while plenty of level 4 days get +# nothing. That is the same reason Ch. 33's rank grants failed against this +# data; see docs/fasting-refactor-scope.md. +# +# It lives here rather than in the fixture because a `greek` Day row replaces +# the `common` one outright (`_prefer_tradition_days` keys on +# `(pdist, month, day)`), so encoding it as data would mean duplicating 38 +# feast names and ranks that would then drift out of step with their originals. +# +# Incomplete by construction: a date reaches a Wednesday or Friday in roughly +# two years out of seven, so ordinary-time entries seen once or twice here are +# real but the list as a whole is a floor, not a census. +GREEK_WINE_OIL_DATES = frozenset({ + (1, 11), (1, 14), (1, 16), (1, 18), (1, 22), (1, 25), (1, 27), + (2, 8), (2, 9), (2, 10), (2, 11), (2, 17), (2, 24), + (3, 9), + (6, 8), (6, 11), (6, 30), + (7, 1), (7, 2), (7, 8), (7, 17), (7, 22), (7, 25), (7, 27), + (8, 31), + (9, 6), (9, 9), (9, 20), + (10, 23), + (11, 1), (11, 12), + (12, 4), (12, 5), (12, 9), (12, 12), (12, 15), (12, 17), (12, 20), +}) + + +# Chapter X: "Fish is permitted on Wednesday or Friday if it is a feast of the +# Lord even during fasting seasons." GOA applies that as a *cap* -- a saint's +# fish grant falls back to wine and oil when it lands on a Wednesday or Friday, +# however highly ranked the saint. Ten years of data give fourteen such saints, +# at feast levels 4, 5 and 6: Anthony the Great, Euthymius, the Three Hierarchs, +# John the Theologian (twice a year), Constantine and Helen, Elijah, Thomas, +# Demetrius, the Archangel Michael, Chrysostom, Matthew, Andrew and Nicholas. +# +# Note GOA does *not* honour Chapter X's "or one of the 12 Apostles" clause: +# John the Theologian, Thomas, Matthew and Andrew are all capped. +# +# `cap_exempt_rank=7` lets the fixed Lord and Theotokos feasts through, since +# levels 7 and 8 are exactly "Major feast Theotokos" and "Major feast Lord". +# Three Lord-feast days our data ranks lower need naming explicitly. +GREEK_WED_FRI_FISH_OK_DATES = frozenset({ + (1, 7), # Synaxis of the Forerunner, in Theophany's afterfeast +}) +GREEK_WED_FRI_FISH_OK_PDISTS = frozenset({ + 24, # Midfeast of Pentecost + 38, # Leavetaking of Pascha / Forefeast of the Ascension +}) + +# Cheesefare week needs its own season purely so ORDINARY_GREEK's Wednesday and +# Friday cap does not reach it. That cap means "no fish for a saint"; the week +# before Lent is a different thing entirely -- a season-wide dispensation in +# which meat is the only thing given up -- and clamping it to wine and oil +# turned all seven days into a fast stricter than the week they precede. +# goarch.org marks the whole week `fast-day`, Wednesday and Friday included. +CHEESEFARE_GREEK = Season('Cheesefare (Greek)', default_floor=D.MeatFast) + +# The mirror of GREEK_WINE_OIL_DATES: dates whose festal wine-and-oil grant GOA +# does not recognise, so the season's own floor should stand instead. Chiefly +# the Beheading of the Forerunner, which our data relaxes to wine and oil but +# which goarch.org keeps strict on all five weekdays -- seven observations, +# never once relaxed. The claim is dropped rather than capped, so the weekend +# floor still applies and the Beheading is wine and oil on a Saturday or Sunday, +# which is exactly what GOA does. +GREEK_STRICT_DATES = frozenset({ + (2, 9), (4, 7), (4, 23), (8, 16), (8, 29), + (9, 12), (9, 24), (9, 28), (10, 9), +}) + +ORDINARY_GREEK = Season('ordinary Wed/Fri (Greek)', + floor={SAT: D.WineAndOil, SUN: D.WineAndOil}, + default_floor=D.Strict, + cap={WED: D.WineAndOil, FRI: D.WineAndOil}, + cap_exempt_rank=7) + + def slavic_season(day): return _BY_LEVEL.get(day.fast_level) def greek_season(day): + if day.fast_level == FastLevels.Fast: + # Cheesefare week: Clean Monday is pdist -48, so the week runs -55..-49. + if -55 <= day.pdist <= -49: + return CHEESEFARE_GREEK + return ORDINARY_GREEK if day.fast_level == FastLevels.ApostlesFast: return APOSTLES_GREEK if day.fast_level == FastLevels.NativityFast: @@ -191,7 +296,8 @@ def greek_season(day): # --- the rule --------------------------------------------------------------- -def resolve(season, weekday, feast_level, rows, no_fish=False, eve_on_weekend=False): +def resolve(season, weekday, feast_level, rows, no_fish=False, + eve_on_weekend=False, cap_exempt=False): """Combine a day's contributing rows into (rung, legacy fast_exception).""" claims = [(i, RUNG[i]) for i in rows if i not in CLAIMLESS_INDICES] caps = [(i, RUNG[i]) for i in rows if i in CAP_INDICES] @@ -202,7 +308,8 @@ def resolve(season, weekday, feast_level, rows, no_fish=False, eve_on_weekend=Fa allowance = season.floor_for(weekday) winner = None # the row that set the current answer - season_cap = season.cap_for(weekday, feast_level) + season_cap = (D.FastFree if cap_exempt + else season.cap_for(weekday, feast_level)) for index, claim in claims: # A season cap means "no fish", and caviar is not fish -- dietarily @@ -235,9 +342,27 @@ def resolve(season, weekday, feast_level, rows, no_fish=False, eve_on_weekend=Fa return allowance, (winner if winner is not None else CANONICAL[allowance]) -def apply(day, season_for): +def apply(day, season_for, wine_oil_dates=frozenset(), + fish_ok_dates=frozenset(), fish_ok_pdists=frozenset(), + strict_dates=frozenset()): """Set `day.fast_level` and `day.fast_exception` for one day.""" - rows = [d.fast_exception for d in day.days] + if (day.month, day.day) in strict_dates: + # Where the jurisdiction recognises no relaxation, the *festal* claim is + # dropped and the season's floor stands. Only festal rows are touched: + # the Paschal cycle's own weekend allowance has to survive, or a Lenten + # Saturday on one of these dates would come out stricter than the + # Saturdays either side of it. Caps are kept -- a row asserting + # strictness still has its say. + rows = [d.fast_exception + if not d.month or d.fast_exception in CAP_INDICES else 0 + for d in day.days] + else: + rows = [d.fast_exception for d in day.days] + + # A jurisdiction's own fixed-date relaxations enter as an ordinary claim, so + # the season's cap still applies -- they lift a fast, they do not escape one. + if (day.month, day.day) in wine_oil_dates: + rows.append(1) if FAST_FREE in rows: day.fast_level = FastLevels.NoFast @@ -256,6 +381,9 @@ def apply(day, season_for): and day.pyear.nativity - 6 < day.pdist < day.pyear.nativity - 1) eve = day.pdist in (day.pyear.nativity - 1, day.pyear.theophany - 1) + cap_exempt = ((day.month, day.day) in fish_ok_dates + or day.pdist in fish_ok_pdists) + _, day.fast_exception = resolve( season, day.weekday, day.feast_level, rows, - no_fish=no_fish, eve_on_weekend=eve) + no_fish=no_fish, eve_on_weekend=eve, cap_exempt=cap_exempt) diff --git a/calendarium/liturgics/day.py b/calendarium/liturgics/day.py index 14ebcdca..1754e218 100644 --- a/calendarium/liturgics/day.py +++ b/calendarium/liturgics/day.py @@ -941,7 +941,11 @@ class GreekDay(Day): def _apply_fasting_adjustments(self): """Greek dietary rules, which differ from Slavic only in the Nativity fast -- see calendarium/fasting.py and docs/greek-fasting.md.""" - fasting.apply(self, fasting.greek_season) + fasting.apply(self, fasting.greek_season, + wine_oil_dates=fasting.GREEK_WINE_OIL_DATES, + fish_ok_dates=fasting.GREEK_WED_FRI_FISH_OK_DATES, + fish_ok_pdists=fasting.GREEK_WED_FRI_FISH_OK_PDISTS, + strict_dates=fasting.GREEK_STRICT_DATES) _DAY_CLASSES = { diff --git a/calendarium/tests/data/fasting-characterization.txt b/calendarium/tests/data/fasting-characterization.txt index 395d922b..8ed30a3b 100644 --- a/calendarium/tests/data/fasting-characterization.txt +++ b/calendarium/tests/data/fasting-characterization.txt @@ -254,7 +254,7 @@ 2025-09-11 slavic w4 feast4 fast0 exc0 rows=0,0 -> - 2025-09-12 slavic w5 feast0 fast1 exc1 rows=0,1 -> meat,fish,dairy,eggs 2025-09-13 slavic w6 feast3 fast0 exc1 rows=0,0,1 -> - -2025-09-14 slavic w0 feast8 fast1 exc8 rows=0,8 -> meat,fish,dairy,eggs +2025-09-14 slavic w0 feast8 fast1 exc1 rows=0,8 -> meat,fish,dairy,eggs 2025-09-15 slavic w1 feast2 fast0 exc0 rows=0,0 -> - 2025-09-16 slavic w2 feast2 fast0 exc0 rows=0,0 -> - 2025-09-17 slavic w3 feast0 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil @@ -603,7 +603,7 @@ 2026-08-26 slavic w3 feast4 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil 2026-08-27 slavic w4 feast0 fast0 exc0 rows=0,0 -> - 2026-08-28 slavic w5 feast4 fast1 exc1 rows=0,1 -> meat,fish,dairy,eggs -2026-08-29 slavic w6 feast6 fast1 exc8 rows=0,8 -> meat,fish,dairy,eggs +2026-08-29 slavic w6 feast6 fast1 exc1 rows=0,8 -> meat,fish,dairy,eggs 2026-08-30 slavic w0 feast4 fast0 exc0 rows=0,0 -> - 2026-08-31 slavic w1 feast3 fast0 exc0 rows=0,0 -> - 2026-09-01 slavic w2 feast4 fast0 exc1 rows=0,1 -> - @@ -968,7 +968,7 @@ 2027-08-26 slavic w4 feast4 fast0 exc0 rows=0,0 -> - 2027-08-27 slavic w5 feast0 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil 2027-08-28 slavic w6 feast4 fast0 exc1 rows=0,1 -> - -2027-08-29 slavic w0 feast6 fast1 exc8 rows=0,8 -> meat,fish,dairy,eggs +2027-08-29 slavic w0 feast6 fast1 exc1 rows=0,8 -> meat,fish,dairy,eggs 2027-08-30 slavic w1 feast4 fast0 exc0 rows=0,0 -> - 2027-08-31 slavic w2 feast3 fast0 exc0 rows=0,0 -> - 2027-09-01 slavic w3 feast4 fast1 exc1 rows=0,1 -> meat,fish,dairy,eggs @@ -1834,23 +1834,23 @@ 2025-01-08 greek w3 feast0 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil 2025-01-09 greek w4 feast4 fast0 exc0 rows=0,0 -> - 2025-01-10 greek w5 feast0 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil -2025-01-11 greek w6 feast4 fast0 exc0 rows=0,0,0 -> - +2025-01-11 greek w6 feast4 fast0 exc1 rows=0,0,0 -> - 2025-01-12 greek w0 feast3 fast0 exc0 rows=0,0,0 -> - 2025-01-13 greek w1 feast0 fast0 exc0 rows=0,0 -> - -2025-01-14 greek w2 feast4 fast0 exc0 rows=0,0 -> - +2025-01-14 greek w2 feast4 fast0 exc1 rows=0,0 -> - 2025-01-15 greek w3 feast2 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil -2025-01-16 greek w4 feast2 fast0 exc0 rows=0,0 -> - -2025-01-17 greek w5 feast5 fast1 exc2 rows=0,2 -> meat,dairy,eggs -2025-01-18 greek w6 feast2 fast0 exc0 rows=0,0 -> - +2025-01-16 greek w4 feast2 fast0 exc1 rows=0,0 -> - +2025-01-17 greek w5 feast5 fast1 exc1 rows=0,2 -> meat,fish,dairy,eggs +2025-01-18 greek w6 feast2 fast0 exc1 rows=0,0 -> - 2025-01-19 greek w0 feast2 fast0 exc0 rows=0,0 -> - 2025-01-20 greek w1 feast5 fast0 exc2 rows=0,2 -> - 2025-01-21 greek w2 feast0 fast0 exc0 rows=0,0 -> - -2025-01-22 greek w3 feast0 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2025-01-22 greek w3 feast0 fast1 exc1 rows=0,0 -> meat,fish,dairy,eggs 2025-01-23 greek w4 feast0 fast0 exc0 rows=0,0 -> - 2025-01-24 greek w5 feast4 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil -2025-01-25 greek w6 feast4 fast0 exc0 rows=0,0 -> - +2025-01-25 greek w6 feast4 fast0 exc1 rows=0,0 -> - 2025-01-26 greek w0 feast5 fast0 exc0 rows=0,0,0 -> - -2025-01-27 greek w1 feast4 fast0 exc0 rows=0,0 -> - +2025-01-27 greek w1 feast4 fast0 exc1 rows=0,0 -> - 2025-01-28 greek w2 feast2 fast0 exc0 rows=0,0 -> - 2025-01-29 greek w3 feast2 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil 2025-01-30 greek w4 feast5 fast0 exc2 rows=0,2 -> - @@ -1862,7 +1862,7 @@ 2025-02-05 greek w3 feast0 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil 2025-02-06 greek w4 feast0 fast0 exc0 rows=0,0 -> - 2025-02-07 greek w5 feast0 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil -2025-02-08 greek w6 feast2 fast0 exc0 rows=0,0 -> - +2025-02-08 greek w6 feast2 fast0 exc1 rows=0,0 -> - 2025-02-09 greek w0 feast4 fast0 exc11 rows=0,11 -> - 2025-02-10 greek w1 feast0 fast0 exc11 rows=0,11 -> - 2025-02-11 greek w2 feast3 fast0 exc11 rows=0,11 -> - @@ -1871,7 +1871,7 @@ 2025-02-14 greek w5 feast4 fast0 exc11 rows=0,11 -> - 2025-02-15 greek w6 feast0 fast0 exc11 rows=0,11 -> - 2025-02-16 greek w0 feast0 fast0 exc0 rows=0,0 -> - -2025-02-17 greek w1 feast4 fast0 exc0 rows=0,0 -> - +2025-02-17 greek w1 feast4 fast0 exc1 rows=0,0 -> - 2025-02-18 greek w2 feast0 fast0 exc0 rows=0,0 -> - 2025-02-19 greek w3 feast0 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil 2025-02-20 greek w4 feast0 fast0 exc0 rows=0,0 -> - @@ -1920,7 +1920,7 @@ 2025-04-04 greek w5 feast1 fast2 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil 2025-04-05 greek w6 feast0 fast2 exc3 rows=0,3 -> meat,fish,dairy,eggs 2025-04-06 greek w0 feast4 fast2 exc3 rows=0,3 -> meat,fish,dairy,eggs -2025-04-07 greek w1 feast4 fast2 exc1 rows=0,1 -> meat,fish,dairy,eggs +2025-04-07 greek w1 feast4 fast2 exc0 rows=0,1 -> meat,fish,dairy,eggs,wine,oil 2025-04-08 greek w2 feast0 fast2 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil 2025-04-09 greek w3 feast1 fast2 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil 2025-04-10 greek w4 feast0 fast2 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil @@ -1982,7 +1982,7 @@ 2025-06-05 greek w4 feast0 fast0 exc0 rows=0,0 -> - 2025-06-06 greek w5 feast0 fast1 exc1 rows=0,1 -> meat,fish,dairy,eggs 2025-06-07 greek w6 feast0 fast0 exc0 rows=0,0 -> - -2025-06-08 greek w0 feast8 fast0 exc0 rows=0,0 -> - +2025-06-08 greek w0 feast8 fast0 exc1 rows=0,0 -> - 2025-06-09 greek w1 feast3 fast0 exc11 rows=0,11 -> - 2025-06-10 greek w2 feast4 fast0 exc11 rows=0,11 -> - 2025-06-11 greek w3 feast4 fast0 exc11 rows=0,11 -> - @@ -2004,15 +2004,15 @@ 2025-06-27 greek w5 feast0 fast3 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil 2025-06-28 greek w6 feast2 fast3 exc2 rows=0,0 -> meat,dairy,eggs 2025-06-29 greek w0 feast6 fast0 exc2 rows=0,2 -> - -2025-06-30 greek w1 feast4 fast0 exc0 rows=0,0 -> - -2025-07-01 greek w2 feast2 fast0 exc0 rows=0,0 -> - -2025-07-02 greek w3 feast3 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2025-06-30 greek w1 feast4 fast0 exc1 rows=0,0 -> - +2025-07-01 greek w2 feast2 fast0 exc1 rows=0,0 -> - +2025-07-02 greek w3 feast3 fast1 exc1 rows=0,0 -> meat,fish,dairy,eggs 2025-07-03 greek w4 feast4 fast0 exc0 rows=0,0 -> - 2025-07-04 greek w5 feast0 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil 2025-07-05 greek w6 feast0 fast0 exc0 rows=0,0 -> - 2025-07-06 greek w0 feast0 fast0 exc0 rows=0,0 -> - 2025-07-07 greek w1 feast0 fast0 exc0 rows=0,0 -> - -2025-07-08 greek w2 feast2 fast0 exc0 rows=0,0 -> - +2025-07-08 greek w2 feast2 fast0 exc1 rows=0,0 -> - 2025-07-09 greek w3 feast0 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil 2025-07-10 greek w4 feast0 fast0 exc0 rows=0,0 -> - 2025-07-11 greek w5 feast2 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil @@ -2021,17 +2021,17 @@ 2025-07-14 greek w1 feast2 fast0 exc0 rows=0,0 -> - 2025-07-15 greek w2 feast0 fast0 exc0 rows=0,0 -> - 2025-07-16 greek w3 feast0 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil -2025-07-17 greek w4 feast4 fast0 exc0 rows=0,0 -> - +2025-07-17 greek w4 feast4 fast0 exc1 rows=0,0 -> - 2025-07-18 greek w5 feast0 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil 2025-07-19 greek w6 feast0 fast0 exc0 rows=0,0 -> - 2025-07-20 greek w0 feast5 fast0 exc2 rows=0,2 -> - 2025-07-21 greek w1 feast0 fast0 exc0 rows=0,0 -> - -2025-07-22 greek w2 feast2 fast0 exc0 rows=0,0 -> - +2025-07-22 greek w2 feast2 fast0 exc1 rows=0,0 -> - 2025-07-23 greek w3 feast0 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil 2025-07-24 greek w4 feast0 fast0 exc0 rows=0,0 -> - -2025-07-25 greek w5 feast3 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2025-07-25 greek w5 feast3 fast1 exc1 rows=0,0 -> meat,fish,dairy,eggs 2025-07-26 greek w6 feast0 fast0 exc11 rows=0,11 -> - -2025-07-27 greek w0 feast2 fast0 exc0 rows=0,0 -> - +2025-07-27 greek w0 feast2 fast0 exc1 rows=0,0 -> - 2025-07-28 greek w1 feast0 fast0 exc0 rows=0,0 -> - 2025-07-29 greek w2 feast0 fast0 exc0 rows=0,0 -> - 2025-07-30 greek w3 feast0 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil @@ -2051,7 +2051,7 @@ 2025-08-13 greek w3 feast4 fast4 exc0 rows=0,4 -> meat,fish,dairy,eggs,wine,oil 2025-08-14 greek w4 feast2 fast4 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil 2025-08-15 greek w5 feast7 fast1 exc2 rows=0,2 -> meat,dairy,eggs -2025-08-16 greek w6 feast5 fast0 exc1 rows=0,1 -> - +2025-08-16 greek w6 feast5 fast0 exc0 rows=0,1 -> - 2025-08-17 greek w0 feast0 fast0 exc0 rows=0,0 -> - 2025-08-18 greek w1 feast0 fast0 exc0 rows=0,0 -> - 2025-08-19 greek w2 feast0 fast0 exc0 rows=0,0 -> - @@ -2064,37 +2064,37 @@ 2025-08-26 greek w2 feast4 fast0 exc0 rows=0,0 -> - 2025-08-27 greek w3 feast0 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil 2025-08-28 greek w4 feast0 fast0 exc0 rows=0,0 -> - -2025-08-29 greek w5 feast6 fast1 exc8 rows=0,8 -> meat,fish,dairy,eggs +2025-08-29 greek w5 feast6 fast1 exc0 rows=0,8 -> meat,fish,dairy,eggs,wine,oil 2025-08-30 greek w6 feast4 fast0 exc0 rows=0,0 -> - -2025-08-31 greek w0 feast3 fast0 exc0 rows=0,0 -> - +2025-08-31 greek w0 feast3 fast0 exc1 rows=0,0 -> - 2025-09-01 greek w1 feast4 fast0 exc1 rows=0,1 -> - 2025-09-02 greek w2 feast0 fast0 exc0 rows=0,0 -> - 2025-09-03 greek w3 feast0 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil 2025-09-04 greek w4 feast0 fast0 exc0 rows=0,0 -> - 2025-09-05 greek w5 feast2 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil -2025-09-06 greek w6 feast2 fast0 exc0 rows=0,0 -> - +2025-09-06 greek w6 feast2 fast0 exc1 rows=0,0 -> - 2025-09-07 greek w0 feast3 fast0 exc0 rows=0,0,0 -> - 2025-09-08 greek w1 feast7 fast0 exc2 rows=0,2 -> - -2025-09-09 greek w2 feast3 fast0 exc0 rows=0,0 -> - +2025-09-09 greek w2 feast3 fast0 exc1 rows=0,0 -> - 2025-09-10 greek w3 feast0 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil 2025-09-11 greek w4 feast4 fast0 exc0 rows=0,0 -> - -2025-09-12 greek w5 feast0 fast1 exc1 rows=0,1 -> meat,fish,dairy,eggs +2025-09-12 greek w5 feast0 fast1 exc0 rows=0,1 -> meat,fish,dairy,eggs,wine,oil 2025-09-13 greek w6 feast3 fast0 exc1 rows=0,0,1 -> - -2025-09-14 greek w0 feast8 fast1 exc9 rows=0,9 -> meat,fish,dairy,eggs,wine,oil +2025-09-14 greek w0 feast8 fast1 exc1 rows=0,0 -> meat,fish,dairy,eggs 2025-09-15 greek w1 feast2 fast0 exc0 rows=0,0 -> - 2025-09-16 greek w2 feast2 fast0 exc0 rows=0,0 -> - 2025-09-17 greek w3 feast0 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil 2025-09-18 greek w4 feast0 fast0 exc0 rows=0,0 -> - 2025-09-19 greek w5 feast3 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil -2025-09-20 greek w6 feast3 fast0 exc0 rows=0,0,0 -> - +2025-09-20 greek w6 feast3 fast0 exc1 rows=0,0,0 -> - 2025-09-21 greek w0 feast4 fast0 exc0 rows=0,0,0 -> - 2025-09-22 greek w1 feast2 fast0 exc0 rows=0,0 -> - 2025-09-23 greek w2 feast3 fast0 exc1 rows=0,1 -> - -2025-09-24 greek w3 feast4 fast1 exc2 rows=0,2 -> meat,dairy,eggs +2025-09-24 greek w3 feast4 fast1 exc0 rows=0,2 -> meat,fish,dairy,eggs,wine,oil 2025-09-25 greek w4 feast0 fast0 exc0 rows=0,0 -> - -2025-09-26 greek w5 feast5 fast1 exc2 rows=0,2 -> meat,dairy,eggs +2025-09-26 greek w5 feast5 fast1 exc1 rows=0,2 -> meat,fish,dairy,eggs 2025-09-27 greek w6 feast3 fast0 exc0 rows=0,0 -> - -2025-09-28 greek w0 feast4 fast0 exc1 rows=0,1 -> - +2025-09-28 greek w0 feast4 fast0 exc0 rows=0,1 -> - 2025-09-29 greek w1 feast2 fast0 exc0 rows=0,0 -> - 2025-09-30 greek w2 feast3 fast0 exc0 rows=0,0 -> - 2025-10-01 greek w3 feast0 fast0 exc11 rows=0,11 -> - @@ -2105,7 +2105,7 @@ 2025-10-06 greek w1 feast5 fast0 exc2 rows=0,2 -> - 2025-10-07 greek w2 feast2 fast0 exc0 rows=0,0 -> - 2025-10-08 greek w3 feast0 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil -2025-10-09 greek w4 feast5 fast0 exc2 rows=0,2 -> - +2025-10-09 greek w4 feast5 fast0 exc0 rows=0,2 -> - 2025-10-10 greek w5 feast0 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil 2025-10-11 greek w6 feast0 fast0 exc0 rows=0,0 -> - 2025-10-12 greek w0 feast0 fast0 exc0 rows=0,0,0 -> - @@ -2119,7 +2119,7 @@ 2025-10-20 greek w1 feast2 fast0 exc0 rows=0,0 -> - 2025-10-21 greek w2 feast2 fast0 exc0 rows=0,0 -> - 2025-10-22 greek w3 feast0 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil -2025-10-23 greek w4 feast3 fast0 exc0 rows=0,0 -> - +2025-10-23 greek w4 feast3 fast0 exc1 rows=0,0 -> - 2025-10-24 greek w5 feast0 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil 2025-10-25 greek w6 feast0 fast0 exc0 rows=0,0,0 -> - 2025-10-26 greek w0 feast4 fast0 exc2 rows=0,2 -> - @@ -2139,7 +2139,7 @@ 2025-11-09 greek w0 feast0 fast0 exc0 rows=0,0 -> - 2025-11-10 greek w1 feast0 fast0 exc0 rows=0,0 -> - 2025-11-11 greek w2 feast0 fast0 exc0 rows=0,0 -> - -2025-11-12 greek w3 feast2 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2025-11-12 greek w3 feast2 fast1 exc1 rows=0,0 -> meat,fish,dairy,eggs 2025-11-13 greek w4 feast5 fast0 exc2 rows=0,2 -> - 2025-11-14 greek w5 feast4 fast1 exc1 rows=0,1 -> meat,fish,dairy,eggs 2025-11-15 greek w6 feast0 fast5 exc2 rows=0,0 -> meat,dairy,eggs @@ -2162,19 +2162,19 @@ 2025-12-02 greek w2 feast0 fast5 exc2 rows=0,0 -> meat,dairy,eggs 2025-12-03 greek w3 feast3 fast5 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil 2025-12-04 greek w4 feast0 fast5 exc2 rows=0,0 -> meat,dairy,eggs -2025-12-05 greek w5 feast4 fast5 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2025-12-05 greek w5 feast4 fast5 exc1 rows=0,0 -> meat,fish,dairy,eggs 2025-12-06 greek w6 feast5 fast5 exc2 rows=0,2 -> meat,dairy,eggs 2025-12-07 greek w0 feast3 fast5 exc2 rows=0,0 -> meat,dairy,eggs 2025-12-08 greek w1 feast0 fast5 exc2 rows=0,0 -> meat,dairy,eggs 2025-12-09 greek w2 feast3 fast5 exc2 rows=0,0 -> meat,dairy,eggs 2025-12-10 greek w3 feast0 fast5 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil 2025-12-11 greek w4 feast0 fast5 exc2 rows=0,0 -> meat,dairy,eggs -2025-12-12 greek w5 feast2 fast5 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2025-12-12 greek w5 feast2 fast5 exc1 rows=0,0 -> meat,fish,dairy,eggs 2025-12-13 greek w6 feast0 fast5 exc1 rows=0,0 -> meat,fish,dairy,eggs 2025-12-14 greek w0 feast0 fast5 exc1 rows=0,0,0 -> meat,fish,dairy,eggs -2025-12-15 greek w1 feast2 fast5 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2025-12-15 greek w1 feast2 fast5 exc1 rows=0,0 -> meat,fish,dairy,eggs 2025-12-16 greek w2 feast0 fast5 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil -2025-12-17 greek w3 feast2 fast5 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2025-12-17 greek w3 feast2 fast5 exc1 rows=0,0 -> meat,fish,dairy,eggs 2025-12-18 greek w4 feast0 fast5 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil 2025-12-19 greek w5 feast0 fast5 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil 2025-12-20 greek w6 feast0 fast5 exc1 rows=0,0,0 -> meat,fish,dairy,eggs @@ -2199,26 +2199,26 @@ 2026-01-08 greek w4 feast0 fast0 exc0 rows=0,0 -> - 2026-01-09 greek w5 feast4 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil 2026-01-10 greek w6 feast0 fast0 exc0 rows=0,0,0 -> - -2026-01-11 greek w0 feast4 fast0 exc0 rows=0,0,0 -> - +2026-01-11 greek w0 feast4 fast0 exc1 rows=0,0,0 -> - 2026-01-12 greek w1 feast3 fast0 exc0 rows=0,0 -> - 2026-01-13 greek w2 feast0 fast0 exc0 rows=0,0 -> - -2026-01-14 greek w3 feast4 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2026-01-14 greek w3 feast4 fast1 exc1 rows=0,0 -> meat,fish,dairy,eggs 2026-01-15 greek w4 feast2 fast0 exc0 rows=0,0 -> - -2026-01-16 greek w5 feast2 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2026-01-16 greek w5 feast2 fast1 exc1 rows=0,0 -> meat,fish,dairy,eggs 2026-01-17 greek w6 feast5 fast0 exc2 rows=0,2 -> - -2026-01-18 greek w0 feast2 fast0 exc0 rows=0,0 -> - +2026-01-18 greek w0 feast2 fast0 exc1 rows=0,0 -> - 2026-01-19 greek w1 feast2 fast0 exc0 rows=0,0 -> - 2026-01-20 greek w2 feast5 fast0 exc2 rows=0,2 -> - 2026-01-21 greek w3 feast0 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil -2026-01-22 greek w4 feast0 fast0 exc0 rows=0,0 -> - +2026-01-22 greek w4 feast0 fast0 exc1 rows=0,0 -> - 2026-01-23 greek w5 feast0 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil 2026-01-24 greek w6 feast4 fast0 exc0 rows=0,0 -> - -2026-01-25 greek w0 feast4 fast0 exc0 rows=0,0 -> - +2026-01-25 greek w0 feast4 fast0 exc1 rows=0,0 -> - 2026-01-26 greek w1 feast0 fast0 exc0 rows=0,0 -> - -2026-01-27 greek w2 feast4 fast0 exc0 rows=0,0 -> - +2026-01-27 greek w2 feast4 fast0 exc1 rows=0,0 -> - 2026-01-28 greek w3 feast2 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil 2026-01-29 greek w4 feast2 fast0 exc0 rows=0,0 -> - -2026-01-30 greek w5 feast5 fast1 exc2 rows=0,2 -> meat,dairy,eggs +2026-01-30 greek w5 feast5 fast1 exc1 rows=0,2 -> meat,fish,dairy,eggs 2026-01-31 greek w6 feast3 fast0 exc0 rows=0,0 -> - 2026-02-01 greek w0 feast2 fast0 exc11 rows=0,11 -> - 2026-02-02 greek w1 feast8 fast0 exc11 rows=2,11 -> - @@ -2227,10 +2227,10 @@ 2026-02-05 greek w4 feast0 fast0 exc11 rows=0,11 -> - 2026-02-06 greek w5 feast0 fast0 exc11 rows=0,11 -> - 2026-02-07 greek w6 feast0 fast0 exc11 rows=0,11 -> - -2026-02-08 greek w0 feast2 fast0 exc0 rows=0,0 -> - -2026-02-09 greek w1 feast4 fast0 exc0 rows=0,0 -> - -2026-02-10 greek w2 feast0 fast0 exc0 rows=0,0 -> - -2026-02-11 greek w3 feast3 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2026-02-08 greek w0 feast2 fast0 exc1 rows=0,0 -> - +2026-02-09 greek w1 feast4 fast0 exc1 rows=0,0 -> - +2026-02-10 greek w2 feast0 fast0 exc1 rows=0,0 -> - +2026-02-11 greek w3 feast3 fast1 exc1 rows=0,0 -> meat,fish,dairy,eggs 2026-02-12 greek w4 feast4 fast0 exc0 rows=0,0 -> - 2026-02-13 greek w5 feast0 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil 2026-02-14 greek w6 feast4 fast0 exc0 rows=0,0 -> - @@ -2301,7 +2301,7 @@ 2026-04-20 greek w1 feast0 fast0 exc0 rows=0,0 -> - 2026-04-21 greek w2 feast0 fast0 exc0 rows=0,0 -> - 2026-04-22 greek w3 feast0 fast1 exc1 rows=0,1 -> meat,fish,dairy,eggs -2026-04-23 greek w4 feast5 fast0 exc1 rows=0,1 -> - +2026-04-23 greek w4 feast5 fast0 exc0 rows=0,1 -> - 2026-04-24 greek w5 feast0 fast1 exc1 rows=0,1 -> meat,fish,dairy,eggs 2026-04-25 greek w6 feast4 fast0 exc1 rows=0,1 -> - 2026-04-26 greek w0 feast3 fast0 exc0 rows=0,0 -> - @@ -2316,7 +2316,7 @@ 2026-05-05 greek w2 feast0 fast0 exc0 rows=0,0 -> - 2026-05-06 greek w3 feast0 fast1 exc2 rows=0,2 -> meat,dairy,eggs 2026-05-07 greek w4 feast0 fast0 exc11 rows=0,11 -> - -2026-05-08 greek w5 feast5 fast1 exc2 rows=1,2 -> meat,dairy,eggs +2026-05-08 greek w5 feast5 fast1 exc1 rows=1,2 -> meat,fish,dairy,eggs 2026-05-09 greek w6 feast4 fast0 exc0 rows=0,0 -> - 2026-05-10 greek w0 feast4 fast0 exc0 rows=0,0 -> - 2026-05-11 greek w1 feast0 fast0 exc11 rows=0,11 -> - @@ -2369,15 +2369,15 @@ 2026-06-27 greek w6 feast0 fast3 exc2 rows=0,0 -> meat,dairy,eggs 2026-06-28 greek w0 feast2 fast3 exc2 rows=0,0 -> meat,dairy,eggs 2026-06-29 greek w1 feast6 fast0 exc2 rows=0,2 -> - -2026-06-30 greek w2 feast4 fast0 exc0 rows=0,0 -> - -2026-07-01 greek w3 feast2 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil -2026-07-02 greek w4 feast3 fast0 exc0 rows=0,0 -> - +2026-06-30 greek w2 feast4 fast0 exc1 rows=0,0 -> - +2026-07-01 greek w3 feast2 fast1 exc1 rows=0,0 -> meat,fish,dairy,eggs +2026-07-02 greek w4 feast3 fast0 exc1 rows=0,0 -> - 2026-07-03 greek w5 feast4 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil 2026-07-04 greek w6 feast0 fast0 exc0 rows=0,0 -> - 2026-07-05 greek w0 feast0 fast0 exc0 rows=0,0 -> - 2026-07-06 greek w1 feast0 fast0 exc0 rows=0,0 -> - 2026-07-07 greek w2 feast0 fast0 exc0 rows=0,0 -> - -2026-07-08 greek w3 feast2 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2026-07-08 greek w3 feast2 fast1 exc1 rows=0,0 -> meat,fish,dairy,eggs 2026-07-09 greek w4 feast0 fast0 exc0 rows=0,0 -> - 2026-07-10 greek w5 feast0 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil 2026-07-11 greek w6 feast2 fast0 exc0 rows=0,0 -> - @@ -2386,17 +2386,17 @@ 2026-07-14 greek w2 feast2 fast0 exc0 rows=0,0 -> - 2026-07-15 greek w3 feast0 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil 2026-07-16 greek w4 feast0 fast0 exc0 rows=0,0 -> - -2026-07-17 greek w5 feast4 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2026-07-17 greek w5 feast4 fast1 exc1 rows=0,0 -> meat,fish,dairy,eggs 2026-07-18 greek w6 feast0 fast0 exc0 rows=0,0 -> - 2026-07-19 greek w0 feast0 fast0 exc0 rows=0,0,0 -> - 2026-07-20 greek w1 feast5 fast0 exc2 rows=0,2 -> - 2026-07-21 greek w2 feast0 fast0 exc0 rows=0,0 -> - -2026-07-22 greek w3 feast2 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2026-07-22 greek w3 feast2 fast1 exc1 rows=0,0 -> meat,fish,dairy,eggs 2026-07-23 greek w4 feast0 fast0 exc0 rows=0,0 -> - 2026-07-24 greek w5 feast0 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil -2026-07-25 greek w6 feast3 fast0 exc0 rows=0,0 -> - +2026-07-25 greek w6 feast3 fast0 exc1 rows=0,0 -> - 2026-07-26 greek w0 feast0 fast0 exc11 rows=0,11 -> - -2026-07-27 greek w1 feast2 fast0 exc0 rows=0,0 -> - +2026-07-27 greek w1 feast2 fast0 exc1 rows=0,0 -> - 2026-07-28 greek w2 feast0 fast0 exc0 rows=0,0 -> - 2026-07-29 greek w3 feast0 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil 2026-07-30 greek w4 feast0 fast0 exc0 rows=0,0 -> - @@ -2416,7 +2416,7 @@ 2026-08-13 greek w4 feast4 fast4 exc0 rows=0,4 -> meat,fish,dairy,eggs,wine,oil 2026-08-14 greek w5 feast2 fast4 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil 2026-08-15 greek w6 feast7 fast0 exc2 rows=0,2 -> - -2026-08-16 greek w0 feast5 fast0 exc1 rows=0,1 -> - +2026-08-16 greek w0 feast5 fast0 exc0 rows=0,1 -> - 2026-08-17 greek w1 feast0 fast0 exc0 rows=0,0 -> - 2026-08-18 greek w2 feast0 fast0 exc0 rows=0,0 -> - 2026-08-19 greek w3 feast0 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil @@ -2429,37 +2429,37 @@ 2026-08-26 greek w3 feast4 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil 2026-08-27 greek w4 feast0 fast0 exc0 rows=0,0 -> - 2026-08-28 greek w5 feast0 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil -2026-08-29 greek w6 feast6 fast1 exc8 rows=0,8 -> meat,fish,dairy,eggs +2026-08-29 greek w6 feast6 fast1 exc1 rows=0,8 -> meat,fish,dairy,eggs 2026-08-30 greek w0 feast4 fast0 exc0 rows=0,0 -> - -2026-08-31 greek w1 feast3 fast0 exc0 rows=0,0 -> - +2026-08-31 greek w1 feast3 fast0 exc1 rows=0,0 -> - 2026-09-01 greek w2 feast4 fast0 exc1 rows=0,1 -> - 2026-09-02 greek w3 feast0 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil 2026-09-03 greek w4 feast0 fast0 exc0 rows=0,0 -> - 2026-09-04 greek w5 feast0 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil 2026-09-05 greek w6 feast2 fast0 exc0 rows=0,0 -> - -2026-09-06 greek w0 feast2 fast0 exc0 rows=0,0 -> - +2026-09-06 greek w0 feast2 fast0 exc1 rows=0,0 -> - 2026-09-07 greek w1 feast3 fast0 exc0 rows=0,0 -> - 2026-09-08 greek w2 feast7 fast0 exc2 rows=0,2 -> - -2026-09-09 greek w3 feast3 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2026-09-09 greek w3 feast3 fast1 exc1 rows=0,0 -> meat,fish,dairy,eggs 2026-09-10 greek w4 feast0 fast0 exc0 rows=0,0 -> - 2026-09-11 greek w5 feast4 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil -2026-09-12 greek w6 feast0 fast0 exc1 rows=0,0,1 -> - +2026-09-12 greek w6 feast0 fast0 exc0 rows=0,0,1 -> - 2026-09-13 greek w0 feast3 fast0 exc1 rows=0,0,1 -> - -2026-09-14 greek w1 feast8 fast1 exc9 rows=0,9 -> meat,fish,dairy,eggs,wine,oil +2026-09-14 greek w1 feast8 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil 2026-09-15 greek w2 feast2 fast0 exc0 rows=0,0 -> - 2026-09-16 greek w3 feast2 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil 2026-09-17 greek w4 feast0 fast0 exc0 rows=0,0 -> - 2026-09-18 greek w5 feast0 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil 2026-09-19 greek w6 feast3 fast0 exc0 rows=0,0,0 -> - -2026-09-20 greek w0 feast3 fast0 exc0 rows=0,0,0 -> - +2026-09-20 greek w0 feast3 fast0 exc1 rows=0,0,0 -> - 2026-09-21 greek w1 feast4 fast0 exc0 rows=0,0 -> - 2026-09-22 greek w2 feast2 fast0 exc0 rows=0,0 -> - 2026-09-23 greek w3 feast3 fast1 exc1 rows=0,1 -> meat,fish,dairy,eggs -2026-09-24 greek w4 feast4 fast0 exc2 rows=0,2 -> - +2026-09-24 greek w4 feast4 fast0 exc0 rows=0,2 -> - 2026-09-25 greek w5 feast0 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil 2026-09-26 greek w6 feast5 fast0 exc2 rows=0,2 -> - 2026-09-27 greek w0 feast3 fast0 exc0 rows=0,0 -> - -2026-09-28 greek w1 feast4 fast0 exc1 rows=0,1 -> - +2026-09-28 greek w1 feast4 fast0 exc0 rows=0,1 -> - 2026-09-29 greek w2 feast2 fast0 exc0 rows=0,0 -> - 2026-09-30 greek w3 feast3 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil 2026-10-01 greek w4 feast0 fast0 exc11 rows=0,11 -> - @@ -2470,7 +2470,7 @@ 2026-10-06 greek w2 feast5 fast0 exc2 rows=0,2 -> - 2026-10-07 greek w3 feast2 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil 2026-10-08 greek w4 feast0 fast0 exc0 rows=0,0 -> - -2026-10-09 greek w5 feast5 fast1 exc2 rows=0,2 -> meat,dairy,eggs +2026-10-09 greek w5 feast5 fast1 exc0 rows=0,2 -> meat,fish,dairy,eggs,wine,oil 2026-10-10 greek w6 feast0 fast0 exc0 rows=0,0 -> - 2026-10-11 greek w0 feast0 fast0 exc0 rows=0,0,0 -> - 2026-10-12 greek w1 feast0 fast0 exc0 rows=0,0 -> - @@ -2484,7 +2484,7 @@ 2026-10-20 greek w2 feast2 fast0 exc0 rows=0,0 -> - 2026-10-21 greek w3 feast2 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil 2026-10-22 greek w4 feast0 fast0 exc0 rows=0,0 -> - -2026-10-23 greek w5 feast3 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2026-10-23 greek w5 feast3 fast1 exc1 rows=0,0 -> meat,fish,dairy,eggs 2026-10-24 greek w6 feast0 fast0 exc0 rows=0,0,0 -> - 2026-10-25 greek w0 feast0 fast0 exc0 rows=0,0 -> - 2026-10-26 greek w1 feast4 fast0 exc2 rows=0,2 -> - @@ -2493,7 +2493,7 @@ 2026-10-29 greek w4 feast3 fast0 exc0 rows=0,0 -> - 2026-10-30 greek w5 feast0 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil 2026-10-31 greek w6 feast0 fast0 exc0 rows=0,0 -> - -2026-11-01 greek w0 feast2 fast0 exc0 rows=0,0 -> - +2026-11-01 greek w0 feast2 fast0 exc1 rows=0,0 -> - 2026-11-02 greek w1 feast0 fast0 exc0 rows=0,0 -> - 2026-11-03 greek w2 feast0 fast0 exc0 rows=0,0 -> - 2026-11-04 greek w3 feast0 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil @@ -2504,8 +2504,8 @@ 2026-11-09 greek w1 feast0 fast0 exc0 rows=0,0 -> - 2026-11-10 greek w2 feast0 fast0 exc0 rows=0,0 -> - 2026-11-11 greek w3 feast0 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil -2026-11-12 greek w4 feast2 fast0 exc0 rows=0,0 -> - -2026-11-13 greek w5 feast5 fast1 exc2 rows=0,2 -> meat,dairy,eggs +2026-11-12 greek w4 feast2 fast0 exc1 rows=0,0 -> - +2026-11-13 greek w5 feast5 fast1 exc1 rows=0,2 -> meat,fish,dairy,eggs 2026-11-14 greek w6 feast4 fast0 exc1 rows=0,1 -> - 2026-11-15 greek w0 feast0 fast5 exc2 rows=0,0 -> meat,dairy,eggs 2026-11-16 greek w1 feast6 fast5 exc2 rows=0,2 -> meat,dairy,eggs @@ -2526,20 +2526,20 @@ 2026-12-01 greek w2 feast0 fast5 exc2 rows=0,0 -> meat,dairy,eggs 2026-12-02 greek w3 feast0 fast5 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil 2026-12-03 greek w4 feast3 fast5 exc2 rows=0,0 -> meat,dairy,eggs -2026-12-04 greek w5 feast0 fast5 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2026-12-04 greek w5 feast0 fast5 exc1 rows=0,0 -> meat,fish,dairy,eggs 2026-12-05 greek w6 feast4 fast5 exc2 rows=0,0 -> meat,dairy,eggs 2026-12-06 greek w0 feast5 fast5 exc2 rows=0,2 -> meat,dairy,eggs 2026-12-07 greek w1 feast3 fast5 exc2 rows=0,0 -> meat,dairy,eggs 2026-12-08 greek w2 feast0 fast5 exc2 rows=0,0 -> meat,dairy,eggs -2026-12-09 greek w3 feast3 fast5 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2026-12-09 greek w3 feast3 fast5 exc1 rows=0,0 -> meat,fish,dairy,eggs 2026-12-10 greek w4 feast0 fast5 exc2 rows=0,0 -> meat,dairy,eggs 2026-12-11 greek w5 feast0 fast5 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil 2026-12-12 greek w6 feast2 fast5 exc1 rows=0,0 -> meat,fish,dairy,eggs 2026-12-13 greek w0 feast0 fast5 exc1 rows=0,0,0 -> meat,fish,dairy,eggs 2026-12-14 greek w1 feast0 fast5 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil -2026-12-15 greek w2 feast2 fast5 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2026-12-15 greek w2 feast2 fast5 exc1 rows=0,0 -> meat,fish,dairy,eggs 2026-12-16 greek w3 feast0 fast5 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil -2026-12-17 greek w4 feast2 fast5 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2026-12-17 greek w4 feast2 fast5 exc1 rows=0,0 -> meat,fish,dairy,eggs 2026-12-18 greek w5 feast0 fast5 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil 2026-12-19 greek w6 feast0 fast5 exc1 rows=0,0,0 -> meat,fish,dairy,eggs 2026-12-20 greek w0 feast0 fast5 exc1 rows=0,0,0 -> meat,fish,dairy,eggs @@ -2564,23 +2564,23 @@ 2027-01-08 greek w5 feast0 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil 2027-01-09 greek w6 feast4 fast0 exc0 rows=0,0,0 -> - 2027-01-10 greek w0 feast0 fast0 exc0 rows=0,0,0 -> - -2027-01-11 greek w1 feast4 fast0 exc0 rows=0,0 -> - +2027-01-11 greek w1 feast4 fast0 exc1 rows=0,0 -> - 2027-01-12 greek w2 feast3 fast0 exc0 rows=0,0 -> - 2027-01-13 greek w3 feast0 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil -2027-01-14 greek w4 feast4 fast0 exc0 rows=0,0 -> - +2027-01-14 greek w4 feast4 fast0 exc1 rows=0,0 -> - 2027-01-15 greek w5 feast2 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil -2027-01-16 greek w6 feast2 fast0 exc0 rows=0,0 -> - +2027-01-16 greek w6 feast2 fast0 exc1 rows=0,0 -> - 2027-01-17 greek w0 feast5 fast0 exc2 rows=0,2 -> - -2027-01-18 greek w1 feast2 fast0 exc0 rows=0,0 -> - +2027-01-18 greek w1 feast2 fast0 exc1 rows=0,0 -> - 2027-01-19 greek w2 feast2 fast0 exc0 rows=0,0 -> - -2027-01-20 greek w3 feast5 fast1 exc2 rows=0,2 -> meat,dairy,eggs +2027-01-20 greek w3 feast5 fast1 exc1 rows=0,2 -> meat,fish,dairy,eggs 2027-01-21 greek w4 feast0 fast0 exc0 rows=0,0 -> - -2027-01-22 greek w5 feast0 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2027-01-22 greek w5 feast0 fast1 exc1 rows=0,0 -> meat,fish,dairy,eggs 2027-01-23 greek w6 feast0 fast0 exc0 rows=0,0 -> - 2027-01-24 greek w0 feast5 fast0 exc0 rows=0,0,0 -> - -2027-01-25 greek w1 feast4 fast0 exc0 rows=0,0 -> - +2027-01-25 greek w1 feast4 fast0 exc1 rows=0,0 -> - 2027-01-26 greek w2 feast0 fast0 exc0 rows=0,0 -> - -2027-01-27 greek w3 feast4 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2027-01-27 greek w3 feast4 fast1 exc1 rows=0,0 -> meat,fish,dairy,eggs 2027-01-28 greek w4 feast2 fast0 exc0 rows=0,0 -> - 2027-01-29 greek w5 feast2 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil 2027-01-30 greek w6 feast5 fast0 exc2 rows=0,2 -> - @@ -2592,16 +2592,16 @@ 2027-02-05 greek w5 feast0 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil 2027-02-06 greek w6 feast0 fast0 exc0 rows=0,0 -> - 2027-02-07 greek w0 feast0 fast0 exc0 rows=0,0 -> - -2027-02-08 greek w1 feast2 fast0 exc0 rows=0,0 -> - -2027-02-09 greek w2 feast4 fast0 exc0 rows=0,0 -> - -2027-02-10 greek w3 feast0 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil -2027-02-11 greek w4 feast3 fast0 exc0 rows=0,0 -> - +2027-02-08 greek w1 feast2 fast0 exc1 rows=0,0 -> - +2027-02-09 greek w2 feast4 fast0 exc1 rows=0,0 -> - +2027-02-10 greek w3 feast0 fast1 exc1 rows=0,0 -> meat,fish,dairy,eggs +2027-02-11 greek w4 feast3 fast0 exc1 rows=0,0 -> - 2027-02-12 greek w5 feast4 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil 2027-02-13 greek w6 feast0 fast0 exc0 rows=0,0 -> - 2027-02-14 greek w0 feast4 fast0 exc0 rows=0,0 -> - 2027-02-15 greek w1 feast0 fast0 exc0 rows=0,0 -> - 2027-02-16 greek w2 feast0 fast0 exc0 rows=0,0 -> - -2027-02-17 greek w3 feast4 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2027-02-17 greek w3 feast4 fast1 exc1 rows=0,0 -> meat,fish,dairy,eggs 2027-02-18 greek w4 feast0 fast0 exc0 rows=0,0 -> - 2027-02-19 greek w5 feast0 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil 2027-02-20 greek w6 feast0 fast0 exc0 rows=0,0 -> - @@ -2650,7 +2650,7 @@ 2027-04-04 greek w0 feast0 fast2 exc3 rows=0,3 -> meat,fish,dairy,eggs 2027-04-05 greek w1 feast0 fast2 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil 2027-04-06 greek w2 feast4 fast2 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil -2027-04-07 greek w3 feast4 fast2 exc1 rows=0,1 -> meat,fish,dairy,eggs +2027-04-07 greek w3 feast4 fast2 exc0 rows=0,1 -> meat,fish,dairy,eggs,wine,oil 2027-04-08 greek w4 feast0 fast2 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil 2027-04-09 greek w5 feast1 fast2 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil 2027-04-10 greek w6 feast0 fast2 exc3 rows=0,3 -> meat,fish,dairy,eggs @@ -2666,7 +2666,7 @@ 2027-04-20 greek w2 feast0 fast2 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil 2027-04-21 greek w3 feast1 fast2 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil 2027-04-22 greek w4 feast0 fast2 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil -2027-04-23 greek w5 feast5 fast2 exc1 rows=0,1 -> meat,fish,dairy,eggs +2027-04-23 greek w5 feast5 fast2 exc0 rows=0,1 -> meat,fish,dairy,eggs,wine,oil 2027-04-24 greek w6 feast0 fast2 exc6 rows=0,6 -> meat,fish,dairy,eggs 2027-04-25 greek w0 feast8 fast2 exc4 rows=1,4 -> meat,dairy,eggs 2027-04-26 greek w1 feast3 fast2 exc10 rows=0,10 -> meat,fish,dairy,eggs,wine,oil @@ -2712,7 +2712,7 @@ 2027-06-05 greek w6 feast0 fast0 exc0 rows=0,0 -> - 2027-06-06 greek w0 feast0 fast0 exc0 rows=0,0 -> - 2027-06-07 greek w1 feast0 fast0 exc0 rows=0,0 -> - -2027-06-08 greek w2 feast2 fast0 exc0 rows=0,0 -> - +2027-06-08 greek w2 feast2 fast0 exc1 rows=0,0 -> - 2027-06-09 greek w3 feast3 fast1 exc2 rows=0,2 -> meat,dairy,eggs 2027-06-10 greek w4 feast8 fast0 exc0 rows=0,0 -> - 2027-06-11 greek w5 feast4 fast1 exc1 rows=0,1 -> meat,fish,dairy,eggs @@ -2734,15 +2734,15 @@ 2027-06-27 greek w0 feast0 fast0 exc0 rows=0,0 -> - 2027-06-28 greek w1 feast2 fast3 exc2 rows=0,0 -> meat,dairy,eggs 2027-06-29 greek w2 feast6 fast0 exc2 rows=0,2 -> - -2027-06-30 greek w3 feast4 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil -2027-07-01 greek w4 feast2 fast0 exc0 rows=0,0 -> - -2027-07-02 greek w5 feast3 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2027-06-30 greek w3 feast4 fast1 exc1 rows=0,0 -> meat,fish,dairy,eggs +2027-07-01 greek w4 feast2 fast0 exc1 rows=0,0 -> - +2027-07-02 greek w5 feast3 fast1 exc1 rows=0,0 -> meat,fish,dairy,eggs 2027-07-03 greek w6 feast4 fast0 exc0 rows=0,0 -> - 2027-07-04 greek w0 feast0 fast0 exc0 rows=0,0 -> - 2027-07-05 greek w1 feast0 fast0 exc0 rows=0,0 -> - 2027-07-06 greek w2 feast0 fast0 exc0 rows=0,0 -> - 2027-07-07 greek w3 feast0 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil -2027-07-08 greek w4 feast2 fast0 exc0 rows=0,0 -> - +2027-07-08 greek w4 feast2 fast0 exc1 rows=0,0 -> - 2027-07-09 greek w5 feast0 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil 2027-07-10 greek w6 feast0 fast0 exc0 rows=0,0 -> - 2027-07-11 greek w0 feast2 fast0 exc0 rows=0,0 -> - @@ -2751,17 +2751,17 @@ 2027-07-14 greek w3 feast2 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil 2027-07-15 greek w4 feast0 fast0 exc0 rows=0,0 -> - 2027-07-16 greek w5 feast0 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil -2027-07-17 greek w6 feast4 fast0 exc0 rows=0,0 -> - +2027-07-17 greek w6 feast4 fast0 exc1 rows=0,0 -> - 2027-07-18 greek w0 feast0 fast0 exc0 rows=0,0,0 -> - 2027-07-19 greek w1 feast0 fast0 exc0 rows=0,0 -> - 2027-07-20 greek w2 feast5 fast0 exc2 rows=0,2 -> - 2027-07-21 greek w3 feast0 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil -2027-07-22 greek w4 feast2 fast0 exc0 rows=0,0 -> - +2027-07-22 greek w4 feast2 fast0 exc1 rows=0,0 -> - 2027-07-23 greek w5 feast0 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil 2027-07-24 greek w6 feast0 fast0 exc0 rows=0,0 -> - -2027-07-25 greek w0 feast3 fast0 exc0 rows=0,0 -> - +2027-07-25 greek w0 feast3 fast0 exc1 rows=0,0 -> - 2027-07-26 greek w1 feast0 fast0 exc11 rows=0,11 -> - -2027-07-27 greek w2 feast2 fast0 exc0 rows=0,0 -> - +2027-07-27 greek w2 feast2 fast0 exc1 rows=0,0 -> - 2027-07-28 greek w3 feast0 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil 2027-07-29 greek w4 feast0 fast0 exc0 rows=0,0 -> - 2027-07-30 greek w5 feast0 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil @@ -2781,7 +2781,7 @@ 2027-08-13 greek w5 feast4 fast4 exc0 rows=0,4 -> meat,fish,dairy,eggs,wine,oil 2027-08-14 greek w6 feast2 fast4 exc1 rows=0,0 -> meat,fish,dairy,eggs 2027-08-15 greek w0 feast7 fast0 exc2 rows=0,2 -> - -2027-08-16 greek w1 feast5 fast0 exc1 rows=0,1 -> - +2027-08-16 greek w1 feast5 fast0 exc0 rows=0,1 -> - 2027-08-17 greek w2 feast0 fast0 exc0 rows=0,0 -> - 2027-08-18 greek w3 feast0 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil 2027-08-19 greek w4 feast0 fast0 exc0 rows=0,0 -> - @@ -2794,37 +2794,37 @@ 2027-08-26 greek w4 feast4 fast0 exc0 rows=0,0 -> - 2027-08-27 greek w5 feast0 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil 2027-08-28 greek w6 feast0 fast0 exc0 rows=0,0 -> - -2027-08-29 greek w0 feast6 fast1 exc8 rows=0,8 -> meat,fish,dairy,eggs +2027-08-29 greek w0 feast6 fast1 exc1 rows=0,8 -> meat,fish,dairy,eggs 2027-08-30 greek w1 feast4 fast0 exc0 rows=0,0 -> - -2027-08-31 greek w2 feast3 fast0 exc0 rows=0,0 -> - +2027-08-31 greek w2 feast3 fast0 exc1 rows=0,0 -> - 2027-09-01 greek w3 feast4 fast1 exc1 rows=0,1 -> meat,fish,dairy,eggs 2027-09-02 greek w4 feast0 fast0 exc0 rows=0,0 -> - 2027-09-03 greek w5 feast0 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil 2027-09-04 greek w6 feast0 fast0 exc0 rows=0,0 -> - 2027-09-05 greek w0 feast2 fast0 exc0 rows=0,0 -> - -2027-09-06 greek w1 feast2 fast0 exc0 rows=0,0 -> - +2027-09-06 greek w1 feast2 fast0 exc1 rows=0,0 -> - 2027-09-07 greek w2 feast3 fast0 exc0 rows=0,0 -> - 2027-09-08 greek w3 feast7 fast1 exc2 rows=0,2 -> meat,dairy,eggs -2027-09-09 greek w4 feast3 fast0 exc0 rows=0,0 -> - +2027-09-09 greek w4 feast3 fast0 exc1 rows=0,0 -> - 2027-09-10 greek w5 feast0 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil 2027-09-11 greek w6 feast4 fast0 exc0 rows=0,0,0 -> - -2027-09-12 greek w0 feast0 fast0 exc1 rows=0,0,1 -> - +2027-09-12 greek w0 feast0 fast0 exc0 rows=0,0,1 -> - 2027-09-13 greek w1 feast3 fast0 exc1 rows=0,1 -> - -2027-09-14 greek w2 feast8 fast1 exc9 rows=0,9 -> meat,fish,dairy,eggs,wine,oil +2027-09-14 greek w2 feast8 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil 2027-09-15 greek w3 feast2 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil 2027-09-16 greek w4 feast2 fast0 exc0 rows=0,0 -> - 2027-09-17 greek w5 feast0 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil 2027-09-18 greek w6 feast0 fast0 exc0 rows=0,0,0 -> - 2027-09-19 greek w0 feast3 fast0 exc0 rows=0,0,0 -> - -2027-09-20 greek w1 feast3 fast0 exc0 rows=0,0 -> - +2027-09-20 greek w1 feast3 fast0 exc1 rows=0,0 -> - 2027-09-21 greek w2 feast4 fast0 exc0 rows=0,0 -> - 2027-09-22 greek w3 feast2 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil 2027-09-23 greek w4 feast3 fast0 exc1 rows=0,1 -> - -2027-09-24 greek w5 feast4 fast1 exc2 rows=0,2 -> meat,dairy,eggs +2027-09-24 greek w5 feast4 fast1 exc0 rows=0,2 -> meat,fish,dairy,eggs,wine,oil 2027-09-25 greek w6 feast0 fast0 exc0 rows=0,0 -> - 2027-09-26 greek w0 feast5 fast0 exc2 rows=0,2 -> - 2027-09-27 greek w1 feast3 fast0 exc0 rows=0,0 -> - -2027-09-28 greek w2 feast4 fast0 exc1 rows=0,1 -> - +2027-09-28 greek w2 feast4 fast0 exc0 rows=0,1 -> - 2027-09-29 greek w3 feast2 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil 2027-09-30 greek w4 feast3 fast0 exc0 rows=0,0 -> - 2027-10-01 greek w5 feast0 fast0 exc11 rows=0,11 -> - @@ -2832,10 +2832,10 @@ 2027-10-03 greek w0 feast2 fast0 exc0 rows=0,0 -> - 2027-10-04 greek w1 feast3 fast0 exc0 rows=0,0 -> - 2027-10-05 greek w2 feast3 fast0 exc0 rows=0,0 -> - -2027-10-06 greek w3 feast5 fast1 exc2 rows=0,2 -> meat,dairy,eggs +2027-10-06 greek w3 feast5 fast1 exc1 rows=0,2 -> meat,fish,dairy,eggs 2027-10-07 greek w4 feast2 fast0 exc0 rows=0,0 -> - 2027-10-08 greek w5 feast0 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil -2027-10-09 greek w6 feast5 fast0 exc2 rows=0,2 -> - +2027-10-09 greek w6 feast5 fast0 exc0 rows=0,2 -> - 2027-10-10 greek w0 feast0 fast0 exc0 rows=0,0 -> - 2027-10-11 greek w1 feast0 fast0 exc0 rows=0,0 -> - 2027-10-12 greek w2 feast0 fast0 exc0 rows=0,0 -> - @@ -2849,7 +2849,7 @@ 2027-10-20 greek w3 feast2 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil 2027-10-21 greek w4 feast2 fast0 exc0 rows=0,0 -> - 2027-10-22 greek w5 feast0 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil -2027-10-23 greek w6 feast3 fast0 exc0 rows=0,0,0 -> - +2027-10-23 greek w6 feast3 fast0 exc1 rows=0,0,0 -> - 2027-10-24 greek w0 feast0 fast0 exc0 rows=0,0 -> - 2027-10-25 greek w1 feast0 fast0 exc0 rows=0,0 -> - 2027-10-26 greek w2 feast4 fast0 exc2 rows=0,2 -> - @@ -2858,7 +2858,7 @@ 2027-10-29 greek w5 feast3 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil 2027-10-30 greek w6 feast0 fast0 exc0 rows=0,0 -> - 2027-10-31 greek w0 feast0 fast0 exc0 rows=0,0 -> - -2027-11-01 greek w1 feast2 fast0 exc0 rows=0,0 -> - +2027-11-01 greek w1 feast2 fast0 exc1 rows=0,0 -> - 2027-11-02 greek w2 feast0 fast0 exc0 rows=0,0 -> - 2027-11-03 greek w3 feast0 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil 2027-11-04 greek w4 feast0 fast0 exc0 rows=0,0 -> - @@ -2869,7 +2869,7 @@ 2027-11-09 greek w2 feast0 fast0 exc0 rows=0,0 -> - 2027-11-10 greek w3 feast0 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil 2027-11-11 greek w4 feast0 fast0 exc0 rows=0,0 -> - -2027-11-12 greek w5 feast2 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2027-11-12 greek w5 feast2 fast1 exc1 rows=0,0 -> meat,fish,dairy,eggs 2027-11-13 greek w6 feast5 fast0 exc2 rows=0,2 -> - 2027-11-14 greek w0 feast4 fast0 exc1 rows=0,1 -> - 2027-11-15 greek w1 feast0 fast5 exc2 rows=0,0 -> meat,dairy,eggs @@ -2902,12 +2902,12 @@ 2027-12-12 greek w0 feast2 fast5 exc1 rows=0,0,0 -> meat,fish,dairy,eggs 2027-12-13 greek w1 feast0 fast5 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil 2027-12-14 greek w2 feast0 fast5 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil -2027-12-15 greek w3 feast2 fast5 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2027-12-15 greek w3 feast2 fast5 exc1 rows=0,0 -> meat,fish,dairy,eggs 2027-12-16 greek w4 feast0 fast5 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil -2027-12-17 greek w5 feast2 fast5 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2027-12-17 greek w5 feast2 fast5 exc1 rows=0,0 -> meat,fish,dairy,eggs 2027-12-18 greek w6 feast0 fast5 exc1 rows=0,0,0 -> meat,fish,dairy,eggs 2027-12-19 greek w0 feast0 fast5 exc1 rows=0,0,0 -> meat,fish,dairy,eggs -2027-12-20 greek w1 feast0 fast5 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2027-12-20 greek w1 feast0 fast5 exc1 rows=0,0 -> meat,fish,dairy,eggs 2027-12-21 greek w2 feast0 fast5 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil 2027-12-22 greek w3 feast0 fast5 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil 2027-12-23 greek w4 feast0 fast5 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil @@ -2929,23 +2929,23 @@ 2028-01-08 greek w6 feast0 fast0 exc0 rows=0,0,0 -> - 2028-01-09 greek w0 feast4 fast0 exc0 rows=0,0,0 -> - 2028-01-10 greek w1 feast0 fast0 exc0 rows=0,0 -> - -2028-01-11 greek w2 feast4 fast0 exc0 rows=0,0 -> - +2028-01-11 greek w2 feast4 fast0 exc1 rows=0,0 -> - 2028-01-12 greek w3 feast3 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil 2028-01-13 greek w4 feast0 fast0 exc0 rows=0,0 -> - -2028-01-14 greek w5 feast4 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2028-01-14 greek w5 feast4 fast1 exc1 rows=0,0 -> meat,fish,dairy,eggs 2028-01-15 greek w6 feast2 fast0 exc0 rows=0,0 -> - -2028-01-16 greek w0 feast2 fast0 exc0 rows=0,0 -> - +2028-01-16 greek w0 feast2 fast0 exc1 rows=0,0 -> - 2028-01-17 greek w1 feast5 fast0 exc2 rows=0,2 -> - -2028-01-18 greek w2 feast2 fast0 exc0 rows=0,0 -> - +2028-01-18 greek w2 feast2 fast0 exc1 rows=0,0 -> - 2028-01-19 greek w3 feast2 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil 2028-01-20 greek w4 feast5 fast0 exc2 rows=0,2 -> - 2028-01-21 greek w5 feast0 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil -2028-01-22 greek w6 feast0 fast0 exc0 rows=0,0 -> - +2028-01-22 greek w6 feast0 fast0 exc1 rows=0,0 -> - 2028-01-23 greek w0 feast5 fast0 exc0 rows=0,0,0 -> - 2028-01-24 greek w1 feast4 fast0 exc0 rows=0,0 -> - -2028-01-25 greek w2 feast4 fast0 exc0 rows=0,0 -> - +2028-01-25 greek w2 feast4 fast0 exc1 rows=0,0 -> - 2028-01-26 greek w3 feast0 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil -2028-01-27 greek w4 feast4 fast0 exc0 rows=0,0 -> - +2028-01-27 greek w4 feast4 fast0 exc1 rows=0,0 -> - 2028-01-28 greek w5 feast2 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil 2028-01-29 greek w6 feast2 fast0 exc0 rows=0,0 -> - 2028-01-30 greek w0 feast5 fast0 exc2 rows=0,2 -> - @@ -2966,7 +2966,7 @@ 2028-02-14 greek w1 feast4 fast0 exc0 rows=0,0 -> - 2028-02-15 greek w2 feast0 fast0 exc0 rows=0,0 -> - 2028-02-16 greek w3 feast0 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil -2028-02-17 greek w4 feast4 fast0 exc0 rows=0,0 -> - +2028-02-17 greek w4 feast4 fast0 exc1 rows=0,0 -> - 2028-02-18 greek w5 feast0 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil 2028-02-19 greek w6 feast0 fast0 exc0 rows=0,0 -> - 2028-02-20 greek w0 feast0 fast0 exc0 rows=0,0 -> - @@ -3016,7 +3016,7 @@ 2028-04-04 greek w2 feast0 fast2 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil 2028-04-05 greek w3 feast1 fast2 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil 2028-04-06 greek w4 feast4 fast2 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil -2028-04-07 greek w5 feast4 fast2 exc1 rows=0,1 -> meat,fish,dairy,eggs +2028-04-07 greek w5 feast4 fast2 exc0 rows=0,1 -> meat,fish,dairy,eggs,wine,oil 2028-04-08 greek w6 feast0 fast2 exc6 rows=0,6 -> meat,fish,dairy,eggs 2028-04-09 greek w0 feast8 fast2 exc4 rows=0,4 -> meat,dairy,eggs 2028-04-10 greek w1 feast1 fast2 exc10 rows=0,10 -> meat,fish,dairy,eggs,wine,oil @@ -3032,7 +3032,7 @@ 2028-04-20 greek w4 feast0 fast0 exc11 rows=0,11 -> - 2028-04-21 greek w5 feast0 fast0 exc11 rows=0,11 -> - 2028-04-22 greek w6 feast0 fast0 exc11 rows=0,11 -> - -2028-04-23 greek w0 feast5 fast0 exc1 rows=0,1 -> - +2028-04-23 greek w0 feast5 fast0 exc0 rows=0,1 -> - 2028-04-24 greek w1 feast0 fast0 exc0 rows=0,0 -> - 2028-04-25 greek w2 feast4 fast0 exc1 rows=0,1 -> - 2028-04-26 greek w3 feast3 fast1 exc1 rows=0,1 -> meat,fish,dairy,eggs @@ -3081,7 +3081,7 @@ 2028-06-08 greek w4 feast2 fast0 exc11 rows=0,11 -> - 2028-06-09 greek w5 feast3 fast0 exc11 rows=0,11 -> - 2028-06-10 greek w6 feast4 fast0 exc11 rows=0,11 -> - -2028-06-11 greek w0 feast4 fast0 exc0 rows=0,0 -> - +2028-06-11 greek w0 feast4 fast0 exc1 rows=0,0 -> - 2028-06-12 greek w1 feast2 fast3 exc2 rows=0,0 -> meat,dairy,eggs 2028-06-13 greek w2 feast0 fast3 exc2 rows=0,0 -> meat,dairy,eggs 2028-06-14 greek w3 feast0 fast3 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil @@ -3100,15 +3100,15 @@ 2028-06-27 greek w2 feast0 fast3 exc2 rows=0,0 -> meat,dairy,eggs 2028-06-28 greek w3 feast2 fast3 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil 2028-06-29 greek w4 feast6 fast0 exc2 rows=0,2 -> - -2028-06-30 greek w5 feast4 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil -2028-07-01 greek w6 feast2 fast0 exc0 rows=0,0 -> - -2028-07-02 greek w0 feast3 fast0 exc0 rows=0,0 -> - +2028-06-30 greek w5 feast4 fast1 exc1 rows=0,0 -> meat,fish,dairy,eggs +2028-07-01 greek w6 feast2 fast0 exc1 rows=0,0 -> - +2028-07-02 greek w0 feast3 fast0 exc1 rows=0,0 -> - 2028-07-03 greek w1 feast4 fast0 exc0 rows=0,0 -> - 2028-07-04 greek w2 feast0 fast0 exc0 rows=0,0 -> - 2028-07-05 greek w3 feast0 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil 2028-07-06 greek w4 feast0 fast0 exc0 rows=0,0 -> - 2028-07-07 greek w5 feast0 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil -2028-07-08 greek w6 feast2 fast0 exc0 rows=0,0 -> - +2028-07-08 greek w6 feast2 fast0 exc1 rows=0,0 -> - 2028-07-09 greek w0 feast0 fast0 exc0 rows=0,0 -> - 2028-07-10 greek w1 feast0 fast0 exc0 rows=0,0 -> - 2028-07-11 greek w2 feast2 fast0 exc0 rows=0,0 -> - @@ -3117,17 +3117,17 @@ 2028-07-14 greek w5 feast2 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil 2028-07-15 greek w6 feast0 fast0 exc0 rows=0,0 -> - 2028-07-16 greek w0 feast0 fast0 exc0 rows=0,0,0 -> - -2028-07-17 greek w1 feast4 fast0 exc0 rows=0,0 -> - +2028-07-17 greek w1 feast4 fast0 exc1 rows=0,0 -> - 2028-07-18 greek w2 feast0 fast0 exc0 rows=0,0 -> - 2028-07-19 greek w3 feast0 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil 2028-07-20 greek w4 feast5 fast0 exc2 rows=0,2 -> - 2028-07-21 greek w5 feast0 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil -2028-07-22 greek w6 feast2 fast0 exc0 rows=0,0 -> - +2028-07-22 greek w6 feast2 fast0 exc1 rows=0,0 -> - 2028-07-23 greek w0 feast0 fast0 exc0 rows=0,0 -> - 2028-07-24 greek w1 feast0 fast0 exc0 rows=0,0 -> - -2028-07-25 greek w2 feast3 fast0 exc0 rows=0,0 -> - +2028-07-25 greek w2 feast3 fast0 exc1 rows=0,0 -> - 2028-07-26 greek w3 feast0 fast0 exc11 rows=0,11 -> - -2028-07-27 greek w4 feast2 fast0 exc0 rows=0,0 -> - +2028-07-27 greek w4 feast2 fast0 exc1 rows=0,0 -> - 2028-07-28 greek w5 feast0 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil 2028-07-29 greek w6 feast0 fast0 exc0 rows=0,0 -> - 2028-07-30 greek w0 feast0 fast0 exc0 rows=0,0 -> - @@ -3147,7 +3147,7 @@ 2028-08-13 greek w0 feast4 fast4 exc1 rows=0,4 -> meat,fish,dairy,eggs 2028-08-14 greek w1 feast2 fast4 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil 2028-08-15 greek w2 feast7 fast0 exc2 rows=0,2 -> - -2028-08-16 greek w3 feast5 fast1 exc1 rows=0,1 -> meat,fish,dairy,eggs +2028-08-16 greek w3 feast5 fast1 exc0 rows=0,1 -> meat,fish,dairy,eggs,wine,oil 2028-08-17 greek w4 feast0 fast0 exc0 rows=0,0 -> - 2028-08-18 greek w5 feast0 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil 2028-08-19 greek w6 feast0 fast0 exc0 rows=0,0 -> - @@ -3160,37 +3160,37 @@ 2028-08-26 greek w6 feast4 fast0 exc0 rows=0,0 -> - 2028-08-27 greek w0 feast0 fast0 exc0 rows=0,0 -> - 2028-08-28 greek w1 feast0 fast0 exc0 rows=0,0 -> - -2028-08-29 greek w2 feast6 fast1 exc8 rows=0,8 -> meat,fish,dairy,eggs +2028-08-29 greek w2 feast6 fast1 exc0 rows=0,8 -> meat,fish,dairy,eggs,wine,oil 2028-08-30 greek w3 feast4 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil -2028-08-31 greek w4 feast3 fast0 exc0 rows=0,0 -> - +2028-08-31 greek w4 feast3 fast0 exc1 rows=0,0 -> - 2028-09-01 greek w5 feast4 fast1 exc1 rows=0,1 -> meat,fish,dairy,eggs 2028-09-02 greek w6 feast0 fast0 exc0 rows=0,0 -> - 2028-09-03 greek w0 feast0 fast0 exc0 rows=0,0 -> - 2028-09-04 greek w1 feast0 fast0 exc0 rows=0,0 -> - 2028-09-05 greek w2 feast2 fast0 exc0 rows=0,0 -> - -2028-09-06 greek w3 feast2 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2028-09-06 greek w3 feast2 fast1 exc1 rows=0,0 -> meat,fish,dairy,eggs 2028-09-07 greek w4 feast3 fast0 exc0 rows=0,0 -> - 2028-09-08 greek w5 feast7 fast1 exc2 rows=0,2 -> meat,dairy,eggs -2028-09-09 greek w6 feast3 fast0 exc0 rows=0,0,0 -> - +2028-09-09 greek w6 feast3 fast0 exc1 rows=0,0,0 -> - 2028-09-10 greek w0 feast0 fast0 exc0 rows=0,0,0 -> - 2028-09-11 greek w1 feast4 fast0 exc0 rows=0,0 -> - -2028-09-12 greek w2 feast0 fast0 exc1 rows=0,1 -> - +2028-09-12 greek w2 feast0 fast0 exc0 rows=0,1 -> - 2028-09-13 greek w3 feast3 fast1 exc1 rows=0,1 -> meat,fish,dairy,eggs -2028-09-14 greek w4 feast8 fast1 exc9 rows=0,9 -> meat,fish,dairy,eggs,wine,oil +2028-09-14 greek w4 feast8 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil 2028-09-15 greek w5 feast2 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil 2028-09-16 greek w6 feast2 fast0 exc0 rows=0,0,0 -> - 2028-09-17 greek w0 feast0 fast0 exc0 rows=0,0,0 -> - 2028-09-18 greek w1 feast0 fast0 exc0 rows=0,0 -> - 2028-09-19 greek w2 feast3 fast0 exc0 rows=0,0 -> - -2028-09-20 greek w3 feast3 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2028-09-20 greek w3 feast3 fast1 exc1 rows=0,0 -> meat,fish,dairy,eggs 2028-09-21 greek w4 feast4 fast0 exc0 rows=0,0 -> - 2028-09-22 greek w5 feast2 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil 2028-09-23 greek w6 feast3 fast0 exc1 rows=0,1 -> - -2028-09-24 greek w0 feast4 fast0 exc2 rows=0,2 -> - +2028-09-24 greek w0 feast4 fast0 exc0 rows=0,2 -> - 2028-09-25 greek w1 feast0 fast0 exc0 rows=0,0 -> - 2028-09-26 greek w2 feast5 fast0 exc2 rows=0,2 -> - 2028-09-27 greek w3 feast3 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil -2028-09-28 greek w4 feast4 fast0 exc1 rows=0,1 -> - +2028-09-28 greek w4 feast4 fast0 exc0 rows=0,1 -> - 2028-09-29 greek w5 feast2 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil 2028-09-30 greek w6 feast3 fast0 exc0 rows=0,0 -> - 2028-10-01 greek w0 feast0 fast0 exc11 rows=0,11 -> - @@ -3198,10 +3198,10 @@ 2028-10-03 greek w2 feast2 fast0 exc0 rows=0,0 -> - 2028-10-04 greek w3 feast3 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil 2028-10-05 greek w4 feast3 fast0 exc0 rows=0,0 -> - -2028-10-06 greek w5 feast5 fast1 exc2 rows=0,2 -> meat,dairy,eggs +2028-10-06 greek w5 feast5 fast1 exc1 rows=0,2 -> meat,fish,dairy,eggs 2028-10-07 greek w6 feast2 fast0 exc0 rows=0,0 -> - 2028-10-08 greek w0 feast0 fast0 exc0 rows=0,0 -> - -2028-10-09 greek w1 feast5 fast0 exc2 rows=0,2 -> - +2028-10-09 greek w1 feast5 fast0 exc0 rows=0,2 -> - 2028-10-10 greek w2 feast0 fast0 exc0 rows=0,0 -> - 2028-10-11 greek w3 feast0 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil 2028-10-12 greek w4 feast0 fast0 exc0 rows=0,0 -> - @@ -3215,7 +3215,7 @@ 2028-10-20 greek w5 feast2 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil 2028-10-21 greek w6 feast2 fast0 exc0 rows=0,0,0 -> - 2028-10-22 greek w0 feast0 fast0 exc0 rows=0,0 -> - -2028-10-23 greek w1 feast3 fast0 exc0 rows=0,0 -> - +2028-10-23 greek w1 feast3 fast0 exc1 rows=0,0 -> - 2028-10-24 greek w2 feast0 fast0 exc0 rows=0,0 -> - 2028-10-25 greek w3 feast0 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil 2028-10-26 greek w4 feast4 fast0 exc2 rows=0,2 -> - @@ -3224,18 +3224,18 @@ 2028-10-29 greek w0 feast3 fast0 exc0 rows=0,0 -> - 2028-10-30 greek w1 feast0 fast0 exc0 rows=0,0 -> - 2028-10-31 greek w2 feast0 fast0 exc0 rows=0,0 -> - -2028-11-01 greek w3 feast2 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2028-11-01 greek w3 feast2 fast1 exc1 rows=0,0 -> meat,fish,dairy,eggs 2028-11-02 greek w4 feast0 fast0 exc0 rows=0,0 -> - 2028-11-03 greek w5 feast0 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil 2028-11-04 greek w6 feast5 fast0 exc2 rows=0,0,2 -> - 2028-11-05 greek w0 feast3 fast0 exc0 rows=0,0,0 -> - 2028-11-06 greek w1 feast2 fast0 exc0 rows=0,0 -> - 2028-11-07 greek w2 feast0 fast0 exc0 rows=0,0 -> - -2028-11-08 greek w3 feast5 fast1 exc2 rows=0,2 -> meat,dairy,eggs +2028-11-08 greek w3 feast5 fast1 exc1 rows=0,2 -> meat,fish,dairy,eggs 2028-11-09 greek w4 feast0 fast0 exc0 rows=0,0 -> - 2028-11-10 greek w5 feast0 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil 2028-11-11 greek w6 feast0 fast0 exc0 rows=0,0 -> - -2028-11-12 greek w0 feast2 fast0 exc0 rows=0,0 -> - +2028-11-12 greek w0 feast2 fast0 exc1 rows=0,0 -> - 2028-11-13 greek w1 feast5 fast0 exc2 rows=0,2 -> - 2028-11-14 greek w2 feast4 fast0 exc1 rows=0,1 -> - 2028-11-15 greek w3 feast0 fast5 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil @@ -3259,21 +3259,21 @@ 2028-12-03 greek w0 feast3 fast5 exc2 rows=0,0 -> meat,dairy,eggs 2028-12-04 greek w1 feast0 fast5 exc2 rows=0,0 -> meat,dairy,eggs 2028-12-05 greek w2 feast4 fast5 exc2 rows=0,0 -> meat,dairy,eggs -2028-12-06 greek w3 feast5 fast5 exc2 rows=0,2 -> meat,dairy,eggs +2028-12-06 greek w3 feast5 fast5 exc1 rows=0,2 -> meat,fish,dairy,eggs 2028-12-07 greek w4 feast3 fast5 exc2 rows=0,0 -> meat,dairy,eggs 2028-12-08 greek w5 feast0 fast5 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil 2028-12-09 greek w6 feast3 fast5 exc2 rows=0,0 -> meat,dairy,eggs 2028-12-10 greek w0 feast0 fast5 exc2 rows=0,0 -> meat,dairy,eggs 2028-12-11 greek w1 feast0 fast5 exc2 rows=0,0 -> meat,dairy,eggs -2028-12-12 greek w2 feast2 fast5 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2028-12-12 greek w2 feast2 fast5 exc1 rows=0,0 -> meat,fish,dairy,eggs 2028-12-13 greek w3 feast0 fast5 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil 2028-12-14 greek w4 feast0 fast5 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil -2028-12-15 greek w5 feast2 fast5 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2028-12-15 greek w5 feast2 fast5 exc1 rows=0,0 -> meat,fish,dairy,eggs 2028-12-16 greek w6 feast0 fast5 exc1 rows=0,0 -> meat,fish,dairy,eggs 2028-12-17 greek w0 feast2 fast5 exc1 rows=0,0,0 -> meat,fish,dairy,eggs 2028-12-18 greek w1 feast0 fast5 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil 2028-12-19 greek w2 feast0 fast5 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil -2028-12-20 greek w3 feast0 fast5 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2028-12-20 greek w3 feast0 fast5 exc1 rows=0,0 -> meat,fish,dairy,eggs 2028-12-21 greek w4 feast0 fast5 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil 2028-12-22 greek w5 feast0 fast5 exc0 rows=0,0,0 -> meat,fish,dairy,eggs,wine,oil 2028-12-23 greek w6 feast0 fast5 exc1 rows=0,0,0 -> meat,fish,dairy,eggs @@ -3295,23 +3295,23 @@ 2029-01-08 greek w1 feast0 fast0 exc0 rows=0,0 -> - 2029-01-09 greek w2 feast4 fast0 exc0 rows=0,0 -> - 2029-01-10 greek w3 feast0 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil -2029-01-11 greek w4 feast4 fast0 exc0 rows=0,0 -> - +2029-01-11 greek w4 feast4 fast0 exc1 rows=0,0 -> - 2029-01-12 greek w5 feast3 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil 2029-01-13 greek w6 feast0 fast0 exc0 rows=0,0,0 -> - -2029-01-14 greek w0 feast4 fast0 exc0 rows=0,0 -> - +2029-01-14 greek w0 feast4 fast0 exc1 rows=0,0 -> - 2029-01-15 greek w1 feast2 fast0 exc0 rows=0,0 -> - -2029-01-16 greek w2 feast2 fast0 exc0 rows=0,0 -> - -2029-01-17 greek w3 feast5 fast1 exc2 rows=0,2 -> meat,dairy,eggs -2029-01-18 greek w4 feast2 fast0 exc0 rows=0,0 -> - +2029-01-16 greek w2 feast2 fast0 exc1 rows=0,0 -> - +2029-01-17 greek w3 feast5 fast1 exc1 rows=0,2 -> meat,fish,dairy,eggs +2029-01-18 greek w4 feast2 fast0 exc1 rows=0,0 -> - 2029-01-19 greek w5 feast2 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil 2029-01-20 greek w6 feast5 fast0 exc2 rows=0,2 -> - 2029-01-21 greek w0 feast0 fast0 exc0 rows=0,0 -> - -2029-01-22 greek w1 feast0 fast0 exc0 rows=0,0 -> - +2029-01-22 greek w1 feast0 fast0 exc1 rows=0,0 -> - 2029-01-23 greek w2 feast0 fast0 exc0 rows=0,0 -> - 2029-01-24 greek w3 feast4 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil -2029-01-25 greek w4 feast4 fast0 exc0 rows=0,0 -> - +2029-01-25 greek w4 feast4 fast0 exc1 rows=0,0 -> - 2029-01-26 greek w5 feast0 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil -2029-01-27 greek w6 feast4 fast0 exc0 rows=0,0 -> - +2029-01-27 greek w6 feast4 fast0 exc1 rows=0,0 -> - 2029-01-28 greek w0 feast2 fast0 exc11 rows=0,11 -> - 2029-01-29 greek w1 feast2 fast0 exc11 rows=0,11 -> - 2029-01-30 greek w2 feast5 fast0 exc11 rows=2,11 -> - @@ -3323,10 +3323,10 @@ 2029-02-05 greek w1 feast0 fast0 exc0 rows=0,0 -> - 2029-02-06 greek w2 feast0 fast0 exc0 rows=0,0 -> - 2029-02-07 greek w3 feast0 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil -2029-02-08 greek w4 feast2 fast0 exc0 rows=0,0 -> - -2029-02-09 greek w5 feast4 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil -2029-02-10 greek w6 feast0 fast0 exc0 rows=0,0 -> - -2029-02-11 greek w0 feast3 fast0 exc0 rows=0,0 -> - +2029-02-08 greek w4 feast2 fast0 exc1 rows=0,0 -> - +2029-02-09 greek w5 feast4 fast1 exc1 rows=0,0 -> meat,fish,dairy,eggs +2029-02-10 greek w6 feast0 fast0 exc1 rows=0,0 -> - +2029-02-11 greek w0 feast3 fast0 exc1 rows=0,0 -> - 2029-02-12 greek w1 feast4 fast1 exc7 rows=0,7 -> meat 2029-02-13 greek w2 feast0 fast1 exc7 rows=0,7 -> meat 2029-02-14 greek w3 feast4 fast1 exc7 rows=0,7 -> meat @@ -3397,7 +3397,7 @@ 2029-04-20 greek w5 feast0 fast1 exc1 rows=0,1 -> meat,fish,dairy,eggs 2029-04-21 greek w6 feast0 fast0 exc0 rows=0,0 -> - 2029-04-22 greek w0 feast0 fast0 exc0 rows=0,0 -> - -2029-04-23 greek w1 feast5 fast0 exc1 rows=0,1 -> - +2029-04-23 greek w1 feast5 fast0 exc0 rows=0,1 -> - 2029-04-24 greek w2 feast0 fast0 exc0 rows=0,0 -> - 2029-04-25 greek w3 feast4 fast1 exc1 rows=1,1 -> meat,fish,dairy,eggs 2029-04-26 greek w4 feast3 fast0 exc0 rows=0,0 -> - @@ -3443,7 +3443,7 @@ 2029-06-05 greek w2 feast0 fast3 exc2 rows=0,0 -> meat,dairy,eggs 2029-06-06 greek w3 feast0 fast3 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil 2029-06-07 greek w4 feast0 fast3 exc2 rows=0,0 -> meat,dairy,eggs -2029-06-08 greek w5 feast2 fast3 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2029-06-08 greek w5 feast2 fast3 exc1 rows=0,0 -> meat,fish,dairy,eggs 2029-06-09 greek w6 feast3 fast3 exc2 rows=0,0 -> meat,dairy,eggs 2029-06-10 greek w0 feast4 fast3 exc2 rows=0,0 -> meat,dairy,eggs 2029-06-11 greek w1 feast4 fast3 exc2 rows=0,0 -> meat,dairy,eggs @@ -3464,16 +3464,16 @@ 2029-06-26 greek w2 feast4 fast3 exc2 rows=0,0 -> meat,dairy,eggs 2029-06-27 greek w3 feast0 fast3 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil 2029-06-28 greek w4 feast2 fast3 exc2 rows=0,0 -> meat,dairy,eggs -2029-06-29 greek w5 feast6 fast1 exc2 rows=0,2 -> meat,dairy,eggs -2029-06-30 greek w6 feast4 fast0 exc0 rows=0,0 -> - -2029-07-01 greek w0 feast2 fast0 exc0 rows=0,0 -> - -2029-07-02 greek w1 feast3 fast0 exc0 rows=0,0 -> - +2029-06-29 greek w5 feast6 fast1 exc1 rows=0,2 -> meat,fish,dairy,eggs +2029-06-30 greek w6 feast4 fast0 exc1 rows=0,0 -> - +2029-07-01 greek w0 feast2 fast0 exc1 rows=0,0 -> - +2029-07-02 greek w1 feast3 fast0 exc1 rows=0,0 -> - 2029-07-03 greek w2 feast4 fast0 exc0 rows=0,0 -> - 2029-07-04 greek w3 feast0 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil 2029-07-05 greek w4 feast0 fast0 exc0 rows=0,0 -> - 2029-07-06 greek w5 feast0 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil 2029-07-07 greek w6 feast0 fast0 exc0 rows=0,0 -> - -2029-07-08 greek w0 feast2 fast0 exc0 rows=0,0 -> - +2029-07-08 greek w0 feast2 fast0 exc1 rows=0,0 -> - 2029-07-09 greek w1 feast0 fast0 exc0 rows=0,0 -> - 2029-07-10 greek w2 feast0 fast0 exc0 rows=0,0 -> - 2029-07-11 greek w3 feast2 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil @@ -3482,17 +3482,17 @@ 2029-07-14 greek w6 feast2 fast0 exc0 rows=0,0 -> - 2029-07-15 greek w0 feast0 fast0 exc0 rows=0,0,0 -> - 2029-07-16 greek w1 feast0 fast0 exc0 rows=0,0 -> - -2029-07-17 greek w2 feast4 fast0 exc0 rows=0,0 -> - +2029-07-17 greek w2 feast4 fast0 exc1 rows=0,0 -> - 2029-07-18 greek w3 feast0 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil 2029-07-19 greek w4 feast0 fast0 exc0 rows=0,0 -> - -2029-07-20 greek w5 feast5 fast1 exc2 rows=0,2 -> meat,dairy,eggs +2029-07-20 greek w5 feast5 fast1 exc1 rows=0,2 -> meat,fish,dairy,eggs 2029-07-21 greek w6 feast0 fast0 exc0 rows=0,0 -> - -2029-07-22 greek w0 feast2 fast0 exc0 rows=0,0 -> - +2029-07-22 greek w0 feast2 fast0 exc1 rows=0,0 -> - 2029-07-23 greek w1 feast0 fast0 exc0 rows=0,0 -> - 2029-07-24 greek w2 feast0 fast0 exc0 rows=0,0 -> - -2029-07-25 greek w3 feast3 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2029-07-25 greek w3 feast3 fast1 exc1 rows=0,0 -> meat,fish,dairy,eggs 2029-07-26 greek w4 feast0 fast0 exc11 rows=0,11 -> - -2029-07-27 greek w5 feast2 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2029-07-27 greek w5 feast2 fast1 exc1 rows=0,0 -> meat,fish,dairy,eggs 2029-07-28 greek w6 feast0 fast0 exc0 rows=0,0 -> - 2029-07-29 greek w0 feast0 fast0 exc0 rows=0,0 -> - 2029-07-30 greek w1 feast0 fast0 exc0 rows=0,0 -> - @@ -3512,7 +3512,7 @@ 2029-08-13 greek w1 feast4 fast4 exc0 rows=0,4 -> meat,fish,dairy,eggs,wine,oil 2029-08-14 greek w2 feast2 fast4 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil 2029-08-15 greek w3 feast7 fast1 exc2 rows=0,2 -> meat,dairy,eggs -2029-08-16 greek w4 feast5 fast0 exc1 rows=0,1 -> - +2029-08-16 greek w4 feast5 fast0 exc0 rows=0,1 -> - 2029-08-17 greek w5 feast0 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil 2029-08-18 greek w6 feast0 fast0 exc0 rows=0,0 -> - 2029-08-19 greek w0 feast0 fast0 exc0 rows=0,0 -> - @@ -3525,37 +3525,37 @@ 2029-08-26 greek w0 feast4 fast0 exc0 rows=0,0 -> - 2029-08-27 greek w1 feast0 fast0 exc0 rows=0,0 -> - 2029-08-28 greek w2 feast0 fast0 exc0 rows=0,0 -> - -2029-08-29 greek w3 feast6 fast1 exc8 rows=0,8 -> meat,fish,dairy,eggs +2029-08-29 greek w3 feast6 fast1 exc0 rows=0,8 -> meat,fish,dairy,eggs,wine,oil 2029-08-30 greek w4 feast4 fast0 exc0 rows=0,0 -> - -2029-08-31 greek w5 feast3 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2029-08-31 greek w5 feast3 fast1 exc1 rows=0,0 -> meat,fish,dairy,eggs 2029-09-01 greek w6 feast4 fast0 exc1 rows=0,1 -> - 2029-09-02 greek w0 feast0 fast0 exc0 rows=0,0 -> - 2029-09-03 greek w1 feast0 fast0 exc0 rows=0,0 -> - 2029-09-04 greek w2 feast0 fast0 exc0 rows=0,0 -> - 2029-09-05 greek w3 feast2 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil -2029-09-06 greek w4 feast2 fast0 exc0 rows=0,0 -> - +2029-09-06 greek w4 feast2 fast0 exc1 rows=0,0 -> - 2029-09-07 greek w5 feast3 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil 2029-09-08 greek w6 feast7 fast0 exc2 rows=0,2 -> - -2029-09-09 greek w0 feast3 fast0 exc0 rows=0,0,0 -> - +2029-09-09 greek w0 feast3 fast0 exc1 rows=0,0,0 -> - 2029-09-10 greek w1 feast0 fast0 exc0 rows=0,0 -> - 2029-09-11 greek w2 feast4 fast0 exc0 rows=0,0 -> - -2029-09-12 greek w3 feast0 fast1 exc1 rows=0,1 -> meat,fish,dairy,eggs +2029-09-12 greek w3 feast0 fast1 exc0 rows=0,1 -> meat,fish,dairy,eggs,wine,oil 2029-09-13 greek w4 feast3 fast0 exc1 rows=0,0,1 -> - -2029-09-14 greek w5 feast8 fast1 exc9 rows=0,9 -> meat,fish,dairy,eggs,wine,oil +2029-09-14 greek w5 feast8 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil 2029-09-15 greek w6 feast2 fast0 exc0 rows=0,0,0 -> - 2029-09-16 greek w0 feast2 fast0 exc0 rows=0,0,0 -> - 2029-09-17 greek w1 feast0 fast0 exc0 rows=0,0 -> - 2029-09-18 greek w2 feast0 fast0 exc0 rows=0,0 -> - 2029-09-19 greek w3 feast3 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil -2029-09-20 greek w4 feast3 fast0 exc0 rows=0,0 -> - +2029-09-20 greek w4 feast3 fast0 exc1 rows=0,0 -> - 2029-09-21 greek w5 feast4 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil 2029-09-22 greek w6 feast2 fast0 exc0 rows=0,0 -> - 2029-09-23 greek w0 feast3 fast0 exc1 rows=0,1 -> - -2029-09-24 greek w1 feast4 fast0 exc2 rows=0,2 -> - +2029-09-24 greek w1 feast4 fast0 exc0 rows=0,2 -> - 2029-09-25 greek w2 feast0 fast0 exc0 rows=0,0 -> - -2029-09-26 greek w3 feast5 fast1 exc2 rows=0,2 -> meat,dairy,eggs +2029-09-26 greek w3 feast5 fast1 exc1 rows=0,2 -> meat,fish,dairy,eggs 2029-09-27 greek w4 feast3 fast0 exc0 rows=0,0 -> - -2029-09-28 greek w5 feast4 fast1 exc1 rows=0,1 -> meat,fish,dairy,eggs +2029-09-28 greek w5 feast4 fast1 exc0 rows=0,1 -> meat,fish,dairy,eggs,wine,oil 2029-09-29 greek w6 feast2 fast0 exc0 rows=0,0 -> - 2029-09-30 greek w0 feast3 fast0 exc0 rows=0,0 -> - 2029-10-01 greek w1 feast0 fast0 exc11 rows=0,11 -> - @@ -3566,7 +3566,7 @@ 2029-10-06 greek w6 feast5 fast0 exc2 rows=0,2 -> - 2029-10-07 greek w0 feast2 fast0 exc0 rows=0,0 -> - 2029-10-08 greek w1 feast0 fast0 exc0 rows=0,0 -> - -2029-10-09 greek w2 feast5 fast0 exc2 rows=0,2 -> - +2029-10-09 greek w2 feast5 fast0 exc0 rows=0,2 -> - 2029-10-10 greek w3 feast0 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil 2029-10-11 greek w4 feast0 fast0 exc0 rows=0,0 -> - 2029-10-12 greek w5 feast0 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil @@ -3580,16 +3580,16 @@ 2029-10-20 greek w6 feast2 fast0 exc0 rows=0,0,0 -> - 2029-10-21 greek w0 feast2 fast0 exc0 rows=0,0 -> - 2029-10-22 greek w1 feast0 fast0 exc0 rows=0,0 -> - -2029-10-23 greek w2 feast3 fast0 exc0 rows=0,0 -> - +2029-10-23 greek w2 feast3 fast0 exc1 rows=0,0 -> - 2029-10-24 greek w3 feast0 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil 2029-10-25 greek w4 feast0 fast0 exc0 rows=0,0 -> - -2029-10-26 greek w5 feast4 fast1 exc2 rows=0,2 -> meat,dairy,eggs +2029-10-26 greek w5 feast4 fast1 exc1 rows=0,2 -> meat,fish,dairy,eggs 2029-10-27 greek w6 feast0 fast0 exc0 rows=0,0 -> - 2029-10-28 greek w0 feast3 fast0 exc0 rows=0,0 -> - 2029-10-29 greek w1 feast3 fast0 exc0 rows=0,0 -> - 2029-10-30 greek w2 feast0 fast0 exc0 rows=0,0 -> - 2029-10-31 greek w3 feast0 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil -2029-11-01 greek w4 feast2 fast0 exc0 rows=0,0 -> - +2029-11-01 greek w4 feast2 fast0 exc1 rows=0,0 -> - 2029-11-02 greek w5 feast0 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil 2029-11-03 greek w6 feast5 fast0 exc2 rows=0,0,2 -> - 2029-11-04 greek w0 feast0 fast0 exc0 rows=0,0,0 -> - @@ -3600,11 +3600,11 @@ 2029-11-09 greek w5 feast0 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil 2029-11-10 greek w6 feast0 fast0 exc0 rows=0,0 -> - 2029-11-11 greek w0 feast0 fast0 exc0 rows=0,0 -> - -2029-11-12 greek w1 feast2 fast0 exc0 rows=0,0 -> - +2029-11-12 greek w1 feast2 fast0 exc1 rows=0,0 -> - 2029-11-13 greek w2 feast5 fast0 exc2 rows=0,2 -> - 2029-11-14 greek w3 feast4 fast1 exc1 rows=0,1 -> meat,fish,dairy,eggs 2029-11-15 greek w4 feast0 fast5 exc2 rows=0,0 -> meat,dairy,eggs -2029-11-16 greek w5 feast6 fast5 exc2 rows=0,2 -> meat,dairy,eggs +2029-11-16 greek w5 feast6 fast5 exc1 rows=0,2 -> meat,fish,dairy,eggs 2029-11-17 greek w6 feast3 fast5 exc2 rows=0,0 -> meat,dairy,eggs 2029-11-18 greek w0 feast0 fast5 exc2 rows=0,0 -> meat,dairy,eggs 2029-11-19 greek w1 feast3 fast5 exc2 rows=0,0 -> meat,dairy,eggs @@ -3618,27 +3618,27 @@ 2029-11-27 greek w2 feast2 fast5 exc2 rows=0,0 -> meat,dairy,eggs 2029-11-28 greek w3 feast2 fast5 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil 2029-11-29 greek w4 feast0 fast5 exc2 rows=0,0 -> meat,dairy,eggs -2029-11-30 greek w5 feast4 fast5 exc2 rows=0,2 -> meat,dairy,eggs +2029-11-30 greek w5 feast4 fast5 exc1 rows=0,2 -> meat,fish,dairy,eggs 2029-12-01 greek w6 feast0 fast5 exc2 rows=0,0 -> meat,dairy,eggs 2029-12-02 greek w0 feast0 fast5 exc2 rows=0,0 -> meat,dairy,eggs 2029-12-03 greek w1 feast3 fast5 exc2 rows=0,0 -> meat,dairy,eggs 2029-12-04 greek w2 feast0 fast5 exc2 rows=0,0 -> meat,dairy,eggs -2029-12-05 greek w3 feast4 fast5 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2029-12-05 greek w3 feast4 fast5 exc1 rows=0,0 -> meat,fish,dairy,eggs 2029-12-06 greek w4 feast5 fast5 exc2 rows=0,2 -> meat,dairy,eggs 2029-12-07 greek w5 feast3 fast5 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil 2029-12-08 greek w6 feast0 fast5 exc2 rows=0,0 -> meat,dairy,eggs 2029-12-09 greek w0 feast3 fast5 exc2 rows=0,0 -> meat,dairy,eggs 2029-12-10 greek w1 feast0 fast5 exc2 rows=0,0 -> meat,dairy,eggs 2029-12-11 greek w2 feast0 fast5 exc2 rows=0,0 -> meat,dairy,eggs -2029-12-12 greek w3 feast2 fast5 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2029-12-12 greek w3 feast2 fast5 exc1 rows=0,0 -> meat,fish,dairy,eggs 2029-12-13 greek w4 feast0 fast5 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil 2029-12-14 greek w5 feast0 fast5 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil 2029-12-15 greek w6 feast2 fast5 exc1 rows=0,0 -> meat,fish,dairy,eggs 2029-12-16 greek w0 feast0 fast5 exc1 rows=0,0,0 -> meat,fish,dairy,eggs -2029-12-17 greek w1 feast2 fast5 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2029-12-17 greek w1 feast2 fast5 exc1 rows=0,0 -> meat,fish,dairy,eggs 2029-12-18 greek w2 feast0 fast5 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil 2029-12-19 greek w3 feast0 fast5 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil -2029-12-20 greek w4 feast0 fast5 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil +2029-12-20 greek w4 feast0 fast5 exc1 rows=0,0 -> meat,fish,dairy,eggs 2029-12-21 greek w5 feast0 fast5 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil 2029-12-22 greek w6 feast0 fast5 exc1 rows=0,0,0 -> meat,fish,dairy,eggs 2029-12-23 greek w0 feast0 fast5 exc1 rows=0,0,0 -> meat,fish,dairy,eggs diff --git a/calendarium/tests/test_liturgics.py b/calendarium/tests/test_liturgics.py index 06bcb244..046461ac 100644 --- a/calendarium/tests/test_liturgics.py +++ b/calendarium/tests/test_liturgics.py @@ -498,6 +498,74 @@ async def test_apostles_fast_is_lighter_for_greek(self): self.assertEqual(greek.fast_exception_desc, greek_desc) self.assertEqual(slavic.fast_exception_desc, slavic_desc) + async def test_greek_fixed_date_wine_oil_grants(self): + """GOA relaxes a fast to wine and oil on a fixed list of saints' days + that our own feast ranks do not pick out -- St Eleutherius (Dec 15) is + feast_level 2 here, and St Barbara (Dec 4) is level 0. + + Dec 15 2026 is a Tuesday inside the Nativity fast's second phase, where + the season floor is strict; goarch.org marks it `grapes`. Slavic + practice has no such grant and stays on the season's own pattern. + See fasting.GREEK_WINE_OIL_DATES.""" + + greek = liturgics.Day(2026, 12, 15, tradition=Tradition.Greek) + slavic = liturgics.Day(2026, 12, 15, tradition=Tradition.Slavic) + await greek.ainitialize() + await slavic.ainitialize() + + self.assertEqual(greek.fast_exception_desc, 'Wine and Oil are Allowed') + self.assertEqual(slavic.fast_exception_desc, 'Wine and Oil are Allowed') + + async def test_greek_caps_a_saints_fish_on_wednesday_and_friday(self): + """Typikon Chapter X allows fish on a Wednesday or Friday only for a + feast of the Lord. GOA applies that as a cap: St Nicholas carries a + fish grant, but on Dec 6 2028, a Wednesday, goarch.org gives only + `grapes`. Rank does not save him -- he is feast_level 5, above several + days that do keep fish.""" + + greek = liturgics.Day(2028, 12, 6, tradition=Tradition.Greek) + await greek.ainitialize() + + self.assertEqual(greek.feast_level, 5) + self.assertEqual(greek.fast_exception_desc, 'Wine and Oil are Allowed') + + async def test_greek_beheading_is_strict_except_at_the_weekend(self): + """Our data relaxes the Beheading of the Forerunner to wine and oil. + goarch.org keeps it strict on all five weekdays -- seven observations + across ten years, never once relaxed -- while allowing wine and oil + when it falls at the weekend, which is the ordinary weekend relief + rather than anything about the feast. + + Aug 29 2028 is a Tuesday; Aug 29 2026 is a Saturday.""" + + weekday = liturgics.Day(2028, 8, 29, tradition=Tradition.Greek) + weekend = liturgics.Day(2026, 8, 29, tradition=Tradition.Greek) + slavic = liturgics.Day(2028, 8, 29, tradition=Tradition.Slavic) + await weekday.ainitialize() + await weekend.ainitialize() + await slavic.ainitialize() + + self.assertEqual(weekday.fast_exception_desc, '') + self.assertEqual(weekend.fast_exception_desc, 'Wine and Oil are Allowed') + # Slavic keeps the row's own label, "Strict Fast (Wine and Oil)" -- a + # fast day that nonetheless allows wine and oil, which is the same rung + # the Greek weekend reaches by a different route. + self.assertEqual(slavic.fast_exception_desc, 'Strict Fast (Wine and Oil)') + + async def test_greek_cheesefare_week_is_a_meat_fast_throughout(self): + """Cheesefare week needs its own Greek season only so that the + Wednesday/Friday no-fish cap does not reach it: that cap means "no fish + for a saint", and clamping a week whose whole point is that only meat is + given up turned it into a stricter fast than the Lent it precedes. + goarch.org marks all seven days `fast-day`, Wednesday and Friday + included. 2026's Cheesefare week is Feb 16-22.""" + + for day_of_month in range(16, 23): + with self.subTest(day_of_month): + greek = liturgics.Day(2026, 2, day_of_month, tradition=Tradition.Greek) + await greek.ainitialize() + self.assertEqual(greek.fast_exception_desc, 'Meat Fast') + async def test_dormition_fast_grants_no_rank_based_exception(self): """Regression test for a data bug reported directly against production: Aug 9, 2026 (St Herman of Alaska's Vigil-rank feast) diff --git a/data/goarch_fasting.json b/data/goarch_fasting.json index 74555332..ed3bf350 100644 --- a/data/goarch_fasting.json +++ b/data/goarch_fasting.json @@ -1,5 +1,5 @@ { - "_comment": "GOA daily fasting designations, harvested 2026-09-09 from goarch.org/chapel/calendar?month=M&year=Y&viewStyle=GridView&viewType=ViewReadings via a real browser (Cloudflare blocks scripted access; the user cleared the interstitial, then months were fetched same-origin). The grid encodes fasting as a CSS class on div.day, NOT in the page text: 'strict-fast'=S, 'grapes'=W (wine and oil), 'fasting-fish'=F, 'fast-day'=D (dairy allowed, i.e. a meat fast -- confusingly, that class marks the MILDEST level and appears only in Cheesefare week), absent=N (fast free). Mapping confirmed against March 2026, where Lenten weekdays are S, weekends W, and the Annunciation is F. One character per day, index 0 = the 1st.", + "_comment": "GOA daily fasting designations, harvested 2026-09-09 and 2026-09-10 from goarch.org/chapel/calendar?month=M&year=Y&viewStyle=GridView&viewType=ViewReadings via a real browser (Cloudflare blocks scripted access; the user cleared the interstitial, then months were fetched same-origin). The grid encodes fasting as a CSS class on div.day, NOT in the page text: 'strict-fast'=S, 'grapes'=W (wine and oil), 'fasting-fish'=F, 'fast-day'=D (dairy allowed, i.e. a meat fast -- confusingly, that class marks the MILDEST level and appears only in Cheesefare week), absent=N (fast free). Mapping confirmed against March 2026, where Lenten weekdays are S, weekends W, and the Annunciation is F. One character per day, index 0 = the 1st.", "2025-12": "FFSFWFFFFSFWWWWSWSSWWSSSNNNNNNN", "2026-01": "NNNNSNFNSNNNNWNWNNNNSNSNNNNSNWN", "2026-02": "NNNNNNNNNNWNSNNDDDDDDDSWSSSW", @@ -36,5 +36,89 @@ "2028-09": "WNNNNWNFNNNNWSSNNNNWNSNNNNSNSN", "2028-10": "NNNSNWNNNNSNSNNNNSNSNNNNSNSNNNN", "2028-11": "WNSNNNNWNSNNNNSFSFFFFSFSFFFFSF", - "2028-12": "SFFFFWFSFFFWSSWWWSSWSSWWNNNNNNN" + "2028-12": "SFFFFWFSFFFWSSWWWSSWSSWWNNNNNNN", + "2029-01": "NNNNSNNNNSNSNNNNWNSNNNNSNSNNNNN", + "2029-02": "NNNNNNSNWNNDDDDDDDSSSSSWWSSS", + "2029-03": "SSWWSSSSWWWSSSSSWWSSSWSWFWSSSSW", + "2029-04": "FSSSWSSNNNNNNNNNNWNWNNNNWNWNNN", + "2029-05": "NFNWNNNNWNWNNNNFNWNNNNWNWNNNNNN", + "2029-06": "NNNFFSFWFFFFSFSFFFFSFSFFFFSFFN", + "2029-07": "NNNSNSNNNNSNSNNNNSNWNNNNWNWNNNN", + "2029-08": "SSSWWFSSSSWWSSFNSNNNNSNSNNNNSNW", + "2029-09": "NNNNSNSNNNNSNSNNNNSNSNNNNWNSNN", + "2029-10": "NNSNSNNNNSNSNNNNSNSNNNNSNWNNNNS", + "2029-11": "NSNNNNSNSNNNNFFWFFFFFFSFFFFSFW", + "2029-12": "FFFFWFSFFFFWSSWWWSSWSWWSNNNNNNN", + "2030-01": "NNNNWNNNSNWNNNNWNWNNNNSNWNNNNWN", + "2030-02": "SNNNNSNWNNNNSNSNNNNNNNNNNNSN", + "2030-03": "SNNDDDDDDDSSSSSWWSSSSSWWFWSSSWW", + "2030-04": "SSSSSWWSSSWSWWSSSSSWFSSSWSSNNN", + "2030-05": "NNNNNNNWNWNNNNWNWNNNNFNWNNNNWNW", + "2030-06": "NNNNFNWNNNNWNWNNNNNNNNNFFSFSNN", + "2030-07": "NNSNSNNNNSNSNNNNWNSNNNNSNWNNNNS", + "2030-08": "SSWWSFSSSWWSSSNSNNNNSNSNNNNSSSN", + "2030-09": "NNNSNWNNNNSNWWNNNSNWNNNNSNSNNN", + "2030-10": "NSNSNNNNSNSNNNNSNSNNNNWNSNNNNSN", + "2030-11": "WNNNNSNWNNNNWNSFFFFSFSFFFFSFSF", + "2030-12": "FFFWFWFFFFSWSWWSWSSWWWSSNNNNNNN", + "2031-01": "NNNNWNNSNSNNNNSNWNNNNWNSNNNNSNS", + "2031-02": "NNNNNNNNNNNSNSNNDDDDDDDSSSSS", + "2031-03": "WWSSSSSWWSSSSSWWSSSSSWWSFWWSWWS", + "2031-04": "SSSSWFSSSWSSNNNNNNNNNNWNWNNNNW", + "2031-05": "NWNNNNFNWNNNNWNWNNNNWNWNNNNWNWN", + "2031-06": "NNNNNNNNFFWFSFFFFSFSFFFFSFSFNN", + "2031-07": "NWNSNNNNSNSNNNNSNSNNNNSNWNNNNSN", + "2031-08": "SWWSSFSSWWSSSSFNNNNSNSNNNNSNSNN", + "2031-09": "NNSNSNNNNSNSNWNNSNSNNNNSNWNNNN", + "2031-10": "WNSNNNNSNSNNNNSNSNNNNSNSNNNNSNS", + "2031-11": "NNNNSNSNNNNWNFFFFFSFFFFFFSFSFF", + "2031-12": "FFSFWFFFFSFWWWWSWSSWWSSSNNNNNNN", + "2032-01": "NNNNSNFNSNNNNWNWNNNNSNSNNNNSNWN", + "2032-02": "NNNSNSNNNNWNSNNNNSNSNNNNNNNNN", + "2032-03": "NNSNSNNDDDDDDDSSSSSWWSSSFWWWSSS", + "2032-04": "SSWWSSSSSWWSSSWSWWSSSSSWFSSSWS", + "2032-05": "SNNNNNNNNNNWNWNNNNWNWNNNNFNWNNN", + "2032-06": "NWNWNNNNFNWNNNNWNWNNNNNNNNNFNW", + "2032-07": "NWNNNNSNSNNNNSNSNNNNSNSNNNNSNSN", + "2032-08": "WSSSSFWWSSSSSWNNNSNSNNNNSNSNWNN", + "2032-09": "WNSNNNNFNSNNNSSNSNNNNSNSNNNNSN", + "2032-10": "WNNNNWNSNNNNSNSNNNNSNSNNNNSNSNN", + "2032-11": "NNSNSNNNNSNWNNFFSFSFFFFSFSFFFF", + "2032-12": "SFSFFFFSFSFWSSWSWWWWSSSSNNNNNNN", + "2033-01": "NNNNSNFNNNNSNWNNNNSNSNNNNSNSNNN", + "2033-02": "NFNSNNNNSNWNNNNNNNNNNNSNSNND", + "2033-03": "DDDDDDSSWSSWWSSSSSWWSSSSFWWSSSS", + "2033-04": "SWWSSSWSWWSSSSSWFSSSWSSNNNNNNN", + "2033-05": "NNNWNWNNNNWNWNNNNFNWNNNNWNWNNNN", + "2033-06": "FNWNNNNWNWNNNNNNNNNFFSFFFFFFFN", + "2033-07": "WNNNNSNWNNNNSNSNNNNWNWNNNNWNSNN", + "2033-08": "SSSSSFWSSSSSWWNNSNSNNNNSNSNNSNW", + "2033-09": "NSNNNNSNWNNNNSNSNNNNSNWNNNNSNS", + "2033-10": "NNNNSNSNNNNSNSNNNNSNSNNNNWNSNNN", + "2033-11": "NSNSNNNNSNSNNNFWFSFFFFSFWFFFFW", + "2033-12": "FSFFFFSFWFFWSSWSWWSWSSSWNNNNNNN", + "2034-01": "NNNNSNNNNNWNSNNNNWNWNNNNWNWNNNN", + "2034-02": "NNNNNNNWNWNNDDDDDDDSSSSWWWSS", + "2034-03": "SSSWWSSSWSWWSSSSSWWSSSWSFWSSSSS", + "2034-04": "WFSSSWSSNNNNNNNNNNWNWNNNNWNWNN", + "2034-05": "NNFNWNNNNWNWNNNNFNWNNNNWNWNNNNN", + "2034-06": "NNNNFFSFSFFFFSFSFFFFSFSFFFFSNW", + "2034-07": "NNNNSNSNNNNSNSNNNNSNSNNNNWNSNNN", + "2034-08": "SSSSWFSSSSSWWSNSNSNNNNSNSNNNSSN", + "2034-09": "WNNNNWNFNNNNWSSNNNNWNSNNNNSNSN", + "2034-10": "NNNSNWNNNNSNSNNNNSNSNNNNSNSNNNN", + "2034-11": "WNSNNNNWNSNNNNSFSFFFFSFSFFFFSF", + "2034-12": "SFFFFWFSFFFWSSWWWSSWSSWWNNNNNNN", + "2035-01": "NNNNSNNNNSNSNNNNWNSNNNNSNSNNNNS", + "2035-02": "NFNNNNSNSNNNNSNSNNNNNNNNNNNS", + "2035-03": "NSNNDDDDDDDSSSSSWWSSSSSWFWSSSSW", + "2035-04": "WSSSSSWWSSSWSWWSSSSSWFSSSWSSNN", + "2035-05": "NNNNNNNNWNWNNNNWNWNNNNFNWNNNNWN", + "2035-06": "WNNNNFNWNNNNWNWNNNNNNNNNFFSFFN", + "2035-07": "NNNSNSNNNNSNSNNNNSNWNNNNWNWNNNN", + "2035-08": "SSSWWFSSSSWWSSFNSNNNNSNSNNNNSNW", + "2035-09": "NNNNSNSNNNNSNSNNNNSNSNNNNWNSNN", + "2035-10": "NNSNSNNNNSNSNNNNSNSNNNNSNWNNNNS", + "2035-11": "NSNNNNSNSNNNNFFWFFFFFFSFFFFSFW", + "2035-12": "FFFFWFSFFFFWSSWWWSSWSWWSNNNNNNN" } diff --git a/docs/fasting-refactor-scope.md b/docs/fasting-refactor-scope.md index e4d23225..34f4f5cc 100644 --- a/docs/fasting-refactor-scope.md +++ b/docs/fasting-refactor-scope.md @@ -515,7 +515,59 @@ differences when the app had them right. Worth recording because it is the second time in this work that a "finding" turned out to be an artifact of how the comparison was set up. -### What the remaining 53 are +### Extended to ten years (2026-09-10) + +The harvest was extended to **121 months -- Dec 2025 plus every month of 2026 +through 2035, 3,683 days.** Ten years is the threshold that matters: a fixed +date reaches a Wednesday or Friday in roughly two years out of seven, and those +are the only days on which an ordinary-time relaxation is visible at all. + +| | | +|---|---| +| three-year state | 95.3% | +| ten-year baseline (more data, more gaps) | 94.8% | +| `GREEK_WINE_OIL_DATES` (38 dates) | 97.8% | +| Wednesday/Friday fish cap + `CHEESEFARE_GREEK` | 98.5% | +| Nativity cap raised to rank 7 | 99.3% | +| `GREEK_STRICT_DATES`, scoped to festal rows | **99.4%** | + +**22 differences remain across ten years -- about two a year.** + +Five things came out of it, in rough order of how much they moved the number. + +**The fixed-date grant list is data, not a rule.** 38 dates on which GOA relaxes +a fast to wine and oil. Their `feast_level` here runs 0, 2, 3 and 4 -- Barbara +and Ignatius are level 0 -- so no threshold picks them out, which is the same +reason Ch. 33's rank grants failed. It lives in `fasting.py` rather than the +fixture because a `greek` Day row *replaces* the `common` one outright, so +encoding it as data would mean duplicating 38 feast names that would then drift. + +**The Wednesday/Friday fish cap is real, and the confound is broken.** A saint's +fish grant falls back to wine and oil on a Wednesday or Friday, however highly +ranked -- fourteen saints at levels 4, 5 and 6. Feasts of the Lord and of the +Theotokos keep fish, which `cap_exempt_rank=7` expresses, plus three +lower-ranked Lord days named explicitly. **GOA does not honour Chapter X's "or +one of the 12 Apostles" clause**: John the Theologian, Thomas, Matthew and +Andrew are all capped. + +**The same cap holds inside the Nativity fast.** `NATIVITY_GREEK_EARLY` had +`cap_exempt_rank=4`, which let St Matthew, St Andrew and St Nicholas through. It +is 7 now, matching ordinary time. + +**Cheesefare week needed rescuing from that cap.** Adding a Wednesday/Friday cap +to Greek ordinary time silently clamped the week before Lent -- whose whole +point is that only meat is given up -- into a fast stricter than the Lent it +precedes. It has its own season now. The characterisation caught it +immediately. + +**`GREEK_STRICT_DATES` is the mirror image**: nine dates whose festal grant GOA +does not recognise, chiefly the Beheading of the Forerunner, strict on all five +weekdays across seven observations. Dropping the *festal* claim and letting the +season floor stand is what makes the weekend relief still work; a first attempt +dropped every claim and made Lenten Saturdays stricter than the Saturdays either +side of them. + +### What the earlier three-year pass had said the remaining 53 were **36 -- per-date wine and oil grants we lack.** GOA lifts an ordinary Wednesday or Friday to wine and oil for a large set of saints: Barbara, Spyridon, diff --git a/fixtures/calendarium.json b/fixtures/calendarium.json index ad23ee5c..a881e50d 100644 --- a/fixtures/calendarium.json +++ b/fixtures/calendarium.json @@ -17174,7 +17174,7 @@ "service_note": "", "story": null, "fast": 1, - "fast_exception": 9, + "fast_exception": 0, "flag": 0, "tradition": "greek" } From 655bd8c883ed546d80550c7fc94fd1d369f4caec Mon Sep 17 00:00:00 2001 From: Brian Glass Date: Thu, 10 Sep 2026 13:05:40 -0400 Subject: [PATCH 17/20] Chase the last stragglers; goarch agreement 99.4% -> 99.9% Five differences remain across ten years, and two of them are goarch.org disagreeing with itself, so this is close to the ceiling the data supports. The substantive find: four greek rows were forcing fast-free on days GOA fasts. May 7, May 11, Jul 26 and Oct 1 carried fast_exception 11, set by the August 2026 pass that corrected nine stale rows -- from antiochian.org, before this tradition was settled as GOA. Index 11 short-circuits the whole rule, so those dates came out fast-free even on a Wednesday or Friday, where GOA gives wine and oil. Zeroing them lets the Paschal row supply the fast level again, which is weekday-aware; three then also needed adding to GREEK_WINE_OIL_DATES. That August table is the same jurisdictional mismatch as the Nativity boundary and the Apostles' fast, and it had been in the data for a fortnight. docs/greek-fasting.md now marks it superseded and says which of the nine survived the recheck: the four set to Strict are right, the five set to No Fast or Wine & Oil were not. (2, 9) was in both GREEK_WINE_OIL_DATES and GREEK_STRICT_DATES, so the grant silently won. GOA gives strict on two of its three Wednesday/Friday observations, so it belongs only in the latter. Peter and Paul and St Philip keep fish against the Wednesday/Friday cap, three observations each. Both sit on a fast boundary, which is the likeliest reason though two feasts cannot establish it. They needed different mechanisms: Peter and Paul already claims fish so a cap exemption suffices, while our Philip row claims only wine and oil, so there is nothing for an exemption to protect and GREEK_FISH_DATES grants it outright. Checked and deliberately not chased: the Leavetaking of Pascha is fish on nine of its ten Wednesdays, so the pdist exemption stays and 2031 is left wrong; Feb 24 and Mar 9 fall in Clean Week, where fast_exception 10, "no overrides", caps the grant, and letting a fixed-date grant through a sentinel that exists to stop overrides is not worth three days in ten years. Characterisation moves 9 days, all Greek. 195 tests pass. Co-Authored-By: Claude Opus 5 Claude-Session: https://claude.ai/code/session_019nQRjJpPqW89xqzAf1vsEX --- calendarium/fasting.py | 26 +++++++-- calendarium/liturgics/day.py | 1 + .../tests/data/fasting-characterization.txt | 58 +++++++++---------- docs/fasting-refactor-scope.md | 39 +++++++++++++ docs/greek-fasting.md | 10 ++++ fixtures/calendarium.json | 8 +-- 6 files changed, 105 insertions(+), 37 deletions(-) diff --git a/calendarium/fasting.py b/calendarium/fasting.py index 938e80cd..0eddb120 100644 --- a/calendarium/fasting.py +++ b/calendarium/fasting.py @@ -214,13 +214,14 @@ def cap_for(self, weekday, feast_level): # real but the list as a whole is a floor, not a census. GREEK_WINE_OIL_DATES = frozenset({ (1, 11), (1, 14), (1, 16), (1, 18), (1, 22), (1, 25), (1, 27), - (2, 8), (2, 9), (2, 10), (2, 11), (2, 17), (2, 24), + (2, 8), (2, 10), (2, 11), (2, 17), (2, 24), (3, 9), (6, 8), (6, 11), (6, 30), - (7, 1), (7, 2), (7, 8), (7, 17), (7, 22), (7, 25), (7, 27), + (5, 11), + (7, 1), (7, 2), (7, 8), (7, 17), (7, 22), (7, 25), (7, 26), (7, 27), (8, 31), (9, 6), (9, 9), (9, 20), - (10, 23), + (10, 1), (10, 23), (11, 1), (11, 12), (12, 4), (12, 5), (12, 9), (12, 12), (12, 15), (12, 17), (12, 20), }) @@ -242,6 +243,20 @@ def cap_for(self, weekday, feast_level): # Three Lord-feast days our data ranks lower need naming explicitly. GREEK_WED_FRI_FISH_OK_DATES = frozenset({ (1, 7), # Synaxis of the Forerunner, in Theophany's afterfeast + # Two apostles that do keep fish, against the general rule above. Both sit + # on a fast boundary -- Peter and Paul closes the Apostles' fast, Philip is + # the eve of the Nativity fast -- which is the likeliest reason, though two + # feasts cannot establish it. Three Wednesday/Friday observations each, + # fish every time. + (6, 29), # Holy Apostles Peter and Paul +}) + +# St Philip is the same case as Peter and Paul, but needs a grant rather than a +# cap exemption: our row for him claims only wine and oil, so there is no fish +# for an exemption to protect. Three Wednesday/Friday observations, fish each +# time -- he is the eve of the Nativity fast. +GREEK_FISH_DATES = frozenset({ + (11, 14), # Holy Apostle Philip }) GREEK_WED_FRI_FISH_OK_PDISTS = frozenset({ 24, # Midfeast of Pentecost @@ -342,7 +357,7 @@ def resolve(season, weekday, feast_level, rows, no_fish=False, return allowance, (winner if winner is not None else CANONICAL[allowance]) -def apply(day, season_for, wine_oil_dates=frozenset(), +def apply(day, season_for, wine_oil_dates=frozenset(), fish_dates=frozenset(), fish_ok_dates=frozenset(), fish_ok_pdists=frozenset(), strict_dates=frozenset()): """Set `day.fast_level` and `day.fast_exception` for one day.""" @@ -363,6 +378,8 @@ def apply(day, season_for, wine_oil_dates=frozenset(), # the season's cap still applies -- they lift a fast, they do not escape one. if (day.month, day.day) in wine_oil_dates: rows.append(1) + if (day.month, day.day) in fish_dates: + rows.append(2) if FAST_FREE in rows: day.fast_level = FastLevels.NoFast @@ -382,6 +399,7 @@ def apply(day, season_for, wine_oil_dates=frozenset(), eve = day.pdist in (day.pyear.nativity - 1, day.pyear.theophany - 1) cap_exempt = ((day.month, day.day) in fish_ok_dates + or (day.month, day.day) in fish_dates or day.pdist in fish_ok_pdists) _, day.fast_exception = resolve( diff --git a/calendarium/liturgics/day.py b/calendarium/liturgics/day.py index 1754e218..24a0482f 100644 --- a/calendarium/liturgics/day.py +++ b/calendarium/liturgics/day.py @@ -943,6 +943,7 @@ def _apply_fasting_adjustments(self): fast -- see calendarium/fasting.py and docs/greek-fasting.md.""" fasting.apply(self, fasting.greek_season, wine_oil_dates=fasting.GREEK_WINE_OIL_DATES, + fish_dates=fasting.GREEK_FISH_DATES, fish_ok_dates=fasting.GREEK_WED_FRI_FISH_OK_DATES, fish_ok_pdists=fasting.GREEK_WED_FRI_FISH_OK_PDISTS, strict_dates=fasting.GREEK_STRICT_DATES) diff --git a/calendarium/tests/data/fasting-characterization.txt b/calendarium/tests/data/fasting-characterization.txt index 8ed30a3b..5882f863 100644 --- a/calendarium/tests/data/fasting-characterization.txt +++ b/calendarium/tests/data/fasting-characterization.txt @@ -1950,11 +1950,11 @@ 2025-05-04 greek w0 feast0 fast0 exc0 rows=0,0 -> - 2025-05-05 greek w1 feast0 fast0 exc0 rows=0,0 -> - 2025-05-06 greek w2 feast0 fast0 exc0 rows=0,0 -> - -2025-05-07 greek w3 feast0 fast0 exc11 rows=1,11 -> - +2025-05-07 greek w3 feast0 fast1 exc1 rows=0,1 -> meat,fish,dairy,eggs 2025-05-08 greek w4 feast5 fast0 exc2 rows=0,2 -> - 2025-05-09 greek w5 feast4 fast1 exc1 rows=0,1 -> meat,fish,dairy,eggs 2025-05-10 greek w6 feast4 fast0 exc0 rows=0,0 -> - -2025-05-11 greek w0 feast0 fast0 exc11 rows=0,11 -> - +2025-05-11 greek w0 feast0 fast0 exc1 rows=0,0 -> - 2025-05-12 greek w1 feast0 fast0 exc0 rows=0,0 -> - 2025-05-13 greek w2 feast0 fast0 exc0 rows=0,0 -> - 2025-05-14 greek w3 feast2 fast1 exc2 rows=0,2 -> meat,dairy,eggs @@ -2030,7 +2030,7 @@ 2025-07-23 greek w3 feast0 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil 2025-07-24 greek w4 feast0 fast0 exc0 rows=0,0 -> - 2025-07-25 greek w5 feast3 fast1 exc1 rows=0,0 -> meat,fish,dairy,eggs -2025-07-26 greek w6 feast0 fast0 exc11 rows=0,11 -> - +2025-07-26 greek w6 feast0 fast0 exc1 rows=0,0 -> - 2025-07-27 greek w0 feast2 fast0 exc1 rows=0,0 -> - 2025-07-28 greek w1 feast0 fast0 exc0 rows=0,0 -> - 2025-07-29 greek w2 feast0 fast0 exc0 rows=0,0 -> - @@ -2097,7 +2097,7 @@ 2025-09-28 greek w0 feast4 fast0 exc0 rows=0,1 -> - 2025-09-29 greek w1 feast2 fast0 exc0 rows=0,0 -> - 2025-09-30 greek w2 feast3 fast0 exc0 rows=0,0 -> - -2025-10-01 greek w3 feast0 fast0 exc11 rows=0,11 -> - +2025-10-01 greek w3 feast0 fast1 exc1 rows=0,0 -> meat,fish,dairy,eggs 2025-10-02 greek w4 feast2 fast0 exc0 rows=0,0 -> - 2025-10-03 greek w5 feast2 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil 2025-10-04 greek w6 feast3 fast0 exc0 rows=0,0 -> - @@ -2141,7 +2141,7 @@ 2025-11-11 greek w2 feast0 fast0 exc0 rows=0,0 -> - 2025-11-12 greek w3 feast2 fast1 exc1 rows=0,0 -> meat,fish,dairy,eggs 2025-11-13 greek w4 feast5 fast0 exc2 rows=0,2 -> - -2025-11-14 greek w5 feast4 fast1 exc1 rows=0,1 -> meat,fish,dairy,eggs +2025-11-14 greek w5 feast4 fast1 exc2 rows=0,1 -> meat,dairy,eggs 2025-11-15 greek w6 feast0 fast5 exc2 rows=0,0 -> meat,dairy,eggs 2025-11-16 greek w0 feast6 fast5 exc2 rows=0,2 -> meat,dairy,eggs 2025-11-17 greek w1 feast3 fast5 exc2 rows=0,0 -> meat,dairy,eggs @@ -2228,7 +2228,7 @@ 2026-02-06 greek w5 feast0 fast0 exc11 rows=0,11 -> - 2026-02-07 greek w6 feast0 fast0 exc11 rows=0,11 -> - 2026-02-08 greek w0 feast2 fast0 exc1 rows=0,0 -> - -2026-02-09 greek w1 feast4 fast0 exc1 rows=0,0 -> - +2026-02-09 greek w1 feast4 fast0 exc0 rows=0,0 -> - 2026-02-10 greek w2 feast0 fast0 exc1 rows=0,0 -> - 2026-02-11 greek w3 feast3 fast1 exc1 rows=0,0 -> meat,fish,dairy,eggs 2026-02-12 greek w4 feast4 fast0 exc0 rows=0,0 -> - @@ -2315,11 +2315,11 @@ 2026-05-04 greek w1 feast0 fast0 exc0 rows=0,0 -> - 2026-05-05 greek w2 feast0 fast0 exc0 rows=0,0 -> - 2026-05-06 greek w3 feast0 fast1 exc2 rows=0,2 -> meat,dairy,eggs -2026-05-07 greek w4 feast0 fast0 exc11 rows=0,11 -> - +2026-05-07 greek w4 feast0 fast0 exc0 rows=0,0 -> - 2026-05-08 greek w5 feast5 fast1 exc1 rows=1,2 -> meat,fish,dairy,eggs 2026-05-09 greek w6 feast4 fast0 exc0 rows=0,0 -> - 2026-05-10 greek w0 feast4 fast0 exc0 rows=0,0 -> - -2026-05-11 greek w1 feast0 fast0 exc11 rows=0,11 -> - +2026-05-11 greek w1 feast0 fast0 exc1 rows=0,0 -> - 2026-05-12 greek w2 feast0 fast0 exc0 rows=0,0 -> - 2026-05-13 greek w3 feast0 fast1 exc1 rows=0,1 -> meat,fish,dairy,eggs 2026-05-14 greek w4 feast2 fast0 exc0 rows=0,0 -> - @@ -2395,7 +2395,7 @@ 2026-07-23 greek w4 feast0 fast0 exc0 rows=0,0 -> - 2026-07-24 greek w5 feast0 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil 2026-07-25 greek w6 feast3 fast0 exc1 rows=0,0 -> - -2026-07-26 greek w0 feast0 fast0 exc11 rows=0,11 -> - +2026-07-26 greek w0 feast0 fast0 exc1 rows=0,0 -> - 2026-07-27 greek w1 feast2 fast0 exc1 rows=0,0 -> - 2026-07-28 greek w2 feast0 fast0 exc0 rows=0,0 -> - 2026-07-29 greek w3 feast0 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil @@ -2462,7 +2462,7 @@ 2026-09-28 greek w1 feast4 fast0 exc0 rows=0,1 -> - 2026-09-29 greek w2 feast2 fast0 exc0 rows=0,0 -> - 2026-09-30 greek w3 feast3 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil -2026-10-01 greek w4 feast0 fast0 exc11 rows=0,11 -> - +2026-10-01 greek w4 feast0 fast0 exc1 rows=0,0 -> - 2026-10-02 greek w5 feast2 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil 2026-10-03 greek w6 feast2 fast0 exc0 rows=0,0 -> - 2026-10-04 greek w0 feast3 fast0 exc0 rows=0,0 -> - @@ -2506,7 +2506,7 @@ 2026-11-11 greek w3 feast0 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil 2026-11-12 greek w4 feast2 fast0 exc1 rows=0,0 -> - 2026-11-13 greek w5 feast5 fast1 exc1 rows=0,2 -> meat,fish,dairy,eggs -2026-11-14 greek w6 feast4 fast0 exc1 rows=0,1 -> - +2026-11-14 greek w6 feast4 fast0 exc2 rows=0,1 -> - 2026-11-15 greek w0 feast0 fast5 exc2 rows=0,0 -> meat,dairy,eggs 2026-11-16 greek w1 feast6 fast5 exc2 rows=0,2 -> meat,dairy,eggs 2026-11-17 greek w2 feast3 fast5 exc2 rows=0,0 -> meat,dairy,eggs @@ -2593,7 +2593,7 @@ 2027-02-06 greek w6 feast0 fast0 exc0 rows=0,0 -> - 2027-02-07 greek w0 feast0 fast0 exc0 rows=0,0 -> - 2027-02-08 greek w1 feast2 fast0 exc1 rows=0,0 -> - -2027-02-09 greek w2 feast4 fast0 exc1 rows=0,0 -> - +2027-02-09 greek w2 feast4 fast0 exc0 rows=0,0 -> - 2027-02-10 greek w3 feast0 fast1 exc1 rows=0,0 -> meat,fish,dairy,eggs 2027-02-11 greek w4 feast3 fast0 exc1 rows=0,0 -> - 2027-02-12 greek w5 feast4 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil @@ -2680,11 +2680,11 @@ 2027-05-04 greek w2 feast0 fast0 exc11 rows=0,11 -> - 2027-05-05 greek w3 feast0 fast0 exc11 rows=0,11 -> - 2027-05-06 greek w4 feast0 fast0 exc11 rows=0,11 -> - -2027-05-07 greek w5 feast0 fast0 exc11 rows=11,11 -> - +2027-05-07 greek w5 feast0 fast0 exc11 rows=0,11 -> - 2027-05-08 greek w6 feast5 fast0 exc11 rows=2,11 -> - 2027-05-09 greek w0 feast4 fast0 exc0 rows=0,0 -> - 2027-05-10 greek w1 feast4 fast0 exc0 rows=0,0 -> - -2027-05-11 greek w2 feast0 fast0 exc11 rows=0,11 -> - +2027-05-11 greek w2 feast0 fast0 exc1 rows=0,0 -> - 2027-05-12 greek w3 feast0 fast1 exc1 rows=0,1 -> meat,fish,dairy,eggs 2027-05-13 greek w4 feast0 fast0 exc0 rows=0,0 -> - 2027-05-14 greek w5 feast2 fast1 exc1 rows=0,1 -> meat,fish,dairy,eggs @@ -2760,7 +2760,7 @@ 2027-07-23 greek w5 feast0 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil 2027-07-24 greek w6 feast0 fast0 exc0 rows=0,0 -> - 2027-07-25 greek w0 feast3 fast0 exc1 rows=0,0 -> - -2027-07-26 greek w1 feast0 fast0 exc11 rows=0,11 -> - +2027-07-26 greek w1 feast0 fast0 exc1 rows=0,0 -> - 2027-07-27 greek w2 feast2 fast0 exc1 rows=0,0 -> - 2027-07-28 greek w3 feast0 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil 2027-07-29 greek w4 feast0 fast0 exc0 rows=0,0 -> - @@ -2827,7 +2827,7 @@ 2027-09-28 greek w2 feast4 fast0 exc0 rows=0,1 -> - 2027-09-29 greek w3 feast2 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil 2027-09-30 greek w4 feast3 fast0 exc0 rows=0,0 -> - -2027-10-01 greek w5 feast0 fast0 exc11 rows=0,11 -> - +2027-10-01 greek w5 feast0 fast1 exc1 rows=0,0 -> meat,fish,dairy,eggs 2027-10-02 greek w6 feast2 fast0 exc0 rows=0,0 -> - 2027-10-03 greek w0 feast2 fast0 exc0 rows=0,0 -> - 2027-10-04 greek w1 feast3 fast0 exc0 rows=0,0 -> - @@ -2871,7 +2871,7 @@ 2027-11-11 greek w4 feast0 fast0 exc0 rows=0,0 -> - 2027-11-12 greek w5 feast2 fast1 exc1 rows=0,0 -> meat,fish,dairy,eggs 2027-11-13 greek w6 feast5 fast0 exc2 rows=0,2 -> - -2027-11-14 greek w0 feast4 fast0 exc1 rows=0,1 -> - +2027-11-14 greek w0 feast4 fast0 exc2 rows=0,1 -> - 2027-11-15 greek w1 feast0 fast5 exc2 rows=0,0 -> meat,dairy,eggs 2027-11-16 greek w2 feast6 fast5 exc2 rows=0,2 -> meat,dairy,eggs 2027-11-17 greek w3 feast3 fast5 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil @@ -3046,11 +3046,11 @@ 2028-05-04 greek w4 feast0 fast0 exc0 rows=0,0 -> - 2028-05-05 greek w5 feast0 fast1 exc1 rows=0,1 -> meat,fish,dairy,eggs 2028-05-06 greek w6 feast0 fast0 exc0 rows=0,0 -> - -2028-05-07 greek w0 feast0 fast0 exc11 rows=0,11 -> - +2028-05-07 greek w0 feast0 fast0 exc0 rows=0,0 -> - 2028-05-08 greek w1 feast5 fast0 exc2 rows=0,2 -> - 2028-05-09 greek w2 feast4 fast0 exc0 rows=0,0 -> - 2028-05-10 greek w3 feast4 fast1 exc2 rows=0,2 -> meat,dairy,eggs -2028-05-11 greek w4 feast0 fast0 exc11 rows=0,11 -> - +2028-05-11 greek w4 feast0 fast0 exc1 rows=0,0 -> - 2028-05-12 greek w5 feast0 fast1 exc1 rows=0,1 -> meat,fish,dairy,eggs 2028-05-13 greek w6 feast0 fast0 exc0 rows=0,0 -> - 2028-05-14 greek w0 feast2 fast0 exc0 rows=0,0 -> - @@ -3126,7 +3126,7 @@ 2028-07-23 greek w0 feast0 fast0 exc0 rows=0,0 -> - 2028-07-24 greek w1 feast0 fast0 exc0 rows=0,0 -> - 2028-07-25 greek w2 feast3 fast0 exc1 rows=0,0 -> - -2028-07-26 greek w3 feast0 fast0 exc11 rows=0,11 -> - +2028-07-26 greek w3 feast0 fast1 exc1 rows=0,0 -> meat,fish,dairy,eggs 2028-07-27 greek w4 feast2 fast0 exc1 rows=0,0 -> - 2028-07-28 greek w5 feast0 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil 2028-07-29 greek w6 feast0 fast0 exc0 rows=0,0 -> - @@ -3193,7 +3193,7 @@ 2028-09-28 greek w4 feast4 fast0 exc0 rows=0,1 -> - 2028-09-29 greek w5 feast2 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil 2028-09-30 greek w6 feast3 fast0 exc0 rows=0,0 -> - -2028-10-01 greek w0 feast0 fast0 exc11 rows=0,11 -> - +2028-10-01 greek w0 feast0 fast0 exc1 rows=0,0 -> - 2028-10-02 greek w1 feast2 fast0 exc0 rows=0,0 -> - 2028-10-03 greek w2 feast2 fast0 exc0 rows=0,0 -> - 2028-10-04 greek w3 feast3 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil @@ -3237,7 +3237,7 @@ 2028-11-11 greek w6 feast0 fast0 exc0 rows=0,0 -> - 2028-11-12 greek w0 feast2 fast0 exc1 rows=0,0 -> - 2028-11-13 greek w1 feast5 fast0 exc2 rows=0,2 -> - -2028-11-14 greek w2 feast4 fast0 exc1 rows=0,1 -> - +2028-11-14 greek w2 feast4 fast0 exc2 rows=0,1 -> - 2028-11-15 greek w3 feast0 fast5 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil 2028-11-16 greek w4 feast6 fast5 exc2 rows=0,2 -> meat,dairy,eggs 2028-11-17 greek w5 feast3 fast5 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil @@ -3324,7 +3324,7 @@ 2029-02-06 greek w2 feast0 fast0 exc0 rows=0,0 -> - 2029-02-07 greek w3 feast0 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil 2029-02-08 greek w4 feast2 fast0 exc1 rows=0,0 -> - -2029-02-09 greek w5 feast4 fast1 exc1 rows=0,0 -> meat,fish,dairy,eggs +2029-02-09 greek w5 feast4 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil 2029-02-10 greek w6 feast0 fast0 exc1 rows=0,0 -> - 2029-02-11 greek w0 feast3 fast0 exc1 rows=0,0 -> - 2029-02-12 greek w1 feast4 fast1 exc7 rows=0,7 -> meat @@ -3411,11 +3411,11 @@ 2029-05-04 greek w5 feast0 fast1 exc1 rows=0,1 -> meat,fish,dairy,eggs 2029-05-05 greek w6 feast0 fast0 exc0 rows=0,0 -> - 2029-05-06 greek w0 feast0 fast0 exc0 rows=0,0 -> - -2029-05-07 greek w1 feast0 fast0 exc11 rows=0,11 -> - +2029-05-07 greek w1 feast0 fast0 exc0 rows=0,0 -> - 2029-05-08 greek w2 feast5 fast0 exc2 rows=0,2 -> - 2029-05-09 greek w3 feast4 fast1 exc1 rows=0,1 -> meat,fish,dairy,eggs 2029-05-10 greek w4 feast4 fast0 exc0 rows=0,0 -> - -2029-05-11 greek w5 feast0 fast0 exc11 rows=1,11 -> - +2029-05-11 greek w5 feast0 fast1 exc1 rows=0,1 -> meat,fish,dairy,eggs 2029-05-12 greek w6 feast0 fast0 exc0 rows=0,0 -> - 2029-05-13 greek w0 feast0 fast0 exc0 rows=0,0 -> - 2029-05-14 greek w1 feast2 fast0 exc0 rows=0,0 -> - @@ -3464,7 +3464,7 @@ 2029-06-26 greek w2 feast4 fast3 exc2 rows=0,0 -> meat,dairy,eggs 2029-06-27 greek w3 feast0 fast3 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil 2029-06-28 greek w4 feast2 fast3 exc2 rows=0,0 -> meat,dairy,eggs -2029-06-29 greek w5 feast6 fast1 exc1 rows=0,2 -> meat,fish,dairy,eggs +2029-06-29 greek w5 feast6 fast1 exc2 rows=0,2 -> meat,dairy,eggs 2029-06-30 greek w6 feast4 fast0 exc1 rows=0,0 -> - 2029-07-01 greek w0 feast2 fast0 exc1 rows=0,0 -> - 2029-07-02 greek w1 feast3 fast0 exc1 rows=0,0 -> - @@ -3491,7 +3491,7 @@ 2029-07-23 greek w1 feast0 fast0 exc0 rows=0,0 -> - 2029-07-24 greek w2 feast0 fast0 exc0 rows=0,0 -> - 2029-07-25 greek w3 feast3 fast1 exc1 rows=0,0 -> meat,fish,dairy,eggs -2029-07-26 greek w4 feast0 fast0 exc11 rows=0,11 -> - +2029-07-26 greek w4 feast0 fast0 exc1 rows=0,0 -> - 2029-07-27 greek w5 feast2 fast1 exc1 rows=0,0 -> meat,fish,dairy,eggs 2029-07-28 greek w6 feast0 fast0 exc0 rows=0,0 -> - 2029-07-29 greek w0 feast0 fast0 exc0 rows=0,0 -> - @@ -3558,7 +3558,7 @@ 2029-09-28 greek w5 feast4 fast1 exc0 rows=0,1 -> meat,fish,dairy,eggs,wine,oil 2029-09-29 greek w6 feast2 fast0 exc0 rows=0,0 -> - 2029-09-30 greek w0 feast3 fast0 exc0 rows=0,0 -> - -2029-10-01 greek w1 feast0 fast0 exc11 rows=0,11 -> - +2029-10-01 greek w1 feast0 fast0 exc1 rows=0,0 -> - 2029-10-02 greek w2 feast2 fast0 exc0 rows=0,0 -> - 2029-10-03 greek w3 feast2 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil 2029-10-04 greek w4 feast3 fast0 exc0 rows=0,0 -> - @@ -3602,7 +3602,7 @@ 2029-11-11 greek w0 feast0 fast0 exc0 rows=0,0 -> - 2029-11-12 greek w1 feast2 fast0 exc1 rows=0,0 -> - 2029-11-13 greek w2 feast5 fast0 exc2 rows=0,2 -> - -2029-11-14 greek w3 feast4 fast1 exc1 rows=0,1 -> meat,fish,dairy,eggs +2029-11-14 greek w3 feast4 fast1 exc2 rows=0,1 -> meat,dairy,eggs 2029-11-15 greek w4 feast0 fast5 exc2 rows=0,0 -> meat,dairy,eggs 2029-11-16 greek w5 feast6 fast5 exc1 rows=0,2 -> meat,fish,dairy,eggs 2029-11-17 greek w6 feast3 fast5 exc2 rows=0,0 -> meat,dairy,eggs diff --git a/docs/fasting-refactor-scope.md b/docs/fasting-refactor-scope.md index 34f4f5cc..7f38bc8a 100644 --- a/docs/fasting-refactor-scope.md +++ b/docs/fasting-refactor-scope.md @@ -567,6 +567,45 @@ season floor stand is what makes the weekend relief still work; a first attempt dropped every claim and made Lenten Saturdays stricter than the Saturdays either side of them. +### Chasing the last stragglers: 99.4% -> 99.9% + +Working through the 22 that survived turned up one substantive bug and several +small ones. + +**Four `greek` rows were forcing fast-free on days GOA fasts.** May 7, May 11, +Jul 26 and Oct 1 carried `fast_exception = 11`, set by the August 2026 pass that +corrected nine stale rows -- **from antiochian.org**, before this tradition was +settled as GOA. Index 11 short-circuits the whole rule, so those dates were +fast-free even on a Wednesday or Friday, where GOA gives wine and oil. Zeroing +them lets the Paschal row supply the fast level again, which is weekday-aware; +three of the four then also needed adding to `GREEK_WINE_OIL_DATES`. That August +table is worth re-reading in full: it is the same jurisdictional mismatch as the +Nativity boundary and the Apostles' fast, and it had been sitting in the data +for a fortnight. + +**`(2, 9)` was in two lists at once**, both `GREEK_WINE_OIL_DATES` and +`GREEK_STRICT_DATES`, so the grant silently won. GOA gives strict on two of the +three Wednesday/Friday observations, so it belongs only in the latter. + +**Peter and Paul and St Philip keep fish**, against the Wednesday/Friday cap -- +three observations each, fish every time. Both sit on a fast boundary, which is +the likeliest reason though two feasts cannot establish it. They needed +different mechanisms: Peter and Paul already claims fish, so exempting it from +the cap suffices, while our Philip row claims only wine and oil, so there is +nothing for an exemption to protect and `GREEK_FISH_DATES` grants it outright. + +### The five that remain, and why they stay + +| date | | | +|---|---|---| +| 2026-02-24, 2034-02-24, 2033-03-09 | Clean Week | `fast_exception = 10`, "no overrides", caps the grant. GOA relaxes the Finding of the Forerunner's Head and the Forty Martyrs even then. Letting a fixed-date grant through a sentinel that exists precisely to stop overrides is not a change to make for three days in ten years. | +| 2029-02-09 | GOA's own inconsistency | Feb 9 is strict on two of its three Wednesday/Friday occurrences and wine and oil on this one. | +| 2031-05-21 | GOA's own inconsistency | The Leavetaking of Pascha is fish on nine of its ten Wednesdays and wine and oil on this one. | + +Two of the five are goarch.org disagreeing with itself, so **99.9% is close to +the ceiling this data supports.** Chasing further would mean fitting our +calendar to their noise. + ### What the earlier three-year pass had said the remaining 53 were **36 -- per-date wine and oil grants we lack.** GOA lifts an ordinary Wednesday diff --git a/docs/greek-fasting.md b/docs/greek-fasting.md index de0e762e..da6782f3 100644 --- a/docs/greek-fasting.md +++ b/docs/greek-fasting.md @@ -296,6 +296,16 @@ values (no other fields touched). Slavic tradition's own Aug 28 row (Ven. Job of Pochaev, polyeleos rank) was left untouched -- that exception has an actual feast-rank basis and wasn't part of this bug. +**Superseded 2026-09-10.** Every one of these nine was corrected *from +antiochian.org*, which this tradition does not follow -- see the jurisdiction +note at the top of this file. Re-checked against goarch.org over ten years, five +were wrong: May 7, May 11, Jul 26 and Oct 1 were set to No Fast (11), which +short-circuits the fasting rule entirely and made them fast-free even on +Wednesdays and Fridays, where GOA gives wine and oil; and Dec 13 was set to Wine +& Oil (1) to prop up the old phase boundary. All five are now zeroed, letting +the season and the Paschal row decide. The four set to Strict (0) -- Mar 31, Jul +15, Aug 28, Sep 25 -- check out against GOA and are left alone. + **Not investigated further**: whether other `greek`-tradition rows (not matching this exact blank-placeholder shape) have similar staleness -- this pass only searched for the specific pattern that surfaced the bug. diff --git a/fixtures/calendarium.json b/fixtures/calendarium.json index a881e50d..fda6953a 100644 --- a/fixtures/calendarium.json +++ b/fixtures/calendarium.json @@ -16574,7 +16574,7 @@ "service_note": "", "story": null, "fast": 0, - "fast_exception": 11, + "fast_exception": 0, "flag": 0, "tradition": "greek" } @@ -16814,7 +16814,7 @@ "service_note": "", "story": null, "fast": 0, - "fast_exception": 11, + "fast_exception": 0, "flag": 0, "tradition": "greek" } @@ -16974,7 +16974,7 @@ "service_note": "", "story": null, "fast": 0, - "fast_exception": 11, + "fast_exception": 0, "flag": 0, "tradition": "greek" } @@ -17074,7 +17074,7 @@ "service_note": "", "story": null, "fast": 0, - "fast_exception": 11, + "fast_exception": 0, "flag": 0, "tradition": "greek" } From 5dafa6ebe1e3a652973937e3d47382c5f43506b8 Mon Sep 17 00:00:00 2001 From: Brian Glass Date: Thu, 10 Sep 2026 14:19:48 -0400 Subject: [PATCH 18/20] Compare GOA and Antioch to each other rather than to us Every earlier comparison in this project measured the app against a jurisdiction, which conflates our errors with their divergence. An earlier note put "our Greek model vs Antioch" at 14% and described it as a jurisdictional gap; Brian doubted that, and he was right. Head to head, the two published calendars agree on 374 of 396 shared days, 94.4%. They share the Typikon of the Great Church and it shows. Half the gap is one rule. Eleven of the 22 are the Paschal season, and the shape matches footnote 343 to Chapter X exactly: Antioch keeps no fast at all on Wednesdays and Fridays from Pascha to Ascension, then goes strict after it, while GOA keeps its ordinary wine-and-oil allowance across the whole season. So Antioch is more lenient than GOA before Ascension and stricter after. Five are Holy Week and Lent, where Antioch is stricter and finer grained: it uses a "wine but not oil" level GOA's five colours have no category for, so Great and Holy Saturday and Thursday differ in granularity rather than substance. The remaining six are per-date judgements. Adds tools/fasting/goa_vs_antioch.py so the comparison is reproducible, and records in docs/greek-fasting.md what it means for us: following GOA at 99.9% puts us at roughly 94% against Antioch by construction, and that residue is theirs rather than ours. It is also the starting point if an Antiochian tradition is ever wanted -- the Paschal decree and the wine-only rung cover most of the distance, and DietaryAllowance.WineOnly already exists. Documentation and a tool; no application code touched. Co-Authored-By: Claude Opus 5 Claude-Session: https://claude.ai/code/session_019nQRjJpPqW89xqzAf1vsEX --- docs/greek-fasting.md | 53 ++++++++++++++++++++ tools/fasting/goa_vs_antioch.py | 87 +++++++++++++++++++++++++++++++++ 2 files changed, 140 insertions(+) create mode 100644 tools/fasting/goa_vs_antioch.py diff --git a/docs/greek-fasting.md b/docs/greek-fasting.md index da6782f3..feb19130 100644 --- a/docs/greek-fasting.md +++ b/docs/greek-fasting.md @@ -27,6 +27,59 @@ dedicated fasting-rules chapter, so don't expect a clean day-by-day table -- search for specific terms (a saint's name, "Great Canon," "Wednesdays and Fridays," etc.) rather than a single section. +## GOA vs Antioch, head to head (2026-09-10) + +Every other comparison in this file and in `docs/fasting-refactor-scope.md` +measures *this app* against a jurisdiction. That conflates our errors with their +divergence, and it repeatedly made the two look further apart than they are -- +an earlier note here put "our Greek model vs Antioch" at 14% and described it as +a jurisdictional gap, which Brian rightly doubted. `tools/fasting/goa_vs_antioch.py` +puts the two published calendars side by side instead. + +**374 of 396 shared days agree -- 94.4%.** They share the Typikon of the Great +Church and it shows. + +**Half the gap is one rule.** Eleven of the 22 are the Paschal season, and the +shape is unmistakable: + +| Wed/Fri | GOA | Antioch | +|---|---|---| +| Pascha to Ascension (pdist 10-38) | wine and oil, fish on Lord feasts | **no fast at all** | +| after Ascension (pdist 40-47) | wine and oil | **strict** | + +That is the decree of the Holy Synod of Antioch recorded in footnote 343 to +Chapter X, behaving exactly as written: more lenient than GOA up to Ascension, +stricter after it. GOA simply keeps its ordinary Wednesday and Friday allowance +across the whole season. + +**Five are Holy Week and Lent, and there Antioch is stricter** -- and finer +grained. It uses a "wine but not oil" level that GOA's five colours have no +category for: + +| | GOA | Antioch | +|---|---|---| +| Great and Holy Saturday | strict | wine only | +| Great and Holy Thursday | wine and oil | wine only | +| Monday of the 5th week | strict | wine only | + +Two of those three are a difference in granularity rather than in substance. + +**The remaining six are per-date judgements** -- the Leavetaking of Theophany, +the Great Canon, the Nativity of the Forerunner, and three ordinary Wednesdays +and Fridays. + +### What this means for us + +This app follows GOA and matches it on 3678 of 3683 days. It therefore sits at +roughly 94% against Antioch **by construction**, and that residue is Antioch +diverging from GOA rather than an error here -- worth knowing if the app is ever +reported as disagreeing with an Antiochian parish calendar. + +It is also the starting point if an Antiochian tradition is ever added: the +Paschal decree and the wine-only rung would cover most of the distance, and both +are already expressible -- `DietaryAllowance.WineOnly` exists and the season +model takes a floor per weekday. + ## Findings, by fast ### Nativity Fast (Nov 15 - Dec 24) -- genuine, confirmed structural difference diff --git a/tools/fasting/goa_vs_antioch.py b/tools/fasting/goa_vs_antioch.py new file mode 100644 index 00000000..a563df15 --- /dev/null +++ b/tools/fasting/goa_vs_antioch.py @@ -0,0 +1,87 @@ +"""Compare the two Greek-tradition jurisdictions to each other, not to us. + + docker compose run --rm local python tools/fasting/goa_vs_antioch.py + +Every earlier comparison in this project measured *this app* against +antiochian.org, which conflates our errors with their divergence and made the +two jurisdictions look much further apart than they are. This puts their own +published calendars side by side. + +Last run 2026-09-10: **374/396, 94.4%**, on the days both sources cover. + +Sources: `data/goarch_fasting.json` (harvested; see tools/fasting/goarch_audit.py) +and `data/antiochian_raw/*.json`, whose `fastDesignation` is free text and is +mapped below. Antioch publishes a "wine but not oil" level that GOA's five +colours have no category for, so a handful of Holy Week days differ in +granularity rather than in substance. +""" +import os +import sys + +sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))) +os.chdir(sys.path[0]) + +import collections +import glob +import json + +GOARCH = 'data/goarch_fasting.json' +ANTIOCHIAN = 'data/antiochian_raw/*.json' + +GOA_CODES = {'S': 'strict', 'W': 'wine+oil', 'F': 'fish', + 'D': 'meat fast', 'N': 'no fast'} + +ANTIOCHIAN_DESIGNATIONS = { + 'ABSTAIN FROM MEAT, FISH, DAIRY, EGGS, WINE, OLIVE OIL': 'strict', + 'ABSTAIN FROM MEAT, FISH, DAIRY, EGGS, OLIVE OIL': 'wine only', + 'ABSTAIN FROM MEAT, FISH, DAIRY, EGGS': 'wine+oil', + 'ABSTAIN FROM MEAT, DAIRY, EGGS': 'fish', + 'ABSTAIN FROM MEAT': 'meat fast', + 'NO FAST': 'no fast', +} + + +def antiochian(): + out = {} + for path in glob.glob(ANTIOCHIAN): + with open(path) as f: + row = json.load(f) + date = (row.get('originalCalendarDate') or '')[:10] + level = ANTIOCHIAN_DESIGNATIONS.get( + (row.get('fastDesignation') or '').strip().upper()) + if date and level: + out[date] = level + return out + + +def main(): + with open(GOARCH) as f: + goa = json.load(f) + ant = antiochian() + + agree = 0 + differences = [] + for date, theirs in sorted(ant.items()): + year, month, day = date.split('-') + month_key = f'{year}-{month}' + if month_key not in goa: + continue + ours = GOA_CODES[goa[month_key][int(day) - 1]] + if ours == theirs: + agree += 1 + else: + differences.append((date, ours, theirs)) + + total = agree + len(differences) + print(f'\n GOA vs Antioch on {total} shared days: ' + f'{agree} agree ({100 * agree / total:.1f}%), {len(differences)} differ\n') + for (goa_level, ant_level), n in collections.Counter( + (d[1], d[2]) for d in differences).most_common(): + print(f' GOA={goa_level:<10} Antioch={ant_level:<10} {n}') + print('\n differences:') + for date, goa_level, ant_level in differences: + print(f' {date} GOA={goa_level:<10} Antioch={ant_level}') + + +if __name__ == '__main__': + main() From 3967f666b47624263847cbf1e0dd4584b501982c Mon Sep 17 00:00:00 2001 From: Brian Glass Date: Thu, 10 Sep 2026 16:14:16 -0400 Subject: [PATCH 19/20] Move the fixed-date fasting data out of the source and into the fixture Brian objected that GREEK_WINE_OIL_DATES and its siblings were reference data living in source code. They are now sparse Day rows: 47 of them, carrying one meaningful field each. The mechanism is a field-level merge, not Django model inheritance -- abstract bases give separate tables with no row-level fallback, and multi-table inheritance makes a child row be a parent row rather than override a different one. _prefer_tradition_days becomes _merge_tradition_days: where a slot holds a common row and a tradition row, the common row is the base and the tradition row contributes only the fields it sets. feast_level, fast and fast_exception are nullable for this, and the distinction is load-bearing -- NULL means inherit, 0 means explicitly zero, which is what the Exaltation's Greek override needs. Two shapes now coexist and mean different things: slavic+greek with no common is a genuine disagreement about what is commemorated, while common plus one tradition row is an override of how it is kept. TestDayOverrides guards the second, since it is the one that can rot quietly: an override may not carry fields the merge ignores, because those would go stale when the common row is next edited. The move paid for itself immediately. Writing that guard exposed three overrides that changed nothing -- for Feb 24 and Mar 9 the common row already claimed wine and oil, so those entries in GREEK_WINE_OIL_DATES had always been dead. That was invisible while the list lived in code and obvious the moment it became rows. It also found a pre-existing no-op in Nov 24's slavic row, which duplicated its common row in every single field. Deleting that one was wrong, though. Two DayCommemoration rows hang off it, so it is a commemoration anchor that happens to override nothing. The foreign key caught it; the guard now allows that case explicitly. 379 Day rows are foreign-key targets, which is worth remembering next time one looks redundant. Four entries stay in code, and belong there: GREEK_WED_FRI_FISH_OK_DATES and _PDISTS are not field values but "the Wednesday/Friday cap does not apply here", which no Day field expresses. Behaviour is unchanged: 0 of 3652 characterisation days differ, and goarch agreement holds at 3678/3683. The 235 changed lines in the characterisation file are its rows= diagnostic column, which now shows the override as what it is -- a row -- rather than a value appended inside apply(). 197 tests pass. Co-Authored-By: Claude Opus 5 Claude-Session: https://claude.ai/code/session_019nQRjJpPqW89xqzAf1vsEX --- calendarium/fasting.py | 99 +- calendarium/liturgics/day.py | 77 +- ..._fast_alter_day_fast_exception_and_more.py | 28 + calendarium/models.py | 25 +- .../tests/data/fasting-characterization.txt | 470 ++++----- calendarium/tests/test_liturgics.py | 70 +- docs/fasting-refactor-scope.md | 41 + fixtures/calendarium.json | 918 +++++++++++++++++- 8 files changed, 1356 insertions(+), 372 deletions(-) create mode 100644 calendarium/migrations/0011_alter_day_fast_alter_day_fast_exception_and_more.py diff --git a/calendarium/fasting.py b/calendarium/fasting.py index 0eddb120..96c48df7 100644 --- a/calendarium/fasting.py +++ b/calendarium/fasting.py @@ -188,45 +188,6 @@ def cap_for(self, weekday, feast_level): } -# Dates on which GOA grants wine and oil whenever they land on a fast day. -# -# Enumerated from ten years of goarch.org (2026-2035, data/goarch_fasting.json), -# taking every date where their calendar gives wine and oil and this app gives -# strict. Each was observed between one and eight times and is consistent every -# time; the ones inside the Nativity fast are seen most often, because there -# every weekday is a fast day and so every occurrence is visible, while in -# ordinary time only Wednesdays and Fridays reveal anything. -# -# **This is a list, not a rule, because no rule fits.** These are the saints GOA -# ranks highly enough to relax a fast for, and that ranking is not ours: their -# `feast_level` here runs 0, 2, 3 and 4, so no threshold selects them -- -# St Barbara and St Ignatius are level 0, while plenty of level 4 days get -# nothing. That is the same reason Ch. 33's rank grants failed against this -# data; see docs/fasting-refactor-scope.md. -# -# It lives here rather than in the fixture because a `greek` Day row replaces -# the `common` one outright (`_prefer_tradition_days` keys on -# `(pdist, month, day)`), so encoding it as data would mean duplicating 38 -# feast names and ranks that would then drift out of step with their originals. -# -# Incomplete by construction: a date reaches a Wednesday or Friday in roughly -# two years out of seven, so ordinary-time entries seen once or twice here are -# real but the list as a whole is a floor, not a census. -GREEK_WINE_OIL_DATES = frozenset({ - (1, 11), (1, 14), (1, 16), (1, 18), (1, 22), (1, 25), (1, 27), - (2, 8), (2, 10), (2, 11), (2, 17), (2, 24), - (3, 9), - (6, 8), (6, 11), (6, 30), - (5, 11), - (7, 1), (7, 2), (7, 8), (7, 17), (7, 22), (7, 25), (7, 26), (7, 27), - (8, 31), - (9, 6), (9, 9), (9, 20), - (10, 1), (10, 23), - (11, 1), (11, 12), - (12, 4), (12, 5), (12, 9), (12, 12), (12, 15), (12, 17), (12, 20), -}) - - # Chapter X: "Fish is permitted on Wednesday or Friday if it is a feast of the # Lord even during fasting seasons." GOA applies that as a *cap* -- a saint's # fish grant falls back to wine and oil when it lands on a Wednesday or Friday, @@ -249,15 +210,14 @@ def cap_for(self, weekday, feast_level): # feasts cannot establish it. Three Wednesday/Friday observations each, # fish every time. (6, 29), # Holy Apostles Peter and Paul -}) - -# St Philip is the same case as Peter and Paul, but needs a grant rather than a -# cap exemption: our row for him claims only wine and oil, so there is no fish -# for an exemption to protect. Three Wednesday/Friday observations, fish each -# time -- he is the eve of the Nativity fast. -GREEK_FISH_DATES = frozenset({ (11, 14), # Holy Apostle Philip }) + +# Peter and Paul already claims fish in the shared data, so exempting it from +# the cap is enough. Philip does not -- our row for him claims only wine and +# oil -- so his fish comes from a sparse `greek` override on the slot, and this +# exemption is what stops the cap taking it straight back off him. + GREEK_WED_FRI_FISH_OK_PDISTS = frozenset({ 24, # Midfeast of Pentecost 38, # Leavetaking of Pascha / Forefeast of the Ascension @@ -271,18 +231,6 @@ def cap_for(self, weekday, feast_level): # goarch.org marks the whole week `fast-day`, Wednesday and Friday included. CHEESEFARE_GREEK = Season('Cheesefare (Greek)', default_floor=D.MeatFast) -# The mirror of GREEK_WINE_OIL_DATES: dates whose festal wine-and-oil grant GOA -# does not recognise, so the season's own floor should stand instead. Chiefly -# the Beheading of the Forerunner, which our data relaxes to wine and oil but -# which goarch.org keeps strict on all five weekdays -- seven observations, -# never once relaxed. The claim is dropped rather than capped, so the weekend -# floor still applies and the Beheading is wine and oil on a Saturday or Sunday, -# which is exactly what GOA does. -GREEK_STRICT_DATES = frozenset({ - (2, 9), (4, 7), (4, 23), (8, 16), (8, 29), - (9, 12), (9, 24), (9, 28), (10, 9), -}) - ORDINARY_GREEK = Season('ordinary Wed/Fri (Greek)', floor={SAT: D.WineAndOil, SUN: D.WineAndOil}, default_floor=D.Strict, @@ -357,29 +305,17 @@ def resolve(season, weekday, feast_level, rows, no_fish=False, return allowance, (winner if winner is not None else CANONICAL[allowance]) -def apply(day, season_for, wine_oil_dates=frozenset(), fish_dates=frozenset(), - fish_ok_dates=frozenset(), fish_ok_pdists=frozenset(), - strict_dates=frozenset()): - """Set `day.fast_level` and `day.fast_exception` for one day.""" - if (day.month, day.day) in strict_dates: - # Where the jurisdiction recognises no relaxation, the *festal* claim is - # dropped and the season's floor stands. Only festal rows are touched: - # the Paschal cycle's own weekend allowance has to survive, or a Lenten - # Saturday on one of these dates would come out stricter than the - # Saturdays either side of it. Caps are kept -- a row asserting - # strictness still has its say. - rows = [d.fast_exception - if not d.month or d.fast_exception in CAP_INDICES else 0 - for d in day.days] - else: - rows = [d.fast_exception for d in day.days] - - # A jurisdiction's own fixed-date relaxations enter as an ordinary claim, so - # the season's cap still applies -- they lift a fast, they do not escape one. - if (day.month, day.day) in wine_oil_dates: - rows.append(1) - if (day.month, day.day) in fish_dates: - rows.append(2) +def apply(day, season_for, fish_ok_dates=frozenset(), fish_ok_pdists=frozenset()): + """Set `day.fast_level` and `day.fast_exception` for one day. + + A jurisdiction's own fixed-date departures -- the saints GOA relaxes a fast + for, and the ones it declines to -- are deliberately not here. They are + sparse tradition `Day` rows overriding `fast_exception` on the slot, merged + in by `_merge_tradition_days` before this ever sees them. They therefore + arrive as ordinary claims, and the season's cap still applies to them: they + lift a fast, they do not escape one. + """ + rows = [d.fast_exception for d in day.days] if FAST_FREE in rows: day.fast_level = FastLevels.NoFast @@ -399,7 +335,6 @@ def apply(day, season_for, wine_oil_dates=frozenset(), fish_dates=frozenset(), eve = day.pdist in (day.pyear.nativity - 1, day.pyear.theophany - 1) cap_exempt = ((day.month, day.day) in fish_ok_dates - or (day.month, day.day) in fish_dates or day.pdist in fish_ok_pdists) _, day.fast_exception = resolve( diff --git a/calendarium/liturgics/day.py b/calendarium/liturgics/day.py index 24a0482f..1769baf1 100644 --- a/calendarium/liturgics/day.py +++ b/calendarium/liturgics/day.py @@ -1,4 +1,5 @@ import collections +import copy import logging from datetime import date, timedelta @@ -107,25 +108,66 @@ def _speech_worthy(dc): return _has_story(dc) or dc.tradition != 'greek' -def _prefer_tradition_days(rows, tradition): - """Like _prefer_tradition, but for Day rows, which have no - source/ordering/desc -- the slot is just (pdist, month, day).""" +def _merge_tradition_days(rows, tradition): + """Reduce the rows for a day to one per `(pdist, month, day)` slot. - kept = [] - slot_index = {} + Two shapes exist in the data and they mean different things. + + A slot carrying a `slavic` row and a `greek` row is a genuine disagreement + about *what is commemorated* -- Oct 1 is the Protection for Slavs and not + for Greeks -- so the tradition's own row is taken whole. + + A slot carrying a `common` row plus a tradition row is an **override**: the + same commemoration, kept differently. There the common row is the base and + the tradition row contributes only the fields it actually sets, which is why + `Day.OVERRIDABLE` is nullable. NULL means "inherit"; 0 means "explicitly + zero", and the difference is load-bearing -- the Exaltation's Greek override + is `fast_exception=0`, an explicit "make no claim" that must not be mistaken + for an absence. + Fields outside `OVERRIDABLE` are taken from the common row and the override + row's copies are ignored, so an override should leave them blank rather than + duplicate them. That is what keeps a shadow row from silently serving stale + feast names when the common row is later edited; enforced by + `test_day_overrides_are_sparse`. + """ + + groups = {} + order = [] for row in rows: if row.tradition not in (tradition, 'common'): continue - slot = (row.pdist, row.month, row.day) + if slot not in groups: + groups[slot] = {} + order.append(slot) + groups[slot][row.tradition] = row - if slot in slot_index: - if row.tradition != 'common': - kept[slot_index[slot]] = row + kept = [] + for slot in order: + group = groups[slot] + base, override = group.get('common'), group.get(tradition) + + if override is None: + row = base + elif base is None: + row = override else: - slot_index[slot] = len(kept) - kept.append(row) + row = copy.copy(base) + for field in models.Day.OVERRIDABLE: + value = getattr(override, field) + if value is not None: + setattr(row, field, value) + # full_title is a cached_property; the copy must not inherit a value + # computed on the base before the overlay. + row.__dict__.pop('full_title', None) + + # A row with no common counterpart may still be sparse; nothing further + # is going to fill it in, so treat NULL as the field's zero. + for field in models.Day.OVERRIDABLE: + if getattr(row, field) is None: + setattr(row, field, 0) + kept.append(row) return kept @@ -267,7 +309,7 @@ async def _collect_commemorations(self): tag, not just the ones tagged for self.tradition/common -- feast- level facts (feast_level/fast/fast_exception/feast_name/titles/ service_notes) still come only from whichever single row wins via - _prefer_tradition_days (a tradition-specific row is a genuine + _merge_tradition_days (a tradition-specific row is a genuine whole-day replacement for those facts, e.g. Greek observing a lower/zero feast_level on a day Slavic elevates). But the full, untradition-filtered id list is also kept (self._commemoration_day_ids) @@ -296,7 +338,7 @@ async def _collect_commemorations(self): # Bake the multiple "days" down into a single composite day for # feast-level facts only -- this part keeps the original # tradition-filtered, single-winner selection. - self.days = _prefer_tradition_days( + self.days = _merge_tradition_days( [d for d in all_days if d.tradition in (self.tradition, 'common')], self.tradition, ) @@ -333,7 +375,7 @@ async def _add_supplemental_commemorations(self): commemoration supplements the day's common ones rather than replacing them, which is why the query below filters by tradition directly rather than scoping to self.days (the - _prefer_tradition_days-selected winner). self._commemoration_day_ids + _merge_tradition_days-selected winner). self._commemoration_day_ids (Stage 9) deliberately includes every Day row matching this slot regardless of tradition tag, so a saint can be shared via its own DayCommemoration.tradition even when attached to a Day row tagged @@ -383,7 +425,7 @@ async def _add_supplemental_commemorations(self): additive.append(dc) elif dc.day_id not in winning_day_ids: # ordering < 0 (feast_name-matched, day_native or not), but - # its own Day row lost _prefer_tradition_days's preference + # its own Day row lost _merge_tradition_days's preference # for this request -- e.g. a saint shared via # DayCommemoration.tradition='common' whose entry lives on a # different tradition's Day row than the one whose @@ -942,11 +984,8 @@ def _apply_fasting_adjustments(self): """Greek dietary rules, which differ from Slavic only in the Nativity fast -- see calendarium/fasting.py and docs/greek-fasting.md.""" fasting.apply(self, fasting.greek_season, - wine_oil_dates=fasting.GREEK_WINE_OIL_DATES, - fish_dates=fasting.GREEK_FISH_DATES, fish_ok_dates=fasting.GREEK_WED_FRI_FISH_OK_DATES, - fish_ok_pdists=fasting.GREEK_WED_FRI_FISH_OK_PDISTS, - strict_dates=fasting.GREEK_STRICT_DATES) + fish_ok_pdists=fasting.GREEK_WED_FRI_FISH_OK_PDISTS) _DAY_CLASSES = { diff --git a/calendarium/migrations/0011_alter_day_fast_alter_day_fast_exception_and_more.py b/calendarium/migrations/0011_alter_day_fast_alter_day_fast_exception_and_more.py new file mode 100644 index 00000000..91f09bd0 --- /dev/null +++ b/calendarium/migrations/0011_alter_day_fast_alter_day_fast_exception_and_more.py @@ -0,0 +1,28 @@ +# Generated by Django 6.1 on 2026-09-10 19:57 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('calendarium', '0010_ordoreading'), + ] + + operations = [ + migrations.AlterField( + model_name='day', + name='fast', + field=models.SmallIntegerField(blank=True, null=True), + ), + migrations.AlterField( + model_name='day', + name='fast_exception', + field=models.SmallIntegerField(blank=True, null=True), + ), + migrations.AlterField( + model_name='day', + name='feast_level', + field=models.SmallIntegerField(blank=True, null=True), + ), + ] diff --git a/calendarium/models.py b/calendarium/models.py index 5471c1d0..e202f51b 100644 --- a/calendarium/models.py +++ b/calendarium/models.py @@ -12,18 +12,37 @@ class Day(models.Model): + """One day's commemorations and fasting, for one tradition. + + A row is keyed by the slot `(pdist, month, day)`. Where two traditions + genuinely commemorate different things, the slot carries a `slavic` row and + a `greek` row and no `common` one. Where they commemorate the *same* thing + but keep it differently, the slot carries a `common` row plus a sparse + tradition row that overrides only what differs -- see + `_merge_tradition_days` in liturgics/day.py. + + `feast_level`, `fast` and `fast_exception` are nullable for that reason, and + the distinction matters: **NULL means "inherit from the common row", 0 means + "explicitly zero"**. The Exaltation's `greek` override is `fast_exception=0` + -- an explicit "make no claim", not an absence. Everything else on an + override row is ignored when a common row exists, so leave those fields + blank; `test_day_overrides_are_sparse` enforces it. + """ + + OVERRIDABLE = ('feast_level', 'fast', 'fast_exception') + pdist = models.SmallIntegerField(db_index=True) month = models.SmallIntegerField() day = models.SmallIntegerField() title = models.CharField(max_length=255) subtitle = models.CharField(max_length=128) feast_name = models.CharField(max_length=255) - feast_level = models.SmallIntegerField() + feast_level = models.SmallIntegerField(null=True, blank=True) service = models.SmallIntegerField() service_note = models.CharField(max_length=64) story = models.TextField(null=True, blank=True) # feast-level narrative, non-saint content - fast = models.SmallIntegerField() - fast_exception = models.SmallIntegerField() + fast = models.SmallIntegerField(null=True, blank=True) + fast_exception = models.SmallIntegerField(null=True, blank=True) flag = models.SmallIntegerField() tradition = models.CharField(max_length=16, choices=[ ('common', 'Common'), # shared by all traditions (the default) diff --git a/calendarium/tests/data/fasting-characterization.txt b/calendarium/tests/data/fasting-characterization.txt index 5882f863..3150e609 100644 --- a/calendarium/tests/data/fasting-characterization.txt +++ b/calendarium/tests/data/fasting-characterization.txt @@ -1834,23 +1834,23 @@ 2025-01-08 greek w3 feast0 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil 2025-01-09 greek w4 feast4 fast0 exc0 rows=0,0 -> - 2025-01-10 greek w5 feast0 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil -2025-01-11 greek w6 feast4 fast0 exc1 rows=0,0,0 -> - +2025-01-11 greek w6 feast4 fast0 exc1 rows=0,0,1 -> - 2025-01-12 greek w0 feast3 fast0 exc0 rows=0,0,0 -> - 2025-01-13 greek w1 feast0 fast0 exc0 rows=0,0 -> - -2025-01-14 greek w2 feast4 fast0 exc1 rows=0,0 -> - +2025-01-14 greek w2 feast4 fast0 exc1 rows=0,1 -> - 2025-01-15 greek w3 feast2 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil -2025-01-16 greek w4 feast2 fast0 exc1 rows=0,0 -> - +2025-01-16 greek w4 feast2 fast0 exc1 rows=0,1 -> - 2025-01-17 greek w5 feast5 fast1 exc1 rows=0,2 -> meat,fish,dairy,eggs -2025-01-18 greek w6 feast2 fast0 exc1 rows=0,0 -> - +2025-01-18 greek w6 feast2 fast0 exc1 rows=0,1 -> - 2025-01-19 greek w0 feast2 fast0 exc0 rows=0,0 -> - 2025-01-20 greek w1 feast5 fast0 exc2 rows=0,2 -> - 2025-01-21 greek w2 feast0 fast0 exc0 rows=0,0 -> - -2025-01-22 greek w3 feast0 fast1 exc1 rows=0,0 -> meat,fish,dairy,eggs +2025-01-22 greek w3 feast0 fast1 exc1 rows=0,1 -> meat,fish,dairy,eggs 2025-01-23 greek w4 feast0 fast0 exc0 rows=0,0 -> - 2025-01-24 greek w5 feast4 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil -2025-01-25 greek w6 feast4 fast0 exc1 rows=0,0 -> - +2025-01-25 greek w6 feast4 fast0 exc1 rows=0,1 -> - 2025-01-26 greek w0 feast5 fast0 exc0 rows=0,0,0 -> - -2025-01-27 greek w1 feast4 fast0 exc1 rows=0,0 -> - +2025-01-27 greek w1 feast4 fast0 exc1 rows=0,1 -> - 2025-01-28 greek w2 feast2 fast0 exc0 rows=0,0 -> - 2025-01-29 greek w3 feast2 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil 2025-01-30 greek w4 feast5 fast0 exc2 rows=0,2 -> - @@ -1862,16 +1862,16 @@ 2025-02-05 greek w3 feast0 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil 2025-02-06 greek w4 feast0 fast0 exc0 rows=0,0 -> - 2025-02-07 greek w5 feast0 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil -2025-02-08 greek w6 feast2 fast0 exc1 rows=0,0 -> - +2025-02-08 greek w6 feast2 fast0 exc1 rows=0,1 -> - 2025-02-09 greek w0 feast4 fast0 exc11 rows=0,11 -> - -2025-02-10 greek w1 feast0 fast0 exc11 rows=0,11 -> - -2025-02-11 greek w2 feast3 fast0 exc11 rows=0,11 -> - +2025-02-10 greek w1 feast0 fast0 exc11 rows=1,11 -> - +2025-02-11 greek w2 feast3 fast0 exc11 rows=1,11 -> - 2025-02-12 greek w3 feast4 fast0 exc11 rows=0,11 -> - 2025-02-13 greek w4 feast0 fast0 exc11 rows=0,11 -> - 2025-02-14 greek w5 feast4 fast0 exc11 rows=0,11 -> - 2025-02-15 greek w6 feast0 fast0 exc11 rows=0,11 -> - 2025-02-16 greek w0 feast0 fast0 exc0 rows=0,0 -> - -2025-02-17 greek w1 feast4 fast0 exc1 rows=0,0 -> - +2025-02-17 greek w1 feast4 fast0 exc1 rows=0,1 -> - 2025-02-18 greek w2 feast0 fast0 exc0 rows=0,0 -> - 2025-02-19 greek w3 feast0 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil 2025-02-20 greek w4 feast0 fast0 exc0 rows=0,0 -> - @@ -1920,7 +1920,7 @@ 2025-04-04 greek w5 feast1 fast2 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil 2025-04-05 greek w6 feast0 fast2 exc3 rows=0,3 -> meat,fish,dairy,eggs 2025-04-06 greek w0 feast4 fast2 exc3 rows=0,3 -> meat,fish,dairy,eggs -2025-04-07 greek w1 feast4 fast2 exc0 rows=0,1 -> meat,fish,dairy,eggs,wine,oil +2025-04-07 greek w1 feast4 fast2 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil 2025-04-08 greek w2 feast0 fast2 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil 2025-04-09 greek w3 feast1 fast2 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil 2025-04-10 greek w4 feast0 fast2 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil @@ -1936,7 +1936,7 @@ 2025-04-20 greek w0 feast8 fast0 exc11 rows=0,11 -> - 2025-04-21 greek w1 feast0 fast0 exc11 rows=0,11 -> - 2025-04-22 greek w2 feast0 fast0 exc11 rows=0,11 -> - -2025-04-23 greek w3 feast5 fast0 exc11 rows=1,11 -> - +2025-04-23 greek w3 feast5 fast0 exc11 rows=0,11 -> - 2025-04-24 greek w4 feast0 fast0 exc11 rows=0,11 -> - 2025-04-25 greek w5 feast4 fast0 exc11 rows=1,11 -> - 2025-04-26 greek w6 feast3 fast0 exc11 rows=0,11 -> - @@ -1954,7 +1954,7 @@ 2025-05-08 greek w4 feast5 fast0 exc2 rows=0,2 -> - 2025-05-09 greek w5 feast4 fast1 exc1 rows=0,1 -> meat,fish,dairy,eggs 2025-05-10 greek w6 feast4 fast0 exc0 rows=0,0 -> - -2025-05-11 greek w0 feast0 fast0 exc1 rows=0,0 -> - +2025-05-11 greek w0 feast0 fast0 exc1 rows=0,1 -> - 2025-05-12 greek w1 feast0 fast0 exc0 rows=0,0 -> - 2025-05-13 greek w2 feast0 fast0 exc0 rows=0,0 -> - 2025-05-14 greek w3 feast2 fast1 exc2 rows=0,2 -> meat,dairy,eggs @@ -1982,10 +1982,10 @@ 2025-06-05 greek w4 feast0 fast0 exc0 rows=0,0 -> - 2025-06-06 greek w5 feast0 fast1 exc1 rows=0,1 -> meat,fish,dairy,eggs 2025-06-07 greek w6 feast0 fast0 exc0 rows=0,0 -> - -2025-06-08 greek w0 feast8 fast0 exc1 rows=0,0 -> - +2025-06-08 greek w0 feast8 fast0 exc1 rows=0,1 -> - 2025-06-09 greek w1 feast3 fast0 exc11 rows=0,11 -> - 2025-06-10 greek w2 feast4 fast0 exc11 rows=0,11 -> - -2025-06-11 greek w3 feast4 fast0 exc11 rows=0,11 -> - +2025-06-11 greek w3 feast4 fast0 exc11 rows=1,11 -> - 2025-06-12 greek w4 feast2 fast0 exc11 rows=0,11 -> - 2025-06-13 greek w5 feast0 fast0 exc11 rows=0,11 -> - 2025-06-14 greek w6 feast0 fast0 exc11 rows=0,11 -> - @@ -2004,15 +2004,15 @@ 2025-06-27 greek w5 feast0 fast3 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil 2025-06-28 greek w6 feast2 fast3 exc2 rows=0,0 -> meat,dairy,eggs 2025-06-29 greek w0 feast6 fast0 exc2 rows=0,2 -> - -2025-06-30 greek w1 feast4 fast0 exc1 rows=0,0 -> - -2025-07-01 greek w2 feast2 fast0 exc1 rows=0,0 -> - -2025-07-02 greek w3 feast3 fast1 exc1 rows=0,0 -> meat,fish,dairy,eggs +2025-06-30 greek w1 feast4 fast0 exc1 rows=0,1 -> - +2025-07-01 greek w2 feast2 fast0 exc1 rows=0,1 -> - +2025-07-02 greek w3 feast3 fast1 exc1 rows=0,1 -> meat,fish,dairy,eggs 2025-07-03 greek w4 feast4 fast0 exc0 rows=0,0 -> - 2025-07-04 greek w5 feast0 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil 2025-07-05 greek w6 feast0 fast0 exc0 rows=0,0 -> - 2025-07-06 greek w0 feast0 fast0 exc0 rows=0,0 -> - 2025-07-07 greek w1 feast0 fast0 exc0 rows=0,0 -> - -2025-07-08 greek w2 feast2 fast0 exc1 rows=0,0 -> - +2025-07-08 greek w2 feast2 fast0 exc1 rows=0,1 -> - 2025-07-09 greek w3 feast0 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil 2025-07-10 greek w4 feast0 fast0 exc0 rows=0,0 -> - 2025-07-11 greek w5 feast2 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil @@ -2021,17 +2021,17 @@ 2025-07-14 greek w1 feast2 fast0 exc0 rows=0,0 -> - 2025-07-15 greek w2 feast0 fast0 exc0 rows=0,0 -> - 2025-07-16 greek w3 feast0 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil -2025-07-17 greek w4 feast4 fast0 exc1 rows=0,0 -> - +2025-07-17 greek w4 feast4 fast0 exc1 rows=0,1 -> - 2025-07-18 greek w5 feast0 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil 2025-07-19 greek w6 feast0 fast0 exc0 rows=0,0 -> - 2025-07-20 greek w0 feast5 fast0 exc2 rows=0,2 -> - 2025-07-21 greek w1 feast0 fast0 exc0 rows=0,0 -> - -2025-07-22 greek w2 feast2 fast0 exc1 rows=0,0 -> - +2025-07-22 greek w2 feast2 fast0 exc1 rows=0,1 -> - 2025-07-23 greek w3 feast0 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil 2025-07-24 greek w4 feast0 fast0 exc0 rows=0,0 -> - -2025-07-25 greek w5 feast3 fast1 exc1 rows=0,0 -> meat,fish,dairy,eggs -2025-07-26 greek w6 feast0 fast0 exc1 rows=0,0 -> - -2025-07-27 greek w0 feast2 fast0 exc1 rows=0,0 -> - +2025-07-25 greek w5 feast3 fast1 exc1 rows=0,1 -> meat,fish,dairy,eggs +2025-07-26 greek w6 feast0 fast0 exc1 rows=0,1 -> - +2025-07-27 greek w0 feast2 fast0 exc1 rows=0,1 -> - 2025-07-28 greek w1 feast0 fast0 exc0 rows=0,0 -> - 2025-07-29 greek w2 feast0 fast0 exc0 rows=0,0 -> - 2025-07-30 greek w3 feast0 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil @@ -2051,7 +2051,7 @@ 2025-08-13 greek w3 feast4 fast4 exc0 rows=0,4 -> meat,fish,dairy,eggs,wine,oil 2025-08-14 greek w4 feast2 fast4 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil 2025-08-15 greek w5 feast7 fast1 exc2 rows=0,2 -> meat,dairy,eggs -2025-08-16 greek w6 feast5 fast0 exc0 rows=0,1 -> - +2025-08-16 greek w6 feast5 fast0 exc0 rows=0,0 -> - 2025-08-17 greek w0 feast0 fast0 exc0 rows=0,0 -> - 2025-08-18 greek w1 feast0 fast0 exc0 rows=0,0 -> - 2025-08-19 greek w2 feast0 fast0 exc0 rows=0,0 -> - @@ -2064,21 +2064,21 @@ 2025-08-26 greek w2 feast4 fast0 exc0 rows=0,0 -> - 2025-08-27 greek w3 feast0 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil 2025-08-28 greek w4 feast0 fast0 exc0 rows=0,0 -> - -2025-08-29 greek w5 feast6 fast1 exc0 rows=0,8 -> meat,fish,dairy,eggs,wine,oil +2025-08-29 greek w5 feast6 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil 2025-08-30 greek w6 feast4 fast0 exc0 rows=0,0 -> - -2025-08-31 greek w0 feast3 fast0 exc1 rows=0,0 -> - +2025-08-31 greek w0 feast3 fast0 exc1 rows=0,1 -> - 2025-09-01 greek w1 feast4 fast0 exc1 rows=0,1 -> - 2025-09-02 greek w2 feast0 fast0 exc0 rows=0,0 -> - 2025-09-03 greek w3 feast0 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil 2025-09-04 greek w4 feast0 fast0 exc0 rows=0,0 -> - 2025-09-05 greek w5 feast2 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil -2025-09-06 greek w6 feast2 fast0 exc1 rows=0,0 -> - +2025-09-06 greek w6 feast2 fast0 exc1 rows=0,1 -> - 2025-09-07 greek w0 feast3 fast0 exc0 rows=0,0,0 -> - 2025-09-08 greek w1 feast7 fast0 exc2 rows=0,2 -> - -2025-09-09 greek w2 feast3 fast0 exc1 rows=0,0 -> - +2025-09-09 greek w2 feast3 fast0 exc1 rows=0,1 -> - 2025-09-10 greek w3 feast0 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil 2025-09-11 greek w4 feast4 fast0 exc0 rows=0,0 -> - -2025-09-12 greek w5 feast0 fast1 exc0 rows=0,1 -> meat,fish,dairy,eggs,wine,oil +2025-09-12 greek w5 feast0 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil 2025-09-13 greek w6 feast3 fast0 exc1 rows=0,0,1 -> - 2025-09-14 greek w0 feast8 fast1 exc1 rows=0,0 -> meat,fish,dairy,eggs 2025-09-15 greek w1 feast2 fast0 exc0 rows=0,0 -> - @@ -2086,18 +2086,18 @@ 2025-09-17 greek w3 feast0 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil 2025-09-18 greek w4 feast0 fast0 exc0 rows=0,0 -> - 2025-09-19 greek w5 feast3 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil -2025-09-20 greek w6 feast3 fast0 exc1 rows=0,0,0 -> - +2025-09-20 greek w6 feast3 fast0 exc1 rows=0,0,1 -> - 2025-09-21 greek w0 feast4 fast0 exc0 rows=0,0,0 -> - 2025-09-22 greek w1 feast2 fast0 exc0 rows=0,0 -> - 2025-09-23 greek w2 feast3 fast0 exc1 rows=0,1 -> - -2025-09-24 greek w3 feast4 fast1 exc0 rows=0,2 -> meat,fish,dairy,eggs,wine,oil +2025-09-24 greek w3 feast4 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil 2025-09-25 greek w4 feast0 fast0 exc0 rows=0,0 -> - 2025-09-26 greek w5 feast5 fast1 exc1 rows=0,2 -> meat,fish,dairy,eggs 2025-09-27 greek w6 feast3 fast0 exc0 rows=0,0 -> - -2025-09-28 greek w0 feast4 fast0 exc0 rows=0,1 -> - +2025-09-28 greek w0 feast4 fast0 exc0 rows=0,0 -> - 2025-09-29 greek w1 feast2 fast0 exc0 rows=0,0 -> - 2025-09-30 greek w2 feast3 fast0 exc0 rows=0,0 -> - -2025-10-01 greek w3 feast0 fast1 exc1 rows=0,0 -> meat,fish,dairy,eggs +2025-10-01 greek w3 feast0 fast1 exc1 rows=0,1 -> meat,fish,dairy,eggs 2025-10-02 greek w4 feast2 fast0 exc0 rows=0,0 -> - 2025-10-03 greek w5 feast2 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil 2025-10-04 greek w6 feast3 fast0 exc0 rows=0,0 -> - @@ -2105,7 +2105,7 @@ 2025-10-06 greek w1 feast5 fast0 exc2 rows=0,2 -> - 2025-10-07 greek w2 feast2 fast0 exc0 rows=0,0 -> - 2025-10-08 greek w3 feast0 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil -2025-10-09 greek w4 feast5 fast0 exc0 rows=0,2 -> - +2025-10-09 greek w4 feast5 fast0 exc0 rows=0,0 -> - 2025-10-10 greek w5 feast0 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil 2025-10-11 greek w6 feast0 fast0 exc0 rows=0,0 -> - 2025-10-12 greek w0 feast0 fast0 exc0 rows=0,0,0 -> - @@ -2119,7 +2119,7 @@ 2025-10-20 greek w1 feast2 fast0 exc0 rows=0,0 -> - 2025-10-21 greek w2 feast2 fast0 exc0 rows=0,0 -> - 2025-10-22 greek w3 feast0 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil -2025-10-23 greek w4 feast3 fast0 exc1 rows=0,0 -> - +2025-10-23 greek w4 feast3 fast0 exc1 rows=0,1 -> - 2025-10-24 greek w5 feast0 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil 2025-10-25 greek w6 feast0 fast0 exc0 rows=0,0,0 -> - 2025-10-26 greek w0 feast4 fast0 exc2 rows=0,2 -> - @@ -2128,7 +2128,7 @@ 2025-10-29 greek w3 feast3 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil 2025-10-30 greek w4 feast0 fast0 exc0 rows=0,0 -> - 2025-10-31 greek w5 feast0 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil -2025-11-01 greek w6 feast5 fast0 exc2 rows=0,0,2 -> - +2025-11-01 greek w6 feast5 fast0 exc2 rows=0,1,2 -> - 2025-11-02 greek w0 feast0 fast0 exc0 rows=0,0,0 -> - 2025-11-03 greek w1 feast0 fast0 exc0 rows=0,0 -> - 2025-11-04 greek w2 feast0 fast0 exc0 rows=0,0 -> - @@ -2139,9 +2139,9 @@ 2025-11-09 greek w0 feast0 fast0 exc0 rows=0,0 -> - 2025-11-10 greek w1 feast0 fast0 exc0 rows=0,0 -> - 2025-11-11 greek w2 feast0 fast0 exc0 rows=0,0 -> - -2025-11-12 greek w3 feast2 fast1 exc1 rows=0,0 -> meat,fish,dairy,eggs +2025-11-12 greek w3 feast2 fast1 exc1 rows=0,1 -> meat,fish,dairy,eggs 2025-11-13 greek w4 feast5 fast0 exc2 rows=0,2 -> - -2025-11-14 greek w5 feast4 fast1 exc2 rows=0,1 -> meat,dairy,eggs +2025-11-14 greek w5 feast4 fast1 exc2 rows=0,2 -> meat,dairy,eggs 2025-11-15 greek w6 feast0 fast5 exc2 rows=0,0 -> meat,dairy,eggs 2025-11-16 greek w0 feast6 fast5 exc2 rows=0,2 -> meat,dairy,eggs 2025-11-17 greek w1 feast3 fast5 exc2 rows=0,0 -> meat,dairy,eggs @@ -2161,23 +2161,23 @@ 2025-12-01 greek w1 feast0 fast5 exc2 rows=0,0 -> meat,dairy,eggs 2025-12-02 greek w2 feast0 fast5 exc2 rows=0,0 -> meat,dairy,eggs 2025-12-03 greek w3 feast3 fast5 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil -2025-12-04 greek w4 feast0 fast5 exc2 rows=0,0 -> meat,dairy,eggs -2025-12-05 greek w5 feast4 fast5 exc1 rows=0,0 -> meat,fish,dairy,eggs +2025-12-04 greek w4 feast0 fast5 exc2 rows=0,1 -> meat,dairy,eggs +2025-12-05 greek w5 feast4 fast5 exc1 rows=0,1 -> meat,fish,dairy,eggs 2025-12-06 greek w6 feast5 fast5 exc2 rows=0,2 -> meat,dairy,eggs 2025-12-07 greek w0 feast3 fast5 exc2 rows=0,0 -> meat,dairy,eggs 2025-12-08 greek w1 feast0 fast5 exc2 rows=0,0 -> meat,dairy,eggs -2025-12-09 greek w2 feast3 fast5 exc2 rows=0,0 -> meat,dairy,eggs +2025-12-09 greek w2 feast3 fast5 exc2 rows=0,1 -> meat,dairy,eggs 2025-12-10 greek w3 feast0 fast5 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil 2025-12-11 greek w4 feast0 fast5 exc2 rows=0,0 -> meat,dairy,eggs -2025-12-12 greek w5 feast2 fast5 exc1 rows=0,0 -> meat,fish,dairy,eggs +2025-12-12 greek w5 feast2 fast5 exc1 rows=0,1 -> meat,fish,dairy,eggs 2025-12-13 greek w6 feast0 fast5 exc1 rows=0,0 -> meat,fish,dairy,eggs 2025-12-14 greek w0 feast0 fast5 exc1 rows=0,0,0 -> meat,fish,dairy,eggs -2025-12-15 greek w1 feast2 fast5 exc1 rows=0,0 -> meat,fish,dairy,eggs +2025-12-15 greek w1 feast2 fast5 exc1 rows=0,1 -> meat,fish,dairy,eggs 2025-12-16 greek w2 feast0 fast5 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil -2025-12-17 greek w3 feast2 fast5 exc1 rows=0,0 -> meat,fish,dairy,eggs +2025-12-17 greek w3 feast2 fast5 exc1 rows=0,1 -> meat,fish,dairy,eggs 2025-12-18 greek w4 feast0 fast5 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil 2025-12-19 greek w5 feast0 fast5 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil -2025-12-20 greek w6 feast0 fast5 exc1 rows=0,0,0 -> meat,fish,dairy,eggs +2025-12-20 greek w6 feast0 fast5 exc1 rows=0,0,1 -> meat,fish,dairy,eggs 2025-12-21 greek w0 feast0 fast5 exc1 rows=0,0,0 -> meat,fish,dairy,eggs 2025-12-22 greek w1 feast0 fast5 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil 2025-12-23 greek w2 feast0 fast5 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil @@ -2199,23 +2199,23 @@ 2026-01-08 greek w4 feast0 fast0 exc0 rows=0,0 -> - 2026-01-09 greek w5 feast4 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil 2026-01-10 greek w6 feast0 fast0 exc0 rows=0,0,0 -> - -2026-01-11 greek w0 feast4 fast0 exc1 rows=0,0,0 -> - +2026-01-11 greek w0 feast4 fast0 exc1 rows=0,0,1 -> - 2026-01-12 greek w1 feast3 fast0 exc0 rows=0,0 -> - 2026-01-13 greek w2 feast0 fast0 exc0 rows=0,0 -> - -2026-01-14 greek w3 feast4 fast1 exc1 rows=0,0 -> meat,fish,dairy,eggs +2026-01-14 greek w3 feast4 fast1 exc1 rows=0,1 -> meat,fish,dairy,eggs 2026-01-15 greek w4 feast2 fast0 exc0 rows=0,0 -> - -2026-01-16 greek w5 feast2 fast1 exc1 rows=0,0 -> meat,fish,dairy,eggs +2026-01-16 greek w5 feast2 fast1 exc1 rows=0,1 -> meat,fish,dairy,eggs 2026-01-17 greek w6 feast5 fast0 exc2 rows=0,2 -> - -2026-01-18 greek w0 feast2 fast0 exc1 rows=0,0 -> - +2026-01-18 greek w0 feast2 fast0 exc1 rows=0,1 -> - 2026-01-19 greek w1 feast2 fast0 exc0 rows=0,0 -> - 2026-01-20 greek w2 feast5 fast0 exc2 rows=0,2 -> - 2026-01-21 greek w3 feast0 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil -2026-01-22 greek w4 feast0 fast0 exc1 rows=0,0 -> - +2026-01-22 greek w4 feast0 fast0 exc1 rows=0,1 -> - 2026-01-23 greek w5 feast0 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil 2026-01-24 greek w6 feast4 fast0 exc0 rows=0,0 -> - -2026-01-25 greek w0 feast4 fast0 exc1 rows=0,0 -> - +2026-01-25 greek w0 feast4 fast0 exc1 rows=0,1 -> - 2026-01-26 greek w1 feast0 fast0 exc0 rows=0,0 -> - -2026-01-27 greek w2 feast4 fast0 exc1 rows=0,0 -> - +2026-01-27 greek w2 feast4 fast0 exc1 rows=0,1 -> - 2026-01-28 greek w3 feast2 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil 2026-01-29 greek w4 feast2 fast0 exc0 rows=0,0 -> - 2026-01-30 greek w5 feast5 fast1 exc1 rows=0,2 -> meat,fish,dairy,eggs @@ -2227,16 +2227,16 @@ 2026-02-05 greek w4 feast0 fast0 exc11 rows=0,11 -> - 2026-02-06 greek w5 feast0 fast0 exc11 rows=0,11 -> - 2026-02-07 greek w6 feast0 fast0 exc11 rows=0,11 -> - -2026-02-08 greek w0 feast2 fast0 exc1 rows=0,0 -> - +2026-02-08 greek w0 feast2 fast0 exc1 rows=0,1 -> - 2026-02-09 greek w1 feast4 fast0 exc0 rows=0,0 -> - -2026-02-10 greek w2 feast0 fast0 exc1 rows=0,0 -> - -2026-02-11 greek w3 feast3 fast1 exc1 rows=0,0 -> meat,fish,dairy,eggs +2026-02-10 greek w2 feast0 fast0 exc1 rows=0,1 -> - +2026-02-11 greek w3 feast3 fast1 exc1 rows=0,1 -> meat,fish,dairy,eggs 2026-02-12 greek w4 feast4 fast0 exc0 rows=0,0 -> - 2026-02-13 greek w5 feast0 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil 2026-02-14 greek w6 feast4 fast0 exc0 rows=0,0 -> - 2026-02-15 greek w0 feast0 fast0 exc0 rows=0,0 -> - 2026-02-16 greek w1 feast0 fast1 exc7 rows=0,7 -> meat -2026-02-17 greek w2 feast4 fast1 exc7 rows=0,7 -> meat +2026-02-17 greek w2 feast4 fast1 exc7 rows=1,7 -> meat 2026-02-18 greek w3 feast0 fast1 exc7 rows=0,7 -> meat 2026-02-19 greek w4 feast0 fast1 exc7 rows=0,7 -> meat 2026-02-20 greek w5 feast0 fast1 exc7 rows=0,7 -> meat @@ -2285,7 +2285,7 @@ 2026-04-04 greek w6 feast0 fast2 exc6 rows=0,6 -> meat,fish,dairy,eggs 2026-04-05 greek w0 feast8 fast2 exc4 rows=0,4 -> meat,dairy,eggs 2026-04-06 greek w1 feast4 fast2 exc10 rows=0,10 -> meat,fish,dairy,eggs,wine,oil -2026-04-07 greek w2 feast4 fast2 exc10 rows=1,10 -> meat,fish,dairy,eggs,wine,oil +2026-04-07 greek w2 feast4 fast2 exc10 rows=0,10 -> meat,fish,dairy,eggs,wine,oil 2026-04-08 greek w3 feast1 fast2 exc10 rows=0,10 -> meat,fish,dairy,eggs,wine,oil 2026-04-09 greek w4 feast3 fast2 exc3 rows=0,3 -> meat,fish,dairy,eggs 2026-04-10 greek w5 feast0 fast2 exc9 rows=0,9 -> meat,fish,dairy,eggs,wine,oil @@ -2301,7 +2301,7 @@ 2026-04-20 greek w1 feast0 fast0 exc0 rows=0,0 -> - 2026-04-21 greek w2 feast0 fast0 exc0 rows=0,0 -> - 2026-04-22 greek w3 feast0 fast1 exc1 rows=0,1 -> meat,fish,dairy,eggs -2026-04-23 greek w4 feast5 fast0 exc0 rows=0,1 -> - +2026-04-23 greek w4 feast5 fast0 exc0 rows=0,0 -> - 2026-04-24 greek w5 feast0 fast1 exc1 rows=0,1 -> meat,fish,dairy,eggs 2026-04-25 greek w6 feast4 fast0 exc1 rows=0,1 -> - 2026-04-26 greek w0 feast3 fast0 exc0 rows=0,0 -> - @@ -2319,7 +2319,7 @@ 2026-05-08 greek w5 feast5 fast1 exc1 rows=1,2 -> meat,fish,dairy,eggs 2026-05-09 greek w6 feast4 fast0 exc0 rows=0,0 -> - 2026-05-10 greek w0 feast4 fast0 exc0 rows=0,0 -> - -2026-05-11 greek w1 feast0 fast0 exc1 rows=0,0 -> - +2026-05-11 greek w1 feast0 fast0 exc1 rows=0,1 -> - 2026-05-12 greek w2 feast0 fast0 exc0 rows=0,0 -> - 2026-05-13 greek w3 feast0 fast1 exc1 rows=0,1 -> meat,fish,dairy,eggs 2026-05-14 greek w4 feast2 fast0 exc0 rows=0,0 -> - @@ -2347,10 +2347,10 @@ 2026-06-05 greek w5 feast0 fast0 exc11 rows=0,11 -> - 2026-06-06 greek w6 feast0 fast0 exc11 rows=0,11 -> - 2026-06-07 greek w0 feast0 fast0 exc0 rows=0,0 -> - -2026-06-08 greek w1 feast2 fast3 exc2 rows=0,0 -> meat,dairy,eggs +2026-06-08 greek w1 feast2 fast3 exc2 rows=0,1 -> meat,dairy,eggs 2026-06-09 greek w2 feast3 fast3 exc2 rows=0,0 -> meat,dairy,eggs 2026-06-10 greek w3 feast4 fast3 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil -2026-06-11 greek w4 feast4 fast3 exc2 rows=0,0 -> meat,dairy,eggs +2026-06-11 greek w4 feast4 fast3 exc2 rows=0,1 -> meat,dairy,eggs 2026-06-12 greek w5 feast2 fast3 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil 2026-06-13 greek w6 feast0 fast3 exc2 rows=0,0 -> meat,dairy,eggs 2026-06-14 greek w0 feast0 fast3 exc2 rows=0,0 -> meat,dairy,eggs @@ -2369,15 +2369,15 @@ 2026-06-27 greek w6 feast0 fast3 exc2 rows=0,0 -> meat,dairy,eggs 2026-06-28 greek w0 feast2 fast3 exc2 rows=0,0 -> meat,dairy,eggs 2026-06-29 greek w1 feast6 fast0 exc2 rows=0,2 -> - -2026-06-30 greek w2 feast4 fast0 exc1 rows=0,0 -> - -2026-07-01 greek w3 feast2 fast1 exc1 rows=0,0 -> meat,fish,dairy,eggs -2026-07-02 greek w4 feast3 fast0 exc1 rows=0,0 -> - +2026-06-30 greek w2 feast4 fast0 exc1 rows=0,1 -> - +2026-07-01 greek w3 feast2 fast1 exc1 rows=0,1 -> meat,fish,dairy,eggs +2026-07-02 greek w4 feast3 fast0 exc1 rows=0,1 -> - 2026-07-03 greek w5 feast4 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil 2026-07-04 greek w6 feast0 fast0 exc0 rows=0,0 -> - 2026-07-05 greek w0 feast0 fast0 exc0 rows=0,0 -> - 2026-07-06 greek w1 feast0 fast0 exc0 rows=0,0 -> - 2026-07-07 greek w2 feast0 fast0 exc0 rows=0,0 -> - -2026-07-08 greek w3 feast2 fast1 exc1 rows=0,0 -> meat,fish,dairy,eggs +2026-07-08 greek w3 feast2 fast1 exc1 rows=0,1 -> meat,fish,dairy,eggs 2026-07-09 greek w4 feast0 fast0 exc0 rows=0,0 -> - 2026-07-10 greek w5 feast0 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil 2026-07-11 greek w6 feast2 fast0 exc0 rows=0,0 -> - @@ -2386,17 +2386,17 @@ 2026-07-14 greek w2 feast2 fast0 exc0 rows=0,0 -> - 2026-07-15 greek w3 feast0 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil 2026-07-16 greek w4 feast0 fast0 exc0 rows=0,0 -> - -2026-07-17 greek w5 feast4 fast1 exc1 rows=0,0 -> meat,fish,dairy,eggs +2026-07-17 greek w5 feast4 fast1 exc1 rows=0,1 -> meat,fish,dairy,eggs 2026-07-18 greek w6 feast0 fast0 exc0 rows=0,0 -> - 2026-07-19 greek w0 feast0 fast0 exc0 rows=0,0,0 -> - 2026-07-20 greek w1 feast5 fast0 exc2 rows=0,2 -> - 2026-07-21 greek w2 feast0 fast0 exc0 rows=0,0 -> - -2026-07-22 greek w3 feast2 fast1 exc1 rows=0,0 -> meat,fish,dairy,eggs +2026-07-22 greek w3 feast2 fast1 exc1 rows=0,1 -> meat,fish,dairy,eggs 2026-07-23 greek w4 feast0 fast0 exc0 rows=0,0 -> - 2026-07-24 greek w5 feast0 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil -2026-07-25 greek w6 feast3 fast0 exc1 rows=0,0 -> - -2026-07-26 greek w0 feast0 fast0 exc1 rows=0,0 -> - -2026-07-27 greek w1 feast2 fast0 exc1 rows=0,0 -> - +2026-07-25 greek w6 feast3 fast0 exc1 rows=0,1 -> - +2026-07-26 greek w0 feast0 fast0 exc1 rows=0,1 -> - +2026-07-27 greek w1 feast2 fast0 exc1 rows=0,1 -> - 2026-07-28 greek w2 feast0 fast0 exc0 rows=0,0 -> - 2026-07-29 greek w3 feast0 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil 2026-07-30 greek w4 feast0 fast0 exc0 rows=0,0 -> - @@ -2416,7 +2416,7 @@ 2026-08-13 greek w4 feast4 fast4 exc0 rows=0,4 -> meat,fish,dairy,eggs,wine,oil 2026-08-14 greek w5 feast2 fast4 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil 2026-08-15 greek w6 feast7 fast0 exc2 rows=0,2 -> - -2026-08-16 greek w0 feast5 fast0 exc0 rows=0,1 -> - +2026-08-16 greek w0 feast5 fast0 exc0 rows=0,0 -> - 2026-08-17 greek w1 feast0 fast0 exc0 rows=0,0 -> - 2026-08-18 greek w2 feast0 fast0 exc0 rows=0,0 -> - 2026-08-19 greek w3 feast0 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil @@ -2429,21 +2429,21 @@ 2026-08-26 greek w3 feast4 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil 2026-08-27 greek w4 feast0 fast0 exc0 rows=0,0 -> - 2026-08-28 greek w5 feast0 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil -2026-08-29 greek w6 feast6 fast1 exc1 rows=0,8 -> meat,fish,dairy,eggs +2026-08-29 greek w6 feast6 fast1 exc1 rows=0,0 -> meat,fish,dairy,eggs 2026-08-30 greek w0 feast4 fast0 exc0 rows=0,0 -> - -2026-08-31 greek w1 feast3 fast0 exc1 rows=0,0 -> - +2026-08-31 greek w1 feast3 fast0 exc1 rows=0,1 -> - 2026-09-01 greek w2 feast4 fast0 exc1 rows=0,1 -> - 2026-09-02 greek w3 feast0 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil 2026-09-03 greek w4 feast0 fast0 exc0 rows=0,0 -> - 2026-09-04 greek w5 feast0 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil 2026-09-05 greek w6 feast2 fast0 exc0 rows=0,0 -> - -2026-09-06 greek w0 feast2 fast0 exc1 rows=0,0 -> - +2026-09-06 greek w0 feast2 fast0 exc1 rows=0,1 -> - 2026-09-07 greek w1 feast3 fast0 exc0 rows=0,0 -> - 2026-09-08 greek w2 feast7 fast0 exc2 rows=0,2 -> - -2026-09-09 greek w3 feast3 fast1 exc1 rows=0,0 -> meat,fish,dairy,eggs +2026-09-09 greek w3 feast3 fast1 exc1 rows=0,1 -> meat,fish,dairy,eggs 2026-09-10 greek w4 feast0 fast0 exc0 rows=0,0 -> - 2026-09-11 greek w5 feast4 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil -2026-09-12 greek w6 feast0 fast0 exc0 rows=0,0,1 -> - +2026-09-12 greek w6 feast0 fast0 exc0 rows=0,0,0 -> - 2026-09-13 greek w0 feast3 fast0 exc1 rows=0,0,1 -> - 2026-09-14 greek w1 feast8 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil 2026-09-15 greek w2 feast2 fast0 exc0 rows=0,0 -> - @@ -2451,18 +2451,18 @@ 2026-09-17 greek w4 feast0 fast0 exc0 rows=0,0 -> - 2026-09-18 greek w5 feast0 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil 2026-09-19 greek w6 feast3 fast0 exc0 rows=0,0,0 -> - -2026-09-20 greek w0 feast3 fast0 exc1 rows=0,0,0 -> - +2026-09-20 greek w0 feast3 fast0 exc1 rows=0,0,1 -> - 2026-09-21 greek w1 feast4 fast0 exc0 rows=0,0 -> - 2026-09-22 greek w2 feast2 fast0 exc0 rows=0,0 -> - 2026-09-23 greek w3 feast3 fast1 exc1 rows=0,1 -> meat,fish,dairy,eggs -2026-09-24 greek w4 feast4 fast0 exc0 rows=0,2 -> - +2026-09-24 greek w4 feast4 fast0 exc0 rows=0,0 -> - 2026-09-25 greek w5 feast0 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil 2026-09-26 greek w6 feast5 fast0 exc2 rows=0,2 -> - 2026-09-27 greek w0 feast3 fast0 exc0 rows=0,0 -> - -2026-09-28 greek w1 feast4 fast0 exc0 rows=0,1 -> - +2026-09-28 greek w1 feast4 fast0 exc0 rows=0,0 -> - 2026-09-29 greek w2 feast2 fast0 exc0 rows=0,0 -> - 2026-09-30 greek w3 feast3 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil -2026-10-01 greek w4 feast0 fast0 exc1 rows=0,0 -> - +2026-10-01 greek w4 feast0 fast0 exc1 rows=0,1 -> - 2026-10-02 greek w5 feast2 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil 2026-10-03 greek w6 feast2 fast0 exc0 rows=0,0 -> - 2026-10-04 greek w0 feast3 fast0 exc0 rows=0,0 -> - @@ -2470,7 +2470,7 @@ 2026-10-06 greek w2 feast5 fast0 exc2 rows=0,2 -> - 2026-10-07 greek w3 feast2 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil 2026-10-08 greek w4 feast0 fast0 exc0 rows=0,0 -> - -2026-10-09 greek w5 feast5 fast1 exc0 rows=0,2 -> meat,fish,dairy,eggs,wine,oil +2026-10-09 greek w5 feast5 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil 2026-10-10 greek w6 feast0 fast0 exc0 rows=0,0 -> - 2026-10-11 greek w0 feast0 fast0 exc0 rows=0,0,0 -> - 2026-10-12 greek w1 feast0 fast0 exc0 rows=0,0 -> - @@ -2484,7 +2484,7 @@ 2026-10-20 greek w2 feast2 fast0 exc0 rows=0,0 -> - 2026-10-21 greek w3 feast2 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil 2026-10-22 greek w4 feast0 fast0 exc0 rows=0,0 -> - -2026-10-23 greek w5 feast3 fast1 exc1 rows=0,0 -> meat,fish,dairy,eggs +2026-10-23 greek w5 feast3 fast1 exc1 rows=0,1 -> meat,fish,dairy,eggs 2026-10-24 greek w6 feast0 fast0 exc0 rows=0,0,0 -> - 2026-10-25 greek w0 feast0 fast0 exc0 rows=0,0 -> - 2026-10-26 greek w1 feast4 fast0 exc2 rows=0,2 -> - @@ -2493,7 +2493,7 @@ 2026-10-29 greek w4 feast3 fast0 exc0 rows=0,0 -> - 2026-10-30 greek w5 feast0 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil 2026-10-31 greek w6 feast0 fast0 exc0 rows=0,0 -> - -2026-11-01 greek w0 feast2 fast0 exc1 rows=0,0 -> - +2026-11-01 greek w0 feast2 fast0 exc1 rows=0,1 -> - 2026-11-02 greek w1 feast0 fast0 exc0 rows=0,0 -> - 2026-11-03 greek w2 feast0 fast0 exc0 rows=0,0 -> - 2026-11-04 greek w3 feast0 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil @@ -2504,9 +2504,9 @@ 2026-11-09 greek w1 feast0 fast0 exc0 rows=0,0 -> - 2026-11-10 greek w2 feast0 fast0 exc0 rows=0,0 -> - 2026-11-11 greek w3 feast0 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil -2026-11-12 greek w4 feast2 fast0 exc1 rows=0,0 -> - +2026-11-12 greek w4 feast2 fast0 exc1 rows=0,1 -> - 2026-11-13 greek w5 feast5 fast1 exc1 rows=0,2 -> meat,fish,dairy,eggs -2026-11-14 greek w6 feast4 fast0 exc2 rows=0,1 -> - +2026-11-14 greek w6 feast4 fast0 exc2 rows=0,2 -> - 2026-11-15 greek w0 feast0 fast5 exc2 rows=0,0 -> meat,dairy,eggs 2026-11-16 greek w1 feast6 fast5 exc2 rows=0,2 -> meat,dairy,eggs 2026-11-17 greek w2 feast3 fast5 exc2 rows=0,0 -> meat,dairy,eggs @@ -2526,23 +2526,23 @@ 2026-12-01 greek w2 feast0 fast5 exc2 rows=0,0 -> meat,dairy,eggs 2026-12-02 greek w3 feast0 fast5 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil 2026-12-03 greek w4 feast3 fast5 exc2 rows=0,0 -> meat,dairy,eggs -2026-12-04 greek w5 feast0 fast5 exc1 rows=0,0 -> meat,fish,dairy,eggs -2026-12-05 greek w6 feast4 fast5 exc2 rows=0,0 -> meat,dairy,eggs +2026-12-04 greek w5 feast0 fast5 exc1 rows=0,1 -> meat,fish,dairy,eggs +2026-12-05 greek w6 feast4 fast5 exc2 rows=0,1 -> meat,dairy,eggs 2026-12-06 greek w0 feast5 fast5 exc2 rows=0,2 -> meat,dairy,eggs 2026-12-07 greek w1 feast3 fast5 exc2 rows=0,0 -> meat,dairy,eggs 2026-12-08 greek w2 feast0 fast5 exc2 rows=0,0 -> meat,dairy,eggs -2026-12-09 greek w3 feast3 fast5 exc1 rows=0,0 -> meat,fish,dairy,eggs +2026-12-09 greek w3 feast3 fast5 exc1 rows=0,1 -> meat,fish,dairy,eggs 2026-12-10 greek w4 feast0 fast5 exc2 rows=0,0 -> meat,dairy,eggs 2026-12-11 greek w5 feast0 fast5 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil -2026-12-12 greek w6 feast2 fast5 exc1 rows=0,0 -> meat,fish,dairy,eggs +2026-12-12 greek w6 feast2 fast5 exc1 rows=0,1 -> meat,fish,dairy,eggs 2026-12-13 greek w0 feast0 fast5 exc1 rows=0,0,0 -> meat,fish,dairy,eggs 2026-12-14 greek w1 feast0 fast5 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil -2026-12-15 greek w2 feast2 fast5 exc1 rows=0,0 -> meat,fish,dairy,eggs +2026-12-15 greek w2 feast2 fast5 exc1 rows=0,1 -> meat,fish,dairy,eggs 2026-12-16 greek w3 feast0 fast5 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil -2026-12-17 greek w4 feast2 fast5 exc1 rows=0,0 -> meat,fish,dairy,eggs +2026-12-17 greek w4 feast2 fast5 exc1 rows=0,1 -> meat,fish,dairy,eggs 2026-12-18 greek w5 feast0 fast5 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil 2026-12-19 greek w6 feast0 fast5 exc1 rows=0,0,0 -> meat,fish,dairy,eggs -2026-12-20 greek w0 feast0 fast5 exc1 rows=0,0,0 -> meat,fish,dairy,eggs +2026-12-20 greek w0 feast0 fast5 exc1 rows=0,0,1 -> meat,fish,dairy,eggs 2026-12-21 greek w1 feast0 fast5 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil 2026-12-22 greek w2 feast0 fast5 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil 2026-12-23 greek w3 feast0 fast5 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil @@ -2564,23 +2564,23 @@ 2027-01-08 greek w5 feast0 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil 2027-01-09 greek w6 feast4 fast0 exc0 rows=0,0,0 -> - 2027-01-10 greek w0 feast0 fast0 exc0 rows=0,0,0 -> - -2027-01-11 greek w1 feast4 fast0 exc1 rows=0,0 -> - +2027-01-11 greek w1 feast4 fast0 exc1 rows=0,1 -> - 2027-01-12 greek w2 feast3 fast0 exc0 rows=0,0 -> - 2027-01-13 greek w3 feast0 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil -2027-01-14 greek w4 feast4 fast0 exc1 rows=0,0 -> - +2027-01-14 greek w4 feast4 fast0 exc1 rows=0,1 -> - 2027-01-15 greek w5 feast2 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil -2027-01-16 greek w6 feast2 fast0 exc1 rows=0,0 -> - +2027-01-16 greek w6 feast2 fast0 exc1 rows=0,1 -> - 2027-01-17 greek w0 feast5 fast0 exc2 rows=0,2 -> - -2027-01-18 greek w1 feast2 fast0 exc1 rows=0,0 -> - +2027-01-18 greek w1 feast2 fast0 exc1 rows=0,1 -> - 2027-01-19 greek w2 feast2 fast0 exc0 rows=0,0 -> - 2027-01-20 greek w3 feast5 fast1 exc1 rows=0,2 -> meat,fish,dairy,eggs 2027-01-21 greek w4 feast0 fast0 exc0 rows=0,0 -> - -2027-01-22 greek w5 feast0 fast1 exc1 rows=0,0 -> meat,fish,dairy,eggs +2027-01-22 greek w5 feast0 fast1 exc1 rows=0,1 -> meat,fish,dairy,eggs 2027-01-23 greek w6 feast0 fast0 exc0 rows=0,0 -> - 2027-01-24 greek w0 feast5 fast0 exc0 rows=0,0,0 -> - -2027-01-25 greek w1 feast4 fast0 exc1 rows=0,0 -> - +2027-01-25 greek w1 feast4 fast0 exc1 rows=0,1 -> - 2027-01-26 greek w2 feast0 fast0 exc0 rows=0,0 -> - -2027-01-27 greek w3 feast4 fast1 exc1 rows=0,0 -> meat,fish,dairy,eggs +2027-01-27 greek w3 feast4 fast1 exc1 rows=0,1 -> meat,fish,dairy,eggs 2027-01-28 greek w4 feast2 fast0 exc0 rows=0,0 -> - 2027-01-29 greek w5 feast2 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil 2027-01-30 greek w6 feast5 fast0 exc2 rows=0,2 -> - @@ -2592,16 +2592,16 @@ 2027-02-05 greek w5 feast0 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil 2027-02-06 greek w6 feast0 fast0 exc0 rows=0,0 -> - 2027-02-07 greek w0 feast0 fast0 exc0 rows=0,0 -> - -2027-02-08 greek w1 feast2 fast0 exc1 rows=0,0 -> - +2027-02-08 greek w1 feast2 fast0 exc1 rows=0,1 -> - 2027-02-09 greek w2 feast4 fast0 exc0 rows=0,0 -> - -2027-02-10 greek w3 feast0 fast1 exc1 rows=0,0 -> meat,fish,dairy,eggs -2027-02-11 greek w4 feast3 fast0 exc1 rows=0,0 -> - +2027-02-10 greek w3 feast0 fast1 exc1 rows=0,1 -> meat,fish,dairy,eggs +2027-02-11 greek w4 feast3 fast0 exc1 rows=0,1 -> - 2027-02-12 greek w5 feast4 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil 2027-02-13 greek w6 feast0 fast0 exc0 rows=0,0 -> - 2027-02-14 greek w0 feast4 fast0 exc0 rows=0,0 -> - 2027-02-15 greek w1 feast0 fast0 exc0 rows=0,0 -> - 2027-02-16 greek w2 feast0 fast0 exc0 rows=0,0 -> - -2027-02-17 greek w3 feast4 fast1 exc1 rows=0,0 -> meat,fish,dairy,eggs +2027-02-17 greek w3 feast4 fast1 exc1 rows=0,1 -> meat,fish,dairy,eggs 2027-02-18 greek w4 feast0 fast0 exc0 rows=0,0 -> - 2027-02-19 greek w5 feast0 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil 2027-02-20 greek w6 feast0 fast0 exc0 rows=0,0 -> - @@ -2650,7 +2650,7 @@ 2027-04-04 greek w0 feast0 fast2 exc3 rows=0,3 -> meat,fish,dairy,eggs 2027-04-05 greek w1 feast0 fast2 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil 2027-04-06 greek w2 feast4 fast2 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil -2027-04-07 greek w3 feast4 fast2 exc0 rows=0,1 -> meat,fish,dairy,eggs,wine,oil +2027-04-07 greek w3 feast4 fast2 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil 2027-04-08 greek w4 feast0 fast2 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil 2027-04-09 greek w5 feast1 fast2 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil 2027-04-10 greek w6 feast0 fast2 exc3 rows=0,3 -> meat,fish,dairy,eggs @@ -2666,7 +2666,7 @@ 2027-04-20 greek w2 feast0 fast2 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil 2027-04-21 greek w3 feast1 fast2 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil 2027-04-22 greek w4 feast0 fast2 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil -2027-04-23 greek w5 feast5 fast2 exc0 rows=0,1 -> meat,fish,dairy,eggs,wine,oil +2027-04-23 greek w5 feast5 fast2 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil 2027-04-24 greek w6 feast0 fast2 exc6 rows=0,6 -> meat,fish,dairy,eggs 2027-04-25 greek w0 feast8 fast2 exc4 rows=1,4 -> meat,dairy,eggs 2027-04-26 greek w1 feast3 fast2 exc10 rows=0,10 -> meat,fish,dairy,eggs,wine,oil @@ -2684,7 +2684,7 @@ 2027-05-08 greek w6 feast5 fast0 exc11 rows=2,11 -> - 2027-05-09 greek w0 feast4 fast0 exc0 rows=0,0 -> - 2027-05-10 greek w1 feast4 fast0 exc0 rows=0,0 -> - -2027-05-11 greek w2 feast0 fast0 exc1 rows=0,0 -> - +2027-05-11 greek w2 feast0 fast0 exc1 rows=0,1 -> - 2027-05-12 greek w3 feast0 fast1 exc1 rows=0,1 -> meat,fish,dairy,eggs 2027-05-13 greek w4 feast0 fast0 exc0 rows=0,0 -> - 2027-05-14 greek w5 feast2 fast1 exc1 rows=0,1 -> meat,fish,dairy,eggs @@ -2712,10 +2712,10 @@ 2027-06-05 greek w6 feast0 fast0 exc0 rows=0,0 -> - 2027-06-06 greek w0 feast0 fast0 exc0 rows=0,0 -> - 2027-06-07 greek w1 feast0 fast0 exc0 rows=0,0 -> - -2027-06-08 greek w2 feast2 fast0 exc1 rows=0,0 -> - +2027-06-08 greek w2 feast2 fast0 exc1 rows=0,1 -> - 2027-06-09 greek w3 feast3 fast1 exc2 rows=0,2 -> meat,dairy,eggs 2027-06-10 greek w4 feast8 fast0 exc0 rows=0,0 -> - -2027-06-11 greek w5 feast4 fast1 exc1 rows=0,1 -> meat,fish,dairy,eggs +2027-06-11 greek w5 feast4 fast1 exc1 rows=1,1 -> meat,fish,dairy,eggs 2027-06-12 greek w6 feast2 fast0 exc0 rows=0,0 -> - 2027-06-13 greek w0 feast0 fast0 exc0 rows=0,0 -> - 2027-06-14 greek w1 feast0 fast0 exc0 rows=0,0 -> - @@ -2734,15 +2734,15 @@ 2027-06-27 greek w0 feast0 fast0 exc0 rows=0,0 -> - 2027-06-28 greek w1 feast2 fast3 exc2 rows=0,0 -> meat,dairy,eggs 2027-06-29 greek w2 feast6 fast0 exc2 rows=0,2 -> - -2027-06-30 greek w3 feast4 fast1 exc1 rows=0,0 -> meat,fish,dairy,eggs -2027-07-01 greek w4 feast2 fast0 exc1 rows=0,0 -> - -2027-07-02 greek w5 feast3 fast1 exc1 rows=0,0 -> meat,fish,dairy,eggs +2027-06-30 greek w3 feast4 fast1 exc1 rows=0,1 -> meat,fish,dairy,eggs +2027-07-01 greek w4 feast2 fast0 exc1 rows=0,1 -> - +2027-07-02 greek w5 feast3 fast1 exc1 rows=0,1 -> meat,fish,dairy,eggs 2027-07-03 greek w6 feast4 fast0 exc0 rows=0,0 -> - 2027-07-04 greek w0 feast0 fast0 exc0 rows=0,0 -> - 2027-07-05 greek w1 feast0 fast0 exc0 rows=0,0 -> - 2027-07-06 greek w2 feast0 fast0 exc0 rows=0,0 -> - 2027-07-07 greek w3 feast0 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil -2027-07-08 greek w4 feast2 fast0 exc1 rows=0,0 -> - +2027-07-08 greek w4 feast2 fast0 exc1 rows=0,1 -> - 2027-07-09 greek w5 feast0 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil 2027-07-10 greek w6 feast0 fast0 exc0 rows=0,0 -> - 2027-07-11 greek w0 feast2 fast0 exc0 rows=0,0 -> - @@ -2751,17 +2751,17 @@ 2027-07-14 greek w3 feast2 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil 2027-07-15 greek w4 feast0 fast0 exc0 rows=0,0 -> - 2027-07-16 greek w5 feast0 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil -2027-07-17 greek w6 feast4 fast0 exc1 rows=0,0 -> - +2027-07-17 greek w6 feast4 fast0 exc1 rows=0,1 -> - 2027-07-18 greek w0 feast0 fast0 exc0 rows=0,0,0 -> - 2027-07-19 greek w1 feast0 fast0 exc0 rows=0,0 -> - 2027-07-20 greek w2 feast5 fast0 exc2 rows=0,2 -> - 2027-07-21 greek w3 feast0 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil -2027-07-22 greek w4 feast2 fast0 exc1 rows=0,0 -> - +2027-07-22 greek w4 feast2 fast0 exc1 rows=0,1 -> - 2027-07-23 greek w5 feast0 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil 2027-07-24 greek w6 feast0 fast0 exc0 rows=0,0 -> - -2027-07-25 greek w0 feast3 fast0 exc1 rows=0,0 -> - -2027-07-26 greek w1 feast0 fast0 exc1 rows=0,0 -> - -2027-07-27 greek w2 feast2 fast0 exc1 rows=0,0 -> - +2027-07-25 greek w0 feast3 fast0 exc1 rows=0,1 -> - +2027-07-26 greek w1 feast0 fast0 exc1 rows=0,1 -> - +2027-07-27 greek w2 feast2 fast0 exc1 rows=0,1 -> - 2027-07-28 greek w3 feast0 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil 2027-07-29 greek w4 feast0 fast0 exc0 rows=0,0 -> - 2027-07-30 greek w5 feast0 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil @@ -2781,7 +2781,7 @@ 2027-08-13 greek w5 feast4 fast4 exc0 rows=0,4 -> meat,fish,dairy,eggs,wine,oil 2027-08-14 greek w6 feast2 fast4 exc1 rows=0,0 -> meat,fish,dairy,eggs 2027-08-15 greek w0 feast7 fast0 exc2 rows=0,2 -> - -2027-08-16 greek w1 feast5 fast0 exc0 rows=0,1 -> - +2027-08-16 greek w1 feast5 fast0 exc0 rows=0,0 -> - 2027-08-17 greek w2 feast0 fast0 exc0 rows=0,0 -> - 2027-08-18 greek w3 feast0 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil 2027-08-19 greek w4 feast0 fast0 exc0 rows=0,0 -> - @@ -2794,21 +2794,21 @@ 2027-08-26 greek w4 feast4 fast0 exc0 rows=0,0 -> - 2027-08-27 greek w5 feast0 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil 2027-08-28 greek w6 feast0 fast0 exc0 rows=0,0 -> - -2027-08-29 greek w0 feast6 fast1 exc1 rows=0,8 -> meat,fish,dairy,eggs +2027-08-29 greek w0 feast6 fast1 exc1 rows=0,0 -> meat,fish,dairy,eggs 2027-08-30 greek w1 feast4 fast0 exc0 rows=0,0 -> - -2027-08-31 greek w2 feast3 fast0 exc1 rows=0,0 -> - +2027-08-31 greek w2 feast3 fast0 exc1 rows=0,1 -> - 2027-09-01 greek w3 feast4 fast1 exc1 rows=0,1 -> meat,fish,dairy,eggs 2027-09-02 greek w4 feast0 fast0 exc0 rows=0,0 -> - 2027-09-03 greek w5 feast0 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil 2027-09-04 greek w6 feast0 fast0 exc0 rows=0,0 -> - 2027-09-05 greek w0 feast2 fast0 exc0 rows=0,0 -> - -2027-09-06 greek w1 feast2 fast0 exc1 rows=0,0 -> - +2027-09-06 greek w1 feast2 fast0 exc1 rows=0,1 -> - 2027-09-07 greek w2 feast3 fast0 exc0 rows=0,0 -> - 2027-09-08 greek w3 feast7 fast1 exc2 rows=0,2 -> meat,dairy,eggs -2027-09-09 greek w4 feast3 fast0 exc1 rows=0,0 -> - +2027-09-09 greek w4 feast3 fast0 exc1 rows=0,1 -> - 2027-09-10 greek w5 feast0 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil 2027-09-11 greek w6 feast4 fast0 exc0 rows=0,0,0 -> - -2027-09-12 greek w0 feast0 fast0 exc0 rows=0,0,1 -> - +2027-09-12 greek w0 feast0 fast0 exc0 rows=0,0,0 -> - 2027-09-13 greek w1 feast3 fast0 exc1 rows=0,1 -> - 2027-09-14 greek w2 feast8 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil 2027-09-15 greek w3 feast2 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil @@ -2816,18 +2816,18 @@ 2027-09-17 greek w5 feast0 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil 2027-09-18 greek w6 feast0 fast0 exc0 rows=0,0,0 -> - 2027-09-19 greek w0 feast3 fast0 exc0 rows=0,0,0 -> - -2027-09-20 greek w1 feast3 fast0 exc1 rows=0,0 -> - +2027-09-20 greek w1 feast3 fast0 exc1 rows=0,1 -> - 2027-09-21 greek w2 feast4 fast0 exc0 rows=0,0 -> - 2027-09-22 greek w3 feast2 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil 2027-09-23 greek w4 feast3 fast0 exc1 rows=0,1 -> - -2027-09-24 greek w5 feast4 fast1 exc0 rows=0,2 -> meat,fish,dairy,eggs,wine,oil +2027-09-24 greek w5 feast4 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil 2027-09-25 greek w6 feast0 fast0 exc0 rows=0,0 -> - 2027-09-26 greek w0 feast5 fast0 exc2 rows=0,2 -> - 2027-09-27 greek w1 feast3 fast0 exc0 rows=0,0 -> - -2027-09-28 greek w2 feast4 fast0 exc0 rows=0,1 -> - +2027-09-28 greek w2 feast4 fast0 exc0 rows=0,0 -> - 2027-09-29 greek w3 feast2 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil 2027-09-30 greek w4 feast3 fast0 exc0 rows=0,0 -> - -2027-10-01 greek w5 feast0 fast1 exc1 rows=0,0 -> meat,fish,dairy,eggs +2027-10-01 greek w5 feast0 fast1 exc1 rows=0,1 -> meat,fish,dairy,eggs 2027-10-02 greek w6 feast2 fast0 exc0 rows=0,0 -> - 2027-10-03 greek w0 feast2 fast0 exc0 rows=0,0 -> - 2027-10-04 greek w1 feast3 fast0 exc0 rows=0,0 -> - @@ -2835,7 +2835,7 @@ 2027-10-06 greek w3 feast5 fast1 exc1 rows=0,2 -> meat,fish,dairy,eggs 2027-10-07 greek w4 feast2 fast0 exc0 rows=0,0 -> - 2027-10-08 greek w5 feast0 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil -2027-10-09 greek w6 feast5 fast0 exc0 rows=0,2 -> - +2027-10-09 greek w6 feast5 fast0 exc0 rows=0,0 -> - 2027-10-10 greek w0 feast0 fast0 exc0 rows=0,0 -> - 2027-10-11 greek w1 feast0 fast0 exc0 rows=0,0 -> - 2027-10-12 greek w2 feast0 fast0 exc0 rows=0,0 -> - @@ -2849,7 +2849,7 @@ 2027-10-20 greek w3 feast2 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil 2027-10-21 greek w4 feast2 fast0 exc0 rows=0,0 -> - 2027-10-22 greek w5 feast0 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil -2027-10-23 greek w6 feast3 fast0 exc1 rows=0,0,0 -> - +2027-10-23 greek w6 feast3 fast0 exc1 rows=0,0,1 -> - 2027-10-24 greek w0 feast0 fast0 exc0 rows=0,0 -> - 2027-10-25 greek w1 feast0 fast0 exc0 rows=0,0 -> - 2027-10-26 greek w2 feast4 fast0 exc2 rows=0,2 -> - @@ -2858,7 +2858,7 @@ 2027-10-29 greek w5 feast3 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil 2027-10-30 greek w6 feast0 fast0 exc0 rows=0,0 -> - 2027-10-31 greek w0 feast0 fast0 exc0 rows=0,0 -> - -2027-11-01 greek w1 feast2 fast0 exc1 rows=0,0 -> - +2027-11-01 greek w1 feast2 fast0 exc1 rows=0,1 -> - 2027-11-02 greek w2 feast0 fast0 exc0 rows=0,0 -> - 2027-11-03 greek w3 feast0 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil 2027-11-04 greek w4 feast0 fast0 exc0 rows=0,0 -> - @@ -2869,9 +2869,9 @@ 2027-11-09 greek w2 feast0 fast0 exc0 rows=0,0 -> - 2027-11-10 greek w3 feast0 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil 2027-11-11 greek w4 feast0 fast0 exc0 rows=0,0 -> - -2027-11-12 greek w5 feast2 fast1 exc1 rows=0,0 -> meat,fish,dairy,eggs +2027-11-12 greek w5 feast2 fast1 exc1 rows=0,1 -> meat,fish,dairy,eggs 2027-11-13 greek w6 feast5 fast0 exc2 rows=0,2 -> - -2027-11-14 greek w0 feast4 fast0 exc2 rows=0,1 -> - +2027-11-14 greek w0 feast4 fast0 exc2 rows=0,2 -> - 2027-11-15 greek w1 feast0 fast5 exc2 rows=0,0 -> meat,dairy,eggs 2027-11-16 greek w2 feast6 fast5 exc2 rows=0,2 -> meat,dairy,eggs 2027-11-17 greek w3 feast3 fast5 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil @@ -2891,23 +2891,23 @@ 2027-12-01 greek w3 feast0 fast5 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil 2027-12-02 greek w4 feast0 fast5 exc2 rows=0,0 -> meat,dairy,eggs 2027-12-03 greek w5 feast3 fast5 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil -2027-12-04 greek w6 feast0 fast5 exc2 rows=0,0 -> meat,dairy,eggs -2027-12-05 greek w0 feast4 fast5 exc2 rows=0,0 -> meat,dairy,eggs +2027-12-04 greek w6 feast0 fast5 exc2 rows=0,1 -> meat,dairy,eggs +2027-12-05 greek w0 feast4 fast5 exc2 rows=0,1 -> meat,dairy,eggs 2027-12-06 greek w1 feast5 fast5 exc2 rows=0,2 -> meat,dairy,eggs 2027-12-07 greek w2 feast3 fast5 exc2 rows=0,0 -> meat,dairy,eggs 2027-12-08 greek w3 feast0 fast5 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil -2027-12-09 greek w4 feast3 fast5 exc2 rows=0,0 -> meat,dairy,eggs +2027-12-09 greek w4 feast3 fast5 exc2 rows=0,1 -> meat,dairy,eggs 2027-12-10 greek w5 feast0 fast5 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil 2027-12-11 greek w6 feast0 fast5 exc2 rows=0,0 -> meat,dairy,eggs -2027-12-12 greek w0 feast2 fast5 exc1 rows=0,0,0 -> meat,fish,dairy,eggs +2027-12-12 greek w0 feast2 fast5 exc1 rows=0,0,1 -> meat,fish,dairy,eggs 2027-12-13 greek w1 feast0 fast5 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil 2027-12-14 greek w2 feast0 fast5 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil -2027-12-15 greek w3 feast2 fast5 exc1 rows=0,0 -> meat,fish,dairy,eggs +2027-12-15 greek w3 feast2 fast5 exc1 rows=0,1 -> meat,fish,dairy,eggs 2027-12-16 greek w4 feast0 fast5 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil -2027-12-17 greek w5 feast2 fast5 exc1 rows=0,0 -> meat,fish,dairy,eggs +2027-12-17 greek w5 feast2 fast5 exc1 rows=0,1 -> meat,fish,dairy,eggs 2027-12-18 greek w6 feast0 fast5 exc1 rows=0,0,0 -> meat,fish,dairy,eggs 2027-12-19 greek w0 feast0 fast5 exc1 rows=0,0,0 -> meat,fish,dairy,eggs -2027-12-20 greek w1 feast0 fast5 exc1 rows=0,0 -> meat,fish,dairy,eggs +2027-12-20 greek w1 feast0 fast5 exc1 rows=0,1 -> meat,fish,dairy,eggs 2027-12-21 greek w2 feast0 fast5 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil 2027-12-22 greek w3 feast0 fast5 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil 2027-12-23 greek w4 feast0 fast5 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil @@ -2929,23 +2929,23 @@ 2028-01-08 greek w6 feast0 fast0 exc0 rows=0,0,0 -> - 2028-01-09 greek w0 feast4 fast0 exc0 rows=0,0,0 -> - 2028-01-10 greek w1 feast0 fast0 exc0 rows=0,0 -> - -2028-01-11 greek w2 feast4 fast0 exc1 rows=0,0 -> - +2028-01-11 greek w2 feast4 fast0 exc1 rows=0,1 -> - 2028-01-12 greek w3 feast3 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil 2028-01-13 greek w4 feast0 fast0 exc0 rows=0,0 -> - -2028-01-14 greek w5 feast4 fast1 exc1 rows=0,0 -> meat,fish,dairy,eggs +2028-01-14 greek w5 feast4 fast1 exc1 rows=0,1 -> meat,fish,dairy,eggs 2028-01-15 greek w6 feast2 fast0 exc0 rows=0,0 -> - -2028-01-16 greek w0 feast2 fast0 exc1 rows=0,0 -> - +2028-01-16 greek w0 feast2 fast0 exc1 rows=0,1 -> - 2028-01-17 greek w1 feast5 fast0 exc2 rows=0,2 -> - -2028-01-18 greek w2 feast2 fast0 exc1 rows=0,0 -> - +2028-01-18 greek w2 feast2 fast0 exc1 rows=0,1 -> - 2028-01-19 greek w3 feast2 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil 2028-01-20 greek w4 feast5 fast0 exc2 rows=0,2 -> - 2028-01-21 greek w5 feast0 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil -2028-01-22 greek w6 feast0 fast0 exc1 rows=0,0 -> - +2028-01-22 greek w6 feast0 fast0 exc1 rows=0,1 -> - 2028-01-23 greek w0 feast5 fast0 exc0 rows=0,0,0 -> - 2028-01-24 greek w1 feast4 fast0 exc0 rows=0,0 -> - -2028-01-25 greek w2 feast4 fast0 exc1 rows=0,0 -> - +2028-01-25 greek w2 feast4 fast0 exc1 rows=0,1 -> - 2028-01-26 greek w3 feast0 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil -2028-01-27 greek w4 feast4 fast0 exc1 rows=0,0 -> - +2028-01-27 greek w4 feast4 fast0 exc1 rows=0,1 -> - 2028-01-28 greek w5 feast2 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil 2028-01-29 greek w6 feast2 fast0 exc0 rows=0,0 -> - 2028-01-30 greek w0 feast5 fast0 exc2 rows=0,2 -> - @@ -2957,16 +2957,16 @@ 2028-02-05 greek w6 feast0 fast0 exc0 rows=0,0 -> - 2028-02-06 greek w0 feast0 fast0 exc11 rows=0,11 -> - 2028-02-07 greek w1 feast0 fast0 exc11 rows=0,11 -> - -2028-02-08 greek w2 feast2 fast0 exc11 rows=0,11 -> - +2028-02-08 greek w2 feast2 fast0 exc11 rows=1,11 -> - 2028-02-09 greek w3 feast4 fast0 exc11 rows=0,11 -> - -2028-02-10 greek w4 feast0 fast0 exc11 rows=0,11 -> - -2028-02-11 greek w5 feast3 fast0 exc11 rows=0,11 -> - +2028-02-10 greek w4 feast0 fast0 exc11 rows=1,11 -> - +2028-02-11 greek w5 feast3 fast0 exc11 rows=1,11 -> - 2028-02-12 greek w6 feast4 fast0 exc11 rows=0,11 -> - 2028-02-13 greek w0 feast0 fast0 exc0 rows=0,0 -> - 2028-02-14 greek w1 feast4 fast0 exc0 rows=0,0 -> - 2028-02-15 greek w2 feast0 fast0 exc0 rows=0,0 -> - 2028-02-16 greek w3 feast0 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil -2028-02-17 greek w4 feast4 fast0 exc1 rows=0,0 -> - +2028-02-17 greek w4 feast4 fast0 exc1 rows=0,1 -> - 2028-02-18 greek w5 feast0 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil 2028-02-19 greek w6 feast0 fast0 exc0 rows=0,0 -> - 2028-02-20 greek w0 feast0 fast0 exc0 rows=0,0 -> - @@ -3016,7 +3016,7 @@ 2028-04-04 greek w2 feast0 fast2 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil 2028-04-05 greek w3 feast1 fast2 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil 2028-04-06 greek w4 feast4 fast2 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil -2028-04-07 greek w5 feast4 fast2 exc0 rows=0,1 -> meat,fish,dairy,eggs,wine,oil +2028-04-07 greek w5 feast4 fast2 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil 2028-04-08 greek w6 feast0 fast2 exc6 rows=0,6 -> meat,fish,dairy,eggs 2028-04-09 greek w0 feast8 fast2 exc4 rows=0,4 -> meat,dairy,eggs 2028-04-10 greek w1 feast1 fast2 exc10 rows=0,10 -> meat,fish,dairy,eggs,wine,oil @@ -3032,7 +3032,7 @@ 2028-04-20 greek w4 feast0 fast0 exc11 rows=0,11 -> - 2028-04-21 greek w5 feast0 fast0 exc11 rows=0,11 -> - 2028-04-22 greek w6 feast0 fast0 exc11 rows=0,11 -> - -2028-04-23 greek w0 feast5 fast0 exc0 rows=0,1 -> - +2028-04-23 greek w0 feast5 fast0 exc0 rows=0,0 -> - 2028-04-24 greek w1 feast0 fast0 exc0 rows=0,0 -> - 2028-04-25 greek w2 feast4 fast0 exc1 rows=0,1 -> - 2028-04-26 greek w3 feast3 fast1 exc1 rows=0,1 -> meat,fish,dairy,eggs @@ -3050,7 +3050,7 @@ 2028-05-08 greek w1 feast5 fast0 exc2 rows=0,2 -> - 2028-05-09 greek w2 feast4 fast0 exc0 rows=0,0 -> - 2028-05-10 greek w3 feast4 fast1 exc2 rows=0,2 -> meat,dairy,eggs -2028-05-11 greek w4 feast0 fast0 exc1 rows=0,0 -> - +2028-05-11 greek w4 feast0 fast0 exc1 rows=0,1 -> - 2028-05-12 greek w5 feast0 fast1 exc1 rows=0,1 -> meat,fish,dairy,eggs 2028-05-13 greek w6 feast0 fast0 exc0 rows=0,0 -> - 2028-05-14 greek w0 feast2 fast0 exc0 rows=0,0 -> - @@ -3078,10 +3078,10 @@ 2028-06-05 greek w1 feast0 fast0 exc11 rows=0,11 -> - 2028-06-06 greek w2 feast0 fast0 exc11 rows=0,11 -> - 2028-06-07 greek w3 feast0 fast0 exc11 rows=0,11 -> - -2028-06-08 greek w4 feast2 fast0 exc11 rows=0,11 -> - +2028-06-08 greek w4 feast2 fast0 exc11 rows=1,11 -> - 2028-06-09 greek w5 feast3 fast0 exc11 rows=0,11 -> - 2028-06-10 greek w6 feast4 fast0 exc11 rows=0,11 -> - -2028-06-11 greek w0 feast4 fast0 exc1 rows=0,0 -> - +2028-06-11 greek w0 feast4 fast0 exc1 rows=0,1 -> - 2028-06-12 greek w1 feast2 fast3 exc2 rows=0,0 -> meat,dairy,eggs 2028-06-13 greek w2 feast0 fast3 exc2 rows=0,0 -> meat,dairy,eggs 2028-06-14 greek w3 feast0 fast3 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil @@ -3100,15 +3100,15 @@ 2028-06-27 greek w2 feast0 fast3 exc2 rows=0,0 -> meat,dairy,eggs 2028-06-28 greek w3 feast2 fast3 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil 2028-06-29 greek w4 feast6 fast0 exc2 rows=0,2 -> - -2028-06-30 greek w5 feast4 fast1 exc1 rows=0,0 -> meat,fish,dairy,eggs -2028-07-01 greek w6 feast2 fast0 exc1 rows=0,0 -> - -2028-07-02 greek w0 feast3 fast0 exc1 rows=0,0 -> - +2028-06-30 greek w5 feast4 fast1 exc1 rows=0,1 -> meat,fish,dairy,eggs +2028-07-01 greek w6 feast2 fast0 exc1 rows=0,1 -> - +2028-07-02 greek w0 feast3 fast0 exc1 rows=0,1 -> - 2028-07-03 greek w1 feast4 fast0 exc0 rows=0,0 -> - 2028-07-04 greek w2 feast0 fast0 exc0 rows=0,0 -> - 2028-07-05 greek w3 feast0 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil 2028-07-06 greek w4 feast0 fast0 exc0 rows=0,0 -> - 2028-07-07 greek w5 feast0 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil -2028-07-08 greek w6 feast2 fast0 exc1 rows=0,0 -> - +2028-07-08 greek w6 feast2 fast0 exc1 rows=0,1 -> - 2028-07-09 greek w0 feast0 fast0 exc0 rows=0,0 -> - 2028-07-10 greek w1 feast0 fast0 exc0 rows=0,0 -> - 2028-07-11 greek w2 feast2 fast0 exc0 rows=0,0 -> - @@ -3117,17 +3117,17 @@ 2028-07-14 greek w5 feast2 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil 2028-07-15 greek w6 feast0 fast0 exc0 rows=0,0 -> - 2028-07-16 greek w0 feast0 fast0 exc0 rows=0,0,0 -> - -2028-07-17 greek w1 feast4 fast0 exc1 rows=0,0 -> - +2028-07-17 greek w1 feast4 fast0 exc1 rows=0,1 -> - 2028-07-18 greek w2 feast0 fast0 exc0 rows=0,0 -> - 2028-07-19 greek w3 feast0 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil 2028-07-20 greek w4 feast5 fast0 exc2 rows=0,2 -> - 2028-07-21 greek w5 feast0 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil -2028-07-22 greek w6 feast2 fast0 exc1 rows=0,0 -> - +2028-07-22 greek w6 feast2 fast0 exc1 rows=0,1 -> - 2028-07-23 greek w0 feast0 fast0 exc0 rows=0,0 -> - 2028-07-24 greek w1 feast0 fast0 exc0 rows=0,0 -> - -2028-07-25 greek w2 feast3 fast0 exc1 rows=0,0 -> - -2028-07-26 greek w3 feast0 fast1 exc1 rows=0,0 -> meat,fish,dairy,eggs -2028-07-27 greek w4 feast2 fast0 exc1 rows=0,0 -> - +2028-07-25 greek w2 feast3 fast0 exc1 rows=0,1 -> - +2028-07-26 greek w3 feast0 fast1 exc1 rows=0,1 -> meat,fish,dairy,eggs +2028-07-27 greek w4 feast2 fast0 exc1 rows=0,1 -> - 2028-07-28 greek w5 feast0 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil 2028-07-29 greek w6 feast0 fast0 exc0 rows=0,0 -> - 2028-07-30 greek w0 feast0 fast0 exc0 rows=0,0 -> - @@ -3147,7 +3147,7 @@ 2028-08-13 greek w0 feast4 fast4 exc1 rows=0,4 -> meat,fish,dairy,eggs 2028-08-14 greek w1 feast2 fast4 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil 2028-08-15 greek w2 feast7 fast0 exc2 rows=0,2 -> - -2028-08-16 greek w3 feast5 fast1 exc0 rows=0,1 -> meat,fish,dairy,eggs,wine,oil +2028-08-16 greek w3 feast5 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil 2028-08-17 greek w4 feast0 fast0 exc0 rows=0,0 -> - 2028-08-18 greek w5 feast0 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil 2028-08-19 greek w6 feast0 fast0 exc0 rows=0,0 -> - @@ -3160,21 +3160,21 @@ 2028-08-26 greek w6 feast4 fast0 exc0 rows=0,0 -> - 2028-08-27 greek w0 feast0 fast0 exc0 rows=0,0 -> - 2028-08-28 greek w1 feast0 fast0 exc0 rows=0,0 -> - -2028-08-29 greek w2 feast6 fast1 exc0 rows=0,8 -> meat,fish,dairy,eggs,wine,oil +2028-08-29 greek w2 feast6 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil 2028-08-30 greek w3 feast4 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil -2028-08-31 greek w4 feast3 fast0 exc1 rows=0,0 -> - +2028-08-31 greek w4 feast3 fast0 exc1 rows=0,1 -> - 2028-09-01 greek w5 feast4 fast1 exc1 rows=0,1 -> meat,fish,dairy,eggs 2028-09-02 greek w6 feast0 fast0 exc0 rows=0,0 -> - 2028-09-03 greek w0 feast0 fast0 exc0 rows=0,0 -> - 2028-09-04 greek w1 feast0 fast0 exc0 rows=0,0 -> - 2028-09-05 greek w2 feast2 fast0 exc0 rows=0,0 -> - -2028-09-06 greek w3 feast2 fast1 exc1 rows=0,0 -> meat,fish,dairy,eggs +2028-09-06 greek w3 feast2 fast1 exc1 rows=0,1 -> meat,fish,dairy,eggs 2028-09-07 greek w4 feast3 fast0 exc0 rows=0,0 -> - 2028-09-08 greek w5 feast7 fast1 exc2 rows=0,2 -> meat,dairy,eggs -2028-09-09 greek w6 feast3 fast0 exc1 rows=0,0,0 -> - +2028-09-09 greek w6 feast3 fast0 exc1 rows=0,0,1 -> - 2028-09-10 greek w0 feast0 fast0 exc0 rows=0,0,0 -> - 2028-09-11 greek w1 feast4 fast0 exc0 rows=0,0 -> - -2028-09-12 greek w2 feast0 fast0 exc0 rows=0,1 -> - +2028-09-12 greek w2 feast0 fast0 exc0 rows=0,0 -> - 2028-09-13 greek w3 feast3 fast1 exc1 rows=0,1 -> meat,fish,dairy,eggs 2028-09-14 greek w4 feast8 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil 2028-09-15 greek w5 feast2 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil @@ -3182,18 +3182,18 @@ 2028-09-17 greek w0 feast0 fast0 exc0 rows=0,0,0 -> - 2028-09-18 greek w1 feast0 fast0 exc0 rows=0,0 -> - 2028-09-19 greek w2 feast3 fast0 exc0 rows=0,0 -> - -2028-09-20 greek w3 feast3 fast1 exc1 rows=0,0 -> meat,fish,dairy,eggs +2028-09-20 greek w3 feast3 fast1 exc1 rows=0,1 -> meat,fish,dairy,eggs 2028-09-21 greek w4 feast4 fast0 exc0 rows=0,0 -> - 2028-09-22 greek w5 feast2 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil 2028-09-23 greek w6 feast3 fast0 exc1 rows=0,1 -> - -2028-09-24 greek w0 feast4 fast0 exc0 rows=0,2 -> - +2028-09-24 greek w0 feast4 fast0 exc0 rows=0,0 -> - 2028-09-25 greek w1 feast0 fast0 exc0 rows=0,0 -> - 2028-09-26 greek w2 feast5 fast0 exc2 rows=0,2 -> - 2028-09-27 greek w3 feast3 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil -2028-09-28 greek w4 feast4 fast0 exc0 rows=0,1 -> - +2028-09-28 greek w4 feast4 fast0 exc0 rows=0,0 -> - 2028-09-29 greek w5 feast2 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil 2028-09-30 greek w6 feast3 fast0 exc0 rows=0,0 -> - -2028-10-01 greek w0 feast0 fast0 exc1 rows=0,0 -> - +2028-10-01 greek w0 feast0 fast0 exc1 rows=0,1 -> - 2028-10-02 greek w1 feast2 fast0 exc0 rows=0,0 -> - 2028-10-03 greek w2 feast2 fast0 exc0 rows=0,0 -> - 2028-10-04 greek w3 feast3 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil @@ -3201,7 +3201,7 @@ 2028-10-06 greek w5 feast5 fast1 exc1 rows=0,2 -> meat,fish,dairy,eggs 2028-10-07 greek w6 feast2 fast0 exc0 rows=0,0 -> - 2028-10-08 greek w0 feast0 fast0 exc0 rows=0,0 -> - -2028-10-09 greek w1 feast5 fast0 exc0 rows=0,2 -> - +2028-10-09 greek w1 feast5 fast0 exc0 rows=0,0 -> - 2028-10-10 greek w2 feast0 fast0 exc0 rows=0,0 -> - 2028-10-11 greek w3 feast0 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil 2028-10-12 greek w4 feast0 fast0 exc0 rows=0,0 -> - @@ -3215,7 +3215,7 @@ 2028-10-20 greek w5 feast2 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil 2028-10-21 greek w6 feast2 fast0 exc0 rows=0,0,0 -> - 2028-10-22 greek w0 feast0 fast0 exc0 rows=0,0 -> - -2028-10-23 greek w1 feast3 fast0 exc1 rows=0,0 -> - +2028-10-23 greek w1 feast3 fast0 exc1 rows=0,1 -> - 2028-10-24 greek w2 feast0 fast0 exc0 rows=0,0 -> - 2028-10-25 greek w3 feast0 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil 2028-10-26 greek w4 feast4 fast0 exc2 rows=0,2 -> - @@ -3224,7 +3224,7 @@ 2028-10-29 greek w0 feast3 fast0 exc0 rows=0,0 -> - 2028-10-30 greek w1 feast0 fast0 exc0 rows=0,0 -> - 2028-10-31 greek w2 feast0 fast0 exc0 rows=0,0 -> - -2028-11-01 greek w3 feast2 fast1 exc1 rows=0,0 -> meat,fish,dairy,eggs +2028-11-01 greek w3 feast2 fast1 exc1 rows=0,1 -> meat,fish,dairy,eggs 2028-11-02 greek w4 feast0 fast0 exc0 rows=0,0 -> - 2028-11-03 greek w5 feast0 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil 2028-11-04 greek w6 feast5 fast0 exc2 rows=0,0,2 -> - @@ -3235,9 +3235,9 @@ 2028-11-09 greek w4 feast0 fast0 exc0 rows=0,0 -> - 2028-11-10 greek w5 feast0 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil 2028-11-11 greek w6 feast0 fast0 exc0 rows=0,0 -> - -2028-11-12 greek w0 feast2 fast0 exc1 rows=0,0 -> - +2028-11-12 greek w0 feast2 fast0 exc1 rows=0,1 -> - 2028-11-13 greek w1 feast5 fast0 exc2 rows=0,2 -> - -2028-11-14 greek w2 feast4 fast0 exc2 rows=0,1 -> - +2028-11-14 greek w2 feast4 fast0 exc2 rows=0,2 -> - 2028-11-15 greek w3 feast0 fast5 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil 2028-11-16 greek w4 feast6 fast5 exc2 rows=0,2 -> meat,dairy,eggs 2028-11-17 greek w5 feast3 fast5 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil @@ -3257,23 +3257,23 @@ 2028-12-01 greek w5 feast0 fast5 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil 2028-12-02 greek w6 feast0 fast5 exc2 rows=0,0 -> meat,dairy,eggs 2028-12-03 greek w0 feast3 fast5 exc2 rows=0,0 -> meat,dairy,eggs -2028-12-04 greek w1 feast0 fast5 exc2 rows=0,0 -> meat,dairy,eggs -2028-12-05 greek w2 feast4 fast5 exc2 rows=0,0 -> meat,dairy,eggs +2028-12-04 greek w1 feast0 fast5 exc2 rows=0,1 -> meat,dairy,eggs +2028-12-05 greek w2 feast4 fast5 exc2 rows=0,1 -> meat,dairy,eggs 2028-12-06 greek w3 feast5 fast5 exc1 rows=0,2 -> meat,fish,dairy,eggs 2028-12-07 greek w4 feast3 fast5 exc2 rows=0,0 -> meat,dairy,eggs 2028-12-08 greek w5 feast0 fast5 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil -2028-12-09 greek w6 feast3 fast5 exc2 rows=0,0 -> meat,dairy,eggs +2028-12-09 greek w6 feast3 fast5 exc2 rows=0,1 -> meat,dairy,eggs 2028-12-10 greek w0 feast0 fast5 exc2 rows=0,0 -> meat,dairy,eggs 2028-12-11 greek w1 feast0 fast5 exc2 rows=0,0 -> meat,dairy,eggs -2028-12-12 greek w2 feast2 fast5 exc1 rows=0,0 -> meat,fish,dairy,eggs +2028-12-12 greek w2 feast2 fast5 exc1 rows=0,1 -> meat,fish,dairy,eggs 2028-12-13 greek w3 feast0 fast5 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil 2028-12-14 greek w4 feast0 fast5 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil -2028-12-15 greek w5 feast2 fast5 exc1 rows=0,0 -> meat,fish,dairy,eggs +2028-12-15 greek w5 feast2 fast5 exc1 rows=0,1 -> meat,fish,dairy,eggs 2028-12-16 greek w6 feast0 fast5 exc1 rows=0,0 -> meat,fish,dairy,eggs -2028-12-17 greek w0 feast2 fast5 exc1 rows=0,0,0 -> meat,fish,dairy,eggs +2028-12-17 greek w0 feast2 fast5 exc1 rows=0,0,1 -> meat,fish,dairy,eggs 2028-12-18 greek w1 feast0 fast5 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil 2028-12-19 greek w2 feast0 fast5 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil -2028-12-20 greek w3 feast0 fast5 exc1 rows=0,0 -> meat,fish,dairy,eggs +2028-12-20 greek w3 feast0 fast5 exc1 rows=0,1 -> meat,fish,dairy,eggs 2028-12-21 greek w4 feast0 fast5 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil 2028-12-22 greek w5 feast0 fast5 exc0 rows=0,0,0 -> meat,fish,dairy,eggs,wine,oil 2028-12-23 greek w6 feast0 fast5 exc1 rows=0,0,0 -> meat,fish,dairy,eggs @@ -3295,23 +3295,23 @@ 2029-01-08 greek w1 feast0 fast0 exc0 rows=0,0 -> - 2029-01-09 greek w2 feast4 fast0 exc0 rows=0,0 -> - 2029-01-10 greek w3 feast0 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil -2029-01-11 greek w4 feast4 fast0 exc1 rows=0,0 -> - +2029-01-11 greek w4 feast4 fast0 exc1 rows=0,1 -> - 2029-01-12 greek w5 feast3 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil 2029-01-13 greek w6 feast0 fast0 exc0 rows=0,0,0 -> - -2029-01-14 greek w0 feast4 fast0 exc1 rows=0,0 -> - +2029-01-14 greek w0 feast4 fast0 exc1 rows=0,1 -> - 2029-01-15 greek w1 feast2 fast0 exc0 rows=0,0 -> - -2029-01-16 greek w2 feast2 fast0 exc1 rows=0,0 -> - +2029-01-16 greek w2 feast2 fast0 exc1 rows=0,1 -> - 2029-01-17 greek w3 feast5 fast1 exc1 rows=0,2 -> meat,fish,dairy,eggs -2029-01-18 greek w4 feast2 fast0 exc1 rows=0,0 -> - +2029-01-18 greek w4 feast2 fast0 exc1 rows=0,1 -> - 2029-01-19 greek w5 feast2 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil 2029-01-20 greek w6 feast5 fast0 exc2 rows=0,2 -> - 2029-01-21 greek w0 feast0 fast0 exc0 rows=0,0 -> - -2029-01-22 greek w1 feast0 fast0 exc1 rows=0,0 -> - +2029-01-22 greek w1 feast0 fast0 exc1 rows=0,1 -> - 2029-01-23 greek w2 feast0 fast0 exc0 rows=0,0 -> - 2029-01-24 greek w3 feast4 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil -2029-01-25 greek w4 feast4 fast0 exc1 rows=0,0 -> - +2029-01-25 greek w4 feast4 fast0 exc1 rows=0,1 -> - 2029-01-26 greek w5 feast0 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil -2029-01-27 greek w6 feast4 fast0 exc1 rows=0,0 -> - +2029-01-27 greek w6 feast4 fast0 exc1 rows=0,1 -> - 2029-01-28 greek w0 feast2 fast0 exc11 rows=0,11 -> - 2029-01-29 greek w1 feast2 fast0 exc11 rows=0,11 -> - 2029-01-30 greek w2 feast5 fast0 exc11 rows=2,11 -> - @@ -3323,16 +3323,16 @@ 2029-02-05 greek w1 feast0 fast0 exc0 rows=0,0 -> - 2029-02-06 greek w2 feast0 fast0 exc0 rows=0,0 -> - 2029-02-07 greek w3 feast0 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil -2029-02-08 greek w4 feast2 fast0 exc1 rows=0,0 -> - +2029-02-08 greek w4 feast2 fast0 exc1 rows=0,1 -> - 2029-02-09 greek w5 feast4 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil -2029-02-10 greek w6 feast0 fast0 exc1 rows=0,0 -> - -2029-02-11 greek w0 feast3 fast0 exc1 rows=0,0 -> - +2029-02-10 greek w6 feast0 fast0 exc1 rows=0,1 -> - +2029-02-11 greek w0 feast3 fast0 exc1 rows=0,1 -> - 2029-02-12 greek w1 feast4 fast1 exc7 rows=0,7 -> meat 2029-02-13 greek w2 feast0 fast1 exc7 rows=0,7 -> meat 2029-02-14 greek w3 feast4 fast1 exc7 rows=0,7 -> meat 2029-02-15 greek w4 feast0 fast1 exc7 rows=0,7 -> meat 2029-02-16 greek w5 feast0 fast1 exc7 rows=0,7 -> meat -2029-02-17 greek w6 feast4 fast1 exc7 rows=0,7 -> meat +2029-02-17 greek w6 feast4 fast1 exc7 rows=1,7 -> meat 2029-02-18 greek w0 feast0 fast1 exc7 rows=0,7 -> meat 2029-02-19 greek w1 feast0 fast2 exc10 rows=0,10 -> meat,fish,dairy,eggs,wine,oil 2029-02-20 greek w2 feast0 fast2 exc10 rows=0,10 -> meat,fish,dairy,eggs,wine,oil @@ -3381,7 +3381,7 @@ 2029-04-04 greek w3 feast1 fast2 exc10 rows=0,10 -> meat,fish,dairy,eggs,wine,oil 2029-04-05 greek w4 feast3 fast2 exc3 rows=0,3 -> meat,fish,dairy,eggs 2029-04-06 greek w5 feast4 fast2 exc9 rows=0,9 -> meat,fish,dairy,eggs,wine,oil -2029-04-07 greek w6 feast4 fast2 exc5 rows=1,5 -> meat,fish,dairy,eggs,oil +2029-04-07 greek w6 feast4 fast2 exc5 rows=0,5 -> meat,fish,dairy,eggs,oil 2029-04-08 greek w0 feast8 fast0 exc11 rows=0,11 -> - 2029-04-09 greek w1 feast0 fast0 exc11 rows=0,11 -> - 2029-04-10 greek w2 feast0 fast0 exc11 rows=0,11 -> - @@ -3397,7 +3397,7 @@ 2029-04-20 greek w5 feast0 fast1 exc1 rows=0,1 -> meat,fish,dairy,eggs 2029-04-21 greek w6 feast0 fast0 exc0 rows=0,0 -> - 2029-04-22 greek w0 feast0 fast0 exc0 rows=0,0 -> - -2029-04-23 greek w1 feast5 fast0 exc0 rows=0,1 -> - +2029-04-23 greek w1 feast5 fast0 exc0 rows=0,0 -> - 2029-04-24 greek w2 feast0 fast0 exc0 rows=0,0 -> - 2029-04-25 greek w3 feast4 fast1 exc1 rows=1,1 -> meat,fish,dairy,eggs 2029-04-26 greek w4 feast3 fast0 exc0 rows=0,0 -> - @@ -3415,7 +3415,7 @@ 2029-05-08 greek w2 feast5 fast0 exc2 rows=0,2 -> - 2029-05-09 greek w3 feast4 fast1 exc1 rows=0,1 -> meat,fish,dairy,eggs 2029-05-10 greek w4 feast4 fast0 exc0 rows=0,0 -> - -2029-05-11 greek w5 feast0 fast1 exc1 rows=0,1 -> meat,fish,dairy,eggs +2029-05-11 greek w5 feast0 fast1 exc1 rows=1,1 -> meat,fish,dairy,eggs 2029-05-12 greek w6 feast0 fast0 exc0 rows=0,0 -> - 2029-05-13 greek w0 feast0 fast0 exc0 rows=0,0 -> - 2029-05-14 greek w1 feast2 fast0 exc0 rows=0,0 -> - @@ -3443,10 +3443,10 @@ 2029-06-05 greek w2 feast0 fast3 exc2 rows=0,0 -> meat,dairy,eggs 2029-06-06 greek w3 feast0 fast3 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil 2029-06-07 greek w4 feast0 fast3 exc2 rows=0,0 -> meat,dairy,eggs -2029-06-08 greek w5 feast2 fast3 exc1 rows=0,0 -> meat,fish,dairy,eggs +2029-06-08 greek w5 feast2 fast3 exc1 rows=0,1 -> meat,fish,dairy,eggs 2029-06-09 greek w6 feast3 fast3 exc2 rows=0,0 -> meat,dairy,eggs 2029-06-10 greek w0 feast4 fast3 exc2 rows=0,0 -> meat,dairy,eggs -2029-06-11 greek w1 feast4 fast3 exc2 rows=0,0 -> meat,dairy,eggs +2029-06-11 greek w1 feast4 fast3 exc2 rows=0,1 -> meat,dairy,eggs 2029-06-12 greek w2 feast2 fast3 exc2 rows=0,0 -> meat,dairy,eggs 2029-06-13 greek w3 feast0 fast3 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil 2029-06-14 greek w4 feast0 fast3 exc2 rows=0,0 -> meat,dairy,eggs @@ -3465,15 +3465,15 @@ 2029-06-27 greek w3 feast0 fast3 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil 2029-06-28 greek w4 feast2 fast3 exc2 rows=0,0 -> meat,dairy,eggs 2029-06-29 greek w5 feast6 fast1 exc2 rows=0,2 -> meat,dairy,eggs -2029-06-30 greek w6 feast4 fast0 exc1 rows=0,0 -> - -2029-07-01 greek w0 feast2 fast0 exc1 rows=0,0 -> - -2029-07-02 greek w1 feast3 fast0 exc1 rows=0,0 -> - +2029-06-30 greek w6 feast4 fast0 exc1 rows=0,1 -> - +2029-07-01 greek w0 feast2 fast0 exc1 rows=0,1 -> - +2029-07-02 greek w1 feast3 fast0 exc1 rows=0,1 -> - 2029-07-03 greek w2 feast4 fast0 exc0 rows=0,0 -> - 2029-07-04 greek w3 feast0 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil 2029-07-05 greek w4 feast0 fast0 exc0 rows=0,0 -> - 2029-07-06 greek w5 feast0 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil 2029-07-07 greek w6 feast0 fast0 exc0 rows=0,0 -> - -2029-07-08 greek w0 feast2 fast0 exc1 rows=0,0 -> - +2029-07-08 greek w0 feast2 fast0 exc1 rows=0,1 -> - 2029-07-09 greek w1 feast0 fast0 exc0 rows=0,0 -> - 2029-07-10 greek w2 feast0 fast0 exc0 rows=0,0 -> - 2029-07-11 greek w3 feast2 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil @@ -3482,17 +3482,17 @@ 2029-07-14 greek w6 feast2 fast0 exc0 rows=0,0 -> - 2029-07-15 greek w0 feast0 fast0 exc0 rows=0,0,0 -> - 2029-07-16 greek w1 feast0 fast0 exc0 rows=0,0 -> - -2029-07-17 greek w2 feast4 fast0 exc1 rows=0,0 -> - +2029-07-17 greek w2 feast4 fast0 exc1 rows=0,1 -> - 2029-07-18 greek w3 feast0 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil 2029-07-19 greek w4 feast0 fast0 exc0 rows=0,0 -> - 2029-07-20 greek w5 feast5 fast1 exc1 rows=0,2 -> meat,fish,dairy,eggs 2029-07-21 greek w6 feast0 fast0 exc0 rows=0,0 -> - -2029-07-22 greek w0 feast2 fast0 exc1 rows=0,0 -> - +2029-07-22 greek w0 feast2 fast0 exc1 rows=0,1 -> - 2029-07-23 greek w1 feast0 fast0 exc0 rows=0,0 -> - 2029-07-24 greek w2 feast0 fast0 exc0 rows=0,0 -> - -2029-07-25 greek w3 feast3 fast1 exc1 rows=0,0 -> meat,fish,dairy,eggs -2029-07-26 greek w4 feast0 fast0 exc1 rows=0,0 -> - -2029-07-27 greek w5 feast2 fast1 exc1 rows=0,0 -> meat,fish,dairy,eggs +2029-07-25 greek w3 feast3 fast1 exc1 rows=0,1 -> meat,fish,dairy,eggs +2029-07-26 greek w4 feast0 fast0 exc1 rows=0,1 -> - +2029-07-27 greek w5 feast2 fast1 exc1 rows=0,1 -> meat,fish,dairy,eggs 2029-07-28 greek w6 feast0 fast0 exc0 rows=0,0 -> - 2029-07-29 greek w0 feast0 fast0 exc0 rows=0,0 -> - 2029-07-30 greek w1 feast0 fast0 exc0 rows=0,0 -> - @@ -3512,7 +3512,7 @@ 2029-08-13 greek w1 feast4 fast4 exc0 rows=0,4 -> meat,fish,dairy,eggs,wine,oil 2029-08-14 greek w2 feast2 fast4 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil 2029-08-15 greek w3 feast7 fast1 exc2 rows=0,2 -> meat,dairy,eggs -2029-08-16 greek w4 feast5 fast0 exc0 rows=0,1 -> - +2029-08-16 greek w4 feast5 fast0 exc0 rows=0,0 -> - 2029-08-17 greek w5 feast0 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil 2029-08-18 greek w6 feast0 fast0 exc0 rows=0,0 -> - 2029-08-19 greek w0 feast0 fast0 exc0 rows=0,0 -> - @@ -3525,21 +3525,21 @@ 2029-08-26 greek w0 feast4 fast0 exc0 rows=0,0 -> - 2029-08-27 greek w1 feast0 fast0 exc0 rows=0,0 -> - 2029-08-28 greek w2 feast0 fast0 exc0 rows=0,0 -> - -2029-08-29 greek w3 feast6 fast1 exc0 rows=0,8 -> meat,fish,dairy,eggs,wine,oil +2029-08-29 greek w3 feast6 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil 2029-08-30 greek w4 feast4 fast0 exc0 rows=0,0 -> - -2029-08-31 greek w5 feast3 fast1 exc1 rows=0,0 -> meat,fish,dairy,eggs +2029-08-31 greek w5 feast3 fast1 exc1 rows=0,1 -> meat,fish,dairy,eggs 2029-09-01 greek w6 feast4 fast0 exc1 rows=0,1 -> - 2029-09-02 greek w0 feast0 fast0 exc0 rows=0,0 -> - 2029-09-03 greek w1 feast0 fast0 exc0 rows=0,0 -> - 2029-09-04 greek w2 feast0 fast0 exc0 rows=0,0 -> - 2029-09-05 greek w3 feast2 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil -2029-09-06 greek w4 feast2 fast0 exc1 rows=0,0 -> - +2029-09-06 greek w4 feast2 fast0 exc1 rows=0,1 -> - 2029-09-07 greek w5 feast3 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil 2029-09-08 greek w6 feast7 fast0 exc2 rows=0,2 -> - -2029-09-09 greek w0 feast3 fast0 exc1 rows=0,0,0 -> - +2029-09-09 greek w0 feast3 fast0 exc1 rows=0,0,1 -> - 2029-09-10 greek w1 feast0 fast0 exc0 rows=0,0 -> - 2029-09-11 greek w2 feast4 fast0 exc0 rows=0,0 -> - -2029-09-12 greek w3 feast0 fast1 exc0 rows=0,1 -> meat,fish,dairy,eggs,wine,oil +2029-09-12 greek w3 feast0 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil 2029-09-13 greek w4 feast3 fast0 exc1 rows=0,0,1 -> - 2029-09-14 greek w5 feast8 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil 2029-09-15 greek w6 feast2 fast0 exc0 rows=0,0,0 -> - @@ -3547,18 +3547,18 @@ 2029-09-17 greek w1 feast0 fast0 exc0 rows=0,0 -> - 2029-09-18 greek w2 feast0 fast0 exc0 rows=0,0 -> - 2029-09-19 greek w3 feast3 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil -2029-09-20 greek w4 feast3 fast0 exc1 rows=0,0 -> - +2029-09-20 greek w4 feast3 fast0 exc1 rows=0,1 -> - 2029-09-21 greek w5 feast4 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil 2029-09-22 greek w6 feast2 fast0 exc0 rows=0,0 -> - 2029-09-23 greek w0 feast3 fast0 exc1 rows=0,1 -> - -2029-09-24 greek w1 feast4 fast0 exc0 rows=0,2 -> - +2029-09-24 greek w1 feast4 fast0 exc0 rows=0,0 -> - 2029-09-25 greek w2 feast0 fast0 exc0 rows=0,0 -> - 2029-09-26 greek w3 feast5 fast1 exc1 rows=0,2 -> meat,fish,dairy,eggs 2029-09-27 greek w4 feast3 fast0 exc0 rows=0,0 -> - -2029-09-28 greek w5 feast4 fast1 exc0 rows=0,1 -> meat,fish,dairy,eggs,wine,oil +2029-09-28 greek w5 feast4 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil 2029-09-29 greek w6 feast2 fast0 exc0 rows=0,0 -> - 2029-09-30 greek w0 feast3 fast0 exc0 rows=0,0 -> - -2029-10-01 greek w1 feast0 fast0 exc1 rows=0,0 -> - +2029-10-01 greek w1 feast0 fast0 exc1 rows=0,1 -> - 2029-10-02 greek w2 feast2 fast0 exc0 rows=0,0 -> - 2029-10-03 greek w3 feast2 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil 2029-10-04 greek w4 feast3 fast0 exc0 rows=0,0 -> - @@ -3566,7 +3566,7 @@ 2029-10-06 greek w6 feast5 fast0 exc2 rows=0,2 -> - 2029-10-07 greek w0 feast2 fast0 exc0 rows=0,0 -> - 2029-10-08 greek w1 feast0 fast0 exc0 rows=0,0 -> - -2029-10-09 greek w2 feast5 fast0 exc0 rows=0,2 -> - +2029-10-09 greek w2 feast5 fast0 exc0 rows=0,0 -> - 2029-10-10 greek w3 feast0 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil 2029-10-11 greek w4 feast0 fast0 exc0 rows=0,0 -> - 2029-10-12 greek w5 feast0 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil @@ -3580,7 +3580,7 @@ 2029-10-20 greek w6 feast2 fast0 exc0 rows=0,0,0 -> - 2029-10-21 greek w0 feast2 fast0 exc0 rows=0,0 -> - 2029-10-22 greek w1 feast0 fast0 exc0 rows=0,0 -> - -2029-10-23 greek w2 feast3 fast0 exc1 rows=0,0 -> - +2029-10-23 greek w2 feast3 fast0 exc1 rows=0,1 -> - 2029-10-24 greek w3 feast0 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil 2029-10-25 greek w4 feast0 fast0 exc0 rows=0,0 -> - 2029-10-26 greek w5 feast4 fast1 exc1 rows=0,2 -> meat,fish,dairy,eggs @@ -3589,7 +3589,7 @@ 2029-10-29 greek w1 feast3 fast0 exc0 rows=0,0 -> - 2029-10-30 greek w2 feast0 fast0 exc0 rows=0,0 -> - 2029-10-31 greek w3 feast0 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil -2029-11-01 greek w4 feast2 fast0 exc1 rows=0,0 -> - +2029-11-01 greek w4 feast2 fast0 exc1 rows=0,1 -> - 2029-11-02 greek w5 feast0 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil 2029-11-03 greek w6 feast5 fast0 exc2 rows=0,0,2 -> - 2029-11-04 greek w0 feast0 fast0 exc0 rows=0,0,0 -> - @@ -3600,9 +3600,9 @@ 2029-11-09 greek w5 feast0 fast1 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil 2029-11-10 greek w6 feast0 fast0 exc0 rows=0,0 -> - 2029-11-11 greek w0 feast0 fast0 exc0 rows=0,0 -> - -2029-11-12 greek w1 feast2 fast0 exc1 rows=0,0 -> - +2029-11-12 greek w1 feast2 fast0 exc1 rows=0,1 -> - 2029-11-13 greek w2 feast5 fast0 exc2 rows=0,2 -> - -2029-11-14 greek w3 feast4 fast1 exc2 rows=0,1 -> meat,dairy,eggs +2029-11-14 greek w3 feast4 fast1 exc2 rows=0,2 -> meat,dairy,eggs 2029-11-15 greek w4 feast0 fast5 exc2 rows=0,0 -> meat,dairy,eggs 2029-11-16 greek w5 feast6 fast5 exc1 rows=0,2 -> meat,fish,dairy,eggs 2029-11-17 greek w6 feast3 fast5 exc2 rows=0,0 -> meat,dairy,eggs @@ -3622,23 +3622,23 @@ 2029-12-01 greek w6 feast0 fast5 exc2 rows=0,0 -> meat,dairy,eggs 2029-12-02 greek w0 feast0 fast5 exc2 rows=0,0 -> meat,dairy,eggs 2029-12-03 greek w1 feast3 fast5 exc2 rows=0,0 -> meat,dairy,eggs -2029-12-04 greek w2 feast0 fast5 exc2 rows=0,0 -> meat,dairy,eggs -2029-12-05 greek w3 feast4 fast5 exc1 rows=0,0 -> meat,fish,dairy,eggs +2029-12-04 greek w2 feast0 fast5 exc2 rows=0,1 -> meat,dairy,eggs +2029-12-05 greek w3 feast4 fast5 exc1 rows=0,1 -> meat,fish,dairy,eggs 2029-12-06 greek w4 feast5 fast5 exc2 rows=0,2 -> meat,dairy,eggs 2029-12-07 greek w5 feast3 fast5 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil 2029-12-08 greek w6 feast0 fast5 exc2 rows=0,0 -> meat,dairy,eggs -2029-12-09 greek w0 feast3 fast5 exc2 rows=0,0 -> meat,dairy,eggs +2029-12-09 greek w0 feast3 fast5 exc2 rows=0,1 -> meat,dairy,eggs 2029-12-10 greek w1 feast0 fast5 exc2 rows=0,0 -> meat,dairy,eggs 2029-12-11 greek w2 feast0 fast5 exc2 rows=0,0 -> meat,dairy,eggs -2029-12-12 greek w3 feast2 fast5 exc1 rows=0,0 -> meat,fish,dairy,eggs +2029-12-12 greek w3 feast2 fast5 exc1 rows=0,1 -> meat,fish,dairy,eggs 2029-12-13 greek w4 feast0 fast5 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil 2029-12-14 greek w5 feast0 fast5 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil -2029-12-15 greek w6 feast2 fast5 exc1 rows=0,0 -> meat,fish,dairy,eggs +2029-12-15 greek w6 feast2 fast5 exc1 rows=0,1 -> meat,fish,dairy,eggs 2029-12-16 greek w0 feast0 fast5 exc1 rows=0,0,0 -> meat,fish,dairy,eggs -2029-12-17 greek w1 feast2 fast5 exc1 rows=0,0 -> meat,fish,dairy,eggs +2029-12-17 greek w1 feast2 fast5 exc1 rows=0,1 -> meat,fish,dairy,eggs 2029-12-18 greek w2 feast0 fast5 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil 2029-12-19 greek w3 feast0 fast5 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil -2029-12-20 greek w4 feast0 fast5 exc1 rows=0,0 -> meat,fish,dairy,eggs +2029-12-20 greek w4 feast0 fast5 exc1 rows=0,1 -> meat,fish,dairy,eggs 2029-12-21 greek w5 feast0 fast5 exc0 rows=0,0 -> meat,fish,dairy,eggs,wine,oil 2029-12-22 greek w6 feast0 fast5 exc1 rows=0,0,0 -> meat,fish,dairy,eggs 2029-12-23 greek w0 feast0 fast5 exc1 rows=0,0,0 -> meat,fish,dairy,eggs diff --git a/calendarium/tests/test_liturgics.py b/calendarium/tests/test_liturgics.py index 046461ac..76792718 100644 --- a/calendarium/tests/test_liturgics.py +++ b/calendarium/tests/test_liturgics.py @@ -1387,15 +1387,15 @@ async def test_tradition_specific_commemoration_is_additive_not_a_replacement(se async def test_greek_gap_dates_share_confirmed_common_saints(self): """Stage 9: 6 dates had their only commemorations attached to a Day row tagged tradition='slavic' (with an empty parallel greek Day row - winning _prefer_tradition_days), so Greek users saw nothing at all, + winning _merge_tradition_days), so Greek users saw nothing at all, not even genuinely shared content. Fixed by decoupling - DayCommemoration lookup from _prefer_tradition_days's single-winner + DayCommemoration lookup from _merge_tradition_days's single-winner Day row (see _add_supplemental_commemorations) and tagging individual DayCommemoration rows tradition='slavic' for saints confirmed absent from data/antiochian_fixed_saints.json (the project's own Antiochian harvest) -- Toth and Nevsky in particular. feast_level/fast/fast_exception are untouched by any of this, since - they still come solely from _prefer_tradition_days's Day-row + they still come solely from _merge_tradition_days's Day-row selection -- verified directly against production (all field-level values match exactly; the only saints-list difference from production is the intentional Herman's-Glorification addition, @@ -1456,7 +1456,7 @@ async def test_raphael_brooklyn_full_year_check_unaffected(self): level (he's on a moveable date instead, see test_raphael_brooklyn_differing_commemoration_date). feast_name is untouched by DayCommemoration.tradition, since it still comes - solely from _prefer_tradition_days's Day-row selection.""" + solely from _merge_tradition_days's Day-row selection.""" greek = liturgics.Day(2026, 2, 27, tradition=Tradition.Greek) await greek.ainitialize() @@ -1826,3 +1826,65 @@ async def test_greek_still_gets_the_daily_cycle(self): # Removing the vigil set must not leave the day empty. self.assertEqual(await self.readings(Tradition.Greek), ['2 Cor 11.5-21', 'Mark 4.1-9']) + + +class TestDayOverrides(TestCase): + """The fixture uses two shapes for tradition-specific Day rows, and they + mean different things. A slot with a `slavic` row and a `greek` row is a + genuine disagreement about what is commemorated. A slot with a `common` row + plus a tradition row is an *override*: same commemoration, kept differently. + + These guard the second shape, which is the one that can rot quietly.""" + + # commemorations.json too: one override exists only to anchor them. + fixtures = ['calendarium.json', 'commemorations.json'] + + @staticmethod + def _overrides(): + """(base, override) for every slot with a common row and a tradition one.""" + slots = {} + for row in models.Day.objects.all(): + slots.setdefault((row.pdist, row.month, row.day), {})[row.tradition] = row + return [(g['common'], g[t]) + for g in slots.values() if 'common' in g + for t in g if t != 'common'] + + def test_day_overrides_are_sparse(self): + """An override may only carry the fields it actually overrides. + + Everything outside `Day.OVERRIDABLE` is taken from the common row and + the override's copy is ignored, so a populated field there is either a + misunderstanding or -- worse -- a duplicate that will silently go stale + when the common row is next edited. Three such rows existed before the + merge landed; one duplicated its common row exactly and did nothing. + """ + ignored = ('title', 'subtitle', 'feast_name', 'service', 'service_note', + 'story', 'flag') + for base, override in self._overrides(): + with self.subTest(f'{base.month:02d}-{base.day:02d} {override.tradition}'): + populated = [f for f in ignored if getattr(override, f)] + self.assertEqual( + populated, [], + f'override carries {populated}, which the merge ignores -- ' + f'blank them so they cannot drift from the common row') + + def test_day_overrides_earn_their_place(self): + """An override must either change a field or anchor a commemoration. + + A row that does neither is dead weight. A row that does the second only + is legitimate and must not be tidied away: Nov 24's `slavic` row + overrides nothing at all, but two `DayCommemoration` rows hang off it, + and deleting it takes them with it. That is exactly what happened while + this test was being written -- the foreign key caught it, not the + reasoning. + """ + for base, override in self._overrides(): + with self.subTest(f'{base.month:02d}-{base.day:02d} {override.tradition}'): + changed = [f for f in models.Day.OVERRIDABLE + if getattr(override, f) is not None + and getattr(override, f) != getattr(base, f)] + anchors = override.daycommemoration_set.exists() + self.assertTrue( + changed or anchors, + 'override changes no field and anchors no commemoration; ' + 'it has no reason to exist') diff --git a/docs/fasting-refactor-scope.md b/docs/fasting-refactor-scope.md index 7f38bc8a..8fd35d0e 100644 --- a/docs/fasting-refactor-scope.md +++ b/docs/fasting-refactor-scope.md @@ -567,6 +567,47 @@ season floor stand is what makes the weekend relief still work; a first attempt dropped every claim and made Lenten Saturdays stricter than the Saturdays either side of them. +### The date lists moved out of the source (2026-09-10) + +Brian objected that `GREEK_WINE_OIL_DATES` and its siblings were reference data +living in source code, and he was right. They are now sparse `Day` rows. + +The mechanism is his: a tradition row overrides a `common` row **field by +field**, so it carries only what differs. `feast_level`, `fast` and +`fast_exception` are nullable for this, and **NULL means "inherit" while 0 means +"explicitly zero"** -- a distinction the Exaltation depends on, its Greek +override being an explicit `fast_exception=0`. `_prefer_tradition_days` becomes +`_merge_tradition_days`. + +Django's model inheritance does not do this, incidentally: abstract bases give +separate tables with no row-level fallback, and multi-table inheritance makes a +child row *be* a parent row rather than override a different one. This is a +merge, not inheritance. + +Two shapes now coexist in the fixture and mean different things: + +| shape | meaning | +|---|---| +| `slavic` + `greek`, no common | genuine disagreement about *what is commemorated* -- Oct 1 is the Protection for Slavs, not for Greeks | +| `common` + one tradition row | an **override**: same commemoration, kept differently | + +`TestDayOverrides` guards the second: an override may not carry fields the merge +ignores (they would silently go stale when the common row is edited), and must +either change something or anchor a commemoration. + +**The move paid for itself immediately.** Writing the guard exposed three +overrides that changed nothing: for Feb 24 and Mar 9 the `common` row *already* +claimed wine and oil, so those two entries in `GREEK_WINE_OIL_DATES` had always +been dead -- invisible while the list lived in code, obvious the moment it +became rows. It also found a pre-existing no-op, Nov 24's `slavic` row, which +duplicated its common row in every field. + +**And deleting that one was wrong.** Two `DayCommemoration` rows hang off it, so +it is a commemoration anchor that happens to override nothing. The foreign key +caught it, not the reasoning; the guard test now allows that case explicitly. +Worth remembering next time a Day row looks redundant -- 379 of them are +foreign-key targets. + ### Chasing the last stragglers: 99.4% -> 99.9% Working through the 22 that survived turned up one substantive bug and several diff --git a/fixtures/calendarium.json b/fixtures/calendarium.json index fda6953a..5c0175c2 100644 --- a/fixtures/calendarium.json +++ b/fixtures/calendarium.json @@ -16574,7 +16574,7 @@ "service_note": "", "story": null, "fast": 0, - "fast_exception": 0, + "fast_exception": 1, "flag": 0, "tradition": "greek" } @@ -16599,26 +16599,6 @@ "tradition": "greek" } }, -{ - "model": "calendarium.day", - "pk": 865, - "fields": { - "pdist": 999, - "month": 11, - "day": 24, - "title": "", - "subtitle": "", - "feast_name": "", - "feast_level": 2, - "service": 0, - "service_note": "", - "story": null, - "fast": 5, - "fast_exception": 0, - "flag": 0, - "tradition": "slavic" - } -}, { "model": "calendarium.day", "pk": 868, @@ -16633,8 +16613,8 @@ "service": 0, "service_note": "", "story": null, - "fast": 0, - "fast_exception": 0, + "fast": null, + "fast_exception": null, "flag": 0, "tradition": "slavic" } @@ -16974,7 +16954,7 @@ "service_note": "", "story": null, "fast": 0, - "fast_exception": 0, + "fast_exception": 1, "flag": 0, "tradition": "greek" } @@ -17074,7 +17054,7 @@ "service_note": "", "story": null, "fast": 0, - "fast_exception": 0, + "fast_exception": 1, "flag": 0, "tradition": "greek" } @@ -17154,7 +17134,7 @@ "service_note": "", "story": null, "fast": 5, - "fast_exception": 0, + "fast_exception": 1, "flag": 0, "tradition": "greek" } @@ -17168,17 +17148,897 @@ "day": 14, "title": "", "subtitle": "", - "feast_name": "Exaltation (Elevation) of the Precious Cross", - "feast_level": 8, + "feast_name": "", + "feast_level": null, "service": 0, "service_note": "", "story": null, - "fast": 1, + "fast": null, + "fast_exception": 0, + "flag": 0, + "tradition": "greek" + } +}, +{ + "model": "calendarium.day", + "pk": 901, + "fields": { + "pdist": 999, + "month": 1, + "day": 11, + "title": "", + "subtitle": "", + "feast_name": "", + "feast_level": null, + "service": 0, + "service_note": "", + "story": null, + "fast": null, + "fast_exception": 1, + "flag": 0, + "tradition": "greek" + } +}, +{ + "model": "calendarium.day", + "pk": 902, + "fields": { + "pdist": 999, + "month": 1, + "day": 14, + "title": "", + "subtitle": "", + "feast_name": "", + "feast_level": null, + "service": 0, + "service_note": "", + "story": null, + "fast": null, + "fast_exception": 1, + "flag": 0, + "tradition": "greek" + } +}, +{ + "model": "calendarium.day", + "pk": 903, + "fields": { + "pdist": 999, + "month": 1, + "day": 16, + "title": "", + "subtitle": "", + "feast_name": "", + "feast_level": null, + "service": 0, + "service_note": "", + "story": null, + "fast": null, + "fast_exception": 1, + "flag": 0, + "tradition": "greek" + } +}, +{ + "model": "calendarium.day", + "pk": 904, + "fields": { + "pdist": 999, + "month": 1, + "day": 18, + "title": "", + "subtitle": "", + "feast_name": "", + "feast_level": null, + "service": 0, + "service_note": "", + "story": null, + "fast": null, + "fast_exception": 1, + "flag": 0, + "tradition": "greek" + } +}, +{ + "model": "calendarium.day", + "pk": 905, + "fields": { + "pdist": 999, + "month": 1, + "day": 22, + "title": "", + "subtitle": "", + "feast_name": "", + "feast_level": null, + "service": 0, + "service_note": "", + "story": null, + "fast": null, + "fast_exception": 1, + "flag": 0, + "tradition": "greek" + } +}, +{ + "model": "calendarium.day", + "pk": 906, + "fields": { + "pdist": 999, + "month": 1, + "day": 25, + "title": "", + "subtitle": "", + "feast_name": "", + "feast_level": null, + "service": 0, + "service_note": "", + "story": null, + "fast": null, + "fast_exception": 1, + "flag": 0, + "tradition": "greek" + } +}, +{ + "model": "calendarium.day", + "pk": 907, + "fields": { + "pdist": 999, + "month": 1, + "day": 27, + "title": "", + "subtitle": "", + "feast_name": "", + "feast_level": null, + "service": 0, + "service_note": "", + "story": null, + "fast": null, + "fast_exception": 1, + "flag": 0, + "tradition": "greek" + } +}, +{ + "model": "calendarium.day", + "pk": 908, + "fields": { + "pdist": 999, + "month": 2, + "day": 8, + "title": "", + "subtitle": "", + "feast_name": "", + "feast_level": null, + "service": 0, + "service_note": "", + "story": null, + "fast": null, + "fast_exception": 1, + "flag": 0, + "tradition": "greek" + } +}, +{ + "model": "calendarium.day", + "pk": 910, + "fields": { + "pdist": 999, + "month": 2, + "day": 10, + "title": "", + "subtitle": "", + "feast_name": "", + "feast_level": null, + "service": 0, + "service_note": "", + "story": null, + "fast": null, + "fast_exception": 1, + "flag": 0, + "tradition": "greek" + } +}, +{ + "model": "calendarium.day", + "pk": 911, + "fields": { + "pdist": 999, + "month": 2, + "day": 11, + "title": "", + "subtitle": "", + "feast_name": "", + "feast_level": null, + "service": 0, + "service_note": "", + "story": null, + "fast": null, + "fast_exception": 1, + "flag": 0, + "tradition": "greek" + } +}, +{ + "model": "calendarium.day", + "pk": 912, + "fields": { + "pdist": 999, + "month": 2, + "day": 17, + "title": "", + "subtitle": "", + "feast_name": "", + "feast_level": null, + "service": 0, + "service_note": "", + "story": null, + "fast": null, + "fast_exception": 1, + "flag": 0, + "tradition": "greek" + } +}, +{ + "model": "calendarium.day", + "pk": 915, + "fields": { + "pdist": 999, + "month": 4, + "day": 7, + "title": "", + "subtitle": "", + "feast_name": "", + "feast_level": null, + "service": 0, + "service_note": "", + "story": null, + "fast": null, "fast_exception": 0, "flag": 0, "tradition": "greek" } }, +{ + "model": "calendarium.day", + "pk": 916, + "fields": { + "pdist": 999, + "month": 4, + "day": 23, + "title": "", + "subtitle": "", + "feast_name": "", + "feast_level": null, + "service": 0, + "service_note": "", + "story": null, + "fast": null, + "fast_exception": 0, + "flag": 0, + "tradition": "greek" + } +}, +{ + "model": "calendarium.day", + "pk": 917, + "fields": { + "pdist": 999, + "month": 6, + "day": 8, + "title": "", + "subtitle": "", + "feast_name": "", + "feast_level": null, + "service": 0, + "service_note": "", + "story": null, + "fast": null, + "fast_exception": 1, + "flag": 0, + "tradition": "greek" + } +}, +{ + "model": "calendarium.day", + "pk": 918, + "fields": { + "pdist": 999, + "month": 6, + "day": 11, + "title": "", + "subtitle": "", + "feast_name": "", + "feast_level": null, + "service": 0, + "service_note": "", + "story": null, + "fast": null, + "fast_exception": 1, + "flag": 0, + "tradition": "greek" + } +}, +{ + "model": "calendarium.day", + "pk": 919, + "fields": { + "pdist": 999, + "month": 6, + "day": 30, + "title": "", + "subtitle": "", + "feast_name": "", + "feast_level": null, + "service": 0, + "service_note": "", + "story": null, + "fast": null, + "fast_exception": 1, + "flag": 0, + "tradition": "greek" + } +}, +{ + "model": "calendarium.day", + "pk": 920, + "fields": { + "pdist": 999, + "month": 7, + "day": 1, + "title": "", + "subtitle": "", + "feast_name": "", + "feast_level": null, + "service": 0, + "service_note": "", + "story": null, + "fast": null, + "fast_exception": 1, + "flag": 0, + "tradition": "greek" + } +}, +{ + "model": "calendarium.day", + "pk": 921, + "fields": { + "pdist": 999, + "month": 7, + "day": 2, + "title": "", + "subtitle": "", + "feast_name": "", + "feast_level": null, + "service": 0, + "service_note": "", + "story": null, + "fast": null, + "fast_exception": 1, + "flag": 0, + "tradition": "greek" + } +}, +{ + "model": "calendarium.day", + "pk": 922, + "fields": { + "pdist": 999, + "month": 7, + "day": 8, + "title": "", + "subtitle": "", + "feast_name": "", + "feast_level": null, + "service": 0, + "service_note": "", + "story": null, + "fast": null, + "fast_exception": 1, + "flag": 0, + "tradition": "greek" + } +}, +{ + "model": "calendarium.day", + "pk": 923, + "fields": { + "pdist": 999, + "month": 7, + "day": 17, + "title": "", + "subtitle": "", + "feast_name": "", + "feast_level": null, + "service": 0, + "service_note": "", + "story": null, + "fast": null, + "fast_exception": 1, + "flag": 0, + "tradition": "greek" + } +}, +{ + "model": "calendarium.day", + "pk": 924, + "fields": { + "pdist": 999, + "month": 7, + "day": 22, + "title": "", + "subtitle": "", + "feast_name": "", + "feast_level": null, + "service": 0, + "service_note": "", + "story": null, + "fast": null, + "fast_exception": 1, + "flag": 0, + "tradition": "greek" + } +}, +{ + "model": "calendarium.day", + "pk": 925, + "fields": { + "pdist": 999, + "month": 7, + "day": 25, + "title": "", + "subtitle": "", + "feast_name": "", + "feast_level": null, + "service": 0, + "service_note": "", + "story": null, + "fast": null, + "fast_exception": 1, + "flag": 0, + "tradition": "greek" + } +}, +{ + "model": "calendarium.day", + "pk": 926, + "fields": { + "pdist": 999, + "month": 7, + "day": 27, + "title": "", + "subtitle": "", + "feast_name": "", + "feast_level": null, + "service": 0, + "service_note": "", + "story": null, + "fast": null, + "fast_exception": 1, + "flag": 0, + "tradition": "greek" + } +}, +{ + "model": "calendarium.day", + "pk": 927, + "fields": { + "pdist": 999, + "month": 8, + "day": 16, + "title": "", + "subtitle": "", + "feast_name": "", + "feast_level": null, + "service": 0, + "service_note": "", + "story": null, + "fast": null, + "fast_exception": 0, + "flag": 0, + "tradition": "greek" + } +}, +{ + "model": "calendarium.day", + "pk": 928, + "fields": { + "pdist": 999, + "month": 8, + "day": 29, + "title": "", + "subtitle": "", + "feast_name": "", + "feast_level": null, + "service": 0, + "service_note": "", + "story": null, + "fast": null, + "fast_exception": 0, + "flag": 0, + "tradition": "greek" + } +}, +{ + "model": "calendarium.day", + "pk": 929, + "fields": { + "pdist": 999, + "month": 8, + "day": 31, + "title": "", + "subtitle": "", + "feast_name": "", + "feast_level": null, + "service": 0, + "service_note": "", + "story": null, + "fast": null, + "fast_exception": 1, + "flag": 0, + "tradition": "greek" + } +}, +{ + "model": "calendarium.day", + "pk": 930, + "fields": { + "pdist": 999, + "month": 9, + "day": 6, + "title": "", + "subtitle": "", + "feast_name": "", + "feast_level": null, + "service": 0, + "service_note": "", + "story": null, + "fast": null, + "fast_exception": 1, + "flag": 0, + "tradition": "greek" + } +}, +{ + "model": "calendarium.day", + "pk": 931, + "fields": { + "pdist": 999, + "month": 9, + "day": 9, + "title": "", + "subtitle": "", + "feast_name": "", + "feast_level": null, + "service": 0, + "service_note": "", + "story": null, + "fast": null, + "fast_exception": 1, + "flag": 0, + "tradition": "greek" + } +}, +{ + "model": "calendarium.day", + "pk": 932, + "fields": { + "pdist": 999, + "month": 9, + "day": 12, + "title": "", + "subtitle": "", + "feast_name": "", + "feast_level": null, + "service": 0, + "service_note": "", + "story": null, + "fast": null, + "fast_exception": 0, + "flag": 0, + "tradition": "greek" + } +}, +{ + "model": "calendarium.day", + "pk": 933, + "fields": { + "pdist": 999, + "month": 9, + "day": 20, + "title": "", + "subtitle": "", + "feast_name": "", + "feast_level": null, + "service": 0, + "service_note": "", + "story": null, + "fast": null, + "fast_exception": 1, + "flag": 0, + "tradition": "greek" + } +}, +{ + "model": "calendarium.day", + "pk": 934, + "fields": { + "pdist": 999, + "month": 9, + "day": 24, + "title": "", + "subtitle": "", + "feast_name": "", + "feast_level": null, + "service": 0, + "service_note": "", + "story": null, + "fast": null, + "fast_exception": 0, + "flag": 0, + "tradition": "greek" + } +}, +{ + "model": "calendarium.day", + "pk": 935, + "fields": { + "pdist": 999, + "month": 9, + "day": 28, + "title": "", + "subtitle": "", + "feast_name": "", + "feast_level": null, + "service": 0, + "service_note": "", + "story": null, + "fast": null, + "fast_exception": 0, + "flag": 0, + "tradition": "greek" + } +}, +{ + "model": "calendarium.day", + "pk": 936, + "fields": { + "pdist": 999, + "month": 10, + "day": 9, + "title": "", + "subtitle": "", + "feast_name": "", + "feast_level": null, + "service": 0, + "service_note": "", + "story": null, + "fast": null, + "fast_exception": 0, + "flag": 0, + "tradition": "greek" + } +}, +{ + "model": "calendarium.day", + "pk": 937, + "fields": { + "pdist": 999, + "month": 10, + "day": 23, + "title": "", + "subtitle": "", + "feast_name": "", + "feast_level": null, + "service": 0, + "service_note": "", + "story": null, + "fast": null, + "fast_exception": 1, + "flag": 0, + "tradition": "greek" + } +}, +{ + "model": "calendarium.day", + "pk": 938, + "fields": { + "pdist": 999, + "month": 11, + "day": 1, + "title": "", + "subtitle": "", + "feast_name": "", + "feast_level": null, + "service": 0, + "service_note": "", + "story": null, + "fast": null, + "fast_exception": 1, + "flag": 0, + "tradition": "greek" + } +}, +{ + "model": "calendarium.day", + "pk": 939, + "fields": { + "pdist": 999, + "month": 11, + "day": 12, + "title": "", + "subtitle": "", + "feast_name": "", + "feast_level": null, + "service": 0, + "service_note": "", + "story": null, + "fast": null, + "fast_exception": 1, + "flag": 0, + "tradition": "greek" + } +}, +{ + "model": "calendarium.day", + "pk": 940, + "fields": { + "pdist": 999, + "month": 11, + "day": 14, + "title": "", + "subtitle": "", + "feast_name": "", + "feast_level": null, + "service": 0, + "service_note": "", + "story": null, + "fast": null, + "fast_exception": 2, + "flag": 0, + "tradition": "greek" + } +}, +{ + "model": "calendarium.day", + "pk": 941, + "fields": { + "pdist": 999, + "month": 12, + "day": 4, + "title": "", + "subtitle": "", + "feast_name": "", + "feast_level": null, + "service": 0, + "service_note": "", + "story": null, + "fast": null, + "fast_exception": 1, + "flag": 0, + "tradition": "greek" + } +}, +{ + "model": "calendarium.day", + "pk": 942, + "fields": { + "pdist": 999, + "month": 12, + "day": 5, + "title": "", + "subtitle": "", + "feast_name": "", + "feast_level": null, + "service": 0, + "service_note": "", + "story": null, + "fast": null, + "fast_exception": 1, + "flag": 0, + "tradition": "greek" + } +}, +{ + "model": "calendarium.day", + "pk": 943, + "fields": { + "pdist": 999, + "month": 12, + "day": 9, + "title": "", + "subtitle": "", + "feast_name": "", + "feast_level": null, + "service": 0, + "service_note": "", + "story": null, + "fast": null, + "fast_exception": 1, + "flag": 0, + "tradition": "greek" + } +}, +{ + "model": "calendarium.day", + "pk": 944, + "fields": { + "pdist": 999, + "month": 12, + "day": 12, + "title": "", + "subtitle": "", + "feast_name": "", + "feast_level": null, + "service": 0, + "service_note": "", + "story": null, + "fast": null, + "fast_exception": 1, + "flag": 0, + "tradition": "greek" + } +}, +{ + "model": "calendarium.day", + "pk": 945, + "fields": { + "pdist": 999, + "month": 12, + "day": 15, + "title": "", + "subtitle": "", + "feast_name": "", + "feast_level": null, + "service": 0, + "service_note": "", + "story": null, + "fast": null, + "fast_exception": 1, + "flag": 0, + "tradition": "greek" + } +}, +{ + "model": "calendarium.day", + "pk": 946, + "fields": { + "pdist": 999, + "month": 12, + "day": 17, + "title": "", + "subtitle": "", + "feast_name": "", + "feast_level": null, + "service": 0, + "service_note": "", + "story": null, + "fast": null, + "fast_exception": 1, + "flag": 0, + "tradition": "greek" + } +}, +{ + "model": "calendarium.day", + "pk": 865, + "fields": { + "pdist": 999, + "month": 11, + "day": 24, + "title": "", + "subtitle": "", + "feast_name": "", + "feast_level": null, + "service": 0, + "service_note": "", + "story": null, + "fast": null, + "fast_exception": null, + "flag": 0, + "tradition": "slavic" + } +}, { "model": "calendarium.reading", "pk": 1, From aa7f9896c28949c41e8d3e9479286cfbd6d18110 Mon Sep 17 00:00:00 2001 From: Brian Glass Date: Thu, 10 Sep 2026 17:15:18 -0400 Subject: [PATCH 20/20] Move the last two date lists out of source; fasting.py is now only rules Brian objected to GREEK_WED_FRI_FISH_OK_DATES and _PDISTS on the same grounds as the first three lists. What made them necessary: the Wednesday/Friday cap must distinguish a feast of the Lord from a saint, and the schema encodes that only as feast_level >= 7 -- on a scale that follows the Slavic reckoning. Five days are Lord-ish to GOA and ranked lower by us. The Synaxis of the Forerunner is level 3 and keeps its fish; St Matthew is level 6 and does not. The two pdists needed no replacement at all. They were the Midfeast and the Leavetaking of Pascha, and the cap should never have reached them: it means "no fish for a saint", and the Paschal cycle is not a saint. Scoping the cap to festal claims removes them on principle rather than by name, using the same festal/Paschal distinction the strict-date handling already needed. The three remaining dates became Day.fast_cap_exempt, which finally gives the concept a name: this commemoration's claim outranks the season's cap. That is what the old scale said positionally. Indices 3 and 4 duplicate 1 and 2 in their wording precisely because they were the cap-outranking variants -- every index-3 row is a wine-and-oil grant inside Lent, every index-4 row a fish grant inside a fast. Reading it off the index was tried and does not work: it lifts the Dormition fast's cap too, giving fish on Aug 9 and Aug 13 where antiochian.org lists the Leavetaking of the Transfiguration as a full abstention day, and dropping goarch agreement to 99.6%. The precedence idea is real but not universal, so it belongs on the row. calendarium/fasting.py now holds no jurisdiction data at all -- only seasons and the rule that combines them. Behaviour unchanged: 0 of 3652 characterisation days differ and goarch agreement holds at 3678/3683. 197 tests pass. Co-Authored-By: Claude Opus 5 Claude-Session: https://claude.ai/code/session_019nQRjJpPqW89xqzAf1vsEX --- calendarium/fasting.py | 70 +- calendarium/liturgics/day.py | 4 +- .../migrations/0012_day_fast_cap_exempt.py | 18 + calendarium/models.py | 14 +- docs/fasting-refactor-scope.md | 33 + fixtures/calendarium.json | 2758 +++++++++++------ 6 files changed, 1948 insertions(+), 949 deletions(-) create mode 100644 calendarium/migrations/0012_day_fast_cap_exempt.py diff --git a/calendarium/fasting.py b/calendarium/fasting.py index 96c48df7..da0efca2 100644 --- a/calendarium/fasting.py +++ b/calendarium/fasting.py @@ -37,6 +37,14 @@ # rather than lose to it. 5 both claims and caps: it lifts the strict floor too. CAP_INDICES = (5, 9, 10) CLAIMLESS_INDICES = (0, 9, 10) +# Indices 3 and 4 duplicate 1 and 2 in their wording, and the duplication was +# the old scale's way of saying "this claim outranks the season's cap": every +# index-3 row is a wine-and-oil grant inside Lent, every index-4 row a fish +# grant inside a fast. That meaning is NOT read off the index here, because it +# is not universal -- the Dormition fast caps index-4 claims deliberately, the +# Leavetaking of the Transfiguration being a full abstention day in practice. +# `Day.fast_cap_exempt` says it per row instead, which is the same thought +# without the ambiguity. # What to report as `fast_exception` when the season decided the outcome rather # than any particular row: one canonical legacy index per rung. The field is @@ -190,38 +198,18 @@ def cap_for(self, weekday, feast_level): # Chapter X: "Fish is permitted on Wednesday or Friday if it is a feast of the # Lord even during fasting seasons." GOA applies that as a *cap* -- a saint's -# fish grant falls back to wine and oil when it lands on a Wednesday or Friday, -# however highly ranked the saint. Ten years of data give fourteen such saints, -# at feast levels 4, 5 and 6: Anthony the Great, Euthymius, the Three Hierarchs, -# John the Theologian (twice a year), Constantine and Helen, Elijah, Thomas, -# Demetrius, the Archangel Michael, Chrysostom, Matthew, Andrew and Nicholas. +# fish grant falls back to wine and oil on a Wednesday or Friday, however highly +# ranked the saint. Ten years of data give fourteen such saints, at feast levels +# 4, 5 and 6: Anthony the Great, Euthymius, the Three Hierarchs, John the +# Theologian (twice a year), Constantine and Helen, Elijah, Thomas, Demetrius, +# the Archangel Michael, Chrysostom, Matthew, Andrew and Nicholas. # # Note GOA does *not* honour Chapter X's "or one of the 12 Apostles" clause: # John the Theologian, Thomas, Matthew and Andrew are all capped. # -# `cap_exempt_rank=7` lets the fixed Lord and Theotokos feasts through, since -# levels 7 and 8 are exactly "Major feast Theotokos" and "Major feast Lord". -# Three Lord-feast days our data ranks lower need naming explicitly. -GREEK_WED_FRI_FISH_OK_DATES = frozenset({ - (1, 7), # Synaxis of the Forerunner, in Theophany's afterfeast - # Two apostles that do keep fish, against the general rule above. Both sit - # on a fast boundary -- Peter and Paul closes the Apostles' fast, Philip is - # the eve of the Nativity fast -- which is the likeliest reason, though two - # feasts cannot establish it. Three Wednesday/Friday observations each, - # fish every time. - (6, 29), # Holy Apostles Peter and Paul - (11, 14), # Holy Apostle Philip -}) - -# Peter and Paul already claims fish in the shared data, so exempting it from -# the cap is enough. Philip does not -- our row for him claims only wine and -# oil -- so his fish comes from a sparse `greek` override on the slot, and this -# exemption is what stops the cap taking it straight back off him. - -GREEK_WED_FRI_FISH_OK_PDISTS = frozenset({ - 24, # Midfeast of Pentecost - 38, # Leavetaking of Pascha / Forefeast of the Ascension -}) +# `cap_exempt_rank=7` lets the fixed Lord and Theotokos feasts through, levels 7 +# and 8 being exactly "Major feast Theotokos" and "Major feast Lord". The days +# our own reckoning ranks lower say so on the row, via `Day.fast_cap_exempt`. # Cheesefare week needs its own season purely so ORDINARY_GREEK's Wednesday and # Friday cap does not reach it. That cap means "no fish for a saint"; the week @@ -260,7 +248,7 @@ def greek_season(day): # --- the rule --------------------------------------------------------------- def resolve(season, weekday, feast_level, rows, no_fish=False, - eve_on_weekend=False, cap_exempt=False): + eve_on_weekend=False, festal=None, cap_exempt_rows=False): """Combine a day's contributing rows into (rung, legacy fast_exception).""" claims = [(i, RUNG[i]) for i in rows if i not in CLAIMLESS_INDICES] caps = [(i, RUNG[i]) for i in rows if i in CAP_INDICES] @@ -271,15 +259,21 @@ def resolve(season, weekday, feast_level, rows, no_fish=False, allowance = season.floor_for(weekday) winner = None # the row that set the current answer - season_cap = (D.FastFree if cap_exempt - else season.cap_for(weekday, feast_level)) + season_cap = season.cap_for(weekday, feast_level) + festal = festal if festal is not None else {i: True for i, _ in claims} for index, claim in claims: # A season cap means "no fish", and caviar is not fish -- dietarily # WineOilCaviar excludes exactly what WineAndOil does -- so a caviar # claim survives the cap rather than being clamped below it. - clamped = (claim if claim is D.WineOilCaviar and season_cap >= D.WineAndOil - else min(claim, season_cap)) + # The Wednesday/Friday cap says "no fish for a saint". Two things are + # not a saint: the Paschal cycle's own claims (the Midfeast, the + # Leavetaking of Pascha), and a claim the data has explicitly marked as + # outranking a cap. + exempt = cap_exempt_rows or not festal.get(index, True) + cap = D.FastFree if exempt else season_cap + clamped = (claim if claim is D.WineOilCaviar and cap >= D.WineAndOil + else min(claim, cap)) if clamped > allowance: # A clamped claim no longer speaks for itself; the season does. allowance, winner = clamped, (index if clamped == claim else None) @@ -305,7 +299,7 @@ def resolve(season, weekday, feast_level, rows, no_fish=False, return allowance, (winner if winner is not None else CANONICAL[allowance]) -def apply(day, season_for, fish_ok_dates=frozenset(), fish_ok_pdists=frozenset()): +def apply(day, season_for): """Set `day.fast_level` and `day.fast_exception` for one day. A jurisdiction's own fixed-date departures -- the saints GOA relaxes a fast @@ -316,6 +310,8 @@ def apply(day, season_for, fish_ok_dates=frozenset(), fish_ok_pdists=frozenset() lift a fast, they do not escape one. """ rows = [d.fast_exception for d in day.days] + festal = {d.fast_exception: bool(d.month) for d in day.days} + cap_exempt_rows = any(d.fast_cap_exempt for d in day.days) if FAST_FREE in rows: day.fast_level = FastLevels.NoFast @@ -334,9 +330,7 @@ def apply(day, season_for, fish_ok_dates=frozenset(), fish_ok_pdists=frozenset() and day.pyear.nativity - 6 < day.pdist < day.pyear.nativity - 1) eve = day.pdist in (day.pyear.nativity - 1, day.pyear.theophany - 1) - cap_exempt = ((day.month, day.day) in fish_ok_dates - or day.pdist in fish_ok_pdists) - _, day.fast_exception = resolve( season, day.weekday, day.feast_level, rows, - no_fish=no_fish, eve_on_weekend=eve, cap_exempt=cap_exempt) + no_fish=no_fish, eve_on_weekend=eve, festal=festal, + cap_exempt_rows=cap_exempt_rows) diff --git a/calendarium/liturgics/day.py b/calendarium/liturgics/day.py index 1769baf1..4c0b7523 100644 --- a/calendarium/liturgics/day.py +++ b/calendarium/liturgics/day.py @@ -983,9 +983,7 @@ class GreekDay(Day): def _apply_fasting_adjustments(self): """Greek dietary rules, which differ from Slavic only in the Nativity fast -- see calendarium/fasting.py and docs/greek-fasting.md.""" - fasting.apply(self, fasting.greek_season, - fish_ok_dates=fasting.GREEK_WED_FRI_FISH_OK_DATES, - fish_ok_pdists=fasting.GREEK_WED_FRI_FISH_OK_PDISTS) + fasting.apply(self, fasting.greek_season) _DAY_CLASSES = { diff --git a/calendarium/migrations/0012_day_fast_cap_exempt.py b/calendarium/migrations/0012_day_fast_cap_exempt.py new file mode 100644 index 00000000..df5294f9 --- /dev/null +++ b/calendarium/migrations/0012_day_fast_cap_exempt.py @@ -0,0 +1,18 @@ +# Generated by Django 6.1 on 2026-09-10 21:09 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('calendarium', '0011_alter_day_fast_alter_day_fast_exception_and_more'), + ] + + operations = [ + migrations.AddField( + model_name='day', + name='fast_cap_exempt', + field=models.BooleanField(blank=True, null=True), + ), + ] diff --git a/calendarium/models.py b/calendarium/models.py index e202f51b..34adaf43 100644 --- a/calendarium/models.py +++ b/calendarium/models.py @@ -29,7 +29,7 @@ class Day(models.Model): blank; `test_day_overrides_are_sparse` enforces it. """ - OVERRIDABLE = ('feast_level', 'fast', 'fast_exception') + OVERRIDABLE = ('feast_level', 'fast', 'fast_exception', 'fast_cap_exempt') pdist = models.SmallIntegerField(db_index=True) month = models.SmallIntegerField() @@ -44,6 +44,18 @@ class Day(models.Model): fast = models.SmallIntegerField(null=True, blank=True) fast_exception = models.SmallIntegerField(null=True, blank=True) flag = models.SmallIntegerField() + # "This commemoration's claim outranks the season's cap." A season that caps + # fish away on a Wednesday means "no fish for a saint", and is not aimed at + # a feast of the Lord -- but `feast_level` cannot always tell the two apart, + # because it follows the Slavic reckoning. The Synaxis of the Forerunner is + # level 3 here and keeps its fish in Greek practice; St Matthew is level 6 + # and does not. + # + # The old scale said this positionally: indices 3 and 4 duplicate 1 and 2 in + # wording precisely because they were the cap-outranking variants. That is + # not read off the index, because it is not universal -- the Dormition fast + # caps index-4 claims deliberately. Saying it per row removes the ambiguity. + fast_cap_exempt = models.BooleanField(null=True, blank=True) tradition = models.CharField(max_length=16, choices=[ ('common', 'Common'), # shared by all traditions (the default) ('slavic', 'Slavic-specific'), diff --git a/docs/fasting-refactor-scope.md b/docs/fasting-refactor-scope.md index 8fd35d0e..76801663 100644 --- a/docs/fasting-refactor-scope.md +++ b/docs/fasting-refactor-scope.md @@ -608,6 +608,39 @@ caught it, not the reasoning; the guard test now allows that case explicitly. Worth remembering next time a Day row looks redundant -- 379 of them are foreign-key targets. +### The last two constants, and what made them necessary + +Brian objected to `GREEK_WED_FRI_FISH_OK_DATES` and `_PDISTS` on the same +grounds as the first lists. The honest answer to "what makes this necessary" is +that the Wednesday/Friday cap has to distinguish *feast of the Lord* from +*saint*, and our schema encodes that only as `feast_level >= 7` -- on a scale +that follows the **Slavic** reckoning. Five days are Lord-ish to GOA and ranked +lower by us: the Synaxis of the Forerunner is level 3 and keeps its fish, while +St Matthew is level 6 and does not. + +Both constants are gone, by two different routes. + +**The two pdists needed no replacement.** They were the Midfeast and the +Leavetaking of Pascha, and the cap should never have reached them: it means "no +fish for a *saint*", and the Paschal cycle is not a saint. Scoping the cap to +festal claims removes them on principle rather than by name -- the same +festal/Paschal distinction the strict-date handling already needed. + +**The three dates became `Day.fast_cap_exempt`.** The concept has a name now: +"this commemoration's claim outranks the season's cap." + +That is what the old scale said *positionally*. Indices 3 and 4 duplicate 1 and +2 in their wording precisely because they were the cap-outranking variants -- +every index-3 row is a wine-and-oil grant inside Lent, every index-4 row a fish +grant inside a fast. **Reading it off the index was tried and does not work**: +it lifts the Dormition fast's cap too, giving fish on Aug 9 and Aug 13 where +antiochian.org lists the Leavetaking of the Transfiguration as a full abstention +day, and dropping goarch agreement to 99.6%. The precedence idea is real but not +universal, so it belongs on the row rather than in the index. + +`calendarium/fasting.py` now contains no jurisdiction data at all -- only +seasons and the rule. + ### Chasing the last stragglers: 99.4% -> 99.9% Working through the 22 that survived turned up one substantive bug and several diff --git a/fixtures/calendarium.json b/fixtures/calendarium.json index 5c0175c2..6e055ffe 100644 --- a/fixtures/calendarium.json +++ b/fixtures/calendarium.json @@ -16,7 +16,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -36,7 +37,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -56,7 +58,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -76,7 +79,8 @@ "fast": 1, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -96,7 +100,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -116,7 +121,8 @@ "fast": 1, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -136,7 +142,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -156,7 +163,8 @@ "fast": 0, "fast_exception": 11, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -176,7 +184,8 @@ "fast": 0, "fast_exception": 11, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -196,7 +205,8 @@ "fast": 0, "fast_exception": 11, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -216,7 +226,8 @@ "fast": 0, "fast_exception": 11, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -236,7 +247,8 @@ "fast": 0, "fast_exception": 11, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -256,7 +268,8 @@ "fast": 0, "fast_exception": 11, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -276,7 +289,8 @@ "fast": 0, "fast_exception": 11, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -296,7 +310,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -316,7 +331,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -336,7 +352,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -356,7 +373,8 @@ "fast": 1, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -376,7 +394,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -396,7 +415,8 @@ "fast": 1, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -416,7 +436,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -436,7 +457,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -456,7 +478,8 @@ "fast": 1, "fast_exception": 7, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -476,7 +499,8 @@ "fast": 1, "fast_exception": 7, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -496,7 +520,8 @@ "fast": 1, "fast_exception": 7, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -516,7 +541,8 @@ "fast": 1, "fast_exception": 7, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -536,7 +562,8 @@ "fast": 1, "fast_exception": 7, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -556,7 +583,8 @@ "fast": 1, "fast_exception": 7, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -576,7 +604,8 @@ "fast": 1, "fast_exception": 7, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -596,7 +625,8 @@ "fast": 2, "fast_exception": 10, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -616,7 +646,8 @@ "fast": 2, "fast_exception": 10, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -636,7 +667,8 @@ "fast": 2, "fast_exception": 10, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -656,7 +688,8 @@ "fast": 2, "fast_exception": 10, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -676,7 +709,8 @@ "fast": 2, "fast_exception": 10, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -696,7 +730,8 @@ "fast": 2, "fast_exception": 3, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -716,7 +751,8 @@ "fast": 2, "fast_exception": 3, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -736,7 +772,8 @@ "fast": 2, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -756,7 +793,8 @@ "fast": 2, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -776,7 +814,8 @@ "fast": 2, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -796,7 +835,8 @@ "fast": 2, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -816,7 +856,8 @@ "fast": 2, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -836,7 +877,8 @@ "fast": 2, "fast_exception": 3, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -856,7 +898,8 @@ "fast": 2, "fast_exception": 3, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -876,7 +919,8 @@ "fast": 2, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -896,7 +940,8 @@ "fast": 2, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -916,7 +961,8 @@ "fast": 2, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -936,7 +982,8 @@ "fast": 2, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -956,7 +1003,8 @@ "fast": 2, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -976,7 +1024,8 @@ "fast": 2, "fast_exception": 3, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -996,7 +1045,8 @@ "fast": 2, "fast_exception": 3, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -1016,7 +1066,8 @@ "fast": 2, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -1036,7 +1087,8 @@ "fast": 2, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -1056,7 +1108,8 @@ "fast": 2, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -1076,7 +1129,8 @@ "fast": 2, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -1096,7 +1150,8 @@ "fast": 2, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -1116,7 +1171,8 @@ "fast": 2, "fast_exception": 3, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -1136,7 +1192,8 @@ "fast": 2, "fast_exception": 3, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -1156,7 +1213,8 @@ "fast": 2, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -1176,7 +1234,8 @@ "fast": 2, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -1196,7 +1255,8 @@ "fast": 2, "fast_exception": 3, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -1216,7 +1276,8 @@ "fast": 2, "fast_exception": 3, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -1236,7 +1297,8 @@ "fast": 2, "fast_exception": 3, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -1256,7 +1318,8 @@ "fast": 2, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -1276,7 +1339,8 @@ "fast": 2, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -1296,7 +1360,8 @@ "fast": 2, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -1316,7 +1381,8 @@ "fast": 2, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -1336,7 +1402,8 @@ "fast": 2, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -1356,7 +1423,8 @@ "fast": 2, "fast_exception": 6, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -1376,7 +1444,8 @@ "fast": 2, "fast_exception": 4, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -1396,7 +1465,8 @@ "fast": 2, "fast_exception": 10, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -1416,7 +1486,8 @@ "fast": 2, "fast_exception": 10, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -1436,7 +1507,8 @@ "fast": 2, "fast_exception": 10, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -1456,7 +1528,8 @@ "fast": 2, "fast_exception": 3, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -1476,7 +1549,8 @@ "fast": 2, "fast_exception": 9, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -1496,7 +1570,8 @@ "fast": 2, "fast_exception": 5, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -1516,7 +1591,8 @@ "fast": 0, "fast_exception": 11, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -1536,7 +1612,8 @@ "fast": 0, "fast_exception": 11, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -1556,7 +1633,8 @@ "fast": 0, "fast_exception": 11, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -1576,7 +1654,8 @@ "fast": 0, "fast_exception": 11, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -1596,7 +1675,8 @@ "fast": 0, "fast_exception": 11, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -1616,7 +1696,8 @@ "fast": 0, "fast_exception": 11, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -1636,7 +1717,8 @@ "fast": 0, "fast_exception": 11, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -1656,7 +1738,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -1676,7 +1759,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -1696,7 +1780,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -1716,7 +1801,8 @@ "fast": 1, "fast_exception": 1, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -1736,7 +1822,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -1756,7 +1843,8 @@ "fast": 1, "fast_exception": 1, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -1776,7 +1864,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -1796,7 +1885,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -1816,7 +1906,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -1836,7 +1927,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -1856,7 +1948,8 @@ "fast": 1, "fast_exception": 1, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -1876,7 +1969,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -1896,7 +1990,8 @@ "fast": 1, "fast_exception": 1, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -1916,7 +2011,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -1936,7 +2032,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -1956,7 +2053,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -1976,7 +2074,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -1996,7 +2095,8 @@ "fast": 1, "fast_exception": 2, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -2016,7 +2116,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -2036,7 +2137,8 @@ "fast": 1, "fast_exception": 1, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -2056,7 +2158,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -2076,7 +2179,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -2096,7 +2200,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -2116,7 +2221,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -2136,7 +2242,8 @@ "fast": 1, "fast_exception": 1, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -2156,7 +2263,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -2176,7 +2284,8 @@ "fast": 1, "fast_exception": 1, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -2196,7 +2305,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -2216,7 +2326,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -2236,7 +2347,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -2256,7 +2368,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -2276,7 +2389,8 @@ "fast": 1, "fast_exception": 2, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -2296,7 +2410,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -2316,7 +2431,8 @@ "fast": 1, "fast_exception": 1, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -2336,7 +2452,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -2356,7 +2473,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -2376,7 +2494,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -2396,7 +2515,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -2416,7 +2536,8 @@ "fast": 1, "fast_exception": 1, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -2436,7 +2557,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -2456,7 +2578,8 @@ "fast": 1, "fast_exception": 1, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -2476,7 +2599,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -2496,7 +2620,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -2516,7 +2641,8 @@ "fast": 0, "fast_exception": 11, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -2536,7 +2662,8 @@ "fast": 0, "fast_exception": 11, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -2556,7 +2683,8 @@ "fast": 0, "fast_exception": 11, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -2576,7 +2704,8 @@ "fast": 0, "fast_exception": 11, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -2596,7 +2725,8 @@ "fast": 0, "fast_exception": 11, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -2616,7 +2746,8 @@ "fast": 0, "fast_exception": 11, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -2636,7 +2767,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -2656,7 +2788,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -2676,7 +2809,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -2696,7 +2830,8 @@ "fast": 1, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -2716,7 +2851,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -2736,7 +2872,8 @@ "fast": 1, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -2756,7 +2893,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -2776,7 +2914,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -2796,7 +2935,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -2816,7 +2956,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -2836,7 +2977,8 @@ "fast": 1, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -2856,7 +2998,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -2876,7 +3019,8 @@ "fast": 1, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -2896,7 +3040,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -2916,7 +3061,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -2936,7 +3082,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -2956,7 +3103,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -2976,7 +3124,8 @@ "fast": 1, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -2996,7 +3145,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -3016,7 +3166,8 @@ "fast": 1, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -3036,7 +3187,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -3056,7 +3208,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -3076,7 +3229,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -3096,7 +3250,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -3116,7 +3271,8 @@ "fast": 1, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -3136,7 +3292,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -3156,7 +3313,8 @@ "fast": 1, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -3176,7 +3334,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -3196,7 +3355,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -3216,7 +3376,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -3236,7 +3397,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -3256,7 +3418,8 @@ "fast": 1, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -3276,7 +3439,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -3296,7 +3460,8 @@ "fast": 1, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -3316,7 +3481,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -3336,7 +3502,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -3356,7 +3523,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -3376,7 +3544,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -3396,7 +3565,8 @@ "fast": 1, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -3416,7 +3586,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -3436,7 +3607,8 @@ "fast": 1, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -3456,7 +3628,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -3476,7 +3649,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -3496,7 +3670,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -3516,7 +3691,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -3536,7 +3712,8 @@ "fast": 1, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -3556,7 +3733,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -3576,7 +3754,8 @@ "fast": 1, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -3596,7 +3775,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -3616,7 +3796,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -3636,7 +3817,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -3656,7 +3838,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -3676,7 +3859,8 @@ "fast": 1, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -3696,7 +3880,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -3716,7 +3901,8 @@ "fast": 1, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -3736,7 +3922,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -3756,7 +3943,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -3776,7 +3964,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -3796,7 +3985,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -3816,7 +4006,8 @@ "fast": 1, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -3836,7 +4027,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -3856,7 +4048,8 @@ "fast": 1, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -3876,7 +4069,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -3896,7 +4090,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -3916,7 +4111,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -3936,7 +4132,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -3956,7 +4153,8 @@ "fast": 1, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -3976,7 +4174,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -3996,7 +4195,8 @@ "fast": 1, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -4016,7 +4216,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -4036,7 +4237,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -4056,7 +4258,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -4076,7 +4279,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -4096,7 +4300,8 @@ "fast": 1, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -4116,7 +4321,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -4136,7 +4342,8 @@ "fast": 1, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -4156,7 +4363,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -4176,7 +4384,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -4196,7 +4405,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -4216,7 +4426,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -4236,7 +4447,8 @@ "fast": 1, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -4256,7 +4468,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -4276,7 +4489,8 @@ "fast": 1, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -4296,7 +4510,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -4316,7 +4531,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -4336,7 +4552,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -4356,7 +4573,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -4376,7 +4594,8 @@ "fast": 1, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -4396,7 +4615,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -4416,7 +4636,8 @@ "fast": 1, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -4436,7 +4657,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -4456,7 +4678,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -4476,7 +4699,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -4496,7 +4720,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -4516,7 +4741,8 @@ "fast": 1, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -4536,7 +4762,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -4556,7 +4783,8 @@ "fast": 1, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -4576,7 +4804,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -4596,7 +4825,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -4616,7 +4846,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -4636,7 +4867,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -4656,7 +4888,8 @@ "fast": 1, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -4676,7 +4909,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -4696,7 +4930,8 @@ "fast": 1, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -4716,7 +4951,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -4736,7 +4972,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -4756,7 +4993,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -4776,7 +5014,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -4796,7 +5035,8 @@ "fast": 1, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -4816,7 +5056,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -4836,7 +5077,8 @@ "fast": 1, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -4856,7 +5098,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -4876,7 +5119,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -4896,7 +5140,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -4916,7 +5161,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -4936,7 +5182,8 @@ "fast": 1, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -4956,7 +5203,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -4976,7 +5224,8 @@ "fast": 1, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -4996,7 +5245,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -5016,7 +5266,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -5036,7 +5287,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -5056,7 +5308,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -5076,7 +5329,8 @@ "fast": 1, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -5096,7 +5350,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -5116,7 +5371,8 @@ "fast": 1, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -5136,7 +5392,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -5156,7 +5413,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -5176,7 +5434,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -5196,7 +5455,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -5216,7 +5476,8 @@ "fast": 1, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -5236,7 +5497,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -5256,7 +5518,8 @@ "fast": 1, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -5276,7 +5539,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -5296,7 +5560,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -5316,7 +5581,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -5336,7 +5602,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -5356,7 +5623,8 @@ "fast": 1, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -5376,7 +5644,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -5396,7 +5665,8 @@ "fast": 1, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -5416,7 +5686,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -5436,7 +5707,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -5456,7 +5728,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -5476,7 +5749,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -5496,7 +5770,8 @@ "fast": 1, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -5516,7 +5791,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -5536,7 +5812,8 @@ "fast": 1, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -5556,7 +5833,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -5576,7 +5854,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -5596,7 +5875,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -5616,7 +5896,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -5636,7 +5917,8 @@ "fast": 1, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -5656,7 +5938,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -5676,7 +5959,8 @@ "fast": 1, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -5696,7 +5980,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -5716,7 +6001,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -5736,7 +6022,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -5756,7 +6043,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -5776,7 +6064,8 @@ "fast": 1, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -5796,7 +6085,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -5816,7 +6106,8 @@ "fast": 1, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -5836,7 +6127,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -5856,7 +6148,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -5876,7 +6169,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -5896,7 +6190,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -5916,7 +6211,8 @@ "fast": 1, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -5936,7 +6232,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -5956,7 +6253,8 @@ "fast": 1, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -5976,7 +6274,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -5996,7 +6295,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -6016,7 +6316,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -6036,7 +6337,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -6056,7 +6358,8 @@ "fast": 1, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -6076,7 +6379,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -6096,7 +6400,8 @@ "fast": 1, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -6116,7 +6421,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -6136,7 +6442,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -6156,7 +6463,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -6176,7 +6484,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -6196,7 +6505,8 @@ "fast": 1, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -6216,7 +6526,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -6236,7 +6547,8 @@ "fast": 1, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -6256,7 +6568,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -6276,7 +6589,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -6296,7 +6610,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -6316,7 +6631,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -6336,7 +6652,8 @@ "fast": 1, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -6356,7 +6673,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -6376,7 +6694,8 @@ "fast": 1, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -6396,7 +6715,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -6416,7 +6736,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -6436,7 +6757,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -6456,7 +6778,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -6476,7 +6799,8 @@ "fast": 1, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -6496,7 +6820,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -6516,7 +6841,8 @@ "fast": 1, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -6536,7 +6862,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -6556,7 +6883,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -6576,7 +6904,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -6596,7 +6925,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -6616,7 +6946,8 @@ "fast": 1, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -6636,7 +6967,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -6656,7 +6988,8 @@ "fast": 1, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -6676,7 +7009,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -6696,7 +7030,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -6716,7 +7051,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -6736,7 +7072,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -6756,7 +7093,8 @@ "fast": 1, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -6776,7 +7114,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -6796,7 +7135,8 @@ "fast": 1, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -6816,7 +7156,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -6836,7 +7177,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -6856,7 +7198,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -6876,7 +7219,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -6896,7 +7240,8 @@ "fast": 1, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -6916,7 +7261,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -6936,7 +7282,8 @@ "fast": 1, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -6956,7 +7303,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -6976,7 +7324,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -6996,7 +7345,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -7016,7 +7366,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -7036,7 +7387,8 @@ "fast": 1, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -7056,7 +7408,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -7076,7 +7429,8 @@ "fast": 1, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -7096,7 +7450,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -7116,7 +7471,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -7136,7 +7492,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -7156,7 +7513,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -7176,7 +7534,8 @@ "fast": 1, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -7196,7 +7555,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -7216,7 +7576,8 @@ "fast": 1, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -7236,7 +7597,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -7256,7 +7618,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -7276,7 +7639,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -7296,7 +7660,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -7316,7 +7681,8 @@ "fast": 1, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -7336,7 +7702,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -7356,7 +7723,8 @@ "fast": 1, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -7376,7 +7744,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -7396,7 +7765,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -7416,7 +7786,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -7436,7 +7807,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -7456,7 +7828,8 @@ "fast": 1, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -7476,7 +7849,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -7496,7 +7870,8 @@ "fast": 1, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -7516,7 +7891,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -7536,7 +7912,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -7556,7 +7933,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -7576,7 +7954,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -7596,7 +7975,8 @@ "fast": 1, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -7616,7 +7996,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -7636,7 +8017,8 @@ "fast": 1, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -7656,7 +8038,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -7676,7 +8059,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -7696,7 +8080,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -7716,7 +8101,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -7736,7 +8122,8 @@ "fast": 1, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -7756,7 +8143,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -7776,7 +8164,8 @@ "fast": 1, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -7796,7 +8185,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -7816,7 +8206,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -7836,7 +8227,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -7856,7 +8248,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -7876,7 +8269,8 @@ "fast": 1, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -7896,7 +8290,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -7916,7 +8311,8 @@ "fast": 1, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -7936,7 +8332,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -7956,7 +8353,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -7976,7 +8374,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -7996,7 +8395,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -8016,7 +8416,8 @@ "fast": 1, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -8036,7 +8437,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -8056,7 +8458,8 @@ "fast": 1, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -8076,7 +8479,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -8096,7 +8500,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -8116,7 +8521,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -8136,7 +8542,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -8156,7 +8563,8 @@ "fast": 1, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -8176,7 +8584,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -8196,7 +8605,8 @@ "fast": 1, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -8216,7 +8626,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -8236,7 +8647,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -8256,7 +8668,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -8276,7 +8689,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -8296,7 +8710,8 @@ "fast": 1, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -8316,7 +8731,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -8336,7 +8752,8 @@ "fast": 1, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -8356,7 +8773,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -8376,7 +8794,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -8396,7 +8815,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -8416,7 +8836,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -8436,7 +8857,8 @@ "fast": 1, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -8456,7 +8878,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -8476,7 +8899,8 @@ "fast": 1, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -8496,7 +8920,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -8516,7 +8941,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -8536,7 +8962,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -8556,7 +8983,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -8576,7 +9004,8 @@ "fast": 1, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -8596,7 +9025,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -8616,7 +9046,8 @@ "fast": 1, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -8636,7 +9067,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -8656,7 +9088,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -8676,7 +9109,8 @@ "fast": 0, "fast_exception": 11, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -8696,7 +9130,8 @@ "fast": 0, "fast_exception": 11, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -8716,7 +9151,8 @@ "fast": 0, "fast_exception": 11, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -8736,7 +9172,8 @@ "fast": 0, "fast_exception": 11, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -8756,7 +9193,8 @@ "fast": 1, "fast_exception": 9, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -8776,7 +9214,8 @@ "fast": 0, "fast_exception": 11, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -8796,7 +9235,8 @@ "fast": 0, "fast_exception": 2, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -8816,7 +9256,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -8836,7 +9277,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -8856,7 +9298,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -8876,7 +9319,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -8896,7 +9340,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -8916,7 +9361,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -8936,7 +9382,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -8956,7 +9403,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -8976,7 +9424,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -8996,7 +9445,8 @@ "fast": 0, "fast_exception": 2, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -9016,7 +9466,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -9036,7 +9487,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -9056,7 +9508,8 @@ "fast": 0, "fast_exception": 2, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -9076,7 +9529,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -9096,7 +9550,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -9116,7 +9571,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -9136,7 +9592,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -9156,7 +9613,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -9176,7 +9634,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -9196,7 +9655,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -9216,7 +9676,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -9236,7 +9697,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -9256,7 +9718,8 @@ "fast": 0, "fast_exception": 2, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -9276,7 +9739,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -9296,7 +9760,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -9316,7 +9781,8 @@ "fast": 0, "fast_exception": 2, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -9336,7 +9802,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -9356,7 +9823,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -9376,7 +9844,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "slavic" + "tradition": "slavic", + "fast_cap_exempt": null } }, { @@ -9396,7 +9865,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -9416,7 +9886,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -9436,7 +9907,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -9456,7 +9928,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -9476,7 +9949,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -9496,7 +9970,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -9516,7 +9991,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -9536,7 +10012,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -9556,7 +10033,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -9576,7 +10054,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -9596,7 +10075,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -9616,7 +10096,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -9636,7 +10117,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -9656,7 +10138,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -9676,7 +10159,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -9696,7 +10180,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -9716,7 +10201,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -9736,7 +10222,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -9756,7 +10243,8 @@ "fast": 0, "fast_exception": 1, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -9776,7 +10264,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -9796,7 +10285,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -9816,7 +10306,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -9836,7 +10327,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -9856,7 +10348,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -9876,7 +10369,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -9896,7 +10390,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -9916,7 +10411,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -9936,7 +10432,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -9956,7 +10453,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -9976,7 +10474,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -9996,7 +10495,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -10016,7 +10516,8 @@ "fast": 0, "fast_exception": 1, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -10036,7 +10537,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -10056,7 +10558,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -10076,7 +10579,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -10096,7 +10600,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -10116,7 +10621,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -10136,7 +10642,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -10156,7 +10663,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -10176,7 +10684,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -10196,7 +10705,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -10216,7 +10726,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -10236,7 +10747,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -10256,7 +10768,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -10276,7 +10789,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -10296,7 +10810,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -10316,7 +10831,8 @@ "fast": 0, "fast_exception": 4, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -10336,7 +10852,8 @@ "fast": 0, "fast_exception": 3, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -10356,7 +10873,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -10376,7 +10894,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -10396,7 +10915,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -10416,7 +10936,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -10436,7 +10957,8 @@ "fast": 0, "fast_exception": 1, "flag": 0, - "tradition": "slavic" + "tradition": "slavic", + "fast_cap_exempt": null } }, { @@ -10456,7 +10978,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -10476,7 +10999,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -10496,7 +11020,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -10516,7 +11041,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -10536,7 +11062,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -10556,7 +11083,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -10576,7 +11104,8 @@ "fast": 0, "fast_exception": 1, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -10596,7 +11125,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -10616,7 +11146,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -10636,7 +11167,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -10656,7 +11188,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -10676,7 +11209,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -10696,7 +11230,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -10716,7 +11251,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -10736,7 +11272,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -10756,7 +11293,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -10776,7 +11314,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -10796,7 +11335,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -10816,7 +11356,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -10836,7 +11377,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -10856,7 +11398,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -10876,7 +11419,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -10896,7 +11440,8 @@ "fast": 0, "fast_exception": 1, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -10916,7 +11461,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -10936,7 +11482,8 @@ "fast": 0, "fast_exception": 1, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -10956,7 +11503,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -10976,7 +11524,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -10996,7 +11545,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -11016,7 +11566,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -11036,7 +11587,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -11056,7 +11608,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -11076,7 +11629,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "slavic" + "tradition": "slavic", + "fast_cap_exempt": null } }, { @@ -11096,7 +11650,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "slavic" + "tradition": "slavic", + "fast_cap_exempt": null } }, { @@ -11116,7 +11671,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -11136,7 +11692,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -11156,7 +11713,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -11176,7 +11734,8 @@ "fast": 0, "fast_exception": 2, "flag": 0, - "tradition": "slavic" + "tradition": "slavic", + "fast_cap_exempt": null } }, { @@ -11196,7 +11755,8 @@ "fast": 0, "fast_exception": 2, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -11216,7 +11776,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -11236,7 +11797,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -11256,7 +11818,8 @@ "fast": 0, "fast_exception": 2, "flag": 0, - "tradition": "slavic" + "tradition": "slavic", + "fast_cap_exempt": null } }, { @@ -11276,7 +11839,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -11296,7 +11860,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -11316,7 +11881,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -11336,7 +11902,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -11356,7 +11923,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -11376,7 +11944,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -11396,7 +11965,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -11416,7 +11986,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -11436,7 +12007,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -11456,7 +12028,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -11476,7 +12049,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -11496,7 +12070,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -11516,7 +12091,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -11536,7 +12112,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -11556,7 +12133,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -11576,7 +12154,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -11596,7 +12175,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -11616,7 +12196,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -11636,7 +12217,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -11656,7 +12238,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -11676,7 +12259,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -11696,7 +12280,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -11716,7 +12301,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -11736,7 +12322,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -11756,7 +12343,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -11776,7 +12364,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -11796,7 +12385,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -11816,7 +12406,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -11836,7 +12427,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -11856,7 +12448,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -11876,7 +12469,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -11896,7 +12490,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -11916,7 +12511,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -11936,7 +12532,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -11956,7 +12553,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -11976,7 +12574,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -11996,7 +12595,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -12016,7 +12616,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -12036,7 +12637,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -12056,7 +12658,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -12076,7 +12679,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -12096,7 +12700,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -12116,7 +12721,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -12136,7 +12742,8 @@ "fast": 0, "fast_exception": 2, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -12156,7 +12763,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -12176,7 +12784,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -12196,7 +12805,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -12216,7 +12826,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -12236,7 +12847,8 @@ "fast": 0, "fast_exception": 2, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -12256,7 +12868,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -12276,7 +12889,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -12296,7 +12910,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -12316,7 +12931,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -12336,7 +12952,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -12356,7 +12973,8 @@ "fast": 0, "fast_exception": 2, "flag": 0, - "tradition": "slavic" + "tradition": "slavic", + "fast_cap_exempt": null } }, { @@ -12376,7 +12994,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -12396,7 +13015,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -12416,7 +13036,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -12436,7 +13057,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -12456,7 +13078,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "slavic" + "tradition": "slavic", + "fast_cap_exempt": null } }, { @@ -12476,7 +13099,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -12496,7 +13120,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -12516,7 +13141,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -12536,7 +13162,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -12556,7 +13183,8 @@ "fast": 0, "fast_exception": 2, "flag": 0, - "tradition": "slavic" + "tradition": "slavic", + "fast_cap_exempt": null } }, { @@ -12576,7 +13204,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -12596,7 +13225,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -12616,7 +13246,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -12636,7 +13267,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "slavic" + "tradition": "slavic", + "fast_cap_exempt": null } }, { @@ -12656,7 +13288,8 @@ "fast": 0, "fast_exception": 2, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -12676,7 +13309,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -12696,7 +13330,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -12716,7 +13351,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -12736,7 +13372,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "slavic" + "tradition": "slavic", + "fast_cap_exempt": null } }, { @@ -12756,7 +13393,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -12776,7 +13414,8 @@ "fast": 0, "fast_exception": 2, "flag": 0, - "tradition": "slavic" + "tradition": "slavic", + "fast_cap_exempt": null } }, { @@ -12796,7 +13435,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -12816,7 +13456,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -12836,7 +13477,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -12856,7 +13498,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -12876,7 +13519,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -12896,7 +13540,8 @@ "fast": 4, "fast_exception": 1, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -12916,7 +13561,8 @@ "fast": 4, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -12936,7 +13582,8 @@ "fast": 4, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -12956,7 +13603,8 @@ "fast": 4, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -12976,7 +13624,8 @@ "fast": 4, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -12996,7 +13645,8 @@ "fast": 4, "fast_exception": 4, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -13016,7 +13666,8 @@ "fast": 4, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -13036,7 +13687,8 @@ "fast": 4, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -13056,7 +13708,8 @@ "fast": 4, "fast_exception": 4, "flag": 0, - "tradition": "slavic" + "tradition": "slavic", + "fast_cap_exempt": null } }, { @@ -13076,7 +13729,8 @@ "fast": 4, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -13096,7 +13750,8 @@ "fast": 4, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -13116,7 +13771,8 @@ "fast": 4, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -13136,7 +13792,8 @@ "fast": 4, "fast_exception": 4, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -13156,7 +13813,8 @@ "fast": 4, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -13176,7 +13834,8 @@ "fast": 0, "fast_exception": 2, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -13196,7 +13855,8 @@ "fast": 0, "fast_exception": 1, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -13216,7 +13876,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -13236,7 +13897,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -13256,7 +13918,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -13276,7 +13939,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -13296,7 +13960,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -13316,7 +13981,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -13336,7 +14002,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -13356,7 +14023,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -13376,7 +14044,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -13396,7 +14065,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -13416,7 +14086,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -13436,7 +14107,8 @@ "fast": 0, "fast_exception": 1, "flag": 0, - "tradition": "slavic" + "tradition": "slavic", + "fast_cap_exempt": null } }, { @@ -13456,7 +14128,8 @@ "fast": 1, "fast_exception": 8, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -13476,7 +14149,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -13496,7 +14170,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -13516,7 +14191,8 @@ "fast": 0, "fast_exception": 1, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -13536,7 +14212,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -13556,7 +14233,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -13576,7 +14254,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -13596,7 +14275,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -13616,7 +14296,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -13636,7 +14317,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -13656,7 +14338,8 @@ "fast": 0, "fast_exception": 2, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -13676,7 +14359,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -13696,7 +14380,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -13716,7 +14401,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -13736,7 +14422,8 @@ "fast": 0, "fast_exception": 1, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -13756,7 +14443,8 @@ "fast": 0, "fast_exception": 1, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -13776,7 +14464,8 @@ "fast": 1, "fast_exception": 8, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -13796,7 +14485,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -13816,7 +14506,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -13836,7 +14527,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -13856,7 +14548,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -13876,7 +14569,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -13896,7 +14590,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -13916,7 +14611,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -13936,7 +14632,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -13956,7 +14653,8 @@ "fast": 0, "fast_exception": 1, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -13976,7 +14674,8 @@ "fast": 0, "fast_exception": 2, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -13996,7 +14695,8 @@ "fast": 0, "fast_exception": 2, "flag": 0, - "tradition": "slavic" + "tradition": "slavic", + "fast_cap_exempt": null } }, { @@ -14016,7 +14716,8 @@ "fast": 0, "fast_exception": 2, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -14036,7 +14737,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -14056,7 +14758,8 @@ "fast": 0, "fast_exception": 1, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -14076,7 +14779,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -14096,7 +14800,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -14116,7 +14821,8 @@ "fast": 0, "fast_exception": 2, "flag": 0, - "tradition": "slavic" + "tradition": "slavic", + "fast_cap_exempt": null } }, { @@ -14136,7 +14842,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -14156,7 +14863,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -14176,7 +14884,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -14196,7 +14905,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -14216,7 +14926,8 @@ "fast": 0, "fast_exception": 2, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -14236,7 +14947,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -14256,7 +14968,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -14276,7 +14989,8 @@ "fast": 0, "fast_exception": 2, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -14296,7 +15010,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -14316,7 +15031,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -14336,7 +15052,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -14356,7 +15073,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -14376,7 +15094,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -14396,7 +15115,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -14416,7 +15136,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -14436,7 +15157,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -14456,7 +15178,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -14476,7 +15199,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -14496,7 +15220,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -14516,7 +15241,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -14536,7 +15262,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -14556,7 +15283,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -14576,7 +15304,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -14596,7 +15325,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -14616,7 +15346,8 @@ "fast": 0, "fast_exception": 2, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -14636,7 +15367,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -14656,7 +15388,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -14676,7 +15409,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -14696,7 +15430,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -14716,7 +15451,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "slavic" + "tradition": "slavic", + "fast_cap_exempt": null } }, { @@ -14736,7 +15472,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -14756,7 +15493,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -14776,7 +15514,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -14796,7 +15535,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -14816,7 +15556,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -14836,7 +15577,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -14856,7 +15598,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -14876,7 +15619,8 @@ "fast": 0, "fast_exception": 2, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -14896,7 +15640,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -14916,7 +15661,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -14936,7 +15682,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -14956,7 +15703,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -14976,7 +15724,8 @@ "fast": 0, "fast_exception": 2, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -14996,7 +15745,8 @@ "fast": 0, "fast_exception": 1, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -15016,7 +15766,8 @@ "fast": 5, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -15036,7 +15787,8 @@ "fast": 5, "fast_exception": 2, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -15056,7 +15808,8 @@ "fast": 5, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -15076,7 +15829,8 @@ "fast": 5, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -15096,7 +15850,8 @@ "fast": 5, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -15116,7 +15871,8 @@ "fast": 5, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -15136,7 +15892,8 @@ "fast": 5, "fast_exception": 2, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -15156,7 +15913,8 @@ "fast": 5, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -15176,7 +15934,8 @@ "fast": 5, "fast_exception": 0, "flag": 0, - "tradition": "slavic" + "tradition": "slavic", + "fast_cap_exempt": null } }, { @@ -15196,7 +15955,8 @@ "fast": 5, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -15216,7 +15976,8 @@ "fast": 5, "fast_exception": 1, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -15236,7 +15997,8 @@ "fast": 5, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -15256,7 +16018,8 @@ "fast": 5, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -15276,7 +16039,8 @@ "fast": 5, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -15296,7 +16060,8 @@ "fast": 5, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -15316,7 +16081,8 @@ "fast": 5, "fast_exception": 2, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -15336,7 +16102,8 @@ "fast": 5, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -15356,7 +16123,8 @@ "fast": 5, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -15376,7 +16144,8 @@ "fast": 5, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -15396,7 +16165,8 @@ "fast": 5, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -15416,7 +16186,8 @@ "fast": 5, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -15436,7 +16207,8 @@ "fast": 5, "fast_exception": 2, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -15456,7 +16228,8 @@ "fast": 5, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -15476,7 +16249,8 @@ "fast": 5, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -15496,7 +16270,8 @@ "fast": 5, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -15516,7 +16291,8 @@ "fast": 5, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -15536,7 +16312,8 @@ "fast": 5, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -15556,7 +16333,8 @@ "fast": 5, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -15576,7 +16354,8 @@ "fast": 5, "fast_exception": 2, "flag": 0, - "tradition": "slavic" + "tradition": "slavic", + "fast_cap_exempt": null } }, { @@ -15596,7 +16375,8 @@ "fast": 5, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -15616,7 +16396,8 @@ "fast": 5, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -15636,7 +16417,8 @@ "fast": 5, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -15656,7 +16438,8 @@ "fast": 5, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -15676,7 +16459,8 @@ "fast": 5, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -15696,7 +16480,8 @@ "fast": 5, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -15716,7 +16501,8 @@ "fast": 5, "fast_exception": 0, "flag": 0, - "tradition": "slavic" + "tradition": "slavic", + "fast_cap_exempt": null } }, { @@ -15736,7 +16522,8 @@ "fast": 5, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -15756,7 +16543,8 @@ "fast": 5, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -15776,7 +16564,8 @@ "fast": 5, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -15796,7 +16585,8 @@ "fast": 5, "fast_exception": 9, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -15816,7 +16606,8 @@ "fast": 0, "fast_exception": 11, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -15836,7 +16627,8 @@ "fast": 0, "fast_exception": 11, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -15856,7 +16648,8 @@ "fast": 0, "fast_exception": 11, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -15876,7 +16669,8 @@ "fast": 0, "fast_exception": 11, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -15896,7 +16690,8 @@ "fast": 0, "fast_exception": 11, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -15916,7 +16711,8 @@ "fast": 0, "fast_exception": 11, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -15936,7 +16732,8 @@ "fast": 0, "fast_exception": 11, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -15956,7 +16753,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -15976,7 +16774,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -15996,7 +16795,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -16016,7 +16816,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -16036,7 +16837,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -16056,7 +16858,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -16076,7 +16879,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -16096,7 +16900,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -16116,7 +16921,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -16136,7 +16942,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -16156,7 +16963,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -16176,7 +16984,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -16196,7 +17005,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -16216,7 +17026,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -16228,7 +17039,7 @@ "day": 0, "title": "", "subtitle": "", - "feast_name": "Saturday before Nativity – Eve of Nativity", + "feast_name": "Saturday before Nativity \u2013 Eve of Nativity", "feast_level": 0, "service": 0, "service_note": "", @@ -16236,7 +17047,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -16248,7 +17060,7 @@ "day": 0, "title": "", "subtitle": "", - "feast_name": "Sunday before Nativity – Eve of Nativity", + "feast_name": "Sunday before Nativity \u2013 Eve of Nativity", "feast_level": 0, "service": 0, "service_note": "", @@ -16256,7 +17068,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -16268,7 +17081,7 @@ "day": 0, "title": "", "subtitle": "", - "feast_name": "Saturday after Nativity – Saturday before Theophany", + "feast_name": "Saturday after Nativity \u2013 Saturday before Theophany", "feast_level": 0, "service": 0, "service_note": "", @@ -16276,7 +17089,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -16296,7 +17110,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -16316,7 +17131,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -16336,7 +17152,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -16356,7 +17173,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -16376,7 +17194,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -16396,7 +17215,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -16416,7 +17236,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -16436,7 +17257,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -16456,7 +17278,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -16468,7 +17291,7 @@ "day": 0, "title": "", "subtitle": "", - "feast_name": "Saturday before Theophany – Eve of Theophany", + "feast_name": "Saturday before Theophany \u2013 Eve of Theophany", "feast_level": 0, "service": 0, "service_note": "", @@ -16476,7 +17299,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -16488,7 +17312,7 @@ "day": 0, "title": "", "subtitle": "", - "feast_name": "Sunday before Theophany – Eve of Theophany", + "feast_name": "Sunday before Theophany \u2013 Eve of Theophany", "feast_level": 0, "service": 0, "service_note": "", @@ -16496,7 +17320,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -16516,7 +17341,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -16536,7 +17362,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -16556,7 +17383,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "common" + "tradition": "common", + "fast_cap_exempt": null } }, { @@ -16576,7 +17404,8 @@ "fast": 0, "fast_exception": 1, "flag": 0, - "tradition": "greek" + "tradition": "greek", + "fast_cap_exempt": null } }, { @@ -16596,7 +17425,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "greek" + "tradition": "greek", + "fast_cap_exempt": null } }, { @@ -16616,7 +17446,8 @@ "fast": null, "fast_exception": null, "flag": 0, - "tradition": "slavic" + "tradition": "slavic", + "fast_cap_exempt": null } }, { @@ -16636,7 +17467,8 @@ "fast": 0, "fast_exception": 3, "flag": 0, - "tradition": "slavic" + "tradition": "slavic", + "fast_cap_exempt": null } }, { @@ -16656,7 +17488,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "greek" + "tradition": "greek", + "fast_cap_exempt": null } }, { @@ -16676,7 +17509,8 @@ "fast": 2, "fast_exception": 3, "flag": 0, - "tradition": "slavic" + "tradition": "slavic", + "fast_cap_exempt": null } }, { @@ -16696,7 +17530,8 @@ "fast": 2, "fast_exception": 0, "flag": 0, - "tradition": "greek" + "tradition": "greek", + "fast_cap_exempt": null } }, { @@ -16716,7 +17551,8 @@ "fast": 2, "fast_exception": 3, "flag": 0, - "tradition": "slavic" + "tradition": "slavic", + "fast_cap_exempt": null } }, { @@ -16736,7 +17572,8 @@ "fast": 2, "fast_exception": 0, "flag": 0, - "tradition": "greek" + "tradition": "greek", + "fast_cap_exempt": null } }, { @@ -16756,7 +17593,8 @@ "fast": 0, "fast_exception": 2, "flag": 0, - "tradition": "slavic" + "tradition": "slavic", + "fast_cap_exempt": null } }, { @@ -16776,7 +17614,8 @@ "fast": 0, "fast_exception": 2, "flag": 0, - "tradition": "greek" + "tradition": "greek", + "fast_cap_exempt": null } }, { @@ -16796,7 +17635,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "greek" + "tradition": "greek", + "fast_cap_exempt": null } }, { @@ -16816,7 +17656,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "greek" + "tradition": "greek", + "fast_cap_exempt": null } }, { @@ -16836,7 +17677,8 @@ "fast": 4, "fast_exception": 0, "flag": 0, - "tradition": "greek" + "tradition": "greek", + "fast_cap_exempt": null } }, { @@ -16856,7 +17698,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "greek" + "tradition": "greek", + "fast_cap_exempt": null } }, { @@ -16876,7 +17719,8 @@ "fast": 5, "fast_exception": 0, "flag": 0, - "tradition": "greek" + "tradition": "greek", + "fast_cap_exempt": null } }, { @@ -16896,7 +17740,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "greek" + "tradition": "greek", + "fast_cap_exempt": null } }, { @@ -16916,7 +17761,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "greek" + "tradition": "greek", + "fast_cap_exempt": null } }, { @@ -16936,7 +17782,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "greek" + "tradition": "greek", + "fast_cap_exempt": null } }, { @@ -16956,7 +17803,8 @@ "fast": 0, "fast_exception": 1, "flag": 0, - "tradition": "greek" + "tradition": "greek", + "fast_cap_exempt": null } }, { @@ -16976,7 +17824,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "greek" + "tradition": "greek", + "fast_cap_exempt": null } }, { @@ -16996,7 +17845,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "greek" + "tradition": "greek", + "fast_cap_exempt": null } }, { @@ -17016,7 +17866,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "greek" + "tradition": "greek", + "fast_cap_exempt": null } }, { @@ -17036,7 +17887,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "greek" + "tradition": "greek", + "fast_cap_exempt": null } }, { @@ -17056,7 +17908,8 @@ "fast": 0, "fast_exception": 1, "flag": 0, - "tradition": "greek" + "tradition": "greek", + "fast_cap_exempt": null } }, { @@ -17076,7 +17929,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "greek" + "tradition": "greek", + "fast_cap_exempt": null } }, { @@ -17096,7 +17950,8 @@ "fast": 0, "fast_exception": 0, "flag": 0, - "tradition": "greek" + "tradition": "greek", + "fast_cap_exempt": null } }, { @@ -17116,7 +17971,8 @@ "fast": 5, "fast_exception": 0, "flag": 0, - "tradition": "greek" + "tradition": "greek", + "fast_cap_exempt": null } }, { @@ -17136,7 +17992,8 @@ "fast": 5, "fast_exception": 1, "flag": 0, - "tradition": "greek" + "tradition": "greek", + "fast_cap_exempt": null } }, { @@ -17156,7 +18013,8 @@ "fast": null, "fast_exception": 0, "flag": 0, - "tradition": "greek" + "tradition": "greek", + "fast_cap_exempt": null } }, { @@ -17176,7 +18034,8 @@ "fast": null, "fast_exception": 1, "flag": 0, - "tradition": "greek" + "tradition": "greek", + "fast_cap_exempt": null } }, { @@ -17196,7 +18055,8 @@ "fast": null, "fast_exception": 1, "flag": 0, - "tradition": "greek" + "tradition": "greek", + "fast_cap_exempt": null } }, { @@ -17216,7 +18076,8 @@ "fast": null, "fast_exception": 1, "flag": 0, - "tradition": "greek" + "tradition": "greek", + "fast_cap_exempt": null } }, { @@ -17236,7 +18097,8 @@ "fast": null, "fast_exception": 1, "flag": 0, - "tradition": "greek" + "tradition": "greek", + "fast_cap_exempt": null } }, { @@ -17256,7 +18118,8 @@ "fast": null, "fast_exception": 1, "flag": 0, - "tradition": "greek" + "tradition": "greek", + "fast_cap_exempt": null } }, { @@ -17276,7 +18139,8 @@ "fast": null, "fast_exception": 1, "flag": 0, - "tradition": "greek" + "tradition": "greek", + "fast_cap_exempt": null } }, { @@ -17296,7 +18160,8 @@ "fast": null, "fast_exception": 1, "flag": 0, - "tradition": "greek" + "tradition": "greek", + "fast_cap_exempt": null } }, { @@ -17316,7 +18181,8 @@ "fast": null, "fast_exception": 1, "flag": 0, - "tradition": "greek" + "tradition": "greek", + "fast_cap_exempt": null } }, { @@ -17336,7 +18202,8 @@ "fast": null, "fast_exception": 1, "flag": 0, - "tradition": "greek" + "tradition": "greek", + "fast_cap_exempt": null } }, { @@ -17356,7 +18223,8 @@ "fast": null, "fast_exception": 1, "flag": 0, - "tradition": "greek" + "tradition": "greek", + "fast_cap_exempt": null } }, { @@ -17376,7 +18244,8 @@ "fast": null, "fast_exception": 1, "flag": 0, - "tradition": "greek" + "tradition": "greek", + "fast_cap_exempt": null } }, { @@ -17396,7 +18265,8 @@ "fast": null, "fast_exception": 0, "flag": 0, - "tradition": "greek" + "tradition": "greek", + "fast_cap_exempt": null } }, { @@ -17416,7 +18286,8 @@ "fast": null, "fast_exception": 0, "flag": 0, - "tradition": "greek" + "tradition": "greek", + "fast_cap_exempt": null } }, { @@ -17436,7 +18307,8 @@ "fast": null, "fast_exception": 1, "flag": 0, - "tradition": "greek" + "tradition": "greek", + "fast_cap_exempt": null } }, { @@ -17456,7 +18328,8 @@ "fast": null, "fast_exception": 1, "flag": 0, - "tradition": "greek" + "tradition": "greek", + "fast_cap_exempt": null } }, { @@ -17476,7 +18349,8 @@ "fast": null, "fast_exception": 1, "flag": 0, - "tradition": "greek" + "tradition": "greek", + "fast_cap_exempt": null } }, { @@ -17496,7 +18370,8 @@ "fast": null, "fast_exception": 1, "flag": 0, - "tradition": "greek" + "tradition": "greek", + "fast_cap_exempt": null } }, { @@ -17516,7 +18391,8 @@ "fast": null, "fast_exception": 1, "flag": 0, - "tradition": "greek" + "tradition": "greek", + "fast_cap_exempt": null } }, { @@ -17536,7 +18412,8 @@ "fast": null, "fast_exception": 1, "flag": 0, - "tradition": "greek" + "tradition": "greek", + "fast_cap_exempt": null } }, { @@ -17556,7 +18433,8 @@ "fast": null, "fast_exception": 1, "flag": 0, - "tradition": "greek" + "tradition": "greek", + "fast_cap_exempt": null } }, { @@ -17576,7 +18454,8 @@ "fast": null, "fast_exception": 1, "flag": 0, - "tradition": "greek" + "tradition": "greek", + "fast_cap_exempt": null } }, { @@ -17596,7 +18475,8 @@ "fast": null, "fast_exception": 1, "flag": 0, - "tradition": "greek" + "tradition": "greek", + "fast_cap_exempt": null } }, { @@ -17616,7 +18496,8 @@ "fast": null, "fast_exception": 1, "flag": 0, - "tradition": "greek" + "tradition": "greek", + "fast_cap_exempt": null } }, { @@ -17636,7 +18517,8 @@ "fast": null, "fast_exception": 0, "flag": 0, - "tradition": "greek" + "tradition": "greek", + "fast_cap_exempt": null } }, { @@ -17656,7 +18538,8 @@ "fast": null, "fast_exception": 0, "flag": 0, - "tradition": "greek" + "tradition": "greek", + "fast_cap_exempt": null } }, { @@ -17676,7 +18559,8 @@ "fast": null, "fast_exception": 1, "flag": 0, - "tradition": "greek" + "tradition": "greek", + "fast_cap_exempt": null } }, { @@ -17696,7 +18580,8 @@ "fast": null, "fast_exception": 1, "flag": 0, - "tradition": "greek" + "tradition": "greek", + "fast_cap_exempt": null } }, { @@ -17716,7 +18601,8 @@ "fast": null, "fast_exception": 1, "flag": 0, - "tradition": "greek" + "tradition": "greek", + "fast_cap_exempt": null } }, { @@ -17736,7 +18622,8 @@ "fast": null, "fast_exception": 0, "flag": 0, - "tradition": "greek" + "tradition": "greek", + "fast_cap_exempt": null } }, { @@ -17756,7 +18643,8 @@ "fast": null, "fast_exception": 1, "flag": 0, - "tradition": "greek" + "tradition": "greek", + "fast_cap_exempt": null } }, { @@ -17776,7 +18664,8 @@ "fast": null, "fast_exception": 0, "flag": 0, - "tradition": "greek" + "tradition": "greek", + "fast_cap_exempt": null } }, { @@ -17796,7 +18685,8 @@ "fast": null, "fast_exception": 0, "flag": 0, - "tradition": "greek" + "tradition": "greek", + "fast_cap_exempt": null } }, { @@ -17816,7 +18706,8 @@ "fast": null, "fast_exception": 0, "flag": 0, - "tradition": "greek" + "tradition": "greek", + "fast_cap_exempt": null } }, { @@ -17836,7 +18727,8 @@ "fast": null, "fast_exception": 1, "flag": 0, - "tradition": "greek" + "tradition": "greek", + "fast_cap_exempt": null } }, { @@ -17856,7 +18748,8 @@ "fast": null, "fast_exception": 1, "flag": 0, - "tradition": "greek" + "tradition": "greek", + "fast_cap_exempt": null } }, { @@ -17876,7 +18769,8 @@ "fast": null, "fast_exception": 1, "flag": 0, - "tradition": "greek" + "tradition": "greek", + "fast_cap_exempt": null } }, { @@ -17896,7 +18790,8 @@ "fast": null, "fast_exception": 2, "flag": 0, - "tradition": "greek" + "tradition": "greek", + "fast_cap_exempt": true } }, { @@ -17916,7 +18811,8 @@ "fast": null, "fast_exception": 1, "flag": 0, - "tradition": "greek" + "tradition": "greek", + "fast_cap_exempt": null } }, { @@ -17936,7 +18832,8 @@ "fast": null, "fast_exception": 1, "flag": 0, - "tradition": "greek" + "tradition": "greek", + "fast_cap_exempt": null } }, { @@ -17956,7 +18853,8 @@ "fast": null, "fast_exception": 1, "flag": 0, - "tradition": "greek" + "tradition": "greek", + "fast_cap_exempt": null } }, { @@ -17976,7 +18874,8 @@ "fast": null, "fast_exception": 1, "flag": 0, - "tradition": "greek" + "tradition": "greek", + "fast_cap_exempt": null } }, { @@ -17996,7 +18895,8 @@ "fast": null, "fast_exception": 1, "flag": 0, - "tradition": "greek" + "tradition": "greek", + "fast_cap_exempt": null } }, { @@ -18016,7 +18916,8 @@ "fast": null, "fast_exception": 1, "flag": 0, - "tradition": "greek" + "tradition": "greek", + "fast_cap_exempt": null } }, { @@ -18036,7 +18937,50 @@ "fast": null, "fast_exception": null, "flag": 0, - "tradition": "slavic" + "tradition": "slavic", + "fast_cap_exempt": null + } +}, +{ + "model": "calendarium.day", + "pk": 947, + "fields": { + "pdist": 999, + "month": 1, + "day": 7, + "title": "", + "subtitle": "", + "feast_name": "", + "feast_level": null, + "service": 0, + "service_note": "", + "story": null, + "fast": null, + "fast_exception": null, + "flag": 0, + "fast_cap_exempt": true, + "tradition": "greek" + } +}, +{ + "model": "calendarium.day", + "pk": 948, + "fields": { + "pdist": 999, + "month": 6, + "day": 29, + "title": "", + "subtitle": "", + "feast_name": "", + "feast_level": null, + "service": 0, + "service_note": "", + "story": null, + "fast": null, + "fast_exception": null, + "flag": 0, + "fast_cap_exempt": true, + "tradition": "greek" } }, {