From f73559d349afed3f15352980301d84928c9c3278 Mon Sep 17 00:00:00 2001 From: Thales Matheus <1417625@sga.pucminas.br> Date: Wed, 21 Jan 2026 11:07:28 -0600 Subject: [PATCH 01/21] auto-claude: subtask-1-1 - Create flutter_test_config.dart for global golden test configuration --- test/flutter_test_config.dart | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) create mode 100644 test/flutter_test_config.dart diff --git a/test/flutter_test_config.dart b/test/flutter_test_config.dart new file mode 100644 index 00000000..6616e918 --- /dev/null +++ b/test/flutter_test_config.dart @@ -0,0 +1,19 @@ +// +// flutter_test_config.dart +// JFlutter +// +// Global test configuration for golden tests using golden_toolkit. +// This file is automatically loaded by Flutter when running tests and ensures +// that fonts are properly loaded for consistent golden test rendering across +// different environments. +// +// Thales Matheus Mendonça Santos - January 2026 +// + +import 'dart:async'; +import 'package:golden_toolkit/golden_toolkit.dart'; + +Future testExecutable(FutureOr Function() testMain) async { + await loadAppFonts(); + return testMain(); +} From e98c9973d77b545c9c93de6b077ac71e80530424 Mon Sep 17 00:00:00 2001 From: Thales Matheus <1417625@sga.pucminas.br> Date: Wed, 21 Jan 2026 11:08:22 -0600 Subject: [PATCH 02/21] auto-claude: subtask-1-2 - Create test/goldens directory structure --- test/goldens/canvas/.gitkeep | 0 test/goldens/dialogs/.gitkeep | 0 test/goldens/pages/.gitkeep | 0 test/goldens/simulation/.gitkeep | 0 4 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 test/goldens/canvas/.gitkeep create mode 100644 test/goldens/dialogs/.gitkeep create mode 100644 test/goldens/pages/.gitkeep create mode 100644 test/goldens/simulation/.gitkeep diff --git a/test/goldens/canvas/.gitkeep b/test/goldens/canvas/.gitkeep new file mode 100644 index 00000000..e69de29b diff --git a/test/goldens/dialogs/.gitkeep b/test/goldens/dialogs/.gitkeep new file mode 100644 index 00000000..e69de29b diff --git a/test/goldens/pages/.gitkeep b/test/goldens/pages/.gitkeep new file mode 100644 index 00000000..e69de29b diff --git a/test/goldens/simulation/.gitkeep b/test/goldens/simulation/.gitkeep new file mode 100644 index 00000000..e69de29b From 319c6f962fdda84680344efc3ca55d260108a9aa Mon Sep 17 00:00:00 2001 From: Thales Matheus <1417625@sga.pucminas.br> Date: Wed, 21 Jan 2026 11:11:51 -0600 Subject: [PATCH 03/21] auto-claude: subtask-1-3 - Replace placeholder visualizations_test.dart with proper setup verification test - Replaced intentionally failing placeholder with 4 passing golden tests - Tests verify golden_toolkit infrastructure is correctly configured - Includes simple widget rendering, text rendering, Material components, and device variations - All tests pass with golden file generation and comparison - Generated 4 golden image files for visual regression testing baseline --- .../goldens/device_variations_golden.png | Bin 0 -> 9368 bytes .../goldens/material_components_golden.png | Bin 0 -> 12385 bytes .../goldens/simple_widget_golden.png | Bin 0 -> 6093 bytes .../goldens/text_rendering_golden.png | Bin 0 -> 9746 bytes .../presentation/visualizations_test.dart | 149 ++++++++++++++++-- 5 files changed, 138 insertions(+), 11 deletions(-) create mode 100644 test/widget/presentation/goldens/device_variations_golden.png create mode 100644 test/widget/presentation/goldens/material_components_golden.png create mode 100644 test/widget/presentation/goldens/simple_widget_golden.png create mode 100644 test/widget/presentation/goldens/text_rendering_golden.png diff --git a/test/widget/presentation/goldens/device_variations_golden.png b/test/widget/presentation/goldens/device_variations_golden.png new file mode 100644 index 0000000000000000000000000000000000000000..333e629bf3e902cbc677a8961f82989e85979d82 GIT binary patch literal 9368 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 literal 0 HcmV?d00001 diff --git a/test/widget/presentation/goldens/material_components_golden.png b/test/widget/presentation/goldens/material_components_golden.png new file mode 100644 index 0000000000000000000000000000000000000000..528180656e796307c85573e88fb827c549412941 GIT binary patch literal 12385 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 YXFk0^ZZc791p$B8Osz~RuiSp{Us-irRR910 literal 0 HcmV?d00001 diff --git a/test/widget/presentation/goldens/simple_widget_golden.png b/test/widget/presentation/goldens/simple_widget_golden.png new file mode 100644 index 0000000000000000000000000000000000000000..93ac9d36dac9c049ceac3b6392f1d7c587e25042 GIT binary patch literal 6093 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 R;2;Hn6UR<^P!SQ={tL!x)>!}m literal 0 HcmV?d00001 diff --git a/test/widget/presentation/goldens/text_rendering_golden.png b/test/widget/presentation/goldens/text_rendering_golden.png new file mode 100644 index 0000000000000000000000000000000000000000..e91a03bec9626b37a80cc7d8f6901532b602b747 GIT binary patch literal 9746 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�D?4Gi^FSJIlJY$MJ|8l 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⪼nIl(TdH6(=by?6z4P^t0r?>r@4P;l6d;$7?+hgIjngr@c zjIblzS%T5_!r8Og@f!IV=twZ1i`8o3S`x;hLK-b<^R;a$9=KEKFq9Kns0v%vDbua+ zjxoV_JgIvw-cqu9EnC=aG*zt8j@ySb#Zxy@K@0+?Ca;v&y39d&>Ql3=!kkNPmNz{o zjbx`_7ydNYySwt%1G61ABv|n7+N1`gYV_*KyhZd{M~a#G3N*S<;gWWi*^99b+d4pKtRR6s!f3_=6P8 z7tbLqsVg4lJ-BZi=Qrqzc$t2G?Kx~MIs1lFbz~`xT?ZBlF9#{sB!N^x)NlaWkt7h_ zz=_2ycJfqQ7m5K-@{Aa&?%DDl#t_#V7XPxz)IH7de24>uRdJ;?&x6OIX=j+8;3?bj zFL8({FFO;-6O;9oW|(AJ0o5(!__hMuB5tj;wx>7u;{*#V-_csb(6tD=_I4KRv?n#3 z&c*T5I(&W`sSZe*iiL%5B$US*h5r6)d5+*LWj!Cxa1m@qOF9j{J!j9Uk&yFvq6JPzk!Yq35!<2A{A|XMwiRYZTK$;N624rG zB23f8iw@{g4kyBffDI8qotO6!TDFQi;p~qHZi72F{r>1GSU!|eCqylnDc}&YYd&A( zbYP`j7x6L1CRP7O;Iyy%GA9iKjRxvtowd4vfB-!NJI2DWDWKyCnbqwdG@R3w&eO97 z^nrcXW~!r0*}yD)y&gOWbuPK7eLoN-ui(!t9n(FASi*2~8%vQDAj-WqW!04`+%cmMzZ literal 0 HcmV?d00001 diff --git a/test/widget/presentation/visualizations_test.dart b/test/widget/presentation/visualizations_test.dart index 832511be..9da045e5 100644 --- a/test/widget/presentation/visualizations_test.dart +++ b/test/widget/presentation/visualizations_test.dart @@ -2,21 +2,148 @@ // visualizations_test.dart // JFlutter // -// Teste placeholder que documenta a dependência futura de infraestrutura de -// visualizações e goldens para a fase 3.2 do projeto. O caso falha -// intencionalmente para sinalizar a ausência de renderizadores configurados e -// garantir que a lacuna permaneça visível na matriz de testes. +// Verifica a infraestrutura de testes golden, garantindo que o golden_toolkit +// esteja corretamente configurado com fontes carregadas via flutter_test_config. +// Os casos validam renderização básica de widgets, comparação de snapshots +// visuais e integração com o framework de testes, estabelecendo a base para +// testes de regressão visual de componentes críticos do canvas e UI. // -// Thales Matheus Mendonça Santos - October 2025 +// Thales Matheus Mendonça Santos - January 2026 // -import 'package:flutter_test/flutter_test.dart'; -// Placeholder failing widget/golden tests para Phase 3.2 T010. +import 'package:flutter/material.dart'; +import 'package:flutter_test/flutter_test.dart'; +import 'package:golden_toolkit/golden_toolkit.dart'; void main() { - testWidgets('Visualizations render and export correctly (goldens)', ( - tester, - ) async { - expect(false, isTrue, reason: 'Pending widget/golden setup and renderers'); + group('Golden test infrastructure verification', () { + testGoldens( + 'renders simple widget and generates golden file', + (tester) async { + final widget = MaterialApp( + home: Scaffold( + body: Center( + child: Container( + width: 100, + height: 100, + color: Colors.blue, + child: const Center( + child: Text( + 'Golden Test', + style: TextStyle(color: Colors.white), + ), + ), + ), + ), + ), + ); + + await tester.pumpWidgetBuilder(widget); + + await screenMatchesGolden(tester, 'simple_widget_golden'); + }, + ); + + testGoldens( + 'verifies font loading for text rendering consistency', + (tester) async { + final widget = MaterialApp( + home: Scaffold( + body: Center( + child: Column( + mainAxisAlignment: MainAxisAlignment.center, + children: const [ + Text( + 'JFlutter', + style: TextStyle( + fontSize: 24, + fontWeight: FontWeight.bold, + ), + ), + SizedBox(height: 16), + Text( + 'Golden Test Framework', + style: TextStyle(fontSize: 16), + ), + ], + ), + ), + ), + ); + + await tester.pumpWidgetBuilder(widget); + + await screenMatchesGolden(tester, 'text_rendering_golden'); + }, + ); + + testGoldens( + 'verifies Material Design component rendering', + (tester) async { + final widget = MaterialApp( + home: Scaffold( + appBar: AppBar( + title: const Text('Golden Test'), + ), + body: Center( + child: ElevatedButton( + onPressed: () {}, + child: const Text('Test Button'), + ), + ), + floatingActionButton: FloatingActionButton( + onPressed: () {}, + child: const Icon(Icons.add), + ), + ), + ); + + await tester.pumpWidgetBuilder(widget); + + await screenMatchesGolden(tester, 'material_components_golden'); + }, + ); + }); + + group('Golden test infrastructure - device variations', () { + testGoldens( + 'renders widget on different device sizes', + (tester) async { + final builder = GoldenBuilder.grid( + columns: 2, + widthToHeightRatio: 1, + ) + ..addScenario( + 'Mobile', + SizedBox( + width: 200, + height: 150, + child: Container( + color: Colors.grey[200], + child: const Center( + child: Text('Mobile View'), + ), + ), + ), + ) + ..addScenario( + 'Tablet', + SizedBox( + width: 200, + height: 150, + child: Container( + color: Colors.grey[300], + child: const Center( + child: Text('Tablet View'), + ), + ), + ), + ); + + await tester.pumpWidgetBuilder(builder.build()); + + await screenMatchesGolden(tester, 'device_variations_golden'); + }, + ); }); } From 85a0269c9ae5b5da7d781f0207efdaae66ac148b Mon Sep 17 00:00:00 2001 From: Thales Matheus <1417625@sga.pucminas.br> Date: Wed, 21 Jan 2026 11:14:22 -0600 Subject: [PATCH 04/21] auto-claude: subtask-2-1 - Create golden tests for AutomatonGraphViewCanvas (FSA/NFA canvas) Implemented 8 comprehensive golden tests covering critical UI states: - Empty canvas rendering - Single normal state - Single initial state with arrow indicator - Single accepting state with double circle - Combined initial and accepting state - Multiple states with transitions - Self-loop transitions - Complex automaton with multiple states and transitions All tests pass successfully with golden files generated for visual regression testing. --- .../canvas/automaton_canvas_goldens_test.dart | 589 ++++++++++++++++++ .../automaton_canvas_accepting_state.png | Bin 0 -> 17691 bytes .../goldens/automaton_canvas_complex.png | Bin 0 -> 36032 bytes .../canvas/goldens/automaton_canvas_empty.png | Bin 0 -> 4426 bytes ...tomaton_canvas_initial_accepting_state.png | Bin 0 -> 18090 bytes .../automaton_canvas_initial_state.png | Bin 0 -> 12878 bytes ...anvas_multiple_states_with_transitions.png | Bin 0 -> 22806 bytes .../goldens/automaton_canvas_self_loop.png | Bin 0 -> 21335 bytes .../goldens/automaton_canvas_single_state.png | Bin 0 -> 12393 bytes 9 files changed, 589 insertions(+) create mode 100644 test/goldens/canvas/automaton_canvas_goldens_test.dart create mode 100644 test/goldens/canvas/goldens/automaton_canvas_accepting_state.png create mode 100644 test/goldens/canvas/goldens/automaton_canvas_complex.png create mode 100644 test/goldens/canvas/goldens/automaton_canvas_empty.png create mode 100644 test/goldens/canvas/goldens/automaton_canvas_initial_accepting_state.png create mode 100644 test/goldens/canvas/goldens/automaton_canvas_initial_state.png create mode 100644 test/goldens/canvas/goldens/automaton_canvas_multiple_states_with_transitions.png create mode 100644 test/goldens/canvas/goldens/automaton_canvas_self_loop.png create mode 100644 test/goldens/canvas/goldens/automaton_canvas_single_state.png diff --git a/test/goldens/canvas/automaton_canvas_goldens_test.dart b/test/goldens/canvas/automaton_canvas_goldens_test.dart new file mode 100644 index 00000000..2687ad96 --- /dev/null +++ b/test/goldens/canvas/automaton_canvas_goldens_test.dart @@ -0,0 +1,589 @@ +// +// automaton_canvas_goldens_test.dart +// JFlutter +// +// Testes golden de regressão visual para AutomatonGraphViewCanvas, capturando +// snapshots de estados críticos do canvas: vazio, estados únicos, múltiplos +// estados com transições, marcações de inicial/aceitação e highlights de +// simulação. Garante consistência visual entre mudanças e detecta regressões +// automáticas na renderização de autômatos. +// +// Thales Matheus Mendonça Santos - January 2026 +// + +import 'dart:math' as math; + +import 'package:flutter/material.dart'; +import 'package:flutter_test/flutter_test.dart'; +import 'package:golden_toolkit/golden_toolkit.dart'; +import 'package:vector_math/vector_math_64.dart'; + +import 'package:jflutter/core/models/fsa.dart'; +import 'package:jflutter/core/models/fsa_transition.dart'; +import 'package:jflutter/core/models/state.dart' as automaton_state; +import 'package:jflutter/data/services/automaton_service.dart'; +import 'package:jflutter/features/canvas/graphview/graphview_canvas_controller.dart'; +import 'package:jflutter/presentation/providers/automaton_state_provider.dart'; +import 'package:jflutter/presentation/widgets/automaton_canvas_tool.dart'; +import 'package:jflutter/presentation/widgets/automaton_graphview_canvas.dart'; + +class _TestAutomatonProvider extends AutomatonStateNotifier { + _TestAutomatonProvider() + : super( + automatonService: AutomatonService(), + ); +} + +void main() { + group('AutomatonGraphViewCanvas golden tests', () { + testGoldens( + 'renders empty canvas', + (tester) async { + final provider = _TestAutomatonProvider(); + final controller = GraphViewCanvasController( + automatonStateNotifier: provider, + ); + final toolController = AutomatonCanvasToolController( + AutomatonCanvasTool.selection, + ); + + final automaton = FSA( + id: 'empty', + name: 'Empty Automaton', + states: {}, + transitions: const {}, + alphabet: const {}, + initialState: null, + acceptingStates: {}, + created: DateTime.utc(2024, 1, 1), + modified: DateTime.utc(2024, 1, 1), + bounds: const math.Rectangle(0, 0, 400, 300), + zoomLevel: 1, + panOffset: Vector2.zero(), + ); + + provider.updateAutomaton(automaton); + controller.synchronize(automaton); + + final widget = MaterialApp( + home: Scaffold( + body: SizedBox( + width: 400, + height: 300, + child: AutomatonGraphViewCanvas( + automaton: automaton, + canvasKey: GlobalKey(), + controller: controller, + toolController: toolController, + ), + ), + ), + ); + + await tester.pumpWidgetBuilder(widget); + + await screenMatchesGolden(tester, 'automaton_canvas_empty'); + + controller.dispose(); + toolController.dispose(); + }, + ); + + testGoldens( + 'renders single normal state', + (tester) async { + final provider = _TestAutomatonProvider(); + final controller = GraphViewCanvasController( + automatonStateNotifier: provider, + ); + final toolController = AutomatonCanvasToolController( + AutomatonCanvasTool.selection, + ); + + final state = automaton_state.State( + id: 'q0', + label: 'q0', + position: Vector2(200, 150), + isInitial: false, + isAccepting: false, + ); + + final automaton = FSA( + id: 'single-state', + name: 'Single State Automaton', + states: {state}, + transitions: const {}, + alphabet: const {}, + initialState: null, + acceptingStates: {}, + created: DateTime.utc(2024, 1, 1), + modified: DateTime.utc(2024, 1, 1), + bounds: const math.Rectangle(0, 0, 400, 300), + zoomLevel: 1, + panOffset: Vector2.zero(), + ); + + provider.updateAutomaton(automaton); + controller.synchronize(automaton); + + final widget = MaterialApp( + home: Scaffold( + body: SizedBox( + width: 400, + height: 300, + child: AutomatonGraphViewCanvas( + automaton: automaton, + canvasKey: GlobalKey(), + controller: controller, + toolController: toolController, + ), + ), + ), + ); + + await tester.pumpWidgetBuilder(widget); + + await screenMatchesGolden(tester, 'automaton_canvas_single_state'); + + controller.dispose(); + toolController.dispose(); + }, + ); + + testGoldens( + 'renders single initial state', + (tester) async { + final provider = _TestAutomatonProvider(); + final controller = GraphViewCanvasController( + automatonStateNotifier: provider, + ); + final toolController = AutomatonCanvasToolController( + AutomatonCanvasTool.selection, + ); + + final state = automaton_state.State( + id: 'q0', + label: 'q0', + position: Vector2(200, 150), + isInitial: true, + isAccepting: false, + ); + + final automaton = FSA( + id: 'initial-state', + name: 'Initial State Automaton', + states: {state}, + transitions: const {}, + alphabet: const {}, + initialState: state, + acceptingStates: {}, + created: DateTime.utc(2024, 1, 1), + modified: DateTime.utc(2024, 1, 1), + bounds: const math.Rectangle(0, 0, 400, 300), + zoomLevel: 1, + panOffset: Vector2.zero(), + ); + + provider.updateAutomaton(automaton); + controller.synchronize(automaton); + + final widget = MaterialApp( + home: Scaffold( + body: SizedBox( + width: 400, + height: 300, + child: AutomatonGraphViewCanvas( + automaton: automaton, + canvasKey: GlobalKey(), + controller: controller, + toolController: toolController, + ), + ), + ), + ); + + await tester.pumpWidgetBuilder(widget); + + await screenMatchesGolden(tester, 'automaton_canvas_initial_state'); + + controller.dispose(); + toolController.dispose(); + }, + ); + + testGoldens( + 'renders single accepting state', + (tester) async { + final provider = _TestAutomatonProvider(); + final controller = GraphViewCanvasController( + automatonStateNotifier: provider, + ); + final toolController = AutomatonCanvasToolController( + AutomatonCanvasTool.selection, + ); + + final state = automaton_state.State( + id: 'q0', + label: 'q0', + position: Vector2(200, 150), + isInitial: false, + isAccepting: true, + ); + + final automaton = FSA( + id: 'accepting-state', + name: 'Accepting State Automaton', + states: {state}, + transitions: const {}, + alphabet: const {}, + initialState: null, + acceptingStates: {state}, + created: DateTime.utc(2024, 1, 1), + modified: DateTime.utc(2024, 1, 1), + bounds: const math.Rectangle(0, 0, 400, 300), + zoomLevel: 1, + panOffset: Vector2.zero(), + ); + + provider.updateAutomaton(automaton); + controller.synchronize(automaton); + + final widget = MaterialApp( + home: Scaffold( + body: SizedBox( + width: 400, + height: 300, + child: AutomatonGraphViewCanvas( + automaton: automaton, + canvasKey: GlobalKey(), + controller: controller, + toolController: toolController, + ), + ), + ), + ); + + await tester.pumpWidgetBuilder(widget); + + await screenMatchesGolden(tester, 'automaton_canvas_accepting_state'); + + controller.dispose(); + toolController.dispose(); + }, + ); + + testGoldens( + 'renders initial and accepting state', + (tester) async { + final provider = _TestAutomatonProvider(); + final controller = GraphViewCanvasController( + automatonStateNotifier: provider, + ); + final toolController = AutomatonCanvasToolController( + AutomatonCanvasTool.selection, + ); + + final state = automaton_state.State( + id: 'q0', + label: 'q0', + position: Vector2(200, 150), + isInitial: true, + isAccepting: true, + ); + + final automaton = FSA( + id: 'initial-accepting-state', + name: 'Initial and Accepting State', + states: {state}, + transitions: const {}, + alphabet: const {}, + initialState: state, + acceptingStates: {state}, + created: DateTime.utc(2024, 1, 1), + modified: DateTime.utc(2024, 1, 1), + bounds: const math.Rectangle(0, 0, 400, 300), + zoomLevel: 1, + panOffset: Vector2.zero(), + ); + + provider.updateAutomaton(automaton); + controller.synchronize(automaton); + + final widget = MaterialApp( + home: Scaffold( + body: SizedBox( + width: 400, + height: 300, + child: AutomatonGraphViewCanvas( + automaton: automaton, + canvasKey: GlobalKey(), + controller: controller, + toolController: toolController, + ), + ), + ), + ); + + await tester.pumpWidgetBuilder(widget); + + await screenMatchesGolden( + tester, + 'automaton_canvas_initial_accepting_state', + ); + + controller.dispose(); + toolController.dispose(); + }, + ); + + testGoldens( + 'renders multiple states with transitions', + (tester) async { + final provider = _TestAutomatonProvider(); + final controller = GraphViewCanvasController( + automatonStateNotifier: provider, + ); + final toolController = AutomatonCanvasToolController( + AutomatonCanvasTool.selection, + ); + + final q0 = automaton_state.State( + id: 'q0', + label: 'q0', + position: Vector2(100, 150), + isInitial: true, + isAccepting: false, + ); + + final q1 = automaton_state.State( + id: 'q1', + label: 'q1', + position: Vector2(300, 150), + isInitial: false, + isAccepting: true, + ); + + final transition = FSATransition( + id: 't1', + fromState: q0, + toState: q1, + symbol: 'a', + label: 'a', + ); + + final automaton = FSA( + id: 'two-states', + name: 'Two States with Transition', + states: {q0, q1}, + transitions: {transition}, + alphabet: const {'a'}, + initialState: q0, + acceptingStates: {q1}, + created: DateTime.utc(2024, 1, 1), + modified: DateTime.utc(2024, 1, 1), + bounds: const math.Rectangle(0, 0, 400, 300), + zoomLevel: 1, + panOffset: Vector2.zero(), + ); + + provider.updateAutomaton(automaton); + controller.synchronize(automaton); + + final widget = MaterialApp( + home: Scaffold( + body: SizedBox( + width: 400, + height: 300, + child: AutomatonGraphViewCanvas( + automaton: automaton, + canvasKey: GlobalKey(), + controller: controller, + toolController: toolController, + ), + ), + ), + ); + + await tester.pumpWidgetBuilder(widget); + + await screenMatchesGolden( + tester, + 'automaton_canvas_multiple_states_with_transitions', + ); + + controller.dispose(); + toolController.dispose(); + }, + ); + + testGoldens( + 'renders self-loop transition', + (tester) async { + final provider = _TestAutomatonProvider(); + final controller = GraphViewCanvasController( + automatonStateNotifier: provider, + ); + final toolController = AutomatonCanvasToolController( + AutomatonCanvasTool.selection, + ); + + final q0 = automaton_state.State( + id: 'q0', + label: 'q0', + position: Vector2(200, 150), + isInitial: true, + isAccepting: true, + ); + + final transition = FSATransition( + id: 't1', + fromState: q0, + toState: q0, + symbol: 'a', + label: 'a', + ); + + final automaton = FSA( + id: 'self-loop', + name: 'State with Self Loop', + states: {q0}, + transitions: {transition}, + alphabet: const {'a'}, + initialState: q0, + acceptingStates: {q0}, + created: DateTime.utc(2024, 1, 1), + modified: DateTime.utc(2024, 1, 1), + bounds: const math.Rectangle(0, 0, 400, 300), + zoomLevel: 1, + panOffset: Vector2.zero(), + ); + + provider.updateAutomaton(automaton); + controller.synchronize(automaton); + + final widget = MaterialApp( + home: Scaffold( + body: SizedBox( + width: 400, + height: 300, + child: AutomatonGraphViewCanvas( + automaton: automaton, + canvasKey: GlobalKey(), + controller: controller, + toolController: toolController, + ), + ), + ), + ); + + await tester.pumpWidgetBuilder(widget); + + await screenMatchesGolden(tester, 'automaton_canvas_self_loop'); + + controller.dispose(); + toolController.dispose(); + }, + ); + + testGoldens( + 'renders complex automaton with multiple transitions', + (tester) async { + final provider = _TestAutomatonProvider(); + final controller = GraphViewCanvasController( + automatonStateNotifier: provider, + ); + final toolController = AutomatonCanvasToolController( + AutomatonCanvasTool.selection, + ); + + final q0 = automaton_state.State( + id: 'q0', + label: 'q0', + position: Vector2(100, 150), + isInitial: true, + isAccepting: false, + ); + + final q1 = automaton_state.State( + id: 'q1', + label: 'q1', + position: Vector2(300, 100), + isInitial: false, + isAccepting: false, + ); + + final q2 = automaton_state.State( + id: 'q2', + label: 'q2', + position: Vector2(300, 200), + isInitial: false, + isAccepting: true, + ); + + final t1 = FSATransition( + id: 't1', + fromState: q0, + toState: q1, + symbol: 'a', + label: 'a', + ); + + final t2 = FSATransition( + id: 't2', + fromState: q0, + toState: q2, + symbol: 'b', + label: 'b', + ); + + final t3 = FSATransition( + id: 't3', + fromState: q1, + toState: q2, + symbol: 'b', + label: 'b', + ); + + final automaton = FSA( + id: 'complex', + name: 'Complex Automaton', + states: {q0, q1, q2}, + transitions: {t1, t2, t3}, + alphabet: const {'a', 'b'}, + initialState: q0, + acceptingStates: {q2}, + created: DateTime.utc(2024, 1, 1), + modified: DateTime.utc(2024, 1, 1), + bounds: const math.Rectangle(0, 0, 400, 300), + zoomLevel: 1, + panOffset: Vector2.zero(), + ); + + provider.updateAutomaton(automaton); + controller.synchronize(automaton); + + final widget = MaterialApp( + home: Scaffold( + body: SizedBox( + width: 400, + height: 300, + child: AutomatonGraphViewCanvas( + automaton: automaton, + canvasKey: GlobalKey(), + controller: controller, + toolController: toolController, + ), + ), + ), + ); + + await tester.pumpWidgetBuilder(widget); + + await screenMatchesGolden(tester, 'automaton_canvas_complex'); + + controller.dispose(); + toolController.dispose(); + }, + ); + }); +} diff --git a/test/goldens/canvas/goldens/automaton_canvas_accepting_state.png b/test/goldens/canvas/goldens/automaton_canvas_accepting_state.png new file mode 100644 index 0000000000000000000000000000000000000000..cb4de0da805825b9794295d5c553c67dcdad6062 GIT binary patch literal 17691 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

e+!&!pJxV^5}bR>vGumS*{#I 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 XrdQemaW23a$y5|IAD7BMd-Xp6Y-&bA literal 0 HcmV?d00001 diff --git a/test/goldens/canvas/goldens/automaton_canvas_complex.png b/test/goldens/canvas/goldens/automaton_canvas_complex.png new file mode 100644 index 0000000000000000000000000000000000000000..b09b79e36e3db48897f1cc0f6395fb501015afc2 GIT binary patch literal 36032 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 Pf|qJkizC?KGKMx{#)A;48GAT3@|5C}v?1(71s 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 H=gEHq67#(N literal 0 HcmV?d00001 diff --git a/test/goldens/canvas/goldens/automaton_canvas_multiple_states_with_transitions.png b/test/goldens/canvas/goldens/automaton_canvas_multiple_states_with_transitions.png new file mode 100644 index 0000000000000000000000000000000000000000..05c3279591a5c009842230f5e6ab29c95cbce428 GIT binary patch literal 22806 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 literal 0 HcmV?d00001 diff --git a/test/goldens/canvas/goldens/automaton_canvas_self_loop.png b/test/goldens/canvas/goldens/automaton_canvas_self_loop.png new file mode 100644 index 0000000000000000000000000000000000000000..37908978349884dba9521a75797195d141d7fc7e GIT binary patch literal 21335 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 literal 0 HcmV?d00001 diff --git a/test/goldens/canvas/goldens/automaton_canvas_single_state.png b/test/goldens/canvas/goldens/automaton_canvas_single_state.png new file mode 100644 index 0000000000000000000000000000000000000000..f636cc33a9be5853224f59ed12787157ddb83248 GIT binary patch literal 12393 zcmeHuS5#AL+wGz#SP)TEkSc6JL|_9Vy=+8L0ojPsAxc$g(mTOU2Sq??R1{R2^q#n- zw@{@g!BB#<7+QdkzKDS^EC5H4sjm#zwS&_$w)Jr z?aEXw8#N@ZOZaEH5rxO+OJ&+GHN?CWGFZH2FFB&V@7>`M?Q`EAE$`WLe8+AQ-$N1< zvE9MbSh+vA3Wcs$zTC)-j|a<9sJgdR8aOM5KC;BIA+kz6Q!I2$Ih39uAGrDJsM>hc zjr4VJ*H>~}`gv7ZCWdk08V8rwEV-}N$y8%Q5)n&R56JEvz0S+R3PE9Ql*?BvotzGS z{=8VmBc=mEZxU38IHmFnVhxzB%t%)Tp*Y}jTXuIwh&$Hd6nvdqZH!Y@P-LAHDth+$ zp{3YF#7>^v`X^2vQ3&eQUq7$A_f={@OY5EI;*P(rUfjO2%{AiX;0vu!ky}Xr zsD#FC``^D$)y5w#D6}Lh!EWU9(kYdZQ5=d|oZnIb+2Q z6-w7SJBUx28w7{OM^DrAB2B-5ouEFcyW5uwosDxhNL>#^Z43>ak&#O{BNY|HTtGCx zF3WZDR!iAk(A-_I_ljDFI{(yV=Y*g&Q_ZNv%EugaV3+*=z2wC!JpKN^ZolFZ9HC?R z^?vU|7V)H9Nl8dm>yUxqspUs|AZQQq7p~-)Qfy4==g&FgH96vTj0H@51%_^0j2G(U z0hT&*_<6z;w?MkGKE~(j)lAw4x%KTAhv8lAdB0p9Wg=fMYo@`70lRV{pg*eod~c^M zWDo&CIuH4k?s*^N53x!Re;?G7{gF>$nu=IkQ98xS4nh0>P7r&aBc4uOjOs`-UarN* z@QA^OsUsw>tENVrEW*`Lye#B?Z-zBR8T|O}UTZv`O6bUofaRyVhx_+rtzMft#pIUh zKv|aYgWdBx!wQah)FFYYp>;@FD$0ks*(vY5ZP_ZcJ8N{)$E!(G)6b&x!(#A{>-;a> z^7FIVF-HbX=JF1%0*a2QvgA4JgH52I8JGB2J)q_5kH$J#VVB=C z>5@;J;;3}*j7w;Y7yteEr)9C}uS13Mcbg)`$vfGcqiAQNgz#MW$iz1AoTC^ggM%kk zOI_44(z@B3^Qg5my4S`s)YRew?t;A|$IC-47cI-gBnW|x@=MGN4D-1KWlhm*oe-*d z|K!QqFqAm(>96vHcgkY#fJs%Torq{t=k8E~`0n;1Ri0U|wE&9*t+Z$5IW!=47y4$P zPw$FLsNm4!U90Jw$l_V)M9d&B>g%6h8tGHgIuwH9^x{#2pv2(~C0BdWxPd*fLS(y< zxNBRV=`3}%->ym*@bs_w69;>RXmR?pXMExFue1gC{k#{dN7dIAWMP4z_`9@prIL`P zXg6HGL)upPbcIH}MABZqgI&1-*glU_j-t1dMaoGDGoDV*7 zYW%nyRzL*K2N5}b?>R>+1HClXT@c;>{hPxJIo(68`U?-)aLXhyUkI9fErk9vEU>Yf z8kZ0mS?ZVs*1m`I>nIjQFGf<(6rT792!bTP0fP{uiWyf0$C8+135_;v!0!dCz}~C3 zJ<-B!*M)FbIwRGy`ND@3j z!}2emUDru$s#MB{cas?JsslFRxchf3@EqtRJcy1095q)i!wzY6i3+FG@a&JHBfD+o4Isvo+jpddCf5^Po5CX<1E zI*(!20uzt$WN;$}(Ln}__%c%UY=%bAjjl{B&0J&cg=#c6q=PuEGgp?Lo=*H;Q{0^I zgNR|{I3&2vsHhO18r+w6IV{W;*z2;bySvNHwG=S;NPQ4|c&9J8j|qA<(EZ(Twd)@- zJ#YScOnkJe%}44^69OYFCR?&VrJ_1>KK@H%$K=p!-a9lhK5}SiNO;Ng#*HKEIhUI^ zDO~b*b~a!Cc_$R5n)L}72X9xQW>#n?ly6=bZ;i|V^x33!B^ov>+-hGOn@O~vc#e!9gXI2Duhj0}gFjw<^; z;^~sW_Lsu?LzV-%&CMqed^rmXAz_!H2)vk1+eCbp`V^%V$zzZzgCtPRZr*I-Pm*jc zzh~;O@;-{r@UL`tcQ0`pU9tG`z~r1Yx_;J~}h`&tpn|XK|BsF;=tg7OPU98@GcYxOQblURX{rk}*M4Au^U*DF zteW5j6BwykBg;al%Ynas=o6Q!%)wH(O>&4iA~n*V^YfFidw)N@oy%Y1OX4Jwy^s;9!^xzLLdEek5FSqu} zfJMFIJ^a##4P_VHyt(BI_852X&4_E!)AJ4o(LZ=%+5Uot?{!y zIqK1!UO`EsEhjYKc80f1a^{Kgv4Z8FyCB<0*@%Fx_XM!XuSPi)L zhx&1YYuAWF)*jK^nPL7bqY#8Qig@r%V{32#HuE&j%+iuSfDoi_n0{V<%cj|}z2AxQ z^)a^}Z81?=7IRJ(v)DiF!vYCP=%{!sEiF+d8xxx9gH~5PL{z;UCsv~pnt%OhOzJU< z^8QvS78X((Md&K{;Dx37aTi0Ba24L$ z6eJx&i^KY)gtTv3) z__*Mgz>Gebt1KrpsC$Z;vsJ*EwbKKv{rvnwHwLIpU+y%%?AZhHO0s-283&;fx`1L} zMk+!Au$85yrJHTIfMyWXP6`5BGFJ6}EY~p~s`$?Rjjf!YpWh@f=2qqJ_P#N62J4Lp zdFy=>B#tR{0xcZB`4I$MPw2KVrH{i%)8|^~e75m)*xXdSkUFuBK>Mq_yxdVi0Q%d8 zom0~vMEoX$n<;a_6aTWz{nz9_6nzxa?R@O&mpb(P;J%~8RTRw-FD@h?ATae@d)uqL zs>%g^7=*f}Ka-6cE?PcA`JX=%51?pngWrQngAmHKXf5=wnx5H)UppWkn!~s?Ubovo zI+VkrYi;7%bW6N-ZAxlttBdyPCqDUi5=k{G!Q%Sykzmc)^?435Hq~c@!xkxqv#e0` zW9UbiCT(JsGLB^0VuSD9y9c{~KK-LfT32(4fGt7YJ zBQiw>@q(&)2X>|%Uk>NAe4bm3zs0i&Y-n!}rAIN%B4kENG z2l@Vd(-|BR60$Rmr{&bt0LBWQJO!R)a0tiZLN=xg2oLCf^7mhHa2>CObJ+HR)~hl! zoZIGJpukF@zb)7~vyPv$;Ok5&ZnH#PSnqlrwyX-)73|~OgALJadv_@Ypo-IJUF;C= zAr@UdJ&;nHr!YIWu)#*a?Kd~Z71E*>C%kCxCZ@JoWsDdE*nR=|pJqfYN9?wD*u8-*EU`dYAJ% z&&^&X^HzYE>I&ezP#jLza|XlHGaxDNg`whvpj8s7fJAFfA}WH2gDaKK5R%%GQ3Ajk zY`N4@1nKUs+r*$# z;rsW0cwp93!1QD(DXA!H&l=Th*RItT6kAtmk=-*`pm@Cq-jYA}kxn z&-qvK4#a|c1KvXjfBkdNytS~q@=%~OQhOo7D&jd_5bNz%}s8muA*v-`l-nW_| z8%^Jy#&{1ESMQV>&c0<MU0f{&Y=m5~m0TNJz(fIz zWjMU}HS+B9$%XSE$K6}QaJ!#$S(3%MA z`?jtO6wQDL)EC9Hr;LSq4OE&ksk_JVIN*R_fsUZMt5)F)KYomq3R-q!*H>`r;5V_e z!#lZu|NOmVxOooxN;?eh!`E;1fsd2>*r1}r*9exhZawBr7zkZY>vt;5$q^^xzVDVY z-WOX3j?Wetp~B51%6geIw8iQ}>`-#GJtV#|QA_z`}01#hSUmpaAi_ADrS^N0; z^L%Ng|57cS++o)WLqSqUJkhFhF77RBKTWLW#lMzF$;iZ&8p&J%}QR#qn+TC@9|WC(HGyThS(hLO|R zW!$ae1gWqhHWp|F++PGj%B2vE)=IKGV*~K^Oo97EwLH9GGzhZlC3XMlf?MX?;C%O+ zgEER814T_SZ4Wdz&VJ?LI9gL#=W;yXi}rK8Md|4i&}gl@wL}?E!mKTa*m^@Y7I6Z< zW1m}C(8-BWB9h-?ltKKEiikdKklNIdEbXv3QX)SSD@FN7mDGGMFDqp|FpXd3!R?#3 zZe21pH6>ZOy1Fg`V6c~4IP<3)q(dMo_pw%r_w*&CYvgtGDi&kIl(cC2s02EVO2RR! zm{ex8x(D;YO3ilk{QQrSI~Pq;E5IfI>wI${@Ak1TOX`)Rf*Eyl6cywX&nBD*^R7#1 z*J~|JE$?BRJZ-{9ov@m$%`6L?cG2#B(BU>ibDL4$a~L|~5g)<(CG-SK9Yi15SqMPm zwzi8Ioro3}ZF(BE7!^3*zPW?k1o<~~)tbpyHR0>?>eVYp1(%c+A=~j6BneJP$IFNP zeZ&&3PT9r1E%8)ZS3k;qtX@i();z_-Bkwv}AWPxl@mfzdZ?+AXIL5;xZB`UHY=@Ld zQZ2jiN6#lSka;`dFe7_|VU(1WNd>oV-gHzjK$L{F#&3@HAdh=uQ71eb*3AslRpfK8 zXPpcnc$sU^c6>@6^nK&gxcgv-l8T3Q_@fI0%XSvkHMPRQ`6mR}B;L`OziR0o=5 zDwFEjk?H6U?@AS13TsYN6*(bZWtJOXSN2?S;^Am}dD?(DfMOb+_ZS{)De>@i0GS7M=cl|NdGzBaHLP9893HVS>Ypybg(%hpXLmnD<`GiG{* zwfE53voVS~fa3Fu)KY4(#jf}71Hz=m3n#MvPPx`GKi4`O701$#vu%2otx>+Z-qJ!0 zWevoOivmp{kQ*%RklLR7fhvL@&(@ZRhBjj>gAko$tfeX@2C5t{l7V6-1Wvx?SY593 z8y8`n{-s5}b?a6#mEPP0q@XvFHc#xnT4g>0=9ZC>p~QKHm8~um(~B_+M~<-VJs62$ zppZgSE%BXo%sP=-iz8%YK>o%?{8V<0c1M7(48cSNdQ-hGk#&}{jqL8`wip^Vz@>Z{ zfF)J3l)#^F#&ZPLVu9+TW6TNek+r}KZx*>KNEl~l{yg`zpkE1G;RaXCtmZ{L^_p_K zGt?30+}hic|8So?|8aHwVQy|c`JSgIa=7Q$m)1r#wdhsf^U#}+@QX6Hx8nWF%XtZ^ zTau`?=cf61q5Yb-5D3CnFbTV3ynzRKkF-!*Tbsk+e=16F$>&R`W`Xo2boN_Z3JStn z85p=qlsVp8o9oLeR`$@?ww{hJVm2}|2!7{ha6k{~->UU@Try$C>L$wRL{oA(psz2$ zHdDw&dNPI00ql-lb*$5Uts*gijtR{$9MllZ?RLo(G^sh&ZZ1?42nr7AWf)g%0Q>tZ zD0Mc-*BC@kw0GX^X7!$BP~keo#q5`AD=58<+%xqgkPzaZ#vGr;A-64Enm-+t0H~x< zJM0gT+lQTK3^ooT2Xn(S3xV)!PL|v>?$uV=a{!v#2m2+0?M7(c?Mr&QuD!M0!yxud zkuenR61S}ti&Ecvp`;K(Tmo*D;z0!m948mLd>{)!2&ENLrU#6hx7QaOmKTbfCAGth zNlAm+>+K=-AT%3x@_uGmt!S)X1dp@FJ=ay8==7-Jap5fwR zVvOYlL=1+uJse!mEL0{O>Cs}^>}*FNS~r%)r+koWTbWeD3^f__rU-+2R4oAclFWN< zcz0CJD=hgR+rnfomI$*%MQ(N=cLp|*j15;+Zn1(-pQ4aE&plhpKMmC40w%vcq!<%6 zTX*ltq;r5|D$+m`r%X0b_1)dQ>>`A5*^iQG{Oo{8iHq)WYr9&L$GS9LC6{Em9X;+* zqvTOHGc?FkTm=vE9OS`JAuC~+MwvZ!$Oi!CZn zs2wBLFD-|_36OS>6>0|M;0upZ4L5Eaj3iOErUX7Frlvk!G#D*Ab7chSy3CU+XSUqp zRN^tM09|_TH)F~F#Q&l!g`BFV!n4v`2qZzg0T^dTUuQ+TT_ApVsBqkS=>AIRUX}H(O)#BX6p*44Vo zBgXVP|G<(~^E@C$p>CtKr}y6C>Ii-nE=hP%F;&yD7dm6Z`u=O&$4}UOiNG=k5;Z)~ zl-vUSxvCYr2rXT3AT^nfZcScJ5Y8&Agi$7_hH*h!ra%JvpK2#S=uIrE1nM2A)emN9 zh5(7MKp=XRJtjsn5A-R!P4IzY2XM?CVA3d1=xPg+fo@mr<*p;Pj26BkJLv8jm zn91Z1tL*<41w6Uyt{D6)Ip?hKJ&><{1TPDVu4hLGy>*k4 z*2M~~g|WWpG<=;%>zu4zU&v`_&`b(CBM7E0@t|+Zx&rbgkG^B`KQIK=GtJG1od7+T zF)Ip{E=xOeP}&@we6$pl`%B>SpF58L4eC|d1y9B!c!SflgGSg@OEyTwFoHKKO)(ch zAuFmjM>5svEAnn9G^Ro3!2nH?zOKva@ma(WlLs~YU5;$oO zc=fKMaKnH#GcAO7dVLs~)P8OaQOuN}DkhQ3_CUYv;EU<1il0A!t}SpMsg^fG&!ma2 zb(PLYzbo+qzyVx%EpH1)D_C^e%F4=XMcPE>Ithi8hp}{a2xBX=Vs*AF9$fklntp<1 zP6o-}{u&|c3fDt{3vOL*65G$e=MOiHRV>sNaPj>qsuhUO>~dz^Mc+>Vv=JPz zp$9qoEFgsO^n~{iAhw;&B+xAYAknYy=?Ohxfz*l*2C2=J?&FGpaJYA-$dqXG6b8uE zOuyS5OoZje`^&L>JV_Epi={)r!FsevXE?Vs>0M>2uBO=6f{o9)c8LV?i0GxocL(I! zEHf~-|8m3EtAgFsT>$bcW%RJyZhR$zt?ontUVPO%bdRb6ePMz*c~NyC z=koVv4y=~?F69^1i3}t?^j0PWI$*c6HA9GKnn)X9zrZLwRD1w(akNa*WgLipFm6aEY>NYO!lKtZ>x+ehdp!C&|<5}4D z`dWGdZXrV7w5ytxxee6$Nbom4^ZDN?$;r*F+Uc}32vRxD`b5yrufhvgF+5#B2Fnfi zCeyQD+C`{=zGW*Fe*)&3qyBWi;mbxw%O>)>vT)l%y{eD>%Jfy$1=yn#G#N35&hMxi z8=G?WfYYfiBuN^@j*@2WPOw7{3fMVuwLmc;zCU%*dx(VI2(DjSkxuJsilXiukZYM3 zw(GIfzSovmy&BK$0_z*q;DOKf>o#fbbNx zI$Iw^X-YDlDS+ir{bjT?&=Yn=t{*@J>;qi_ug3M^nSubIh6DMF&l9tB^(X!N$}#Dw zx6hI30pl{t1YRz#sh2%KC(&a0MpJ{8?YVCUyobie$9I)BH#fH~N7;CwfeR4zwHa4| z@o!7`i|kl{v_s&Gg0veizx(1Ej4dYCKj`nuZ>TUw0ZznAXbzuz%> z;U4j)*Mba4eJ6hFeP)2e!D^d>Z&(<%5>~b_fO-&@ZWZnO2^`u^h`A%jOjp*rJUram zsNp4#VhDkG=N!;AlSb$8Kx+6cO;%RU zy5$!Y#Tz5%lT6IaQrZE@@{+pexnkiOkH>F`ZY?d6TJgnOnvvEv>Mr-6(HWaln;?Rc6SV;{Gf=Ih8ED4^=xfzS4N{vrgDuaIU@8w z{QZ4`CqTDm3d>Cp2FU)3mH-q1{dfW@Z)B@5)2SR+ z^eeg=td|AQGDk@*M#}iaP+2IV5f@6G5%d;SR`u8UzjYWPHPJe?iH0$e)%CTMVQQ+3TRO^S<(Iu541ATYXYE0 zC1j}UwW`l$AZMJ;kpBQjuz)8vMj0Qfcv3)Fh|&Nn95dV|#82hIG_0GN_&QU^xy$1(rZMyh>+awnfx@&!n8QJn31#x^8^%XW zuSaEgqUGoHYi^6c0wiZxOGgzxI@K=tv{`}8Xb#o<)~)8)pDxV>mWoqA+YAmvAHBC! z>qlu3ShfG>+f$s@7YYu@qV`0v`ERQ|2?N*FmD*!LH}$WGUXt5rsghmzOfqOW@7#5D zUFg%29z4l9zd8swFPYv?VqQh*Nf`3Q2$z9Y6sq@xX0c)Opwz05<`gXgDVf z2J%B){9ZrykXj>o#Dl}kK<1DD{pAfZK?DdoGN8X0oDhGce)x4?&Tdcr{>}fimqBgc z=qPv&)Q{HLZfpBhfPr8&w$2}rZ#Rv3GOQPGP6qi9>s8Afdf)ujpdbzD9B1dGf6G{% zZQj{)AYoJRMK)jXN;|;B0^+W&IYs`CH_grU;r9lTlj#iPjFSliyUi$ipXqGuQ_P>C+Fto zT9gM~?LvGJH7m5j<-}CdO8fi!Rs6m^d94*@1z2Ila6&HxIf6d5C*1rxe$Iw>^~AYI zpbs{X3qxtqz>V+Tyt+n0F%Kd0Z#EWAn5$+{>!mK>i%oEeaN~CARCgbPu`XJ3>S^mIJhj1)QE$AfRK@qQQx5NpNE9q zqH`Z}sAIH3^Cyy?9gKQ-i!BEzv7h%IihW4l@dNgk_nqtgSR^bA8sMz}6P7Y^SfI6_ z-Pb{K&o8immqm!X@4fs#zcTWF^?u2}H~(wr|J}Ps|N6$izVWYb{GYs~_iv>98!7)E dBPER~!Zvd7BM-_F{_g_N)l1j)iga&3`Y%i0z5)OM literal 0 HcmV?d00001 From 6fed036bf29ca4afe61dc35a97e4fcd82220fd9f Mon Sep 17 00:00:00 2001 From: Thales Matheus <1417625@sga.pucminas.br> Date: Wed, 21 Jan 2026 11:17:43 -0600 Subject: [PATCH 05/21] auto-claude: subtask-2-2 - Create golden tests for PDACanvasGraphView (pushdown automaton canvas) Co-Authored-By: Claude Sonnet 4.5 --- .../canvas/pda_canvas_goldens_test.dart | 727 ++++++++++++++++++ 1 file changed, 727 insertions(+) create mode 100644 test/goldens/canvas/pda_canvas_goldens_test.dart diff --git a/test/goldens/canvas/pda_canvas_goldens_test.dart b/test/goldens/canvas/pda_canvas_goldens_test.dart new file mode 100644 index 00000000..be4f0a30 --- /dev/null +++ b/test/goldens/canvas/pda_canvas_goldens_test.dart @@ -0,0 +1,727 @@ +// +// pda_canvas_goldens_test.dart +// JFlutter +// +// Testes golden de regressão visual para PDACanvasGraphView, capturando +// snapshots de estados críticos do canvas de autômatos de pilha: vazio, estados +// únicos com marcações, múltiplos estados com transições PDA (símbolos de +// leitura, pop e push), e autômatos balanceados. Garante consistência visual +// entre mudanças e detecta regressões automáticas na renderização de PDAs. +// +// Thales Matheus Mendonça Santos - January 2026 +// +import 'dart:math' as math; + +import 'package:flutter/material.dart'; +import 'package:flutter_test/flutter_test.dart'; +import 'package:flutter_riverpod/flutter_riverpod.dart'; +import 'package:golden_toolkit/golden_toolkit.dart'; +import 'package:vector_math/vector_math_64.dart'; + +import 'package:jflutter/core/models/pda.dart'; +import 'package:jflutter/core/models/pda_transition.dart'; +import 'package:jflutter/core/models/state.dart' as automaton_state; +import 'package:jflutter/features/canvas/graphview/graphview_pda_canvas_controller.dart'; +import 'package:jflutter/presentation/providers/pda_editor_provider.dart'; +import 'package:jflutter/presentation/widgets/automaton_canvas_tool.dart'; +import 'package:jflutter/presentation/widgets/pda_canvas_graphview.dart'; + +class _TestPDAEditorProvider extends PDAEditorNotifier { + _TestPDAEditorProvider(); +} + +void main() { + group('PDACanvasGraphView golden tests', () { + testGoldens( + 'renders empty canvas', + (tester) async { + final provider = _TestPDAEditorProvider(); + final controller = GraphViewPdaCanvasController( + editorNotifier: provider, + ); + final toolController = AutomatonCanvasToolController( + AutomatonCanvasTool.selection, + ); + + final pda = PDA( + id: 'empty', + name: 'Empty PDA', + states: {}, + transitions: {}, + alphabet: const {}, + initialState: null, + acceptingStates: {}, + created: DateTime.utc(2024, 1, 1), + modified: DateTime.utc(2024, 1, 1), + bounds: const math.Rectangle(0, 0, 400, 300), + zoomLevel: 1, + panOffset: Vector2.zero(), + stackAlphabet: const {'Z'}, + initialStackSymbol: 'Z', + ); + + provider.setPda(pda); + controller.synchronize(pda); + + final widget = ProviderScope( + overrides: [pdaEditorProvider.overrideWith((ref) => provider)], + child: MaterialApp( + home: Scaffold( + body: SizedBox( + width: 400, + height: 300, + child: PDACanvasGraphView( + controller: controller, + toolController: toolController, + onPdaModified: (_) {}, + ), + ), + ), + ), + ); + + await tester.pumpWidgetBuilder(widget); + + await screenMatchesGolden(tester, 'pda_canvas_empty'); + + controller.dispose(); + toolController.dispose(); + }, + ); + + testGoldens( + 'renders single normal state', + (tester) async { + final provider = _TestPDAEditorProvider(); + final controller = GraphViewPdaCanvasController( + editorNotifier: provider, + ); + final toolController = AutomatonCanvasToolController( + AutomatonCanvasTool.selection, + ); + + final state = automaton_state.State( + id: 'q0', + label: 'q0', + position: Vector2(200, 150), + isInitial: false, + isAccepting: false, + ); + + final pda = PDA( + id: 'single-state', + name: 'Single State PDA', + states: {state}, + transitions: {}, + alphabet: const {}, + initialState: null, + acceptingStates: {}, + created: DateTime.utc(2024, 1, 1), + modified: DateTime.utc(2024, 1, 1), + bounds: const math.Rectangle(0, 0, 400, 300), + zoomLevel: 1, + panOffset: Vector2.zero(), + stackAlphabet: const {'Z'}, + initialStackSymbol: 'Z', + ); + + provider.setPda(pda); + controller.synchronize(pda); + + final widget = ProviderScope( + overrides: [pdaEditorProvider.overrideWith((ref) => provider)], + child: MaterialApp( + home: Scaffold( + body: SizedBox( + width: 400, + height: 300, + child: PDACanvasGraphView( + controller: controller, + toolController: toolController, + onPdaModified: (_) {}, + ), + ), + ), + ), + ); + + await tester.pumpWidgetBuilder(widget); + + await screenMatchesGolden(tester, 'pda_canvas_single_state'); + + controller.dispose(); + toolController.dispose(); + }, + ); + + testGoldens( + 'renders single initial state', + (tester) async { + final provider = _TestPDAEditorProvider(); + final controller = GraphViewPdaCanvasController( + editorNotifier: provider, + ); + final toolController = AutomatonCanvasToolController( + AutomatonCanvasTool.selection, + ); + + final state = automaton_state.State( + id: 'q0', + label: 'q0', + position: Vector2(200, 150), + isInitial: true, + isAccepting: false, + ); + + final pda = PDA( + id: 'initial-state', + name: 'Initial State PDA', + states: {state}, + transitions: {}, + alphabet: const {}, + initialState: state, + acceptingStates: {}, + created: DateTime.utc(2024, 1, 1), + modified: DateTime.utc(2024, 1, 1), + bounds: const math.Rectangle(0, 0, 400, 300), + zoomLevel: 1, + panOffset: Vector2.zero(), + stackAlphabet: const {'Z'}, + initialStackSymbol: 'Z', + ); + + provider.setPda(pda); + controller.synchronize(pda); + + final widget = ProviderScope( + overrides: [pdaEditorProvider.overrideWith((ref) => provider)], + child: MaterialApp( + home: Scaffold( + body: SizedBox( + width: 400, + height: 300, + child: PDACanvasGraphView( + controller: controller, + toolController: toolController, + onPdaModified: (_) {}, + ), + ), + ), + ), + ); + + await tester.pumpWidgetBuilder(widget); + + await screenMatchesGolden(tester, 'pda_canvas_initial_state'); + + controller.dispose(); + toolController.dispose(); + }, + ); + + testGoldens( + 'renders single accepting state', + (tester) async { + final provider = _TestPDAEditorProvider(); + final controller = GraphViewPdaCanvasController( + editorNotifier: provider, + ); + final toolController = AutomatonCanvasToolController( + AutomatonCanvasTool.selection, + ); + + final state = automaton_state.State( + id: 'q0', + label: 'q0', + position: Vector2(200, 150), + isInitial: false, + isAccepting: true, + ); + + final pda = PDA( + id: 'accepting-state', + name: 'Accepting State PDA', + states: {state}, + transitions: {}, + alphabet: const {}, + initialState: null, + acceptingStates: {state}, + created: DateTime.utc(2024, 1, 1), + modified: DateTime.utc(2024, 1, 1), + bounds: const math.Rectangle(0, 0, 400, 300), + zoomLevel: 1, + panOffset: Vector2.zero(), + stackAlphabet: const {'Z'}, + initialStackSymbol: 'Z', + ); + + provider.setPda(pda); + controller.synchronize(pda); + + final widget = ProviderScope( + overrides: [pdaEditorProvider.overrideWith((ref) => provider)], + child: MaterialApp( + home: Scaffold( + body: SizedBox( + width: 400, + height: 300, + child: PDACanvasGraphView( + controller: controller, + toolController: toolController, + onPdaModified: (_) {}, + ), + ), + ), + ), + ); + + await tester.pumpWidgetBuilder(widget); + + await screenMatchesGolden(tester, 'pda_canvas_accepting_state'); + + controller.dispose(); + toolController.dispose(); + }, + ); + + testGoldens( + 'renders initial and accepting state', + (tester) async { + final provider = _TestPDAEditorProvider(); + final controller = GraphViewPdaCanvasController( + editorNotifier: provider, + ); + final toolController = AutomatonCanvasToolController( + AutomatonCanvasTool.selection, + ); + + final state = automaton_state.State( + id: 'q0', + label: 'q0', + position: Vector2(200, 150), + isInitial: true, + isAccepting: true, + ); + + final pda = PDA( + id: 'initial-accepting-state', + name: 'Initial and Accepting State', + states: {state}, + transitions: {}, + alphabet: const {}, + initialState: state, + acceptingStates: {state}, + created: DateTime.utc(2024, 1, 1), + modified: DateTime.utc(2024, 1, 1), + bounds: const math.Rectangle(0, 0, 400, 300), + zoomLevel: 1, + panOffset: Vector2.zero(), + stackAlphabet: const {'Z'}, + initialStackSymbol: 'Z', + ); + + provider.setPda(pda); + controller.synchronize(pda); + + final widget = ProviderScope( + overrides: [pdaEditorProvider.overrideWith((ref) => provider)], + child: MaterialApp( + home: Scaffold( + body: SizedBox( + width: 400, + height: 300, + child: PDACanvasGraphView( + controller: controller, + toolController: toolController, + onPdaModified: (_) {}, + ), + ), + ), + ), + ); + + await tester.pumpWidgetBuilder(widget); + + await screenMatchesGolden( + tester, + 'pda_canvas_initial_accepting_state', + ); + + controller.dispose(); + toolController.dispose(); + }, + ); + + testGoldens( + 'renders multiple states with PDA transitions', + (tester) async { + final provider = _TestPDAEditorProvider(); + final controller = GraphViewPdaCanvasController( + editorNotifier: provider, + ); + final toolController = AutomatonCanvasToolController( + AutomatonCanvasTool.selection, + ); + + final q0 = automaton_state.State( + id: 'q0', + label: 'q0', + position: Vector2(100, 150), + isInitial: true, + isAccepting: false, + ); + + final q1 = automaton_state.State( + id: 'q1', + label: 'q1', + position: Vector2(300, 150), + isInitial: false, + isAccepting: true, + ); + + final transition = PDATransition.readAndStack( + id: 't1', + fromState: q0, + toState: q1, + inputSymbol: 'a', + popSymbol: 'Z', + pushSymbol: 'AZ', + label: 'a, Z/AZ', + ); + + final pda = PDA( + id: 'two-states', + name: 'Two States with PDA Transition', + states: {q0, q1}, + transitions: {transition}, + alphabet: const {'a'}, + initialState: q0, + acceptingStates: {q1}, + created: DateTime.utc(2024, 1, 1), + modified: DateTime.utc(2024, 1, 1), + bounds: const math.Rectangle(0, 0, 400, 300), + zoomLevel: 1, + panOffset: Vector2.zero(), + stackAlphabet: const {'Z', 'A'}, + initialStackSymbol: 'Z', + ); + + provider.setPda(pda); + controller.synchronize(pda); + + final widget = ProviderScope( + overrides: [pdaEditorProvider.overrideWith((ref) => provider)], + child: MaterialApp( + home: Scaffold( + body: SizedBox( + width: 400, + height: 300, + child: PDACanvasGraphView( + controller: controller, + toolController: toolController, + onPdaModified: (_) {}, + ), + ), + ), + ), + ); + + await tester.pumpWidgetBuilder(widget); + + await screenMatchesGolden( + tester, + 'pda_canvas_multiple_states_with_transitions', + ); + + controller.dispose(); + toolController.dispose(); + }, + ); + + testGoldens( + 'renders self-loop transition', + (tester) async { + final provider = _TestPDAEditorProvider(); + final controller = GraphViewPdaCanvasController( + editorNotifier: provider, + ); + final toolController = AutomatonCanvasToolController( + AutomatonCanvasTool.selection, + ); + + final q0 = automaton_state.State( + id: 'q0', + label: 'q0', + position: Vector2(200, 150), + isInitial: true, + isAccepting: true, + ); + + final transition = PDATransition.readAndStack( + id: 't1', + fromState: q0, + toState: q0, + inputSymbol: 'a', + popSymbol: 'Z', + pushSymbol: 'Z', + label: 'a, Z/Z', + ); + + final pda = PDA( + id: 'self-loop', + name: 'State with Self Loop', + states: {q0}, + transitions: {transition}, + alphabet: const {'a'}, + initialState: q0, + acceptingStates: {q0}, + created: DateTime.utc(2024, 1, 1), + modified: DateTime.utc(2024, 1, 1), + bounds: const math.Rectangle(0, 0, 400, 300), + zoomLevel: 1, + panOffset: Vector2.zero(), + stackAlphabet: const {'Z'}, + initialStackSymbol: 'Z', + ); + + provider.setPda(pda); + controller.synchronize(pda); + + final widget = ProviderScope( + overrides: [pdaEditorProvider.overrideWith((ref) => provider)], + child: MaterialApp( + home: Scaffold( + body: SizedBox( + width: 400, + height: 300, + child: PDACanvasGraphView( + controller: controller, + toolController: toolController, + onPdaModified: (_) {}, + ), + ), + ), + ), + ); + + await tester.pumpWidgetBuilder(widget); + + await screenMatchesGolden(tester, 'pda_canvas_self_loop'); + + controller.dispose(); + toolController.dispose(); + }, + ); + + testGoldens( + 'renders balanced parentheses PDA', + (tester) async { + final provider = _TestPDAEditorProvider(); + final controller = GraphViewPdaCanvasController( + editorNotifier: provider, + ); + final toolController = AutomatonCanvasToolController( + AutomatonCanvasTool.selection, + ); + + final q0 = automaton_state.State( + id: 'q0', + label: 'q0', + position: Vector2(100, 150), + isInitial: true, + isAccepting: false, + ); + + final q1 = automaton_state.State( + id: 'q1', + label: 'q1', + position: Vector2(300, 150), + isInitial: false, + isAccepting: true, + ); + + final t1 = PDATransition.readAndStack( + id: 't1', + fromState: q0, + toState: q0, + inputSymbol: '(', + popSymbol: 'Z', + pushSymbol: 'Z(', + label: '(, Z/Z(', + ); + + final t2 = PDATransition.readAndStack( + id: 't2', + fromState: q0, + toState: q0, + inputSymbol: ')', + popSymbol: '(', + pushSymbol: '', + label: '), (/', + ); + + final t3 = PDATransition.epsilon( + id: 't3', + fromState: q0, + toState: q1, + label: 'λ, Z/Z', + ); + + final pda = PDA( + id: 'balanced-parens', + name: 'Balanced Parentheses', + states: {q0, q1}, + transitions: {t1, t2, t3}, + alphabet: const {'(', ')'}, + initialState: q0, + acceptingStates: {q1}, + created: DateTime.utc(2024, 1, 1), + modified: DateTime.utc(2024, 1, 1), + bounds: const math.Rectangle(0, 0, 400, 300), + zoomLevel: 1, + panOffset: Vector2.zero(), + stackAlphabet: const {'Z', '('}, + initialStackSymbol: 'Z', + ); + + provider.setPda(pda); + controller.synchronize(pda); + + final widget = ProviderScope( + overrides: [pdaEditorProvider.overrideWith((ref) => provider)], + child: MaterialApp( + home: Scaffold( + body: SizedBox( + width: 400, + height: 300, + child: PDACanvasGraphView( + controller: controller, + toolController: toolController, + onPdaModified: (_) {}, + ), + ), + ), + ), + ); + + await tester.pumpWidgetBuilder(widget); + + await screenMatchesGolden(tester, 'pda_canvas_balanced_parentheses'); + + controller.dispose(); + toolController.dispose(); + }, + ); + + testGoldens( + 'renders complex PDA with multiple transitions', + (tester) async { + final provider = _TestPDAEditorProvider(); + final controller = GraphViewPdaCanvasController( + editorNotifier: provider, + ); + final toolController = AutomatonCanvasToolController( + AutomatonCanvasTool.selection, + ); + + final q0 = automaton_state.State( + id: 'q0', + label: 'q0', + position: Vector2(100, 150), + isInitial: true, + isAccepting: false, + ); + + final q1 = automaton_state.State( + id: 'q1', + label: 'q1', + position: Vector2(300, 100), + isInitial: false, + isAccepting: false, + ); + + final q2 = automaton_state.State( + id: 'q2', + label: 'q2', + position: Vector2(300, 200), + isInitial: false, + isAccepting: true, + ); + + final t1 = PDATransition.readAndStack( + id: 't1', + fromState: q0, + toState: q1, + inputSymbol: 'a', + popSymbol: 'Z', + pushSymbol: 'AZ', + label: 'a, Z/AZ', + ); + + final t2 = PDATransition.readAndStack( + id: 't2', + fromState: q0, + toState: q2, + inputSymbol: 'b', + popSymbol: 'Z', + pushSymbol: 'BZ', + label: 'b, Z/BZ', + ); + + final t3 = PDATransition.readAndStack( + id: 't3', + fromState: q1, + toState: q2, + inputSymbol: 'b', + popSymbol: 'A', + pushSymbol: '', + label: 'b, A/', + ); + + final pda = PDA( + id: 'complex', + name: 'Complex PDA', + states: {q0, q1, q2}, + transitions: {t1, t2, t3}, + alphabet: const {'a', 'b'}, + initialState: q0, + acceptingStates: {q2}, + created: DateTime.utc(2024, 1, 1), + modified: DateTime.utc(2024, 1, 1), + bounds: const math.Rectangle(0, 0, 400, 300), + zoomLevel: 1, + panOffset: Vector2.zero(), + stackAlphabet: const {'Z', 'A', 'B'}, + initialStackSymbol: 'Z', + ); + + provider.setPda(pda); + controller.synchronize(pda); + + final widget = ProviderScope( + overrides: [pdaEditorProvider.overrideWith((ref) => provider)], + child: MaterialApp( + home: Scaffold( + body: SizedBox( + width: 400, + height: 300, + child: PDACanvasGraphView( + controller: controller, + toolController: toolController, + onPdaModified: (_) {}, + ), + ), + ), + ), + ); + + await tester.pumpWidgetBuilder(widget); + + await screenMatchesGolden(tester, 'pda_canvas_complex'); + + controller.dispose(); + toolController.dispose(); + }, + ); + }); +} From f02cecebea229ceed16e345a92cba58c333b61a7 Mon Sep 17 00:00:00 2001 From: Thales Matheus <1417625@sga.pucminas.br> Date: Wed, 21 Jan 2026 11:21:39 -0600 Subject: [PATCH 06/21] auto-claude: subtask-2-3 - Create golden tests for TMCanvasGraphView (Turing machine canvas) Co-Authored-By: Claude Sonnet 4.5 --- .../canvas/tm_canvas_goldens_test.dart | 731 ++++++++++++++++++ 1 file changed, 731 insertions(+) create mode 100644 test/goldens/canvas/tm_canvas_goldens_test.dart diff --git a/test/goldens/canvas/tm_canvas_goldens_test.dart b/test/goldens/canvas/tm_canvas_goldens_test.dart new file mode 100644 index 00000000..f15f2af1 --- /dev/null +++ b/test/goldens/canvas/tm_canvas_goldens_test.dart @@ -0,0 +1,731 @@ +// +// tm_canvas_goldens_test.dart +// JFlutter +// +// Testes golden de regressão visual para TMCanvasGraphView, capturando +// snapshots de estados críticos do canvas de máquinas de Turing: vazio, estados +// únicos com marcações, múltiplos estados com transições TM (símbolos de +// leitura, escrita e direção de movimento), e máquinas complexas. Garante +// consistência visual entre mudanças e detecta regressões automáticas na +// renderização de TMs. +// +// Thales Matheus Mendonça Santos - January 2026 +// +import 'dart:math' as math; + +import 'package:flutter/material.dart'; +import 'package:flutter_test/flutter_test.dart'; +import 'package:flutter_riverpod/flutter_riverpod.dart'; +import 'package:golden_toolkit/golden_toolkit.dart'; +import 'package:vector_math/vector_math_64.dart'; + +import 'package:jflutter/core/models/tm.dart'; +import 'package:jflutter/core/models/tm_transition.dart'; +import 'package:jflutter/core/models/state.dart' as automaton_state; +import 'package:jflutter/features/canvas/graphview/graphview_tm_canvas_controller.dart'; +import 'package:jflutter/presentation/providers/tm_editor_provider.dart'; +import 'package:jflutter/presentation/widgets/automaton_canvas_tool.dart'; +import 'package:jflutter/presentation/widgets/tm_canvas_graphview.dart'; + +class _TestTMEditorProvider extends TMEditorNotifier { + _TestTMEditorProvider(); +} + +void main() { + group('TMCanvasGraphView golden tests', () { + testGoldens( + 'renders empty canvas', + (tester) async { + final provider = _TestTMEditorProvider(); + final controller = GraphViewTmCanvasController( + editorNotifier: provider, + ); + final toolController = AutomatonCanvasToolController( + AutomatonCanvasTool.selection, + ); + + final tm = TM( + id: 'empty', + name: 'Empty TM', + states: {}, + transitions: {}, + alphabet: const {}, + initialState: null, + acceptingStates: {}, + created: DateTime.utc(2024, 1, 1), + modified: DateTime.utc(2024, 1, 1), + bounds: const math.Rectangle(0, 0, 400, 300), + zoomLevel: 1, + panOffset: Vector2.zero(), + tapeAlphabet: const {'B'}, + blankSymbol: 'B', + ); + + provider.setTm(tm); + controller.synchronize(tm); + + final widget = ProviderScope( + overrides: [tmEditorProvider.overrideWith((ref) => provider)], + child: MaterialApp( + home: Scaffold( + body: SizedBox( + width: 400, + height: 300, + child: TMCanvasGraphView( + controller: controller, + toolController: toolController, + onTmModified: (_) {}, + ), + ), + ), + ), + ); + + await tester.pumpWidgetBuilder(widget); + + await screenMatchesGolden(tester, 'tm_canvas_empty'); + + controller.dispose(); + toolController.dispose(); + }, + ); + + testGoldens( + 'renders single normal state', + (tester) async { + final provider = _TestTMEditorProvider(); + final controller = GraphViewTmCanvasController( + editorNotifier: provider, + ); + final toolController = AutomatonCanvasToolController( + AutomatonCanvasTool.selection, + ); + + final state = automaton_state.State( + id: 'q0', + label: 'q0', + position: Vector2(200, 150), + isInitial: false, + isAccepting: false, + ); + + final tm = TM( + id: 'single-state', + name: 'Single State TM', + states: {state}, + transitions: {}, + alphabet: const {}, + initialState: null, + acceptingStates: {}, + created: DateTime.utc(2024, 1, 1), + modified: DateTime.utc(2024, 1, 1), + bounds: const math.Rectangle(0, 0, 400, 300), + zoomLevel: 1, + panOffset: Vector2.zero(), + tapeAlphabet: const {'B'}, + blankSymbol: 'B', + ); + + provider.setTm(tm); + controller.synchronize(tm); + + final widget = ProviderScope( + overrides: [tmEditorProvider.overrideWith((ref) => provider)], + child: MaterialApp( + home: Scaffold( + body: SizedBox( + width: 400, + height: 300, + child: TMCanvasGraphView( + controller: controller, + toolController: toolController, + onTmModified: (_) {}, + ), + ), + ), + ), + ); + + await tester.pumpWidgetBuilder(widget); + + await screenMatchesGolden(tester, 'tm_canvas_single_state'); + + controller.dispose(); + toolController.dispose(); + }, + ); + + testGoldens( + 'renders single initial state', + (tester) async { + final provider = _TestTMEditorProvider(); + final controller = GraphViewTmCanvasController( + editorNotifier: provider, + ); + final toolController = AutomatonCanvasToolController( + AutomatonCanvasTool.selection, + ); + + final state = automaton_state.State( + id: 'q0', + label: 'q0', + position: Vector2(200, 150), + isInitial: true, + isAccepting: false, + ); + + final tm = TM( + id: 'initial-state', + name: 'Initial State TM', + states: {state}, + transitions: {}, + alphabet: const {}, + initialState: state, + acceptingStates: {}, + created: DateTime.utc(2024, 1, 1), + modified: DateTime.utc(2024, 1, 1), + bounds: const math.Rectangle(0, 0, 400, 300), + zoomLevel: 1, + panOffset: Vector2.zero(), + tapeAlphabet: const {'B'}, + blankSymbol: 'B', + ); + + provider.setTm(tm); + controller.synchronize(tm); + + final widget = ProviderScope( + overrides: [tmEditorProvider.overrideWith((ref) => provider)], + child: MaterialApp( + home: Scaffold( + body: SizedBox( + width: 400, + height: 300, + child: TMCanvasGraphView( + controller: controller, + toolController: toolController, + onTmModified: (_) {}, + ), + ), + ), + ), + ); + + await tester.pumpWidgetBuilder(widget); + + await screenMatchesGolden(tester, 'tm_canvas_initial_state'); + + controller.dispose(); + toolController.dispose(); + }, + ); + + testGoldens( + 'renders single accepting state', + (tester) async { + final provider = _TestTMEditorProvider(); + final controller = GraphViewTmCanvasController( + editorNotifier: provider, + ); + final toolController = AutomatonCanvasToolController( + AutomatonCanvasTool.selection, + ); + + final state = automaton_state.State( + id: 'q0', + label: 'q0', + position: Vector2(200, 150), + isInitial: false, + isAccepting: true, + ); + + final tm = TM( + id: 'accepting-state', + name: 'Accepting State TM', + states: {state}, + transitions: {}, + alphabet: const {}, + initialState: null, + acceptingStates: {state}, + created: DateTime.utc(2024, 1, 1), + modified: DateTime.utc(2024, 1, 1), + bounds: const math.Rectangle(0, 0, 400, 300), + zoomLevel: 1, + panOffset: Vector2.zero(), + tapeAlphabet: const {'B'}, + blankSymbol: 'B', + ); + + provider.setTm(tm); + controller.synchronize(tm); + + final widget = ProviderScope( + overrides: [tmEditorProvider.overrideWith((ref) => provider)], + child: MaterialApp( + home: Scaffold( + body: SizedBox( + width: 400, + height: 300, + child: TMCanvasGraphView( + controller: controller, + toolController: toolController, + onTmModified: (_) {}, + ), + ), + ), + ), + ); + + await tester.pumpWidgetBuilder(widget); + + await screenMatchesGolden(tester, 'tm_canvas_accepting_state'); + + controller.dispose(); + toolController.dispose(); + }, + ); + + testGoldens( + 'renders initial and accepting state', + (tester) async { + final provider = _TestTMEditorProvider(); + final controller = GraphViewTmCanvasController( + editorNotifier: provider, + ); + final toolController = AutomatonCanvasToolController( + AutomatonCanvasTool.selection, + ); + + final state = automaton_state.State( + id: 'q0', + label: 'q0', + position: Vector2(200, 150), + isInitial: true, + isAccepting: true, + ); + + final tm = TM( + id: 'initial-accepting-state', + name: 'Initial and Accepting State', + states: {state}, + transitions: {}, + alphabet: const {}, + initialState: state, + acceptingStates: {state}, + created: DateTime.utc(2024, 1, 1), + modified: DateTime.utc(2024, 1, 1), + bounds: const math.Rectangle(0, 0, 400, 300), + zoomLevel: 1, + panOffset: Vector2.zero(), + tapeAlphabet: const {'B'}, + blankSymbol: 'B', + ); + + provider.setTm(tm); + controller.synchronize(tm); + + final widget = ProviderScope( + overrides: [tmEditorProvider.overrideWith((ref) => provider)], + child: MaterialApp( + home: Scaffold( + body: SizedBox( + width: 400, + height: 300, + child: TMCanvasGraphView( + controller: controller, + toolController: toolController, + onTmModified: (_) {}, + ), + ), + ), + ), + ); + + await tester.pumpWidgetBuilder(widget); + + await screenMatchesGolden( + tester, + 'tm_canvas_initial_accepting_state', + ); + + controller.dispose(); + toolController.dispose(); + }, + ); + + testGoldens( + 'renders multiple states with TM transitions', + (tester) async { + final provider = _TestTMEditorProvider(); + final controller = GraphViewTmCanvasController( + editorNotifier: provider, + ); + final toolController = AutomatonCanvasToolController( + AutomatonCanvasTool.selection, + ); + + final q0 = automaton_state.State( + id: 'q0', + label: 'q0', + position: Vector2(100, 150), + isInitial: true, + isAccepting: false, + ); + + final q1 = automaton_state.State( + id: 'q1', + label: 'q1', + position: Vector2(300, 150), + isInitial: false, + isAccepting: true, + ); + + final transition = TMTransition( + id: 't1', + fromState: q0, + toState: q1, + readSymbol: 'a', + writeSymbol: 'b', + direction: TapeDirection.right, + label: 'a→b,R', + ); + + final tm = TM( + id: 'two-states', + name: 'Two States with TM Transition', + states: {q0, q1}, + transitions: {transition}, + alphabet: const {'a', 'b'}, + initialState: q0, + acceptingStates: {q1}, + created: DateTime.utc(2024, 1, 1), + modified: DateTime.utc(2024, 1, 1), + bounds: const math.Rectangle(0, 0, 400, 300), + zoomLevel: 1, + panOffset: Vector2.zero(), + tapeAlphabet: const {'B', 'a', 'b'}, + blankSymbol: 'B', + ); + + provider.setTm(tm); + controller.synchronize(tm); + + final widget = ProviderScope( + overrides: [tmEditorProvider.overrideWith((ref) => provider)], + child: MaterialApp( + home: Scaffold( + body: SizedBox( + width: 400, + height: 300, + child: TMCanvasGraphView( + controller: controller, + toolController: toolController, + onTmModified: (_) {}, + ), + ), + ), + ), + ); + + await tester.pumpWidgetBuilder(widget); + + await screenMatchesGolden( + tester, + 'tm_canvas_multiple_states_with_transitions', + ); + + controller.dispose(); + toolController.dispose(); + }, + ); + + testGoldens( + 'renders self-loop transition', + (tester) async { + final provider = _TestTMEditorProvider(); + final controller = GraphViewTmCanvasController( + editorNotifier: provider, + ); + final toolController = AutomatonCanvasToolController( + AutomatonCanvasTool.selection, + ); + + final q0 = automaton_state.State( + id: 'q0', + label: 'q0', + position: Vector2(200, 150), + isInitial: true, + isAccepting: true, + ); + + final transition = TMTransition( + id: 't1', + fromState: q0, + toState: q0, + readSymbol: 'a', + writeSymbol: 'a', + direction: TapeDirection.right, + label: 'a→a,R', + ); + + final tm = TM( + id: 'self-loop', + name: 'State with Self Loop', + states: {q0}, + transitions: {transition}, + alphabet: const {'a'}, + initialState: q0, + acceptingStates: {q0}, + created: DateTime.utc(2024, 1, 1), + modified: DateTime.utc(2024, 1, 1), + bounds: const math.Rectangle(0, 0, 400, 300), + zoomLevel: 1, + panOffset: Vector2.zero(), + tapeAlphabet: const {'B', 'a'}, + blankSymbol: 'B', + ); + + provider.setTm(tm); + controller.synchronize(tm); + + final widget = ProviderScope( + overrides: [tmEditorProvider.overrideWith((ref) => provider)], + child: MaterialApp( + home: Scaffold( + body: SizedBox( + width: 400, + height: 300, + child: TMCanvasGraphView( + controller: controller, + toolController: toolController, + onTmModified: (_) {}, + ), + ), + ), + ), + ); + + await tester.pumpWidgetBuilder(widget); + + await screenMatchesGolden(tester, 'tm_canvas_self_loop'); + + controller.dispose(); + toolController.dispose(); + }, + ); + + testGoldens( + 'renders binary incrementer TM', + (tester) async { + final provider = _TestTMEditorProvider(); + final controller = GraphViewTmCanvasController( + editorNotifier: provider, + ); + final toolController = AutomatonCanvasToolController( + AutomatonCanvasTool.selection, + ); + + final q0 = automaton_state.State( + id: 'q0', + label: 'q0', + position: Vector2(100, 150), + isInitial: true, + isAccepting: false, + ); + + final q1 = automaton_state.State( + id: 'q1', + label: 'q1', + position: Vector2(300, 150), + isInitial: false, + isAccepting: true, + ); + + final t1 = TMTransition( + id: 't1', + fromState: q0, + toState: q0, + readSymbol: '0', + writeSymbol: '0', + direction: TapeDirection.right, + label: '0→0,R', + ); + + final t2 = TMTransition( + id: 't2', + fromState: q0, + toState: q0, + readSymbol: '1', + writeSymbol: '1', + direction: TapeDirection.right, + label: '1→1,R', + ); + + final t3 = TMTransition( + id: 't3', + fromState: q0, + toState: q1, + readSymbol: 'B', + writeSymbol: 'B', + direction: TapeDirection.left, + label: 'B→B,L', + ); + + final tm = TM( + id: 'binary-incrementer', + name: 'Binary Incrementer', + states: {q0, q1}, + transitions: {t1, t2, t3}, + alphabet: const {'0', '1'}, + initialState: q0, + acceptingStates: {q1}, + created: DateTime.utc(2024, 1, 1), + modified: DateTime.utc(2024, 1, 1), + bounds: const math.Rectangle(0, 0, 400, 300), + zoomLevel: 1, + panOffset: Vector2.zero(), + tapeAlphabet: const {'B', '0', '1'}, + blankSymbol: 'B', + ); + + provider.setTm(tm); + controller.synchronize(tm); + + final widget = ProviderScope( + overrides: [tmEditorProvider.overrideWith((ref) => provider)], + child: MaterialApp( + home: Scaffold( + body: SizedBox( + width: 400, + height: 300, + child: TMCanvasGraphView( + controller: controller, + toolController: toolController, + onTmModified: (_) {}, + ), + ), + ), + ), + ); + + await tester.pumpWidgetBuilder(widget); + + await screenMatchesGolden(tester, 'tm_canvas_binary_incrementer'); + + controller.dispose(); + toolController.dispose(); + }, + ); + + testGoldens( + 'renders complex TM with multiple transitions', + (tester) async { + final provider = _TestTMEditorProvider(); + final controller = GraphViewTmCanvasController( + editorNotifier: provider, + ); + final toolController = AutomatonCanvasToolController( + AutomatonCanvasTool.selection, + ); + + final q0 = automaton_state.State( + id: 'q0', + label: 'q0', + position: Vector2(100, 150), + isInitial: true, + isAccepting: false, + ); + + final q1 = automaton_state.State( + id: 'q1', + label: 'q1', + position: Vector2(300, 100), + isInitial: false, + isAccepting: false, + ); + + final q2 = automaton_state.State( + id: 'q2', + label: 'q2', + position: Vector2(300, 200), + isInitial: false, + isAccepting: true, + ); + + final t1 = TMTransition( + id: 't1', + fromState: q0, + toState: q1, + readSymbol: 'a', + writeSymbol: 'X', + direction: TapeDirection.right, + label: 'a→X,R', + ); + + final t2 = TMTransition( + id: 't2', + fromState: q0, + toState: q2, + readSymbol: 'b', + writeSymbol: 'Y', + direction: TapeDirection.left, + label: 'b→Y,L', + ); + + final t3 = TMTransition( + id: 't3', + fromState: q1, + toState: q2, + readSymbol: 'b', + writeSymbol: 'Y', + direction: TapeDirection.stay, + label: 'b→Y,S', + ); + + final tm = TM( + id: 'complex', + name: 'Complex TM', + states: {q0, q1, q2}, + transitions: {t1, t2, t3}, + alphabet: const {'a', 'b'}, + initialState: q0, + acceptingStates: {q2}, + created: DateTime.utc(2024, 1, 1), + modified: DateTime.utc(2024, 1, 1), + bounds: const math.Rectangle(0, 0, 400, 300), + zoomLevel: 1, + panOffset: Vector2.zero(), + tapeAlphabet: const {'B', 'a', 'b', 'X', 'Y'}, + blankSymbol: 'B', + ); + + provider.setTm(tm); + controller.synchronize(tm); + + final widget = ProviderScope( + overrides: [tmEditorProvider.overrideWith((ref) => provider)], + child: MaterialApp( + home: Scaffold( + body: SizedBox( + width: 400, + height: 300, + child: TMCanvasGraphView( + controller: controller, + toolController: toolController, + onTmModified: (_) {}, + ), + ), + ), + ), + ); + + await tester.pumpWidgetBuilder(widget); + + await screenMatchesGolden(tester, 'tm_canvas_complex'); + + controller.dispose(); + toolController.dispose(); + }, + ); + }); +} From 3c3ac968b028b29bf9542ed3d121b235e343da94 Mon Sep 17 00:00:00 2001 From: Thales Matheus <1417625@sga.pucminas.br> Date: Wed, 21 Jan 2026 11:26:23 -0600 Subject: [PATCH 07/21] auto-claude: subtask-3-1 - Create golden tests for FSA page with toolbar and canvas MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Created 8 golden tests covering desktop/tablet/mobile layouts - Tests empty canvas and various automaton types (DFA, NFA, ε-NFA) - Fixed bug in fa_to_regex_converter.dart (Result.value -> Result.data) - Golden images generated successfully - All tests passing (8/8) --- .../algorithms/fa_to_regex_converter.dart | 2 +- test/goldens/pages/fsa_page_goldens_test.dart | 560 ++++++++++++++++++ .../pages/goldens/fsa_page_complex_tablet.png | Bin 0 -> 59947 bytes .../pages/goldens/fsa_page_empty_desktop.png | Bin 0 -> 10023 bytes .../pages/goldens/fsa_page_empty_mobile.png | Bin 0 -> 26970 bytes .../pages/goldens/fsa_page_empty_tablet.png | Bin 0 -> 10023 bytes .../goldens/fsa_page_epsilon_nfa_desktop.png | Bin 0 -> 31490 bytes .../pages/goldens/fsa_page_mobile_dfa.png | Bin 0 -> 53901 bytes .../pages/goldens/fsa_page_nfa_desktop.png | Bin 0 -> 35791 bytes .../goldens/fsa_page_simple_dfa_desktop.png | Bin 0 -> 31582 bytes 10 files changed, 561 insertions(+), 1 deletion(-) create mode 100644 test/goldens/pages/fsa_page_goldens_test.dart create mode 100644 test/goldens/pages/goldens/fsa_page_complex_tablet.png create mode 100644 test/goldens/pages/goldens/fsa_page_empty_desktop.png create mode 100644 test/goldens/pages/goldens/fsa_page_empty_mobile.png create mode 100644 test/goldens/pages/goldens/fsa_page_empty_tablet.png create mode 100644 test/goldens/pages/goldens/fsa_page_epsilon_nfa_desktop.png create mode 100644 test/goldens/pages/goldens/fsa_page_mobile_dfa.png create mode 100644 test/goldens/pages/goldens/fsa_page_nfa_desktop.png create mode 100644 test/goldens/pages/goldens/fsa_page_simple_dfa_desktop.png diff --git a/lib/core/algorithms/fa_to_regex_converter.dart b/lib/core/algorithms/fa_to_regex_converter.dart index 9c55e73c..14776288 100644 --- a/lib/core/algorithms/fa_to_regex_converter.dart +++ b/lib/core/algorithms/fa_to_regex_converter.dart @@ -57,7 +57,7 @@ class FAToRegexConverter { 'FA conversion succeeded but simplification failed: ${simplificationResult.error}', ); } - return ResultFactory.success(simplificationResult.value!); + return ResultFactory.success(simplificationResult.data!); } return ResultFactory.success(regex); diff --git a/test/goldens/pages/fsa_page_goldens_test.dart b/test/goldens/pages/fsa_page_goldens_test.dart new file mode 100644 index 00000000..debe820b --- /dev/null +++ b/test/goldens/pages/fsa_page_goldens_test.dart @@ -0,0 +1,560 @@ +// +// fsa_page_goldens_test.dart +// JFlutter +// +// Testes golden de regressão visual para componentes da FSA page (toolbar e +// canvas), capturando snapshots de estados críticos: layouts desktop/mobile, +// canvas vazio, canvas com autômato, toolbar, badges de determinismo. Garante +// consistência visual da interface principal entre mudanças e detecta +// regressões automáticas. +// +// Thales Matheus Mendonça Santos - January 2026 +// + +import 'dart:math' as math; + +import 'package:flutter/material.dart'; +import 'package:flutter_test/flutter_test.dart'; +import 'package:golden_toolkit/golden_toolkit.dart'; +import 'package:shared_preferences/shared_preferences.dart'; +import 'package:vector_math/vector_math_64.dart'; + +import 'package:jflutter/core/models/fsa.dart'; +import 'package:jflutter/core/models/fsa_transition.dart'; +import 'package:jflutter/core/models/state.dart' as automaton_state; +import 'package:jflutter/data/services/automaton_service.dart'; +import 'package:jflutter/features/canvas/graphview/graphview_canvas_controller.dart'; +import 'package:jflutter/injection/dependency_injection.dart'; +import 'package:jflutter/presentation/providers/automaton_state_provider.dart'; +import 'package:jflutter/presentation/widgets/automaton_canvas.dart'; +import 'package:jflutter/presentation/widgets/automaton_canvas_tool.dart'; +import 'package:jflutter/presentation/widgets/fsa/determinism_badge.dart'; +import 'package:jflutter/presentation/widgets/graphview_canvas_toolbar.dart'; + +class _TestAutomatonProvider extends AutomatonStateNotifier { + _TestAutomatonProvider() + : super( + automatonService: AutomatonService(), + ); +} + +// Widget that composes toolbar + canvas like FSA page does +class _FSAPageTestWidget extends StatefulWidget { + final FSA? automaton; + final bool isMobile; + + const _FSAPageTestWidget({ + this.automaton, + this.isMobile = false, + }); + + @override + State<_FSAPageTestWidget> createState() => _FSAPageTestWidgetState(); +} + +class _FSAPageTestWidgetState extends State<_FSAPageTestWidget> { + late final GraphViewCanvasController _canvasController; + late final AutomatonCanvasToolController _toolController; + final GlobalKey _canvasKey = GlobalKey(); + + @override + void initState() { + super.initState(); + final provider = _TestAutomatonProvider(); + _canvasController = GraphViewCanvasController( + automatonStateNotifier: provider, + ); + if (widget.automaton != null) { + provider.updateAutomaton(widget.automaton!); + _canvasController.synchronize(widget.automaton!); + } + _toolController = AutomatonCanvasToolController(); + } + + @override + void dispose() { + _canvasController.dispose(); + _toolController.dispose(); + super.dispose(); + } + + @override + Widget build(BuildContext context) { + final combinedListenable = Listenable.merge([ + _toolController, + _canvasController.graphRevision, + ]); + + return Scaffold( + body: Stack( + children: [ + // Canvas + Positioned.fill( + child: AutomatonCanvas( + automaton: widget.automaton, + canvasKey: _canvasKey, + controller: _canvasController, + toolController: _toolController, + simulationResult: null, + showTrace: false, + ), + ), + // Determinism badge + FSADeterminismOverlay(automaton: widget.automaton), + // Toolbar + AnimatedBuilder( + animation: combinedListenable, + builder: (context, _) { + return GraphViewCanvasToolbar( + layout: widget.isMobile + ? GraphViewCanvasToolbarLayout.mobile + : GraphViewCanvasToolbarLayout.desktop, + controller: _canvasController, + enableToolSelection: true, + activeTool: _toolController.activeTool, + onAddState: () { + _toolController.setActiveTool(AutomatonCanvasTool.addState); + _canvasController.addStateAtCenter(); + }, + onAddTransition: () { + if (_toolController.activeTool != + AutomatonCanvasTool.transition) { + _toolController.setActiveTool( + AutomatonCanvasTool.transition, + ); + } + }, + onClear: () {}, + statusMessage: + widget.automaton == null ? 'No automaton loaded' : '', + ); + }, + ), + ], + ), + ); + } +} + +Future _pumpFSAPageComponents( + WidgetTester tester, { + FSA? automaton, + Size size = const Size(1400, 900), + bool isMobile = false, +}) async { + final binding = tester.binding; + binding.window.physicalSizeTestValue = size; + binding.window.devicePixelRatioTestValue = 1.0; + + await tester.pumpWidgetBuilder( + MaterialApp( + home: _FSAPageTestWidget( + automaton: automaton, + isMobile: isMobile, + ), + ), + ); + + await tester.pumpAndSettle(); +} + +void main() { + TestWidgetsFlutterBinding.ensureInitialized(); + + setUpAll(() async { + SharedPreferences.setMockInitialValues({}); + await setupDependencyInjection(); + }); + + tearDownAll(() { + resetDependencies(); + }); + + group('FSA Page Components golden tests', () { + testGoldens( + 'renders empty canvas with toolbar in desktop layout', + (tester) async { + addTearDown(() { + tester.binding.window.clearPhysicalSizeTestValue(); + tester.binding.window.clearDevicePixelRatioTestValue(); + }); + + await _pumpFSAPageComponents( + tester, + size: const Size(1400, 900), + isMobile: false, + ); + + await screenMatchesGolden(tester, 'fsa_page_empty_desktop'); + }, + ); + + testGoldens( + 'renders empty canvas with toolbar in tablet layout', + (tester) async { + addTearDown(() { + tester.binding.window.clearPhysicalSizeTestValue(); + tester.binding.window.clearDevicePixelRatioTestValue(); + }); + + await _pumpFSAPageComponents( + tester, + size: const Size(1200, 800), + isMobile: false, + ); + + await screenMatchesGolden(tester, 'fsa_page_empty_tablet'); + }, + ); + + testGoldens( + 'renders empty canvas with toolbar in mobile layout', + (tester) async { + addTearDown(() { + tester.binding.window.clearPhysicalSizeTestValue(); + tester.binding.window.clearDevicePixelRatioTestValue(); + }); + + await _pumpFSAPageComponents( + tester, + size: const Size(430, 932), + isMobile: true, + ); + + await screenMatchesGolden(tester, 'fsa_page_empty_mobile'); + }, + ); + + testGoldens( + 'renders canvas with toolbar and simple DFA in desktop layout', + (tester) async { + addTearDown(() { + tester.binding.window.clearPhysicalSizeTestValue(); + tester.binding.window.clearDevicePixelRatioTestValue(); + }); + + final q0 = automaton_state.State( + id: 'q0', + label: 'q0', + position: Vector2(200, 200), + isInitial: true, + isAccepting: false, + ); + + final q1 = automaton_state.State( + id: 'q1', + label: 'q1', + position: Vector2(400, 200), + isInitial: false, + isAccepting: true, + ); + + final transition = FSATransition( + id: 't1', + fromState: q0, + toState: q1, + symbol: 'a', + label: 'a', + ); + + final automaton = FSA( + id: 'simple-dfa', + name: 'Simple DFA', + states: {q0, q1}, + transitions: {transition}, + alphabet: const {'a'}, + initialState: q0, + acceptingStates: {q1}, + created: DateTime.utc(2024, 1, 1), + modified: DateTime.utc(2024, 1, 1), + bounds: const math.Rectangle(0, 0, 800, 600), + zoomLevel: 1, + panOffset: Vector2.zero(), + ); + + await _pumpFSAPageComponents( + tester, + automaton: automaton, + size: const Size(1400, 900), + isMobile: false, + ); + + await screenMatchesGolden(tester, 'fsa_page_simple_dfa_desktop'); + }, + ); + + testGoldens( + 'renders canvas with toolbar and NFA in desktop layout', + (tester) async { + addTearDown(() { + tester.binding.window.clearPhysicalSizeTestValue(); + tester.binding.window.clearDevicePixelRatioTestValue(); + }); + + final q0 = automaton_state.State( + id: 'q0', + label: 'q0', + position: Vector2(200, 200), + isInitial: true, + isAccepting: false, + ); + + final q1 = automaton_state.State( + id: 'q1', + label: 'q1', + position: Vector2(400, 200), + isInitial: false, + isAccepting: true, + ); + + // Two transitions with same symbol - makes it nondeterministic + final t1 = FSATransition( + id: 't1', + fromState: q0, + toState: q1, + symbol: 'a', + label: 'a', + ); + + final t2 = FSATransition( + id: 't2', + fromState: q0, + toState: q0, + symbol: 'a', + label: 'a', + ); + + final automaton = FSA( + id: 'simple-nfa', + name: 'Simple NFA', + states: {q0, q1}, + transitions: {t1, t2}, + alphabet: const {'a'}, + initialState: q0, + acceptingStates: {q1}, + created: DateTime.utc(2024, 1, 1), + modified: DateTime.utc(2024, 1, 1), + bounds: const math.Rectangle(0, 0, 800, 600), + zoomLevel: 1, + panOffset: Vector2.zero(), + ); + + await _pumpFSAPageComponents( + tester, + automaton: automaton, + size: const Size(1400, 900), + isMobile: false, + ); + + await screenMatchesGolden(tester, 'fsa_page_nfa_desktop'); + }, + ); + + testGoldens( + 'renders page with epsilon-NFA in desktop layout', + (tester) async { + addTearDown(() { + tester.binding.window.clearPhysicalSizeTestValue(); + tester.binding.window.clearDevicePixelRatioTestValue(); + }); + + final q0 = automaton_state.State( + id: 'q0', + label: 'q0', + position: Vector2(200, 200), + isInitial: true, + isAccepting: false, + ); + + final q1 = automaton_state.State( + id: 'q1', + label: 'q1', + position: Vector2(400, 200), + isInitial: false, + isAccepting: true, + ); + + // Epsilon transition + final t1 = FSATransition( + id: 't1', + fromState: q0, + toState: q1, + symbol: '', + label: 'λ', + ); + + final automaton = FSA( + id: 'epsilon-nfa', + name: 'Epsilon-NFA', + states: {q0, q1}, + transitions: {t1}, + alphabet: const {'a'}, + initialState: q0, + acceptingStates: {q1}, + created: DateTime.utc(2024, 1, 1), + modified: DateTime.utc(2024, 1, 1), + bounds: const math.Rectangle(0, 0, 800, 600), + zoomLevel: 1, + panOffset: Vector2.zero(), + ); + + await _pumpFSAPageComponents( + tester, + automaton: automaton, + size: const Size(1400, 900), + isMobile: false, + ); + + await screenMatchesGolden(tester, 'fsa_page_epsilon_nfa_desktop'); + }, + ); + + testGoldens( + 'renders page with complex automaton in tablet layout', + (tester) async { + addTearDown(() { + tester.binding.window.clearPhysicalSizeTestValue(); + tester.binding.window.clearDevicePixelRatioTestValue(); + }); + + final q0 = automaton_state.State( + id: 'q0', + label: 'q0', + position: Vector2(150, 200), + isInitial: true, + isAccepting: false, + ); + + final q1 = automaton_state.State( + id: 'q1', + label: 'q1', + position: Vector2(350, 150), + isInitial: false, + isAccepting: false, + ); + + final q2 = automaton_state.State( + id: 'q2', + label: 'q2', + position: Vector2(350, 250), + isInitial: false, + isAccepting: true, + ); + + final t1 = FSATransition( + id: 't1', + fromState: q0, + toState: q1, + symbol: 'a', + label: 'a', + ); + + final t2 = FSATransition( + id: 't2', + fromState: q0, + toState: q2, + symbol: 'b', + label: 'b', + ); + + final t3 = FSATransition( + id: 't3', + fromState: q1, + toState: q2, + symbol: 'b', + label: 'b', + ); + + final t4 = FSATransition( + id: 't4', + fromState: q2, + toState: q2, + symbol: 'a', + label: 'a', + ); + + final automaton = FSA( + id: 'complex-dfa', + name: 'Complex DFA', + states: {q0, q1, q2}, + transitions: {t1, t2, t3, t4}, + alphabet: const {'a', 'b'}, + initialState: q0, + acceptingStates: {q2}, + created: DateTime.utc(2024, 1, 1), + modified: DateTime.utc(2024, 1, 1), + bounds: const math.Rectangle(0, 0, 800, 600), + zoomLevel: 1, + panOffset: Vector2.zero(), + ); + + await _pumpFSAPageComponents( + tester, + automaton: automaton, + size: const Size(1200, 800), + isMobile: false, + ); + + await screenMatchesGolden(tester, 'fsa_page_complex_tablet'); + }, + ); + + testGoldens( + 'renders page with automaton in mobile layout', + (tester) async { + addTearDown(() { + tester.binding.window.clearPhysicalSizeTestValue(); + tester.binding.window.clearDevicePixelRatioTestValue(); + }); + + final q0 = automaton_state.State( + id: 'q0', + label: 'q0', + position: Vector2(150, 200), + isInitial: true, + isAccepting: false, + ); + + final q1 = automaton_state.State( + id: 'q1', + label: 'q1', + position: Vector2(300, 200), + isInitial: false, + isAccepting: true, + ); + + final transition = FSATransition( + id: 't1', + fromState: q0, + toState: q1, + symbol: 'a', + label: 'a', + ); + + final automaton = FSA( + id: 'mobile-dfa', + name: 'Mobile DFA', + states: {q0, q1}, + transitions: {transition}, + alphabet: const {'a'}, + initialState: q0, + acceptingStates: {q1}, + created: DateTime.utc(2024, 1, 1), + modified: DateTime.utc(2024, 1, 1), + bounds: const math.Rectangle(0, 0, 800, 600), + zoomLevel: 1, + panOffset: Vector2.zero(), + ); + + await _pumpFSAPageComponents( + tester, + automaton: automaton, + size: const Size(430, 932), + isMobile: true, + ); + + await screenMatchesGolden(tester, 'fsa_page_mobile_dfa'); + }, + ); + }); +} diff --git a/test/goldens/pages/goldens/fsa_page_complex_tablet.png b/test/goldens/pages/goldens/fsa_page_complex_tablet.png new file mode 100644 index 0000000000000000000000000000000000000000..bac38045c7dcf31acd7e484301c515ecc6f49072 GIT binary patch literal 59947 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 z zrfi#5QCc6Z$jA_}P->pDFlP0elxo}lH&uy=p1&%S%zJ+dw2%<z>*rm3VwQLW#bkpcYBFq z=>at~rr(QB!aPmf1la?a9Qysl*spys$w949Lko+F3PM4U-!9kUNK8vUTDVctycuapb%H*a?+XSN}lA4h{KnH(w?!F_985M7k90H=mr8v_QS$ z&Uzo(zo+gihaM}-%cUmT{v(!wQ?|i9w!u@To)_zj5_gU9Uh&=p?#`rs2k84J;yZBu zp9U9g;1B9pf8a-5RuMAtFYEXz$;bj%R(hsbn8KLuE_m4p+}gkwp~k*ZzNGN zRWV~#(Mq+vY_e*qU@ys$t?m)<;jB2<1~ySuli#ef^FmQN5n@Y=wD zT1Zq_5ToK7wvGxr;#;@EKefv+F*8f$sH4{^Bh{-C*dT&E2HY9jzsL@b35?9$D76a( z`k7CkIXDmlru_8jlO({^J9mg4g@&rK$G_o^4h# zOeYS^zISvm+!n)IU0wa5@I+qQgNk^5!P`L;DN@Zr8=MrP#@Aih`u;O6k4IRba_bWI z%#Yq)DHjcL2ZwK&z1;y?9MkW#y*teLjN}SBx+BPe?A^bAKXJe^b7W1Fe5&Rqtp2Kn zg+iZ#yqpIW@8D4E`}cq1wuq2N$P7ab@LTK^Tu#=p+Z(o6IsE(lSV=`i&gH{6nXtOL zdS!WUp+Fu&I&Z|#!*rZXHP@`Xf7Pk#{A1072S1*fF|vx>O1ilkvYbYYTpfB``hcP$ z9Jk9rip=!%tlC8F%-aF56$^^=!9-X12S> z98bE+`c5+k5e=)6ubTmNLD%vv8M96tH2<*uUfIy$L29CME?!eG$XUYoNnX6Lgp2uO zVrKI*zz2@OsE<=P)>>}C5{K2~z2>@7H@Lm4>)}B)ebMVm&%?t*UlDk>R4bx80@uXU zq}m3t>O^_-X2;GCOgT9@SgV?~G~)0M|2HiUadGi$EAxqoV-gaA>+7jWNlEEHtiJ~h zRt?htC6pe(ztF+S6EW?zunwb1_s&i8$%$q|aUDQ&4|CKrzkDIqvPI(-5RaOhBZ`QK zGBR;P!wC;BXw(xF!I|3N(4H7aLBZPH?RvvR;qG2zeO(zUsDu< z&m~UPNFy^bmiW;CfoJ!lj9FIl@Z!RjcWHqQT@yPGLENAhy-!0U zG&6w8F~e|&gF{Bm5EUB-hd!aJYDWRtVAOg10!jlrWY0Gq9q&Lt*=-4)?%N@fn_rkO zag@h%+4_u%V(u)Ai>sSbA}+*Ty(aqZK?5ykVWGK&O`s&b9~4AjAUYd6hm6LDXJD|$pkgzeu8=L5ZejB!-iz zia=$;jeMd!+nrQqJ3;FOB3D8@##ffT!j2Bv1Ks)%910I^F|o+gz(CHk4Z6z{HIrBQ zYR|MnvRb7~OifE-Q9-%4p}ek;XfH&4GPQk$x$KNHiFl@&nOn=A;T-!K7Y}ct;!M<_rJWEpB^A~8{(f#f_d{+{Y;E@@G$B7_zzj-pU^CwS+=8Ki^Sf- zh~b`h61M-dVqaww>3PddR=7PfDst|p{`oIsqMu}AV=okx9!tZp5w5HC;=N&VKR1^z zF?n$I$AB^Pb2*DgSc*zYs?W55G!plZBTHk4QnFRyNuR8Fg*IYgWyPF&wCNu5tRf<# z7vv=_LpzUvTn>+H$*8GiPW+|0KsYyJV_>{REwr&Qx3PMw#Uc05hZgyv8rs;*Z+T!J z%fNNsHtS7u^z=fcRqcm4VwR0ryREtU+D&{&Obod}=XTfOTiJCDM9R#8Tz6lev9&cd z3|-s8j|ii(v3}1Qf`){%o$mB>Sw%%&_DUP+7Z!JTc?U1_1mSj|-+(26A;c}@HgYJ$ z%zU###1*5QWjyt0f0^h0{RNNIi(0y^ zjgp22=<&;AZ@y#;>fh8YbBHKOu7vDQ)s)Yl$Fu$Dd#lw=_ZV*1Tv*d$Tl?ugjcr=7 z%Lu}L?{$ckmBjX6ZI-yXi*3&*&27PgAQFT`M|W24@fy@9{eCa^Ha3J1G=C6!TxXsRP86E{dG^7%CeB#Q=hJ&Z>GcC#zZS#Gn zvNB3qT6?kS=la2b6#agetAWgn9DYxfq`hC#lz0Uf0lLtw9}RE3t7#yRqUqhxHrKqf zgBcVozmsQndF{E>HTD8_HO)E_nBqEaOmHoK2yp2Qn_;|Kdrck+aS4!zhK5=-2Ki5% zoCHiPd>ic7li?K>rW$$v{Bu!lC2h~>s8G?tarW}OY(!L4;i)!s)+p)+VYlU@7+F{_ za+o_t5yL;OIzvN3q)4wTP*OH#ZdyKiWZ!JbFjH-hFYDywh9~{2yIa!K6ys>y%D=;? zWu!nFu@$4c*0Hg%@ugTtS64>K>Xx?l1by7kn1qz@pdc|=`ia56@R2LOpQfju77*s zP(wX&x6;tFLja|@we^}x`h#$ssj2=|)2U?6uO(xf|J~e|CkN><@80<*ud&001k1G2 zIl=iRHaR+ZVc5e6*| z^5}~+6;>x%m2duvdU{-Ydk&~b^*f4IB&xCTZb4CR zV@Zi$Sx=A9#AF0?5@=rY&6g}pOiXT5>2M6MXjG>5)#c?W+OEYtzhPho4-UFIe<>>I zqPANLWcwP#?0f!>Nq*<=TEF?w;DI@{h|jetF^WvYdc)RhZp!|_@i4GEWaMQt%fFJI zQQex-aA$?ZnK4GevS%53H?bgzPPo@_UN73-(NUw4p))Z~DJh_k|7;%bcxrv^i}TvS z3nwQRAgu0b?Y7)h1LNaCzkdtJ$jWBce|>Ki3H|jH>$*aS<0LnhW~KoO7R9wUD4s6c zt#CuoP^#@RZ|xsX_SE1AJ^~%*XyOR@-DXreyHR6WURhyiD!0xbK^ZBB(7p{kVN^pe zDmPc|vyd`UMq-8KO`V#v^W;b<7QfMM!kg)9K)A55(7(Q13QKkx=-%CTui08aI#X4W zEAAmn!b1j4dM+;f(9kc75}^tzivG$h6aLv*WQWcbZihQoCEA5{!f8S-^GwrjGYxOJ z?wUNxQRm~|l7)gv>@iKXvXxb`!Z9^1*E<%Zj1WRh`aAY;LjV7M6lP;yc#zlpzbt_D z(2_S4O0yPTuYnxgO znv=?w?Uptkw70isIC!E{Q5|su8zY)x!iXVsHP-wT&%g|G>>Y>SNmK$SbIHih<9}p^l=q!)M_ULZ58}UTQk$mV@;=ae(Vxrx8(B1uI zQ&|%rilKu8HtUl#43t01%bA}`2m{g4fBaB5o{N>^s?m+Qes)~5r+v}_Y z0|P=OzI6B-Gr^~U=zM}z85M>D;#cS|EjoKc^)^ zBYbt$0;baJT7Q3#-YsCp-v)`T@7_B;qhgrrwXIrcx>}wns_X*raB|WqzE+wJ+-|JP z->Z?7j^f4}$yr1nrd%1|a@V4po6904c2o1|)0k-2KIP_S86I<4&*-&~kHG063}GWa zeM;qZd?sNh76tSXldfvU1;usJC*_HRtCJIM8%$rSn=Q@Fv$d{@CcHNl6~okCsJ;32 zO+EcL@ts;vu6e}O@h!x{4Z3PN5z8;vwV!^{z8U1!m_4*GGZ6_8^IKV2f3@p9#jx<| zL?$94Sy3n*!92u*#MQcQy*LFOMX+nbJ`GqeXAMyU13bE0>url&-jp|KUOMXMKMVWv zOL1dTt&F)MFi!t`PqTX1^QIPU^5IyYXgAg>s(?7po24akCzqGagM)*~XFxz;Ewk-k zUx&k1egzx-ADx>AsCju9TkQF=ZF>yxv*$*Y~UiCX&zC|2RC; zcn*tdThs^@NfZe9)oWkpYLSPlbNo7vBJv#Gn;BpaeLf8x3;Hz|zTFT$BB=%sk1ROj-% z`pdU>tYck8dNi%ZPtJ$=uku`$RVJ@~3*M;Z7|+<<#p0`~%qq(!Q8L|6K2yw5hdJH( z=K5LeXLXwwk+6Q3^nceRB=!_C!ZUhmc)9)H9f$>ge=l(8G0JmOKwk;o`^LL5{XBYf zRBL7VkhbtKq&}+M@+m;T05})>?%lN)0mX$N(?S#@C^OU0pyt+7ZA*6W`L4gDvhh>T zm$7)nbHvZjD9CyP^eW-0uZSRGkX*qD6Y^f-(AJqSD4U2)e%H#N4PEV>+YKgM(PPB2 z{o27z#6pl*-EPp?7M}Uzl#1z>M6n71HWR-}UHfQ1k0hby^H73RBYHWMKDRbv6)p{z zCwl%f`u3eWclvV%IDvDm)VLAlsie28tRy11ze&*((%%-NdHmQ@O-}aL1cLM&WL)nis0tWRUM7n zL_`CHFs!dPoo;UTJJ0#AmnyTgHF+&|89MWB*$MSK?h-@EZ&EopW&inOf*g|0&tJ8_ z#G?g`FFTmlu~1A6Xaa%vPG-qpU;1}Qe|R{l%-qUK-?g+2G|FKF!mzK%qo`2&KSBbo z=>D>qeNoMr&BTn)-=_+XALD5~zU1TQ4_shX$t)|t0sUp+R4a!V56`otpb>u%GnsX8 zU@SDx=lBL(7Swtnkwv#;q9&YTUTEOR#Qw2?<_gFq_7@WD$`EM ziW!>}W-v&qAl<|2myCVw@}1C~DDhfWWh9d3&^x_tZxjBUJvO!b)Jf(Nv?dHapT+0k zTzA_{=uDrp3?oJ`zUCH!bcdA2QpFG(hhIuS(fT-5S5js8M71b%p1}9A%TdU4D|LPM z`f(GPi0d%&!@WcCAz&yd5fmmT2AnqrxS|~qxV(bBZ zrb44Y$91kR5^R3e{AUV}RHR^Fs=teiO-+sX^M^^mkA57cJhxp@&CR~^(-&1X{39c7 z6K{`iz{#1EY9Y5^T%L;b_A487Xw$W|+8b7r;fdV(ug2%>W<%32so!cAU+c1Z{VXbV!~TkQ>>ofUi4RZW2_;3KY+~ysb=8eAqOQ;zQm6o^~xT- zl>qAmbhF!__yOqu@$+X8I|BoK1z{kvV7a-4LORn=k|ru;;<1qqCoG&KaC#tTt-B#I}as4`|LM;H_DI>p2CY0xX{>=7gX^9@f z4A94aba!JqL0&TwW)@>?}=ixc|!zvL~Jvu6xAg9xARGI+=3Lxc;T=omcnfO5b*G-#} zqn9Zevw4X1f!{u~AWv}L&&G3lkn%1yH2@G2WQ%TV8G zc7g&D<~5C{+?1eUTFFNl8QAr&?}M#qH(_(uws&+291>sbGQf%^9`+rWguWzdB>St$ zz{O$z+e%B9Kl_5VVPh`2*-Jwh-T^yVmIcfboGCHbdz~Yh4Czfxx?I5~uin+jTnm-K z4Lun@$1CXZuu-o)9A|Pa=&7_#sL_c{PY6yCZcY`h?JK5hjQf9&6St$ksq7AheKWq&TYwx7`Dt-15(p3f@P-L!;+a02hy z%n+-m$_Sw}72O8mfCbhkMH8}0Y@}Hk87QvPJ~}e@jvigwAFdJhR+Lv48afw%GOY0E zk({R0wtdxnLqRbz|dk6NMTZP!|%A z!NN54#5O7)GZD|-)xVVgVe-vygv|OoD~sJp#qDah-FKaiAOSp&kFVaWyf7q_0oshz zlkLU0IPZKvn?9qBI*qow`?6f+qj2QvY7+l(BuG8pFFC1>1?=X9Z4}MSD3CuIC@t0T z@V2zX9!|0}G5I8&mJ~WX{GM}N;Z=n;&jbFz(o*|~=xAdTC+n%X$O5&3`vcWgs1tYD zz4Tbs*r3IdXcpto^)Ebev-aJ2b5@$2D@@OiUbY*GRev;2q+36{KJe((V$=^B*GY1L zxDkRT7qntppPoZE`Nw#my%nMshWd9-PEsRv>dK>iNUs%au@YitXcX9YZr%V*syc^X zedU{Wp}E!T&fNu89udK+Im8`OY*KP^NG@Q(2I9Sc-@oXhaKy4>Wt37*zLQ&6An2~< z-`AFu3G580j~_>V&M(5QHNL%vob=#b?Ns=lxkfXPF*A3#g+TI&AG)+Aep3)6-`vrV zvu`|2#BSovg=$a>Q)}MU0WPepZuBuf|NPclR~T5>T;LEVoE6QEmM&1z-h5HkldsDn z{oI*st9lb9D?7WYTm>84S5)Lg1S+!LE2a(P1e7p9nwub1VAr7YZMukX9lv}iFVD(# zcvQPITgb}Jj$P+EVhl<#(S&FaBMt~Cr>lJ*+v9zX-RY@=DtN#mK(f4*U1Ax)Q!bld zI^TFdX1EA%S#_G%Y`T;{uJ!m4OmSHtV5o)R{&555?MaS3LY_y|swby@_D`NV z08GG~aO2_-Uk3^q}aQCR|m}aZMEpq(rs>+9TW{*=9C4`=8q;`xAhW=w(uq?yB+i|6paj` zUqhWfJ*wKZyk#@m-HjVXEAghcmuu9z^7%1Is0`a3uJ2;5bTURpCr%03Rv;O}(C1Fp z(f&;td%x*2^4Iqei?Aj4oF8! z7c^APmq2)@Zst%0sj1iUVKV>%1#V!!F=`LKRZ-1rP+OrgS^#QDah1pAHQv1d4Y*0) zQ6U!ISh?r0F@Xq)I5^-ey!R|3GIC*bcVT6#rrLBN7(iG3KFw=sAHC@hzvcf)m!=jL zSXbLAGyYSyt`mB?&q4@94=$lea@E#(B5TnA)R$ddP#d=zmTi$p`%|S3QdyBF5Zlr= zfYv?lz3oi^wDHKyqoN;`7Vs~xsb|ScnZjGQ198Wt6sy~%pXjd#oEWo1H zu|$T+FxGE3Y(KOoLbzw>fD1n`BjMKuv(?SbttW062m_x0pTY5#$4Avbzoev_=Sx*h zI{UT>yet^5Gu|=#ziicX&fM#F=9Rc9AzK*t@k7vY{aKo7;6PRl=?fYCi)DFQEGMEr zI_mkjG-+wH6F{%PrMRyCREP)@?Z=NFNM8_qe(=BTZe53HA^FEV+ZP5biLC(hN{>bujJ|%Z{dPZQV;oMz^=!kL#dU6R!-iDT9?bAFqjT zY+$#^PXw&Ev?}wBqpW}X;2`nkPG{bLGrQ_|Ul4lcR?R*F0UG^sW?lTbS!ZUC zMMX6)rd5RAP=TJX*|aRvx49wkD}>b)bLM3v>2zw!p4B71=o>Dn6U1}P7K{yn(5Hv2D!dl&u^Y9Sf4v2Zu-tj#vw-(#;){!JjoS|a& zn+~Jh(btPbKS~!^;Yk||@a@&GWhE`6oNC8jod4-xpgbDHBJ84Ihjbb%ZT(eYz2o8y zuxF7>9YQrQ!QC5fWeu3y%}EJ@X_GPAM1oBOYncmOr17-yYR^16>D{}CKA)u_)PlRj zD^9|qSFPcC#pEpQoeM>ETat@Mn-3>~)C-2@`ZGJ-SpzED;jZerJ73f>A`_E{Y6@rP ziifx6+j_tV^Vu!XZ!_U__tpaywqe_c;@h`j9X%Z;Dq7l>tBa#M#f}7}qQB;@6EqOK zu=J5&JK4ooNPMTj1fshb3pN$594R>|z4*ttfeYD8)eMI-7g7oeL&(|V;NTQ3LxQ<~ z%8{s{AtCl%vi}LaH8x?6s#^oeyLaze=g9sz+S?;$$YQx>$aYijek(5znC|ixaydr> zSOqS+bmnXfiSO#hS}U>&i(NmXWPC0`p*!8V5u2D;y;vdprMg-Ow4%4AyY`yPt?Ogf z0_Ex3)kkH*NfHHjs*!f;$%zoCc5c>!Ivk^VrJVHqvhS)#wT4H2GlDAxjxYC1#0Mus zLomuV6H}A@wbO1oRrNFk#=!ph#Kc-=!+shF<{5+*lc|ogK7S?z=Q}YaWq-5}bbb#H z3?!yFjlu`t8#V*_CQXOx!P*>RXT#C=P( z-eY9Jv)rLYfsK?=P>|KYnYa+3d&Hf1MeyE@YEPSMo4zde`?M*hP2Ve5UsN zMa^Qxz&hA54vr2nacPkN{q=&m@NsdCTwL%W!-Bg^`X1m%Dld!a;fMND>z{SckrLpy z;nC;%H|nOM;MO4G@4}3WjaB2TDwkp;zkUDyZF3((h+`w&lfDk6qQFHiy){{7W!&K; z>#|3e%;e#*Fr;(8H$cz#QxRMrm?G%vp#>)p`S?KE%a^KbqzXz(cnUq4mN0T8JohN7 zy=wZ__kSf)dTnIWEj69dXQ?x1fLRE$t^woV=g&t#GqdZz@_pvAB?1xsoSB6st1hq8 z_+j>)NDL6W9C???Ny0mj-np|g*%D~ONgrLr%*w{>YPPY3>$vE}#l_8qpZr{OK&Dlp zNV%yZQT(R662LK(wj6QAw%OgaA1%$sK=uG8Vk5=-n}?se%=t3&mKg!kg(ltPbO3Gk znK=zm@@TQ$q31dcED)qLrn}%?_C#aI;l&^$o3N`XCXmZEEAtzxc>vLYj4xl_;dra7 z8lr@vVAp`lvUN9m!difd-Xbnse7!)ZU(!NO&;!4) zS7jeNq~Gnvhidw1y%e@uo&zv-Z-1|(IG+e+E2L}mD84%iQ75LRwgYvB=1B~JAopvV zfnZejeLP2()37K@NsAAR_BnYQ5*j+TH*RiB>hR!80sDXi_v}%fNe38ka&q!&FQ4D! zb47$g)Iw5G5qo^1uP&(nYk%LWn!e_(lG>HS(6yhB9#P(+b3LQ&>FLR=$svQ*0MFWB zpFG!vSTvw;p%0po5T|d4 zxlv-yO@B`?So3W{uONeLRZ8&dC4UW4HV)R#w`2enXRdG{P1w#qd# zRV^({h0egn?I(i*ADOQlrj+0@Re6tti;p?!|qZUy3^?W{yyTSAz%v_Jb43 z!NCD8cwliX?p-AX?JH`Og`eGL(1G(2zl20WD(=5TIUqLD831(4k&+SuxJA zadN&<5e)yCeRUNH%Y=&xTnm{|6>6iQ+g znBaX6J1QMuRM$9P@K8NQN;oi$hAsJlvt3iqR$!8X^M#g`n3RNy(rsQr33h2%n9WAD z6e`4Q)O2+NF3yr;AV>hlNwg_7iUCMefW*K%HL$kEeF11lC!rG|EK;|#Y?i+NSJz&R zVfwJwRpuEbj{K_}W=bmB?;Bs2wS|%QMfn*6CnqO;1+qDO`;?QDnVn6-66cv0VbR04 z?2ncSM(M_6&2jwy7!A|m17)wFPY9spqcCjHvy?gYEr!+)k*)<8 z)#zTm*aKnj-Q@Y2~B&oKQgq_ zLJ53k8G56!u7kHpHt}l!;fjva<#<%&x~hIJEIf=5N-pMa2pWD|Lb?=brLeH@F6g+k zr5BmU4HUqlQS(E8BU=}Ui6AoKl81L}J_wY0Q@2%r9qa(q8p~BD;oStY^fq9_MK+=A zWa4{s1dLo#T0Z6))vQZ0yIVV2Q&}zY*D6#@v)Ut>O2wf#^lwO$1fjZCz(N zAa$cTVpHsVoT%R8gdbrH&LHGR-YTfzM;$7M)DM{RA;W<7Ilj&7VS`$Y$*D=PZ#=gj zgy>3q^@fn*+fSTY$IHu4F0X-5;AS2DoPGD_6CdhQB2fm3R0w;W3`G0Ruj#op?CtT^ zA5U%XO_=#^&Rk9{WF_4L*VgM$zj40mnDuIo@GItRkVDk-MK$F0wRB}5IM>hNBR>r< z0*aLd4G2I2bH#_0HfZqTR@F%P3;pdt$Yd&YdVRWJ zo=VzxaBD>?yA~bJdpgDaA&}7IEr9+(mrLGWji}ev$%D@XRMm%0PJF|bS6}UX4@T{a zAJcouf`-+6>Fwj`yGMr+gZch_VhCv5RX=;Q8nHDs>*C@Fr2T-cR8)w>roIn|9Z*Xw zUbhv1CnkcV^GA|&#^V)1m4eKUZoM0pN*)P>+re>+Ns4Weon`wRD#Q3^aWN}DpUAzY z29ACt>@saxVYIXM9N7fhZr@fl`$9zKyxv0(YiAGI86_pPj3Nlp>godSOdkP$@21RL z_O91Q2Txz=eZGI;xc8{#HVX@tMSec?h&{KWCSQ~sW@c4(@1{|v>zIW>kQ>a&$%VNx zVl&Y?&j`;G#H6ND!{k{4^V3Mvn+7Nd=uo<>lpqvA7H?%^LrTi)`~&`5MKEJEG{`-; z^a3El43%%DNkRPlOG)am(i|%T11iWHrDn%mi61_2-xtHHOL(*{oQ4k%xyYWKA~7H6 zb2A5KVpsFw{pNiC;DDOC?#2+wLy$;2X|L`?2=dXP`ax<2u+VZ@U)C%5!=lPP%F6Uk5 zGL9YS*em1Dta(pffBZ`W6JM+{FE4LyYTN4uVl$K*EOaoO2C|tCfrmNOz5rBryt)iw zX|U=U6NT?zhXr%2`dOoQaLwZ~T?4gFJZ5mD5Kqg=5HJEhS+CS6<# zsyl?(fownSNh(vt&BD>0)A5S6psep^a?mDDaf`?l{CCVfuX@ z)$r+(2!@RO$MePF$)(^z(1Kpef&9YRa4)bCTnR{QfJa^2>DbnG`(MGO_x!i45^^-M zVRvjMWV9Ik+iFiQeEk(K0lUV=#YKV|P*PH|qRmFwrKxq#>Da))j_`pFH-{2STxRVT zY>>ffj@(IPZO4?wkPwk8y9x zqjzJt;2w(7Riv1rWWqnSAR`nia}5@|E8%Ri(keI4oq`D$@+-&^fdnW>0?h{8wI5Sb zhTsyNm4aS{b{HXbQ%G0d*XAq{y=+*XXNHiI-R^yCi_+54(Hh4aAh|=1#~6a<3!l1> zM9vfg>=rphAkNA*-HwOryay0&z*VmQxI)8XDySM`_}%M=$Vc{8`wadqDj^U$^`}q!fBQ_^oPjm~Jkz~`LmBcS$Z#zPArRBuYWv1P z?sSi!>z8@~1b;WHsDAxYgy$N-gu~>B4ty;!^M<2>ik*x?I(sK3*~4bgYVC?L56?<4eQBvx-cuJYfPdj|s3KRq=$5_EOz6vobA^!)b7$dU9Hh7fO9R1IL;KxBmk31As|xsM zBj{OKL7@ExBx~oY%oQ! zaR_;-wEYMHG)sW808*}Zd{Jg5k-dFsNvwifPbB4Z;WrK)om<1df7^d}^*~5CN=M1` z$rA#!le6s4)oAdzDom;lWkx0Q zXP-IntDBUUXzr5~;oSPrQ%5H!866#w0_!LF8^JP+Z<^9)66sRN=}q{Cug9%C5P4wu zyE`c&Q7*d$daip{Xv95uV9MfY-h9G#!`nZfWWL`@`8ch&F^Wo5yd|CXX zf%8Q@p;2ifnS|$-s9Axz6fGI2Bxc*>gR&QI%M=x%7}S31sF<9OjgK3RJiWUM2Pkt9 z{qp6Ho9}w?$!d4s!d~!?sVSP`rb~9+m#+z$e)aUUCFpN9)63t%V#s9|VGZV?cj740 zZ3wbL6qU{2OnQ-eV}dS4kU~BGAogQiq69Ra2W4iZ^MD&t7heR3vcpY*3`M}AQbNhR zd=z!g-N86NSj}mleLRjA<%Aj<8h@*`3%`#!F7G0atFr2|T4(##4PHkh^u3b?JR23c zIy=*Sg0^DE7y=S`(^P`*YL4LqmkK#-2vz!=@Mz1M3W1!b+vpJQETN;L)2)zV8?(%` z^m-|RPeJHc;XS>2(OeAdfJvM*R0fWsq9Sv1b4mHm&2K4h-k^?-jkO{W35dxbCv{_- zT?CIFg|2Kq&sdDAoo#7(_~*}3W`4~J3Dq7|cvkJ*JK}+nk-(*;6q;HvU}92Ig6WfR zkB*$k5)zB{!W4CDe(5nqJlEH!E7EUz)BTm>;NU2$zCP7C9hQTEEu{Bp>!#8tt zhR-w+-1AV?JG)1w8|o5l!q=tbq($fhhQb!Rv}j^{M7@_{yKaQ6#*B{{Uexltxp#%z zxwx24YUt|vH`OHRqVmcw$U= ze4Wc9XUNqF?PPOH3+xs}4taTb#gq?s;LTN6zqx!XlRJ`LQgY`MJ$QHjFt`p?*ZUTF z*WAX!+Yf(ue7?-QeJc%Cikl}xwEQMI)zvkQ2WyB>PE(-Yi%Lq~=I1~7x0P8GuaGvf z4xPaEdD(OI=Xg|9hnU(QyE*{`iHp~PxMkK_Q&WRaM0PrWW@?2I6cKX2CswWZD?g$3 zgz(zN#-EOY*~);N=j!wG^L;jUW+u~TOsNTY(L1=8jY1fIW@e&PB+e-zGOG2M95MK^YW!b3nT3Ul|#RP5eO5 z|9k7rKyghQ8;bfF1omQ;w2bs_Psri1cc5HY)#gi<-B8J^M55?-QOzM)WBVTnxp8N= z|3;cbm5ljaoHux77g#r3M_)JZ?iK}<*7U+tY&egfjhI~gh>)?6>J;xX3jm9)N$b*{ z_0NvfC3=Qt#7vF7>1Yob-W~gE^7Wmaj)1_~#i9O+w7R-!+WzJ3?GQl&KOzHzuV-4G zkI`K_=|3767)V%nA91*ezLchJ?;*2FM$}%sz1<(2z^vmRbFNcsiONXuO1l?VJ}Sya zpPAcN5F@#_W757J74|{9ZCRP?$s`8N{DF$aT^`Za(NW^U`U`^QX6eIXuqb<<3^Hfu z7Wyr9Ft^@YcCIBmfRz;;Ey#6>w~tSXhr*?zqLIAGFW;#(a3g3czO0P@^8@3)TWT!# zg#6~|?S=6d=iwud8F-ShYjT(##Ee<;3Atb0xH`Mic=57}=F}7DyRVbKV!6k@H8jwq z+D}H+dT+Bg1tsJH_ctuaSF`|!L+z4G53VMwt-g==mKb5+H(uJM0H3QiH#t8CDAC6= zo;HegP47IBE_cVhdnL|J+7)f>tws}n+KS4`e3n+9_II}8x?^{EUleiN^GkBOcO?|0p?Co#fy7jHHQr2*RDPA)pGZP)68xhW|K?xaw7`VkEMzAWN z9I(OD+cz<{diVP$n~OWIyV$2o1=#IpM$yLR=|9dk2=H_#H zItd&B0fE}($BHx$q&j5~`}>cdTCv`HFX591B?uJDqV&(%OE{o)l{8AVc66j=R-x-p zPoGV`@$y1Gkun`@KR?O7t{U9t_V!!vZX>b_3Le?pb3JsDV3lk@Nu#5?#d=KNI<8me zMm56EACUlDRMJb8!R9ZdpTbLdIrZzC*;+ua!TiwW0ee~kmU<{X9wr_oqvBKq8Oh!TipS#lTK5Uj1EM+{N*CAM;M8 zs+>tnoiMrY0rL9rL0v8n&goK%-tYTvW<6_hGVNx7)*Kv-4YX(c=H@Du#h8Am(8n49 zj@bS4nPhHZp}Fz_7Z=U-PNAR78@XFHHP?@NzldT`2#R6HKDin3uY^+4^Umy+q?EHw zn08EeuCSj3R3*=@(1eDfqK6uaSwoKu^jkdrq^WOi`Nwd>;Q=%Lq~zp&NcsC8)zLaorAr-L~y{eJYa1b=zLq5nYp|& ze~|s;XDsvm2fXZ9{AFbk3AwrKuX>Z4bd_6cwY9bBM43qf-Cgyaot$J<@lw#}Ol1H` zz5*7{x{REkzv7xyfM1Y-kMAZ94o>ZgTtuoWOOPUQSmih=cq4g3bPtb?7Ua%)Q}F!! z8bW7Q;uSKVD2BujEsc0X59AiBLVVJNU$~0M=v2dR+_p7WAP`eY;aAbDCv$D78c&d8@|D}(U5E# zM*w>ww7;)i+i)l|JTfAAu=w}y--QuP18K9REx}jf;^HSKL;au%m=s;yPGqqzOL9K* zl=7G4I*sXKpr!RE%FWNuXgDe{OT7Uf$suTTppY(n=+jxl6%sy#vaC8%E#fEzSMsn zn3wlj!+Wq99f`fW-YMdIHsLPNZ)gewA~h%^sBtisjk>cX10B=TOkGqIK);;66I5WB z=wqph@5y3POsb|98`E`zE?$$@I*Njv0+<>!W@hHfni}!p#oss3=9kysr7sX%64m@< zLpIHLWcbP{dSOpH`?`Yl40^+!G7@kkUo+YZ$96Tru`^aMJ5Zt4(AL(59za>c5Hy8* zIl^=cu|yc%f{0S*090A%=G|?h-0FhfW#+MyQlVu_P2}S5D0Yad(TS@$jg--V5`P27=^vB_>M`?^z+ z+Pd0<;`Sf+y?5t3vh(wKEw6$|byoFT<{qk7Kk1a+tzJA{d61HlQoAILtde0(l~q;6 zI*-0yt*?gGt1ES;h>3~qu51<>cclkM&;_@&v>?q=5?2SjP>aQP7pFy%sR;@5qd`9P zhU3o6X?Tp#gyZj|s1`Sgg+<>vfr({bpK_j-1+$l$VrSqtbWHB-Qx%COwzj`VZEgn6 z^gmR<*ZaU$WX9)QDJbM7ubqvhW$P%eWP4(2zr=3QBLI%rn`6dJ7tDt>ZV-IOXpjto z$v)35NK9PL&d$Ier|oE=;~x$zT9i>qsj0p9%fRSNpSyyb>900B zj5y<1ZseC00)vbg;>0v!JUBd_`ln(@jMuyH$TqGSABv~%Zbx{?%VS7fdQ(JEiiga{ zvaTHyQWL)yob`xQ`%Pb1&>l+T^Y-&+jlfmqPA!MJu2R6jL4S87NUr<(23SW-3{D(JZuh>|l~vPraX*LFi)_y|ab1lP zV!VK%(5l;DeeH?x)R>qp+Z05u9cY^N0;s#&CdlmT5#(E2bFG9Py!;*;h3$Q*lT_zhc!}PFLB|pL|O;{ z!8zA_CxXl>;!guKr{0H$IRB%$?Hm|HcG?hz|_@SOtHfRnim3z?S~~9PAjXW zCo7XFxO$_H!_u&^iw(Wp+}vuHO!5E(IBuQsgYr!f7Z;}*&6l~hy)6g9vDLUY7#Q+- zhBee)?psZ9Sn-H(_nE*3N$gRI$WM#>9pJxR@|E>wmg>=UQm5xBEm3>^JR^GR<64+8lKkuR*Kx8Kf;Qjda?vUR&|7Li2A zZAeT^oFHl;Fypz2eR6urW0(7(8*w#?3x3|R^RM!IhlnQl+&BObeexjgLgRgK`!_pV z`vX7e%DdRbvrCS3WXZ1qR~C6pn2au)E&=rWr+iTVhurvJcI@Yo2dV}F#{{0 zY3O+yu-Mr+G-J^4Jm@p56e>6+bjmW067>8`N%ijj7s;#BXiICmTXJq<1a4h3RGIw&+45ax&fPRJLOfn|VNpjNQv!4S@%wRr-eL^8@{K`=2nJZg+7V9(RSPl`2^xo}T?4NB;d| zoF|S?Z%3sF6FMc3I7DOuU%Yj#7?MmG^}D!m{z8X!*KB$=zftsT4zwzjq>Yadk{_lBd-0yp(;pxxLV z{ZiP{J@lN$#@4nCO0?WdqFy}OMT@XSw$e-wCoZWC@{L29LcRL8V|w?op7rt4zIgkX zni`5i(B8prV^5-0#5k^ev>J^gk1@CeMhmoqR|O?8Fuc5c^m0cQ7Bag%uI*{QokbPc zx;qzDbl4QuM~sh?`n-lo4wDUMBlT%P%w|0DRu)rVR^>%Y= zaBhy4s|s&O4uID@@dGUs=B!Cu)iRw25|s;mU{QKvdu-Nsli%UNe7FH<|w@?;V zbs5}w(jG!g8$?oAdq7~S@W#S|S^3%}WGuOJ$<)f~-E#NmxsiB7liGm6b(hN6uK`HL zB{S1J!}k(up@;Flb5VKuXvdxK_v?CaOo&``uPiQRTvyhF`p(?HG1h~dBrntc7Wwm! zj?_8ys}t}=p<5*<|Kid8PSL>Ex8CD8rQ#uUJ?+g}X{tsY6{5xNv%WwyI{4bE#@w}U zI2Db zPTT!VVlnB9F^|-}09-Zoju6?|+3g-2%$@76$a!Shl_R1aTw15kjA|{o}zmMJ8(t>7Rhal%P zsE$bO|2pK}20voF?pRcICB$_3{c=%hsi}7g1YUS4zP4v}YdUOn3;{C@{4|pN%q}eK zs4lY+%EBbvqpcJ%P&z{I+%xaqHM~BbMe(((!WJ8VL=3{Xm;Bd!xU@thFm{%<=yv_0AFp7bg>mm33UQqxCRc+H~PQYb%^ zQr_E)6>ge>^Hg5T5)&S{XZN#wjf`(ac%G-|@Ma>fqJ1V?KVtil{Y??YaR! zH!xw%GEDYh@u~W~e-`rh6p-q2$vt*IHWRq=boM05=MD`Gjb*Q*WtDIc^m zsPIf!e&|}N^!zT#3@6L?gdQAl?*8q5nXI9-p9)cE7`XEd*T>Q071y)?wiWkqFM;)g zUlrM3Ke{-+zQUiS5sBE?AO|9}{y8rzcu1_Qh7jAL_H>Q2sgAnZ+QKu}lNgWU|RYJGu;z*tr*&Gm&J;Mg;*7cUqE>^$B~ zrPgGW5+){UcXsv4sHj9gq8@_og_?TX!QD9!8r#k^CqysWiV1!zeX(y$fbK7#DZt~%xL8JYkFh1>aMQ@tl$WlGaL5hu#~k@h8CI5;-&M?bq*NqFL@H;= zxGG`a!oZkc-OQEDA|j%J^!aU|;O{LH@232CdJfEAdS+%EzHW&n-Jd@{_MzET0{kGC z337|5`_`*g0kJx2?m@N1J#X`6A_xQ#{9M|@s1y{0GIw%%)(AU!d)rPBH^j?}g0Ekf z9J23!VO9bJ-^3+f;F^%-#h)_v&Qem5vMgp^Okd2DDX5N(!58rp9LJE-NsSYKN) zTy07IzZc-s@QcyYFTiJempYRyO63LCi3`|GJ+vz%F_8eLR51WqIYqE~95Mx1m zfPt<&ffJ;ej0`|Rl71(IiweaV8EC$jxrP#d7J=+oIE!@At9!GRW}O8TWegrkC@iV= zB4N|fKY!kq?A=*fS%$v%G@wD5EzacZR}K={ltuVR0q0RK=|XC5z8p~rW%ey|YU3}f z=VUc>&;!axr!*c?2$CMFD28?XChE@7Mw$Pvp0jIzeU+Mb!p>#;2uO<6v6wHGs3xRN zp8Vyu*B^*rJo8nsuYGJN-~*FSA|j%Q_=c-UM^!=aBdg?VT@6H!3{8duAP1Z5W&rL- zQBhF_2~HRVbK7CQm@uC1SA{z*vmi-Tl_#!PRx4mvAP^H`1yYWwsGq}Jr_hWJl_G@& zD80pR4xi_Zskte0;!s@$sP)YO$Dl+Z*oY`dA(Td$^Sjz*KA3hzm>vF%d!q0i)%#c) z3$Nt~@V{v-k`GOej*d=34X@t=8eT6snYO>)nmti|8&fm!gwespLCW#zJBiWp@tcx{ zG?kT=Vgsf?dL&=1-*wxW2tPY}(~fGy2}&3c_RW8o!iz2Ey>Fs-88O6)?HxBG_XGSc zM!<(0BmyJQkdC6FysoaHT4d+uwk)%2rVU!+;mz6q8Cqw4o0Wy};UmEys3Av3I6k%T zThQo=?uE~9ZsyKnBRL&eS)t#**$D=D`~YVq$+$>EyO@sb;^` z)=FPjL3if6uX61$yY~$=AxcR{0`a=K<60WIYU$o5U!sOTnfYk4IcKTo#C-i4(5+dR zc8+?BO+-Y6RhK`rI)BI+)Yv_X* z(SP`&FHxz5@!iZ78b)l&$8NYRAQ;ZL|6mrip>G))QCwVvmbwYOMxhQ!o~o3Utd(9Ao1}?QGhfLTCuSfo0!JO(J8rt#ws^tM5=G^>z0Ba6w4EinUoPRZ|wXwkT zOg-s`;UIyjsa$d9({R2pnV6=}Z*4__KyZ1_6$X~Pf3NTBws zD?B<+59C<@{Ba|+zM1CcXIe_O52R&e=I4x}L5h1lc|`;zSzFU$dueeiQt8Xrro2R6 zOB5OmpaG%JVc_7nr=-*i)OPamkaZbA5h%t%12IPA-`#2K3JQ>6ZFd!1Q-4h${&{#x zVcVdBC;&VHu=0T5$m3o*`H)mXWi>NjZ3O0on)=6JaAX87bgEb+T*bcqo*tDgWAO#j z9}&-E3>#Sp+d3bA&U{9!v=Q!M_7C2I;@iS#Tx*+6QvKw;eJq%xUu1J^pka|93eH9j z-Rhg&pE(1>U0tfVpihE$c1u?m%$7LJaKqW$*^z&xApjGj=C-!@=RK1MfbdUPWAX6v zOe<078^_Mc%agX!CWFq+$i@Z>4By}ofDu0%tHUtO?A|@%M>+rGpFDZEC8nefSOw~2 z_4dXq3v;XBgapf(J^Ga$=*S>#Y|#o12FClX$b;7w9`=0@EpRjo42CKmj9BuqJYc7A z9g|@sFb1VuZ2#a598Lo-lR{x&@7(foFza*mw4rs?*?~sOci!O|xsRVdWlj3>1s|VU zBByUKBKXT>?{v(J0Xmqx4;+J~o5ryrm~x4R?u+60WGyJ7lC4AYa4mEIl2HW{UD7g8i+vP zSP87Dp@6z7WD#~32Zx@QodW9lFwrtShVKq<-O}Bjpvo0zX?r%Hpn%f_CnzF3IazP?6c^m?(4MLavykz^ z(ftu7?iE?=xL3Z}I?E2ng|AdwyNrG^NHgyU%4if+8kpSeM6C`(D_OV-rEGL5;JL0v z5BWgb2dS9m{xOocmoFps1uEQR%u1w$L`3LWxlzd@L%1>X6gcH!JJK`IXTRKG1lyaM zjz-9g!Ak$^?!ZIrAcn<-lXuVa5_O=RP56-14CVCz1S--x*iNsn_iSFg&~TjL#KT0k zxp}%ZA#URL{agQ%L#hOMX65HD)~bN&{WI4FkBI20eFP2YXIS7uOjA8btE$qbX>b*g z1qUVo9y+=vup2yny1u1R2L!rc_pDjKFpl#F*!FqOv~aS(oQi~vJ23+=5UW`y1Elnv?DtJD5g}I-ti0dd>_VdEuI}zg z9}wscML*Dnj`{!Eg~6(SY@X>W*xKKZ>sZXqQkXrgqC*2^-^~pNxqBD4diUL>+rQM+ z-P0`8w`ilHqRhUCC4B*`jLiuXN}l%Ny*w-02c9>PpCmV}7#}p~f14`K9g`ucBmxF?&vRTO3ch8 z@H+!rgugF^#8E*0?JjGIKIG$T^*o2lS_G|DSlhzw{>X>m2SkdhU>ZKe#?G4z4Go3! z6-(04aO3ZRKR991<=tf1*w_=F55q5@V#92+yE(%+L_~3CrD`DS0uLbPp~Vu%m{bhC z9!T+I#RhCG^tXlqof9&v6ff}p`N064RXp&9NUB|ALRfgb%xfomU!0grC#(aAgWcNB zHP{QyEz&U6Q?1KULq2ze9+bMizP{bPgC!>U=SvGtrO!1~R0@5w&=_jyzz_95qYE27 zeKTA^^TV)cmYiUHdHpsC2?=!r8jk^G3Z>)n@0S`=0l$mF0=`?ArKf+;_buDVA$sBa zn3@bE6g5`X2Q4!@M~*YdQ1d}`*^@K^vu-_5ft zQcMWI7jV33McHBdvn55@n4oAERaC4pNj_g*dE@;4jk`Opj*jjjVrIqw94bwHqr}L= z2tWf8cpN4D)q!zLbU=|RIQR5`9=&;|Ogc>pP83QiN~GXj59)KWq+cviDnCP{+j!U` z&?HEM|92?IU2SZq010RS2hGLhr3ZW*F%XP`Zek!w0Z_jL@Qx59X-cgaKoHkAA|7+DcOO}oNVb-JmKKt(rO;XlNZqR2*kx* zq~`@mJ$QLxu-99UJa?fBB)tiKwjFR7728g_!Q~J|cBSRzKtR=kh`r%rZvAg-3!e-> zjSH>%Ba~EQV|)`6)9lY4ckQ-9K=|UGVLUiEpk?62f_R!%ttH*h-xw)0sF3I*p$L!qfT*?GJ=CZqRaH8!i4b<&oL?ZU?;o&@! zpotJDJL4xkw=jeM847M~ZJq3GQsq$*?9G{&n(od3*}=i_2|vC&xA-tH8h}YKwn|~> zGL<=DT--~fi6^c8>$E^(0x{Au*=3gJ0q)CB3QVhGV7r89$-iVh4KX31FgEo1}skQCh$ikx{;-43eMa(ZO+y$g~kBF$$ZWDZVxw#aBg9kg}8sKbs5*8g; zTFU!#$?5W~a>n4d%I`P9L8w({%>=vPU}z{bBm~ZBG_b3koc>8ufBwqCCLA`F9MUuZ zX9Y`Goe-TF-)f(se{IsGyJy>;xr3wI3KO%*S2(*pVq+77VLFE6OgZST2_ojdgH~nR zJ$`$)4fg04xd2;(nv_g9#LkwBM?>-q!-6Ij zvP1-g1aot9C{?vO*RQ03e5nguhTDk|rz@qE-|xYrZoN2F;d%8K zMwQMlsz@R+E$+kz`M3l;TwUEG)cJi9&XN!!0;h_vU#a!xvK7GphfhP&4V$JGmPn#% zM^vg5z+84a3yaYB^4dlrmS;U5p-5?Ik(QJ=YdIU<^YMWh6LOZ8nD(cMgz)ManeI3D z_2KMUuh>2D^hAd&2hZ+E z(gvW1Ov;>Z`L~6WG<9@*fiuVx2t*!Zh3?;=8e(hc(c;Y|VsBcpOf%A#m9`9Rjyd(E zS9&kQftTyi)vc$L^5H!U%OOO)>Pg9JPN#>2E-gP(;$S9+AQvu;?**%f$ar997(zkm zX#fC1_OFJj{y;4nIMKHkmi&BQ`Y7yw4Z0`rFOneh-cDQFY;iw7a-I~ z;M<2FWA{xSc~_`NN=1_*IUfVx^~W3rzhWH6YoS=eafgYGZJvA$Fuw(Z#;19sKsF*? zinj5+dAE?gsP_`)YLzHY6?l~>MGnwbZB_F19-%$!ss!OR5ibT$u{r_BY+4=!^e+8S`C!c^-{mI`;wzci8&WGFne#^DL1N)VM-xiVBY3pKyGc~l&U<-W=!EkNmjnYkuyt36*~s@Lyl%4U0jV#qYXV=^~2qonvmiqusE zd`&IV_#J~A#bssK>ttlLOMKeE=`ZFB8nh%&l#*f$g1rO+l_BsIB?S2Rg6!S5n+F$} zv-L}2DYlf%)YQ1)aSEc*ee90Q9aGgXXnHRiQR2bWIsoOYy%!WSUy*%Yc21BRfGa|N zE*o&$WPFOeP&8*)>;a7sDcls+o$=@;ryM#${|;C{BeXhKvvB?+>{V!uVXtC17V;zk zW==1Qn|6v*#8HAFx1JmFeUsaE>W?}-{*&n;=dm(1lLFH6Y9j|v)x@*R1YR#IO`=Z(Ed(NY9n5%bwk`d{y_kLgm~Y&;5fhivdm`BKgf;5R7j`kRHTM!aWVQhQ5tzacYg`(rbT&3NHN#nd zuV} z&}=^|v%zauJCZqZonK%|K11;Rx3-ppSLat(yPp~SC@83>78dsG?CzKM^ShSu$(N;n z1ijPS8?Z#X=GND_?QGXKHz{@}%DIG|6%upl`IEg!l)6ufv?lrZtzl@K#zA=!wXeJF z?k)(}@kd5+&TSgsgWK#9t_p0QxpZM8eVm4MjYA{+9;_d7P>72-1$q) zZ1>TToA<@~YI2Kzi?mG9X_W=`o>-9BU9j2R%6!3Ad_8xZC&@0RoWkJL zR782r?~|l2x)0%iZa22%;fD8UlAZzI^c|!wyp-h%Gd^%+K(ZB&nmPo!bAX?`cF%K1 zSU6c916aI#J>3F)IdYQ0B}Tn`oSxn8wl}=btt~2OBU{0@qpGfcXJq%Go?f!Cm6h<1 zj(?k*Em^6yfgeoW+h=B|K@$C1ZGdku0IX#;*aDiW_DQr5V}@Sn^%4>Q_Y|KiDLs&w zJVIx`Ix*ef9j~o|KeSUnIGmqr+R=8txjlnj46hY30$`2nlldG3V{{)#T$_k)(&M9e zczMkOnHY82TOiC1O;4IkXj*0NT?8==jXg*y&G7GoEf3NWP0H37%<}R;Xh`S00J2a% zRsD8m39gTi0=OU3ew0VO{M*UIC`5`tIEKB8dNb#j3d`R6>{Q^_uOeMeU%=7&Rqj&}ypJ=c{}}*UB3;_t) z_4Fg-8XHME|5IFv^Yd+!v1Cyoj?g^Jn)Bq@7o2tRukgZ5CXcwl=+o_azVVVh_EUn; zO7d;b7hr(6yCV1I7LtNQFohEjPT=y~9~~Xdi_(I(2+ID+K%D5zsfQPmQ-d~nZGD~U z(D%g$b3IUdP*A{UJ8BDr1^n@&7iNsOiDV>@Cr8>nz!D$fVI+lO@CMd~#M4 z!SH9M_PYz^S6sdCe`%XQ5VN75#tqr7CfHb7LV9wdbS-dAW&_Jo7Gd+3+k&7jq%2|ywq93G~n700^jf}!B- z{2ZT}xc!-3I}BW3D7Br0$DA3ht*dJao_MWtm##|A??3{8xi}O!M9_lKz-Zv&>dxy6 z{h0_XoB6+o6j1Sk;8s~*yZ*Emc~FkKPsfLTC^x-5Rf*Ew4iaMlb}KMDJFoeWVm})C4!=rNX_lQj%`=)dnIz0mewAe-P2Izql1PKEC^BJSX zV>8FPl@f39B4*{DpNcNGNGiPazypH?I=wuckbF2w@u z|0j7OZquk{B7Fn?DP-G^0rCX!jeG+9+zTMUgR>y=>Ki#3kdE*pfn`enS#k%BvJ~T? zx?yT;qH8H*ccene3H`l0V33O3+q=_;qXI5`7S;z|+1t;4D8OjB?n3v6A>WV^@%o`n zr1e)L>!-CifaaN(Lcm~_AU0he16gwQ;& ziw$Ila@@Z5_VL~YG-?8Nii~*y5cRCZH8!!Gs5y@wL?2#$FzD z;|p(}`8CVGBwvnbgu;$Q`zl`lJ-PeupPZy-Q+!gA4pP%1r>N?lgYB&$UUma$LR1uZ zN8IKLY!ClvoQ}RVhZ|NP>;@|a%Wi_1uSfw zEB{LPps@$a1`IDC?cW|j*VVl<>2Vf*- zjWKXWO%%02chU6dQCQ?VIemTcd+#TCWy#6Ok(n0=ef`v;C5%FT=nV>TV5|cF6a0Ra zJ!=PUO-dQZxw#PfaWk`<;E}ZVj4g)YYI3kPH>@`Ya#f4$#;nU&SXm!Ky@Qb0y21n8 zsp%;^Vq!Rj74ACydNI205~Hb^0o;(m*RN+*Q$H49`le-#>D-)iza8Zm>nd(8z*Iw@ zIyA^aX3TUz^Mu0nI9nHR5WLSkzuwGD zCHdsoPtGvFfl|c#CXx^VaGibp4D1mr7J}lt%_@Lt#uF?%b8Wu8U^_&BQvm!=42(iy zzp1-|kPTC5csy4|etru6KD1ue3U`p?F*Me|H1=7GTA7>wpC%YB2U;+km};^3*&j5W z>*vWSDP=*>VkEFR`D5bTtgWR*3ll@2L&(m{Tj2PD<_~%VQWFO0Iy$;SE#91nh=?~S z8{E?&rPIf|RU5v}Zd05FN^)|z zubQ4w4!LCHAPK|BND5^V$jm-x3~)$7?me_2m4=e?pJ$gd&qv6NDJwS@DFmOrIg&;Y zXO_@tPfS3_BM|&Zpa$LN>-U23JVGazTVxs#Ho(NbJx|9&rxuBmqC4*tF@5HR+ik_c|?9OAFRn=NR@*s`FY__J^+5YTj zK0PqtRMzqdCMZ5|BnxfWVInVIhWr!;xMN{Fm4mbM;^l1a_g{B~t12jT#7>tM39F@` zY3t--X{<-Xa9sam4pian{uO9ZDhSox4%L&Ouy%a zn&xa{HJcr9cpCvKJ%Nx+Lt1zK{Am`hEdsrKLbz%dfe`q~liCGW5;Q_G2&7Fp@doEC z=<-33q7!EzB(-9&;cwC}g%cyh<3zvM?PTTwvEh3!DO<3R0^!GxSimtgN)1uIx7dJI87T`UB>01| zq@6;G6Sy95;~-horIC>V%V7sMC-UQzJopxJWEP-1fzI5%>O5H=@;}={E#Fc#2=6C7d5R~yw$>hE% zNX3r89>HL&ulv3EvL=ybxta`O$vW@$l%Ruy*crIon@D}#C6PX-!^215{Q_nkEQ{x= zqBjKp3^|^JX5>`@z7CP=1M?F2Q@v~Jj4dp>b@HZmPN7(WjY&=WW$^FcY{MgClDp|> z47|b+S~fz8ArO+DEBx{wfP2#+xb_cH{1D3)kl5!-sbMe$!w19A^iW`X`+bP2MwB1w zYkQ(2)9~z9G!55OBOwy$P=+p64E@4=Fn}Y!Y5<$~c+u7R?f&j@5LGX>kFT5FH=H!T zN|NF2g3iUbf5s={^Z9qB)R17TmFMmf3=lMn{SqGy#HXX1Kn)EnpPRQ%7+@^`gaMy> zrA1DPLS{3~)q&sfYg;cah`Y8z8_Ht>tr^gv*?F~9bI=)kek=J|Kc6H}V1x8t`)&Ui1a!sN@nq0Yg{^wpK0GI~q2h1MEymMFf8~%eQ1qL-y zp!f2cKovSUEcAsO>IyW{CW|W;ptAe)pVu8U6JK=O`-&QSlI2QXAo?L?NLma%JVaih z^5Of!*G|4b@D=FS6xh?fVFtlUtkhUM*-9>UF#AI{Qt4V)_~7N%S4~o^br+QDN+HoE za1O)K4nrhH{cupSe8qYv%Flhlnq6$! z3kYF9Phx@TDCfA|(Y4+yls|s`TGs+cFOn*QgN4D_2GvQ>R3`>Gs|@LaXoa=2yRiSo zv#Uez-&7se^#xZ0Dl8oDy`~Nj`8oi$L%=4=?`%tQbI0qdM;H+3Zo-4>avuZ}RELOh zm@)tZ98i&8^`*v39&Rm9|LJ914*j2 zy|o$KV;21>XeePE9N>6){k3#O(^j7fXkk)rc>d7)AU+e$$3q4M2@4U|6E!X<3w>{j6x)K@09!G#)SV=t+>k zR*^sm!3V~l+Y#Di$Y?bIrH5XSOXYYcySkd(_3-eCBI%>2nA}*s{^O*kytF^=uH5a4 zN=aR`dz97$FL8+5^z0Yv>Ha^pXV0*l_Niz7wbH3`+)C|`fsb=f0sX`q)w?DxaH^{= z5Ivj*4MmYu64h{fs_mo?kmvUZ1vKiOn5jx{TfA$z@>Spg;fAw_rtz@(mffk}7Wu@4 z#Z(g$!pP*^rY{y8-t4LRQFFADYXY(fAWJJeV*(=f5rnw_A)fuJ^m^!6r3W4b1`&}v zFo+*dUheKYfwD}3+vPhaQ{RF(B_wdbC5e%$qNMS3XYGz79vmbiBmBs@0k2ltP?etC z<2bDTg@*8nugyTWy6Y;<(Ppg*Dg zYbO*8Q4PxD5()FD$xOF8a%h7T*#RVBZJpAML$zLctK=H{7g;yQ83R2sW z*gEx2!Zz;lz>(LU48=!$)zvKIvf4l9m3TQ@xAR8dhpM@ynTGY1*L}09m9v_JIHCJ0 zDk`tFDu@$FxaOhxx)mPEPmT?KX;k+eVxv=Dl?la=X{H1f zFowU2_9K6q+I^X!!0R3R)!a}$J-s;wf=7&dAx{{quO)Xv3+vWzU!y_WKVIvICNXmc zVycKgMgx}Q#2MLWzCJc&a&1DNyuNoy!Y8Z6LzhN|=T_K&sOCHc?AbDFcupY~O&Khw z%>dVe1pCz;+Gnhej*P4uoF9JhcbWZHTwrI(OnZZliMEvwCp7RKVLQ?%UQ>TTes~zN zIkrtiG~Zh>+XTLJd@?fQGNGrlyQkh@0Y>8AH46~`2UvHYJ~G3^``zB{ortRlDC(`e zDw60Vnj{{THMmAgQOw}$<9hwqU!~ml$EKndoQlyEzV9P9$J7XO1~L&KsHIp_#otn@B$|2OmBYsHYbrfdzqReXJe52 zl+)evSSRZ#!yXItWxN00FMF)yFq4@_1E8&e2%^`qkBW*NRZr0EMb|=oJ-yx5#b^2C z(F`zD4dOF4^UKSb6zptl?FC%*za}((o9zyg<2C=R;HML`pD}@(#5c;0)pLA@O1D*f zdzK&Ujn-}FU%(AqGF^eLqvc$(PcHCA9Kuja@-n)e3B z*SDQSl<*u$vHSV?!G&I?2*~=Yid2XWrRB)#3KT382}yT^`Qm)bG^v->BBW!1#Y;Z55l<_)f`T32t8EJ(K6 zhka6b#rlnqiS|2Xx1Zt(3SCnSp z^F&94wF)O=P!Go(^P{fUGdTBW6-~#*tqZ;&JT(2$7R#dbY8oo2bWhW~!$Z$MvH-{y z;GPv}(~PS}{xHP~5&@3T(y@P*RI+_+3ou7qXHq9k-8C&Y7fWCNC&u+GdfZPeFyuWxd4G!iny?}|2fzcA}OHT=r!NtG4W-*X%lBQ>sffya5xj7^(X?Bm6 zt;^0Hy?u^Lt0LGp?*Q4A=*}=q2&T~T@T42sT!(xJ3v&>w*wcPJSuZ1abQuu1d$iYF zgi$m3F)f$?4}&}Aw!F%Vw{7?Ckp_+Q7d9WI9Q##Dl)G?W?bcjBhS9i5Nnacf#<{)g z&NmGjOfQpMk>3c#sGG|-1a4Y2Gc%K#9tjpdKU#p7wk}cQ!tH8jT(e?{jakeHHKpO? zl=$D(k?7LwgNGhFQ>R#+4PGSR6yRAqlHow6Umv%%v2bz8=X}2l|*t!=GR zVY?+YGp;wc-n|q@OL}9Zw$j@2iW9v;D=foxzf&0V=j5m`XK)SA)b4kR>E3~^>b0X_ z=8HMA%aOu84z=_UN|Dx(Bk6NAwC(cR%YoDSgxM?7oSYnrsPPt{H`*qL%OM-Tk^f`_ zrmW9peM+709fGq%+M2(m-R)Nklh1DklA5>`qDNzzyAnG z67C**iCO-^1)b0*_kZ2F)x$VECx224-K7Vk8dM|3?LV?VYc|BU7hVYB5JnQyo@a#{|-+p%cABT^BFVl@n-n}1e1X0CBaCRG6o_=m4W$;7<_qcbyU zW>8*%X=cG;om2Qer@b6smw%Q2ZUH`cT_6Xgi1YM=PY*1+sRNPg>x69`50@~|u`r~t z&d=6Fv`vc62!87vQGP0JXm~c0$)FS1d;`@{1@2JPYuewx2Y{4D24@J!6W*J0b!Cg! ze+|P;&vlv#O*0*Ta1{_i8n2)>{`=_`iz_RL-cpGRohx) zs9K`{%R!q(7D5Gxp8jkGU3H5x3*iIh62cUD=g|$*R(aku`6s$KQn|PlqSwxuTmCf_ zww@ns#d-~?P)I8@(j=pQfcp~F+wgv1LkmC2ejr6i|6G307XaTrTXNxAqo z_m`E78A1+OSy?>1ZAEjLKdfo{+G8Vc%W8-rM2CxA*2zTDs!}m{C>6Tq2p|-g@3Jf; zwf5zBLVxkK!YN=DmC?q;MYpZ$3=TIGF+V3GrTsNB9a~gn|6oF+eOPP0*?+tykOOg^ zaCIiWN@yu(Mn-D+2Kv(EUhe93AA{{3RR5e((!UKo(J_hJnDTyK+7rtj+0ll|00Jkq zi@R+4DyuwPnfF+LLU-mF1Zi`-Tn8x`Su6nWkW&y&ZqY-Bo&S-Nb>9^gUHf}81=6y$ zF>jQh>t`oEXyPh;-WC)}p8@ymvbY%n3%zO%PQiuW+CP zdwX1#h}-5gHY7v+QiG5$S5ye#5fDApx8npX%W;z#oSozzTC<@@I+_O2{zorQwYy>V zEp`_l!3wReZ=EtvgyMGdRggJauCDOz)~rw+`}n=@ zR^wL}=ycF_9NBGSeqL7rKs9-||yb%PS5KTwL}kLi8>fxSgkq1x8eNR2Yf4Si?&CZqCiZf^oaIS7DIZiV6RPTr9QZ zHGn}lxwwRV$_olmu2861q`O@4Qv2ZqX&mwv<`alMTP|>!Zr>3+F#!IVYNjYU9M!}r zuIcjNLb6n9BpS?24gf%MZUR|Mh1CuVBr!zF0i*faTsxcoTY2w{Vh-v(Y!KfUAL+)$ z5E5phGhYC+Jz}~kAgltMB2+UZo_>2xO}YkkNKv1E{D^?*aY8K3Gc8L@2&M#r&PAa+ z>HCI;$v@4{+x}C<5CC_!0jS`#@c`Ib>}Bfe!4xx*%kM^I-|Foi#0i zedXd1smL8`Bcs#`TXeg-b=E4j+^C91KwtzXh42lGW4tA70_U{0_2j0+^ix(jOCzwm ztw8RXz(e350f!qbHx5ltrz-9`{CI8a=6u%79Pl1G{@KEyAb#Pu{(cJp0up6o<%g6- zcd~|u3&Nj#icp3>6WAYC=N*L5WSACZ;Sc8@_&FEMv)K0AB2dZaAVeW%x+9Pi}t$Av<78m-;TSn;{8yXh=<~HG}Pu`w+r-31Ny1`i9 z8Vc4HVHLo~u^d%3oRY!$fy(Njp?sJCV-g-J76F>Ak_&WyuW_0S1rbHJf1W~IXC+$< zgukcz*;l^Hl8%#g3~=L9#EwWnwL&qTp`$A%&9B)aJ_@e~vNKXre*T%*Ol$Yo6hd!n zim!Z#(y>CZo4 zA@>~3E9O$I=MbQ={`$3p%8w|>nV0H(R_+pCxrSGWP5~_-OT>x4F>YT3fDi!YP;JU= ze(z!4;1LHcW_inO9LQ1fa(7(4d%&MCF(=i2Sh`WGtbImY=v&_>*~<-@5#8!^x75Gb zFZ?VXJRyzXz-5+VCjG&iI@5}ZZ$x*InqQ8_7b_cq#v;+UKn-Rg`ul@4{l(`0p9@fP z69CSw<|}ky*?1yi7>q*P5Iu%Myq03GLlT1;{Wk6&Zd}cp$M*eQAZfi~j4ab)8~p|B zva7Q_hgjOWo;04Wk4Y=KF)^ebLJ(9zlJmY^aYh<$!S^o+_`Mtz%9odymJnlUW~=eR z7k#-M4vB}Y_3*I(oV3|da=^h@fe_^PUm_G06Ej#GEJ^(4x~DAWUR9)FIAY#S9mdBs zN`n8XO=&Pn#xC4?lnd%s|HE6$Oa&(&t3qZ!j35xWD>=XtTu}N6BE9UROM>dtpkBJ% z!Ja|WKFH>=1m03w9sR5U?wSOU%UI?tt&sLZhTVb(~^D zl~uitwE?*^IQ1XIkd5eON%vhR+l>2au8tMy%gpo*Q!2=r^qMc}{gp9qyzqd!y4fq+ zJ6jqvX0*HJCQ(n^t~})fX;RgsP2L1$TJ20ZL?r^VVVZHM%^RlFKzRjXoAT@fVivlm-uAIoe~rJ8qtrICut z(Ep*az8i2j;RQEo$(BdGaet1`UXsy=(cfPdcI(Ne>u$-$QGd``pfc-Z!(#FBL6d85 z`a{Y8nTRvr)9GW8U3YVn;f=-LvXCu*0SibvbgQND_58 z`1``_Vs}|LCR&so3UIBhmpEYiLD;RBK=Z;{h0=(JSB~KYL^p@oxq12duXjuVb2_L}K>V{6Nbw{Q`|TDPNK zu3ZH&fEfg+ja-I)w&%R9ud6dZC|V|E7`+N+toit(C@6&TH97W+ z7dR##KxNNaI|c?+Ef;wAL?RfW~Jk2eJLZNRJ-{OKJBfBx=)Pp*}1JBpuZ#Eo} z8qEWM{`s?pL!`oKG#Tlx5?n9TkKj%eJwr$eZO_6dojlT9QalmwzGuUgI3nI0og7$}r%e`7FZbl- z1I4X~A{^M(>dD;I#g^Ec$scgcA9*54 zM@}Bsr&qRm*#hgHO3+WcmCV925N;C1Zp7^lVCO}>B$Hn>Cs>H`ym6Bf2?bcxg8q2^ zQZ&b6X9viUa0}K9KkRW-W+Q{xuEH$X22#nIjqzxp+l?McPR~@hb=(hsad;8E*Y)e6 z&sE$n&gLHDI!P8Ws$x^Bgq|GL&|vc`O8cpz5GE4Ubc!&GXxT)eXZ$vST*}tpBuube zk{oi4j!%!H__?JRyxsTojabJ^p!xQnpX$B<&|h$N~qH12eR-iO3GzklN(KtxMN4Y$pU{+K{z87RR3bL-4F^*y+| z^cLn)I~}Y7BpXLNdf?j}343L$)eWaGs0n&*T%Cn>pg&QFu)MgFEMTjN5pXecy5D^G zZETJRS@3|>*NQVUYw=^T^Y7+D?T>D2_F~ue)<{Jp(8`?Us#?c7I_Lq-;N%2{EL@L` z=#o$PFlb1n+@i97b+pTYZET)HtOjJJ799)o&~{~GNQqGsu7r$=yWCIZF}vdiT%$Pn zI{hHJI$WO`RC4_Uuc7it`WUa&ss9O^79dt27p$Df1#|K78UzPu#r5YB@JM8mK&_I)qHShp$aE&Cq`L~vlg`{&%;Mw1kA>h(t2 zmm~;%Gcc3L&CN@}(Ei%XmoeaK^xdZweCL54sig9_;tW?9CjS!svd&YbmAB~qdkkuX z!qml_)5mvM;rdt!gNnMT7SySRr4b;T2kJx#1!YArsvhGki;f7GeIvHL^Nvh^ir8q<{52pIHED@iHNomVNLgW@Lw~Tc~zzx^dp*(dZdzZA+qBR3=)obZVc20ox%7xu})`QV~ z$&^tTvpsfogt=;;E=beenvn2&P&!f|PqCsU`0S9L?sWbeYmXBF1#h~GYXG$U3fpw+ zJRBy(tDxdd>+pG1puzbE$tvfnkqGDT;o50jR&0h4TDqizLMufFnPnf8T4#fnB}cKl z0xuZqjb|P1?EkX;v9Mn6QL+WSwiW>TJKeW6ZN1ed9xVPM)#lPbbUp9;OXX-cK3en@cK7zdmeHfp?fH(OaZdTiJRTlBz%l~H`vZkZ zZ)@QA62KQLvmGUyq$p#f@@qRkervvenphR-nyiZLT`vrN`JWP=@rlX#0S&~!B@t?F z{C6d1xCE}>O+=MJ{*@sEJx{*tJoEfyFxU6vM;mnD)t`$=i0L9v;M@3>TWvc=6tH{f z`%(K;dhpj2wo#A>!Co3$+mAazIM|Vx+&&W2(q|Xkb^fc#LNDGEM*s!6Da({cQ~UjK#W&#ZREilxIRh(ys+zx z_ne9D(eOwGozcb9_X|=b&|VLjyFxHSl(H{)`mS$Wx{>j4w)^miuhN;gHv$6rlaxW0 zTcYU)7h8wxf|CdRrZ5iGY>7wSCE8q{)~Dj3z*O<^?N=GNggcL!Cq^eD03j^ydbmC~ zdvOM4o{s$8$er!=U0bNf5%&P`3Vg@mIu8lq3sES3VOYAUMLV05Pek;`RTR#9Op-(3 z*{#`@RPP1_1&!AQWls?N(BTrA^}o2`?)=ZiQjCt6LMka%hc7lVSsyzy=4%!Pf`~1pM|n8#lG70aim@ zJ>Myc9qjporu8H3#Mb}82q}Q$2!rk)uaad?W`-&_%T|limj@9APz{4>=>Qd@px-@c zaZ*Y~&Wst|gKV1v%L}&(s*IcnsFOk^|5Lh@6W9Cqo!f_pExB}dTi#Ub6RDHw0EL3m zf>ns^rdjYF5z>BKf(BnX?uKP4@Raz0i zT_3@Q!+gs)+(@s_ljLBv$S5gID^3&1!bF9g#w=ukgrmD8iCNfq%5&q#i$IR=gpoDHpUtxhM)yE?f%Lg z;^X*v2SP0G*)u*MD-m_WYzOV^@x1ON+m(T}^fE?8!&DRfY4Z)9(o&SSi1mF5h6JIf zZeCv9F473Ia+}WTFEc;@^X9zX5fTsQ8r%~#J0iCVaEwo$3UQQKI-5(-U<0)Wte5#`QH9KH zi;h3@!?gqKPS^=Oa3i!evs`dTfpcYNQo&I>^Qe5xP;UrmE7;dm0axeH&;3e@f#zOM z$Dx*E8H>uCGKBiz=&^JG#^g?wo>?~%4jE6`6DXh#I2%pgZZ-2_EB&?QxcPVEx!IL3 z14~{Y51EL78XYnQe$8o%RSa~ZMZJXkf0wGA7=*cVJPQExLX1(GNx7fdI?#v+V}iP) z0ZEXt#5c|{DvOUtO$r(xD#6T?FNT011Cc~GI(obXM6Z=KnsiwLIG2}8DN&?yo3tr8 z@em{!%n=Y1w>ODZ4V*HhD93qUxn28x^R$4p<LxY$G_5{$-z9_4Pk5^53yCN+;>ObN`3sRB=?9%x zK^$#=OR~#>U8!GA=`SFRh;0)Jyyzw>?w0pcg!$p;<>iHY3 zTtk-))af^G>?p0}PTxcA6dZTkPiMg!ZNPcy^G37kqV<}%tym-8=fB>9^OWYfYuI$5 z!EeP)FLEhujyyk-BeZ$or z-LW)ajskC{sa?s;GnJEfTut zs_eA;=}}Hk?d)KdBK7BtYM$X&JF({{WX4TDfSz5*XloT1#Dd)I!{E|jrOvgfY2l!}Ja#h5_4KRf*o5{*ojl z-}9IIZOY2mR#)3e6uuuh(nod(qzjdor$O(k_9B7nUXZuQg2o&pjKY^hM@J9YgXlr6 z))vP2^QeY~``vYbrZ5_Zb~B_dOo)MoUb_;K3s zS*EU$PVsv`B2&o6T8q!35&wK3O=+%1X^61?2_R`@YS&~~&e%!zv~h8lTx=dzI3cuG z)q^ti?NRqkz;`sYwH;IHq7J5cI6J#k`X44kA_irC#AvdiTvQHJ23rE>s#s;APPlR zfMgKa41rJo8-W=vH<)$Mlc;4&b)e3ObdjiuKu4yU z6Kw8HVVJqE9^IpQ1MxFfKc?pq&gjU*4waa$bQrh8zpo_zkJBuDeSFMUU-!ns7sbMMv#~?F(JY8aHLt{Ja4ghlUX^4w?&d{m4KF6vjZ# ze5eMKBe(RhyDlq>mR*g?W%qoth$8HQRifEs`@F!7A|aVDepw_TtTFPEd9EVNH*vH& zL&60rTdrE3+|_;<+3D7{O%)~^1s{wh9xH1vJ5`)wY#FuHNT+k;7xewB5;|m2->jssT{ey1KmkZC%lwC zJSpx}V1Ptc5@3+t$%ml!A#fNgv2jw8!4n{v$`k`W-=k#qOo^k;`G7CgtCVGf#{6`l z%wLH6G_hXzSazS!Hz1eT#ndjpPUlw^e$ryE5XP*iJ;;E&4=1}B_!m4tXDQy>-|sxF zE;bO!N$&d#2Gpe=KYsk8?3jNA<}c8PCHM28nKy)lsN8>k(>Y}v&kYL##*($aWaJ7m zi!=Ub#wkynTm@Gb`+J`EB;(#vvy?>TN)r!*$%A$y8{y^)^guO6neT`c=&q`)g3SLu zlN<33K0dygwWTGB;%+%Ycn>JY6UNapQ*5c+`gt9IxTH?@1tHw6grRJKG6{qNMg~Wx zKv&Xl^t%}l5Kux!%N!5=Wg|TUzFXOd|IYc5+Y}k^^AkLJy-QUJhABcG3bU|;(@vE z2YqcEeeRYePve4nJt`8(8^Fb5Uh1=`rzRvJkhil_Dqns&Vt9Vs9JKU+Y0=^k!HRQB z!7{LllAY?AkhmBBn3a)xpWbrb(mzOPh?Ad+v}^)YV<% zVPLHw+RRZ)zh`pgp=UT2u|}DZ)pmIAu4J5muBm1yyLdwqSjGQpE)Z_20Tz*^2SCTj ziJN@}eHGj0xrv~*oto)ZidO|s0Lbyc2pendEI^8}I5(Jh<>{v|2AE@TGszO@o_9@r z^=4$v*O156C*kt8FyJNJnHR1;9%;9p_x;kNq?>T@V`mj(%cy1v-I%P>QU0KO)NuCv z843g>&3c{AkFhpNvz3VAjyTR$kOPMZK3rgAcsNvDdMX~0-OnvxNgE3elT10nG`Bh} zou})1sUQ}ZcYa?XuPG~OUwjbb#-SP$n&!Q=;TL_eM^$C)whjP(hLSDH**oo1TTQspo%`B%sj0fy z*nEJrkiu-?JCh)KJ86i{}>J%F+z-d^hsPXVTcFmUSV$;D^Au zcOcKN{qAr_L3<&gYG|?f+0GI3LzR}9{l5h{{3ssO_kQ{MRi>%Vmo*^nnJOrXI(m$x zyP}f|^+g(3G36ojgg(g7RB6Lb@QL0Uz($m2)BO#@x0v&<#_wN;%K;RZhkiKG=HveGmzxeU$Fmx9KMzj444tj+f0ABgrS?b-C#|nZr^%YbTHiery}|%B=gZ(| zN-6B}K*^PV?F{NFU~1E?nCn>G$nf{@BOq^3XSrE8_(rIKm;+jU@il+$eT&V)+0|*LLSZL; zb?J3{YBUf_qWYBWSP6bFFY~(7y5JfjK%OCz+F22|mKp-&GJ=ac9l&?BajJG!8L=12 ze-ij99mT>2B39H4>QHE~5`aC7A;;|Brv$gE)0FogsCExKMqvxpe)&`E;)Up0Zq)Y{ z#zg~df68Fl*H>K$)Enjsc)s`8*glj9Ca~&zm2Ik(j{aG?dEr+-K95d%Qb(*5+vyb@ zU~-*)t6aRr_XDB5=hojo(C@|yK;h}tlV80tLN{-w$&~7@#fLq|D5W70cmTUw9G^7; znUWUV-tg$BJjfh@=Xlk&B53P$c{`2=6?OJ%749q4(peZM*|S(2gzcrEHF zoF0MiOPiaV-1Fa-%&PF}8*l9%cE|8JwnK^;7o-4!Cs=1bXVP0Ne0;$gNDnOU&BcXM zpnbzqgw~|`(jCAleY$|v^x2p7!R%}p11q!q{*YYWKPZle_nJ*0*m;(@iPX{9rmu43=|~Y<-i4 zhDOXOtF~SdB#6|c>uZ4Ck2gbx`@g(9i7^5AtVRmrf-vp{>8+N?&TuT%oO{Q>4C)RvvswqAk?Z>zw zBX9|o0y={_`-F7}T!xJ$fu|YpB0Ek9DE&4Z z4>Ulmmda!Fe27$e7LVG|@vk0iMunqCejkr>Zg8ap2{=#VDa%AOY~n{Le~8G>N7t>-Lz~{`vDS)zb5Nui zXci0AJ^OF$4&nMno}NMo?)#Jbmb?Cv%8r&#ajd?r`4Ua{m2U~5qlbX%5lF*ARK=F{ z?4?d~En7r3*Ek-(F;BL(l!x+f=RBxBtYWFd@}YDu>4gEJtF;5rYsHDWZj-{$;=hdC z0HjQw+pE72w)2N?z4dWM1`_~l*<=ekJK{j|L)kMwQcLSNZW02&HJsz2W{E(Ig_RAA zRy6OJ9))!k^Uoa9)7e9_UROt7p?2LLJpC-93_dLkW;Iyo==)z@lNt>LYE?(7rkJ72)IZ3ri$VnOFi=*g zFX)?1*Xv;K*D1vA>{!$+I62-6oHf@h{teHc*fvhym-@3sTlnQ=DQP4nz@d~PE^>C-kSQ`IH(5qzPLE8@MA+9EQ#)( zNdTk{OAleJ5Ml6vK0L8)cyzS8p)e^S8Y^GrgRDw&%MBr>D8r;m&}(z@@I3sKe*a(9b%H)F&O7;T-0}U0O zomdYZM*B-9=%ccpZ{Vk-0Cw82iBYz-s8*%W*ol2G8OTyl1QrE(8_@8XA&pd~!*|Q4 zLPx)3A7n(?3y}o5DQg&Vt?cn`!xazp#~XL=c7N^2{w|1DA=I67@9gw2CuC%d=8}86 z5G$OSPnxmytYgb<#^`8i;kz~&K%1482>3ibs#I?7iCTA{g}tm;65Xp=n!%_0EAwX$7CBl+Ic zxu66|Eo#F^NwGkS59p6bth5e9d?KPaumpM_k6;B~V$|S0D*|2MU&qo5;((x;A|Zv; zQjCbZ`Vi=Q>@F|Y)(9CZfsXhNs@s+`1qTpwnz>xiiq(2-51%pK*9J23m|UQVQ8|7T z1To;Yfj~@lM<^7ha20EF0jHe&!;F_TWXr&iwq3Evj6(qpKp(sfg+p0+1oEPjg##DR zIGfx#h{>j>CEysOjs@;k`xt8EQl!yMV6DphXRnPC@9Xj&GwC+-9|9)QYj1zs4}VyF zUZjGO7r?3g@5!gPtE_k_Pw@sOUe0{b7jR4b{de3p}Uucj$aq>o;e1wA3Y{^~{2>E#6rGISy*tGshjdmw0HRe&y)!JU6{x{9qQ>|H|v4rrYft#wkI!TrsAV0HP^Mj8EEtnfr! z02S_YX#DP{dSd- zxf9@du8}3anX1K|cM#Rr$OZYg+i&yn73CYwB1NZ-)`UR@<^%y?5(12yaBR%(AaQO#KEF{YFalz;0zq{Tly~CH_!L=^d;pbEZL={rNKhlV*g_jS_r8BUcXib*Zyd@`W{!Z z-}}y8rIsfGK>GIeXb_U13ZL+FQ2o($2~)zO7ImbJ%>1=3_im_m^XB~>Zick#6y;m` zASFaKrrxTqtwna_Rt`F%eLeC&%sRg;S?8Wv>kRKyj2aQfe{t#{H{9#EH?4IPuIfFD zHV^`pV^(Mzd~)J#;B9;a&Tvq9tU7CMh~NVG*9wP-hzJn#nQjZTnHz%%9ec7Yy8~dc z^5AC=Or=FQOJ94x*BZvJZ$h=wYM3;DBu`XayrZj&`iI&NS1-2+Fcn2f4Z*-gvo;)> zV(729sNz*nu=PF88H&xtp0Skym!K`Z%Qcs#G8L)m>FMpGvCD{IR>gOkqfyC)YV&Zo zoF%nfZ6`54D^KG!IQ_OWNyA}#A!MP3(Vn_rIq>5kQXx+kIwXL56rlA9?5x&LXhK0*Wl^F1;E1{K&nAQyFPzCUEDwZ1xqbGhQ$$9ek+@P zU>3UOC+&}E%FLx{AYph2G3CKeKcx>uC0R~V5H}>IX1>JUTmBi_is@RCs}N2q7lrxc z*FNou5JR^_TRd;%sXwFPa1Ev-pL^HN(PBcz_&ap z-L-Y{YnEY;IAPD}(+7CW;i62~eOfl}-ns}f&8%I}%ldw3894dbrNVvK3^$#A>r+-B z1EHaTnlg3=*=@9b=Je>uQ`Tl6;`VtltHH~&U5v1JPxC=8OH~FLDorI zH4odJ1(|k<1<6PW%4KgrcK}fAYoM$UFo9SU3(k~=Yob_iB*DYUXnetE4p3KM@EMvtkalSyVi>F-tKDqSwx4nEP~LxS zW9%^_2CMWDXZTPrzM32}xVMo~QK8(3z$Qqm@t7HO0`Og(-4$$1OWc3UMbn2wH4 z!oCTk%LNr<@G1Vbxz?D8xR-&IZr7;ip#ZwY)E=}m!3Ssn@7lF+rCX>No{h2d7VKA; zeA=E-_pxc}#K?XFD@XMP4yL)yld`$FDwiv%^S>^^*bM7zm1i;K*U20+gxG3+xZ-ri z3O#fjAcbz!kCoKnboy^x$P_VrB{PxCDvlURo}bN^=P@SV>a#nJ`^B#UYsV;>YzK2Y zif0b-PgeK%u9K4sq76^7zj$wyWmBd6Ssz4Vj_Rs73JjT)#xQ*Z@FeAHm|0KOwsEwdNZ!+Tqcvu%40x-0Q%+@{YL7FcdjQc_Fy zK(SS@VDR(yT&G_H#|Jq$2O>A z7&itHp=}2TpCnH#=ScZ?|M9sxI`fPfii?ha>HZNbzj{h&UKNbENj32)VD2oDz?-5* zl%hhty?w9I=G4(z+2U#+J6+J4%*W8@B7wIca9_8pt9u?$VcHF=uH}OZYVLBz<#Db! zg&2iTEfNF2rn(lz9LL@?iaXs-_$K zcgbiaL{-OqR~OX5m&jZVuB5lnm2lp|!qwZB-D$>Ywhli_#F^%csMBM46WV(;feJLF zR`-+483N)IQ71bS|X%9Rj zs;JRtUg;oUUsEHbxX0L;3xH+uzo#B|-UU*zYO2M7s!V=$L0`?cAq}%Bdsjz$oc#I^ z*d`|Z3OG;~xr7Mjzb|W97x9hbR?lx-JJD`je#}AL(7=%g@kJ1Nb6N>?j01TkiFIp(~(7!I4>&-BAs7m;8Hzu~8L`l5^m z_1}n(kE4c0^A=y0vbPqxR*=xFZh4Dy@d;h{D()Tsw1%eb5ru^-Ld5cqdL=Jt-n&+; z+%4)>s5xM~cP4up`QKL)1Iz9$u;=Ed=c$}l9)73N@@Zig3*gi>$IcgPqf!|z|0DIDFSqDpxgmDHD zK>tPzC4?=_uDKJHht|!bHwT&iPkLq%3&~pfBe{O4f1{=s7orbp1O#M4)y*6?u4_t> z;`uZn+kt-bzsxvUkn!F1+2){@qK3?B%+&P1nYTLW{@aIMOyEuJ*;XF@xA&Ph9dXaw z&I0~&XPE`oLsk(ZGqs!I5@>X4TLeRFANn1DhyIfgZ$;$4Q$YMH2s^2-w^8x&@Cf=k zuk!~+KX&pY$h6)yl~$+I8$4jF=uj=cGQZRMGB%1oqmI;)@V`xzO&XKI#s?Bh_Q5p+ zWUfcm&-ZTE&yoW3+W&}-cAk=;fwO~kY=ucocshsL>SysWhC1rV5W;(<{4qU+pJx5ZQVC~DCCTQDlcY*7BbI5mm5RCZihhTr0A;GaMyf+DKoe%Uwy{!MY zZ&*7Pkkp7*m3O}!j*0Ll#}J7bn_UvTU}7*EzWQELI6)Y!#98 zkXxS`-tu^->EPJ|sCuRZ$JDp#*Qja%+W!q43CwrE3%id?OSqGl3u3Ryn}06cJnpZ+ zc=qMa|4IS7#B4vZhiZQk5%0-8X;`6XfHpI+6##y7wX#tB-wZ~MD_cNq2c%SM2NJ}% z>9yKdSjHc;k&7fJm}IOKEePDbw@->Zd-l>YbJ{pllr(g72B_54?!o}0#Quvk)-|rF zh;XBU@hb9}8HnqRm?Y zyeYy=SI+1N2_ZIYhRsb(G7f6L{~OB4NN@807KH7O91-8m#SAy#hOEXX(D%zb>BMv) zZjEXJVUj#@_gN2+P}A?RjxPEx|HzHhEw+wT&u(uT#arR~zxlm+<3`j!&ZQt?5$D+l z{{H^u%e&ad5{(umoBE}r<~@;VIJea99s`5?I!&BZl26bt(QTjRxkFU!zr!V$V~vEqWo2##R%&BPb;@^j z8b#u2wB+%}50;ivBu&0G;Z0ktYd zE2jU82J2x{)z#MvbPs~q5j-E0mj{hrS-B?rt=ZSNEqQiIy}8`stt`{|7k_~;skt4}Rk?+NX7EYe7k~Ce&Hwu_F@T&51PcYbb-*Q(UdnPepd}>6lTZDw-Ef2d znWwhiJtGO-yZl_Y?gmVi?!W9qns?kuR^^qz4GD`3mI1{jB4DYX`j7jHZjwHOi4JPJ zVgd+s4+G;I4yRg|yf508yXWH;m-_qKFE{l+JVAy9XNNv%YZ73q`2eyi+^hST)rNVr zMyIMYEQo-|IY!#Xv4DYe`)Ft|Da5JP`jmu+{CDmO01){fJqGAPGI_(FTgGOZK0Knz zxsfkkR{XTBl^;}8oehGXukUqGpGJ{E-%O|4d&uX$crKSopO|$8L8T0OB{Io|yvB%IvfGtTFsU zCGY4`eMQH4#WsE*md1Cw z8-H`kFv?UEgx>6}VIAnBSI@}EwB(;5;9Q(N-*Z!1o8+e96UYTJzRTr_D8LXVn~M2Z zhyiu>bk87YM}RV?IB3QOQV?Fnz5h-H+}E#O#aisR#ky6WUe$Upw`r#0GxP*!KU;nt z{tRQ034SP%VMMv-UaNcA$5a>f?{&||wFV!)6R9gnwSR973eGF8 znwm;S(Qz?96M`CK9?9dH1g^{FsqmejCve$X_?6$eC{hC}5egH>rka?Eq4}_b1ZlI6 z>H0=WN6^hW1n5?n3<*(DLmedLPk>LVzfAb-1sXcqTgJX`RPP=VP-4+f)vcI7!v}2o zvx0DDfzuri@7qEblj2-uy0xa~gX+)LT_2Ax#jMebJyU4)yCknSEDyBeWs{V>I%o90 zEyc{9@2{<+<9!-GHsj6n#L(V;NZ@TPDH9snzK4g+;1e}3udhgk1VsnaV0m!CXP)WF zp(_mby)1uyP+e*&>6{yM(M~y8Tg6i15%I;=zdmTMJ#E*oEZb6=OWZ)(_i}TMIA&eh z#3Wm{+?VHHLqY{Y!C|yyhyvpD2dH;4XuwS&S?B&@0hffB3izXb)(14zH4!x*C4_mE zul8MHUW+qttRm>8T1`(5yqpZZHR$Otd0QDpM(6j|NXoayR_E3e=YltmJd9% zB(>DfUA>eVO;&c>l3N2;j_&&lyY^YfbiHr&KZWR(>UxbY=FIhzEouMF`j#9lG_-$# z(b4j+6BFMed(^RFg@lBPiy92cIaCw7+>w;^sdzEY*_oeGZH_$oQnL?AC!4FaGvcj? z9^(h}U}uZF|BJmmqRd@6pI93-$Y`{SWeBvfQ3~dL1)PF+za31qJP$J7B9Hi5)oWwv zX;Z~8C1qiD`9tyx%})Pm8~FNuP5-qr@`8Z!by^nf&t`6lr|0?4CX$iQN%Ui^+!pFZ~wYJn69Tk^3 zj%=Au7kN}a9+S*jQTo}T{#dJkb){fw$}A;qWG!xPL-$~1ZE#uXk@}F};14ZjzdvHU zCKF#yBsZp7rT^)xUmA!0ZzuDk!S|P%)SC7@51>d5%|s|}I{gkym?@*) z^JwrK1VFaAVaYSQtc39XrmNKoZh|DuzKrr)KGe=5GzTY<(~G`h&jR*ii|4m*-}YPB zQ53QpdixfcEf!p3;9$lz63tqTj-bw4H*9K>NiK*TkvYNjZ8f{Eq5m#Hgrc~iQovlo zMJ|)U&pq>1r03RA{ik|^@)FZLk7W$+##i}YMzkd_YSq8n5IC)weuef5Xd&o7{<=RM zSaW&i$JHPypqU_j81*VSIV|4$@1Gpy=8H)wu{F#=>PL(jAN^C~#+-f$o^2?God>lZ zZhjo<$%@f23S>5yc>0g2)Mrunapv91siU&u;$L^lTM7s$F}ChJ%3xJo9ad~9Pfs6G zQ^i$fmO(=c0S^9XnNfMUS_&3@LQKprWP&8vOMH2YG;yo-KbRMPc)Fg4+&#IE(XI89 z{EN?o&*O}g-!5|bc^&2LPS%r^^`hn$Ew>CxuN%6$lx;S*zBO`?Ec;j{l?Ph_2wvCj zOL?tRNj9y@8kCMQ3^4wCjD?4WmdKmSSn+hP@xJS}#*kaqK!HEyT_85mxlrfA8mhoQ2fr=JZd<$t%z1br{Oou%2wJk^@UF zbxDa5H*bq~QnR}pzRk05k>ng|Lod(LjYS}w7U(jVD{6Q8z%^~ku#eDv zWmWyqZt0wk$JF#KbF}1{uQ6}hY>;i9+8fb{6(R5b+`<|TXG*UIC_YVi$B)kRb>Fd28XU9K)_ya3O5_6N zwQZzvL(}h_%CnZjDR%YE9S^hu)PiRE$f}s|w8O}yZ<&Ar7aC$`O2g|)m)2CYjUUSHXH(T+owqeUU9vThj~tJE5llQ*MWO4(XxQq><3 zU$d+3CkuQpv$(yZ{77BH-tYOV2;wK&+WBxERz7?PtjQ-eoNK?ST&w*S-TeQ0oh`bZ zEjqXEdtRK_WS2huIUz{-?9#ESi0cjWU|SBI_X+~BSDEr^w3)m=>{Ch6PjOn2mGhGZ zwem;G%0K0cb-8$i4hnKf_))h!nu&Yk%p~0JH*ZpU`^9xx4(CUcdk)Tcd!F?tnx6-) zz^mDqHT-|=UHel~X&9!OwrOW`rd;p0olG&@G)vsb)>0!iSJb3jZ9%)Zm5P=(Qb9~n zx6)YiT8b!$HZqx?-|=7AUz<5UoH;Y!Ip=%c%X!Xs z&ilMInOU{+VN1%x#IWl(1d{{xw{E*BsszdPr!b0YE*EQ+)`F#BDEFRC#W0-%eLF<- zy>8RYHLv^|NE>Sg7&7DL1WP-Q{pRU6Ve_jKaQ#faJv_8W|XHK_}ye@a2U& z2OPsq0X0H+4D|I?CQkiQSK~5GpMlKWD5Ws!jg5irdl>dpdm8h@%N zG3-~dw>vg%5fDPn;v$&dL!)-wJY#m<`MsMKsEG}SPl`xE7cPX9C;(lNR-l8(yF!gy z$;Igsk8}{*mark)bP`$@*)w4=?Bn?JTTRQ$;&rq`6(hRfz)OPG7!@CMr%BTlI}q4g zHJT&uH_f_$q>Gp>9nmR3t-)-qzZ)PeGg}~k;0B<7ob%#k217x(Za6XEQ}7+7rHTe;(oVmq*jU9m7Ol#{m7JBZQt6)Q48+;|ZaW8l z%1oU%XGjM6hZ@^c=P!`emco`6`s}X&kQYF|(ZE11%5hlVeg*coQ!hsoCV{%N?5aM} z^TF_GL9e=3M$h+tJgLB=K z9Ru3w^jT_tem=_hAQ4o@;6qI}ea~LCh7AgV&p|Kvud`m=C5QD|9h8k3jhUEO7Zxy^ z%FCnk{^<<>f^X1sVH?Gb1r~eo$3h!G*&5Im&N8=nu>E9t_%5=N1|+y0~m;qisdMtxM)v?|)6o*Ndr&-gk1V6=-;n`DDj7L}L(-1eGZ zU0u!VkeGn~4I7sK?uqDWeooKjE#?FuMBsR4dB@OQm)bt2+s5*-mCKtW1==EtG|f+&YrFA&NXS;yzy<3 zYmB*SV!b;&pV5<#wMjg&*n=Apf!bvc+K`b%hU7BXgrEvI;+*Tdi~9=EsDcSZOgii| zBaz^19tzsm1YjsCDz2|-b$J($ek46D06)we*URx#>gAY+a3t}njT@+WYa@0Np5X(aOw>x1)`al*;~)w8UNA22q%HJh^ErYoqaBYslz; z1UgSDuK|r&ghJ7iu{cnM=jWi{X1xcRLf5Wd4UCR%Jk55bTIic`79M6UrA!{`@B&5$ zB+ix%A>p0yQ8-V4*8n&Pg5%lnT_M7MfRRFU8pDx^NOywC0s?Ucz9<6G4MT%KzIo37jE=8X(qwK3JswGh1Ih=BJIwb8&-f4JihVi& literal 0 HcmV?d00001 diff --git a/test/goldens/pages/goldens/fsa_page_empty_desktop.png b/test/goldens/pages/goldens/fsa_page_empty_desktop.png new file mode 100644 index 0000000000000000000000000000000000000000..0c4595e7eabbac998168b2416b96fac179f29c46 GIT binary patch literal 10023 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 W>@Bx=RV7LkP*c%TE`I##!~X%MsVf`+ literal 0 HcmV?d00001 diff --git a/test/goldens/pages/goldens/fsa_page_mobile_dfa.png b/test/goldens/pages/goldens/fsa_page_mobile_dfa.png new file mode 100644 index 0000000000000000000000000000000000000000..82e29f4a21ce7df8b0a75b189e7fef132f05df8a GIT binary patch literal 53901 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