diff --git a/.stomata/lessons.json b/.stomata/lessons.json index 8480e25..9adf4a7 100644 --- a/.stomata/lessons.json +++ b/.stomata/lessons.json @@ -20,7 +20,8 @@ {"date": "2026-08-10", "what": "A cross-layer test was skipped in Pancake CI and the suite still reported green.", "where": "workplan/2026-08/rajat_day5_closeout_20260810.md"}, {"date": "2026-08-18", "what": "The schema drift guard passed while comparing nothing, because the mirror it compared against had been made permissive.", "where": "workplan/2026-08/rajat_import_review_20260818.md"}, {"date": "2026-08-18", "what": "The dirty-tree warning fired on every single run because generated credentials were rewritten each time, so it stopped carrying information.", "where": "app/tests/testkit/mint_test_authority_credentials.py"}, - {"date": "2026-08-19", "what": "The lint ratchet counted ruff's success banner as a violation, so it reported 1 whatever the code said, and a real count of 36 rode in unnoticed across four commits.", "where": "harness/stomata/run.py"} + {"date": "2026-08-19", "what": "The lint ratchet counted ruff's success banner as a violation, so it reported 1 whatever the code said, and a real count of 36 rode in unnoticed across four commits.", "where": "harness/stomata/run.py"}, + {"date": "2026-08-26", "what": "All committed grant fixtures expired on 2026-08-20 (30-day mint window). The tamper/revocation/wrong-geoid tests kept passing for six days -- the verifier rejected the credentials for expiry, not the property under test -- while a conftest docstring claimed there was no expiry cliff.", "where": "app/tests/conftest.py"} ] }, { diff --git a/app/tests/conftest.py b/app/tests/conftest.py index c39985b..678b297 100644 --- a/app/tests/conftest.py +++ b/app/tests/conftest.py @@ -1,11 +1,55 @@ +import base64 +import json +import time from pathlib import Path import pytest +# Grant fixtures are minted by Pancake's testkit and committed here, so they +# carry a real expiry. Every one of these must be in-window for its test to +# mean anything: an expired "valid" fails outright, while an expired +# "tampered" or "revoked" is still rejected -- but for expiry rather than +# for the property under test, and the test passes while testing nothing. +# (That happened on 2026-08-20; four tests failed on every branch and the +# tamper/revocation checks had been vacuous for six days before anyone saw.) +GRANT_FIXTURES_NEEDING_VALIDITY = ( + "valid.sdjwt", + "revoked.sdjwt", + "tampered.sdjwt", + "wrong_geoid.sdjwt", +) + +REMINT_COMMAND = ( + "PYTHONPATH=/services python -m " + "pancake_services.grants.testkit.mint_test_credentials " + "--out app/tests/testkit/dev_keys --days 365" +) + + +def _grant_fixture_expiry_guard(dev_keys: Path, min_remaining_days: float = 30) -> None: + stale = [] + for name in GRANT_FIXTURES_NEEDING_VALIDITY: + token = (dev_keys / name).read_text().strip().split("~")[0] + payload = token.split(".")[1] + payload += "=" * (-len(payload) % 4) + exp = json.loads(base64.urlsafe_b64decode(payload)).get("exp", 0) + remaining = (exp - time.time()) / 86400 + if remaining < min_remaining_days: + stale.append(f" {name}: {remaining:.0f} day(s) of validity remaining") + if stale: + raise RuntimeError( + "Grant fixtures are expired or expiring; their tests would pass " + "vacuously or fail spuriously. Re-mint them (from a pancake " + f"checkout, run in this repo's root):\n{REMINT_COMMAND}\n" + + "\n".join(stale) + ) + @pytest.fixture(scope="session", autouse=True) def mint_credentials(): - """Mint all credential variants fresh at test time. No dated artifacts, - no expiry cliff, and the minter is exercised on every run.""" + """Mint the authority credential variants fresh at test time, and refuse + to run against grant fixtures that are close to their expiry cliff.""" + dev_keys = Path(__file__).parent / "testkit" / "dev_keys" from app.tests.testkit.mint_test_authority_credentials import mint_authority - mint_authority(Path(__file__).parent / "testkit" / "dev_keys") + mint_authority(dev_keys) + _grant_fixture_expiry_guard(dev_keys) diff --git a/app/tests/testkit/dev_keys/dev_issuer_private.pem b/app/tests/testkit/dev_keys/dev_issuer_private.pem index 2dd7ce3..655aab7 100644 --- a/app/tests/testkit/dev_keys/dev_issuer_private.pem +++ b/app/tests/testkit/dev_keys/dev_issuer_private.pem @@ -1,3 +1,3 @@ -----BEGIN PRIVATE KEY----- -MC4CAQAwBQYDK2VwBCIEIAcQ2LuH7bE+C6+9Uuxnxltp8QPl954OLq+X56vzIC1w +MC4CAQAwBQYDK2VwBCIEICVj8jTrjnPmH0lVAlnEedEi53Dqkd9aHmd5tD+hy2Ps -----END PRIVATE KEY----- diff --git a/app/tests/testkit/dev_keys/dev_issuer_public.pem b/app/tests/testkit/dev_keys/dev_issuer_public.pem index a87a130..898ac2e 100644 --- a/app/tests/testkit/dev_keys/dev_issuer_public.pem +++ b/app/tests/testkit/dev_keys/dev_issuer_public.pem @@ -1,3 +1,3 @@ -----BEGIN PUBLIC KEY----- -MCowBQYDK2VwAyEAX78zbH0iwIvEoiZY5C3fpchJXVG/zr2goNwt9qT1sIc= +MCowBQYDK2VwAyEACY7NwOU9ftWR1syot1tnEqtMXPW7StyxFFK9/ZHDh9g= -----END PUBLIC KEY----- diff --git a/app/tests/testkit/dev_keys/expired.sdjwt b/app/tests/testkit/dev_keys/expired.sdjwt index 30acf55..0d177f7 100644 --- a/app/tests/testkit/dev_keys/expired.sdjwt +++ b/app/tests/testkit/dev_keys/expired.sdjwt @@ -1 +1 @@ -eyJhbGciOiJFZERTQSIsImtpZCI6InBhbmNha2UtaXNzdWVyLTEiLCJ0eXAiOiJ2YytzZC1qd3QifQ.eyJpc3MiOiJkaWQ6d2ViOnBhbmNha2UuYWdzdGFjay5vcmciLCJzdWIiOiIxZWQyMjk5MWE4NmNmNzEyM2M1N2RjZjVjNDM1ZjcyNGUxMzNiY2ZmZTJmMzA4ZDJlMDMzMTJhYjRiMmNkNjBkIiwiaWF0IjoxNzg0NjI5ODY1LCJleHAiOjE3ODQ2MjYyNjUsImp0aSI6IjAxS1kyM05CMEpXWE03NDlDMzNBWjJLQVI5IiwidmN0IjoiYWdzdGFjay5vcmcvY3JlZGVudGlhbHMvZmllbGQtYWNjZXNzLWdyYW50L3YxIiwiZ3JhbnRlZSI6Imh1Yi1hY2N0LWRldi1idXllciIsIm1hc2tpbmdfbGV2ZWwiOiJMMSIsInB1cnBvc2UiOiJldWRyLWR1ZS1kaWxpZ2VuY2UiLCJvZHJsIjp7IkBjb250ZXh0IjoiaHR0cDovL3d3dy53My5vcmcvbnMvb2RybC5qc29ubGQiLCJAdHlwZSI6IkFncmVlbWVudCIsInVpZCI6InVybjphZ3N0YWNrOmdyYW50OjAxS1kyM05CMEpXWE03NDlDMzNBWjJLQVI5IiwicGVybWlzc2lvbiI6W3sidGFyZ2V0IjoidXJuOmFnc3RhY2s6ZmllbGRsaXN0OjFlZDIyOTkxYTg2Y2Y3MTIzYzU3ZGNmNWM0MzVmNzI0ZTEzM2JjZmZlMmYzMDhkMmUwMzMxMmFiNGIyY2Q2MGQiLCJhY3Rpb24iOiJyZWFkIiwiY29uc3RyYWludCI6W3sibGVmdE9wZXJhbmQiOiJkYXRlVGltZSIsIm9wZXJhdG9yIjoibHRlcSIsInJpZ2h0T3BlcmFuZCI6IjIwMjYtMDctMjFUMDk6MzE6MDVaIn0seyJsZWZ0T3BlcmFuZCI6InB1cnBvc2UiLCJvcGVyYXRvciI6ImVxIiwicmlnaHRPcGVyYW5kIjoiZXVkci1kdWUtZGlsaWdlbmNlIn1dLCJkdXR5IjpbeyJhY3Rpb24iOiJkZWxldGUiLCJjb25zdHJhaW50IjpbeyJsZWZ0T3BlcmFuZCI6ImVsYXBzZWRUaW1lIiwib3BlcmF0b3IiOiJlcSIsInJpZ2h0T3BlcmFuZCI6IlAzMEQifV19XX1dfSwic3RhdHVzIjp7InN0YXR1c19saXN0Ijp7InVyaSI6Imh0dHBzOi8vcGFuY2FrZS5kZXYubG9jYWwvZ3JhbnRzL3N0YXR1cy1saXN0IiwiaWR4IjoyfX0sIl9zZCI6WyItVTlmcVlYc2xsZlB1S1ZQQ1YycWhXSUdFNzRXVlowMUpQYVBUWlhZQ0pjIiwiNWRTT2hGRDhaZnp1QkNRUEQ4ejNYTXQ5VHRVREdGeEZDRXBTMjdLWURLVSIsIll0UTQ4VlN6TU5mck9FRFJnUW1zd1dDY2ljMWJ3cGk2UWhsaUxLczVzdVEiXSwiX3NkX2FsZyI6InNoYS0yNTYifQ.LWqlz9wWvi7-VP2Ba_F5aHg0e4Txwd3UadCAt9w_HsA44nRRzzNcEbOZnIYG96h3Mq4xk12IwDpyD8vAkFJABQ~WyJNbFoxV0ZIeURkLUE2Nld1SXVWVWlBIiwgImZpZWxkcy4wIiwgIjNmMWE5ZjBmMzZlNDRjMGNiMWFkNGMyZjhlM2E3ZDZiMWM1ZTlkOGY3YTZiNWM0ZDNlMmYxYTBiOWM4ZDdlNmYiXQ~WyJGaW1DRzh3amYtWVB3RXlSZzMwQ2dBIiwgImZpZWxkcy4xIiwgIjdkNmIxYzVlOWQ4ZjdhNmI1YzRkM2UyZjFhMGI5YzhkN2U2ZjNmMWE5ZjBmMzZlNDRjMGNiMWFkNGMyZjhlM2EiXQ~WyJhQVR1YU8xYVVkWUVuX2E3TjhJQUFRIiwgImZpZWxkcy4yIiwgImIxYWQ0YzJmOGUzYTdkNmIxYzVlOWQ4ZjdhNmI1YzRkM2UyZjFhMGI5YzhkN2U2ZjNmMWE5ZjBmMzZlNDRjMGMiXQ~ \ No newline at end of file +eyJhbGciOiJFZERTQSIsImtpZCI6InBhbmNha2UtaXNzdWVyLTEiLCJ0eXAiOiJ2YytzZC1qd3QifQ.eyJpc3MiOiJkaWQ6d2ViOnBhbmNha2UuYWdzdGFjay5vcmciLCJzdWIiOiIxZWQyMjk5MWE4NmNmNzEyM2M1N2RjZjVjNDM1ZjcyNGUxMzNiY2ZmZTJmMzA4ZDJlMDMzMTJhYjRiMmNkNjBkIiwiaWF0IjoxNzg3ODAzNjQ4LCJleHAiOjE3ODc4MDAwNDgsImp0aSI6IjAxTTEwUERHSjA2WUIzWFZDV1BUTkdRMVlSIiwidmN0IjoiYWdzdGFjay5vcmcvY3JlZGVudGlhbHMvZmllbGQtYWNjZXNzLWdyYW50L3YxIiwiZ3JhbnRlZSI6Imh1Yi1hY2N0LWRldi1idXllciIsIm1hc2tpbmdfbGV2ZWwiOiJMMSIsInB1cnBvc2UiOiJldWRyLWR1ZS1kaWxpZ2VuY2UiLCJvZHJsIjp7IkBjb250ZXh0IjoiaHR0cDovL3d3dy53My5vcmcvbnMvb2RybC5qc29ubGQiLCJAdHlwZSI6IkFncmVlbWVudCIsInVpZCI6InVybjphZ3N0YWNrOmdyYW50OjAxTTEwUERHSjA2WUIzWFZDV1BUTkdRMVlSIiwicGVybWlzc2lvbiI6W3sidGFyZ2V0IjoidXJuOmFnc3RhY2s6ZmllbGRsaXN0OjFlZDIyOTkxYTg2Y2Y3MTIzYzU3ZGNmNWM0MzVmNzI0ZTEzM2JjZmZlMmYzMDhkMmUwMzMxMmFiNGIyY2Q2MGQiLCJhY3Rpb24iOiJyZWFkIiwiY29uc3RyYWludCI6W3sibGVmdE9wZXJhbmQiOiJkYXRlVGltZSIsIm9wZXJhdG9yIjoibHRlcSIsInJpZ2h0T3BlcmFuZCI6IjIwMjYtMDgtMjdUMDM6MDc6MjhaIn0seyJsZWZ0T3BlcmFuZCI6InB1cnBvc2UiLCJvcGVyYXRvciI6ImVxIiwicmlnaHRPcGVyYW5kIjoiZXVkci1kdWUtZGlsaWdlbmNlIn1dLCJkdXR5IjpbeyJhY3Rpb24iOiJkZWxldGUiLCJjb25zdHJhaW50IjpbeyJsZWZ0T3BlcmFuZCI6ImVsYXBzZWRUaW1lIiwib3BlcmF0b3IiOiJlcSIsInJpZ2h0T3BlcmFuZCI6IlAzMEQifV19XX1dfSwic3RhdHVzIjp7InN0YXR1c19saXN0Ijp7InVyaSI6Imh0dHBzOi8vcGFuY2FrZS5kZXYubG9jYWwvZ3JhbnRzL3N0YXR1cy1saXN0IiwiaWR4IjoyfX0sIl9zZCI6WyJKbjdIbWFQUUJ3V0xSWE9LcFV1eHRtRFpwVWZEQ0Q4dEQ4N3lmeC1UUGQwIiwiYURNaXV2SlF4WGVSV2RRSHloVFhTdWhfcEhDWFBWcFo2cmJfSkJwOGxlWSIsIm96X1pvU3JoTV9fMzdfQ1Y3aHg1dlMxMHNlSG9KZTFkdmdFc2FhXzV3dDgiXSwiX3NkX2FsZyI6InNoYS0yNTYifQ.svoVb4Wheg0lz3pLK2RPOgs-GzlsNwiIDYhAcvHnGSXQegEo1aofSLB8aSL7_jfsqaUEnPq-1Ycrif3yhddlCA~WyIyQ3hHbHhrOU1XZm5pdlJmMERrcm1BIiwgImZpZWxkcy4wIiwgIjNmMWE5ZjBmMzZlNDRjMGNiMWFkNGMyZjhlM2E3ZDZiMWM1ZTlkOGY3YTZiNWM0ZDNlMmYxYTBiOWM4ZDdlNmYiXQ~WyIzVzk1N2FDaTVlVy1UZDlZQXhta2JnIiwgImZpZWxkcy4xIiwgIjdkNmIxYzVlOWQ4ZjdhNmI1YzRkM2UyZjFhMGI5YzhkN2U2ZjNmMWE5ZjBmMzZlNDRjMGNiMWFkNGMyZjhlM2EiXQ~WyI0YXViNlY5bURSUXJNSTd2bHV1UkZ3IiwgImZpZWxkcy4yIiwgImIxYWQ0YzJmOGUzYTdkNmIxYzVlOWQ4ZjdhNmI1YzRkM2UyZjFhMGI5YzhkN2U2ZjNmMWE5ZjBmMzZlNDRjMGMiXQ~ \ No newline at end of file diff --git a/app/tests/testkit/dev_keys/revoked.sdjwt b/app/tests/testkit/dev_keys/revoked.sdjwt index 330fdc5..83d0604 100644 --- a/app/tests/testkit/dev_keys/revoked.sdjwt +++ b/app/tests/testkit/dev_keys/revoked.sdjwt @@ -1 +1 @@ -eyJhbGciOiJFZERTQSIsImtpZCI6InBhbmNha2UtaXNzdWVyLTEiLCJ0eXAiOiJ2YytzZC1qd3QifQ.eyJpc3MiOiJkaWQ6d2ViOnBhbmNha2UuYWdzdGFjay5vcmciLCJzdWIiOiIxZWQyMjk5MWE4NmNmNzEyM2M1N2RjZjVjNDM1ZjcyNGUxMzNiY2ZmZTJmMzA4ZDJlMDMzMTJhYjRiMmNkNjBkIiwiaWF0IjoxNzg0NjI5ODY1LCJleHAiOjE3ODcyMjE4NjUsImp0aSI6IjAxS1kyM05CMEpXWE03NDlDMzNBWjJLQVJBIiwidmN0IjoiYWdzdGFjay5vcmcvY3JlZGVudGlhbHMvZmllbGQtYWNjZXNzLWdyYW50L3YxIiwiZ3JhbnRlZSI6Imh1Yi1hY2N0LWRldi1idXllciIsIm1hc2tpbmdfbGV2ZWwiOiJMMSIsInB1cnBvc2UiOiJldWRyLWR1ZS1kaWxpZ2VuY2UiLCJvZHJsIjp7IkBjb250ZXh0IjoiaHR0cDovL3d3dy53My5vcmcvbnMvb2RybC5qc29ubGQiLCJAdHlwZSI6IkFncmVlbWVudCIsInVpZCI6InVybjphZ3N0YWNrOmdyYW50OjAxS1kyM05CMEpXWE03NDlDMzNBWjJLQVJBIiwicGVybWlzc2lvbiI6W3sidGFyZ2V0IjoidXJuOmFnc3RhY2s6ZmllbGRsaXN0OjFlZDIyOTkxYTg2Y2Y3MTIzYzU3ZGNmNWM0MzVmNzI0ZTEzM2JjZmZlMmYzMDhkMmUwMzMxMmFiNGIyY2Q2MGQiLCJhY3Rpb24iOiJyZWFkIiwiY29uc3RyYWludCI6W3sibGVmdE9wZXJhbmQiOiJkYXRlVGltZSIsIm9wZXJhdG9yIjoibHRlcSIsInJpZ2h0T3BlcmFuZCI6IjIwMjYtMDgtMjBUMTA6MzE6MDVaIn0seyJsZWZ0T3BlcmFuZCI6InB1cnBvc2UiLCJvcGVyYXRvciI6ImVxIiwicmlnaHRPcGVyYW5kIjoiZXVkci1kdWUtZGlsaWdlbmNlIn1dLCJkdXR5IjpbeyJhY3Rpb24iOiJkZWxldGUiLCJjb25zdHJhaW50IjpbeyJsZWZ0T3BlcmFuZCI6ImVsYXBzZWRUaW1lIiwib3BlcmF0b3IiOiJlcSIsInJpZ2h0T3BlcmFuZCI6IlAzMEQifV19XX1dfSwic3RhdHVzIjp7InN0YXR1c19saXN0Ijp7InVyaSI6Imh0dHBzOi8vcGFuY2FrZS5kZXYubG9jYWwvZ3JhbnRzL3N0YXR1cy1saXN0IiwiaWR4Ijo3fX0sIl9zZCI6WyI5LTVYWjQ5SVVzcVY1M0F1Tmh3RzQ0cVNsMXY2ZkhGdVZXcHdTSkZEcDJvIiwiWVdWTmNnNnB1NVl6Z2UwbUMtNHIzMlp4VnhTY1J0cS01YmpTWW9iMUtIayIsImMycUpHUkJIaDhiZ0d6bzlEUU54V25BRFROdFgwTU9vUm5KOFo0dk9yb1EiXSwiX3NkX2FsZyI6InNoYS0yNTYifQ._S_rkhO2ejeCw94nOfke2HcAs8V_4OE4FJXQlgIkFxnSG-v3OUsgYrECwayono3mjj9zMNgVUWsFI83RSWFoDg~WyJXMzUtZkJNcjE1ZlJNdWZja2Nfcmd3IiwgImZpZWxkcy4wIiwgIjNmMWE5ZjBmMzZlNDRjMGNiMWFkNGMyZjhlM2E3ZDZiMWM1ZTlkOGY3YTZiNWM0ZDNlMmYxYTBiOWM4ZDdlNmYiXQ~WyI1QjUtTUwyc0tCUFo5M1Q2U1J3OXpBIiwgImZpZWxkcy4xIiwgIjdkNmIxYzVlOWQ4ZjdhNmI1YzRkM2UyZjFhMGI5YzhkN2U2ZjNmMWE5ZjBmMzZlNDRjMGNiMWFkNGMyZjhlM2EiXQ~WyJwbTZjMlgxOWJOc0FqNkdrb0pxMTNBIiwgImZpZWxkcy4yIiwgImIxYWQ0YzJmOGUzYTdkNmIxYzVlOWQ4ZjdhNmI1YzRkM2UyZjFhMGI5YzhkN2U2ZjNmMWE5ZjBmMzZlNDRjMGMiXQ~ \ No newline at end of file +eyJhbGciOiJFZERTQSIsImtpZCI6InBhbmNha2UtaXNzdWVyLTEiLCJ0eXAiOiJ2YytzZC1qd3QifQ.eyJpc3MiOiJkaWQ6d2ViOnBhbmNha2UuYWdzdGFjay5vcmciLCJzdWIiOiIxZWQyMjk5MWE4NmNmNzEyM2M1N2RjZjVjNDM1ZjcyNGUxMzNiY2ZmZTJmMzA4ZDJlMDMzMTJhYjRiMmNkNjBkIiwiaWF0IjoxNzg3ODAzNjQ4LCJleHAiOjE4MTkzMzk2NDgsImp0aSI6IjAxTTEwUERHSjA2WUIzWFZDV1BUTkdRMVlTIiwidmN0IjoiYWdzdGFjay5vcmcvY3JlZGVudGlhbHMvZmllbGQtYWNjZXNzLWdyYW50L3YxIiwiZ3JhbnRlZSI6Imh1Yi1hY2N0LWRldi1idXllciIsIm1hc2tpbmdfbGV2ZWwiOiJMMSIsInB1cnBvc2UiOiJldWRyLWR1ZS1kaWxpZ2VuY2UiLCJvZHJsIjp7IkBjb250ZXh0IjoiaHR0cDovL3d3dy53My5vcmcvbnMvb2RybC5qc29ubGQiLCJAdHlwZSI6IkFncmVlbWVudCIsInVpZCI6InVybjphZ3N0YWNrOmdyYW50OjAxTTEwUERHSjA2WUIzWFZDV1BUTkdRMVlTIiwicGVybWlzc2lvbiI6W3sidGFyZ2V0IjoidXJuOmFnc3RhY2s6ZmllbGRsaXN0OjFlZDIyOTkxYTg2Y2Y3MTIzYzU3ZGNmNWM0MzVmNzI0ZTEzM2JjZmZlMmYzMDhkMmUwMzMxMmFiNGIyY2Q2MGQiLCJhY3Rpb24iOiJyZWFkIiwiY29uc3RyYWludCI6W3sibGVmdE9wZXJhbmQiOiJkYXRlVGltZSIsIm9wZXJhdG9yIjoibHRlcSIsInJpZ2h0T3BlcmFuZCI6IjIwMjctMDgtMjdUMDQ6MDc6MjhaIn0seyJsZWZ0T3BlcmFuZCI6InB1cnBvc2UiLCJvcGVyYXRvciI6ImVxIiwicmlnaHRPcGVyYW5kIjoiZXVkci1kdWUtZGlsaWdlbmNlIn1dLCJkdXR5IjpbeyJhY3Rpb24iOiJkZWxldGUiLCJjb25zdHJhaW50IjpbeyJsZWZ0T3BlcmFuZCI6ImVsYXBzZWRUaW1lIiwib3BlcmF0b3IiOiJlcSIsInJpZ2h0T3BlcmFuZCI6IlAzMEQifV19XX1dfSwic3RhdHVzIjp7InN0YXR1c19saXN0Ijp7InVyaSI6Imh0dHBzOi8vcGFuY2FrZS5kZXYubG9jYWwvZ3JhbnRzL3N0YXR1cy1saXN0IiwiaWR4Ijo3fX0sIl9zZCI6WyI5ZE5GNXRhTGtwU0dUc3VBNWx4b0liMGZyWDN6OGpRVGZ4dFYzUkpKd08wIiwiTWlwZmtHelpacjl5S1AtRE82Q1V5VTUtd0xiZnZncG1NS3k5NElPN0JiQSIsIllYdm5RQnphQ3BqZEtyXzdEUGhQajd3TU5pVWx5ZHUwLVE1azFkMVNSc2siXSwiX3NkX2FsZyI6InNoYS0yNTYifQ.J1WixhnzqU0xUGsEPz036Vg47-vMHsB-QaRpIiNPTmYV6uteDu_vYs3a3vjYxlkk6kjcPUyLj5Wf-eUtpcHJDg~WyIyempSQ2NEcDBRSFo4bWtHWHNfRmd3IiwgImZpZWxkcy4wIiwgIjNmMWE5ZjBmMzZlNDRjMGNiMWFkNGMyZjhlM2E3ZDZiMWM1ZTlkOGY3YTZiNWM0ZDNlMmYxYTBiOWM4ZDdlNmYiXQ~WyJENU9JbkdaMEtxUnAwY3RsOGVtWExRIiwgImZpZWxkcy4xIiwgIjdkNmIxYzVlOWQ4ZjdhNmI1YzRkM2UyZjFhMGI5YzhkN2U2ZjNmMWE5ZjBmMzZlNDRjMGNiMWFkNGMyZjhlM2EiXQ~WyJ5aXZTc01qWXd1T1dnYlhHcXM0T1JnIiwgImZpZWxkcy4yIiwgImIxYWQ0YzJmOGUzYTdkNmIxYzVlOWQ4ZjdhNmI1YzRkM2UyZjFhMGI5YzhkN2U2ZjNmMWE5ZjBmMzZlNDRjMGMiXQ~ \ No newline at end of file diff --git a/app/tests/testkit/dev_keys/status_list.txt b/app/tests/testkit/dev_keys/status_list.txt index 99178cf..18e55b7 100644 --- a/app/tests/testkit/dev_keys/status_list.txt +++ b/app/tests/testkit/dev_keys/status_list.txt @@ -1 +1 @@ -eJzrYEAFAAiQAIk \ No newline at end of file +eJztwQEJAAAAAqCmN70dgdoAAAAAAAAAAO8GIPAAgQ \ No newline at end of file diff --git a/app/tests/testkit/dev_keys/tampered.sdjwt b/app/tests/testkit/dev_keys/tampered.sdjwt index 4be086a..e41dedb 100644 --- a/app/tests/testkit/dev_keys/tampered.sdjwt +++ b/app/tests/testkit/dev_keys/tampered.sdjwt @@ -1 +1 @@ -eyJhbGciOiJFZERTQSIsImtpZCI6InBhbmNha2UtaXNzdWVyLTEiLCJ0eXAiOiJ2YytzZC1qd3QifQ.eyJpc3MiOiAiZGlkOndlYjpwYW5jYWtlLmFnc3RhY2sub3JnIiwgInN1YiI6ICIxZWQyMjk5MWE4NmNmNzEyM2M1N2RjZjVjNDM1ZjcyNGUxMzNiY2ZmZTJmMzA4ZDJlMDMzMTJhYjRiMmNkNjBkIiwgImlhdCI6IDE3ODQ2Mjk4NjUsICJleHAiOiAxNzg3MjIxODY1LCAianRpIjogIjAxS1kyM05CMEpXWE03NDlDMzNBWjJLQVJCIiwgInZjdCI6ICJhZ3N0YWNrLm9yZy9jcmVkZW50aWFscy9maWVsZC1hY2Nlc3MtZ3JhbnQvdjEiLCAiZ3JhbnRlZSI6ICJodWItYWNjdC1hdHRhY2tlciIsICJtYXNraW5nX2xldmVsIjogIkwxIiwgInB1cnBvc2UiOiAiZXVkci1kdWUtZGlsaWdlbmNlIiwgIm9kcmwiOiB7IkBjb250ZXh0IjogImh0dHA6Ly93d3cudzMub3JnL25zL29kcmwuanNvbmxkIiwgIkB0eXBlIjogIkFncmVlbWVudCIsICJ1aWQiOiAidXJuOmFnc3RhY2s6Z3JhbnQ6MDFLWTIzTkIwSldYTTc0OUMzM0FaMktBUkIiLCAicGVybWlzc2lvbiI6IFt7InRhcmdldCI6ICJ1cm46YWdzdGFjazpmaWVsZGxpc3Q6MWVkMjI5OTFhODZjZjcxMjNjNTdkY2Y1YzQzNWY3MjRlMTMzYmNmZmUyZjMwOGQyZTAzMzEyYWI0YjJjZDYwZCIsICJhY3Rpb24iOiAicmVhZCIsICJjb25zdHJhaW50IjogW3sibGVmdE9wZXJhbmQiOiAiZGF0ZVRpbWUiLCAib3BlcmF0b3IiOiAibHRlcSIsICJyaWdodE9wZXJhbmQiOiAiMjAyNi0wOC0yMFQxMDozMTowNVoifSwgeyJsZWZ0T3BlcmFuZCI6ICJwdXJwb3NlIiwgIm9wZXJhdG9yIjogImVxIiwgInJpZ2h0T3BlcmFuZCI6ICJldWRyLWR1ZS1kaWxpZ2VuY2UifV0sICJkdXR5IjogW3siYWN0aW9uIjogImRlbGV0ZSIsICJjb25zdHJhaW50IjogW3sibGVmdE9wZXJhbmQiOiAiZWxhcHNlZFRpbWUiLCAib3BlcmF0b3IiOiAiZXEiLCAicmlnaHRPcGVyYW5kIjogIlAzMEQifV19XX1dfSwgInN0YXR1cyI6IHsic3RhdHVzX2xpc3QiOiB7InVyaSI6ICJodHRwczovL3BhbmNha2UuZGV2LmxvY2FsL2dyYW50cy9zdGF0dXMtbGlzdCIsICJpZHgiOiAzfX0sICJfc2QiOiBbIlZOaDJ3bDFjeHRnYkRrbEI5dEhkSUdZVVJ2REQ0ZlFGcnFWaVIxZjd0ZjQiLCAiZTRUdjI5a1VCdWxEMHdRa0lBRHJlY3FqSkUxdTBfQ1BoUXpSS0x3b3JIcyIsICJudlJiWkxuQl9hc21PRTRYcUxSajhTMWZWR0ZUQ2pET1FwTnI2WWNXTmJzIl0sICJfc2RfYWxnIjogInNoYS0yNTYifQ.fly83-bWgMpwskdcifuzFw-93Msy0ZjKC0W-R3hHSyUvOkZbErTIAvEZM7A2FMu_tO5v-MOVRTAHVkL8uEsMBw~WyJPZGVQTDNqejJKcDdvYUVoMi1lVUZnIiwgImZpZWxkcy4wIiwgIjNmMWE5ZjBmMzZlNDRjMGNiMWFkNGMyZjhlM2E3ZDZiMWM1ZTlkOGY3YTZiNWM0ZDNlMmYxYTBiOWM4ZDdlNmYiXQ~WyJ2MmgzWGQ3TVdaY05IYjljN25iRGJ3IiwgImZpZWxkcy4xIiwgIjdkNmIxYzVlOWQ4ZjdhNmI1YzRkM2UyZjFhMGI5YzhkN2U2ZjNmMWE5ZjBmMzZlNDRjMGNiMWFkNGMyZjhlM2EiXQ~WyJCVEpLS2RfcS1TUFZPaE1lNUtnaWNRIiwgImZpZWxkcy4yIiwgImIxYWQ0YzJmOGUzYTdkNmIxYzVlOWQ4ZjdhNmI1YzRkM2UyZjFhMGI5YzhkN2U2ZjNmMWE5ZjBmMzZlNDRjMGMiXQ~ \ No newline at end of file +eyJhbGciOiJFZERTQSIsImtpZCI6InBhbmNha2UtaXNzdWVyLTEiLCJ0eXAiOiJ2YytzZC1qd3QifQ.eyJpc3MiOiAiZGlkOndlYjpwYW5jYWtlLmFnc3RhY2sub3JnIiwgInN1YiI6ICIxZWQyMjk5MWE4NmNmNzEyM2M1N2RjZjVjNDM1ZjcyNGUxMzNiY2ZmZTJmMzA4ZDJlMDMzMTJhYjRiMmNkNjBkIiwgImlhdCI6IDE3ODc4MDM2NDgsICJleHAiOiAxODE5MzM5NjQ4LCAianRpIjogIjAxTTEwUERHSjA2WUIzWFZDV1BUTkdRMVlUIiwgInZjdCI6ICJhZ3N0YWNrLm9yZy9jcmVkZW50aWFscy9maWVsZC1hY2Nlc3MtZ3JhbnQvdjEiLCAiZ3JhbnRlZSI6ICJodWItYWNjdC1hdHRhY2tlciIsICJtYXNraW5nX2xldmVsIjogIkwxIiwgInB1cnBvc2UiOiAiZXVkci1kdWUtZGlsaWdlbmNlIiwgIm9kcmwiOiB7IkBjb250ZXh0IjogImh0dHA6Ly93d3cudzMub3JnL25zL29kcmwuanNvbmxkIiwgIkB0eXBlIjogIkFncmVlbWVudCIsICJ1aWQiOiAidXJuOmFnc3RhY2s6Z3JhbnQ6MDFNMTBQREdKMDZZQjNYVkNXUFROR1ExWVQiLCAicGVybWlzc2lvbiI6IFt7InRhcmdldCI6ICJ1cm46YWdzdGFjazpmaWVsZGxpc3Q6MWVkMjI5OTFhODZjZjcxMjNjNTdkY2Y1YzQzNWY3MjRlMTMzYmNmZmUyZjMwOGQyZTAzMzEyYWI0YjJjZDYwZCIsICJhY3Rpb24iOiAicmVhZCIsICJjb25zdHJhaW50IjogW3sibGVmdE9wZXJhbmQiOiAiZGF0ZVRpbWUiLCAib3BlcmF0b3IiOiAibHRlcSIsICJyaWdodE9wZXJhbmQiOiAiMjAyNy0wOC0yN1QwNDowNzoyOFoifSwgeyJsZWZ0T3BlcmFuZCI6ICJwdXJwb3NlIiwgIm9wZXJhdG9yIjogImVxIiwgInJpZ2h0T3BlcmFuZCI6ICJldWRyLWR1ZS1kaWxpZ2VuY2UifV0sICJkdXR5IjogW3siYWN0aW9uIjogImRlbGV0ZSIsICJjb25zdHJhaW50IjogW3sibGVmdE9wZXJhbmQiOiAiZWxhcHNlZFRpbWUiLCAib3BlcmF0b3IiOiAiZXEiLCAicmlnaHRPcGVyYW5kIjogIlAzMEQifV19XX1dfSwgInN0YXR1cyI6IHsic3RhdHVzX2xpc3QiOiB7InVyaSI6ICJodHRwczovL3BhbmNha2UuZGV2LmxvY2FsL2dyYW50cy9zdGF0dXMtbGlzdCIsICJpZHgiOiAzfX0sICJfc2QiOiBbIk14UC1uX0FkRElyQUxHT1FSVXU0bk1UZ1dDSEd0TTNLUEhzemtRclZzZTgiLCAibm9yQ2tmOFRkOUtYNjJzSkdkR18xV0NZYWZicjZoRTVHQnRhUHl2N3lNUSIsICJzQWZwUng5aHlWajgyOWV1cnFEQVJtY09xbmNoMmo1WmYyUTNyUUxlTlBVIl0sICJfc2RfYWxnIjogInNoYS0yNTYifQ.RlM5ARWoxRGigIM2vh6_qBnFMpnJQK-66xWnzQ7K35VLYq46eZGB3TX9KEOqnR8GztvkfQftL_GujJWHeDXMCw~WyJ6aVRodVBPcGd3d0tmWjBtQVVLdXdRIiwgImZpZWxkcy4wIiwgIjNmMWE5ZjBmMzZlNDRjMGNiMWFkNGMyZjhlM2E3ZDZiMWM1ZTlkOGY3YTZiNWM0ZDNlMmYxYTBiOWM4ZDdlNmYiXQ~WyJTZEgwWVZtaF8zRUJMa1JvaUIyWmdnIiwgImZpZWxkcy4xIiwgIjdkNmIxYzVlOWQ4ZjdhNmI1YzRkM2UyZjFhMGI5YzhkN2U2ZjNmMWE5ZjBmMzZlNDRjMGNiMWFkNGMyZjhlM2EiXQ~WyJuaG9pZFRNMlpUNno4SFlrMW5kc0NnIiwgImZpZWxkcy4yIiwgImIxYWQ0YzJmOGUzYTdkNmIxYzVlOWQ4ZjdhNmI1YzRkM2UyZjFhMGI5YzhkN2U2ZjNmMWE5ZjBmMzZlNDRjMGMiXQ~ \ No newline at end of file diff --git a/app/tests/testkit/dev_keys/valid.sdjwt b/app/tests/testkit/dev_keys/valid.sdjwt index 8c54c75..177e899 100644 --- a/app/tests/testkit/dev_keys/valid.sdjwt +++ b/app/tests/testkit/dev_keys/valid.sdjwt @@ -1 +1 @@ -eyJhbGciOiJFZERTQSIsImtpZCI6InBhbmNha2UtaXNzdWVyLTEiLCJ0eXAiOiJ2YytzZC1qd3QifQ.eyJpc3MiOiJkaWQ6d2ViOnBhbmNha2UuYWdzdGFjay5vcmciLCJzdWIiOiIxZWQyMjk5MWE4NmNmNzEyM2M1N2RjZjVjNDM1ZjcyNGUxMzNiY2ZmZTJmMzA4ZDJlMDMzMTJhYjRiMmNkNjBkIiwiaWF0IjoxNzg0NjI5ODY1LCJleHAiOjE3ODcyMjE4NjUsImp0aSI6IjAxS1kyM05CMEhCRldZSDE5RVRQMjFSN1AzIiwidmN0IjoiYWdzdGFjay5vcmcvY3JlZGVudGlhbHMvZmllbGQtYWNjZXNzLWdyYW50L3YxIiwiZ3JhbnRlZSI6Imh1Yi1hY2N0LWRldi1idXllciIsIm1hc2tpbmdfbGV2ZWwiOiJMMSIsInB1cnBvc2UiOiJldWRyLWR1ZS1kaWxpZ2VuY2UiLCJvZHJsIjp7IkBjb250ZXh0IjoiaHR0cDovL3d3dy53My5vcmcvbnMvb2RybC5qc29ubGQiLCJAdHlwZSI6IkFncmVlbWVudCIsInVpZCI6InVybjphZ3N0YWNrOmdyYW50OjAxS1kyM05CMEhCRldZSDE5RVRQMjFSN1AzIiwicGVybWlzc2lvbiI6W3sidGFyZ2V0IjoidXJuOmFnc3RhY2s6ZmllbGRsaXN0OjFlZDIyOTkxYTg2Y2Y3MTIzYzU3ZGNmNWM0MzVmNzI0ZTEzM2JjZmZlMmYzMDhkMmUwMzMxMmFiNGIyY2Q2MGQiLCJhY3Rpb24iOiJyZWFkIiwiY29uc3RyYWludCI6W3sibGVmdE9wZXJhbmQiOiJkYXRlVGltZSIsIm9wZXJhdG9yIjoibHRlcSIsInJpZ2h0T3BlcmFuZCI6IjIwMjYtMDgtMjBUMTA6MzE6MDVaIn0seyJsZWZ0T3BlcmFuZCI6InB1cnBvc2UiLCJvcGVyYXRvciI6ImVxIiwicmlnaHRPcGVyYW5kIjoiZXVkci1kdWUtZGlsaWdlbmNlIn1dLCJkdXR5IjpbeyJhY3Rpb24iOiJkZWxldGUiLCJjb25zdHJhaW50IjpbeyJsZWZ0T3BlcmFuZCI6ImVsYXBzZWRUaW1lIiwib3BlcmF0b3IiOiJlcSIsInJpZ2h0T3BlcmFuZCI6IlAzMEQifV19XX1dfSwic3RhdHVzIjp7InN0YXR1c19saXN0Ijp7InVyaSI6Imh0dHBzOi8vcGFuY2FrZS5kZXYubG9jYWwvZ3JhbnRzL3N0YXR1cy1saXN0IiwiaWR4IjoxfX0sIl9zZCI6WyI2UkVhN3M0d091M2JCdUJzVkdrUE5wOXVCelVza0pHTzZlYWRadHhFdC1VIiwiUFNlWlZkNHVTdFJUck9OTWYybHV3T3Rhb1JXUDB3N0JKZ3F4WmZOU3dXTSIsIlNVYlNxeG11d1FETWlxRl9nSk1hcUFUWXlqcUVlYUh4T2dEMWlOU1RiZzgiXSwiX3NkX2FsZyI6InNoYS0yNTYifQ.FhXmpJZUK-trvQTImQ2dETqQIC9jiyjDzULocOzLgD8Gcy_aHDCnWeYYosVs45d29Prt2y72ID1DDOEF60CkAA~WyJacF9mNzR3R1BtbHhWVTZqdFh2UzdnIiwgImZpZWxkcy4wIiwgIjNmMWE5ZjBmMzZlNDRjMGNiMWFkNGMyZjhlM2E3ZDZiMWM1ZTlkOGY3YTZiNWM0ZDNlMmYxYTBiOWM4ZDdlNmYiXQ~WyJucTVuZTA5WWF2NGtoeWNfS0pCWkNnIiwgImZpZWxkcy4xIiwgIjdkNmIxYzVlOWQ4ZjdhNmI1YzRkM2UyZjFhMGI5YzhkN2U2ZjNmMWE5ZjBmMzZlNDRjMGNiMWFkNGMyZjhlM2EiXQ~WyJDb1NYLURINUZvMFNrZjRtcFhmTWp3IiwgImZpZWxkcy4yIiwgImIxYWQ0YzJmOGUzYTdkNmIxYzVlOWQ4ZjdhNmI1YzRkM2UyZjFhMGI5YzhkN2U2ZjNmMWE5ZjBmMzZlNDRjMGMiXQ~ \ No newline at end of file +eyJhbGciOiJFZERTQSIsImtpZCI6InBhbmNha2UtaXNzdWVyLTEiLCJ0eXAiOiJ2YytzZC1qd3QifQ.eyJpc3MiOiJkaWQ6d2ViOnBhbmNha2UuYWdzdGFjay5vcmciLCJzdWIiOiIxZWQyMjk5MWE4NmNmNzEyM2M1N2RjZjVjNDM1ZjcyNGUxMzNiY2ZmZTJmMzA4ZDJlMDMzMTJhYjRiMmNkNjBkIiwiaWF0IjoxNzg3ODAzNjQ4LCJleHAiOjE4MTkzMzk2NDgsImp0aSI6IjAxTTEwUERHSFlIQVkzNUNKS1ZHTjlCNUU5IiwidmN0IjoiYWdzdGFjay5vcmcvY3JlZGVudGlhbHMvZmllbGQtYWNjZXNzLWdyYW50L3YxIiwiZ3JhbnRlZSI6Imh1Yi1hY2N0LWRldi1idXllciIsIm1hc2tpbmdfbGV2ZWwiOiJMMSIsInB1cnBvc2UiOiJldWRyLWR1ZS1kaWxpZ2VuY2UiLCJvZHJsIjp7IkBjb250ZXh0IjoiaHR0cDovL3d3dy53My5vcmcvbnMvb2RybC5qc29ubGQiLCJAdHlwZSI6IkFncmVlbWVudCIsInVpZCI6InVybjphZ3N0YWNrOmdyYW50OjAxTTEwUERHSFlIQVkzNUNKS1ZHTjlCNUU5IiwicGVybWlzc2lvbiI6W3sidGFyZ2V0IjoidXJuOmFnc3RhY2s6ZmllbGRsaXN0OjFlZDIyOTkxYTg2Y2Y3MTIzYzU3ZGNmNWM0MzVmNzI0ZTEzM2JjZmZlMmYzMDhkMmUwMzMxMmFiNGIyY2Q2MGQiLCJhY3Rpb24iOiJyZWFkIiwiY29uc3RyYWludCI6W3sibGVmdE9wZXJhbmQiOiJkYXRlVGltZSIsIm9wZXJhdG9yIjoibHRlcSIsInJpZ2h0T3BlcmFuZCI6IjIwMjctMDgtMjdUMDQ6MDc6MjhaIn0seyJsZWZ0T3BlcmFuZCI6InB1cnBvc2UiLCJvcGVyYXRvciI6ImVxIiwicmlnaHRPcGVyYW5kIjoiZXVkci1kdWUtZGlsaWdlbmNlIn1dLCJkdXR5IjpbeyJhY3Rpb24iOiJkZWxldGUiLCJjb25zdHJhaW50IjpbeyJsZWZ0T3BlcmFuZCI6ImVsYXBzZWRUaW1lIiwib3BlcmF0b3IiOiJlcSIsInJpZ2h0T3BlcmFuZCI6IlAzMEQifV19XX1dfSwic3RhdHVzIjp7InN0YXR1c19saXN0Ijp7InVyaSI6Imh0dHBzOi8vcGFuY2FrZS5kZXYubG9jYWwvZ3JhbnRzL3N0YXR1cy1saXN0IiwiaWR4IjoxfX0sIl9zZCI6WyIwWEktd1NsaVBtMGFJdXgwSzlUZjBHbm5SVFZCN1B2blJqU1F5ZTZMb0dZIiwiUWQtUThaaVNzdnRhZkI2Y003LTd0YlVveUZrRE5QQVpGQXR4X3ExSjVTZyIsIllEaDEyQzNUS2x3VFJRUFpUcVF5ZUV3U2lnbTBCLVhjR3RRQnd0X1gxbmciXSwiX3NkX2FsZyI6InNoYS0yNTYifQ.qPFOEYPgL0CpFUnhxG4CuHyfeekpuzfJGtL3eLzGoxwyFEo_1MXX2dMe9JUeJpWXg4I-R5500X96BNgygsS7Ag~WyI3ODByR2F0U2ZtWVlEWDBmRmJGNEJ3IiwgImZpZWxkcy4wIiwgIjNmMWE5ZjBmMzZlNDRjMGNiMWFkNGMyZjhlM2E3ZDZiMWM1ZTlkOGY3YTZiNWM0ZDNlMmYxYTBiOWM4ZDdlNmYiXQ~WyJicTFHTEJmNldVTUVQdmdmLTdBVGhBIiwgImZpZWxkcy4xIiwgIjdkNmIxYzVlOWQ4ZjdhNmI1YzRkM2UyZjFhMGI5YzhkN2U2ZjNmMWE5ZjBmMzZlNDRjMGNiMWFkNGMyZjhlM2EiXQ~WyJ4TEdveWEyYnphS0wzLVhfRzNfb0xBIiwgImZpZWxkcy4yIiwgImIxYWQ0YzJmOGUzYTdkNmIxYzVlOWQ4ZjdhNmI1YzRkM2UyZjFhMGI5YzhkN2U2ZjNmMWE5ZjBmMzZlNDRjMGMiXQ~ \ No newline at end of file diff --git a/app/tests/testkit/dev_keys/wrong_geoid.sdjwt b/app/tests/testkit/dev_keys/wrong_geoid.sdjwt index e539ad9..adbd389 100644 --- a/app/tests/testkit/dev_keys/wrong_geoid.sdjwt +++ b/app/tests/testkit/dev_keys/wrong_geoid.sdjwt @@ -1 +1 @@ -eyJhbGciOiJFZERTQSIsImtpZCI6InBhbmNha2UtaXNzdWVyLTEiLCJ0eXAiOiJ2YytzZC1qd3QifQ.eyJpc3MiOiJkaWQ6d2ViOnBhbmNha2UuYWdzdGFjay5vcmciLCJzdWIiOiIxZWQyMjk5MWE4NmNmNzEyM2M1N2RjZjVjNDM1ZjcyNGUxMzNiY2ZmZTJmMzA4ZDJlMDMzMTJhYjRiMmNkNjBkIiwiaWF0IjoxNzg0NjI5ODY1LCJleHAiOjE3ODcyMjE4NjUsImp0aSI6IjAxS1kyM05CMEtNQlNXM1Q2VlRXQUhOS1BLIiwidmN0IjoiYWdzdGFjay5vcmcvY3JlZGVudGlhbHMvZmllbGQtYWNjZXNzLWdyYW50L3YxIiwiZ3JhbnRlZSI6Imh1Yi1hY2N0LWRldi1idXllciIsIm1hc2tpbmdfbGV2ZWwiOiJMMSIsInB1cnBvc2UiOiJldWRyLWR1ZS1kaWxpZ2VuY2UiLCJvZHJsIjp7IkBjb250ZXh0IjoiaHR0cDovL3d3dy53My5vcmcvbnMvb2RybC5qc29ubGQiLCJAdHlwZSI6IkFncmVlbWVudCIsInVpZCI6InVybjphZ3N0YWNrOmdyYW50OjAxS1kyM05CMEtNQlNXM1Q2VlRXQUhOS1BLIiwicGVybWlzc2lvbiI6W3sidGFyZ2V0IjoidXJuOmFnc3RhY2s6ZmllbGRsaXN0OjFlZDIyOTkxYTg2Y2Y3MTIzYzU3ZGNmNWM0MzVmNzI0ZTEzM2JjZmZlMmYzMDhkMmUwMzMxMmFiNGIyY2Q2MGQiLCJhY3Rpb24iOiJyZWFkIiwiY29uc3RyYWludCI6W3sibGVmdE9wZXJhbmQiOiJkYXRlVGltZSIsIm9wZXJhdG9yIjoibHRlcSIsInJpZ2h0T3BlcmFuZCI6IjIwMjYtMDgtMjBUMTA6MzE6MDVaIn0seyJsZWZ0T3BlcmFuZCI6InB1cnBvc2UiLCJvcGVyYXRvciI6ImVxIiwicmlnaHRPcGVyYW5kIjoiZXVkci1kdWUtZGlsaWdlbmNlIn1dLCJkdXR5IjpbeyJhY3Rpb24iOiJkZWxldGUiLCJjb25zdHJhaW50IjpbeyJsZWZ0T3BlcmFuZCI6ImVsYXBzZWRUaW1lIiwib3BlcmF0b3IiOiJlcSIsInJpZ2h0T3BlcmFuZCI6IlAzMEQifV19XX1dfSwic3RhdHVzIjp7InN0YXR1c19saXN0Ijp7InVyaSI6Imh0dHBzOi8vcGFuY2FrZS5kZXYubG9jYWwvZ3JhbnRzL3N0YXR1cy1saXN0IiwiaWR4Ijo0fX0sIl9zZCI6WyJRd2RPZnF2cV9penhJb3lWaTlYbFZMdFNRWFlObjR0engtR3hvNndtaHZNIiwibWFEQzFwS19oNTFac3lxZGlSNVQ5V1E4MXp0VVNkaC1MWjFxelk1cGtpMCJdLCJfc2RfYWxnIjoic2hhLTI1NiJ9.Voh0PgZXYauNm02ovONyWBE2Hq-EUglUsdo2VebL9XLKm3umff4Uc_d2c4NaUEvGURBsr7KtQKmr3N5O4eIFDg~WyJEWEZnLUhnSjlGV3RGNktabkJZVkJBIiwgImZpZWxkcy4wIiwgIjNmMWE5ZjBmMzZlNDRjMGNiMWFkNGMyZjhlM2E3ZDZiMWM1ZTlkOGY3YTZiNWM0ZDNlMmYxYTBiOWM4ZDdlNmYiXQ~WyJ0RzNReDNEb3RJLXEzU19jQTRzRU53IiwgImZpZWxkcy4xIiwgIjdkNmIxYzVlOWQ4ZjdhNmI1YzRkM2UyZjFhMGI5YzhkN2U2ZjNmMWE5ZjBmMzZlNDRjMGNiMWFkNGMyZjhlM2EiXQ~WyJVbFc0NnJENk1wZW1DdmFlMlJXbmhRIiwgImZpZWxkcy4yIiwgIm5vdC1hLWdyYW50ZWQtZ2VvaWQiXQ~ \ No newline at end of file +eyJhbGciOiJFZERTQSIsImtpZCI6InBhbmNha2UtaXNzdWVyLTEiLCJ0eXAiOiJ2YytzZC1qd3QifQ.eyJpc3MiOiJkaWQ6d2ViOnBhbmNha2UuYWdzdGFjay5vcmciLCJzdWIiOiIxZWQyMjk5MWE4NmNmNzEyM2M1N2RjZjVjNDM1ZjcyNGUxMzNiY2ZmZTJmMzA4ZDJlMDMzMTJhYjRiMmNkNjBkIiwiaWF0IjoxNzg3ODAzNjQ4LCJleHAiOjE4MTkzMzk2NDgsImp0aSI6IjAxTTEwUERHSjFYRU1CR1M2UUYxNENHMjFKIiwidmN0IjoiYWdzdGFjay5vcmcvY3JlZGVudGlhbHMvZmllbGQtYWNjZXNzLWdyYW50L3YxIiwiZ3JhbnRlZSI6Imh1Yi1hY2N0LWRldi1idXllciIsIm1hc2tpbmdfbGV2ZWwiOiJMMSIsInB1cnBvc2UiOiJldWRyLWR1ZS1kaWxpZ2VuY2UiLCJvZHJsIjp7IkBjb250ZXh0IjoiaHR0cDovL3d3dy53My5vcmcvbnMvb2RybC5qc29ubGQiLCJAdHlwZSI6IkFncmVlbWVudCIsInVpZCI6InVybjphZ3N0YWNrOmdyYW50OjAxTTEwUERHSjFYRU1CR1M2UUYxNENHMjFKIiwicGVybWlzc2lvbiI6W3sidGFyZ2V0IjoidXJuOmFnc3RhY2s6ZmllbGRsaXN0OjFlZDIyOTkxYTg2Y2Y3MTIzYzU3ZGNmNWM0MzVmNzI0ZTEzM2JjZmZlMmYzMDhkMmUwMzMxMmFiNGIyY2Q2MGQiLCJhY3Rpb24iOiJyZWFkIiwiY29uc3RyYWludCI6W3sibGVmdE9wZXJhbmQiOiJkYXRlVGltZSIsIm9wZXJhdG9yIjoibHRlcSIsInJpZ2h0T3BlcmFuZCI6IjIwMjctMDgtMjdUMDQ6MDc6MjhaIn0seyJsZWZ0T3BlcmFuZCI6InB1cnBvc2UiLCJvcGVyYXRvciI6ImVxIiwicmlnaHRPcGVyYW5kIjoiZXVkci1kdWUtZGlsaWdlbmNlIn1dLCJkdXR5IjpbeyJhY3Rpb24iOiJkZWxldGUiLCJjb25zdHJhaW50IjpbeyJsZWZ0T3BlcmFuZCI6ImVsYXBzZWRUaW1lIiwib3BlcmF0b3IiOiJlcSIsInJpZ2h0T3BlcmFuZCI6IlAzMEQifV19XX1dfSwic3RhdHVzIjp7InN0YXR1c19saXN0Ijp7InVyaSI6Imh0dHBzOi8vcGFuY2FrZS5kZXYubG9jYWwvZ3JhbnRzL3N0YXR1cy1saXN0IiwiaWR4Ijo0fX0sIl9zZCI6WyJFSHN6eVJ2TkZsNUllZlViSmZJNnAwWEhuRE5XRXpnZWduaUtqYTdRaHpVIiwia1RfTllyOTBac1pWNFpRM1JodE9XYzVWdndWcmFpWE5JQVdtMzF3bjJSSSJdLCJfc2RfYWxnIjoic2hhLTI1NiJ9.1-bEc5i1LnUg0k1A3Iu5h1fACo2cKxx3Am6KXN38YasropiLX9O-mI8TqjvlChYm1Fh67bbH1T3yiVR55fXVAw~WyJoRkUyTFpLYXFUNDZzVlFZSHlEWE9BIiwgImZpZWxkcy4wIiwgIjNmMWE5ZjBmMzZlNDRjMGNiMWFkNGMyZjhlM2E3ZDZiMWM1ZTlkOGY3YTZiNWM0ZDNlMmYxYTBiOWM4ZDdlNmYiXQ~WyJSWUFOci1MRmd6UHFmMDVJbERCM29BIiwgImZpZWxkcy4xIiwgIjdkNmIxYzVlOWQ4ZjdhNmI1YzRkM2UyZjFhMGI5YzhkN2U2ZjNmMWE5ZjBmMzZlNDRjMGNiMWFkNGMyZjhlM2EiXQ~WyJKelFWbFBpd2FRel9ETkpiVTVjekRBIiwgImZpZWxkcy4yIiwgIm5vdC1hLWdyYW50ZWQtZ2VvaWQiXQ~ \ No newline at end of file