From f289eef1dbb04c276548a044d964187f441a4ddb Mon Sep 17 00:00:00 2001 From: Jia Hao Goh Date: Thu, 2 Jul 2026 04:39:08 +0000 Subject: [PATCH 1/6] refactor(eval): consolidate version-specific datasets into prompts.yaml TAG=agy CONV=434bb731-15b5-4e15-8474-68d4f4d14636 --- eval/a2ui_eval/shared/utils.py | 5 + eval/a2ui_eval/strategies/__init__.py | 4 +- eval/a2ui_eval/strategies/direct.py | 12 +- eval/a2ui_eval/strategies/express.py | 20 +- eval/a2ui_eval/strategies/subagent_tool.py | 14 +- eval/datasets/prompts.yaml | 1024 +++++++++++++++++ eval/datasets/v0_9_prompts.yaml | 1151 -------------------- eval/datasets/v1_0_prompts.yaml | 915 ---------------- eval/tasks.py | 11 +- eval/tests/test_strategies.py | 10 +- 10 files changed, 1069 insertions(+), 2097 deletions(-) create mode 100644 eval/datasets/prompts.yaml delete mode 100644 eval/datasets/v0_9_prompts.yaml delete mode 100644 eval/datasets/v1_0_prompts.yaml diff --git a/eval/a2ui_eval/shared/utils.py b/eval/a2ui_eval/shared/utils.py index 3c141be5f9..b4ee22c5ad 100644 --- a/eval/a2ui_eval/shared/utils.py +++ b/eval/a2ui_eval/shared/utils.py @@ -19,6 +19,11 @@ GIT_ROOT = (Path(__file__).resolve().parent / "../../..").resolve() +def version_to_dir_name(version: str) -> str: + """Converts a version string (e.g., '0.9.1') to a directory name (e.g., 'v0_9_1').""" + return "v" + version.replace(".", "_") + + @solver def measured_generate() -> Solver: """Solver that wraps generate() and records the duration in metadata.""" diff --git a/eval/a2ui_eval/strategies/__init__.py b/eval/a2ui_eval/strategies/__init__.py index f3ba9deaf6..5335b3e69a 100644 --- a/eval/a2ui_eval/strategies/__init__.py +++ b/eval/a2ui_eval/strategies/__init__.py @@ -23,9 +23,9 @@ "express": express_solver, } -def get_solver(strategy: str) -> list[Solver]: +def get_solver(strategy: str, version: str) -> list[Solver]: """Returns the solver chain for the specified evaluation strategy.""" if strategy not in STRATEGIES: raise ValueError(f"Unknown evaluation strategy: {strategy}") - return STRATEGIES[strategy]() + return STRATEGIES[strategy](version) diff --git a/eval/a2ui_eval/strategies/direct.py b/eval/a2ui_eval/strategies/direct.py index 33f23f34b0..f5247e630a 100644 --- a/eval/a2ui_eval/strategies/direct.py +++ b/eval/a2ui_eval/strategies/direct.py @@ -16,18 +16,20 @@ from inspect_ai.model import ChatMessageSystem from a2ui.schema.manager import A2uiSchemaManager from a2ui.schema.catalog import CatalogConfig -from ..shared.utils import GIT_ROOT, measured_generate +from ..shared.utils import GIT_ROOT, measured_generate, version_to_dir_name @solver -def a2ui_system_prompt() -> Solver: +def a2ui_system_prompt(version: str) -> Solver: """Solver to inject A2UI schema and catalog into the system prompt using SDK.""" async def solve(state: TaskState, generate: Generate) -> TaskState: catalog_path = state.metadata['catalog'] + # Resolve version if it is parameterized in the catalog path + catalog_path = catalog_path.format(version=version_to_dir_name(version)) resolved_catalog_path = str(GIT_ROOT / catalog_path) catalog_config = CatalogConfig.from_path("basic_catalog", resolved_catalog_path) - manager = A2uiSchemaManager(version="0.9", catalogs=[catalog_config]) + manager = A2uiSchemaManager(version=version, catalogs=[catalog_config]) role_description = state.metadata['role_description'] workflow_description = state.metadata['workflow_description'] @@ -43,9 +45,9 @@ async def solve(state: TaskState, generate: Generate) -> TaskState: return solve -def direct_solver() -> list[Solver]: +def direct_solver(version: str) -> list[Solver]: """Returns the solver chain for the 'direct' evaluation strategy.""" return [ - a2ui_system_prompt(), + a2ui_system_prompt(version), measured_generate() ] diff --git a/eval/a2ui_eval/strategies/express.py b/eval/a2ui_eval/strategies/express.py index fb947b2493..e009d85623 100644 --- a/eval/a2ui_eval/strategies/express.py +++ b/eval/a2ui_eval/strategies/express.py @@ -24,18 +24,20 @@ from a2ui.experimental.express.parser import parse_express_response from a2ui.schema.manager import A2uiSchemaManager from a2ui.schema.catalog import CatalogConfig -from ..shared.utils import GIT_ROOT, measured_generate +from ..shared.utils import GIT_ROOT, measured_generate, version_to_dir_name @solver -def a2ui_express_prompt() -> Solver: +def a2ui_express_prompt(version: str) -> Solver: """Solver to inject A2UI Express prompt contract instructions.""" async def solve(state: TaskState, generate: Generate) -> TaskState: catalog_path = state.metadata['catalog'] + # Resolve version if it is parameterized in the catalog path + catalog_path = catalog_path.format(version=version_to_dir_name(version)) resolved_catalog_path = str(GIT_ROOT / catalog_path) with open(resolved_catalog_path, "r", encoding="utf-8") as f: schema = json.load(f) - catalog = Catalog.from_json(schema, spec_version="0.9.1") + catalog = Catalog.from_json(schema, spec_version=version) generator = ExpressPromptGenerator(catalog) prompt = generator.generate_prompt() state.messages.insert(0, ChatMessageSystem(content=prompt)) @@ -45,7 +47,7 @@ async def solve(state: TaskState, generate: Generate) -> TaskState: @solver -def compile_express_dsl() -> Solver: +def compile_express_dsl(version: str) -> Solver: """Solver to compile generated A2UI Express DSL back to standard JSON.""" async def solve(state: TaskState, generate: Generate) -> TaskState: @@ -53,11 +55,13 @@ async def solve(state: TaskState, generate: Generate) -> TaskState: return state catalog_path = state.metadata['catalog'] + # Resolve version if it is parameterized in the catalog path + catalog_path = catalog_path.format(version=version_to_dir_name(version)) resolved_catalog_path = str(GIT_ROOT / catalog_path) # Initialize the catalog schema validator for parsing catalog_config = CatalogConfig.from_path("basic_catalog", resolved_catalog_path) - manager = A2uiSchemaManager(version="1.0", catalogs=[catalog_config]) + manager = A2uiSchemaManager(version=version, catalogs=[catalog_config]) catalog = manager.get_selected_catalog() validator = catalog.validator @@ -107,10 +111,10 @@ async def solve(state: TaskState, generate: Generate) -> TaskState: return solve -def express_solver() -> list[Solver]: +def express_solver(version: str) -> list[Solver]: """Returns the solver chain for the 'express' evaluation strategy.""" return [ - a2ui_express_prompt(), + a2ui_express_prompt(version), measured_generate(), - compile_express_dsl() + compile_express_dsl(version) ] diff --git a/eval/a2ui_eval/strategies/subagent_tool.py b/eval/a2ui_eval/strategies/subagent_tool.py index b410d588b1..ae02afea63 100644 --- a/eval/a2ui_eval/strategies/subagent_tool.py +++ b/eval/a2ui_eval/strategies/subagent_tool.py @@ -20,7 +20,7 @@ from a2ui.schema.manager import A2uiSchemaManager from a2ui.schema.catalog import CatalogConfig from a2ui.parser.parser import parse_response -from ..shared.utils import GIT_ROOT, measured_generate +from ..shared.utils import GIT_ROOT, measured_generate, version_to_dir_name from .direct import a2ui_system_prompt @@ -35,11 +35,14 @@ async def execute(input: str) -> str: Args: input: The UI layout request. """ + version = store().get("version", "0.9.1") catalog_path = store().get("catalog") + # Resolve version if it is parameterized in the catalog path + catalog_path = catalog_path.format(version=version_to_dir_name(version)) resolved_catalog_path = str(GIT_ROOT / catalog_path) catalog_config = CatalogConfig.from_path("basic_catalog", resolved_catalog_path) - manager = A2uiSchemaManager(version="0.9", catalogs=[catalog_config]) + manager = A2uiSchemaManager(version=version, catalogs=[catalog_config]) role_description = store().get("role_description") workflow_description = store().get("workflow_description") @@ -77,9 +80,10 @@ async def execute(input: str) -> str: return execute @solver -def push_metadata_to_store() -> Solver: +def push_metadata_to_store(version: str) -> Solver: """Pushes metadata from the TaskState to the global store for tools to access.""" async def solve(state: TaskState, generate: Generate) -> TaskState: + state.store.set("version", version) state.store.set("catalog", state.metadata.get('catalog')) state.store.set("role_description", state.metadata.get('role_description')) state.store.set("workflow_description", state.metadata.get('workflow_description')) @@ -101,12 +105,12 @@ async def solve(state: TaskState, generate: Generate) -> TaskState: return state return solve -def subagent_tool_solver() -> list[Solver]: +def subagent_tool_solver(version: str) -> list[Solver]: """Returns the solver chain for the 'subagent_tool' evaluation strategy.""" return [ system_message("You are a helpful assistant. To fulfill UI requests, you MUST delegate to the `a2ui_specialist` tool."), # Tools cannot access TaskState directly, so we must bridge the metadata into the store - push_metadata_to_store(), + push_metadata_to_store(version), use_tools([a2ui_specialist()]), measured_generate(), extract_subagent_payload() diff --git a/eval/datasets/prompts.yaml b/eval/datasets/prompts.yaml new file mode 100644 index 0000000000..2f2c94a150 --- /dev/null +++ b/eval/datasets/prompts.yaml @@ -0,0 +1,1024 @@ +U2FsdGVkX1/2W4taznAN5EMNt3oun3XvPb7BQVI6wUKT1RVMnxGVcdM8fS83WxLA +7vR3CpbMYsi2d2gwlW8xtB+A2n8s02rg05hYTBy0Dvj6mSmDJc3EnRuTiJt+XSrF +U+2wRNndDhy2XO3U9VaAe4RGUX3bgRIpEMWzgYvlvHvDWGXHFAFLFIoWO+8ka/V+ +C2/yWya/q6rsXLtPxQkok2KVVHedryWS1up2U1UzWleSUiefL1lfq2KB3L7fb5TX +UPeiMo1YwYo3YDGKFPAx4jLBZaAY2D8IOv+H230Q6alrwIvU6CJGN8T7MFBQmcXJ +DeLDsyLhm8phzFcSxtPrdUoEBySjQScllD6m41xJmw+TBel7akVGgx+6itFOC376 +0NAlG3FEZvRPZBvx5hOkeKrCtF/rn4zKUGhFSp0iHrbRHarhZy9vN11t6g0VaGsp +RbMAUpDkf4eLb1jXThrUPZn32Tz1h08w/MaFDLquqkXqVpRrZvoRw2jjP21vLYTg +r6yWB2549xzMt0ZsTt9MBW+PLLdOxJU5/g3lmsR/tPvLZkKMcnJ10UzVJ5aEgrW3 +KpeIGXdCeJDKRZpjvV4bPngNEXtmasPA5RQ9GBzXCqFDmfB99/be4xQXTE9HUcFT +mwhKzReTdVcV075Uvm6iuvi/8RjMZNLDcRgZMvqzjrvhONZmx2GmokazJqTLc0Ys +YbMRkamWXP1DB5P4r+BLIUq7kroMfyolJoVlj4285G1nScBva+KpYlhFnS929Vlx +7lSSP/TNJKgBRvzxHFh9ArgGT7rssX9P2WuAMPOnRa7G5W818Tk9De2hkI5A1y7X +PuVpf1Ye48e7neTAOZYYC3ngz0pzYal9iFCwiOkzye4CZPxyq8aIoP3ikbRlNGEk +hwlS24g43VwAPgloDETKTthRsKHMcjtozopB1YyhmOA++Q/fjAy5A4LKaCNMTRi1 +7H7vfeHlNKhTUrbL4t8CfH7maMqQo+pw8gKCxHe6cVAbswmGxU3b+iJgFErpjCmL +UxhlyoNDynL0y4UDcy/NkwtM1djsGOc2O2O0m9A8yCM3bUJmHpokpatupgd7Hlz8 +seaHq6xvTFMAr4BsIsG2irCtsjC+D+S4b4Y0GlruAceVol/tlI6/RVtDh85YH8QR +yE5wsfCR1pyRzb4g/4XX0RZ3xqBDTf/3IEWP5PNJb4RKzQ2KvwTeXs8FaVUFTnPc +E0+EdpSs2RffyvY1oqPYyj5HX444Q0gb8W1nNPMQ4CDhTLwkam6Yg9IPuUvmZtbO +HXr+/vewf84UMKOte/IAzP5SYp3l+g9dcuK2ATIwbEtV9lAIxmLxZqVePneJpCbt +AfaSWt/wYdC6/lqHhdVxfw9PLrRY9+FiW7dUJM/vwKkgZbjUSgGuPh3HXn/5aBQ9 +VOuTM66vaI0gNyH4sMFkLRovvkleC0VV4l0BlbPtkKH7GQf6A/E/AdbLRiCXb2zB +Wzsp8CeuD6BUFBbz07RhNh0w/5NtLJn/YZLLcPpIbI67rp3M420ks01smy7Y4sE/ +06UPLAhV595lpM+k2QHphhO2N3nL/v1YFpP9a414PLjUwHI0xVQA4ZNKEWvjK2V1 +0PlUPNvqSuxkDJJzVl91hVaW7ZwjzP6exp5I6seNmwe8xWsj4WTA9F6FJmEY382A +xmM5Y3Grq/+SnOdvz9sLHYlh0zkIOEC+ZrB/OgIRrPl832vOYG4we7ah1+tlwGDW +v6RIRrX8qm6bWb2kU980joZkr1ybql3fW1cvogr6BSnMKkdnTKZEfG5TgViDYHuE +AFBbgw8J/ErLtf6fBhAQ948b2OlJ+OfGZeaiZzIEGZHEoXRjPQrNanh54+gn/aum +0O6YC3zhH26vkSKTa7Hdsho9SrQmGMXc8ZC5E4BkE+L44Esw9DT1SoyZHaFvXjcE +Tp1on/EJ+B7soS644c7sBWcvYn0var/gItExZT88ZzaxUa/QBm9cmt25WePyPIF9 +khWg7lVVTaYqxDvwrIY0ZwUJVYtRj9dH/FAUh3AWHnl00Guaerp8RznlnVonwqV3 +39dU54Vt9Z+o2J1EYLDgWn3JjNuwRJLvXOokgizORE3JQ0JHJI5sTJ7h5/aMAtZO +0meAnNEM1ijFl/bDiYp3Am85xZkHKCVutSa5AuLYG6+Q+befS5DZbH8/jmFnnTMY +QkvbuRL0QuzQTEshSuP85eOrfwzqVuPo7mwquuzAwPQ6Eu75zBsre/tEYgipfnax +JPuO55ZiKJSirE8SxWD2OzskGX7/krJU0JL8Ahx1ZVCxFTSCojPh5B6EoOe6yQ8x +VXf4GYxtsAwNi5THO3AzCKFQcQmO00oTZFcMER6gYG13qkzQYsydsiDsPWsfCbJ/ +KzzJzQDmcAAMkV7B5+NiuQAqznatd6rc4dPqMkEnjoWiLwr4nfBOsvbRXRXRe9kC +V+oMvAiF0/u+qnmJTKoZ36QsMhcjuSxQgIFIELQYytjVeEfJJmSL2eEtmAppAgZR +WNBcz9+KehRAX4YHDgNvJmicpTGRDg7zFKGRl/hAXrLIODBWAZYbhV+SllM7cj35 +PuNPqQke8OnudVqjAOOh/Mrvii/nzjUoXpZLLHW81d53niBwRADx1AFAQWw1rk4L +VAzWOAIwPxc2Hsj1KCRcjkyIQnWOF8aahTML1Vgd2G3KXZMzj/56gHwOr5j+Q6M4 +d/6cNg3KHhQUgrYUvg3CtDkhsf3NXi4gCi9bamaIdRXDu2vuBUKBwLErg9kb8f/Y +FVAWQE74ISWU1+Uij6B2oZrXxqXNgd2U4tBUdeqsSkbNLutHrrNov2979TtzGxcj +5sPJTzOuAFKxtyHPYFNx7E3f2j8qFSYHdFN+O2pZzcbcUN9TEOuhk8+ReeynBVaU +lpLOswlb++AMKFSd5UilLiw+cwU7zVyCK2pC5pyM5ZOWriDPLW4xq3duLCA1zCl7 +cV+V16mlGH53j2ASDvHT6qoCKJ/agLMUl02xtC2eggxmSc38i+U3+A6uhq2KB+di +T0bUbapf2wmJqnGWHudxr8gxui+CdYHjKcBnWWEZSr5i6/iqeGvLcHH528ReQ/Bz +Tr0rswzbXTvi54Pg6lJGolPGIny6cs9qjKrm0M09XIcw7xoKCYGtjZ1y1xiPDC85 +GKJB9zRroBFhqDm7OC7dEhfJIoO7kj6Y2KLkRL8iRz0NAwsJjWTDKR2aiJGZgtL9 +EyIRXHWNF5Vz5u67ZlGzAnr1qZHY2/+Jj5P+1FR3+67KpduAmdEewkIUB3Yw8xPk +XG5iDy00+dkpEqAhPBPTMPM8C9SESGw4hKVv/rvRF80L4zFv1M/ha4p+qrE9dzhc +vwWmqIcedlsbS3KsYcBG2y5QRZbB+o56DLcGmToNAAVidZmAeFD5v+ymb0hxxtHw +b1ZNfrwxli9y9TPkobKOlQHnGNQpvW6WcVIGBBAR5f4Fdvfej3IOQJuBkvM3Q7H3 +jvUH8m4rk699wqsUznidrAzCMBY+rVLqwRB8NPkX1CLeXW4iuK5ELNVQ473Umx50 +TGxXoBN5Vwdm4qui1dePLbp7xbu/l9YkSab7VPjPpq5liqUputETeUl+FvR9YcGx +Cpgx1ZJvGP4P94Wyp2u48D2qdykG81m0FRrPGaeh9yh+zwvPzLoimDFwnXgiorMH +y/K7oLU/grmaGmCLZPEYms22tXQh5gltrdm8YPctxKSDTr2tTEDJYsAguEgDFDWo +CMoZ2z0aqI2eqxQoQkHPzpqTh7hBDo83r4G7VJY4ZDckvlIukFkBwHt5DOo98az7 +zgalegpKkE9aYuPsfuuLro2MnOUmpacfKlatzOxQmiMuLKFo13q1+WWBqBigL26i +a0oa5EJgrlCDwj0ijsnbg12t+Rlx/3h2VkOMH+h6ePzmKqpbtLLhzCQ3+3GOMUOo +L2vfVK888VpYhCIpcVVTJWmwBw+9dwjD3WOqWtTXp4sYutFUejRQDZRyNpuV2Pkn +qk0pQlRadvdJ5vf0KsAU8pdcX8qCi+C0dlfkZN7GlLSbueqwBPMyBh823uTP4bPg +NBIGnNZv4oDAfKm0BhsXysFX0E+Uo8nfYxemg9VogSBIjX9yEDn4FOQ4K/h9Coig +cT/+S7iKxYUHnydLy1jc6STGFgYuiHMLKwJ5sKf3nBhDeXBqQ+4Hr4IraU0/aH+F +fF12ZZZyzGvy3amtqabcDkUVEECKAZdRwd1vTAXdmVopZyT6drt51elnLXG6RpPe +JHy6aMvsfrWrIoTS8HYydzT3Olnw9McjZVVWem+7TvKn/C9eup0SuElRpIhBiFee +jNBbZX0n+U01EqdlwIKG0kuwcIoMCpYOFDdm/zkuQN8ebJWZv4Cau1FJ1hcoH/Ig +BbW72ZxNfVomqyx/GEgc38gzknuLvHX7rPgaUqKofoU4klZjFOt74s0DP7mH9aIw +sogf4ysvy1waAavr+EEfgZWguF0GIIFmGyrcC0HcNCxfWWYM/OcmY7zEe9rUCoUz +IqsxRsIn3XVibaB3Ku58ETdMUdD6UnD2L8oPeB58BOrhyMXSkKgBJQeHDGt4InMs +ZACG1lC0UjlFgOCIYjKi7VT6qOnWguYmeGmJ1HP4lnqo5MZXmfHRDAyfHvCKXUcR +FkP8RIj2OXNmQLYHcgnza37mBo1q6buWStd3TU0GGdtGoekoZjo5XF35gGIZkbWJ +FJP5E/JWD+aRAW6gzBnHnZ2f5Ffah6zQCp3/i77oTTgYfbZwWTwanU6wrE0SWwbv +gXNDJSXJNqVISX7HWzyfKSvRRhD7w7C5DIU7XcfpT8vnDuUesQ3JyDWXd7N1ShjN +CV2sblZrtlexjjslTWZxUtoL8jQL6eg3fgA18VhoGnanNvMCc84SLQLwu4NS+66U +jUQbiA6saM+T594hjJ7yZg08KYa2w8b3Iz/myUX8ccV2Mx2sIrj6RW9IXHYgAsii +ribpXFtAlnMIi0vC0UXSjwM+kvrU4KcbtCgF2gkbz6KaUR/NmBPIqqdooAvDGd4d +HeFsRaKF7Lk9BUeZLqPNn169YYYCiuFmePDURonwGgH/piIysMqt0GsyunhzyY+k +QQ9Mzr+Q1FlRCz/kyDF1z7E7fgXfGx525TqsKXpzav9olNrOQ7W3OTeHs2Vxr+Pq +RSZnShdctU8WOHgUfxZH3Fmukp8YxmZkUUR4qvW27mKtvIpZDT40IfrKBjQIKB/6 +UTEpkwGlSMR1X7M9Abg4AKsJ/YkjWA3oUbQ5Tuo5AHo5ifWDJfSCIVpXKa34+ukL +2ClZTskjmjUGKX9h/B+QvyFqgARHulnZv1+76Xw79hbhG1+upLVoboBRK/omlCP4 +lHzQ1bQFOFv5AzgDI4IjhYAkFetIddEhozjlc0Fvpu8rFUtmgTCOeBbmnWNA25c7 +cTF0sXB7Gtjd+JYJ7R8U64MxMLTTahVSLsjA0gud2x+6FBM2alJRwyj3K/eEXHbO +eUPSUoidYHbcu068iFBk0inz90eKeba8yPRbt+Pwnqj3sK5LtKosQJcVunQUOONb +PRm3Q0tgoHHiSXGZA5ykvCO9L+ocjLKiMOeENlfmI02jiCSe+2OXtQ8UnxsI+Bio +z2c2cpgLS6JoNxyky7gNcXMMVaNPsoW26nPA1/FFYdCkKIFZy83EWthqsirARL1H +n65U0rD8ObfUl2N8tEly2EZ0m/cnhm3k9ORMald0ZsWM96TuOFKHhe8Q0ETtrBSR +8pAhcgF3AfkJUBCPZvCz4kNCzD/Sq9r8BHn2Cw+72BI4/T9JXAE0DN8Lizrzdmev +tsC9OYaEDqIFXMmYuvAdlIEXhU1tW54SHZlsu/WSi7LNpCvUY1IE6Tcl1qhiWkYh +nAsrllMhPgt3T00gQZ/einXtPzbAJqu6VLXSnOZMpPff6+dxybZbHnkSLUlQzhH2 +qsR3eNGsutzhgXUVgSjQAZiBK0HQ0tzpY5lRQBxRVSzajifPLf8RJaphcplh+Hai +Cz4+vafXr6WWIFidBHlfstfarv87Lc9FsCQLTsSRlSL3GzKh6Fp20Y1ZFAN8mvOH +/4dPe1fnvmgIXMuyCzzo/KdkWFv6zoVo/2o6/5a/D6Po5hb1lEhZQevxnXJOVZNp +3eT9IAUf8E2NH4h6uJQixxe5RYQx7wL0vMkWJwsM8FBWrSQ3A0/k5HIQrgBWUqav +/2qg6VrXEtGyeeBdnRPt1rPl4nrF7euxY16Ngo1Aint5K+KAEjNyw4BpKWpYnN55 +YsMDcoFAjc5WAXN8PEqf9AcdINsibbTdLT3GaqBa1U93DgVPOQSTpzUV3zRvkqtl +o9lGjmu0gH3oeJs2ExQkwZvcmo4xNGgRF2+8AJTJp+SnErZW24a6WjHCvX5kKTvo +fbrYrijJdagSYkEc0f9Hj98xORvHraAK8UKXjwg8fwfmIrIyfhCikC9cXzEfC8MM +XPJz1ydOU5VohOwDs3dBRNn3C/NSKPBSCnGfr9lM9lpFKCUrZTG/KW0ciI9zLEWq +vbBalog3f4HXXhcDleTMWD3ZJjdakx/J9Qf0UvE3brzE5eGdKsN0huzmK7JX7X3j +KaahSL38NPnSPG5KgHZmOlaDX0GFYnJEiv8+nfEqIRJgkSLvOiO1C9J1gsoqbkAq +sgEUDlcFXeRptDkeU5EBq1i0S+NFLm/bTcmTghpOUEc98e8a7da1yLWC7i+vG5JK +M+rKrP+rjkSU6cjGatlj5FnDV+s+rOlTdmfC3qXlBRh1JhSSLq30GvRBaZjjkTiv +yQe3MVKCeOHl+PL4GEioGFGLT6MbNFhXdCWvBDUJE43aPrBMX/dBHxKUCUlhYvRw +Wynb/145wqheWvpBiHubzhR7XwpXhNIO4eT+X7WIe5VbND9A1Sgnjv0hOQ8BivX6 +yPnBPbAeRAyjdvxHa/BWFNsRbkUTt9DieSvbtAeK5gaquapVp/MAYHgJYe6+8z3N +CMJSXUFYbXQFsrXX0yJ0KIBJlWclGjW20P/veGM/jRej8xdZKXVRlWEKTuWjmxjQ +c9EP9g6AOvuIUhaNgToL2cJ3aXdFXrqAaJy+VeSNczkNa7/SD1xvU5/eyTaoMHwa +3MuyPFxAl5ToY11v5eNwJJ1V/C1KngI07jozD784KmGggfJ5qLb6eBwh5UJdPnRs +n4+ZUHb3n8mn+my3Qw+3buOPXTQCuPTqy1/FXQZYzIDBDa02z2x111J3adu4ZQBI +a2vAD7NZ+TuXzUx0FwQgWu4Xz/mUTB+ojAbDmQu3cusfhLjBJcef55Y+8g5xhSKY +5W1oxenmaM2NHdmruaVdjQg2z9a5C1SLYFaX8WBcK0wJpgJaRcnb5VsbbbeL8lxU +qPk1a/Mb2V+0G5nZ577je+kpsOwqTgS7agLOOFgvXeeXS6l/GI4nsLcNhZMl2zJ2 +UpRS65YNZ7oYybOCBpg55sEF/UVgxH5cd59l9gXNgKgk3n3YPllxI7RhPqcaA5Y1 +YOtfB9JWXUjGLFPU+lBNBJQ3S4VnQruxdjmwlc5LzvlS40B+/ZjeG1pLA6DpIsIy +gYHEN17FHRBt9Yvfkf99OlZywLStsCFWMHUse2E9+s+IjeziwvWFs0BCRQiCceSM +dfbkvDUuYV6RjyCWq3rzdzAsr4C98Z3kbvH/mTl3SA6NitMrKnlFQg12WB5e+L98 +kn2+AZmTHksSGkZPwROef8bYvgZoB6h5w7GOYoW4IBMa81b6Lebd/PlY/tvlg8Bi +jCNUsFud52YwQ88Z3Lu24LAD64+7bxsabyxLU8axTBOgX1tDEsMhDYxIqiyxuGJj +zJWUQq+jSW6RXZaU1dNqps6bEdoL77cxwrnus0672yHpAj4I/6WASmnpL65AV9HP +smEiCai8EmjqAEuV8WtP1tZy8FgbYJXQTQib3DcZufpCeUTgCPCkjFGBPaee/y19 +sBXUraUUefhUXOFkH5Bw1fY2d4T9fNmyaAhWtQy5jR7LpS8VI33OxtxU4ZK1B0c9 +Giypdx4WA2fAtG3eLu862dHj+i8HwRyIuq7ZFF6SYUcEi/tzg6QCBSik/OuSgcEi +nHxRu/cv1l2v44M2pPdSuGhax/K2S3qh8i87Z4KRpccc2mQbbKen9MukJlp9gxfR +nDfgMDMIEA+Tj8JMy32t3szPPnt6v3QfFchIqLy51PGj8XC/dKNofc8jVrYZLVaR +kAaDtqxE/NmRO987z5sa6MUosIfdPUv5W7elJbsYTrzb7KcdjD6ZaaycXlfZ+ofH +7htmv23Ot+G+9vI+ExGYvciTzJkFpQUi955TJIIlD9BaybumK8Gpjf+XxuyZj33h +/E7NZDgic3MIdM4X+fTJp5QgkTq4d26epiC7IoTdVHa/9hHieEuJhr/KSDqYv+es +waJkQnEyJQ89Yi0QKauBu5vCuui4coRfwvsg90ZCnJb5kBe4K7Wa1B017+n5yrAo +2qVv5fE7FON/sxVPEhRZvMhWF+Kr7aq6t5whXxBaff/gJKC9apzTXESN05A3yCJE +a9dFKnDYjoEH8dUfbPC6SUEkIQ8xUMnsmKjZyvWDior9FaWbuiMhmwjI535igRdG ++0PaIwFJ2Su+3SKadOe6jJFb4AsIqEM+4PnL2tLBRNoP6aguiSMyUnmUDN9H2MkX +rUwmWYxQfpISLlctmIYs6mJzTD58RCLUCqhc6Ttoc5O/uiGHJnbV7ItZS/+ik0tQ +QbC+d+1HOeM4i872sr0QkrG2n+qaUTY+6gnKw5FKZP82fp2SFoTf5aegjA8YLQOH +/UBiyq+mOmtw6mRN8IGM7KIavpvSfRdvNz0Z8SR1bLyt9DoolXUnu2jIH/DXBvwD +7OjKlwnVTaOvHDv+lqB44oyFK6WPQIV/Gys5CxDUqOLheUhgEssBuWyHb5q0bsPe +r2F8nIv/cydy77gXafuH2HghLzjEaqdx/DpDwbrW75LUO3RRNW2Agdak7eli+spR +k7serCPxfd5hRfterZQa1y/uwKpAAMM9FTWRLX94kwiGZ2hgPQh6oQXZRdhhaF4C +d5dDlM1efcOppw1XdqX+Lm7XGl/Whq7+60mAwyKvRNADEQ+0pnAnMe2oJ8V6vFFw +oNCPuLfZ7ESzvcpD18ZWTI+E1zDnLQprYM9u2DtSJMv9Tbpv+yk//7OnCM2bu58C +ORh4E8UUrr+jnX68Nn+iTZenva1HQfv4nvaMkOrR2/uOW3jENXsTcKMl0cVf+Ae/ +QEOXNkkbOToxJT9HlPtEOzRKj+dxDT2dbq6Bk2ahaYadSywFLDCBIH96Fiy/nFov +E1Qb6hq+8lQVxVB+ARIjIXrKubl0j09W7YPKl0+yuXa8o7xiEaVh4tpj5yO6W/o/ +rj/p8iS+y8pvKizu02hrozfSL0o15/cvn0vbaKmOHbi8fmLsSDT/rMMlcleP6bLx +Ij1YsBNc0Eed7U4d+c1FZgKXODixrzFIWU/w1A9LvKGRtZ04SzpFl/2vF+EL/Kon +Y7SV0TzL1CDHr1Cm2sipFGDpI4LAOLRU27U31U/rkqtiuxlogdE533YRhaM7gaLr +PcxRigWKLTbiglG4eAyZnu1CfwnU7CCV71FU5mAg0GstVnolDH7KVnZAXT+unPq9 +WeO6I+JUyoIbIJRW8mBmKCRoCAUh7CxxEQO/09u5iFH7+bCJkJ7Dxt7kUBNkNAD0 +JM6/iQe/B200/SOao1i5LCgrpvIbGRCTkIJtkFaclPe92m+P18d1eO5cQvYaiiKb +Z5mC9XxoGRaE25MQehIi5y/JF+qsW+DgF8LaKhdsF3JcvoQbGAY4EcnGRTlvHPWD +a1rpNwls/gTEvYmu9sYaUwb/TVx4iKL2nfTFnSDMEim3WF/jbARSWu1u891kQpSh +u99Kj9N/sNchlo4iZrXfShoc3Rk59cZbd6Z4YBaw9OAeghc2vl1bSoN9w2TH9drY +Ma1ZVADA4osZpp0+GVj6ab5wjkxRmnLajxvOeJyd+0TC0zNNlvF5Uitat53nuF6l +n2MW2R7Nu9WDF7YnxujS7IyRZZncdvf7YiIYIXJki+RBLyj/NcV6YP/XYHQxL6xh +VCI1wtDfZbJiIjalGNeETtIaFmxriZwLQvJWSyEbHx6dDSmMEQo3mAs1nMNX6aax +F3SFhlWDiHm8f4/KwuIGUFNjkGkHFNu+yEIN2knPUdF66TM30qkMZyfMtrJ/VWPi +nZx+7LjU7IvJ8ksST9edl9mPl8qPT/CrQnae5bqpUhkjKug2QYm9s4jY3bASuHSn +XMRHPAGbu1JwTfFJn0v+KZwM00NGtzeYBIO4s9IecFJYeK3sBT922u5PY2B/TQL6 +7QpR4ai41BkZJZ4g8Ws6IbCfDx1RiG3+6MTYg8J2YnmfGjMaWhtHl6f+r+Je3sJu +vKL6JyUpmajyS7fS2p2zsLAy5cYSF122IMKLluOdY3WruZfYUBVjSq2fvetg3WWq +fEW3CqW2DFvCGYHwBz7kGRP3xn77qVkxHp2h+9eW8J6uL3mrfOGOa2sRT0KBq7Zn +jOIFRvLkga/bWoXXRWk50BJLp1Szn6aIiaMwHkH/oXcmTKJMtknr1YGnAWEEZ467 +NiAMGkAuO21N0SVwObWbEMsH6iZnzaCCc9JKHWyBi6hO8Cvq9BI84TlDPRNCUMzz +dRkyfNZ/ra7Xv1KPwtKpe9m3YD59hfUxIbI1n/s71rkpY+nKMFcLYDUsIRe8zyFn +YOpyosyL2LZce8apdas6+OHI9lFzrw/Wbf/L4YueocliifaRVVYKj6rn0n9IV1Wu +PpGFG0DFxaVbs3Qi9B7+eM+iKCSGd+Evva4nEZj/+SsyzCdgrnpcfybhSmPB8YGb +0vDDSfvIiCIWcI5RI5YKP7PVJ9uuxv3K0OPcWm64OTRgHSIhKjG9iYyfi38+FODv +EZCj0/tpquRBdgKn9B8mOcLDavsfwSdG3d0wIQnh/R90j+xYUJj/FYTCjY/IMpCm +Ind5Lwe9ZN+NPzE0qxCyMXMU5tz5GflzYKhHCUo52Hg7V8IsMjxUrMLKAjPG0Cdf +Na7AvuJSdzl3BPIsM25d9lHLi1yP+Cg++Xp2v/7r4MxQ3vwD1pFRaJOEBRlEEm0r +ve6zIrTMUkg607z0Lx+6/e/ieLbHd5RksozJRK9t4sUvOd1Yip54EfSvstcjx0Cb +Z5ez5WDrMyuav+IfwtCSJ23qPzUIRcrncdyoM9CzF/myUZQ/yPMfln2hZUeIaH8N +a54BbIUSfv0DJv2Lv3J4KlROPZzBVfo4L3ImbGV3YzAlA4GSK+SeQ55Jcyq+pdJ9 +SiuL2osjNhmbxhZ8zNzr8xoy86Z8uGSSd1x2ZAvY2R1CWuhi8EERdyDPhF9pCOla +N1JrHOOl5ZiQx3IaEkXGasNm7oxwQoDya7w/Smrean49Dg30LUZ2vgj4R4hiOMQf +msXZd7OiKQ54cs67098yeLpMGp24jdRlgPPZEaCF7ti+oQOT8iaqPIumnUXsA7uh +biy8NcGIu1GICgumqAv0TBDJ4bwJYdm/Y8NCdC/CBrIPDOwpLtJN1oWrPQ+riYqo +NAOVzkFVkWhAeYKKtCvkw7OYzlcI+5jV6Tes08lT/V8lh0vqSTUziDW5a/mMEO6K +gNeCuON6Zl3glZWsOFdGxE6Yk4TG3XGBBc7IiGwzz60hBrF8FdggjzKRJVEmVMyx +W5JZ9gHlEoQr8U7ONd/jqXnS4Ybf6ekwc5hdA5KVQMP1Adhco5kC9kFCaNl/uj/o +6hGZjHf5tvAWo80OAwZy7PWszLWt2TJiw/4MSMmTJSNUhDyu2P+HtLFs/MZbWCRb +YM/XjTuVCqSbQxBVXJxdlB+f4Wym1JRcLvFLF3umFxIbii/uBlMqEKoO3+i/s04B +mJVoikNJd1hLxiRBKM8uzFjfdt+I4jK0LaaVIcai1AriXRB2z6qQPrFhjVbZhSri +QTmYhQxWDwtB+QLrQTUo3P165NbSqOg1MIXaMqZDh1itX/xzXdEDVghZ2DKmaCsY +zqOrn0SV4qGAhpYUV2BEh7z01lQetI7+CsxOnZbJHSG0cHnEVWtJlrmfMvi5tLt3 +j+O8HEvFHqZuKzwGZ8kTM26KOfuySM5KM3g62YGm/XjmR1bAxWm5ut1ktEYmAvXy +ZLfb32oZzGLJ6xXomKJHaT7uWBNLlbM6tUcM0vWCDeAmvw1imXD8WzKqJjxc0C9P +ArT+9hKKKnUfqLMXqsCP0orBGtGqE3q/47x4Ei9o0DdMtn9AzLYP3pX1LDE1ZM/9 +vr3LVUg6QAUjsbHGWLsWe56Mbl5Gacu/+A1tWEshhXu7IO6Sk8T/HBu6ZryLN2sZ +CR8qmm9jdsFYMf1x8Q+w7yvTZNO822JZrGNdiKugHGvbTlucilwRUfbnHL2yN2qi +AULfR4kI8k03NzE5kAz17H7P1/6BlCEFEvcqzn1Z2WZveX3Bk7fIn7xrUyMGITCm +KIEeh0ykw7XeHT+1XwZYegabSL1cQnqAnB2IQciOf9/MN3OYyi68H3xeykPYhRDp +gqrolRn8P0VKNC4+fo1TLUXhmgOYCDunUBsG3sACrswhWfpEpjxqjOu1OW4XD+YQ +Bz4fSGlLUgWcDyqkjdF64r2bfDOgZRlMoxs+6X5gXSaVXYO5204Td2/rRKwi27ac +h4cxnnyqo3983e6d1Ij31JE+4Oqkom2g+LT35HPWuhfJyB6/Y+Wdc5z+nQQpO4Ez +rkZOOmLbsO8Ht/xXAXF6/UojMBBbgaybYl2yjeldzYvEbZ7D8dMOtlApcyDE89gm +5CVKxd7w/FYcso0/0aG/vDsAv96Tsppq8b6OrApTXzZ8HyKBQAR2nsPqLqDxSm4d +JVURABlEYELlWmifpaBUOPRq3AKS0Z216eFGj3iVncizB2pTmrKnlft7M+xg+/zd +KP9zsITSZC5/K1OBQSgekZ9R1b0LRTnzrhqYAA48HMbPQYr3NoCX+xApnI4eHae0 +1vNS9yEQC+AB2ovkHxcN/7LeY8mzPiixp0raACwR3AESMAkoqRb7DrJUnd3II/V7 +vlSoZzLQjvls6jz8fpk6h/20aj3k1Ok88fGDIoaXcgOinflCODilj5nBi52bEMoB +YbHAZDB/LVrMefTgn64zRhrxsNKX67jiSsPW4fy0oHZuje40nsPfMSg/kAymcJst +5Re1QhIyzkLMzqjuBPoIOIRu+BOSHod6177ByiMH04i2laQR3LCv/d35c7p+Pdfd +t3n/ngTnGdEoIpB2535NSPAwVEslj0+plgM4ceyab7QdYm21fNCo8zDRDD3C1iUG +qJc6wu7v3pcZ7YhqPu7QTRsdZGyNlaM8EoFEUys8AJzjQtJHe2ymiCCdox/0DMov +37ub4mdGL72iN5pWR1XfJPO0o+ofIAjw0zI/3rSAUy2nJHDOlmbKMuvJRq65KlAy +V6opBj4pY957RDKuKiTinE/X66NbbAK7GHVUi1HHR/9cKXRdiqor3fSCCLzDIdFv +HmQLmP5eIsybNkupu5hBTxiFHPoZtgvvhiXcu5eL2a3dJdZJkTFXxlRNLAXe6Vox +oorO9EqMPKyH+/8ai06cW1Q217cc0eTVV08a3jq3inFjdj7yOAqq18X+x75smMqd +aoZ66gdpJfQEUQEHdRFfMoKMO41DWFIeQ3UyBPHaNKBLbycjxAHJFyrn6xIfv3tf +YG/nMhe3VAXxfVWl2Tr9Kdnt+7OS9TK/sUFNb+cFCsffOw/rSdek1XZd0qK71Oqr +Yow4ekc8O5N2SgVLpdNfoRR1LYI0vw75e+1uZ2DWmEkmDSAPnSjWvD1KbuABDsK8 +N68SE+yhGiR46pU28dW5/k8c+E0do+ufC3xZsxbV34nQNtQuAqYaIiemfVKDOIwg +Ubjf8vcRFdcpftOYRWmuWZDLr695Luq9eEmbCz+wyq10VVYXMTZZd5iKgj3+ta/2 +4P2aNbftZuF2oRDxNja2p879TZylEQerDB6yL0U/j1MzjURymH8tuy04V6E7Ux7/ +mRBqMCzli7f9lf5eY5iq3JQ5cTwn2FSLI5KeNC6lSvDF6jtcecb9Vwavp5ATMUIw +o4DbpeGW2+PFuDCmIT6FCvF1ajXPLj8nafLDWgkaOIQkvTqMpAgaRAm7qp+axkD4 +PcHQ0lqtSNMqFVw6QXe4a+YLW8ukvjWQph8EoJbIv8qNS9qgIWkeaTGttLBFB1wv +q/vhHTwTKQnr4vCabb7qO055dRg/kCTHzhVVzUyLxCdev6Jl9no+0D2Cqr7sxwtj +p7VorRJ9ZiLilsOd0JXWS1MT4mJ6+N5WxvqXJHhKA3TJWcr80MmydFdzKfOEFZ59 +O/vJHf3jfvaCrGQCdlLfyvDi7aSbXhYakt44Qxn8cEvwynssNXsH8sbFp454eCaI +nb1TSJZRQtirF4EO957xcIUVzBH9/mXZlaXhuUJDrpRL2NUANkpujN9ZnxxSEW8Y +INRAcw20y9D6p6XU9eFMilVH+30p3M04B7c6P7xZOBbjsz83UBNrO2eX8Rs5U07l +7frXumX4f2kgugJO2Z3uE1wnLbm7LPOUbvheu/0wwPtsuFUsig4dh8kMf7MfSswD +gBJ2Df2xI27bLzoVUsNbDi7a/d9xpwoLBtR8TjDfnGrJHYwRGal41C9kQIyX9VqE +ikywvkUuNODNofXrKSjlHMdRCyeUTafzavD3WyAInWkR/q05/TA1YOtCTpPfcmO8 +5sB5yNaEYVmay7M9idskOVKs98r5/zaiT+fNxL3KSxGnhRg+jCPD30aYZuSjHjGu +7/qPPtt2naeVxWG3WlUR5ArRjrlIGfTtkFOVrsh59SMag1kQV5NlziTXzg2XbnnP +EP1+1uFnYXONgBsDD951eop/Yyq/x5h06PcCDDJ3C80U8xcUxUpE+Hrq67lkQmYZ +EE8glZGrXsBPvoCjCdr7HlPExwsQf+ZiYoVXU2J8/wWB+cNWfL0yCluD/TVuylj4 +adSlK9Qz/qIrYknO6nK31au8N3MMyEiPCeJmKZeOOKfXHiCmYB+tqwba67QlJ2Or +UZcYj+9TCCdSnuxQyZQiEoZUAaYcvYzbevhRb7N46HnuRCwPWebc2/ikyWrIqfLi +5wSEqlgSnOR3ZIV6/r/USh4WzwNxM+88OX42DFjttgshj3IG9N3+EKI2JKOPCutt +5oM+rpGOwH+QHNwGjVgUbMGm/A5MgaDsC0k+alnyn8xAygUvtYKZrMFQtkKB2U7r +jvFTgTC8Cla5Y4qsw+bu7mJMIdcP7E6dJYIuZTMkUzaPjQEiWNNwXCVLxRqGRzJl +TyAfTeJG1tAdhQlVHZEp031D20ERx9QD+YLewLwMieiWPD8wiVlJVCQnIWtAqbbJ +jpTE6dNvjbVao5ZM21FGBSlgJxH/3wlUSpRVMPAoHPy2DLKhmiAApcaAHENvuVZM +HHh7m3ULc96YL23ZR/93p+Ov6qYwru9qBcBtBkNtEEpzHdgEo4fT9sxha3M9xM9l +ez2b/P3L+QZAMOShPAPN0dUvjdUQAUdwx5fZCosWACbqbUL0D1OJcHUzxP83RjGF +q9uROrVsjumnKz84VD+64iXz8jLlPkF5JSAJEEUzLp2wPzwK3uMcAprF2Lm0evN8 +jflIcqzkCfRMePSqPeoR5xQ8UkoKDewfR5Mpj+vJTSQo1Iy2Ge8PfCvjaSSusBpU +uUxJNjkVl6w7kIgnXFKrZiJspFKbpcivRTsn6hi0rjI7L26ThabI3bW0Fa6obcVb +Xo72ZaI14NLWNjJqUkjpuw1Jfx7V6KpW7DS6wBzFzO7QU41QZqyoJkc6ZESq9nuF +KILTKyNav1rpG7tWV+KuUoj77fH87s0JhrXpAT+mRwOWCg8B5mBEwm4vuxjRzVbd +OLvuU8+9lgL1hO0jw+xFJ+DoYcT4b2jdROmy5I8WF8v3A2NN6onWluhXGuuF7Sny +lvac+NbOtN97k+qtTX2+QMq8i7HLBKSGGrgu+/kX+ZNnYe0I9DRRM+IcrhehZJa0 +i1MiZ2PbHcwF9HQlcyHacgInQ917fG/QaQhVhhVVvWhHPhK8eMPIvQx699sXHGFe +XWlmm1ysZU+Q3prUv/9cf7mur37WM9s5xreZ/6TyxPpUCpoh2D/9gjqf4/qgenh2 +rxUd0mx9W6AxHyCaeUGMfAceXD9dbb5TApCNShNDpMplST/RBy2ErjYsXZgKs3WF +KHqAlOMLvK9eXiEGE8lKPdIx5qI6jpwsQGQUIVhRsaKpF1p2R8W9OCW1Z0g2Ws5W +uaZuO/ZlygOhM4D8ufK+Mi8j4U8/tb5RnOU0aVAUGrJE6KqkKLa25AlD53jM58bA +CkUwTUF2eBs4GP+gWarZjeGxvcLEUFB8ZPO2TqFagJLMyJT9CjSDTBaQ9Phmz9vH +FEYnLwIJiT7fBRdCDBSxW8/82OphDSudKih2Htm42PyF8WjRhdOKIYRaK/GmMxdf +mx96evCgNRJ/iIqGg0OddaQK/Uapsvtase3SQEusDYmXKVdUkxjP/lPjbUy+vm2b +yfaHqd1QaIiCVFKhcJ2HhGM0504La8zYqMCb9kFVcC3Ymf+CnOxP8cpdL2PcMjlW +DRMYf2JtpbZ2zndylBLyp9fBJqzGb/wfsi0ThtGAms6dezRm1YYZdlIhgt2e4FdS +mhxe6WWj/qSvEiu+h+I5zPdiPy6+2fbrsfmaKNka6zZ/rJtP4DEMJ2GfMdnM1GMQ +DwCNHtqS7ekdcy3mduOIMr13yMMIqHxrqAhYcmYOZof1Uz3SkO9LKjwf/Pf07kAQ +p/YKxKuy9DcTMR7xAhKr8/esNoLN6ux+m/Tu91+sMMuvmvT9F29ey4lcn75ZZf7f +F0QZvx6htLPHUXDYby+/FFv6CCRiHVGb1+p4AYlcRbv67uV67UXuIfo+ro4Tt1pJ +rgS613wXPT/fp/uvAZzNKHLWJWghGXpody4hHvzQiZrcFEF1CbMfFBXIPB8d2sVb +Pj/9AwyvmBhy07UqEQK9rqpzYEhQgmclKE8E3EuKPyRMGpVuJ2eaqbYEvqPpsYya +hhMO/eT9GU/jo4x5QbvObMQd2TVKYDTci1bz56W0HGFAJogIHKw/XEtyrAJkq44K +4DjVzMmEooGNUHci1BkUCjaiejAMytcrEX+uzTlWj5tPMK4G1W8qw5mYTuy/zaP2 +a21R42APEII+uxuPGn1B62dtdqurhu3pieGjZDgHYZWCChJDdvlMCCvjztNK5FJZ +R1rBlGz9XBSqlbJTNjRwXGAhtLuuiMba9HnqYswvb/ZQdjt6W66ke1JBW6tNY8tD +5dF8iIEePKj0vA6nHVu9GwLiwYGSZF63gzs+olKCCGqBfIiNfO0HxwY+pnXS4wGq +qeLoAYJMcalkrZGeFkUcWFWAYrj50QpfLbjLcwwCLKiRpXYEGI/tM3beJ0K4vkfo +v1HkVIw/MVlcin7hdErlJK5qgBcDxjQcp56oF1FafwGUic0YT+92FukgmvdUAAkO +of+ENOs8eRWN6mAeuVKvctpum/gKE9YVEo+gIXfe1hr0iOQF0gC1XlmjOUdzfOkr +i9G5N7EB/g2J69slPl52GQJtWgB/gSwf4f3MyOUGs06AfsDi90r1YC9cPliwiwm5 +zLHc9c8vzXh40+BIuL++8ooN6gsK2depc0VEr7kOlPbL4DjZdSeePvxTwdnDw/nu +P6mSYedlBlUGjMalqLaa5lpL91vGZFj2vk2sCz2IbGzHE7+L6gNk9Q8yJmvwzfV7 +MrAfDRswHSTCt7CKxPBIgMVPKc+VssEVqVpwIA1KdPPPVqdE7XBGBkkYgKXSDjh3 +s12iylpljr3GOMWWK4Mwqw0AjDKs7cita54PaSbfzbofkynOU0tMOjJQ3GOsy1CC +ZDBB94d42731xcYqBEGeTBE2KnAnwhBJ+tMiFYKvorE+UpYaYrdu8Nt6DC6toID0 +JGIlgJmGPst9cmFD8fWlTmg4Y8hB9gu5FqnEQUGbWDgiSW9Vhyr54oDDKIvjg3Vh +f1PaIcRlkGVRm2soahqt2JJY0uGgoRDNXCiZQHvIW3N/yGXjdeR0AJZis8BGAK7E +E1ODITf6tW1ZxNfhFhuU6lE/HEI2gXva4KunzpDyHd8CjOp6ScBa2cWk94KkhGpm +8tfTYdBRKj3PlKfIR++67pdpI1udyijb96nkqosPHb6Zg/GNayOAwdUr0NutpDTp +A+WXWkGlzuuvvaJnlbr/Vq73PxiWFGmu0ZxN5RoAcy4JVMGWnqWIMAC+H0Fp+UwE +fXHiac4wWfuw2otnmb9UcUL1hyyOJOM9pXWQcN04qPDxFLuCjD/JtIJ43BmcW6fz +jW+o3FhnOW9LsR2Y+i3nCf/iuQVDCW9IplAGvhpBBg+yNoB68madBz5H0ZBONa1Z +6SlYHWPo19wA0yVffWvYoNk3czT2dRf/8YFK0Lke7VemyZLjcnHvOWSvfXp+iQP+ +A88ltOECeaMV3LkzBctiWMMyDvi78punhG4nROrpa5AVnn2anbctHM46WyNIQr49 +5i+o+c1piliyBklSFcfjFYggxfsbZDAtL7B5+JAW39ykc2YKWHsZexhLUzAdEIew +oiEpuKyRrdXdCyovg+CVBYNQZ4V0zvNozLlFjsDO34XUKLA8g231WH/BIrFfBiWm +oJ9b8wkMgRVb3T9yrx4eHRD2MwBeeTprFW1dRy0R2+RlHWn9yuQiUaRr4NK6WbO8 +QVV/qacPdavW5/kXzSTiRNIp/ETRbHKP7IWQWbmx7uBnk+eMJMfCnilZcuN+OZVx +WHx1Si2USHpKPVVbm6dIP3Dox05roNqX6VgTJlNR3GSEZtRwDQ/leCdHWlNKvdcn +vq/OeBvPQnR6Hzq/3d42QtTT0QQhQZEp2sUH3le7+ivUjAe2QVG5b3ZcgNZrNKLp +9yTvT26SnlnlXJ73MNXUpnnfncNnG0qLbaNTQrjo+uJ/cMk/oSlmg0uxA1vnCXVC +2u2YiPnEYUFOdOxUaAVOzXIM8BEQ/ehj44up9mvrD31YrhXym+9nKOB2sV4+ULtD +/dkC1p/RYWvmd7+Wegwo4GLHXAFp2Yi16WTuWqxl5QCSacGilTnAVG9MOpRd0iQ3 +eBiijE8W/hIIMc+W4zk3sQgefCUdVtRgsLUVvuuapllwtRsRibaPKwjhqUmBa5iX +kYbXZ6PPIaki7RNh+rnxC5pDQiVmeA4Q94/xquEsU43pQ8y7PFn4UkuiHnrmXiW5 +XOGF9Lxryozx4IfJ+TKXEdlXAapQfY4Z6bwB+a2I1VY3DwxN2wvfcBsPP2Rd8t3q +CYzoKzFIThnlL8uELpj9IOYdueNI4Ft6Oz8sObysQCOEQzI86FHFwtOZL4y+5w50 +F6c1nAYj8uT4X8hj1656egcQPx3kTLpDuC3lesuvgSj9ngXr9cYTAb6TFpAcQi// +jCBX0nHo+gCxU6EyzWBn6Ncxmv9M0dqj6d+etq8a6H3b5E7/njNzye4eNb8yStv5 +T4NYaVMsKoIxCAPxRV0XMD3jQQwirCk7JlxkClCQE4hAl6HAWn/AQx+gZgz9cV0E +wZAEuiGUemjEtzcA5Y6rYX/xSd/IeGm1NI3nvecuDy0hrSL2GgyW7rTWD3io96bD +NDYuJZqqyOx3zxNxKcJgzoUyY4uquxg7QjKv1iB6OV2hyX+cuLd+ZVywkWCgPL8u +iW3aHYEerd5vE3xrK1pbgkbm0uvyQmPv3oAGYKNVIdAHymuUt4kYiMGI3m8IvcG3 +a2u41QOa3VZoVhcGhr4mleWW/ylNRhx1x905Hf/RnkfW7fyMwE/2kxdJlnTuoGJV +yUhlX5stggBX7wiKS5JcJqsRib1BE6Vkr2J11AdpP0uorKPLn6xMC23CCOF+kGPB +Sodx5frMMB5iEATJDPmBZzepxUSCvJNVqEWnJMI+8uNOx+S3x6REAYTYULBp48fp +wDxO83TfuH+oTYF0vJ/Flg3Tf6ZPlyeP23L+RFRtaSRa1EBY8VcbcFgqZ7kZgQwC +ujGLIkwV8G5LTxm+wmV+AFxFkUj1yqrIfC6ZgkfqPx7A3w3nhbKk2evnUf8YYX75 +bbWe3QuVkYjCM7fXY/pMvPOfpWv0nqipH1Q7X0i7qa69UMXxOJA+zxlLfXtlUf+Q +mSic1DfAuBwdt/JM/FtQYU/+k+N624vOByhA1lSD1lSEv2AWKyIG8yQXR8GEnrkL +Cn/fRZ1N+JIy66Vdyj68CBGH0v0213gPGr5whOzbRhyrbmVn8HgDX58Hwgxip3vK +ByFtp61KD2u1ZrKP2MduFEWsVeUHFyWkEIajedlb54neVkR3W11d3yJ4gOSO2+Vw +vyF2+2g2Nvrqqnhz1ajcByXKb23Y1IGnpmJEifHkizd5m2pbR+4b0rj44fX2xz3F +RqIILXIc9GgI3PdbcZNMOaOagwBhhuOZU+f+OleAbCAPOyVTZ5rlhA4d8WELAr6Y +RaRT/v18+Ruz1wsAF4Z9o8nOG4a9hnTGaf8loehWqWPVajVkjYik4ZBcYTWh5Mom +I3Xc5z1ldcYTMD5aIpcK1V15T06jCVM+7jH0E5YfK69m0Z72FjUbcn4zrwMeVEGU +D3mShyXFKrZJ1nSdm0WPU8djVAW3W2C4DHzFdCJ3G5RrBrCxaPawYicWwH6XYE7/ +P7YovqPROYAJgFuXGvWj1rNpZwDgsCnC2L/JLoUnHIhCRkiXjC1m77bSTWZWiP4k +EWjWeoX5bhTUWkl7hO1xcJsDismWFfEfgqyISw22QEF+0vNf/e7nWrxuSMClueCU +LlniW74H0kVuu0kq6kcgqdXZFTxVPmYfHey3P6icg8XRsotALLInR7u41LtaV8J9 +z6fz2LsZ0yGvg7dzi5/v+lltJoSaGfvYQ7oQeI+9umREeptGFPD828Bl2FfWDmFS +pArmJgHuKMPQ46V2akEDpKB1v9mJPUI+niD2BbPnNVslXs0TEJ0UsriB14GipNcv +pRptAwk5d487raP42iKo8KS1unnrURE8OlIMX5irlFeudRVT07efgimvLi85/SDz +P4T/6kMME04Mzt7gvarAwn/lgj108q7thaJGm9HMlbJhPDqKEdHjw0G0tiEAzfT9 +oz8obRwA4mhmO6sUdDadRGVlegusjXsz6/Ud1WUPS+2FXAeTABCL9esWfcMuRaJE +k9ldfMskATmoVaVIsM/M1xpiHbWK6tLapEiu8eNbzPfbB/abVTksdxtCfkAL09L8 +UY3doNJsZ8yt2SYcLZ1XfdIrvyavoVGSbTV+/qyHF94yO19QtAN6P4aSPZUBA+YY +34kYrKfebXBA/iM3XNMVfiVUy895qTu5nVe7LQ3c5UmaoPLBBHog1ty/HDY8WAld +4mex1nXl+iWBcYNg/Wa0UxHVLlwDij0Mle9BO5nOjBOUdT6Bp5GcoF3GZeTgC0jw +TKOFJipcQjC3mXlSDyZBhBTygpMw+pSCiA6WAP6RkltpJH4xwaiTMDvUFksKB32J +YxXk8Dqi/9zb1cvFQUxedfpr8pVuvFaaKQVdzuuWdU6UVDv6F/p5do6pMpbWkbPc +FBubccce3i4xLOO28SGkYHGMdzDU9oc8PFIZVlnnYvm/Z8dbiWqqJS031fgLnHQ9 +iv81XNG/I6tRKB7kJsl4sUxKOKXajUJG8PdNWZjk1JRMYw9uF/FmIfM0KJuaCNgm +wC08qMCeg3tn4HieawoO4mJDD+HttbXyObZg/g3bXVWhgdg9/leuo+vw0UId3kv7 +dR4p3enIkzWha3YizeDhtze9zO5um9LORCexnOz+VOijjyXACxGfxDuiaiJzuzeS +k2I+sBAotEGYjsIp+2r8ppZelZKyjKFz4fiJbdnzt6XUQY5h9BZ8SsOAaWJ+y0xV +U0WwmvFLcm3KDKcEjqucTwnaXpRMwOqb9MXsX20EHBh+96iZ1CuWJImbFae2A1Yo +jYy2O8Ec4mDfWUTBrDdgzL2fwCOE9DPzd6pWsNgMjwocd/EcKNsdKcWnfM4blUK1 +nzuk++LLxXSFGPck8xOa0psAXcb4Dat4o5M3xrk2hNLEKQ8QcNfNZ4OYVBTyT1y0 +8cZZSOQw+W9OM19UvjRzaR9WFpxQ65aSaDvpGmhPhZh8lNCpfBmU0VDMYYQwmDPs +iPueUmdSJJ5JU/qoJQodjmzayg5KESWfp3y8AvKRogtYSXJ/hlueviSHycGMyufp +9bT5CrCamxb9y91OnhIW2yOREhpXOapBKXAJYec5XJZdvUTk0oN/U3dW7LSZ4tqG +TAkkbRCuxjBGl28PDJYntiWA9gvfzG9cgWDJv+Ozj4YK0Wx/x8w8U/+gz9cs/9GZ +UssWu766eoZF5lY/AGEVtFifO/EC3lzx7OW4I1lBMcskX+XDC3PnmcOFdjsqXIrm +SZHqgYCizooSzUa/FCR9FqH2wwIR5jp9QyI9Taj9CI1C8sv6dF6+3RjPFw38l1Wa +wrt7BxHX/5fTkXq1dB9naikCPGkEGyze9XA+k29U8ZVKttFdLPEUxCxKTJOutE9a +D2sb+e2DqsP09x8CPj3kjvsUvu/5S97kVlalMOOqjMAUnc+Vq/byPQVlpFarts3Y +/3ZK4ZUAhkK2J4e4RyO1ngKK6yoNjmHZ+6luapUohZfQ9wgxg5ZiKQgaE/4OkVbU +r8zD3QzcuotaudwMUV7+BC0Wpvhd93+IRZErxVhk7Ucmjwzv9K4b4k0tTZHApZB4 +d37NgZilq8QoyvwFz950qxUHusQNjVIpvbPSr37xPy4PAY2cLuZNb6PzK+HwR5+n +Sd7XLkKlCHZoHyzmDp6cIrX1e2bQjYgDYmKHa+QNlrkWe1ge9HtX5qlWiZWcwOyc +VjQHq/ZmGxmrucP99hm/nU/NMQ9Q6BFmuR1fntx7eTYIY+scTH4QhpOxQ0zxfqvn +3W06ZvRfifChhIc3ChdRbAB9uXzr3tPEeYhmctA5xEaSEi+kUTqG6AuTDCGYK28y +sPFHWFkDWfb2Xl4gbdbbz0W9CsMN7GKXxldYPtv34qW0U2rwU3mKini+yx/2Pz9X +I38Zx3aTcPrx4L+QBUX1e/QJorKvYggBmrk9269Dkl4e0WjMNL5KBYToo3op6tA2 +++PiabHfLE9fflwfVV0Mv7F6wfspjQUVD4ibJzq/Yqj+PYVCKYA1HQgmgE0Gq3Fd +5tqNkwdRaaBSj1eXkUGuZ8O2SPsmOnVQ2NOvdWNAIeEvRyXM0fgq9F8mawuukUoi +vf2zEG0mBKJPMlXubvMsV0lre86u/fhA6/EqAcctEpZ+7fd122hzhSx7Di74E4uP +ifQSf8kblPS27hHmqmJL3LjF9ZJYmZpSdEHv/zTPKPjYp6qygG/C10wZMq9ruC+g ++O+GDQgRaIzIRLYorIVBwHzW2Woeej1nynvT5qwnqbK2Q5rNZMFS8kiNPAOkXUIN +8Ux1hNTzGSmfYR4/y2AuGeSFrFeY9ED9/mXhOLUHCwNViYMfHhxt40zuX3zLP5EW +UEXd3T4fIN/iP2dMlHicoT/T6k5kLjSERzS1m9Hi6S3MWCzDnGHtDNADHhYkk1Bj +7wZ6eYHWsrExJVh0nuxfvCb7EcMEDJAIyhlcvsP2DJPXcrEtgGJGtlHUgLDJsdhQ +yqxdzmvaFK22PBjt8TD4H5zFy/sNxM+65+JX2qBq1VIRJNIdtpgX3QC/9i44s1gL +hMF6X5x0eUhz5FyF10wSLfL+WSyWOYqrDwUmJeAqfomjrsiFHJKtwQal/bi8dsaP +OF5pWgz1VM6Fjpt1a4CF2QtEq7EppQThByfrmJJYh/CJdxpQTdf0UDzGzL9ossPR +fr/9kqIKKFMAHfpwTCmAwFJkpJgBRH5ifKozHruLWA7qA8LgoYSXAIq9Uc6J2OyV +R6Z9RcW/GRQkrwbZ46Kyhd57l5vARTvKxESnvwUR5TdMOI6kQU6CWPllUGS1q4GT +KN+TrwyqTF3wRfCJTjAZ9j/Bswq5Hhr75rGljPRFn3bPLYb0qg9jcmuyjff4UQFL +1IKdcmQ2Fiy8tgj7wnVjd1J7c9BcExFqSiTSO7d//0wuuvNdnS51tEljJW8j9IQf +vzF+Zh47pG51dh3R3nYJFwnNTSH1n94O6dBdlZNFkHhATEslhZp3/RTWemsugnuQ +nLASCb2QAoCjy7qwonTqFyXkF4qWQGriZNpZ9sUr1rhh1PhPSBw7ITUEiYso9uBr +TzI1x7PgQUdienJah3z8CaVbR01DNYN4P9rf3GoyZ/mV8iWWiYTxkgo5YViXmlcO +IJ0dGzSbjYsA3FT/5UKp2sTbzsxV8zKP4ymy3mS3ZmCiKWvvWqVYqXAGTZ+uNe/7 +wEnAEL2/DOsgQUlU5fz7+spvJCdKrqS6B9ZoYb8eC11qHvD+DTwMtBwQqI7vBHTh +5ph4JvvfAxMeqBoxM93vD4Xxwh70fPT3X7WCNkw2cGCi3Le+sjsGa+/AvuqgRYMu +ZKxzXEESrCOGDdH9EBezrz4latZpHRC6xEG6olNBr0Uh22ENzbrzCbZo+DEzNQNZ +hNSQtoKgE+egAK/Vn0LAsN6XlI6MdYEhk7rLjflGm3PBgnTLDEWeuQU2PtDe4sBM +2CTJolrJTFnwV9s3cbZp62R4lbSXy+2fCGXlUKjetnZ0fwtBmbB8WDfVj+57x6ab +7osfXNWGVUSnTRd+pa2Qwk/bA8IyacefgIh7sKOAmpsngChhaCec/9OSMA92Nzlj +OHLCHNCRce7o3kHssTNonT8tgwpo2jOFSe2y1Nebx0oixvp+mbqtynkUB/SxQgU/ +ymuG1D9+77GeNFF2NQBOOFFU0Hj7fFFLoUUbpHVwqSf7yJ8m7WtFl5QMPzrbRDLt +HggPYdQ5tMFVfKAt+9rxAxurnoluiXvJW5RdaPfgndV3xSafBRyck2TSOrzIEuy3 ++2cupdOi2c/BoeZ37nvtvdq6hurm5HRJGOstievWFonIHe0ftcWIx6PHH74DcYCH +EKGIglVb4TEE01Kl7BsMsiOZEU7hGOr8ljrhQU4Y54hUKi+Dj0kAkdAkgSdvoS+r +vVnp2cRNQd0+4DXrErMQe79qFPbu1cMaU1EoqwuJkDvD6nEcEH6B04+R0FxapoyX +YCB5/QzZ12SOFdCAC05TwAAMPNjTjdCgH7+l2wnUtJL6LnbaovrC32d9E2IJgCex +snJIZehN/8EPoSyqvqf1SkhQcK36DxXzSwU05xBpFSYagdCyX5QQXg66RtTGObNj +KQGhAM4ISiu6cfksKVw5qAbQtKznxSGYPHWspDgGMRnkB0tw7sBxXZKS6DbzAh86 +TtHEGhZ+v+y+9iotoDkncUjawig5HYJomMBilCIYJiXgEtHsOiFtlb28SzBMd5C6 +165btdui8dcRN1ZgrmYt3MOZmomxuB4VXLZN30RC/Ih8vS3W+6U+OX1UOvF86VWe +yw0gIDj0/n/CsGYE3llkJXbStd/SA/So2JgOEJ2ODGDVhGD1pcTKnP1nirmly3Vi +nRHY2Ekv4dMj1hRx14CT6bsbfhQSb2tiuu9owAeYVz8OTD/axKmJlTK4CmRUIK9q +D45zLBzWaQDi4QcyxmyNnZ+0F6/iL6eQFiqjJcYqdqmfwcsJmRHIQkvb7rbqiCh4 +rWJd0RhO+jmVdqFfKjIphFFVewRi986+iQCnzA3rO5VQ4kW2R5sbnX3RuLgrryNf +ZwTQ0v0HKjic2965EYBN1LtdAYBTvDVw2t7QT5UaBOnrOASKC6uyUbTk0mSNIj0W +hATcOd9kRWq5bFtd9aV0MhYq72RuWePnwHgsc2DnyzJgBMpq21TPBgzdNGD9YxHm +vVn288kKRztYySwuTd/xE8hAu8qNurWwmXDGPqKTp9CzU1LCd0HgcfJfNCjl6T5I +9mwUD12a+KrCfuuybRMDrVlw4CT5Yz4YzQ1KjYwozR0w9e35qReI2/F7wTMy4q8S +bJEnfm3Zlf+Fjvxz8iHYkqIAKnDBqHu/TFAhHR3POjLJ7P0EvGqbeIgz8fVaNipn +2fas6466BT7ityh5wVZSjzUNQ7O0vR0hNLjAhb7l4pbd5Pf8NWrZdcor1HiE6IQB +/eDrvpSA8681eqsr9ZoWLwPGqVUo2XlPEURi8SVBt3tXgXCaGF5MpuP+8DAXTehF +2W0btx2lbACctYdKsiLves/KjdzLI6qzFEwc5+xOKW62MM/IPZ7St/hnJO2+kPNa +9lA4RDINLedwFD3VREK/zWS1pnr26dhcKLvB17fs3fzei27oH6ZFiqCs4to+Pu6+ +wYgk2Hffolh8R1yhelNa7RFTwHqwu+Z0dfwAY+JEyUod0o11AOX9Xc0Gf+Fxilr0 +MfPmVvE8LASqV3DLVBioM2VN9xS7+kDFRnAg70ikM4cCc13AIipCkEBS6SYATC16 +N1zw8nsP3DOKH0OI6MgdowTWvdJ/QYlqPWTGB99qa2E17J2mACS9WsenFFnpNboj +snISIq4fDK4f2XSkKsfnXDl7Q4IJBsbAHpRsgZsJb8S+B/jbw+JIv+/GHGPyxQO5 +oo3tmPUjCF4ceUUSRTB0YZXzAbFUJp7+3e6+MZbDjuGtyYsJ4qxmcKZRmsXgXhTc +lAK1BaJNwNGZT276G0MGwskdkqz/A8cLSgXw+yLIIEYAaDpCwY57rwln06E6xyn+ +l1TmRc/SmyvbCzI9WHSPV5T1rNfdFKCVxiCOdoP7ytytCD1aKKp+K3v4rNQQnyIf +lGPlxOVBy+AOwyAF/ojvPHrBYtXzShESyetcWQXSIai/kmIi6u5bfFx6ZpSjlv8O +WpzKZCZeIgP35A7dAAqUq6nlpDxV3/PLq3gCHY5oOHmcqydZVAMYc44EpDp7TUXm +MGVA48TUF47D5KE2E2z2OXcSLzTY7nycuJ7CS0hI/r+cIELCXdulGWsjEc5/WJ+3 +PU7qjsu38GnP/Oolj4c8FG7YX29OfZLuZKyQgwHp0c14uZ5mO+10On4d70LvzKjd +S6qpH2lEcY1cUk+1vyDBejijir2NJgfeRedOGTjqO9j0bCtFWaQ/A65EwH2i9FCD +4HjgVBaHTrn1XDuFjnkM07RWhoj/43k5YRQz7tnv8tk9uIX9dJv5eMJ1Xo7be2RZ +8lc5psbCstX4UAnUgy3c2C5bArne/gd6nbabksJx+/sXVIp1JBiywiKKMQ+i1bL8 +h/arJr4xrrmVXC0R+a26UroEXkDPUcNT9ZrOV1UfxpGMIVcH3rgcsNcWlTTFJU2f +IPMs8TxbJBxOoCDtv1V1rTmIoWbIGQyqhpqzORmZo2KNWrcmg6lk6zYdROQL7OuW +Wvhm6WdSMLMbHP5I8imjrIHYVNqyzaYkENVuLldivIzPUu/9X+cp9Iy1hWH5ZFuH +RIp/hTDLCCtdNdtL9u9/21cjFaq5uF8QPCNawJZ/hxJR3auuryw+aCPaxY4FOiie +PJ6c2P9mld0z9wxg7XmSn0zAQO9K6ykJX9DN+GhNCz1+5I86md4fqeEpFRT9Tw3e +AGCJVhx/+wHemvO7q+rKfzJt87+gBXZrs5IfnP1lFpgP/RuD6y0m0FGDieuXJ3pF +u6Fvzctw04MUpkGl5f/Hm6DEHDK9AyUZzbZ+rkDvOjt6cKLmGUEhS49jSw25dlmI +8rMMc3EKwwQy1vSx6u/tMwpg1hIwmJrO6tYYM14+GLR3Hxfr8ubWTDFX4ZBPBH0s +KT/S7zu3d838Riu3DoshnZMxqOH+3RXrqt38kDg8354c+ZSa7kHRzv8WkEypX36k +QExPNJBifHsoGMtB4pSObAj/71UjQhOYDDZCnAH5BI99J7QAXx1tEuICnZWTTVIu +kRixZTKP9LAeQHSHd8bwaUFB/HFlxC+8h2kR2rI5i32L2izEwqjwys4gCPI3XfTY +Xjnmun5a82FYBJ2z0Ky7lfO9NhkI6ogrcs4EmJ3ovdFex6DRwdiRlRezDe/odlgB +8muMe70yzBiW1x+4xdM4Q0IvWe5uY1v2DlRGakJoqbmC3CMKuA85ARkBtmQrG5Fe +lVjggKM0c0i0M1qTCnOCVYiWvrej3bxxszII0OKUxF3+VrDYVzd+QdfHEDb5lMCV +WQqLdZhrgleOesq+gOuiYLurd1oP8wzsKmCr90mKqR0DDvlStCV4KXoTDPJzZX2M +GFzPiA2dNuJgKp6e347D7V6lrhDmWI8P/71yubIadjIz/0QcLwJb+db5evft7t7o +Stj/1+wFgnuFn0rZEcor/7hql7MzMRArPNrYZ4GknW+p/93KWiNaXrbtZi5zJr0B +wlh4PtoQ3Wjm6dNMGYX7Z0GdS9RLiLS980U4m7xYoTvlozRFRwWouNtaa51/RK+/ +t66Itw/oNl91BM3I+vseJeEPIVVGO/SQodvTmMNikxlRvVHLBEzvdER6f5S9Y7/5 +ccOX1vTDUMeSppJ+yGCkUQUCk7jFI7z0c9DyUmGANKX1Dot6ApbRgf7gWt5S8PWv +Sq5/EXKmTFWE+fn1ET75zyaRU514AS49Tzk5BlIK0Yn5ovqxp/fYSdil3Fva771a +3MpSHK3uY+7KctDPq8YJzAu3kIEF3tjpykaUT6/xEtV+awqDi3a4VRP/7BbdE/6W +kJ00zCNrEdW0ovBaQ1Hm7LkdH+8nNxUShobsFf6N1J+U4Y107ti8WNarpMlQB9vA +bGEtXUcQkBNjTMThSfGpqrJGeUdzEcw60jFTHSpRfRVQMRUlj694eWz1wBK+u1S7 +o5JSGBF/FY2V5RYtC5KT1ja3PWr00YNX2aSdX+8x88MGyE2fvdeR+qR+rT1vXI5z +W+UdGcnnyj3Yqa55DIdDPwGnJ7RwMFBz1rT7oaGzYvgsLYIlu/BJ8J80R/cB6TlC +D9/RW0UWM81iKMqzPES4WMMC0fMbfaN4gMxKtNc6ZqIhCJr/iuaJWMXxL/28rh2I +Bn+6/rEx1kULukn5ekibhRB9L7f2FRVal2QWxG0Mr/yXcOskXms28ZmTTZ+3BU5f +12WvfWbEuPX7fUW8dspl+bEa7v7f+X45dhznxqfjlSD9KzNGwkaSvq9VDtKh+zL+ +///pAYj7Qa0KQNawrKPfxe/QM2q99iBIaRYQi9nPCWA5vadNdgfo3RZJ6n2VVxub +SFU7JNVjmzEecgZRuChz/NUqsc/NSDk8jdZd4TOCeBcWwFWe3T5/IzKtPb6Cbog9 +WkT5YiUg9XRfRoiXtPczaxJ2u1iGdEcrT65nrJlz3kTA7YNB5HAkkrT6GJioRVvF +K4Et0lmdOS2HYcshx82b3ovnX/BQbWha4GHprTicuYxIlT5LpZxLJ5unN+zhAioZ +RJR7RVILl66IqG5Lm/2cDvqrzOWacCRV60OCboP/uK3OCfzTLW5sF1zK/fpX/twc +u7No/zEBqDueBhfTjtQfjw6qdxDo7Of8wR0QCWw5YkQSZo7R7MnbMgKQaK87ShoB +PQBH7dU4QeGBL7b6K7dTrz9R9qDSdSF2NTL5qYCvntM6+uvVqnEwVz8MV3xG1zeR +AcwATLeLupqkS109THNM5dlwA7nPk6H3/Yv4wASGXlfFRKeNoJM6FuX0h4/fULIX +2tbXD6VnuxeChLyJ/i7yeFGlj3sywBHp0TlPxoiCOj9Ki++s/84HxT5dObs/a7Xf +yb2Ha97AJvUmBZlKQXwRpJJMCd8SQIB/df+klrLVCfvdjUSzRIcq73c/PJ8bQKhZ +J6etqungFO6iRuNJtVbcF9JYQScqaesrPERQyuVoweEQQdLav6dIOvPg6LOSRXVB +qY7hujj5gVA/kBv0eNO+3Hv5CXyPBfGf5aLzLRKt0twZQ6sRYQ2WvYAtn2fndfyJ +piwVRzgLspql3p30ZfWL5X8gTiUuy7VPpV1emwoFa6eybVCGd2LBjT0D+VX1t/hL +p1KGBUndGxTDQWPHU1qYzjyHQmH97qEDGIbqJz8LIyFU2JI1RGqvGO6bZvknQWE8 +5s3CHQOl1KIfLxbArTxDKjWXVD31B/n+y5/WqzVi6PpQEAuTLmwPAHZP5IfwxkCL +AxCDXZvpTMS+lkv3TKqbnnNBZqGw9cyw0UjaIxP19RdoiLI702UBLle0eivCFCnE ++JKaVLwlYmPVTAClQueq0tf1mYpXOmoiBIHshzRLx9WBP/fYa4P0pipIoGqaWvQJ +R6EH113okcnwbp3pCNuqobjWCij437uMu7e52ds2nQT5XT6bzF8G+FvooQsrnfSQ +4StnM/8SBd6ZY9DeI1SA8GmG9/O6zjvvWiYu1xlOlV3CicmhTFST0BO73sPvFpBg +2tijwSeXndetUoCgCAgLeOmzPWCmNdcsNNAXnzE+8wf26LxHCIOQfFizIZTXSzuD +qH3etCPC3CR8Mc0itLCCWHWiYcjJklz2swasDaEj7BgW3s0Z/aLZW5U6JdtgT9J8 +jHilII2/3fY9ZfkEpRQ4aMSXNWfko3Sia8RPzd5di6aZjoRNnkx5tsw2Pl07kfBy +WXAHjQX8qLevnzqs4y4++up4r+kG0Xufniw7QI2OygDc7zs6Wueitm/kIn1f7gjC +YOUpcFcZveuieVP8C6b0Nq3BXNVGETl4JTLKOnxk9ObBJtogDI/m+6P3E6s6xUgc +omLUmmSbR4cMQFLTq941YNGMoeix605qISpLxpZufpSaRpjXc4IBZkxUTxPt2GLn +mBY1figx+kjjayXxEOmxBd2VAT9zZ8S0yTM4+W8fB3brExS3zTbwXTQr7hELFsh9 +N/8CrKUCUY3Ya7EGYqSPmFU2lKbcE3e3+6bPcUbu7C1qEa4E+r68vYHLGmyIlnKT +nhvxGnwSiv0Wlna4LEAKm9hMnVMNlLqub17hFavmoNQ/NjKUIzFe20jJoccbW8GN +ta5y6Kq5IwiFE/Ix435d40bfiuSoPiocvZKxe2h+JW8+u3pWQybIksRWtNmotyUM +tMZzzVjLZFXiw5IJRs/svClMN0tu4fKBQ6LKRMwGtiJBwHawiIJdkPnBv5l9PQL2 +407eKaN7DV738ncq3ZCEbhesCMVMuvXjyCHItPHb+VWnAHc0vofw7xGq1KPM1I2S +RL8G1Wc9SXREvVqMeBHp5xubxZwHowOVp/wCZ+jvlgzd99+8sMF95UGAVEeVBtyE +sxHtOCu/iDG66kvmIFE56o/B3vsDnx3qQxk9K3Ix6knZgruEJXSsV5Zl5Hm/0CnF +1BQXbdCFSm4V0gtFizar1fLmKHDNu/QriQ8s6kFX52mDmqVgZWAFlfL8U45ZdD74 +QYSxoOfy/zQZjrEAsZiSvVRHDTdwXD0lutxBiYqiLZxTCL6eu1/Zy4KMqtKSY02A +IwE+Qk5mbgiR+zq2ynukCdNFeD7WMhHoOFcTdv/ODMIlJOWK59aAXRAl4i0p6yRO +vwWk3+e62Qr+e8ROG+TL0yXUV8uiczft0vUc93Vy6afe3wUarPgkCImFnnZ13d/v +cczb+Q/UxGBqw93mFg8a4mISP35S5bYvK3ru3QTtrPte6NkiU93BrwnbDBdDi70J +cCV0kzh+ZB+XxCdZX0P6aXFXot7+aM3GsAlZ7J0V6nA3NNU2EYVMH7f1FUFKjP9L +Acz94ggGCNaFDZbhPP1UWJoIv0+3ZqioKHXHBv4osLDwwP0L7g+HhiNgcA7mzveR +avtOVWRnTBcyA7+LZ0d6EgcQQlyuiJ38yldybN2/ffaUOgSVIoykkREEPdz8tNNq +W/nqUjF61x5pTWB42QrSKl1kB9Huk46n90z4hzeQV+plOxQLbYzCPQ70nSouO5sq +GJOFPRNpXnJNwRdx+CMOCDOmeqDl6n5tvixDcKnJygPkwKohO5qAPJsB3aHr1P67 +DBpR5wVg4UJiEXpSOjtg6+lhr3Z85pGU/a0eiKSWJAWALkHx9VYkjtQCI/+8AERz +GjqIgySL3z6CtxjxkoeVsvCy0AyKdgfw/dVG8V0a1JzYtWuaDXfvTQqtvE668cZp +IqNsb+MOkTkL4GFI4pg8j8bKFkDa1Bjzb36uL9MnDBBavheJB8bK/q8qZdm2cn3h +Y3lHh0W5LRwG2XYgQA0+00fObTZrrddg3qXAhdhxUOrCv3ixoU4yT9hmDg3mryBt +vlA+YAUUfr4GMhdN2lVwsSp7k0gxhYFiIg9WyR858V49Ta49D3MQhYIRykjbP4qW +zoknOP1LDmw6O8J/tRLNMJSZl+hBh9RjvKFgg7+GgCogjHWbhheb0tVAu4sx2lxe +gy9deGr8dI4lPF5Z+rcD+juGmErvDipTv8ySic1PS9Dlk5rUoxlNxq7WwcGJpTP0 +mAEfSlQIGseAXbL7I91AIiuZX68L5g1XgC99BFLODsWqpxP+K8vPIkSbIWXlY6jo +CKlh6D7/Q+zCewfLEb6l9spNFXwEiKlD6cX6EuDX85HY/7sCIhdPv2TMhacQTx73 +ml4HVlN8bs117q4X/T2dMUVES7+9g6DUTRrVFpcbRSWCqrY7Nwit+38QoalH+i9t ++UTrMGWONrLR5vTbllUgrLcpun28cMMaMU1H67U7o4N6U+S+xW6BRIJGDAt+XqFM +q6ypsYelDf/agHYys/HNn+XU1LzP9kk+1JCznSwppwv2MfeBdBPq1vI1r5byzv2r +wpB3lTYgRgpCTMJ+4PVY1y3Ny1dx1sQiK76wDrSoovbBONIxSXrlsBdrOeGBZHj7 +nPzwUafaElf0dxwdSVisRK3QfaNh35NWy3X94WTIgZOIeq68Hc3437l5urvCgWCC +pcjpf9/xXFBjkYPT9+S04ozv7yDZafmD1aBTw9bD6b4HCnjqx9S4goY6LchrL+Ss +ALz9cht8nvWKH1hHs3db2EWAXuo1w+mWoY+II50HalxhHp3lkc3QlMDXB4KQWH9L +izFADHjv0SoGKn3zQn6z3sSovXl3GyH0y4XweAEMejStsu5YEKcvyMC+4MNU+X6v +9ZTjToltBHP10QFnUWN8nWtQIlSy5QUIIN/R8alPQ6MNeX8rsxpBWuga4Dfgyxeb +HsYb6fcWNhMdBAZPZfFRfjGC/rcP7i481d2WBOLcme5pzlkGjrCJm/tNpoiHufkH +La1erEthGnjXAIemKLxbpmgXxOvkSgYlkgYq59mdKRCzxkHhNA8ot9NAyI5FH4ZD +p/nqiuc7gl1RFspbLUaGZ25WIFoE1TWUFD5wCtefD+8CaKKJIbj3r5TZ8UKMfYOa +XkQWfHu39Z3ol7PqxLdKVDsL9/VmuUFFCs/scfOD9WYKsWKGuI5kw4uQ+ltdwUpL +2WKtoUQKK3G5ibOI4CXSz7Ho4bcAvrtUikrkcTMkJNALLIJA0zWl8jEtgFL5QmkY +yYTepuYycruakni/XpFwSg8RtmtpXouPSn+ptRwNxpVthgIfP+Uw1dd1rIWfToCv +a6BtfGGxDaUSTmrbLS3CNlBsdoCEjF1es/ZBFGnOGJyJS3FeOv3YEQcqPBHEcu7T +G7d5ORR4LneYY0I355NYDhncLB0KvFPJoHay5fUCLvWFRkA1e8f+F2lzWubwDTlv +2/Rw7u3qNQPXSs5yDAdjbIOXlZc6ZzSGeoisLsHKadUFjylRaM0wgFv71mFR0e31 +lExLuKPGJSBZIPvFwuH6JNvHuh1eqOx+HkmOXB/BZnCjElWIT4OSeAflck+rNX5i +4ukNgXqEo4eA1ydD67Lvb9NEltqdGs6vlwj0bWAMMjtesj6aqeM6txKqvuyYbImL +0CN7cB6ruvI8nE/1EzLXmQjxQFY31akEtrSNCzPIbEgGALpZU/FYqtx0EGKlx1lk +mMxp3TwhaXCRI/lv1GhiCYmiUiODZfRO1OVqPWSVRQFyqu3hbd0vl+L1yt8PRbms +ZKBwTKSXz62hrfC4fKvRcTCdFf95HmYqi0Cyf5uPhWnicb403eZodi8XEIEX70gv +RxFLYWd2Ma62/DsdmQb/7Ul5NSb+iR0vC3IaoDYLS85zSR5ulFltD2jkTofKy8KD +05qX4QHKC7yp8xKwpkRBzOC9SCV2uzKbNsl4SAKHvREaTLSh8Pu6iXrpMGlWN4eJ +CYE+6uzl+edlel030jGSer6zDQWbli9tZtQgLJh8IY6NLtf4yPxkWi84MCFkpF6F +1VKGFCMqB/rCHTonAS5jvPxpFhjYx3LpR9RUSxP/at4i6BQrk883EhajBRB92tZP +Gm6iU7Jm164g0KcnqfqpGpaAsohFNarDGDWWGjV2czrFrWU+/s92omSyiDuFJlzi +zqCc8U7rq+xQScvOrF5LrLrH7Rgyr70vikInrfGTdEiODi6QjJB8X4ecSRnBpdjP +ORTzrMROUdHMN+dRrH9c6o1dOdJgzoG4tELYYOn2rKfP6ByDogPgxdCfUJcg6jKR +2WbGvaI1ieQVGfsQJXCJawfQ62REjIOXseEQMsGgb1pPUhO5bq3X+cpKyYeIChGh +mjQ+PfwpbTXzvC7u0wM6gyny8H1CSwkD1xdBfAtGQQ8T3a9URMxAfw9OeT1uGVeq +faVOqLcAf9TUY3R59aQjF8YToP8vvi84HI118RhS9620bx3aIUGlcH0BN24c7oEM +kfT7DmPDxTRjsKSg/MCyJfM/dNdtOdgEMouqb+4N87wv+XIAskMngcjuelgEPz4Q +EkyJ9arP49zhiOylVh1Lfn2jrMT+YNLag0PKA+Ws8IenwNljzLDXLDvOiIvn/qgs +76L9iJfosIl7Bdhu4nGlQ/QUCeBhfbpFLM6qUS9VswCubG1rF2bP1H/YGto7m9WB +tWE2MXw9hZ4q0E1RzlVQHsU4rwY8DlywVA9RNJqGXu+yismefYvxvNnWB3LpBQUy +K26r9hzYyQYhN3nGYJTbV0YSP3uBUNw2cGwMe9nbkUoW4iShNCR49j+5CoyhaGSz +Z0BATvgcZ8FC0giaJ4YmzYmZFBjoX464UbrfII+6JEpXf7slDpJWNynlbErJCLB7 +70blwLk2ignzQ7O+wiQ3IimhyNZI/wsiGswgRRJfSbrFs7UY03W5MVS/7fvS0pj7 +iCHLW+dU0rI/L73naFa55bhYoigJqeL18OxHKGzpBA7Lvpog8v566L6kIFavHg5H +3VtYu4YcG1qg0yX4kQCoXaHjF2CtaMGpGo66epG4HMS9KYj4/DIBRGGkO6KXq/XI +DZPyG9l+RvyXKpNtiuXaao7OhQWFMcFhjZtUfM9/QuAs0P/jQYbZgOKkLaaXOoOz +WfMqBCFgeTXmUSplKwFOmsOPrhfX35mbCpeTUsRzsm0Suj92KjDE8G2CTqmwuKzm +QQis2nTvuxQCQipL9KC/KI/b4c7kKLCESJqACswvyHFFQjKwEP8SC27sOH7v8D8Z +qRxoPjLM5FmTJDmIDlvIJkoeQs1+3cwguT2sbWLcnVkoQLtsn8HKzIdTcBgVM2zU +2t95HdN5i348u9HIjXaDI0r/k+y/JoG/SwkhhVKuLAo+XoLtISxKlqEnQ1T5rLnz +RZjjBcZPlnBNEbylhTRTbJ8F85DX2tX4WGU2als3kZYOLNWNl5O8vtq6N0EuuhxJ +R+TPsu/F3um0FBQoaCthvw7f3r/Y/OeCVI0+XTyK1I8L9KlipO448QhdBe8hPcOF +H95yldFqOwXj5Uy4Grm7wSeqN45Qqmkh7XKKIV7X0rSu/cu1pLiIOXJJ9d6e1DP+ +UK6yrm6Boh5s2OlAcbMQFau6g2cuZD4qNRS06Awolhk1imhTg4Ot5MkAs3elDAwI +I6cIUFggaK/o+11cp1hb79J5oE6MX/0ILIX4CKSidtMtyF2MbUBbPpKkCThAhVQz +yUIenLAZ8Dnp6uqKIzhW/sCXxXQiuB/2frCB5RDQXhmHBHKvhEsuuwehlgF6s+ly +yH9HYMj58tpQLnAgq6S6wQud1/Mwnm3rg41yt4jxRiTQP4uzc9PdVq+w2q1LYlbC +qiS/Eyi2MfWQK9PydP9ww4NsC5uKqRgdA/MuZaZiBk5VWIt9vFGC5KYUYS+bFKEV ++sq+LDON1pLtFuL8fjjTK/zgp03F8qXOA8LlMCkfjB9fWEnNU/33ZIhCgEZqMeTk +hZBoyKdHr7YqZ8N/+JZ3/CLcI2UzfKnR6BFouvTW1cxZ3FZ2WbioQkYD8FP5p19V +ylMPAHd88w0xg1e9FwriUMTj7keo2NO6ibIMkWMoEvfP3CZQ/dOiwstLrnLdiUhn +aDOmhbSXH5hXXe5c324wbDCAx6OPMDYaHWjCA7nOE7m0MyzR/mwgIYTHjQnwSh4j +UhsH9xlBkfHdOCzKoGsjNskJE81mjBTa1bV9hiIBKXBb4YA7OWMXqDe2t8VHMbyG +hy0Chek+ssjd7SPLkemv8DN5WwUsF3KFn1zzpSFFXGbDFW1/nqjGtemI3/Q2C/F5 +ObKc3cO0KfrfuAGVIAIOosFfbPVtG9vER1/l19ZIky3kRHR9ocJ6bKt/yRgaF2Rm +wjT59iEywretzbzM+aYBMgLgUjd/EhOxUtmzHeN8qdbvaozrKFkmDS9QtOsmhAK2 +AUt6QfPLOftcFwMKhS4086XtzthQ2DJZWwFdq1pqlYdG28M2KCONIu4GUVPSK7Zy +QPOU0vw4MeeHP0x5PO7llS9ZB8nS/5kv9OKz6AsccBELqjfdunRivhFtwwZTB2uH +yFHHESQMlD0oshLUxhvZqwlY4ktW+OM1hhpatTliey0sfmYfmAshUrtVgQQh8njU +mmewRq8HhN20QB7WKjvl/Ix8kfq9SM1W6YQPXP6DtsGybk93rO9h2mCvQVUW2MTF +t1PDfw6rPw8DHKrbDU9LAdwqUJpmabNcyZ3nDUcODzmLlYj6LUBH7PGwlIqI0yEa +ePp7BSvwsC0ms5DeoDhnnIfY3OsptOzLEuP8pApES+KZi5vc7fm0TYHWdV8CD3Mq +HwFBz4h3pJelKBlb19VT1317q/PV6gq4fz5qs1AWaKZZTeaDngI0dTCyCrHRHCM8 +LBs1dYWHJMV55xvjkfVWNAnbMcFBanRgH1oiXu6ly1QB01aHZ24hC9siaA2lfAN6 +cSWuFD2W0wdaA9oj/k0028SRTYdwCx9gdJMmnm9MuwpCytwgR2IERpqsdlQSSptx +xiBh8X2l05diTLvyKAMzdp+F/Xbd5gSE+pDp9cvVZbGC4qcM9kS/1Hv1tcSdfKRt +HKBHCQOnzXT4HEB60SInWWPwWn1kifnA8IChzgq4Yya05hoP2JBL6yhchjYmQF0p +0cOlJDx+m8qVRBvH9qxiSE/+2kCgFxp50rViSn5N+COYp5iHYvwDTLJL6U44PpkM +bjKHIfwXJRMeEGO8PBf/0mEO86SGY1PznY5UOg6zhNJb9ejJJbrxxxA/D2O24ARl +vXktnkcipkmDuyRqrhBn2ikxaLKu3vC24vseCygAd4IZOEO4oOETcX3VRFOXAus0 +pKgZTqbWXVo3lB0gOtFr9OL2hhNhPyq919pzE6q+cPokGSUXcwPIi5TvXdO204lV +I4D9are8zyGSvrjhRTiGtHjlGs/2eKmkXbcgM4/+K0ig5ux2D/TdxDv32dQYxmpa +B/8+2MTizk9MA1Jk/fyWKAZdg6oM3BTiN2TmrSUgXY2i08/XOiNHK3TZmbtYdLlU +ssAH6iVgrCzPfVMnbBOdStyYAXx/DZURkCc6AwH3XCLNkrR4lPFZEUbpRVG4rYpH +BPg3fOtkQfnNNjisuR7mdOxZ5xZqifPhsNX1W1M/ZJ/M0SoDVBOzL4EuqYgocCrm +HLxzXP16NQrYOKlnfuNbOtWUhlbD7qhx75BxBqJ0PTasvIEtgWXzgbaP8M6X8R9R +sz+uG7O591b7wiISvsfTJylHEjcmPxptc02gpgdDcHLGv4SnGCrTwqAGXEbN0I3g +qYqbIn/h515GgYKPE/aUwbfZVUilBfPziMuGH0CY5/jLQn6B7Gubdpl6coSjghxp +FeBZinbgvwKYIayaDqwvts2fJ+stLy3PFsVbFy1hrpofB1Nj4b9m9EhW9sCuMsrZ +YiVdxJYf45eo7v+mAzVfNpjUJbb4sMNdD8pRpVaeIk1T9OMcjuBXBbfCbSlcXWT1 +KQmkipZko22J2KiyNrX9dloD1szA/3PYFquUGp/qKEVKAe66bwBomOUSEFNgyYXA +TyGMSxUawSGFJjJKCSKSwHBWHPJpOL16f/P2M+CVMGQK36dBYwNA1mEz5f7PZpVh +/4wNoKrEZ/qsWi8JuMPeTsT1fxvzj2sxiOdaAPJKTV7w0oLv4tGAB5i7cjF9ePCL +VXZHQkl2m6zHCROyjJmpzhi0V5ECSVRa8cQlt93I6BY2DhJUvHxzUHLCHMDiS0uf +IxE6eU3KxuYOgvvL3rVyzfje1ITkCPsWKgv8ji1aTZGMGoJ/Hdj9X20ZZWxX98F/ +zT89UABiE6kEuat0GZYGn5UiL6mpYzxucN2+w3hdGAkYi0tZShoRi4YROMap8x58 +6YV0EvdwozQBsV1sH3r8CAjtpN0nokpi5hMmPy9Uibx5j2feO6Np+RDioh56Z4BK +plRWhV6pG89qduqgeegZVkXw+c/XYw5xyfsFqzJMbNn+dHhVXtNRIZVVGZP50VaZ +2mNRud9GcSD5Xc94J8J1fGfr3TgIgrerWX2baJeCOkjazEEucBkdw3lg4bruVBkq +fZd8rATznVP7dQzU8Qd1/QFS9q0gxSsTeZJdwDpeTAIZnmeISm0Lu88FOHQSxffD +YZilZmU1JcCplSqTu2zqmNaZ4TkDEloNp5xwptRktzqopBhtsUYIx2qGuNpbp0eT +1wPzSikGgFt2w6x4kCBXwyJ2gpZrx4z+3ugiPhWycKd8fLazyWNkX53VbRvdRHMn +RTlIMU6+a0qhZTpQjVoOiIK7DaLEKbJ/DxDoS/vGdsYTG/68xhKelxNExD9/w9n7 +1+S6r8Bgsd5ebpXh0AxmJCCmFqScef0afQfVhRp1EXCfIt012GGjgHpA5NFmKr2p +oBxeXm9bog6IPJv02Vx7fr3HCSOIwTaflkHP1fNw/DhCyDFI7g/gYbW6OlcYhma3 +mGfys17eKjfGiesXklIwHUWYyWm5ypwRlrANJRgaUJsnwyBFD/4mIP3lYkn+SBbK +uYBZwKrehm3tD6pXljInqDAdyMGChCikRDjFpqLXtxwzRShndoHWK9Z3Ochc45Fe +70XQYJUMUZ1UMpmNc3A+v3ydGD4VqrPrJFCRHSbo6jiG9p3qXbeOWj7VYyDmhsw3 ++7J5PvjqdacgSwLVa837Oi2Fxh2Ho2W64uEygDsl/W3iEPhWeoH5tTAGYaOXIac2 +DV3dyed33xeRBcCtfH0E1k4FSMEHbPVAMGk7/Rz7oeojH9gvamVf6zoo2UmAh3AV +jHUSHnYrg1aUwFbSnRs35Dpzf1xc9R0b+f/yWL6vS9cIcjYLGyz8MN8pQ6RDkYuC +qep4yIi6MAvWprrhU11yibygHWRuQWEqZuNplrQ+RxvepmMziM0q2WYlcqLaDW3r +C2GI6gUVioYuFNjeJtZwwiJhzMj1Aw5nbZ6HLf5Vnzy9seZ/Hw2ZivW2avKpG0AE +ZY2PIp4yXHfhilZGja+ma4gLr6mhsPMJ/u4HTat4Ym1luGBzNm1ruj+aoiggGV97 +cHY5OdpT3ts5sOHHGHnq16BZTVnAu12golVz4xhD44JKBl0yCI420B39xpa7wMmQ +uwESJ9N2XUQxBOyZQfznizRnVs/2Y8lLU2c1IkbArzcan8glxZ9l7fXFjW1o8SWv +N06Dwdd6nH/hS9eXiin4/8HgkHxQUPFpRc7E+L8E0CqFtIJX1qeSRUx4Jfi7aWf6 +XysYkVBbtKvZ9T5RBJIjW5hUQ3BLnZAMlpUB72ZwwQHTSlq6xFpaesb6WNeeFtdr +Lz0Y48crI38sKrn66AbRbYI8M0wBaNlTLqfAoWNK5vesDznxSEM/LbvbnmjpT1pI +vx+D11O6CI8rfp96BCIdDGjm9PPCnDT5N7dKmSi29Eqq1rYbBX/fZePMby0ipAxk +g3DYhtEXwXNT3a7HnVA7jSkTBuXOw/KF0WDeIONG+932+OAQ1Xp/JEBj0A5+EAhe +ecf7ZYUhyrmHCwhmEj8zwnmDmMBjvGpNcKNo1+pD0LG/1m8K/4LCLDpgq/0lcjHT +MNBicRzd53Zj2f7rftvekri2ZiJXdJu5990V4UfkYIZeoXCUWEyDy0aj1xqSsBC/ +kB7iS2auRvEYShy5iEbPxzQrLiGf59xJYMSRlrAfhYJAlJGLHUj7obyoPwwwAkN3 +GIgnv711plErciPOrPvOFHTdO+vhVuMvxkaKNEjlERaXzVhV0YbOiLaMKmgWsohn +cUUijPB1TB18KSCxKcdW9TiG+uDVP48IUGzivO1W54Al0yrpTA/hSdastBW+4emZ +T2sNsyxPnguI0h5n6vGGFN+pAu8p0bQXCOqisoDPgPGGTe0c25mWXncYk8LuXw7t +ynUWeYF2iiebcvzzkw3TViW3CASpylqPx5OERucNaOPDmwRKXTmKokYTPqtnx+sm +ZSWrh9gcfQipEVbV6zxBAlDUzhVG2eaTSfocOC3RWQ0Be50+CO7dxKWH61Gy17u9 +bO5KZzT3FHDnKO2DuE3Jkl49JOkFDHvHGsII7jbAwOFe3LUkXoVOy7hTs8ua0oig +1O0uHuFIlxNTnHdpOT49KHIuWyyNq3mtiq+vL0dVoaeQAbwhyLbv+3ehEf8IJ5ce +tFcwUmSrxieMcozpxw/9OqHBja3us4N5yoS+l9l5JG7QxXANkFgktRNzPD780ji4 ++J0Tb4FVCXwnfJlAyPRVfsqTKNXANf+/mLQyZQlmlVq29xdXjfPVmKR34anZYUTW +EC1gy9O+CsvQDkRTsKKky8VwWRh94hQnD6x3Ci12DOZgdHuDMvVYvjDk4tnu1e6y +qnTGoPeMbmJJb60XxARV9aerukq2Nemz/+upNf2JqXX5MYvWz1mwr9Dcb6MYoM1A +ru7AHCAVvePDfg9A3zKVCktz9KgC8/lXUyNRopph6+Qc8P9524AQ/KuJNp9fQGnX +rVGDgaTEP8392mXTVzwFqEVRbl52JOLxILm3nxRhzkEm1bCQcI54XIWlMhgg76z7 +FAVQlex8e2P7W0pHB0gwVunb1756wn4xqKmjUIeOhLnbOkyqFRTqd2+7au4sPx+H +w4SNmH6sw4ZBPcngn9uU9xyhAz9vdNvdSQtBlwqB3o3vGrtyxSlUa7C82l9F1rm0 +k9aHSpr1Mc1JiG8EPYrm8IxVpypyUdHDUjkc59JVvfLuWsva03QFIQiT7BFYBoHC +gw2uHyLR9AsYGpzIoXka9zzin+v29qsB9A3jFvLg/xGABOOHQ2B2su+gF6zoRIc5 +YcoW6vEhCJWCIkeYIG1Yo+mki5LDx/AT6vTNa9Y3OdmEnh94EQiakGeMtLQCNM1C +Yd1XuZEp0ykrWy25HH+drsCvRB9+Fed0TGYliMajwZo6CqBYI24JGHBEsSeQnS1u +n7NcvM1S5ejF1nQN4MyGLqYe56/wcQ9tpwrxq1iVDyjgkob+Cu8iqXH8E/E/bV1o +IGuLlG78F2ThoToKJzyGtSmyVx/XKBoqYtLEMW/5ley5kldOUmj/1wJqVODQH2hd +F53FrB5/HrRfmAB4tijGZuELcY8r4KZmfoNSSrcUvNmaTVP+7TmOm94Qh65Wi6Rt +ZqTKvq2taBqXHK+R2Y9V5J5BFc8B17WetT6aSzloX9sdfoGYtOStL66aZ9jmbVFg +4zP2TNGeV1sntyJTTTqqX5Cw4EOS0+Xyh0DIz8V04cYdkCFQY9+v8IF/+oTGWhi8 +6UgUk0DZlWSvz09zyoCShespPH5NcVl6j7z0CPRYtdCB17dJm26kAhLlnWtnJQeP +iVw51lO0UC+mWVlsZAdEJ/5EoegHLGkz7evFUSqltThZOPwIwUZt6RRzFCV55A4z +37qYtGmBs0h3VgMYX4NFR1pSE/7RxlngkvzzxI3g/QTIR3945E5llf1ezxyw97O/ +DSYAxU+1ztf/xVSw+Z6V09E/bK76BpkVILVBrK3RUBVyWaT5mCjDsI7npfovk7Op +CDNO/Fksfc7TZJlQozBAnUJf4HyTsBc9j34FdUIyQHTYv9jRGUvU2XyRBsL2paPd +fxoOkSx1wBC14m6k0r9L0pujQqsl4I3lEptOFOs8dqTTEBdFQCNeL4LHabsMcCiu +x3G1SZUiB2c44RAaEWSbIoO61NkqOlouUWoQDPYvsu7lu/D5UovBL4wJoxFjpr+J +DnWC2OwnOeSTYr+8jYiHV/HLiUqJgyIyZXhjibA+yROITBHNbLkzVYwQrVjAM3Uw +u5oYdh8CfdXcr4ZzT+f44H7YWJX5s/e8yEOEeg0MMnSeEK5bDBL2AC+q6tp72svH +Gh+0xSRluAuAEXUJbyi6X4fgtuyt3wagZ+rtst1Yp8h2qeAKOfVd+kMTVOZQSWLm +FFQJjSkFMWejN5kVRDSy5sO8n0UWfwb0L0PREFZY/+2jcCZwQFEtiz9qF3cnTG28 +NpWeKV5I113deUzIQesHssHJZlmG+3jdiAZ88KJpOacZfvaEcikapkO4w8r3mlY9 +SvdGgiJe30ISgFcHfDbAAFHH2305asMqkIppNmnzulyTgn5NoTUgGFWNnU7+tb39 +8P8H5G1jjzy2ZXZ6yo6APOWdhgASbuamYOERFe4ke8nYfap5ujlcZQPsRdJfLkSb +kEXSM2upPUhWkcrrPlfrDNC5cVGbABAQvtFOb4vvPXbcGB/wQNHhYbhKsrXQMQD+ +aD7xncJZyWb9SMLBZye3rlbc0lQh4TF3gZX7lpN75rwvGPYRg/1fbM9IZrh+B3UA +ffDy563sDZlXZTr8Fh97V3OFhU6z/O5oc9B61fmYC2PJLAYPWyavgjWqDyXsBpFX +oJ1VcBTN4hKmSOAfXyDYDVaiIZAJapnF4MsjSWD2cIC+r5RjP77LNwQDqzS4Tpzg +FpaBrqqbYWZ2vvy6xj+Og7u5gjReuEbhPs69UQxAn1proqw4FShDawyVORlLVsER +4bTti7jGUKWb+XgLLErUrdF9keCoK7DmXVAuxIH1fDO1eXqBxBFHbt2PwcX2BKpm +XYEiLTRTx0lpNMlYdUTYuptj6iSopaqrglJ5+dX261+trzVS7u2Gcsjy5gva1tqW +E4llVcKeNl/vFSlzI1e9Z2bR8iObPjC2E3MBXKRntEosfE2LRbHH6nJHfj3RybKu +GWQgwmzpK4SuhjNloO1NK6CzzyeIVsQIC/M+v35iTyFLz45cBEnHEkQMlf4HlWLH +zWZ+F1IRgm0Bqiot6xAe+YKFxbHGj/hCdJuK+6z7RRrAO46OmueuV3nGHzcUFDae +3XZ7y9MTh1KgD5YYjMdO8hitWbrsRNm+Vmqb1eSCvMIPFPG28I0KycL6VhtMPyTz +Nq+uQ/G6g+Y1gOnZcHCb4n2UddiaoBxmULbnxlGqoaQkTJS0dTmshu3sIm2JI5u9 +LQuQNSewL0Ht6RrwByePdAzVhBmE23gCCjHjwlTyJVMoCErmNV89R+fD/8mIbE7+ +b6q1l8Ur8lF7MBSLaGT6U5Hu7P9Mey860Mn14SPrafELk0eQwXN7T8mFhXoEx4Ib +2mnOaGMhIFte4PTRPbA18rlOzLCO9lopTMZsFBH7EDhAWpIxt0mG03WRhnNtUHwa +1pfyk8BGChs+y/WCGErEzspwMpTpBC51ZIh68RLUPC+VpnImQE50pC14Gj4SLql0 +AmhH3xcucKBkEQR7Jp0k6fG+rhdIq74sNyOWJN/grhJqnx5OJt/rEggYIP/ymdRF +q9is+Q7pcHmmgrtFKjoBh0QN0WnCYs13bNKx1i2h2IoBEl7XKNaHNm4xW8N8rYJ7 +JADgH7IPmGmI4fQmuAmJK8eRGlCo4cyOubG3+H/qzi419Ro5Ml92EixNJRIDx3I6 +gtqNDAMMgrSrgsNjePFw+ucRcq7Akjei7IEuc4+Mdlv6vB0JWY/oiF0N1M31ZtqK +CrJyiJfwWqJe6uUUAXoppGSqNB6SgBKQRi9z09TGGYYuMXey984NJzsKWLaA9Shr +fulII6lQ8u3bVkLABdz9cAr28UNx2gDDFfSOAJMhN5TEf1N7vxRieSV+2PzcR+lw +qxch58/mMHO3FSIcMraCw50j6CL+HA2QeFJXOwbiYBpO0X4sSaRVTSRynE5nx+5A +zNkl3Mg6hMhsYq7QPsNM9SKxiHQ7/wOQhQrp4xV5DG7FGW7wANNPzUc6frzaTVws +/ZTqTsJbstoS9oePM3BJVZ4NmlqxZFOGib/c4QsFcvPa/KMz1xPvYe0CQY1YEPlx +SU7/AopNjRhFXb7anKq7rsExO+U0T3+O/VvnE2F8FvT9IpgdcttWhhZXO3mu0YJd +xqQD+KkuFI/9BlhKg2vzyR3SsK6N+lYuPsl3pFOopY6e6/TQduX185H7SP/Coswh +RH5wX+tp/3x4iY0v00+5HoaQSUzWvotgtrFf/6zFy68U6LBIuO9MjzvKp4EFFS1u +FVThYjyDoY7FFdL4M93x+U/4jsEow3g/InPD9DMu4ZiBvUmoQdk+WQK+PNYfqz3x +WfoZfxAQNbj1Xrr/oYcUokRy+qucXF4oDffUorrfznco8Wk9jlzhRPrSpruJpOAC +Pt8DQYnAeOc5G1Kb0Idm5dnsWUStSnq0viMuNUI+rSI5adxlnLz+AsE3q+pAx0bD +uGIntj1vzdgu2G6YzmWkID9sRJnshe4WbDyIpGdG9ZKYExA2w8+DGgVmO0ZLLtzU +wajRdBIW1+WlaEsdUZIXfJ5eMhNpPtQcPu57Pi7roJq52N4LFOxaJJwiOJe/1C3i +a/dfbCDIBLbG6tsK0LizzCccXT0kC2hHrn6IapZxQHfujI4/2hoIPMytfW7k/HZq +1zafc6xFeq063ZtXxDRNN/WmUcH7ipJE7G8/QBLEbebPLzlp8pIVifcCJ6WOwIUv +Y9gy+1n2926RpdB56mpLUWJ2B3KYucc7w9KRsJ+1EDgLyqGQ6RqT7JVpTZkTxKmL +3OSnHOeqmT4bFNjh8ERCqdU1sjV/PG/Vnk2hwILny6yZJNoNwNM47LOfyltH54ff +BiAgTFDiW2k8Rdi4F1Qk0aQBOOtAuibWs4gbM31SQplyaFo1sAJtVJS+DqG2n+eV +ozny2cp6zt2nEmNO3HvZNDl3t/BKkA/KjspfIXSHRwk6VC810jMPUavwBHQp8z0w +tt2U8moYy4tmgLHYObtg4jhMh0nEEsJFrDVfdYkOi64hXycU+BsNmMKHRkcAesIA +RR7MnEe+8Agr6obTMvmqOUrYg4RylQ49e03KEXLNpAW5vdQT/Z/CJs3jC7REJGw9 +KtOiptCt3NYtSS8tgw/d2fFHvq+zaRhV8Se/N8pF7UsSBeQl52zx0N4QQ5bjO2uW +VNwikcgUY8tp7WmxW8ttAN6IfIeAJ9diAu6ENt1c00V7tmfdvG6rnyEyCAYT7WQJ +uOq2mXr4fmyQez5kNK0UxMoaPkuBy+QHEyYrekZOZ5ZZFcjJs4xl8BfkQ0JLKrkU +Qr0yqPVsq/220CnoCtvVZkTMilqnasNVOM+rsxvU2hWRBZLEONdROTpttEexvo0u +VuOoVDpF8RC53kPHYPDiGlZFnNQ85wIUjb14Hl260iSaa1f9cJUa2IR7LT8I8WB0 +mWUEr+mQbNr2cXYqr+QRIBK2FnzdtXvybgy7N6vV8Ck2D2LL4ybpHJZOzhJrkyvE +zfAWJPSkrNgrVJxvsxybebO8Q4/tT3RBQzeqfVUPVLqjKywqkCamAFia5VSed1DV +XfsmitY1YTSu5H5MUFg4/pUPIg4jN8KFPL/we7eu8FjRnYb8Hla56npTzoiLHld3 +h26kOqXeMpJ6mNyVAOlRxp5Le7jln+m4ZvwhRXxwhxp64OlG78qIg2YaVPrVYSY2 +08snh8OOjG8WHlVxbKPw9gEnQmznHTMfkIzgxFZINyNCktx/VlZ4GTGy00XC/vO4 +s64WYnD+oo9tdWGJRKeQlog/SKn0G2ELIeirK7SRYmCmAPsnAGWvh//efXO7qFtK +bmw7q8XhYj2Ajc3767YObNSn2OhlH9CSk71/5QFlNynrUbudmZbuRTDCHFdLDSIY +sA//HGeQcePrMIhr5W2O3sPjPfQS4xlkyhsz5WjOclRUSTO4UpluTOzeClZcF+GH +c0mI2IbJSDj1qNpyNDEbe/vYiOXiIQ4YDFLaZbxxMK+PWDLQOs3hnWraOBHrOSCB +zrFcPp+oaq+9b2/Ghgj3Iwb6067tPzz9hfKH3CwvrsN7dF/6gCKmUgyvBESZEMu7 +Sx7GC8bRT3zfu41lTALwBRAbscmLeqdquauXrH2WLqkymiwMaiXIZ856w6LEA6yf +x+l/t6yd2qG7gjLLku4Kx+dlMSKZ5SWP9WwSYhXv1oHjpNQqKio4SN8UHVzRnIw1 +C0J8iO2XFzgV9MFE34trfcRej117Fi9K55ynJ/tGn2WigCc4bT2Yu9pRcdlyoksZ +kT0N9yVo1++OPXkwbtkbAaG9+knzrf864wUV8nnbDdjeIhQKXUVixXfY77ukJWEi +M9igRoV2D07bL2OqjjQ6axGHCaOI+KNnUk29GYEJxcxOhCQ3Qy4XY4vQYONzP7Ej +tW3rBPLEBojt1xFrOORBlg0NKSwKxAHrSwTJhGAmEGvoktqk0/KzR+Sm80QK9+vI +AYj/ikpg2hs6XfE75W7QsA6RUa+1CQPiOC70I/NQmpyUT07n0JLe45NJwE9dFlz3 +828/9JoqT4XYtGWhM+187aI3ZKvvXsSxD6XCgB5Tjjwrq6kVv13IF54jfGjKlRyo +YhGRWLHtja9hx5q9XtaJ0I8Vcv2EQivSSaF1O7nUlSd9yGcOzSaTj1pTuwk/nu4s +HHZLjQosmmLzd3Ca7EwU4AuQaDVOEcvFMx0zQLNd4IFf1pNs2baorOYVJ7jebc8d +LfCVE2sXYuwLz8ZYXJaHIG4ycxtNknJky3zeV1830NvZ7JjNw6NvFlq0M42O87h8 +z6j0/aR2DIasd9UPaG1jYVWWLqSgbFbLum2SoTRnQtuDZvNPBOZwO1PNCpv9iZbL +tv92hplcYvYm3c7DHFJO/URn83GwXfRYTEsinqPGlAFrvYcvICc84SYJg5niR1Zl +lTRQdG1/vR2yC0jGj64XFuuSiwMvtis8WKMEGVRrQZOWLrmKEQ6utw5UV4nwW90X +ZXtKtTHuzv9bQJmetYvBmr+UbxxyTnrbz8k6RerC+EUjKnONiCZjGOWncktAhKUn +X9Vh01B+CNCYWsl8/BkuBRyrnp0CSybuII66oqvSYCODCxNWvEF/dayr6La1Cxgu +ztxEqx5hIYZQZANBW/Ck+NGRKMzqlbs1PABt4fziNXTjRjwesLsb0P0xetUTkWVG +tQMAP8ckr0vY3KOeWJVFuht4pPSvaeEUgionypbPzEc6JFjhQ2kDgAPz1M2YZoU6 +zuFvKqlvtUa2y7dN0OF7PSRpI0gCUVJ8JDAYIs5zG4kluZEwPv0x28PAFQjke0WB +5KtXhKpvyDJ7/GO7ZB8jOy/0y9nzqEmT8fnqu/tYT0zxPtPApt2j91qs8PtNkhqD +9sGXDldhR2A+94PKxzheX83bPWj9v6JIslS+w11kb3zrZwBGGq/jAbCbEgzbAj6U +GUcD6oKoiMzpvsgGenA/U2gzsDYm1BzFyfmcuns69eyGbM5/4ZvZqNQu8yH2hCMy +r21ORH/CesandCaFZS8aweVUbSvX0wyIeoCn63Y91IDRjXOcJSfPbDj3MlxHYHkM +F2kZmeg/38nkRxIljizue3VuDrOPNSyXnuJ6llkcsvB0KGWkU3vD4rgd/FNlfZrG +Oi7/FMHAIydq+H/VwScKB14CoFRI0fgSPiS67QmzcA4jYDNqbmfrCdoAAfnoDG5U +HFX/cGVNBxO4ZpC9ZjBvPFkrb9Xll7eo5X9f5ihyflpycAfYvIsy+f4k9rOGSzf+ +KWo0Krqniacvz46lQ9BkJ3uN1t2ta3JhJCKtUloLpKMnfoxbpu24VzF/Pd2ds2MS +zPh1Agf9MC8XQWY3yRWeWuHnAdZQy8LGEMGerM00K9n3BlGBugrFCKPe3CX0Qq9u +dmMjbiFS0wD4yaccvZIo3gtETCw9G9chj12Ng7ddjcuH0h77hlVHv0s3py40/xY6 +XSvixTod1TIQRR4+d8FS/7cx4m2//ps28igXcVTSAlkPOj7mwkYMPhHJZsb883M3 +UjEsoLzHc7wV3kE9H7ZgHgQDMWo/UbRbQtWeBfQeGHuLcxXaVxMYb3JaJQX5IR2D +KLV3IyQkt3X8oeEawwqA4RrLdlGAFGDD9ELORcsbszVeJS44u2h6uABc7Csque+B +A5IPZN0bWDuI2qZPgsAvNp3ms/FWNq8BktAA3wZ6eRl2bGSwubMUQxfzTOus1wBL +LMvDy/q/kqbcfi0pZTvpR8jbDdOF7kUKF3fBpy7CgWBvHasdZi8u6stXlmUgnzYg +iOaJggGjHbITFjiZ9qHosopgh5KV0ZNhv4i60+cB8DC0wJS30BoNVIx+UPDW/DoG +6VefGpEU8lB8dPjCQM93AK8DNf0NCfxSfpgUZT5IhiTNd/o1F1juj1aZ8joeztC6 +RMvVsuGV0JkOa0EVZDOXEZDTkH0aYGOt6gLGU2tabAznZN+dESdT+FZjo7QF1nDL +kk3Z3KFX4i74ntXhZovYgKFv9Hf0G70Fe/ABRYwCx5CxKnBQubt5YatoZmbU+NCg +YioKBQ1PPs9X6g9z0Bo8mj1pRxbMOP/hkUczO415Hb+OdBlWzZrFC5u5CAI1mP1K +EFGWKYfr330pJ6XLdRY6/1zVoaIMfo2Rufd4d9dl+5g/EGFOE6cWPJLdiIW1yVwj +GNmxCG8baeI2UTfaHiEoPw9A1Z99FRoKsXJCcM5N0YWsdpJteUVP+ysV5RNr31PG +HqnZ2zp6mliTDIBoVVow0RVEBIEtgdKVdW+cdfxE/VU3DvAeM8JEwBC+aWV6T1KY +EhXMGNWtOoEqsM7zc2kXoqXkD8DOgJQmLv5mnUiUF0P5CQvfu8/GOCEdE6Qvx6vD ++f2+udk0BRGJLsMtpkxtQxPAq61La93Qxl3zbJKtTWq+8Z+kKuh7BlI3E5ATfKYR +zVglh6KOgXkYhIM9iNSRYp/CWHn8ce+tpu9OrWWqW1JEtqVjFp62LX7dreJbU3NK +wUUtJjpFvBZuk1hVABX1A8RCTz74DkqGWSSIwJq43fSDwnArpvlEPnCmc/Yby02P +UhkKNSPBDjjt7CsMzY6mJynuxTytan526gL1szL3v8Vbp5jutB0Sug1B8e5/Zo70 +rgi9e/IxwKQXcsSS8elTezemoh3GR69cj7qHMkhO3n+NzSemdCPHvV8VXChCbL3t +WHkShxF2gzwWVP2DmkMIb+709LIMJAlCr8JS3QOCfJ7sTuaLlT7X4OdNmlaHrmPN +z/N0qoe43BRMSUUopKl91307j3UNZ8mg+Y65VKSs4BFUPmEx4edoMO59JOWq5QQd +ceHlLIaXOtEMrxrYAFOo3hkrDqcFRsFkHiFENumXXwtbJTH1IbIrRzNaVZvFCsBx +vAjTfbqwVC+Ze6QCnUMibXXGxuD8LmRfxmcJ4YSZ4RTbU7+AGS6roVy5Uqji+agQ +e3tEKO8kh0kbuEUJhaOHGbfE6FNfyh6IAk4UeVYK2uhFNi9GsTFXVzW4eM/M251u +EEAvOGnUU7Ckt+eQ5myBtAZWkgc3sioLZW2qlpPYqc+VYdxG9X313gh2BhlxaQ9j +17k8De2hfwZoPCpdFBsX/b/tn+H0dGOxtWkkdaybJKOg5Itf9zK+P6lDEn23UYK8 +jMdpbJNiRpkwpUfXCa0IT6f2Nvonim8XXQSO7qTypQxgAq3il3srndd3OYgmIg/s +U2KrJBUbUGwu0TNysviTKOlfp8+xQBZK9aiesrl3quECEsxpBH/GXuxX6d1VFleF +jA7L8blbEByQG/9pYKycmXKNKg6txjCmlMRzYjLJMhZgu9KXrHXWaxRK3J906U4B +SjlmP1/GH5L2mV3MFXE4E0tevRDt2qeiG+zF1ZjM2FdqYK3m6nxA4c06paIx9gJJ +Z7r+IainDSdKDMaZzqFR3WFGTGotr58KdWCMWiVaPs8PWcpZNbRtyWwWbYqC3uL2 +7c6q+jISyJ0igg8TexXD1O8obS3X/2YmXaQIzbHiqQGMacEP/LUi9VjL0plLsGen +zSUACDJ+49SdLxdLCX1Tc5tdHMDX71StrL1bxFlXFbwJJHVthArnmT7nmD2XeV04 +0uFmHnkqdbnkY2saGaI/wfZREdWYJ8WGidnPVXPRqc4faPtTp9kIjWaImiXSyMV4 +z7k8X6iRE+SIGnmAaVwN8ViRu10bg2B9E5evAqrvodssn1lCuA/uOaRPSl2j2S7J +WhIBP27+0I/Ld4CS4nJT/EAxAEYZ8zwa8wE/sqme7hB71PDcmsC9YRxOGMJmBlSC +GOCWEafU71ZzcuyipeNs/XwANSa43FRUakhIKMw+gs/pe8AIsp7o35XzX9xMZjw5 +oRxFuGlNFg2SDFQQXqIKnPNcGVNjXZ6irDWxGxzgB/0BmoPC0RX/YiPB+qKwole7 +Af9m+4/LeKjVoXutyJb5aYbjFPMfL6CBln+zrIIP7Jhj83enL2/2PhrCrfB53Wav ++Z7vBbhtfJPeLq3L3tMMj6U2HrbvNV4zpvjq6K3C3rLayyvT8fPB4VUc62t1tqp8 +qOk7Q5oe2ITzvUH3ZdiuF9mjmO7hPMymkkp3FUR4eroQNKimbTMhZkAOfLl++jkB +iyMLUkmlqbF60qnk3Vg2e8QKt96o/49UlinEsYGKHt2o+bQa8p+81KkBf41DFqKq +LH0iapfCyLVvaMjBzqyH/cHc2Uv+tjDNABMJlY32h1Q6i1UFJ3cNIrih18zdw1+N +8H5MOzDmXOanGW+rxmyfwym+cdVNaltp1GZadj9H+/uMbQhVspavjrEVayI55KXY +OyyclsQpZCBKsNb9v+ut4WL/SMBKviN8D121udGqUk7WRbgay5c5DoQU6V3jyBGk +7SnAYvnOgtDarCvS0GPDItqyIte67fmqfFs/hj5EvYAIOuJeaLw5DwgRyzP8/bP7 +oOIIISaoxbIT1jFag3Fo4GsdvOWQTFQU+OhUvTYLUx0inAuWilihHSad3R1k1Fr0 +OQIou6Sli8edZkoGmrfuSbVXdaxooryvsVr4MsIn3hqErSloOwUQlDSa0O4gAHH4 +aJprZhi4Slhy3HVUlIVVGWbQph5ET1N1IPYA34R+PjBb06EFtTcfKJ3ShfgxSwW5 +5U9OG5FXCFkeijInu8r0Q00pKGqr1KaloK8msR+CtTpTwuuFdfkDFC70jl2FgUY0 +TDD97rR8XlWNAiuree1stuyRlzg+yhTIAoPuResY7X1JJJKS2MHk0oDEu6h8t49q +5hybu6FPwU1Z76TZYMXUZFsRhy0IXBsVXZjxYwHA4TxyGDLR2ivsgg4V7/f+ozyu +fmIKcmTNbuLf/NFmQJb3WIl+lqLGcY/+jWxrBdP84Ko7qwScvkLY30HhvMWN1We5 +wBEvBpPYGWlReD/UIwb6xh45qmTRlPcR2R+7BNO3nBpOm6L+30GLJiSVmAgPbVKg +rrF3iKOvitXr5rN6/vrpYoR3eo4pxXj1oVkny+Pp+HuH5yt/olO0tgNQZiRo/9Fj +J7A4OErGsVZfhRusQ238MYkaer3+NNJCB2dYeT8yfR5iFvrj1EAT6W7U90wGPJ7N +aDsVSegBAgV32FEcR5vFyu5TbrHJ6H90cnA62a7j08UQixwKEXLt+IM0kwiuBJIe +XzBvPyQ/Xb3aOOjGOos57ZIe/POVbCLE4/is8pKV0tvN0cIzyOSVxVvsbctNSbGq +cqiMBYeedr9VAEtN+mwNYucQkDNy+SJd4QEJEg/3EtpDQgl2X+tz9vmiYdmJE4yv +9gVTGhRha+sia5YSk8XuITx2/sqM4k8wSySBZGsxNsekRUyqTlNwpQhgy5PXofC5 +EdkRMlxA9q3D20YpVZ7aiEIqkIm/l89P4jhXOdQaAz1uiGVcOCTigBBZ48bhwDUy +6MZDuY+B1OfXQvsgoa2R1VGZs8d2I6KgMASYjhAPA5HGF7zMFYwm865CoQp1oyWA +Fe17JABUi9U+30MbSH9+D43VOH2K6eHOVkkBVy0XqSfsfqB4njRDbCXct5fMrGrT +zVltPNjzO43KVevxVHFAERB/sMvOaqUqqj3rQ4A59FwBjhr3GO5whs7DVnPytNAP +N1mm5zXlslZ9fwnxPIVf2/eLYdC7mYPvLgOuuC84rloE+K2ssVWHhaUkmP+618ZV +Y4w6S1oC8jo6QPeOu/sTUT61tpukPoQovLABxUYy+0Plrfq/KWDDsSw5QdlUq94R +NjnPPGaxS7409nDe5cvrLXQqY2uIo3pqqFTiS56m/2ZDGWwFn6b2Bw3kTN/uLTsa +ksl9jdQte7GDYBYj1CIvu7U7syOnFiBtpBfiY4kGen3ezV3Xi1MVqF7JYt/RqQQ9 +ptB9mehQChDjb+7lwmGPwigjQfVK4KScGgJfp0cr473XH/7qp8C4GRXR6N/GC2c3 +zJufnVsTWEiZhLU7DV2bVXQatxMSe46bBBQVmWXG2eJjxXEOgBbAEE61VNwLO7+V +4c403Sv3QwZBiXxik1YQWALZ4r1Suht53LWZYizxoQLZYUZXmPwI9s2037rEegFv +SR+li8fHxSv9G2wZRliWa1e5EAg2O1KCEiVLSe2vJZ5wh4h+9QM9vDXunUpqnzN2 +TOqf7zWlbWYtqW0SgBJaja3J44uW8xVDSWSt/OldtzzaSyYmKWnCvstrHhbWUIYt +ex5dHWgvMQLiOI40f0nglCisY7fJiOjYkmB5IPTec4eHzA3nR4JBi/CB1EQfhLKB +0faYv9cnYN1aVMZV5V5xPLnQdtPiXYfjMpvhYq6ppDJNRhJ04iTx4UGOAvButU2p +D8bJoq2OR426//ok0kO0nykahLxWZXxo5WW3cgSaB7hPmdlPigPkZN0iBetiy3C/ +Ye0STJd6PjG4lps421mkFO32p6uKuvH/sn0k4/6p+TSPSLLW7jQRA4Eb8HesPoBf +AnjRrw8zmau+CV1f+LS8BxZPm8U1Mr9Yq3B1rsTFCxz4kNZsjVE13sJ0KklkytG6 +fBkSEOjcbIOUXkVt6vJaR1VLDafRnB03MO6Ebg6rqReEUl5fMFax3K4L8K//QOuo +IQGPjxcHZpmOs3JQGydQsPn+0vESlYopbXhimA+E8YYYh172JuSBPHiGvxidYktR +uYgt42o+144v4oZaLEDylKItRs9raKH2ZyM4B9n9PuRHN076PsaWM7BBftumICGL +ctoIxjeQ4wwcqnVhUqw6pBO93tWajnA6h54YYSt9LFOEpaO5jtAgi1/7r1QhzreY +Un/hXUOI3CQztY68POgDd8YH80I34SItdiobcUkBN4k95gIJxtz9LFyla0NcfZrE +0OjVzbaSHzPA3XhW2qg33295MoyrZnF30lW+CC7HyiXPJwdVCt6/oOys40xT3m5v +ea4YK/cBUswDWN9cIxiQCxrG739rNAz8HksUvVq84PwtZRlUNuT2JM/7UZoetKVB +G4EFdqneCzDmmXToOuMZlB4x+uN5rxGT8r2opcKImh5UoogzrgcBDS2ZIfHOqnwY +BlYoWzfGOmSKw9m+l4WGUIHNIX8KNlPO6LyZ9lzqB+CGdgVr9/kE30uz31fCYXDh +VEm7zllY0XrbDFb5uU4zau9uRSSRQ+N3iZPkCTn2GSN6bkpnH3bJ8ne2GFcN2H6T +kHMKK2ecRM4iC+b8KvrKJ0KffH71A/ZHCuRfzzNszO6nsKvdtJ4jpC650LjTXuZt +wfDF5kG+kYqR6EUznKlHc+DFuymupNuAbnnOt63ci5hkgY3d2e+PDs2oCqyhRXny +V1tA6gGY/og4zrytRirLLFPdS4BRZDP/LqpKAQkP5tUENF6fptyG1VWLmq7DHI6e +h90IHxKFIPEji8/2XdGclF+jAcfdLvJNokmWQp/35152lbQbHSfmllupEZkvN+eC +85vMatSpZUdDovWt3OA+vnPbu7DPEAy2fzPUda0t23mn36KTKJJ+K6jiOwXjVjdq +HjVwLQ44hwTb3oQeYvQ8Gw7dJXTps+HvRe4xria8HTBcsPUhDp+9zAAznpEBGlwp +chQ9AxAcNKlx0Isn64b3JY9t5/IHe4cnTtEgt2Adj9WZjeeqdWHPcJjjQajrnh0q +pM+q0nFRNhT1eBL3yAGghYAl8DHhh1ZZaZZjOLzJMRju9ApNrMGRJ+fB9Nzcr1cy +4QeWYq4vcc2Vp6wdaW2tP7PvgPf/MNqT9vLzmoI7L6GOferLT9PtwAZgTwtK0AiX +M6B/LZI+GE7DNqsUe/YsWcjr6nfQBVd+R342wz4jbE2KuoL/UzKOJGJdDrSptHiY +Dp2j3eVX4DWqtHphL/tkSNR0FQj4j4nAvUIpVr9yYZEPpwfrGJzLzF+ZoYmQAP0+ +65+26vy6xl67nk0kwIU1khMalVHsU96q+h46vKfM6wDvxr3Q5b/PqNQWYy+DmNi4 +1YXZC1Ltub7UGUlICuA4pb3MxddkigmcooBff/8+teb6Uprk9rxcze30Ce3YrFQ0 +/jHK7ZkU/m4HRFH37D4I0StzcYKm//J7zrhAULWYvyeNXewZ96ODctTp5rl8sgFB +38ld+xqVyTxHC2FdWiSNDxhZetfWSD8umfP6XKIeZ9sU7OVgLWtW3vWdKK+KTM4h +v6baT/YQuw95cFywlpULwwW3u69cWUxFC63Veb/dbHsyXPMmJ1OcXxEK42oFYQUN +IZTvc06c0otdLf1FjT2bsP9aloJC+x5zWYehlUsI0wDvWe+FJkJ0GKxe1HmZTj4j +hWbfHmI0fPMdL7VmjbAL+4xsFVmXWYctc/vxdD8BUzzyq4mwXT+Q3Ei9VBc1rLWO +ibPBN1BYs5o4l7ApDnj+Zrl7esaeJG//kh46dAEJF2ECucMI2XShInDuMgYhwx+g +dVzVbJ+hN3R6GzNPlq+D/MAHwMApwnI59uVd1hHdchdMt6n5pu8Tgg9s8kw1ZDWe +e/5Mwz+ajVorWX+wCDpndT1mqYlAm+s5/zPE5lXyKXBBhfpbM5lvfozbCFMOzcpH +sRT+gy3Q4a3U/j9flmoh33V7SKtkbuUOC+pnv/ifOoCJT53ZsS1f4be9kjUFQTvp ++qJAQzQxwxXlDye9FjA2TbVqHTlwDi+6NUe7zU+VLN8mq+2bTaK2WTDFhfxRXHYp +mi5Qp+SVyXtAVWsPtvOoFBgeMF3NzWns6Iiqm2HMJ7iGVGvkkw6q1OIlE1L1dned +2MOVQRQ0t18V/8uskF4OcfWJNsx+qAdASbOkZmZ2pGAfh9l9TabSo9Wf+N1QEK+z +mozew666MP1QUdznyWA6aqc9ReAECkC91l9HZAGQC0cvusAt+cEj/5LjUfYDhgkE +O/Nxm0IIltyHVONnw0BSSDooRs/MidaMUkIXB3gLy/DUcsfvI9Wg6xkjkXHqMzqU +tbTn/auW+7QMTkGv5hSr5w6PCM4aZzsVcuTnsUTdXgteZ3ICUumcmDxoIceKtztz +3Hr/ZbjdgQ4Yz3E/02dtPikJIIEiyAFuA1C5mJ3A/wjIOjLQSjgazKv1YkFYkZiB +4R0VgO9SIiDmH/Y7kyMr0+A4BIgl9VQGchPCMU3gGV6yRI08sZYUb6eQ9gUf04Av +uylY7HTASeKq0Twj7SZ7UbTmNXRrxaHae+6O07oC3WpJMTBlOX1JxQu3QP+OCaAu +WiT5ITyXCCmezMwGoGr4kR1i6cLiLkB8AjnbMpVxFhp+kEBH9q5l/C1lWTYRAbXD +sPlAn8tUTe4PxUZUcz8NjVgdXBzMtqT+Bp3OjvlCbeqxYNhd25BEV6IwTDC2+zmJ +5ECvjC03JP4Pn9sA3HrxcMpMAAvgIoPdwn3m34VL2f1Da0izyJUV0j8ZRc+owAO1 +Q8i0tJllZzMcrJHDIv6AxuE++wsRkL3pOg0c7lRV9xVJGCaFHUzNjpf9tFjT7pHW +96UIEB7Ak5810aT5JvNfdAQ6tBMuHbeo8EPiJBaChlBIhzucT2mXhwBrzN8SCpp7 +OxmuiOIi3DmmVkeo6SYtTYJsth7UdKaG0AKLRq/ZmBCm7mDMNtRRgOutNsT/lSX4 +5/VcAeov6QaHTd9fJ5vOg7S54rg1UJh1p1Aip0S3KOqYKk74YnpV5rzpn3VO/yYS +Rp1XOyP+SqQK07Wjd90qwIts++5b+9peyH8pxE0h2PbLCQF7aJXMIl5mHK8+2vYX +/vWxTsuJT7YDKCWqDBnf/+0OWpNmGFL+4wYdcvyUQUJzIjLK0eO+ULmO2fiaSQib +3UmusYqdgesKcJV51SyquzdQ4cAkg9X7V8uqIckKbGP/hFs7ZcwOoJ2A7kzQwehQ +7DtS7S1R1G0tDXXNBauBo4ac9GkjQMyElQvMLVjzXr/6MmggnQSiXmvNNzCnR8Tn +tagJxM27wSS/wW9h0lg0P2GKaTyo00PoVsj8NvNmYSvx3C19i+rznEeeBuLb3oB5 +f/971ySbsI1i3Rd48pliCG3mZ/R71Mdee3DdM+fMKqApcI4NpHSaboH3ghrZzDb1 +IZ1ksFDKFH/bea7bTi97zCUqzPaUVcp1K+p3hcUDn2lPegzo4E8SvirtMjMjdAbo +Z4NhqqDy/73ZRB6tkqc0dHgqbQ6WFAvbrzquzHSuFViF7cGcN3Cyfgl3+wDI7ad7 +wEzRAoRIsz8JPKfdhUrZqXiPCVcViKd/jGtiRE7ThXjq+alBVD2qSTxhnjB8Bi34 +3yarjC93LZ5+n5CpSvWFcih77bUICxw75iMKFQ6wsq1n90Op2BIs9zNduI7itBKs +crGsVZ84m34DeQmQRWjAQn+N8XmQAr9DMpnzrkJiVISqWDONbgH3zE7qu1KGI4Jj +w5r4QVbBNM8aiuFzQGjzbWd2tFQYL4k+OL03L7k73jq0/V2Egb/qzPXbkbO2y3rP +mQZKsGt6xL2Jt/WyfVmTmWe5p/Vxx2ielmOgPoDciZQzMpHpmtfWG31RIpm+ObGq +qgE4k/riNvkc5d7upXjAoqORnYZYUAzMNtZXKSWnB90+pcHjuSITQM69e6O/3OXX +G5ogoGtOXqJfjZl8wSrJirSVifK5JA7ELEKIwR++n+cm0B4/Wdec/qVm0Ho8ntqN +Jd/PkmU3MgE/Z8IOaxDNc/05+RoClCUzFduBYUYD6/V4tjkG16mwasRraqbqKpFS +RLpY98fAI5omkm3ynY+tSKaEe6xkbLmaN7I9ReUOeUQ57nt5zR4sig/x3ohDAdFW +ZGgM+GxAUuDS6rSOGYCKn3AS4KHfDHZ8yCA1wcU9Kyc8WcgDSZX53Od93bRTMx50 +MxKKIbpL9ZuyUjHZWJ1AvgXdaMH2uhPTsKZAj2dX6Qs/PsvtBweDV557IM+8fEFK +UwNl/WT9iDqp8dT3pSa31O2Zb3EPMIGksDWmlxnUFNpdKOh3IcCXqaH03/QxHiW1 +taVmU8TNf3etQGISiiB2q5z0/s2+rVA6xy78bpUxT+oDqUPTGT3NijDbZ02rAl0V +vWY9y0U9fLQhO/YRrjWhB/nG53JwuGMF8xLcRNULiihR1JBVUZyTdtAScwd/B85j +/MdAa/ikq4t1X0me2r2NsQuEMSceJg6zEKzw2dAzaN0H2iWs/WJ0nqpfLK8k3mP8 +UrqisFL4AAuInPUm6FWPtyV6fqESDlnIQV4jPHZEiB1vu76Pb4XYzF+8v8mXf+BS ++z3V+WH/2l+klGzWzdUYhEgrVGuOiOOYqZxkVQ44CrS7ngw9OCWCbdkAZEkrHhuh +oSiKM0QNU635sHXRUS0n3DMtSiz1vBFWc0NT3tHinXBM7TyAUIFK+5JCG5vM5JQ7 +7N2qYVRa8+W4+RKx3hBYGtqflFTtlNAI3RZIPPL01I5GisPGeWKR8yAwpMrdi5Jy +lj/bp87BJ+bfq1x9Pwz6F4BDQYAgkvOLtQKPWZno401PgaIiYIAZWwHFBLN42QIG +ojf4HagGXOS6NjcqIe2imjBxRNRUQViFNvp0GVsgN7UlE5qj70meUsA1zCaF3nr0 +TS52VGz8WgOGnt2t6QGfqJHV5oGn8Igp9R497Lcy62YKa4U++OilwfswcKsdHgvc +XFtS4x+x5mkpYIWoIsz8S1L4MwkEtXBmt0aUCab2mch4neivYrN+DYB65bQLEXH5 +Hm9R06BSVZ1BVtYc8Al+5dap1tOQV3Kef/RpPpxeYhJi/SNVMR2o+cV7l0YxVSv7 +7ZAgXoTlnIqKPNWzpMMb63/2pK5WrOmPkxWh7M4P/zY4Ob3pMXFmPLKGK+08Q4i2 +taP1Dz3GNcO1f7p9SQZWhAhhkpGweFnC1bO8cgS/wFUjcWGVvIqZf6DphoJFLZZs +JBsU7Kc1z901Y2fMYqyPtwUWlOiee9OESjIh0SW9MmN2MnXHmExPz8bfUZuTDQV1 +DF/2c7aWPgZXDwkX2/UhKzYPWRYiDfJShnPUcqfqCklKznSdslpmQjjPwD2Q6Imo +yBdRu/hN1YhcvEgFKUbkaDxkM4zEyUzNM/mRnKnofZ2k2sWtrVueEo8fwgdWmh48 +iw5OpqX/UxwAD2Xf1ZvhhRxgJ+ebftjW1XOMsiDcKJnkfEQFiM/tQovCr51LtdkB +lQVELgMsJ6vpK0K/BtRrTWyetGOJTsE8hEjdavz2ijLsWI9qcakEVJXRQJzqrJcO +tNYUG9qeWD+IqFj8m4ZjhyHK7MYd9nA4yGNSs+BVu0RqkEiXZjXbvwOdbtpns2wS +UvfkKJ9wPZkDocj+RkZAOCi1hE5VjYtnshljoBlcnw4VkNJI0OfQ9nHf2SPS5Sun +PVRo1MCjWstCHWcRvBzZvoM4OghnKeIju27gB+1uCJq4spccSGssqrNWBvKgcGvB +w6hloRFyD74eKmv1TFGDdYxxVOQmx45888W5J49WJebcD8k+pmWaL+O7GUpl3S4l +SoljUETZ+sNV8oQsao9+SWrLADBwDYob/FfWveYXIC3Qn+31ymc8w/s4UYYYYSdl +2KNiWvnVBYFdkW3/nySuMkR68lm6Wu2Rweshhf8kblTsVxMCrr/FnWcO1kYktlOC +AQkw3QdS9bvxQrQdzeKtCuu3W7X1FZ1+pDO4z0+iij3nWJaBbs67cNRGdW0iM8lx +AH8Vg3E5xh7406Cs5tGJmw7DWG+IGNqdOCCVHJWAx1omZ+Vmtlt72RY3ODxb+ISp +WSlvpH2K5tmYRGOVZJauS9JGy2f/HPzlpOo5CnCtKcVMeTrchu4xSbo5vKeMh/n7 +CuVttZoQSn3g3tULIYLXI6kYid9Om8vPopRqu4ldG3QQofc7qvYcdDw+nRC3zrLR +BYNwmujIm6KK6cy/hCpJ5HZ95AP0O9+pouxo1nu6GESvn8Zcd7OBL2hja3jSH4sF +ztS8YvQikT93rbgJNAwKGqNDH0gCqxw6qf9IlHTrbOzQvHs36keJA1aMRc2ALklJ +2uuEnDRTLTpV4VUBJjLsg1AU7pwmdUyAgajC4D7caOu5QOpB3xzNswIs9vJZTJQt +QDMEeRhEqj5FGVhUXj0s9bEmvy6ywkXt6SYjnF9uvGsQ4vAGym45TZpEbOkmDG92 +1Mr3Vv1EjUgbCq1KNgxSP90STnu+tI7aVsZIWKjTNvtnDogjdwbdw6Yxdcoxahzf +pIe/zYLAuFbree7A9qG/Ksaw3mkE2pZG4Lf8aYm8tXLtO3AyjrVenRZAZAtV1Bqt +7pBWMV58ibrybVmFPQHMm58P67uIDRE/uBOJOHRMVyK97a4i3FWNIHx3NZr77UOh +C1HKae0XByRH6tSAdRr00sxHBpfX/rzCIlpIVyu/6AhXlY6nzKzQA/wT4lf4182D +W9N+8hoTFWMQv+XaVbO2yc1svQLowyYMnPLOWFoCXuA65PyUWIuEQcJweGLmmUIE +cF5QYRNjutc18GfYZ9wV3wyZ5tKzP5axwr5m6q1nzl+K9agyOetmjcs0l+LKhOcA +xTT9vmX/Y2dCc71Ec2uZ4Q/GXwSQaWPY090UQJ+5BgO0/WfDIk0ClPfEWmO16VtF +kIn5L2ZJ58e6vUXcojKGZUv16rhcUwycwq00OkN4dQV4jLlMo8zfWviM3IrCd7Wq +xartJucbtlSK7kk5Aj4iX6neOpt8LacmUuhJWM6Ft5gte0+Qx+60ZO5k6hEwl0RU +6dpvfP8QtVrP8UVTUh6SFD69Llwhyu7hUa0nV4xYJ+XJ7JcSL3pXQ49S8XzX5Trg +5PceFH28xHuD5S8PJUU/3c0peGQu7uhqoc0eJAOBXXYFRBZu6K1I5e/y8YAwMQzQ +0jyXVoPvqsEMZ7Z4WOwvNNRGSmPVcUho+84/MKtcgyDzeYPsDbf62OncS4vm1MmC +lMKl4dOYLc7AjeB2u8LO44Ugottl5l2c+sXcKehDhp3XSDvmiJABeaY9JrnoajiM +Hu54WxlErXh6WGkU4ypFWCHcpEsMWpVQGAiVKXLLt1k6F3xmg5EhCTTp1OBcrcMG +mAqw/rNNKQuecaQ1b6sHsTkPdL+VnGX2sLETq7FDJ7bx2ZJbZX1YX6mYoefkbCcy +oiSHLmHEFyKS6aXBLIn6XYDe+6HFzryrf7FnMpQE2KUeVDqSeNI3fcY7d76Vfy41 +dG0OMhwKllItkIKuDhhyOik2ttRpovPY7rgBwfy7Pz/cwJRxOXYJmNEgEeeSq1Pt +oneG4SOZXxf+w4rGecI27izKTb48qgtgMw18MrJ4mpyQOrUErxqHOZVTUHJbw6Kb +cfO6xGc/JH5paQj2jdMS7LuUzhGelaeVMpRJfno0mx1s7SQO4+Wxjk2TugJskRkh +mi41wr9RpS+tMEWW1v76swUMNEiD2XGWiOcxiPcpbqvCXi8dOeBdr8qWwFVoGcVf +nJZ9I6EkYBe3op5gwYLO+RzSlam06xbpNzrGtXkSXXXo0P7YMUi8LWJxDptbetks +QoqNsuM5lSl9ZFDRpybFBcrQnsjXejqBjkBac7OG2NiqPejvHZyPLZTuNztotbHC +pXG8xCJ6AsyiviCnR9ON5KImJBNIeV2dvpAY3UO4NNGJyvGJ50mGiI6pRdjjueT/ +vffhoUrot6W28svHRR8oJLDUKHUtmBV3Gyb6yMP1jA2ln4sWO9Xh/yE2vaT4C3zA +mWN5IG9Z2vRQn28FN4U9/Dw1TtWk+BTUAzf2bniaFqreDrik7Z5rJTGFyvFcO8+V +7RVXr0R9dGtw21PEwbib1rug52aubsUkLPa3TWHFspCMAml2YsDXRUhUt/D7jRBj +hbXOlWH0ckb37ApbDTpTbMESmHqkD9xTTu0OJEMoCtoErOecYssVQr5JQA/hHlhr +T7VT+ec8uGj1ocgKrKP6D9idn6iZq9ipG+iQipz/9d3J9dRuJw4CFa3h0vuO9VO9 +ZQJbBTYQbTfGhQS13CQ9+ZnIlOWvpuWCtClwNoStfMFotDpMdvIJWxfdvGvT1Kq2 +7Q1UuBilcrW1BFefBnrLdm8G1H52Nug8lhkiax6ycPPsH9g9ZYnusWOksi4aY/59 +PflfBdK27Mw2A3pgh1gcX6e6CKqhujSkLLBQUICZQSAFyUPmleOoO29iN0QSiOC8 +ALxdcReUooodvHHCd6Pro7Og5YmGegEXlCNAsfaZHPgcp2UKCY8lsJZCUzXL9Ofw +K/nvva8AC/tRf6og/flbpCiWvndueL5UbklSQ+cUDKpgCN6/k5hTqWoZIfrDJ/uY +VA59f9nggybcD6xnmJATX+GLYXTduCTmPR91+SqwZMzfjMNqvSBx52YjWZcQiK4k +W21L+vIsT9eQMCKH1XsHNXFynrX+OPFKGfQwI5IKhryHmhr9PkrJCNvRVtrW+xGc +DRsCEkmv9hNlOW3aBTVci9rTmwXc1ujuTKy/t8jK6lVLhBwrxqiH3pINtWrCUsv8 +/DtcYZtDg9t1VNY/0AnPShifUaG64+VqCJjDKVtZBZT+v/wduVGqoRCBBrWJcaMT +1YHwTjf1U4azlsH0b6QEDtuoDHvUyLboLrEk3Uqgips+ZGMm5cflgVtauiJ2t7f+ +lXk0JsWDIocnxl/qDh2HB/GsmAyVRoa9tX3beiO9y29gGULBM7P1hoVOFQL1LwZy +40bOMvqUXdhMVwVW5WJQ/Dg71XXFVHv/LyMyoJV/Crfl0rL7czXJxzS3NgMGyZjN +P7usZK2hax7/8/+EcQI2H2pRSJJvj4K+83PDQdud0U/anTNUD//cdLoDX7+jOrP1 +vLP3AgnZIEbEHPeFGqnJuqH+/52eIHQ7EIm+up8FIfeywnokqB901EfXqpgyoPqY +NF554pi39O3FyCjHX9bPVZMFDlYT5KhGa8GDpYqFiAfOeyEVsH4BVprMZCDU8qZN +WB6RwPUkTR9OHhCtY/a1cRjTcKOEO5UZOhNnIimEarN1cvhxBPR7vm8W6KMskTZA +T1lAOLps1vHNl9L+tLnEaPvwYa3KB+g3E1H+HM09gmB10C5gW1/B8LXesKbhjH7S +iLggpv/XDzAILFO1qctgqsE3pJbwYTzold8QadWGSTTbSzl1z9hfuiDqlwWqg3q1 +/cwUIOztH/VE2P0BsqFOOeBqNGqe+Rwl62pNHjGYYORWMqOFwOFzo4/BhXPLYRMg +fPKNtnGy/llT+VTPl/LsXmX3a/jDcoeFn26cOPeM/TIjbiR7HBB7IdEu0kozQMjv +sDuz0DBijMzwbpAYIC4HGwsBy1oDTTCKAI7DGaHtH+JLU4WYKUZ+FEIbRtqDC7P6 +gvpdWGyQXUzMffyGmJlQM2Tvbdv+N3w7cJBYvkLIvfGsmpgia4OESp7OeItTW7sc +Pw9kd9nxaRfdZXDPueryP0BzMfhLjCqjOVg7qlaOiMIG+WPCKlSSLYLEGqKUsMIB +6jHuMIhqFsLxntZlk5qNrrANz3SgUxQoplLfcTgrCQvmQNhT9SocOaw+ulza+Bee +FZkytux2L8sk+FSoFYVBsdMhDz90lxpy81jxsfpGMWW0YL3/Oa1xxqZj/omRKMqy +XTTSv+q0Cda7Oi6jOTlbfuWF8ni2fDa5Zye6M/yX6rrhZ68kytfSBTSd4mdAmXkr +pkA0dFyif0PWYyecKJBjrIj5t6AJyPerEhdni99EGM8Kv364Le6az2ci/SLjyvG2 +3pxHf+kJhGSr15L8X2zHIvXqA2IAkpJl70baUXH3p3DaQOfDWyEDTmEcX4KFeJYT +fRDvk67jWxnhVkCGLwu8/9UB2rL4WRRwK/5b6A8Lb8lRB6S+anSBIc08EDP8BUyJ +4dSWe1I1Limh7TL2vG63/U+rT5QGoUv3dItS/O+foY8ajP3qH2fR9J2k2nyq8j7d ++ELl1OwXbpWj0RImMA1QILmV6jBlX24oqBKLC4VNl7zc6LlptdnxxMg5C7kNLm1G +xHfaxZAp/N0qptqNq7VyJd/JVPVEKZuXtRxI6+MJC4LEqsDkgKQcTt2J8Q2lgKxW +n1+374d7byhiAgcYBgeL8JD23MTsh6LrWwlcueWhitw5u5PRnFalalgfjyc9UuPX +vDLSDKUnX89kBvZgnNAOovT3bWGqWiOpy49OWtkprI6RPY7tCFmF6WtDpgQ/LI+d +45WrtmxU4GQXOm7jAD3uJZYcqw7AHudiJnfSlVI6O2+kh8qlltGlmjOC7YSDJjmv +4YnlCq0N8OXwpnwAzg3skRD0if3SiNarBpr+iYfutnWaXxDVrVP8Kxp+lBbgyJwX +HSjZ+Mi/5/BoObVvCFE4NM/AJ2uhNPNGiR+drLHtn2cKft4tcgULJ3LaJ2cSu69H +F+rMh7IIkiSC5k54GJ2a/hfazh/+cwuEzHo+sGP7t5V+FFunW4lO2zmZsJTzGEOG +iwQN8pjeopENAn7Q6bP47FjaCLrsSTRm2ErZTvJQyAXnSz6K1eepBQ+J1tsKcd8g +Q+V5qXxDZNQ+exQCHjXQyt2tdiEWkw28jeckSVZveUGmm9C1PCJ+/Szpd1ZkUUBF +Akgw504ppZcM3uRJMkP0I9NqP1kg1pjnmmt4EKZ3P5Nfis1ovEuNe+12JVlWOSZ4 +r4ikcCNTHASkG6qdefwbwWZmg03gE8xfA4dy6aVX/wQ2QByjVjq4pn7+W1s18EiK +cM8ijFM+DjX10d5fTeC4XC78S7GEluvQxMpZF3xSQZyZomYhKJ/JDion8g+4APvj +BGRhFHiW3zWlobBqPUMRjTDMcefwffN1PhF+ZCVRNtFGg4RxLrR+fSFbytwwIjQx +jC4vJWBAyQoN9CxI9iSEqsVhZeIf/EWXgb1jaQ6/MYf8Y24pkhQdU3Qb+MLddoyt +YAolElXQRJxBGzDsTXoydmCFlzJw3qnhb3d21ljDMZG0V7vIwkc+eAb0ddLxIfg4 +NbKWRcwWz41+E6W/t7nBvbrctEfkcvK4ppCzhy/25gXUpg0gRMhhYV511TZYl8ks +/Cd/XvQYzrZUC9jzeDCDa1CRNtjlTHLU3AXQIShOhdEbT4Err91ssg582Kq+MdOC +/DqnB1rGCFMHerALZSCQ4KVxRH74m/H8JHbxMi6G/sQHL4oa3SqyhTlhru67O6vP +S0X9TkRY3uKKWzLO5iISoYgWzN4RUFu2tY8cRRFOLdjyYOxgr2o1gMCydcfsJUVQ +dRiNGdhl53YyMo8ZNILvxZ8bPrPPyMQ4e2wt0vRJK92hWESsW8KYpXU2EK/R4jMi +jrfDJZg7RzmqR7uOolSGciznyEtNB9MfCmT8GkhRO/U4i3fJbqQ6ZjUivDZUrA7E +vYrXUjIypJ9fTgq0FOQomv5fLAfvfD75MtcmMJ4ZOUzIPbzYzQNee/6KI97TRLX4 +/MU+0KGWz3uQH7wAKMjoUnZe20dRxnx0xQR3Y7Av3MPfwRxknMDs3ZeDrrg+M4Zd +x4VBWtm6xFi1RSbY88BvImpKf3hc2mg4u0fSyCNQxapdW8YLpkCqMhhfN2/NjE8h +k8zS8X+eh2istgvjM4kNUYBFfYuH8kjDtJLtrLaOl4Jqcop0ISsmFGOLxMEFGTSJ +wUj3sUwJEGuyBtLfETa8D6KkyD1y3ElOeUqgL5SS+g7QbPSC0arguO9RY+4y1UGW +XcZcgM04ycSsDlrVHAF0U8Y8rZcYpaZIeXT3teskr6tJPGL6v5PP3VI0TddpWne0 +NW0Uwj8WseWFyGQiHfFc1S6QcJ0Djq27AcquZ+D/Jj3LwFJSgwExRCtxckgdAMeQ +gnQEE5NeYc968MMLi6f0nL8p0u+27NjrAv0F25JKbRf9ouMAa0+TKaVe5SS027sT +pI8QmBBMzK7IwCaePzKO4raFZXHE9FeIA2kXVP05nzYb5iGUtxQtJQCnT3BR2Zqf +QtCAw3H15MzQcr4n2iNEzqfJBP0KXhE4JT/nHF0yWoZ+3ahYdmRf/VtmgNHU0Lbh +lfBEA7Tta0aCixEIuzJIh3LKiUtu40PTJu7HTfa9siIHHbN2PrNlW67gj8pgBZfE +YLeA+6nDcJIf+8MxMnzRCC3D9+9tL7tUNRj8nHKTPFPiOlSEdyLgEEkyg3cfJ9aZ +eCsilp94UZtIeGUhlofsQFUuXq0BP05Pc0mG2IBeEtBhghJ1wnFKhvz0u4k8GbHS +VCHbkkGaZYWHJ/Rt1oZz/W36BRvo6DIVAOq1/aOFHNSP8ms5QYas1oCkHYMfx3qL +pb2QJV1xBJMiKjAlRdOZKgVM0yCHpmwJ7qAZ/R3uZj0QNZnl3MDocLXRsNtdjoLl +hDlxR6H0JFgUJYE3PPN4UyGeZ2pzakttBOdP3Hr7I3rQDc8qtI6g4RjuYWyrwKZ7 +TgTgqqbuV2aasBs9d8y48OakA4p2Q2iQt0cZ7FisoFDLnRSOaxIe1igpYrZ9DTIz +PPW0xSmBrqFetYZI/0S7W2JnBMHRRYRLzAdnbwEUGePoPOtoByKRavXWySDfsp13 +IEdYhbtnMGsSFMyDmC2yxHVUsxC0tD7e2k5cgIf+XsY= diff --git a/eval/datasets/v0_9_prompts.yaml b/eval/datasets/v0_9_prompts.yaml deleted file mode 100644 index 0cd1279cfd..0000000000 --- a/eval/datasets/v0_9_prompts.yaml +++ /dev/null @@ -1,1151 +0,0 @@ -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 diff --git a/eval/datasets/v1_0_prompts.yaml b/eval/datasets/v1_0_prompts.yaml deleted file mode 100644 index afeaf8772e..0000000000 --- a/eval/datasets/v1_0_prompts.yaml +++ /dev/null @@ -1,915 +0,0 @@ -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 -urzzd/P4P/OS/fXQ/2s7hYMt8E+t6Pm7luBB9pJwvJqO+48/vqc8IHKWj4FZkYlf -6MQ8RkIvmjB6z5dcrC5w6lqebstc2w2VjNv+PTx/K9Qd8goYh8lZrdOAEQmAxwcO -E6cSzzThPg/qupm3zTXaXpFYW5jB4x/TnJM+Y5bE+J4+fT1FEOYRnXMYbe17E8/w -9PjLd+bYvVhM8+6mouAnTWXfKMj2Ju8ULW9XszusHYqX+GZQ7APSy1as64+tKOHz -WtVaUPjbmQ8GqIPgRtynNJeAGH6s5NmZSXOxMvaHbaYH0Arjdc7BmPblKFZtpRlA -MVRB2Mb3D+/B77V3BUDMtI1vTkKlLkgRcpxcbDydgFYLREex254/bxmnlyLHckYq -6/L+hGdR9Wev+1LUnV5buBobJtfHGGbCU4fQGRP+q+bNUIlv/PaI9SQQWop+WMmj -iVeqn7Id6LsP3PhTmLkW8ySn3JXe/jHovpecHdExzpN4Rt36QOwXilRgCElVe3h7 -CNds4nA7aAyUgfAcYQaYKG/6JksZOu3EjtuuR52EDk6ypKYGAoNOVDKD5UEURVN6 -d/LIbPAxZoFlrvg3pj1Aac+gsyYwMyyv0AOV2DEUjljnfSnmQ9RJVIIy1CMPCkCC -97nMSAhk6w8bAiF0pFzUOF6th8Kaov0aqCfecslKuUT7dGho6qMqZjy11OdDVruZ -6rTJkM1pcHRg8LSdRcLpdNJZI8oazXw172sKbxzdKurwsI0qTPDj1fI+PGEUM5vu -TAyyfqImsP59Xw3BjYAwIa4Ydg7lmLBnGzttAlVIIUh1lAjGLkSgtfLbVadf0wF6 -1V83be3sLiUF6w2LlEg7c7ed5q24dMBjF4WPOvVwcaczN4RSZsWI6muVt66xBZ0T -LImh49hr9r9xtxMfPuH+S5s3fGjsClyLcfwzizKp0ePKvr+85YzM/46WD1IZPE7g -H3UGxW63UjgY8nV2RhgonOs3Ey+73jcYf2/+5HwGGuo3b0aiEn0sjtbnNojoT/tY -661UsHeN8n+H2WE7Nwgt/v1c5Lt17X/RSA/OyECtYwL5cO+gzvDf0W7ltXNn0acr -cWC4k1lZPNrRKiN0IncAX6ahQ36EiO0VqK3viIhD1beFdwMlHqwZke4aV1Y5tzBq -mux8atv33PVZNoSedQdyUc+n1OBthA2MtMNSpk8VJmcmZ/C4aaL43Go/7J/AJBkM -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 -y/61ZuG/K8HZXBjnmBoXAQ== diff --git a/eval/tasks.py b/eval/tasks.py index d20bd50db9..d4ed9d5650 100644 --- a/eval/tasks.py +++ b/eval/tasks.py @@ -28,8 +28,7 @@ # Paths relative to the eval directory where we run inspect CURRENT_DIR = Path(__file__).resolve().parent -DATASET_PATH_V09 = (CURRENT_DIR / "datasets/v0_9_prompts.yaml").resolve() -DATASET_PATH_V10 = (CURRENT_DIR / "datasets/v1_0_prompts.yaml").resolve() +DATASET_PATH = (CURRENT_DIR / "datasets/prompts.yaml").resolve() GRADER_INSTRUCTIONS = """ After assessing the submitted answer, reply with 'GRADE: $LETTER' (without quotes) where LETTER is one of C, P or I. Please choose ONE option for the grade: either "C" for correct answers, "P" for partial credit, or "I" for incorrect answers. @@ -86,7 +85,7 @@ async def score(state, target): # pylint: disable=unused-argument scorer=[dummy_scorer()] ) - active_dataset_path = DATASET_PATH_V09 + active_dataset_path = DATASET_PATH active_version = "0.9.1" default_catalog_path = "specification/v0_9_1/catalogs/basic/catalog.json" @@ -94,7 +93,7 @@ async def score(state, target): # pylint: disable=unused-argument return Task( dataset=dataset, - solver=get_solver(strategy), + solver=get_solver(strategy, version=active_version), scorer=[ a2ui_scorer(version=active_version), measured_model_graded_qa( @@ -143,7 +142,7 @@ async def score(state, target): # pylint: disable=unused-argument scorer=[dummy_scorer()] ) - active_dataset_path = DATASET_PATH_V10 + active_dataset_path = DATASET_PATH active_version = "1.0" default_catalog_path = "specification/v1_0/catalogs/basic/catalog.json" @@ -151,7 +150,7 @@ async def score(state, target): # pylint: disable=unused-argument return Task( dataset=dataset, - solver=get_solver(strategy), + solver=get_solver(strategy, version=active_version), scorer=[ a2ui_scorer(version=active_version), measured_model_graded_qa( diff --git a/eval/tests/test_strategies.py b/eval/tests/test_strategies.py index ec13ff7658..700ce0b04d 100644 --- a/eval/tests/test_strategies.py +++ b/eval/tests/test_strategies.py @@ -24,7 +24,7 @@ async def test_a2ui_system_prompt(tmp_path): catalog_file = tmp_path / "catalog.json" catalog_file.write_text('{"catalogId": "https://a2ui.org/test_catalog", "components": {}}') - solver = a2ui_system_prompt() + solver = a2ui_system_prompt(version="0.9.1") state = TaskState( model=ModelName("mock/model"), @@ -86,14 +86,14 @@ def test_subagent_tool_solver(tmp_path): catalog_file = tmp_path / "catalog.json" catalog_file.write_text('{"catalogId": "test", "components": {}}') - solvers = subagent_tool_solver() + solvers = subagent_tool_solver(version="0.9.1") assert len(solvers) == 5 from a2ui_eval.strategies.express import express_solver def test_express_solver(): - solvers = express_solver() + solvers = express_solver(version="1.0") assert len(solvers) == 3 @pytest.mark.asyncio @@ -106,7 +106,7 @@ async def test_a2ui_express_solvers(): catalog_file = GIT_ROOT / "specification/v1_0/catalogs/basic/catalog.json" # 1. Test Prompt Solver - prompt_solver = a2ui_express_prompt() + prompt_solver = a2ui_express_prompt(version="1.0") state = TaskState( model=ModelName("mock/model"), sample_id=1, @@ -131,7 +131,7 @@ async def dummy_generate(state, **kwargs): assert "A2UI Express Output Contract" in state.messages[0].content # 2. Test Compile Solver - compile_solver = compile_express_dsl() + compile_solver = compile_express_dsl(version="1.0") state.output = ModelOutput( model="mock/model", choices=[ChatCompletionChoice(message=ChatMessageAssistant( From 8f68f380c01398be837c0e0b3906befa490eabdf Mon Sep 17 00:00:00 2001 From: Jia Hao Goh Date: Thu, 2 Jul 2026 04:42:39 +0000 Subject: [PATCH 2/6] fix(eval): address review comments on PR 1908 TAG=agy CONV=434bb731-15b5-4e15-8474-68d4f4d14636 --- eval/a2ui_eval/strategies/direct.py | 2 +- eval/a2ui_eval/strategies/express.py | 4 ++-- eval/a2ui_eval/strategies/subagent_tool.py | 4 +++- 3 files changed, 6 insertions(+), 4 deletions(-) diff --git a/eval/a2ui_eval/strategies/direct.py b/eval/a2ui_eval/strategies/direct.py index f5247e630a..9b515012c0 100644 --- a/eval/a2ui_eval/strategies/direct.py +++ b/eval/a2ui_eval/strategies/direct.py @@ -25,7 +25,7 @@ def a2ui_system_prompt(version: str) -> Solver: async def solve(state: TaskState, generate: Generate) -> TaskState: catalog_path = state.metadata['catalog'] # Resolve version if it is parameterized in the catalog path - catalog_path = catalog_path.format(version=version_to_dir_name(version)) + catalog_path = catalog_path.replace("{version}", version_to_dir_name(version)) resolved_catalog_path = str(GIT_ROOT / catalog_path) catalog_config = CatalogConfig.from_path("basic_catalog", resolved_catalog_path) diff --git a/eval/a2ui_eval/strategies/express.py b/eval/a2ui_eval/strategies/express.py index e009d85623..d4a8fd70bc 100644 --- a/eval/a2ui_eval/strategies/express.py +++ b/eval/a2ui_eval/strategies/express.py @@ -33,7 +33,7 @@ def a2ui_express_prompt(version: str) -> Solver: async def solve(state: TaskState, generate: Generate) -> TaskState: catalog_path = state.metadata['catalog'] # Resolve version if it is parameterized in the catalog path - catalog_path = catalog_path.format(version=version_to_dir_name(version)) + catalog_path = catalog_path.replace("{version}", version_to_dir_name(version)) resolved_catalog_path = str(GIT_ROOT / catalog_path) with open(resolved_catalog_path, "r", encoding="utf-8") as f: schema = json.load(f) @@ -56,7 +56,7 @@ async def solve(state: TaskState, generate: Generate) -> TaskState: catalog_path = state.metadata['catalog'] # Resolve version if it is parameterized in the catalog path - catalog_path = catalog_path.format(version=version_to_dir_name(version)) + catalog_path = catalog_path.replace("{version}", version_to_dir_name(version)) resolved_catalog_path = str(GIT_ROOT / catalog_path) # Initialize the catalog schema validator for parsing diff --git a/eval/a2ui_eval/strategies/subagent_tool.py b/eval/a2ui_eval/strategies/subagent_tool.py index ae02afea63..1cf99e5009 100644 --- a/eval/a2ui_eval/strategies/subagent_tool.py +++ b/eval/a2ui_eval/strategies/subagent_tool.py @@ -37,8 +37,10 @@ async def execute(input: str) -> str: """ version = store().get("version", "0.9.1") catalog_path = store().get("catalog") + if not catalog_path: + return "Error: Catalog path is missing from the store." # Resolve version if it is parameterized in the catalog path - catalog_path = catalog_path.format(version=version_to_dir_name(version)) + catalog_path = catalog_path.replace("{version}", version_to_dir_name(version)) resolved_catalog_path = str(GIT_ROOT / catalog_path) catalog_config = CatalogConfig.from_path("basic_catalog", resolved_catalog_path) From c5e9af6cc274109988515a031f261cdaf24bf409 Mon Sep 17 00:00:00 2001 From: Jia Hao Goh Date: Thu, 2 Jul 2026 04:46:18 +0000 Subject: [PATCH 3/6] fix(eval): raise ValueError on missing catalog path in subagent tool TAG=agy CONV=434bb731-15b5-4e15-8474-68d4f4d14636 --- eval/a2ui_eval/strategies/subagent_tool.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/eval/a2ui_eval/strategies/subagent_tool.py b/eval/a2ui_eval/strategies/subagent_tool.py index 1cf99e5009..3e20e7712f 100644 --- a/eval/a2ui_eval/strategies/subagent_tool.py +++ b/eval/a2ui_eval/strategies/subagent_tool.py @@ -38,7 +38,7 @@ async def execute(input: str) -> str: version = store().get("version", "0.9.1") catalog_path = store().get("catalog") if not catalog_path: - return "Error: Catalog path is missing from the store." + raise ValueError("Catalog path is missing from the store.") # Resolve version if it is parameterized in the catalog path catalog_path = catalog_path.replace("{version}", version_to_dir_name(version)) resolved_catalog_path = str(GIT_ROOT / catalog_path) From 03a453aa79dcd7c9ea43d8c442b161e093147b20 Mon Sep 17 00:00:00 2001 From: Jia Hao Goh Date: Thu, 2 Jul 2026 09:30:30 +0000 Subject: [PATCH 4/6] refactor(eval): resolve version placeholder in dataset loader and format code TAG=agy CONV=434bb731-15b5-4e15-8474-68d4f4d14636 --- eval/a2ui_eval/dataset.py | 76 ++-- eval/a2ui_eval/scorers.py | 161 +++++---- eval/a2ui_eval/shared/utils.py | 70 ++-- eval/a2ui_eval/strategies/__init__.py | 11 +- eval/a2ui_eval/strategies/direct.py | 57 ++- eval/a2ui_eval/strategies/express.py | 180 +++++----- eval/a2ui_eval/strategies/subagent_tool.py | 176 ++++----- eval/bin/report_evals.py | 399 +++++++++++---------- eval/bin/run_ci_evals.py | 261 ++++++++------ eval/datasets/defaults.py | 5 +- eval/main.py | 174 +++++---- eval/tasks.py | 202 ++++++----- eval/tests/test_dataset.py | 47 ++- eval/tests/test_run_ci_evals.py | 324 ++++++++--------- eval/tests/test_scorers.py | 227 ++++++------ eval/tests/test_strategies.py | 221 ++++++------ 16 files changed, 1395 insertions(+), 1196 deletions(-) diff --git a/eval/a2ui_eval/dataset.py b/eval/a2ui_eval/dataset.py index ac6ff2e5fd..edcbeb4356 100644 --- a/eval/a2ui_eval/dataset.py +++ b/eval/a2ui_eval/dataset.py @@ -22,46 +22,58 @@ from inspect_ai.dataset import MemoryDataset, Sample from datasets.defaults import DEFAULT_CATALOG_PATH, DEFAULT_WORKFLOW_DESCRIPTION, DEFAULT_ROLE_DESCRIPTION -from a2ui_eval.shared.utils import GIT_ROOT +from a2ui_eval.shared.utils import GIT_ROOT, version_to_dir_name -SCHEMA_PATH = GIT_ROOT / "eval" / "datasets" / "dataset_schema.json" +SCHEMA_PATH = GIT_ROOT / 'eval' / 'datasets' / 'dataset_schema.json' -def load_a2ui_dataset(file_path: str, default_catalog_path: str | None = None) -> MemoryDataset: - """Loads A2UI evaluation samples from a YAML file. - Args: - file_path: The path to the YAML dataset file. - default_catalog_path: The default catalog path to use if not specified in the sample. +def load_a2ui_dataset( + file_path: str, default_catalog_path: str | None = None, version: str | None = None +) -> MemoryDataset: + """Loads A2UI evaluation samples from a YAML file. - Returns: - A MemoryDataset containing the resolved samples. + Args: + file_path: The path to the YAML dataset file. + default_catalog_path: The default catalog path to use if not specified in the sample. - Raises: - FileNotFoundError: If the dataset file does not exist. - """ - if not os.path.exists(file_path): - raise FileNotFoundError(f"Dataset file not found: {file_path}") - - with open(file_path, 'r', encoding='utf-8') as f: - data = yaml.safe_load(f) + Returns: + A MemoryDataset containing the resolved samples. - with open(SCHEMA_PATH, 'r', encoding='utf-8') as f: - schema = json.load(f) - - jsonschema.validate(instance=data, schema=schema) - - samples = [] - for item in data: - samples.append(Sample( + Raises: + FileNotFoundError: If the dataset file does not exist. + """ + if not os.path.exists(file_path): + raise FileNotFoundError(f'Dataset file not found: {file_path}') + + with open(file_path, 'r', encoding='utf-8') as f: + data = yaml.safe_load(f) + + with open(SCHEMA_PATH, 'r', encoding='utf-8') as f: + schema = json.load(f) + + jsonschema.validate(instance=data, schema=schema) + + samples = [] + for item in data: + catalog_path = item.get('catalog') or default_catalog_path or DEFAULT_CATALOG_PATH + if version and catalog_path: + catalog_path = catalog_path.replace('{version}', version_to_dir_name(version)) + samples.append( + Sample( input=item['promptText'], target=item.get('target') or item.get('description'), metadata={ 'name': item.get('name'), 'description': item.get('description'), - 'catalog': item.get('catalog') or default_catalog_path or DEFAULT_CATALOG_PATH, - 'role_description': item.get('role_description') or DEFAULT_ROLE_DESCRIPTION, - 'workflow_description': item.get('workflow_description') or DEFAULT_WORKFLOW_DESCRIPTION, - } - )) - - return MemoryDataset(samples=samples) + 'catalog': catalog_path, + 'role_description': ( + item.get('role_description') or DEFAULT_ROLE_DESCRIPTION + ), + 'workflow_description': ( + item.get('workflow_description') or DEFAULT_WORKFLOW_DESCRIPTION + ), + }, + ) + ) + + return MemoryDataset(samples=samples) diff --git a/eval/a2ui_eval/scorers.py b/eval/a2ui_eval/scorers.py index 65b826a985..501500bde6 100644 --- a/eval/a2ui_eval/scorers.py +++ b/eval/a2ui_eval/scorers.py @@ -25,84 +25,93 @@ from a2ui.parser.parser import parse_response from .shared.utils import GIT_ROOT + @scorer(metrics=[accuracy()]) def a2ui_scorer(version: str): - """Scorer for A2UI evaluation using the Python SDK. - - Args: - version: The schema version to load (e.g. '0.9.1' or '1.0'). - - Returns: - An Inspect Scorer that validates the response against the schema and integrity rules. - """ - - async def score(state: TaskState, target: Target) -> Score: # pylint: disable=unused-argument - if not state.output: - return Score(value=0.0, explanation="No model output (generation failed or was interrupted)") - - catalog_path = state.metadata['catalog'] - resolved_catalog_path = str(GIT_ROOT / catalog_path) - - catalog_config = CatalogConfig.from_path("basic_catalog", resolved_catalog_path) - manager = A2uiSchemaManager(version=version, catalogs=[catalog_config]) - catalog = manager.get_selected_catalog() - validator = catalog.validator - - answer_text = state.output.completion or "" - try: - parts = parse_response(answer_text) - all_messages = [] - for part in parts: - if part.a2ui_json: - if isinstance(part.a2ui_json, list): - all_messages.extend(part.a2ui_json) - else: - all_messages.append(part.a2ui_json) - - if not all_messages: - return Score(value=0.0, answer=answer_text, explanation="No A2UI JSON found in response (tags missing or empty)") - - answer_text = json.dumps(all_messages, indent=2) - validator.validate(all_messages) - return Score(value=1.0, answer=answer_text, explanation="Valid A2UI payload") - except Exception as e: - return Score(value=0.0, answer=answer_text, explanation=str(e)) - - return score + """Scorer for A2UI evaluation using the Python SDK. + + Args: + version: The schema version to load (e.g. '0.9.1' or '1.0'). + + Returns: + An Inspect Scorer that validates the response against the schema and integrity rules. + """ + + async def score(state: TaskState, target: Target) -> Score: # pylint: disable=unused-argument + if not state.output: + return Score( + value=0.0, + explanation="No model output (generation failed or was interrupted)", + ) + + catalog_path = state.metadata["catalog"] + resolved_catalog_path = str(GIT_ROOT / catalog_path) + + catalog_config = CatalogConfig.from_path("basic_catalog", resolved_catalog_path) + manager = A2uiSchemaManager(version=version, catalogs=[catalog_config]) + catalog = manager.get_selected_catalog() + validator = catalog.validator + + answer_text = state.output.completion or "" + try: + parts = parse_response(answer_text) + all_messages = [] + for part in parts: + if part.a2ui_json: + if isinstance(part.a2ui_json, list): + all_messages.extend(part.a2ui_json) + else: + all_messages.append(part.a2ui_json) + + if not all_messages: + return Score( + value=0.0, + answer=answer_text, + explanation="No A2UI JSON found in response (tags missing or empty)", + ) + + answer_text = json.dumps(all_messages, indent=2) + validator.validate(all_messages) + return Score(value=1.0, answer=answer_text, explanation="Valid A2UI payload") + except Exception as e: + return Score(value=0.0, answer=answer_text, explanation=str(e)) + + return score + @scorer(metrics=[accuracy()]) def measured_model_graded_qa(model: str, instructions: str | None = None): - """Scorer that wraps model_graded_qa and records the token usage in metadata.""" - base_scorer = model_graded_qa(model=model, instructions=instructions) - - async def score(state: TaskState, target: Target) -> Score: - start_time = time.time() - - usage_before = sample_model_usage().get(model) - before_input = usage_before.input_tokens if usage_before else 0 - before_cr = usage_before.input_tokens_cache_read or 0 if usage_before else 0 - before_cw = usage_before.input_tokens_cache_write or 0 if usage_before else 0 - before_total_input = before_input + before_cr + before_cw - before_cached = before_cr + before_cw - before_output = usage_before.output_tokens if usage_before else 0 - - result = await base_scorer(state, target) - - duration = time.time() - start_time - - usage_after = sample_model_usage().get(model) - after_input = usage_after.input_tokens if usage_after else 0 - after_cr = usage_after.input_tokens_cache_read or 0 if usage_after else 0 - after_cw = usage_after.input_tokens_cache_write or 0 if usage_after else 0 - after_total_input = after_input + after_cr + after_cw - after_cached = after_cr + after_cw - after_output = usage_after.output_tokens if usage_after else 0 - - state.metadata["evaluation_duration_seconds"] = duration - state.metadata["evaluation_input_tokens"] = after_total_input - before_total_input - state.metadata["evaluation_output_tokens"] = after_output - before_output - state.metadata["evaluation_cached_tokens"] = after_cached - before_cached - - return result - - return score + """Scorer that wraps model_graded_qa and records the token usage in metadata.""" + base_scorer = model_graded_qa(model=model, instructions=instructions) + + async def score(state: TaskState, target: Target) -> Score: + start_time = time.time() + + usage_before = sample_model_usage().get(model) + before_input = usage_before.input_tokens if usage_before else 0 + before_cr = usage_before.input_tokens_cache_read or 0 if usage_before else 0 + before_cw = usage_before.input_tokens_cache_write or 0 if usage_before else 0 + before_total_input = before_input + before_cr + before_cw + before_cached = before_cr + before_cw + before_output = usage_before.output_tokens if usage_before else 0 + + result = await base_scorer(state, target) + + duration = time.time() - start_time + + usage_after = sample_model_usage().get(model) + after_input = usage_after.input_tokens if usage_after else 0 + after_cr = usage_after.input_tokens_cache_read or 0 if usage_after else 0 + after_cw = usage_after.input_tokens_cache_write or 0 if usage_after else 0 + after_total_input = after_input + after_cr + after_cw + after_cached = after_cr + after_cw + after_output = usage_after.output_tokens if usage_after else 0 + + state.metadata["evaluation_duration_seconds"] = duration + state.metadata["evaluation_input_tokens"] = after_total_input - before_total_input + state.metadata["evaluation_output_tokens"] = after_output - before_output + state.metadata["evaluation_cached_tokens"] = after_cached - before_cached + + return result + + return score diff --git a/eval/a2ui_eval/shared/utils.py b/eval/a2ui_eval/shared/utils.py index b4ee22c5ad..760c2adc1f 100644 --- a/eval/a2ui_eval/shared/utils.py +++ b/eval/a2ui_eval/shared/utils.py @@ -19,42 +19,44 @@ GIT_ROOT = (Path(__file__).resolve().parent / "../../..").resolve() + def version_to_dir_name(version: str) -> str: - """Converts a version string (e.g., '0.9.1') to a directory name (e.g., 'v0_9_1').""" - return "v" + version.replace(".", "_") + """Converts a version string (e.g., '0.9.1') to a directory name (e.g., 'v0_9_1').""" + return "v" + version.replace(".", "_") @solver def measured_generate() -> Solver: - """Solver that wraps generate() and records the duration in metadata.""" - async def solve(state: TaskState, generate: Generate) -> TaskState: - start_time = time.time() - - usage_before = sample_model_usage().get(str(state.model)) - before_input = usage_before.input_tokens if usage_before else 0 - before_cr = usage_before.input_tokens_cache_read or 0 if usage_before else 0 - before_cw = usage_before.input_tokens_cache_write or 0 if usage_before else 0 - before_total_input = before_input + before_cr + before_cw - before_cached = before_cr + before_cw - before_output = usage_before.output_tokens if usage_before else 0 - - state = await generate(state) - - duration = time.time() - start_time - - usage_after = sample_model_usage().get(str(state.model)) - after_input = usage_after.input_tokens if usage_after else 0 - after_cr = usage_after.input_tokens_cache_read or 0 if usage_after else 0 - after_cw = usage_after.input_tokens_cache_write or 0 if usage_after else 0 - after_total_input = after_input + after_cr + after_cw - after_cached = after_cr + after_cw - after_output = usage_after.output_tokens if usage_after else 0 - - state.metadata["inference_duration_seconds"] = duration - state.metadata["inference_input_tokens"] = after_total_input - before_total_input - state.metadata["inference_output_tokens"] = after_output - before_output - state.metadata["inference_cached_tokens"] = after_cached - before_cached - - return state - - return solve + """Solver that wraps generate() and records the duration in metadata.""" + + async def solve(state: TaskState, generate: Generate) -> TaskState: + start_time = time.time() + + usage_before = sample_model_usage().get(str(state.model)) + before_input = usage_before.input_tokens if usage_before else 0 + before_cr = usage_before.input_tokens_cache_read or 0 if usage_before else 0 + before_cw = usage_before.input_tokens_cache_write or 0 if usage_before else 0 + before_total_input = before_input + before_cr + before_cw + before_cached = before_cr + before_cw + before_output = usage_before.output_tokens if usage_before else 0 + + state = await generate(state) + + duration = time.time() - start_time + + usage_after = sample_model_usage().get(str(state.model)) + after_input = usage_after.input_tokens if usage_after else 0 + after_cr = usage_after.input_tokens_cache_read or 0 if usage_after else 0 + after_cw = usage_after.input_tokens_cache_write or 0 if usage_after else 0 + after_total_input = after_input + after_cr + after_cw + after_cached = after_cr + after_cw + after_output = usage_after.output_tokens if usage_after else 0 + + state.metadata["inference_duration_seconds"] = duration + state.metadata["inference_input_tokens"] = after_total_input - before_total_input + state.metadata["inference_output_tokens"] = after_output - before_output + state.metadata["inference_cached_tokens"] = after_cached - before_cached + + return state + + return solve diff --git a/eval/a2ui_eval/strategies/__init__.py b/eval/a2ui_eval/strategies/__init__.py index 5335b3e69a..a13fec71ee 100644 --- a/eval/a2ui_eval/strategies/__init__.py +++ b/eval/a2ui_eval/strategies/__init__.py @@ -23,9 +23,10 @@ "express": express_solver, } + def get_solver(strategy: str, version: str) -> list[Solver]: - """Returns the solver chain for the specified evaluation strategy.""" - if strategy not in STRATEGIES: - raise ValueError(f"Unknown evaluation strategy: {strategy}") - - return STRATEGIES[strategy](version) + """Returns the solver chain for the specified evaluation strategy.""" + if strategy not in STRATEGIES: + raise ValueError(f"Unknown evaluation strategy: {strategy}") + + return STRATEGIES[strategy](version) diff --git a/eval/a2ui_eval/strategies/direct.py b/eval/a2ui_eval/strategies/direct.py index 9b515012c0..1069d7f8b9 100644 --- a/eval/a2ui_eval/strategies/direct.py +++ b/eval/a2ui_eval/strategies/direct.py @@ -16,38 +16,35 @@ from inspect_ai.model import ChatMessageSystem from a2ui.schema.manager import A2uiSchemaManager from a2ui.schema.catalog import CatalogConfig -from ..shared.utils import GIT_ROOT, measured_generate, version_to_dir_name +from ..shared.utils import GIT_ROOT, measured_generate + @solver def a2ui_system_prompt(version: str) -> Solver: - """Solver to inject A2UI schema and catalog into the system prompt using SDK.""" - - async def solve(state: TaskState, generate: Generate) -> TaskState: - catalog_path = state.metadata['catalog'] - # Resolve version if it is parameterized in the catalog path - catalog_path = catalog_path.replace("{version}", version_to_dir_name(version)) - resolved_catalog_path = str(GIT_ROOT / catalog_path) - - catalog_config = CatalogConfig.from_path("basic_catalog", resolved_catalog_path) - manager = A2uiSchemaManager(version=version, catalogs=[catalog_config]) - - role_description = state.metadata['role_description'] - workflow_description = state.metadata['workflow_description'] - - prompt = manager.generate_system_prompt( - role_description=role_description, - workflow_description=workflow_description, - include_schema=True, - ) - - state.messages.insert(0, ChatMessageSystem(content=prompt)) - return state - - return solve + """Solver to inject A2UI schema and catalog into the system prompt using SDK.""" + + async def solve(state: TaskState, generate: Generate) -> TaskState: + catalog_path = state.metadata['catalog'] + resolved_catalog_path = str(GIT_ROOT / catalog_path) + + catalog_config = CatalogConfig.from_path('basic_catalog', resolved_catalog_path) + manager = A2uiSchemaManager(version=version, catalogs=[catalog_config]) + + role_description = state.metadata['role_description'] + workflow_description = state.metadata['workflow_description'] + + prompt = manager.generate_system_prompt( + role_description=role_description, + workflow_description=workflow_description, + include_schema=True, + ) + + state.messages.insert(0, ChatMessageSystem(content=prompt)) + return state + + return solve + def direct_solver(version: str) -> list[Solver]: - """Returns the solver chain for the 'direct' evaluation strategy.""" - return [ - a2ui_system_prompt(version), - measured_generate() - ] + """Returns the solver chain for the 'direct' evaluation strategy.""" + return [a2ui_system_prompt(version), measured_generate()] diff --git a/eval/a2ui_eval/strategies/express.py b/eval/a2ui_eval/strategies/express.py index d4a8fd70bc..49d8dbfbd7 100644 --- a/eval/a2ui_eval/strategies/express.py +++ b/eval/a2ui_eval/strategies/express.py @@ -15,6 +15,7 @@ import json import os import re + os.environ["A2UI_EXPRESS_ENABLED"] = "true" from inspect_ai.solver import Solver, solver, TaskState, Generate from inspect_ai.model import ChatMessageSystem, ModelOutput, ChatCompletionChoice, ChatMessageAssistant, ChatMessageUser @@ -24,97 +25,108 @@ from a2ui.experimental.express.parser import parse_express_response from a2ui.schema.manager import A2uiSchemaManager from a2ui.schema.catalog import CatalogConfig -from ..shared.utils import GIT_ROOT, measured_generate, version_to_dir_name +from ..shared.utils import GIT_ROOT, measured_generate + @solver def a2ui_express_prompt(version: str) -> Solver: - """Solver to inject A2UI Express prompt contract instructions.""" - - async def solve(state: TaskState, generate: Generate) -> TaskState: - catalog_path = state.metadata['catalog'] - # Resolve version if it is parameterized in the catalog path - catalog_path = catalog_path.replace("{version}", version_to_dir_name(version)) - resolved_catalog_path = str(GIT_ROOT / catalog_path) - with open(resolved_catalog_path, "r", encoding="utf-8") as f: - schema = json.load(f) - catalog = Catalog.from_json(schema, spec_version=version) - generator = ExpressPromptGenerator(catalog) - prompt = generator.generate_prompt() - state.messages.insert(0, ChatMessageSystem(content=prompt)) - return state - - return solve + """Solver to inject A2UI Express prompt contract instructions.""" + + async def solve(state: TaskState, generate: Generate) -> TaskState: + catalog_path = state.metadata["catalog"] + resolved_catalog_path = str(GIT_ROOT / catalog_path) + with open(resolved_catalog_path, "r", encoding="utf-8") as f: + schema = json.load(f) + catalog = Catalog.from_json(schema, spec_version=version) + generator = ExpressPromptGenerator(catalog) + prompt = generator.generate_prompt() + state.messages.insert(0, ChatMessageSystem(content=prompt)) + return state + + return solve @solver def compile_express_dsl(version: str) -> Solver: - """Solver to compile generated A2UI Express DSL back to standard JSON.""" - - async def solve(state: TaskState, generate: Generate) -> TaskState: - if not state.output or not state.output.completion: - return state - - catalog_path = state.metadata['catalog'] - # Resolve version if it is parameterized in the catalog path - catalog_path = catalog_path.replace("{version}", version_to_dir_name(version)) - resolved_catalog_path = str(GIT_ROOT / catalog_path) - - # Initialize the catalog schema validator for parsing - catalog_config = CatalogConfig.from_path("basic_catalog", resolved_catalog_path) - manager = A2uiSchemaManager(version=version, catalogs=[catalog_config]) - catalog = manager.get_selected_catalog() - validator = catalog.validator - - completion = state.output.completion.strip() - - # Try to extract target surface ID from the prompt input - prompt_text = state.input_text - surface_id_match = re.search( - r"surface(?:Id|\s+Id)?(?:\s+of)?\s+['\"]([^'\"]+)['\"]", - prompt_text, - re.IGNORECASE + """Solver to compile generated A2UI Express DSL back to standard JSON.""" + + async def solve(state: TaskState, generate: Generate) -> TaskState: + if not state.output or not state.output.completion: + return state + + catalog_path = state.metadata["catalog"] + resolved_catalog_path = str(GIT_ROOT / catalog_path) + + # Initialize the catalog schema validator for parsing + catalog_config = CatalogConfig.from_path("basic_catalog", resolved_catalog_path) + manager = A2uiSchemaManager(version=version, catalogs=[catalog_config]) + catalog = manager.get_selected_catalog() + validator = catalog.validator + + completion = state.output.completion.strip() + + # Try to extract target surface ID from the prompt input + prompt_text = state.input_text + surface_id_match = re.search( + r"surface(?:Id|\s+Id)?(?:\s+of)?\s+['\"]([^'\"]+)['\"]", + prompt_text, + re.IGNORECASE, + ) + surface_id = surface_id_match.group(1) if surface_id_match else "main" + + try: + # 1. Parse and compile DSL to JSON + parts = parse_express_response(completion, catalog, surface_id=surface_id) + compiled_json = None + for p in parts: + if p.a2ui_json: + compiled_json = ( + p.a2ui_json[0] if isinstance(p.a2ui_json, list) else p.a2ui_json + ) + break + + if not compiled_json: + raise ValueError( + "No compiled A2UI Express DSL JSON payload found in parsed parts." ) - surface_id = surface_id_match.group(1) if surface_id_match else "main" - - try: - # 1. Parse and compile DSL to JSON - parts = parse_express_response(completion, catalog, surface_id=surface_id) - compiled_json = None - for p in parts: - if p.a2ui_json: - compiled_json = p.a2ui_json[0] if isinstance(p.a2ui_json, list) else p.a2ui_json - break - - if not compiled_json: - raise ValueError("No compiled A2UI Express DSL JSON payload found in parsed parts.") - - # 2. Validate using catalog schema validator (runs integrity checker too) - validator.validate([compiled_json]) - - # 3. Successful compilation and validation: format and yield - messages = [compiled_json] - formatted = f"\n{json.dumps(messages, indent=2)}\n" - state.output = ModelOutput( - model=state.output.model, - choices=[ChatCompletionChoice(message=ChatMessageAssistant(content=formatted))] - ) - - except Exception as e: - state.output = ModelOutput( - model=state.output.model, - choices=[ChatCompletionChoice(message=ChatMessageAssistant( - content=f"Compilation/validation failed: {e}\nRaw output:\n{completion}" - ))] - ) - - return state - - return solve + + # 2. Validate using catalog schema validator (runs integrity checker too) + validator.validate([compiled_json]) + + # 3. Successful compilation and validation: format and yield + messages = [compiled_json] + formatted = f"\n{json.dumps(messages, indent=2)}\n" + state.output = ModelOutput( + model=state.output.model, + choices=[ + ChatCompletionChoice(message=ChatMessageAssistant(content=formatted)) + ], + ) + + except Exception as e: + state.output = ModelOutput( + model=state.output.model, + choices=[ + ChatCompletionChoice( + message=ChatMessageAssistant( + content=( + f"Compilation/validation failed: {e}\nRaw" + f" output:\n{completion}" + ) + ) + ) + ], + ) + + return state + + return solve + def express_solver(version: str) -> list[Solver]: - """Returns the solver chain for the 'express' evaluation strategy.""" - return [ - a2ui_express_prompt(version), - measured_generate(), - compile_express_dsl(version) - ] + """Returns the solver chain for the 'express' evaluation strategy.""" + return [ + a2ui_express_prompt(version), + measured_generate(), + compile_express_dsl(version), + ] diff --git a/eval/a2ui_eval/strategies/subagent_tool.py b/eval/a2ui_eval/strategies/subagent_tool.py index 3e20e7712f..7a56170c87 100644 --- a/eval/a2ui_eval/strategies/subagent_tool.py +++ b/eval/a2ui_eval/strategies/subagent_tool.py @@ -20,7 +20,7 @@ from a2ui.schema.manager import A2uiSchemaManager from a2ui.schema.catalog import CatalogConfig from a2ui.parser.parser import parse_response -from ..shared.utils import GIT_ROOT, measured_generate, version_to_dir_name +from ..shared.utils import GIT_ROOT, measured_generate from .direct import a2ui_system_prompt @@ -29,91 +29,107 @@ @tool def a2ui_specialist() -> Tool: - async def execute(input: str) -> str: - """Generates strictly compliant A2UI JSON payloads. Call this tool when the user requests a UI layout. - - Args: - input: The UI layout request. - """ - version = store().get("version", "0.9.1") - catalog_path = store().get("catalog") - if not catalog_path: - raise ValueError("Catalog path is missing from the store.") - # Resolve version if it is parameterized in the catalog path - catalog_path = catalog_path.replace("{version}", version_to_dir_name(version)) - resolved_catalog_path = str(GIT_ROOT / catalog_path) - - catalog_config = CatalogConfig.from_path("basic_catalog", resolved_catalog_path) - manager = A2uiSchemaManager(version=version, catalogs=[catalog_config]) - - role_description = store().get("role_description") - workflow_description = store().get("workflow_description") - - system_content = manager.generate_system_prompt( - role_description=role_description, - workflow_description=workflow_description, - include_schema=True, + async def execute(input: str) -> str: + """Generates strictly compliant A2UI JSON payloads. Call this tool when the user requests a UI layout. + + Args: + input: The UI layout request. + """ + version = store().get("version", "0.9.1") + catalog_path = store().get("catalog") + if not catalog_path: + raise ValueError("Catalog path is missing from the store.") + resolved_catalog_path = str(GIT_ROOT / catalog_path) + + catalog_config = CatalogConfig.from_path("basic_catalog", resolved_catalog_path) + manager = A2uiSchemaManager(version=version, catalogs=[catalog_config]) + + role_description = store().get("role_description") + workflow_description = store().get("workflow_description") + + system_content = manager.generate_system_prompt( + role_description=role_description, + workflow_description=workflow_description, + include_schema=True, + ) + + messages = [ + ChatMessageSystem(content=system_content), + ChatMessageUser(content=input), + ] + + output = await get_model().generate(messages) + if output.completion: + try: + parts = parse_response(output.completion) + all_messages = [] + for part in parts: + if part.a2ui_json: + if isinstance(part.a2ui_json, list): + all_messages.extend(part.a2ui_json) + else: + all_messages.append(part.a2ui_json) + payload = json.dumps(all_messages, indent=2) + store().set(PAYLOAD_STORE_KEY, payload) + return "Success: The UI has been generated and saved out-of-band." + except Exception as e: + return ( + f"Error: Failed to parse A2UI response: {str(e)}. Please make sure your" + " response contains valid A2UI JSON enclosed in ..." + " tags." ) - - messages = [ - ChatMessageSystem(content=system_content), - ChatMessageUser(content=input) - ] - - output = await get_model().generate(messages) - if output.completion: - try: - parts = parse_response(output.completion) - all_messages = [] - for part in parts: - if part.a2ui_json: - if isinstance(part.a2ui_json, list): - all_messages.extend(part.a2ui_json) - else: - all_messages.append(part.a2ui_json) - payload = json.dumps(all_messages, indent=2) - store().set(PAYLOAD_STORE_KEY, payload) - return "Success: The UI has been generated and saved out-of-band." - except Exception as e: - return f"Error: Failed to parse A2UI response: {str(e)}. Please make sure your response contains valid A2UI JSON enclosed in ... tags." - - return "Error: Failed to generate the UI." - - return execute + + return "Error: Failed to generate the UI." + + return execute + @solver def push_metadata_to_store(version: str) -> Solver: - """Pushes metadata from the TaskState to the global store for tools to access.""" - async def solve(state: TaskState, generate: Generate) -> TaskState: - state.store.set("version", version) - state.store.set("catalog", state.metadata.get('catalog')) - state.store.set("role_description", state.metadata.get('role_description')) - state.store.set("workflow_description", state.metadata.get('workflow_description')) - return state - return solve + """Pushes metadata from the TaskState to the global store for tools to access.""" + + async def solve(state: TaskState, generate: Generate) -> TaskState: + state.store.set("version", version) + state.store.set("catalog", state.metadata.get("catalog")) + state.store.set("role_description", state.metadata.get("role_description")) + state.store.set("workflow_description", state.metadata.get("workflow_description")) + return state + + return solve + @solver def extract_subagent_payload() -> Solver: - """Extracts the A2UI payload from the tool response messages.""" - async def solve(state: TaskState, generate: Generate) -> TaskState: - payload = state.store.get(PAYLOAD_STORE_KEY) - - if payload is not None and state.output and state.output.choices: - formatted_payload = f"\n{payload}\n" - state.output = ModelOutput( - model=state.output.model, - choices=[ChatCompletionChoice(message=ChatMessageAssistant(content=formatted_payload))] - ) - return state - return solve + """Extracts the A2UI payload from the tool response messages.""" + + async def solve(state: TaskState, generate: Generate) -> TaskState: + payload = state.store.get(PAYLOAD_STORE_KEY) + + if payload is not None and state.output and state.output.choices: + formatted_payload = f"\n{payload}\n" + state.output = ModelOutput( + model=state.output.model, + choices=[ + ChatCompletionChoice( + message=ChatMessageAssistant(content=formatted_payload) + ) + ], + ) + return state + + return solve + def subagent_tool_solver(version: str) -> list[Solver]: - """Returns the solver chain for the 'subagent_tool' evaluation strategy.""" - return [ - system_message("You are a helpful assistant. To fulfill UI requests, you MUST delegate to the `a2ui_specialist` tool."), - # Tools cannot access TaskState directly, so we must bridge the metadata into the store - push_metadata_to_store(version), - use_tools([a2ui_specialist()]), - measured_generate(), - extract_subagent_payload() - ] + """Returns the solver chain for the 'subagent_tool' evaluation strategy.""" + return [ + system_message( + "You are a helpful assistant. To fulfill UI requests, you MUST delegate to" + " the `a2ui_specialist` tool." + ), + # Tools cannot access TaskState directly, so we must bridge the metadata into the store + push_metadata_to_store(version), + use_tools([a2ui_specialist()]), + measured_generate(), + extract_subagent_payload(), + ] diff --git a/eval/bin/report_evals.py b/eval/bin/report_evals.py index 488739dd66..c351f46b03 100755 --- a/eval/bin/report_evals.py +++ b/eval/bin/report_evals.py @@ -24,212 +24,239 @@ def extract_accuracy(log_data: dict) -> float: - """Extracts accuracy from parsed JSON log data. + """Extracts accuracy from parsed JSON log data. - Args: - log_data: Parsed JSON data from inspect log dump. + Args: + log_data: Parsed JSON data from inspect log dump. - Returns: - The accuracy score as a float. + Returns: + The accuracy score as a float. - Raises: - ValueError: If scores or accuracy are not found or invalid. - """ - scores = log_data.get("results", {}).get("scores", []) - if not scores: - raise ValueError("No scores found in log file.") + Raises: + ValueError: If scores or accuracy are not found or invalid. + """ + scores = log_data.get("results", {}).get("scores", []) + if not scores: + raise ValueError("No scores found in log file.") - metrics = scores[0].get("metrics", {}) - accuracy_obj = metrics.get("accuracy") or {} - accuracy = accuracy_obj.get("value") + metrics = scores[0].get("metrics", {}) + accuracy_obj = metrics.get("accuracy") or {} + accuracy = accuracy_obj.get("value") - if accuracy is None: - raise ValueError("Could not find accuracy metric in log file.") + if accuracy is None: + raise ValueError("Could not find accuracy metric in log file.") - return float(accuracy) + return float(accuracy) -def print_results_summary(log_data: dict): - """Prints a summary of the results for each sample. - - Args: - log_data: Parsed JSON data from inspect log dump. - """ - samples = log_data.get("samples", []) - print("\n=== Evaluation Results Summary ===") - durations = [] - for sample in samples: - name = sample.get("metadata", {}).get("name") or f"Sample {sample.get('id')}" - scores = sample.get("scores", {}) - - # Algorithmic validity (a2ui_scorer) - a2ui_score = scores.get("a2ui_scorer", {}) - a2ui_passed = a2ui_score.get("value") == 1.0 - a2ui_str = "PASS" if a2ui_passed else "FAIL" - - # Judging results (measured_model_graded_qa) - qa_score = scores.get("measured_model_graded_qa", {}) - qa_val = qa_score.get("value", "N/A") - - inference_time = None - for event in sample["events"]: - if event["event"] == "model": - inference_time = event.get("working_time") or event.get("duration") - break - if inference_time is None: - inference_time = sample.get("metadata", {}).get("evaluation_duration_seconds") - inference_time_str = f"{float(inference_time):.2f}s" if inference_time is not None else "N/A" - - print(f"{name:<25} | Algorithmic: {a2ui_str:<4} | Judging: {qa_val:<2} | Inference Time: {inference_time_str}") - - if not a2ui_passed or qa_val != "C": - if not a2ui_passed: - print(f" [Algorithmic Failure Reason]:") - expl = a2ui_score.get('explanation') or "No explanation provided." - for line in expl.splitlines(): - print(f" {line}") - if qa_val != "C": - print(f" [Judging Failure Reason (Grade {qa_val})]:") - expl = qa_score.get('explanation') or "No explanation provided." - for line in expl.splitlines(): - print(f" {line}") - - if inference_time is not None: - durations.append(float(inference_time)) +def print_results_summary(log_data: dict): + """Prints a summary of the results for each sample. + + Args: + log_data: Parsed JSON data from inspect log dump. + """ + samples = log_data.get("samples", []) + print("\n=== Evaluation Results Summary ===") + durations = [] + for sample in samples: + name = sample.get("metadata", {}).get("name") or f"Sample {sample.get('id')}" + scores = sample.get("scores", {}) + + # Algorithmic validity (a2ui_scorer) + a2ui_score = scores.get("a2ui_scorer", {}) + a2ui_passed = a2ui_score.get("value") == 1.0 + a2ui_str = "PASS" if a2ui_passed else "FAIL" + + # Judging results (measured_model_graded_qa) + qa_score = scores.get("measured_model_graded_qa", {}) + qa_val = qa_score.get("value", "N/A") + + inference_time = None + for event in sample["events"]: + if event["event"] == "model": + inference_time = event.get("working_time") or event.get("duration") + break + if inference_time is None: + inference_time = sample.get("metadata", {}).get("evaluation_duration_seconds") + inference_time_str = ( + f"{float(inference_time):.2f}s" if inference_time is not None else "N/A" + ) + + print( + f"{name:<25} | Algorithmic: {a2ui_str:<4} | Judging: {qa_val:<2} | Inference" + f" Time: {inference_time_str}" + ) + + if not a2ui_passed or qa_val != "C": + if not a2ui_passed: + print(f" [Algorithmic Failure Reason]:") + expl = a2ui_score.get("explanation") or "No explanation provided." + for line in expl.splitlines(): + print(f" {line}") + if qa_val != "C": + print(f" [Judging Failure Reason (Grade {qa_val})]:") + expl = qa_score.get("explanation") or "No explanation provided." + for line in expl.splitlines(): + print(f" {line}") + + if inference_time is not None: + durations.append(float(inference_time)) + + print("==================================") + if durations: + avg_duration = statistics.mean(durations) + med_duration = statistics.median(durations) + print( + f"Inference Time - Average: {avg_duration:.2f}s | Median: {med_duration:.2f}s" + ) print("==================================") - if durations: - avg_duration = statistics.mean(durations) - med_duration = statistics.median(durations) - print(f"Inference Time - Average: {avg_duration:.2f}s | Median: {med_duration:.2f}s") - print("==================================") - - -def generate_markdown_summary(log_data: dict, accuracy_percentage: float, threshold: float) -> str: - """Generates a markdown summary of the evaluation results. - - Args: - log_data: Parsed JSON data from inspect log dump. - accuracy_percentage: The calculated accuracy percentage. - threshold: The threshold to compare against. - - Returns: - A string containing the markdown summary. - """ - eval_spec = log_data.get("eval", {}) or {} - task_name = eval_spec.get("task", "Unknown Task") - model_name = eval_spec.get("model", "Unknown Model") - - status_str = "PASS" if accuracy_percentage >= threshold else "FAIL" - - lines = [] - lines.append(f"### Evaluation Summary: {task_name}") - lines.append(f"- **Status**: {status_str}") - lines.append(f"- **Model**: `{model_name}`") - lines.append(f"- **Pass Percentage**: `{accuracy_percentage:.2f}%` (Threshold: `{threshold:.2f}%`)") - lines.append("") - lines.append("#### Sample Results") - lines.append("| Sample / Task | Algorithmic | Judging | Inference Time | Status |") - lines.append("| :--- | :---: | :---: | :---: | :---: |") - - samples = log_data.get("samples", []) or [] - failures = [] - - for sample in samples: - name = sample.get("metadata", {}).get("name") or f"Sample {sample.get('id')}" - scores = sample.get("scores", {}) or {} - - # Algorithmic validity (a2ui_scorer) - a2ui_score = scores.get("a2ui_scorer", {}) or {} - a2ui_passed = a2ui_score.get("value") == 1.0 - a2ui_str = "PASS" if a2ui_passed else "FAIL" - - # Judging results (measured_model_graded_qa) - qa_score = scores.get("measured_model_graded_qa", {}) or {} - qa_val = qa_score.get("value", "N/A") - - inference_time = sample.get("metadata", {}).get("evaluation_duration_seconds") - inference_time_str = f"{float(inference_time):.2f}s" if inference_time is not None else "N/A" - - # Overall sample status - sample_passed = a2ui_passed and qa_val == "C" - sample_status_str = "PASS" if sample_passed else "FAIL" - - lines.append(f"| {name} | {a2ui_str} | {qa_val} | {inference_time_str} | {sample_status_str} |") - - if not sample_passed: - failures.append((name, a2ui_passed, a2ui_score.get('explanation'), qa_val, qa_score.get('explanation'))) - - lines.append("") - - if failures: - lines.append("#### Failure Details") - for name, a2ui_passed, a2ui_expl, qa_val, qa_expl in failures: - lines.append(f"##### {name}") - if not a2ui_passed: - lines.append("- **Algorithmic Failure Reason**:") - if a2ui_expl: - for line in str(a2ui_expl).strip().splitlines(): - lines.append(f" > {line}") - else: - lines.append(" > No explanation provided.") - if qa_val != "C": - lines.append(f"- **Judging Failure Reason (Grade {qa_val})**:") - if qa_expl: - for line in str(qa_expl).strip().splitlines(): - lines.append(f" > {line}") - else: - lines.append(" > No explanation provided.") - lines.append("") - - return "\n".join(lines) + + +def generate_markdown_summary( + log_data: dict, accuracy_percentage: float, threshold: float +) -> str: + """Generates a markdown summary of the evaluation results. + + Args: + log_data: Parsed JSON data from inspect log dump. + accuracy_percentage: The calculated accuracy percentage. + threshold: The threshold to compare against. + + Returns: + A string containing the markdown summary. + """ + eval_spec = log_data.get("eval", {}) or {} + task_name = eval_spec.get("task", "Unknown Task") + model_name = eval_spec.get("model", "Unknown Model") + + status_str = "PASS" if accuracy_percentage >= threshold else "FAIL" + + lines = [] + lines.append(f"### Evaluation Summary: {task_name}") + lines.append(f"- **Status**: {status_str}") + lines.append(f"- **Model**: `{model_name}`") + lines.append( + f"- **Pass Percentage**: `{accuracy_percentage:.2f}%` (Threshold:" + f" `{threshold:.2f}%`)" + ) + lines.append("") + lines.append("#### Sample Results") + lines.append("| Sample / Task | Algorithmic | Judging | Inference Time | Status |") + lines.append("| :--- | :---: | :---: | :---: | :---: |") + + samples = log_data.get("samples", []) or [] + failures = [] + + for sample in samples: + name = sample.get("metadata", {}).get("name") or f"Sample {sample.get('id')}" + scores = sample.get("scores", {}) or {} + + # Algorithmic validity (a2ui_scorer) + a2ui_score = scores.get("a2ui_scorer", {}) or {} + a2ui_passed = a2ui_score.get("value") == 1.0 + a2ui_str = "PASS" if a2ui_passed else "FAIL" + + # Judging results (measured_model_graded_qa) + qa_score = scores.get("measured_model_graded_qa", {}) or {} + qa_val = qa_score.get("value", "N/A") + + inference_time = sample.get("metadata", {}).get("evaluation_duration_seconds") + inference_time_str = ( + f"{float(inference_time):.2f}s" if inference_time is not None else "N/A" + ) + + # Overall sample status + sample_passed = a2ui_passed and qa_val == "C" + sample_status_str = "PASS" if sample_passed else "FAIL" + + lines.append( + f"| {name} | {a2ui_str} | {qa_val} | {inference_time_str} |" + f" {sample_status_str} |" + ) + + if not sample_passed: + failures.append(( + name, + a2ui_passed, + a2ui_score.get("explanation"), + qa_val, + qa_score.get("explanation"), + )) + + lines.append("") + + if failures: + lines.append("#### Failure Details") + for name, a2ui_passed, a2ui_expl, qa_val, qa_expl in failures: + lines.append(f"##### {name}") + if not a2ui_passed: + lines.append("- **Algorithmic Failure Reason**:") + if a2ui_expl: + for line in str(a2ui_expl).strip().splitlines(): + lines.append(f" > {line}") + else: + lines.append(" > No explanation provided.") + if qa_val != "C": + lines.append(f"- **Judging Failure Reason (Grade {qa_val})**:") + if qa_expl: + for line in str(qa_expl).strip().splitlines(): + lines.append(f" > {line}") + else: + lines.append(" > No explanation provided.") + lines.append("") + + return "\n".join(lines) def load_log_data(log_path: str) -> dict: - """Runs inspect log dump to get JSON and parses it. + """Runs inspect log dump to get JSON and parses it. - Args: - log_path: Path to the .eval log file. + Args: + log_path: Path to the .eval log file. - Returns: - Parsed JSON data as a dictionary. - """ - dump_cmd = ["uv", "run", "inspect", "log", "dump", log_path] - dump_output = subprocess.check_output(dump_cmd, text=True) - return json.loads(dump_output) + Returns: + Parsed JSON data as a dictionary. + """ + dump_cmd = ["uv", "run", "inspect", "log", "dump", log_path] + dump_output = subprocess.check_output(dump_cmd, text=True) + return json.loads(dump_output) def main(): - parser = argparse.ArgumentParser(description="Report results from an Inspect AI eval log file.") - parser.add_argument("log", type=str, help="Path to the .eval log file.") - args = parser.parse_args() + parser = argparse.ArgumentParser( + description="Report results from an Inspect AI eval log file." + ) + parser.add_argument("log", type=str, help="Path to the .eval log file.") + args = parser.parse_args() - if not os.path.exists(args.log): - print(f"Error: Log file not found: {args.log}") - sys.exit(1) + if not os.path.exists(args.log): + print(f"Error: Log file not found: {args.log}") + sys.exit(1) - print(f"Processing log file: {args.log}") + print(f"Processing log file: {args.log}") + + try: + log_data = load_log_data(args.log) + + # Print summary of results per sample + print_results_summary(log_data) try: - log_data = load_log_data(args.log) - - # Print summary of results per sample - print_results_summary(log_data) - - try: - accuracy = extract_accuracy(log_data) - percentage = accuracy * 100 - print(f"Pass percentage: {percentage:.2f}%") - sys.exit(0) - except ValueError as e: - print(f"Error: {e}") - sys.exit(1) - - except subprocess.CalledProcessError as e: - print(f"Error running inspect log dump: {e}") - sys.exit(e.returncode) - except Exception as e: - print(f"Error processing log file: {e}") - sys.exit(1) + accuracy = extract_accuracy(log_data) + percentage = accuracy * 100 + print(f"Pass percentage: {percentage:.2f}%") + sys.exit(0) + except ValueError as e: + print(f"Error: {e}") + sys.exit(1) + + except subprocess.CalledProcessError as e: + print(f"Error running inspect log dump: {e}") + sys.exit(e.returncode) + except Exception as e: + print(f"Error processing log file: {e}") + sys.exit(1) + if __name__ == "__main__": - main() + main() diff --git a/eval/bin/run_ci_evals.py b/eval/bin/run_ci_evals.py index affba35db9..3f5ee7cb28 100755 --- a/eval/bin/run_ci_evals.py +++ b/eval/bin/run_ci_evals.py @@ -28,124 +28,163 @@ # Automatically override Inspect AI's connection rate-limiter limit to prevent queuing delays in latency measurements os.environ["INSPECT_MAX_CONNECTIONS"] = "50" -def check_threshold(percentage: float, threshold: float) -> bool: - """Compares percentage with threshold. - Args: - percentage: The calculated pass percentage. - threshold: The threshold to compare against. +def check_threshold(percentage: float, threshold: float) -> bool: + """Compares percentage with threshold. - Returns: - True if percentage >= threshold, False otherwise. - """ - return percentage >= threshold + Args: + percentage: The calculated pass percentage. + threshold: The threshold to compare against. + Returns: + True if percentage >= threshold, False otherwise. + """ + return percentage >= threshold def build_main_command(args: argparse.Namespace, seed: str) -> list[str]: - """Builds the command line arguments for main.py. - - Args: - args: Parsed command line arguments. - seed: The random seed to use. - - Returns: - A list of strings representing the command. - """ - cmd = [ - "uv", "run", "python", "main.py", - "--model", args.model, - "--sample-shuffle", seed, - "--log-dir", f"logs/{seed}", - "--max-retries", "10", - "--grading-model", args.grading_model - ] - if args.max_samples != 0: - cmd.extend(["--limit", str(args.max_samples)]) - return cmd + """Builds the command line arguments for main.py. + + Args: + args: Parsed command line arguments. + seed: The random seed to use. + + Returns: + A list of strings representing the command. + """ + cmd = [ + "uv", + "run", + "python", + "main.py", + "--model", + args.model, + "--sample-shuffle", + seed, + "--log-dir", + f"logs/{seed}", + "--max-retries", + "10", + "--grading-model", + args.grading_model, + ] + if args.max_samples != 0: + cmd.extend(["--limit", str(args.max_samples)]) + return cmd + def main(): - parser = argparse.ArgumentParser(description="Run A2UI evals for CI.") - parser.add_argument("--max-samples", type=int, default=100, help="Maximum number of samples to evaluate. Set to 0 for all samples. Default is 100.") - parser.add_argument("--threshold", type=float, default=0.0, help="Pass percentage threshold (0-100). Default is 0.0.") - parser.add_argument("--model", type=str, default="google/gemini-3.5-flash", help="Model used to evaluate tasks. Default is google/gemini-3.5-flash.") - parser.add_argument("--grading-model", type=str, default="google/gemini-3.5-flash", help="Model used for grading. Default is google/gemini-3.5-flash.") - args = parser.parse_args() - - # Find eval root (directory above bin) - script_dir = os.path.dirname(os.path.abspath(__file__)) - eval_root = os.path.dirname(script_dir) - - os.chdir(eval_root) - - seed = datetime.datetime.now(datetime.timezone.utc).strftime("%Y%m%d") - print(f"Running evals with seed: {seed} and max samples: {args.max_samples}") - - log_dir = os.path.join(eval_root, "logs", seed) - if os.path.exists(log_dir): - shutil.rmtree(log_dir) - os.makedirs(log_dir, exist_ok=True) - - cmd = build_main_command(args, seed) - - print(f"Executing: {' '.join(cmd)}") - - result = subprocess.run(cmd, capture_output=False, text=True) - - log_files = glob.glob(os.path.join(log_dir, "*.eval")) - if not log_files: - print("Error: No log files generated by main.py.") - sys.exit(result.returncode if result.returncode != 0 else 1) - - all_passed = True - summaries = [] - for log_file in log_files: - print(f"\n=======================================================") - print(f"Determining pass percentage from log file: {os.path.basename(log_file)}") - try: - log_data = load_log_data(log_file) - - print_results_summary(log_data) - - accuracy = extract_accuracy(log_data) - percentage = accuracy * 100 - print(f"Pass percentage: {percentage}%") - - # Generate and accumulate markdown summary - try: - summary_md = generate_markdown_summary(log_data, percentage, args.threshold) - summaries.append(summary_md) - except Exception as e: - print(f"Warning: Failed to generate markdown summary: {e}") - - if not check_threshold(percentage, args.threshold): - print(f"Error: Pass percentage {percentage}% is less than threshold {args.threshold}%") - all_passed = False - else: - print("Pass percentage check passed.") - except ValueError as e: - print(f"Error extracting metrics: {e}") - all_passed = False - except Exception as e: - print(f"Error processing log file: {e}") - all_passed = False - - # Write consolidated summary if we have summaries - if summaries: - summary_path = os.path.join(eval_root, "eval_summary.md") - try: - with open(summary_path, "w", encoding="utf-8") as f: - f.write("\n\n---\n\n".join(summaries)) - print(f"Wrote evaluation summary to: {summary_path}") - except Exception as e: - print(f"Error writing summary file: {e}") - - if not all_passed: - print("\nCI Failed: One or more evaluation strategies did not meet the threshold or encountered an error.") - sys.exit(1) - - print("\nCI Passed: All evaluation strategies met the threshold.") - sys.exit(0) + parser = argparse.ArgumentParser(description="Run A2UI evals for CI.") + parser.add_argument( + "--max-samples", + type=int, + default=100, + help=( + "Maximum number of samples to evaluate. Set to 0 for all samples. Default is" + " 100." + ), + ) + parser.add_argument( + "--threshold", + type=float, + default=0.0, + help="Pass percentage threshold (0-100). Default is 0.0.", + ) + parser.add_argument( + "--model", + type=str, + default="google/gemini-3.5-flash", + help="Model used to evaluate tasks. Default is google/gemini-3.5-flash.", + ) + parser.add_argument( + "--grading-model", + type=str, + default="google/gemini-3.5-flash", + help="Model used for grading. Default is google/gemini-3.5-flash.", + ) + args = parser.parse_args() + + # Find eval root (directory above bin) + script_dir = os.path.dirname(os.path.abspath(__file__)) + eval_root = os.path.dirname(script_dir) + + os.chdir(eval_root) + + seed = datetime.datetime.now(datetime.timezone.utc).strftime("%Y%m%d") + print(f"Running evals with seed: {seed} and max samples: {args.max_samples}") + + log_dir = os.path.join(eval_root, "logs", seed) + if os.path.exists(log_dir): + shutil.rmtree(log_dir) + os.makedirs(log_dir, exist_ok=True) + + cmd = build_main_command(args, seed) + + print(f"Executing: {' '.join(cmd)}") + + result = subprocess.run(cmd, capture_output=False, text=True) + + log_files = glob.glob(os.path.join(log_dir, "*.eval")) + if not log_files: + print("Error: No log files generated by main.py.") + sys.exit(result.returncode if result.returncode != 0 else 1) + + all_passed = True + summaries = [] + for log_file in log_files: + print(f"\n=======================================================") + print(f"Determining pass percentage from log file: {os.path.basename(log_file)}") + try: + log_data = load_log_data(log_file) + + print_results_summary(log_data) + + accuracy = extract_accuracy(log_data) + percentage = accuracy * 100 + print(f"Pass percentage: {percentage}%") + + # Generate and accumulate markdown summary + try: + summary_md = generate_markdown_summary(log_data, percentage, args.threshold) + summaries.append(summary_md) + except Exception as e: + print(f"Warning: Failed to generate markdown summary: {e}") + + if not check_threshold(percentage, args.threshold): + print( + f"Error: Pass percentage {percentage}% is less than threshold" + f" {args.threshold}%" + ) + all_passed = False + else: + print("Pass percentage check passed.") + except ValueError as e: + print(f"Error extracting metrics: {e}") + all_passed = False + except Exception as e: + print(f"Error processing log file: {e}") + all_passed = False + + # Write consolidated summary if we have summaries + if summaries: + summary_path = os.path.join(eval_root, "eval_summary.md") + try: + with open(summary_path, "w", encoding="utf-8") as f: + f.write("\n\n---\n\n".join(summaries)) + print(f"Wrote evaluation summary to: {summary_path}") + except Exception as e: + print(f"Error writing summary file: {e}") + + if not all_passed: + print( + "\nCI Failed: One or more evaluation strategies did not meet the threshold or" + " encountered an error." + ) + sys.exit(1) + + print("\nCI Passed: All evaluation strategies met the threshold.") + sys.exit(0) + if __name__ == "__main__": - main() + main() diff --git a/eval/datasets/defaults.py b/eval/datasets/defaults.py index 702eb36f77..0b63174bf9 100644 --- a/eval/datasets/defaults.py +++ b/eval/datasets/defaults.py @@ -15,7 +15,10 @@ from pathlib import Path DEFAULT_CATALOG_PATH = "specification/v0_9/catalogs/basic/catalog.json" -DEFAULT_ROLE_DESCRIPTION = "You are an AI assistant. Based on the following request, generate a stream of JSON messages that conform to the provided JSON Schemas." +DEFAULT_ROLE_DESCRIPTION = ( + "You are an AI assistant. Based on the following request, generate a stream of JSON" + " messages that conform to the provided JSON Schemas." +) DEFAULT_WORKFLOW_DESCRIPTION = """ Additional Rules: diff --git a/eval/main.py b/eval/main.py index 4dea0f72fa..666f05be18 100644 --- a/eval/main.py +++ b/eval/main.py @@ -23,72 +23,124 @@ # Automatically override Inspect AI's connection rate-limiter limit to prevent queuing delays in latency measurements os.environ["INSPECT_MAX_CONNECTIONS"] = "50" + def main(): - parser = argparse.ArgumentParser(description="Run A2UI evaluations") - parser.add_argument("--sanity", action="store_true", help="Run a quick sanity check (2 samples, gemini-3.1-flash-lite, 0 retry)") - parser.add_argument("--model", type=str, default="google/gemini-3.5-flash", help="Model used to evaluate tasks") - parser.add_argument("--grading-model", type=str, default="google/gemini-3.5-flash", help="Model used for grading") - parser.add_argument("--max-retries", type=int, default=0, help="Maximum number of retries") - parser.add_argument("--limit", type=int, default=None, help="Maximum number of samples to evaluate") - parser.add_argument("--log-dir", type=str, default="logs", help="Directory to save logs") - parser.add_argument("--sample-shuffle", type=int, default=None, help="Seed for shuffling samples") - parser.add_argument("--thinking-budget", type=int, default=None, help="Thinking budget for reasoning models") - parser.add_argument("--temperature", type=float, default=None, help="Generation temperature") - parser.add_argument("--max-tasks", type=int, default=None, help="Maximum number of concurrent tasks to execute") - parser.add_argument("--max-samples", type=int, default=None, help="Maximum number of concurrent samples to evaluate") - parser.add_argument("--strategies", type=str, action="append", help="Evaluation strategies to run (choices: direct, subagent_tool, express). Can be comma-separated or specified multiple times.") - args = parser.parse_args() + parser = argparse.ArgumentParser(description="Run A2UI evaluations") + parser.add_argument( + "--sanity", + action="store_true", + help="Run a quick sanity check (2 samples, gemini-3.1-flash-lite, 0 retry)", + ) + parser.add_argument( + "--model", + type=str, + default="google/gemini-3.5-flash", + help="Model used to evaluate tasks", + ) + parser.add_argument( + "--grading-model", + type=str, + default="google/gemini-3.5-flash", + help="Model used for grading", + ) + parser.add_argument( + "--max-retries", type=int, default=0, help="Maximum number of retries" + ) + parser.add_argument( + "--limit", type=int, default=None, help="Maximum number of samples to evaluate" + ) + parser.add_argument( + "--log-dir", type=str, default="logs", help="Directory to save logs" + ) + parser.add_argument( + "--sample-shuffle", type=int, default=None, help="Seed for shuffling samples" + ) + parser.add_argument( + "--thinking-budget", + type=int, + default=None, + help="Thinking budget for reasoning models", + ) + parser.add_argument( + "--temperature", type=float, default=None, help="Generation temperature" + ) + parser.add_argument( + "--max-tasks", + type=int, + default=None, + help="Maximum number of concurrent tasks to execute", + ) + parser.add_argument( + "--max-samples", + type=int, + default=None, + help="Maximum number of concurrent samples to evaluate", + ) + parser.add_argument( + "--strategies", + type=str, + action="append", + help=( + "Evaluation strategies to run (choices: direct, subagent_tool, express). Can" + " be comma-separated or specified multiple times." + ), + ) + args = parser.parse_args() + + model = "google/gemini-3.1-flash-lite" if args.sanity else args.model + limit = 2 if args.sanity else args.limit + retry_attempts = 0 if args.sanity else args.max_retries + sample_shuffle = None if args.sanity else args.sample_shuffle + + # Parse and validate strategies + selected_strategies = [] + raw_strategies = args.strategies if args.strategies else ["direct", "subagent_tool"] + for item in raw_strategies: + for s in item.split(","): + s_clean = s.strip() + if s_clean and s_clean not in selected_strategies: + selected_strategies.append(s_clean) - model = "google/gemini-3.1-flash-lite" if args.sanity else args.model - limit = 2 if args.sanity else args.limit - retry_attempts = 0 if args.sanity else args.max_retries - sample_shuffle = None if args.sanity else args.sample_shuffle + tasks = [] + for strat in selected_strategies: + if strat not in STRATEGIES: + raise ValueError( + f"Unknown evaluation strategy: {strat}. Valid choices:" + f" {', '.join(STRATEGIES.keys())}" + ) + if strat == "express": + tasks.append(a2ui_v1_0_eval(strategy=strat, grading_model=args.grading_model)) + else: + tasks.append(a2ui_v0_9_1_eval(strategy=strat, grading_model=args.grading_model)) - # Parse and validate strategies - selected_strategies = [] - raw_strategies = args.strategies if args.strategies else ["direct", "subagent_tool"] - for item in raw_strategies: - for s in item.split(","): - s_clean = s.strip() - if s_clean and s_clean not in selected_strategies: - selected_strategies.append(s_clean) + eval_set_kwargs = { + "tasks": tasks, + "model": model, + "log_dir": args.log_dir, + "retry_attempts": retry_attempts, + "limit": limit, + "sample_shuffle": sample_shuffle, + } + model_args = {} + if args.thinking_budget is not None: + model_args["reasoning_tokens"] = args.thinking_budget + if args.temperature is not None: + model_args["temperature"] = args.temperature + if model_args: + eval_set_kwargs["model_args"] = model_args + if args.max_tasks is not None: + eval_set_kwargs["max_tasks"] = args.max_tasks + if args.max_samples is not None: + eval_set_kwargs["max_samples"] = args.max_samples - tasks = [] - for strat in selected_strategies: - if strat not in STRATEGIES: - raise ValueError(f"Unknown evaluation strategy: {strat}. Valid choices: {', '.join(STRATEGIES.keys())}") - if strat == "express": - tasks.append(a2ui_v1_0_eval(strategy=strat, grading_model=args.grading_model)) - else: - tasks.append(a2ui_v0_9_1_eval(strategy=strat, grading_model=args.grading_model)) + print("Starting evaluation for multiple strategies...") + success, logs = eval_set(**eval_set_kwargs) + if not success: + print("Evaluation returned failure status!") + sys.exit(1) - eval_set_kwargs = { - "tasks": tasks, - "model": model, - "log_dir": args.log_dir, - "retry_attempts": retry_attempts, - "limit": limit, - "sample_shuffle": sample_shuffle - } - model_args = {} - if args.thinking_budget is not None: - model_args["reasoning_tokens"] = args.thinking_budget - if args.temperature is not None: - model_args["temperature"] = args.temperature - if model_args: - eval_set_kwargs["model_args"] = model_args - if args.max_tasks is not None: - eval_set_kwargs["max_tasks"] = args.max_tasks - if args.max_samples is not None: - eval_set_kwargs["max_samples"] = args.max_samples + print(f"\nEvaluations complete. Logs saved to: {os.path.abspath('logs')}") - print("Starting evaluation for multiple strategies...") - success, logs = eval_set(**eval_set_kwargs) - if not success: - print("Evaluation returned failure status!") - sys.exit(1) - - print(f"\nEvaluations complete. Logs saved to: {os.path.abspath('logs')}") if __name__ == "__main__": - main() + main() diff --git a/eval/tasks.py b/eval/tasks.py index d4ed9d5650..099e2d1d82 100644 --- a/eval/tasks.py +++ b/eval/tasks.py @@ -13,6 +13,7 @@ # limitations under the License. """Tasks for A2UI evaluation.""" + # pylint: disable=duplicate-code import sys @@ -47,115 +48,124 @@ 7. Partial credit "P" can be awarded when the submitted answer is a correct answer with only minor cosmetic variations or additional valid optional properties that do not substantially change the meaning of the component. When an answer is missing components or contains substantive errors, it should be considered incorrect and awarded an "I" grade. """ + @task def a2ui_v0_9_1_eval( - list_models: bool = False, + list_models: bool = False, grading_model: str = "google/gemini-3.5-flash", - strategy: str = "direct" + strategy: str = "direct", ) -> Task: - """Evaluation task for A2UI v0.9.1 protocol generation. - - Args: - list_models: Whether to list available Gemini models and exit. - grading_model: The model to use for LLM-as-a-judge grading. - strategy: The evaluation strategy to use (e.g., 'direct'). - - Returns: - An Inspect Task object configured for A2UI v0.9.1 evaluation. - """ - - if list_models: - client = genai.Client() - print("\nAvailable Gemini Models:") - try: - for m in client.models.list(): - print(f"- {m.name}") - except errors.APIError as e: - print(f"Error listing models: {e}") - - @scorer(metrics=[]) - def dummy_scorer(): - async def score(state, target): # pylint: disable=unused-argument - return Score(value=1.0, explanation="Dummy pass") - return score - - return Task( - dataset=MemoryDataset(samples=[Sample(input="dummy", target="dummy")]), - solver=[], - scorer=[dummy_scorer()] - ) - - active_dataset_path = DATASET_PATH - active_version = "0.9.1" - default_catalog_path = "specification/v0_9_1/catalogs/basic/catalog.json" - - dataset = load_a2ui_dataset(str(active_dataset_path), default_catalog_path=default_catalog_path) + """Evaluation task for A2UI v0.9.1 protocol generation. + + Args: + list_models: Whether to list available Gemini models and exit. + grading_model: The model to use for LLM-as-a-judge grading. + strategy: The evaluation strategy to use (e.g., 'direct'). + + Returns: + An Inspect Task object configured for A2UI v0.9.1 evaluation. + """ + + if list_models: + client = genai.Client() + print("\nAvailable Gemini Models:") + try: + for m in client.models.list(): + print(f"- {m.name}") + except errors.APIError as e: + print(f"Error listing models: {e}") + + @scorer(metrics=[]) + def dummy_scorer(): + async def score(state, target): # pylint: disable=unused-argument + return Score(value=1.0, explanation="Dummy pass") + + return score return Task( - dataset=dataset, - solver=get_solver(strategy, version=active_version), - scorer=[ - a2ui_scorer(version=active_version), - measured_model_graded_qa( - model=grading_model, - instructions=GRADER_INSTRUCTIONS - ) - ] + dataset=MemoryDataset(samples=[Sample(input="dummy", target="dummy")]), + solver=[], + scorer=[dummy_scorer()], ) + active_dataset_path = DATASET_PATH + active_version = "0.9.1" + default_catalog_path = "specification/v0_9_1/catalogs/basic/catalog.json" + + dataset = load_a2ui_dataset( + str(active_dataset_path), + default_catalog_path=default_catalog_path, + version=active_version, + ) + + return Task( + dataset=dataset, + solver=get_solver(strategy, version=active_version), + scorer=[ + a2ui_scorer(version=active_version), + measured_model_graded_qa( + model=grading_model, instructions=GRADER_INSTRUCTIONS + ), + ], + ) + @task def a2ui_v1_0_eval( - list_models: bool = False, + list_models: bool = False, grading_model: str = "google/gemini-3.5-flash", - strategy: str = "express" + strategy: str = "express", ) -> Task: - """Evaluation task for A2UI v1.0 protocol generation. - - Args: - list_models: Whether to list available Gemini models and exit. - grading_model: The model to use for LLM-as-a-judge grading. - strategy: The evaluation strategy to use (e.g., 'express'). - - Returns: - An Inspect Task object configured for A2UI v1.0 evaluation. - """ - - if list_models: - client = genai.Client() - print("\nAvailable Gemini Models:") - try: - for m in client.models.list(): - print(f"- {m.name}") - except errors.APIError as e: - print(f"Error listing models: {e}") - - @scorer(metrics=[]) - def dummy_scorer(): - async def score(state, target): # pylint: disable=unused-argument - return Score(value=1.0, explanation="Dummy pass") - return score - - return Task( - dataset=MemoryDataset(samples=[Sample(input="dummy", target="dummy")]), - solver=[], - scorer=[dummy_scorer()] - ) - - active_dataset_path = DATASET_PATH - active_version = "1.0" - default_catalog_path = "specification/v1_0/catalogs/basic/catalog.json" - - dataset = load_a2ui_dataset(str(active_dataset_path), default_catalog_path=default_catalog_path) + """Evaluation task for A2UI v1.0 protocol generation. + + Args: + list_models: Whether to list available Gemini models and exit. + grading_model: The model to use for LLM-as-a-judge grading. + strategy: The evaluation strategy to use (e.g., 'express'). + + Returns: + An Inspect Task object configured for A2UI v1.0 evaluation. + """ + + if list_models: + client = genai.Client() + print("\nAvailable Gemini Models:") + try: + for m in client.models.list(): + print(f"- {m.name}") + except errors.APIError as e: + print(f"Error listing models: {e}") + + @scorer(metrics=[]) + def dummy_scorer(): + async def score(state, target): # pylint: disable=unused-argument + return Score(value=1.0, explanation="Dummy pass") + + return score return Task( - dataset=dataset, - solver=get_solver(strategy, version=active_version), - scorer=[ - a2ui_scorer(version=active_version), - measured_model_graded_qa( - model=grading_model, - instructions=GRADER_INSTRUCTIONS - ) - ] + dataset=MemoryDataset(samples=[Sample(input="dummy", target="dummy")]), + solver=[], + scorer=[dummy_scorer()], ) + + active_dataset_path = DATASET_PATH + active_version = "1.0" + default_catalog_path = "specification/v1_0/catalogs/basic/catalog.json" + + dataset = load_a2ui_dataset( + str(active_dataset_path), + default_catalog_path=default_catalog_path, + version=active_version, + ) + + return Task( + dataset=dataset, + solver=get_solver(strategy, version=active_version), + scorer=[ + a2ui_scorer(version=active_version), + measured_model_graded_qa( + model=grading_model, instructions=GRADER_INSTRUCTIONS + ), + ], + ) diff --git a/eval/tests/test_dataset.py b/eval/tests/test_dataset.py index 9da3b460dc..fb0ac3dd92 100644 --- a/eval/tests/test_dataset.py +++ b/eval/tests/test_dataset.py @@ -16,24 +16,43 @@ import pytest from a2ui_eval.dataset import load_a2ui_dataset + def test_load_a2ui_dataset(tmp_path): - # Create a dummy YAML file - d = tmp_path / "sub" - d.mkdir() - p = d / "dummy_prompts.yaml" - p.write_text(""" + # Create a dummy YAML file + d = tmp_path / "sub" + d.mkdir() + p = d / "dummy_prompts.yaml" + p.write_text(""" - name: testPrompt description: A test prompt. promptText: "Test input" """) - - dataset = load_a2ui_dataset(str(p)) - - assert len(dataset) == 1 - assert dataset[0].input == "Test input" - assert dataset[0].target == "A test prompt." - assert dataset[0].metadata['name'] == "testPrompt" + + dataset = load_a2ui_dataset(str(p)) + + assert len(dataset) == 1 + assert dataset[0].input == "Test input" + assert dataset[0].target == "A test prompt." + assert dataset[0].metadata["name"] == "testPrompt" + def test_load_a2ui_dataset_file_not_found(): - with pytest.raises(FileNotFoundError): - load_a2ui_dataset("non_existent_file.yaml") + with pytest.raises(FileNotFoundError): + load_a2ui_dataset("non_existent_file.yaml") + + +def test_load_a2ui_dataset_with_version(tmp_path): + d = tmp_path / "sub" + d.mkdir() + p = d / "dummy_prompts_with_version.yaml" + p.write_text(""" +- name: testPrompt + description: A test prompt. + promptText: "Test input" + catalog: "path/{version}/catalog.json" +""") + + dataset = load_a2ui_dataset(str(p), version="0.9.1") + + assert len(dataset) == 1 + assert dataset[0].metadata["catalog"] == "path/v0_9_1/catalog.json" diff --git a/eval/tests/test_run_ci_evals.py b/eval/tests/test_run_ci_evals.py index 45c1bdb927..504123091b 100644 --- a/eval/tests/test_run_ci_evals.py +++ b/eval/tests/test_run_ci_evals.py @@ -19,198 +19,190 @@ import pytest # Add bin directory to path to import run_ci_evals -sys.path.append(os.path.abspath(os.path.join(os.path.dirname(__file__), '../bin'))) +sys.path.append(os.path.abspath(os.path.join(os.path.dirname(__file__), "../bin"))) from run_ci_evals import check_threshold, build_main_command from report_evals import extract_accuracy, print_results_summary, generate_markdown_summary import argparse + def test_extract_accuracy_valid(): - log_data = { - "results": { - "scores": [ - { - "metrics": { - "accuracy": { - "value": 0.85 - } - } - } - ] - } - } - assert extract_accuracy(log_data) == 0.85 + log_data = {"results": {"scores": [{"metrics": {"accuracy": {"value": 0.85}}}]}} + assert extract_accuracy(log_data) == 0.85 + def test_extract_accuracy_no_scores(): - log_data = {"results": {}} - with pytest.raises(ValueError, match="No scores found"): - extract_accuracy(log_data) + log_data = {"results": {}} + with pytest.raises(ValueError, match="No scores found"): + extract_accuracy(log_data) + def test_extract_accuracy_no_accuracy(): - log_data = { - "results": { - "scores": [ - { - "metrics": {} - } - ] - } - } - with pytest.raises(ValueError, match="Could not find accuracy"): - extract_accuracy(log_data) + log_data = {"results": {"scores": [{"metrics": {}}]}} + with pytest.raises(ValueError, match="Could not find accuracy"): + extract_accuracy(log_data) + def test_extract_accuracy_null_accuracy(): - log_data = { - "results": { - "scores": [ - { - "metrics": { - "accuracy": None - } - } - ] - } - } - with pytest.raises(ValueError, match="Could not find accuracy"): - extract_accuracy(log_data) + log_data = {"results": {"scores": [{"metrics": {"accuracy": None}}]}} + with pytest.raises(ValueError, match="Could not find accuracy"): + extract_accuracy(log_data) + def test_check_threshold_pass(): - assert check_threshold(85.0, 80.0) is True - assert check_threshold(80.0, 80.0) is True + assert check_threshold(85.0, 80.0) is True + assert check_threshold(80.0, 80.0) is True + def test_check_threshold_fail(): - assert check_threshold(75.0, 80.0) is False + assert check_threshold(75.0, 80.0) is False + def test_build_main_command_default(): - args = argparse.Namespace( - model="google/gemini-3-flash-preview", - max_samples=100, - grading_model="google/gemini-3.5-flash" - ) - seed = "20260507" - cmd = build_main_command(args, seed) - assert cmd == [ - "uv", "run", "python", "main.py", - "--model", "google/gemini-3-flash-preview", - "--sample-shuffle", seed, - "--log-dir", f"logs/{seed}", - "--max-retries", "10", - "--grading-model", "google/gemini-3.5-flash", - "--limit", "100" - ] + args = argparse.Namespace( + model="google/gemini-3-flash-preview", + max_samples=100, + grading_model="google/gemini-3.5-flash", + ) + seed = "20260507" + cmd = build_main_command(args, seed) + assert cmd == [ + "uv", + "run", + "python", + "main.py", + "--model", + "google/gemini-3-flash-preview", + "--sample-shuffle", + seed, + "--log-dir", + f"logs/{seed}", + "--max-retries", + "10", + "--grading-model", + "google/gemini-3.5-flash", + "--limit", + "100", + ] + def test_build_main_command_no_limit(): - args = argparse.Namespace( - model="google/gemini-3-flash-preview", - max_samples=0, - grading_model="google/gemini-3.5-flash" - ) - seed = "20260507" - cmd = build_main_command(args, seed) - assert "--limit" not in cmd + args = argparse.Namespace( + model="google/gemini-3-flash-preview", + max_samples=0, + grading_model="google/gemini-3.5-flash", + ) + seed = "20260507" + cmd = build_main_command(args, seed) + assert "--limit" not in cmd + def test_print_results_summary_valid(capsys): - log_data = { - "samples": [ - { - "id": 1, - "metadata": {"name": "test_task", "evaluation_duration_seconds": 5.0}, - "scores": { - "a2ui_scorer": {"value": 1.0, "explanation": "Perfect"}, - "measured_model_graded_qa": {"value": "C", "explanation": "Correct"} - }, - "events": [] - }, - { - "id": 2, - "metadata": {"name": "test_task_2", "evaluation_duration_seconds": 10.0}, - "scores": { - "a2ui_scorer": {"value": 1.0, "explanation": "Perfect"}, - "measured_model_graded_qa": {"value": "C", "explanation": "Correct"} - }, - "events": [] - } - ] - } - print_results_summary(log_data) - captured = capsys.readouterr() - assert "test_task | Algorithmic: PASS | Judging: C | Inference Time: 5.00s" in captured.out - assert "test_task_2 | Algorithmic: PASS | Judging: C | Inference Time: 10.00s" in captured.out - assert "Inference Time - Average: 7.50s | Median: 7.50s" in captured.out + log_data = { + "samples": [ + { + "id": 1, + "metadata": {"name": "test_task", "evaluation_duration_seconds": 5.0}, + "scores": { + "a2ui_scorer": {"value": 1.0, "explanation": "Perfect"}, + "measured_model_graded_qa": {"value": "C", "explanation": "Correct"}, + }, + "events": [], + }, + { + "id": 2, + "metadata": {"name": "test_task_2", "evaluation_duration_seconds": 10.0}, + "scores": { + "a2ui_scorer": {"value": 1.0, "explanation": "Perfect"}, + "measured_model_graded_qa": {"value": "C", "explanation": "Correct"}, + }, + "events": [], + }, + ] + } + print_results_summary(log_data) + captured = capsys.readouterr() + assert ( + "test_task | Algorithmic: PASS | Judging: C | Inference Time:" + " 5.00s" + in captured.out + ) + assert ( + "test_task_2 | Algorithmic: PASS | Judging: C | Inference Time:" + " 10.00s" + in captured.out + ) + assert "Inference Time - Average: 7.50s | Median: 7.50s" in captured.out + def test_print_results_summary_fail(capsys): - log_data = { - "samples": [ - { - "id": 2, - "metadata": {"name": "fail_task"}, - "scores": { - "a2ui_scorer": {"value": 0.0, "explanation": "Missing component"}, - "measured_model_graded_qa": {"value": "I", "explanation": "Incorrect"} - }, - "events": [] - } - ] - } - print_results_summary(log_data) - captured = capsys.readouterr() - assert "fail_task | Algorithmic: FAIL | Judging: I | Inference Time: N/A" in captured.out - assert " [Algorithmic Failure Reason]:" in captured.out - assert " Missing component" in captured.out - assert " [Judging Failure Reason (Grade I)]:" in captured.out - assert " Incorrect" in captured.out + log_data = { + "samples": [{ + "id": 2, + "metadata": {"name": "fail_task"}, + "scores": { + "a2ui_scorer": {"value": 0.0, "explanation": "Missing component"}, + "measured_model_graded_qa": {"value": "I", "explanation": "Incorrect"}, + }, + "events": [], + }] + } + print_results_summary(log_data) + captured = capsys.readouterr() + assert ( + "fail_task | Algorithmic: FAIL | Judging: I | Inference" + " Time: N/A" + in captured.out + ) + assert " [Algorithmic Failure Reason]:" in captured.out + assert " Missing component" in captured.out + assert " [Judging Failure Reason (Grade I)]:" in captured.out + assert " Incorrect" in captured.out def test_generate_markdown_summary_valid(): - log_data = { - "eval": { - "task": "test_task", - "model": "test_model" - }, - "samples": [ - { - "id": 1, - "metadata": {"name": "sample_1", "evaluation_duration_seconds": 5.0}, - "scores": { - "a2ui_scorer": {"value": 1.0, "explanation": "Perfect"}, - "measured_model_graded_qa": {"value": "C", "explanation": "Correct"} - } - } - ] - } - summary = generate_markdown_summary(log_data, 100.0, 90.0) - assert "### Evaluation Summary: test_task" in summary - assert "- **Status**: PASS" in summary - assert "- **Model**: `test_model`" in summary - assert "- **Pass Percentage**: `100.00%` (Threshold: `90.00%`)" in summary - assert "| sample_1 | PASS | C | 5.00s | PASS |" in summary - assert "#### Failure Details" not in summary + log_data = { + "eval": {"task": "test_task", "model": "test_model"}, + "samples": [{ + "id": 1, + "metadata": {"name": "sample_1", "evaluation_duration_seconds": 5.0}, + "scores": { + "a2ui_scorer": {"value": 1.0, "explanation": "Perfect"}, + "measured_model_graded_qa": {"value": "C", "explanation": "Correct"}, + }, + }], + } + summary = generate_markdown_summary(log_data, 100.0, 90.0) + assert "### Evaluation Summary: test_task" in summary + assert "- **Status**: PASS" in summary + assert "- **Model**: `test_model`" in summary + assert "- **Pass Percentage**: `100.00%` (Threshold: `90.00%`)" in summary + assert "| sample_1 | PASS | C | 5.00s | PASS |" in summary + assert "#### Failure Details" not in summary def test_generate_markdown_summary_fail(): - log_data = { - "eval": { - "task": "test_task", - "model": "test_model" - }, - "samples": [ - { - "id": 2, - "metadata": {"name": "sample_2", "evaluation_duration_seconds": 10.0}, - "scores": { - "a2ui_scorer": {"value": 0.0, "explanation": "Missing components\nSecond line error"}, - "measured_model_graded_qa": {"value": "I", "explanation": "Incomplete"} - } - } - ] - } - summary = generate_markdown_summary(log_data, 0.0, 90.0) - assert "### Evaluation Summary: test_task" in summary - assert "- **Status**: FAIL" in summary - assert "| sample_2 | FAIL | I | 10.00s | FAIL |" in summary - assert "#### Failure Details" in summary - assert "##### sample_2" in summary - assert "- **Algorithmic Failure Reason**:" in summary - assert " > Missing components" in summary - assert " > Second line error" in summary - assert "- **Judging Failure Reason (Grade I)**:" in summary - assert " > Incomplete" in summary + log_data = { + "eval": {"task": "test_task", "model": "test_model"}, + "samples": [{ + "id": 2, + "metadata": {"name": "sample_2", "evaluation_duration_seconds": 10.0}, + "scores": { + "a2ui_scorer": { + "value": 0.0, + "explanation": "Missing components\nSecond line error", + }, + "measured_model_graded_qa": {"value": "I", "explanation": "Incomplete"}, + }, + }], + } + summary = generate_markdown_summary(log_data, 0.0, 90.0) + assert "### Evaluation Summary: test_task" in summary + assert "- **Status**: FAIL" in summary + assert "| sample_2 | FAIL | I | 10.00s | FAIL |" in summary + assert "#### Failure Details" in summary + assert "##### sample_2" in summary + assert "- **Algorithmic Failure Reason**:" in summary + assert " > Missing components" in summary + assert " > Second line error" in summary + assert "- **Judging Failure Reason (Grade I)**:" in summary + assert " > Incomplete" in summary diff --git a/eval/tests/test_scorers.py b/eval/tests/test_scorers.py index 5d9e7bfdeb..1ac1372e0f 100644 --- a/eval/tests/test_scorers.py +++ b/eval/tests/test_scorers.py @@ -21,13 +21,18 @@ from inspect_ai.model import ModelOutput, ModelName CURRENT_DIR = os.path.dirname(os.path.abspath(__file__)) -CATALOG_PATH = os.path.abspath(os.path.join(CURRENT_DIR, "../../specification/v0_9/catalogs/basic/catalog.json")) -CATALOG_PATH_V091 = os.path.abspath(os.path.join(CURRENT_DIR, "../../specification/v0_9_1/catalogs/basic/catalog.json")) +CATALOG_PATH = os.path.abspath( + os.path.join(CURRENT_DIR, "../../specification/v0_9/catalogs/basic/catalog.json") +) +CATALOG_PATH_V091 = os.path.abspath( + os.path.join(CURRENT_DIR, "../../specification/v0_9_1/catalogs/basic/catalog.json") +) + @pytest.mark.asyncio async def test_scorer_valid_json_v091(): - scorer = a2ui_scorer(version="0.9.1") - valid_json = """ + scorer = a2ui_scorer(version="0.9.1") + valid_json = """ [ { @@ -66,26 +71,25 @@ async def test_scorer_valid_json_v091(): ] """ - state = TaskState( - model=ModelName("mock/model"), - sample_id=1, - epoch=1, - input="test", - messages=[], - output=ModelOutput(model="mock/model", completion=valid_json), - metadata={ - "catalog": str(CATALOG_PATH_V091) - } - ) - - score = await scorer(state, Target("")) - assert score.value == 1.0 - assert "Valid A2UI payload" in score.explanation + state = TaskState( + model=ModelName("mock/model"), + sample_id=1, + epoch=1, + input="test", + messages=[], + output=ModelOutput(model="mock/model", completion=valid_json), + metadata={"catalog": str(CATALOG_PATH_V091)}, + ) + + score = await scorer(state, Target("")) + assert score.value == 1.0 + assert "Valid A2UI payload" in score.explanation + @pytest.mark.asyncio async def test_scorer_valid_json(): - scorer = a2ui_scorer(version="0.9") - valid_json = """ + scorer = a2ui_scorer(version="0.9") + valid_json = """ { "version": "v0.9", @@ -96,44 +100,42 @@ async def test_scorer_valid_json(): } """ - state = TaskState( - model=ModelName("mock/model"), - sample_id=1, - epoch=1, - input="test", - messages=[], - output=ModelOutput(model="mock/model", completion=valid_json), - metadata={ - "catalog": str(CATALOG_PATH) - } - ) - - score = await scorer(state, Target("")) - assert score.value == 1.0 - assert "Valid A2UI payload" in score.explanation + state = TaskState( + model=ModelName("mock/model"), + sample_id=1, + epoch=1, + input="test", + messages=[], + output=ModelOutput(model="mock/model", completion=valid_json), + metadata={"catalog": str(CATALOG_PATH)}, + ) + + score = await scorer(state, Target("")) + assert score.value == 1.0 + assert "Valid A2UI payload" in score.explanation + @pytest.mark.asyncio async def test_scorer_invalid_json(): - scorer = a2ui_scorer(version="0.9") - state = TaskState( - model=ModelName("mock/model"), - sample_id=1, - epoch=1, - input="test", - messages=[], - output=ModelOutput(model="mock/model", completion="invalid json"), - metadata={ - "catalog": str(CATALOG_PATH) - } - ) - score = await scorer(state, Target("")) - assert score.value == 0.0 - assert "tags '' and '' not found" in score.explanation + scorer = a2ui_scorer(version="0.9") + state = TaskState( + model=ModelName("mock/model"), + sample_id=1, + epoch=1, + input="test", + messages=[], + output=ModelOutput(model="mock/model", completion="invalid json"), + metadata={"catalog": str(CATALOG_PATH)}, + ) + score = await scorer(state, Target("")) + assert score.value == 0.0 + assert "tags '' and '' not found" in score.explanation + @pytest.mark.asyncio async def test_scorer_missing_root(): - scorer = a2ui_scorer(version="0.9") - payload = """ + scorer = a2ui_scorer(version="0.9") + payload = """ [ { @@ -155,25 +157,24 @@ async def test_scorer_missing_root(): ] """ - state = TaskState( - model=ModelName("mock/model"), - sample_id=1, - epoch=1, - input="test", - messages=[], - output=ModelOutput(model="mock/model", completion=payload), - metadata={ - "catalog": str(CATALOG_PATH) - } - ) - score = await scorer(state, Target("")) - assert score.value == 0.0 - assert "Missing root component" in score.explanation + state = TaskState( + model=ModelName("mock/model"), + sample_id=1, + epoch=1, + input="test", + messages=[], + output=ModelOutput(model="mock/model", completion=payload), + metadata={"catalog": str(CATALOG_PATH)}, + ) + score = await scorer(state, Target("")) + assert score.value == 0.0 + assert "Missing root component" in score.explanation + @pytest.mark.asyncio async def test_scorer_duplicate_ids(): - scorer = a2ui_scorer(version="0.9") - payload = """ + scorer = a2ui_scorer(version="0.9") + payload = """ { "version": "v0.9", @@ -188,25 +189,24 @@ async def test_scorer_duplicate_ids(): } """ - state = TaskState( - model=ModelName("mock/model"), - sample_id=1, - epoch=1, - input="test", - messages=[], - output=ModelOutput(model="mock/model", completion=payload), - metadata={ - "catalog": str(CATALOG_PATH) - } - ) - score = await scorer(state, Target("")) - assert score.value == 0.0 - assert "Duplicate component ID" in score.explanation + state = TaskState( + model=ModelName("mock/model"), + sample_id=1, + epoch=1, + input="test", + messages=[], + output=ModelOutput(model="mock/model", completion=payload), + metadata={"catalog": str(CATALOG_PATH)}, + ) + score = await scorer(state, Target("")) + assert score.value == 0.0 + assert "Duplicate component ID" in score.explanation + @pytest.mark.asyncio async def test_scorer_broken_relationship(): - scorer = a2ui_scorer(version="0.9") - payload = """ + scorer = a2ui_scorer(version="0.9") + payload = """ [ { @@ -229,25 +229,24 @@ async def test_scorer_broken_relationship(): ] """ - state = TaskState( - model=ModelName("mock/model"), - sample_id=1, - epoch=1, - input="test", - messages=[], - output=ModelOutput(model="mock/model", completion=payload), - metadata={ - "catalog": str(CATALOG_PATH) - } - ) - score = await scorer(state, Target("")) - assert score.value == 0.0 - assert "references non-existent component" in score.explanation + state = TaskState( + model=ModelName("mock/model"), + sample_id=1, + epoch=1, + input="test", + messages=[], + output=ModelOutput(model="mock/model", completion=payload), + metadata={"catalog": str(CATALOG_PATH)}, + ) + score = await scorer(state, Target("")) + assert score.value == 0.0 + assert "references non-existent component" in score.explanation + @pytest.mark.asyncio async def test_scorer_circular_reference(): - scorer = a2ui_scorer(version="0.9") - payload = """ + scorer = a2ui_scorer(version="0.9") + payload = """ { "version": "v0.9", @@ -262,17 +261,15 @@ async def test_scorer_circular_reference(): } """ - state = TaskState( - model=ModelName("mock/model"), - sample_id=1, - epoch=1, - input="test", - messages=[], - output=ModelOutput(model="mock/model", completion=payload), - metadata={ - "catalog": str(CATALOG_PATH) - } - ) - score = await scorer(state, Target("")) - assert score.value == 0.0 - assert "Circular reference detected" in score.explanation + state = TaskState( + model=ModelName("mock/model"), + sample_id=1, + epoch=1, + input="test", + messages=[], + output=ModelOutput(model="mock/model", completion=payload), + metadata={"catalog": str(CATALOG_PATH)}, + ) + score = await scorer(state, Target("")) + assert score.value == 0.0 + assert "Circular reference detected" in score.explanation diff --git a/eval/tests/test_strategies.py b/eval/tests/test_strategies.py index 700ce0b04d..1c80c89d9c 100644 --- a/eval/tests/test_strategies.py +++ b/eval/tests/test_strategies.py @@ -17,131 +17,142 @@ from inspect_ai.solver import TaskState from inspect_ai.model import ChatMessage, ChatMessageUser, ModelName + @pytest.mark.asyncio async def test_a2ui_system_prompt(tmp_path): - schema_file = tmp_path / "schema.json" - schema_file.write_text("schema content") - catalog_file = tmp_path / "catalog.json" - catalog_file.write_text('{"catalogId": "https://a2ui.org/test_catalog", "components": {}}') - - solver = a2ui_system_prompt(version="0.9.1") - - state = TaskState( - model=ModelName("mock/model"), - sample_id=1, - epoch=1, - input="test", - messages=[], - metadata={ - "catalog": str(catalog_file), - "role_description": "mock role", - "workflow_description": "mock workflow" - } - ) - - async def dummy_generate(state, **kwargs): - return state - - state = await solver(state, dummy_generate) - - assert len(state.messages) == 1 - assert state.messages[0].role == "system" - assert "https://a2ui.org/test_catalog" in state.messages[0].content + schema_file = tmp_path / "schema.json" + schema_file.write_text("schema content") + catalog_file = tmp_path / "catalog.json" + catalog_file.write_text( + '{"catalogId": "https://a2ui.org/test_catalog", "components": {}}' + ) + + solver = a2ui_system_prompt(version="0.9.1") + + state = TaskState( + model=ModelName("mock/model"), + sample_id=1, + epoch=1, + input="test", + messages=[], + metadata={ + "catalog": str(catalog_file), + "role_description": "mock role", + "workflow_description": "mock workflow", + }, + ) + + async def dummy_generate(state, **kwargs): + return state + + state = await solver(state, dummy_generate) + + assert len(state.messages) == 1 + assert state.messages[0].role == "system" + assert "https://a2ui.org/test_catalog" in state.messages[0].content from a2ui_eval.strategies.subagent_tool import extract_subagent_payload, PAYLOAD_STORE_KEY from inspect_ai.model import ModelOutput, ChatCompletionChoice, ChatMessageAssistant, ChatMessageTool + @pytest.mark.asyncio async def test_extract_subagent_payload(): - solver = extract_subagent_payload() - - state = TaskState( - model=ModelName("mock/model"), - sample_id=1, - epoch=1, - input="test", - messages=[ - ChatMessageTool(content='{"test": "payload"}', tool_call_id="call_1") - ], - output=ModelOutput( - model="mock/model", - choices=[ChatCompletionChoice(message=ChatMessageAssistant(content="old content"))] - ) - ) - state.store.set(PAYLOAD_STORE_KEY, '{"test": "payload"}') - - async def dummy_generate(state, **kwargs): - return state - - state = await solver(state, dummy_generate) - assert state.output.completion == '\n{"test": "payload"}\n' + solver = extract_subagent_payload() + + state = TaskState( + model=ModelName("mock/model"), + sample_id=1, + epoch=1, + input="test", + messages=[ChatMessageTool(content='{"test": "payload"}', tool_call_id="call_1")], + output=ModelOutput( + model="mock/model", + choices=[ + ChatCompletionChoice(message=ChatMessageAssistant(content="old content")) + ], + ), + ) + state.store.set(PAYLOAD_STORE_KEY, '{"test": "payload"}') + + async def dummy_generate(state, **kwargs): + return state + + state = await solver(state, dummy_generate) + assert state.output.completion == '\n{"test": "payload"}\n' from a2ui_eval.strategies.subagent_tool import subagent_tool_solver + def test_subagent_tool_solver(tmp_path): - schema_file = tmp_path / "schema.json" - schema_file.write_text("schema content") - catalog_file = tmp_path / "catalog.json" - catalog_file.write_text('{"catalogId": "test", "components": {}}') - - solvers = subagent_tool_solver(version="0.9.1") - assert len(solvers) == 5 + schema_file = tmp_path / "schema.json" + schema_file.write_text("schema content") + catalog_file = tmp_path / "catalog.json" + catalog_file.write_text('{"catalogId": "test", "components": {}}') + + solvers = subagent_tool_solver(version="0.9.1") + assert len(solvers) == 5 from a2ui_eval.strategies.express import express_solver + def test_express_solver(): - solvers = express_solver(version="1.0") - assert len(solvers) == 3 + solvers = express_solver(version="1.0") + assert len(solvers) == 3 + @pytest.mark.asyncio async def test_a2ui_express_solvers(): - from a2ui_eval.strategies.express import a2ui_express_prompt, compile_express_dsl - from inspect_ai.model import ModelName, ModelOutput, ChatCompletionChoice, ChatMessageAssistant - from inspect_ai.solver import TaskState - from a2ui_eval.shared.utils import GIT_ROOT - - catalog_file = GIT_ROOT / "specification/v1_0/catalogs/basic/catalog.json" - - # 1. Test Prompt Solver - prompt_solver = a2ui_express_prompt(version="1.0") - state = TaskState( - model=ModelName("mock/model"), - sample_id=1, - epoch=1, - input="test", - messages=[], - metadata={"catalog": str(catalog_file)} + from a2ui_eval.strategies.express import a2ui_express_prompt, compile_express_dsl + from inspect_ai.model import ModelName, ModelOutput, ChatCompletionChoice, ChatMessageAssistant + from inspect_ai.solver import TaskState + from a2ui_eval.shared.utils import GIT_ROOT + + catalog_file = GIT_ROOT / "specification/v1_0/catalogs/basic/catalog.json" + + # 1. Test Prompt Solver + prompt_solver = a2ui_express_prompt(version="1.0") + state = TaskState( + model=ModelName("mock/model"), + sample_id=1, + epoch=1, + input="test", + messages=[], + metadata={"catalog": str(catalog_file)}, + ) + + async def dummy_generate(state, **kwargs): + return state + + # Mock GIT_ROOT in the solver module dynamically for testing + import a2ui_eval.strategies.express as express_module + + original_git_root = getattr(express_module, "GIT_ROOT", None) + express_module.GIT_ROOT = GIT_ROOT + + try: + state = await prompt_solver(state, dummy_generate) + assert len(state.messages) == 1 + assert state.messages[0].role == "system" + assert "A2UI Express Output Contract" in state.messages[0].content + + # 2. Test Compile Solver + compile_solver = compile_express_dsl(version="1.0") + state.output = ModelOutput( + model="mock/model", + choices=[ + ChatCompletionChoice( + message=ChatMessageAssistant( + content='\nroot = Text("Hello")\n' + ) + ) + ], ) - - async def dummy_generate(state, **kwargs): - return state - - # Mock GIT_ROOT in the solver module dynamically for testing - import a2ui_eval.strategies.express as express_module - original_git_root = getattr(express_module, "GIT_ROOT", None) - express_module.GIT_ROOT = GIT_ROOT - - try: - state = await prompt_solver(state, dummy_generate) - assert len(state.messages) == 1 - assert state.messages[0].role == "system" - assert "A2UI Express Output Contract" in state.messages[0].content - - # 2. Test Compile Solver - compile_solver = compile_express_dsl(version="1.0") - state.output = ModelOutput( - model="mock/model", - choices=[ChatCompletionChoice(message=ChatMessageAssistant( - content='\nroot = Text("Hello")\n' - ))] - ) - state = await compile_solver(state, dummy_generate) - assert "" in state.output.completion - assert '"component": "Text"' in state.output.completion - finally: - if original_git_root is not None: - express_module.GIT_ROOT = original_git_root - + state = await compile_solver(state, dummy_generate) + assert "" in state.output.completion + assert '"component": "Text"' in state.output.completion + finally: + if original_git_root is not None: + express_module.GIT_ROOT = original_git_root From 9c505c2de68faec1a3d9e1c6aa7334e16a32bca0 Mon Sep 17 00:00:00 2001 From: Jia Hao Goh Date: Thu, 2 Jul 2026 11:00:11 +0000 Subject: [PATCH 5/6] docs(eval): document {version} placeholder in dataset schema TAG=agy CONV=434bb731-15b5-4e15-8474-68d4f4d14636 --- eval/datasets/dataset_schema.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/eval/datasets/dataset_schema.json b/eval/datasets/dataset_schema.json index 5496dc78f0..b9ff19059b 100644 --- a/eval/datasets/dataset_schema.json +++ b/eval/datasets/dataset_schema.json @@ -23,7 +23,7 @@ }, "catalog": { "type": "string", - "description": "Path to the catalog json file. Corresponds to the catalog file path loaded into the A2uiSchemaManager. If omitted, the default is loaded from eval/datasets/defaults.py." + "description": "Path to the catalog json file. Corresponds to the catalog file path loaded into the A2uiSchemaManager. If omitted, the default is loaded from eval/datasets/defaults.py. Supports `{version}` placeholder which dynamically resolves to the target version directory name (e.g. 'v0_9_1' or 'v1_0')." }, "role_description": { "type": "string", From 7f73dad5d9cb75e5faa9c8f677a9827be6878d41 Mon Sep 17 00:00:00 2001 From: Jia Hao Goh Date: Thu, 2 Jul 2026 11:28:55 +0000 Subject: [PATCH 6/6] refactor(eval): make version_to_dir_name private helper in dataset.py TAG=agy CONV=434bb731-15b5-4e15-8474-68d4f4d14636 --- eval/a2ui_eval/dataset.py | 9 +++++++-- eval/a2ui_eval/shared/utils.py | 5 ----- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/eval/a2ui_eval/dataset.py b/eval/a2ui_eval/dataset.py index edcbeb4356..4131b12508 100644 --- a/eval/a2ui_eval/dataset.py +++ b/eval/a2ui_eval/dataset.py @@ -22,11 +22,16 @@ from inspect_ai.dataset import MemoryDataset, Sample from datasets.defaults import DEFAULT_CATALOG_PATH, DEFAULT_WORKFLOW_DESCRIPTION, DEFAULT_ROLE_DESCRIPTION -from a2ui_eval.shared.utils import GIT_ROOT, version_to_dir_name +from a2ui_eval.shared.utils import GIT_ROOT SCHEMA_PATH = GIT_ROOT / 'eval' / 'datasets' / 'dataset_schema.json' +def _version_to_dir_name(version: str) -> str: + """Converts a version string (e.g., '0.9.1') to a directory name (e.g., 'v0_9_1').""" + return 'v' + version.replace('.', '_') + + def load_a2ui_dataset( file_path: str, default_catalog_path: str | None = None, version: str | None = None ) -> MemoryDataset: @@ -57,7 +62,7 @@ def load_a2ui_dataset( for item in data: catalog_path = item.get('catalog') or default_catalog_path or DEFAULT_CATALOG_PATH if version and catalog_path: - catalog_path = catalog_path.replace('{version}', version_to_dir_name(version)) + catalog_path = catalog_path.replace('{version}', _version_to_dir_name(version)) samples.append( Sample( input=item['promptText'], diff --git a/eval/a2ui_eval/shared/utils.py b/eval/a2ui_eval/shared/utils.py index 760c2adc1f..549cca4fbf 100644 --- a/eval/a2ui_eval/shared/utils.py +++ b/eval/a2ui_eval/shared/utils.py @@ -20,11 +20,6 @@ GIT_ROOT = (Path(__file__).resolve().parent / "../../..").resolve() -def version_to_dir_name(version: str) -> str: - """Converts a version string (e.g., '0.9.1') to a directory name (e.g., 'v0_9_1').""" - return "v" + version.replace(".", "_") - - @solver def measured_generate() -> Solver: """Solver that wraps generate() and records the duration in metadata."""